第6课 分叉与51%算力攻击

有兴趣朋友也可以进一步关注公众号“架构之道与术”, 获取原文。
或扫描如下二维码:
这里写图片描述

一、分叉问题

在第4课讲挖矿的时候,我们讲到每个节点都会不断的进行Hash运算,希望把自己的Candidate Block链接到区块链的末尾,成为下1个正式的新区块。

考虑下面的场景:

刚开始的时候,所有节点上的区块链是一样的(含有1,2,3 三个区块)。然后在这个时候,节点1和节点2同时挖出了Block 4,链接到各自本机的区块链末尾,也就是Block 3的后面,然后往外广播Block 4。

首先,节点1和节点2挖出的Block 4肯定是不一样的,因为是各自打包各自的Memory Pool里面的交易数据,各自计算自己的Block 4的Hash值。双方计算出来的Hash值都符合高48位为oxOOOOOOOOFFFF,所以都可以链接到Block 3的末尾。

这个时候数据就出现冲突了。节点1,节点2向外广播,因为网络传播的时延,其他节点们,有的接受到的是节点1的Block 4,有的接受到的是节点2的Block 4,接着有的在节点1的Block 4的后面挖出Block 5, 有的在节点2的Block 4的后面挖出Block 5,整个网络就出现了”分叉“。

那怎么解决呢?

答案是取最长的链!! 什么意思呢,每个矿工都会随时监听网络上新产生的区块,一旦发现区块链分叉,并且发现自己不在最长的那条链上,就会废弃掉自己那条链,把最长的那条链同步到自己机器上。从而,所有的矿工,都会在最长的那条链上面工作。

在该场景中,意味着节点1和节点2挖出的Block 4, Block 5 2条链,有1条链会被废弃。

谁被废弃,就取决于哪条链后面接着跟了有6,7,8。。。这条变的更长,然后其他节点都会切换到这条链上面,另外1条被废弃。

这意味着在短的那条链上面工作的矿工都白干了。为了避免这种情况,所有矿工都会及时的从网络同步最新的块,确保自己一直在最长的那条链上面挖。

二、51%算力攻击

经过上面介绍,我们知道当出现分叉时,所有矿工都会逐步切换到最长的那条链上面去。

那假设某个矿工(某个机构)的算力特别强大,超过了全网其他所有节点的算力之和,达到51%以上,会是什么情况呢?

场景1:

假设所有矿工都在主链上挖,当前主链已经挖到了第1000个块。然后这个掌握了51%算力的家伙,从第200个块开始,分了个叉,自己在这个新的叉上面挖。

由于它掌控了全网51%的算力,这个分叉链的增长速度比主链快。经过1段时间,它从200挖到了1200,主链才从1000增长到1100,它的链已经超过了主链。

这个时候,它向全网广播,其他节点发现网络上出现了1个更长的链,因此都切换到1200所在的这条链。

这意味着,所有矿工在主链上挖的200 – 1100之间的块,全部作废了,比特币也都没有了。

而这个掌握51%算力的人,拥有了从200 - 1200 所有的比特币。大家开始从1200接着往后挖。

场景2:

这个掌控51%算力的人,做了一宗大额交易,比如把自己的大量比特币兑换成美元,或者买了一个钻石。

等他拿到钻石之后,从它产生交易的所在的那个区块开始,分叉处1条新的链在上面挖。过了一段时间之后,他的链的长度超过了主链,所有节点都切换到他这条链上面。

意味着主链上面,从那笔交易所在的块开始到后面所有的块都作废了,当然他之前的那笔交易也作废了。

他花出去的比特币又回到了他的钱包,他可以拿着这批比特币再买别的东西。这就是”双花“。

三、51%算力攻击是否可能发生?

从技术上来讲,51%算力攻击是可能发生的。只要1个机构足够强大,垄断了市面上超过51%的算力。(实际上现在确实已经有了,就是赫赫有名的比特大陆公司,中国的公司。关于这个相关内容,后面会花专门的篇章来讲述比特币的生态圈)

但从经济学角度看,不太可能发生。我们知道,货币的价值来自“信用”,人民币有价值是因为有中国政府的担保,美元有价值是因为美国政府的担保,同样,比特币有价值是因为这个网络是一个值得信任的,有很高信用的网络。

如果发生51%算力攻击,其他玩家都跑了,整个网络的信用没有了,那即使你拿到再多的比特币,也是废的。

所以从这个角度看,发生51%算力攻击,也会损害攻击者自己。

相关链接:

《第5课:“挖矿”专业名词 – 算力/矿机/矿池》

《第4课 到底啥叫“挖矿”?》

《第3课 “区块链”到底长什么样?》

《第2课 走进 “区块链”与”比特币”的世界》

《第1课 掌握区块链技术需要的预备知识》

展开阅读全文

没有更多推荐了,返回首页