链化未来共识协议详解(上)

本系列分上下两篇,对链化未来共识协议进行详细介绍。文章首先介绍了常见共识协议的PoW,PoS,DPoS,从而引出了链化未来基于BFT的随机PoS共识算法(RPoS),随后详细介绍了链化未来共识协议的架构、消息类型、详细流程以及节点状态图等内容。文章最后对链化未来共识协议用到的关键技术进行了总结说明。

1.共识协议简介

Byzantine fault tolerance(BFT)问题[1]描述了在分布式计算机系统中,当部分节点发生网络延时,数据包丢失,宕机,作恶等情况发生时,诚实的节点如何能够保持状态的一致性,达成共识。L. Lamport[1]给出了两种解决方案,时间复杂度为O(n^m)口头消息和时间复杂度O(n*m)的书面消息方案。Miguel Castro和Barbara Liskov提出了Practical Byzantine fault tolerance(PBFT)[2],解决了原始BFT算法效率不高的问题,将算法复杂度由指数级降低到多项式级,使拜占庭容错在实际应用中变得可行。

2008年,比特币[3]的问世,它用一种全新的思路解决了比BFT问题更复杂的问题[4]。任何节点不需要批准就可以加入比特币网络,也就是permissionless或公有链,与PBFT需要permission或联盟链有本质的区别,它是完全去中心化的。在公有链中,不知道有多少节点,节点是谁,不能用BFT中少数服从多数的原则,而是用一种叫Proof of work(PoW)的算法。PoW通过一次次修改nonce值做哈希碰撞,使得哈希值前导0的个数满足某个值(难度系数),然后节点通过最长链原则达到共识。比特币网络的容错率是50%,只有超过半数节点是诚实的,比特币网络就是安全的。比特币网络通过经济激励机制奖励诚实节点,对作恶进行隐式的惩罚(消耗了算力和电力,但是没有得到奖励)来保证至少有51%的诚实节点。以太坊1.0[5]加入了图灵完备的智能合约,让区块链成为世界的计算机;共识方面,吸取比特币存在Application Specific Integrated Circuit(ASIC)挖矿导致算力集中[6],以太坊1.0基于memory-hardness,让内存IO成为挖矿瓶颈,达到抗ASIC挖矿。共识周期也从比特币网络的10分钟降到了15秒出块,由于出块时间变短,分叉的概率变大,为了抵抗Selfish Mining,以太坊不再使用比特币的最长链原则,而是贪婪最重可观察子树规则(GHOST)。

比特币的吞吐量7笔/秒,而以太坊也只有15笔/秒。PoW共识除了性能低外,对资源的浪费[7],算力集中化[8]。为了提高区块链性能,减少挖矿导致资源消耗,解决由于网络效应导致算力集中问题,研究人员提出Proof of Stake(PoS), Delegate Proof of Stake(DPoS)等[9-15]共识算法。

Proof of Stake(PoS),节点通过抵押代币加入共识,抵押代币的方式使节点更分散[16],它是一种无需许可的共识算法。其中,一些PoS算法[9-12]是基于BFT的,通过持有代币或抵押成为验证节点,然后在验证节点中选出leader,leader提块再做2轮或3轮投票确定块。Tendermint[9]首次把BFT引入到PoS共识,节点通过抵押代币成为Validator,Validator具有提块和投票权。系统每个块高开始基于Round-Robin算法,从Validator集合中选择一个成为Proposer,Proposer节点提块并广播,Validator对块进行投票,pre-vote阶段结束时,如果节点收齐2/3 Validator节点的投票,则在pre-commit开始时继续投该块,否则在pre-commit阶段开始时投nil块;在pre-commit结束时,收齐2/3 Validator的投票则commit该块,否则更换proposer,重新开始。Tendermint的Proposer是可以预知的,在开放的网络中容易遭受DDoS攻击,导致系统不能提供服务。Algorand[10]通过可验证随机函数(VRF)得到hash和证明pi,然后根据持有代币分布计算节点是否是提块者。其他节点可以通过VRF验证提块者的角色。Algorand通过VRF有效的解决了leader提前暴露问题,但是,每轮提块者的个数不确定会导致网络风暴。以太坊2.0共识算法Casper[11]为了提高性能也采用BFT的思路,但是引入一些约束和处罚措施[18]:同一块高投票者只能投一个块;节点离线一定时间将受到不同程度的押金罚没;验证节点是动态变化等。Casper通过博弈论的设计,约束节点按设想的方式运行,已达到网络的稳定运行。目前以太坊2.0已经按计划开发中,Phase 0阶段将在2020年初上线。HoneyBadgerBFT[12]认为网络延时是共识最主要的瓶颈之一,带上交易的块会造成转发节点网络拥堵,延时。HoneyBadgerBFT提出了一种新的思路,让网络中节点缓存中的交易一致,只要对确定选取哪些交易的值进行BFT共识就可以。节点随机转发一批交易,交易就能达到所有的节点;value的传播用到的门限加密,只有超过1/3的节点合作才能得到value值。另外一些基于chain的PoS算法,如Dfinity[13],通过阈值中继和聚合签名(BLS)产生随机数,引入见证人角色,提块者提块之后,被见证人确认。

DPoS是2014年由Bitshares[14]首席开发者,现为EOS[15] CTO Dan Larimer提出。与PoS抵押代币就可以参与共识这种“民主制度”相比,DPoS更像“人民代表大会”或“代议制”,持币人投票选举共识节点,每个周期节点轮流出块,每过一个周期节点洗牌一次,打乱原有的顺序。节点由专业的团队运营,通过配置更强的CPU,更快的带宽,更大的内存,整个网络的性能有极大的提升。但是,DPoS算法比较中心化[17],与去中心化的区块链原教旨主义背道而驰。

鉴于以上共识算法的特点,我们提出了一种随机PoS共识算法(RPoS)。主要有几个特点:

(1). 基于BFT,正常情况下,我们需要BA0,BA1两个阶段完成共识,与Tendermint的pre-vote和pre-commit两阶段类似。但是,与Tendermint在pre-commit阶段无法达成2/3 Validator共识重新选Proposer不一样的是,我们引入了BAX阶段,加快网络异常的时候网络恢复。

(2). 基于密码学创新的随机数产生算法。矿工通过抵押代币成为main角色,普通用户通过抵押代币成为waiter角色;在一个投票周期中,main和waiter通过计算vrf值分别投到随机数合约中main和waiter pool;合约根据权重用main和waiter pool中vrf随机数生成最终的随机数,投票者可以获得奖励,而不投票这将被扣除一定数量的抵押代币。创新的随机数产生算法有效地解决了“成员拒绝提交”,“setup过程复杂”,“成员串谋操纵”等多种困扰随机数生成的问题。

(3). 固定的交易确认时间,2阶段投票敲定最终块。在我们的真实环境中,99.99%的情况下,经过2阶段投票后就可以确定块。

(4). 硬件兼容性强,通过同步算法机制对高速节点和慢速节点进行时序协调,保持整个网络节点同步,适应不同计算性能的硬件节点。

(5). 提供多种灵活接入方案(静态、P2P、TCP、KCP等),适应复杂多变的网络环境。节点在身份认证的基础上自动发现,自动建链,动态维护网络的联通性。

(6). 采用BLS(聚合签名)技术快速确认块,提高安全性的同时节省存储空间。


2.链化未来共识协议

2.1.两层架构

•网络层(layer0):

     Gossip网络,节点自动发现、自动建链、身份验证、动态拓扑维护等。

•共识层(layer1):

     链化未来共识算法。


图1链化未来共识模块图


2.1.1.网络层(layer0)

去中心化的网络系统中,节点与节点的联通性非常重要,它决定了共识协议的传播、数据的同步等是否能及时并准确地到达系统的各个角落。由于节点的加入和离开的不可控性,系统还需要考虑网络拓扑的动态变更,即在邻居节点断开后及时的链接到其他节点,从而维护系统的健壮性。

链化未来网络基于辅助节点(seed),通过一系列点对点报文的交互发现网络中的其他对等节点。并随机的与对等节点建立网络连接。链接之间的保活报文能够在链接断开或网络状态不稳定时,及时的邻居节点,实现拓扑的动态变更。

链化未来网络层有以下几方面的优势:

非常方便的节点发现,节点间随机互联,即保障安全性,又足够去中心化。

提供UPNP配置开关,在支持upnp映射的网络中自动映射upnp地址,方便其他节点连接到本节点。

反向链接技术,当前节点不能链接到其他节点时,请求对方的反向链接,这在公网IP请求私网的链接场景中有极大的意义。

NAT穿透技术,可以穿透NAT网关后的局域网节点,构建更随机的、去中心化更高的网络。

支持多种接入方式:如TCP、KCP、静态链接、动态p2p链接等。

2.1.2.共识层(layer1)

节点角色定义:

节点在抵押后,自动成为committee成员。committee包括proposer节点和voter节点。未抵押节点为listen节点。


proposer节点:

通过随机数在committee成员中随机选出的提块者,负责本轮提块和发送propose消息。

voter节点:

committee成员,需要抵押。本轮未被选为proposer的committee成员,自动成为voter,负责对proposer提的块(propose消息)执行验证,验证通过后签名并发送echo消息(投票),验证不通过丢弃propose消息并可能对作恶节点发起惩罚。

listen节点:

未抵押节点,无权提块和验证块,可以随整个系统正常出块。

2.2.主要消息类型

propose消息:

由proposer节点发出的提块消息,需要voter节点接收并验证确认。消息内容主要包括:块数据(包含交易)、proposer自己的签名用于确认身份。

echo消息:

voter对propose消息验证并通过后,发送echo消息通知其它节点。消息内容主要包括:块id、voter自己的签名、bls签名、轮次信息等。

sync消息:

块同步消息,用于两个节点间传递块数据。消息内容主要包括:块id、起始块、结束块、消息序列号等。


2.3.投票选举流程

链化未来采用基于BFT的RPOS算法,正常情况通过2轮投票达成共识。

第一轮(ba0阶段):

由proposer节点提块,voter节点验证块,并对本轮出块进行第一次投票。

第二轮(ba1阶段):

所有节点基于第一轮的投票结果,再次投票确认,只有当2/3 voter对本轮出块达成一致,才能出块并进入下一个块的共识。每个轮次持续5秒,正常情况2轮10秒出块。

bax轮:

当遇到网络风暴等异常情况,2轮投票后仍然无法达成共识,则进入bax轮次,出块时间不定,出块条件仍然需要超过2/3节点对本轮出块达成共识。

你可能感兴趣的:(链化未来共识协议详解(上))