会关注区块链的人都知道比特币是“挖矿”挖出来的,但你去问一个人计算机是怎么挖到比特币的呢?大部分人都无法跟你解释清楚,因为他们可能也不是真的清楚这其中的运算原理。今天我们就一起来看看计算机是通过什么机制挖出比特币的。
“挖矿”
挖矿其实就是通过计算机算出一串有效的Hash,并把它加入到区块中打包。为什么叫有效的Hash呢?因为中本聪当时设计比特币的时候,为了不让添加新区块过快,故意设置了一个运算量很大的计算,以此控制比特币的产出速度。因为这个计算的难度就好比是在沙漠中寻找一粒符合某种极端条件的沙子,所以这个过程就叫做挖矿,用来算Hash的计算机就叫做矿机,而操作这些矿机的人就叫做矿工。
“难度系数”
按道理说,以现在的计算机计算速度,算一个Hash是很容易的事儿,怎么到比特币这就变得这么难了?这是因为区块头里还有个叫难度系数的东西(difficulty)。使用一个常量除以这个难度系数就可以得到一个目标值(target)。区块链协议规定了只有我们算出的这个Hash值小于这个目标值的时候才算有效。一般来说,我们的难度系数都比较大,这就导致我们要的目标值非常小。所以算出一个有效Hash非常难,有可能要算上十亿次。
区块头里面还有一个 Nonce 值,记录了 Hash 重算的次数。上图第 0 个区块的 Nonce 值是2083236893,即计算了 20 亿次,才得到了一个有效的 Hash,该区块才能加入区块链。
随着计算机性能的不断提升,想必计算的速度也会越来越快,这样就无法控制比特币的产出速度为10分钟每个了。中本聪为了避免发生这种状况,把难度系数设置了一个可动态调节机制。他规定了难度系数每两周(2016个区块)调整一次。如果这两周里面,区块的平均生成速度是9分钟,就意味着比法定速度快了10%,因此难度系数就要调高10%;如果平均生成速度是11分钟,就意味着比法定速度慢了10%,因此难度系数就要调低10%。现在比特币挖矿的难度系数越调越高(目标值越来越小),导致了采矿越来越难。
领取专属 10元无门槛券
私享最新 技术干货