什么是版本位 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] 状态,位都应当被复原。

例如:

“盼弟” 軟分叉使用 0 號位元,即 0x1 + 0x20000000

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

“張三李四” 軟分叉使用 1 號位元,即 0x2 + 0x20000000

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

若要同时通知两个软分叉,使用 0x20000003 (i.e. 0x1 + 0x2 + 0x20000000*)

0 0 1 0 0 0 0 0 0 0 0 0 0 1 1
  • 注意如果一个在另一个之前被激活,你必须复原相关位并持续通知另外一方。如果一方激活失败并且超时失效,你也应当复原该位。

它与一个ISM软分叉有什么区别?

IsSuperMajority() 或其简写ISM,是一个历史遗留的软分叉触发器,一旦 1000 个矿块中的 950 个已经被开发并提示新矿块版本时,它就会激活新规则。

  1. 一个IsSuperMajority()软分叉将使所有使用前一个版本的区块变成孤块。例如,如果目前的版本是4,接下来的软分叉引入使用版本5的区块,那么当激活(1000 个区块中的950块)状态达到后,节点将拒绝所有使用版本4的区块。
  2. 一旦一个版本位的软分叉达到激活状态,节点会简单地开始强制执行新规则,并且除非一个非信令块违反了新的规则,否则不会将其变成孤快。
  3. ISM()在滚动的基础上监视以前的1000个区块; 每次难度调整时,版本位会检查之前的2016个区块。
  4. ISM()软分叉不会失效。版本位软分叉只能在开始时间和超时之间激活。

矿工需要升级么?

不用。除非 95% 的矿工都显示已经就绪,否则一个 BIP9 软分叉将不会激活。 如果一个软分叉达到 [LOCKED_IN] 状态, 也就是当绝大多数矿工都做好应变的准备了,剩余的矿工应当在下一个难度调整之前(大约2个星期)升级。 未升级的矿工有产生无效区块的风险,如果这些区块不能验证新生效的规则将会变成孤块。

谁来为提议的不同更新版本分配版本位?

软分叉是通过 BIPs process 被提议的。现行的 BIP9 软分叉提议存放在 assignments page

更多阅读

总览