跨链地址的通用信封:ERC-7930 二进制格式怎么读 图 1
跨链地址的通用信封:ERC-7930 二进制格式怎么读 · 图 1

跨链地址的通用信封:ERC-7930 二进制格式怎么读

0xd8dA...6045 这样一串地址,放进以太坊是一个人的账户,放进另一条链可能什么都不是,甚至撞上别人的账户。跨链应用需要一个办法,把“地址”和“它在哪条链”绑成一个不可拆的整体。ERC-7930 给出的答案是互操作地址(Interoperable Address):一个版本化的、长度前缀的二进制信封。该提案在 ercs 仓库的状态是 Review(评审),创建于 2025 年 2 月 2 日,配套的序列化规则由 CAIP-350 这一跨链标准文档的各链档案负责。

信封里的六个字段

按规范给出的结构,一串互操作地址从左到右依次是:两字节的版本号(当前第一版固定为 0x0001,大端序);两字节的 ChainType,对应 CASA 的一个命名空间,告诉解析器后面的字段该怎么读;一字节的 ChainReferenceLength,说明链引用占多少字节,可以为零,此时信封里不带链引用;变长的 ChainReference,按该命名空间在 CAIP-350 里的档案序列化;一字节的 AddressLength;最后是变长的 Address,装的是按同一档案序列化后的地址字符。规范还规定,如果要展示这种地址,推荐用小写十六进制字符串的形式。

跨链地址的通用信封:ERC-7930 二进制格式怎么读 图 2
跨链地址的通用信封:ERC-7930 二进制格式怎么读 · 图 2

地址为零时它是谁

有个巧妙的特例:AddressLength 为零时,这串信封不再指向某个账户,而是链标识符(Chain Identifier),专门用来指代一条链本身;但链引用长度和地址长度不能同时为零。这样,同一套编码既能表达“某链上的某地址”,也能表达“某链”这个概念,跨链协议可以统一处理。规范示例里就有一条 Solana 主网的链标识符,作为对照,以太坊主网地址的信封则用 ChainType 0x0000 标识 EVM 命名空间。

和 ERC-3770、ERC-7828 的区别

规范把带链信息的写法统称“链特定地址”,互操作地址只是其中一种。ERC-3770 走的是人类可读路线,形如 arb:0xd8dA...6045 的文本前缀;ERC-7828 的互操作名字则用域名式名称承载链上下文。ERC-7930 面向的是合约与协议之间传递的字节:它紧凑、无歧义、可扩展到任意长度地址(比如非 EVM 链更长的公钥哈希),这正是 ERC-7786 跨链消息网关把发送方和接收方字段定义为互操作地址的原因——消息在链间流转时,双方身份必须自带链上下文。

读它时要注意什么

一个真实的误配场景

没有链上下文的地址会造成什么损失?设想跨链桥允许你在表单里填“目标地址”,而这条链的地址格式和以太坊一样是 0x 开头四十个十六进制字符。你手上有一串本来打算发往某条 EVM 侧链的地址,填进了主网提款表单——字符串完全合法,校验全部通过,资产进了一个可能根本不存在、或属于他人的账户。链特定地址编码的价值就在这里:从格式层面就区分“这是哪条链上的谁”,让误用在解析阶段报错,而不是在链上成事后追悔。ERC-7930 选择做二进制而非文本前缀,是因为它的目标用户主要是协议:协议字段里的地址一旦带上链引用,中间任何环节——网关、中继、索引器——都不用再靠上下文猜链。这也是为什么规范把它与 ERC-3770 文本前缀、ERC-7828 名字式写法并列为“链特定地址”的三种形态:面向人用前缀和名字,面向机器用互操作地址。

第一,ChainType 只说明命名空间,链的精确身份靠 ChainReference,解析依赖 CAIP-350 对应档案,工具版本过旧可能解不新链。第二,它是二进制格式,人工核对时容易看漏一字节,尽量用工具解析而不是肉眼比对长度。第三,版本字段为未来演进留了口子,未来的新版本会在单独的 ERC 里定义,见到版本一以外的信封,先查定义再下结论。对普通用户来说,这套格式多半藏在钱包和桥的界面背后,但理解“地址必须带链”这一点,就能明白为什么跨链取回地址填错链会造成损失。本文为机制说明,不构成任何投资建议。