This article has been translated from English to Traditional Chinese.

比特币挖矿是如何进行的?

上一课中,您了解了比特币矿工是什么,它如何将新交易存储在内存池中,然后通过创建候选区块开始“挖矿”过程。

如果我对比特币挖矿的描述听起来像一门外语,我强烈建议您从《比特币挖矿新手指南》的第一课开始学习。

如果你还在听,让我们仔细看看候选区块……

就像你可以分为头部和身体两个基本部分一样,候选区块也可以分为两部分:

  1. (黄色区域)
  2. 块体(灰色区域)
    Block Header and Body

如果我们仔细观察候选区块,会发现它实际上并不只是包含交易。

Candidate Block Anatomy

当矿工创建候选区块时,其中包含“区块头”(黄色区域)。

区块的“主体”(灰色区域)包含交易。

除了包含一系列交易的候选区块外,它还包含一些元数据,这些元数据提供了区块的“摘要”。

元数据就是提供其他数据信息的数据。在本例中,元数据提供了有关区块本身的信息。这些信息被称为“区块头”。

在块头中,有若干数据。

在本课中,我将简化块头的内容。

时间戳

块头中的第一项数据是“时间戳”。

时间戳表示区块创建的时间。

Timestamp

上一个区块哈希值

下一个数据被称为“前一个区块”,更具体地说,是“前一个区块哈希”。

前一个区块哈希是区块链中前一个区块的区块哈希

Previous Block Hash

为了理解其含义,我们需要查看文件。

Look inside blockchain

现在,我们查看文件内部,可以看到数据以特定方式组织。

Look inside the file and see blockchainstructure

让我们把它想象成区块链。

矿工创建的候选区块必须添加到最新区块的顶部

Block must bee added on top of the most recent block

假设最近的区块是蓝色的

Most recent block in blockchain

由于蓝色区块 区块哈希 文件(“区块链”)中的最新区块,因此矿工希望将其作为基础。

可以将区块哈希视为区块的 自定义生成的ID号

矿工要做的是将此作为“前一个区块哈希”添加到其候选区块的区块头中

Block hash added as Previous Block Hash of Candidate Block

“交易摘要”哈希值

接下来的一组数据是我所说的“交易摘要”哈希值。

顾名思义,它以字符串的形式提供区块中所有交易的“摘要”。

具体来说,区块中的所有交易(以红色突出显示)被放入哈希函数中,并按一定顺序进行哈希处理,最终得到一个哈希值

Merkle Root

这个哈希值就是“交易摘要”哈希值。Merkle Root Example

该哈希值根据区块中包含的所有交易提供唯一的“指纹”。

这有助于确保交易未被篡改

这个“交易摘要”哈希实际上被称为“默克尔根”。 🤓

请记住,数据中的一个小小的变化都会彻底改变哈希值。这意味着,如果有人试图在未来更改区块中的任何交易,都会导致“交易摘要”哈希值发生变化,与区块头中的原始值完全不同。Merkle Root as Fingerprint

基本上,更改交易会创建一个完全不同的“指纹”,与原始“指纹”不匹配。

这种变化会让所有人立即知道交易被篡改了。

区块哈希

到目前为止,区块头包含三个数据:

  1. 时间戳
  2. 前一个区块哈希值
  3. “交易摘要”哈希值

下一步是将此块头数据放入哈希函数。

这将产生一个随机数,称为“区块哈希”。

(虽然更准确的名称应该是“区块头哈希”,因为它只是区块头的哈希,而不是整个区块的哈希。)

就像前面提到的上一个区块哈希一样,可以把区块哈希看作是分配给候选区块的自定义生成的ID号。

Run block header through hash function
为什么矿工要这么做?

为了使矿工的区块添加到区块链中,它必须 找到一个满足特定要求的区块哈希

如果不能满足这一要求,那么该区块将不被视为有效,矿工也无法将其添加到区块链中。

更具体地说,区块哈希必须是一个以一定数量零开头的数字

具体多少个零?

具体数字因人而异。比特币系统的软件决定了区块哈希值应该以多少个零开头。

最初,要求只有很少的零,但随着越来越多的矿工加入,比特币软件开始要求更多的零。

Bitcoin mining process without nonce

矿工必须生成满足比特币软件设置的输出阈值的输出(“区块哈希”)。

这个“阈值”只是规定了区块哈希必须以多少个零开头。

这就像“地狱之舞”。

Bitcoin mining is like a limbo dance

阈值越低,所需的零的数量就越多

所需的零越多,找到“正确”区块哈希的难度就越大

这是因为前导零越多,可用的解决方案就越少,这意味着需要更多时间来“找到”正确的区块哈希值。

找到一个以三个零开头的值(如“000123……”)比找到一个以六个零开头的值(如“000000123……”)要难得多

下面是一个最近出现的实际有效的区块哈希值示例:

0000000000000000000586b367c292dfd274bf2e67575cf8b4d00735fc1df6ff

请注意,它以多少个零开头。

“一定数量的零”来自所谓的“挖矿难度”。比特币网络运行的软件会自动调整难度。难度根据矿工数量而变化。参与挖矿的计算机越多,难度越大,开始时需要更多的零,从而更难找到获胜的随机数。

区块哈希值可以被解释为一个非常大的数字,且必须低于某个阈值。这就是为什么区块哈希值以一系列零开头,后面跟着一个字母数字字符串。有些区块的前导零多达20个,而早期的区块则只有8个。所需的零的数量大致表明了区块发布时挖矿的难度。

如果区块哈希值没有以所需的零数开头,会发生什么情况?

那么该区块就无法添加到文件(“区块链”)中。

幸运的是,矿工可以多次尝试

但是,如果矿工只是将包含时间戳、前一个区块哈希值和“交易摘要”哈希值的区块头再次通过哈希函数运行那么结果总是相同的

矿工需要在再次尝试对区块头进行哈希运算之前以某种方式修改数据。

比特币提供了一种方法!

随机数

在区块头中,有一个名为“nonce”(浅蓝色框)的额外字段

Block header contains a nonce

区块头有一个特殊部分,矿工可以随意填入任意数字。

矿工可以随意输入任意数字。

随机数与区块中的交易完全无关。它的唯一目的是允许矿工在其中填入一个数字,如果区块哈希不符合以特定数量零开头的条件,矿工可以更改数字

通过使用随机数,矿工可以操纵哈希函数的输出,从而“猜测”所需的输出。

由于区块头中的其他数据无法更改,唯一可以更改的数据就是随机数。

因此,如果区块哈希器的第一次尝试失败,矿工就会更改nonce的值。

你可以把这个过程想象成试图找到密码锁的密码组合

Combination Lock

在尝试找到解锁数字组合时,没有捷径可走。你必须尝试所有可能的组合,直到某个时刻,偶然发现正确的组合。

你必须反复猜测,直到幸运降临!

就像检查锁的密码是否正确(要么能打开,要么打不开)一样,矿工和其他节点检查随机数是否正确也非常容易和快捷

矿工之间也会相互竞争。第一个找到非随机数并生成有效区块哈希值的矿工有权将其区块添加到区块链中,并因此获得奖励。

例如,假设区块哈希值至少需要以四个零开头

唯一的方法是随机选择一个非零值,并通过哈希函数运行区块头,以找到具有所需初始零数的区块哈希。

在这种情况下,矿工从“0”开始作为随机数(浅蓝色框)。

Nonce is 0

如果未能产生理想的结果,那么矿工所能做的就是尝试使用不同的随机数

矿工改变随机数,然后重新开始,直到找到至少包含所需最小数量零的区块哈希。在本例中,需要四个零

请记住,即使只做了一点点调整,使用哈希函数,即使是最微小的变化也会产生完全不同的结果

因此,矿工的第一次尝试是在随机数中使用数字“0”。然后,它通过哈希函数运行区块头,并查看区块哈希是否以四个零开头。

如您所见,区块哈希值仅以 两个零开头,因此不符合将区块添加到区块链的条件。

如果输出无效,矿工会使用不同的随机数值继续尝试。

由于“0”的值无效,矿工可以将Nonce的值改为“1”(浅蓝色框),然后再次通过哈希函数运行区块头。

Nonce changed to 1

正如您所看到的,区块哈希值以非零数字开头,因此这个方法也不可行。

由于“1”的值不成立,矿工可以将Nonce的值改为“2”(浅蓝色框),然后再次将区块头通过哈希函数。

Nonce changed to 2

在这种情况下,区块哈希值 最终以四个零开头,符合标准。

这是一个成功的区块哈希结果!🎉

正如您所看到的,哪个随机数会产生具有正确零数值的区块哈希是不可预测的,因此矿工必须不断尝试不同的随机数来找到正确的值

矿工们可以长时间挖掘,但不能保证一定能找到正确的随机数。大多数人永远找不到!

随机数用作计数器,其值不断递增,直到找到正确的区块哈希值或别的矿工找到为止。

这就像一个数字猜谜游戏!

您只需通过改变随机数的值,找到以特定数量零开头的哈希值即可。

矿工们反复进行这项工作……希望结果能产生符合标准的区块哈希值。

他们的计算机越强大,他们就能进行更多的“猜测”。

这种“猜测”过程被称为挖矿

“获胜”的矿工将获得一定数量的比特币(加上交易费用),称为“区块奖励”。

大约每10分钟就会有一位矿工赢得区块奖励。

区块奖励

由于矿工花费大量时间和精力来“猜测”正确的随机数并确认比特币区块链上的交易,比特币软件通过以下方式奖励他们的努力:

  1. 新创建的比特币当矿工确认交易时,交易将被打包到一个区块中,并添加到比特币区块链中。 每有一个新区块添加到区块链中,矿工就会获得新的比特币奖励。 这被称为区块补贴。 比特币的具体数量取决于区块创建时协议确定的发行时间表。截至2024年4月20日,在最近一次减半事件之后,每个区块的新发行量为3.125 BTC。下一次减半预计将在2028年4月2日前后发生,届时每个区块的奖励将减少到1.5625 BTC
  2. 交易费用。当人们使用比特币进行交易时,他们需要向矿工支付一笔费用,以激励矿工进一步确认他们的交易。当矿工确认一揽子交易时,也会收取每笔交易的费用。

挖矿是一个单调而重复的过程:

Bitcoin Mining Process

获取一个区块头,对其进行哈希处理,查看哈希值是否以特定数量的零开头,如果不是,则使用不同的随机数重复该过程。

光是想想就觉得困了。

所以,当你看到或听到挖矿涉及“解决复杂的数学问题”时,现在你知道这不是正确的描述。

挖矿一点都不复杂!挖矿的过程 非常简单。你只需要尽可能快地猜出正确的数字,或者快到成为第一个猜对的人,这样你的候选区块就能添加到区块链中。就是这样!

“哈希率”表示矿机“猜测能力”的强弱。每秒猜测的哈希值越多,哈希率就越高。例如,每秒1万亿(1,000,000,000)次猜测的哈希率就等于1太哈希(TH/s)。

虽然过程简单,但并不意味着它很容易。这就是为什么它被称为“挖矿”。您正在尝试“挖掘”正确的数字,这需要付出很多努力,就像现实世界中的实际采矿一样。

现在矿工已经找到能够满足要求的随机数,可以生成满足要求的区块哈希(至少以4个0开头),区块被添加到矿工的文件副本(“区块链”)中。

还记得蓝色区块是矿工区块链中的最新区块吗?现在不是了。

由于矿工能够猜出正确的随机数,因此能够将区块添加到区块链中(绿色)。

Block added to blockchain

因此,从宏观角度来看,矿工电脑上的文件已经更新(用绿色表示)。

Miner's blockchain updated

然后,节点会将该区块传输给与其直接相连的附近节点。

节点将检查、验证并确保区块头生成的区块哈希符合标准。在本例中,区块哈希需要以四个零开头。Bitcoin miner propogates new block

这些节点将通过将区块添加到文件中来更新其文件(“区块链”)。

他们的文件将被更新,现在与获胜矿工的文件(绿色文件)版本相同。

他们内存池中属于获胜区块的所有交易都将从“新鲜”(或“未确认”)状态变为“已确认”状态,并永久添加到文件中。

任何冲突的交易都会被剔除

由于挖掘过程,只有紫色交易才能进入区块链。Blockchain synced across network

然后这些节点将把区块传递给其他节点。Nodes will pass on the block to other nodes.

一旦新区块被大多数矿工接受,所有矿工将重新开始,创建一个全新的候选区块,挖掘过程将重复进行。

挖矿就像计算机网络中交易的分类机制,其中“挖出的”区块对区块链中的内容拥有最终决定权。

矿工们会将新创建区块的“区块哈希”用作候选区块中的“前一个区块哈希”。

Newly created block will now be used by miners

区块哈希值充当“链条”。

矿工现在必须将前一个区块的区块哈希值包含在他们创建的新区块中。

Miner include new block hash in new block

例如,这意味着要开采区块101,矿工需要知道区块100的哈希值。

在开采完101号区块之前, 102号区块无法开采。

这迫使矿工们专注于区块101,而区块101又包含了区块100的哈希值。任何矿工都不能跳过。

每个区块没有“区块编号”,而是通过区块哈希值来引用前一个区块。

这意味着每个区块都相互关联,这就是所谓的区块链

这种“区块链”不是由区块编号,而是由区块哈希值连接在一起的。

为什么你不能欺骗比特币

假设大家都在处理第101个区块。

但是,一位矿工想要修改第80区块中的交易。

它必须修改80-100区块,并重新计算所有区块,同时还要处理101区块

这需要花费大量计算资源,涉及21个区块

不仅如此,矿工必须在比特币网络上的其他矿工完成当前区块(区块101)之前完成所有操作。这基本上是不可能的。

篡改任何已经构成区块链一部分的交易是非常困难的。

这就是为什么区块链被称为不可篡改

工作量证明(PoW)

挖矿的过程通常被称为“工作量证明”(Proof-of-Work, 简称PoW)。

PoW被称为“共识机制”,比特币使用该机制让所有节点就比特币区块链的“官方”副本达成一致。比特币无需中央权威机构的争议解决或干预即可达成共识

“工作量证明”一词指的是, 需要付出“劳动”才能找到低于特定阈值的区块哈希值。一旦找到,任何人都可以验证它,从而提供“证明”。

“猜测随机数”并通过哈希函数运行区块头,这个过程被用来证明您已经在区块上完成了所需数量的“工作”。

第一个产生有效哈希值的矿工可以添加新的区块到区块链中,并获得比特币奖励。

如果大量矿工加入比特币网络,工作量证明机制将进行调整,以增加找到有效区块哈希的难度。如果这种难度增加导致太多矿工放弃挖矿,那么难度将降低,以增加挖矿的难度。

这个过程被称为难度调整,大约每两周进行一次,无论有多少矿工加入或离开网络,它都能确保大约每10分钟向区块链添加一个新区块。

难度调整是根据矿工创建新区块的速度进行的。

通过调整挖矿难度,比特币可以确保新比特币以预定速度产生,而与参与网络的计算能力无关。

难度调整非常重要,因为它可以确保矿工不会过快地开采过多的比特币

挖矿所需的专用计算机硬件和电力也意味着攻击网络的成本极高。这确保了比特币区块链的安全性和 完整性

任何拥有足够计算能力来攻击网络的人,最好还是老老实实地挖矿,赚取区块奖励(新比特币加上交易费)。

想进一步了解比特币的技术层面吗?learnmeabitoin.com提供了一个简单易懂的指南,帮助人们了解比特币的工作原理。

总结

恭喜!您现在已经知道比特币的“挖矿”原理了!

  • 矿工通过选择随机数、运行哈希函数并检查输出,寻找可接受的哈希值,即“区块哈希”。
  • 如果哈希值的前导零数量不正确,矿工们会更改随机数,运行哈希函数,然后再次检查。
  • 当矿工最终幸运地找到一个有效的随机数并“获胜”时,该区块就会被发送到比特币网络中的其他节点(包括其他矿工),每个节点都可以使用获胜矿工的随机数运行哈希函数,并验证其是否有效。
  • 如果大多数节点接受该解决方案,则该区块将被添加到区块链中,获胜的矿工将获得区块奖励。
  • 所有矿工“重置”并开始处理新的候选区块,将最近开采的区块的哈希值作为其区块头(作为“上一个区块头”)的参考。
  • 矿工试图“猜测”或找到正确的随机数的这个过程被称为“工作量证明”(PoW)。

现在我们已经了解了矿工和挖矿,让我们更新一下比特币系统的地图:

Bitcoin as a System (Mining Added)