To calculate blockMultiplier
, the protocol divides the distance between the updated weights and the current weight by the update interval. It seems the protocol incorrectly assumes that weight updates occur precisely at the update intervals. However, weight updates can happen at any time, not just at the designated intervals. Therefore, blockMultiplier
should be calculated by dividing the distance by the time elapsed since the last update, rather than by the update interval.
in UpdateWeightRunner::performUpdate
there is a check for controlling the time of calling the function:
This means that the update can happen at any time after the interval. Therefore, the time that has passed since the last update should be taken into account when calculating blockMultiplier
.
Consider pass the last update time for multiplier calculation. change the add lastUpdate
to CalculateMuliplierAndSetWeightsLocal
structure and then :
Now change the blockMultiplier
calculation like this:
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.