共识机制在区块链系统中起到决定谁负责生成新区块的作用。
一、什么是共识?
在理解共识的概念之前,先简单粗爆地假设——咱们村有100人,现在要投票选举谁当村长,如果100人都亲自到场投出自己的一票,那参与度是100%;如果这100人选出了10个代表去投票,参与度则只有10%。这两种投票,哪一种投票更能代表民意呢?毫无疑问是前者,因为参与度更高;相反,后者选出了10位代表去投票,参与度低,难免以偏盖全。通过这个假设,我们可以对什么是参与度有一个简单粗暴的理解。
共识(Consensus)是一切交易的基础,达成共识越分散(参与度越高),其效率就越低,但满意度越高,因此也越稳定;相反,达成共识越集中(参与度越低),效率越高,也越容易出现独裁和腐败现象。
区块链技术的伟大之处在于去中心化和去信任(或降低信用成本),如何在一个完全陌生的网络环境里,通过代码撮合交易?言外之意,这些代码究竟发挥了何种神奇的魔力,让买卖双方产生信任呢?
答案就是共识机制。
共识机制
区块链系统的核心是有系统中节点竞争记账,这个竞争的过程称为共识机制,区块链的底层有四部分构成,一个分布式的数据库用来存储以往和将来的交易数据,密码学的公私密钥体系用来确认交易双方的身份,P2P网络用来广播和蔓延各类消息(如节点加入消息,节点失效消息,得到挖矿数据的消息)和 用来决定节点记账权利的共识机制。
共识机制在区块链中扮演着核心的地位,共识机制决定了谁有记账的权利,以及记账权利的选择过程和理由。不用的虚拟货币采用共识机制不同,常见的共识机制如POW,POS,DPOS 拜占庭容错等。现梳理如下:
目前区块链的共识机制大致可以分为PoW(工作量证明)、PoS(权益证明)、DPoS(股份授权证明)以及分布式一致性算法几类。
(一):工作量证明PoW
POW(Proof of Work),即工作量证明机制。整个系统中每个节点为整个系统提供计算能力(简称算力),通过一个竞争机制,让计算工作完成最出色的节点获得系统的奖励,也就是完成新生成货币的分配。区块链是一个持续增长的顺序块组成的,每个块包含了头文件和一系列的交易信TXi,其中头文件中保护了timestamp Ti ,上一个块的索引Hi-1,和nounce Ni-1,区块链是密码上的安全,对于每一轮只要找到相应的HASG的碰撞就算成功,HASG的碰撞的意思可以了解为hash值的前多少位相同,我们知道何难找到两个hash一模一样的文件,但是我们可以找到前几位相同的,我们将一个完整的挖矿过程整理如下:
其中Di是难度系数,可以认为是前多少位的碰撞。挖矿的过程就是在不停的尝试找Ni的过程。下面我们给出一个模拟挖矿的例子。测试环境说明:
运行如下脚本:
对结果进行排序,找到前9位对撞成功的n的值.
实验结果如下:
虽然只是模拟实验,但是完整的反映了POW的运作原理。
(二):权益证明PoS
POS(Proof of Stake)即股权证明。顾名思义,指的是直接根据所持有的份额来达成共识机制。其目的在于让链上所谓的“股权持有者”来代替POW里的矿工,这本质上的共识过程是以“股权所有”代替“挖矿”过程。
在PoW机制中,由于想要找到符合条件的 nonce.nonce往往需要花费大量的电力和时间成本,因此,为了使每个Block更快被生成,PoS机制去掉了穷举 noncenonce这一过程,继而采用以下更快速的算法:
SHA256(SHA256(Bprev),A,t)≤balance(A)m
H 某个哈希函数
t 为 UTC 时间戳
Bprev指的是上一个区块
balance(A)代表账户A的账户的余额
唯一可以不断调整的参数是t,等式右边m是某个固定的实数,因此,当balance(A)越大,找到合理t的概率越大,网络中,普遍对于t的范围有所限制,如可以尝试的时间戳不能超过标准时间戳1小时,也就说,一个节点可以尝试 7200次,来找到一个符合条件的t,如果找不到即可放弃。因此,在PoS中,一个账户的余额越多,在同等算力下,就越容易发现下一个区块。
但是它和POW机制一样解决问题的思想也导致了它与POW拥有一样的缺点,也是牺牲了一部分的共识(同样分叉),而且需要等待多个确认。
优点:对节点性能要求低,达成共识时间短(网络环境好的话可实现毫秒级);
缺点:没有最终一致性
PoW与PoS流程对比图:
(三):股份授权证明DPos:
是基于POS衍生出的更专业的解决方案,股份授权证明类似于董事会投票,假设某个区块链系统的世界里有10万人,现在这10万人投票选出了4位股东作为代表来行驶记账权,这4位董事分别是A、B、C、D,在记账过程中,按顺序每位董事有两秒钟的时间来记账,如果在规定的时间内记账失败,则直接把权限交给下一位董事,这样原本10万人参与记账竞争的游戏,现在变成了4人。
这样做的优点是大幅缩减了参与验证和记账的数量,形成共识几乎可以达到秒级,缺点是固定数量的董事作为记账候选人,与去中心化的理念相违背,董事数量太少,参与度太低,也缺乏一定的代表性。
对比这三种最常用的共识算法,不难发现各有利弊,它们的诞生都围绕着一个核心——如何更加公平、公正、透明、轻量(不过多消耗资源)、高效(更快)地达成共识,挑选出记账的人(节点)。
PoS与DPoS对比图:
结论:
PoW采用简单粗暴但极为有效的方式,通过节点首先自证其资质后才进行广播的方式,大幅度减少了网络间的通讯压力,但与之带来的问题则在于自证资质的计算资源消耗极大。
PoS采用与传统分布式一致性验证类似的机制,通过代币数量(或存储容量等指标)作为权重依据,使用某种分布式算法选举出每次的检查点节点。这种机制的好处在于没有消耗计算资源的自证资质过程,但是带来的问题在于每次选举时在大量节点的网络中对网络压力极大。
DPoS作为PoS的变形,通过缩小选举节点的数量以减少网络压力,是一种典型的分治策略:将所有节点分为领导者与跟随者,只有领导者之间达成共识后才会通知跟随者。该机制能够在不增加计算资源的前提下有效减少网络压力,在优秀的软件实现中将会具有较强的应用价值。
在区块链的共识机制中,其本质与分布式数据库的一致性算法存在极多的相似之处。拜占庭问题的引入仅仅从算法和选举节点数量上对网络结构做出一些调整,但是并不从本质上改变分布式系统一致性选举的机制。
作者:区块链安全档案;本文仅代表作者观点,不代表链得得官方立场。