首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

升级改进协议2-BIP9协议

上文提到不同升级方案的改进协议。改进协议是针对之后的升级方案能更好地考虑整个网络而提出的建议,并不是某一次的升级方案。

上文最后讲解到ISM改进协议也有一些不足:

假设升级方案A采用了ISM升级改进协议,将区块版本号设置为2,即,新版本产生的区块号都为2。假设此时全网有一小部分节点升级了新版本,它们产出的区块版本号确实为2。如果此时,又有一个升级方案B,也需要进行升级,根据ISM的升级改进协议,接受方案B的节点需要将区块版本号设置为3。

那么问题来了,之前已经升级到方案A的节点到底要不要升级到方案3,因为此时根据ISM规则,前1000个区块里,版本号为2的区块并没有达到950个,也就是说,如果这些节点又升级到了方案B,那么这些节点在此后所产出的区块版本号肯定为3,就永远不可能为2了。那么这样的话,升级方案A可能会因为没有节点产出版本号为2的区块,导致方案A失败!

所以大家只能等前一个升级方案升级成功之后(前1000个区块里有至少950个区块的版本号为升级方案制定的版本号),再去开始执行下一个升级方案!

其实还有另外一个问题,如果始终没达到1000个区块中有只是950个区块的状态,那么会一直持续等待,不会停止!

在意识到这两个问题之后,大家设想,如果在一个方案升级过程中,可以开始另一个方案的升级就好了,并且,需要一个可以停止的操作。于是,有人提出了更好的改进协议,以解决上述的两个问题:

1、将版本号展开,以0000000....00000形式展示,总共32个位置,除了前3位不能动,剩下的29个位置,代表了需要升级的29个标识,如果某方案需要升级,就将某位置的0修改为1,也就是说,同时可以最多支持29个方案的升级。升级结束后,将1归为0即可。

2、设置状态机制,并且必须设置升级停止状态。

总结出的协议名称为BIP9协议

在讲解BIP9协议之前,我们需要回顾一下挖矿的难度调节机制。在比特币挖矿为什么10分钟挖出一个区块?文章中,我们详细讲解过难度调整。为了保证平均每10分钟产出一个区块,不会有过快或过慢的情况,下次的挖矿难度值会根据前2016个区块的难度综合计算出来。所以,一个完整的难度调整周期,是指难度调整之后,从第一个区块一直到最后一个2016区块,算一个完整的难度调整周期。不是随便取2016个区块。

同时,我们也需要了解一个词,MTP(MedianTimePast), 意思是节点产出的这个区块与前10个区块排序,取中间第6个的区块的生成时间,作为当前时间的参考。

并且,如果此时有一个基于BIP9的升级方案,那么此升级方案里需要规定升级开始日期以及升级过期时间。

了解了这两个名词以及基于BIP9需要准备的信息后,BIP9的升级改进协议的详细情况如下:

2、在STARTED状态中,程序自动监督如下事情:如果在一个完整难度调整周期内,如果有1916个区块将区块版本号里的对应位置的0设置为1,那么,从下个难度调整周期开始,就进入LOCKED_IN状态。1916区块实际上是按照2016的95%算出来的,代表了95%的算力都已经更新了新版本。

3、LOCKED_IN状态会持续一个完整的难度调整周期,周期里,旧节点产生的交易和区块仍然被新节点接受。结束之后,立即进入ACTIVATED状态,此时旧节点的所有信息将被新节点拒绝。

4、如果MTP大于等于升级过期时间,都没有进入ACTIVATED状态,那么此方案则升级失败,停止使用此方案的功能。将版本号对应的位置由1改为0。

历史上采用BIP9协议的第一个方案是新增CHECKSEQUENCEVERIFY操作码方案,升级开始时间是2016年5月1日,升级过期时间是2017年5月1日,在第417312区块进入LOCKED_IN状态,在第419328区块,进入ACTIVATED状态,所有旧节点都被拒绝,将版本号对应的位置由1改为0。

关注【通俗易懂区块链】,学懂区块链

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180220G08MWG00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券