区块链共识机制概述

共识机制概念

分布式计算和靠群异构系统的一个基本目标是在部分错误的进程下,保证系统的可靠性。共识问题本质上是一个一致性问题。如果只是通过在组播的过程简单地进行投票,在现实中存在以下需要考虑的点:

  • 节点之间的网络通信是不可靠的,包括任意延迟中断和内容故障
  • 节点的处理可能是错误的,甚至节点自身随时可能宕机
  • 同步调用会让和系统失去可扩展性
  • 存在恶意节点要故意破坏系统

区块链中的链式数据结构仅用于形成链中的元素,如何形成这样的存储结构,如何保证其可信度,如何确保分布式存储的一致性,都取决于共识机制。区块链共识机制的目标是为了让普通节点形成一致的区块链结构,需要满足以下属性:

  • 一致性,所有诚实节点保存的区块链的前缀部分完全相同
  • 有效性,由某诚实节点发布的信息终将被其他所有节点记录在自己的区块链中

共识机制介绍

Paxos 和 Raft

Paxos算法将节点分为三种类型

  • proposer:提交建议和等待批准的人,它通常的角色是客户
  • accepter:负责对提案进行表决,服务器端的普遍角色
  • learner:被告知协商的结果,并与之同意,不参与表决过程,可能为客户端或者服务器

基本过程包括申请人提出建议,当超过一半的支持时,将结果发送给所有人确认。如果Paxis可以保证系统达成共识,必须要有超过1/2的正常节点存在

Raft算法是Paxos算法的简化实现,它包括3个角色:领导者、候选人和跟随者。基本过程是:

  • 领导人选举,每一位候选人都会在某一段时间内随机提出一个选举方案,拥有最新阶段的多数选票将被选为领导人
  • 同步log。当选的领导者会找到系统中日志的最新记录,并强制所有的跟随者刷新到这个记录

BFT 和 PBFT、Ripple

拜占庭问题中,如果总节点数为N,将军数为F,当N≥3F+1时,拜占庭问题才有解决办法,也就是BTF算法。

  • 证明:假设有f个叛徒和g个忠诚者,叛徒故意给了错误的结果或者故意不做出回应,而大多数忠诚者由于占多数就可以得到正确的结果,当f个叛徒给出恶意建议,并有g的离线的忠诚者时,g-f个忠诚者无法分辨正确和错误。如果要确保系统仍然能正常工作,需要保证g-f>f,即g>2f,,所以整体系统大小要大于3f

PBFT是第一个广泛应用的BFT算法,只要系统中2/3个节点正常工作就可以保证一致性。该算法由3个阶段组成:准备之前,准备和提交。这类机制的特点是很快出快,以至于没有时间产生分叉,但则这类机制要求在一个封闭的节点集合中两两节点进行通信,因此比较适合节点数量不多的联盟链和私有链,联盟链多采用技术成熟的PBFT机制及其相应的变种RAFT、DBFT和FBFT等来达成共识。
Ripple协议共识算法将失效节点的数量控制在1/5内,可在秒级达成一致性。

Proof of work

即工作量证明。通过完成一定的目标来换取打包节点的权力。PoW竞争的是算力,挖矿概率与计算力正相关。比特币目前采用了该机制来实现共识。比特币的区块头包含6部分,分别是版本号、前一个区块哈希值,Merkle根,时间戳、难度目标nouce和随机数,参与者需要寻找随机数使区块头哈希值小于或等于难度目标。截至目前,PoW机制或多或少地存在于多种数字货币中

Proof of DDos

  • 该共识机制旨在奖励用户使用他们的电脑参与DDoS攻击,参与DDoS攻击会给矿工带来数字货币,矿工可以将货币转换为比特币或者其他的法定货币,则可以认为是PoW的另一种形式。
  • 一种工作量计算方式是依据建立的TLS链接,将响应作为连接证据。在现代版本的TLS中,服务器在握手过程中签署客户提供的参数,并在连接的密钥交换中使用服务器提供的值,这是客户向让人证明他已与服务器通信的方式之一。此外,服务器返回的签名值对于客户端来说是不可预知且随机分布的。

Proof of burn

PoB通过将货币转移到不可逆的地址以销毁货币,而不是投资到计算硬件上,这种转移也叫做“燃烧”。当货币被转移到某个很难找到的地址,基于随机选择程序的系统上,相当于获取了挖矿的终身权力。同时,燃烧的货币数量和被选中挖下一块币的概率成正比,用户可能愿意燃烧更多数据货币以换取更多的挖矿机会。

Proof of stake

PoS竞争的是资产,节点越多挖掘块的概率就越大,PoS合格区块的评判标准可以表述为F(timestamp)<Target*Balance
与PoW相比,公式中的难度值成为时间戳,在等式的右边还有作为因子的平衡因素。因此整体目标值受平衡值和时间的影响。代表性的平衡因素之一是“币龄”,持币时间越久平衡值越大。出块的时间必须在一定的范围内,过早或过晚的块不会被其他节点所接受。由于时间戳有限,挖掘块的成功率主要与平衡因子有关。在此机制下,攻击者若想成功攻击主链将消耗大量的资金。在PoS思想出现后,有多种基于此协议进行的二次开发应用

PoSV

  • PoSV意味着权利和频率,在PoS机制中,“币龄”受时间的线性影响,因此会出现囤币的现象。
  • 将币龄的影响从时间线性转换为指数衰减函数,使币龄的增长率趋于0,在一定程度上解决了PoS囤币的问题。

DPoS

  • DPoS即为授权股权证明,顾名思义,DPoS类似于股份制公司,各个节点首先投票选举出社区可信度较高的来作为达成共识过程中的决策者,每个节点支持的票数由其持有的货币数量决定。
  • 可信节点之间具有相同的权力。
  • 普通节点可以选举或者驱逐不合格的可信节点,可信节点的数量有限制。

LPoS

  • LPoS意为租赁权益证明。在传统的PoS中,持有少量余额的持有人不太可能会投注一个块,网络中有很多节点多年才产生一个块。由于参与者越多网络的安全性越好,因此激励那些较小的持有者参与是非常重要的。
  • LPoS允许持有者将其余额租赁给节点来实现这一目标。租赁资金完全由持有人控制,随时可以转移和消耗,收到的奖励与承租人按照比例分摊。

PoA

  • POA机制即活跃度证明。PoA机制奖励线上的活跃节点,该机制的矿工开采过程与PoW机制类似,当矿工发现新块时,随机选择n个活动节点来广播发现的新块,n-1个活跃节点验证新发现的数据块并对其进行签名,第n个活跃节点处理验证区块和签名外,还会封装并广播区块,矿工和n个活跃节点将收取到奖励。
  • 如果n个节点中存在不活动的节点,它将不能签署该块,因此无法收到奖励。PoA机制可以有效地解决囤积问题,并在点对点的网络中有非常重要的应用。

Casper

  • Casper机制以链为单位。典型场景:如果提交了两个一样序号的交易,将失去所有的保证金。一定的惩罚机制让通过恶意攻击进行非法交易的节点面临巨大的赔钱风险。
  • 本协议下的验证器主要有两个活动:出块过程和PoS机制类似,投注过程比较复杂,目前采用模拟PBFT的验证策略。

Proof of importance

PoI就是重要性证明,它只需要证明自己的重要性,才能获得出块权从而得到奖励。此外,在重要性的证明下,货币资产不是决定重要性的主要原因,它更关心的是交易量、活动量及交易双方的关系,这些特点可以消除PoS系统中的其他弊端。

Proof of Luck

  • 算法需要支持SGX的CPU
  • 算法分为两个函数:PoLRound和PoLMine,其中所有参与者都运行这两个函数,得到以同一区块为祖先的不同区块。PoLMine会选择一个介于0到1之间的随机数字,最大数字意味着运气最好,将做持有的区块作为被用作区块链的下一个块
  • 由于在SGX环境中发生随机数选择,所以不能伪造它,但问题是算法依赖于底层CPU,需要把信任交给CPU厂商,这与区块链去中心化的思想相悖

Proof of contribution

PoC机制将用户的贡献度从以往的算力、交易状态分解为更多的维度,参与者的贡献可以是硬盘容量、带宽、功率、数据等资源。在PoC机制下,尽管一些参与者的贡献可能集中在长尾效应曲线的头部,而贡献力量分布在正态曲线的尾部是非常小的 ,但这部分人数占据整个网络的参与者多数。

为了保证参与者的利益,随着时间的推移,这部分小贡献比例逐渐增加,形成了上述正态分布曲线的“长尾”,贡献的累积将带来充足的收入,而大贡献者作为制衡的角色,以实现公平的状态

Tendermint

Tendermint基于圆形投票机制,一个投票过程需要3个处理步骤

  • 验证器提出一个块
  • 发送提交意图
  • 提交一个新块


在这个圆形投票机制中,原子广播的安全状态可以被复制,Tendermint责任层令此可被追踪。

  • Tendermint共识算法首先让验证人员保持区块链的完整副本,并利用该公共密钥来识别被验证的身份,在每个新块的高度上,轮流提出块,每一轮投票只需要一个验证器,用相应的私钥进行验证签名。一旦出现错误,负责验证的人很容易被找到。
  • 然后其余的验证者将需要对每一个提案进行投票,投票用的是个人的私钥签名,这就构成了一个圆。
  • 然而,由于网络的异步需要,可能会提交一个新的块数轮

共识机制的分析与对比

评判机制

鉴于共识机制的不同特点,可以在以下几个方面进评估共识机制的优劣

  • 安全性
    • 从系统整体对外的角度:防止二次支付、私自开采攻击,对错误的宽容度
    • 系统内部角度:网络通信延迟、阻碍情况下的共识、DoS攻击的防护、身份辨识、节点数据审查与过滤
  • 扩展性
    • 支持网络节点扩展
    • 支持确认次数增加
    • 支持通信负载和运行负载的提升
  • 性能
    • 系统处理每秒响应的数量
  • 资源
    • 对交易处理达成一致所消耗的计算机性能资源

各共识机制的不足

  • BFT
    • 安全性。BFT的安全性取决于系统中无效节点数的比例,无法防御女巫攻击
    • 可拓展性。BFT机制在一轮共识中对主节点的依赖性太强,在节点较多的区块链系统上拓展性比较差。
  • PoW
    • 严重的效率问题。每个区块产生需要消耗时间,同时新产生的区块需要后续区块的确认才能保证有效,这需要更长的时间
    • 安全性。PoW机制会导致矿场、矿机的疯狂涌入,影响系统的算力分配。目前,比特币算力排名前五的矿池总算力所占比例已过半,对系统的安全性和公平性造成极大的威胁
    • 资源浪费。不断地进行无意义的计算浪费大量的计算资源、人力资源和电力资源。
  • PoS
    • 初币分发问题。使用PoW机制分发依旧存在其弊端,而使用IPO分发缺乏信任基础,容易滋生贸易犯罪
    • 缺乏案例。目前基于PoS的共识机制有很多应用,但还没有完全基于PoS的区块链技术
    • 安全性。PoS机制在高延迟的网络下很容易产生分叉,影响一致性。如果恶意节点在这种情况下发起攻击,它将通过控制网络进行通信,形成脑裂
    • 公平性。PoS机制本质上是PoW机制的延伸,需要代币的驱动,无法避免中心化的趋势

展望

  • 在达成一致性的前提下,平衡效率、扩展性和资源是共识机制的痛点。在此基础上如何因地制宜结合共识机制,设计最佳的协商机制,是未来研究的主要方向
  • 越开放的系统达成共识的代价越高。
  • 可以尝试将不同的共识机制相结合,扬长避短,形成一种新的共识机制,如PoW+PoS,PoS+BFT
  • 共识机制的发展离不开加密算法的发展和底层存储技术的改进,如零知识证明、环签名、闪电网络、DAG、HashGraph。新兴技术与共识机制结合,是未来的发展趋势
  • 下一个创新是降低复杂性并提高一致性适应力