Alert Source Discuss
🚧 Stagnant Standards Track: Interface

EIP-2015: wallet_updateEthereumChain RPC 方法

添加一个 RPC 方法来在 EVM 兼容链之间切换

Authors Pedro Gomes (@pedrouid), Erik Marks (@rekmarks), Pandapip1 (@Pandapip1)
Created 2019-05-12
Discussion Link https://ethereum-magicians.org/t/eip-2015-wallet-update-chain-json-rpc-method-wallet-updatechain/3274
Requires EIP-155

摘要

本 EIP 添加了一个钱包命名空间的 RPC 端点 wallet_updateEthereumChain,提供了一个用于切换链的标准接口。该方法接受 chainIdchainNamerpcUrlnativeCurrencyblockExplorerUrl 的最小参数。

规范

本文档中使用的关键词“必须 (MUST)”,“禁止 (MUST NOT)”,“需要 (REQUIRED)”,“应该 (SHALL)”,“不应该 (SHALL NOT)”,“推荐 (SHOULD)”,“不推荐 (SHOULD NOT)”,“可以 (MAY)”和“可选 (OPTIONAL)”按照 RFC 2119 中的描述进行解释。

本提案向钱包的 web3 提供程序 API 添加了一个方法:wallet_updateEthereumChain

wallet_updateEthereumChain

wallet_updateEthereumChain 方法用于切换到网络,并在钱包尚未识别该网络时将其注册到钱包。

wallet_updateEthereumChain 方法接受一个参数,即 EthereumChainSwitchRequest 对象,定义如下:

interface NativeCurrencyData {
  name: string;
  symbol: string;
  decimals: number;
}

interface EthereumChainSwitchRequest {
  chainId: string;
  chainName?: string;
  rpcUrls?: string[];
  nativeCurrency?: NativeCurrencyData;
  blockExplorerUrl?: string;
}

chainId 是符合 EIP-1550x 前缀的链 ID。chainName 是链的建议的人类可读名称,将显示给用户。 rpcUrls 数组是给定 chainId 的 RPC 端点列表。 nativeCurrency 对象建议应如何显示本地货币。 它的参数 namesymboldecimals 应该像 ERC-20 中那样解释。 最后,blockExplorerUrl 应链接到与给定 chainId 兼容的区块浏览器。

chainId 之外,所有键都是可选的。 除 chainId 之外的所有键都是对钱包的建议。 钱包可以选择忽略其他数据或将其显示给用户。 钱包应在切换或添加链之前提示用户。 钱包还应存储常用链的默认数据列表,以避免网络钓鱼攻击。 钱包必须在使用每个 RPC url 发送其他请求之前对其进行清理,包括确保它对 net_versioneth_chainId 方法做出正确的响应。

如果活动链与请求的链匹配,则 wallet_updateEthereumChain 方法返回 true,无论该链是否已处于活动状态或之前已添加到钱包中。 如果用户拒绝该请求,则必须返回代码为 4001 的错误。

理由

wallet_updateEthereumChain 方法旨在尽可能简单,同时仍为钱包切换到新链提供必要的信息。 chainId 是唯一必需的参数,因为它是保证唯一的参数。 包含 chainName 是为了提供链的人类可读名称,包含 rpcUrls 数组是为了提供链的 RPC 端点列表。 包含 nativeCurrency 对象是为了提供有关应如何显示本地货币的建议。 最后,包含 blockExplorerUrl 是为了提供指向链的区块浏览器的链接。

wallet_updateEthereumChain 方法在 wallet_ 下命名空间,以避免与其他方法冲突。 wallet_ 前缀被其他特定于钱包的方法使用,例如 wallet_addEthereumChainwallet_switchEthereumChain

向后兼容性

此 EIP 完全向后兼容。

安全考虑

服务器端请求伪造 (SSRF)

rpcUrls 参数是链的 RPC 端点列表。 钱包必须在使用每个 RPC url 发送其他请求之前对其进行清理,包括确保它对 net_versioneth_chainId 方法做出正确的响应。

网络钓鱼

钱包应该存储常用链的默认数据列表,以避免网络钓鱼攻击。

版权

版权及相关权利已通过 CC0 放弃。

Citation

Please cite this document as:

Pedro Gomes (@pedrouid), Erik Marks (@rekmarks), Pandapip1 (@Pandapip1), "EIP-2015: wallet_updateEthereumChain RPC 方法 [DRAFT]," Ethereum Improvement Proposals, no. 2015, May 2019. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-2015.