概述

什么是版本位 BIP9?

版本位 BIP9 系统是一种引入向后兼容规则更改到比特币共识规则的方法,称为软分叉。

版本位允许矿工表明他们可以验证软分叉规则。 它还允许同时提出最多 29 个软分叉。

如何激活版本位

版本位不需要激活,它只是一个方法,矿工可以通过在区块头 nVersion 字段中设置位来表明他们已准备好进行软分叉。

什么是软分叉超时?

软分叉具有开始时间和超时,在此期间提案处于活动状态。 软分叉只能在开始时间超时之间激活。 如果软分叉在超时之前没有激活,则软分叉提案失败,即使已发出信号,也不会激活。

什么是激活工作流程?

版本位下,软分叉提案会经历一个工作流程

  • [DEFINED] -> [STARTED] -> [LOCKED_IN] -> [ACTIVE]

或者

  • [DEFINED] -> [STARTED] -> [FAILED]

version bits state diagram

比特币网络每 2016 个区块重新调整挖矿难度;此时,版本位将查看前 2016 个区块的窗口,以查看有多少个区块为给定软分叉发出信号。 如果 95% 的区块发出信号表明已准备好进行软分叉,则状态从 [STARTED] 更改为 [LOCKED_IN]

[LOCKED_IN] 之后,规则将在一次难度重新调整(即再经过 2016 个区块)后激活。 节点软件会发出警告,表明即将进行升级。

什么是版本位?

当没有发出软分叉信号时,矿工应将区块版本字段设置为 0x20000000

矿工何时设置位?

为了表明已准备好进行软分叉,矿工应与 0x20000000 一起设置相关的版本位。 这只能在软分叉的开始时间之后进行。

如果软分叉激活或达到 [FAILED] 状态,则应取消设置位。

例如

“alice” 软分叉使用位 0,即 0x1 + 0x20000000

0 0 1 0 0 0 0 0 0 0 0 0 0 0 1

“bob” 软分叉使用位 1,即 0x2 + 0x20000000

0 0 1 0 0 0 0 0 0 0 0 0 0 1 0

要同时为两个软分叉发出信号,请使用 0x20000003(即 0x1 + 0x2 + 0x20000000*)

0 0 1 0 0 0 0 0 0 0 0 0 0 1 1
  • 注意,如果一个软分叉在另一个软分叉之前激活,则必须取消设置相关位并继续发出另一个软分叉的信号。 如果一个软分叉无法激活且超时到期,则也应取消设置位。

它与 ISM 软分叉有什么不同?

IsSuperMajority() 或简称 ISM,是一种传统的软分叉触发器,一旦有 950 个(1000 个区块中的)区块开采了发出新区块版本信号,就会激活新规则。

  1. IsSuperMajority() 软分叉将在激活后使所有具有先前版本的区块成为孤儿。 例如,如果当前版本为 4,而下一个软分叉引入了版本 5 块,则在达到激活状态(950/1000 个块)后,节点将拒绝所有版本 4 块。

  2. 一旦版本位软分叉达到激活状态,节点将简单地开始执行新规则,并且除非违反新规则,否则不会使非信号区块成为孤儿。

  3. ISM() 在滚动基础上查看前 1000 个区块;版本位在每次挖矿难度重新调整时查看前 2016 个区块。

  4. ISM() 软分叉不会过期。 版本位软分叉只能在开始时间超时之间激活。

矿工必须升级吗?

不会。 BIP9 软分叉不会激活,除非 95% 的矿工发出信号表明已准备好。 如果软分叉达到 [LOCKED_IN] 状态,即大多数矿工已准备好进行更改,则剩余的矿工应在下次难度重新调整(大约 2 周)之前进行升级。

未升级的矿工有产生无效区块的风险,如果这些矿工无法验证新激活的规则,这些区块将成为孤儿。

谁将版本位分配给不同的升级提案?

软分叉是通过 BIPs 流程 提出的。 活动的 BIP9 软分叉提案列在 分配页面

进一步阅读