跳到正文

链 ID

以验证为先的指南,涵盖 EVM 链 ID、EIP-155 传统交易重放域、类型化交易、CHAINID、钱包与 RPC 核验、EIP-712 域以及非 EVM 网络标识符。

更新于

仅供教育参考,不构成投资、法律或安全建议。链 ID 匹配可以降低特定重放风险,但不能验证 RPC、网络、合约、资产、签名请求或最终状态的真实性。

直接答案

在 EVM 生态系统中,链 ID 是一个配置整数,用作重放域参数。EIP-155 将其绑定到受保护的传统交易签名;类型 2 等类型化交易格式将其编码在各自的签名载荷中;CHAINID 在 EVM 执行期间公开该值;eth_chainId 则通过 JSON-RPC 报告该值。这些是相互关联的接口,而不是通用的身份证明。

链 ID 不保证在全球范围内唯一或永久不变。私有网络和争议性分叉可以复用该值,RPC 也可能提供虚假信息;同一地址在不同链上可能具有不同代码与状态。EIP-712 的链 ID 域字段是可选的,而原始消息和非 EVM 系统采用不同的重放防护及网络身份规则。因此,正确使用链 ID 还必须核验具体签名机制、端点、创世状态或检查点以及应用域。

运作机制

  1. 首先识别生态系统和标识符语义:EVM EIP-155 整数、EIP-712 域、CAIP-2 命名空间引用、Cosmos 字符串链 ID、Solana 创世哈希或其他机制。切勿跨生态系统比较没有命名空间的数字。
  2. 固定可信网络快照:RPC URL、预期链 ID 的十进制和十六进制表示、创世状态或已最终确认的检查点、链头区块、客户端配置、关键合约 codeHash 及来源时间戳。钱包中的网络名称和图标是不可信元数据。
  3. 对 EVM 签名查询 eth_chainId,并在不损失精度的前提下解析十六进制 JSON-RPC 数量。将规范化整数与预期配置及钱包提供者状态比较;不得以 net_version 替代,并应在构造签名前拒绝任何不匹配。
  4. 重建准确的签名域。区分不受保护的传统交易、受 EIP-155 保护的传统编码与类型化封装;对于 EIP-712,应核验域字段、verifyingContract、nonce 和截止时间;对于中继意图或智能账户意图,应检查协议内部哈希。
  5. 核验当前链上的执行目标:接收方、价值、调用数据、代币地址、合约代码或代理实现、账户 nonce、费用及模拟状态。链 ID 可以隔离签名域,但不能证明其中任何对象真实无误。
  6. 将 EIP-1193 chainChanged、账户变更与断开连接视为严格状态边界。丢弃缓存的报价、授权额度、nonce、模拟结果和签名请求,重新读取链与目标,并且只把经过复核的原始交易广播到已固定的端点。
  7. 在目标链上核对交易:原始签名字节及哈希、RPC 接收结果、收据状态、区块号和区块哈希、nonce 使用情况、状态变化及所需最终性。监控链分裂、ID 变更、L1/L2 域混淆及提供者漂移;遇到无法解释的差异时应默认拒绝继续。

算例

  • 十六进制与十进制 RPC 门禁。 Base 的十进制链 ID 为 8453eth_chainId 将其表示为 0x21052 * 4096 + 1 * 256 + 0 * 16 + 5 = 8453。以太坊主网为 1 = 0x1,Arbitrum One 为 42161 = 0xa4b1。如果钱包预期值为 8453,收到的却是 0x1,就必须在签名前中止,而不能信任界面显示的网络名称。
  • 受保护传统交易的 v 值。 对于 EIP-155 传统交易,v = 35 + 2 * chainId + yParity。链 ID 为 1 时,v 值为 3738;链 ID 为 61 时,v 值为 157158。反向计算时,floor((37 - 35) / 2) = 1。该算法不适用于类型化交易的 y-parity 字段,也不适用于使用 2728 的不受保护传统签名。
  • 类型化交易与错误链拒绝。 类型 2 载荷绑定 chain_id=8453。假设使用 21,000 gas,基础费为 20 gwei,最高优先费为 2 gwei,最高费用为 30 gwei,则有效燃料价格为 min(30, 20 + 2) = 22 gwei,费用为 21,000 * 22 gwei = 0.000462 ETH。正确执行规则且配置为 ID 1 的链会因签名域不匹配而拒绝该载荷,因此拒绝本身不会在该链上消耗燃料费;即使在 ID 8453 上,该交易仍可能因其他原因失败。
  • 非 EVM 与双重标识符。 Cosmos EVM 部署可以同时采用 Cosmos SDK 字符串 ID local-1 和独立的 EVM 整数 ID 262144 = 0x40000。Cosmos 原生签名使用该字符串及其账户编号和序列;EVM 交易签名使用整数域。Solana 则公开创世哈希,并在交易消息中使用近期区块哈希或持久 nonce,而不是 EIP-155 整数。

风险

  • 连接到错误的 RPC 端点或钱包当前链。
  • 信任恶意 RPC 对链 ID、状态或广播结果的虚假报告。
  • 混淆链 ID 的十六进制和十进制表示。
  • 使用不安全的数值类型解析大型链 ID,导致精度损失。
  • net_version 当作始终等于 eth_chainId
  • 漏掉 EIP-1193 chainChanged 事件或网络切换竞态。
  • 切换网络后继续使用缓存的 nonce、报价、授权或模拟结果。
  • 假设链 ID 已在全球登记且绝不冲突。
  • 在复用同一链 ID 的私有网络或分叉间签名。
  • 未定义分叉更改或保留 ID 时的处理方式。
  • 接受没有 EIP-155 域的不受保护传统交易。
  • 把传统交易的 v 公式用于类型化交易或其他签名。
  • 假设原始消息或 personal_sign 请求包含链域。
  • 在 EIP-712 域中遗漏或错误编码链 ID。
  • 遗漏 verifyingContract、应用 nonce、截止时间或用途。
  • 仅凭合约地址相同就信任它,而不比较代码和状态。
  • 混淆 L1、L2、桥接源端和目标端签名域。
  • 忽略中继意图、许可或智能账户操作的内部域。
  • 把钱包添加网络元数据、区块浏览器标签或图标当作网络认证。
  • 把 EVM 语义套用到 Cosmos、Solana、Bitcoin 或其他协议。

常见误区

  • 链 ID 是全球唯一且永久有效的官方登记编号。
  • 正确的链 ID 可以证明 RPC 端点、网络和合约真实可信。
  • 每个以太坊签名都会自动承诺链 ID。
  • 不同链 ID 可以防止每一种签名消息和应用意图被重放。
  • 每条区块链都使用 EIP-155 式整数链 ID。

相关主题

来源

导航

搜索知识库...