当前位置:主页 > 百科 > 技术 > 时间:2018-07-23 16:38 阅读:

区块链技术:共识机制

 

区块链技术专题(一) 共识机制
 
 

技术是存在边界的,这决定了需要引入一些其他的激励和约束机制来使得整个系统正常工作。同时在共识机制设计上,常常需要牺牲系统的某些性能来保证一致性和正确性。公有链里的共识机制主要侧重于使用去中心化和更加具有激励性的设计,目前的许多新型区块链体系,支持可插拔的共识机制模块,可以根据应用场景和需求切换使用不同的共识机制。联盟链更注重隐私、安全和监管,因此会加入更多的管控元素,更喜欢采用类似于传统的拜占庭家族(PBFT,DPOS)等共识机制。达成共识是需要成本的,最终需要衡量投入产出比,有时设计得再复杂的共识机制也许并不如一个好的商业模式来的有效。

 

在分布式系统中,多个主机通过异步通信的方式形成网络集群,主机之间进行状态的复制从而达成一致的状态共识。但是异步系统中的主机可能性能下降、网络拥塞,使得系统内传播了错误的信息。因此在设计共识机制时,要默认系统中存在不可靠的节点。从算法的角度,这些机制的设计本质上是基于经济利益的博弈,对于恶意破坏系统的参与者,好好记账获得的收益大于其破坏的收益,从而保证大部分人的合作,

 一、技术的边界

苹果公司在设计一款新产品时,都会先了解当下技术的边界在哪里,哪些技术已经可以完全使用了,哪些还要等几年,对于需要等几年的,它会在几年后再考虑。当然,科学和技术有着很大的不同,科学研究可以给出理论上的极限边界,而从工程设计的角度更多考虑的是如何在大概率情况会出现的大致边界内,整体上做到最好,类似于一个优化问题,我们需要知道给定的约束条件,才能最终正确地求解。

就分布式系统中状态共识问题而言,前人的科学研究已经给出了两个重要的边界:

Fischer-Lynch-Paterson在1985年的论文中证明了:在一个多进程的异步系统中,只要有一个进程不可靠,那么就不存在一个协议,此协议能保证有限时间内使所有进程达成一致。CAP原理:分布式计算系统不可能同时确保一致性、可用性和分区容忍性,设计中往往需要弱化对某个特性的保证。

其中一致性是指系统中服务节点对于处理结果达成的一致;可用性是指在有限时间内,任何非失败节点都能应答请求;分区容忍性是指网络可能发生分区使得节点之间通信不保障。

科学家认为在分布式场景下达成完全一致性是不可能的,但是工程上的许多问题的解决,都在于如何进行合理地取舍,我们可以牺牲一部分代价来换取分布式场景的一致性。目前,基于区块链设计的各种共识机制的不同主要来源于以下两个方面的不同:

第一,算法假设的条件不同,例如Paxos和Raft等算法假设节点不会故意发送错误的消息,这当然是一个比较强的条件。在比特币使用的PoW共识机制的前提条件是并不预先知道系统内有多少记账的节点,而联盟链里常使用的PBFT等协议则假设节点需要许可。
第二,可以看成是牺牲哪一部分代价来换取多少程度的一致性。例如根据CAP原理,弱化可用性,在系统故障时拒绝服务,Paxos、Raft等算法就是弱化了可用性来保证结果一致性。再如比特币通过算力的比拼牺牲了一部分最终一致性(因为分叉的产生),但是保证了整个区块链系统的合法性和鲁棒性。

算法当然不是万能的,它的边界决定了必须要引入一些其他的激励和约束机制来使得整个系统正常工作。:在基于权益证明的加密货币中,创建新的区块并不会消耗大量CPU,如果它不诚实并不会失去什么,对于一个节点来说,利益最大化的选择是在多条链上同时挖矿,这会造成网络中的节点很难对使用哪条链达成共识,这种情况下需要通过算法外的办法来解决,加入一些惩罚的协议等等。

  二、公有链的常用共识机制

就目前而言,公有链里的共识机制主要侧重于使用去中心化和更加具有激励性的设计,目前的许多新型区块链体系,支持可插拔的共识机制模块,可以根据应用场景和需求切换使用不同的共识机制。

系统的记账者都有唯一公认的历史交易序列对于公有链来说至关重要,因为这是解决“双重支付”问题的关键:为了避免双重支付的出现,那么就应当获悉这笔交易之前的所有交易,以确保这笔交易是第一次出现的。如何在双方信息不对称、不确定的环境下,使得交易可以顺利进行,这就是“拜占庭将军问题”。

比特币的PoW工作量证明机制通过以下途径来解决了拜占庭将军问题:

维持周期循环,保证节点步调一致:调整难度来保证网络一直需要花费10分钟找到一个数学难题的解,并产生一个新区块。在这10分钟内,网络上的参与者发送交易信息并完成交易,最后才会广播区块信息,这样就杜绝了节点无限制、无规律地发送命令的状态。通过算力竞赛,确保网络单点广播:比特币通过时间戳和电子签名,确保在某一个时间点只有一个(或几个,属于分叉行为)节点传输区块信息,改变了节点之间互相传送的混乱。通过区块链,使用一个共同账本:基于P2P网络的BT技术是成熟的,网络中的节点,在每个循环周期内都是同步的,这让每个节点做决策的时候就有了共同的基础。

事实上,无论你采取什么样的方式,只要保证时间统一、步调一致、单点广播、一个链条就能解决加密货币这种分布式系统的拜占庭将军问题。

PoS作为另一种共识机制,矿工掌握的加密货币数量占比等于其挖出一个PoS矿的概率。这会导致首富账户的权力更大,有可能支配记账权,也会造成权益越来越中心化,但是PoS确实大大减少了挖矿的能源成本。长远来看,可能会有更多的币种会向PoS方向发展。

除了以上两种比较常见的基本的主流共识机制,目前的公有链共识机制的创新点在于两者之间的混合,从而可以保留去中心化特征的同时提高处理的效率。例如以Decred为代表的PoW/PoS混合共识:挖矿的过程和比特币类似,也需要完成一定量的工作量证明,但是在达成共识的环节有所区别,不同于比特币需要全网节点来验证区块,最终以最长的链为主链,混合机制引入PoS投票来决定刚挖出的区块是否有效,大大提高了验证的速度。除此以外还有以Hcash为代表的PoW/PoS混合共识+双层链结构。将PoW难度分成两级,分别发布在两条链上,使得PoW矿工和PoS矿工都能参与系统共识并发挥作用。

  三、联盟链的常用共识机制

联盟链更注重隐私、安全和监管,因此会加入更多的管控元素,更喜欢采用类似于传统的拜占庭家族(PBFT,DPOS)等共识机制。联盟链相对于公有链而言,弱化了对于去中心化的强调,同时由于节点准入制,可以理解为已经赋予了节点一定的信任。

股份授权证明(DPoS)机制里有股票权的人是通过选举产生和更换的,而不是和PoS一样通过币多币少这一个维度来产生的。它通过不同的策略,不定时地选中一小群节点,由这一小群节点做新区块的创建、验证,签名和互相监督,大幅度的减少了区块创建和确认所需要消耗的时间和算力成本。DPoS不需要太多的信任,所选的这些委托人不能改变交易的细节,如果节点存在试图作恶、提供的算力不稳定、计算机宕机等行为,公开的社区可以快速将他投票驱逐。

如果说PoW和PoS都是以经济模型为主解决共识问题,那么PBFT就是以算法模型来解决共识,它不存在代币分发机制,能耗很低。过程可以简述为大家先投票选出领导者,领导者记账后其他人投票通过。在PBFT算法中,可以证明只要会出错的拜占庭节点小于系统全部数量的1/3,那么整个系统就可以正常工作。目前的改进算法方向大致包括使用P2P网络、动态调整节点的数量,减少协议使用的消息数量等。

联盟链的共识机制算法的创新也包括了例如DPoS和PBFT的混合,将DPoS的授权机制应用于PBFT中实现动态授权,文献已经证明这样的算法在最佳出块时间为20秒的时间间隔下,TPS可以达到10000-12000,时延控制在100-200ms之间。正是由于联盟链保留了部分的“中心化”,从而得到了交易速度增快,交易成本大幅降低的回报。

  四、共识的成本

很显然,共识是需要成本的,公有链如PoW付出了大量的算力成本,大量的硬件花费了很长的时间和很多电力来进行SHA256运算,求解一个实际上没有什么意义的难题,仅仅为了竞争记账权;即使是在联盟链上要达成共识,就像民主投票一样,需要经过一轮又一轮的磋商,交换意见最后达成一致。如何降低民主的成本,如何用最少的磋商次数,最小的沟通成本达成共识是算法追求的目标,也是决定区块链这台机器是否跑得足够快的重要因素。

而最重要的问题,我们应该思考的是从用户的角度,是否真正提升了用户的体验。毕竟,仅仅因为信仰而使用区块链上的各种服务的人只是少数,如果对于普通人而言,新的产品对他的生活品质、产品体验并没有太大的提高,那么究竟是否应该继续投入也是值得深思的问题。对于企业而言,企业当然应该仔细思量自己的投入产出比,以决定是应该使用区块链技术还是说存在成本更低的替代性方案。例如使用分布式数据库来解决企业之间的信息不对称性,对数据设置查看权限和加密等级来实现不可篡改,并配合一系列的管理办法,加上大部分场景里可能龙头企业并无太大的动机去实现数据篡改,并且有足够的动力去维护数据库,在这种情况下,设计得再复杂的共识机制也许并不如一个好的商业模式来的有效。

免责申明:本文是 [ 雷电财经 ]原创稿件, 版权属 [ 雷电财经 ]所有,未经授权不得转载, 已经协议授权的媒体下载使用时须注明 稿件来源: [ 雷电财经 ], 违者将依法追究法律责任。根据国家《关于防范代币发行融资风险的公告》,社会公众应当高度警惕代币发行融资与交易的风险隐患。如您对本文存在异议,或不巧侵犯了您的合法权益,请通过邮件联系我们!
1
3