Booster Math
as of 02/01/2025
Rewards Distribution
Pools of tokens like each collateral in the controller or stakes in USH staking can have multiple batches of rewards in the booster. Each batch of rewards distributes a rewards token at a defined speed S→ Amount of tokens distributed per second, the batch has an Index that is updated at each interaction of any user
Where is the time in seconds since the last distribution of the batch and P is the total amount of tokens in the pool, equal to the sum of all user amounts in the pool . The difference between the batch index and the user index allow to calculate the rewards earned by a user since the last time he received rewards.
The previous equation implies that so, all rewards distributed are in the hands of the users in the pool.
Boosting a Position
To earn rewards users will need to boost their position, staking HTM or HTM-related tokens in the Booster V2. In the case of HTM-related tokens, only the proportion of its values related to HTM is taken into account in the price; for example in the case of an LP token:
Therefore the total staked by a user in USD value is the sum of the tokens staked in the booster multiplied by the token price :
Each pool included in the Booster has a Staking Ratio which represents a percent between 0 and 100 of the value in the pool that needs to be staked in HTM to receive the full rewards. Notice that pools can have different Staking Ratio, and the HTM staked required is a global value:
Where is the price of the token in the pool. Given the previous amount of Total Staked and the Stake Required , the compliance can be defined:
The previous definition of Compliance is instantaneous and doesn’t take into account changes over time in the variables.
Average Compliance
To calculate an average value in time a simple idea is to calculate its integral through time and then divide between the time integral (time elapsed):
For this to be valid we require the values to be continuous, which is not fulfilled when the user interacts by changing his position in the pool or the amount staked; but we can calculate the integral by part at any interaction of the user:
Where the j-intervals are those in which the user did not interact; in other words, at each user interaction, the increment of the integral since the last user interaction is calculated:
So far in a j-interval, we know that the pools and stake amounts are constants; but the prices can change even in a really short interval. When calculating the integral in a j-interval, we’re going to use the average price of the token in that interval, to know the average price we’re going to have a price integral that will be updated at any user interaction:
Using an average price for the token in a j-interval (interval between user interactions) is an approximation, but is enough for us and allows simple tracking of average compliance.
Recapping:
Each time a user interacts, the price integral is going to be updated.
Each time a user interacts, the compliance integral will be updated for that user.
Each time we need to distribute rewards to a user in a pool, an average compliance will be calculated using the last value of the user compliance integral and the value of the compliance integral from the last time the user receive rewards from that pool.
Compliance in Reward Distribution
The compliance will affect the amount of rewards received by a user, any user with a compliance lower than 1 will receive a penalty on the rewards:
Note that a compliance of 1 or higher will imply a zero penalty. Then, the new rewards earned in the booster by the user are:
Last updated