一串地址读三段:CAIP-76 里的 Hedera 账户写法与 HIP-15 校验尾缀 图 1
一串地址读三段:CAIP-76 里的 Hedera 账户写法与 HIP-15 校验尾缀 · 图 1

一串写着 hedera:mainnet:0.0.123-vfmkw 的字符,在钱包里同时回答三个问题:哪条链、哪个账户、以及这串抄写有没有出错。它背后是两份文档的接力:Hedera 的链标识规定在 CAIP-75,账户地址的扩展写法在 CAIP-76——Account Address for the Hedera Namespace,2021 年 11 月 1 日起草,现状态 Superseded,治理文本搬入了 ChainAgnostic/namespaces 仓库;可选尾缀的校验码算法则另有出处,是 Hedera 官方改进提案 HIP-15。

为什么要为它单开一份文档

父规范 CAIP-10账户ID为什么必须带链? 把账户地址大体限定在字母数字的字符集里,而 Hedera 的账户编号天然带着点号分段——这是 HIP-15 定义的标准写法 shard.realm.account 的形态。CAIP-76 的开场白说得很直白:Hedera 地址定义塞不进 CAIP-10 的框,所以为它单列一种格式。它的做法是最小改动:CAIP-10 的链号段和整体框架原样保留,只是把”地址”允许出现的字符从纯字母数字放宽到 0.0.123 这种点号分隔的数字,并允许挂一段校验码。

一串地址读三段:CAIP-76 里的 Hedera 账户写法与 HIP-15 校验尾缀 图 2
一串地址读三段:CAIP-76 里的 Hedera 账户写法与 HIP-15 校验尾缀 · 图 2

语法逐段拆

CAIP-76 给的语法式短,但要一段段读。账户标识整体等于链标识加冒号,再接地址,最后可选一段校验码。链标识段沿用 CAIP-2链标识应该怎么解析? 规则,模式上要求至少五位字符——实践中你会见到 mainnet、testnet、previewnet、devnet 这几个取值。地址段是三节十进制数字,每节一到十九位,用点号分隔,依次是 realm、shard 与账户号,每节的数值边界是非负的带符号 64 位整数,规范测试向量里那条最大账户用的正是 2 的 63 次方减一(19 位的 9223372036854775807)。校验码段是连字符加五个小写字母,算法在 HIP-15。规范附的标准例子包括:devnet 的资助账户 hedera:devnet:0.0.98、主网国库账户 hedera:mainnet:0.0.2、预览网的 hedera:previewnet:0.0.121,以及带校验码的 hedera:mainnet:0.0.123-vfmkw。

校验码是礼物,不是门禁

最值得普通用户记住的是这条语义:带校验码与不带校验码的地址都合法;中间环节(钱包、交易所、浏览器)没有义务替你做校验。也就是说,那五个字母是一层”抄写防错”的礼物——但它不是地址的强制组成部分,改不改写它也不改变资金归属。反过来的坑也存在:有些服务生成的地址默认不带尾缀,你在转账时看到没有校验码,不应据此认定地址不可信。HIP-15 对软件的建议其实相当进取:显示与输出应当一律带上校验码(全小写、连字符相连、不加空格),输入则两种格式都收;校验码算错、格式稍有偏差(大写字母、多余标点、前导零)都应拒收。它的动机段写得很直白:这种点号数字地址太容易被少敲一位、调换两位,而转错是单向不可逆的;攻击者甚至可以提前批量注册”长得像”的账户号等着收错款。稳妥动作是把完整字符串(含尾缀,若对方提供)逐字符核对,重点核对三段数字的点号位置——点号错位与数字错位在视觉上都是”看着差不多”,风险却大不一样。

三条现实防线怎么排

Hedera 场景下把防错排成三层。第一层是链段:把测试网、预览网、开发网的地址粘进主网收款方,错在 hedera: 后面那一段,这一层错任何校验码都救不了,因为校验码只保护地址段。第二层是数字段:realm、shard、账户号三段全部逐位核对,普通用户几乎只与最小的账户号打交道,看到大数值账户(比如带 19 位数字的)应多一分警惕、多核一遍。第三层是尾缀:有则核对,无则不扣分。三层分清,绝大多数”转错 Hedera 账户”的事故就都能提前拦住。

顺带一条跨链阅读法

CAIP 家族给每条链都留了”本地习惯优先”的位置:一条链的原生币怎么写进资产标识?CAIP-20 用 slip44 编号的写法与读法 用 slip44 编号写原生币,比特币系链的链身份不是一个数字:CAIP-4 用创世块哈希前 32 位定链 用创世哈希前缀写比特币系链,Stellar 用两个词写网络(见 getGenesisHash怎么识别Solana网络? 里另一条链用创世哈希识别网络的做法)。读法统一是:命名空间告诉你查哪份规范,规范告诉你这段标识从哪个字段来、怎么向节点核对。Hedera 这一户的特殊之处只在于:它连”地址”本身的字符集都要先放宽才装得下。

校验码管什么、不管什么

HIP-15 的算法细节里藏着一个容易漏读的事实:校验码不只由地址数字算出,参与计算的还有一段账本标识(ledger ID)字节——同一个人的同一个账户号,在不同账本上会算出不同的五个字母。这意味着校验码同时盯住”地址抄错”和”网络不匹配”两类错:把主网地址连尾缀粘到别处核验,尾缀对不上就会报警。但它管不到的依然管不到:链段从 mainnet 抄成 testnet 时,如果你根本不做校验码核验(规范说了中间环节没有校验义务),错误照样溜过去;冒号丢失、命名空间写错,同样不在算法输入里。这就是”有校验码不等于闭眼粘贴”的原因:校验码是留给肯核验的人的复写纸,不是自动生效的路标。同类分工在其他地址体系里也能看到:EVM 的 地址的大小写不是随便写的:EIP-55 校验和怎么帮你挡住剪贴板劫持 处理过的大小写校验只管十六进制字符本身,链的归属要靠 同一个地址,不同的世界:多条EVM链余额为何各自独立,转资产前查什么 讲过的链切换确认;Bech32 那套前缀体系里,人读部分前缀管网络、数据部分校验管抄写(为什么山寨币的 bech32 地址前缀各不相同:SLIP-0173 的前缀注册表 有前缀注册表的专文)。每种地址的”防错罩”都只罩它设计好的那一片,弄清自己手里这把罩住了什么,比记住”它有校验”更有用。

风险提示:本文是链上地址格式科普,不构成投资建议;向交易所或新地址转入资产前请逐项核对链段、地址段与校验尾缀,并以小额试转确认到账后再走大额。