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