Skip to content

Blocks

Loading Tool

区块是已添加到区块链中的一堆交易

区块是如何形成的?

区块是在挖矿过程中构建的。

挖矿基础

当你进行一笔比特币交易时,它不会立即被添加到区块链上。相反,它会被保存在一个临时的交易池中。

展示比特币网络节点内内存池的图表。

我在这里称其为“交易池”,但官方术语是内存池

如果你是一名矿工,你的工作就是将交易池中的交易收集到一个“候选区块”中,并尝试将这个候选区块添加到区块链上。

展示将内存池中的交易收集到候选区块中的图表。

区块头

每个候选区块都会被赋予一个区块头,这基本上是一组包含有关区块内容信息的元数据

展示为候选区块构建区块头的图表。

矿工在尝试向区块链添加区块时,以这个区块头为起点。

元数据 – 描述其他数据的数据,用作提供信息的信息标签。

区块头字段

区块头字段的细节现在并不重要,但这里还是做一个简单的总结:

Version
区块的版本号。
前一个区块
我们想要在其上进行构建的前一个区块的识别号。
Merkle Root
区块中所有交易的指纹(基本上是将所有交易哈希在一起)。这是区块头中最重要的部分。
时间
当前时间。总是很有用。
Target(目标)
矿工在尝试将此区块添加到区块链时所用的数值。稍后这会变得更容易理解。

区块是如何添加到区块链上的?

要将候选区块添加到区块链上,你需要对区块头中的数据进行哈希计算,并希望结果低于某个目标

展示候选区块的区块哈希与当前目标进行对比的图表。

目标是通过难度计算出来的,难度是比特币网络设置的一个值,用于调节向区块链添加交易区块的难易程度。

别担心,我知道这个难度目标的概念一开始可能有点令人困惑,但随着时间的推移它会变得更容易理解。

难度
用于调节区块解决速度的值。所有节点都同意对区块链当前高度的相同难度计算。它每 2,016 个区块(大约每 2 周)调整一次,以帮助在区块之间创造平均 10 分钟的时间间隔。

把目标想象成候选区块的极限运动杆——难度越大,目标越低,就越难找到低于此值的区块哈希

一个额外的数字

我撒了谎。你实际上并不仅仅只对区块头本身进行哈希计算。你实际上是用一个额外的数字和它一起进行哈希。

展示使用 Nonce 来更改区块头所得区块哈希的图表。

这个额外的数字被称为 Nonce,它基本上是一个哑字段(dummy field),矿工用来帮助他们获得低于目标值的区块哈希。

Nonce – 在密码学通信中仅使用一次的任意数字。

如果第一个 Nonce 不起作用(从 0 开始),就继续递增它并对区块头进行哈希计算。如果你运气好,你会找到一个返回低于当前目标值的区块哈希的 Nonce。

展示成功的 Nonce 产生低于当前目标的区块哈希的图表。

我知道这些哈希值包含字母,但你仍然可以将它们像其他任何数字一样看待。它们只是十六进制值,计算机非常喜欢处理它们。

解决区块

一旦你找到了一个产生足够低区块哈希的 Nonce,该区块就被“解决”了,这个区块中的所有交易都会被添加到区块链中。

展示成功开采的区块被添加到区块链上的图表。

现在,所有矿工都将回到交易池并开始处理下一个候选区块。他们将在下一个区块头中使用你成功的区块哈希(这样他们就可以在你刚刚开采的区块之上进行构建),向区块链添加新交易区块的竞争再次开始。

干得漂亮。