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
MUST 与 eth_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.