This document examines the SVY token emissions schedule. We perform a number of checks to ensure the accuracy of the schedule and token quantities. Finally, using the emissions schedule we just validated, we visualize the 6-year timecourse of the schedule.
The numbers discussed in this report are current as of the date above - but may be subject to change due to DAO governance. For example, the DAO will be empowered to adjust the distribution of emissions to various liquidity pools. Please ensure you have access to the latest data.
In the first section of this document, we will checksum each of the allocations to ensure monthly allocations sum to the proper total allocation. Each time a test results in TRUE, this means we obtained the expected result.
svy_total = 10000000
team_total = .11 * svy_total
treasury_total = .11 * svy_total
dao_total = .15 * svy_total
ecosystem = round(.07 * svy_total, digits=0)
liquidity_mining_total = .39 * svy_total
boost_total = round(.07 * svy_total, digits=0)
lge_total = 0 * svy_total
lbp_total = .05 * svy_total
seed_total = .05 * svy_total
checksum = team_total +
treasury_total +
dao_total +
ecosystem +
liquidity_mining_total +
boost_total +
lge_total +
lbp_total +
seed_total
checksum == svy_total
[1] TRUE
checksum == 10000000
[1] TRUE
As 1,000,000 SVY are allocated to the launch, the remaining 9,000,000 SVY are emitted over time.
svy_total - lge_total - lbp_total - seed_total == 9000000
[1] TRUE
For most of the allocations, emissions are linear.
Total Seed allocation is 500,000 over 2 years.
seed_total == 500000
[1] TRUE
seed_per_month = 20833.33
all.equal(seed_total, seed_per_month*24, tolerance=0.001)
[1] TRUE
[1] TRUE
Total Team emissions are 1,100,000 SVY. Team allocations are slightly larger during the first month, then the remaining months are constant.
team_total == 1100000
[1] TRUE
team_per_month = (team_total - 77000 - 40000) / 70
team_per_month
[1] 14042.86
all.equal(77000 + 40000 + team_per_month * 70, team_total, tolerance=0.001)
[1] TRUE
team_series = c(77000, 40000, rep(team_per_month, 70))
all.equal(sum(team_series), team_total, tolerance=0.001)
[1] TRUE
Total Treasury emissions are 1,100,000 SVY. Treasury emissions are front-loaded and occur over a 2-year term. Emissions during the first two months are the greatest; the subsequent two months are also larger, and the remaining months are constant.
treasury_total == 1100000
[1] TRUE
Determine monthly emissions
treasury_monthly = (treasury_total - 200000*2 - 100000*2) / 20
treasury_monthly
[1] 25000
200000 * 2 + 100000 * 2 + treasury_monthly * 20 == treasury_total
[1] TRUE
treasury_series = c(rep(200000, 2), rep(100000, 2), rep(treasury_monthly, 20))
all.equal(sum(treasury_series), treasury_total, tolerance=0.001)
[1] TRUE
Total DAO emissions are 1,500,000 SVY. The DAO receives a slightly larger allocation during the first month, then the remaining months are constant.
dao_total == 1500000
[1] TRUE
dao_monthly = (dao_total - 22000) / 71
dao_monthly
[1] 20816.9
22000 + dao_monthly * 71 == dao_total
[1] TRUE
[1] TRUE
The Ecosystem allocation is for growing the protocol. Total Ecosystem/Bounty emissions are 700,000 SVY Ecosystem emissions are brief, concluding within five months. They are constant throughout.
ecosystem_total = 700000
ecosystem_monthly = ecosystem_total / 5
ecosystem_monthly
[1] 140000
Total veSVY Boost emissions are 700,000 SVY. The veSVY Boost emissions start at a reduced rate for 4 months, but becomes constant for the remainder of the 72-month term.
boost_total == 700000
[1] TRUE
Calculate the SVY per month for months 5-72.
boost_monthly = (boost_total - (4000 + 5000 + 6000 + 7000)) / 68
boost_monthly
[1] 9970.588
Ensure this sums to the total.
4000 + 5000 + 6000 + 7000 + (boost_monthly * 68) == boost_total
[1] TRUE
Create data series and ensure that sums to total, also.
[1] TRUE
Total Liquidity Mining emissions are 3,900,000 SVY. These emissions are the most complex; they start at a substantial amount and are reduced each month, generating a cumulative emissions curve. The cumulative emissions for any year are given by the following function:
\(\frac{3051915 * year^{\frac{3}{4}}}{3}\)
[1] "delta. : 0.087992"
Examine sums; ensure delta ~ 0.
sprintf("summed. : %f", final_summed_monthly)
[1] "summed. : 3900000.087992"
sprintf("cumulative: %f", final_cumulative)
[1] "cumulative: 3900000.087992"
sprintf("delta. : %f", final_delta)
[1] "delta. : 0.087992"
Examine monthly emissions
[1] 157784.83 107576.57 94310.24 86611.26 81302.48 77307.80
[7] 74136.53 71525.66 69318.66 67415.28 65747.69 64268.01
[13] 62941.23 61741.06 60647.29 59644.05 58718.68 57860.94
[19] 57062.41 56316.12 55616.22 54957.77 54336.55 53748.93
[25] 53191.77 52662.34 52158.26 51677.42 51217.96 50778.22
[31] 50356.74 49952.19 49563.39 49189.27 48828.85 48481.26
[37] 48145.70 47821.45 47507.82 47204.22 46910.08 46624.88
[43] 46348.15 46079.44 45818.34 45564.48 45317.49 45077.06
[49] 44842.88 44614.65 44392.12 44175.03 43963.14 43756.24
[55] 43554.12 43356.59 43163.45 42974.54 42789.70 42608.76
[61] 42431.58 42258.03 42087.97 41921.27 41757.83 41597.53
[67] 41440.25 41285.90 41134.39 40985.62 40839.50 40695.94
Checksum Liquidity Mining Emissions
mining_series = unlist(lapply(1:72, monthly_emissions))
all.equal(sum(mining_series), mining_total, tolerance=0.001)
[1] TRUE
The monthly emissions values that we just checksummed are combined into a single table to be plotted.
The following plot depicts the cumulative SVY distribution schedule over a 6-year period.
Because the Launch and Seed are one-time events, we have also plotted the Cumulative Emissions Schedule without those allocations.
year | treasury | dao_ecosystem | team | boost | liquidity_mining | tge | seed |
---|---|---|---|---|---|---|---|
1 | 8e+05 | 950985.9 | 257428.6 | 101764.7 | 1017305.0 | 5e+05 | 250000 |
2 | 3e+05 | 249802.8 | 168514.3 | 119647.1 | 693591.3 | NA | 250000 |
3 | NA | 249802.8 | 168514.3 | 119647.1 | 608057.7 | NA | NA |
4 | NA | 249802.8 | 168514.3 | 119647.1 | 558419.1 | NA | NA |
5 | NA | 249802.8 | 168514.3 | 119647.1 | 524191.2 | NA | NA |
6 | NA | 249802.8 | 168514.3 | 119647.1 | 498435.8 | NA | NA |
Because liquidity mining emissions are more dynamic towards launch time, we examined week-level emissions for greater time resolution.
week | per_week | cumulative |
---|---|---|
1 | 55785.36 | 55785.36 |
2 | 38034.06 | 93819.42 |
3 | 33343.70 | 127163.12 |
4 | 30621.70 | 157784.83 |
5 | 28744.77 | 186529.60 |
6 | 27332.43 | 213862.03 |
7 | 26211.22 | 240073.26 |
8 | 25288.14 | 265361.39 |
9 | 24507.85 | 289869.24 |
10 | 23834.90 | 313704.14 |
11 | 23245.32 | 336949.46 |
12 | 22722.17 | 359671.63 |
13 | 22253.08 | 381924.72 |
14 | 21828.76 | 403753.48 |
15 | 21442.06 | 425195.53 |
16 | 21087.36 | 446282.89 |
17 | 20760.19 | 467043.08 |
18 | 20456.93 | 487500.01 |
19 | 20174.61 | 507674.62 |
20 | 19910.76 | 527585.37 |
21 | 19663.30 | 547248.68 |
22 | 19430.51 | 566679.19 |
23 | 19210.87 | 585890.06 |
24 | 19003.11 | 604893.17 |
25 | 18806.13 | 623699.30 |
26 | 18618.95 | 642318.25 |
27 | 18440.73 | 660758.98 |
28 | 18270.73 | 679029.71 |
29 | 18108.28 | 697137.99 |
30 | 17952.81 | 715090.80 |
31 | 17803.80 | 732894.60 |
32 | 17660.77 | 750555.37 |
33 | 17523.31 | 768078.67 |
34 | 17391.03 | 785469.70 |
35 | 17263.61 | 802733.31 |
36 | 17140.71 | 819874.02 |
37 | 17022.08 | 836896.10 |
38 | 16907.43 | 853803.53 |
39 | 16796.55 | 870600.09 |
40 | 16689.21 | 887289.30 |
41 | 16585.22 | 903874.52 |
42 | 16484.39 | 920358.91 |
43 | 16386.55 | 936745.45 |
44 | 16291.54 | 953036.99 |
45 | 16199.23 | 969236.22 |
46 | 16109.48 | 985345.70 |
47 | 16022.15 | 1001367.85 |
48 | 15937.15 | 1017305.00 |
Emissions have been calculated for 72 periods of distribution, corresponding to the 72 months in a 6-year duration. Each month is broken into 4 weeks of 7 days each, resulting in 48 periods per year. Because most months have more than 28 days, the emissions are simply distributed evenly across the time period, such that those 48 periods expanded to cover a full year. This structure makes it very easy to calculate the monthly emissions quantities, which is how the contracts are coded, but it becomes slightly awkward to calculate daily quantities.