概述
区块链系统会选取记账最快、最好的那个节点,以这个节点的账目为准,并发送备份给所有节点。那么,系统是凭什么来认定最快、最好的节点的?最快、最好的标 准是什么?其他节点为什么会同意某个节点的记账?人人都参与记账,那么如何保证他们的账目都是正确的?会不会有些节点出于私利伪造或者篡改信息,会不会有 节点恶意搞破坏?靠什么来保证节点数据的一致性和正确性?换句话说,靠什么达成共识?这就涉及区块链的共识机制。
去中心化的共识难题
在一个中心化的系统里,因为有权威化的中心存在,要达成共识是很容易的。例如,A跟B借10万元钱,传统的操作方式是双方去公证处公证,或者请一个颇具权威的中间人来进行担保。这样,想赖账就不可能了。
那么,在一个去中心化的系统里,没有权威中心的存在,没有公证人,没有担保公司,也没有中间人,A如果借了B的10万元钱,最后不承认不还钱怎么办?
为了方便大家对去中心化的理解,依然以刚才的借贷为例,我们来建一个最简单的去中心化模型。
如果A借了B 10万元钱,他们既不找公证,也不找中间人,其操作方法是:A在人群中喊一声,“我是A,我找B借了10万元钱!”B也公开承认,“我是B,我借了10万 元钱给A!”此时整个系统里的人都听到了这个消息,大家各自在账本上记下“A找B借了10万元钱”。需要指出的是:在这个系统中,所有人都能收到A的信 息,却并不知道其他人的存在。
这就是一个去中心化的系统,我们会发现,在这个系统中不需要公证,不需要证明人,甚至连借贷协议都不需要,也不需要人与人长久的信任关系。倘若A赖账,系统里的其他人就会翻出账本:××时间,A找B借了10万元钱。
看起来是不是很简单?去中心化的记账是一个公开透明的系统,完全不需要第三方监督或者证明。但是,这当中存在两个致命的问题:
(1)由于是点对点的沟通,系统中有那么多人,他们都能接收到A的信息,但是所有节点之间却并不认识,也无法交流,如何能够保证所有人的记账都是同步的呢?
(2)假如有的人没有听清楚,把账记错了,或者包庇A,故意做假账,怎么办?
一个账本中,假如出现时间和账目不一致的情况,那它就是无效的。例如,上述例子中,C记载的是“A找B借了10万元钱”,D记载的是“A找B借了1万元钱”,后面记的账更是五花八门。那么这个账本就无效了,B完全可以赖账。
这就是去中心化系统所面临的两大难题:同步性问题和一致性问题。
同步和一致,在过去的技术下是做不到的。因为是点对点的通信,双方不可能在这种情况下达到信息的一致性。严谨一点,就是“在分布式计算上,试图在异步系统和不可靠的通道上达到一致性是不可能的”。
比特币的共识机制:工作量证明
区块链是靠什么达成共识的呢?这就是我们要讲的区块链共识机制。
区块链的共识机制,最为知名的就是PoW,即工作量证明,这是比特币系统中运用的共识机制。
算力竞争
迄今为止,人类社会最接近“去中心化”的就是市场经济,完全靠“背后看不见的手”在调节,这个背后看不见的手是供求关系,也就是竞争。
区块链的算力竞争有点类似于市场经济,靠和个人私利密切相关的机制去调节。
什么是算力竞争呢?
区块链系统中的每一台计算机都参与记账,但如果有节点出于私利篡改数据,造成不同节点的账目不一致该怎么办呢?以哪个节点记的账为准?
区块链是通过算力竞争来达成共识的。
所谓的算力竞争,就是以每个节点的计算能力(“算力”)来竞争记账的一种机制。在区块链系统中,大约每10分钟进行一轮 算力竞争,竞赛的胜利者获得一次记账的权利,即在区块链这个总账本中加入一个新区块的权利。如此周而复始,不断增加新的区块。也就是说,只有竞争的胜利者 才能真正参与一轮记账并向其他节点同步更新账目信息。
工作量证明
工作量证明是算力竞争的延续,在算力竞争中,如何判定某个节点在一轮记账中获胜呢?其依据就是工作量证明。
什么是工作量证明呢?
工作量证明(proof of work,PoW),简单理解就是一份证明,用来确认你做过一定量的工作。
我们都知道,监测工作的整个过程通常是极为低效的,而监测结果则要高效得多。例如,要想知道一个学生是否每分每秒都在认真学习很难,但可以用毕业证来验证他的努力程度。现实生活中的各类证件,都是通过检验结果的方式(各类考试)所取得的证明。
工作量证明的原理,跟这个有点相似。
工作量证明系统(或者说协议、函数),是一种应对拒绝服务攻击和其他服务滥用的对策。它要求发起者进行一定量的运算,也就意味着需要消耗计算机一定的时间。
工作量证明系统主要特征是客户端需要做一定难度的工作得出一个结果,验证方却很容易通过结果来检查出客户端是不是做了相应的工作。
不利原理
生物学上有一个原理叫作不利原理(the handicap principle),该原理可以帮助我们解释工作量证明的过程。这个原理说,当两只动物有合作的动机时,为了打消对方的疑虑,它们向对方表达友好时必须 附上自己的代价,使得自己背叛对方时不得不付出昂贵的代价。
区块链是一个去中心化的系统,也就是说它没有第三方监督。在这种情况下,每个节点都会存在潜在的道德问题,达成共识就会 变得很困难。工作量证明和生物学中的“不利原理”有点类似,可以理解为:在这个系统中,如果你认真工作,你的账本被系统认可和接受,系统会对你的贡献给予 一定的奖励;而如果你的记账被系统认为是不合格的,将会失去奖励。
共识机制与比特币的诞生
在工作量证明中,我们提到了奖励。而在中本聪的设计里,最初的奖励就是比特币。
如何理解?
区块链是一个去中心化的自治系统。正如我们前面所举的那个借贷的例子:A找B借了10万元钱,在区块链系统中,由于没有中心的存在,A向所有节点广播“我借了B的10万元钱”,然后系统所有节点都记下这笔账,通过这样的方式来完成“公证”。
区块链是让所有节点参与记账,但是,这中间存在一个问题,记账是需要成本的,节点凭什么要这么做呢?没有奖励,节点就没有参与的动力。
同时,还存在下列问题:
(1)节点处理事务的能力不同,网络节点数据的吞吐量有差异。
(2)节点间通信的信道可能不安全。
(3)可能会有做恶节点出现。
那么,要如何解决这些问题呢?
在中本聪的设计里,每轮竞争胜出并完成记账的节点将获得系统给予的一定数量的比特币奖励,这个奖励的过程也是比特币的发行过程。[1]
准确点讲,系统发放的奖励包含两部分:一部分是区块所包含交易的手续费,这部分不属于比特币的发行过程;另一部分是新币奖励,每四年减半,这是比特币的发行过程。目前所获得的奖励以新币奖励为主。
在这个系统下,为了获得系统发放的比特币,节点不停地进行计算和竞争,同时不断地有新区块产生。这个过程很像现实生活中挖矿的过程,因此获得比特币的过程被人们形象地称为“挖矿”。
我们可以看出:在这个系统中,每个节点只需要根据自身利益行事,出于“私利”的目的进行竞争,为了在“工作量证明”中获胜以得到比特币,不得不保持诚实。
这就是比特币的共识机制,比特币借助区块链打造了一个正向的循环系统。
[1] 在中文聪的设计中采取的是最长链共识。
PoW的缺陷以及其他共识机制
工作量证明使得区块链系统在没有中心的情况下也能达成共识,但是对工作量证明也有一些批判,一个常见的指责就是“浪费能源”,因为节点计算需要耗电,挖矿已成为能源密集型产业。
出于对消耗能源的担忧,也有科学家在探索和实践新的共识机制。
PoS(proof of stake):权益证明机制
一个典型的共识机制就是权益证明机制,以节点持有币的数量和实践来选择记账权。
如果把PoW理解为“干得越多,收获越多”,那么PoS就是“持有越多,获得越多”。
它的优点是:相对于PoW,一定程度上减少了数学运算带来的资源消耗。同时,它根据每个节点所持有的数字货币的比例和时间,等比例地降低挖矿难度,从而加快了寻找随机数的速度,在一定程度上缩短了共识达成的时间。
它的缺点是:还是需要挖矿,且所有的确认都只是一个概率上的表达,而不是一个确定性的事情,理论上有可能存在其他攻击影响。例如,以太坊的DAO攻击事件造成以太坊硬分叉。
DPoS:股份授权证明机制
它类似于董事会投票,持币者投出一定数量的节点,代理其进行验证和记账。它与PoS原理相同,只是选了一些“代表”。与PoS的主要区别在于节点选举若干代理人,由代理人验证和记账。
该模式可以每30秒产生一个新区块,并且在正常的网络条件下区块链分叉的可能性极其小,即使发生也可以在几分钟内得到解决。
其缺点是必须是在该区块链系统有一定影响力的人才有资格获得记账的权利。
还有燃烧证明、沉淀证明等。
不过,这些并没有从本质上达到节省能源的目的,当前工作量证明仍然是最可靠和最有效的去中心化共识机制。
来源:我是码农,转载请保留出处和链接!
本文链接:http://www.54manong.com/?id=153
最后
以上就是忧心小伙为你收集整理的区块链的共识机制的全部内容,希望文章能够帮你解决区块链的共识机制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复