什么是工作证明?
原文地址: What is Proof of Work?
翻译: JulySong
与比特币一样,以太坊目前使用一种称为工作证明 (PoW) 的共识协议。这允许以太坊网络上的所有节点就区块链的当前状态达成一致,并保护网络免受各种攻击。
2022 年晚些时候,工作量证明将被逐步淘汰,取而代之的是以太坊 2.0 的权益证明。我们将在后面的文章中讨论这个问题,一旦发生,就会弃用工作证明教程。
什么是共识?
Merriam-Webster 对“共识”一词的定义如下。
什么是共识协议?
对于像以太坊这样的区块链,本质上是分布式去中心化数据库,网络节点需要就网络的当前状态达成一致。
共识协议帮助我们就给定点的网络状态达成一致或共识。
尽管共识协议与构建 dApp 没有直接关系,但理解它们将帮助您理解许多其他概念并构建您的基础。
共识协议主要是有助于防止某些类型的攻击的经济系统。从理论上讲,攻击者可以通过控制 51% 的网络来破坏共识。共识协议旨在使这种“51% 攻击”在经济上不可行。不同的机制被设计来以不同的方式解决这个问题。
什么是工作证明?
工作量证明是一种共识协议,著名的比特币和以太坊使用。
块生产
在工作量证明下,矿工负责生产新区块。网络中的矿工相互竞争,以创建充满已处理交易的新区块。然后,获胜者与网络的其他成员共享该区块,并通过他们的辛勤工作获得新铸造的 ETH。
谁能以最快的速度解决计算困难的数学难题,谁就赢得了这场比赛。这个问题在计算上很难解决,但很容易验证。这个问题的解决方案是我们在什么是采矿?
教程。
网络安全
网络之所以安全,是因为要获得对网络 51% 的控制权,您将需要 51% 的网络计算能力。然而,由于工作量证明通过挖矿奖励激励矿工,许多不同的矿工群体都对运行挖矿节点感兴趣。因此,在网络上获得 51% 的所有计算能力需要对设备和电能进行巨额投资——这意味着您最终可能会花得比赚的多。
西比尔抵抗(Sybil Resistance)
从技术上讲,工作量证明本身并不是一个共识协议——尽管为了简单起见,它通常被称为共识协议。它们实际上是 Sybil 抵抗机制和区块生产者选择器——一种决定谁将成为最新区块生产者的方法。
Sybil Resistance 衡量协议如何应对 Sybil 攻击。
当一个用户或组伪装成许多不同的用户时,Sybil 攻击就会出现问题。防止此类攻击的安全性对于分散式区块链至关重要,它允许矿工根据他们投入的资源获得奖励,而不仅仅是随机选择。
假设,如果我们只是通过随机选择而不是工作证明来选择一个块的生产者,那么可以很容易地执行 Sybil 攻击。
假设网络上有 2 个矿工。爱丽丝和鲍勃。通过随机选择,他们应该分别获得大约一半的挖矿奖励。现在,查理出现了,但假装是 2 个不同的用户——查理和达西。现在通过随机选择,查理最终将获得 1/2 的挖矿奖励,因为他假装是 2 个不同的用户,而爱丽丝和鲍勃各只获得 1/4,而不是他们应该得到的 1/3。
工作量证明通过让矿工提供大量计算能力作为抵押品来防止 Sybil 攻击,从而让他们消耗大量电能。这是通过解决计算难题来完成的,以证明矿工正在“投入工作”。这对 Sybil 攻击起到了经济威慑作用。
由于奖励会分配给成功的矿工,而矿工的成功与他们在网络上的计算能力份额大致成正比,所以无论你假装是 1 个用户还是 2 个或 100 个用户都不再重要。你会得到相同的随着您的计算能力保持不变,您将获得多少挖矿奖励。
链选择规则
偶尔,两个矿工会大致同时产生有效区块。这可能导致网络中的不同节点在其区块链中包含不同的块。技术术语是分叉。
然而,为了让区块链以稳定的方式运行,需要选择一条连续的链作为“正确的链”,以防止状态分裂。
比特币和以太坊使用“最长链”规则来做到这一点。哪条链被更多的节点接受并继续增长更长的时间被选为“正确的链”,并摆脱分叉的链。
工作量证明和最长链规则的结合被称为“中本聪共识”——以比特币的发明者中本聪命名。
有时,这意味着作为临时分叉的一部分被挖掘的交易可能会在分叉被摆脱以支持不同的更长链时回滚。这就引入了终结性的概念。
形成分叉链并最终被删除的块称为叔块。矿工显然投入了工作来产生那个叔块,并且很可能由于网络延迟而失去了采矿奖励。因此,以太坊网络仍然以 1.75 ETH 的辛勤工作奖励区块矿工叔叔。
最终性
当交易是无法更改的块的一部分时,交易在以太坊上具有“最终性”。
由于矿工以去中心化的方式工作,因此可以同时开采两个有效区块。这会创建一个临时分叉。最终,在挖掘和添加后续块后,其中一条链将成为接受链,使其更长。
但更复杂的是,临时分叉上被拒绝的交易可能已包含在接受链中。这意味着它可能会被逆转。所以最终性是指在考虑交易不可逆之前应该等待的时间。对于以太坊,建议的时间是 6 个区块或 1 分钟多一点。在六个区块之后,您可以相对自信地说交易成功(超过 99.999% 的机会现在不会恢复)。您可以等待更长的时间以获得更大的保证。
工作证明中的“工作”
我们一直在谈论一个计算困难的数学问题,矿工需要解决这个问题才能提供合法性证书。但这实际上意味着什么?
本质上,我们想证明矿工花费了能量和计算能力来计算区块。而且,他们做得比其他人都快。如果我们能证明这一点,这意味着矿工基本上花费了金钱和时间(以能源和计算的形式),因此他们有机会提出一个新的区块。
生产有效区块符合矿工的最大利益,因为如果他们被发现撒谎(这很容易,因为证书的验证很容易)——他们只是白白浪费了所有的精力和计算,因此浪费了他们的金钱和时间。因此,解决数学问题意味着矿工真的非常想提出新的区块,并且愿意花费精力和计算来获得奖励。
以太坊工作量证明协议 Ethash 要求矿工进行激烈的试错竞赛。过程如下:
- 矿工选择一组交易包含在一个潜在的区块中
- 根据他们创建的区块,网络有规则从区块链网络的当前状态中选择一块数据(大约 1GB 大小)。这些规则并不是特别相关,但您可以在 Ethash 文档中阅读更多关于它们的信息。
- 他们将数据集通过散列函数来计算一个
target
值。这target
是一个数字,与挖矿难度成反比。挖矿难度越高,target
越低,反之亦然。 - 然后,矿工使用蛮力尝试找到另一个名为
nonce
. - 通过散列函数将数据集、目标、
nonce
和几个其他值的组合放在一起应该会产生一个低于target
. HashFunction(dataset, target, nonce, ...) = a number
- 挖矿难度越高,
target
越低,因此越难找到满足该条件的nonce
。 - 矿工一直使用试错法来为满足条件的
nonce
找到一个有效值。没有公式可以计算nonce
。
根据网络上有多少矿工,挖矿难度变得越来越小,以确保大约每 15 秒可以可靠地生成一个块。如果它变得太容易并且有很多矿工,那么出块的速度将远远超过 15 秒。同样,如果它变得太难并且没有很多矿工,那么区块将需要很长时间才能产生。难度由网络自动计算。
除了蛮力之外没有其他方法可以解决这个问题,因为目前不存在反转哈希函数的方法。因此,要知道某个nonce
, 当附加到数据集时是否会产生特定的哈希,唯一可能的方法是尝试随机值nonce
并检查。
花点时间彻底阅读本节,这就是工作量证明的全部内容。这可能看起来很虎头蛇尾,但想想我们开始想要证明的东西。我们想证明矿工们辛勤工作来生产这个区块,这对他们来说不是小菜一碟。由于他们努力工作,因此不撒谎符合他们的最大利益。这种计算难题正是这样做的,因为找到一个有效nonce
的是一个计算上的困难问题——但验证它很容易,所以其他节点可以很容易地验证矿工确实找到了一个有效的nonce
,这意味着他们确实把工作。
比特币实际上是如何运作的?
我向所有对区块链的工作原理以及如何验证和生成区块有点好奇的人推荐这个视频。
观看以下视频,直观地了解我们刚刚读到的有关工作量证明的所有内容。
资源
以下是推荐的但可选的阅读/查看,以了解有关工作证明的更多信息。
练习题
🤔 关于工作量证明,以下哪项是错误的?
A: 矿工有责任确保没有新用户尝试成为矿工
B: 矿工负责生产新区块
C: 矿工有责任确保网络不被篡改
🤔 共识协议是不可能被破解/篡改的。
A: 是的
B: 错误
🤔 当一个用户试图伪装成许多不同的用户时,它叫什么?
A: 女巫攻击(Sybil Attack)
B: 丹佛伪装(Denver Pretention)
C: 查理攻击(Charlie Attack)
🤔 由于像以太坊这样的区块链本质上是分布式数据库,因此需要就当前状态达成共识。
A: 是的
B: 错误
🤔 什么是叔块(uncle blocks)?
A: 子块之后开采的块
B: 最终被删除的块
C: 分叉后包含的块
🤔 在以太坊上推荐的时间是什么时候,我们几乎可以保证一个区块不会被删除?
A: 大约 15 秒
B: 约 1 分钟
C: 约 2 分钟
🤔 当交易是无法更改的区块的一部分时,它在以太坊上具有“最终性”。
A: 是的
B: 错误
🤔 矿工使用什么技术来解决数学问题以向网络证明他们的工作?
A: 蛮力(Brute force)
B: 穿透攻击(Penetration Attack)
C: 女巫攻击(Sybil Attack)
🤔 即使在分叉之后,以太坊使用什么规则来强制执行只有一种链状态?
A: 女巫链(Sybil Chain)
B: 最长链(Longest Chain)
C: 丹佛链(Denver Chain)
🤔 当两个不同的块并行产生和包含时,它叫什么?
A: 终局性(Finality)
B: 叉子(Fork)
C: 工作证明(PoW)
参考答案:
- A
- B
- A
- A
- B
- B
- A
- A
- B
- B