比特币现金(BCC)暴涨之际,比特币分叉这个术语也开始在越来越多的报道中出现。究竟数字加密货币为何要分叉?硬分叉和软分叉到底有什么区别?这需要从软件开发的特性讲起。
谈谈比特币分叉先讲一个历史事件,在2010年的时候,有一个黑客利用比特币的一个漏洞,刷出一笔包含了1844亿个比特币的交易。他利用的漏洞是比特币只定义了输出总金额不能大于输入总金额,但是没有限制面值不能为负。这样黑客可以让输出中包含一个很大的负值比特币,那其他剩下输出的比特币总额就能大大超过输入总额。这个事情被开发人员在半天内及时发现并发布了补丁,使得这笔交易的输出变为无效。事后看这是个很低级的漏洞,但是如果没有黑客利用,可能大家也不会注意到这个漏洞。越是常识性的东西越是不容易想到要去加上这条限制。
在中本聪提出比特币这种去中心化的数字加密货币的实现思想之后,由一群程序员开发代码,从软件上实现了比特币。任何大型的软件都或多或少会有漏洞(bug),由于人的疏忽,流程上的缺失或者时间紧迫下的赶工,都可能导致漏洞。即使假设一个软件消灭了所有漏洞,它也有自己的局限性。同一个软件只有10个人用和有100万个人用,体验是很不一样的,其考量因素也会不一样,因而设计思路也是不一样的。任何软件设计都需要找到合适的平衡点,在时间与空间之间取舍,在效率与安全之间取舍,因此并不存在完美的普适性的软件。
比特币在开发之时,那几个程序员根本就想不到比特币能够得到现在这样广泛的关注和参与。当时的代码实现中有很多影响软件吞吐量的限制被写死,比如一个区块的大小为1M,一笔交易大小至少要有250个字节,按平均10分钟挖出一个区块来算,每秒钟只能处理7个交易,而像visa这样的信用卡组织高峰时每秒钟可以处理上万笔交易。在当时所能预见的情形下,这些限制都是合理的。但是比特币的发展超出了任何人的想象,尤其是频繁的交易使得最初设计的比特币软件已经难于应付,出现了区块拥堵的现象。
需要解决这个问题,就需要对软件升级。比特币依靠去中心化的节点达成共识来保证交易安全性,而对比特币升级实质是对达成共识的规则进行修改,由于比特币去中心化的特性,系统在同时存在新旧软件的情况下,新旧节点就可能无法达成共识,这就会导致区块链分叉。
分叉可分为硬分叉和软分叉。所谓硬分叉,是指对软件进行修改之后,跑着旧软件的节点不认可新软件的节点挖出来的区块。也就是说新软件下达成共识的规则超出了旧软件限定的规则,例如增加一种新的加密方式,旧的节点就无法验证,自然会拒绝新区块。而软分叉是指新软件达成共识的规则依旧能遵循旧软件的规则,也就是说新软件只能把规则改得更严格,这样它达成共识的规则就包含在旧规则之中,例如原来的规则有一条是要求交易输出的比特币之和不大于交易输入的比特币之和,现在修改规则之后可以规定,在满足上述条件的情况下,还要求输出结果中的比特币按面值从小到大排列(先不管这个规则的合理性),那么按这个新规则挖出来的区块肯定是满足旧规则的要求,新的区块能被所有旧节点承认,而旧节点挖出来的区块就可能不满足新规则,会被新节点拒绝。
软分叉适合小修小补,利用一些预留字段等方法,来达到不伤筋动骨的效果,比如比特币的交易数据结构里有些字段一开始是没有用到的,后来想要增加一层验证,就可以用这个字段去存储需要验证的数据,但是这样的字段是有限的,你用光了再想要增加新的验证就没办法了。此外由于软件漏洞,历史上几次软分叉最后都引起了硬分叉,及时发布新补丁后才消除了硬分叉。
硬分叉导致的是永久性分叉,因为新节点挖出来的区块不被旧节点承认,新旧节点会沿着两条分叉的主链发展。软分叉导致的是临时性分叉,因为新节点挖出的区块会被旧节点承认,但旧节点挖出的区块可能不被新节点承认。软分叉的风险是旧节点挖矿可能是徒劳无功的,因为它挖出来的矿不被新节点承认。而新区块被新老节点都承认,因此传播速度会更快,最终最长的链连接的会是新节点挖出的区块。
至于比特币解决区块拥堵的问题的具体方案,不同的利益方(主要是矿池和核心开发团队,另外还有交易所和用户)提出了不同的方案,主要分为扩容和隔离,在此不作展开。
所以比特币的分叉本质上是因为软件升级需要对正确区块的共识进行修改,导致新旧节点对达成共识的规则不一致而引起的。因为软件不可能是一蹴而就或者说是完美的,所以将来势必还会需要升级,需要分叉。至于选择硬分叉还是软分叉,不同的利益集团会有自己的想法,最终结果也难以预料。
网友评论