当前位置:首页 > 比特币新闻 > 正文

什么是共识,什么是分叉,什么是兼容性

来源: 互联网时间:2016-10-11 09:23:00
看到文《什么是硬分叉,什么是软分叉,什么是共识?》写的此文,虽然标题这么写,但是我不打算给一些很具体的定义的,只是聊聊我的理解。因为这么概念本事也是需要共识来形成的。

1、共识

共识的对立面是权威规定,中心制定。共识的主体是一群体,它前面可以增加一个百分比来修饰。例如75%共识,就是说群体中有75%的个体支持认同。我们常听到的共识有:

区块链共识:就是各节点共同认同下一个区块,形成区块链,比特币是采用POW算力来实现的,需要100%共识,没有获得共识的新区块会成为孤立区块,无法写入主链。而若持续获得一定共识那么就会形成分叉链。

算力共识:就是算力投票。一般在每个区块的Coinbase字段写入特定支持的字段,或者通过版本号来进行投票。比特币的Classic版本就近似是规定了达到75%的算力共识时,启动2MB硬分叉,而在BIP9规则下,需要达到95%算力共识才会启动软分叉。

社区共识:就像是总统大选的选民民意,通过民意调查只能得到近似的值且会变动,同样社区共识也无法得到准确的值,只能由算力投票、币量投票和节点投票,以及一些社区投票来大致的得到近似。社区共识的主体不仅仅是粉忠,用户,炒币者等自然人,还包括公司组织等,每个个体的观点需要根据其在币圈的地位影响进行加权。

协议共识:比特币交易格式、区块格式和设定规则等。交易格式是每笔交易的格式要求,区块格式是众交易打包形成区块传成链的要求,设定规则是币总量产量减半设定,难度调整设定,手续费的硬性设定等等。当无法形成100%的协议共识时,往往就会形成分叉。

投票社区共识

http://8btc.com/thread-40509-1-1.html

2、分叉

分叉有区别为普通的升级,普通的升级在升级前后是没有影响协议共识的,也一般不需要社区共识或算力共识的参与。而分叉根据对协议的修改情况分为软分叉和硬分叉。

现有的定义:

【闪电定义】硬分叉是指比特币区块格式或交易格式(这就是广泛流传的“共识”(应该是部分协议共识))发生改变时,未升级的节点拒绝验证已经升级的节点生产出的区块,不过已经升级的节点可以验证未升级节点生产出的区块,然后大家各自延续自己认为正确的链,所以分成两条链。

https://bitcoin.org/en/glossary/hard-fork

A permanent divergence in the the block chain, commonly occurs when non-upgraded nodes can’t validate blocks created by upgraded nodes that follow newer consensus rules.

【闪电定义】软分叉是指比特币交易的数据结构(这就是被广泛流传的“共识”(应该是部分协议共识))发生改变时,未升级的节点可以验证已经升级的节点生产出的区块,而且已经升级的节点也可以验证未升级的节点生产出的区块。

https://bitcoin.org/en/glossary/soft-fork

A temporary fork in the block chain which commonly occurs when miners using non-upgraded nodes violate a new consensus rule their nodes don’t know about.

我觉得不能说哪个定义正确还是错误,具体的定义可以根据已经较大社区共识的两者的区别来自己总结,不需要权威来指定。

硬分叉:没有向前兼容性,之前的版本将不可再用,需要强制升级。

软分叉:有较好的兼容性,之前版本至少部分功能可用,可不升级。

硬分叉:在区块链层面会有分叉的两条链,一条原旧链,一条分叉新链。

软分叉:在区块链层面没有分叉的链,只是组成链的区块,有新区块和旧区块。

硬分叉:需要在某个时间点全部同意分叉升级,不同意的将会进入原旧链。

软分叉:相当长的时间里,可允许不进行升级,继续使用原版本生成旧区块,与新区块并存。

硬分叉与软分叉区块示意图

3、兼容性

在分叉的定义中,很大程度上提到了兼容性。根据百科的定义分为向上兼容和向下兼容。

向上兼容,在较低档计算机上编写的程序,可以在同一系列的较高档计算机上运行,或者在某一平台的较低版本环境中编写的程序可以在较高版本的环境中运行。

向下兼容,又称向后兼容(backward compatibility)、回溯兼容,在计算机中指在一个程序和/或库更新到较新版本后,用旧版本程序创建的文档或系统仍能被正常操作或使用(包括写入),或在旧版本库的基础上开发的程序仍能正常编译运行的情况。

兼容性在具体到比特币后,包括:节点,交易,区块三个层面。

(1)节点层面

节点向前兼容,没有升级的节点接受升级过的节点生产的交易和区块,即原旧节点,在新节点的网络中依旧可以运行,这是软分叉能实现,而硬分叉无法实现的。

节点向后兼容,升级过的节点接受没有升级的节点生产的交易和区块,即之前的旧交易和旧区块依旧有效,这是无论软分叉和硬分叉都能做到的。

(2)交易层面

扩容硬分叉仅仅是打包区块的大小,对具体交易没有任何影响。因此没有问题。软分叉以隔离验证为例,新交易与旧交易的不同点仅仅在于,隔离验证在打包时,将签名的内容隔离出来。这个签名分离的过程可以由节点发送交易时完成,也可以在节点接受交易后由接受的节点自己来完成。因此在交易层面,节点之间传送交易时,完全可以做到传旧格式交易,也可以传新格式交易。若为了更好的兼容,规定完全传旧格式交易,即使新节点之间也传送旧格式交易都是可以的。因为两种新旧格式的差异仅仅在于签名所在放的位置,可轻易相互转化。做这交易层面的兼容应该是不困难的。


隔离验证示意图

(3)区块层面

扩容硬分叉因为旧节点是只接受打包小于1MB的区块,因此硬扩容之后的大区块是无法被旧节点接纳的,从而在区块层面,硬分叉是无法做到向前兼容的,就是说区块层面,旧节点无法融入大区块节点形成的新网路。

扩容软分叉。具体隔离验证的原理是将区块打包成了两部分,一部分是不超1MB的交易区块,满足旧节点对于区块的要求,而另外一部分是验证区块。验证区块并不会写入到比特币主链中,因此也就不需要旧节点来校验,就是说验证区块是没有大小限制的。有些人担心旧节点不会校验这些验证了,会不会不安全,其实还有新节点在校验呢。新节点也是足够多的。

另外在隔离验证新区块出现时,应该是可以与原来的旧区块做到共存的。当在上一个区块的结果上计算下一个区块时,仅仅只看上一个区块的HASH值即可,根本就不必关心上一个区块是旧区块还是新区块。同样新打包的区块,不论是新旧,都可以被所有的新旧节点接纳,因为主链部分是小于1MB的符合旧节点的接纳条件。另外不同点在于新节点在接受新区块时,还附带接受隔离出来的验证,以便进行验证交易。

4、总结

有些人会认为实现软分叉,实现兼容,会很复杂,需要很多兼容设计,会需要很多代码。所有字段都已经详细定义好了,实现起来只能用现有的定义的组合会很困难。其实BIP9便是用已经定义好的版本号字段来实现投票软分叉的。而隔离验证将重新定义签名字段。不要因为困难,就否定其实施的可能性。

其实现在隔离验证已经在8月份发布的Bitcoin Core 0.13.0首次包含了隔离验证代码,但并未正式激活而已。http://www.8btc.com/lighting-network-joseph  “一旦隔离见证在比特币网络中激活,闪电网络就能使用。这就是说,在最初阶段,闪电网络应该只能用于小额支付,因为网络和软件要进行应力测试。目前,闪电网络正在比特币测试网络进行测试。”

软分叉方案离我们并不远,虽然困难,但聪明的开发者们已经基本实现了,且已经和正在进行大量的测试。万一有漏洞也是可以修复的,不会出大问题。而万一匆忙硬分叉扩容,导致币圈分裂了,那才是大问题。

(写了整整半天,现在还没吃饭。请各位过目,可关注微信“Bite酱”交流。若有写错的地方请您一定指出,如果觉得对您有用,欢迎打赏点给我。)

免责声明:

1.本文内容综合整理自互联网,观点仅代表作者本人,不代表本站立场。

2.资讯内容不构成投资建议,投资者应独立决策并自行承担风险。