WATS Wallet logoWATS Wallet
技术8 分钟阅读

为什么你的钱包显示不同的地址:EVM、Solana 与 TON 格式

一条助记词,三个毫不相像的地址——EVM 上的 0x、Solana 上的 base58、TON 上的 EQ/UQ。WATS 从同一条非托管恢复助记词派生出全部三者。本文讲清格式为何不同、校验和究竟能拦住什么,以及哪些习惯能杜绝转错链和形近地址的失误。

你的钱包在每条链上显示的地址各不相同,是因为每个生态都以不同的方式从同一条种子派生并编码地址:EVM 链把 secp256k1 公钥哈希成 0x 加 40 个十六进制字符,Solana 直接把 ed25519 公钥编码为 32–44 个 base58 字符,而 TON 则把账户哈希打包成 48 个字符的 EQ/UQ 字符串。这些格式都没有编码自己所属的网络,这正是同一个 0x 地址在 Ethereum、Arbitrum、Optimism、Base、Polygon 和 BNB Chain 上都归你所有的原因,也是转错链如此常见的原因。内置校验的强度并不一致:EIP-55 的大小写混排能发现打错的 0x 地址,TON 的 CRC16 能发现打错的 EQ/UQ 地址,而 Solana 的 base58 字母表只是避开了形近字符,并不会去校验它们。WATS 覆盖 Ethereum、Arbitrum、Optimism、Base、Polygon、BNB Chain、Solana 和 TON——密钥由你持有,WATS 从不持有密钥——并且它不支持 Bitcoin,因此 bc1 地址不在这幅图景之内。

一条助记词,三个毫不相像的地址

你的钱包在每条链上显示不同的地址,是因为每条链都以不同的方式从同一条种子构建地址。EVM 链把 secp256k1 公钥哈希成 0x 十六进制地址;Solana 直接把 ed25519 公钥编码成 base58;TON 则把账户哈希包装成带校验和与 bounce 标志位的 base64 格式。曲线不同,派生路径也不同——这些地址不可能一致。

这一切都不是 bug,也没有哪个钱包给你显示了错误的地址。这是同一个身份在每条链上的不同写法——而知道哪种写法属于哪里很重要,因为把资产发到正确的地址、却选错了网络,是人们丢失加密资产最常见的方式之一。

为什么同一条助记词在每条链上给出的地址不同?

本文提到的每个地址都可以来自同一条助记词。种子会成为一把主密钥,多链钱包再从它出发,沿着派生路径为每条链派生出一对独立的密钥——这条路径由 BIP-44 定义为标准化路线,并在 SLIP-44 中为每个生态登记了各自的 coin type:Ethereum 是 60,Solana 是 501,TON 是 607。(单链钱包,尤其是 TON 上的,有时会改用自己的助记词方案。)随后有两件事让结果彻底分道扬镳。EVM 链使用 secp256k1 曲线签名;Solana 和 TON 使用 ed25519 签名——这是完全不同的数学,因此即便这些密钥对源自同一条种子,它们之间也毫无关联。而且即使是共用同一条曲线的链,也会在其之上使用不同的路径和不同的编码。一条种子如何展开成整棵密钥树,可参阅什么是 HD 钱包

生态系统典型形态签名曲线内置校验
EVM(Ethereum、Polygon、Arbitrum…)0x + 40 个十六进制字符secp256k1EIP-55 大小写混排校验和
Solana32–44 个 base58 字符ed25519无——仅有安全字母表
TON(user-friendly 格式)48 个 base64 字符,EQ/UQ 前缀ed25519CRC16 校验和 + bounce 标志位

什么是 0x 地址?EIP-55 校验和有什么用?

在每一条 EVM 链上——Ethereum、Polygon、Arbitrum、BNB Chain 以及其余各条——你的地址是你的公钥经 Keccak-256 哈希后的最后 20 个字节,写作 0x 加 40 个十六进制字符。EIP-55 在不改变地址的前提下加入了一个校验和:字母的大小写排布是由地址本身推导出来的,因此钱包能在你发送之前标记出打错的字符。全小写的地址依然有效——它只是不携带可供验证的校验和。

由于地址仅来自你的密钥,同一个账户在每条 EVM 链上都拥有相同的 0x 地址。这很方便——一个地址到处通用——但也很危险,因为地址并不编码网络。在错误的 EVM 链上发送的代币,会到达另一条网络上的同一个地址:如果你掌握着密钥,通常切换网络就能把它们取回;但如果该地址属于交易所或合约,它们可能就没了。在 WATS 中,这是日常情形而非边缘情况,因为其支持的八条链里有六条——Ethereum、Arbitrum、Optimism、Base、Polygon 和 BNB Chain——共用那一个 0x 地址。

Solana 地址是怎么运作的?

Solana 地址就是公钥本身:一把 ed25519 密钥的 32 个字节,以 base58 编码——之所以选用这套字母表,是因为它剔除了容易混淆的字符 0、O、I 和 l。结果是 32–44 个字符,且区分大小写。这里没有 EIP-55 那样的校验和;安全字母表能减少打字错误,却无法发现它们,这也是应当复制而非手动输入的又一个理由。有个细节值得了解:SPL 代币并不直接存放在你的地址上——每种代币都存放在由它派生出的关联代币账户中。你的钱包会在后台打理这些账户;你要分享的仍然只是一个地址。

TON 的 bounceable 与 non-bounceable 地址是什么?

TON 为同一个账户提供了两种写法。raw 格式是工作链编号、一个冒号,再加 64 个字符的十六进制哈希——精确,但对人不友好。user-friendly 格式把同样的数据打包成 48 个 base64 字符,带有标志位和一个 CRC16 校验和,因此打字错误能被发现。真正要紧的标志位是 bounceable:通常以 EQ 开头的地址会告诉网络,若目标无法处理这笔转账就把币退回,这适合合约;以 UQ 开头的 non-bounceable 地址则无论如何都会完成投递,这适合个人钱包——现代钱包通常也会为个人钱包显示 UQ 形式。两种写法指向的是同一个账户,因此在别处看到不同的前缀,并不意味着换了收款目标。

交易所为什么要求填写 memo 或 destination tag?

在某些链上,交易所会把所有客户的充值汇集到一个共享地址之下——这在 TON、XRP 和 Stellar 上很常见——并用 memo(或 destination tag)把每一笔充值路由到正确的账户。memo 不是装饰:漏填它,你的币就会落进交易所的共享钱包而不会入账。它们通常可以通过提交工单找回,但过程缓慢且没有保证。规则很简单——如果充值页面显示了 memo,就把它当作地址的一部分。向你自己的自托管钱包转账则完全不需要 memo。

如何避免转错链——或转到形近地址?

三个习惯就能覆盖大部分风险。第一,核对链,而不是核对形态:0x 地址不会告诉你发送方选择了哪条网络,所以在任何资产开始转移之前,务必在两端明确确认网络。第二,小额试转:首次向一个新地址或经由一条新路径转账时,先发一小笔,确认到账,再把余下的发出去——用低廉的保险换掉昂贵的想当然。第三,重视地址投毒:攻击者会生成与你实际使用的地址首尾字符相同的形近地址,然后向你发送粉尘,好让这个假地址出现在你的交易历史里——等着你把它复制走。永远不要从历史记录里复制地址;使用保存好的联系人,并核对中间的字符,而不只是两端。一个好的多链钱包会在每个地址旁标注网络名称,而把 Ethereum、Solana 和 TON 放进一个应用却不会把它们弄混,正是这种设计存在的意义。

WATS 在其中的位置

WATS 用一个钱包同时运行在 Ethereum、Arbitrum、Optimism、Base、Polygon、BNB Chain、Solana 和 TON 上,因此上面这三种格式,正是你最终会并排持有的那些地址——六条 EVM 链共用一个 0x 地址,Solana 上一个 base58 地址,TON 上一个 EQ/UQ 地址,全部出自同一条恢复助记词。它在全部四款产品中都保持完全非托管——Chrome 扩展、移动应用、Hot Wallet 以及 NFC 金属卡:密钥由你持有,WATS 从不持有密钥。在一篇讲地址的文章里,有一点值得就这张卡明确说清楚——它不存储任何私钥。它以轻触方式为始终留在 WATS 应用内的密钥完成认证,并带有唯一的卡片 ID,仅与一台设备配对。

Bitcoin 是必须坦承的空白:WATS 并不原生支持它,因此 bc1、1 和 3 开头的地址不在这一组之内。在它所覆盖的八条链之内,网络费用以单一代币 ATS 支付,而不必分别持有每条链的原生 Gas 代币——在 EVM 链上通过 ERC-4337 账户抽象实现,而 ATS 本身是一种 LayerZero OFT,因此单一余额即可全链通用。这并不是折扣;它改变的是由哪种代币来支付费用。ATS 的供应量正从 1 亿枚销毁至 3000 万枚。

结语

不同链上有不同的地址,是这些链自身构造方式的属性,而不是钱包的 bug:一条种子,不同的曲线,不同的派生路径,不同的编码。你当然可以去读懂格式,但绝不要指望它告诉你网络——在两端确认链,在任何新路径上先做一次小额试转,把交易所的 memo 当作地址的一部分,并从保存好的联系人而非交易历史中复制地址。如果你希望这三种格式集中在一处,而不是分散在三个应用里,具体的一步是从下载页安装 WATS:一条非托管的恢复助记词,背后是你在 Ethereum、Arbitrum、Optimism、Base、Polygon、BNB Chain、Solana 和 TON 上的账户,费用以 ATS 支付,而不必在每条链上另备一种原生 Gas 代币。

常见问题

我的地址在 Ethereum、Polygon 和 Arbitrum 上是同一个吗?

是的——对于普通的钱包账户,同一把密钥在每条 EVM 链上都会生成相同的 0x 地址,因此在 WATS 中,一个账户在 Ethereum、Arbitrum、Optimism、Base、Polygon 和 BNB Chain 上显示的地址完全相同。不过地址并不编码网络:发送时你必须自己选对链。交易所的充值地址是例外——交易所可能只对某一条特定网络入账,因此务必严格按照它的说明操作。

WATS 会显示哪些地址格式?有 Bitcoin 地址吗?

WATS 的所有地址都派生自同一条恢复助记词:一个在 Ethereum、Arbitrum、Optimism、Base、Polygon 和 BNB Chain 之间共用的 0x 地址、Solana 上一个 32–44 个字符的 base58 地址,以及 TON 上一个 48 个字符的 EQ/UQ 地址。WATS 完全非托管,因此这些密钥属于你,WATS 从不持有密钥。这里没有 Bitcoin 地址,因为 WATS 并不原生支持 Bitcoin——bc1、1 和 3 开头的地址属于 WATS 未覆盖的生态。

如果我向交易所转账时漏填了 memo 会怎样?

你的币会到达交易所的共享充值钱包,但不会被记入你的账户,因为正是 memo 用来标识你的身份。它们通常并没有丢失——多数交易所可以通过工单人工入账——但流程缓慢且没有保证。如果充值页面显示了 memo 或 destination tag,就把它当作地址中必填的一部分,绝不是可选字段。向 WATS 这样的自托管钱包转账则不需要 memo,因为那个地址只属于你,而非共享地址。

什么是地址投毒?如何避免?

地址投毒是一种攻击:有人生成一个与你实际使用的地址首尾字符相同的形近地址,然后向你发送一笔粉尘交易,让这个假地址出现在你的历史记录中。如果你之后从那段历史里复制地址,资金就会流向攻击者。避免的方法是:绝不从交易历史中复制地址、保存经过核实的联系人,并在签名前核对中间的字符,而不只是两端。