赞
踩
算法的共识过程总体上分为三个阶段, 创建区块、验证区块, 提交区块。根据共识协议, 从参与共识过程的节点中选择主节点创建新区块(定义主节点为每轮共识过程中产生有效区块的节点); 然后新区块交由其他参与共识的节点进行独立验证; 通过验证的新区块会被节点提交到本地区块链中, 达成对最新高度区块的共识; 至此完成共识, 开启下一轮共识过程。
共识算法的分类方式有很多, 比如在性能层面: 从数据一致性的角度将共识算法分为强一致性共识算法、弱一致性(最终一致性)共识算法; 从拜占庭容错的角度将共识算法分为拜占庭容错共识算法、非拜占庭容错共识算法。在应用层面: 可以将共识算法分为适用于公链、联盟链、私链的共识算法。从共识过程出发, 按照主节点的产生方式将共识算法分为竞争类、选举类、随机类以及其他类型。
竞争类大概有这几种 PoW (Proof of Work)、PoS (Proof of Stake)、PoSpace (Proof of Sapce)
竞争类算法共识过程:
选举类算法共识过程
授权股份证明算法(DPoS)、实用拜占庭容错算法(PBFT)、授权拜占庭容错算法(DBFT)
DPoS 共识算法,在PoS 中引入选举机制。DPoS 将节点分为普通节点和信任节点两种角色。普通节点可以投票选择信任节点或者被投票成为信任节点。每个信任节点依次被赋予固定的期限(比如 2 秒)成为主节点, 授权时间结束后,创建权依次交由下一个信任节点。
PBFT 共识算法。该共识算法从全网节点选择一个主节点负责创建区块, 然后经过三阶段投票达成共识: 预准备阶段, 准备阶段, 提交阶段。
PBFT 中无权益的抵押或竞争资源的消耗, 使得恶意节点的成本降低, PBFT 通过三阶段的投票机制排除恶意节点对共识的影响, 提供不超过1/3 总节点数量的容错能力, 但 2( ) O N 的通信复杂度使得系统性能随着网络规模的增加而下降。
PBFT 三阶段示意图
DBFT算法
DBFT 改进自PBFT 算法, PBFT 算法共识过程需要全部节点的参与, 且需要通过3 轮网络请求确认来达成共识, 网络通信复杂度为 o(n²) , N 为全网节点的数量, 可扩展性差, 随着网络规模增加, 难以快速达成一致。NEO 的解决方案是投票选取出部分节点参与共识, 由此减少网络通信消耗、提高可扩展性、同时提升交易处理速度。
除竞争、选举外, 也可以通过随机方式选择主节点。对于随机方式, 可以设计随机函数使得每个节点成为主节点的概率与节点所持有的某种资源成比例,也可以设计随机函数使得每个节点成为主节的概率相等。
解释 SGX:SGX(Software Guard Extensions),是 Intel CPU 提供的可信执行环境,可以为云上数据代码的完整性和保密性提供芯片级的安全保障。
Ripple
Ripple联盟链项目中提出并实现了 RPCA 共识算法。RPCA 中引入了一个新的概念: 独立节点列表(Unique Node List, UNL)。这是一份“信任”列表, 这里的“信任”指的是节点相信这个列表里的节点不会联合起来作恶, 不需要相信这个列表里的每一个节点。每个节点维护自己的UNL, 各个节点的UNL相互独立, 可能相同也可能不同。
共识过程如下:
分片共识算法
当前区块链面临的一大问题是交易性能低。竞争类和随机类共识算法中系统性能等价于单节点性能, 选举类共识算法由于 2( ) O n 的通信复杂度会使得随着节点数量的增加整体的交易性能下降。分片技术中, 全网节点划分为不同的分组(委员会), 每个分组并行处理不同的交易集。其关键技术在于设计合理的分片方式以及解决分片交易的原子性问题。
DAG 共识算法
DAG中的每个单元代表用户发起的一笔交易, 每一条从子单元指向父单元的有向边代表一种验证关系, 即用户创建交易的时候需要对先前的交易单元进行验证, 将验证有效的交易单元的哈希值包含到自己的交易数据结构中, 则当前的交易单元称为子交易, 被验证的交易称为当前交易的父交易, 每笔交易可以有多个父交易, 每个交易也可以有多个子交易, 这样交易单元构成有向无环图的结构:
文章参考了 《区块链共识算法研究综述》 这本书。需要书的可以私信。
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。