稿件由路可比特整理自《区块链生存训练》
2017年8月1日20:20,Bitcoin Cash(前身是Bitcoin ABC)给比特币的区块链来个硬分叉,虽然支持它的矿工的算力并不大,但最终还是闹出个BCC(国外经常叫BCH)新币来,该币刚上交易所的时候,曾经卖到5000元,持币者凭空多了一种币也挺高兴的。
如图12-1,分叉这个概念看似并不难理解,与道路的分叉很像,一条主路是BTCBTC1,另一条路是BCC,注意这里的BTC1只是为了区分8月1日之前的BTC而起的新名字,并没有这个币。BCC和BTC的观点不一致,谁也说服不了谁,最后分道扬镳,分别在各自的区块链上挖矿。
12-1分叉示意图
分叉也有叫分裂(Split)的,但比较专业的说法是Fork,因为软分叉简称为SF(Soft Fork),硬分叉简称HF(Hard Fork)。至于什么是硬分叉,什么是软分叉暂时先不管,先来仔细看看分叉是如何形成的。
比特币系统中矿工们想写入一个新区块,非常不容易,需要完成工作量证明PoW,也就是要做一道计算量非常大的算术题,这道题说简单不简单、说难也不太难,平均10分钟就有矿工计算出来,然后发布一个新区块。
如图12-2所示,假设黑点是分布在世界各地的节点,大黑点代表矿工节点,小黑点代表普通的钱包节点,真实世界里的节点比这多得多,而且连接关系也不是按照地理位置相连的,这里为了形象化地说明分叉进行了大量简化(本图借鉴了《精通比特币》中的思路,这里进行了简化和改进)。
左下角为区块链,最新产生出来的区块高度为478129(我写此文的最新高度),这个区块已经在整个世界的网络中进行了广播,并且全网都认可了这个区块。
12-2区块链世界的通常情况
世界这么大,有些事就是非常凑巧,假设两个矿工(矿工A、矿工B)几乎同时完成了工作量证明PoW,分别向比特币网络上广播他们的成果。由于大家所处的位置不同,网络连接不同,有些节点先收到A广播出来的区块,有些节点先收到B广播出来的区块,这时候就出来了临时分叉。
如图12-3,节点A附近的收到了478130的蓝色区块,节点B附近收到编号也是478130的红色区块,其它的那些仍是黑色的节点尚未完成同步。
12-3两个矿工几乎同时都找到新块
随着时间的推移,它们很快就分化为蓝色阵营或者红色阵营(图12-4),蓝色阵营承认蓝色的478130区块,红色阵营承认红色的478130区块。再强调一遍,实际情况并不与地理位置相关,这里只是让分裂或分叉看得更形象。
12-4区块链世界分为两个阵营
不管收到了蓝色区块还是红色区块,矿工们可没有闲着,因为矿场要交巨额的电费,挖不出比特币,矿场就要关门。此时,假设红色阵营的矿工C,挖出了478131区块(用黑色标记),立刻通知全世界。它附近的节点并不傻,只认最长的链,马上变为黑色阵营(图12-5)。
12-5在红色阵营里又有新块产生
随着时间的推移,如果这段时间内没有矿工计算出新答案,则全网很快就承认右侧的链为主链。这时候整个世界又和平了(图12-6),最新的区块高度为478131,蓝色的478130区块被孤立了,明智的矿工不会基于它再做工作,马上在最长的链上投入算力,开始下一轮的计算。
12-6区块链世界又回归和平,蓝块被孤立
区块链上的临时分叉很常见,但工作量证明PoW的计算量太大,在最长的链上进行计算是非常明智的,经过一段时间后大家就会达成共识,主链旁的小叉叉慢慢会被大家遗忘的。
明白了分叉的基本原理后,就比较容易理解51%攻击的概念了。
在2017年8月之前,BIP91被锁定,大家以为比特币不会分叉了,没想到杀出来一个比特现金Bitcoin Cash(前身是Bitcoin ABC),忽悠了一些矿池的算力来个硬分叉,币名也起好了BCC,8月1日20:20开始正式交易,价格一开始高达5000多元,后来稳定在2000多元。
以前买入BTC的朋友现在又遇到了一个新挑战:重放攻击。
重放攻击的英文是Replay Attack,一句话来说,就是你在一条链上产生的交易,会被重放(replay)到另一条链上,本来你只是支付了一种币,结果却额外支付了另外一种币,感觉好像被攻击了。
以太坊分叉回顾
历史上能够借鉴的真实案例就是以太坊(在第3篇里介绍以太坊)的分叉事件了,2016年7月,众筹项目TheDAO被黑客攻击,偷走了大量以太币ETH,以太坊区块链被迫进行硬分叉以挽回被盗者的损失。
以太坊核心开发者将被盗资金转移至新链(还叫ETH)地址中,原来的旧链暂时被人遗忘。没想到没过多久,当时最大的交易平台 Poloniex (简称P网)突然宣布,旧链的代币命名为 ETC,开始上架交易。
这可把其它交易所弄了个措手不及,遭受了严重的重放攻击,比如云币网赔了4万枚ETC,其它交易所分别是什么情况就需要自行搜索了,这个事件也从另外一个方面考验了交易平台的信誉。
今年,交易平台都有经验了,提前进行了BCC上线前的部署工作,并分别发出了相应的声明。
小结:
分叉并不可怕,还多了一种币
重放攻击就是一条链的交易重放到另一条链上
分叉期间,如果不会操作就握住不动,静等尘埃落定
自己掌握私钥的话,还能分离出一种币,这种操作随时都可以,丢不了
分叉期间,有良心的交易所会配发给你另一种币
领取专属 10元无门槛券
私享最新 技术干货