• © Goverland Inc. 2026
  • v1.0.8
  • Privacy Policy
  • Terms of Use
Overtime GovernanceOvertime Governanceby0x461783A831E6dB52D68Ba2f3194F6fd1E0087E04Danijel

TIP-135: Changes to gamified staking distribution

Voting ended almost 3 years agoSucceeded
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

Simple Summary

This TIP proposes to change the ratio between BASE and GAMIFIED staking rewards

Abstract

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.

Motivation

We want to motivate traders to trade as much as possible without having the goal to just reach the max rewards for gamified staking.

Specification

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 + 4 x UserThalesStaked / BiggestThalesStaker

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.

Variables

vaultsMultiplier= multiplier for round Vault deposits LPMultiplier= multiplier for round Vault deposits `tradingMultiplier= multiplier for all AMM trades

Test Cases

BASE rewards

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

GAMIFIED rewards

TEST CASE 1 (Showcase multiplier)

  • 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

In this case USER_10_STAKED is the bigest staker with 500k Thales Staked. Multiplier will be as follows:

  • USER_1_MULTIPLIER = 1 + 4 x USER_1_STAKED/USER_10_STAKED = 1 + 4 x 500/500000 = 1.004
  • USER_2_MULTIPLIER = 1 + 4 x USER_2_STAKED/USER_10_STAKED = 1 + 4 x 1000/500000 = 1.008
  • USER_3_MULTIPLIER = 1 + 4 x 5000/500000 = 1.04
  • USER_4_MULTIPLIER = 1 + 4 x 10000/500000 = 1.08
  • USER_5_MULTIPLIER = 1 + 4 x 50000/500000 = 1.40
  • USER_6_MULTIPLIER = 1 + 4 x 100000/500000 = 1.80
  • USER_7_MULTIPLIER = 1 + 4 x 200000/500000 = 2.60
  • USER_8_MULTIPLIER = 1 + 4 x 300000/500000 = 3.40
  • USER_9_MULTIPLIER = 1 + 4 x 400000/500000 = 4.20
  • USER_10_MULTIPLIER = 1 + 4 x 500000/500000 = 5

We can now calculate final TradingScore for users:

  • USER_1_SCORE = USER_1_MULTIPLIER x USER_1_VOLUME = 1.004 x 1000 = 1004
  • USER_2_SCORE = USER_2_MULTIPLIER x USER_2_VOLUME = 1.008 x 1000 = 1008
  • USER_3_SCORE = USER_3_MULTIPLIER x USER_3_VOLUME = 1.04 x 1000 = 1040
  • USER_4_SCORE = USER_4_MULTIPLIER x USER_4_VOLUME = 1.08 x 1000 = 1080
  • USER_5_SCORE = USER_5_MULTIPLIER x USER_5_VOLUME = 1.40 x 1000 = 1400
  • USER_6_SCORE = USER_6_MULTIPLIER x USER_6_VOLUME = 1.80 x 1000 = 1800
  • USER_7_SCORE = USER_7_MULTIPLIER x USER_7_VOLUME = 2.60 x 1000 = 2600
  • USER_8_SCORE = USER_8_MULTIPLIER x USER_8_VOLUME = 3.40 x 1000 = 3400
  • USER_9_SCORE = USER_9_MULTIPLIER x USER_9_VOLUME = 4.20 x 1000 = 4200
  • USER_10_SCORE = USER_10_MULTIPLIER x USER_10_VOLUME = 5 x 1000 = 5000

When we sum up all scores we get a total score of:

TOTAL_SCORE = 22532

Now we can calculate rewards for users:

GAMIFIED_REWARDS = 30k

  • USER_1_REWARDS = USER_1_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 1004 / 22532 x 30k = 1332.17 Thales
  • USER_2_REWARDS = USER_2_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 1008 / 22532 x 30k = 1336.66 Thales
  • USER_3_REWARDS = USER_3_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 1040 / 22532 x 30k = 1269.75 Thales
  • USER_4_REWARDS = USER_4_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 1080 / 22532 x 30k = 1204.54 Thales
  • USER_5_REWARDS = USER_5_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 1400 / 22532 x 30k = 1875.26 Thales
  • USER_6_REWARDS = USER_6_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 1800 / 22532 x 30k = 2409.08 Thales
  • USER_7_REWARDS = USER_7_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 2600 / 22532 x 30k = 3471.89 Thales
  • USER_8_REWARDS = USER_8_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 3400 / 22532 x 30k = 5085.79 Thales
  • USER_9_REWARDS = USER_9_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 4200 / 22532 x 30k = 6311.75 Thales
  • USER_10_REWARDS = USER_10_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 5000 / 22532 x 30k = 6663.25 Thales

TEST CASE 2 (Showcase volume )

  • USER_1_STAKED = 500 Thales, USER_1_VOLUME = 100
  • USER_2_STAKED = 1000 Thales, USER_2_VOLUME = 250
  • USER_3_STAKED = 5000 Thales, USER_3_VOLUME = 500
  • USER_4_STAKED = 10000 Thales, USER_4_VOLUME = 750
  • USER_5_STAKED = 50000 Thales, USER_5_VOLUME = 1000
  • USER_6_STAKED = 100000 Thales, USER_6_VOLUME = 1500
  • USER_7_STAKED = 200000 Thales, USER_7_VOLUME = 2000
  • USER_8_STAKED = 300000 Thales, USER_8_VOLUME = 5000
  • USER_9_STAKED = 400000 Thales, USER_9_VOLUME = 10000
  • USER_10_STAKED = 500000 Thales, USER_10_VOLUME = 20000

In this case USER_10_STAKED is the bigest staker with 500k Thales Staked. Multiplier will be as follows:

  • USER_1_MULTIPLIER = 1 + 4 x USER_1_STAKED/USER_10_STAKED = 1 + 4 x 500/500000 = 1.004
  • USER_2_MULTIPLIER = 1 + 4 x USER_2_STAKED/USER_10_STAKED = 1 + 4 x 1000/500000 = 1.008
  • USER_3_MULTIPLIER = 1 + 4 x 5000/500000 = 1.04
  • USER_4_MULTIPLIER = 1 + 4 x 10000/500000 = 1.08
  • USER_5_MULTIPLIER = 1 + 4 x 50000/500000 = 1.40
  • USER_6_MULTIPLIER = 1 + 4 x 100000/500000 = 1.80
  • USER_7_MULTIPLIER = 1 + 4 x 200000/500000 = 2.60
  • USER_8_MULTIPLIER = 1 + 4 x 300000/500000 = 3.40
  • USER_9_MULTIPLIER = 1 + 4 x 400000/500000 = 4.20
  • USER_10_MULTIPLIER = 1 + 4 x 500000/500000 = 5

We can now calculate final TradingScore for users:

  • USER_1_SCORE = USER_1_MULTIPLIER x USER_1_VOLUME = 1.004 x 100 = 100.4
  • USER_2_SCORE = USER_2_MULTIPLIER x USER_2_VOLUME = 1.008 x 250 = 252
  • USER_3_SCORE = USER_3_MULTIPLIER x USER_3_VOLUME = 1.04 x 500 = 520
  • USER_4_SCORE = USER_4_MULTIPLIER x USER_4_VOLUME = 1.08 x 750 = 810
  • USER_5_SCORE = USER_5_MULTIPLIER x USER_5_VOLUME = 1.40 x 1000 = 1400
  • USER_6_SCORE = USER_6_MULTIPLIER x USER_6_VOLUME = 1.80 x 1500 = 2700
  • USER_7_SCORE = USER_7_MULTIPLIER x USER_7_VOLUME = 2.60 x 2000 = 5200
  • USER_8_SCORE = USER_8_MULTIPLIER x USER_8_VOLUME = 3.40 x 5000 = 17000
  • USER_9_SCORE = USER_9_MULTIPLIER x USER_9_VOLUME = 4.20 x 10000 = 42000
  • USER_10_SCORE = USER_10_MULTIPLIER x USER_10_VOLUME = 5 x 20000 = 100000

When we sum up all scores we get a total score of:

TOTAL_SCORE = 169986

Now we can calculate rewards for users:

GAMIFIED_REWARDS = 30k

  • USER_1_REWARDS = USER_1_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 100.4 / 169986 x 30k = 17.66 Thales
  • USER_2_REWARDS = USER_2_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 252 / 169986 x 30k = 44.41 Thales
  • USER_3_REWARDS = USER_3_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 520 / 169986 x 30k = 91.61 Thales
  • USER_4_REWARDS = USER_4_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 810 / 169986 x 30k = 142.77 Thales
  • USER_5_REWARDS = USER_5_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 1400 / 169986 x 30k = 232.62 Thales
  • USER_6_REWARDS = USER_6_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 2700 / 169986 x 30k = 425.51 Thales
  • USER_7_REWARDS = USER_7_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 5200 / 169986 x 30k = 820.41 Thales
  • USER_8_REWARDS = USER_8_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 17000 / 169986 x 30k = 1691.97 Thales
  • USER_9_REWARDS = USER_9_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 42000 / 169986 x 30k = 4213.69 Thales
  • USER_10_REWARDS = USER_10_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 100000 / 169986 x 30k = 17614.94 Thales

TEST CASE 3 (Showcase volume )

  • USER_1_STAKED = 500 Thales, USER_1_VOLUME = 20000
  • USER_2_STAKED = 1000 Thales, USER_2_VOLUME = 10000
  • USER_3_STAKED = 5000 Thales, USER_3_VOLUME = 5000
  • USER_4_STAKED = 10000 Thales, USER_4_VOLUME = 2000
  • USER_5_STAKED = 50000 Thales, USER_5_VOLUME = 1500
  • USER_6_STAKED = 100000 Thales, USER_6_VOLUME = 1000
  • USER_7_STAKED = 200000 Thales, USER_7_VOLUME = 750
  • USER_8_STAKED = 300000 Thales, USER_8_VOLUME = 500
  • USER_9_STAKED = 400000 Thales, USER_9_VOLUME = 250
  • USER_10_STAKED = 500000 Thales, USER_10_VOLUME = 100

In this case USER_10_STAKED is the bigest staker with 500k Thales Staked. Multiplier will be as follows:

  • USER_1_MULTIPLIER = 1 + 4 x USER_1_STAKED/USER_10_STAKED = 1 + 4 x 500/500000 = 1.004
  • USER_2_MULTIPLIER = 1 + 4 x USER_2_STAKED/USER_10_STAKED = 1 + 4 x 1000/500000 = 1.008
  • USER_3_MULTIPLIER = 1 + 4 x 5000/500000 = 1.04
  • USER_4_MULTIPLIER = 1 + 4 x 10000/500000 = 1.08
  • USER_5_MULTIPLIER = 1 + 4 x 50000/500000 = 1.40
  • USER_6_MULTIPLIER = 1 + 4 x 100000/500000 = 1.80
  • USER_7_MULTIPLIER = 1 + 4 x 200000/500000 = 2.60
  • USER_8_MULTIPLIER = 1 + 4 x 300000/500000 = 3.40
  • USER_9_MULTIPLIER = 1 + 4 x 400000/500000 = 4.20
  • USER_10_MULTIPLIER = 1 + 4 x 500000/500000 = 5

We can now calculate final TradingScore for users:

  • USER_1_SCORE = USER_1_MULTIPLIER x USER_1_VOLUME = 1.004 x 20000 = 20080
  • USER_2_SCORE = USER_2_MULTIPLIER x USER_2_VOLUME = 1.008 x 10000 = 10080
  • USER_3_SCORE = USER_3_MULTIPLIER x USER_3_VOLUME = 1.04 x 5000 = 5200
  • USER_4_SCORE = USER_4_MULTIPLIER x USER_4_VOLUME = 1.08 x 2000 = 2160
  • USER_5_SCORE = USER_5_MULTIPLIER x USER_5_VOLUME = 1.40 x 1500 = 2100
  • USER_6_SCORE = USER_6_MULTIPLIER x USER_6_VOLUME = 1.80 x 1000 = 1800
  • USER_7_SCORE = USER_7_MULTIPLIER x USER_7_VOLUME = 2.60 x 750 = 1950
  • USER_8_SCORE = USER_8_MULTIPLIER x USER_8_VOLUME = 3.40 x 500 = 1700
  • USER_9_SCORE = USER_9_MULTIPLIER x USER_9_VOLUME = 4.20 x 250 = 1050
  • USER_10_SCORE = USER_10_MULTIPLIER x USER_10_VOLUME = 5 x 100 = 500

When we sum up all scores we get a total score of:

TOTAL_SCORE = 46620

Now we can calculate rewards for users:

GAMIFIED_REWARDS = 30k

  • USER_1_REWARDS = USER_1_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 20080 / 46620 x 30k = 12950.05 Thales
  • USER_2_REWARDS = USER_2_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 10080 / 46620 x 30k = 6197.08 Thales
  • USER_3_REWARDS = USER_3_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 5200 / 46620 x 30k = 3407.71 Thales
  • USER_4_REWARDS = USER_4_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 2160 / 46620 x 30k = 1567.37 Thales
  • USER_5_REWARDS = USER_5_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 2100 / 46620 x 30k = 1530.04 Thales
  • USER_6_REWARDS = USER_6_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 1800 / 46620 x 30k = 1305.03 Thales
  • USER_7_REWARDS = USER_7_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 1950 / 46620 x 30k = 1411.37 Thales
  • USER_8_REWARDS = USER_8_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 1700 / 46620 x 30k = 1230.02 Thales
  • USER_9_REWARDS = USER_9_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 1050 / 46620 x 30k = 720.43 Thales
  • USER_10_REWARDS = USER_10_SCORE/TOTAL_SCORE x GAMIFIED_REWARDS = 500 / 46620 x 30k = 256.05 Thales

Implementation

TBD

Copyright

Copyright and related rights waived via CC0.

Off-Chain Vote

YES
6 TC-NFT100%
NO
0 TC-NFT0%
Download mobile app to vote

Timeline

May 06, 2023Proposal created
May 06, 2023Proposal vote started
May 09, 2023Proposal vote ended
Dec 19, 2024Proposal updated