比特币系链的链身份不是一个数字:CAIP-4 用创世块哈希前 32 位定链 图 1
比特币系链的链身份不是一个数字:CAIP-4 用创世块哈希前 32 位定链 · 图 1

说“我在以太坊主网”,一个数字 1 就够了;说“我在比特币”,却没有一个官方分配的链号可填。跨链标识体系给比特币系链的答案是:拿创世块的哈希,取前 32 个十六进制字符当链身份。这件事的规范文件是 CAIP-4,这一篇讲它的写法、怎么自己验证,以及这套方案为什么长成这样。

标识格式:创世块哈希的前 32 位

规范把命名空间命名为 bip122,链标识的定义直接委托给 BIP-122 里那份链 ID 定义:取该链创世块的哈希,切成前 32 个十六进制字符,小写。它给出的示例很直观——比特币主网写作 bip122:000000000019d6689c085ae165831e93,莱特币写作 bip122:12a765e31ffd4059bada1e25190f6e98,而莱特币的一个分叉链 Feathercoin 是另一串 bip122:fdbe99b90c90bae7505796461471d89a。三条链三种标识,全都不需要任何注册机构签发。

自己核验:一条 getblockhash

这份规范顺手给了“怎么确认某个链标识对应哪条链”的解析方法:向节点发一条 JSON-RPC 请求,方法名 getblockhash、参数填 0;节点返回的高度零区块哈希,取前 32 个字符,就是应该拼在 bip122: 后面的那段值。也就是说,链标识是可以从一条运行中的节点上问出来的,不必信任任何一份中心化的链号名单。钱包地址怎么看、格式怎么校验,是另一篇 ‘+L(2026090500068)+’ 的主题;这里的对象是“链”而不是“账户”。

为什么长这样而不是编号

用创世哈希定链有三个实际好处。第一,无需分配:任何一条比特币规则的新链,只要创世块不同,标识自动唯一,不存在“申请链号”的环节。第二,天然防伪冒:改名不改不了创世块,仿冒链的哈希必然不同。第三,与分叉规则吻合——硬分叉会改变后续区块,但只要不重做创世块,同一支链上的标识保持稳定;而“同一条链的克隆”恰好在创世块上必然不同。以太坊系用整数链号加 EIP-155 签名防重放的思路,解决的是交易签名里的链绑定,两者是不同层面的机制,不要混为一谈。

一个诚实的现状说明

CAIP-4 的正式状态是 Superseded(已被取代),不是“还在原地修订”。原因在这套体系的治理方式调整:早期每条链的命名空间细节写在独立的 CAIP 文件里,后来改为每个生态一个目录、按主题分文档,由专门的命名空间仓库承接,编号 104 号文件就是这套新流程的规范。所以今天要去查比特币系链标识的最新细则,应该去那份仓库里的 bip122 目录,而不是把 CAIP-4 当活跃标准引用。它的技术内容仍然有效,变的只是治理归属——这类“内容活着、文件搬家”的状态在跨链规范里很常见。

什么时候会看到它

三类场合最容易碰上。第一类是多链工具的配置和导出文件,里面用这种标识列出它支持哪些链。第二类是扫码登录与跨链签名消息,链上下文需要写在被签名的文本里,比特币系链就会以这串哈希出现。第三类是排查“同一句助记词为什么在某些工具里找不到某个链的账户”这类问题,链标识填错或没填,账户就会挂到另一条链上,派生路径与账户找回的关系可以读 ‘+L(2026090500022)+‘。

顺手区分:三个长得像的编号

这一族里至少有三个编号容易串线。BIP-122 是比特币那条“区块链引用链接”提案,规范的是 blockchain: 开头的查交易查地址链接,与本提案共用“用创世哈希认链”这一底层定义;CAIP-2 是跨命名空间的链标识总框架,本提案只是它在比特币系的落地页;编号 155 那一族则是节点之间宣告网络地址用的,跟链身份毫无关系。看到 bip122: 前缀先问一句:这是链标识、引用链接还是节点地址宣告?三者语法不同、用途不同,抄错字段时错误信息往往还不明显,只能靠事先分清。

核对清单

看到 bip122: 开头的标识时,做三件事就够:确认它后面正好是 32 个小写十六进制字符;如果环境允许,用一次 getblockhash 0 的结果核对前缀;如果这是别人发给你的配置,把链标识与地址格式放在一起交叉判断——以太坊格式的地址配在比特币命名空间下,说明这份配置本身就写错了,后面的余额与交易自然全错。链标识解决的是“在哪个世界说这句话”,它是所有链上核对的第一步,也是最容易被跳过的一步。