Mining Target 是与区块头哈希比较的数值目标;区块头是区块的紧凑数据摘要。有效的工作量证明要求哈希不大于正确的目标。在 Bitcoin 网络中,目标必须为正数,并符合该区块所适用的规则,矿工不能随意选择。
仅为说明,假设界限是 20:结果 19 和 20 都符合要求,21 则不行。实际挖矿中的数字大得多,但关系相同:hash ≤ target。这个符号表示“小于或等于”,并非只能严格小于。Bitcoin Core 是供网络参与者验证区块和交易的软件。本文引用的 v29.0 版本也是这样比较整个区块头的哈希。nonce 是矿工搜索时改变的一项输入值。真正与目标比较的是计算得出的哈希。 [1]
雅娜在图片上看到一个成功的哈希,开头有一长串零。这是有用的直观解释:表示长度相同时,前导零越多,数值越小。但两个前导零数量相同的哈希,仍可能分别落在目标两侧。其余数字同样重要。因此,零的数量不能代替完整的 hash ≤ target 比较。这条规则要求满足精确的数值条件,而不是拼出好看的字符图案。 [1]
一个比特表示零或一;八个比特组成一个字节。为了避免在区块头中存入完整的长数字,Bitcoin 使用 32 位的 nBits 字段。它通过系数、决定移位的指数以及符号位,对 256 位数值空间中的目标进行编码。例如,0x04123456 解码后是 0x12345600;前缀 0x 表示十六进制写法,其中也使用字母。这是编码示例,并不是当前网络目标。初学时,只需分清数字本身和它的简写形式。 [3] [5]
读取原始数据时,同一个数字可能看起来倒过来了。在 80 字节的区块头中,nBits 占四个字节,采用 little-endian 存储,也就是最低有效字节在前。因此,数值 0x1d00ffff 在数据中表现为 ff ff 00 1d。字节顺序不会改变目标,只是在说明存储方式。这是处理原始数据时的细节;普通读者查看区块浏览器时,不需要把屏幕上的数字倒过来。 [2]
雅娜可能会提议填入一个更大的数字,让搜索更容易。但软件检查的不只是能否读懂 nBits。Bitcoin Core v29.0 中的 DeriveTarget 会拒绝负目标、零、超出数值范围的溢出,以及大于 powLimit 的值;powLimit 是该网络允许的最大目标。成功解码只能说明这段编码代表哪个数字,本身并不意味着可以使用它。 [1]
即使目标处于允许范围内,对某个具体区块也可能是错误的。Bitcoin Core 会把 nBits 与 GetNextWorkRequired 的结果比较,后者依据前一个区块和网络规则计算。不一致就会出现 bad-diffbits 错误。哈希低于自己设定的较容易目标,并不能弥补区块头中错误的值。雅娜不能靠降低要求得到被接受的区块:其他节点,也就是检查规则的计算机,会拒绝这种尝试。 [4]
在均匀分布的 256 位哈希模型中,每个可能结果的概率相同。对于允许的目标 T,可接受的数值从零到 T,包含两端。因此,单次尝试的概率为 p = (T + 1) / 2^256,其中 p 表示成功概率。加上的一是为了把零也算进去。这个关系解释了为什么目标越低,搜索越困难。但它不说明机器每秒能做多少次尝试,也不预告下一个区块何时到来。 [1]
雅娜满足条件时,证明的是所需的计算工作,而不是区块内所有内容都正确。Bitcoin Core 还会检查交易的汇总指纹、名为 coinbase 的特殊奖励交易、区块限制和交易有效性。这里的 coinbase 是区块第一笔交易的技术名称,并非交易所。低哈希无法修复无效内容。因此,目标是规则的重要部分,而不是绕过其余规则的许可。 [4]
要获得更完整的理解,请将本词条与以下词条结合阅读: Share Difficulty, Proof of Work, Nonce, Block Header, Bitcoin. 反向关联还来自: ASIC Miner, Nonce, Mining Share, Share Difficulty.