github.com/KiraCore/sekai@v0.3.43/x/layer2/keeper/msg_server_test.go (about) 1 package keeper_test 2 3 import ( 4 "github.com/KiraCore/sekai/x/layer2/keeper" 5 "github.com/KiraCore/sekai/x/layer2/types" 6 stakingtypes "github.com/KiraCore/sekai/x/staking/types" 7 "github.com/cometbft/cometbft/crypto/ed25519" 8 simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" 9 sdk "github.com/cosmos/cosmos-sdk/types" 10 minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" 11 ) 12 13 func (suite *KeeperTestSuite) TestCreateDappProposal() { 14 addr1 := sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address().Bytes()) 15 16 valAddr := sdk.ValAddress(addr1) 17 pubkeys := simtestutil.CreateTestPubKeys(1) 18 pubKey := pubkeys[0] 19 val, err := stakingtypes.NewValidator(valAddr, pubKey) 20 suite.Require().NoError(err) 21 22 val.Status = stakingtypes.Active 23 suite.app.CustomStakingKeeper.AddValidator(suite.ctx, val) 24 25 coins := sdk.Coins{sdk.NewInt64Coin("ukex", 10000000000)} 26 err = suite.app.BankKeeper.MintCoins(suite.ctx, minttypes.ModuleName, coins) 27 suite.Require().NoError(err) 28 err = suite.app.BankKeeper.SendCoinsFromModuleToAccount(suite.ctx, minttypes.ModuleName, addr1, coins) 29 suite.Require().NoError(err) 30 31 // create dapp 32 msgServer := keeper.NewMsgServerImpl(suite.app.Layer2Keeper) 33 msg := &types.MsgCreateDappProposal{ 34 Sender: addr1.String(), 35 Dapp: types.Dapp{ 36 Name: "dapp1", 37 Denom: "dapp1", 38 Description: "dapp1 description", 39 Status: types.Active, 40 Website: "", 41 Logo: "", 42 Social: "", 43 Docs: "", 44 Controllers: types.Controllers{ 45 Whitelist: types.AccountRange{ 46 Roles: []uint64{1}, 47 Addresses: []string{"kira1q24436yrnettd6v4eu6r4t9gycnnddack4jr5r"}, 48 }, 49 }, 50 Bin: []types.BinaryInfo{ 51 { 52 Name: "dapp1", 53 Hash: "dapp1", 54 Source: "dapp1", 55 Reference: "dapp1", 56 Type: "dapp1", 57 }, 58 }, 59 Pool: types.LpPoolConfig{ 60 Ratio: sdk.OneDec(), 61 Deposit: "", 62 Drip: 86400, 63 }, 64 Issurance: types.IssuranceConfig{ 65 Deposit: "", 66 Premint: sdk.OneInt(), 67 Postmint: sdk.OneInt(), 68 Time: 1680141605, 69 }, 70 VoteQuorum: 30, 71 VotePeriod: 86400, 72 VoteEnactment: 3000, 73 UpdateTimeMax: 60, 74 ExecutorsMin: 1, 75 ExecutorsMax: 2, 76 VerifiersMin: 1, 77 TotalBond: sdk.Coin{}, 78 CreationTime: 0, 79 }, 80 Bond: sdk.NewInt64Coin("ukex", 10000000000), 81 } 82 83 _, err = msgServer.CreateDappProposal(sdk.WrapSDKContext(suite.ctx), msg) 84 suite.Require().NoError(err) 85 86 // check dapp correctly crteated 87 dapp := suite.app.Layer2Keeper.GetDapp(suite.ctx, msg.Dapp.Name) 88 suite.Require().NotEqual(dapp.Name, "") 89 } 90 91 func (suite *KeeperTestSuite) TestBondDappProposal() { 92 addr1 := sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address().Bytes()) 93 94 valAddr := sdk.ValAddress(addr1) 95 pubkeys := simtestutil.CreateTestPubKeys(1) 96 pubKey := pubkeys[0] 97 val, err := stakingtypes.NewValidator(valAddr, pubKey) 98 suite.Require().NoError(err) 99 100 val.Status = stakingtypes.Active 101 suite.app.CustomStakingKeeper.AddValidator(suite.ctx, val) 102 103 coins := sdk.Coins{sdk.NewInt64Coin("ukex", 20000000000)} 104 err = suite.app.BankKeeper.MintCoins(suite.ctx, minttypes.ModuleName, coins) 105 suite.Require().NoError(err) 106 err = suite.app.BankKeeper.SendCoinsFromModuleToAccount(suite.ctx, minttypes.ModuleName, addr1, coins) 107 suite.Require().NoError(err) 108 109 // create dapp 110 msgServer := keeper.NewMsgServerImpl(suite.app.Layer2Keeper) 111 createMsg := &types.MsgCreateDappProposal{ 112 Sender: addr1.String(), 113 Dapp: types.Dapp{ 114 Name: "dapp1", 115 Denom: "dapp1", 116 Description: "dapp1 description", 117 Status: types.Active, 118 Website: "", 119 Logo: "", 120 Social: "", 121 Docs: "", 122 Controllers: types.Controllers{ 123 Whitelist: types.AccountRange{ 124 Roles: []uint64{1}, 125 Addresses: []string{"kira1q24436yrnettd6v4eu6r4t9gycnnddack4jr5r"}, 126 }, 127 }, 128 Bin: []types.BinaryInfo{ 129 { 130 Name: "dapp1", 131 Hash: "dapp1", 132 Source: "dapp1", 133 Reference: "dapp1", 134 Type: "dapp1", 135 }, 136 }, 137 Pool: types.LpPoolConfig{ 138 Ratio: sdk.OneDec(), 139 Deposit: "", 140 Drip: 86400, 141 }, 142 Issurance: types.IssuranceConfig{ 143 Deposit: "", 144 Premint: sdk.OneInt(), 145 Postmint: sdk.OneInt(), 146 Time: 1680141605, 147 }, 148 VoteQuorum: 30, 149 VotePeriod: 86400, 150 VoteEnactment: 3000, 151 UpdateTimeMax: 60, 152 ExecutorsMin: 1, 153 ExecutorsMax: 2, 154 VerifiersMin: 1, 155 TotalBond: sdk.Coin{}, 156 CreationTime: 0, 157 }, 158 Bond: sdk.NewInt64Coin("ukex", 10000000000), 159 } 160 161 _, err = msgServer.CreateDappProposal(sdk.WrapSDKContext(suite.ctx), createMsg) 162 suite.Require().NoError(err) 163 164 // bond dapp 165 bondMsg := &types.MsgBondDappProposal{ 166 Sender: addr1.String(), 167 DappName: createMsg.Dapp.Name, 168 Bond: sdk.NewInt64Coin("ukex", 10000000000), 169 } 170 171 _, err = msgServer.BondDappProposal(sdk.WrapSDKContext(suite.ctx), bondMsg) 172 suite.Require().NoError(err) 173 174 userBond := suite.app.Layer2Keeper.GetUserDappBond(suite.ctx, bondMsg.DappName, addr1.String()) 175 suite.Require().Equal(userBond.Bond.String(), "20000000000ukex") 176 } 177 178 func (suite *KeeperTestSuite) TestReclaimDappBondProposal() { 179 addr1 := sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address().Bytes()) 180 181 valAddr := sdk.ValAddress(addr1) 182 pubkeys := simtestutil.CreateTestPubKeys(1) 183 pubKey := pubkeys[0] 184 val, err := stakingtypes.NewValidator(valAddr, pubKey) 185 suite.Require().NoError(err) 186 187 val.Status = stakingtypes.Active 188 suite.app.CustomStakingKeeper.AddValidator(suite.ctx, val) 189 190 coins := sdk.Coins{sdk.NewInt64Coin("ukex", 20000000000)} 191 err = suite.app.BankKeeper.MintCoins(suite.ctx, minttypes.ModuleName, coins) 192 suite.Require().NoError(err) 193 err = suite.app.BankKeeper.SendCoinsFromModuleToAccount(suite.ctx, minttypes.ModuleName, addr1, coins) 194 suite.Require().NoError(err) 195 196 // create dapp 197 msgServer := keeper.NewMsgServerImpl(suite.app.Layer2Keeper) 198 createMsg := &types.MsgCreateDappProposal{ 199 Sender: addr1.String(), 200 Dapp: types.Dapp{ 201 Name: "dapp1", 202 Denom: "dapp1", 203 Description: "dapp1 description", 204 Status: types.Active, 205 Website: "", 206 Logo: "", 207 Social: "", 208 Docs: "", 209 Controllers: types.Controllers{ 210 Whitelist: types.AccountRange{ 211 Roles: []uint64{1}, 212 Addresses: []string{"kira1q24436yrnettd6v4eu6r4t9gycnnddack4jr5r"}, 213 }, 214 }, 215 Bin: []types.BinaryInfo{ 216 { 217 Name: "dapp1", 218 Hash: "dapp1", 219 Source: "dapp1", 220 Reference: "dapp1", 221 Type: "dapp1", 222 }, 223 }, 224 Pool: types.LpPoolConfig{ 225 Ratio: sdk.OneDec(), 226 Deposit: "", 227 Drip: 86400, 228 }, 229 Issurance: types.IssuranceConfig{ 230 Deposit: "", 231 Premint: sdk.OneInt(), 232 Postmint: sdk.OneInt(), 233 Time: 1680141605, 234 }, 235 VoteQuorum: 30, 236 VotePeriod: 86400, 237 VoteEnactment: 3000, 238 UpdateTimeMax: 60, 239 ExecutorsMin: 1, 240 ExecutorsMax: 2, 241 VerifiersMin: 1, 242 TotalBond: sdk.Coin{}, 243 CreationTime: 0, 244 }, 245 Bond: sdk.NewInt64Coin("ukex", 10000000000), 246 } 247 248 _, err = msgServer.CreateDappProposal(sdk.WrapSDKContext(suite.ctx), createMsg) 249 suite.Require().NoError(err) 250 251 // bond dapp 252 reclaimMsg := &types.MsgReclaimDappBondProposal{ 253 Sender: addr1.String(), 254 DappName: createMsg.Dapp.Name, 255 Bond: sdk.NewInt64Coin("ukex", 10000000), 256 } 257 258 _, err = msgServer.ReclaimDappBondProposal(sdk.WrapSDKContext(suite.ctx), reclaimMsg) 259 suite.Require().NoError(err) 260 261 userBond := suite.app.Layer2Keeper.GetUserDappBond(suite.ctx, reclaimMsg.DappName, addr1.String()) 262 suite.Require().Equal(userBond.Bond.String(), "9990000000ukex") 263 } 264 265 // TODO: add test for JoinDappVerifierWithBond 266 // TODO: add test for ExitDapp 267 // TODO: add test for PauseDappTx 268 // TODO: add test for UnPauseDappTx 269 // TODO: add test for ReactivateDappTx 270 // TODO: add test for ExecuteDappTx 271 // TODO: add test for TransitionDappTx 272 // TODO: add test for DenounceLeaderTx 273 // TODO: add test for ApproveDappTransitionTx 274 // TODO: add test for RejectDappTransitionTx 275 // TODO: add test for TransferDappTx 276 // TODO: add test for RedeemDappPoolTx 277 // TODO: add test for SwapDappPoolTx 278 // TODO: add test for ConvertDappPoolTx 279 // TODO: add test for MintCreateFtTx 280 // TODO: add test for MintCreateNftTx 281 // TODO: add test for MintIssueTx 282 // TODO: add test for MintBurnTx