Standards Track: Core
EIP-100: 将难度调整更改为包括叔块的平均区块时间
EIP-100: 将难度调整更改为包括叔块的平均区块时间
Authors | Vitalik Buterin (@vbuterin) |
---|---|
Created | 2016-04-28 |
规范
目前,计算区块难度的公式包括以下逻辑:
adj_factor = max(1 - ((timestamp - parent.timestamp) // 10), -99)
child_diff = int(max(parent.difficulty + (parent.difficulty // BLOCK_DIFF_FACTOR) * adj_factor, min(parent.difficulty, MIN_DIFF)))
...
如果 block.number >= BYZANTIUM_FORK_BLKNUM
,我们将第一行更改为以下内容:
adj_factor = max((2 if len(parent.uncles) else 1) - ((timestamp - parent.timestamp) // 9), -99)
理由
这个新公式确保了难度调整算法以一个恒定的平均速率为目标生产区块,包括叔块,因此确保了一个高度可预测的发行率,这个发行率不能通过操纵叔块率来向上操纵。一个考虑了包含叔块的确切数量的公式:
adj_factor = max(1 + len(parent.uncles) - ((timestamp - parent.timestamp) // 9), -99)
可以很容易地看出(在约3/4194304的容差范围内)在数学上等同于假设一个带有k
个叔块的区块等同于一个k+1
的区块序列,这些区块都以完全相同的时间戳出现,这可能是实现预期效果的最简单方法。但是由于确切的公式取决于完整的区块而不仅仅是头部,所以我们使用一个近似的公式来完成几乎相同的效果,但它的好处是它只取决于区块头(你可以根据空白哈希检查叔块哈希)。
将分母从10改为9,以确保区块时间大致相同(事实上,考虑到当前7%的叔块率,区块时间应该减少约3%)。
参考文献
- EIP 100的问题和讨论: https://github.com/ethereum/EIPs/issues/100
- https://bitslog.wordpress.com/2016/04/28/uncle-mining-an-ethereum-consensus-protocol-flaw/
Citation
Please cite this document as:
Vitalik Buterin (@vbuterin), "EIP-100: 将难度调整更改为包括叔块的平均区块时间," Ethereum Improvement Proposals, no. 100, April 2016. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-100.