Understanding the Nakamoto Consensus | Cardano Explorer (cexplorer.io)
卡尔达诺使用中本聪共识的一种变体,称为衔尾蛇。 它是一种权益证明(PoS)共识,采用中本聪为比特币发明的基本原理。 Ouroboros 旨在提供与工作量证明 (PoW) 类似的安全保证,同时更加节能。 在本文中,我们将解释中本聪共识的基本原理,并重点介绍 PoW 和 PoS 之间的差异。 重点将放在原则和基本机制上。
中本聪共识
中本聪共识是由比特币的化名创造者中本聪发明的。 它是拜占庭将军问题的解决方案,该问题询问是否有可能在独立节点的分布式网络中达成共识。
Ouroboros 旨在提供与比特币类似的安全保证,同时更加节能。 比特币的 PoW 和卡尔达诺的 PoS 共享中本聪共识的共同原则,尽管它们的机制和实现有所不同。
PoW 和 PoS 之间的主要区别在于它们如何实现这些原则。
PoW 要求矿工使用计算能力解决复杂的加密难题,以向区块链添加新区块。
PoS 根据他们拥有或已委托给他们的 ADA 币数量来选择区块(矿池)的生产者来铸造新区块。
根本区别在于 PoW 和 PoS 共识机制使用的昂贵资源。
PoW 需要大量的哈希率(计算能力)才能运行。 这会消耗大量的能量。 电力是一种昂贵的可再生资源。 数量不限。
PoS 更节能,因为数字硬币被用作资源。 电力仅用于运行节点。 ADA 币是一种昂贵、不可再生且稀缺的资源。
不同昂贵资源的使用影响了中本共识原则的实施。 PoW和PoS共识都采用不同的机制来实现出块定时、随机性、安全性、去中心化、包容性、平等性等。
PoW 和 PoS 在个别要素上有所不同,但就中本聪共识的原理而言,两种共识非常相似。
我们不会处理文章中的所有元素。 我们主要关注如何达成共识。 在我们开始讨论之前,让我们先解释一下必要的理论。
共识有什么用?
分布式网络中共识的目的是确保所有可能分布在不同位置的参与节点在缺乏中央权威的情况下就网络的单一状态达成一致。
该协议允许网络保持账本状态的一致和可靠。 网络必须定期达成协议,从而允许更改账本的状态。
在区块链网络中,状态通过添加新块来改变。 用户交易被插入到区块中。 就卡尔达诺而言,证书也可以插入到区块中。
我们所说的共识是什么意思?
共识可以指一组规则,使分布式网络中的节点能够达成相互一致(通过相互交换信息并做出自主决策)。
这些规则被编码在网络协议的源代码中。 协议本质上是一个蓝图,而客户端就是实现这个蓝图的软件。 通过在计算机上安装客户端,用户成为为分布式(去中心化)网络运营做出贡献的节点。
共识也可能特指这个协议过程的实现,比如通过PoW或者PoS机制。
所以,共识可以是网络达成一致的能力,也可以是具体的执行。 同一个术语可以同时指代一种能力和一种工具。
在图中,您可以看到客户使用 Ouroboros PoS 共识,这使他们能够就改变账本状态达成共识。 请注意,分类账是每个客户的一部分。 所有节点上都发生状态更改。
网络共识要求
在我们开始解释中本聪共识之前,有必要解释一下分布式网络的各种网络共识所强加的一些重要方面。
共识机制必须确保网络即使在存在故障或恶意节点的情况下也能正确运行。 想要破坏达成共识的能力从而破坏网络的恶意行为者可以随时加入开放网络。
网络中的多个节点可能由于各种原因同时离线。
在去中心化网络中,任何拥有昂贵资源(比特币算力或卡尔达诺代币)的人都可以获得权力份额(即参与达成协议)。
网络的可靠性和安全性基于这样的假设:诚实的参与者持有大部分昂贵的资源恶意行为者需要破坏共识。
另一个假设是,如果很多节点突然离线,仍然有可能达成共识。 并非每种类型的共识都能提供这一点。
网络应该能够处理网络和参与节点中的故障和错误,而不影响系统的整体功能。 网络必须具有容错能力。
所有非故障节点最终必须就账本的相同状态达成一致,以确保整个系统的一致性和完整性。 网络不能陷入状态分裂成两个不同状态的情况(区块链可以分叉成两个竞争链)而无法处理这种情况。
从图中可以看到,直到区块 N+3 为止,网络都保持着账本的统一状态。 之后,状态就变得模糊了。 有一对高度相同的块 N+4 和 N+5。
在给定时刻,不可能确定哪个账本的状态是有效的。
协议规则必须为每种可能性做好准备并确保状态一致性。 如果出现状态分裂,网络必须能够检测到问题并确定性地决定哪个状态是正确的(较长的链规则)。
在图中,您可以看到网络丢弃了较低的块 N+4 和 N+5(它们是孤立的)。 新块 N+6 和 N+7 添加到上块 N+5 后面。 该链获胜并代表账本当前(商定的)状态。
每个无故障的流程最终都必须做出决定,以确保共识协议最终能够得出结论。 换句话说,网络绝不能陷入不知道如何达成共识的情况。 必须保证连续性。
如果网络在添加一对 N+5 块后停止,并且无法以决定哪个状态是正确的方式添加另一个块,则中心化实体(团队)将不得不进行干预。 这是不希望的。
安全性和活力
安全性和活跃性是确保网络正确、安全运行的两个关键属性。 构建网络共识的团队必须平衡这些属性。 他们必须决定他们更喜欢哪一个。
让我们描述一下这些属性。
安全是指保证网络不会达成错误的协议。 换句话说,它确保任何被一个正常运行的节点视为最终的交易最终将被每个正常运行的节点视为最终的。 这也意味着两个正常运行的节点认为最终的两个交易不会发生冲突。
在极端情况下,这可以解释为网络更愿意停止共识而不是错误的交易结算。 在优先考虑安全性而非活跃性的网络中,避免分叉至关重要,因为分叉意味着账本状态存在分歧,这可能导致安全违规。
对于这样的网络来说,丢弃交易是非常不可取的,因为它可能会破坏系统的信任和可靠性。 用户希望他们的交易一旦被包含在区块中并附加到区块链上,就是最终的且不可变的。
您可以在图片中看到这种不良情况。 网络创建了两个区块 N+4,每个区块中都有不同的交易(小红框和蓝框)。 网络必须丢弃包含交易在内的 N+4 个区块之一。
这些与偏好活跃性而非安全性的网络的要求不同。
活跃度是网络不断进步而不停滞的保证。 这意味着只要还有尚未最终确定的交易,已确定交易的集合就会不断增长。 它确保每笔交易最终都会由所有诚实节点进行结算。
优先考虑活跃性而非安全性的网络在分叉时不会停止。 相反,它允许两条链暂时存在,并依赖网络参与者继续在他们认为正确的链之上进行构建。 换句话说,账本的不一致状态是暂时可以容忍的。
在图中,您会看到与上面类似的情况。 网络规则允许这种情况。 较低的区块N+4被丢弃(包括红色交易)。 添加一个块 N+5,其中插入了红色交易。 这两笔交易最终都在区块链中。
我希望您知道哪个财产更喜欢使用中本聪共识的网络。 卡尔达诺和比特币都优先考虑活跃性而不是安全性。
这种设计选择在共识处理区块链分叉的方式中显而易见。 在中本聪共识中,当分叉发生时,节点被指示遵循最长的链。 该规则确保网络继续取得进展并扩展区块链,即使存在暂时的分歧或分叉。
然而,这种方法可能会导致暂时的安全违规,例如当两个矿工大约在同一时间开采一个具有相同高度的区块时,就会导致分叉。 在卡尔达诺中,可以同时选举两个插槽领导者。
作为最长链规则的一部分,网络最终将收敛于这些区块(链)之一,但在此之前,交易历史可能存在相互冲突的观点。 随着共识继续添加新区块,安全属性最终得到恢复。 一条链变得比其他链长得多,使其成为普遍接受的链。
虽然中本聪共识的目标是提供安全性和活跃性,但它的目的是确保网络即使在遇到暂时的分歧或网络问题时也能保持活跃并能够处理交易。 随着区块链的发展,安全性得以实现,深度重组的可能性变得可以忽略不计。
概率最终性
安全性和活跃性与中本聪共识的概率最终性相关。
概率最终性是指交易的最终性在插入新区块时并不是绝对的。 随着更多的区块被添加到包含交易的区块之上,交易的最终确定性变得越来越有可能。
安全性和活跃性通过以下方式与概率最终性相关:
安全性意味着一旦一笔交易被包含在一个区块中,并且在其之上添加了多个区块(加深了其在链中的地位),该交易被逆转的可能性就会变得非常低。
然而,它并不是零。 出现更长的竞争链的可能性总是很小,尽管概率随着每个额外块的增加而呈指数下降。
活跃性确保交易最终得到确认并添加到区块链中。 只要矿池(区块的生产者)继续通过添加新区块来扩展区块链,网络就会表现出活跃性。
交易不保证被包含在下一个区块中,但只要它们有效并且网络继续运行,它们最终就会被包含在内。
与其他重安全轻活跃的网络共识相比,中本聪共识的结算速度较慢。
用户必须等待网络在插入其交易的区块之上添加几个区块。 只有添加更多区块后,交易才不可逆转。 每个其他新添加的块(在包含用户交易的块的顶部)都代表与账本状态的协议。 我们稍后会详细介绍。
图为Alice的交易(小蓝框)被插入到区块N+3中。 交易的最终性为 0,因为尚未添加更多区块。 随着每个附加块的添加,交易(以及块 N+3)的最终性也会增加。 一旦添加了 N+4 块,最终性就是 1,依此类推。 如果Alice需要3个区块作为足够数量的确认(另外3个区块生产者同意区块N+3),她可以认为交易在区块N+6中完成(不可逆转)。
注意:交易的最终性可以被视为二进制值。 因此,交易要么是最终的(永远写入区块链中),要么不是最终的。 这就是为什么我们经常谈论确认数量。 您的交易中每个添加的块都代表一次确认。 在区块 N+6 中,交易有 3 个确认。 如果 Alice 认为对于金额较小的交易来说,这已经足够了,她可以认为交易已完成。 区块链重组仍然可能发生,但概率较小。
优先考虑安全性而非活跃性的网络可以更快地获得国家同意。 也就是说,不是通过添加区块,而是通过在添加区块之前或之后不久进行某种形式的投票。 这种共识通常需要大量节点积极参与每个区块的投票。
只有能够在短时间内获得大多数节点对新状态(区块)的认可,才能快速实现交易的最终确定。
让我们以中本聪的方式生产一个新的区块
我们说过,共识是指节点之间就改变账本状态达成一致。 中本聪共识可以简单描述如下。
在给定的时间间隔内,让我们随机选择网络中一个有权生成新块的节点。 该块将被广播到网络。 如果另一个随机选出的节点同意该块,它将在该(最新)块之上附加其新块。 如果不同意,它会在前一个块的顶部附加一个新块(所以不是在最新块之后)。
我们来描述一下下面这张图。
Alice 添加了区块 N+2。 该块将被网络中的其他节点接收,因此 Bob 和 Carol 也会收到它。 鲍勃被随机选举为下一个区块生产者。 他在块 N+2 之后附加块 N+3(绿色)。
颂歌接收 Bob 生成的区块 N+3。 她被随机选为下一个区块生产者。 卡罗尔有两个选择。 她可以在现有块 N+3 之后附加块 N+4。 这是预期的情况(因为账本中不会出现不一致)。 但她不喜欢鲍勃的 N+3 块。 因此,她决定在块 N+2 之后附加块 N+3(红色)。
这将在区块链中创建一个分叉(账本的状态现在不一致)。 另一个随机选出的区块生产者可以决定是否在红色或绿色区块 N+3 之后追加新区块。
有两个函数是添加块的关键。 确定何时添加新块以及由谁生成它。 因此,需要协议定时和节点随机化功能。
仅在提出新状态后,节点之间才会达成一致。 其他节点通过在前一个块之后附加一个新块,以较长的延迟同意更改。 无法同时从所有节点获得协议,而只能从单个节点(将被选为下一个区块生产者)获得协议。 达成一致是一个渐进的过程。
在状态改变应该发生之前,节点并没有就状态改变达成一致。 相反,随机选出的节点会权威地提出更改并假设其他人会同意。 如果该块有效,其他节点很可能会同意。
区块生产者被激励提出一个有效的区块,因为这是获得奖励的唯一途径。
每一轮都有一名提议者和多名批准者。 网络中的节点接受有效块,因为它们没有理由丢弃它。 如果节点丢弃有效区块,例如,Alice 生成的所有区块,网络中就会出现分叉(从而导致账本不一致)。 这是不希望的。
添加新块的过程包括以下步骤:
随机选举区块生产者。
由随机选出的节点生成新块。
由生产者将块广播到网络。
区块的验证及其可能的接受。
与第一步相同的过程。
卡尔达诺和比特币的过程是相同的。 尽管每个项目使用的共识不同,但它们并没有本质上的不同。 让我们描述一下差异。
差异在于协议时间和区块生产者的随机选举。
比特币被设计为大约每 10 分钟产生一个新区块。 网络大约每两周(2016 个区块)调整一次挖矿难度,以维持这个区块时间。 这种调整可确保即使网络的哈希率(用于挖掘的总计算能力)发生变化,生成块所需的时间也保持一致。
随机选举基于解决计算要求较高的数学任务(密码谜题)。 想要挖掘新区块(矿池)的节点在收到新区块时就开始解决任务。 所有节点大致在同一时间启动(网络延迟)。 首先解决任务的节点立即创建一个新块并将其广播到网络。
请注意,所有池都解决相同的任务,但只有一个池可以成功。 一旦池收到新的有效块,它就会停止处理当前任务并开始解决新任务(挖掘新块)。
有时,一个任务会同时解决两个池问题。 这种情况下,就会出现区块链的分叉,可以通过上述机制来解决。
在比特币中,添加新区块的过程包括以下步骤:
所有矿池(有矿工)开始开采新区块。
一个池子找到了密码难题的解决方案。
池创建一个块并将其广播到网络。
其他节点和池验证该块。
与第一步再次进行相同的过程(如果该块有效)。
卡尔达诺将时间划分为一秒的时隙,并使用现代密码学,即可验证随机函数(VRF)进行随机选择。
所谓的槽领导者不是由所有节点求解计算机密集型数学运算,而是由数学和随机输入决定。
每个节点在每个时隙中验证它是否已成为时隙领导者。 如果是这样,它就会铸造一个新区块。 没有中央机构来控制投票。 节点通过存储在区块链中的证书注册投票。 节点可以完全自主地验证自己是否已成为时隙领导者。
每个节点需要计算其阈值数。 它是根据股份的大小得出的。 质押由运营商(质押)和所有质押者的 ADA 币组成。 权益越大,矿池在给定时期内可能产生的区块就越多。 这与我们在比特币中观察到的原理相同。 委托给矿池的算力越多,矿池开采的区块就越多。
每个池每秒都会使用 VRF 算法来获取 VRF 输出。 VRF 输出与阈值进行比较。 如果 VRF 输出小于阈值,则该池已成为时隙领导者并获得铸造新区块的权利。
在卡尔达诺中,添加新区块的过程包括以下步骤:
在每个槽中,所有池都会验证它们是否已成为槽领导者。
时隙领导者铸造一个新区块并将其广播到网络。
其他节点和池验证该块。
与第一步再次进行相同的过程(如果该块有效)。
正如您所看到的,这与比特币的过程相同。
与比特币类似,可能会在 20 秒(卡尔达诺的出块时间)内选举出多个插槽领导者。 甚至有可能在同一个槽位中选出 2 个槽位领导者。 与比特币类似,使用较长的链规则来解决区块链的分叉。
VRF 选举的输出是一个数字,用于决定在区块链分叉时遵循哪个链。
其他差异之一是激励模式。 每个新区块中的比特币奖励池(矿工)。 卡尔达诺每 5 天(纪元)奖励一次所有权益池运营商和权益持有者。
我们会发现许多类似的细微差别。
例如,当验证一个块时。 就比特币而言,数学任务已解决的证据得到了验证。 就卡尔达诺而言,验证该块来自被选为槽领导者的节点的证据(验证其他内容,例如 KES 签名)。
在这两种情况下,都可以确保分类账的状态不会被欺诈节点任意更改。 在比特币中,欺诈节点必须花费巨大的计算能力来创建新的欺诈区块。 在卡尔达诺中,欺诈节点必须破解密码,这也需要巨大的计算能力。
两种方法都有类似的安全保证。
通过密码学,卡尔达诺可以在给定的时间间隔内更有效地随机选举时隙领导者,并确保除了当选的时隙领导者之外没有人可以向区块链添加新区块。 比特币需要消耗大量的能源。
结论
中本聪共识的交易终结性较慢,但非常稳健。 如果大量节点离线,网络仍然能够产生区块(尽管速度较慢)。
卡尔达诺和比特币在去中心化、安全预算、平等主义、包容性等许多方面都有所不同。
例如,中本聪共识不能直接影响去中心化的质量。 在比特币网络中,超过50%的区块仅由两个矿池产生,而在卡尔达诺网络中,有超过1000个矿池。 这是由于不同的奖励机制(池饱和的概念很重要)。 比特币并不关心是有一个区块生产者还是 1000 个。卡尔达诺协议知道它的去中心化,并且可以在经济上激励它的增长。
去中心化是分布式网络的一个关键特征。 网络共识的主要目标是使相对大量的区块生产者(可以是数百到数千)达成一致。 网络各个属性的质量由各种元素和细节的组合决定。 中本聪共识是比特币和卡尔达诺的关键要素之一,但还有其他要素。
奖励机制、包容性和平等主义影响去中心化。 这就是 PoW 和 PoS 根本不同的地方。 与挖矿不同,质押的进入门槛更小,风险更小,并且世界上每个人都可以使用。 这只是众多差异之一。