github.com/KiraCore/sekai@v0.3.43/x/layer2/keeper/lp_swap_redeem_convert_test.go (about) 1 package keeper_test 2 3 import ( 4 "github.com/KiraCore/sekai/x/layer2/types" 5 "github.com/cometbft/cometbft/crypto/ed25519" 6 sdk "github.com/cosmos/cosmos-sdk/types" 7 authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" 8 minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" 9 ) 10 11 func (suite *KeeperTestSuite) TestLpTokenPrice() { 12 dapp := types.Dapp{ 13 Name: "dapp1", 14 Denom: "dapp1", 15 Description: "dapp1 description", 16 Status: types.Active, 17 Website: "", 18 Logo: "", 19 Social: "", 20 Docs: "", 21 Controllers: types.Controllers{ 22 Whitelist: types.AccountRange{ 23 Roles: []uint64{1}, 24 Addresses: []string{"kira1q24436yrnettd6v4eu6r4t9gycnnddack4jr5r"}, 25 }, 26 }, 27 Bin: []types.BinaryInfo{ 28 { 29 Name: "dapp1", 30 Hash: "dapp1", 31 Source: "dapp1", 32 Reference: "dapp1", 33 Type: "dapp1", 34 }, 35 }, 36 Pool: types.LpPoolConfig{ 37 Ratio: sdk.OneDec(), 38 Deposit: "", 39 Drip: 86400, 40 }, 41 Issurance: types.IssuranceConfig{ 42 Deposit: "", 43 Premint: sdk.OneInt(), 44 Postmint: sdk.OneInt(), 45 Time: 1680141605, 46 }, 47 VoteQuorum: 30, 48 VotePeriod: 86400, 49 VoteEnactment: 3000, 50 UpdateTimeMax: 60, 51 ExecutorsMin: 1, 52 ExecutorsMax: 2, 53 VerifiersMin: 1, 54 TotalBond: sdk.NewInt64Coin("ukex", 10000), 55 CreationTime: 0, 56 PoolFee: sdk.NewDec(1), 57 } 58 59 suite.app.Layer2Keeper.SetDapp(suite.ctx, dapp) 60 61 lpToken := dapp.LpToken() 62 err := suite.app.BankKeeper.MintCoins(suite.ctx, minttypes.ModuleName, sdk.Coins{sdk.NewInt64Coin(lpToken, 10000)}) 63 suite.Require().NoError(err) 64 65 price := suite.app.Layer2Keeper.LpTokenPrice(suite.ctx, dapp) 66 suite.Require().Equal(price, sdk.OneDec()) 67 } 68 69 func (suite *KeeperTestSuite) TestOnCollectFee() { 70 coins := sdk.Coins{sdk.NewInt64Coin("ukex", 10000)} 71 err := suite.app.BankKeeper.MintCoins(suite.ctx, types.ModuleName, coins) 72 suite.Require().NoError(err) 73 74 moduleAddr := authtypes.NewModuleAddress(types.ModuleName) 75 balances := suite.app.BankKeeper.GetAllBalances(suite.ctx, moduleAddr) 76 suite.Require().False(balances.Empty()) 77 78 err = suite.app.Layer2Keeper.OnCollectFee(suite.ctx, coins) 79 suite.Require().NoError(err) 80 81 balances = suite.app.BankKeeper.GetAllBalances(suite.ctx, moduleAddr) 82 suite.Require().True(balances.Empty()) 83 } 84 85 func (suite *KeeperTestSuite) TestRedeemDappPoolTx() { 86 dapp := types.Dapp{ 87 Name: "dapp1", 88 Denom: "dapp1", 89 Description: "dapp1 description", 90 Status: types.Active, 91 Website: "", 92 Logo: "", 93 Social: "", 94 Docs: "", 95 Controllers: types.Controllers{ 96 Whitelist: types.AccountRange{ 97 Roles: []uint64{1}, 98 Addresses: []string{"kira1q24436yrnettd6v4eu6r4t9gycnnddack4jr5r"}, 99 }, 100 }, 101 Bin: []types.BinaryInfo{ 102 { 103 Name: "dapp1", 104 Hash: "dapp1", 105 Source: "dapp1", 106 Reference: "dapp1", 107 Type: "dapp1", 108 }, 109 }, 110 Pool: types.LpPoolConfig{ 111 Ratio: sdk.OneDec(), 112 Deposit: "", 113 Drip: 86400, 114 }, 115 Issurance: types.IssuranceConfig{ 116 Deposit: "", 117 Premint: sdk.OneInt(), 118 Postmint: sdk.OneInt(), 119 Time: 1680141605, 120 }, 121 VoteQuorum: 30, 122 VotePeriod: 86400, 123 VoteEnactment: 3000, 124 UpdateTimeMax: 60, 125 ExecutorsMin: 1, 126 ExecutorsMax: 2, 127 VerifiersMin: 1, 128 TotalBond: sdk.NewInt64Coin("ukex", 10000), 129 CreationTime: 0, 130 PoolFee: sdk.NewDec(1), 131 } 132 133 suite.app.Layer2Keeper.SetDapp(suite.ctx, dapp) 134 135 lpToken := dapp.LpToken() 136 lpCoins := sdk.Coins{sdk.NewInt64Coin(lpToken, 10000)} 137 err := suite.app.BankKeeper.MintCoins(suite.ctx, minttypes.ModuleName, lpCoins) 138 suite.Require().NoError(err) 139 140 addr := sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address().Bytes()) 141 err = suite.app.BankKeeper.SendCoinsFromModuleToAccount(suite.ctx, minttypes.ModuleName, addr, lpCoins) 142 suite.Require().NoError(err) 143 144 err = suite.app.BankKeeper.MintCoins(suite.ctx, types.ModuleName, sdk.Coins{dapp.TotalBond}) 145 suite.Require().NoError(err) 146 147 price := suite.app.Layer2Keeper.LpTokenPrice(suite.ctx, dapp) 148 suite.Require().Equal(price, sdk.OneDec()) 149 150 out, err := suite.app.Layer2Keeper.RedeemDappPoolTx(suite.ctx, addr, dapp, sdk.NewDecWithPrec(1, 1), sdk.NewInt64Coin(lpToken, 1000)) 151 suite.Require().NoError(err) 152 suite.Require().Equal(out.String(), "819ukex") 153 154 out, err = suite.app.Layer2Keeper.SwapDappPoolTx(suite.ctx, addr, dapp, sdk.NewDecWithPrec(1, 1), sdk.NewInt64Coin("ukex", 800)) 155 suite.Require().NoError(err) 156 suite.Require().Equal(out.String(), "667lp/dapp1") 157 } 158 159 func (suite *KeeperTestSuite) TestConvertDappPoolTx() { 160 dapps := []types.Dapp{ 161 { 162 Name: "dapp1", 163 Denom: "dapp1", 164 Description: "dapp1 description", 165 Status: types.Active, 166 Website: "", 167 Logo: "", 168 Social: "", 169 Docs: "", 170 Controllers: types.Controllers{ 171 Whitelist: types.AccountRange{ 172 Roles: []uint64{1}, 173 Addresses: []string{"kira1q24436yrnettd6v4eu6r4t9gycnnddack4jr5r"}, 174 }, 175 }, 176 Bin: []types.BinaryInfo{ 177 { 178 Name: "dapp1", 179 Hash: "dapp1", 180 Source: "dapp1", 181 Reference: "dapp1", 182 Type: "dapp1", 183 }, 184 }, 185 Pool: types.LpPoolConfig{ 186 Ratio: sdk.OneDec(), 187 Deposit: "", 188 Drip: 86400, 189 }, 190 Issurance: types.IssuranceConfig{ 191 Deposit: "", 192 Premint: sdk.OneInt(), 193 Postmint: sdk.OneInt(), 194 Time: 1680141605, 195 }, 196 VoteQuorum: 30, 197 VotePeriod: 86400, 198 VoteEnactment: 3000, 199 UpdateTimeMax: 60, 200 ExecutorsMin: 1, 201 ExecutorsMax: 2, 202 VerifiersMin: 1, 203 TotalBond: sdk.NewInt64Coin("ukex", 10000), 204 CreationTime: 0, 205 PoolFee: sdk.NewDec(1), 206 }, 207 { 208 Name: "dapp2", 209 Denom: "dapp2", 210 Description: "dapp2 description", 211 Status: types.Active, 212 Website: "", 213 Logo: "", 214 Social: "", 215 Docs: "", 216 Controllers: types.Controllers{ 217 Whitelist: types.AccountRange{ 218 Roles: []uint64{1}, 219 Addresses: []string{"kira1q24436yrnettd6v4eu6r4t9gycnnddack4jr5r"}, 220 }, 221 }, 222 Bin: []types.BinaryInfo{ 223 { 224 Name: "dapp2", 225 Hash: "dapp2", 226 Source: "dapp2", 227 Reference: "dapp2", 228 Type: "dapp2", 229 }, 230 }, 231 Pool: types.LpPoolConfig{ 232 Ratio: sdk.OneDec(), 233 Deposit: "", 234 Drip: 86400, 235 }, 236 Issurance: types.IssuranceConfig{ 237 Deposit: "", 238 Premint: sdk.OneInt(), 239 Postmint: sdk.OneInt(), 240 Time: 1680141605, 241 }, 242 VoteQuorum: 30, 243 VotePeriod: 86400, 244 VoteEnactment: 3000, 245 UpdateTimeMax: 60, 246 ExecutorsMin: 1, 247 ExecutorsMax: 2, 248 VerifiersMin: 1, 249 TotalBond: sdk.NewInt64Coin("ukex", 10000), 250 CreationTime: 0, 251 PoolFee: sdk.NewDec(1), 252 }, 253 } 254 255 for _, dapp := range dapps { 256 suite.app.Layer2Keeper.SetDapp(suite.ctx, dapp) 257 } 258 dapp1 := dapps[0] 259 dapp2 := dapps[1] 260 261 addr := sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address().Bytes()) 262 263 lpToken1 := dapp1.LpToken() 264 lpCoins1 := sdk.Coins{sdk.NewInt64Coin(lpToken1, 10000)} 265 err := suite.app.BankKeeper.MintCoins(suite.ctx, minttypes.ModuleName, lpCoins1) 266 suite.Require().NoError(err) 267 err = suite.app.BankKeeper.SendCoinsFromModuleToAccount(suite.ctx, minttypes.ModuleName, addr, lpCoins1) 268 suite.Require().NoError(err) 269 270 lpToken2 := dapp2.LpToken() 271 lpCoins2 := sdk.Coins{sdk.NewInt64Coin(lpToken2, 10000)} 272 err = suite.app.BankKeeper.MintCoins(suite.ctx, types.ModuleName, lpCoins2) 273 suite.Require().NoError(err) 274 275 err = suite.app.BankKeeper.MintCoins(suite.ctx, types.ModuleName, sdk.Coins{dapp1.TotalBond}) 276 suite.Require().NoError(err) 277 278 price := suite.app.Layer2Keeper.LpTokenPrice(suite.ctx, dapp1) 279 suite.Require().Equal(price, sdk.OneDec()) 280 281 out, err := suite.app.Layer2Keeper.ConvertDappPoolTx(suite.ctx, addr, dapp1, dapp2, sdk.NewInt64Coin(lpToken1, 1000)) 282 suite.Require().NoError(err) 283 suite.Require().Equal(out.String(), "218lp/dapp2") 284 }