在检查比特币块时,为什么在找到正确的随机数后会得到前导零前缀?

When checking a Bitcoin block, why do you get a leading prefix of zeros once you find the correct nonce?

我最近一直在研究比特币和工作量证明系统。

在这个系统中,当挖矿时,用户有一个 "challenge string" 他们需要与正确的 "proof string"(nonce) 和哈希连接,该哈希的结果以前缀开头前导零,这就是他们验证块的方式。

我的问题是,当组合 "challenge string" 和正确的 "proof string"(nonce) 时,为什么这些值的相应散列以零前缀开头?它是如何工作的?

"Challenge string" 和 "proof of string" 的组合被发送到散列函数,这是一个单向函数,结果是 "random string"("random string" 上的条件就是一开始应该有x个0,猜的难度一天比一天增加,无非是增加了x个)。

矿工的工作是猜测"proof of string",直到满足"random string"的条件。

所以,这是一个纯猜谜游戏。 GPU 非常擅长快速生成随机数。这就是为什么世界各地的矿工都在使用顶级 class GPU 来挖掘比特币交易。

并非特定于比特币,但比特币使用相同的机制,请参阅 https://en.wikipedia.org/wiki/Hashcash 了解工作量证明 "works" 的描述及其工作原理。

简短的回答是您正在创建哈希冲突 (https://en.wikipedia.org/wiki/Collision_resistance),前导零越多,创建冲突就越困难。

在比特币中,难度是根据比特币网络上的计算通过算法选择的。这通常只会上升,但如果计算下降,难度也会下降。算法调整难度,保证交易验证时间在10分钟左右。