Qitmeer 难度调整

难度调整的基本步骤

  • 选取在最新的N个区块窗口。

  • 选取一个参考目标或难度系数。它可以是取最后一个区块(所有的使用 DigiShield 调整算法的币种)也可以是取最后 N 个区块(*GravityWave,Zcash)的平均值。

  • 获取最后一个区块与之前N个区块之间经过的时间。这个区块时间的获取可以按原样子(* GravityWave),也可以采用前 X 个区块的中位数以防止时间错位攻击(Zcash,Digishield)。

  • 潜在地应用一些阻尼因子(Zcash,Digishield)。

  • 计算新的难度目标值作为参考目标:测定计算消耗的时间,然后除以理想的消耗时间。

  • 与之前的难度目标值相比,新的难度目标值可以改变多少的限制(使用 Digishield 调整算法,则是下降16%,提高8%;Zcash 中是下降32%,提高16%;AntiGravityWave中是下降1/2,提高2倍)。

  • 如果获得的目标值更高,则返回最小目标。

Qitmeer难度调整过程(测试网参数)

  • 从当前区块向前选择多少个区块作为计算单位:A = 144 (ps:难度调整频率,每144个块调整一次,类比比特币中的2016个块)

  • 选择多少个单位加权求平均值,即:B = 20 (ps:即选择20个单元的平均难度值来衡量当前难度水平??究竟是20个单元还是20个区块,有待技术进一步确认!!!!)

  • 出块的目标限制时间:T = 120(秒)(ps:即平常所说的出块时间,例如比特币的10分钟)

  • 三种基础 初始难度:Diff1 = 0x1e00ffff,Diff2 = 1000,Diff3 = 1000

  • 实际出块时间 =(最后一个块的出块时间(也可是理论上 下一个块的出块时间) - 一个单元中的第一个块的出块时间

  • 目标块的出块时间定值:目标出块时间 = T * A = 144 * 120,对于每一个单元而言(144个块)

  • 一个单位的难度调整指标:难度调整单位 = 实际出块时间 / 目标出块时间,精确计算时,再放大 2^32 倍。即 调整难度值 = 实际出块时间 / 目标出块时间 * 2^32

  • 所有20个单元内的难度值拟计算为:调整值1,调整值2 …调整值20

  • 根据最新的区块时间可以最好地改善整个网络的计算能力的原则,对20个区块进行加权平均,从而得到平均难度调整指标。

  • 平均难度调整指标(AVERAGE(Adjustment)) =(调整值1 * 2^20 + 调整1 * 2^19 + …调整1 * 2^1)/(2^20 + 2^19 + … 2^1)

  • 最后一个区块的难度是参考目标,称为 oldDiff,难度参考目标初始值oldDiff =基本初始难度

  • 当前难度值应为:curDiff = oldDiff * 平均难度调整指标 / 2^32

  • 如果当前难度值小于参考目标难度值的四分之一,即 curDiff < oldDiff /4,那么当前难度值就取参考难度值的四分之一(curDiff = oldDiff / 4)

  • 如果当前难度值大于参考目标难度值的 4 倍,即 curDiff > oldDiff * 4,那么当前难度值就取参考难度值的 4 倍(curDiff = oldDiff * 4)

1赞

:clap:

干货值得学习,要好好研究一下

难度参数出来了。

嗯嗯

么么答

感谢分享

现在这个参数还只是内测参数,不排除对某些参数做修正的可能

1赞