CIP-86(Conflux改进提案)详细介绍

本文是整理好的CIP-86中文介绍,供大家交流讨论。

CIP-86详情链接:https://github.com/Conflux-Chain/CIPs/blob/master/CIPs/cip-86.md

简要总结

缩短难度调整周期并应用移动平均方法。

摘要

将难度调整的周期从每5000个epoch减少至每250个epoch。为了避免短期的剧烈波动,在难度调整上应用了SMA(移动平均)方法。

动机

在过去的几个月里,Conflux共识协议经常会遭遇了持续时间不定的闲散算力切换挖矿。这一情况造成了区块生成速率持续波动,峰值时每0.15秒即可生成一个区块。这增加了树图结构中的分叉,增加了智能合约执行引擎的负担。为了缓解该问题,我们需要缩短难度调整周期,以便对算力的变化做出更及时的调整。

说明

原始版本行为

对于区块高度等于 5000k 的区块,其中 k 为整数,按如下方法计算参数 nT

  • n: 过去5000个epoch中包含的区块数。
  • T: 经历过去5000个epoch所消耗的实际时间(以秒为单位)。(关于计算 T 的更多细节请参考Conflux协议规范)

设置变量 d' 代表调整前的区块链难度,而过去5000epoch的估算算力为 p = n * d' / T (哈希率/秒)。为了设置区块生成速率为每0.5秒一个区块,目标难度 d 将被定义为 d = p / 2 = n * d' / T / 2.

调整后的难度 D 将被设置为 d。特别的,如果 d > 1.5 d',则 D 将被设置为 1.5 d'。如果 d < 0.5d',则 D 将被设置为 0.5 d'

新版本行为

对于区块高度等于 250k 的区块,其中 k 为整数,参考如下方法计算参数 nT

  • n: 过去250个epoch中包含的区块数。
  • T: 经历过去5000个epoch所消耗的实际时间(以秒为单位)。

设置变量 d' 代表调整前的区块链难度。同样的,目标难度 d 将被定义为 d = n * d' / T / 2.

此处我们没有设置 d 作为调整后的区块链难度,而是采用了平均方法。接下来250个epoch的区块链难度将被设置为 0.8 d' + 0.2 d。特别的,如果 0.8 d' + 0.2 d > 1.5 d', 则 D 将被设置为 1.5 d'

理论支撑

算力波动的根源是,难度调整算法将会根据 过往多个epoch 估计的算力预测 未来多个epoch 的算力。因此,如果算力持续处于波动变化状态,该算法将会导致错误的预测。

一个更加完整的解决方案是,若实际算力远远大于预测的算力,就减少块的基本奖励。这样,有助于打消矿工进行算力短暂切入及退出积极性。然而,该解决方案将会涉及到经济模型的调整,需要更多的讨论。因此在该提案中我们提出了一个相对简单的解决方案,通过减少难度调整的周期,并使一小时时间窗口内的算力更加稳定。

后向兼容

由于这一调整需要打破当前系统规范,因此需要在一个能够整除5000的区块高度时生效。

安全考虑

更短的难度调整周期,可能会使对参数 T 的估计不准确。但在正常情况下,该误差小于5%。攻击者可以通过一些专门的策略来操纵 T 的结果,但这一行为唯一的效果仅仅是减慢区块生成速率。幸运的是,区块生成速率越低,攻击者操纵 T 的能力就越小。

版权声明

Copyright and related rights waived via CC0.

支持但是POW没有未来!
需要在未来切换到以POS为主的共识机制!

你是sand币吗?pow+pos才是未来!