Skip to content

Commit 7bfe3be

Browse files
authored
Avkr003/vaults (#1317)
* setting max-bondable amount for vaults * adding query for max-bondable amount * adding query for max-bondable amount * adding query for max-bondable amount * fixing error * fixing test cases * fixing test cases * fixing test cases
1 parent 455286b commit 7bfe3be

28 files changed

+1969
-315
lines changed

api/elys/stablestake/query.pulsar.go

Lines changed: 1068 additions & 125 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/elys/stablestake/query_grpc.pb.go

Lines changed: 36 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/keepers/keepers.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -682,6 +682,8 @@ func NewAppKeeper(
682682
app.AccountedPoolKeeper,
683683
)
684684

685+
app.StablestakeKeeper.SetLeverageLpKeeper(app.LeveragelpKeeper)
686+
685687
app.TierKeeper = tiermodulekeeper.NewKeeper(
686688
appCodec,
687689
runtime.NewKVStoreService(app.keys[tiermoduletypes.StoreKey]),

proto/elys/stablestake/query.proto

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,12 @@ service Query {
5353
option (google.api.http).get =
5454
"/elys-network/elys/stablestake/interest/{pool_id}/{block_height}";
5555
}
56+
57+
rpc MaxBondableAmount(MaxBondableAmountRequest)
58+
returns (MaxBondableAmountResponse) {
59+
option (google.api.http).get =
60+
"/elys-network/elys/stablestake/max_bondable_amount/{pool_id}";
61+
}
5662
}
5763

5864
// QueryParamsRequest is request type for the Query/Params RPC method.
@@ -198,4 +204,14 @@ message QueryGetInterestRequest {
198204

199205
message QueryGetInterestResponse {
200206
InterestBlock interest_block = 1 [ (gogoproto.nullable) = false ];
207+
}
208+
209+
message MaxBondableAmountRequest { uint64 pool_id = 1; }
210+
211+
message MaxBondableAmountResponse {
212+
string amount = 1 [
213+
(cosmos_proto.scalar) = "cosmos.Int",
214+
(gogoproto.customtype) = "cosmossdk.io/math.Int",
215+
(gogoproto.nullable) = false
216+
];
201217
}

x/leveragelp/keeper/keeper_test.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,19 @@ func (suite *KeeperTestSuite) SetupTest() {
9090
Id: 1,
9191
DepositDenom: ptypes.BaseCurrency,
9292
})
93+
94+
suite.app.StablestakeKeeper.SetPool(suite.ctx, stablestaketypes.Pool{
95+
InterestRate: math.LegacyMustNewDecFromStr("0.15"),
96+
InterestRateMax: math.LegacyMustNewDecFromStr("0.17"),
97+
InterestRateMin: math.LegacyMustNewDecFromStr("0.12"),
98+
InterestRateIncrease: math.LegacyMustNewDecFromStr("0.01"),
99+
InterestRateDecrease: math.LegacyMustNewDecFromStr("0.01"),
100+
HealthGainFactor: math.LegacyOneDec(),
101+
NetAmount: math.ZeroInt(),
102+
MaxLeverageRatio: math.LegacyMustNewDecFromStr("0.7"),
103+
Id: 2,
104+
DepositDenom: ptypes.ATOM,
105+
})
93106
}
94107

95108
func (suite *KeeperTestSuite) ResetSuite() {

x/leveragelp/keeper/msg_server_claim_rewards_test.go

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ func initializeForClaimRewards(suite *KeeperTestSuite, addresses []sdk.AccAddres
2222
issueAmount := sdkmath.NewInt(10_000_000_000_000)
2323
for _, address := range addresses {
2424
coins := sdk.NewCoins(
25-
sdk.NewCoin(ptypes.ATOM, issueAmount),
26-
sdk.NewCoin(ptypes.Elys, issueAmount),
27-
sdk.NewCoin(ptypes.BaseCurrency, issueAmount),
25+
sdk.NewCoin(ptypes.ATOM, issueAmount.MulRaw(100)),
26+
sdk.NewCoin(ptypes.Elys, issueAmount.MulRaw(100)),
27+
sdk.NewCoin(ptypes.BaseCurrency, issueAmount.MulRaw(100)),
2828
)
2929
err := suite.app.BankKeeper.MintCoins(suite.ctx, minttypes.ModuleName, coins)
3030
if err != nil {
@@ -44,18 +44,18 @@ func initializeForClaimRewards(suite *KeeperTestSuite, addresses []sdk.AccAddres
4444
},
4545
PoolAssets: []ammtypes.PoolAsset{
4646
{
47-
Token: sdk.NewInt64Coin(asset1, 100_000_000),
47+
Token: sdk.NewCoin(asset1, issueAmount),
4848
Weight: sdkmath.NewInt(50),
4949
},
5050
{
51-
Token: sdk.NewInt64Coin(asset2, 100_000_000),
51+
Token: sdk.NewCoin(asset2, issueAmount),
5252
Weight: sdkmath.NewInt(50),
5353
},
5454
},
5555
}
56+
poolId, err := suite.app.AmmKeeper.CreatePool(suite.ctx, &msgCreatePool)
57+
suite.Require().NoError(err)
5658
if createAmmPool {
57-
poolId, err := suite.app.AmmKeeper.CreatePool(suite.ctx, &msgCreatePool)
58-
suite.Require().NoError(err)
5959
enablePoolMsg := types.MsgAddPool{
6060
Authority: authtypes.NewModuleAddress("gov").String(),
6161
Pool: types.AddPool{
@@ -68,13 +68,19 @@ func initializeForClaimRewards(suite *KeeperTestSuite, addresses []sdk.AccAddres
6868
suite.Require().NoError(err)
6969

7070
}
71+
72+
params := suite.app.LeveragelpKeeper.GetParams(suite.ctx)
73+
params.EnabledPools = []uint64{1}
74+
err = suite.app.LeveragelpKeeper.SetParams(suite.ctx, &params)
75+
suite.Require().NoError(err)
76+
7177
msgBond := stabletypes.MsgBond{
7278
Creator: addresses[1].String(),
7379
Amount: issueAmount.QuoRaw(20),
7480
PoolId: 1,
7581
}
7682
stableStakeMsgServer := stablekeeper.NewMsgServerImpl(*suite.app.StablestakeKeeper)
77-
_, err := stableStakeMsgServer.Bond(suite.ctx, &msgBond)
83+
_, err = stableStakeMsgServer.Bond(suite.ctx, &msgBond)
7884
if err != nil {
7985
panic(err)
8086
}

x/leveragelp/keeper/msg_server_close_test.go

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ func initializeForClose(suite *KeeperTestSuite, addresses []sdk.AccAddress, asse
2222
issueAmount := sdkmath.NewInt(10_000_000_000_000)
2323
for _, address := range addresses {
2424
coins := sdk.NewCoins(
25-
sdk.NewCoin(ptypes.ATOM, issueAmount),
26-
sdk.NewCoin(ptypes.Elys, issueAmount),
27-
sdk.NewCoin(ptypes.BaseCurrency, issueAmount),
25+
sdk.NewCoin(ptypes.ATOM, issueAmount.MulRaw(1000)),
26+
sdk.NewCoin(ptypes.Elys, issueAmount.MulRaw(1000)),
27+
sdk.NewCoin(ptypes.BaseCurrency, issueAmount.MulRaw(1000)),
2828
)
2929
err := suite.app.BankKeeper.MintCoins(suite.ctx, minttypes.ModuleName, coins)
3030
if err != nil {
@@ -44,11 +44,11 @@ func initializeForClose(suite *KeeperTestSuite, addresses []sdk.AccAddress, asse
4444
},
4545
PoolAssets: []ammtypes.PoolAsset{
4646
{
47-
Token: sdk.NewInt64Coin(asset1, 100_000_000),
47+
Token: sdk.NewCoin(asset1, issueAmount.MulRaw(10)),
4848
Weight: sdkmath.NewInt(50),
4949
},
5050
{
51-
Token: sdk.NewInt64Coin(asset2, 100_000_000),
51+
Token: sdk.NewCoin(asset2, issueAmount.MulRaw(10)),
5252
Weight: sdkmath.NewInt(50),
5353
},
5454
},
@@ -71,6 +71,12 @@ func initializeForClose(suite *KeeperTestSuite, addresses []sdk.AccAddress, asse
7171
Amount: issueAmount.QuoRaw(20),
7272
PoolId: 1,
7373
}
74+
75+
params := suite.app.LeveragelpKeeper.GetParams(suite.ctx)
76+
params.EnabledPools = []uint64{1}
77+
err = suite.app.LeveragelpKeeper.SetParams(suite.ctx, &params)
78+
suite.Require().NoError(err)
79+
7480
stableStakeMsgServer := stablekeeper.NewMsgServerImpl(*suite.app.StablestakeKeeper)
7581
_, err = stableStakeMsgServer.Bond(suite.ctx, &msgBond)
7682
if err != nil {
@@ -275,7 +281,7 @@ func (suite *KeeperTestSuite) TestClose() {
275281
},
276282
func() {
277283
position, _ := suite.app.LeveragelpKeeper.GetPosition(suite.ctx, addresses[0], 1)
278-
actualShares, ok := sdkmath.NewIntFromString("8472689380952380950")
284+
actualShares, ok := sdkmath.NewIntFromString("9991380952380952380")
279285
suite.Require().True(ok)
280286
suite.Require().Equal(position.LeveragedLpAmount.String(), actualShares.String())
281287
},
@@ -284,7 +290,7 @@ func (suite *KeeperTestSuite) TestClose() {
284290
&types.MsgClose{
285291
Creator: addresses[0].String(),
286292
Id: 1,
287-
LpAmount: sdkmath.LegacyMustNewDecFromStr("8472689380952380950").TruncateInt(),
293+
LpAmount: sdkmath.LegacyMustNewDecFromStr("9991380952380952380").TruncateInt(),
288294
},
289295
false,
290296
"",

x/leveragelp/keeper/msg_server_open_test.go

Lines changed: 10 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ func initializeForOpen(suite *KeeperTestSuite, addresses []sdk.AccAddress, asset
2222
issueAmount := sdkmath.NewInt(10_000_000_000_000_000)
2323
for _, address := range addresses {
2424
coins := sdk.NewCoins(
25-
sdk.NewCoin(ptypes.ATOM, issueAmount),
26-
sdk.NewCoin(ptypes.Elys, issueAmount),
27-
sdk.NewCoin(ptypes.BaseCurrency, issueAmount),
25+
sdk.NewCoin(ptypes.ATOM, issueAmount.MulRaw(100)),
26+
sdk.NewCoin(ptypes.Elys, issueAmount.MulRaw(100)),
27+
sdk.NewCoin(ptypes.BaseCurrency, issueAmount.MulRaw(100)),
2828
)
2929
err := suite.app.BankKeeper.MintCoins(suite.ctx, minttypes.ModuleName, coins)
3030
if err != nil {
@@ -44,11 +44,11 @@ func initializeForOpen(suite *KeeperTestSuite, addresses []sdk.AccAddress, asset
4444
},
4545
PoolAssets: []ammtypes.PoolAsset{
4646
{
47-
Token: sdk.NewInt64Coin(asset1, 100_000_000_000_000),
47+
Token: sdk.NewCoin(asset1, issueAmount),
4848
Weight: sdkmath.NewInt(50),
4949
},
5050
{
51-
Token: sdk.NewInt64Coin(asset2, 1000_000_000_000_000),
51+
Token: sdk.NewCoin(asset2, issueAmount),
5252
Weight: sdkmath.NewInt(50),
5353
},
5454
},
@@ -62,6 +62,11 @@ func initializeForOpen(suite *KeeperTestSuite, addresses []sdk.AccAddress, asset
6262
Amount: issueAmount.QuoRaw(20),
6363
PoolId: 1,
6464
}
65+
params := suite.app.LeveragelpKeeper.GetParams(suite.ctx)
66+
params.EnabledPools = []uint64{poolId}
67+
err = suite.app.LeveragelpKeeper.SetParams(suite.ctx, &params)
68+
suite.Require().NoError(err)
69+
6570
stableStakeMsgServer := stablekeeper.NewMsgServerImpl(*suite.app.StablestakeKeeper)
6671
_, err = stableStakeMsgServer.Bond(suite.ctx, &msgBond)
6772
if err != nil {
@@ -428,67 +433,3 @@ func (suite *KeeperTestSuite) TestOpen_PoolWithBaseCurrencyAsset() {
428433
})
429434
}
430435
}
431-
432-
func (suite *KeeperTestSuite) TestOpen_PoolWithoutBaseCurrencyAsset() {
433-
suite.ResetSuite()
434-
// not adding uusdc asset info and price yet
435-
suite.AddCoinPrices(suite.ctx, []string{ptypes.Elys, ptypes.ATOM, "uusdt"})
436-
addresses := simapp.AddTestAddrs(suite.app, suite.ctx, 10, sdkmath.NewInt(1000000))
437-
asset1 := ptypes.ATOM
438-
asset2 := ptypes.Elys
439-
initializeForOpen(suite, addresses, asset1, asset2)
440-
testCases := []struct {
441-
name string
442-
input *types.MsgOpen
443-
expectErr bool
444-
expectErrMsg string
445-
prerequisiteFunction func()
446-
}{
447-
{"Fail to do JoinPoolNoSwap",
448-
&types.MsgOpen{
449-
Creator: addresses[0].String(),
450-
CollateralAsset: ptypes.BaseCurrency,
451-
CollateralAmount: sdkmath.NewInt(10000000),
452-
AmmPoolId: 1,
453-
Leverage: sdkmath.LegacyMustNewDecFromStr("2.0"),
454-
StopLossPrice: sdkmath.LegacyMustNewDecFromStr("50.0"),
455-
},
456-
true,
457-
"Asset: uusdc: asset not found in amm pool", // Can't join elys atom pool with usdc
458-
func() {
459-
},
460-
},
461-
{"Open Position",
462-
&types.MsgOpen{
463-
Creator: addresses[0].String(),
464-
CollateralAsset: ptypes.BaseCurrency,
465-
CollateralAmount: sdkmath.NewInt(10_000_000),
466-
AmmPoolId: 1,
467-
Leverage: sdkmath.LegacyMustNewDecFromStr("2.0"),
468-
StopLossPrice: sdkmath.LegacyMustNewDecFromStr("50.0"),
469-
},
470-
true,
471-
"Asset: uusdc: asset not found in amm pool",
472-
func() {
473-
suite.ResetSuite()
474-
suite.SetupCoinPrices(suite.ctx)
475-
initializeForOpen(suite, addresses, asset1, asset2)
476-
suite.SetSafetyFactor(sdkmath.LegacyMustNewDecFromStr("1.1"))
477-
suite.SetPoolThreshold(sdkmath.LegacyMustNewDecFromStr("0.2"))
478-
},
479-
},
480-
}
481-
482-
for _, tc := range testCases {
483-
suite.Run(tc.name, func() {
484-
tc.prerequisiteFunction()
485-
_, err := suite.app.LeveragelpKeeper.Open(suite.ctx, tc.input)
486-
if tc.expectErr {
487-
suite.Require().Error(err)
488-
suite.Require().Contains(err.Error(), tc.expectErrMsg)
489-
} else {
490-
suite.Require().NoError(err)
491-
}
492-
})
493-
}
494-
}

x/leveragelp/keeper/msg_server_update_stop_loss_test.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ func initializeForUpdateStopLoss(suite *KeeperTestSuite, addresses []sdk.AccAddr
1919
issueAmount := sdkmath.NewInt(10_000_000_000_000)
2020
for _, address := range addresses {
2121
coins := sdk.NewCoins(
22-
sdk.NewCoin(ptypes.ATOM, issueAmount),
23-
sdk.NewCoin(ptypes.Elys, issueAmount),
24-
sdk.NewCoin(ptypes.BaseCurrency, issueAmount),
22+
sdk.NewCoin(ptypes.ATOM, issueAmount.MulRaw(100)),
23+
sdk.NewCoin(ptypes.Elys, issueAmount.MulRaw(100)),
24+
sdk.NewCoin(ptypes.BaseCurrency, issueAmount.MulRaw(100)),
2525
)
2626
err := suite.app.BankKeeper.MintCoins(suite.ctx, minttypes.ModuleName, coins)
2727
if err != nil {
@@ -41,11 +41,11 @@ func initializeForUpdateStopLoss(suite *KeeperTestSuite, addresses []sdk.AccAddr
4141
},
4242
PoolAssets: []ammtypes.PoolAsset{
4343
{
44-
Token: sdk.NewInt64Coin(asset1, 100_000_000),
44+
Token: sdk.NewCoin(asset1, issueAmount),
4545
Weight: sdkmath.NewInt(50),
4646
},
4747
{
48-
Token: sdk.NewInt64Coin(asset2, 100_000_000),
48+
Token: sdk.NewCoin(asset2, issueAmount),
4949
Weight: sdkmath.NewInt(50),
5050
},
5151
},
@@ -67,6 +67,11 @@ func initializeForUpdateStopLoss(suite *KeeperTestSuite, addresses []sdk.AccAddr
6767
Amount: issueAmount.QuoRaw(20),
6868
PoolId: 1,
6969
}
70+
leverageParams := suite.app.LeveragelpKeeper.GetParams(suite.ctx)
71+
leverageParams.EnabledPools = []uint64{1}
72+
err = suite.app.LeveragelpKeeper.SetParams(suite.ctx, &leverageParams)
73+
suite.Require().NoError(err)
74+
7075
stableStakeMsgServer := stablekeeper.NewMsgServerImpl(*suite.app.StablestakeKeeper)
7176
_, err = stableStakeMsgServer.Bond(suite.ctx, &msgBond)
7277
suite.Require().NoError(err)

0 commit comments

Comments
 (0)