比特币共识过程中- 最长链的选择 及 分叉问题

  通过前边的博文,已经介绍过比特币的共识机制。

  各个几点为什么要遵守协议达成共识呢?

  这其实是一个经济问题,在经济活动中的每个人都是自私自利的,追求的是利益的最大化,一个节点工作量只有在其他的节点认同其是有效的(打包的新区块,其他的节点只有验证通过才会加入到区块链中,并在网络上传播),才能够过得收益,而只有遵守规则才会得到其他的节点认同。任何破坏网络的非诚信行为都会损害矿工自身的利益。因此,即使有些比特币矿池具备强大的算力,它们都没有作恶的动机,反而有动力维护比特币的正常运行,因为这和它们的切实利益相关。

  为了保证自身利益,节点就会自发的遵守协议。共识就是数以万计的独立节点遵守了简单的规则(通过异步交互)自发形成的。

实际上,比特币的共识由所有节点的4个独立过程相互作用而产生:

  1. 每个节点(挖矿节点)依据标准对每个交易进行独立验证
  2. 挖矿节点通过完成工作量证明,将交易记录独立打包进新区块
  3. 每个节点独立的对新区块进行校验并组装进区块链
  4. 每个节点对区块链进行独立选择,在工作量证明机制下选择累计工作量最大的区块链

共识最终目的是保证比特币不停的在工作量最大的区块链上运转,工作量最大的区块链就是权威的公共总帐本。

  那么怎样保证该区块链是工作量最大的区块链呢? 这就涉及最长链的选择问题了。

最长链的选择

主链:累计了最多难度的区块链。在一般情况下,也是包含最多区块的那个链称。
   每一个(挖矿)节点总是选择并尝试延长主链

  当有两名矿工在几乎在相同的时间内,各自都算得了工作量证明解,便立即传播自己的“获胜”区块到网络中,先是传播给邻近的节点而后传播到整个网络。每个收到有效区块的节点都会将其并入并延长区块链。当这个两个区块传播时,一些节点首先收到#3458A, 一些节点首先收到#3458B,这两个候选区块(通常这两个候选区块会包含几乎相同的交易)都是主链的延伸。那这时候应该怎么办?

  这时,分叉就会产生,分叉出有竞争关系的两条链,如图:


  两个块都收到的节点,会把其中有更多工作量的一条会继续作为主链,另一条作为备用链保存。

  保存是因为备用链将来可能会超过主链难度成为新主链。

分叉的解决:

  收到#3458A的(挖矿)节点,会立刻以这个区块为父区块来产生新的候选区块,并尝试寻找这个候选区块的工作量证明解。同样地,接受#3458B区块的节点会以这个区块为链的顶点开始生成新块,延长这个链(下面称为B链)。
  这时总会有一方抢先发现工作量证明解并将其传播出去,假设以#3458B为父区块的工作量证明首先解出,如图:

  当原本以#3458A为父区块求解的节点在收到#3458B, #3459B之后,会立刻将B链作为主链(因为#3458A为顶点的链已经不是最长链了)继续挖矿。

节点也有可能先收到#3459B,再收到#3458B,收到#3459B时,会被认为是“孤块“(因为还找不到#3459B的父块#3458B)保存在孤块池中,一旦收到父块#3458B时,节点就会将孤块从孤块池中取出,并且连接到它的父区块,让它作为区块链的一部分。

  比特币将区块间隔设计为10分钟,是在更快速的交易确认和更低的分叉概率间作出的妥协。更短的区块产生间隔会让交易确认更快地完成,也会导致更加频繁地区块链分叉。与之相对地,长的间隔会减少分叉数量,却会导致更长的确认时间。

硬分叉:

  区块链发生永久性分歧,在新共识规则发布后,部分未升级的节点拒绝验证已经升级的节点生产出的区块,不过已经升级的节点可以验证未升级节点生产出的区块,然后大家各自延续自己认为正确的链,所以分成两条链。这样,硬分叉就会发生。代码出现一个硬分叉,会改变挖矿算法的难度级别。

  A permanent divergence in the the block chain, commonly occurs when non-upgraded nodes can’t validate blocks created by upgraded nodes that follow newer consensus rules。

 软分叉:

  当新共识规则发布后,没有升级的节点会因为不知道新共识规则下,而生产不合法的区块,就会产生临时性分叉。

  A temporary fork in the block chain which commonly occurs when miners using non-upgraded nodes violate a new consensus rule their nodes don’t know about.

 

 

【时间仓促,如有错误,欢迎指正! ||   欢迎留下您的评语!  大家一起探讨、学习区块链!】


 

REFERENCE

  1. 硬分叉、软分叉定义,来自bitcoin.org

  2. https://learnblockchain.cn/

猜你喜欢

转载自www.cnblogs.com/X-knight/p/9158445.html