浅谈区块链共识协议

Posted by Angkee on February 27, 2018

区块链最大的特点就是去中心化,是一个开放的分布式的网络系统,系统的安全运行面临着诸多问题,比如传输信息损坏、丢失、重复发送、网络延迟,网络节点的随时退出、随时加入,甚至会丢弃消息、伪造消息、停止工作等等。

但如何保证节点的数据完全相同,并且能够对某个提案(Proposal)达成一致是分布式系统正常工作的核心问题呢?共识算法就是用来保证分布式系统一致性的解决方案。

目前加密数据货币所用到的共识算法分别有,工作量证明(PoW)、权益证明(PoS)和委托权益证明(DPoS)。

工作量证明 (PoW)

工作量证明(Proof of work,POW),简单来理解,就是一份证明,证明你做过一定量的工作。这一概念最早由 Cynthia Dwork 和 Moni Naor 于 1993 年提出,它能够帮助分布式系统处理拜占庭容错问题。

工作量证明就是比特币的共识算法,比特币的网络节点争相完成一种基于加密哈希算法的数学难题,来获得当前区块的记账权,这个过程不仅可以获得新区块的新币奖励,还有区块中所含交易的交易费,这也就是我们俗称的“挖矿”。

工作量证明的最大特点就是,分布式系统中的节点必须解决一个,一般难度但是可行(feasible)的问题,但是验证问题答案的过程却非常容易,也就是一个不容易解答且可以动态调整解答难度,并容易验证的问题。

我们来剖析一下优缺点:

优点:

  1. 这算是比较去中心协议,全民参与,只要贡献算力,都可以成为挖矿节点;
  2. 分布式的点对点网络,只要成为节点,就能为这个网络提供带宽、存储空间和计算能力,使这个网络系统更健壮、更安全;
  3. 实行欺骗或破坏的难度很大,必须控制 51% 以上的节点。

缺点:

  1. 算力的消耗、电力的浪费,目前平均没挖出 1 个比特币需要消耗约 7000 美元;
  2. 算力的集中化;
  3. 出块效率较低,比如比特币的 TPS(每秒交易处理量)为 7 笔左右;
  4. 会产生区块链分叉问题;
  5. 如果不考虑成本,或量子计算机的出现,能控制 51% 以上的节点,就会对整个网络系统造成安全隐患;

权益证明(PoS)

权益证明(Proof of Stake,PoS),是一个根据持有数字货币的量和时间,进行利息发放、新区块产生的机制。

PoS 最早是由化名为 Sunny King 的极客,在 2012 年 8 月发布的 PPC(点点币)首先实现,设计理念就是为了根本上摆脱了工作量证明的算力浪费。

在权益证明 POS 模式下,会引申出一个概念,叫“币天”(Coin Day),也被叫做“币龄”(Coin Age),举个例子来解释一下:

某个币每天产生 1 币天,假如拥有 100 个币,持有 30 天,此时的币天数量就位 3000,此时如果发现了一个新 PoS 区块,币天就会清零,每次清空币天都会获得一定量的利息,这就叫做币天,简单来理解就是利息。

和 PoW 想比,PoS 的优点主要有:

  1. 避免了算力消耗,电力资源的浪费;
  2. 出块效率相对更高。

而缺点也比较明显:

  1. 因为是靠持有币的数量来产生新的区块,这种模式很容易产生马太效应,新区块的产生总是被持有更多币数量的节点掌控;
  2. 如果持有 51% 以上数量的币,也能对整个网络造成安全隐患。

委托权益证明(DPoS)

委托权益证明 (Delegated Proof-of-Stake,DPoS),也被称为委托代理人机制。

DPoS 是对权益证明 PoS 优化方案,权益证明 PoS 机制使用一个确定性算法随机选择一个股东,来生成下一个区块,此算法,股东持有币的数量多少,决定了是否被选中的可能性,这样的系统并非安全不可逆,因为区块的产生权始终掌握在账户余额最多的少数节点手中。

为了解决这个问题,每个持币节点可以将其投票权授予一位代表,获取票数最多的前 100 名代表,按照既定时间轮流产生区块,DPoS 模式可以在大多数节点发生故障时继续工作,持币节点可以通过投票来更换发生故障的节点,来确保整个网络的正常运行。

相对于工作量证明 PoW 和 权益证明 PoS 机制,DPoS 模式更安全、更可靠,出块效率最高,而且在 BitShares 成功运行三年以及在 Steem 运行一年期间,可想此 DPoS 机制的安全稳健。

再来剖析一下此模式的优点:

  1. 相对更安全、更可靠
  2. 出块效率更高
  3. 更少数的分叉
  4. 更低的网络运行成本

缺点:

  1. 投票积极性不高,绝大多数持股人(90%以上)从未参与投票。这是因为投票需要时间、精力及技能,而这恰恰是大多数投资者所缺乏的
  2. 因为没有惩罚机制,而投票选举制度并不能及时有效地阻止一些破坏节点的出现,所以对于坏节点的处理存在诸多困难

除此之外还有,拜占庭容错算法(PBFT)、dBFT、Paxos 、Raft 等等。

不论是哪一种共识协议不算是十分完美的,都会有不同的应用场景下,都会相对的优缺点。