投票选举 算法_区块链主流共识算法一文全通

ef75b7ca2003a67dc3ae4687cdaa760a.gif

在每种伟大的加密货币背后,都有着一个伟大的共识算法。没有共识算法是完美的,但是它们各有千秋。在加密世界中,需要共识算法来防止重支付。这是迄今为止一些最流行的共识算法的简要介绍,从区块链到DAG以及介于两者之间的所有内容。

49211b8c9c5c94581f51042af793879a.png

1. 工作量证明:POW (Proof - of -Work)

代表项目:BTC.ETH.BCH.LTC.Doge

优点:目前最安全的共识算法

缺点:需要成长期,吞吐速度慢

工作量证明是第一个区块链共识算法。由中本聪(Satoshi Nakamoto)设计用于比特币区块链,我们要感谢PoW,感谢我们在全球范围内看到的大量采矿作业和电力消耗。但是在行业发展的这个阶段,它开始被认为是一种过去的技术。甚至以太坊也从PoW迁移到更多能源和经济高效的PoS。有这么多新的替代方案,很难理解为什么新的区块链会使用PoW。

在PoW中,矿工解决了无用的难题,从而创建了区块。PoW在“最长链胜”系统上运行。因此,假设大多数矿工都在同一链上工作,那么增长最快的人将是最长,最值得信赖的。因此,只要矿工投入的工作中超过50%是诚实的,区块链就是安全的。

8908c01b1d05a8e38d97a34272050366.png

2. 权益证明:POS ( Proof - of - Stake )

代表项目:ETH2.0.Peercoin

优点:攻击成本更高,节能,可扩展

缺点:完整攻击之后区块链容易完全失去价值

在PoS中,区块不是由矿工工作创建的,而是由矿工将其令牌押在有效区块上的“赌注”中来创建的。对于分叉,铸造者花费他们的代币投票支持哪个分叉。假设大多数人对正确的分叉进行投票,那么对错误的分叉进行投票的验证者将“丢掉他们的股份”。

反对股权证明的常见论点是“ 一无所有” 问题。令人担忧的是,由于验证器不像PoW那样花费验证器几乎没有计算能力,因此验证器可以对发生的每个分支的两端进行投票。这样一来,PoS中的此时分叉可能会比PoW中的更为普遍,有些人担心这会损害货币的信誉。

2b035310778951a829e4ff43f7740a39.png

3. 委托权益证明:DPoS ( Delegated - Proof - of - Stake )

流行的实现:Steemit.EOS.BitShares

优点:便宜的交易;可扩展 ,高效节能

缺点:弱中心化,不稳定,易攻击

DPoS是Daniel Larimer的创意,实际上与PoS截然不同。在DPoS中,令牌持有者不会对区块本身的有效性进行投票,而是会投票选举代表他们进行验证的代表。在DPoS系统中,通常有21-100位民选代表。代表会定期洗牌,并下达命令以交付他们的区块。很少的代表可以使他们高效地组织自己,并为每个代表创建指定的时间以发布他们的图块。如果代表继续错过他们的障碍或发布无效交易,则大众将其投票出去,并用更好的代表代替他们。

在DPoS中,矿工可以协作制作区块,而不必像PoW和PoS中那样竞争。通过部分集中块的创建,DPoS可以比大多数其他共识算法计算速度快几个数量级。EOS被设置为一个区块时间少于1秒,大约0.5秒一个块。

bd52f8a588026eac2f47863c0ac85c5c.png

4. 授权证明PoA ( Proof - of - authority )

代表项目:POA.Network,以太坊Kovan测试网

优点:高吞吐量;可扩展的

缺点:企业集中式系统

权威证明是一种共识算法,其中交易通过批准的帐户进行验证,类似于系统的“管理员”。这些帐户是其他节点从其接收真相的权限。PoA具有高吞吐量,并针对专用网络进行了优化。由于其集中性,您不太可能看到PoA在公共链上运行。

5. 权重证明 POWeight ( Proof - of -Weight )

代表项目:Algorand,Filecoin,Chia

优点:可定制;可扩展的

缺点:激励方式可能是一个问题

权重证明是基于Algorand共识模型的共识算法的广泛分类。通常的想法是,在PoS中,您在网络中拥有的代币的百分比表示您“发现”下一个区块的可能性,在PoWeight系统中,会使用其他相对加权的值。比如Filecoin的时空证明是根据您要存储的IPFS数据量来加权的,其他系统可能包括信誉证明之类的权重。

200e05fb2a5157630c9601a5e9f4ce89.png

6. 拜占庭容错BFT

代表项目:Hyperledger,Stellar,Dispatch和Ripple

优点:高吞吐量;低成本; 可扩展的

缺点:可信任度低

有一个经典的问题是分布式计算,通常用拜占庭将军来解释。问题是几位拜占庭将军及其各自的拜占庭军队部分已经包围了一个城市。他们必须一致决定是否进攻。如果一些将军在没有其他人的情况下发动进攻,他们的包围将以悲剧告终。将军通常被距离隔开,必须传递信息进行交流。几种加密货币协议使用某种版本的BFT达成共识,每种协议各有利弊。

实用拜占庭式容错(PBFT):此问题的第一个解决方案是“ 实用拜占庭式容错”。Hyperledger Fabric当前正在使用,很少(少于20个)预选的将军PBFT高效地运行。


优点:高事务吞吐量
缺点:集中/允许

联邦拜占庭协定(FBA):FBA是另一种解决方案,用于解决Stellar和Ripple等货币使用的拜占庭将军问题。在一般的想法,是每一个拜占庭一般情况下,对自己负责的链,因为他们一进来就建立真相排序消息。在Ripple中,将由Ripple基础预先选择将军(验证人)。在Stellar中,任何人都可以成为验证者,因此您可以选择信任哪些验证者。

由于其令人难以置信的吞吐量,低交易成本和网络可扩展性,我相信FBA类共识算法是我们发现的最佳分布式共识算法。

1b3a5e78bad9827a3040ebd2ab6bb05c.png

7. 有向无环图 DAG

代表项目:Iota,Hashgraph,Raiblocks / Nano

优点:网络可扩展性;低成本

缺点:取决于实施

DAG现在比Vitalik的Tinder配置文件要热。DAG是一种共识形式,它不使用区块链数据结构并且大部分异步处理事务。理论上最大的优点是每秒无限事务,但DAG具有与其他共识一样的优点和缺点。

Tangle是Iota使用的DAG共识算法。为了发送Iota交易,您需要验证之前收到的两个交易。越多的交易添加到“纠缠不清”中,二对一,付费支付共识就增强了交易的有效性。由于共识是由交易建立的,因此从理论上讲,如果某人可以生成交易的1/3,则他们可以说服网络的其余部分认为其无效交易是有效的。在没有足够的交易量导致无法创建交易量的1/3之前,Iota会在称为“ 协调器 ” 的集中式节点上对网络的所有交易进行“双重检查” 。

艾奥塔说,协调器的工作原理类似于系统的训练轮,一旦Tangle足够大,协调器就会被拆除。

以下是我们为大家收集的部分资料,请大家下载来看吧,或者关注公众号之后,在对话栏输入“资料”下载区块链学习资料。

End

120b055ffb5f95e0f940e5ce5eab3fff.gif

a37253d99daf5626df845963d6bf2b56.png

5c02ad922f41b5adc843e95216fec5b4.png

4b4f5e31c92dee5dd06343a4e65f9829.png

12ee3e221cbf69204b5117e1a6c7b3a6.png

/ 关注盛合 /

获取更多有价值的行业信息,欢迎进入盛合区块链

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

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

相关文章

clion 引用dll_用CLion实现本地方法并给java调用

众所周知,PHP是世界上最好的语言,java排第二,因为PHP无所不能。但是在某些场景下java还要调用本地方法来提高执行的效率,故java只能排第二。java提供了jni(Java Native Interface)来实现在java中调用本地方法。本地方法在java中用…

mysql没有创建数据库的权限设置_mysql 创建数据库,用户并给用户设置权限

mysql创建数据create database dataBaseName default charset utf8 collate utf8_general_ci; --创建数据库并设置字符集创建用户create user 用户名% identified by 密码; -- ‘%‘ 是该用户可以在任何机器上登录查询用户select user,host.password from mysql.user;给用户设置…

golang mysql封装_自己封装的golang 操作数据库方法

这个是我用Go写的第一个东东,可能还存在些BUG没有测试到。这里主要是提供一个参考。各位可以改写成自己的风格。在命令行下输入如下两条命令,进行安装go get github.com/male110/SimpleDbgo install github.com/male110/SimpleDbGo语言的数据库操作&…

mysql历史数据备份_Mysql存储过程历史表备份

原文:Mysql存储过程历史表备份应用背景SCADA采集系统需要将实时数据存入历史表。问题1:如何更简单的添加历史数据?2.海量历史数据,比如年数据,如何快速筛选 画曲线?利用mysql的事件,每小时存一次采集数据&a…

如何用js给图片重置宽_如何用js给老婆每天发情话

作者: 加百利真胖原文:https://juejin.cn/events/all一、引言最近家里添了小孩,在家带娃陪产了一些天,深刻体会到老婆带孩子的辛苦。工作的时候不能在家陪她,就想着写个程序,每天固定在固定时间给她发一些情话,好让她在…

世界手机号码格式_世界上手机号码最长的国家是中国,最短的是哪个国家?

现在手机普及率非常之高,基本上人手至少一个手机,那么哪个国家的手机号码最长呢?其实世界上最长的电话号码,是11位数的中国手机号码。为什么手机号码是11位呢?1、号码格式决定我们的手机号可以分为三段,都有…

dockers log查询dockers的文件_Tomcat PUT方法任意文件上传

漏洞背景:tomcat(7.0.0-7.8.1)服务器,开启了HTTP PUT请求方法,web.xml文件中的readonly值设置未false漏洞环境:使用vulhub环境,直接dockers安装安装成功:安装vulhub详见:https://vulhub.org/#/index/漏洞利…

vue替换全部符合’字符串_技术成长日记-Vim实用技巧-4.7查找替换

1. 普通查找/ 向下查找? 向上查找n 查找下一个目标字符串N 查找上一个目标字符串q/ 回溯查找历史,输入该命令后会在状态栏上方显示一个查找历史回溯窗口,如图4.1: 图4.1 回溯查找历史可以选择之前执行过的查找,也可以在最后一行回…

bex5 mysql_bex5 库存系统的增删改查等功能对MYSQL数据库的维护操作 Windows Develop 276万源代码下载- www.pudn.com...

文件名称: bex5下载 收藏√ [5 4 3 2 1 ]开发工具: Java文件大小: 99 KB上传时间: 2017-05-18下载次数: 0提 供 者: 张天详细说明:库存系统的增删改查等功能对MYSQL数据库的维护操作- U5E93 u5B58 u7CFB u7EDF文件列表(点击判断是否您需要的文件,如…

excel导入mysql 截断_解决Excel导入数据库时出现的文本截断问题

问题在把Excel导入到数据库中时,发生文本截断问题:即导入的数据每行只有一部分,原始的Excel数据为:忽略错误导入SQLServer2008过程中,如果源数据和目标数据类型不匹配会导入失败,所以导入数据时会忽略错误&…

mysql表添加完整性约束_SQL语句——完整性约束

1.MySQL支持的完整性约束a.主键约束特点:唯一且非空主键可以由一个字段组成,也可以由多个字段组成如果主键由一个字段组成,既可以添加到列级,也可以添加到表级。如果主键由多个字段组成,则只能添加到表级。(1)在字段的…

通信线路工程验收规范 gb51171-2016_老杨一建通信学堂通信线路工程施工技术

引言:本章节以通信线路工程施工建设为主题,涵盖通信光(电)缆施工通用技术、架空、直埋、管道还有综合布线工程施工技术,深入浅出介绍通信线路工程建设中各环节的工作内容和涉及的相关规范。知识归纳卡名 称:1L412050 章 节…

python制作测试报告_使用 python 生成 extent report 测试报告

背景一直使用 HTMLTestRunner 生成 app 自动化的测试报告内容,虽然加了截图的展示,还是感觉报告不够好看。allure 报告内容可以,但是要以 pytest 管理测试 case,且 pytest 会执行所有以 test_命名的 case,测试结果只有…

twisted mysql_在Twisted下用MySQLadbapi获取自增id

D jango的ORM有一个很便捷的功能,其实也应该说是一个很基本的功能吧。就是在对一个model调用 save() 插入到数据库后,会将创建的D jango的ORM有一个很便捷的功能,其实也应该说是一个很基本的功能吧。就是在对一个model调用 save() 插入到数据…

java客户端_Java常用的Http client客户端

Http Client应用场景:Http协议是最重要的网络协议之一,目前移动端的开发、javaweb前后端分离架构,使越来越多的java应用使用http协议访问资源。Http client 大多数场景使用在多个服务之间相互调用rest api,特别是现在微服务架构的…

android jni 调用java对象_Android NDK开发之Jni调用Java对象

本地代码中使用Java对象通过使用合适的JNI函数,你可以创建Java对象,get、set 静态(static)和 实例(instance)的域,调用静态(static)和实例(instance)函数。JNI通过ID识别域和方法,一个域或方法的ID是任何处理域和方法的函数的必须…

docker 容器端口访问不到_docker容器无法访问宿主机端口的解决

最近在工作时遇到一个问题,docker容器无法访问宿主机的redis,telent6379端口不通。 经排查发现,该服务器启用了防火墙,防火墙把6379的端口的访问授权给docker0网卡访问即可。 操作如下: firewall-cmd --permanent --zone=trusted --change-interface=docker0 firewall-cmd…

java class isassignablefrom_Java之——Class的isAssignableFrom方法

转载请注明出处 https://blog.csdn.net/l1028386804/article/details/80508540Class的isAssignableFrom方法定义如下public native boolean isAssignableFrom(Class ? cls);由方法签名可见是一个本地方法 即C代码编写的。以下是JDK中的注释Determines if the class or interfa…

java中堆栈的基本操作_玩儿转队列和栈的基本操作及其应用:Java 版

队列的基本操作队列入队出队实现队列是种先进先出的数据结构。队列的基本操作主要是入队和出队。数据从队尾进入队列,从队首出队列。下面来写一个简单的队列:public class MyQueue {private List data;private int pointer;public MyQueue() {data new ArrayList&l…

java界面编辑教程_java程序设计基础教程第六章图形用户界面编辑.docx

java程序设计基础教程第六章图形用户界面编辑.docx还剩27页未读,继续阅读下载文档到电脑,马上远离加班熬夜!亲,很抱歉,此页已超出免费预览范围啦!如果喜欢就下载吧,价低环保!内容要点…