比特币:区块链共识分析的简单框架

区块链共识对比

延迟为交易发出到被共识确认所需要的时间。低:<10s,中:10s-600s,高:>=600s保持共识性能的情况下允许的共识节点数量。低:<100,中:>=100,高:没有限制Bitcoin的NakamotoConsensus具有很低的通讯开销,但由于共识参数的设定导致带宽利用率低。EOS的宣传中说的是BFT,但是与一些朋友交流得知现在用的依然是NC,也就是说EOS的DPoS与BitShares的DPoS应该是一样。框架思路

共识算法是一个很大的话题,在区块链出现之前,分布式系统和数据库领域都已经有很多的共识算法的研究和沉淀。但区块链的共识与之前的研究又有非常大的不同,如果不注意很容易掉进传统共识的老套路里面。实际上不仅仅是区块链有自己的独特需要,我的感觉是数据库会议上的共识研究和分布式系统上的共识研究也是有不小的区别。其实这非常好理解,因为场景不同嘛,设计自然不同。本文尝试提出一个分析区块链共识的简单框架,方便将不同的区块链共识放到一起来比较。基本要求

共识的基本度量包括两个方面,正确性和性能。正确性简单来说包括:一致性(Consistency)-节点最终能看到相同的本地状态活性(Liveness)-请求/交易总会在有限时间内被处理正确性是最最基本的要求,这也是大部分区块链共识都能做到的。要在异步网络中始终保证一致性和活性是一个非常难的任务,因此共识设计通常会选择保证一点而在一些特定情况下放弃另外一点,例如Bitcoin使用的Nakamoto共识选择优先保证活性,而BFT共识则优先保证一致性。性能包括:吞吐量(Throughput)-单位时间内系统可以处理的请求数量延迟(Latency)-一个请求/交易从发起到处理完毕/完全确定所需要的时间对吞吐量和延迟的影响因素很多,例如共识节点的数量,共识的消息复杂度,消息验证需要的时间,共识可用的带宽,共识设计的倾向等等。一般来说,吞吐量和延迟也难以两全,这是因为共识的消息复杂度有一个下限:对于每一轮共识,参与共识的节点至少要收到一次消息。如果要低延迟,就要尽快对每个请求/交易的达成一致,意味着单个请求/交易需要更高的消息复杂度;如果要高吞吐,就要尽可能的对请求/交易进行批量处理,以此降低单个请求/交易的消息复杂度,但也会造成高延迟。对于共识性能,Nervos研究团队的张韧提出的一个比较有参考性的指标是共识对带宽的利用率:给定相同的带宽,共识对带宽的占用越低,共识的吞吐量越高。

区块链共识的特点

动态的参与者集合

无论是permissionless还是permissionedblockchain,最重要的一个特征是它是一个长期运行的开放系统。长期运行和开放叠加的结果是,共识的参与者会一直变化,每隔一段时间,总会有老的共识节点离开,新的共识节点加入,共识参与者是一个动态集合。如何处理共识参与者的动态变化,是区块链共识的一个核心问题。与区块链共识不同,传统的共识研究往往先假设一个固定的参与者集合,然后研究如何在这个集合内达成共识,偶尔讨论参与者集合变化时的处理,基本上不关心参与共识需要什么样的资格。研究的重心在于如何保证共识的正确性,形成共识集合的方式只是个附属课题。传统共识的应用场景往往是中心化控制的网络,增加或者减少的服务器都是自己的,形成这样的侧重也很自然。数量众多的参与者

去中心化是permissionlessblockchain共识协议的一个独特目标。我们通常用参与共识的门槛来度量去中心化程度,参与门槛越低,去中心化程度越高。低参与门槛的自然结果是共识参与者的集合可以非常的大,因此共识协议的设计必须考虑到这一点,保证共识效率不会因为参与者的增多而下降。最小的信任模型

执行共识算法的目的是为了能对一个计算请求产生一致的计算结果,在这个过程中一定会有发起请求的节点和处理请求的节点。在传统共识模型中,有的完全在请求处理节点集合内部执行共识算法,有的是由请求发起节点和处理节点一起执行共识算法,无论何种情况,信任边界一般是在请求发起节点和请求执行节点之间,发起节点将计算请求发送给执行节点,执行节点计算出结果后返回给发起节点,发起节点信任执行节点的计算结果。

区块链共识的信任模型则大为不同,对信任的要求往往要小的多。在permissionlessblockchain网络中,同一个节点即发起交易又参与共识,节点对于共识结果要进行验证,并不是简单的信任其他节点的共识结果。以Bitcoin为例,如果一个全节点参与挖矿,它就同时是一个发起请求的节点和处理请求的节点。即使它只想做一个安静的全节点,不参与挖矿,它也会自行验证收到的请求处理结果,并不信任其他共识节点提供的结果。这样的全节点只是选择跟随多数算力选择的交易排序,不相信多数算力给出的交易结果。这是一个最小的信任模型。SPV/轻节点使用一个比全节点更强的信任模型,并不验证交易的执行,只验证区块头的有效性。如何验证区块头的有效性则是区块链共识设计的另一个核心问题。如果只是通过对区块头附带的非对称签名来验证有效性,这个信任模型基本上和传统共识的信任模型是等价的,因为传统共识中的请求处理节点也可以对结果附加签名,这个模型在结合动态参与者集合时会遇到一系列的问题,例如大家熟知的长程攻击。如果是通过PoW来验证区块头有效性则天然没有这些麻烦,主流的研究方向是在于如何进一步提高区块头的验证效率。一个简单的分析框架

根据以上的分析,我们可以整理出一个简单的区块链共识分析框架,用于比较各种区块链共识:进入方式*-购买算力/抵押代币/…出块方式*-轮流出块/PoW随机选择/链上伪随机/VRF随机选择/…共识方式*-NakamotoConsensus/BFT/…退出方式*-停止挖矿/解除抵押/...一致性-可以容忍多少恶意节点/算力/Stake/…活性-可以容忍多少恶意节点/算力/Stake/…延迟-交易被完全确认(被推翻的概率小于x)所需要的时间带宽效率-共识对带宽的利用率,越高越好节点数量-共识节点的数量上限是高还是低举例说明:

99%的确定性考虑自私挖矿无论多小的正常算力都有机会出块,但是平均延迟会增加https://github.com/tendermint...https://medium.com/nervosnetw...对于一个区块链共识协议来说,前四点基本上决定了后面的特征。通过这个框架也容易看到,我们通常所说的“PoW共识”或者“PoS共识”是非常模糊的描述,PoW/PoS仅仅是选择出块节点的方式,不能表达具体的共识过程是什么样子。我们甚至可以设计一些非常混搭的共识协议,例如设计一个需要通过抵押代币来参与,通过PoW来选择出块节点,通过NakamotoConsensus形成最长链的协议,或者是设计一个需要通过PoW来参与,通过VRF来选择出块节点,通过BFT来达成共识的协议。激励分析

在上面的框架之上,我们还可以叠加一个在传统共识中没有的维度:共识激励。区块链在共识中引入了经济激励,通过机制设计将纳什均衡与系统目标融合在一起,引导参与者遵守协议,共识参与者的效用函数可以方便的以其经济收益来衡量。共识奖励往往通过系统内原生代币实现,奖励价值由代币价值决定,在一个正确设计的共识协议中参与者应该按照付出的多少获得相应的回报。共识成本的组成比较复杂,对应上面的框架,我们需要分析共识的进入成本,出块成本,共识成本,退出成本,这些成本共同构成了节点参与共识的成本。正确的共识激励对网络的安全性和去中心化程度都有影响,因此激励分析是共识分析的一个重要部分。更多…

你是不是觉得这个分析框架有道理呢?欢迎给我们提出意见!本文感谢Jan、万涔涔、高亦民的共同撰写分析。如果你有兴趣,不妨尝试一下用这个框架来分析整理一些区块链共识协议(e.g.Casper/Ethereum2.0,EOS,Cardano,Algorand,etc.)并回复到NervosTalk,也许我们可以一起整理出一个区块链共识一览表!

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

链链资讯

[0:62ms0-6:416ms