BIP09 图解versionbits

首先明白:软分叉升级主要是在原有的主链上增加共识规则。


BIP09 图解versionbits_第1张图片
versionbits

软分叉的目的是为了让老版本的客户端能够兼容。我们人为设定一个开始时间和结束时间,表示在这个范围内,我们进行软分叉升级,我们规定每到2016的整数倍作为一个升级的周期,那么在这个周期内,如果有80%的算力认可我的提议,那么就代表升级成功,将该提议添加为共识规则的一部分,如果不够80%,就进入下一个周期,也就是,在结束时间到达之前,我有可能已经升级成功,也有可能升级不成功。在升级过程中,没有成功的block,我按照原先的规则保留,但是升级成功之后,假设我又来来之前的一个block,我会进行check,然后将其抛弃掉。

在主链中,我每要加入进去一个块,我就会进行一次check,看其是否符合当前的共识规则。但是如果在周期内的话,会有cache所以,咱们只需要知道最后一个块的状态信息,剩余在这个周期内的所有块都保存和它一样的状态信息。

这里需要注意一个问题,我比较的时间并不是结束的时间,而是中位数时间(结束时间所在的块往前数10个块,加上本身是11个块),因为每一个块的时间是矿工随意填写的一个值,所以我拿到这11个块之后,进行一次排序,取第6个块的时间来作为我真正需要去比较的时间,众所周知,6个块的时候,我这个链就处于一个稳定的状态,所以,这种方式能够有效的降低随意性。

BIP09 图解versionbits_第2张图片
bits
  • bits:标识位,代表我需要增加哪些共识规则
  • startTime:开始时间
  • endTime:结束时间

version是一个32字节的bit,前三位是固定的:001,第5为是0或者1,1代表赞成,0代表不赞成。


BIP09 图解versionbits_第3张图片
软分叉升级

本文由copernicus 团队 冉小龙 编写,转载无需授权!

你可能感兴趣的:(BIP09 图解versionbits)