github.com/KiraCore/sekai@v0.3.43/x/basket/keeper/msg_server_test.go (about)

     1  package keeper_test
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/KiraCore/sekai/x/basket/keeper"
     7  	"github.com/KiraCore/sekai/x/basket/types"
     8  	govtypes "github.com/KiraCore/sekai/x/gov/types"
     9  	"github.com/cometbft/cometbft/crypto/ed25519"
    10  	sdk "github.com/cosmos/cosmos-sdk/types"
    11  )
    12  
    13  func (suite *KeeperTestSuite) TestDisableBasketDeposits() {
    14  	suite.SetupTest()
    15  	now := time.Now().UTC()
    16  	suite.ctx = suite.ctx.WithBlockTime(now)
    17  
    18  	addr1 := sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address().Bytes())
    19  	addr2 := sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address().Bytes())
    20  
    21  	suite.app.CustomGovKeeper.SaveNetworkActor(suite.ctx, govtypes.NetworkActor{
    22  		Address: addr2,
    23  		Permissions: &govtypes.Permissions{
    24  			Whitelist: []uint32{uint32(govtypes.PermHandleBasketEmergency)},
    25  		},
    26  	})
    27  
    28  	basket := types.Basket{
    29  		Id:              1,
    30  		Suffix:          "usd",
    31  		Description:     "usd basket",
    32  		LimitsPeriod:    3600,
    33  		Amount:          sdk.NewInt(0),
    34  		SwapFee:         sdk.NewDecWithPrec(1, 2), // 1%
    35  		SlipppageFeeMin: sdk.NewDecWithPrec(1, 2), // 1%
    36  		TokensCap:       sdk.NewDecWithPrec(9, 1), // 90%
    37  		MintsMin:        sdk.NewInt(1),
    38  		MintsMax:        sdk.NewInt(100000000),
    39  		MintsDisabled:   false,
    40  		BurnsMin:        sdk.NewInt(1),
    41  		BurnsMax:        sdk.NewInt(100000000),
    42  		BurnsDisabled:   false,
    43  		SwapsMin:        sdk.NewInt(1),
    44  		SwapsMax:        sdk.NewInt(100000000),
    45  		SwapsDisabled:   false,
    46  		Tokens: []types.BasketToken{
    47  			{
    48  				Denom:     "ukex",
    49  				Weight:    sdk.NewDec(1),
    50  				Amount:    sdk.NewInt(0),
    51  				Deposits:  true,
    52  				Withdraws: true,
    53  				Swaps:     true,
    54  			},
    55  			{
    56  				Denom:     "ueth",
    57  				Weight:    sdk.NewDec(10),
    58  				Amount:    sdk.NewInt(0),
    59  				Deposits:  true,
    60  				Withdraws: true,
    61  				Swaps:     true,
    62  			},
    63  		},
    64  		Surplus: sdk.NewCoins(sdk.NewInt64Coin("ueth", 1)),
    65  	}
    66  	suite.app.BasketKeeper.SetBasket(suite.ctx, basket)
    67  
    68  	msgServer := keeper.NewMsgServerImpl(suite.app.BasketKeeper, suite.app.CustomGovKeeper)
    69  	_, err := msgServer.DisableBasketDeposits(sdk.WrapSDKContext(suite.ctx), &types.MsgDisableBasketDeposits{
    70  		Sender:   addr1.String(),
    71  		BasketId: 1,
    72  	})
    73  	suite.Require().Error(err)
    74  
    75  	_, err = msgServer.DisableBasketDeposits(sdk.WrapSDKContext(suite.ctx), &types.MsgDisableBasketDeposits{
    76  		Sender:   addr2.String(),
    77  		BasketId: 1,
    78  		Disabled: true,
    79  	})
    80  	suite.Require().NoError(err)
    81  
    82  	// check disabled
    83  	savedBasket, err := suite.app.BasketKeeper.GetBasketById(suite.ctx, basket.Id)
    84  	suite.Require().NoError(err)
    85  	suite.Require().True(savedBasket.MintsDisabled)
    86  }
    87  
    88  func (suite *KeeperTestSuite) TestDisableBasketWithdraws() {
    89  	suite.SetupTest()
    90  	now := time.Now().UTC()
    91  	suite.ctx = suite.ctx.WithBlockTime(now)
    92  
    93  	addr1 := sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address().Bytes())
    94  	addr2 := sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address().Bytes())
    95  
    96  	suite.app.CustomGovKeeper.SaveNetworkActor(suite.ctx, govtypes.NetworkActor{
    97  		Address: addr2,
    98  		Permissions: &govtypes.Permissions{
    99  			Whitelist: []uint32{uint32(govtypes.PermHandleBasketEmergency)},
   100  		},
   101  	})
   102  
   103  	basket := types.Basket{
   104  		Id:              1,
   105  		Suffix:          "usd",
   106  		Description:     "usd basket",
   107  		LimitsPeriod:    3600,
   108  		Amount:          sdk.NewInt(0),
   109  		SwapFee:         sdk.NewDecWithPrec(1, 2), // 1%
   110  		SlipppageFeeMin: sdk.NewDecWithPrec(1, 2), // 1%
   111  		TokensCap:       sdk.NewDecWithPrec(9, 1), // 90%
   112  		MintsMin:        sdk.NewInt(1),
   113  		MintsMax:        sdk.NewInt(100000000),
   114  		MintsDisabled:   false,
   115  		BurnsMin:        sdk.NewInt(1),
   116  		BurnsMax:        sdk.NewInt(100000000),
   117  		BurnsDisabled:   false,
   118  		SwapsMin:        sdk.NewInt(1),
   119  		SwapsMax:        sdk.NewInt(100000000),
   120  		SwapsDisabled:   false,
   121  		Tokens: []types.BasketToken{
   122  			{
   123  				Denom:     "ukex",
   124  				Weight:    sdk.NewDec(1),
   125  				Amount:    sdk.NewInt(0),
   126  				Deposits:  true,
   127  				Withdraws: true,
   128  				Swaps:     true,
   129  			},
   130  			{
   131  				Denom:     "ueth",
   132  				Weight:    sdk.NewDec(10),
   133  				Amount:    sdk.NewInt(0),
   134  				Deposits:  true,
   135  				Withdraws: true,
   136  				Swaps:     true,
   137  			},
   138  		},
   139  		Surplus: sdk.NewCoins(sdk.NewInt64Coin("ueth", 1)),
   140  	}
   141  	suite.app.BasketKeeper.SetBasket(suite.ctx, basket)
   142  
   143  	msgServer := keeper.NewMsgServerImpl(suite.app.BasketKeeper, suite.app.CustomGovKeeper)
   144  	_, err := msgServer.DisableBasketWithdraws(sdk.WrapSDKContext(suite.ctx), &types.MsgDisableBasketWithdraws{
   145  		Sender:   addr1.String(),
   146  		BasketId: 1,
   147  	})
   148  	suite.Require().Error(err)
   149  
   150  	_, err = msgServer.DisableBasketWithdraws(sdk.WrapSDKContext(suite.ctx), &types.MsgDisableBasketWithdraws{
   151  		Sender:   addr2.String(),
   152  		BasketId: 1,
   153  		Disabled: true,
   154  	})
   155  	suite.Require().NoError(err)
   156  
   157  	// check disabled
   158  	savedBasket, err := suite.app.BasketKeeper.GetBasketById(suite.ctx, basket.Id)
   159  	suite.Require().NoError(err)
   160  	suite.Require().True(savedBasket.BurnsDisabled)
   161  }
   162  
   163  func (suite *KeeperTestSuite) TestDisableBasketSwaps() {
   164  	suite.SetupTest()
   165  	now := time.Now().UTC()
   166  	suite.ctx = suite.ctx.WithBlockTime(now)
   167  
   168  	addr1 := sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address().Bytes())
   169  	addr2 := sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address().Bytes())
   170  
   171  	suite.app.CustomGovKeeper.SaveNetworkActor(suite.ctx, govtypes.NetworkActor{
   172  		Address: addr2,
   173  		Permissions: &govtypes.Permissions{
   174  			Whitelist: []uint32{uint32(govtypes.PermHandleBasketEmergency)},
   175  		},
   176  	})
   177  
   178  	basket := types.Basket{
   179  		Id:              1,
   180  		Suffix:          "usd",
   181  		Description:     "usd basket",
   182  		LimitsPeriod:    3600,
   183  		Amount:          sdk.NewInt(0),
   184  		SwapFee:         sdk.NewDecWithPrec(1, 2), // 1%
   185  		SlipppageFeeMin: sdk.NewDecWithPrec(1, 2), // 1%
   186  		TokensCap:       sdk.NewDecWithPrec(9, 1), // 90%
   187  		MintsMin:        sdk.NewInt(1),
   188  		MintsMax:        sdk.NewInt(100000000),
   189  		MintsDisabled:   false,
   190  		BurnsMin:        sdk.NewInt(1),
   191  		BurnsMax:        sdk.NewInt(100000000),
   192  		BurnsDisabled:   false,
   193  		SwapsMin:        sdk.NewInt(1),
   194  		SwapsMax:        sdk.NewInt(100000000),
   195  		SwapsDisabled:   false,
   196  		Tokens: []types.BasketToken{
   197  			{
   198  				Denom:     "ukex",
   199  				Weight:    sdk.NewDec(1),
   200  				Amount:    sdk.NewInt(0),
   201  				Deposits:  true,
   202  				Withdraws: true,
   203  				Swaps:     true,
   204  			},
   205  			{
   206  				Denom:     "ueth",
   207  				Weight:    sdk.NewDec(10),
   208  				Amount:    sdk.NewInt(0),
   209  				Deposits:  true,
   210  				Withdraws: true,
   211  				Swaps:     true,
   212  			},
   213  		},
   214  		Surplus: sdk.NewCoins(sdk.NewInt64Coin("ueth", 1)),
   215  	}
   216  	suite.app.BasketKeeper.SetBasket(suite.ctx, basket)
   217  
   218  	msgServer := keeper.NewMsgServerImpl(suite.app.BasketKeeper, suite.app.CustomGovKeeper)
   219  	_, err := msgServer.DisableBasketSwaps(sdk.WrapSDKContext(suite.ctx), &types.MsgDisableBasketSwaps{
   220  		Sender:   addr1.String(),
   221  		BasketId: 1,
   222  	})
   223  	suite.Require().Error(err)
   224  
   225  	_, err = msgServer.DisableBasketSwaps(sdk.WrapSDKContext(suite.ctx), &types.MsgDisableBasketSwaps{
   226  		Sender:   addr2.String(),
   227  		BasketId: 1,
   228  		Disabled: true,
   229  	})
   230  	suite.Require().NoError(err)
   231  
   232  	// check disabled
   233  	savedBasket, err := suite.app.BasketKeeper.GetBasketById(suite.ctx, basket.Id)
   234  	suite.Require().NoError(err)
   235  	suite.Require().True(savedBasket.SwapsDisabled)
   236  }