Comment on page

# 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 the user
- changing parameters used to calculate boost, such as rewards per block

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

**ULR**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}$

*- Vertical Shift*

**VS***- Horizontal Shift*

**HS***- User's pwIPOR balance delegated to a particular asset*

**pwIpor***- User's staked ipToken balance*

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

*- Aggregate Power-up*

**APU***- User Power-up*

**UPU**

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

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

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

The composite multiplier (CM) accounts for the rewards per "boosted unit of liquidity staked" per block.

$CMC = \sum_{\# blocks}CM_{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.$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}$

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

VerticalShift ⇒ VS ⇒

$10^{-4}$

$\leq$

VS $\leq$

3HorizontalShift ⇒ HS ⇒ 1

$\leq$

HS $\leq$

$10^{3}$

ipToken ⇒ 1

$\leq$

ipTokenpwIpor ⇒ 0

$\leq$

pwIpor $\leq$

25 $\cdot$

$10^{6}$

$blockRewards

$\leq$

100$totalRewards = 25

$\cdot$

$10^6$