合并挖矿:一份哈希功如何同时喂给两条链 图 1
合并挖矿:一份哈希功如何同时喂给两条链 · 图 1

同一份功,两处领赏

比特币矿机每秒钟亿万次地做哈希尝试,寻找低于目标的区块哈希。这份工作量证明检验的是一个区块头,而区块头里有一块由矿工自由决定的空间——coinbase 交易脚本。合并挖矿利用的正是这个自由度:把另一条链的区块哈希塞进比特币区块的 coinbase 里,主链照常出块领赏,那份哈希功同时成为子链认可的”我也挖了你的块”的凭证。比特币协议本身不需要知道合并挖矿的存在,维基规范把这种关系称作辅助工作量证明,提供算力的一方是父链,接受凭证的一方是子链。

一份 AuxPoW 凭证由什么组成

按比特币维基收录的合并挖矿规范,矿工在父链区块的 coinbase 脚本中放入一段四十四字节的记录:四个字节魔数用于识别、子链区块哈希(多子链时是默克尔树根)、树容量和槽位_nonce_。子链节点验证一个块时,要求随块附上三样材料:父链完整区块头、coinbase 交易本身,以及两条默克尔分支——一条证明 coinbase 确实在那个父链区块里,一条证明本链的块哈希在那棵辅助工作量树里。验证者把父链区块头单独拎出来做哈希运算,确认它低于子链难度目标,整条链的”工作量继承”就成立了。矿机照常扫描 nonce 字段,每次尝试顺带改变了整棵辅助树的承诺,所以父链的每一次哈希尝试同时也在为子链试块。

规范里自己承认的裂缝

这份规范有一处罕见的坦诚:多子链场景下决定各链在辅助树中槽位的算法,被维基原文直接标注为”行不通”——槽位由链编号与一个 nonce 派生,若两条链在一个 nonce 下撞槽,换任何 nonce 它们仍会撞槽。规范的补救建议是选一个不冲突的链编号。对读协议文档的人来说这是个有用的提醒:合并挖矿是围绕 coinbase 自由度长出来的工程技巧,不是经过完整 BIP 流程的共识升级,边角案例的成色以各子链客户端实现为准。

安全边界:谁保护谁,谁威胁谁

对比特币而言,合并挖矿几乎是无感的——多出的数据塞在 coinbase 脚本里,不改变主链任何共识规则。风险集中在子链一侧。子链的安全性名义上”继承”比特币算力,实际上完全取决于子链有多少份额被诚实矿工引用:如果某条合并挖矿链的区块大多由同一个高算力来源打包,该来源理论上能对这条子链做比独立链便宜得多的重组与双花,这类担忧在合并挖矿兴起后曾在社区引发公开讨论,也推动过 2012 年前后围绕合并链安全的辩论。参与角度各取所需:矿工多一份边际收益,子链省下自建算力的冷启动,而用户需要清楚——买一条合并挖矿链的服务,你信任的哈希功质量部分外挂在别人的链上。至于 2011 年 Namecoin 作为首个实践者的历史、以及后来多条链陆续启用又沉寂的周期,公开记录都能对上;把它当作”免费的安全”来宣传的,通常是在给特定链带货。

怎么看一份合并挖矿宣传

判断任何声称”共享比特币安全性”的项目,可以沿着机制问四层:其一,它依赖的父链工作量承诺写在哪里,验证材料是否完整公开;其二,该链的区块实际由多大比例的合并矿工产出,这个比例随行情涨落——父链费率好的年份合并矿工大量撤离,子链块间隔会肉眼可见地拉长;其三,链槽位与链编号的分配是否避开了规范承认的撞槽缺陷;其四,同一份父链工作量如何被限定只能承诺同一子链的一个区块——规范靠的是每条链按唯一链编号固定落在辅助树的一个槽位里,防止一份功被同时拿去认领同链的两个分支。四层都能答的项目,机制描述基本诚实;只反复念”继承比特币算力”口号的,把它当营销文案看就好。

风险提示:本文内容仅为技术说明,不构成任何投资建议;涉及资产操作请自行核验当前版本行为与官方文档。