Math behind the rewards contract
LR - Block number when the last rebalancing took place. Certain variables would be rebalanced when the state change is necessary. Those events would include:
- adding or modifying staked tokens balance by user
- changing parameters used to calculate boost, such as rewards per block
ULR - Rebalancing that takes place when the user has modified his position (ipToken, pwToken delegation). It is saved under individual staking position.
User power-up is calculated for each user whose position changes. That includes staking or unstaking ipTokens or modifying the delegated balance of pwIPOR.
The user's power-up is governed by the below function:
VS - Vertical Shift
HS - Horizontal Shift
pwIpor - User's pwIPOR balance delegated to a particular asset
ipToken - User's staked ipToken balance
The curve can be swapped by the DAO for a different one at a later stage in time, affecting all future rebalancings. The user's power-up value is fixed and can only be changed if the rebalancing is triggered.
Aggregate Power-up is a synthetic summary of all power-ups across all users. It's used to calculate individual rewards in relation to the rest of the pool.
APU - Aggregate Power-up
UPU - User Power-up
Accrued rewards are tracked over time to allow for the calculation of users' rewards between events of rebalancing.
The composite multiplier (CM) accounts for the rewards per "boosted unit of liquidity staked" per block.
Composite Multiplier Cummulative (CMC) is a sum of Composite multipliers for every block until now.
User rewards at block n can be calculated using the below formula. Block ULR is the block with the state of compositeMultiplierCumulative (CMC) at the time of the last rebalancing of user rewards.
The
is saved when the user modifies his position. It is calculated to reflect the state without accounting for the current block.
When the user modifies their position, the most recent CMC is saved per the user's record.
VerticalShift ⇒ VS ⇒
VS
3
HorizontalShift ⇒ HS ⇒ 1
HS
ipToken ⇒ 1
ipToken
pwIpor ⇒ 0
pwIpor
25
$blockRewards
100
$totalRewards = 25