简述目前相对成熟的区块链共识算法

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

## 1、BFT共识开发库 BFT共识算法可以应对分布式系统中的拜占庭故障(Byzantine failures), 也就是可以在集群中部分节点存在恶意行为时依然保证整个系统的正常工作。 ### 1.1 Tendermint Core Tendermint Core 是一个拜占庭容错的中间件,可以安全的将任何语言开发的状态机 复制到集群中的其他机器上。Tendermint Core已经被用于Cosmos、币安链等多种公链 环境中。 ![](https://img.learnblockchain.cn/2020/01/15783681785350.jpg) 欢迎阅读 [Tendermint Core文档](https://learnblockchain.cn/docs/tendermint/)。 * 开发语言:Go * 下载地址:https://github.com/tendermint/tendermint ### 1.2 BFT-SMaRt BFT-SMaRt是一个拜占庭容错的状态机复制实现,采用Java开发,目前由里斯本大学的 LsSIGE研究组负责维护。BFT-SMaRt要求JRE 1.8+。 ![](https://img.learnblockchain.cn/2020/01/15783682034880.jpg) BFT-SMaRt是最知名的Java版BFT实现,京东的区块链就是采用这个库解决共识问题。 * 开发语言:Java * 下载地址:https://github.com/bft-smart/library ### 1.3 BABBLE Babble是用于分布式应用的拜占庭共识平台,它可以让一组计算机表现的如同单一计算机。 Babble它使用P2P网络和BFT共识算法来保证一组彼此互联的计算机可以同样的顺序处理 同样的命令,也就是通常说的状态机复制。Babble可以让整个系统安全的应对部分节点的 故障或恶意行为。 ![](https://img.learnblockchain.cn/2020/01/15783682262056.jpg) Babble主要采用Go语言开发,但是其设计目标是可以集成进任何语言开发的应用,如上图 所示。 * 开发语言:Go * 下载地址:https://github.com/mosaicnetworks/babble ### 1.4 Concord-BFT concord-bft是vmware开源的一个通用的状态机复制库,可以应对集群中的恶意行为(拜占庭故障)。 concord-bft被设计用于分部署数据仓库复制的核心构建模块,特别适合作为许可制区块链 系统的基础。 ![](https://img.learnblockchain.cn/2020/01/15783682950619.jpg) concord-bft的实现基于这片论文中的算法:[SBFT: a Scalable Decentralized Trust Infrastructure for Blockchains](https://arxiv.org/pdf/1804.01626.pdf)。 * 开发语言:Python * 下载地址:https://github.com/vmware/concord-bft ### 1.5 HBBFT HBBFT是论文[Honey Badger of BFT Protocols](https://eprint.iacr.org/2016/199.pdf)提出 的蜜獾BFT共识算法的Rust实现。HBBFT要求Rust 1.36+以及cargo,下面展示了其中的一个仿真 示例: ``` $ cargo run --example simulation --release ``` ![](https://img.learnblockchain.cn/2020/01/15783683161156.jpg) 蜜獾(Honey Badger)共识算法可以让分布式异步环境中的节点交易达成一致,该算法不需要 主导节点,可以应对恶意节点的攻击,适合于去中心化数据库和区块链应用。 * 开发语言:Rust * 下载地址:https://github.com/poanetwork/hbbft ### 1.6 libbft libbft是一个轻量级的拜占庭容错库,用于neo区块链,采用C++开发,由neo研究院 维护,计划移植到Python、go等多种语言。 ![](https://img.learnblockchain.cn/2020/01/15783683455133.jpg) * 开发语言:C++ * 下载地址:https://github.com/NeoResearch/libbft ## 2、Raft共识开发库 Raft共识可以处理集群中部分节点的崩溃故障,但不能处理恶意节点行为, 因此通常用于节点身份已知的环境中,例如许可制区块链[Hyperledger Fabric](https://learnblockchain.cn/2019/06/28/fabric-first-network) 就使用了基于[Raft共识](https://learnblockchain.cn/2019/07/18/raft-protocol)的排序服务。 Raft官网列出了数十种各种语言开发的Raft共识算法实现,可以访问[这里](https://raft.github.io/)获取详细清单: ##3、Paxos共识 [Paxos共识算法](https://learnblockchain.cn/2019/03/22/easy_raft#3%20Paxos%20%E7%AE%97%E6%B3%95%E7%9A%84%E9%97%AE%E9%A2%98)是比较早期的分布式系统共识算法,特点是比较复杂, 目前用的已经不多。 ![](https://img.learnblockchain.cn/2020/01/15783683654599.jpg) ### 3.1 Paxos-consensus Paxos-consensus是一个Python实现的Paxos共识协议库,支持Python 2.6+。 * 开发语言:Python * 下载地址:https://github.com/rathodsachin20/paxos-consensus ### 3.2 Pluggable Paxos Pulggable Paxos是一个采用go语言实现的paxos共识协议库,采用可插拔设计。 * 开发语言:GO * 下载地址:https://github.com/nvanbenschoten/paxos ### 3.3 Go Paxos Go Paxos是另一个采用go语言实现的paxos共识协议库。 * 开发语言:Go * 下载地址:https://github.com/kkdai/paxos ### 3.4 Java Paxos Java Paxos是一个基本的Paxos共识协议库,采用java实现。 * 开发语言:Java * 下载地址:https://github.com/mxm/paxos ## 4、PoW共识 - Proof of Work [PoW,即工作量证明](https://learnblockchain.cn/2019/11/20/Consensus-POW),其核心设计思路是提出求一个复杂度计算值的运算过程。 用户通过进行一定的运算和消耗一定的时间来计算一个满意值并提供给服务方快速做验证, 以防止服务被攻击,数据资源被滥用,确保数据交易的公平和安全。这一概念最早在1993年 由Cynthia Dwork和Moni Naor的学术论文中提出,并在1999年由Markus Jakobsson与Ari Juels 对工作量证明这一词的进行了发表。到了2008年这工作量证明技术被运用在比特币区块链系统上, 到目前为此PoW技术在区块链中起着至关重要的作用,它也成为了加密货币中主流的共识机制之一, 像比特币,以太坊等都有使用。 ### 4.1 proof-of-work Proof-of-Work是一个JS实现的PoW共识库,使用SHA256和布隆过滤器。 下图显示了目标难度与解析时间的关系: ![](https://img.learnblockchain.cn/2020/01/15783683858622.jpg) * 开发语言:JavaScript * 下载地址:https://github.com/indutny/proof-of-work ### 4.2 pow.py pow.py是PoW共识的Python实现。 * 开发语言:Python * 下载地址:https://github.com/santisiri/proof-of-work ### 4.3 go-pow go-pow是PoW共识的go语言版本的简单实现。 * 开发语言:Go * 下载地址:https://github.com/bwesterb/go-pow ### 4.4 ProgPow ProgPow实现了一种可以对抗ASIC的PoW算法。 * 开发语言:C++ * 下载地址:https://github.com/ifdefelse/ProgPOW ## 5、PoS共识 - Proof of Stake ### 5.1 ValidateProofOfStake ValidateProofOfStake是一个纯粹的权益证明共识协议,它使用区块 验证人和铸币人惩罚机制,无需锁定状态。 * 开发语言:JavaScript * 下载地址:https://github.com/fresheneesz/ValidatedProofOfStake

1、BFT共识开发库

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

1.1 Tendermint Core

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

欢迎阅读 Tendermint Core文档。

  • 开发语言:Go
  • 下载地址:https://github.com/tendermint/tendermint

1.2 BFT-SMaRt

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

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

  • 开发语言:Java
  • 下载地址:https://github.com/bft-smart/library

1.3 BABBLE

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

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

  • 开发语言:Go
  • 下载地址:https://github.com/mosaicnetworks/babble

1.4 Concord-BFT

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

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

  • 开发语言:Python
  • 下载地址:https://github.com/vmware/concord-bft

1.5 HBBFT

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

$ cargo run --example simulation --release

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

  • 开发语言:Rust
  • 下载地址:https://github.com/poanetwork/hbbft

1.6 libbft

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

  • 开发语言:C++
  • 下载地址:https://github.com/NeoResearch/libbft

2、Raft共识开发库

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

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

3、Paxos共识

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

3.1 Paxos-consensus

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

  • 开发语言:Python
  • 下载地址:https://github.com/rathodsachin20/paxos-consensus

3.2 Pluggable Paxos

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

  • 开发语言:GO
  • 下载地址:https://github.com/nvanbenschoten/paxos

3.3 Go Paxos

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

  • 开发语言:Go
  • 下载地址:https://github.com/kkdai/paxos

3.4 Java Paxos

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

  • 开发语言:Java
  • 下载地址:https://github.com/mxm/paxos

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和布隆过滤器。 下图显示了目标难度与解析时间的关系:

  • 开发语言:JavaScript
  • 下载地址:https://github.com/indutny/proof-of-work

4.2 pow.py

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

  • 开发语言:Python
  • 下载地址:https://github.com/santisiri/proof-of-work

4.3 go-pow

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

  • 开发语言:Go
  • 下载地址:https://github.com/bwesterb/go-pow

4.4 ProgPow

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

  • 开发语言:C++
  • 下载地址:https://github.com/ifdefelse/ProgPOW

5、PoS共识 - Proof of Stake

5.1 ValidateProofOfStake

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

  • 开发语言:JavaScript
  • 下载地址:https://github.com/fresheneesz/ValidatedProofOfStake

区块链技术网。

  • 发表于 2020-01-07 11:30
  • 阅读 ( 2169 )
  • 学分 ( 33 )
  • 分类:入门/理论

评论