跳转至

比特币的五种力量- #3 共识算法

在这一章中,我们将找出是什么让比特币区块链机器以分散的方式运转。我们将深入研究比特币的共识机制,称为工作证明,并看看它与复杂的数学问题和挖掘有什么关系。我们将在本章中讨论以下主题:

  • 拜占庭将军的问题
  • 工作证明一致性算法
  • 分散共识和博弈论

拜占庭将军的问题

拜占庭将军的问题实际上是 1982 年一篇同名论文中介绍的描述计算机系统问题的一种抽象方式。该问题指出,可靠的计算机系统必须能够在存在故障组件的情况下有效地运行,这些故障组件可能向系统的不同部分发送冲突的信息。这个问题在分散的计算机网络中更为突出。

下图对此进行了说明:

让我们想象下面这个思维实验。

拜占庭军队包围了一座敌人的城市。这支军队由几个单位组成。每个单位由一名将军指挥。所有这些将军都需要拿出一个协调的行动计划,但他们彼此远离,只能通过消息进行交流。让事情变得更复杂的是,一个或多个将军可能是叛徒。这些潜在的叛徒将军会发出误导性的信息,并试图破坏任何协调的行动计划,无论是进攻还是撤退。为了找到这个难题的成功解决方案,拜占庭军队需要找到一条协调行动的道路,不管是哪种方式。这个实验可以在下图中看到:

为了实现这一点,拜占庭军队需要某种算法,当大多数忠诚的将军遵守它,而一些叛徒不遵守时,这种算法可以有效地实现协调的结果。

工作证明一致性算法

现在你知道了问题所在,让我们来看看解决方案,这就是所谓的拜占庭容错算法。这个算法涉及博弈论和数学。

拜占庭容错算法的第一个也是最重要的实际实现来自比特币的工作证明。在这种情况下,将军是比特币网络上的节点,也称为矿工。网络节点是可以通过网络接收、创建、存储和发送数据的连接点。换句话说,节点是构成网络的连接点。

这里要掌握的重要概念是,这些挖掘节点是从网络上没有其他人可以信任的假设出发的。

工作证明算法保证了网络一致性,即使存在拜占庭式的不兼容节点。让我们看看这个机制在比特币中是如何工作的。

我们现在都知道,比特币是一个点对点网络,其中所有活动都是由其用户通过适当的软件和硬件完成的。这些活动包括进行交易、接收交易、验证和传输交易。

采矿概论

现在,我们将介绍采矿的概念,你们中的许多人可能听说过这个概念。采矿基本上包括做工作证明,并产生新的硬币作为对矿工的奖励,这些矿工成功地为每个新的区块首先做了工作证明。工作证明包括由计算机完成的大量计算,旨在解决加密哈希难题。让我们深入研究这个机制的具体细节,弄清楚它是如何工作的。

首先,让我们看看矿工如何创造新的区块。下图说明了创建过程:

现在,挖掘节点收集和聚合新的事务数据。在接收到这样的数据时,每个节点根据一长串标准独立地验证每个交易,这些标准包括:

  • 追踪被消费的数字货币的来源
  • 检查同一笔钱的重复支出
  • 检查总交易量是否在 0 到 2100 万比特币的允许范围内(因为 2100 万是系统允许的最大比特币总供应量)

这样的例子不胜枚举。安装在节点上的比特币软件执行许多其他检查和平衡。

经过验证的事务被聚集到事务池中,也称为内存池或内存池,它们在其中等待,直到被包含在一个块中。挖掘器检查它们的内存池,看是否有任何事务已经包含在前面的块中。在候选块中收集和排列验证的事务后,挖掘器需要构造块头。该收割台包括以下主要部件:

  • 候选块中所有事务数据的概要
  • 链中前一个块的链接,也称为父块
  • 显示块创建时间的时间戳
  • 有效的工作证明

大宗交易数据的汇总是通过哈希函数完成的,哈希函数处理数据的方式会产生一个标准化的唯一识别码或数字指纹。这样,系统对每一笔交易都有一个唯一的标识符。

比特币交易的不同方面

这是一个块标题的例子,在blockexplorer.com上看到:

如前面的截图所示,在块号的正下方有一个很长的字母数字字符串,称为 BlockHash 或简称 Hash。字母数字意味着它由字母和数字组成。这是一种编码数据,是通过比特币的加密哈希函数处理存在的块头数据的输出结果。你可能听过这个函数的名字,SHA 256,其中 SHA 代表安全哈希算法

你可能还记得,我们在第五章比特币的五种力量——# 2 密码学中提到并简要解释了哈希函数。我们将再次简要讨论它们,因为它们在工作证明中起着如此重要的作用。

正如我们已经知道的,哈希函数可以将任何类型、任何大小的数据分解成固定长度的字符串,这可以作为唯一的数字指纹或标识符。此外,这些加密散列函数只在一个方向上起作用。一旦我们有了输出,我们不能简单地反转函数,插入输出,然后在另一端得到输入数据。借助下图可以更好地描述这一点:

为了说明函数求逆意味着什么,让我们考虑四个基本的数学运算:

  • 加法和减法是彼此的反函数
  • 乘法和除法是彼此的反函数

我们总是可以用这些函数构造方程来寻找任何未知变量。比如 3 * x = 15,x = 15/3 = 5。

许多数学函数可以用类似的方法来反演。然而,加密散列函数却不是这种情况。在加密函数的输入数据集中找到未知随机变量的唯一可行方法是,在给定所有其他已知参数的情况下,逐个尝试未知变量的不同值,以找出可行的方法。这基本上是一种尝试所有可能组合的蛮力方法。这正是工作证明中使用的工作要素。这项工作包括计算机为找到密码难题的答案所需的所有迭代计算。

现在和困难

现在,让我们再看一下我们拥有的块标题数据示例。您可能已经注意到了 Nonce 这个词和另一个不熟悉的参数,叫做难度。

随机数基本上是一个随机变量,或者说是随机性的来源。另一方面,难度是一个临时的固定数字,由比特币协议计算,并在大约两周内保持固定。我们可以在下面的例子中看到这两个变量:

当一个矿工开始建造或开采一个类似的区块时,除了 nonce 之外,所有的参数都是已知的。随机数是拼图中需要找到并插入的缺失部分,因此得到的块头散列低于目标难度水平。你可以把目标难度想成一个数字。该过程通过在迭代计算中反复尝试不同的随机数值来完成,直到找到满意的散列。

让我们用一个简单的例子来说明这个问题。考虑一个掷骰子的游戏,其中我们有两个玩家,掷两个骰子。目标是抛出一个低于或等于特定预定目标数的数。首先掷出这样一个数字的玩家获胜。如果目标等级是 10,这个游戏就相对容易了,因为只有 11 和 12 的组合才能赢。所有其他组合都会赢。现在,如果我们想让游戏变得更难,我们可以把目标降低到 5。在这种情况下,玩家需要掷出总数为 2、3、4 或 5 的骰子才能赢。与之前的目标 10 相比,这种情况的几率要低得多,因此比赛更难获胜。如果我们想让它变得非常非常难,我们可以将目标减少到 2,然后只有 1 和 1 的骰子组合才能赢。比特币加密计算难题以类似的方式工作。

你可能想知道为什么块头散列应该低于目标难度级别。嗯,目标难度是由比特币协议根据接入的计算机电源和试图解决谜题的总量来确定的。由于这是一个随机过程,遵循一个已知的统计分布,找到一个解决难题的随机数的几率可以提前计算出来。这意味着,在给定所部署的总处理能力的情况下,也可以计算出网络上任何节点找到难题的解决方案的预期平均时间。

目标难度由系统每 2016 个街区调整一次,即大约 2 周。

这是由比特币软件计算得出的,开采一个区块的平均时间保持在 10 分钟左右。这 10 分钟的封锁时间是在区块链交易的速度和安全性之间的合理折衷。

计算能力

为了让您对这里提到的计算机处理能力有所了解,它被定义为哈希速率或单位时间内哈希函数计算的次数。目前最强大的比特币挖矿芯片可以以每秒 14 万亿哈希的速度运行。这是每秒 14 万亿次哈希函数计算!一万亿是 1 后面有 12 个零。一个相当大的数字,不是吗?您还应该考虑到,这些芯片是专门为优化这个特定哈希函数的计算而设计的,它们不能做任何其他事情。它们被称为ASIC,代表专用集成电路

让我们来看看随着时间的推移,难度是如何随着散列率的增加而增加的。下面的屏幕截图描述了随着时间的推移所遇到的困难:

下面的屏幕截图显示了一段时间内的哈希速率:

总而言之,以下是我们到目前为止所涉及的挖掘过程的关键步骤和要点:

  1. 按照比特币协议,矿商收集网络上传播的新交易数据,并根据一套标准进行验证。
  2. 然后,采矿者批量订购新的经过验证的交易。
  3. 之后,矿工准备新的区块标题,并计算工作证明。
  4. 第一个找到工作证明难题的解决方案(换句话说,为正在开采的新区块计算哈希)的开采者成功开采了这个新区块,并将其作为最新区块包含在区块链中。
  5. 成功的采矿者获得以新生成的硬币形式完成的工作的整体奖励,这被称为 coinbase 交易。
  6. 网络上所有矿工的目标难度由协议每 2016 个块调整一次,这大约是 2 周,以便将块之间的平均时间保持在 10 分钟左右。进行这种调整是为了考虑网络上由矿工部署的计算机处理能力的数量。
  7. 于是,系统中接入的矿电越多,杠杠越低,问题越难解决,但平均阻断时间保持在 10 分钟。

接下来,我们将用一些博弈论来完成分布式共识的难题。

分散共识和博弈论

在这一部分,我们将看到博弈论是如何进入画面的。

博弈论是研究智能理性决策者之间冲突与合作的数学模型。它主要用于经济学、政治学和心理学,以及逻辑和计算机科学。

听起来很刺激,不是吗?让我们看看它如何应用于比特币的去中心化共识。

首先,我们需要考虑到比特币挖矿是一项资本密集型业务。这意味着矿工需要在昂贵的采矿计算机硬件上进行大量资本投资,也称为采矿钻机。如今比特币挖矿已经非常工业化,大部分散列能量来自大型数据中心,也被称为矿池

除了物理硬件方面的资本支出外,运营采矿业务也需要大量的运营支出。这些费用包括运行电脑和冷却电脑的电费。请记住,比特币是一个 24*7 运行的全球交易网络,因此采矿计算机不间断地运行工作证明计算。

除此之外,还有矿工存放电脑的物理位置、互联网带宽、维护费用和其他运营费用。

所有这些投资和成本实际上都受到矿商的威胁,是他们按照比特币协议行事的巨大经济激励。这有效地保证了分散共识机制的安全性和区块链的完整性。

你可能会奇怪:为什么这是一个如此坚实的保证?

比特币挖矿是一个竞争非常激烈的行业。矿工们根据他们的计算机散列能力进行竞争,以成为第一个解决工作证明难题的人,开采下一个区块,并获得区块奖励。它的竞争如此激烈,以至于目前只有在电力非常便宜的地方才被认为是有利可图的。自然寒冷的气候也是一大优势。

考虑到所有这些因素,任何采矿者的最佳行动方针是遵守规则,核实交易,并真诚地开采区块。这为矿商提供了从大宗奖励中获取收入的最佳机会,从而实现投资回报。

如果一个挖掘者在挖掘一个新的块时不遵循该协议,这样的块将不会被网络上的其他节点接受为有效的。这意味着没有整体奖励,以及拖欠矿工的巨大经济损失。

矿工不当行为的例子

让我们来看看一些矿工可能会有不当行为的场景,以及随之而来的后果。

一个这样的威胁可能是一个矿工,他决定不遵守块奖励的规则,并试图在 coinbase 交易中获取更多的硬币。根据协议,批量奖励最初为 50 比特币,发行时间表每 4 年减半。因此,自比特币推出以来,其价格已经减半两次,目前为 12.5 比特币。

考虑这样一种情况,一名矿工决定尝试为开采一个区块奖励自己 1000 比特币,而不是协议规定的 12.5 比特币。即使这个贪婪的节点成功地完成了工作证明,并且首先提出了密码难题的解决方案,该块也会被网络上的其他节点拒绝。他们会立即发现这种不规则现象,并且不会将其视为有效的阻塞。

你可能想知道:他们是如何做到这一点的?其他节点如何接受或拒绝新的候选块?

首先,它们根据协议检查是否满足有效块的所有标准。这些包括正确验证和记录的事务、到前一个块的散列的链接、正确的块奖励、时间戳和工作证明等。

如果一切都是正确的,但同时在网络上有几个有效的候选区块或区块链,矿工总是选择在最长的链上开采和建造他们的新区块。这是一个累积工作最多的链,可以追溯到 genesis 块和 Satoshi 的第一个事务。通过选择母区块,即链中的前一个区块,矿工有效地用他们的采矿权对区块链的状态进行了投票。这样,原始的主有效链总是被扩展,并且更多的累积工作证明被添加到其中。

在给定新块之上挖掘的每个块都将被视为该块及其所有事务的一次确认。在给定块的基础上构建的块越多,该块的确认就越多,因此,其中的所有事务就越安全和不可变。

在 100 次方块确认后,方块奖励硬币可以使用。这是嵌入系统中的进一步保护,以确保矿工的诚信,并减轻矿工操纵企图的任何风险,如改变共识规则或重复支出。

重复消费的例子

如果一家矿商试图合谋制造双重支出交易,会发生什么?

想象一下下面的场景。约翰想用比特币买车。他找到一家跑车经销商,该经销商接受比特币作为一种支付方式。约翰花 10 个比特币买了一辆超赞的橙色兰博基尼。付款后,约翰立即驾驶着他的新蓝宝车离开了区块链。供应商已经及时交付了产品。然而,约翰与矿工李先生串通一气。事实上,李先生经营着一个拥有强大处理能力的大型矿池。想象一下,一个装满计算机的大型数据中心专门用于在比特币区块链上挖掘。李先生立即重新挖掘包含约翰对汽车销售商的付款的同一个块,但是这一次新的重新挖掘的块将约翰进行的相同付款发送回他的钱包。这是双重消费!同样的硬币已经花了两次了!约翰拿回了蓝宝和他的钱,所以他免费得到了蓝宝!下图可以更好地说明这种情况:

这种情况在区块链形成了一个分叉,意味着在区块链的同一高度开采了两个不同的区块。换句话说,它们是在非常接近的同一个母区块上开采的。李先生做的下一件事是继续挖掘包含重复花费交易的链,以扩展它并进一步验证它是最长的链。

这种共识攻击被称为 51%攻击。尽管名字如此,它实际上并不需要 51%的网络散列能力;51%是这种攻击几乎肯定会成功的阈值。这可以从下图中看出:

如果供应商在交货前等待更多的批量确认,这种情况很容易避免。一般来说,在六次批量确认之后,交易被认为是不可改变的。因此,建议大额采购至少在 6 次大宗确认后交付,时间在 1 小时左右。小额采购可以更快交付,因为潜在损失的风险更小。

因此,等待足够数量的块确认是防止潜在的 51%攻击和重复花费的一种方法。

围绕比特币网络的架构

嵌入该体系的另一项保护措施同样来自于矿工们岌岌可危的经济资源。我们说过,挖掘块和计算工作证明会消耗大量资源。如果任何矿工决定为了自己的利益而试图攻击并控制网络,这将是一个非常危险和昂贵的策略。这需要巨大的计算能力才能成功。我们已经提到了比特币网络中的巨大哈希能力,因此这是任何违约矿工都需要与之竞争的,以便篡改分布式账本。

在给定块的基础上构建的块越多,它拥有的确认就越多,就越难被操纵。如果任何采矿者想要改变先前的区块,以便创建双重花费的交易、转移资金或出于任何其他原因,则他们需要重新开采所有后续区块。此外,所有这些工作基本上都是免费的,因为他们不会从重新开采的区块中获得任何有意义的奖励。这是因为他们的替代链将与原始链竞争,成为最长和主要的区块链。如果不是最长的,它会被网络忽略,没有其他矿工会通过延长它来验证它。

请记住,矿工总是在最长的现有链的顶部开始建造他们的新区块,该链包含自创世纪区块以来所做的最多的累积工作证明,创世纪区块是有史以来创建的第一个区块。这样,通过包含所有数据块信息的哈希将每个数据块链接到其父数据块,整个网络将验证和确认区块链上的每一笔交易。每 10 分钟,当一个新的区块被添加到区块链时,所有的交易,包括 Satoshi 创建比特币时的第一笔交易,都会被整个网络重新验证和确认。

还要考虑到,当不兼容的节点重新挖掘过去的块时,所有其他诚实的节点继续挖掘并扩展原始的主区块链。因此,不兼容的节点需要以比网络中所有其他节点更快的速度继续挖掘,部署更多的处理能力并消耗更多的电力,而没有任何有意义的补偿。

对区块链的这种攻击发生的时间越久远,可行的可能性就越小。我们这里说的不是几年,甚至不是几个月。我们谈论的是几周甚至几天。24 小时内有 144 个块确认。正如我们已经提到的,比特币协议要求 100 次批量确认,才能使用批量奖励币,因此这被认为足够长,可以减轻矿工的潜在利益冲突风险。

这就是为什么攻击者很难操纵或控制比特币区块链的原因。现在,该网络已经上线运行了近十年,挖掘、支持区块链和遵守协议规则的计算能力是巨大的。这种架构可能使其比任何其他现有的支付网络基础设施都更加健壮。

一致攻击

关于共识攻击的潜在影响,再提一件事很重要。这种攻击可能会破坏分散治理的安全性和网络的可用性,但它们无法窃取或花费他人的资金。这是因为控制区块链上的资金的唯一方法是通过私钥,我们在第五章、比特币的五种力量——第二种密码学中讨论过。任何潜在的共识攻击者只能操纵他们自己在区块链上的交易,并可能用他们自己的资金创建双重花费的交易。

现在,我们已经讨论了通过设计提供协议安全性的分散共识机制。比特币区块链架构在提供防篡改、防审查的记录跟踪方面非常有效。很难想象还有比这更好的会计和记录系统了。

让我们总结一下我们讨论过的比特币挖掘和共识过程中的所有因素:

  • 采矿业竞争激烈。采矿者与他们的计算资源竞争来挖掘块,满足分散一致协议的要求。
  • 在每一轮开采新区块时,第一个在有效区块中找到工作证明难题的解决方案的矿工获胜。
  • 所有采矿者一致同意将新开采的区块纳入区块链,并立即开始在此基础上建设新的候选区块。它们通过将其散列作为父块引用到它们的新候选块来做到这一点
  • 获胜的矿工将获得区块奖励,目前为 12.5 比特币。
  • 分散式共识机制的安全性由处于危险中的矿工经济资源、工作证明算法和网络中插入的大量散列能力来保证。

摘要

在这一章中,我们学习了所有关于共识算法以及它们是如何产生的。我们了解了拜占庭将军的问题,以及它与比特币世界的联系。我们了解了确保比特币协议安全性和完整性的工作验证算法。

在下一章,我们将了解比特币工作的广泛的点对点网络。


我们一直在努力

apachecn/AiLearning

【布客】中文翻译组