本文介绍了区块链中的共识机制,重点阐述了比特币如何通过PoW(工作量证明)机制解决网络中的分叉问题,并解释了挖矿的激励机制。
这是关于区块链的系列文章的一部分。如果这是你第一次看到这篇文章,我强烈建议从系列的开头开始阅读。
理论上,我们已经具备建设一个区块链所需的每个组件。我们已经知道如何构建交易(至少在比特币中),以及它们是如何打包成区块并串联在一起形成我们恰如其分命名的结构。
虽然我们可以将结构拼凑在一起,但区块链远不止于此。请记住,整个目的在于建立事件的共享历史——因此,数据存储的方式与理解该故事如何_随着时间的推移而演变_或_增长_同样重要。
由于网络中的每个参与者都有整个区块链的副本,因此每个人都必须_一致_同意这些不同副本应该如何演变。但他们是如何做到这一点的呢?
网络中的对等节点(或节点)用来达成共享历史的策略称为共识机制,这将是我们今天讨论的话题!
共识机制有不同的类型。我们将有很多时间来了解其中一些。目前,由于我们只讨论了比特币,让我们看看这个特定的区块链如何解决这个问题。
在进入正题之前,我想重申这个观点,希望大家能时刻铭记于心:
区块链不仅是实际的数据结构,也是彼此沟通并达成如何随时间演变的共识的参与者网络。
还有一些其他的因素。
考虑到这一点,让我们看看这都是关于什么的!
我想我们可以先问自己:网络参与者(节点)如何相互互动?他们通过_消息协议_进行交互。我不想在这里剧透结局——我们先从一个更简单的例子开始。
遵循我们的传统,假设Alice、Bob和查理想在他们之间建立一个区块链网络。
这一次,他们不会在一个群聊中,也不会有电子表格。相反,他们每个人只会监听来自其他参与者的消息。
而在此期间,我们可以假设他们发送给彼此的消息就是新块。
你们中的一些人可能会想——等一下,我们不是需要交易来构建块吗?你完全说对了!放心,我们很快就会了解交易是如何存储的,以及它们是如何传达给网络的。
当然,这些块需要是有效的。这意味着它们必须指向链中的最后一个块,并且必须有一个有效的哈希。请记住,哈希与密码难题密切相关,哈希可以同时用作随机化_谁_找到有效块,以及_什么时候_找到的度量。
nonce 被更改,直到找到有效的哈希。
假设这种随机性足以保证有效块绝不会同时被生产。
我想强调的是,这在更一般的设置中是不够的,但我们稍后会看到这是为什么。
在如此简单的系统中可能出什么问题?事实证明… 几乎所有问题。
啊啊啊!
让我来解释一下。
还记得我们之前提到的密码难题吗?它涉及到计算哈希。简单来说,如果一个人能_比网络中的其他人更快_地计算哈希,那么这个人就总是更有可能找到下一个有效的块。
为了巩固这个想法,极端情况下想象一下:Bob在他家后院有一台超级计算机,而Alice和查理则使用他们的笔记本电脑计算哈希。谁会赢得这场比赛显而易见。
你现在能看到问题了吗?凭借足够的计算能力,Bob总是可以在Alice和查理之前完成,从而成为网络中唯一的块生产者。这变成了一个中心化的系统。
Bob,为什么要这样做?
这是对比特币非常著名的一种攻击——51%攻击(51% attack)。在只有_3_个节点的系统中,这种情况是可以发生的。但随着我们_扩大网络_到数以千计的节点,单个节点变得如此强大或单个实体控制如此多节点的难度将越来越大。
看起来第一个问题只是_扩展_的问题。那么让我们扩展网络,看看会发生什么。
如你所料,比特币是一个大型网络。
在这种情况下,节点并不是与每一个节点进行通信,也就不足为奇。这样做是没有意义的,因为唯一的方法是保持一个_所有_可用节点的列表,而这个列表可能会随时间变化,且相当庞大。
相反,发生的事情是节点保持一份_较短的_其他已知节点的列表。在接收到消息后,它们将消息_广播给列表中的那些节点。然后,每个接收者将消息广播给自己已知节点的列表。如此反复,最终网络中的每个人都会收到消息。这被称为 gossip 协议_。
很容易看出接收者的数量是如何迅速以指数级增长的。
要获得更互动的视角,请查看这个很酷的模拟器,了解消息是如何在网络中传播的。
这里 есть 一个难题:传播消息需要时间。这是我们在只有3 个参与者的情况下不需要考虑的问题。
那么想象一下这种情况:
提示:另一个称之为将两个块放在同一高度。
粉色和紫色块都是有效的——我们应该选择哪一个?
现在怎么做?哪个是正确的?
仅仅通过查看该块,无法判断。因此,_两个_都需要附加到我们的链的末尾。显然,这种状态不能持续太久——区块链的全部意义在于确定一个单一的共享历史。
这种情况称为临时 _分叉_或链分裂。
不要与软分叉或硬分叉混淆。我们将来会讨论这些。
信不信由你,在这种情况下,查理所需要做的就是等待。没错。
网络中的一些节点将把Alice的块附加到它们的区块链中,而一些节点则附加Bob的块。查理也不例外——他将选择他第一个收到的,但也会跟踪另一个分叉。
在此之后,他们会立即开始寻找下一个有效块——没有时间可浪费,如我们将很快看到的那样。
因此这变成了_哪个分叉增长更快_的问题。类似于_51%_攻击,如果大多数网络已经附加了块A,那么很可能在那个分叉中更快出现新的块,而不是包含_B_的那个。
如果大多数节点在一个分叉上而不是另一个分叉上工作,那么该分叉最终将是唯一增长的分叉,而陈旧的分叉将自然消亡。
简而言之:一个分叉将增长得更快。
换句话说,一个分叉中有更多的计算工作,因为更多的努力已经投入到寻找正确的哈希中。这就是为什么这个共识机制称为工作量证明。
总结来说,在等待一段时间后,查理将看到分叉_A_增长得更快,并坚持在它上面,因为这是_大多数节点_正在工作的链。他遵循的通常被称为规范链。
如果查理在寻找分叉_B_中的下一个块,他会想要_切换到分叉A,并舍弃分叉B。这被称为重新组织(_reorganization_的简称)。
如果你在想,在重新组织后,分叉_B 中的交易将永远丢失。这在比特币中确实会发生。
好消息是,你只需重新提交交易即可解决这个问题!
这有一个负面后果:一旦交易出现在一个块中,就没有保证该交易会有效地包含在区块链中,因为可能会发生重新组织。我们必须等待在包含交易的块之后存在足够的块。
这被称为等待块确认,这是某些共识机制中非常常见的一种模式。当我们讨论_块最终性_时,我们可能会重返这个话题。
一旦有足够的块放置在我们目标块的上面,重新组织的几率将变得微乎其微!
太棒了!这个工作量证明(PoW)策略使我们能够解决临时分叉,并继续扩展网络。它还对那些试图进行恶意行为,比如控制哪些交易包含在区块链中,或不包含在区块链中的人有帮助——他们根本没有足够的计算能力来击败其他节点。
但是一个问题依然存在……为什么有人会愿意花费他们的计算资源寻找新区块?为什么不利用他们强大的机器来玩4K的Fortnite呢?
事实上,这并不是个坏主意。
最后一块拼图是:他们必须能够从中获得收益——他们必须有激励。
比特币确实有这样一种激励。找到下一个有效块会以—你可能已经猜到了—_比特币_的形式给你小额奖励!
不错。
在这一点上,你可能会想那笔奖励到底来自哪里。没有中央权威能够支付这笔费用。那它是什么呢,是不是凭空产生的?
其实不是——但非常接近!
块中包含一堆“普通”交易。我们到目前为止没有提到的是,它们还包括一个特殊的交易,称为创币交易。
创币交易简单地将一些比特币(以UTXO的形式)记入区块创建者的地址(或地址),作为对他们辛勤工作的奖励。但这不是任意数量的比特币——_区块奖励_由以下部分组成:
顺便提一下:BTC是比特币的缩写。它常常被用作货币符号,就像USD常被用作美元的符号一样。
换句话说:是的,每产生一个区块就会_神奇地生成_新的比特币。
这就是为何发现新区块的过程被称为挖矿。 这就像是在挖掘新的比特币!
值得注意的是,这并不意味着比特币的数量会无休止地增长。在特定时间,补贴会减半,发生的事件称为比特币减半。这会导致未来生成的比特币总量被限制在2100万.
这是因为,从数学上看,这种行为符合几何级数。在某些条件下,几何级数会收敛到一个有限值——这正是比特币的情况,而那就是将来生成的比特币的最大发行量。
好的,让我们快速回顾一下!
到现在为止,我们知道:
我觉得在这前三篇文章中,我们已经走过了很长一段路!剩下的就是填补一些关于比特币操作的空白,我们就基本完成了这个区块链主题。
现在解释这些缺失的细节很重要,因为这些思想在其他系统中也大多会重复。能够在事情变得复杂之前专注于这些概念是非常幸运的。
因此,我将在下一篇文章中与你见面,进行比特币的最后润色!
- 原文链接: medium.com/@francomangon...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!