区块链教程

Chapter 3 Consensus Algorithms

| 关于   «  3.1. 共识算法简介   ::   目录   ::   3.3. 许可共识算法  »

3.2. 无许可共识算法

3.2.1. 简介

在本模块中,我们介绍无许可共识算法的例子。 回忆一下,共识算法是社区就添加到区块链的区块达成一致的方式。 在无许可系统中,社区的任何成员都可能提议添加下一个区块。 由于历史上这些共识算法是为特定加密货币开发的,并且主要与其关联,人们经常混淆共识算法与其相关加密货币的区别。 原则上,加密货币可以修改甚至完全替换其共识算法(如以太坊提议的那样)。

3.2.2. 原始:工作量证明与比特币

比特币的共识协议称为 工作量证明。 之所以这样称呼,是因为某人必须"做工作"来获得定义区块链中下一个区块的权利。 在比特币中,这是通过"解决"一个"困难"的密码学谜题来完成的。 实际上,"解决一个困难的密码学谜题归结为猜测直到你足够幸运。 这将在下面解释。 但首先,让我们解释什么是 随机数。

3.2.2.1. 什么是随机数?

随机数是添加到区块内容中的数字,其目的是改变区块的哈希值以实现某些目标。 通常,随机数用于依赖称为工作量证明的应用。 比特币加密货币就是这种系统的一个例子。 工作量证明背后的理念是,系统的参与者平均需要花费一定的努力才能找到具有所需属性的哈希值。 这样做的原因在我们讨论共识算法时解释。 现在,只要知道我们使用随机数来改变区块的哈希值。

随机数的目的是与区块其余部分的数据一起工作,使哈希值具有某些属性,通常是小于某个阈值。 例如,系统的要求可能是所有区块哈希值的前导数字为零。

回忆一下,哈希值和生成哈希的数据相当不相关,因此给定区块数据,很难预测哈希值会是什么(直到你实际运行哈希算法)。 因此,为随机数选择一个值实际上是在猜测结果哈希值会是什么。 为了简化数学,让我们假设哈希值以 10 为底(我们示例中实际显示的是十六进制)。 如果为随机数选择一个值实际上是对结果哈希值进行随机猜测,那么你选择的任何随机数都有十分之一的机会使十进制哈希的第一个数字为零。

3.2.2.2. 挖矿如何工作

你可能在比特币或区块链的上下文中听说过"挖矿"。 "挖矿"只是意味着尝试随机数的不同值,直到偶然发现具有正确属性的哈希值。 该属性通常是其值低于某个阈值。 如果系统希望使找到哈希值的成本达到某个水平,那么系统需要做的是将阈值设置得合适。 例如(再次以 10 为底),将要求设置为哈希值有四个前导零,那么任何随机数(因此结果哈希值)有一万分之一的机会命中目标。 如果系统希望这个成本更高,那么它会降低阈值。

比特币区块有一个 80 字节的头,其中包含一个可变的 4 字节(32 位)数字,称为 随机数。 其余 76 字节用于其他目的。 对头内容应用 SHA-256 哈希算法会产生 256 位哈希。 改变随机数会以不可预测的方式改变结果哈希。 "谜题"是确定一个使哈希小于目标哈希值的随机数。 事实上,使用良好哈希系统的全部意义在于使"解决"谜题实际上只是猜测随机数值。

比特币系统定义了任何给定猜测随机数值合格的概率。 具体来说,目标是猜测一个导致哈希码小于某个值的随机数。 设置哈希必须小于的值来设定概率。 通过这种方式,比特币控制矿工 可能 需要做多少工作来"赢得"确定下一个区块的权利,即作为第一个找到与区块数据一起生成小于所需值的哈希的随机数的人。

在以下示例中,在每个数据块中输入一些内容。 然后随意猜测将使系统一致的随机数值。 当你厌倦了失败时,点击"挖矿"按钮让计算机为你做工作(通过非常快地进行大量猜测)。 然后你可以看到随机数如何与区块链交互。

3.2.2.3. 谁是矿工?

比特币依赖矿工才能运作。 矿工将已完成的交易组合在一起形成区块数据。 然后他们通过猜测随机数来努力工作,直到找到一个满足要求的。 然后他们将该区块(包含哈希值和随机数)广播到系统。 他们为什么要这样做? 因为系统随后用一些比特币奖励他们。 (具体来说,矿工被允许在交易区块中包含一笔特定交易,以将标准金额的比特币记入自己。)

在加密货币的初期,矿工会是利用笔记本电脑或台式机的闲置算力来挖矿的爱好者。 随着这些币的流行和价格上涨,许多人购买了更多的计算机甚至仓库来利用尽可能多的算力以挖尽可能多的币。 由于挖矿的主要成本是为这些计算机供电的电力,许多矿工试图利用低成本电力的地区。

随着比特币价值的变化,以及因此投入挖矿的计算周期的变化,哈希必须小于的值将变化以保持发现下一个区块的预期时间大致一致。 这意味着随着比特币价值的上升,挖新区块的成本增加了。 这已成为电力的主要消耗者,估计在 2021 年占全球电力消耗的 0.5%。 这反过来又变得颇具争议。

3.2.2.4. 达成共识

因此,第一个为他们的交易区块解决谜题的矿工有很大的动机提议该交易区块作为区块链中的下一个。 理论上,第一个这样做的人为系统中的每个人定义下一个区块的内容。 不幸的是,"达成共识"要比这复杂得多,因为网络不是瞬时的。 实际上,猜测正确的随机数意味着你 能够 提议一个可行的区块。 但是,然后你提议的更改必须传播到网络。 这需要时间。

偶尔,会有多个矿工同时提议不同的新区块。 在这种情况下,区块链会出现 软分叉,因为不同的新区块被不同的参与者添加到区块链中。 这以明显启发式的方式解决,通过观察分叉几轮直到清楚大多数参与者正在添加哪个分叉。 区块链被调整为每轮大约 10 分钟(添加新区块),解决启发式是等待大约六轮以确保正确的分叉。 因此,在某个区块"安全"地被添加到链之前,可能有大约一个小时的不确定性。 (当然,到那时,它将跟随越来越不安全的区块,这些区块本身正在经历共识过程。)

这种实时延迟是比特币可扩展性的主要关切之一。 另一个事实是整个挖矿过程消耗大量现实世界资源,除了驱动比特币区块链的共识过程之外没有实际有用的目的。

下一步是了解区块传播和共识过程在网络中的实际展开方式。

Settings

Proficient Saving... Error Saving
Server Error
Resubmit

交易如何通过网络传播?好问题。 当节点接收到交易时,它会将该交易添加到为其他节点维护的列表中。 每个节点都有自己的列表,包含通过自身或其他节点接收到的所有交易,以及它可能尚未共享的交易。 经过随机延迟后,节点将向所有其他节点发送消息,包括其自己的交易列表。 并非所有交易都被发送。 节点按祖先交易数量和费率对列表进行排序,以便父交易可以在子交易之前发送。 从这个排序列表中选择的交易被发送,直到没有剩余的或达到限制,这很少发生。

那么如果两个挖矿节点同时达到有效(但不同)的解决方案怎么办?网络如何知道同意哪条链作为单一事实来源?

Settings

Proficient Saving... Error Saving
Server Error
Resubmit

但如果一些矿工想要声称一笔欺诈性交易怎么办?信任具有最大工作量的链如何防止欺诈?

Settings

Proficient Saving... Error Saving
Server Error
Resubmit

在上面的示例中,想象节点 4 提议的'Blk B'包含一笔欺诈性交易,假装某个任意用户向节点 4 发送了 100 美元。 完全有可能节点 4 赢得提议有效解决方案到链的"迷你彩票",并成功附加'Blk B'。 目前,这笔欺诈性交易将开始从节点 B 传播到其他节点,说服网络上不同的用户这笔交易确实发生了。 防止这个不准确和欺诈的'Blk B'保持为链的一部分的原因是节点 B 无法在所有其他节点之前持续赢得解决区块谜题的"迷你彩票"。

总会有更多节点尚未收到'Blk B'中欺诈性交易的任何迹象。 这是因为最初只有 1 个节点宣扬这笔虚假交易的存在,而网络上的所有其他节点都在该交易从未发生过的假设下工作。

随着时间的推移,我们看到节点 2 是第一个提议下一个有效解决方案的节点。 此解决方案不适合'Blk B'的头,因为节点 B 永远不会收到'Blk B'中欺诈性交易的通知,因此不会产生有效的解决方案来匹配该区块。 随着时间的推移,不包含'Blk B'的节点群将继续赢得大多数谜题解决方案,仅仅因为他们对网络有更大的控制。 最终,每个节点都将被迫忽略任何包含'Blk B'的分叉链,因为存在如此大的工作量证明支持不包含'Blk B'的链。

恶意用户真正接管公共账本控制的唯一方法是单个实体有效且持续地控制超过 50% 的网络计算能力。 这是确保一个用户将在提议下一个区块的有效解决方案的竞赛中持续击败其他节点的唯一方式。在这方面,工作量证明通过增加单个用户控制网络的难度来保持共识。

3.2.3. 以太坊

以太坊 是一个随着时间演变其共识方法的区块链系统。 它始于与比特币类似但不相同的工作量证明策略。 其相关加密货币称为 以太币。 其新的共识策略是 权益证明 策略,其中提议新区块的能力基于参与者在以太币中的权益。 对于每一轮提议新区块,参与者选择是否投入固定数量的以太币,该轮不能花费,这给参与者提供了参与对区块达成一致的可能性。 选择区块的实际协议基于 拜占庭协议,只要超过 2/3 的被选参与者是诚实的,它就会成功。

3.2.3.1. 拜占庭协议

拜占庭协议是分布式计算中的一个经典问题,涉及在面对故障节点甚至恶意节点时就价值或领导者达成一致。 正式设置是一个分布式系统,其中节点集可以使用由共识协议确定的消息相互通信。 一些节点是 诚实的,将正确地遵循协议,而其余的节点是 恶意的 或 故障的,可能试图阻碍共识。 一个关键结果是必须超过 2/3 的节点是诚实的才能成功达成共识,这意味着所有诚实节点在有限数量的通信轮次内就一个值达成一致。 在此上下文中,存在许多正确的共识算法,都使用密码学技术作为关键组件。

3.2.3.2. 权益证明

权益证明 的开发是为了确保整个区块链的分布式共识,而不依赖于 工作量证明 算法所需的巨大计算能力和能源消耗。

权益证明依赖于交易验证者,而不是工作量证明系统使用的矿工。 验证者将提供其资产的权益(通常是一定数量的基础加密货币)作为抵押品,如上所述,以换取验证交易的权利。 根据货币,需要质押的货币数量以及货币被质押的时间长度决定了验证者被授予验证新区块的权利的资格。 为了确保没有犯规,如果验证者验证了不正确的交易,质押的硬币将丢失;然而,如果他们诚实地验证,他们将获得交易手续费的奖励。

以太坊 是一种称为 Casper 的权益证明算法的实现。 Casper 允许以太坊生态系统从工作量证明过渡到权益证明。 从 以太坊 1.0 到 2.0 的过渡被称为宁静升级,分为 3 个单独的阶段进行。 每个后续阶段都依赖于前一个阶段。

第 0 阶段启动信标链,管理 Casper 权益证明协议。 第 1 阶段引入分片链作为未来可扩展性的关键。 此阶段将引入 64 个这样的链,它们允许并行交易吞吐量。 此阶段主要关注分片链构建、共识和数据上的有效性。 第 2 阶段将所有功能整合在一起。 分片链将成为结构化的链状态,而不是简单的数据容器,而 智能合约 将最终被引入。 第 0 阶段预计于 2020 年 7 月下旬启动,而第 1 和第 2 阶段在 2020 年和 2021 年晚些时候。

3.2.4. Algorand

Algorand 是另一个流行的区块链平台,使用独特的权益证明共识算法。 Algorand 使用他们所谓的纯权益证明(PPoS)。 这与以太坊的算法不同,因为没有质押的硬币来促进诚实。 原因是在最坏的情况下,质押的硬币与实体在大型系统中可能获得的恶意收益相比可以忽略不计。 Algorand 将其安全性建立在大多数经济体的诚实之上。

使用 PPoS,拥有大多数货币的所有者能够阻止其他用户进行交易。 然而,这将对建立在系统上的信誉、货币的信誉产生负面影响,因此会降低大多数人在经济中的权益价值。 然而,这种权力允许诚实者通过阻止少数中的攻击者来促进安全性和可靠性。

区块生成也是独特的。 Algorand 使用两阶段过程。 第一阶段随机选择一个用户来生产下一个区块。 第二阶段选择另外 1000 个用户作为委员会并验证区块是否正确。 委员会的添加是为了如果选择了一个不良行为者来生产区块,委员会将能够成功地捕获这一尝试。 没有少数不良行为者能够成功推翻对恶意区块的标记。

最后,每个参与者都是由自己选择的! 给定的影响区块链的权力通过要求每个人运行密码学公平抽奖来分散。 被抽奖视为赢家的令牌代表一个委员会成员。

   «  3.1. 共识算法简介   ::   目录   ::   3.3. 许可共识算法  »

关闭窗口