协议演进 / BIP/比特币改进提案 / BIP-301

BIP-301 盲合并挖矿(共识层)

提出盲合并挖矿:主链矿工不必运行侧链软件,只在主链 coinbase 中背书唯一的侧链区块哈希,即可收取侧链的手续费收入。本 BIP 目前处于草案状态。

一、档案卡

档案卡
编号BIP-301
标题Blind Merged Mining (Consensus layer)
作者Paul Sztorc <[email protected]>、CryptAxe <[email protected]>
指定日期2019-07-23
层级Consensus (soft fork)(共识(软分叉))
类型Specification(规范类)
状态Draft(草案)
阅读版https://bips.dev/301
官方原文https://github.com/bitcoin/bips/blob/master/bip-0301.mediawiki

二、放在哪一族

合并挖矿与 Drivechain 族,与 BIP-300 成对出现:BIP-300(算力托管)解决侧链资金进出主链的问题,BIP-301 解决侧链区块由谁生产的问题。原文记号上把主链一侧写作 main:、侧链一侧写作 side:,并以 Simon 指代侧链用户、Mary 指代主链矿工。

它的参照系是传统合并挖矿(Merged Mining):矿工复用同一份哈希算力同时为多条链工作,原文举的例子是 Namecoin。BIP-301 要保留“复用算力”这一点,去掉传统合并挖矿强加给矿工的负担。

三、它要解决什么

3.1 传统合并挖矿的两条缺点

原文指出传统合并挖矿有两个缺点:

3.2 把组装区块的工作交出去

盲合并挖矿(Blind Merged Mining,BMM)的想法是分工:组装侧链区块的工作——选哪条侧链区块、放哪些交易、收多少费——由侧链用户完成;矿工不运行任何新软件、不“看”这些侧链(故称“盲”),只在主链上做一件事:为某个侧链区块背书。

侧链用户同时在 L1 上“出价”,竞买成为该侧链区块唯一创建者的权利。BIP-301 要保证 L1 矿工每 10 分钟、每个 L2 类别只接受一份出价,而不是像通常那样把所有出价都收下。

3.3 原文的算例

原文设想:一个侧链区块含 20,000 笔交易、每笔付 0.10 美元手续费,整个侧链区块值 2,000 美元手续费。侧链的 coinbase 把这 2,000 美元付给 Simon;Simon 自己不做任何哈希,而是发一笔 L1 交易付 1,999 美元给主链矿工 Mary。结果 Mary 什么侧链工作都没做,却拿走了几乎全部手续费收入;Simon 净得 1 美元。原文强调:BIP-301 在 L1 上让这种分工无需信任——Mary 若拿了 Simon 的钱,就必须让 Simon 控制那个侧链区块。

四、规则本身

4.1 两个消息

每个候选的下一个侧链区块由其唯一的侧链区块哈希 h* 定义(即便 L2 区块其余部分完全相同,不同 Simon 的侧链 coinbase 不同,h* 也不同)。规范只有两条消息:

矿工掌握主链 coinbase,因而由矿工选定哪个 h* “胜出”:哪个侧链区块被“找到”、哪一份关联的 BMM Request 可以被收取,都由这一选择决定。

4.2 BMM Accept 的格式

矿工把一个 OP_RETURN 输出放进主链 coinbase:

1-byte - OP_RETURN (0x6a)
4-bytes - Message header (0xD1617368)
1-byte - Sidechain number (0-255)
32-bytes - h* (obtained from Simon)

没有这类 OP_RETURN 输出,就表示没有 Request 被接受,矿工也拿不到 Request 的钱。原文还指出:若 Mary 与 Simon 是同一个人,双方完全互信,流程到 Accept 为止即可,不需要 Request。

4.3 BMM Request 的格式与有效性

Simon 为每个想尝试的侧链区块广播一笔交易,其 OP_RETURN 内容为:

1-byte - OP_RETURN (0x6a)
3-bytes - Message header (0x00bf00)
1-byte - Sidechain number (0-255)
32-bytes - h* (obtained from L2 node)
32-bytes - prevMainBlock (the blockhash of the previous main:block)

其中 h* 对应 Simon 想在侧链上挖的区块,侧链编号是侧链创建时分配的号码。交易须通过三项检查,否则无效:

4.4 出价的经济学

原文指出:绝大多数 BMM Request 永远进不了区块。Simon 会发出很多份 Request,但只有一份被接受;正因为每个区块只能进一笔,他可以全天放心地多份出价。矿工因此有大量报价可选,自然会挑付得最多的那一份。原文还提到 BMM Request 可以经由闪电网络进行(BMM Accept 不行,因为它位于主链 coinbase 交易中)。

4.5 部署方式

与 BIP-300 相同,原文称该软分叉可以不修改 Bitcoin Core 而部署(经由 CUSF 方式);部署条件写为:当超过 51% 算力运行其 enforcer(执行器)客户端时部署,理想情况下还应有相当规模的用户运行该客户端。

五、谁必须动

普通持币人:不使用侧链时无事可做,也无需理解 BMM;它不改变主链上普通交易的规则呈现。

侧链用户(Simon 一侧):运行侧链节点、组装侧链区块、计算 h*,并不断广播 BMM Request 出价竞买出块权;要接受“多数出价注定落空”的成本结构。

全节点与矿工(Mary 一侧):矿工不需要运行侧链软件,这是本 BIP 的核心卖点;但矿工要在 coinbase 中写入 BMM Accept、每块每链只收一笔匹配的 Request,并按 prevMainBlock 校验其时效。执行这些规则的节点软件(原文的 enforcer)是部署前提。

共识层:本 BIP 是共识层软分叉提案,给主链区块的有效性加上 BMM 相关约束;未按原文路径部署前,它不构成主网规则。

六、现在算不算数,以及一个常见误读

状态为 Draft(草案)。它没有在比特币主网上激活,与之配套的 BIP-300 同为草案;Drivechain 整体未成为主网共识。本页只陈述其草案状态与原文立场,不替社区下结论。

常见误读:

“盲合并挖矿就是矿工顺便挖侧链,所以矿工必须懂侧链规则。”

恰好相反。“盲”的意思就是矿工不看侧链:不运行侧链节点、不验证侧链交易,只对一个 32 字节的哈希背书并收钱。懂侧链规则的是出价的侧链用户;把两者混为一谈,就丢了这份提案的整个设计点。

七、延伸

本页内容整理自 bitcoin/bips 仓库与 bips.dev,事实已与仓库核对;解读仅供学习参考。