EIP-3085原文中的网络参数接口;chainName与chainId为不同字段,二者均不能单独证明网络可信。
EIP-3085原文中的网络参数接口;chainName与chainId为不同字段,二者均不能单独证明网络可信。

图片资料:官方来源

查看完整图片 ↗

在钱包里看到两个网络都叫“Ethereum”,不能据此认定它们指向同一条链。判断网络身份,先看 Chain ID,而不是 chainName。EIP-3085 定义 wallet_addEthereumChain 时,把 chainName 明确为人读名称,把 chainId 定义为按 EIP-155 表示的十六进制整数:名称供展示,ID 用于识别和签名。该提案目前处于停滞状态,不同钱包的落实程度并不一致,这一点后面还会展开。

假设一个请求写 chainName: "Example Chain"、chainId: "0x1"。0x1 解析为十进制 1,对应常见的 Ethereum 主网 ID。若另一个请求同样叫“Example Chain”,但 chainId: "0x89",名称相同、ID 不同,钱包不应把它们当成同一条链。名称可以重名、可以随意改写,Chain ID 才承担规范层面的网络身份。

但反过来也要谨慎:两个端点都报 chainId: "0x1",并不能单独证明它们指向真实同一网络。私有链、错误配置或恶意端点都可能复用同一个 ID。EIP-3085 要求钱包不允许同一 chainId 被重复添加,这是规范对钱包添加行为的约束,不是对端点真实性的背书。把 ID 当作“唯一且可信”的凭证,会高估它的作用。

Chain ID 与 RPC 端点也要分开看。规范要求钱包检查请求中的 chainId 是否匹配对应 RPC URL 的 eth_chainId 返回值,不匹配应拒绝添加。这只是校验步骤,不能把“匹配”当成 RPC 可信的证明——恶意或故障端点完全可能谎报 eth_chainId,让请求看起来一致。签名时钱包应使用提交的 Chain ID,而不是临时从端点取回的值;否则端点返回任意 ID,可能诱导用户为非预期网络签名。

添加成功也不等于切换网络。按该规范,即使钱包没有拒绝请求,也不能假定新链会被自动选中,是否切换属于钱包实现细节。用户添加后仍要检查当前活动网络,再发起交易。同样,添加一条链不表示资产已跨链到账,也不表示该链上的代币余额会自动出现。网络配置、资产桥接和余额显示是三件事。

实际操作中可抓住几个关键点:确认 chainId 是 0x 前缀的十六进制字符串并换算成十进制;比较两个网络是否使用同一 Chain ID,相同 ID 不应重复添加,不同 ID 即使名称一样也是不同网络;核对 RPC URL 的 eth_chainId 与配置是否一致,不一致先怀疑配置或端点,而不是继续签名;添加后确认钱包当前选中的网络,不要仅凭页面显示的名称判断;若余额或交易记录不符,先核对地址所在网络和资产所在链,不要用“添加网络成功”推断跨链结果。

还要注意钱包之间的差异。EIP-3085 允许钱包要求额外字段、拒绝请求,或自行决定“添加”的含义,因此不能称所有钱包都完全执行同一套行为。对读者而言,稳妥的判断是:名称用于辨认,Chain ID 用于规范层面的身份确认,RPC 返回值只作校验线索,签名前以钱包实际选中的 Chain ID 为准。

资料来源