龙空技术网

你真的了解区块链的共识机制吗?

Finchain金融链 377

前言:

此时大家对“gossip 算法”可能比较着重,我们都想要知道一些“gossip 算法”的相关资讯。那么小编在网上汇集了一些有关“gossip 算法””的相关资讯,希望朋友们能喜欢,看官们快快来了解一下吧!

我们知道比特币的底层技术是区块链技术,那么,区块链底层是什么?

共识机制。共识机制解决了分布式网络的一致性问题,也就是网络中所有节点就某个提案(Proposal)或某一状态达成一致共识。区块链能在众多不稳定节点中达到某一平衡状态,没有一个可靠的共识机制是难以想象的,从技术角度来看,密码学和共识算法是区块链项目的两大技术基础。

在分布式系统中,互不信任的节点一起工作,根据某种规则达成信任关系并保障系统整体一致性和持续性,这种规则可以抽象成共识过程。具体到区块链,共识机制是区块链节点就区块信息达成全网一致共识的机制,即就如何选择记账人达成共识 。

一个理想的分布式系统一致性应满足以下三点:

可终止性:一致性的结果需要在有限的时间内达成

共识性:不同节点最终完成决策的结果应该是相同的

合法性:决策的结果必须来自其他节点提出的提案

那么,共识机制具体来说有哪几种?

POW(Proof Of Work)

工作量证明,矿工在处理交易数据的同时不断进行哈希计算,直到得到一个前23位为0的哈希值即为nonce,这个过程就是在解决一个有一定难度但是可行的计算问题,但是验证答案的过程对于其他节点而言是非常容易地,也就是一个不容易解答但是容易验证的问题,这种问题通常需要消耗一定量的计算力,矿工通过算力比拼竞争区块记账权和代币奖励。POW算法能够使分布式系统达到拜占庭容错,是一种简单粗暴消耗资源但是能较大程度保证系统去中心化(不考虑矿池算力集中的问题),POW算法目前的确认时间较长,且没有最终一致性。

例子:BTC,LTC

POS(Proof Of Stake)

权益证明,基本思想是让网络中拥有越多权益的节点有机会在更短时间内做更多的决定,因为权益持有人更倾向于维护网络利益且害怕作恶后被惩罚。PoS的实现方式很多,比较典型的是引入“币龄”概念的方式,即用币龄来计算权益,每个代币持有一天记为一个币天,完成一次记账后清空一定的币天。POS算法不需要消耗大量资源,并在一定程度上缩短了确认时间,不过依然没有最终一致性。

例子:Qtum。而AE是pow+pos

DPOS(Delegated Proof Of Stake)

委托权益证明,基于POS发展而来,POS算法对于小股东而言除了能得到股份带来的收益以外几乎很难有什么作为。DPOS能够让每个节点选出可以代表自己利益的节点参与到记账权的争夺中,即类似于董事会的投票机制,选举出N个记账节点,后续提案由这些被选中的节点轮流处理。

DPoS理论上不要求选出的代表个体本身是权益所有人,看起来更民主,更开放。网络参与者做为选民有机会选出自己的代表,来给自己的利益代言。如果选出的代表不作为(轮到自己记账时不记账),或者作恶,可以把他们踢掉,如有必要进行惩罚(选民们也有可能被惩罚)。

总结来说,DPOS机制减少了记账节点的规模,属于弱中心化,但同时也大大提高了效率。

例子:BTS,Steem,EOS,金融链

DAG(Directed Acycli Graph)

有向无环图,DAG共识算法的诞生是为了解决区块链的效率问题,通过DAG拓扑结构存储交易区块,支持网络中并行打包出块,提高交易容纳量。之后DAG不断演化逐渐形成了 blockless 的发展方向。从数据结构来看,DAG模式是一种典型的Gossip算法,即本质上为异步通讯,带来的最大的问题是一致性不可控,并且网络传输数据量会随着节点的增加而大幅增加。DAG算法支持交易快速确认,低廉交易手续费,同时也剔除了矿工角色。

缺点:安全性低于POW等机制,容易形成中心化,例如IOTA依赖validator,字节雪球则需要见证人节点。

例子:IOTA,Byteball(字节雪球)

PBFT(Practical Byzantine Fault Tolerance)

实用拜占庭容错算法,基于BFT算法放松了部分约束条件来解决拜占庭问题。这是一种基于消息传递的一致性算法,算法经过三个阶段达成一致性,这些阶段可能因为失败而重复进行。

PBFT算法非常适用于联盟链或者私有链等中小规模环境。并且,POW,POS等算法都无法脱离token的存在,而PBFT并不依赖于此,共识效率高可以应用于高频交易场景。当然了,PBFT缺陷也非常明显,当有1/3或以上记账节点停止工作后,整个系统将无法运转。

例子:ZIL

DBFT(Delegated BFT)

授权拜占庭容错算法,基于权益选择记账人,然后记账人之间通过拜占庭容错算法达成共识。相比于PBFT,DBFT改良了不少特性:优化的记账节点,记账由多节点协同完成,每个区块都有最终性不会分叉。当然PBFT的缺点也依然存在,即1/3及以上节点宕机后整个系统无法继续提供服务。

例子:NEO

POA(Proof Of Authority)

权威证明,使用一组所谓的“权限”允许人们在区块链上创建新的节点并确保全网安全。在POA机制中,验证者是整个共识机制的关键,验证者必须具有已知且获得验证的身份。验证者通过放置这个身份来获得担保网络的权利,从而换取区块奖励。若是验证者在整个过程中有恶意行为,或与其他验证者勾结。那通过链上管理可以移除和替换恶意行为者。现有的法律反欺诈保障会被用于整个网络的参与者免受验证者的恶意行为。POA算法出块效率高,不需要挖矿消耗大量资源,整个网络验证者互相监督,随时可以投票加入新的验证者或者剔出不合格验证者。

例子:唯链

RPCA(Ripple Protocol consensus algorithm)

瑞波共识机制RPCA是一个类似PBFT的共识机制,属于节点投票的共识机制。初始特殊节点形成后,后续接入新节点需要51%原特殊节点同意,因此该机制从一开始就是中心化的。

例子:Ripple

Paxos

Paxos 是一类能够解决分布式一致性问题的协议,它能够让分布式网络中的节点在出现错误时仍然保持一致。Paxos 可以在没有恶意节点的前提下保证系统中节点的一致性,也是第一个被证明完备的共识算法,适用于传统的分布式系统。

Raft

Raft算法是对Paxos算法的一种简单实现,包括三个角色:leader,candiate,follower。Raft机制可以理解成全网选出一个记账者,如果它稳定运行没有挂掉,就由这个节点记账,全网无条件接受他的记账结果,相信他是诚实的,假如这个节点挂掉了,那么大家是可以通过超时或网络探测感知,然后快速启动一轮投票,来选出一个新的记账节点,然后继续无条件的等它记账,这样就达成了容错性。这在信任度较高,机构组成简单的的联盟链或者一个机构内的私有链里,是比PBFT更加高效的一种做法,因为不需要多步的反复确认,受网络影响的可能性也小很多。总的来说,Raft算法强调可用性和最终一致性,效率非常高,但是防欺诈性一般只能事后检查。

所以,综合来看,目前适合商用的只有DPOS。因为商业应用必须要符合:低成本、高效率、稳定性和安全性。

而DPOS共识由EOS创始人Daniel Larimer创建。目前在Bitshares、Steem等项目上运营良好,而且还有即将上主链的EOS。

所以,稳定性和安全性方面是没有任何问题的。

当然,DPOS也存在问题,那就是代表不作为(轮到自己记账时不记账),或者作恶,遇到这种问题怎么办呢?

我们可以参看JRC金融链的的做法。金融链也是基于石墨烯底层,采用DPOS机制。不过金融链改进了DPOS的机制,让投票更加合理。

具体而言是,股东除了自己投票参与选举外,还可以通过将自己的选举票数授权给自己信任的其他账户来代表自己投票。

理事会是区块链网络的权力机构,理事会的人选由系统股东(即持币人)选举产生,理事会成员有权发起议案和对议案进行投票表决。

理事会的重要职责之一是根据需要调整系统的可变参数,这些参数包括:

费用相关:各种交易类型的费率。授权相关:对接入网络的第三方平台收费及补贴相关参数。

区块生产相关:区块生产间隔时间,区块奖励。

身份审核相关:审核验证异常机构账户的信息情况。同时,关系到理事会利益的事项将不通过理事会设定。

在金融链系统中,见证人负责收集网络运行时广播出来的各种交易并打包到区块中,其工作类似于比特币网络中的矿工,在采用 POW(工作量证明)的比特币网络中,由一种获奖概率取决于哈希算力的抽彩票方式来决定哪个矿工节点产生下一个区块。

而在采用 DPOS 机制的金融链网络中,通过理事会投票决定见证人的数量,由持币人投票来决定见证人人选。入选的活跃见证人按顺序打包交易并生产区块,在每一轮区块生产之后,见证人会在随机洗牌决定新的顺序后进入下一轮的区块生产。

标签: #gossip 算法