227 / 736BTPL

Block Template

开始挖矿前准备的区块草稿

矿机寻找成功结果之前,必须先知道自己在为哪个区块计算。软件会先准备材料:接在哪个区块后面、包含哪些交易,以及可以分配多少奖励。这份草稿叫作 Block Template。它就像一份待出版的书稿:内容已经存在,却还没有经过使它成为共同历史一部分的那一步。模板本身不会确认任何交易。

Block Template 是在 Bitcoin 网络中组装候选区块所需的一组资料。矿工随后才会针对区块头,也就是区块数据的简要摘要,寻找有效的工作量证明。模板将所选交易、奖励和构建规则联系起来;拿到模板并不代表区块已经挖出或被网络接受。

每个新区块都建立在特定的前序区块之上。模板用 previousblockhash,也就是前序区块的唯一指纹,来标识它;height 则表示候选区块在链中的位置。其他字段包括区块头版本 version、挖矿结果目标值的紧凑编码 bits,以及时间信息。这些资料用于组装特定区块,并不是独立的付款清单。即使交易相同,接到另一个前序区块之后,也已经是不同的任务。 [1]

安娜收到比特币,然后用它付款。如果这两笔转账都要进入同一区块,必须先放入把资金交给她的交易,再放入花费这些资金的交易。描述模板格式的技术文档 BIP 22 用 depends 字段表示这种关系:它以从一开始编号的位置,引用 transactions 列表中更早的项目。列表不包含 coinbase,也就是分配矿工奖励的特殊首笔交易。如果没有 depends 字段,含义是依赖关系未知,而不是已经确定不存在依赖。软件不能把缺失的信息当成空列表。 [1]

奖励包括按该区块高度规则新发行的比特币,以及实际包含的交易所支付的手续费。这里引用的 Bitcoin Core v29.0 也是这样计算奖励的。这个软件用于验证区块和交易,也可以准备挖矿模板。举一个自拟例子:交易共带来 10000 sats 手续费,移除一笔手续费为 3000 sats 的独立交易后,剩下 7000 sats。Sats 是比特币的小额单位。coinbasevalue 字段给出矿工在原交易组合下可以领取的最大奖励。交易组合改变后,就需要重新计算这个金额。计算必须依据实际手续费,而不是为旧内容算出的总额。 [4] [1]

区块还包含可用于检查数据的密码学指纹。BIP 141 描述了 witness commitment,它将区块绑定到 witness 数据,其中包括证明花费授权的签名等信息。这个承诺值由包含这些数据的 wtxid 标识符推导而来。Bitcoin Core 29 为未修改的模板提供 default_witness_commitment。相关交易或顺序改变后,必须检查或重新计算承诺值。区块头中的交易汇总指纹 Merkle root,也必须根据最终的 TXID 标识符计算,其中包括修改后的 coinbase 对应的标识符。旧印章不能直接盖在改过的内容上。 [5] [3]

区块空间有限,矿工会选择要包含什么。Bitcoin Core v29.0 会考虑相互关联的交易包、作为数据负载计量方式的权重,以及 sigops,也就是按区块上限规则统计的签名检查操作。blockmaxweight 和 blockmintxfee 等设置会影响组装区块的大小及要求的费率。这属于选择策略。因为这种策略被排除的付款,并不一定违反网络规则。矿工自己的设置也不能提高其他节点检查的网络上限。 [4] [3]

在 BIP 23 中,mutable 列出服务器允许的改动,例如调整时间或增加交易。这是针对特定模板的使用约定。服务器许可不会取代共识规则,也就是其他网络参与者独立检查的有效性规则。前序区块、时间、难度和交易仍须正确。能够获取模板,也不意味着每台接入的矿机都可以任意改写内容;具体权限取决于系统结构及它接收到的任务。 [2]

计算还在进行时,其他矿工可能延长了链。如果要在最新接受的区块之后继续挖矿,仅在旧模板中替换前序区块指纹是不够的。一些交易可能已经得到确认,区块高度和其他条件也会变化。BIP 23 将 expires 定义为任务的有效时限,prevblock 则表示允许将任务用于另一个前序区块。即便获得这种许可,仍须重新检查交易、奖励和整个新上下文,而不是省略验证。 [2]

自己拟定的区块若有错误,最好在长时间搜索之前发现。BIP 23 的 proposal 模式允许先提交草稿检查,而不要求有效的 Proof of Work,也就是尚不要求已经找到能证明所需计算工作的结果。得到肯定答复,不代表区块已经找到、广播,或必然永久留在链中。它只说明草稿通过了相应的初步检查。完成后的区块提交时,仍须接受包括工作量证明在内的正式验证。 [2]

要获得更完整的理解,请将本词条与以下词条结合阅读: Mining Pool, Block Header, Extranonce, Merkle Tree, Bitcoin, Bitcoin Core. 反向关联还来自: Coinbase交易, ASIC Miner, Mining Pool, Nonce.

DOC · 001BIP 22 — Block template structure规范 DOC · 002BIP 23 — Mutations and proposals规范 DOC · 003Bitcoin Core 29 — getblocktemplate RPC文档 DOC · 004Bitcoin Core v29.0 — Block assembler一手来源 DOC · 005BIP 141 — Witness commitment规范
修订日期: 来源优先 · 非投资建议