进阶篇2.6 挖矿
您需要阅读我们关于哈希函数的文章才更能理解本文的意义。理解这一切对你非常有帮助。正如您在我们关于共识机制的文章中所提到的那样,并非每个区块链都有矿工。矿工只在工作量证明区块链中。他们致力于保护区块链免受攻击,并保护记录到该点的历史记录不受更改。让我们回顾一下如何提供保护。你可能听说过矿工试图解决“难题”或做“计算成本高昂的任务”。在本文中,我们希望最终告诉您这个任务实际上是什么。
矿工做什么?
矿工的主要工作是按照顺序收集那些广播到网络的所有交易。矿工根据协议验证交易是否有效,然后将它们放在我们拥有的数据容器(块)中,关于这点,已经在区块链描述为数据结构时谈过了。区块中的第一笔交易是特殊的,即coinbase交易。在coinbase交易中,矿工使用之前不存在的块奖励,12.5 BTC或12.5 ZEN奖励他自己的地址(实际上是7.5 ZEN,因为10%的块奖励分别转到安全节点和超级节点运营商,20%到Horizen财政部)。通常,用于检查交易有效性的标准之一是发件人在发送交易的地址中是否有足够的资金。 coinbase交易规则略有不同。该协议允许第一个交易没有输入,这意味着在此上记录中没有发送者。这就是矿工如何通过工作来奖励自己以及如何创造新的硬币。
在矿工打包coinbase交易之后,他再收集他从其他节点收到的交易并将它们放在正在处理的区块中。通常,矿工按照他们到达的顺序放置交易。在网络拥堵和区块太满(块具有最大数据大小,块限制)时,矿工可能仅对那些交易费高的交易进行打包。这就是为什么交易费在2017年12月飙升的原因。人们试图出高价以让矿工率先将自己的交易打包。这也是您有时会看到以每kb/ZEN来计价交易费用的原因。这是矿工用来计算哪些交易最有利于打包的指标。
许多矿工同时在下一个区块工作。每个矿工可能会有一个略有不同的区块,要么是因为他与竞争对手交易顺序不同,要么是因为他选择根据交易费的高低,打包了不同的交易。首先解决难题的矿工,就用他的块来扩展区块链,还向他奖励新创建的硬币的coinbase交易。
难度
那么矿工们想要解决的难题是什么?正如我们在介绍中所说的那样,如果您还不熟悉它们,那么阅读哈希函数将有助于您了解接下来会发生什么。
加密哈希函数的一个重要属性是伪随机。您无法预测输入更改会导致的输出更改。例如:如果您正在对输入“1”进行哈希并获得输出“00002”并在之后对输入“2”进行哈希处理,则第二个输出最好不是“00004”,而是类似“73968”,看似随机(伪随机) )号码。
挖矿协议要求每个块都达到某个目标。该目标是解决块的难度的度量。这意味着如果您使用其中包含的所有哈希数据的整个块,则输出必须以给定数量的零开始。难度描述了所需的前导零的数量。
想象一下,你要计算一个需要以1个前导零开始的随机输入的哈希值。如果输出中只有数字,那么第一次获得正确数字的几率为10分之一。如果难度要求输出以2个前导零开始,那么你第一次获得正确的机会将是1比100;如果目标难度为6,那么很可能是1,000,000中的1。随着难度的增加,解决这一挑战演变成实际工作,特别是解题没有捷径,只能通过不断尝试的方式来解题。如果您想使用哈希函数,可以在这里进行操作。
每个块头中都有一个特殊的数据字段,即nonce,它不包含任何重要信息。它的唯一目的是成为一个变量(一次使用的数字),矿工可以输入不同的值,以改变哈希函数的输出。接下来是获得正确的区块哈希的试错法。当矿工首次尝试解决该块时,这意味着计算有效的区块哈希(具有所需的前导零量),它们将在随机数据字段中放置随机值。
为简单起见,假设矿工开始的nonce值为“0”且难度为1,这意味着块散列有效需要一个前导零。我们还假设输出仅由数字字符组成。
首先,矿工将使用哈希函数来计算块的哈希价值。 在下面的示例中,输出不满足第一次尝试的条件。
矿工现在将nonce增加1并再次尝试。 产生的哈希仍然不能满足难度条件,所以他继续增加难度。
最后, 当矿工使用值8作为随机数时,他们得到所需的结果:区块哈希以前导零开始,并且矿工解决了该块的难题。
实际的难度要高得多,并且计算有效的块哈希需要大量的计算。 在撰写本文时,比特币网络的哈希率约为4100万TH / s(每秒的tera哈希值)。 这意味着所有矿工合并每秒为nonce尝试41,000,000,000,000,000,000个不同的值。 您可以在此处查看Horizen区块链的当前难度。 Horizen网络的哈希速率在写入时为208.68 Mh / s,您可以在此处检查当前值。
所有这一切都起作用,因为加密哈希函数的属性。 还记得哈希函数文章中的这个图形吗?
因为散列函数是单向函数,所以无法从所需输出计算有效的随机数。从先前输出中近似有效的随机数也是不可行的,因为散列函数是伪随机的,您无法预测输出的变化。解决方案一旦找到,网络上的每个参与者都可以验证是否有效,因为散列函数是确定性的,并且所产出的结果与每个节点产生的结果相同。
出块时间
每个Proof-of-Work协议都定义了块时间,即应在其中创建新块的时间间隔。有Horizen,这是2.5分钟,比特币10分钟。当矿工打包一个区块时,他立即将其广播到网络,因为他想收集他的出块奖励。这就是为什么创建新块不需要10分钟。 10分钟是查找有效随机数所花费的平均时间。有些块更快解决,有些块需要更长时间。如果更多的矿工加入网络并且哈希率增加,他们将平均更快地挖出区块。该协议评估平均块时间,并相应地调整每2016块的难度。如果解决障碍平均花费的时间较少,则难度会增加,如果花费的时间越长,难度就越小。
硬件
当比特币在2009年发布时,人们正在使用他们的电脑的CPU(中央处理器)来挖掘比特币。它是计算机中功能最多的处理器,因此效率最高。过了一会儿,人们转而使用GPU(显卡)进行挖掘。对于某些任务而言,GPU更加专业化和高效,但代价是通用性较低。如今采矿业正在运行ASIC(专用集成电路)。它是挖掘加密货币最有效的硬件,因为它的设计考虑了一个目标,用特定的哈希函数计算哈希值。在计算硬件中,多功能性和效率有其权衡取舍。如果你想要能够执行许多任务的东西,它将不会非常有效。如果你想在一项任务中获得超级高效的东西,它将不会非常通用。你可以在这里找到一篇关于挖掘硬件的精彩文章,该文章由Sia的首席开发人员David Vorick编写。
这如何保护网络?
到目前为止,您知道解决区块链中的单个块需要大量的工作量。您还知道每个块通过包含前一个区块的引用,将它们链接在一起。您还知道,更改块中的一小段信息会改变其哈希值。
如果攻击者想要篡改区块链上的任何记录,他们必须为他们编辑的块找到有效的nonce,以及所有后续块的有效nonce。攻击者必须自己做这一切,并且比诚实网络执行挖掘过程的速度更快。我们在上一篇关于共识机制的文章中讨论的最长链规则确定了区块链的哪个分支是有效的分支,以防止分叉出现。攻击者需要超越所有其他矿工的总和,以使他们编辑的链更长,因此成为有效链。这被称为51%的攻击,我们将下一篇文章专门用于攻击场景。
这种攻击非常昂贵,如此昂贵,以至于大多数民族国家都无法对比特币网络进行此类攻击。成功的可能性也很低。这就是人们信任区块链的原因。矿工证明他们为保护网络投入了大量的工作。这项工作消耗了系统外的资源(电力),这使得它难以形成。令人着迷的是,开放和完全透明的东西还能够抵御攻击。
这个区块链演示是了解区块链防篡改特性的一个很好的工具。我们鼓励您研究它。它将帮助您内化本章中介绍的概念。
总结
工作量证明区块链的矿工用他们的计算能力保护网络。将区块添加到区块链,需要大量随机猜测来查找将产生有效块哈希的随机数。区块哈希必须满足网络上的当前难度要求。这使得篡改区块链上的数据变得非常困难。攻击者必须重做查找nonce的工作,这些nonce会自行生成有效的区块哈希。攻击者不仅要为他们打算操纵的块执行此操作,而且还要对所有后续区块执行此操作,直到恶意链为最长链并且将被整个网络识别为有效。由于这种类型的攻击非常困难,因此区块链被认为是我们今天可以使用的最安全的数据结构。
这是我们关于区块链如何工作的章节的最后一篇文章。 接下来,我们将讨论钱包,这是一种可以帮助您管理密钥和创建交易的工具。 我们希望您在本章中学到一些东西(或者甚至可能很多东西),并期待听到一些反馈。 我们是否错过了一个重要概念,还是应该澄清一个部分? 如有问题,请联系我们academy@horizen.global!
Horizen 团队
微信群加:gyshiyi
知识星球:https://t.zsxq.com/7uNJaiI
中文电报群:https://t.me/joinchat/F_PCzUZpS76NkG-E_Yz4hg
英文电报群:t.me/horizencommunity