概述

比特币共识规则正在进行一项软分叉。虽然一切似乎进展顺利,但这篇文章包含了矿工和矿池运营商必须注意的重要信息和清单。

如有任何疑问,矿工和矿池运营商欢迎 联系我们

TL;DR

  1. 请检查所有节点是否已升级到比特币核心 0.12.1 或兼容软件。这必须在区块 #419328 之前完成。请注意,如果您的 GBT 客户端正确实现了协议,您需要修补 PR #8176 (补丁) 或使用 比特币结点,它已经包含了该补丁。

  2. 如果您硬编码了区块版本,请在区块 419328 之前将版本字段的位 0 取消设置,或者最好停止硬编码,并让 bitcoind 自动进行。

  3. 对生成交易使用 0xffffffff 的 nLockTime 值,以避免与 BIP113 发生潜在的冲突。

  4. 如果您必须使用不同的 nLockTime 值,您必须仔细遵循说明。

CSV 软分叉状态

“CSV”软分叉已达到“锁定”门槛,可以继续激活。从 #415296 到 #417311 的 2016 个区块中,有 1946 个 (96.53%) 区块表明已准备好进行 BIP68BIP112BIP113 (“CSV”) 软分叉。截至区块 #417312 (2016-06-21 05:18:58 UTC),CSV 软分叉现已进入约两周的“锁定”宽限期,直到区块 419327。之后,新的 BIP68BIP112BIP113 规则将由网络激活并执行。它已通过“不可逆转点”,并且在没有大规模回滚区块链的情况下是不可逆的。

针对所有矿工

在宽限期内,所有矿工必须升级到比特币核心 0.12.1 或任何支持 CSV 软分叉的实现。实际上,在撰写本文时,比特币核心和结点 0.12.1 是唯一支持 CSV 软分叉的版本。矿工必须仔细检查以确保所有挖矿节点和备份节点都已升级。未能做到这一点可能会导致生成无效的区块,或导致您的节点构建在任何无效区块之上,从而导致链分叉并给相关矿工和一般比特币用户造成经济损失。

针对手动硬编码区块版本的矿工

默认情况下,比特币核心会根据需要自动设置和取消设置版本位,但是,我们意识到一些矿工硬编码了区块版本号。我们强烈建议不要硬编码区块版本,因为这会给比特币系统带来风险,因为版本表明了对某些共识规则的支持。

如果矿工不小心有任何节点不支持区块版本指示的规则,则可能会导致生成无效的区块,并可能导致矿工遵循并构建在无效的链上。简而言之,不使用 bitcoind 提供的默认值会增加区块规则信号和区块规则执行脱钩的风险。

与 BIP33/66/65 中使用的 IsSuperMajority 软分叉不同,在 BIP9 软分叉系统中,由于错误的版本号,不会有任何区块被孤立(只要版本 >= 4,这是 BIP65 所要求的)。因此,矿工应该没有动机硬编码区块版本,这会不必要地增加维护负担和人为错误的风险。

但是,如果您手动设置区块版本,违反了此建议,您必须采取特定行动。现在 CSV 的“不可逆转点”宽限期已过,您必须取消设置 CSV 版本位,即位 0。这意味着如果您正在发出 0x20000001 的信号,您应该发出 0x20000000 的信号。这必须在区块 #419328 之前更改,否则您将在所有符合 BIP9 的节点的日志中触发“未知软分叉”消息。有关更多信息,请参阅 版本位常见问题解答

未能遵循此建议可能会触发网络上所有符合 BIP9 的节点的升级警告系统,这将非常具有破坏性。

对于允许 bitcoind 自动设置区块版本的矿工,不需要进一步操作。请注意,它将继续生成版本为 0x20000001 的区块,直到区块 #419328,届时它将自动取消设置位 0。

关于生成交易的 nLockTime 字段

这种情况并不常见,但使用 nLockTime 字段的矿工必须格外注意,因为 BIP113 已经激活。

如果矿工以任何方式干扰生成交易的 nLockTime,他们必须确保该值(如果解释为 UNIX 时间戳,即 >= 500000000),必须小于过去 11 个区块的中位时间戳值,除非生成交易的 nSequence 恰好为 0xffffffff。

如果您不使用生成交易的 nLockTime 字段,请使用 0 的值。

未能遵循上述说明可能会导致生成无效的区块,导致链分叉并给相关矿工和一般比特币用户造成经济损失。