# 区块链的4种共识机制

By [DONTSKY](https://paragraph.com/@pizza.gaia.domains) · 2021-11-28

---

　　区块链作为一种按时间顺序存储数据的数据结构，可支持不同的共识机制。共识机制是区块链技术的重要组件。区块链共识机制的目标是使所有的诚实节点保存一致的区块链视图，同时满足两个性质：即一致性和有效性。

　　区块链的自信任主要体现于分布于区块链中的用户无须信任交易的另一方或任一个中心化的机构，只需要信任区块链协议即可实现交易，而这种自信任的前提是区块链的共识机制(consensus)。共识机制可确保系统中的每一个节点中都会自发、诚实地遵守协议中预先设定的规则，判断每一笔记录的真实性，最终将判断为真的记录记入区块链之中。

　　共识机制是区块链技术的核心, 在基本层面上决定了区块链系统的安全性、可扩展性和分布式特性。

　　4种共识机制

　　我们现在将通过一系列共识机制来解决拜占庭将军问题。

　　工作量证明

　　比特币的创造者中本聪(Satoshi Nakamoto)通过发明工作量证明协议而绕过了这个问题。首先，让我们看一下在拜占庭将军问题下它是如何工作的。

　　假设左侧的军队希望向右侧的军队发送一条名为“星期一进攻”的消息，他们将遵循某些步骤。

　　首先，他们将在原始文本后加上“随机数”。随机数可以是任何随机的十六进制值。之后，他们对带有随机数的文本进行哈希处理并查看结果。假设军队决定只共享消息，这些消息经过哈希处理后得出以5个“0”开头的结果。

　　如果满足哈希条件，它们将向消息发送者将消息的哈希值发送给信使。如果没有，那么他们将继续随机更改随机数的值，直到获得所需的结果。此操作非常繁琐且耗时，并且需要大量的计算能力。

　　如果使者确实被城市俘获，并且消息被篡改，则根据哈希函数属性，哈希值本身将发生巨大变化。如果在右侧的将军看到散列消息不是以所需的“0”开头，那么他们可以简单地取消进攻。

　　但是，这可能存在漏洞。

　　没有哈希函数是100%无冲突的。那么，如果城堡收到该消息，对其进行篡改，然后相应地更改随机数，直到他们获得所需的结果(具有所需的“0”)，该怎么办?这将非常耗时，但仍然有可能。为了解决这个问题，将军们将使用大量数字资源。

　　假设不是左侧一位将军向右侧一位将军发送消息，而是左侧三位将军共同向右侧所有将军发送一条消息。为了做到这一点，他们可以制作自己的消息，然后对累积的消息进行哈希处理，将随机数附加到所得的哈希中，再次对其进行哈希处理。这次他们想要一条以六个“0”开头的消息。

　　显然，这将是非常耗时的，但是这一次，如果使者确实被城堡抓住，那么他们需要花费大量时间来篡改累积消息并为哈希找到相应的随机数，甚至可能需要花费数年时间。因此，如果将军派遣了多个使者，而不是一个使者，那么当城堡在计算过程中途时他们将受到攻击并被摧毁。

　　右侧的将军们很容易做到。他们所要做的就是在消息中附加将要提供给他们的正确随机数，对它们进行哈希处理，然后查看哈希值是否匹配。散列字符串非常容易，这本质上就是工作量证明背后的过程。

　　为适当的哈希目标查找现时的过程应该非常困难且耗时。但是，检查结果以查看是否没有篡改的过程应该非常简单。因此，我们要总结工作量证明协议如何与区块链一起工作。

　　- 矿工解决密码难题以“挖掘”一个区块，以便添加到区块链中。此过程需要大量的能量和计算量。密码难题的设计方式使它变得很费力，并给系统增加了负担。

　　- 当矿工解决密码难题时，他们将其区块提交给网络进行验证。验证区块是否属于链是一个非常简单的过程。

　　在解决拜占庭将军问题时，工作量证明机制无疑回答了很多问题，但工作量证明仍存在一些问题：

　　- 首先，工作量证明是一个极其低效的过程，因为它消耗了大量的能量和时间;

　　- 其次，能够负担得起更快、更强大的ASICs的人员和组织通常比其他人和组织具有更好的挖掘机会;

　　- 最后，比特币的分散程度不如预期。

　　让我们看一下哈希率分布图：

　　我们发现，仅5个采矿池就分布了约65%的哈希率!

　　从理论上讲，这些大型矿池可以相互协作，并在比特币网络上发起51%攻击的交易。

　　使用工作量证明协议的典型公链：比特币区块链

　　权益证明

　　以太坊即将计划从工作量证明(POW)转向权益证明(POS)。权益证明将使整个采矿过程变为虚拟，并用验证器代替采矿者。这是该过程的工作方式：

　　- 验证者必须锁定部分数字货币作为权益证明。

　　- 之后，他们将开始验证块。即：当他们发现自己认为可以添加到链中的区块时，将通过在其上下注来对其进行验证。

　　- 如果添加了区块，则验证者将获得与其下注成比例的奖励。

　　事实证明，POS协议比POW更加资源友好。在POW中，可能需要浪费大量资源才能与该协议一起使用，从根本上来说，这是为了浪费资源而浪费的资源。也是权益证明的最大障碍。

　　以太坊开发人员最终计划采用权益证明。但是，在这样做之前，他们必须解决权益证明(POS)的最大缺陷之一。

　　我们来考虑一下这种情况：

　　假设我们遇到如上述的情况：有一条主蓝链和一条红链，它们从主链本身分叉出来。那么有什么方法可以阻止恶意矿工在红色区块上进行挖掘并强制使用硬分叉?

　　在工作量证明(POW)系统中，可以减轻这种风险。

　　假设恶意矿工爱丽丝(Alice)想在红色链条上开采。即使她将所有的哈希算力都献给了它，也不会再有其他矿工加入她的新链条中。其他人仍将继续在蓝链上进行开采，因为在较长的链上进行开采更有利可图且无风险。

　　但请记住，POW在资源方面非常昂贵。

　　对于矿工而言，在一块将要被网络拒绝的区块上浪费如此多的资源是没有意义的。因此，由于攻击者必须浪费大量金钱，因此在工作量证明系统中避免了硬分叉。

　　但是，使用POS时情况看起来有些不同。

　　如果您是验证人，那么您只需将钱放入红色链和蓝色链中，根本不用担心会受到打击。无论发生什么情况，尽管您的行为可能多么恶意，但您始终会获胜，不会有任何损失。

　　这就是所谓的“无利害关系”问题。

　　为了整合POS共识系统，加密货币需要解决这个问题，以太坊将通过调整其Casper协议以一种非常有趣的方式来实现这一目标。

　　Casper是以太坊选择使用的POS协议。尽管整个团队都在忙于创建它，但弗拉德·扎姆菲尔(Vlad Zamfir)通常被认为是“卡斯珀面孔”。

　　那么，Casper协议与其他权益证明协议有何不同?卡斯珀实施一种程序可以惩罚所有恶意因素。这就是Casper协议下的POS工作方式：

　　- 首先，验证者将质押部分以太币作为权益证明。

　　- 之后，他们将开始验证区块。即：当他们发现自己认为可以添加到链中的区块时，将通过在其上下注来对其进行验证。

　　- 如果添加了区块，则验证者将获得与其下注成比例的奖励。

　　- 但是，如果验证者以恶意的方式行事并且试图做“无利害关系”，他们将立即受到谴责，其质押的所有以太币将被削减。

　　正因为Casper协议被设计为在不信任的系统中工作，并且具有更高的拜占庭容错能力。任何以恶意/拜占庭方式行事的人都会立即受到惩罚，被砍掉部分权益。这与大多数其他POS协议不同。恶意因素会有所损失，因此它不可能有任何危险。如果以太坊计划扩大规模，那么实施Casper协议和权益证明至关重要。

　　使用权益证明协议的典型代表：以太坊区块链

　　**委托权益证明**

　　现在，我们来介绍一种有趣的权益证明形式，称为DPOS或委托权益证明。EOS正在使用这种共识机制来扩展到每秒数百万个事务。EOS区块链上任何持有令牌的人都可以通过持续投票系统选择区块生产者。任何人都可以参加区块生产者选举，他们将有机会生产相对于其他所有生产者的总票数成比例的区块。

　　**它是如何工作的?**

　　- 每轮开始时，选择21个区块生产者。系统自动选择前20名，而选择第21名则与他们相对于其他生产者的票数成正比。

　　- 然后，使用区块时间得出的伪随机数对生产者进行混洗。这样做是为了确保与所有其他生产者的平衡连接。

　　- 为确保正常的区块生产并保持区块时间为3秒，生产者因未参与而受到惩罚，将其从考虑范围中删除。生产者必须每24小时至少生产一个块。

　　DPOS系统不会遇到麻烦，因为生产者必须竞争合作，而不是寻找区块。如果发生分叉，则共识会自动切换到最长链。

　　如何确认DPOS中的交易?

　　DPOS区块链通常具有100%的区块生产者参与。通常在广播1.5秒钟之内就有99.9%的节点数确认交易。为了保证交易的绝对有效性，节点仅需等待15/21(即2/3多数)生产者达成共识。

　　那么，万一因疏忽或恶意企图而导致分叉，将会发生什么呢?

　　默认情况下，所有节点都不会切换到不包含15/21生产者未最终确定的任何区块的分支。无论链长如何，这都是正确的。每个区块都必须获得15/21批准才能被视为链的一部分。

　　由于区块创建时间短，因此可以在9秒内警告节点，它们是位于主链还是次链中，这样的原因很简单。请记住，每个块之间经过的平均时间为3秒。

　　- 如果节点错过2个连续的区块，则它们有95%的机会处于少数分支。

　　- 如果一个节点错过了3个区块，则它们有99%的机会位于少数链上。

　　什么是TAPOS?

　　作为权益证明或TAPOS的交易是EOS软件的功能。系统中的每个事务都必须具有最近区块头的哈希值。这将执行以下操作：

　　- 防止不同链上的交易重播。

　　- 向网络发送信号，告知用户及其利益在特定分支上。

　　这样可以防止验证者对其他链进行恶意操作，而且将拥有一个快速有效的权益证明协议。但这有什么陷阱吗?根据以太坊联合创始人Vitalik Buterin介绍，DPOS系统无法进行协调博弈。

　　**什么是协调博弈论?**

　　考虑以下矩阵：

　　在此矩阵中，有两个纳什均衡：(A，A)和(B，B)，偏离任何一种状态都不会使他们受益。博弈论的核心观点是，如何说服人们从(A，A)转到(B，B)?如果只涉及一小群人，则相对简单，只需通过电话或电子邮件进行协调。但是，当我们涉及一大群人时，这种情况发生了变化。

　　囚徒困境和协调问题之间的根本区别在于，在囚徒困境中，两个参与者都必须选择(B，B)，因为尽管(A，A)在道德上是一个更好的解决方案，但这是收益最大的选择。在协调问题中，这与道德或收益无关，而与一个人从一种状态过渡到另一种状态的动机有关。为什么一大群人应该改变他们做事的方式?

　　当小组中只有少数改变状态而多数没有改变时，协调博弈就会失败，反之，当小组中的大多数改变状态时，协调博弈就会成功。让我们来看一个例子。

　　假设我们要将语言更改为基于符号的语言。例如：原始陈述：“给我您的电话号码?”新陈述：“#?”

　　如果您仅使用这种语言说话，那将是失败的，因为大多数人不会理解您在说什么，并且您会被谈话所回避，也就是您的收益非常低，并且您没有改变的动力。

　　但是，如果您的社群大多数人改用这种语言并仅使用它，则您将不得不更改语言，否则您将永远无法适应。现在，加入该组织的动机非常强烈。

　　DPOS系统可以利用协调博弈理论来弥补其缺点。在某些情况下，区块生产者可能会偏爱某些情况，而这种情况与其余节点不符。

　　假设主节点希望将链从状态A转换为状态B，需要帮助整个链与它们一起完成相同的转换可能是一项艰巨的任务，尤其是在其他节点与状态B相对的情况下。只有时间会证明EOS是否可以正确地集成DPOS。

　　使用委托权益证明协议的典型代表：EOS区块链

　　授权拜占庭容错算法

　　现在我们来谈谈NEO的共识机制选择。

　　想象有一个国家“ Blockgeeks”，这个国家有很多公民。这些公民中的每一个都会选出一个代表来代表他们并使他们高兴。这些代表的职责是通过法律，使公民感到高兴，如果他们不擅长自己的工作，则公民可以在下一次简单地投票给另一位代表。

　　那么，代表们如何通过法律?

　　一位代表被随机选为议长。议长研究公民的所有要求并制定法律。然后，他们计算这些法律的“幸福因子”，以查看该数字是否足以满足公民的需求。他们将其传递给代表们。然后，代表们分别检查议长的计算。如果议长的数字与代表们的数字相符，则表示同意;否则，则表示不赞成。66%的代表需要批准才能通过法律。如果没有被大多数人认可，则选择新的领导者，然后该过程再次开始。

　　让我们看下这种共识决策模式在区块链中的应用。

　　公民是拥有NEO令牌(又称普通节点)的人。代表是簿记节点。为了成为簿记节点，需要满足一定的条件：拥有专用设备、专用的互联网连接和一定数量的GAS(根据basiccrypto的文章，为1000)。

　　- “公民的需求”基本上是代币持有人进行的各种交易。

　　- “法律”是要添加到区区块链的当前区块。

　　- “幸福因子”是当前区块的哈希值。

　　现在，在两种情况下，其中一个参与者可能以恶意方式行事。让我们来看看：

　　**案例1：议长是恶意的**

　　在这种情况下，议长已向两个代表发送了恶意消息B，并向一个代表发送了准确消息。由于多数规则，可以轻松缓解这种情况。两位代表将看到他们的哈希值与议长的哈希值不匹配，而一位代表将看到他们的哈希值完美匹配。但是，三分之二的人会拒绝该提案，并且无法达成共识。此后议长将被废除，重选议长。

　　**情况2：一名代表是恶意的**

　　议长向所有代表发送了正确的消息，但是其中一位代表决定以恶意的方式行事，并声明他的数字与议长的数字不符。

　　但是，由于3位代表中有2位是非恶意的，因此他们将批准该法律，因为已达成66%的共识，该法律将获得通过。

　　可以看出，dBFT提供了一种非常有趣的共识机制形式。

　　使用授权拜占庭容错算法的典型代表：NEO区块链

　　总结

　　以上这些是在公链中使用最常见的4种共识机制。但是，还有更多的共识机制以提供选择。他们是：

　　- 能力证明机制 (proof of capacity)

　　- 消逝时间证明 (proof of elapsed time)

　　- 融入知识证明的工作量证明 (entangled proof of work and knowledge, EWoK)

　　- 融入知识证明的工作量证明 (entangled proof of work and knowledge, EWoK)

　　虽然工作量证明和权益证明无疑是最受欢迎的选择，但是时不时会有更新的共识机制出现。没有“完美”的共识机制，而且有可能永远不会出现，但未来的新公链往往是伴随新的共识协议而诞生的。

　　本期小结

　　区块链共识机制是区块链技术的核心, 未来的发展趋势主要有以下几点:

　　安全层面：设计并完善可证明安全的区块链共识机制，解决如POS机制面临的安全威胁; 将经典分布式一致性算法与区块链技术结合, 利用委员会实现强一致性, 解决委员会重配置的安全问题;

　　扩容层面：利用分片技术, 通过计算分片、通信分片和存储分片, 实现交易处理的可扩展性, 解决跨片交易问题; 利用 DAG 技术, 采用并行区块的架构, 使得同一时间内区块链能够容纳更多的交易;

　　启动层面：通过安全多方计算等密码技术在非可信环境下完成协议自启动, 解决区块链协议的初始化问题; 通过对区块链历史数据的合理裁剪, 使新加入节点能够快速获取当前区块链状态, 参与共识运行, 解决新加入节点的启动问题;

　　激励层面：设计合理可行的奖励和惩罚机制, 以理性用户作为出发点, 激励用户以诚实行为参与共识机制的运行和维护; 合理惩罚恶意用户, 同时给予举报者一定的奖励。

---

*Originally published on [DONTSKY](https://paragraph.com/@pizza.gaia.domains/4)*
