# Math behind the rewards contract

Last updated

Last updated

**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 the user

changing parameters used to calculate boost, such as rewards per block

* ULR *- Time of rebalancing that occurrs when the user modifies his position (ipToken, pwToken delegation). It is saved under individual staking position.

User power-up

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:

$UPU = \begin{cases}
10\cdot \left(\frac{pwIpor}{ipToken} \right) +0.2 & \frac{pwIpor}{ipToken} < 0.01 \\
4\cdot \left(\frac{pwIpor}{ipToken} \right) +0.26 & \frac{pwIpor}{ipToken} < 0.02 \\
3\cdot \left(\frac{pwIpor}{ipToken} \right) +0.28 & \frac{pwIpor}{ipToken} < 0.03 \\
2\cdot \left(\frac{pwIpor}{ipToken} \right) +0.31 & \frac{pwIpor}{ipToken} < 0.04 \\
1\cdot \left(\frac{pwIpor}{ipToken} \right) +0.35 & \frac{pwIpor}{ipToken} < 0.05 \\
VS + \log_2\left(HS +\frac{pwIpor}{ipToken}\right) & \frac{pwIpor}{ipToken} \ge 0.05 \\
\end{cases}$

* VS* - Vertical Shift

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

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 = \sum_{\# \text{all users whitch stake }ipTokens \geq 1} (ipTokens \cdot UPU)$

* APU* - Aggregate Power-up

Accrued rewards

Accrued rewards are tracked over time to allow for the calculation of users' rewards between events of rebalancing.

Composite Multiplier

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.

Account Mining Rewards

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.

When the user modifies their position, the most recent CMC is saved per the user's record.

Basic assumptions

$\operatorname{accruedRewards} = \operatorname{accruedRewards}_{LR} + \operatorname{rewardsPerBlock} ~\cdot~ \left(\text{blockNumber} - \operatorname{blockNumber}_{LR}\right)$

$CM = \frac{blockRewards}{APU}$

$CMC = \sum_{\# blocks}CM_{Block}$

$userRewards_{n}=ipToken * UPU~*~\left(\operatorname{CMC}_{\operatorname{n-1}}−CMC_{ULR-1}\right)$

The $CMC_{ULR-1}$ is saved when the user modifies his position. It is calculated to reflect the state without accounting for the current block.

$CMC_{ULR-1} = CMC_{LR-1} + \left(URL-LR \right) \cdot CM_{LR}$

VerticalShift ⇒ VS ⇒$10^{-4}$ $\leq$ VS $\leq$ 3

HorizontalShift ⇒ HS ⇒ 1 $\leq$ HS $\leq$ $10^{3}$

ipToken ⇒ 1 $\leq$ ipToken

pwIpor ⇒ 0 $\leq$ pwIpor $\leq$ 25 $\cdot$ $10^{6}$

$blockRewards $\leq$ 100

$totalRewards = 25$\cdot$$10^6$