从分布式共识算法到区块链共识机制

分布式共识可确保分布式系统中节点之间的数据共识或就提案达成协议。使用分布式系统(例如HDFSMQZooKeeperKafkaRedisElasticsearch)的任何技术人员都可能非常熟悉此主题。随着分布式网络的快速发展和日益复杂,开发人员一直在探索可能的解决方案,以在理论和实践上解决这一持续存在的问题。

接下来,随着区块链技术的兴起,特别是开放网络中的公共区块链和许可网络中的私有区块链,这一共识问题再次受到了广泛关注,需要从新的角度加以考虑。

在本文中,我们将研究分布式共识和相应共识算法的问题和挑战。我们还将简要分析这些共识算法的适用性和局限性,并讨论这些传统共识算法与新区块链技术的结合。随后,本文从人类可靠性的角度着眼于公共区块链领域的共识算法和机制。本文还考虑了传统计算机科学中的分布式共识算法与区块链中共识机制之间的关联,并展示了如何在公共区块链领域中看到新的共识思想。

分布式共识的问题与挑战

为了完全理解分布式共识,我们需要首先了解分布式网络的功能。分布式网络的主要特征是什么?或分布式网络涉及哪些可能的问题?让我们在本文的这一部分中研究其中的一些问题。

崩盘故障

首先,让我们考虑现金缺陷。分布式网络中的崩盘故障通常可能与以下问题之一有关:

  • 节点或副本可能会随时停机,可能会在短时间内停止运行并稍后恢复。
  • 网络可能随时中断。
  • 发送的消息在传递过程中可能会丢失,无法接收。
  • 长时间后,发送的消息可能会延迟并接收。
  • 邮件在传递过程中可能会遇到乱序问题。
  • 网络可以划分。例如,由于中美两个集群之间的通信不畅,整个网络可能被分为两个子网,分别用于中国集群和美国集群。

这些上述问题在分布式系统中很常见。从本质上讲,它们是分布式系统中不可靠和不稳定的物理硬件所引起的不可避免的风险。例如,网络或通信通道不能总是稳定可靠。物理计算机或CPU上的磁盘并非总是处于良好状态。因此,可以肯定地说,崩盘故障是分布式系统中要解决的最基本,最常见的故障类型。

拜占庭断层

崩盘故障基于一个简单的假设:要么节点不工作或无法正常响应,要么尽管节点正常工作和响应,但它们无法实现不一致,也就是说,空闲对它们来说还可以,但是它们不能犯一些错误。网络中的恶意节点可能随时更改和伪造数据,这使得解决共识问题变得更加困难。这些可能改变和伪造数据或响应信息的麻烦制造问题通常是拜占庭式故障。崩盘故障称为非拜占庭故障。

拜占庭起源于兰莫特的论文。毫不夸张地说,拜占庭容错(BFT)是最复杂和最严格的容错模型。以此类推,一些将军计划一起进攻城堡,每个将军都可以选择发起进攻或撤退。但是,要成功占领城堡,所有将军必须同步行动。接下来,由于将军们相距太远,无法使用直接通信,所以使用Messenger来传递消息。但是,消息不可靠。他们可能会在很长一段时间后成功传递消息,无法传递消息甚至更改消息。将军可能也不可靠,例如,其中一名可能是叛徒,他不按照计划行事。

04oW5igBvoJX-Pm5X

拜占庭容错

 

容错能力

分布式共识算法需要解决的最关键的问题是如何实现确定性和共识,以便在整个分布式网络中返回可靠的共识结果,这可能充满风险和不确定性。自然,解决碰撞故障相对容易。用于解决此类故障的算法称为崩盘容错(CFT)算法或非拜占庭容错算法。拜占庭式故障可能会导致未经授权的更改,具有更高的复杂度并且更难以解决。解决这些问题的算法称为拜占庭容错算法。

两种容错算法之间的界限是什么?在两种情况下会发生两种类型的故障?是否真的需要考虑未经授权的更改?这些问题的答案可能取决于实际的网络环境和业务场景。

崩盘容错

通常,如果系统位于可靠的内部网络中,则只需要考虑崩盘容错(CFT)的问题。例如,对于许多公司中的分布式组件,例如分布式存储,消息队列和分布式服务,我们只需要考虑CFT。造成这种情况的原因如下:整个企业网络是关闭的,并由多个防火墙保护,这使得外部访问和攻击不太可能。各个节点以统一的方式部署,并且在未经适当授权的情况下更改机器和运行软件的可能性很小。在这一点上,分布式网络相对“纯粹”,我们只需要特别注意通信网络和机器硬件。

拜占庭容错

然后是拜占庭式容错(BFT),它与在较大环境中评估的整个分布式网络有关。除了物理硬件之外,还必须考虑一些“人为”因素。毕竟,执行不当行为的是特定人员而不是机器。假定分布式网络是相对开放的,例如,特定行业中数十家公司的私有网络。或者假设一个完全开放的网络,例如任何人都可以访问的网络。节点计算机和这些计算机上的软件由单个公司或个人自己部署。如果收益足够吸引人,则人可以在这些节点之一上发起DDoS攻击,从而对软件代码和代码执行逻辑进行经授权的(通常是恶意的)更改,甚至是网络中磁盘上保留的数据。在这种情况下,我们面临更大的挑战。除了不可靠的通信网络和机器硬件之外,我们还需要考虑并处理系统中的“麻烦制造者”。

不可能三角

为了解决实际情况中遇到的这些问题,许多计算科学家进行了大量的理论研究。对于工程技术人员而言,这些理论研究似乎过于抽象和繁琐,其中一些研究涉及无聊的数学问题。但是,这些理论可以为如何解决这些问题提供重要指导。同样,这些理论表明可能的解决方案的理论局限性是什么,可以探索哪个方向,哪个方向无效。站在巨人的肩膀上,我们不必花费所有精力来制造“永动机”。由于你们中的大多数人都对这些理论有所了解,所以让我们做一个简短的回顾。

Fisher,Lynch和Paterson(FLP)不可能

早在1985年,Fisher,Lynch和Paterson便发布了分布式共识的不可能定理。此前,我们还表明,在完全异步的计算模型中无法解决自然而重要的容错协作计算问题。也就是说,在异步网络中,不可能实现甚至容忍单个节点故障的共识算法。在此基础上,该定理不考虑拜占庭式故障。还假定网络非常稳定,并且所有消息都正确正确地传递了一次。在本文中,我们展示了令人惊讶的结果,即即使是单个未通知的进程死亡,也没有完全异步的共识协议可以容忍。我们不考虑拜占庭式的失败,

当然,这只是理论上的。它显示了解决这些问题的理论局限性,但这并不意味着这些问题在实践中无法解决。如果我们愿意放宽限制并做出一些牺牲,我们可以在工程中找到切实可行的解决方案。

FLP不可能定理的最基本前提是异步网络模型。异步模型和同步模型分别具有什么特征?

  • 在异步模型中,从一个节点到另一节点的消息延迟是有限的,但可以是无限制的。这意味着,如果节点未收到消息,则无法准确判断消息是丢失还是被延迟。换句话说,我们无法根据超时来确定节点是否经历了故障。
  • 在同步模型中,消息传递中的延迟是有限且有限的。这意味着我们可以根据我们的经验或抽样来准确估计可能的最大消息延迟,从而根据超时来确定消息是否丢失或节点是否遇到故障。

幸运的是,我们的实际网络环境更类似于同步模型。因此,我们可以根据经验或抽样来确定最大超时时间。例如,您已将一本书邮寄给您的一个朋友。但是,三天后,该书仍未交付给您的朋友。在这一点上,您的朋友可能会很难确定交付是否已延迟或在交付过程中书籍是否丢失。但是,如果一个月后仍未将书交付给您的朋友,则您和您的朋友基本上可以得出书在交付过程中丢失的结论。该结论基于我们的经验和统计数据:通常可以在一到两周内成功交付物品。异步模型反映了代码间通信的最坏情况和极端情况。异步模型与同步节点有一些共同点:在异步模型中工作的共识协议也可以在同步模型中工作。同步模型对异步模型进行了修改和限制,从而使同步模型更接近实际情况,并且有可能在实践中解决共识问题。

此外,即使在异步网络模型中,FLP也不表示无法达成共识,只是在有限的时间内并非总是可以达成。实际上,如果放宽对时间的限制,仍然可以找到解决方案。

根据对DLS的研究,共识算法可以通过网络模型分为三种主要类型。

  • 部分同步模型中的共识协议最多可以容忍任何故障的1/3。在部分同步模型中,网络延迟是有界的,但我们无法提前知道边界。这种类型的容错也包含拜占庭式故障。
  • 异步模型中的确定性协议不能容忍错误。如前所述,在异步模型中,网络延迟是无限的。这个结论实际上就是FLP不可能定理所暗示的:完全异步网络中的确定性协议甚至不能容忍单个节点中的错误。
  • 同步模型中的协议可以令人惊讶地支持100%的容错能力,尽管当故障节点的数量超过总数的1/2时,它们将限制节点的行为。在同步模型中,网络等待时间是有界的(小于已知常数)。

从不同的角度来看,FLP实际上涵盖了分布式系统的三个属性:安全性,活动性和容错性。

  • 安全意味着跨系统节点达到的值是一致且有效的。安全是确保系统一致性的最基本要求。安全的核心是确保它不会做坏事。
  • 活跃度表示系统中的各个节点必须达成协议(在限定时间内),也就是说,系统必须向前移动并且不能始终处于不一致状态。活泼实际上是一个更高的要求。这意味着您不能做坏事,但也不能总是不做任何事。您必须做些好事,即使整个系统平稳且正常地运行。
  • 容错要求协议在节点故障的情况下也必须有效。

FLP不可能意味着在异步网络中没有分布式共识协议可以同时满足这三个属性。在分布式系统中,节点故障几乎是不可避免的。因此,必须考虑容错能力。FLP不可能意味着任何共识协议除了容错能力之外,只能具有生命力或安全性。实际上,我们经常可以做出一些牺牲。例如,我们可以牺牲一定程度的安全性,这意味着系统总是可以很快达成协议,但是协议不是很可靠。我们还可以牺牲一定程度的活力,这意味着系统可以达成非常可靠的协议,但是此过程花费的时间太长,或者由于无休止的辩论而无法达成协议。幸好,

0uRzyaT3oxkOvTdOK

FLP不可能图

 

另外,FLP不排除像拉斯维加斯这样的随机算法。许多共识算法采用拉斯维加斯算法来避免FLP不可能对确定性和异步网络施加的限制。这些非确定性共识算法涉及Las Vegas规则:共识在网络中始终可以到达,但是达成共识所需的时间可能不受限制。使用这些类型的算法时,很可能在每个回合中都达成共识。在T秒内达成共识的概率(P)将随着T的增加而呈指数增加,并且将越来越接近1。实际上,该方法已被许多成功的共识算法采用,并且是在FLP不可能。

一致性可用性分区容限(CAP)定理

众所周知的一致性可用性分区容忍(CAP)定理从不同的角度明确指出:“在共享数据系统的三个属性(数据一致性,系统可用性和对网络分区的容忍度)中,任何时候都只能达到两个”。CAP与FLP非常相似,但是它们并不完全相同。他们专注于不同的观点。即使非常相似的概念也没有完全相同的含义。例如:

  • FLP专注于分布式共识问题,而CAP专注于分布式网络中的数据同步和复制。
  • FLP声明不能在异步网络模型中实现FLP的所有三个属性,而CAP则不能在所有方案中都实现CAP的所有三个部分。
  • FLP中的活力强调共识协议的内部属性。CAP的可用性部分强调共识协议的外部属性。

从理论上讲,只能实现CAP部分中的两个。但是,边界选择不是二进制的。介于两者之间的整个频谱很有用,因为它混合了不同级别的可用性和一致性,通常会产生更好的结果。

0mT7GGjyWbz1Ceaes

CAP定理图

 

实际上,我们经常需要根据实际业务场景进行一些权衡。例如:

  • 许多传统的关系数据库(例如MySQL)经常使用ACID(Atom性,一致性,隔离性和持久性),并通过同步事务操作确保强一致性。可用性通常不是很好,因为节点数很少(大多数情况下只有主节点和辅助节点)。相对简单的网络拓扑也降低了分区容限。
  • NoSQL存储系统(例如,HBase)通常采用BASE(基本可用,软状态,最终保持一致),并通过多个节点和副本确保高可用性。节点数更大,网络环境也更复杂,并且还考虑了分区容限。但是,BASE只能实现弱一致性并确保最终一致性。

0PdpFcfEO61VGI90B

ACID和BASE之间的比较

 

当然,这些陈述不是最终结论。由于各个系统在不断发展,因此今天的正确结论明天可能就不正确了。为了变得更好,系统必须不断探索合适的方案并找到最佳的平衡点。

分布式共识算法

为了处理分布式系统中的各种实际和复杂的问题和挑战,已经在理论指导的基础上开发了许多解决方案。本文不介绍这些算法的实现细节和特定区别。取而代之的是,仅给出一般性介绍,以便从更广阔的角度进行整体比较。

Paxos算法

Lamport建议的Paxos是最著名的分布式共识算法之一,尽管其复杂性也是“臭名昭著”的。Lamport提出了一种实用的创新机制,该机制可以通过工程实现,并且可以最大程度地确保分布式系统的一致性。Paxos被广泛应用于包括Chubby和ZooKeeper在内的许多分布式系统中。基本Paxos(单一命令,即每次仅同意一个值)具有两个角色:投标人可以处理客户请求并主动提出投标值。接受者被动地响应提议者发送的信息,对提出的提议进行投票,并在决策过程中保持价值观和状态。为了简化模型,可以忽略学习者角色。这不会影响模型中的决策。

如图所示,共识决策过程使用两阶段提交协议:

  • 在第一阶段,广播“准备RPC”命令以查找协议确定的最终值,并阻止未完成的旧建议。
  • 在第二阶段,广播“接受RPC”命令以要求“接受者”接受商定的特定值。Multi-Paxos由Basic Paxos的多个实例组成,并且可以决定一系列值。

Paxos在实践中的可实施性还基于许多假设和限制。Paxos仅可用于处理CFT,而不能用于处理拜占庭式故障。因此,它是一种非拜占庭式的容错算法。从FLP的角度来看,Paxos实现了容错和安全性,并放弃了活动性(安全但不活动)。也就是说,尽管这种情况极不可能发生,但该算法可能永远不会结束或无法达成共识。从CAP的角度来看,Paxos仅确保C(一致性)和P(分区容限),但削弱了可用性级别。为了提高Paxos系统的可用性,我们可以增加学习者的数量。

尽管存在这些缺点,Paxos在实践中仍然可靠,有效且经过了充分测试。本质上,Paxos是异步系统中的(主要)分布式共识协议。Chubby的发明者甚至说:“只有一个共识协议,那就是Paxos” —所有其他方法只是Paxos的残破版本。Paxos在实践中为何有效的原因是,通常不容易触发可能影响Paxos系统活动性和可用性的条件。如果确实发生了这些情况,那么影响也不是非常不可接受的。

0RGd-6HBe97VDrqzI

Paxos RPC基本通信和决策过程

 

筏算法

由于Paxos的复杂性,Ongaro在2014年提出了一种更简单的算法-Raft。筏在工程中更容易理解和实施。这也是筏的最初目标。在不影响功能的前提下,进行了许多易于理解的设计细节。

Raft算法是基于领导者的不对称模型。系统中的节点在任何时间点只能处于以下三种状态之一:领导者,关注者和候选者。在初始阶段,所有节点都是跟随者。要成为领导者,节点(跟随者)必须成为候选人并发起一轮选举投票。如果节点未收到足够的投票,则该节点将再次成为关注者。但是,如果获得多数票,则该节点将成为领导者。如果领导者遇到失败,并且从失败中恢复后发现新的领导者被选出,则原始领导者会自动返回到关注者状态。

Raft还引入了术语概念,以及时识别过期信息。术语类似于ZooKeeper中的纪元文件。任期数目随时间单调增加,并且在给定任期中最多可以选出一位领导人。如果日志的最后一个条目具有不同的术语,则带有较新术语的日志将是最新的。

Raft还引入了心跳数据包和超时。为了维持其权威,当选的领导者必须不断向集群中的其他节点发送心跳数据包。如果跟随者在给定的选举超时期间未收到心跳数据包,则认为领导者已经崩盘,跟随者将其状态更改为候选者并开始进行领导者选举。

Raft中的领导者选举是通过心跳和随机超时来实现的。日志复制是通过强大的领导力来实现的:领导者接收客户端命令,将其附加到其日志中,然后将日志复制到其他关注者。筏仅通过允许领导者决定是否提交日志来确保安全。

此处将不详细描述选举和复制。有关Raft中选举和复制的更多信息。请注意,领导者的选举和领导者精心安排的正常操作相对简单。在Raft中,更换领导者的过程实际上要复杂一些。

但是,尽管Raft的原理/机制与Paxos并不完全相同,但是可以解决它们所解决的问题和所采用的权衡策略。也就是说,筏只能解决崩盘故障,强调容错性,安全性和一致性,并削弱活动性和可用性水平。

0g1s89Bim4LhWnaE1

筏概述

 

实用拜占庭式容错(PBFT)

尽管自从兰莫特(Lamport)于1982年提出拜占庭将军问题以来,已经进行了许多有关BFT解决方案的讨论,但针对这些问题的许多解决方案效率低下,缓慢且复杂。当Castro和Liskov提出实用的拜占庭容错(PBFT)算法时,这种情况在1999年得到了改善。PBFT是同类中的第一种算法,其复杂度从指数级降低到多项式级。PBFT支持数千个TPS和可行的解决方案,用于在实践中恶意操作的节点。事实证明,如果系统中的恶意节点数不超过总节点数的1/3,PBFT算法将正常工作。

PBFT系统中的所有节点都按顺序排序,其中一个节点是引导节点,其他节点被视为备用节点。系统中的所有节点相互通信,并根据多数原则达成共识。每次PBFT共识回合都称为一个视图。引导节点在每个视图期间都会更改,如果在引导节点未广播请求的情况下经过了一定的时间,则可以用称为视图更改的协议来替换引导节点。此副本超时机制确保可以检测到崩盘或恶意的领导者,并通过重新选择新的领导者来开始新的视图。

如图所示,从客户端启动请求到接收响应经历了五个阶段。共识过程采用三相协议。以下内容简要描述了五个阶段:

  1. 启动:客户端(客户端c)向群集发起服务请求m。
  2. 预先准备:引导者节点(副本0)验证请求消息m的有效性,在视图中为请求m分配序列号n,并将分配的预先准备消息广播到所有备份节点(副本1-3) )。
  3. 准备:备份节点验证请求消息m的有效性并接受序列号n。如果备用节点接受分配方案,则它将相应的准备消息广播到其他节点。在此阶段,所有副本都必须达到全局一致的顺序。
  4. 提交:从集群接收到分配协议消息后,所有节点(主节点和辅助节点)会将提交消息广播到所有其他节点。在此阶段,所有副本均已同意订单并确认收到了请求。
  5. 执行和答复:节点从集群接收到提交消息后,将执行请求m并将答复发送给客户端。客户端等待来自f + 1个不同节点的相同答复,并认为该请求已成功执行。f表示群中心化潜在故障节点的最大数量。所有节点都直接向客户端返回消息也是为了防止主节点在请求期间出现问题。

0eJCf-clLlz-hiz4

PBFT正常操作

 

PBFT基于异步网络模型实现安全性,但是它依赖于消息超时来执行定期同步。因为采用了领导者计划解决方案,所以消息同步过程非常快,并且还实现了顺序写入。但是,领导人连任很难。当时间非常接近超时窗口时,恶意的领导者可能开始发送消息,从而导致系统严重变慢。此缺点可用于发起针对网络的攻击,并使正确运行的节点看起来不正确,从而导致无休止的领导者选举。

与Paxos和Raft相比,PBFT可以处理更多的问题:除了崩盘故障,它还可以处理可能引起麻烦和未经授权的更改的拜占庭式问题。但是,从PBFT中采用的权衡政策的角度来看,PBFT仍然类似于Paxos和Raft。从FLP的角度来看,PBFT还强调容错性和安全性,并削弱活动水平。从CAP的角度来看,PBFT强调对网络分区故障和一致性的容忍度,并削弱了可用性级别。

尽管存在这些缺点,但是如果有故障或恶意节点的数量不超过总节点数的1/3,PBFT在实践中仍然是有效和可行的。PBFT不是唯一的BFT算法。其他类似BFT的算法也在不断发展,例如Lamport曾经建议使用BFT Paxos(Paxos的增强版本)来处理拜占庭式故障。最近,基于PBFT和Raft的组合提出了BFT Raft算法。但是,从问题范围和机制的角度来看,这些算法仍与先前的思想和框架相似。这些算法的介绍将不在本文中描述。

适用场景

从Paxos,Raft和PBFT到Paxos和Raft的各种变体以及类似BFT的新算法,分布式共识算法已经得到了发展,改进和发展。许多大公司还开发了满足其业务场景的分布式共识算法。尽管这些算法不是很完美,但是它们在特定的业务实践中起着重要的作用。那么这些算法的应用场景是什么?这些算法的局限性是什么?

诸如Paxos和Raft之类的非BFT算法只能处理机器硬件故障,不能处理存在恶意节点的情况。这些非BFT算法只能在非常可靠的网络环境中运行,例如公司的内部网络。在这种相对封闭的网络中,访问需要严格的授权,以确保各个节点的身份是已知且可靠的。这用于消除恶意节点,并允许算法有效运行。

BFT算法确实对网络环境有非常严格的要求。即使存在恶意节点,仅当恶意节点不超过总数的1/3时,整个系统仍是安全的。但是,这带来了新的问题。您如何确切知道网络中的恶意节点数量?恶意节点占总节点的比例是多少?如果访问网络需要权限,则解决此问题相对容易。例如,在由10个分支机构组成的专用网络中,只有10个授权公司可以访问该网络。即使某些公司(少于3个公司)恶意行为并试图在未经授权的情况下更改数据,整个系统仍然是可靠和安全的。在这样的许可网络中,已经估计出可能恶意行为的节点数量。当某些节点确实采取恶意行动时,可以快速找到其真实身份。这间接提高了网络的安全性。

局限性

但是,BFT算法可能会在无许可(开放许可,无许可控制)开放网络中引起问题。如果分布式网络是开放的并且可以被任何人访问,并且网络访问的成本很低,则未知网络中可能有多少个潜在的恶意节点。即使某些节点进行恶意操作,确定其身份也是一个难题。典型的攻击场景是Sybil攻击,攻击者可以伪造身份来控制大量节点,然后控制整个分布式网络。

另外,BFT算法的最大局限在于它们只能协调少量节点(例如,不超过100个节点)。如果节点数以千计,则该系统将显示非常差的性能,甚至无法达成共识,从而影响系统的活动性和可用性。您可能已经注意到,在PBFT的三个阶段协议中都需要多播:在准备阶段,主节点将请求广播到所有辅助节点;在准备阶段,次要节点向所有其他节点广播;在提交阶段,单个节点(主节点和辅助节点)广播到所有其他节点。从这个过程中,我们可以知道通信次数是节点数的平方。当系统具有大量节点时,此广播机制将是一场灾难。

从以上内容可以得出结论,传统的分布式共识算法(例如Paxos,Raft和PBFT)通常适用于需要权限控制且节点数量少的可靠分布式网络。

在私有区块链中的应用

实际上,这些传统的共识算法在区块链时代也获得了新的活力:它们得到了进一步的理解和使用。这些共识算法广泛用于网络环境相对可靠的私有区块链场景中。由于以下特征,私有区块链的应用前景广阔:

  • 访问授权:私有区块链不是完全开放的,通常由数个或数十个企业组成。只有授权的公司或组织才能加入网络(通常需要在加入网络之前完成实名认证)。
  • 数据保护:私有区块链中的信息和数据不是完全开放的,并且仅对授权方可见。这对于行业或企业数据安全性尤其重要。例如,关于跨境转账的交易信息在银行业中非常关键,链上税收系统中的税收信息也非常敏感。
  • 监督:通常,监督和观察节点可以放置在私有区块链中,以监视和审计敏感信息,从而满足合规性要求。

在当前阶段,可以将私有区块链视为实现快速解决方案实施并解决特定行业痛点的好选择。私有区块链在区块链行业的应用也预示着未来区块链发展的进一步探索。由于需要授权才能加入私有区块链,因此已经预先建立了一定级别的信任,并且网络环境相对可靠。网络中恶意行为和攻击的可能性极低,即使它们发生,也可以轻松,快速地确定责任。因此,传统的共识算法也可以应用于这些情况。请参阅以下示例:

  • HyperLedger Fabric v1.0利用Solo和Kafka pub / sub系统执行订购;v1.4还引入了Raft算法。当前,所有采用的算法都是CFT算法。Raft主要为后续支持BFT算法铺平了道路。(Raft是向Fabric开发拜占庭式容错(BFT)订购服务的第一步。我们将看到,一些Raft开发决策是受此驱动的。)
  • R3 Corda还采用了可插入共识设计。它既允许实现高速且需要高度可靠的环境的Raft算法,也允许实现相对低速并且需要较不可靠的网络环境的BFT算法。有关更多信息,请参见本文档
  • 企业联盟以太坊(EEA)也支持BFT算法,筏,和诗人。请参阅本文档
  • 蚂蚁金融区块链BaaS平台也采用PBFT算法。

无权限网络中的挑战

如果网络完全开放且未经许可并且任何人都可以随时访问,则整个系统能否在有限的时间内达成共识?我们如何协调网络中的所有节点,例如,包含1万个节点而不是仅数十个节点?

在回答前面的问题之前,您实际上需要问自己以下问题:为什么网络需要完全开放且未经许可?什么样的场景将需要上万个节点?实际场景中是否确实存在此节点要求?这些问题的答案与区块链中的公共区块链直接相关。为了回答这些问题,我们需要检查分布式系统的目标。

去中心化的意义

为什么我们需要分布式系统?这个问题不难回答。通常,分布式系统可以提高容错能力。毕竟,分布式系统依赖于许多不同的节点,并且同时在所有节点上发生故障的概率大大低于在单个节点上发生故障的概率。此外,分布式系统还支持附着阻力。攻击或破坏许多节点比攻击单个节点要困难得多。

但是,前面的内容仍然仅限于物理硬件。这些优势可以降低物理机硬件故障的可能性。但是,没有考虑人为因素。如果系统足够重要(例如,电子货币系统),则除了机器故障外,我们还需要更多关注人为因素。部署节点的人是否会故意进行恶意行为?我们如何防止系统中节点之间的损坏和串通?

以太坊的创始人Vitalik Buterin提到了权力下放的重要性,如下图所示。传统的分布式系统从容错和抗攻击性(系统中有多少台物理机以及系统允许多少台机器同时发生故障)的角度实现体系结构去中心化。同样,现在我们需要考虑如何实施政治权力下放和反勾结。最终有多少人或组织控制系统中的节点?我们如何防止腐败和串通?如果我们说传统的分布式系统关注网络和机器硬件的可靠性,那么我们现在需要考虑的是“可靠性”:我们能否找到一种有效的技术来防止人为的恶意行为?我们如何确保重要网络中的大多数节点不受一个人或组织恶意控制?

0s6gjPb1sjQqxERrt

去中心化的三个维度

 

值得一提的是,这个问题仍然存在很大争议。许多人从未想到过腐败和勾结,或者认为完全没有必要考虑它们。也许他们认为此技术问题无能为力。毕竟,这个问题与我们所生活的现实世界相距甚远。我们生活在一个中央平台享有良好声誉,提供信用认可并控制所有规则和流程的世界中。例如,很少有人担心银行会故意进行错误的会计处理并挪用其存储在银行中的资产。毕竟,银行通常被认为是可靠的。如果银行不可靠,人们可能无法进行任何商业活动。

但是,银行的可靠只是我们的假设。我们只有“信任”和“可疑”两种选择,而我们必须选择前者,因为我们无法开展业务活动,如果我们不信任银行,经济发展也会停滞。但是,没有任何实际方法可以证明银行是非常可靠的。

如果可靠性实际上是必要且有意义的,那么您能找到一种解决方案来使这个世界更加可靠吗?您能证明与您做生意的陌生人是可靠的,而不是必须相信陌生人是可靠的吗?不要相信 请验证。您也不需要信任那个陌生人,也不必信任那个陌生人。您只需要验证那个陌生人。

为了解决这个问题,所有人必须平等。每个人都可以平等,自由地参与决策过程。每个人都可以自由进入和退出“理事会”。这实际上是技术民主,包括以下技术要素:网络必须是未经许可的,任何人都可以随时进入或退出网络;节点必须是对等的并且可以直接通信;不存在中介机构或中央机构(完全对等);每个节点都可以成为簿记员。

由于网络是未经许可,完全开放,透明和民主的,因此参与节点的数量可能非常大,恶意节点的可能性也很高。那么,在这种节点数量众多,恶意行为可能性高的无权限分布式网络环境中,如何通过某种机制协调节点的行为,以确保整个系统的一致性?如前所述,共识算法无法做到这一点。我们需要寻求新的解决方案。

此外,去中心化可能是区块链领域最具争议的话题。有人认为去中心化是区块链的价值,是公共区块链存在的灵魂和前提,应尽可能保证系统的去中心化程度。同时,其他人则认为,完全去中心化过于理想,不太可能实现,因此在考虑效率的同时,应结合实际情况考虑弱化的集权或多中心化。纯粹从技术角度来看,不管价值判断如何,去中心化程度越高,系统的安全性就越高。因此,在公共区块链系统设计中,应尽可能确保系统的去中心化程度。然而,

工作量证明(PoW)机制

开放网络中分布式共识的创新解决方案是比特币中的工作量证明(PoW)机制。

比特币

2008年10月31日,中本聪(中本聪)发布了比特币白皮书“ Bitcoin:一种对等电子现金系统”,奇迹般地为此类问题提供了创造性的解决方案,从而使得在复杂的网络环境中协调数千个节点成为可能。实际上,中本聪并没有发布解决该技术问题的白皮书。相反,中本聪认为更大。他创造性地发明了完全对等的电子现金系统比特币,以消除传统支付所依赖的可信赖的第三方中间商。在系统实现过程中,碰巧解决了开放网络中多个节点之间的一致性问题。也可以说,比特币解决的核心问题是点对点网络中电子货币的双重支出问题。但是,比特币的实现机制不仅涉及分布式网络技术,而且还结合了密码学,经济学,博弈论等思想,并以不确定的概率模式实现了节点间的一致性。因此,简单地将其称为算法不再能够准确表达其含义。将其称为共识机制可能更合适,因为其实现确实依赖于一套完整的策略和系统。在这里,我们将不再详细介绍比特币的思想意义和实现细节,而仅关注其共识机制的实现。并以不确定的概率模式实现节点间的一致性。因此,简单地将其称为算法不再能够准确表达其含义。将其称为共识机制可能更合适,因为其实现确实依赖于一套完整的策略和系统。在这里,我们将不再详细介绍比特币的思想意义和实现细节,而仅关注其共识机制的实现。并以不确定的概率模式实现节点间的一致性。因此,简单地将其称为算法不再能够准确表达其含义。将其称为共识机制可能更合适,因为其实现确实依赖于一套完整的策略和系统。在这里,我们将不再详细介绍比特币的思想意义和实现细节,而仅关注其共识机制的实现。

比特币实际上是数字签名的电子链。硬币所有者可以通过签署前一交易的哈希值和下一个所有者的公钥并将其添加到硬币末尾来转移硬币。收款人通过验证签名来验证由硬币所有者形成的链。但是,问题在于收款人无法验证接收到的硬币是否没有被双用,即所有者可能已经将相同的硬币转移给了两个人。因此,我们需要一种机制使收款人确保以前的硬币所有者在此之前没有将硬币转移给其他人。为了确保这一点,唯一的方法是让所有人都知道所有交易。在没有受信任的第三方的情况下,要实现这一点,必须将所有交易广播给所有人。因此,我们需要一个系统,所有参与者都同意他们接收硬币的顺序,以形成唯一的序列记录历史。这实际上是分布式共识的问题。

比特币系统提供的解决方案是使用由所有节点组成的时间戳服务器。时间戳服务器为事务块的哈希值加上时间戳,并进行广播。每个时间戳在其哈希中都包含前一个时间戳,形成一个链,每个附加时间戳都会增强之前的时间戳。为了在对等网络中实现分布式时间戳服务器,比特币使用工作量证明(PoW)机制。当执行散列操作时,PoW需要找到某个值,以使整个散列值的前几位全为零,并且随着零位数的增加,平均工作量呈指数增加。另外,哈希没有规则。为了确保哈希的前几位为零,唯一的方法是强制反复尝试和反复进行错误。

此外,PoW解决了大多数决策问题。在比特币中,最长的链代表大多数决定。如果大多数计算能力由诚实节点控制,那么诚实链将迅速增长并超越其他链。如果攻击者想要未经适当授权而更改前一个块,则攻击者必须重做相应块及其所有后续块的PoW任务,然后赶上并超越诚实节点。这是非常困难的。从数学上讲,不难证明随着节点数量的增加,较慢的攻击者赶上诚实节点的概率呈指数下跌。一般来说,在6个区块后追赶几乎是不可能的。另外,PoW任务的难度并没有固定,但是使用移动平均法对其进行动态调整,该方法主要考虑了硬件计算速度的提高以及矿工数量的增加或减少。如果计算速度快,则难度增加,计算速度慢,并且难度减小。通过难度的动态调整,比特币的区块生成时间大致稳定在10分钟左右。

整个网络运行如下:

  1. 新事务将广播到所有节点。
  2. 每个节点将接收到的交易打包到一个块中。
  3. 每个节点通过不断更改块的随机数来执行PoW任务,以使块的哈希满足指定条件。
  4. 节点完成PoW任务后,便将该块广播到所有其他节点。
  5. 接收到该块后,其他节点将验证该块内事务的有效性,并在验证通过后接受该块。
  6. 节点如何表达对块的接受?即,在添加下一个块时,将接受的块的哈希值作为下一个块的前一个哈希值。

0Pj3WwMDUMJwIs8Mp

比特币交易流程

 

此处不详细描述交易和挖矿的细节。但是,总之,我们可以说的是,在比特币中,最长的信息链始终占主导地位。如果节点发现的链比其长,它将自动切换到最长的链来工作。

由于PoW的成本很高,我们如何鼓励每个人都贡献自己的计算能力并成为确保整个比特币网络安全的节点?比特币提供两种激励政策:

  1. 挖出某个区块的节点将获得一定数量的比特币,这实际上是唯一的比特币发行机制(主要市场)。所有比特币只能通过挖矿挖出,然后进入流通。
  2. 矿工可以获得一定数量的服务费来处理交易信息,这实际上是现有比特币(二级市场)的流通。当全部挖出2100万比特币时,用户只能受到服务费的激励。

这些激励政策还隐含地鼓励节点诚实。如果贪婪的攻击者拥有超过一半的CPU计算能力,他必须做出选择:是更改交易记录并转回他已经花费的比特币,还是挖矿新硬币并诚实地赚取服务费?诚实地进行挖矿很有可能会更有利。毕竟,他可以赚到的硬币比其他所有节点赚到的硬币总和还多。同时,破坏比特币系统也将破坏他自己财富的效力。如果比特币不再可靠,那么价值将迅速崩盘。此外,攻击者没有人想像的那样自由操纵,未经授权进行更改或伪造交易记录。他所能做的就是窃取他最近花费的比特币。

PoW为什么起作用?

比特币已经稳定运行了10年,没有任何组织或团体对其进行维护,仅依靠社区志愿者的自愿维护。在此期间,从未发生过重大问题。这是一个奇迹,足以证明比特币背后的共识机制的有效性。为什么比特币可以做到这一点?为什么比特币背后的共识机制如此有效?Bitnodes数据显示,Bitcoin节点的数量超过1万(Bitcoin有许多类型的节点,而不同口径的节点的数量可能有所不同。此处仅考虑完整的节点)。为什么比特币可以在无许可的网络环境中协调数万个节点?

我认为,以下原因可能适用:

  • 有效的激励政策:激励政策有效地鼓励更多节点参与比特币对等网络。节点越多,比特币网络越安全。
  • PoW:挖矿和生成块会消耗CPU计算能力,这会人为地制造障碍并增加成本,从而增加了攻击者的成本。
  • 博弈论:激励策略也考虑了博弈的平衡,因此理性的节点会从诚实中受益更多。
  • 通信效率:比特币节点之间的通信效率不低。您可能会注意到还涉及到事务和块的广播。但是,这样的广播不在两个节点之间广播,而是由某个节点(发生交易或计算PoW的节点)向所有其他节点广播信息。另外,交易广播不需要到达所有节点。只要有许多节点接受广播,它将很快打包。2014年,Miller等人(《中等难度难题的匿名拜占庭共识:比特币的模型》)严格证明,消息复杂性不会随着网络规模的增加而增加,而是一个常数。此外,针对块的广播还允许消息丢失。如果节点未收到阻止,
  • 概率一致性:与其他共识算法相比,比特币共识机制最特别之处在于它不追求确定性一致性,而是追求概率一致性。当刚刚挖出一个块时,并不是所有节点都确认它包含的事务信息,并且它包含的数据也不是最终一致性的结果,攻击者仍可能会更改它。但是,随着节点数量的增加,授权更改的可能性将呈指数级下跌,并且最终一致性的可能性将大大增加。一旦后续节点的数量超过6(即大约60分钟后),一致性就可以被视为确定性的和最终的。

比特币共识机制不再局限于分布式算法的层面,而是包含了更多的思想,例如经济学,博弈论和概率论。因此,将其称为共识机制可能更合适。但是,我们仍然可以将比特币PoW共识机制纳入一致性框架。从FLP和CAP的角度来看:

  1. 比特币最大程度地考虑了故障容错和网络分区容忍,这也是网络开放性的必要要求。开放的网络环境极其复杂,随时都对所有人开放,节点分布在世界各地,并且随时可能发生机器故障,网络差异和系统攻击,因此必须考虑容错能力。使用PoW机制,比特币不仅可以实现崩盘容错能力,而且还可以结合密码非对称加密货币技术来实现拜占庭容错能力,以防御未经授权的更改和攻击。
  2. 比特币尽可能确保活动性和可用性。比特币的区块生成时间始终约为10分钟,这意味着系统始终可以在10分钟内达成协议。过去十年来,比特币网络从未中断。从这个角度来看,它确实实现了最终的可用性。但是,必须指出的是,比特币的可用性与我们通常理解的互联网领域的可用性大不相同。为了使Internet领域的系统可用性,不仅要求系统稳定运行而不会停机,而且对服务体验(例如响应时间)也有明确的要求。如果您使用支付宝进行转帐,但是该汇款在任何时候都无法使用,并且无法在3秒内汇入款项,您被告知系统正忙,需要等待10分钟甚至30分钟,然后该服务将被视为不可用。但是,这种现象已在比特币中发生。比特币每10分钟有一个区块,区块大小仅为1 MB,不能容纳太多交易。如果同时存在太多事务,则只能等待直到这些事务可以打包到下一个块中。因此,可能需要20分钟,30分钟甚至更长的时间。从这个角度来看,比特币网络实际上放宽了对响应时间的要求,并实现了相对基本的可用性:读可用性非常高,而写可用性非常低。这种现象已经在比特币中发生。比特币每10分钟有一个区块,区块大小仅为1 MB,不能容纳太多交易。如果同时存在太多事务,则只能等待直到这些事务可以打包到下一个块中。因此,可能需要20分钟,30分钟甚至更长的时间。从这个角度来看,比特币网络实际上放宽了对响应时间的要求,并实现了相对基本的可用性:读可用性非常高,而写可用性非常低。这种现象已经在比特币中发生。比特币每10分钟有一个区块,区块大小仅为1 MB,不能容纳太多交易。如果同时存在太多事务,则只能等待直到这些事务可以打包到下一个块中。因此,可能需要20分钟,30分钟甚至更长的时间。从这个角度来看,比特币网络实际上放宽了对响应时间的要求,并实现了相对基本的可用性:读可用性非常高,而写可用性非常低。甚至更长。从这个角度来看,比特币网络实际上放宽了对响应时间的要求,并实现了相对基本的可用性:读可用性非常高,而写可用性非常低。甚至更长。从这个角度来看,比特币网络实际上放宽了对响应时间的要求,并实现了相对基本的可用性:读可用性非常高,而写可用性非常低。
  3. 比特币不再追求安全性和一致性的确定性,而是使用概率保证,基本上可以将其视为确保最终安全性和一致性的保证,但是此处的“最终”仍然是有时间限制和基于概率的。例如,如果我刚刚向您转让了比特币,没有人可以说结果是肯定的,也是最终的结果。但是,随着时间的流逝,新的区块不断被挖矿出来,“我转账给您”的交易信息也将被更多的节点确认,并被更多的后续区块所强化。确定结果的可能性不断增加。一旦经过了足够的时间(例如1小时),我们就可以从概率角度考虑更改结果的概率极低,并且系统达到最终一致性的可能性非常高。在实践中,我们可以认为该系统可以确保最终的一致性。

总体而言,在FLP和CAP的限制下,Bitcoin PoW共识机制已经取得了不错的折衷和取舍。实际上,它确实为开放和复杂网络中的分布式共识问题提供了可行的解决方案。过去十年来,比特币的稳定可靠运行也证明了这一点。

此外,Miller和LaViola在一项研究中对比特币PoW进行了严格的分析和证明,它具有以下特征:

  • 比特币网络可以看作是由大约无限个节点组成。每个节点贡献少量的计算能力,并且相应地,每个节点创建块的可能性较低。
  • PoW机制依赖于同步网络模型。在此模型中,如果网络等待时间为0,则该机制可以容忍50%的故障。但是,从实际观察到的网络延迟来看,比特币可以容忍49.5%的错误。如果网络等待时间等于块生成时间(10分钟),则只能容忍33%的故障。如果网络等待时间接近无穷大,则该机制的容错能力也将接近0。
  • 比特币PoW机制具有可扩展性,因为共识时间和消息复杂性与网络规模(网络中的节点数)无关,而仅与错误节点的计算能力有关,可以将其视为无量纲不变。

PoW机制不仅在实践中可靠,而且可以在理论上进行测试。PoW机制使用同步模型和随机概率来规避FLP确定性异步模型的不可能定理。与PBFT算法O(n2)的复杂度相比,PoW的可伸缩性与网络规模无关,具有很大的优势:节点越多,系统越安全。并且,系统的效率并未降低。

PoW到底是什么?

PoW机制的神奇之处是什么?实际上,您可能知道,PoW的概念并不深远,实际上它并不是中本聪(中本聪)首次提出的。早在1993年,便提出了这个想法来打击垃圾邮件(通过处理或打击垃圾邮件定价)。但是,直到中本聪(中本聪)创建比特币之前,它并未得到广泛使用。PoW的本质在于故意制造障碍并增加参与者的成本,从而最大程度地减少参与者的恶意尝试。例如,请求者需要做一些额外的工作来检测DDoS攻击和垃圾邮件。再举一个例子,很常见的是在登录网站时需要输入验证码,这也增加了登录成本并防止网站受到攻击。这些任务的核心特征是非对称的:对于服务请求者,必须很难完成任务。对于服务提供商,验证任务必须简单,快速。对于比特币PoW,它是非对称的:在不断地反复试验后,在验证找到的随机数是否符合条件之后,要找到使散列符合条件的随机数(随机数)需要大量的计算能力。只需要简单的哈希操作验证。

比特币PoW本质上是一个CPU一票。为什么用CPU代替IP地址?这仍然基于任务的难度。如果使用一个IP一票制,则该系统可以由拥有大量IP地址的人员(例如IP提供者)轻松控制。相对而言,至少在ASIC或FPGA不可用时,CPU还是相对昂贵的硬件,要拥有大量的计算能力(CPU +电力)并不容易。这实际上隐式地为比特币的价值提供了一个现实世界的锚点:虚拟货币系统通过计算能力找到了现实世界的价值锚点,尽管在许多人看来,这种计算能力的消耗是没有意义的,并且浪费了能源。

许多人正在考虑如何降低比特币的开采成本。这种想法当然具有积极意义。PoW的成本需要适当:如果难度和成本都太高,则确实会浪费更多的精力,但是比特币网络的安全性也得到了改善。如果难度和成本都太低,将无法实现防止攻击的目的,并且会降低比特币网络的安全性。这实际上是一个权衡的问题,也是一个主观的价值判断,取决于公众对比特币的理解和定位。价值判断总是充满主观偏见。目前,关于比特币的辩论如此激烈,因为公众尚未达成共识,并且尚未就比特币的未来提出共识。

简而言之,Bitcoin PoW是一整套机制,包括技术上的取舍,经济和游戏方面的考虑,共同确保了Bitcoin网络的安全性和可靠性。

PoW机制的局限性

一切都不尽完美,PoW机制也有其局限性。实际上,我们可以从对比特币的许多批评中了解到一两件事。通常,PoW机制被认为具有以下限制:

  1. 高成本和能源浪费:对比特币能源浪费的批评无休止。根据Digiconomist的数据,比特币的年电力消耗与新西兰基本相同,也相当于澳大利亚电力消耗的1/5。每笔比特币转让交易的成本是每100,000笔Visa转让交易的成本的三倍。尽管这种比较有时是不公平的(比特币交易属于清算,而Visa交易除交易成本外还具有额外的清算成本),但许多人不同意。如前所述,这也是一种主观的价值判断,但这毕竟是一个观点,有时甚至是一个真正的痛点。例如,恐怕没有人愿意用比特币购买一杯咖啡,因为服务费可能比咖啡高。“罪魁祸首”是PoW机制所需的CPU计算功耗。因此,有人不断地尝试改进,甚至提出新的解决方案。
  2. 效率低下:我们习惯于Internet的便利性,并习惯于二级传输和百万级TPS。但是,对于比特币交易,我们可能需要等待数十分钟,并且每秒仅支持7笔交易。我们不是很满意。这种比较也不公平。银行系统在后台只有几个数据中心,最多有数百台机器,并且交易只进入其中一台机器,因此在随后的清算过程中确保了最终的一致性。虽然,比特币没有一点。它协调数万台机器,而交易就是清算。但是,这种低效率确实是事实,有些人正在不断地尝试改进它。例如,增加每个比特币块的大小限制,允许每个比特币区块打包更多交易。这就是比特币现金的作用。再举一个例子,缩短了比特币的区块生成时间,以加快区块生成速度。这就是莱特币的作用。即便如此,由于PoW机制确保网络安全所需的大量PoW成本,因此很难提高网络效率。
  3. 中心化风险:随着ASIC和FPGA等特制挖矿芯片的出现,普通个人PC几乎不可能挖到比特币。挖矿业越来越中心化在具有研究和开发芯片能力的巨型公司中,并且挖矿池的出现(为了使收益平稳,大量节点结成联盟,共同进行挖矿并平等地分享收益)也这种趋势加剧了。另外,比特币块大小限制的增加也将导致需要较大的存储空间来运行所有比特币节点,从而使得比特币不能在普通PC上运行,而只能在特殊的大型计算机上运行。这些中心化趋势无疑会破坏比特币网络的安全性。毕竟,由世界各地的普通PC组成的比特币网络的安全性远高于由几家大型公司直接或间接控制的比特币网络的安全性。尽管在此问题上的争议更大,并且不同的人有不同的看法,但许多人仍在尝试寻找新的解决方案。

PoS

在这些新解决方案中,权益证明(PoS)无疑吸引了最多的关注。它还面临开放和复杂网络中的一致性问题,它提出了一种全新的解决方案。

基本CON

2011年,一个名为QuantumMechanic的用户率先在BitcoinTalk论坛中提出了权益证明的想法。此后,这个想法不断发展和完善,并得到越来越多人的信任。

PoS的基本概念如下:

  • 所有节点不再同时竞争挖矿,但是每次仅使用一个节点作为验证者:在比特币网络中,所有节点都需要执行PoW任务,也就是说,所有节点都需要执行复杂的哈希操作,并消耗大量的CPU计算能力,而只有首先找到答案的节点才能获得奖励。所有节点之间的这种同时竞争无疑将消耗大量资源。那么,一次只能一个节点工作吗?如果是这样,将如何选择幸运者?在PoS中,不再需要挖矿或矿工。相反,一次仅需要选择一个节点作为验证器以验证块的有效性。如果选择一个节点作为验证器来验证下一个块,则它将验证该块中的所有事务是否有效。如果所有交易均被验证为有效,则该节点对该块进行签名并将其添加到区块链中。作为回报,验证者将收到与这些交易相关的交易费用。在PoS中,每个共识中只有一个节点起作用,并且工作非常容易,从而达到节省资源的目的。
  • 要成为验证者,必须提供保证金:为了防止验证者恶意行为,节点必须提前将令牌存储到指定帐户中作为保证金或质押担保才能成为验证者。一旦发现该节点有恶意行为,便会没收保证金,从而鼓励诚实工作。只要来自恶意行为的收益不超过存款限额,该节点就会诚实。
  • 当选为验证人并非完全随机,而是与所提供的存款金额成正比。例如,爱丽丝提供了100个硬币的存款,而鲍勃提供了500个硬币的存款,那么随机选择鲍勃作为验证器以产生下一个区块的概率是爱丽丝的5倍。这实际上类似于股份公司,股份公司根据出资比例对权利(例如发言权和受益权)进行划分。大股东贡献更多,承担更多责任,并获得更大的相应回报。

0U1PtBHT9sXToWJ_s

PoW和PoS比较图

 

显而易见,PoS还采用了经济学和博弈论的思想,并通过激励政策和惩罚机制确保了网络的安全性和可靠性。

PoS为什么起作用?

PoS协议仍然符合传统拜占庭容错(BFT)算法的结论。目前,对PoS的研究可分为两条主线:一条用于同步网络模型,另一条用于部分异步网络模型。基于链的PoS算法几乎总是依赖于同步网络模型,并且可以像PoW算法一样严格证明其有效性和安全性。作为参考,请参阅本文档

另外,从CAP角度来看,基于链的PoS算法类似于PoW算法,它也尽可能地提高了容错能力,并且在可用性和一致性之间确保了可用性。

如果传统的共识算法(Paxos,Raft和PBFT)实现了确定性的确定性或一致性,则PoS类似于PoW,而是寻求概率性最终一致性。从传统CAP的角度来看,这实际上是一致性的削弱。但是,从实际可行性的角度来看,这也是一个崭新的思维和突破。

从PoS的设计策略来看,它可以分为两种类型。作为参考,请参见本文

  • 第一种是前面提到的基于链的PoS。它主要模仿PoW机制,并通过伪随机地将区块创建权分配给利益相关者来模拟挖矿过程。典型的代表包括PeerCoin和Blackcoin。从PoW的类比可以看出其安全性和有效性。
  • 另一种类型是基于BFT的PoS,它基于近30年的BFT共识算法研究。Tendermint最初提出了基于BFT算法设计PoS的想法。以太坊2.0中的Casper也遵循了这一传统,并进行了一些修改和改进。通过参考BFT算法可以看到这种类型的PoS算法的安全性和有效性。例如,可以从数学上证明,只要诚实地遵循协议的参与者中超过2/3个节点,该算法就可以确保最终状态下不存在冲突块,而与网络延迟无关。但是,这样的算法也不是完美的,尤其是对于51%的攻击,这还没有完全解决。目前,该领域仍处于公开勘探阶段。

关于PoS的辩论

PoS的概念并不复杂,更容易受到批评的是与现实世界相似的系统,它根据出资比例获得收入。人们已经对现实世界中的马太效应产生了戒心。该系统导致富人变得更富裕而穷人变得更穷的结果:拥有更多代币的人将有更多机会成为验证者,从而参与网络并获得更多收入。

但是,关于此问题的观点极富争议性,许多人提出了完全不同的观点,他们认为PoS比PoW更公平,更有利于应对中心化趋势。主要原因是PoW挖矿依赖于现实世界中的物理硬件和电力资源,这很容易导致规模经济。与购买1台挖矿机的个人相比,购买10,000台挖矿机的公司具有更大的议价能力,甚至可以以较低的成本开发自己的挖矿机。而且,拥有10,000台挖矿机的矿山具有更高的议价能力,可以在电费低的国家和地区迁移到电站附近,甚至可以以更低的成本建造自己的电站。结果是组织规模越大,综合挖矿成本越低,这恰恰是现实世界中发生的事情。相比之下,PoS不需要依赖现实世界中的硬件,也没有规模经济优势。如果不考虑价格操纵,则1个硬币的价格和10,000个硬币的价格线性增加。从这个角度来看,PoS可能更公平,更有利于权力下放。

PoS的另一个问题是它的安全性。毕竟,PoS不再像PoW那样执行复杂的CPU操作来证明自己。在PoW中,如果要发起攻击,则需要控制51%的计算能力(最近,一些研究发现,只有25%的计算能力才能使攻击成为可能),这意味着大多数挖矿需要机器和计算能力资源。在PoS中,如果要控制整个系统,则需要所有令牌的51%。哪一个更安全?实际上,这并不容易说出来,但是从一个现实世界的例子来看,如果将比特币算法转换为PoS,则控制比特币系统需要大约一半的比特币市值,即大约40-1600亿美元。美元(比特币的价格范围:5,000–20,000美元)。这个数字远远高于挖矿机的成本。如此巨额的攻击几乎是不可能的。在这方面,PoS可能更安全。

此外,由于PoS部署的成本低(硬件要求低),在现实世界中可以轻松地分叉令牌,从而产生大量的山寨币。PoW中不存在此问题。PoW依靠硬件进行挖矿,因此很容易更改比特币的参数。但是,如果您真的想运行它,则需要大量的计算能力并需要大量矿工的支持。例如,从比特币分叉比特币现金经历了波折。PoS完全没有这样的担忧。任何人都可以下载开源代码并随意更改。通过赢得几个节点的支持,他们可以声称自己已经创建了一个全新的令牌。例如,可以轻松地从EOS(令牌名称)中派生数十个或数百个山寨币,每个山寨币都声称是唯一的。这确实是事实,

PoS:改进和优化

PoS机制最重要的部分是下一个块中验证者或创建者的选择机制。谁将是幸运的人?上述根据账户资金比例和概率的选择实际上是最简单的方法。这种方法的确很容易导致富人一劳永逸地获得收入,从而损害了网络中其他参与者的热情。当前,有许多想法可以改善这个问题,其中更有趣的是基于硬币年龄的方法。选择创建者时,不仅要考虑资金数额,还要考虑币龄。所谓的币龄是指硬币在账户中的保留时间。例如,如果将1个硬币转移了10天到指定的帐户中,则可以认为该硬币的年龄为10岁,每次硬币所在的帐户更改时,硬币年龄将从0重新计算。以这种方式,可以限制具有大量资金的节点频繁地成为创建者。例如,可以设置为只有硬币年龄为30的节点才有机会成为创建者,并且在节点成为创建者之后将立即清除硬币年龄。这实际上限制了大型参与者的利益,并为中小型参与者提供了更多机会。可以设置为只有硬币年龄为30的节点才有机会成为创建者,并且节点成为创建者后将立即清除硬币年龄。这实际上限制了大型参与者的利益,并为中小型参与者提供了更多机会。可以设置为只有硬币年龄为30的节点才有机会成为创建者,并且节点成为创建者后将立即清除硬币年龄。这实际上限制了大型参与者的利益,并为中小型参与者提供了更多机会。

著名的基于PoS的解决方案改进方案是委托代理证明(DPoS),其中采用了代理委派机制。在DPoS中,不再可能所有节点都成为创建者。相反,节点会互相投票,只有投票最高的节点才能参与块创建过程。详情如下所示:

  • 代理的职责包括确保其自身节点的连续运行,收集交易信息并将其打包为块,验证签名和广播块以及解决网络中可能存在的一致性问题。
  • 对于大多数DPoS链,网络中的所有令牌持有者都可以为代理投票,投票权与所持有令牌的数量成正比。代币持有人还可以将其投票权委托给其他人以代表他们投票,而不是直接投票。
  • 投票是动态的和可变的,这意味着可以随时选择代理的选举。一旦发现代理人是恶意的或欺诈性的,他/她将失去收入和声誉。这可以激励代理诚实并确保网络安全。代理可以将接收到的块奖励按比例分配给为其投票的用户(这实际上等同于购买投票,在某些情况下是不允许的)。
  • 与传统的PoS不同,代理不再需要持有大量代币,而是必须相互竞争才能赢得代币持有者的投票。
  • DPoS限制了事务块中验证者的数量,这在一定程度上牺牲了去中心化性,但提高了效率,因为在网络上达成共识所需的工作量大大减少了。

0L2RNF3Xb5OKXObjW

在DPoS中选择验证者/证人的过程

 

不难发现,DPoS通过引入投票机制确保了节点的广泛参与。并且,通过限制验证器的数量(通常为21-101),该系统尽可能高效。尽管存在巨大争议,但DPoS仍然是一种可行的解决方案,越来越多的区块链系统也在尝试改进和探索它。

在公共区块链中的应用

在公共区块链中,许多项目都采用PoS机制。著名的是:

  • 以太坊:目前,以太坊仍然使用PoW机制。但是,以太坊的创始人,公共区块链领域的领导者Vitalik Buterin更受PoS机制的青睐,并且还详细阐述了PoS的设计理念(参见此博客)及其相对于PoW的优势(参见本文)) 多次。以太坊目前正在开发基于PoS的Casper协议(请参阅本文以供参考),预计将于今年下半年发布。从PoW到PoS的转变也标志着以太坊2.0时代的开始。如下图所示,在以太坊2.0 PHASE0中,将使用Casper协议的PoS信标链作为协调层发布(请参阅此网站) 以供参考)。

0imLiiYgTL9NTOtoZ

以太坊2.0层和阶段

 

  • EOS:DPoS的发起人Daniel Larimer发起了EOS公共区块链项目,该项目中许多节点将相互竞争,希望成为21个拥有会计权的超级节点之一。这种类似于现实世界理事会系统的设计引起了极大的争议,超节点选举也可能包含巨大的商业利益,这超出了技术讨论的范围,在此不再讨论。

X的证明?

实际上,PoS机制的兴起不仅归因于其自身的特性,例如低成本,高效率和去中心化,而且还因为它为使用博弈论机制设计的更多技术打开了大门。更好地阻止中心化卡特尔的形成,如果形成的话,则不鼓励采取对网络有害的方式行事。

随着区块链特别是公共区块链的飞速发展,近年来,其他X的证明?这种机制也正在出现。从上面的许多机制中,我们可以看到PoS概念的阴影,即如何从经济和博弈论的角度设计系统,以尽可能确保去中心化,安全和高效。以下是这些机制的简要说明:

  • 租赁权益证明(LPoS):许多令牌很少的节点可以将令牌租给其他节点,从而形成联合力量并增加了成为验证者的可能性。一旦节点赢得选举并获得奖励,服务费用将按比例分配,这实际上类似于挖矿池的想法。
  • 经过时间证明(PoET):所有节点必须等待一定时间才能成为簿记员,并且等待时间是完全随机的。为了确保公平,两个核心问题是:如何确保轮候时间确实是完全随机的?如何确保某个节点确实等待了指定的时间?当前的解决方案依赖于Intel特殊的CPU硬件Intel SGX系统。当前,它只能在许可的网络环境中使用,例如上述的企业以太坊联盟(EEA)。
  • 活动证明(PoA):PoA结合了PoW和PoS思想。在PoA中,初始过程与PoW相似。矿工仍在争夺解决问题和挖矿的竞争,除了挖出的块仅包含标头信息和矿工的地址。一旦挖出一个块,系统将自动切换到PoS模式。区块头信息指向随机权益持有者,后者验证预挖出的区块。
  • 重要性证明(PoI):鉴于PoS机制倾向于鼓励人们持有硬币而不是流通硬币,并倾向于导致富人变得更富裕的问题,因此PoI在计算的重要性中包含了更多维度系统的节点:除了硬币数量和硬币在帐户上的保留时间外,交易对手(与其他帐户的净交易越多,得​​分越高),以及最近30个交易的数量和大小天(交易越频繁,金额越大,得分越高)也被考虑。
  • 容量证明(PoC):也称为空间证明(PoS)。这个想法类似于PoW,但是它是通过存储空间而不是CPU计算能力来衡量的。
  • 销毁证明(PoB):矿工必须销毁一定数量的代币,这意味着将一定数量的代币转移到食人者地址(黑洞地址,其中代币只进出但不出场,即带有未知的私钥)以证明自己。从本质上讲,它与PoW的想法很接近。区别在于PoW消耗计算能力资源,而PoB直接消耗令牌。
  • 权重证明(PoWeight):PoWeight基于PoS中令牌数量的考虑,会考虑更多权重因素。例如,FileCoin(IPFS分布式文件系统上的令牌)考虑了您拥有的IPFS数据的大小。其他加权因子包括但不限于时空证明(PoSt)和声誉证明(PoR)。

0ppZHsrrzEdkN67kj

共识算法概述

 

可以看出,尽管X的证明?机制层出不穷,彼此不同,要解决的核心本质问题是一样的:谁将是一个记账的幸运者?这些机制只是采用不同的策略来制定游戏规则,因此节点可以尽可能公平地证明自己,而幸运的节点可以被公平地选择。所有这些策略,包括CPU计算能力,持有的令牌数量,存储空间大小,随机等待时间,已销毁的令牌数量,节点活动和节点贡献,都是在特定情况下对开放网络中一致性问题的探索。

关于信任的一切

从PoW到PoS,再到“ X(您能想到的一切)”的证明,无许可网络中的一致性问题一直在研究中。“一致性”的含义也在发生变化,从如何防止网络和机器硬件故障以确保网络节点之间的数据一致性,到如何防止开放网络中的人员恶意行为以确保数据的真实一致性,“一致性”的含义也在发生变化。节点之间。可以说,我们已经从硬件的可靠性转向了“人的可靠性”,公共区块链技术也被视为“信任机器”。但是,“人的可靠性”问题太复杂了,甚至超出技术范围。在现阶段可以做的还远远不能确保“人们的可靠性”。但是,在大多数情况下,它仍然处于人们对机器和协议的信任阶段。幸运的是,我们终于迈出了这一步,开始面对这个棘手的问题,探索创新的解决方案。

0DgQ9Ded4HoCw4nX7

信托机

 

摘要

世界充满不确定性,计算机科学也是如此。自计算机出现以来,我们必须面对机器硬件的不确定性:意外故障可能引起的问题。并且,由于Internet的兴起,我们必须面对网络的不确定性:可能的延迟,混乱和通信消息丢失。解决不确定性问题最自然的方法是冗余。使用大量节点来确保系统的整体安全性,避免单点故障(SPOF)并增强容错能力和攻击防御能力。在此基础上,大规模的分布式网络正在蓬勃发展。在不确定的网络和节点之间找到确定性并协调许多节点之间一致性的方法,正是分布式共识算法需要解决的问题。能够处理故障类型错误的CFT算法包括最经典的Paxos算法和更简单的Raft算法。当网络中的正常节点超过一半时,可以保证算法的有效性。这些算法通常在具有受信任环境的封闭网络中使用,以协调多个节点到数十个节点之间的一致性,例如公司内的分布式存储,分布式服务协议和分布式消息系统。此外,它们还可以应用于由一些需要访问授权的组织组成的私有链网络。能够处理故障类型错误的CFT算法包括最经典的Paxos算法和更简单的Raft算法。当网络中的正常节点超过一半时,可以保证算法的有效性。这些算法通常在具有受信任环境的封闭网络中使用,以协调多个节点到数十个节点之间的一致性,例如公司内的分布式存储,分布式服务协议和分布式消息系统。此外,它们还可以应用于由一些需要访问授权的组织组成的私有链网络。能够处理故障类型错误的CFT算法包括最经典的Paxos算法和更简单的Raft算法。当网络中的正常节点超过一半时,可以保证算法的有效性。这些算法通常在具有受信任环境的封闭网络中使用,以协调多个节点到数十个节点之间的一致性,例如公司内的分布式存储,分布式服务协议和分布式消息系统。此外,它们还可以应用于由一些需要访问授权的组织组成的私有链网络。这些算法通常在具有受信任环境的封闭网络中使用,以协调多个节点到数十个节点之间的一致性,例如公司内的分布式存储,分布式服务协议和分布式消息系统。此外,它们还可以应用于由一些需要访问授权的组织组成的私有链网络。这些算法通常在具有受信任环境的封闭网络中使用,以协调多个节点到数十个节点之间的一致性,例如公司内的分布式存储,分布式服务协议和分布式消息系统。此外,它们还可以应用于由一些需要访问授权的组织组成的私有链网络。

但是,不仅网络和机器本身不确定,而且人们控制网络中节点的行为也不确定。在攻击者未经授权擅自更改数据或攻击网络的情况下,保证分布式网络一致性的方法正是BFT算法需要解决的问题。最常见的BFT算法是PBFT算法。当网络中的普通节点超过1/3时,可以保证算法的有效性。即便如此,PBFT处理网络中恶意行为的能力仍然受到限制,并且随着网络中节点数量的增加,其性能也会显着下跌。这些限制也导致PBFT算法只能在具有更可靠环境的许可网络中使用,

但是,在无许可的开放网络中,不确定性问题更加严重,尤其是网络节点后面人员的行为的不确定性。防止网络中的控制器因腐败和串通而形成大亨,从而控制网络中一半以上的节点并达到控制,破坏和攻击网络的目的的方法是解决该问题的方法。开放的网络。从这个角度来看,开放网络中的一致性还暗含了安全性的前提:不仅要求节点之间可以达成共识,而且共识实际上是由许多节点控制器的真实表达形成的。为了实现这种一致性和安全性,不仅有必要实现物理硬件节点的结构去中心化,而且还要确保尽可能去中心化在节点后面的实际控制器。为此,必须确保:任何人都可以随时部署和运行网络协议以成为网络中的节点,并且可以随时访问网络;确保节点之间的对等通信,而无需任何中心化控制节点;并确保节点的角色完全相同,并且所有节点都可以按照规则公平地参与计费。协调开放网络中数以万计的节点之间的行为以确保网络的一致性和安全性的方法是公共区块链共识机制要解决的问题。其中最典型的是比特币发起的PoW共识机制,以及随后的PoS共识机制。

从封闭式分布式网络环境中的一致性到许可的私有链场景中的一致性,再到无许可的公共区块链开放网络环境中的共识机制,问题变得越来越复杂,挑战也越来越多,更严重。从纯粹的技术角度来看,对共识的研究是相同的。在传统的分布式共识理论研究中,这些共识算法或共识机制也受到FLP不可能和CAP定理的限制。Paxos,Raft和PBFT都强调容错能力和安全性/一致性,并削弱活动性和可用性。PoW和PoS从全新的角度考虑问题,从而尽可能确保容错能力,活跃性和可用性,

另外,从节点之间简单的数据一致性到强调节点之间人们之间的共识和识别,从确保网络和硬件的可靠性到确保后面人们的可靠性,对共识的思考也在不断加深。尽可能组成网络的节点。尽管人与人之间的可靠性非常复杂,并且超出了纯粹的技术范围,但令人欣慰的是,我们已经踏上了道路,而在这一领域不断进行的创新和积极探索必将使世界变得更加可靠。

原文 Aliyun
提示:投资有风险,入市需谨慎,本资讯不作为投资理财建议。请理性投资,切实提高风险防范意识;如有发现的违法犯罪线索,可积极向有关部门举报反映。
你可能还喜欢