以太坊难度调整算法
比特币是每隔2016个区块调整一下挖矿难度,目标是维持出块时间在10分钟左右。以太坊是每个区块都有可能调整挖矿难度,调整的算法比较复杂,已经变更了很多次。
以下是区块难度的公式,这个H是当前的区块,这个Hi是当前区块的序号,D(H))是当前的难度。
这里难度调整的公式有两部分,max括号里的是一部分,也称基础部分,目的是为了维持出块时间在15s左右;后面的也称为难度炸弹,作用主要是为了向权益证明过度,将来的以太坊将逐渐由工作量证明转向权益证明。
父区块指当前区块链的最后一个区块
主要和两个因素有关,一个是出块时间,一个是父区块有没有叔父区块。
因为难度的最低为-99,所以难度的最多下调99/2048,这个难度有可能是正的也有可能是负数,负的难度要往下调。
为什么设置难度炸弹?
设置难度炸弹的原因是要降低迁移到 PoS 协议时发生 fork 的风险:到时候挖矿难度非常大,所以矿工有意愿迁移到 PoS 协议。
但是因为低估了 PoS 协议的开发难度,需要延长大概一年半的时间,而此时难度炸弹的威力已经显现,导致挖矿难度越来越大,所以在计算难度炸弹时将真正的区块号减去三百万,以此降低挖矿难度。