Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

软分叉升级规范BIP9

123458512
187 0 0
比特币的软/硬分叉升级一直采用块的version字段来完成。由于是一个分布式系统,必然需要采用灰度发布模式。
0 Z0 _! U, K! J, M& V3 m传统的升级过程% W, e9 I2 k8 e6 z4 W3 o$ g
在实施BIP9前是这样升级的,当前块版本为version,那么新块版本是version + 1,当近1000个块中的版本超过95%都是新版本时,则触发启用新特性,同时不再接收旧版本号的块。由于中间存在1000个块的窗口期,大约一周,所以给出足够的时间给当前网络中的节点实施升级。3 {  p( S: z2 l7 G
$ q+ K' m/ t3 z( F1 B9 b. K( f7 z3 e
上图是来自BTC.COM统计的比特币历史上几个升级过程,最近的v3升级v4的过程大约花费了一个半月左右。前面几次的升级时间更长。+ y- t( N# `2 N5 T6 M
这种依次递增版本号的方法,有一个明显的弊端:每次仅能进行一个特性升级。当需要同时进行多个升级时,则无法完成。BIP9的诞生就是为了解决这个问题的,同时把向下兼容性升级过程制定了规范。* a0 I& C# D& G1 ^  G7 b8 i# K% Q9 q, l  S
BIP9特征0 t  Y9 t/ A2 O% ]. W9 g! ^2 A/ u
支持多个特性同时升级新增投票时间区间新增锁定期
% C/ x5 Z* ]# A7 O2 y8 y块的version字段是4字节,意味着有32位比特,前三位目前固定为001,那么剩余29个比特可以用于特性设置,与激发某个特性,则将其对应的位设置为1。0 q( I2 ?8 N' J! u) B; s

9 n  m( A" V4 R+ P/ o" d% }7 B! C3 \9 t/ u# J二进制格式:
9 W0 i8 S% S5 b7 ]' H3 K   001   0 0000 0000 0000 0000 0000 0000 0000
; ]+ k' s3 A6 @! g# X1 ~. x6 h------   ------------------------------------( e& a/ Y* B% ?0 M
固定保留  29个特性标识位
$ w1 o8 Z, X+ T" ]) E" M0 l状态变迁
! n& `7 j$ l/ N6 bBIP9某个特性的状态有:: D' ^/ v  m( P* W& q
DEFINED 定义。每个特性的升级设定会写到某一个版本的bitcoind中,并部署下去。STARTED 启动。启动后会有两个可能的变迁状态:LOCKED_IN, FAILED。LOCKED_IN 锁定。一旦进入锁定态,则必然会激活。锁定期为2016个块。ACTIVE 激活FAILED 失败$ O% U' \7 C' q2 s& p
! c: W- y. x3 h

/ _2 ^  g, I% A/ k/ LMTP是最近11个块的时间戳中位数。区块链上的块时间并不是按照高度递增而严格递增的,但MTP时间是严格递增的(早期可能不能严格遵守)。$ E" e3 ^  J3 J3 r# M! I
能够进入锁定期(即得到全网同意)的条件是在2016个块中,支持的块数量达到95%,在测试网络上是75%。窗口期从之前的1000提升至2016个块,即一个难度周期,约两周。同时,还增加了2016个块的锁定期,之后才能正式激活特性。这比之前的升级,变得更加稳健,预留出充分的时间,同时意味着特性的落地周期变长。
! t" W; r; r* \* o3 J首个采用BIP9的软分叉
5 i) z9 p9 V! P1 wBIP68/112/113是首个采用BIP9方式进行升级的软分叉,随bitcoind-v0.12.1发布。使能位采用最右侧位,起始时间(starttime)是2016-05-01 00:00:00,终止时间(timeout)是2017-05-01 00:00:00。% k/ ]' d/ v& }8 c( Q& C# h4 I
若要支持BIP68/112/113软分叉,那么版本号应该是: 0x20000001,二进制为:0010 0000 0000 0000 0000 0000 0000 0001。
5 j: w0 |1 W" t" q/ S9 h另外BIP109(Classic 2MB HardFork)也是采用的是BIP9规范,使能位是最左侧位,但触发窗口期与锁定期的设定均未采用BIP9的定义。其版本号是:0x30000000,二进制为:0011 0000 0000 0000 0000 0000 0000 0000。
% d& `, |7 j* j8 `) H1 F8 q& s; j! R如果版本号为:0x30000001,二进制为:0011 0000 0000 0000 0000 0000 0000 0001,则意味着同时支持BIP68/112/113和BIP109。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

123458512 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    5