getblocktemplate 是一种 JSON-RPC 方法,用于获取候选区块的组装数据或评估提案。以下说明依据 Bitcoin Core 29;某个实现的行为并不自动适用于使用该协议的所有服务器。
默认 mode 为 template。响应为挖矿软件提供数据,而不是已找到的 proof of work。此请求没有收款地址参数;构造 coinbase 和寻找解是后续步骤。 [Bitcoin Core 29 — getblocktemplate RPC]
Bitcoin Core v29.0 要求请求的 rules 包含 segwit,在 signet 网络上还要包含 signet。写入字符串不能代替实现对应规则。capabilities 描述接口功能,不能替代必需的 rules。 [Bitcoin Core v29.0 — Mining RPC implementation]
BIP 145 区分不含 witness 的 txid 和包含 witness 的 hash。主 Merkle root 使用 txid,而非 witness 哈希。data 字段承载十六进制序列化交易;仅有标识符并不等于完整交易字节。 [BIP 145 — SegWit template fields]
客户端在下一次等待请求中返回收到的 longpollid。BIP 22 要求不要假设它具有特定含义,因此可移植客户端不应按自行定义的格式解析它。Long polling 需要较长的超时时间,反复失败后应延迟重试,而非紧密循环。 [BIP 22 — Long polling]
Bitcoin Core v29.0 缓存模板:前一区块变化时更新,或在创建后超过五秒且 mempool 变化时更新。区块头时间则单独更新。因此每次调用不一定包含最新交易,也不一定产生独立的挖矿工作。 [Bitcoin Core v29.0 — Mining RPC implementation]
在 proposal 模式下,data 承载十六进制的完整候选区块。Core 检查 Merkle root,但不要求有效的 proof of work。inconclusive-not-best-prevblk 表示前一区块不同于当前链尖,并非对提案有效性的完整评估。 [Bitcoin Core v29.0 — Mining RPC implementation]
submitblock 接收完整区块的 hexdata,而不只是哈希。Bitcoin Core 29 接受时返回 null,否则可能返回结果字符串。可选 dummy 会被忽略。节点接受不保证该区块在活动链中获得永久确认。 [Bitcoin Core 29 — submitblock RPC]
在 mainnet 上,Bitcoin Core v29.0 没有已连接节点或正在 initial block download 时拒绝提供模板。这描述的是节点准备状态,而非某个区块无效。应区分这些错误、验证拒绝原因,以及正常等待的 long polling。 [Bitcoin Core v29.0 — Mining RPC implementation]
要获得更完整的理解,请将本词条与以下词条结合阅读: Block Template, 挖矿, Stratum V2, Extranonce. 反向关联还来自: Solo Mining, Job Negotiation.