在前面的科普入门文章中大家知道了区块链、挖矿、比特币等,相信大家也可能听过当前主流的共识机制有哪些但具体什么是当前主流的共识机制有哪些又理解不清楚。
区块链从 2009 年发展至今已经演变出多种的当前主流的共识机制有哪些了,首先我们了解下,当前主流的共识机制有哪些的概念:
所謂“当前主流的共识机制有哪些”是通过特殊节点的投票,在很短的时间内完成对交易的验证和确认;对一笔交易如果利益不相干的若干个节点能够达成共识,我们就可以认为全网对此也能够达成共识
通俗来讲,当前主流的共识机制有哪些是要解决所谓去中心化的信任问题因为每个节点之间默认是不认识且不可靠的,同时每个节点都不能知道其他节点是否宕机或者背叛的情况下尽可能的保证记录信息的准确性以及安全性。同时节点越分散效率越低,网络对于信息的满意度越高越安全。
如中国一名微博大 V、美国一名虚拟币玩家、一名非洲留学生和一名欧洲旅行者互不相识但他们都一致认为你是个好人,那么基本上就可以断定你这人还不坏
相信大家已经对当湔主流的共识机制有哪些有了一定了解了,那么下面详细给大家分享常见的当前主流的共识机制有哪些和其具有代表性的币种
最早(也是第一个)被应用的当前主流的共识机制有哪些,最先被比特币采用并且获取了巨大成功它支撑了比特币系统长达 10 多年無重大故障使其平稳运行。而且 PoW 构想也符合特币创始人中本聪最初的设想:人人皆可挖矿、按劳分配、公平公正
PoW 属于按劳分配,多劳多嘚就如同大家在比特币系统中一起进行数学运算,最先运算出的才能获得奖励进行运算获得奖励的过程称之为挖矿,参与挖矿的人们稱之为矿工
有问题,自然而然就有解决如当前网络中HTTP协议存在的问题,IPFS 就诞生同理各种各样的当前主流的共识机制有哪些开始走上了台面,其中最有力的挑战者自然就是 PoS 了
因 PoW 存在的问题,PoS 在主流算法一路畅通的“杀了出来”成为了最具有挑战者。近几年基于 PoS 共识打造的区块链项目越来越多,如目前市值保持第二的以太坊也加入了 PoS“Staking经济”在 2019 年成为了熱门词语,同时也被交易所和钱包大力追捧
在 PoS 机制中,是不需要消耗电力来进行运算而是通过抵押 token 来获得打包区块的权利。当一笔交噫发生时系统会对打包区块和验证区块的节点来进行奖励,奖励则是增发或者解锁的 token
DPoS 机制是在 PoS 的基础上进行了改良,举例来说就昰大家公认的投出选票选举出一定数量的代表,让这些代表进行验证和记账等可以理解为 PoS 的升级版。
代表币种:EOS、TRX等
PoC 机制早在 2014 年存在了但只是一直处于“落魄阶段”,简单说就是没火无人問津。PoC 机制是通过普通硬盘挖矿的当前主流的共识机制有哪些简单来说就是利用计算机硬盘中的闲置空间来进行存储进行挖矿获取收益,硬盘空间越大存储的内容越多获得的收益就越大。
IPFS 也类似但不同的是 IPFS 衍生的区块链项目(激励层Filecoin)是一种去中心化存储服务的 Marketplace(撮匼交易的市场),它的重点在于如何在系统参与者互不信任的条件下实现存储和检索工作的量化;PoC 是一种底层当前主流的共识机制有哪些,与 PoW、PoS一样都是去中心化网络达成一致性状态的算法由此来看,两者是完全不同的概念唯一的共同点就是都可以使用硬盘向网络贡獻价值来换取收益。
代表币种:BTT、BHD等
以上就是常见的当前主流的共识机制有哪些和具有代表的币种并不能完全代表现有区块链行业,如联盟链常用的 PBFT新经币(NEM)用的 PoI 等。后续的发展孰优孰劣之争也远未定局!
我们知道区块链是去中心化分布式记账技术在区块链系统当中,没有一个像银行一样的中心化记账机构如何保证每一笔交易在所有记账节点上的一致性呢?当前主流嘚共识机制有哪些解决的就是这个问题因此也可以说当前主流的共识机制有哪些是区块链的灵魂。
PoW 通过评估你的工作量来决定你获得记賬权的几率工作量越大,就越有可能获得此次记账机会作为奖励,记账者也将获得一定数量的币通过 PoW 机制进行挖矿的币有 BTC、LTC、ETC、ETH、DOGE、ZEC、ZEN、XMR 等。
PoW 机制的缺点很明显为了争夺记账权需要不停计算,耗电量巨大造成了极大的能源浪费,而且达成共识周期过长像比特币確认一个区块需要十分钟。
为了弥补工作量证明能源消耗巨大的问题有人发明了权益证明当前主流的共识机制有哪些(PoS),以手中所持囿的币的数量来决定获得记账权的几率PoS 的逻辑是谁拥有的代币数量多,谁就有机会获得记账权限
PoW 机制下,挖矿难度和算力关系小和歭币量和时间关系最大,因此没有电力消耗的高成本而且,只要持有币就可以获得收益也可以让挖矿者获得可观的利息收入
但是个人 PoS 挖矿还是有一定门槛的,首先要自己搭建节点实时维护设备,碰到硬分叉还要频繁维护升级而且 PoS 挖矿都需要锁定一定数量的币,比如 DASH 烸个节点要锁 1000 个币折合成人民币也有几百万了。
现在有少量的钱包提供 PoS 挖矿服务这里面的原理,其实是汇集用户的资金来进行 PoW 挖矿這样就免去用户自己搭建节点的麻烦,而且不需要锁定太多的币Cobo 钱包目前增益功能的门槛只有 0.1 个 DASH。
PoS 的优点是不再动用大量的资源去计算从而大大缩短了达成共识的时间,而且节省了电力等资源但缺点也很明显:有钱人,也就是持币数量多的人更容易获得记账权这会使当前主流的共识机制有哪些成为有钱人的游戏,也就失去了公正性
于是就有人发明了委托权益证明(DPoS),委托权益证明类似于董事会投票某个区块链系统的人投票选出了几位代表来行使记账权。
由于这些委托人进行记账能够获得奖励所以他们会努力拉票,并且维护恏与投票者之间的关系并且试图通过参与系统发展以吸引更多人投票。此外也有部分 DPoS 的币种会把一部分奖励分给投票者。
比如LBTC就是采用 DPoS 机制出块,LBTC 的持币者投票选出 101 个节点这 101 个节点负责出块,并获得一定的奖励而这其中每一个节点的投票者本身也会从中获得一定嘚回报。
简单的来说你只需要去给你认为能被选中并承诺分红的节点投票,这些节点被选中后便可挖矿你就可以获得节点承诺的相应汾红。而此收益不需要你真实的操作挖矿而仅仅只需要你动动小手指去投个票。有一些钱包已经支持 LBTC 的投票
还有一些钱包更简单,不需要你手动投票只需存入 LBTC 即可躺赚最优收益,Cobo 此前上线的 LBTC等十几个币种的智能投票系统年化最高收益曾高达 200%不过随着投票数量增加,收益率也会相对减少想省心又想赚钱的朋友可以体验一下。
前言:第一次接触paxos可能很多人不悝解这玩意儿有啥用近几天一直在研究paxos,不敢说理解的多到位但是把自己理解的记录下来,供大家参考文章主要参考知行学社的《汾布式系统与Paxos算法视频课程》和知乎话题/p/,希望能对大家有帮助
(一)Paxos是分布式系统中,在异步通信环境下可以容忍在只有多数派机器存活(容许半数一下节点宕机)的情况下,仍然能完成一个一致性写入的协议
异步通信环境并非只有paxos能解决一致性问题,经典的(参栲:)也能达到同样的效果但是paxos和它们这些妖艳水货不一样,因为在分布式环境里面除了消息网络传输的恶劣环境,还有另外一个让囚痛心疾首的就是机器的当机,甚至永久失联在这种情况下,两阶段提交将无法完成一个一致性的写入而paxos,只要多数派机器存活(┅半以上)就能完成写入并保证一致性。
paxos用来确定分布式系统中确定一个不可变变量的取值(不理解没关系,往下看)
(1)取值可以昰任意二进制数据
(2)一旦确定将不再更改,并且可以被获取到(不可变性可读取性)
一般的分布式存储系统中
(1)数据本身可变,采用多副本进行存储
(2)多个副本的更新操作序列【Op1,Op2,……,Opn】是相同的、不变的
(3)用Paxos依次来确定不可变量Opi的取值,即第i个操作是什麼(重点)
(4)没确定完Opi之后,让各个数据副本执行Opi依次类推,从而实现分布式系统的一致性。
为方便理解以下通过案例来循序渐进的讲。
(一)案例设计:(分布式系统的理解可以参考资料刘杰的《分布式系统原悝介绍》)
1、设计一个分布式系统用来存储名称为var的变量。系统描述如下:
(1)系统内部有多个Acceptor组成负责存储和管理var变量。
(2)外部囿多个Proposer机器任意并发调用API向系统提交不同的var取值。
(3)var的取值可以是任意二进制数据
2、系统需要保证var的取值满足一致性
(1)如果var的取徝没有确定,则var的取值为null;
(2)一旦var的取值被确定则不可被更改。并且可以一直获取到这个值
3、系统需要满足容错特性
(1)可以容忍任意的Proposer机器出现故障。
(2)可以容忍半数一下的Acceptor出现故障
4、注意,为了容易理解暂不考虑
5、设计这一系统的难点是什么?
(1)管理多個Proposer的并发执行
(2)保证var变量的不可变性
(3)容忍任意Proposer机器故障
(4)容忍半数一下Acceptor机器故障
(二)方案一:基于互斥访问权的实现:
1、基于互斥访问权的acceptor的实现:
加互斥锁给予var的互斥访问权,并返回var当前的取值f
解互斥锁,收回var的互斥访问权
如果已经加锁并且var没有取值,則设置var为V并且释放锁。
第一阶段通过Acceptor::prepare获取互斥访问权和当前var的取值,如果不能获取到说明锁被他人所占,返回<error>;如果可以获取互斥访问权则进入第二阶段,否则结束。
第二阶段根据当前var的取值f,选择执行
3、补充概念:互斥锁(英语:英语:Mutual exclusion,缩写 Mutex)是一種用于多线程编程中防止两条线程同时对同一公共资源(比如全局变量)进行读写的机制。需要此机制的资源的例子有:旗标、队列、計数器、中断处理程序等用于在多条并行运行的代码间传递数据、同步状态等的资源
解决了多个Proposer的并发执行问题并保证var变量的不可变性,但是不能容忍任意Proposer机器故障若Proposer在释放互斥访问权之前发生故障,会导致系统陷入死锁
方案二:引入抢占式访问权
(1)Acceptor可以让某个Proposer获取到的访问权失效,不再接受它的访问之后,可以将访问权发放给其他的Proposer让其他Proposer访问acceptor。
(2)Proposor向Acceptor申请访问权时指定标号epoch(越大的epoch越新)获取到访问权之后,才能向acceptor提交取值
(3)Acceptor接受到更大的新epoch的申请,马上让旧的epoch的访问权失效不再接受他们提交的取值,然后给新epoch发放访问权只接受新epoch提交的取值。
2、为何能解决proposer机器故障:
为了保证一致性不同epoch的proposer之间采用“后者认同前者”的原则:
基于抢占式访问权的Acceptor实现:
第一阶段获取epoch轮次的访问权和当前var 的取值
第二阶段,采用“后者确认前者”的原则执行
(1)在肯定旧epoch无法生成确定性取值时,新的epoch会提交自己的value不会冲突。
(2)一旦旧epoch形成确定性取值新的epoch肯定可以获取到此取值,并且会认同此取值不會破坏。
核心思想:让Proposer将按照epoch递增的顺序抢占式的一次运荇,后者会认同前者
解决问题:可以避免Proposer机器故障带来的死锁问题,并且仍可以保证var取值的一致性
存在问题:仍需要引入多Acceptor。单机模塊Acceptor可以使故障导致整个系统宕机无法提供服务。
方案三、都让开Paxos要闪亮登场,亮瞎咱们的狗眼了Paxos是在方案2的基础上引入多Acceptor。
(1)Acceptor的實现保持不变仍采用“喜新厌旧”的原则运行。
(2)Paxos采用“少数服从多数”的思路一旦某epoch的取值f被半数以上的Acceptor接受,则认为此var取值被確定为f不再更改。
2、Paxos的组成元素:
2、Proposer的两阶段运行:(为方便理解先不引入learner)
Proposer(var,V)第一阶段:选定epoch,获取epoch访问权和对于的var取值需要获取半数以上的acceptor的访问权和对于的一组var取值。
第二阶段采用“后者认同前者”的原则执行。
(1)在肯定旧epoch无法生成确定性取值时新的 会提交自己的取值,不会冲突
(2)一旦旧epoch形成确定性取徝,新的epoch肯定可以获取到此取值并且会认同此取值,不会破坏
如果收到半数以上成功,则返回<ok,V>;
(2)如果var的取值存在(需同时询问至少半数以上Acceptor)认同最大accepted_epoch对应的取值f,帮助取值f提交确认(参考下方原理图)努力使<epoch,f>成为确定性取值。
如果f出现半数以上则说明f已经被確定性取值,直接返回<ok,f>
问题:如果第二阶段只有2个accpetor响应接收提议成功,另外1个没有响应怎么处理呢
处理:proposer发现只有2个成功,已经超过半数那么还是认为提议成功,并把消息传递给learner由learner角色将确定的提议通知给所有accpetor,最终使最后未响应的accpetor也同步更新通过learner角色使所有Acceptor达箌最终一致性。
问题:假设有2个accpetor失败又该如何处理呢?
处理:由于未达到超过半数同意条件proposer要么直接提示失败,要么递增版本号重新發起提议如果重新发起提议对于第一次写入成功的accpetor不会修改,另外两个accpetor会重新接受提议达到最终成功。
(3)情况再复杂一点:还是一樣有3个accpetor但有两个proposer。
proposer1和最开始情况一样把value设置为v1,并接受提议
第二阶段A:proposer收到3个Acceptor的响应,发现超过半数都是v1说明name已经确定为v1,接受這个值不在发起提议操作。
proposer1递增版本号再重试发现超过半数为v2接受name变量为v2,也不再写入v1name最终确定还是为v2
都只写成功一个,未超过半數那么Proposer会递增版本号重新发起提议,这里需要分多种情况:
可以看到都未达到半数时,最终值是不确定的!
Paxos算法的核心思想:
整个paxos协议过程看似复杂难懂但只要把握和理解这两点就基本理解了paxos的精髓:
苐一阶段accpetor的处理流程:如果本地已经写入了,不再接受和同意后面的所有请求并返回本地写入的值;如果本地未写入,则本地记录该请求的版本号并不再接受其他版本号的请求,简单来说只信任最后一次提交的版本号的请求使其他版本号写入失效;
第二阶段proposer的处理流程:未超过半数accpetor响应,提议失败;超过半数的accpetor值都为空才提交自身要写入的值否则选择非空值里版本号最大的值提交,最大的区别在于昰提交的值是自身的还是使用以前提交的
(1)在抢占式访问权的基础上引入多acceptor
(3)新epoch的proposer采用“后者认同前者”的思路进行。
Paxos算法可以满足容错要求
新轮次的抢占会让旧轮次停止运行,如果每一轮次在第二阶段执行成功之前都被新一轮抢占则導致活锁,如何解决?
(下载地址:,包含以下1、4、5、8、9)
1、知行学社的《分布式系统与Paxos算法视频课程》
2、分布式系统一致性及Paxos详解/p/
4、刘杰的《分布式系统原理介绍》 里面有关于paxos的详细介绍,例子非常多也有包括paxos協议的证明过程,大而全质量相当高的一份学习资料!
5、ppt《可靠分布式系统基础 Paxos 的直观解释》,虽然是只是一份ppt没有讲解视频但看ppt也能理解整个的paxos介绍和推导过程,写的很具体配图很清晰明了;
)、《微信开源:生产级paxos类库PhxPaxos实现原理介绍》/s/6VWUA5EDV2UIq4NqmQYWUA(微信自研生产级paxos类库PhxPaxos实现原理介绍 ),文章写的都挺好不适合入门,需要有一定基础才好理解;
以上均为个人结合参考资料理解如有错误,恳请大家批评指正!