由浅及深了解区块链之:(11)区块链的分叉原理及解决

去下图所示,列出了各个节点的标号(节点就是指将区块链中的交易信息全部存储在一个节点上,节点可以指的是一个用户计算机,也可以是集群的矿池)。
节点存储着去区块链的副本,但是副本并不总是一致的,因为区块信息在网络传输中会有延迟,如果两个产生时间相近的区块在网络上进行传输,然后依次被不同的节点接受为区块链的主链顶端,这个时候区块链的分叉就产生了。
一般来说区块链分叉的解决在下一个新产生有效区块后得到解决,区块链内部遵循“先到先得”原则。
如下图所示,假设这些节点上区块链顶端的信息均为c区块。现在c区块得到了各个节点的广泛承认。

c1
c2
c3
......
c5
c6
c4
c7
c8
c9
c10
c11
c12
......

接着各个矿工将c区块的哈希值纳入候选区块头部后,同时也宣告着新一轮的挖矿开始,假设A矿工和B矿工几乎在同一时间挖出了这个符合条件的区块,然后他们以自己为中心向着周边所有的节点扩散出去,接下来不同的情况就产生了,一些节点先收到a区块,于是就将a区块作为区块链的顶端,接着这些节点又收到了b区块的节点信息,但这时候节点不丢弃b区块的信息,而是将b区块放在区块链上的备选链,然后又有一些节点先收到b区块的信息后收到a区块的信息,于是它们将b区块作为去区块链的顶端,而a区块作为区块链上的备选链,这样的话,a区块和b区块在区块链网络上就各自形成了自己的势力范围,在自己的势力范围内节点就承认自己,反之就不承认自己,如下图所示:

a1
a2
a3
......
a5
a6
a4
b1
b2
b3
b4
b5
b6
......

那么在区块链中,最终所有的账本记录的信息都是要趋于一致的,那么出现来这种两级分化的情况,区块链就应该采取什么机制来应对?
答案是,不管他们,任由它们自己去竞争“抢占地盘”,现在a区块有了自己的势力范围,b区块也有了自己的势力范围,双方都想把对方的势力范围吞并,但是双方目前这一阶段都对对方无能为力,于是两边的势力决定搞一场“武林大会”,选举的武艺高强的武林盟主来自于哪边的势力,就承认那边势力的合法性,就这样,势力两边的矿工开始了激烈的挖矿比赛,谁都要为了这个武林盟主的头衔而努力,突然身处在b区块势力范围的矿工D成功的挖出了一个有效的区块d。如下图所示:

a1
a2
a3
......
a5
a6
a4
b1
b2
b3
b4
b5
d1
......

接下来这个d区块就广播给区块链上所有的节点听:“大家都给我听着,我现在是武林盟主,我出生在b区块的势力范围,所以现在你们大家都要给我信奉b区块,如有不从,后果自负!”这不过是个形象的比喻,事实上当所有在挖矿的矿工收到新区块的消息时,首先要验证它是不是有效区块,证明区块有效后,b区块势力范围内的矿工就自然而然的将该区块记录下来,放入区块链的顶端,当a区块势力范围内的区块收到别的势力的有效区块时,他们也只能无奈的承认了区块链中:区块链条……->b->d的主链排布方式,而无奈的将链条……->a中的a区块放入候选池,从中筛选还未出现的交易信息留作候选区块中的交易记录,最后区块链的交易信息最终又统一 一致了,如下所示:

d7
d8
d9
......
d11
d12
d10
d6
d5
d4
d3
d2
d1
......

也许有读者会问,加入a势力和b势力两边各自同时产生一个区块呢,真实情况下这种可能性很小(即使两边的算力总和是相等的,几乎同时产生一个有效区块的概率也是很小的),所以一般的区块链分叉在第二个新的有效区块就停止了,但是如果双方甚至多方势力同时产生第二个区块,那么这时候这些武艺高强的高手又会重新抢地盘(抢地盘遵循先到先得的规律,谁的区块先传播到相应的节点,该节点就承认谁的合法性),接下来又像父辈一样形成了新的势力范围,然后他们又可以像父辈一样推选新的“武林盟主”来一统天下了。

你可能感兴趣的:(比特币,区块链)