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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在检查比特币块时,为什么一旦找到正确的随机数就会得到一个前导零的前缀?相关的知识,希望对你有一定的参考价值。

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

在这个系统中,当挖掘时,用户有一个“挑战字符串”,他们需要与CORRECT“证明字符串”(nonce)和散列连接,该散列的结果以前导零的前缀开始,这就是他们如何验证块。

我的问题是,当组合“挑战字符串”和CORRECT“证明字符串”(nonce)时,为什么这些值的相应散列以零的前缀开头?这是如何运作的?

答案

“挑战字符串”和“字符串证明”的组合被发送到散列函数,这是单向函数并产生“随机字符串”(“随机字符串”上的条件是它应该具有x个一开始就是零。猜测的难度每天都在增加,这只不过是x增加了。

Miner的工作是猜测“字符串的证明”,直到满足“随机字符串”的条件。

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

另一答案

不是特定于比特币,而是比特币使用相同的机制,请参阅https://en.wikipedia.org/wiki/Hashcash,了解工作证明“如何工作”以及为什么它以这种方式工作。

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

在比特币中,难度是基于比特币网络上的计算来算法选择的。这通常只会上升,但如果计算量下降,那么这种困难也会下降。该算法调整了难度,使交易验证时间保持在10分钟左右。

以上是关于在检查比特币块时,为什么一旦找到正确的随机数就会得到一个前导零的前缀?的主要内容,如果未能解决你的问题,请参考以下文章

科普:比特币是如何挖矿的

比特币发送不返回任何错误

React Router 代码拆分“随机”在加载块时失败

Lua 函数如何返回 nil,即使函数内部的返回值不是 nil?

智能合约中的“挖矿”是啥意思?

奇偶排序:在 CUDA 中使用多个块时结果不正确