比特币软件、区块、交易版本升级及BIP9规范

可以看到苹果版本号是简单的数字增加,有时数字加字母。安卓则是有趣味地用了一些甜品名称首字母顺序,目前最新是Android N,可推测下一个版本号会是Android O再下一个是Android P。而微软的操作系统版本号较综合,有个主序内核版本号,开发代号和外部发布的版本号。早期用年份和短名如很知名的XP,后来可能是受到苹果版本号影响,开始真接换用简洁的数字,......

可以看到苹果版本号是简单的数字增加,有时数字加字母。安卓则是有趣味地用了一些甜品名称首字母顺序,目前最新是Android N,可推测下一个版本号会是Android O再下一个是Android P。而微软的操作系统版本号较综合,有个主序内核版本号,开发代号和外部发布的版本号。早期用年份和短名如很知名的XP,后来可能是受到苹果版本号影响,开始真接换用简洁的数字,Win7,Win8和现在的Win10。你可能会问Win9呢?答:斩华雄去了。其实真实答案是为了避免和早期的Win95/98产生混淆,因此直接跳过了。


版本号的意义  
1
设计好的版本号用途很多。

  

  每个知名的产品,都会有各种各样的版本号。有些是开发代号,有些是项目号,有些是产品发布号。用这些各种各样的版本号,各家公司是有很多自己的理由,汇总总结如下。

1.1 研发与市场需求

  最通常的情况,一款产品在内部开始构思和研发时就要取好名称,而在发布前根据产品情况、市场情况才能最终决定市场名,像人的乳名和正式始名。没必要也较难在项目刚研发时就完全确定未来产品市场号,所以代号用于项目开发过程中内部交流,简短可方便交流沟通(比如在圈内交流时每次说Satoshi 0.13.1版本,不如直接说SW版本简单)。在正式发布时,再根据市场决定是用在产品上,还是再起个新的对外的产品代号。


1.2 技术保密需求

  新技术的研发,有时会有保密的需求,尤其一些保密严格的公司。可为某代号项目工作,却不知道这项工作具体用在什么产品上。例如苹果就曾经被列为高度机密的项目,命名为“Project Purple”(紫色项目)来开发一个保密项目。一些没必要让其知道细节又需要让辅助开发的员工,只要让其知道其在为Purple项目的一个子模块工作即可,至于整个Purple项目具体是什么,其可以不知。等以后解密后才再知道,原来其就是知名的iPhone手机项目。若不弄个代号,可能提前泄密苹果在研发做手机了。


1.3 工作热情需求

  长期为一个版本号工作较容易失去激情,因此弄一些版本代号更好记、更便捷、更朗朗上口,在组织内部和粉丝群体里交流比念版本更方便更有趣。很多公司员工和用户会觉得有个开发代号会比较酷。可以比如各种动物代号、星系代号、水果代号等等。常换版本代号比只是单纯的数字增加,更能激发工作动力。有时也能区分工作小组,例如Core、Classic和BU即是版本又是开发团队。



比特币版本号历史  
2
软件、区块、交易的版本介绍。

2.1 软件版本历史

比特币QT钱包软件版本历史来自Github.com

 https://bitcoin.org/en/version-history

2016-10-27 - Bitcoin Core version 0.13.1(SegWit)

2016-09-19 - Bitcoin Classic 1.1.1

2016-08-27 - Bitcoin XT Release 0.11.0F

2016-08-23 - Bitcoin Core version 0.13.0

2016-08-18 - Bitcoin Unlimited V0.12.1 c

2016-07-27 - Bitcoin Unlimited V0.12.1 b

2016-06-22 - Bitcoin Classic 1.1.0

2016-05-31 - Bitcoin Classic 0.12.1

2016-04-15 - Bitcoin Core version 0.12.1

2016-03-08 - Bitcoin Classic 0.12.0

2016-02-23 - Bitcoin Core version 0.12.0

2016-02-13 - Bitcoin XT Release 0.11.0E

2016-02-09 - Bitcoin Classic 0.11.2

  可从上面的版本发布和下图看到,2016年是比特币版本的最多最杂的一年,各种fork版本Classic,Unlimited纷纷诞生崛起,XT版本虽然已经几乎没有节点了但也发出了E版本和F版本。目前最新的同时也是节点比最多的版本是由Core推出的0.13.1版本,约35%左右全节点占比。因0.13.1版本主要加入了Segregated Witness隔离验证软分叉,因此大家一般也称其为SW版本。

 

2015-12-09 - Bitcoin XT 0.11D

2015-11-13 - Bitcoin Core version 0.11.2

2015-10-15 - Bitcoin Core version 0.11.1

2015-10-14 - Bitcoin Core version 0.10.3

2015-10-10 - Bitcoin XT 0.11C

2015-09-08 - Bitcoin XT 0.11B

2015-08-06 - Bitcoin XT 0.11A

2015-07-12 - Bitcoin Core version 0.11.0

2015-05-19 - Bitcoin Core version 0.10.2

2015-04-27 - Bitcoin Core version 0.10.1

2015-02-16 - Bitcoin Core version 0.10.0

2015-01-15 - Bitcoin XT 0.10rc3

  2015年年初正式发布的XT版本,打破了Bitcoin只有单一开发团队和版本的历史。同时也正式标志着扩容之争从观点分歧之争阶段,演变为了版本之争阶段,但是比特币区块链上目前各个版本还是兼容的,并没有链分叉,更加没有分裂币种。除了软扩容路线的Core版本外,其它版本一般均是支持硬扩容路线。从下图最新节点占比上来看目前Core版本还是占主流达85.11%,算力区块上也是大多数矿池都在使用Core版本的比特币软件。

 

2014-09-27 - Bitcoin Core version 0.9.3

2014-06-19 - Bitcoin Core version 0.9.2.1

2014-06-16 - Bitcoin Core version 0.9.2

2014-04-08 - Bitcoin Core version 0.9.1

2014-03-19 - Bitcoin Core version 0.9.0

2013-12-09 - Bitcoin-Qt version 0.8.6

2013-09-13 - Bitcoin-Qt version 0.8.5

2013-09-03 - Bitcoin-Qt version 0.8.4

2013-06-25 - Bitcoin-Qt version 0.8.3

2013-05-29 - Bitcoin-Qt version 0.8.2

2013-03-18 - Bitcoin-Qt version 0.8.1

2013-02-19 - Bitcoin-Qt version 0.8.0

2012-12-14 - Bitcoin-Qt version 0.7.2

2012-10-19 - Bitcoin-Qt version 0.7.1

2012-09-17 - Bitcoin-Qt version 0.7.0

2012-06-25 - Bitcoin-Qt version 0.6.3

2012-05-08 - Bitcoin-Qt version 0.6.2

2012-05-04 - Bitcoin-Qt version 0.6.1

2012-03-30 - Bitcoin-Qt version 0.6.0

2012-03-16 - Bitcoin-Qt version 0.5.3.1

2012-03-14 - Bitcoin-Qt version 0.5.3

2012-01-09 - Bitcoin-Qt version 0.5.2

2011-12-15 - Bitcoin-Qt version 0.5.1

2011-11-21 - Bitcoin-Qt version 0.5.0

2011-09-23 - Bitcoin version 0.4.0

2011-07-08 - Bitcoin version 0.3.24

2011-06-14 - Bitcoin version 0.3.23

2011-06-05 - Bitcoin version 0.3.22

2011-04-27 - Bitcoin version 0.3.21

  早期的比特币软件版本升级简单地序号增加,称号从最开始直接Bitcoin,到Bitcoin-Qt(QT是技术,一种跨平台的C++图形用户界面应用程序框架。现在的各比特币fork版本,其实都是属于QT版本,BitQT.com),再到Bitcoin Core。值得注意的是除最新Classic外,各个版本版本序号的第一个版本数字都是0,就是说目前还没有到Bitcoin 1.0.0。由此可见比特币版本升级的谨慎。我觉得若SegWit能激活,LN闪电网络能成功运行,那时既有高安全的主链,又有快速秒速确认的闪电,且区块结构也得到根本优化,那时是完善的点对点电子现金系统,应该可以正式进入Bitcoin 1.0时代了。


2.2 区块版本号历史

  区块链中的区块版本,见下链接下图。

 https://btc.com/stats/block-ver

 

  虽然软件版本众多但是他们都是生成相兼容的版本的区块。就像Office Word的软件子版本众多,但都是生成*.doc文件,然后后来才升级到*.docx,只进行了一次升级。

  比特币的区块版本如图所示,进行了v1、v2、v3到v4的版本升级,而在v4之后的目前,是升级到BIP9规范来控制版本升级。

  在实施BIP9之前是块版本号version逐个增加,当近1000个块中的版本超过95%都是新版本时,则触发启用新特性,在之后不再接收旧版本号的块。但是有个问题是需要耗的时间太长,最快的v3到v4也用了一个半月左右的时间,并且一次只能表决一个特性升级。最新的BIP9下可以解决。

  块版本号version为4字节,即32个1或0比特位。如下:

二进制格式:

 001   0 0000 000000000000000000000000
----   -------------------------------
固定保留  29个特性标识位

  在BIP9中前3个固定为001,后面的29个对应于29个特性升级,置为1表示支持此特性,因此可以最多29个特性升级并行同时投票支持更新。

  若要支持BIP68/112/113软分叉,那么区块版本号是: 0x20000001,二进制为:0010 0000 0000 0000 0000 0000 0000 0001

  若要支持SegWit软分叉,那么区块版本号是: 0x20000002,二进制为:0010 0000 0000 0000 0000 0000 0000 0010

  若要支持BIP109(Classic 2MB)硬分叉,那么区块版本号是:0x30000000,二进制为:0011 0000 0000 0000 0000 0000 0000 0000

  若想同时去支持SegWit软分叉和BIP109(Classic 2MB)硬分叉,那么区块版本号是:0x30000002,二进制为:0011 0000 0000 0000 0000 0000 0000 0010

  目前Unlimited硬分叉还没有正式加入BIP9,未在29个特性标识位中选则一个,而只Coinbase中留言投票,用BIP9默认未进行投票的区块版本号: 0x20000000,二进制为:0010 0000 0000 0000 0000 0000 0000 0000


2.3 交易版本号历史

  区块中每笔具体交易的版本号也是4个字节,默认为0x01000000,目前自诞生以来没有修改过。下图是交易的数据结构,整理自《Master Bitcoin》的表5-1、表5-2和表5-3。


隔离验证交易

  为了实现兼容之前节点,其继续维持版本号,仅仅对上图中的红框中的内容移动到外面。从而达到压缩交易,节省区块空间的目的。验证脚本字段的数据移动到区块外面,隔离放在区块外的验证块中。除此之外并没有太多其它的改动,并不是像有些人说的那样把比特币交易格式都完全重新构架。

  因为一个交易中,红框的解锁验证脚本往往占很大空间,将其隔离出去后,可以提升大约70%的额外空间,就是说相当于软扩容到1.7MB。另外隔离出来放到验证块,而原数据区块1MB而和验证块可能需要0.8MB甚至几MB,就是说隔离验证并不是节省存储空间,而只是节省区块的空间,增加1MB能打包进去的交易量。将验证隔离掉后交易ID也能固定下来,从而解决交易可锻性问题,进而为后期的闪电网络和侧链技术等打下技术基础。


灵活弹性交易

  这个是由Classic开发的,并其好像是打算升级交易版本号到 0x04版本。Tom Zander是弹性交易的提出者和创建者。目前在Bitcoin Classic的最新版本中已经整合了这个特性,但应该是尚未激活。相关介绍看视频和链接:

http://www.8btc.com/tan90d92  / tan90d93

http://zander.github.io/posts/Flexible_Transactions/

视频长度:12分24秒

(((WiFi)))下观看(闪电HSL字幕)

http://mp.weixin.qq.com/s/awLuW1a57oAZDtH6F2LnTw


Flexible Transaction will look like this;

TxStart (Version)0x04

TX-ID data

inputsTX-ID I try to spent1 + 32 bytes
Index in prev TX-IDvar int
outputsTX-out Value (in Satoshis)var int
TX-out scriptbyte array
inputsTX-in-script (Witness data)byte arrayWID-data
TxEnd0x2C

  根据目前的了解知识和上图,弹性交易并没有将验证数据隔离,而是放到了交易后面,并且好像是将输入输出计数器、脚本尺寸、输入后面的未准确定义含义的Sequence序列号以及交易最后的nLockTime时间戳等等先全部删除,然后前面是纯输入和纯输出数据,后面是验证数据Witness,以及可以弹性定义需要的其他数据。其描述是兼容的软分叉,但是如此颠覆整个中本聪交易构架的交易格式,我觉得有可能很难真正地完全兼容之前版本的软分叉来实现。

  开发者测试了187000个最近的交易,并检查了这个改变会对交易的大小有什么影响。交易从平均值1712字节下降到1660字节,中间值从333个字节下降到318个字节,节省空间效果并不明显。 而其说后期删除验证数据后能75%,这是和隔离验证效果接近的,不过灵活弹性好像没有给验证的隔离存储空间,若删除好像就是完全删除了,并且其它删除的字段太多,较担心有可能会有一些安全隐患,要谨慎些多多做测试和足够共识下再激活。


BIP9版本升级规范  
具体介绍BIP9的规范升级流程。


  升级规范BIP9的特征:支持多个特性同时升级、新增投票时间区间、新增锁定期,具体见下链接和下图。

https://news.btc.com/m/228

https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki


 

(图中MTP是最近11个块的时间戳中位数)

BIP9的升级特性所处状态有:

  定义DEFINED :每个特性的升级设定,会定义写到某一个软件版本中,从不同升级特性从29个特性标识位中选定一个。如:BIP68/112/113软分叉选了最后1个特性标识位,SegWit软分叉定义选了倒数第2特性标识位。同时还定义激活门槛,启动时间,结束时间和锁定时间等。

  DEFINED is the first state that each soft fork starts out as. The genesis block is by definition in this state for each deployment.


  启动STARTED :过了启动时间后,会开始定期地收集区块版本的投票情况。若在结束时间前,能达到激活门槛,则进入锁定,否则进入失败。

  STARTED for blocks past the starttime.


  锁定LOCKED_IN :收集到足够占比超过激活门槛的区块时进入,而一旦进入锁定状态,不再看是否区块投票降低,必然会在锁定期过后将来激活。锁定期一般设为2016个块,大约两周时间。

  LOCKED_IN for one retarget period after the first retarget period with STARTED blocks of which at least threshold have the associated bit set in nVersion.


  激活ACTIVE :锁定的区块数量达到时,进入激活正式启用新特性。

  ACTIVE for all blocks after the LOCKED_IN retarget period.


  失败FAILED:时间过了定义的结束时间,仍没有达到激活门槛的区块占比,一般95%区块,那么则进入失败状态。

  FAILED for one retarget period past the timeout time, if LOCKED_IN was not reached.


 

 上图中为目前三个BIP9的升级示例:

  绿色的线是BIP68/112/113软分叉,区块支持很快达到95%门槛而目前已经成功激活。

  紫色的线是BIP109(Classic)硬分叉,目前区块支持还很低很低,不超10%,目前不到1%,估计不太可能达到75%门槛而可能会失败。

  蓝色的线是BIP141/143/144/145(SegWit)软分叉,区块支持目前很快超过了20%,而要求达到95%才激活,还要看未来的支持算力情况。目前国内国池pool.BTCC.com支持SW,其他矿池多在观望中。矿工若支持SW可以切算力过去。具体SegWit隔离验证软分叉的近期的区块支持情况,见下图:

 

  https://bitcoincore.org/en/segwit_adoption

  这个网址还收集的各币圈公司和项目的支持情况。目前有77家币圈公司和项目计划支持SW隔离验证,其中有28家已经做好了准备,25家正在准备中。

  Segwit Ready: 28, work-in-progress: 25, planned: 24

  更多版本资料见BitQT.com


  另外注意BU版本目前是不支持BIP9升级规范的,其只是简单地遵守最长链,哪条链长就简单承认跟随哪条链。从而理论上有51%算力就能激活硬分叉新特性的可能,因其是硬分叉有可能有观点分歧其它49%算力可能不认同不跟随,从而有分裂币圈风险。呼吁BU能采用规范的BIP9进行升级投票,从29个中选定一个自己的特性标识位,给出较高激活门槛,最好95%,让矿工算力公开投票。

欢迎转载若转请保留下面打赏 

1BiteJaaSFTQoHFYjfNiQwEHi1vNyNNPEo

DFrzBZXDjfMhLHS9UFNGxhPtb9egMpZNRW

诚征合作伙伴---加拿大留学包就业项目
如果有一天,我突然失忆,怎样把比特币留下来

相关文章

 

评论

尚无评论。我来做首评施比!
已经注册? 在这登录
游客
2018-06-23 04:01
Top