0%

比特币挖矿到底在算什么

PoW

众所周知,比特币网络以及其他使用 PoW 的区块链网络都通过挖矿保证网络的安全性。其原理大致就是通过算力的分散性实现区块产生能力的分散,从而避免网络被少数攻击者操纵。

进一步地,比特币网络使用的是基于双 SHA256 的碰撞的 PoW,矿工需要得到一个拥有小于网络要求的双 SHA256 值的区块,这样的区块可以被网络接受,矿工也会获得对应的奖励。由于(目前)没有高效的双 SHA256 的碰撞算法,唯一的方法就是暴力尝试。因此,比特币挖矿就是在算大量区块的双 SHA256 值,直到找到满足网络要求的区块。

nonce 字段

到这里,我们已经解决了题目中的问题,本文也就完结了。接下来的问题是:这些允许矿工枚举的区块是怎么产生的。容易想象,作为包含了交易信息的区块,其中的大部分内容应该是固定的,那么一个比较合理的方法是设计一个独立的字段用于挖矿。比特币的区块结构中也确实设计了一个 4 字节的 nonce 字段用于矿工挖矿。

不只是 nonce 字段

到这里,我们又解决了前面提出的问题,本文再一次完结了。用脚趾头数一下就可以发现,4 字节的 nonce 在现在根本不够产生足够挖矿的区块。现在一台比特币矿机的算力可能都有数十乃至数百 T,一秒钟就能把整个 nonce 字段枚举很多遍了。因此,仅仅使用 nonce 进行挖矿是完全不够的。因此,矿工还需要在其他的位置进行枚举。

在这种情况下,矿工将目光转向了 coinbase 交易,coinbase 交易是矿工构造的为自己提供挖矿奖励的交易。相比于其他交易,coinbase 交易既没有资金输入,也不需要签名。因此,coinbase 交易被规定在签名位置可以放指定前缀的任意值(bip34要求),而交易信息会通过一个称为 Merkle Tree 的结构打包到区块中,从而修改 coinbase 交易可以改变区块的哈希值,矿工可以修改这里的值来得到足够的可枚举范围。(同时这里往往也会放一些矿场信息之类的私货)

参考来源

https://learn.saylor.org/mod/book/view.php?id=36375&chapterid=19428

https://learnmeabitcoin.com/technical/coinbase-transaction#footnote-messages