Alert Source Discuss
🛑 Withdrawn Standards Track: Interface

EIP-2786: Ethereum Provider 连接/断开连接事件

Authors Micah Zoltu (@MicahZoltu), Erik Marks (@rekmarks)
Created 2020-07-15
Discussion Link https://github.com/ethereum/EIPs/issues/2787
Requires EIP-2700

简述

当以太坊 Provider 变为连接或断开连接时,它将发出一个 connect/disconnect 事件。

摘要

当 Provider 可以为至少一个链提供 RPC 请求服务时,则称该 Provider 为“已连接”。 当 Provider 无法为任何链提供 RPC 请求服务时,则称该 Provider 为“已断开连接”。 当 Provider 从“已连接”状态切换到“已断开连接”状态时,它将发出一个 connect 事件。 当 Provider 从“已断开连接”状态切换到“已连接”状态时,它将发出一个 disconnect 事件。

动机

当应用程序连接到以太坊 provider 时,应用程序可以收到可能发生的连接/断开连接事件的警报,以便应用程序可以适当地告知用户情况,这很有价值。 是否监听这些事件以及如何处理这些事件由应用程序决定。

规范

定义

已连接

当 Provider 能够为至少一个链提供 RPC 请求服务时,则认为该 Provider 为 connected(已连接)。

已断开连接

当 Provider 无法为任何链提供 RPC 请求服务时,则认为该 Provider 为 disconnected(已断开连接)。

事件

connect

如果 Provider 从 disconnected(已断开连接)状态转换为 connected(已连接)状态,MUST 向所有附加的 EIP-2700 监听器发出 connect 事件。 所有附加的监听器 MUST 使用参数 { chainId } 调用。 chainId MUST 指定已连接链的整数 ID,编码为十六进制字符串。 如果 Provider 支持 eth_chainId JSON-RPC 方法或其派生方法,则 chainId MUSTeth_chainId 的返回值匹配。 Provider MAY 以任何顺序调用附加的监听器。

理由

此 EIP 主要是一个回顾性 EIP,这意味着它编纂了一个已经存在的规范,因此没有太多改进的空间,例如为每个链设置一个连接/断开连接事件。

安全注意事项

以太坊 Provider 和客户端之间的关系是一种信任关系,在这种关系中,假设用户隐式信任以太坊 Provider,这就是它设法注入到客户端中的方式,或者客户端明确地引入了与其的连接。

版权

CC0 下放弃版权及相关权利。

附录 I:示例

// 连接
provider.on('connect', ({ chainId }) => {
  console.log(`Provider connected to: ${chainId}`);
});

Citation

Please cite this document as:

Micah Zoltu (@MicahZoltu), Erik Marks (@rekmarks), "EIP-2786: Ethereum Provider 连接/断开连接事件 [DRAFT]," Ethereum Improvement Proposals, no. 2786, July 2020. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-2786.