区块链 Nonce

2025 年 1 月 20 日 | 阅读需 6 分钟

"Nonce" 或 "仅使用一次的数字" 是比特币挖矿软件使用的一个数字。 将其插入区块头后,数据就会被哈希。如果生成的十六进制值的总和小于或等于网络的难度目标,矿工的区块就会被添加到区块链中。当另一个区块被打开时,这个过程会重新开始。

关键点

  • Nonce 是一个数字,它通过试错过程用于向区块链添加区块。
  • 对于每一次尝试,Nonce 都会增加一。
  • 寻找区块中的理想 Nonce 和其他数值组合需要大量的处理能力。
  • 一些值,包括 Nonce,可以被改变以产生哈希值,用于竞争性挖矿过程。

理解 Nonce

比特币 Nonce 是一个 32 位(或 4 字节)的数字,矿工试图通过它构造一个有效的哈希值,以便在比特币区块链中创建一个新区块。Nonce 是区块头中的一个字段;其他字段包括:

  • 软件版本
  • 前一个区块的哈希值
  • 时间戳
  • 难度目标
  • 默克尔根

在比特币网络上,被称为矿工的用户竞相在每次尝试失败后更改 Nonce,以生成一个小于或等于网络目标哈希值的哈希值。将加密哈希函数应用于数据称为哈希。区块数据被加密哈希函数(一种将数据转换为具有固定长度的独特值、十六进制字符输出的数学技术)加密。

此哈希值通过充当加密指纹来确保区块的内容永远不会被更改。矿工可以更改的区块头中唯一可变的就是 Nonce。通过改变 Nonce,矿工可以计算出替代的解决方案并改变区块的哈希值。

例如,前面的段落使用 SHA-256 技术进行了哈希处理,如下所示:

通过在段落的末尾附加零值(Nonce)可以获得一个不同的十六进制值:

如果您将那个零更改为一,您将得到:

比特币挖矿软件就是这样使用 Nonce 的。每次尝试,Nonce 值会递增一,直到达到预定值。第一个发现有效哈希值低于网络难度目标的矿工将获得区块奖励。一旦他们的区块被上传到区块链并广播到网络,过程就会重新开始。目标难度衡量找到有效 Nonce 的难度。为了保持区块生成率恒定,它会定期更改。

附加 Nonce 和时间戳

在区块浏览器中,您会看到 Nonce 通常只达到数十亿。例如,区块 841,948 的 Nonce 是 1,614,498,317。区块 841,949 的 Nonce 是 4,218,083,700。这与现代采矿机在一秒钟内产生的哈希值数量相差甚远。

此外,Nonce 的长度最多只能是 32 位(4 字节),这意味着它最多只能比 42.9 亿稍大一点。哈希的速度非常快,需要滚动(rollover)才能发挥作用。因此,在比特币 ASIC 矿机开始席卷网络后,开发了另一种技术。Coinbase 数据字段使用一个额外的随机创建的整数,称为“额外 Nonce”(extra nonce)。通过将此值添加到 Coinbase 交易空间,默克尔根会发生变化。

由于默克尔根包含在区块头中,因此区块头的哈希值是动态的。为了尝试找出答案,会调整额外 Nonce 和 Nonce。如果两者都无法产生结果,挖矿程序会允许矿工更改时间戳。通过这三个参数的组合,区块链能够实现大约每十分钟挖掘一个区块的目标。

Nonce 这个词是什么意思?

"Nonce" 是 "number used once"(仅使用一次的数字)的缩写。在挖掘区块时,比特币区块链使用它来帮助生成哈希值。

“Nonce”一词是什么意思?

在区块链的上下文中,Nonce 是一个单次使用的数字。就其在区块链上的应用而言,它是一个数字,每次尝试哈希以生成满足网络难度要求的哈希值时,该数字都会逐步增加。

什么构成 Nonce?

用于区块挖掘的 Nonce 是 Nonce 的最佳示例。区块 841,954 使用了 Nonce 3,983,795,221。这并不意味着矿工只需要尝试 3.98 万亿次;它可能与可变的额外 Nonce 和时间戳条目结合使用,滚动了数千次。由于 Nonce 是一个 32 位值,因此它最多只能达到略高于 42.9 亿。

Nonce 对区块链安全的重要性

  • 确保安全:区块链网络,特别是那些使用工作量证明共识机制的网络,依赖 Nonce 来确保其安全性和整体完整性。
  • 确保交易历史的有效性:加密条件包括生成低于给定级别的哈希值,该哈希值与目标值匹配。这些条件通过定义必须解决的计算难题并以 Nonce 的形式提供有效解决方案来确保交易历史的有效性。
  • 黑客难以操作:当存在准确的 Nonce 时,黑客无法进行恶意攻击或其他篡改,因为它使得环境非常难以定位,并且需要大量的处理能力来处理交易。
  • 确保防篡改系统:Nonce 对区块链的检查点机制至关重要,该机制确保随着目标区块的滞后数量呈指数级增长,篡改区块的计算成本也会随之增加。这种程度的保护增强了系统的防欺诈和防篡改能力。

比特币区块链网络如何使用 Nonce?

  1. 在比特币区块链网络中,矿工竞相寻找一个 Nonce,当它与区块中的交易混合并使用 SHA-256 加密过程进行哈希处理时,会产生一个满足网络目标难度的哈希值。
  2. 难度目标会定期更改,以保持比特币网络上恒定的区块生产时间,目前大约是每区块 10 分钟。
  3. 矿工使用试错方法循环遍历 Nonce 值,直到找到一个产生小于所需阈值的有效哈希结果。
  4. 当矿工找到一个合法的 Nonce 时,他们会将新区块以及 Nonce 和其他所需数据一起广播到网络进行验证和添加到区块链中。
  5. 使用工作量证明共识机制,这个过程(通常称为挖矿)不仅将新交易添加到区块链,还保证了比特币网络的安全性与完整性。

不同类型的 Nonce

1. 交易 Nonce

每个区块链网络中的每笔交易都有一个称为交易 Nonce 的唯一值。其主要目的是确保只执行授权的交易,从而促进不可重放性。

每笔新交易都会增加与账户关联的交易 Nonce。每笔被确定为重复并返回给用户的交易的 Nonce 的最后几位会增加 Nonce。

2. 区块 Nonce

区块 Nonce,也称为指针,是在挖矿过程中附加到区块头的一个值。在 PoW 方法中,它用于确定与预期网络难度级别相对应的哈希值。矿工通过修改区块 Nonce 持续瞄准低于目标难度的哈希值;通过这种方式,他们可以生成一个合法的区块,该区块将被添加到区块链中。

要理解交易 Nonce 在区块链生态系统中的功能(它维护着网络的安全性与完整性),需要能够区分它们与区块 Nonce。虽然区块 Nonce 对于防止交易重放攻击至关重要,但交易 Nonce 在防止交易重放攻击方面具有优势,因为工作量证明方法生成计算上困难的区块,从而提高了整体网络安全性。

结论

矿工们竞相寻找一个 Nonce,该 Nonce 满足挖掘比特币的网络难度要求。将哈希方法应用于区块头中的数据,生成一个必须小于或等于网络难度目标的值。

每次尝试满足目标时,Nonce 都会递增一。它会被滚动(rolled over),并且额外 Nonce 和时间戳会与它一起使用,直到矿工成功(如果它超过 32 位限制)。