比特币每一个区块大小是1M,大概可容纳一千多条交易信息。如果你上一个比特币区块浏览器上去观看,你会查到现在每个区块大概都是1M左右,已经达到了区块容量的上限。如果比特币网络的转账越来越多,很多交易就不会在交易发生后第一个发生的区块被打包和确认,可能要等好几个区块甚至更久。
比特币的历史上曾经遭遇过几次“粉尘攻击”。所谓“粉尘攻击”,就是有人制造出大量的小额转账,使得网络中有大量的待确认的交易,导致正常的比特币转账不能被确认,确认时间被延迟,影响网络的正常运转。
在“粉尘攻击”事件中,很多交易者的交易等待了两天或是更久才得到了确认。虽然“粉尘攻击”是非常极端的例子,但是看现在的比特币网络,正常转账量已经远远超出了它们能够承受的最大容量。每个区块的大小现在都是1M,所以,扩大比特币现有的容量,突破现有1M大小的限制,这个过程叫做扩容。
扩容被比特币社区从2014年开始就提上议事日程。我们知道比特币网络是一个去中心化的网络,在这个世界里没有一个中心化的机构来进行运转,凡事都要靠社区去协商才能达成一致。在扩容这件事上不同的团队有不同的理念,所以推进的效率也会比较低。
2015年年底,比特币Core开发团队和矿工在香港进行了圆桌会议,当时达成了香港共识,不过这个共识很快就流产了。在2017年,纽约比特币的社区重新进行协商,采用隔离见证加2M扩容的方式再一次达成共识,我们称之为纽约共识。共识当天,得到了来自全球21个国家56家知名区块链初创公司的共同签署和全网约83%算力的支持,所以从2017年上半年开始,比特币的系统开始进行升级和部署。
其实比特币扩容的方案有很多,在历史上也经历了很多迭代。总体来说分为两种方式:一种是不碰比特币本身的区块,用闪电网络去进行比特币的结算,将大量的交易置之比特币本身网络之外;另一种是直接扩大比特币区块的大小。这里要解释一下什么是闪电网络,打个比方:几个朋友在一起玩牌,不会每一轮都去结算,而是在结束最后进行清算。A欠B10元,B欠C20元,最后C给A10元,B给C10元就可以了。闪电网络就会把很多小额的转账先进行记账,最后进行结算,这样比特币网络就不会被大量的小额转账交易所占据。但这种技术目前还没发展成熟,并且闪电网络需要在隔离见证的基础上才能去应用,目前还没被大规模应用,所以大家又把目光放到比特币区块本身大小的扩容上。
关于比特币区块本身大小的扩容是现在在技术上相对比较成熟的方式,有以下三个主要扩容方案:分别是BIP141、 UASF和Segwit2x。
BIP141是比特币Core团队提出来的隔离见证的方案。隔离见证是为了让区块承载更多的交易量而设计的。我们知道区块上的信息分为交易信息和见证信息,交易信息就是区块上记的一笔笔的转账;见证信息就是在哪个节点,在什么时间,验证交易信息的可靠性的信息。中本聪在设计比特币的时候直接把这两个信息都放在了区块里面,所以一个区块能够承载的交易信息就没有多少。如果把见证信息从区块里拿出来,区块只记录交易信息,从这个角度也可以扩大区块能够承载的交易信息。
BIP141是当前公认的隔离见证的激活方案,激活的条件是在2017年11月15日的任意一个难度周期大约两周时间内,如果有95%的算力发出准备就绪的信号,隔离见证将被激活。但是这个条件很难实现,所以有人提出其他的激活方案。比如 UASF或Segwit2x这种帮助实现BIP141激活隔离见证。
UASF从字面上理解的意思是由用户激活软分叉。 UASF采用的是一个叫做BIP148的软件来去激活隔离见证,在2017年8月1号这天,比特币BIP148软件会拒绝不包含Bit1信号的区块,也就是如果大多数矿工运行这个软件,它们会拒绝少数没有运行这个软件的矿工挖出来的区块。因此,这些矿工将会拥有最长链,并且在最长链上去激活BIP141的隔离见证。最终运行BIP141的节点会在链上看到超过95%的区块包含Bit1的信号,从而触发隔离见证。这个方案已经实施,但是我们现在看到新的区块链资产—比特币现金。比特币现金的区块大小可能上升至8M,可以容纳的交易笔数是原来比特币原链的8倍左右。
Segwit2x是有一些比特币公司和80%算力以上的矿工在从Consensus大会上签署的纽约共识协议,通过BIP91来激活隔离见证。BIP91的做法是当连续两天内有80%的算力发出支持BIP91的信号,所有BIP91的节点将拒绝所有不含BIP141准备信号的区块。因此,这些矿工将会拥有最长链,并且在该最长链上去激活隔离见证。激活隔离见证后,2017年年底或2018年年初,Segwit2x将通过硬分叉把区块上的大小上限从1M增加至2M。届时,也有可能导致新的分叉。
什么是硬分叉,什么是软分叉呢?
硬分叉是当比特币协议发生改变时,如果发生旧节点拒绝接受由新节点创造的区块情况时,区块将会分成独立的两条链,矿工需要在两条区块链中选择一条进行挖矿。
软分叉是当比特币协议规则发生改变时,旧的节点并不会意识到规则是不同的,他们将遵循改变后的规则,并接受由新的节点创造的区块,因此软分叉不会产生两条的区块链,而是在原链的基础上同时新旧并存。类似于软件升级之后,你保存了一份word2003文档的同时,你仍然可以用word2011来打开原来的word2003的文本,这就是向前兼容。
对于普通人来说,如果比特币真的分叉,最大的风险就是“重放攻击”。什么是“重放攻击”,这个事情可以追溯到2016年7月,以太坊进行硬分叉的过程中发生的事情。当时的教育平台和用户基本上都是第一次遇到这样的事情,所以经验和准备都不足,因而损失不少。举个例子,比如比特币被分裂成一种或多种比特币,我们姑且先把它们叫做比特币1、比特币2、比特币3,用户账户内同时存在这三种对应数量的分裂后的比特币,每一条链上的地址和私钥产生的算法相同,交易格式也完全相同,导致其中一条链上的交易在另外一条链上很可能也是完全合法的,所以使用者在其中一条链上发起的交易,就可以到另外一条链上重新广播,也可能会得到确认,这就是“重放攻击”。简单来说,当你在转账比特币1的时候,你的比特币2和比特币3也可能同时被转走。如果你转出的地址不是自己的,那么那些比特币2和比特币3有可能就再也拿不回来了。
对于用户来说,要防止比特币攻击其实也很简单。方法一:在尘埃落定之前,不要转账比特币。待分叉落定之后,可以将比特币分别转到属于自己不同的两个钱包和地址里,直到两个资产彻底分离完成之后,再进行比特币转账,这种方法可能需要消耗大量的时候和手续。方法二,将自己的比特币放入一个靠谱的钱包或者交易平台,这些有技术实力的平台会因为自己的运营需要,帮你处理好分叉过程中可能遇到的各种问题。如果你将自己的比特币存在仅支持分叉后的比特币钱包里,那么将可能面临分叉后产生的部分新的资产将无法获取的损失。