Skip to content

Commit e830de0

Browse files
committed
Merge branch 'mconcat/refactor-emission-part-1' of github.com:gnoswap-labs/gnoswap into mconcat/refactor-emission-part-1
2 parents 200d8d1 + fc4d377 commit e830de0

6 files changed

+268
-284
lines changed
Lines changed: 240 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,240 @@
1+
package staker
2+
3+
import (
4+
"math"
5+
"std"
6+
"testing"
7+
8+
"gno.land/p/demo/uassert"
9+
10+
"gno.land/r/gnoswap/v1/consts"
11+
12+
en "gno.land/r/gnoswap/v1/emission"
13+
pl "gno.land/r/gnoswap/v1/pool"
14+
pn "gno.land/r/gnoswap/v1/position"
15+
16+
"gno.land/r/gnoswap/v1/gnft"
17+
"gno.land/r/gnoswap/v1/gns"
18+
19+
"gno.land/r/onbloc/bar"
20+
"gno.land/r/onbloc/baz"
21+
"gno.land/r/onbloc/qux"
22+
)
23+
24+
func TestShortWarmUpRemoveTier(t *testing.T) {
25+
testInit(t)
26+
testDoubleMint(t)
27+
testPoolInitCreatePool(t)
28+
testMintBarQux100_1(t)
29+
testMintBarBaz100_2(t)
30+
testSkip100Height(t)
31+
testStakeToken_1(t)
32+
testSetPoolTier(t)
33+
testStakeToken_2(t)
34+
testNow(t)
35+
testRemovePoolTier(t)
36+
testNow2(t)
37+
}
38+
39+
func testInit(t *testing.T) {
40+
t.Run("init pool tiers", func(t *testing.T) {
41+
std.TestSetRealm(adminRealm)
42+
43+
// init pool tiers
44+
// tier 1
45+
deletePoolTier(t, MUST_EXISTS_IN_TIER_1)
46+
addPoolTier(t, `gno.land/r/onbloc/bar:gno.land/r/onbloc/qux:100`, 1)
47+
std.TestSkipHeights(1)
48+
49+
// override warm-up period for testing
50+
changeWarmup(t, 0, 150)
51+
changeWarmup(t, 1, 300)
52+
changeWarmup(t, 2, 900)
53+
changeWarmup(t, 3, math.MaxInt64)
54+
55+
// set unstaking fee to 0
56+
SetUnstakingFeeByAdmin(0)
57+
58+
// set pool creation fee to 0
59+
pl.SetPoolCreationFeeByAdmin(0)
60+
61+
// set community pool distribution to 0% (give it to devOps)
62+
en.ChangeDistributionPctByAdmin(
63+
1, 7500,
64+
2, 2500,
65+
3, 0,
66+
4, 0,
67+
)
68+
})
69+
}
70+
71+
func testDoubleMint(t *testing.T) {
72+
t.Run("mint and distribute gns", func(t *testing.T) {
73+
en.MintAndDistributeGns()
74+
en.MintAndDistributeGns()
75+
76+
std.TestSkipHeights(1)
77+
})
78+
}
79+
80+
func testPoolInitCreatePool(t *testing.T) {
81+
t.Run("create pool", func(t *testing.T) {
82+
83+
std.TestSetRealm(adminRealm)
84+
85+
gns.Approve(a2u(consts.POOL_ADDR), pl.GetPoolCreationFee()*3)
86+
87+
pl.CreatePool(barPath, quxPath, 100, "79228162514264337593543950337")
88+
pl.CreatePool(barPath, bazPath, 3000, "79228162514264337593543950337")
89+
90+
std.TestSkipHeights(1)
91+
})
92+
}
93+
94+
func testMintBarQux100_1(t *testing.T) {
95+
t.Run("mint bar:qux:100", func(t *testing.T) {
96+
std.TestSetRealm(adminRealm)
97+
98+
bar.Approve(a2u(consts.POOL_ADDR), consts.UINT64_MAX)
99+
qux.Approve(a2u(consts.POOL_ADDR), consts.UINT64_MAX)
100+
101+
tokenId, liquidity, amount0, amount1 := pn.Mint(
102+
barPath, // token0
103+
quxPath, // token1
104+
fee100, // fee
105+
int32(-1000), // tickLower
106+
int32(1000), // tickUpper
107+
"50", // amount0Desired
108+
"50", // amount1Desired
109+
"1", // amount0Min
110+
"1", // amount1Min
111+
max_timeout,
112+
adminAddr,
113+
adminAddr,
114+
)
115+
116+
uassert.Equal(t, tokenId, uint64(1))
117+
uassert.Equal(t, gnft.MustOwnerOf(tid(tokenId)), adminAddr)
118+
119+
gpi := getPrintInfo(t)
120+
// {"height":"126","time":"1234567896","gns":{"staker":"32106164","devOps":"10702053","communityPool":"0","govStaker":"0","protocolFee":"0","GnoswapAdmin":"100000000000000"},"pool":[{"poolPath":"gno.land/r/onbloc/bar:gno.land/r/onbloc/qux:100","tier":"1","numPoolSameTier":"1","position":[]}]}
121+
122+
std.TestSkipHeights(1)
123+
})
124+
}
125+
126+
func testMintBarBaz100_2(t *testing.T) {
127+
t.Run("mint bar:baz:3000", func(t *testing.T) {
128+
std.TestSetRealm(adminRealm)
129+
130+
bar.Approve(a2u(consts.POOL_ADDR), consts.UINT64_MAX)
131+
baz.Approve(a2u(consts.POOL_ADDR), consts.UINT64_MAX)
132+
133+
tokenId, liquidity, amount0, amount1 := pn.Mint(
134+
barPath, // token0
135+
bazPath, // token1
136+
fee3000, // fee
137+
int32(-1020), // tickLower
138+
int32(1020), // tickUpper
139+
"50", // amount0Desired
140+
"50", // amount1Desired
141+
"1", // amount0Min
142+
"1", // amount1Min
143+
max_timeout,
144+
adminAddr,
145+
adminAddr,
146+
)
147+
148+
uassert.Equal(t, tokenId, uint64(2))
149+
uassert.Equal(t, gnft.MustOwnerOf(tid(tokenId)), adminAddr)
150+
151+
gpi := getPrintInfo(t)
152+
// {"height":"127","time":"1234567898","gns":{"staker":"42808219","devOps":"14269404","communityPool":"0","govStaker":"0","protocolFee":"0","GnoswapAdmin":"100000000000000"},"pool":[{"poolPath":"gno.land/r/onbloc/bar:gno.land/r/onbloc/qux:100","tier":"1","numPoolSameTier":"1","position":[]}]}
153+
154+
std.TestSkipHeights(1)
155+
})
156+
}
157+
158+
func testSkip100Height(t *testing.T) {
159+
t.Run("skip 100 heights", func(t *testing.T) {
160+
std.TestSkipHeights(100)
161+
162+
gpi := getPrintInfo(t)
163+
// {"height":"228","time":"1234568100","gns":{"staker":"1123715724","devOps":"374571905","communityPool":"0","govStaker":"0","protocolFee":"0","GnoswapAdmin":"100000000000000"},"pool":[{"poolPath":"gno.land/r/onbloc/bar:gno.land/r/onbloc/qux:100","tier":"1","numPoolSameTier":"1","position":[]}]}
164+
165+
std.TestSkipHeights(1)
166+
})
167+
}
168+
169+
func testStakeToken_1(t *testing.T) {
170+
t.Run("stake token 01", func(t *testing.T) {
171+
std.TestSetRealm(adminRealm)
172+
173+
gnft.Approve(consts.STAKER_ADDR, tid(1))
174+
StakeToken(1)
175+
176+
gpi := getPrintInfo(t)
177+
// {"height":"229","time":"1234568102","gns":{"staker":"1134417779","devOps":"378139256","communityPool":"0","govStaker":"0","protocolFee":"0","GnoswapAdmin":"100000000000000"},"pool":[{"poolPath":"gno.land/r/onbloc/bar:gno.land/r/onbloc/qux:100","tier":"1","numPoolSameTier":"1","position":[{"lpTokenId":"1","stakedHeight":"229","stakedTimestamp":"1234568102","stakedDuration":"0","fullAmount":"0","ratio":"30","warmUpAmount":"0","full30":"0","give30":"0","penalty30":"0","full50":"0","give50":"0","penalty50":"0","full70":"0","give70":"0","penalty70":"0","full100":"0","give100":"0","penalty100":"0"}]}]}
178+
179+
std.TestSkipHeights(1)
180+
})
181+
}
182+
183+
func testSetPoolTier(t *testing.T) {
184+
t.Run("set pool tier", func(t *testing.T) {
185+
std.TestSkipHeights(100) // this reward should go to bar:qux:100
186+
187+
std.TestSetRealm(adminRealm)
188+
addPoolTier(t, "gno.land/r/onbloc/bar:gno.land/r/onbloc/baz:3000", 2)
189+
190+
gpi := getPrintInfo(t)
191+
// {"height":"330","time":"1234568304","gns":{"staker":"2215325284","devOps":"738441757","communityPool":"0","govStaker":"0","protocolFee":"0","GnoswapAdmin":"100000000000000"},"pool":[{"poolPath":"gno.land/r/onbloc/bar:gno.land/r/onbloc/baz:3000","tier":"2","numPoolSameTier":"2","position":[]},{"poolPath":"gno.land/r/onbloc/bar:gno.land/r/onbloc/qux:100","tier":"1","numPoolSameTier":"1","position":[{"lpTokenId":"1","stakedHeight":"229","stakedTimestamp":"1234568102","stakedDuration":"101","fullAmount":"1080907453","ratio":"30","warmUpAmount":"324272236","full30":"1080907453","give30":"324272236","penalty30":"756635217","full50":"0","give50":"0","penalty50":"0","full70":"0","give70":"0","penalty70":"0","full100":"0","give100":"0","penalty100":"0"}]}]}
192+
193+
std.TestSkipHeights(1)
194+
})
195+
}
196+
197+
func testStakeToken_2(t *testing.T) {
198+
t.Run("stake token 02", func(t *testing.T) {
199+
std.TestSetRealm(adminRealm)
200+
201+
gnft.Approve(consts.STAKER_ADDR, tid(2))
202+
StakeToken(2)
203+
204+
gpi := getPrintInfo(t)
205+
// {"height":"331","time":"1234568306","gns":{"staker":"2226027339","devOps":"742009108","communityPool":"0","govStaker":"0","protocolFee":"0","GnoswapAdmin":"100000000000000"},"pool":[{"poolPath":"gno.land/r/onbloc/bar:gno.land/r/onbloc/baz:3000","tier":"2","numPoolSameTier":"2","position":[{"lpTokenId":"2","stakedHeight":"331","stakedTimestamp":"1234568306","stakedDuration":"0","fullAmount":"0","ratio":"30","warmUpAmount":"0","full30":"0","give30":"0","penalty30":"0","full50":"0","give50":"0","penalty50":"0","full70":"0","give70":"0","penalty70":"0","full100":"0","give100":"0","penalty100":"0"}]},{"poolPath":"gno.land/r/onbloc/bar:gno.land/r/onbloc/qux:100","tier":"1","numPoolSameTier":"1","position":[{"lpTokenId":"1","stakedHeight":"229","stakedTimestamp":"1234568102","stakedDuration":"102","fullAmount":"764126573","ratio":"30","warmUpAmount":"229237972","full30":"764126573","give30":"229237972","penalty30":"534888601","full50":"0","give50":"0","penalty50":"0","full70":"0","give70":"0","penalty70":"0","full100":"0","give100":"0","penalty100":"0"}]}]}
206+
std.TestSkipHeights(1)
207+
})
208+
}
209+
210+
func testNow(t *testing.T) {
211+
t.Run("now", func(t *testing.T) {
212+
std.TestSetRealm(adminRealm)
213+
214+
gpi := getPrintInfo(t)
215+
// {"height":"332","time":"1234568308","gns":{"staker":"2236729394","devOps":"745576459","communityPool":"0","govStaker":"0","protocolFee":"0","GnoswapAdmin":"100000000000000"},"pool":[{"poolPath":"gno.land/r/onbloc/bar:gno.land/r/onbloc/baz:3000","tier":"2","numPoolSameTier":"2","position":[{"lpTokenId":"2","stakedHeight":"331","stakedTimestamp":"1234568306","stakedDuration":"1","fullAmount":"3210615","ratio":"30","warmUpAmount":"963184","full30":"3210615","give30":"963184","penalty30":"2247431","full50":"0","give50":"0","penalty50":"0","full70":"0","give70":"0","penalty70":"0","full100":"0","give100":"0","penalty100":"0"}]},{"poolPath":"gno.land/r/onbloc/bar:gno.land/r/onbloc/qux:100","tier":"1","numPoolSameTier":"1","position":[{"lpTokenId":"1","stakedHeight":"229","stakedTimestamp":"1234568102","stakedDuration":"103","fullAmount":"771618010","ratio":"30","warmUpAmount":"231485403","full30":"771618010","give30":"231485403","penalty30":"540132607","full50":"0","give50":"0","penalty50":"0","full70":"0","give70":"0","penalty70":"0","full100":"0","give100":"0","penalty100":"0"}]}]}
216+
std.TestSkipHeights(1)
217+
})
218+
}
219+
220+
func testRemovePoolTier(t *testing.T) {
221+
t.Run("remove pool tier", func(t *testing.T) {
222+
std.TestSetRealm(adminRealm)
223+
224+
deletePoolTier(t, "gno.land/r/onbloc/bar:gno.land/r/onbloc/baz:3000")
225+
226+
gpi := getPrintInfo(t)
227+
// {"height":"333","time":"1234568310","gns":{"staker":"2247431449","devOps":"749143810","communityPool":"0","govStaker":"0","protocolFee":"0","GnoswapAdmin":"100000000000000"},"pool":[{"poolPath":"gno.land/r/onbloc/bar:gno.land/r/onbloc/baz:3000","tier":"0","numPoolSameTier":"0","position":[{"lpTokenId":"2","stakedHeight":"331","stakedTimestamp":"1234568306","stakedDuration":"2","fullAmount":"6421231","ratio":"30","warmUpAmount":"1926369","full30":"6421231","give30":"1926369","penalty30":"4494862","full50":"0","give50":"0","penalty50":"0","full70":"0","give70":"0","penalty70":"0","full100":"0","give100":"0","penalty100":"0"}]},{"poolPath":"gno.land/r/onbloc/bar:gno.land/r/onbloc/qux:100","tier":"1","numPoolSameTier":"1","position":[{"lpTokenId":"1","stakedHeight":"229","stakedTimestamp":"1234568102","stakedDuration":"104","fullAmount":"779109447","ratio":"30","warmUpAmount":"233732834","full30":"779109447","give30":"233732834","penalty30":"545376613","full50":"0","give50":"0","penalty50":"0","full70":"0","give70":"0","penalty70":"0","full100":"0","give100":"0","penalty100":"0"}]}]}
228+
std.TestSkipHeights(1)
229+
})
230+
}
231+
232+
func testNow2(t *testing.T) {
233+
t.Run("now 2", func(t *testing.T) {
234+
std.TestSetRealm(adminRealm)
235+
236+
gpi := getPrintInfo(t)
237+
// {"height":"334","time":"1234568312","gns":{"staker":"2258133504","devOps":"752711161","communityPool":"0","govStaker":"0","protocolFee":"0","GnoswapAdmin":"100000000000000"},"pool":[{"poolPath":"gno.land/r/onbloc/bar:gno.land/r/onbloc/baz:3000","tier":"0","numPoolSameTier":"0","position":[{"lpTokenId":"2","stakedHeight":"331","stakedTimestamp":"1234568306","stakedDuration":"3","fullAmount":"6421231","ratio":"30","warmUpAmount":"1926369","full30":"6421231","give30":"1926369","penalty30":"4494862","full50":"0","give50":"0","penalty50":"0","full70":"0","give70":"0","penalty70":"0","full100":"0","give100":"0","penalty100":"0"}]},{"poolPath":"gno.land/r/onbloc/bar:gno.land/r/onbloc/qux:100","tier":"1","numPoolSameTier":"1","position":[{"lpTokenId":"1","stakedHeight":"229","stakedTimestamp":"1234568102","stakedDuration":"105","fullAmount":"799443352","ratio":"30","warmUpAmount":"239833005","full30":"799443352","give30":"239833005","penalty30":"559610347","full50":"0","give50":"0","penalty50":"0","full70":"0","give70":"0","penalty70":"0","full100":"0","give100":"0","penalty100":"0"}]}]}
238+
std.TestSkipHeights(1)
239+
})
240+
}

staker/_helper_test.gno

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -440,6 +440,10 @@ func addPoolTier(t *testing.T, poolPath string, tier uint64) {
440440
pools.GetOrCreate(poolPath)
441441
}
442442

443+
func changePoolTier(t *testing.T, poolPath string, tier uint64) {
444+
poolTier.changeTier(uint64(std.GetHeight()), poolPath, tier)
445+
}
446+
443447
func changeWarmup(t *testing.T, index int, blockDuration int64) {
444448
modifyWarmup(index, blockDuration)
445449
}

staker/reward_calculation_pool.gno

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@ import (
77

88
"gno.land/p/demo/avl"
99

10-
ufmt "gno.land/p/demo/ufmt"
11-
1210
i256 "gno.land/p/gnoswap/int256"
1311
u256 "gno.land/p/gnoswap/uint256"
1412
)

0 commit comments

Comments
 (0)