钱包弹出“添加网络”确认页时,很多人只扫一眼网络名就点了确认。这张确认页其实是网站替你填好的一份网络配置单:它告诉你去哪里查链、链叫什么、单位币叫什么,而真正裁决“对不对”的只有其中一个字段。把确认页逐项拆开读,比记住某个钱包某版界面的按钮位置可靠得多。
确认页从哪条协议来
钱包给网站用的标准接口是 EIP-1193 定义的 Provider API,添加网络对应 wallet_addEthereumChain 这个方法,出自 EIP-3085。提案规定:请求里只有 chainId 是必填项,其余字段钱包可以要求、可以忽略;接口成功时返回空值,失败时返回错误。也就是说,页面上你看到的链名、货币符号、浏览器链接,全部是网站方提交的声明,钱包只保证 chainId 必须合法存在。
一份典型参数结构长这样(数值仅作格式示意):
chainId: 0xa(十六进制字符串)
chainName: 某个网络的名字
nativeCurrency: { name, symbol, decimals }
rpcUrls: 一个或多个接口地址
blockExplorerUrls: 区块浏览器地址
逐项核对:每一项该拿什么对照
chainId 是链的唯一身份,按 EIP-155 的设计,它被编进交易签名字段 v(取值为 {0,1} + CHAIN_ID * 2 + 35),一条在链 A 上签好的交易在链 B 上会因身份不符而不可用。所以它同时是“这条链是谁”和“签名锁在哪条链”的双重凭据,核对它应当用该网络的官方文档,而不是对照网站给你的确认页本身。
rpcUrls 决定你的钱包以后向谁查余额、广播交易。可以打开文本编辑器,对每个地址单独发一个带 eth_chainId 方法的 JSON-RPC 请求,返回的十六进制值必须与 chainId 一致;否则就是用 A 链接口挂着 B 链名片的错配配置。
nativeCurrency.decimals 是单位币最小单位的换算指数,和 ERC-20 代币的 decimals 同一套语义。这个字段错了,界面显示的钱数和链上真实数量会差若干个数量级。
chainName、图标、浏览器链接纯粹是显示层素材,钓鱼配置最喜欢在浏览器域名这类细节里动手脚,将来查账跳进假浏览器才是二次伤害。
两个数字别弄混:加网络的参数 vs 签名的输入
同一条链在两套系统里有两种写法:chainId 是十进制整数(以太坊主网写 1),RPC 返回值与添加参数则按协议写成带 0x 的十六进制字符串(主网写 0x1)。把十进制的 137 当十六进制填成 0xd,钱包会按规范拒绝——因为协议要求它必须是合法十六进制字符串;真正危险的反而是两个都合法却互不相等的值:添加时填 A 链的标识,签名时钱包又按另一条链组装,交易发到谁那里就不由你了。
拒了之后怎么办
拒绝请求没有任何链上后果,它只是不采纳这份配置单。想继续操作,先从该网络官方文档拿到十进制链标识、RPC 与浏览器地址,再对照确认页逐项核对;发现链标识、接口返回的链标识、官方文档三者任一不一致,就不要签。事后怀疑网络配置错了,可在钱包的网络管理里查看当前激活网络的链标识,与官方值比对;确认标识不符时,资金不会凭空消失,你原来账户在这条链上的余额永远在你原来的账户里。
为什么“同名链”也不能凭名字认
链名是自由文本,两个配置写同一个名字完全可以指向不同的链;社区名录网站能帮你发现一条链,但它不是权威,条目同样由贡献者提交,个别冷门链条目存在被错误维护甚至恶意指向的可能。稳妥的对照顺序是:先查该网络自己的官方文档给出的链标识与接口地址,再用 eth_chainId 对接口做实测,最后才参考第三方名录做旁证。三条信息源里,任何两条冲突都应停下来,而不是挑一条“看起来更主流”的。这套顺序在一次核验里多花两三分钟,换来的是一次签名不会静默落到身份错误的链上。
本文不构成投资建议;添加网络只改变你本地钱包的配置,不产生任何链上资产变动,也不推荐任何具体网络或资产。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。