php 区块链算法_PoW/BFT等5种主流区块链共识算法的开源代码实现

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

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

1、BFT共识开发库

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

1.1 Tendermint Core

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

a1ee07c8cc158e27b12ed8033b207630.png

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

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

1.2 BFT-SMaRt

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

5bdff1435cbadb8b04264eb6e1758e17.png

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

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

1.3 BABBLE

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

3be2fded064790cd7053c6f389376b7f.png

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

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

1.4 Concord-BFT

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

c680724d1da6a0e593cd9f98784d4ef1.png

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
1892910b5730f34fa61d4642f96a3eeb.png

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

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

1.6 libbft

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

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

2、Raft共识开发库

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

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

3、Paxos共识

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

eed195da639abc01e3b8b0af305ba33b.png

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

b1166290878e881cf8d6e13af8a83a7c.png
  • 开发语言: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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433188.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

makefile 的export问题

from http://againinput4.blog.163.com/blog/static/172799491201132693532418/ 1.在(parent,上层的)makefile中export出来变量,子makefile(sub make)中,是可以访问的。 2. 而同一级别的makefil…

单片机 串口 波特率 c语言 9600 11.0592mhz t1,PLC与单片机串口通信的实现

党强摘要:本文主要进行探讨单片机与可编程逻辑控制器plc之间的串行通信以及各个系统在通信技术中的应用,本文主要以at89c51单片机和fpi系列的单片机为例进行阐述单片机与plc的串行通信。关键词:plc 单片机 串行通信中图分类号:TP2…

PHP中的正则表达式函数preg_

preg_match(); //用于正则表达式的匹配,且只匹配一次 preg_match_all();//用于正则表达式的匹配,会对所有符合规则的都进行匹配 preg_replace(); //正则表达式替换函数 preg_splite(); //正则分割函数 preg_match ( mode, string subject , ar…

vue 离开页面时间_vue页面离开后执行函数的实例

vue页面离开后执行函数的实例如下所示:destroyed: function () {console.log("我已经离开了!");this.doSomething();},说明:destroyed是与methods、mounted同层级的以上这篇vue页面离开后执行函数的实例就是小编分享给大家的全部内…

Linux批量删除文件

find [目录名] -name [文件名] -exec rm -rf {} \; 例如:find ./ -name *.raw -exec rm -rf {} \; 其中, -exec 表示后面执行命令 {} 表示查询到的文件名 -rf 为删除命令rm的参数,r 表示递归删除, f表示不需要确认,两个…

c语言选择结构程序设计报告,C语言学习与总结---第四章:选择结构程序设计

选择结构程序设计4.1 if语句4.2 关系运算符和关系表达式4.2.1 关系运算符4.2.2 关系表达式4.3 逻辑运算符和逻辑表达式4.3.1 逻辑运算符4.3.2 逻辑表达式4.4 条件运算符和条件表达式4.5 选择结构的嵌套4.6 switch语句4.7 程序应用4.1 if语句If语句有三种基本形式(1)if (判断条件…

jQuery 请指出'$'和'$.fn'的区别?或者说出'$.fn'的用途。

http://hi.baidu.com/chy0806css/item/acc52425099c30ff50fd87eb Jquery为开发插件提供了两个方法,分别是: $.extend(obj);$.fn.extend(obj); 1.那么这两个分别是什么意思? $.extend(obj);是为了扩展jquery本身,为类添加新的方法 …

gentoo 安装时的网络配置

在变换根目录(chroot)前,需要拷贝dns文件 cp -L /etc/resolv.conf/mnt/gentoo/etc/resolv.conf 在变换根目录(chroot)后 1. 修改主机名称 nano -w /etc/conf.d/hostname 2. 修改工作组名称 nano -w /etc/conf.d/domainname rc-update add domainname default 3…

[每日一题] 11gOCP 1z0-052 :2013-09-1 RMAN-- repair failure........................................A20...

转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/10859315 正确答案:D 一、模拟上题的错误: 1、删除4号文件 [oraclemydb ~]$ cd /u01/app/oracle/oradata/ocm/ [oraclemydb ocm]$ rm -rf users01.dbf2、…

c语言学习自我评价,学习自我评价4篇

学习自我评价4篇发布时间:2019-04-08在这次研究性学习中,我们小组在老师的指导下,通过全体成员的协作分工、研究探讨,集全体之智慧,个人之所学,充分将课本中的理论知识与生活实践相结合,用理论指…

c语言整型数组操作,c语言的数组操作|时刻需

不多说了直接上代码吧1.整型的可变长度的数组#includemain(){/* 测试可变长度的数组(整型的) start */int m;int *a,*b,*a_same,*b_same;printf("输入数组a的个数:\n");scanf("%d",&m);a (int*)malloc(m*sizeof(int));//动态分配数组print…

用Crossdev安装MIPS交叉编译工具链

例如执行这样的安装命令: crossdev -S --ex-gdb --without-headers -t mipsel-unknown-linux-gnu 首先,修改/etc/make.conf文件,在文件最后加上PORTDIR_OVERLAY/usr/portage/(不然会报错没有设置PORTDIR_OVERLAY) 然后…

kafka集群 kubernetes_为什么 Kubernetes 如此受欢迎?

点击上方蓝色“火丁笔记”关注我们,设个星标,每天学习全栈知识在撰写本文时,Kubernetes 已有 6 年历史[1]了,在过去的两年中,它的流行度不断提高,一直是最受欢迎的平台之一[2]。今年,它成为最受…

Python基础-作用域和命名空间(Scope and Namespace)

在Python中,对象是独立的,不同作用域中的不同名字都可以被绑定在同一个对象上,当然对这个对象的修改会影响所有的引用。赋值操作就是名字和对象的绑定或重绑定。这和C中的引用是一样的。 1,基础概念 1.1 命名空间(name…

android 动画 返回,Android“菜单图标变返回”动画

此例用到SVG动画,其中涉及三个XML文件,分别为:Vector矢量图,objectAnimator动画,以及一个animated-vector文件将前两个文件联合起来。1.在drawable文件夹下新建vector文件描述矢量图android:height"200dp"an…

TI Sitara AM335x系统之AM335x uboot spl分析

本文转载自nidetech的Blog芯片到uboot启动流程ROM → SPL→ uboot.img简介在335x 中ROM code是第一级的bootlader。mpu上电后将会自动执行这里的代码,完成部分初始化和引导第二级的bootlader,第二级的bootlader引导第三级bootader,在ti官方上…

安装vs2017出现闪退现象_二、vs2017出现闪退问题解决办法

1、出现“Project1.exe”(Win32): 已加载“C:\Users\Administrator\Documents\Visual Studio 2017\Projects\Project1\Debug\Project1.exe”。已加载符号。“Project1.exe”(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。“Project1.exe”(Win3…

Shell程序荟萃

--------------纯输出----------------1.sh #!/bin/shecho -e "Hello!world!\a\n"exit 0 --------------获得用户输入----------------2.sh #!/bin/shread -p "Please input your name:" nameecho -e "\nHello!$name"exit 0 --------------日期计…

android 安装第三方app,Android识别预装的第三方App方法实例

前言新买一台手机,里面会有很多App,有的属于系统App,不可卸载,有的属于第三方App,厂商会预装一些常用的或者给了他们广告费的App,这些是可以卸载的。如果要详细划分,系统App还可根据其路径不同进…