id | Title | Status | Author | Description | Discussions to | Created |
---|---|---|---|---|---|---|
TIP-135 | Staking contract changes | Draft | GorstakThales | Changing how rewards for staking are distributed on Optimism | discordlink | 2023-04-14 |
This TIP proposes to change how the bonus rewards are allocated in gamified staking
Currently stakers on Optimism are weekly receiving 90k THALES, 60K is used for BASE rewards awarding all stakers, and 30k is used for GAMIFIED rewards awarding stakers who are active on Thales protocol. This means that the ratio is 2:1 for BASE rewards, favoring idle stakers. From those 30k allocated to GAMIFIED staking, 21k (70%) are allocated for Protocol Usage (Thales AMM trading, Vaults, Liquidity providing, Overtime trading) and 9k (30%) for SNX stakers. To max out the protocol usage bucket a user needs to have at least 2 sUSD traded per 1 THALES received in last 4 weeks, which was very easy to do especially with introducing Vaults and LP.
We want to motivate traders to trade as much as possible without having the goal to just reach the max rewards for gamified staking.
This TIP proposes to remove caps for maxing out rewards and volume will be calculated per week. Additionally with this TIP we will introduce a new way of calculating GAMIFIED rewards. GAMIFIED rewards will be distributed based on amount of Thales staked and volume generated per week.
SNX bucket is deprecated. Base and Bonus buckets stay as they are for the first iteration (on both Arbitrum and Optimism).
There are 3 ways of generating volume on Thales protocol:
- Trade via ThalesAMM/SportsAMM
- Deposit into Vaults
- Deposit into LP
Lets put this into a formula:
UserVolume = UserTotalVaultsDeposit x vaultsMultiplier + UserLPDeposit x LPMultiplier + TradingVolume x tradingMultiplier
.
The values of multipliers are as follows:
vaultsMultiplier
= 0.25
LPMultiplier
= 0.5
tradingMultiplier
= 1
We will introduce a new multiplier that will be calculated based on amount of Thales staked.
New ThalesMultiplier
will have a minimal value of 1 and a maximum value of 5. (min and max value will be configurable variables).
ThalesMultiplier = 1 + UserThalesStaked / StakingDivider
StakingDivider
is a configurable variable that will be set to 100,000. Thus, if someone stakes 100k THALES, his multipler is 2 (1+1). If someone stakes 700k THALES, his multipier is 5 (as its the maximum multiplier).
We apply ThalesMultiplier
to UserVolume
to get final score for user:
TradingScore = ThalesMultiplier x UserVolume
Now we can distribute the rewards Pro rata based on TradingScore
.
vaultsMultiplier
= 0.25x, multiplier for round Vault deposits
LPMultiplier
= 0.5x, multiplier for round Vault deposits
tradingMultiplier
= 1x, multiplier for all AMM trades
StakingDivider
= 100k, used for getting the staked multiplier
Thales staking contract has 3 users:
- USER_1_STAKED = 100 Thales
- USER_2_STAKED = 200 Thales
- USER_3_STAKED = 300 Thales
Staking contract has a TOTAL_STAKED of 100 + 200 + 300 = 600Thales staked. BASE_REWARDS per week are 45k Thales.
BASE rewards distribution for users:
- USER_1_BASE = BASE_REWARDS x USER_1_STAKED/TOTAL_STAKED = 45k x 100 / 600 = 7500 Thales
- USER_2_BASE = BASE_REWARDS x USER_2_STAKED/TOTAL_STAKED = 45k x 200 / 600 = 15000 Thales
- USER_3_BASE = BASE_REWARDS x USER_3_STAKED/TOTAL_STAKED = 45k x 300 / 600 = 22500 Thales
- USER_1_STAKED = 500 Thales, USER_1_VOLUME = 1000
- USER_2_STAKED = 1000 Thales, USER_2_VOLUME = 1000
- USER_3_STAKED = 5000 Thales, USER_3_VOLUME = 1000
- USER_4_STAKED = 10000 Thales, USER_4_VOLUME = 1000
- USER_5_STAKED = 50000 Thales, USER_5_VOLUME = 1000
- USER_6_STAKED = 100000 Thales, USER_6_VOLUME = 1000
- USER_7_STAKED = 200000 Thales, USER_7_VOLUME = 1000
- USER_8_STAKED = 300000 Thales, USER_8_VOLUME = 1000
- USER_9_STAKED = 400000 Thales, USER_9_VOLUME = 1000
- USER_10_STAKED = 500000 Thales, USER_10_VOLUME = 1000
Multiplier will be as follows:
- USER_1_MULTIPLIER = 1 + USER_1_STAKED/100000 = 1 + 500/100000 = 1.005
- USER_2_MULTIPLIER = 1 + USER_2_STAKED/100000 = 1 + 1000/100000 = 1.01
- USER_3_MULTIPLIER = 1 + 5000/100000 = 1.05
- USER_4_MULTIPLIER = 1 + 10000/100000 = 1.10
- USER_5_MULTIPLIER = 1 + 50000/100000 = 1.50
- USER_6_MULTIPLIER = 1 + 100000/100000 = 2.00
- USER_7_MULTIPLIER = 1 + 200000/100000 = 3.00
- USER_8_MULTIPLIER = 1 + 300000/100000 = 4.00
- USER_9_MULTIPLIER = 1 + 400000/100000 = 5.00
- USER_10_MULTIPLIER = 1 + 500000/100000 = 5 (max set)
We can now calculate final TradingScore for users:
- USER_1_SCORE = USER_1_MULTIPLIER x USER_1_VOLUME = 1.005 x 1000 = 1005
- USER_2_SCORE = USER_2_MULTIPLIER x USER_2_VOLUME = 1.01 x 1000 = 1010
- USER_3_SCORE = USER_3_MULTIPLIER x USER_3_VOLUME = 1.05 x 1000 = 1050
- USER_4_SCORE = USER_4_MULTIPLIER x USER_4_VOLUME = 1.10 x 1000 = 1100
- USER_5_SCORE = USER_5_MULTIPLIER x USER_5_VOLUME = 1.50 x 1000 = 1500
- USER_6_SCORE = USER_6_MULTIPLIER x USER_6_VOLUME = 2.00 x 1000 = 2000
- USER_7_SCORE = USER_7_MULTIPLIER x USER_7_VOLUME = 3.00 x 1000 = 3000
- USER_8_SCORE = USER_8_MULTIPLIER x USER_8_VOLUME = 4.00 x 1000 = 4000
- USER_9_SCORE = USER_9_MULTIPLIER x USER_9_VOLUME = 5.00 x 1000 = 5000
- USER_10_SCORE = USER_10_MULTIPLIER x USER_10_VOLUME = 5.00 x 1000 = 5000
When we sum up all scores we get a total score of:
TOTAL_SCORE = 24665
Now we can calculate rewards for users:
GAMIFIED_REWARDS = 30k
- USER_1_REWARDS = USER_1_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 1005 / 24665 x 30000 = 1222.38 Thales
- USER_2_REWARDS = USER_2_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 1010 / 24665 x 30000 = 1228.46 Thales
- USER_3_REWARDS = USER_3_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 1050 / 24665 x 30000 = 1277.11 Thales
- USER_4_REWARDS = USER_4_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 1100 / 24665 x 30000 = 1337.93 Thales
- USER_5_REWARDS = USER_5_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 1500 / 24665 x 30000 = 1824.45 Thales
- USER_6_REWARDS = USER_6_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 2000 / 24665 x 30000 = 2432.60 Thales
- USER_7_REWARDS = USER_7_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 3000 / 24665 x 30000 = 3648.90 Thales
- USER_8_REWARDS = USER_8_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 4000 / 24665 x 30000 = 4865.20 Thales
- USER_9_REWARDS = USER_9_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 5000 / 24665 x 30000 = 6081.50 Thales
- USER_10_REWARDS = USER_10_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 5000 / 24665 x 30000 = 6081.50 Thales
Copyright and related rights waived via CC0.