Alert Source Discuss
Standards Track: Interface

EIP-695: 为 JSON-RPC 创建 `eth_chainId` 方法

Authors Isaac Ardis <isaac.ardis@gmail.com>, Wei Tang (@sorpaas), Fan Torchz (@tcz001), Erik Marks (@rekmarks)
Created 2017-08-21
Requires EIP-155

简述

eth_- 命名空间的 JSON-RPC 方法中包含 eth_chainId 方法。

摘要

eth_chainId 方法应该返回一个 STRING 结果,该结果为十六进制格式的整数值,描述了用于签名重放保护交易的当前配置的 CHAIN_ID 值,该值由 EIP-155 引入。

动机

目前,虽然我们可以使用 net_version RPC 调用来获取当前网络 ID,但没有 RPC 用于查询链 ID。 这使得无法使用 RPC 确定当前的实际区块链。

规范

eth_chainId

返回当前配置的链 ID,该值用于重放保护的交易签名,由 EIP-155 引入。

返回的链 ID 应始终与当前已知头块中的信息相对应。 这确保了此 RPC 方法的调用者始终可以使用检索到的信息来签名构建在头之上的交易。

如果当前已知的头部区块未指定链 ID,客户端应将任何对 eth_chainId 的调用视为该方法不受支持,并返回合适的错误。

参数

无。

返回值

QUANTITY - 当前链 ID 的整数。

示例

curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":83}'

// Result
{
  "id": 83,
  "jsonrpc": "2.0",
  "result": "0x3d" // 61
}

理由

ETH/ETC 客户端可能会意外连接到 ETC/ETH RPC 端点而不知情,除非它尝试签名交易或获取已知已使用链 ID 签名的交易。 自那以后,这给 MetaMask 等应用程序开发人员添加多链支持带来了麻烦。

向后兼容性

不相关。

安全考虑

消费者应优先使用 eth_chainId 而不是 net_version,以便他们可以可靠地识别他们正在通信的链。

实现者应注意正确实现 eth_chainId 并促进其使用,因为链 ID 在EIP-155 中描述的重放攻击预防中至关重要,并且消费者将依靠它来识别他们正在通信的链。

实现

参考

返回值 QUANTITY 遵守标准 JSON RPC 十六进制值编码,如 Ethereum Wiki 中记录的那样。

版权

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

Citation

Please cite this document as:

Isaac Ardis <isaac.ardis@gmail.com>, Wei Tang (@sorpaas), Fan Torchz (@tcz001), Erik Marks (@rekmarks), "EIP-695: 为 JSON-RPC 创建 `eth_chainId` 方法," Ethereum Improvement Proposals, no. 695, August 2017. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-695.