协议演进 / 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 传统合并挖矿的两条缺点
原文指出传统合并挖矿有两个缺点:
- 矿工必须为另一条链运行全节点,也就是必须运行“非比特币”软件,这类软件可能有缺陷;
- 矿工在另一条链上获得报酬,拿到的是那条链的代币(例如合并挖矿 Namecoin 挣的是 NMC)。
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* 也不同)。规范只有两条消息:
- BMM Accept(接受):主链 coinbase 中的一个输出,内含 h*。矿工只能选一个 h* 背书。
- BMM Request(请求):侧链用户发出的一笔交易——当且仅当矿工的 L1 区块包含 Simon 的 h* 时,Simon 才付钱给矿工。
矿工掌握主链 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 想在侧链上挖的区块,侧链编号是侧链创建时分配的号码。交易须通过三项检查,否则无效:
- 每份 BMM Request 必须与一份对应的 BMM Accept 相匹配;
- 每个主链区块、每条侧链只允许一笔 BMM Request——例如 700 个用户都为 4 号侧链广播 Request,矿工必须只挑一笔放进这个 L1 区块;
- prevMainBlock 的 32 字节必须与上一个主链区块的哈希一致,因此 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 字节的哈希背书并收钱。懂侧链规则的是出价的侧链用户;把两者混为一谈,就丢了这份提案的整个设计点。
七、延伸
- 阅读版:https://bips.dev/301
- 官方原文:https://github.com/bitcoin/bips/blob/master/bip-0301.mediawiki
- 相关:BIP-300 算力托管(共识层)
- 仓库总目录:https://github.com/bitcoin/bips
