区块链共识算法实现代码【BFT/Raft/PoW/PoS/Paxos】

2,245 阅读5分钟

共识算法是实现自主产权区块链的必不可少的关键环节,本文列出社区中相对成熟的区块链共识算法开源实现,包括BFT共识、Raft共识、Paxos共识、PoW共识等,可供希望开发自主产权区块链的团队参考学习。

相关推荐:区块链开发系列教程

1、BFT共识开发库

BFT共识算法可以应对分布式系统中的拜占庭故障(Byzantine failures),也就是可以在集群中部分节点存在恶意行为时依然保证整个系统的正常工作。

1.1 Tendermint Core

Tendermint Core 是一个拜占庭容错的中间件,可以安全的将任何语言开发的状态机复制到集群中的其他机器上。Tendermint Core已经被用于Cosmos、币安链等多种公链环境中。

在这里插入图片描述

Tendermint Core的协议详情可以参考这里,开发教程访问这里:tendermint开发详解

1.2 BFT-SMaRt

BFT-SMaRt是一个拜占庭容错的状态机复制实现,采用Java开发,目前由里斯本大学的LsSIGE研究组负责维护。BFT-SMaRt要求JRE 1.8+。

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XSxQXxoY-1577276336782)(blockchain-consensus-libs/bft-smart.png)\]

BFT-SMaRt是最知名的Java版BFT实现,京东的区块链就是采用这个库解决共识问题。

1.3 BABBLE

Babble是用于分布式应用的拜占庭共识平台,它可以让一组计算机表现的如同单一计算机。Babble它使用P2P网络和BFT共识算法来保证一组彼此互联的计算机可以同样的顺序处理同样的命令,也就是通常说的状态机复制。Babble可以让整个系统安全的应对部分节点的故障或恶意行为。

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oXvgqXEn-1577276336782)(blockchain-consensus-libs/babble.png)\]

Babble主要采用Go语言开发,但是其设计目标是可以集成进任何语言开发的应用,如上图所示。

1.4 Concord-BFT

concord-bft是vmware开源的一个通用的状态机复制库,可以应对集群中的恶意行为(拜占庭故障)。 concord-bft被设计用于分部署数据仓库复制的核心构建模块,特别适合作为许可制区块链系统的基础。

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4Hu894u7-1577276336783)(blockchain-consensus-libs/concord.png)\]

concord-bft的实现基于这片论文中的算法:SBFT: a Scalable Decentralized Trust Infrastructure for Blockchains

1.5 HBBFT

HBBFT是论文Honey Badger of BFT Protocols提出的蜜獾BFT共识算法的Rust实现。HBBFT要求Rust 1.36+以及cargo,下面展示了其中的一个仿真示例:

$ cargo run --example simulation --release

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iGf4KJm6-1577276336783)(blockchain-consensus-libs/hbbft.png)\]

蜜獾(Honey Badger)共识算法可以让分布式异步环境中的节点交易达成一致,该算法不需要主导节点,可以应对恶意节点的攻击,适合于去中心化数据库和区块链应用。

1.6 libbft

libbft是一个轻量级的拜占庭容错库,用于neo区块链,采用C++开发,由neo研究院维护,计划移植到Python、go等多种语言。

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wcEmPICG-1577276336783)(blockchain-consensus-libs/libbft.png)\]

2、Raft共识开发库

Raft共识可以处理集群中部分节点的崩溃故障,但不能处理恶意节点行为,因此通常用于节点身份已知的环境中,例如许可制区块链 Hyperledger Fabric 就使用了基于Raft共识的排序服务。

Raft官网列出了数十种各种语言开发的Raft共识算法实现,可以访问这里获取详细清单:raft.github.io/

3、Paxos共识

Paxos共识算法是比较早期的分布式系统共识算法,特点是比较复杂,目前用的已经不多。

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QkEWlopn-1577276336784)(blockchain-consensus-libs/paxos.jpg)\]

3.1 Paxos-consensus

Paxos-consensus是一个Python实现的Paxos共识协议库,支持Python 2.6+。

3.2 Pluggable Paxos

Pulggable Paxos是一个采用go语言实现的paxos共识协议库,采用可插拔设计。

3.3 Go Paxos

Go Paxos是另一个采用go语言实现的paxos共识协议库。

3.4 Java Paxos

Java Paxos是一个基本的Paxos共识协议库,采用java实现。

4、PoW共识 - Proof of Work

PoW,即工作量证明,其核心设计思路是提出求一个复杂度计算值的运算过程。用户通过进行一定的运算和消耗一定的时间来计算一个满意值并提供给服务方快速做验证,以防止服务被攻击,数据资源被滥用,确保数据交易的公平和安全。这一概念最早在1993年由Cynthia Dwork和Moni Naor的学术论文中提出,并在1999年由Markus Jakobsson与Ari Juels 对工作量证明这一词的进行了发表。到了2008年这工作量证明技术被运用在比特币区块链系统上,到目前为此PoW技术在区块链中起着至关重要的作用,它也成为了加密货币中主流的共识机制之一,像比特币,以太坊等都有使用。

4.1 proof-of-work

Proof-of-Work是一个JS实现的PoW共识库,使用SHA256和布隆过滤器。下图显示了目标难度与解析时间的关系:

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YGGPjWC7-1577276336784)(blockchain-consensus-libs/pow-chart.png)\]

4.2 pow.py

pow.py是PoW共识的Python实现。

4.3 go-pow

go-pow是PoW共识的go语言版本的简单实现。

4.4 ProgPow

ProgPow实现了一种可以对抗ASIC的PoW算法。

5、PoS共识 - Proof of Stake

5.1 ValidateProofOfStake

ValidateProofOfStake是一个纯粹的权益证明共识协议,它使用区块 验证人和铸币人惩罚机制,无需锁定状态。


原文链接:区块链共识算法开源代码大全 - 汇智网