区块链/等级 III · 网络/3.2 挖矿/课程 5
区块模板与 Stratum V2
区块头任务、模板选择,以及由谁执笔
材料Stratum V2 规范(stratumprotocol.org)BIP22与BIP23
好奇
- 为什么拥有专用硬件的矿工仍然需要依赖矿池运营商来决定哪些交易会被纳入区块?
- 是什么让矿池中的矿工既能分享矿池奖励,又能自行选择放入自己区块中的交易?
- 从 JSON 转向二进制协议,如何同时提升高速挖矿操作的安全性与效率?
探索
- 自协议诞生以来,每个有效区块都需要选定一组交易。早期,运行全节点的矿工自行选择这些交易。到2012年,随着硬件日益专业化、价格昂贵,大多数矿工加入了矿池。同年Slush推出的Stratum协议,规范了矿池服务器向成员分发工作的方式。矿池从2010年起就在构建区块;Stratum让这种安排高效得多,同时也继承了区块构建的中心化。
- 在Stratum V1下,矿池运营方是每个候选区块的唯一设计者。服务器从自己的内存池中汇集交易,并把任务的各个部分发送给矿工:币基交易的前后两段、Merkle分支、前一区块哈希、目标值和时间。矿工插入自己的extra-nonce,计算Merkle根并寻找有效哈希,但对纳入哪些交易没有任何发言权。
- 这种架构赋予矿池运营方对交易选择的巨大权力。控制全网相当大比例算力的矿池,只需把某些交易排除在模板之外,就能实际上审查这些交易。虽然这种权力很少被行使,但结构上确实具备这种能力。这也意味着,一旦矿池服务器宕机或遭受拒绝服务攻击,与其相连的所有矿工都会闲置,使其收入面临单点故障。
- 2012年,BIP22和BIP23引入了`getblocktemplate`,让挖矿软件可以从节点请求完整的区块模板,其设计初衷是让矿池成员自行构建区块。矿池在内部使用getblocktemplate从自己的节点获取模板,但让成员自行构建区块会使验证和份额核算变得复杂,因此很少有矿池提供这一功能(Eligius是个例外)。
- Stratum V2由Braiins和Matt Corallo等人自2019年起开发,重新设计了协议以解决这些问题。它采用二进制格式以降低开销,并引入加密以提升安全性。关键在于,它包含任务声明协议(Job Declaration Protocol),允许运行自己全节点的矿工向矿池服务器声明自己的区块模板。矿池随后接受该自定义任务的份额,按其标准方案分配奖励,而矿工则保留对纳入哪些交易的控制权。
- 诸如 Ocean 的 DATUM 协议(2024 年发布)之类的替代方案也在追求去中心化构建模板的目标。请阅读 Stratum V2 规范中的任务声明部分,并将其与你所了解的某个矿池构建模板的方式加以比较。在采用这些协议的情况下,交易的选择权又会回归到硬件拥有者手中。
关键事实
- 由Slush于2012年推出的Stratum V1将区块模板的创建权集中在矿池运营方手中。
- 在Stratum V1中,矿工只接收区块头任务,对交易选择没有任何影响力。
- BIP22/BIP23(2012年)定义了getblocktemplate;很少有矿池允许成员用它来构建自己的区块。
- Stratum V2(2019年起)采用带加密的二进制协议,以提升安全性和效率。
- Stratum V2中的任务声明协议允许矿工向矿池提交自己的区块模板。
- Ocean的DATUM协议(2024年)是另一项旨在让矿池中的矿工去中心化地选择交易的尝试。
练习 九、六、三、一
9收集列出生成一个区块时涉及的9项决策(例如哪些交易需要包含、coinbase消息、时间戳、nonce等),并说明在Stratum V1协议下每项决策由谁来决定。
6归类按由谁控制,将这9项分为6类:矿池、矿工、节点软件、共识规则、随机性或其他。
3提炼将这6个类别简化为3个核心原因,说明为何交易选择权对区块生产者而言在经济和政治层面具有重要意义。
1凝结用一句话说明:Stratum V2中的任务声明(Job Declaration)如何改变矿池运营方与个体矿工之间的权力平衡。
事实核查
日期、数字及数据均依据下方列出的已发表资料进行核实。