美文网首页nervos
区块链的灵魂:共识机制

区块链的灵魂:共识机制

作者: 贝壳儿说 | 来源:发表于2018-06-14 03:52 被阅读48次

    全文阅读,大约需要5分钟。

    本文实时同步发布在区块链原创技术公众号【堂说区块链】上,欢迎关注订阅。

    推荐一个新的区块链领域优质内容输出平台:【币读www.biduDNA.com】

    博主已在币读平台上首开专栏,区块链领域技术原创文章将同步首发在【币读】平台上;

    币读专栏地址:https://www.bidudna.com/statics/topics?id=49

    本文内容提纲

    1)什么是共识机制

    2)区块链共识机制的发展轨迹

    3)PBFT---POW -->POS -->DPOS -->Casper-->零识共识机制 算法介绍

    共识?

    1.什么是“共识”&“共识机制”?

    在P2P系统中,互相不信任的节点通过预设机制最终达到数据的一致性称为共识。

    共识机制也就是为了达成这种共识所要采用的方法。共识机制是分布式系统的核心。

    所以,如果说“共识”是区块链的基础,那么“共识机制”就是区块链的灵魂;

    共识机制的算法设计直接决定了区块链的交易速度,业务TPS,不可篡改的强度,以及节点的参与门槛等。另外,共识机制也直接决定了节点间的信任成本有多高。

    2.“共识机制”解决了什么问题?

    在分布式系统中,存在三个问题:

    1)一致性的问题   2)可终止性的问题   3)合法性的问题

    这三个问题最重要也是最基本的问题就是一致性问题。关于一致性问题的解决以及CAP定理的描述,在上一篇文章《区块链的发展走向:一场去中心化与TPS的角力战争》中描述过,请移步~

    可终止性问题,指的是系统必须在有限的时间内给出一致性的结果。

    合法性的问题,指的是这个提案必须是系统内的节点提成,并且是经过系统内部节点经过投票达成一致认可的。这个认可指的是系统内的所有节点对外展现的信息一致,而不对内容负责。

    共识机制解决的是就是如何让系统内的多数节点达成一致的意见,并且最终所有节点均能达到对外展现信息一致。

    一句话归纳下:

    区块链的共识机制解决的是(1)谁有权利的问题(2)作弊的问题

    3.区块链领域共识机制的发展

    发展轨迹如下图所示:

    共识机制

    3.1 PBFT

    1)PBFT共识算法(实用性拜占庭容错机制):PBFT是一种拜占庭将军问题容错的算法,PBFT是一个状态机,要求所有节点共同维护一个状态(需要对状态结果负责),所有节点采取的行动一致。

    PBFT算法的核心理论是n>=3f+1

    其中:N是系统中的总节点数,F是允许出现故障的节点数。换句话说,如果这个系统允许出现F个故障,那么这个系统必须包括N个节点,才能解决故障。

    PS:PBFT适合对性能要求较高的场景,另外严格意义上说PBFT是分布式系统常见的一种共识算法,并不是为区块链而生的。

    PBFT是一种静态共识, 在有限共识节点的情况可以适用。对于私有链和联盟链,如果节点数不大(不大于100),可采用PBFT形成共识,公有链拥有大量且不断动态变化的节点网络,用PBFT效率太低。

    3.2 POW(比特币)

    POW:Proof Of Work工作量证明共识机制,起源于BitCoin才被大家熟知。

    一句话总结:谁完成的工作量越多,谁就有大的概率获得记账权,因此与矿工的算力有关。

    POW的准入门槛为0,任何节点均可参与。

    POW的设计思路

    POW更多的是体现的一种设计思路,大概的思路是这样子的:

    1)POW的参与角色有两个,一个是消息的Sender,一个是消息的Receiver。

    2)消息的Receiver,负责抛出一个计算难题(区块链中是全网广播);

    3)消息的Sender,负责计算这个计算难题,计算之后伴随着消息和计算结果发送给消息的Receiver;

    4)消息的Receiver,负责验证这个计算难题的结果,结果正确,则接受Sender在本次难题结果中打包的消息。

    5)消息的Receiver,负责全网广播本次成功验证结果的Sender,并继续开始第一步。

    这就是典型的计算不对称性。(3.6中将要介绍的零知识证明也是计算不对称性的一种体现),特点是,难题结果的计算过程很复杂,但是难题的结果验证却又很简单。

    PS:在区块链中,Receiver就是区块链网络系统,Sender就是挖矿节点(或者叫做验证者witness)

    POW是区块链领域最早的的共识机制,由中本聪提出的比特币网络中使用的共识机制算法。

    POW并不是为了区块链而诞生的,比特币诞生的时候还没有区块链这个概念。

    关于POW的实际例子以及BestChain的选择规则,在文章《比特币“交易打包”底层原理与区块链“分叉”》中有介绍,请移步。

    关于比特币POW共识机制对挖矿的影响,在文章《什么是“挖矿”?比特币“挖矿”原理解析》《算力为王?矿工(Solo)、矿池如何协作自嗨?》中有介绍,请移步。

    3.3 POS(PeerCoin&blackCoin等)

    POS的起源

    POS:Proof Of Stake权益证明(也叫股权证明)。

    这个有点类似于股份制公司里的股权,谁占的股份大,谁就对公司的决策具有大概率的拍板权。

    POS的准入门槛为0,任何节点均可参与。

    POS的底层原理在之前的文章中没有介绍过,在本文中大概的介绍下。1)起源POS的发展起源于点点币(PeerCoin)。

    POS诞生的爆点是为了解决比特币POW共识机制导致的挖矿行为浪费大量电力资源的问题。

    什么是POS?

    POS总共经历了三个版本。

    Version 1.0中涉及到一个概念CoinAge(币龄)。

    coinAge =coinCount*days,在POS中一个钱包地址就是一个投票个体,币龄的计算就是单个地址上的币的数量乘以币存在这个地址中的天数。

    比如地址A中有500个币,入账至今已经10天,那么这个地址的币龄就是5000。

    币龄会随着币的转移行为而消失,比如从A地址转5000个币到B地址,就算这个钱包地址B仍旧是你的,币龄也消失为 0.

    Version2.0中使用的是币数量(可以理解为使用币数量的变种POS又叫做POP财产证明)。

    Version3.0中使用的是币龄。

    可以这么对比:在POS中的币龄就相当于POW中的工作量,也可以间接代表一种“工作量证明”。。

    下面以Version 1.0举例子:

    《什么是“挖矿”?比特币“挖矿”原理解析》中,介绍过,挖矿的过程就是寻找满足 Hash(block_header) <Target 的目标值。

    在POS中,这个公式变成了  Hash(block_header)< coinAge*Target,所以coinAge越大,计算Target的过程越容易。当获得记账权之后,该节点的币龄被清空,记账后系统会给予你相应“利息”,每被清空365币龄,获得利息为:5000 * 利率 / 365,Peercoin的利率为1%,即0.08个币

    POS存在哪些问题?

    POS并不完美,存在的问题比如:

    1)Token的产生发行问题。

    POW是通过挖矿成功,得到coinbase奖励的方式,将系统中的Token发布出去的。而POS中除了创世区块中有Token之外,没有其他方式产生新的币。这个问题再ERC20标准合约代币出现之后,得以解决。

    2)ToKen的流通问题

    区块链中的Token只有流通起来才有价值。由于币龄的是与地址上的币的存在时间挂钩的,这也就意味着,用户的趋利性会采取大量屯币而不消费的情况。

    这个问题可以通过设置一个时间溢出的阈值,来循环计算天数得以解决。但是,由于区块链无法区分节点的在线时间与离线时间,所以这仍然会导致问题3。

    3)离线挖矿导致的攻击成本降低

    币龄与时间相关,所以意味着节点下线,仍然能参与投票挖矿,这对于区块链生态的安全性和健壮性简直是晴天霹雳。(在线节点越多,区块链的系统安全性越容易得到保证)。

    4)最严重的一个问题(零成本作恶问题Nothing at Stake)

    对于不持有币的人而言,他们本来就没什么收益,所以一些恶意攻击对于他们则是无损失的。

    “ POS不是一个理想的分布式系统共识算法,POS会导致的一个显著问题就是零成本作恶问题,当一个节点对多个主链的多个分叉都进行赞成投票时候,无论最终的结果如何,这个节点都不遭受任何损失,这也就导致了节点投票的随意性和随机性,这会导致POS算法失效,不像POW,节点如果随意投票会导致损失电费“

    ----译自维基百科(https://en.wikipedia.org/wiki/Proof-of-stake)

    当然,也有很多解决方案,比如增加若投票失败,则Token惩罚的措施就是其一。这种方式也就是3.5中以太坊Casper采用的方案。

    3.4 DPOS(BitShare & EOS采用)

    DPOS代理权益证明(Delegate Proof Of Stake)

    打个比方:

    把全网比喻成一个班级,那么会投票竞选出固定数量的班委,组成班委会(班委会成员的权利是完全一模一样的)。每一次新区块的生成都是由班委会中的其中一员进行记账。

    PS:前一阵子闹得火热的EOS超级节点竞选活动就是竞选班委。

    运用DPOS的典型如比特股和EOS(好巧都是BM创立,可见BM对DPOS的热爱程度......)。

    其基本原理在于全网投票选出N个节点代行记账权限(bitShare是101个节点,EOS是21个),代表节点轮流记账,可以选择创造区块或不创造区块。但他们无法改变交易的详情。

    恶意或者迟到的代表节点的行为也会被公之于众,那么网络可能将他们简单快速地投票驱逐出去。被驱逐出去的代表节点将会失去他们记账权限,以及对应的收入。

    3.5 Casper(以太坊采用)

    Casper是POS的一个变种。

    将会在下下篇文章《以太坊Casper分片技术底层原理解析》中做详细介绍,在此只一句话概括:通过增加惩罚机制的方式,解决了Nothing at Stake问题的POS共识机制的一个变种。

    Casper是一种基于保证金的经济激励共识协议。

    协议中的节点,作为“锁定保证金的验证人”,必须先缴纳保证金(这一步叫做锁定保证金,才可以参与出块和共识形成。

    Casper共识协议通过对这些保证金的直接控制来约束验证人的行为。具体来说就是,如果一个验证人作出了任何Casper认为“无效”的事情,他的保证金将被罚没,出块和参与共识的权利也会被取消。

    保证金的引入解决了"nothing at stake",也就是经典POS协议中做坏事的代价很低的问题。现在有了代价,而且被客观证明做错事的验证人将会付出这个代价。

    3.6 ZK-Proof(零知识证明:ZCash采用)

    Zero-Knowledge Proof:它指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。

    证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。

    举个例子:

    假设TT要向ZY证明,拥有房间的钥匙,TT的证明方法有两种:

    1)证明者TT把钥匙给验证者ZY,让ZY去打开房间;

    2)验证者ZY去房间里确定房间里存在的物品,证明者TT向ZY描述下房间里的物品;

    其中第二点就是零知识证明,因为在整个的证明过程中,验证者ZY始终没有看到钥匙的样子。

    ZCash就是使用ZK-Proof完成的匿名支付交易。

    本篇文章大概介绍了一下区块链共识机制的原理和作用,另外介绍了下目前常用的几种共识机制。

    另外今晚23点就是俄罗斯世界杯的揭幕战了,作为铁杆球迷,在为我C加油的同时,我也应景一次,下一篇文章将介绍下本人对《区块链+世界杯的结合》的浅显理解~

    (《以太坊Casper分片技术底层原理解析》顺延)

    今天的堂说区块链到此结束,欢迎diss评论,一起探讨~~同时欢迎关注同名微信公众号。

    我的MetaMask地址:0x63A67cf67a11AE4e9b683E5baAC909cbd6faC54B 你懂得~

    相关文章

      网友评论

        本文标题:区块链的灵魂:共识机制

        本文链接:https://www.haomeiwen.com/subject/kcnvrftx.html