Rewards: fix calculation by using a snapshot of token supply at the time that signal was last updated #569
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Current rewards calculation tries to follow a curve
p*r^(t-b) - p
, wherep
is token supply,r
is issuance rate plus one,t
is current block andb
is the block when signal was last updated on any subgraph.For this to follow the expected curve, however,
p
must correspond to the token supply at blockb
, and not to the time-varying instant supply. This PR fixes the calculation by adding a token supply snapshot, and adds two regression tests that are fixed by this PR and that exemplify the consequences of this bug.Note that this also changes the
RewardsManager.initialize()
function by removing the call to set issuance rate, since we now need the address of theGraphToken
contract (to get the supply snapshot) that is not available at initialization time.