(一)区块链的共识算法:总体介绍 及 分叉 的通俗讲解

做者:林冠宏 / 指尖下的幽灵git

掘金:juejin.im/user/587f0d…github

博客:www.cnblogs.com/linguanh/算法

GitHub : github.com/af913337456…数据库

腾讯云专栏: cloud.tencent.com/developer/u…安全


本文不作通常入门的区块链描述讲解。着重简述讲解:网络

  • 区块链的分叉
  • 共识算法

BTW:本人技术书籍《区块链以太坊DApp开发实战》现已出版并可网购了,适合初中级区块链技术相关研发人员阅读。数据结构


目录

前言

因为最近的开发工做是与以太坊公链相关的去中心化交易所,项目两个多月之久,对区块链相关的知识内容了解了一些,故择文以记录之,但求文字通俗易懂,无纰漏。因自身求学过程当中所遇坑无数,业内良文亦少之又少,深感朦胧之懂之不爽。此外,亦坚信区块链技术将来必能大放光芒,因如今多应用于虚拟货币,故人谈区块链,心里首想皆炒币相关以内容。函数

简单过一下区块链

咱们通常意识形态中的 链 是铁链,由铁铸成,一环扣一环。形象地,区块链的也能够这么理解,只不过它不是由铁铸成,而是由拥有必定数据结构的块链接而成,这是一个最简单的雏形区块链

见下图加密

通俗讲解共识

所谓共识,通俗来讲,就是咱们你们对某种事物的理解达成一致的意思。好比说平常的开会讨论问题,又好比判断一个动物是否是猫,咱们肉眼看了后以为像猫,其知足猫的特征,那么咱们认为它是猫。共识,是一种规则。

继续咱们的会议例子。参与会议的人,经过开会的方式来达到谈论解决问题

对比区块链中,参与挖矿的矿工经过某种共识方式(算法)来解决让本身的帐本跟其余节点的帐本保持一致。让帐本保持一致的深刻一层意思就是,让链中区块信息保持一致。

为何须要共识,不须要可不能够?固然不能够,生活中没了共识的规则,一切乱套。区块链没了共识的规则,各个节点各干各的,失去一致的意义。

这两个例子的对应的关系以下:

  • 会议的人 = 挖矿的矿工
  • 开会 = 共识方式(算法)
  • 谈论解决问题 = 让本身的帐本跟其余节点的帐本保持一致

若是你对节点的概念意思不懂,请先理解为矿工,一个节点内部包含不少角色,矿工是其中之一。

共识算法

目前常见的在区块链中,节点们让本身的帐本跟其余节点的帐本保持一致共识方式(算法)有以下几种:

  • PoW,表明者是比特币 (BTC)
    • 弊端:
      • 矿池的出现,必定程度上违背了去中心化的初衷,同时也使得51%攻击成为可能,影响其安全性。
      • 存在巨大的算力浪费,看看矿池消耗大量的电力资源,随着难度增长,挖出的不够付电费
  • PoS,表明者是以太坊 (ETH),从PoW过分到PoS
    • 弊端:
      • 破坏者对网络的攻击成本很低,拥有代币就能竞争
      • 另外拥有代币数量大的节点得到记帐权的几率会更大,会使得网络共识受少数富裕帐户支配,从而失去公正性
  • DPoS,表明者是柚子(EOS)
    • 弊端:
      • 选举固定数量的见证人做为记帐候选人有可能不适合于彻底去中心化的场景
      • 在网络节点不多的场景,选举的见证人的表明性也不强.
  • PBFT 拜占庭容错,联盟链中经常使用
    • 弊端:
      • 不适合公有链,适合联盟链

下面通俗讲解下每种共识算法的概念,注意!是概念,非代码层面的详细实现。

PoW

它的全称是:Proof of Work 工做量证实。字面意思,就是谁作的活越多,谁话事权越大,必定层面上相似现实生活的多劳多得的概念。该例子会穿插生活事例,其余的几个讲解将再也不累赘。

比特币为例子,比特币挖矿就是经过计算符合某一个比特币区块头哈希散列值争夺记帐权。这个过程须要经过大量的计算实现,简单理解就是你进行的计算量大(工做量大),你就有大几率得到记帐权,即矿工的挖出的区块并入主链。

  • 区块头,区块链中的区块的头部。你有一个饭盒,饭盒第一层,形象为动物头部,称之为头部。第一层放着米饭,米饭就是头部装载着的东西
  • 哈希散列值,一种经过数学公式计算得出的值
    • 哈希:数学中的散列函数
    • 散列值: 经过哈希函数得出的值
    • 例如加法公式:1 + 2 = 3。那么哈希公式:hash(1,2) = 结果
  • 区块头哈希散列值,饭盒第一层装着的是饭。那么这里的这个值就是区块头装着的东西
  • 记帐权,话事权,谁挖出的区块是有效的。

因此说。在不少个节点都在挖矿的状况下,你们都有可能挖出一个区块,随之广播到其余节点中去,那么每一个节点中会根据谁先挖出为准,确认该区块,并入链中。

对比现实生活,数学竞赛中,参数者 至关于矿工,一道题目,谁先作出就公布计算过程和答案,不禁裁判判断,由参赛者一块儿验证,没问题后,宣布该题目结束,解题者等相关信息被记录到册子/数据库/网络。以后继续下一道题。

回到比特币挖矿中:

  • 这道难题就是 计算出正确的哈希散列值
    • 计算哈希散列值 随着难度系数增大,会愈来愈困难
    • 计算须要耗费大量的电力资源,工做量大
  • 一旦计算出了,就告诉其余节点
  • 节点收到通知后,停下手上的计算工做
  • 节点开始验证信息
    • 信息有效,当前的块被挖出,各节点开始从新挖下一个
    • 信息无效,各节点继续本身的手上的计算工做
  • 成功挖出有效区块的节点得到奖励,比特币奖励

同时解出问题的状况怎么办?---① 答案见下一章节 区块链分叉

区块链分叉

注意私有节点不在讨论范围内,全部节点基于公有节点。分叉的状况有:

  • 硬分叉
    • 一旦出现,最后的结果是一分为二
    • 术语的说法:旧节点没法承认新节点产生的区块,为硬分叉
  • 软分叉
    • 一旦出现,最后的结果是能掰正的
    • 术语的说法:旧节点可以承认新节点产生的区块,为软分叉

如今先回答上一章节留下的问题 --- ①, ① 的状况是软分叉的一种,当有两个或多个节点同时挖出了同区块号码的一个区块,而后它们同时广播信息出去,假设一个是A,而另外一个是B,那么距离 A 比较近的节点,还没等到收到其余消息就先收到了 A 的信息,并开始确认 A 所挖出的这个区块的信息,随后加入A挖出的这个区块到本身所在的公链中去。同理 距离 B 比较近的节点,也会先处理 B 挖出的区块信息并添加入本身所在的公链中。

上面文字对应于下图。距离 A 最近的是 节点1,距离 B 最近的是 节点5

至此,出现了链的分叉。这是一种使用了一样共识算法,共识规则下致使的分叉,

出现了这种状况,矿工是比较好自我纠正的。因为解题能力和矿工的数量成正比,所以两条链的增加速度也是不同的,在一段时间以后,总有一条链的长度要超过另外一条。当矿工发现全网有一条更长的链时,他就会抛弃他当前的链,把新的更长的链所有复制回来,在这条链的基础上继续挖矿。全部矿工都这样操做,这条链就成为了主链,分叉出来的链便会被抛弃掉。

硬分叉的出现

若是区块链软件的共识规则被改变,而且这种规则改变没法向前兼容,旧节点没法承认新节点产生的区块,且旧节点恰恰就是不升级,那么该分叉将致使链一分为二。

分叉点后的链,日后互不影响,节点在站好派别后,也不会再互相广播区块信息。新节点旧节点会开始在不一样的区块链上运行(挖矿交易验证等)

举个简单的例子,若是节点版本1.0 所接收的区块结构字段是10个,1年后发布节点2.0版本,2.0 兼容 1.0,可是 1.0 的不能接受 2.0 版本中多出的字段。

硬分叉的过程:

  • 开发者发布新的节点代码,新的改变了区块链的共识规则且不被旧的兼容,因而节点程序出现了分叉(software fork)
  • 区块链网络中部分节点开始运行新的节点代码,在新规则下产生的交易与区块将被旧节点拒绝,旧节点开始短暂的断开与这些发送被本身拒绝的交易与区块新节点的链接,因而整个区块链网络出现了分叉(network fork)
  • 新节点的矿工开始基于新规则挖矿,旧的依然用旧的规则,不一样的的矿工算力出现了分叉(mining fork)
  • 最终,整个区块链出现了分叉(chain fork)。

一个实例:

2017年8月1号,Bitcoin Cash(BCH)区块链成功在区块高度478559与主链分离。这一新的加密货币默认区块大小为8MB,而且能够实现区块容量的动态调整。 因为旧节点只承认小于1MB的区块,因此运行BCH客户端节点产生的区块没法向前兼容,将被旧节点拒绝,最后运行不一样客户端的矿工将会长期运行在两条不一样的区块链上(BTC和BCH)

软分叉的出现

  • 不一样的节点短期差内挖出了同区块号的区块,也就是上面的例子
  • 因共识规则被改变,旧节点可以识别新节点产生的区块,旧的块不能被新的接受
    • 新节点全网算力大于50%
    • 新节点全网算力小于等于50%

第二种的软分叉是不必定能由节点自我纠正的。万全的解决方案必须依赖人力升级节点到同版本。

  1. 新节点全网算力大于50%,由于新节点算力大于50%,因此不论旧节点升级不升级,最长的链也必定会是所有由新节点生成的区块组成的链。并且,这条最长链最终都会是双方都认为合法的一条,缘由参考上面谈到的最长链复制,因知足下面几点因此能被复制。

    • 旧的能接收新的,在分叉点以后的区块参杂着
      • 旧节点的区块
      • 新节点的区块
    • 新的不能接收旧的,可是最终及其以后总比旧的长
  2. 新节点全网算力小于等于50%,最终不能经过短的复制长的达到统一,结果是:分叉。缘由以下。

    • 旧节点最终会比新节点的链要长
    • 新的老是不能接受旧的,不会去复制一条含有本身不能接受的块的链

写到这,发现内容铺开后比我想象中的要多。

故目前暂时分红两章节,剩下的共识算法的介绍留到第二章

参考

blog.csdn.net/chabuduoxia…

blog.csdn.net/s_lisheng/a…

相关文章
相关标签/搜索