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