从分布式一致性算法到区块链共识算法(二)

从分布式一致性算法到区块链共识算法(二)

注意:本文所介绍内容来源于文献:[1]靳世雄,张潇丹,葛敬国,史洪彬,孙毅,李鸣,林业明,姚忠将.区块链共识算法研究综述[J].信息安全学报,2021,6(02):85-100.
本文是对该文献的主要内容的总结与梳理

共识算法的演进历程

在这里插入图片描述

共识算法的分类

可以按照数据一致性、是否具有拜占庭容错、应用以及共识的过程进行分类

在这里插入图片描述

共识过程

我们主要是按照共识过程进行分类的,算法的共识过程总体上分为三个阶段, 如下图所示: 创建区块、验证区块, 提交区块。根据共识协议,
从参与共识过程的节点中选择主节点创建新区块(定义主节点为每轮共识过程中产生有效区块的节点); 然后新区块交由其他参与共识的节点进行独立验证;
通过验证的新区块会被节点提交到本地区块链中, 达成对最新高度区块的共识; 至此完成共识,开启下一轮共识过程。

在这里插入图片描述

竞争类

核心思想

竞争类共识算法在每一轮主节点的选择中, 会设置一个竞争成功的标准, 最先达到标准的共识节点成为主节点。竞争类算法的共识过程如下图所示。
在这里插入图片描述

pow

核心思想

PoW 共识算法中, 所有参与共识的节点通过消耗算力解决数学难题来竞争成为主节点, 由最先解 决数学难题的节点成为主节点。在比特币系统中,
中本聪采用安全散列算法, 将数学难题设计为对区块 头信息的双 SHA256 哈希运算, 即
在这里插入图片描述
其中 F为双 SHA256 哈希运算函数 , T 是目标哈希值, BlockHeader 为区块头信息, 其中包含 Nonce 字 段 , 求 解
合 适 的 Nonce 字 段 使 得 对 完 整BlockHeader 的哈希运算结果满足目标值要求。

共识过程

如上图的共识过程图所示, 第一步全网节点接收并转发交易信息, 将接收到的交易信息打包进新区块,然后全网所有节点基于本节点打包的新区块设置区块头中的 Nonce 字段,计算整个区块头信息的哈希值, 使其满足目标值的要求; 率先完成计算工作的节点成为主节点, 并将自己的区块广播给其余节点;第二步,未竞争成功的其余节点在接收到新区块后,放弃计算本地新区块, 并对接收到的新区块进行验证; 第三步, 节点在验证通过新区块后,将其添加到本地区块链, 所有节点达成对最新高度区块的共识。

优点

PoW 计算密集型属性防止了恶意节点冒充多个节点来实施恶意攻击篡改交易数据等, 保障了区块链的安全;

缺点

  1. 耗费大量资源
  2. 随着整个网络新区块产生难度的增加,出于成本和收益的博弈, 部分亏损的小算力节点会退出比特币系统, 整个网络的新区块的生成趋向于算力高的节点, 中心化程度增加
  3. PoW共识还存在自私挖矿攻击的风险, 自私挖矿的收益比例大于其在全网的算力比例, 促使理性的节点加入自私挖矿矿池, 算力集中之后进一步增加 51%攻击的风险。

pos

核心思想

PoS 共识算法是为了降低算力的消耗。PoS 延续了 PoW 算法的竞争理念,只不过相对于PoW中 Nonce
字段的大搜索空间而言,PoS 将搜索空间限制在一个计算量可接受的范围;除此外, PoS 中还引入了“币龄”作为权益, 即:
在这里插入图片描述
其中,Coinage 是“币龄”, Coin 为持有的货币, Age为持续持有的时间。通过减小搜索空间以及引入“币龄”, PoS
将数学问题设计为:
在这里插入图片描述
其中 F 为双SHA256哈希运算函数; BlockHeader 为区块头信息, 其中包含 Timestamp 字段,
取值范围是上一个区块时间和当前时间之间, 远小于 PoW 中Nonce 字段的搜索空间大小; Weight 是用于竞争所消耗的“币龄”权重,T 是目标哈希值, 与 PoW 中的T 相同。

共识过程

PoS 的共识过程与 PoW 一致, 唯一不同是解决的数学问题不同, 与 PoW 相比, PoS 的数学问题中自变量的搜索空间减小, 同时不等式右侧引入“币龄”权重, 对于同一 T , 在每轮竞争中所投入的“币龄”越多, 权重越大, 竞争中获胜的概率也越大。

优点

  1. PoS 将算力竞争转化为权益竞争, 不仅节约算力, 权益的引入也能够防止节点发动恶意攻击
  2. 促使所有节点有责任维护区块链的安全稳定运行以保障自身权益

缺点

没有解决中心化程度增强的问题, 新区块的生成趋向于权益高的节点。

pospace

核心思想

PoSpace, 基于存储空间的竞争机制。在 PoSpace中节点分为普通节点和校验节点两种角色。普通节点下载特定序列的数据块(由节点用户公钥决定)占据硬盘空间参与主节点的竞争,校验节点存储普通节点的部分存储信息以便验证普通节点。 在每轮创建新区块的竞争中, 校验节点向普通节点发起“挑战”,“挑战”为普通节点所存储数据块的某种随机组合。普通节点根据“挑战”信息, 生成对应组合数据的哈希摘要, 由校验节点验证哈希值是否正确,
验证通过则说明普通节点确实存储了相应的数据。PoSpace 中定义了一个质量函数作为竞争指标:
在这里插入图片描述
其中,hash 为普通节点被验证通过的哈希值, S 为数据占用存储空间的大小。在每轮竞争中, 质量函数结果最小的节点获胜。

共识过程

PoSpace 的共识过程第一步通过占用存储空间加入网络, 然后对“挑战”得到的哈希结果计算质量函数, 质量函数结果最小的节点成为主节点, 将区块广播给其余未竞争成功的节点; 第二步其余节点对接收到的区块进行验证, 验证通过后进入第三步将新区块提交到本地区块链, 达成对最新高度区块的共识。从质量函数的定义可以看出, 数据占用空间 S 越大, 质量函数值越小, 获胜的概率越大。

优点

  1. PoSpace 共识算法使用存储空间代替计算, 节约电力资源
  2. 节点初次接入网络时确定存储空间大小, 之后不能扩容, 防止了 PoW共识算法中“矿池”(将不同节点的算力集合成一个大的算力节点)的出现, 一定程度上避免了中心化程度增强的问题, 同时降低了安全风险。

缺点

可能需要消耗大量的存储空间

选举类

核心思想

所有节点投票选择, 根据投票结果, 有的共识算法是产生一个主节点集合, 由这些节点依次轮流成为主节点; 有的共识算法是只产生一个主节点负责创建区块, 下一轮重新投票。

共识过程

选举类的共识过程如下图所示, 第一步是选出信任节点集合, 信任节点依次轮流作为主节点; 第二步是区块验证, 区块验证方式分为两大类,一类与竞争类算法相似, 主节点广播区块到其余节点进行验证, 一类是主节点的区块经过三轮 BFT 类的投票过程进行验证;第三步是节点提交通过验证的区块, 达成共识状态。

在这里插入图片描述

DPoS

核心思想

DPoS 共识算法旨在解决PoS 中主节点的产生趋向于高权益节点的问题, 同 时提高了 PoS 的共识效率。

共识过程

DPoS 将节点分为普通节点和信任节点两种角色。普通节点可以投票选择信任节点或者被投票成为信任节点。在 DPoS中,
节点消耗权益作为投票权, 根据权益的加权结果产生最受信任的 N 个节点成为信任点集合
在这里插入图片描述
每个信任节点
在这里插入图片描述 ,
依次被赋予固定的期限 ( 比如 2 秒 ) 成为主节点 , 授权时间结束后 ,创建权依次交由下一个信任节点。信任节点集合 D循环结束之后 , 重新选举调整 D , 恶意节点将在下轮选举中失去其他节点的信任。共识过程仅由信任节点集合 D 中所有节点参与 。

优点

  1. Di 轮流作为主节点 , 避免了主节点的产生趋向于高权益节点的问题
  2. 仅由
    在这里插入图片描述
    进行验证 , 使得共识效率得到提升
  3. 区块的产生不需要消耗算力 , 相对于 PoS 更加节省能耗

缺点

选举的信任节点全权负责创建区块 ,这在一定程度上降低了去中心化程度

PBFT

核心思想

PBFT 共识算法。该共识算法从全网节点选择一个主节点负责创建区块,然后经过三阶段投票达成共识 : 预准备阶段 , 准备阶段 ,提交阶段。

共识过程

预准备阶段 : 从全网选择一个主节点 ; 每个节点把客户端发来的交易信息向全网广播 , 主节点收集所有交易信息 , 创建新区块并向全网广播;
准备阶段 : 每个节点在收到主节点发送的区块信息后 , 从预准备阶段进入到准备阶段 , 节点对区块进行验证 ,验证通过后向其他节点广播一条准备消息 ;
提交阶段 : 节点在向全网广播准备消息之后进入提交阶段 , 如果节点收到超过 2/3节点的准备消息 ,就向全网广播一条提交消息 ; 如果一个节点收到超过 2/3 节点的提交消息 , 即可提交新区块到本地区块链 , 达成对最新高度区块的共识。
在这里插入图片描述

优点

PBFT 中无权益的抵押或竞争资源的消耗 , 使得恶意节点的成本降低 , PBFT 通过三阶段的投票机制排除恶意节点对共识的影响 ,提供不超过 1/3 总节点数量的容错能力 。

缺点

O(N^2)的通信复杂度使得系统性能随着网络规模的增加而下降。

DBFT

核心思想

DBFT 改进自PBFT 算法 , PBFT 算法共识过程需要全部节点的参与 , 且需要通过 3 轮网络请求确认来达成共识 , 网络通信复杂度为O(N^2) , N 为全网节点的数量 , 可扩展性差 , 随着网络规模增加 , 难以快速达成一致。DBFT的解决方案是投票选取出部分节点参与共识 ,由此减少网络通信消耗、提高可扩展性、同时提升交易处理速度。

共识过程

所有节点投票选举记账节点集 合 ( 记账节点即信任节点 , 此处为了遵从原算法的描 述 ), 记账节点集合完成共识过程 , 其余节点为非记账节点 , 不参与共识过程 , 只采纳最终的共识结果。 接下来由记账节点集合中选举出议长 ( 议长即负责创 建区块的主节点 ),其他记账节点为议员 ; 在每轮共识 中 , 议长提出新区块 , 由议员进行确认并广播确认结 果 ; 当节点收到超过 2/3 记账人节点发送的确认消息后 , 则在本地添加区块 , 即对最新高度的区块达成共识 ; 之后重新选择议长 , 开启新一轮共识过程。

优点

DBFT 将共识过程的参与范围缩小为选举出来的记账节点集合 , 虽然通信复杂度依然为 O(N^2 ), 但是缩小了共识节点网络规模 ,减少达成共识的通信成本。

缺点

DBFT 被证明在恶意节点少于总节点数量 1/3 的情况下也可能导致网络分叉, DBFT2.0 中 通过增加 commit 阶段 , 避免出现分叉 ,虽然提升了 DBFT 算法的可靠性 , 但安全性依然没有得到彻底解决。

随机类

核心思想

对于随机方式 , 可以设计随机函数使得每个节点成为主节点概率与节点所持有的某种资源成比例 , 也可以设计随机函数使得每个节点成为主节点的概率相等。

共识过程

随机类的共识过程与竞争类共识过程相似 , 只是第一步通过随机算法随机选择主节点。

Ouroboros(可证明安全的权益证明协议)

核心思想

Cardano 项目中 Ouroboros 共识算法的核心思想是根据节点权益大小 , 随机地选出主节点 , 节点 权益越大被选中的概率越大。 如下图 所示 , Ouroboros 共识算法将时间分段划分 , 一个时间段称为一个 epoch; 以epoch 为周期 , 每 个 epoch 中划分多个时间 slot; 每个 slot 时间期限内 , 由随机算法随机选择主节点 , 该随机算法在数学上证明是不可被预知的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

共识过程

每个节点根据当前 epoch 的种子 ρ , 执行随机函数 F 获得当前 slot 主节点 ; 若是自己 , 则打包交易 ,创建区块 ; 否则等待主节点出块并广播 , 对接收到的区块进行验证 , 如果长时间未收到 ( 超出一个 slot的时间 ) 则认为当前 slot无区块产生 ; 在当前 epoch中不断重复这个过程直到这个 epoch 中的所有 slot结束。

优点

  1. 随机产生主节点的方式也会减少资源的消耗
  2. 不同于选举类中主节点的产生需 要节点之间网络通信进行投票 , 随机类使用随机算 法产生主节点的方式无需网络通信 , 缩短了共识时间 , 提高了共识效率 , 增强可扩展性

缺点

暂时还不太了解,如果有人知道的话,可以讨论一下。

PoET(基于消逝时间量的共识机制)

核心思想

通过随机时间长短来选择主节点。

共识过程

基于 Intel CPU 的 SGX(Software Guard Exten- sions) 技术 , Intel在超级账本的锯齿湖项目中提出并 实现了 PoET 共识算法。在这种机制下 , 每个节点等待一定的随机时间 , 该随机时间满足预定的概率分布函数 F , 最先结束等待时间的节点成为主节点。 其他节点进行验证 , 通过两种方式验证节点确 实等待了一定的随机时间。第一 ,产生区块的同时在 SGX 的协助下产生一个等待时间的证明 , 随同区块 一起广播给其他节点进行区块验证以及等待时间验 证 ; 第二 ,应用概率统计测试来检验节点的等待时 间是否符合预定的概率分布 F 。

优点

PoET 共识算法将信任依托于硬件 , 使得区块 链系统不必耗费大量算力 , 实现了“一 CPU 一票” 的公平性。

缺点

  1. 每个节点成为主节点的概率相等 , 但不 能排除用户通过增加 CPU 资源提高出块概率 , 从而 使中心化程度增强
  2. PoET 面临硬件安全造成的单点 故障风险 , 恶意节点只需攻破一台 SGX 就可以控制出块权。

其他类

Ripple

核心思想

Ripple 联盟链项目中提出并实现了 RPCA 共识算法。 RPCA 中引入了一个新的概念 : 独立节点列表 (Unique Node List, UNL) 。这是一份“信任”列表 , 这里的“信任”指的是节点相信这个列表里的节点 不会联合起来作恶, 不需要相信这个列表里的每一 个节点。每个节点维护自己的 UNL, 各个节点的 UNL 相互独立 , 可能相同也可能不同。

共识过程

1)每个验证节点会不断收到从网络发送过来的交易,通过与本地账本数据验证后,不合法的交易直接丢弃,合法的交易将汇总成交易候选集(candidate set)。交易候选集里面还包括之前共识过程无法确认而遗留下来的交易。
2)每个验证节点把自己的交易候选集作为提案发送给其他验证节点。
3)验证节点在收到其他节点发来的提案后,如果不是来自UNL上的节点,则忽略该提案;如果是来自UNL上的节点,就会对比提案中的交易和本地的交易候选集,如果有相同的交易,该交易就获得一票。在一定时间内,当交易获得超过50%的票数时,则该交易进入下一轮。没有超过50%的交易,将留待下一次共识过程去确认。
4)验证节点把超过50%票数的交易作为提案发给其他节点,同时提高所需票数的阈 值到60%,重复步骤3)、步骤4),直到阈值达到80%。
5)验证节点把经过80%UNL节点确认的交易正式写入本地的账本数据中,称为最后关闭账本(Last Closed Ledger),即账本最后(最新)的状态。
在这里插入图片描述

优点

在Ripple的共识算法中,参与投票节点的身份是事先知道的,因此,算法的效率比 PoW等匿名共识算法要高效,交易的确认时间只需几秒钟。

缺点

该共识算法只适合于权限链(Permissionedchain)的场景。Ripple共识算法的拜占庭容错(BFT)能力为(n-1)/5,即可以容忍整个网络中20%的节点出现拜占庭错误而不影响正确的共识。

分片共识算法(Elastico)

核心思想

分片技术中, 全网节点划分为不同的分组(委员会), 每个分组并行处理不同的交易集。其关键技术在于设计合理的分片方式以及解决分片交易的原子性问题。 Elastico 是第一个基于分片技术的拜占庭容错公链 方案,之后出现众多改进方案, 比如 OmniLedger 、 RapidChain 等。

共识过程

以 Elastico 为例说明分片技术方案。Elastico 周期性地共识区块, 每个周期内, 节点执行以下操作:

  1. 身份获取和委员会分配: 每个节点产生一个 身份信息, 身份信息由公钥、IP 地址和一个 PoW 难题解组成, PoW 难题解是为了防止恶意节点伪造多 个身份信息, 之后根据身份信息将节点划分到不同 的委员会;
  2. 委员会内部节点发现: Elastico 通过建立“目录服务委员会”, 节点可以高效地与同一委员会内部的其他成员建立通信连接;
  3. 委员会内部共识: 委员会内部运行 PBFT 共 识算法对交易集达成共识, 将共识结果发送到“共识 委员会”;
  4. 最终共识: “共识委员会”接受其他委员会的共识结果并重新打包交易, 运行PBFT共识算法达 成最终共识并向全网广播;
  5. 产生随机数: “共识委员会”产生一组随机数, 用于下一周期中节点重新构建身份信息。

优点

  1. 分片技术通过并行处理提升系统性能, 使其随着全网节点数量的增多而线性提升
  2. 每个节点只存储部分数据, 减少了节点数据存储压力

缺点

Elastico 中也存在一些问题, 比如没有解决原子性交换问题, 当分片拒绝某笔跨片交易后, 原分片中的交易资产被永远锁定。

基于 DAG 共识算法

核心思想

除了分片技术外, 也可以通过有向无环图 (Directed Acyclic Graph, DAG)的结构提升区块链系 统的交易性能DAG 中的每个单元代表用户发起的一笔交易, 每一条从 子单元指向父单元的有向边代表一种验证关系, 即 用户创建交易的时候需要对先前的交易单元进行验 证, 将验证有效的交易单元的哈希值包含到自己 的交易数据结构中, 则当前的交易单元称为子交 易, 被验证的交易称为当前交易的父交易, 每笔交易可以有多个父交易, 每个交易也可以有多个子 交易, 这样交易单元构成有向无环图的结构, 如下图 所示。
在这里插入图片描述

共识过程

以 Obyte(字节雪球) 为例展示基于 DAG 模式的交易过程:

  1. 创建交易: 当用户需要发起交易时, 创建一个交易单元, 按照交易单元数据结构填充对应的内 容, 包括消息类型、签名、以及一个或多个先前交易 单元的哈希值;
  2. 广播交易: 交易创建完成后, 将交易单元向 全网广播;
  3. 验证交易: 其他节点接收交易, 之后发起交 易时会选择验证当前交易是否有效。 Obyte 系统中选择 12 个可信的“证人”节点, 这 些节点发起的交易按照先后顺序连接成为一条主链, 如图 10 中按顺序编号的链为主链, 出现双花交易时,
    根据交易单元与主链中交易单元的关系选择有效交易。

优点

可以看出 DAG 模式中, 没有 矿工和区块, 节省了交易费以及产生主节点打包区 块的时间, 交易得到及时确认。

缺点

异步并发处理交易的模式使得 DAG 具有高可扩展性, 但高并发情形下可能短时间内出现数据不一致的问题, 不适合强 一致性的场景

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟逆袭之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值