比特币的挖矿难度调整

一、挖矿难度

挖矿需满足区块头的哈希值小于等于target阈值,公式为:
H(blockheader)targetH(block header) ≤ target
挖矿难度与target成反比,target越小,挖矿难度越高,难度公式为:
difficulty=difficulty_1_targettargetdifficulty = \frac{difficulty\_1\_target}{target}

挖矿难度决定了出块时间,难度越高,出块就越慢;那么如果尽量降低难度,缩短出块时间,从而增大比特币吞吐量,是否可行呢?

二、挖矿难度不能太低

如果通过降低难度,缩短出块时间,那么会导致分叉成为常态,无法达成共识,如下图所示红色部分:
比特币的挖矿难度调整
分叉太多的话,还会造成算力的分散,这时只要集中足量的算力在很久之前的某一条区块后面挖矿,很快就会让自己的这条链成为最长合法链,继而推翻之前最长合法链上的交易,分叉攻击会变得非常容易,如上图深蓝色部分所示。

在以太坊中,出块时间降低到15s,同样存在分叉过多的问题,以太坊使用uncle reward机制防止算力分散。

三、挖矿难度调整策略

比特币规定每2016个区块调整一次难度,由于每个区块的产生时间大约是10min,所有大约每14天调整一次难度,推导如下:
2016×10min60min×24h14\frac{2016×10min}{60min×24h}≈14天

调整target阈值,即为调整挖矿难度,target阈值计算公式为(其中expected time取值2016×10min):
target=target×actual timeexpected timetarget=target×\frac{actual\ time}{expected\ time}

如果公式计算出的难度调整比例低于1/4,则:
target=target×14target=target×\frac{1}{4}
如果公式计算出的难度调整比例高于4倍,则:
target=target×4target=target×4
根据公式可得,如果算力越高,target阈值会变小,挖矿难度变大,币的价值也就得到了保证。