概述
什么是版本位 BIP9?
版本位 BIP9 系统是一种引入向后兼容规则更改到比特币共识规则的方法,称为软分叉。
版本位允许矿工表明他们可以验证软分叉规则。 它还允许同时提出最多 29 个软分叉。
如何激活版本位?
版本位不需要激活,它只是一个方法,矿工可以通过在区块头 nVersion 字段中设置位来表明他们已准备好进行软分叉。
什么是软分叉超时?
软分叉具有开始时间和超时,在此期间提案处于活动状态。 软分叉只能在开始时间和超时之间激活。 如果软分叉在超时之前没有激活,则软分叉提案失败,即使已发出信号,也不会激活。
什么是激活工作流程?
在版本位下,软分叉提案会经历一个工作流程
[DEFINED]
->[STARTED]
->[LOCKED_IN]
->[ACTIVE]
或者
[DEFINED]
->[STARTED]
->[FAILED]
比特币网络每 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 个区块中的)区块开采了发出新区块版本信号,就会激活新规则。
-
IsSuperMajority() 软分叉将在激活后使所有具有先前版本的区块成为孤儿。 例如,如果当前版本为 4,而下一个软分叉引入了版本 5 块,则在达到激活状态(950/1000 个块)后,节点将拒绝所有版本 4 块。
-
一旦版本位软分叉达到激活状态,节点将简单地开始执行新规则,并且除非违反新规则,否则不会使非信号区块成为孤儿。
-
ISM() 在滚动基础上查看前 1000 个区块;版本位在每次挖矿难度重新调整时查看前 2016 个区块。
-
ISM() 软分叉不会过期。 版本位软分叉只能在开始时间和超时之间激活。
矿工必须升级吗?
不会。 BIP9 软分叉不会激活,除非 95% 的矿工发出信号表明已准备好。 如果软分叉达到 [LOCKED_IN]
状态,即大多数矿工已准备好进行更改,则剩余的矿工应在下次难度重新调整(大约 2 周)之前进行升级。
未升级的矿工有产生无效区块的风险,如果这些矿工无法验证新激活的规则,这些区块将成为孤儿。
谁将版本位分配给不同的升级提案?
软分叉是通过 BIPs 流程 提出的。 活动的 BIP9 软分叉提案列在 分配页面 上