github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/token/types/msgs_test.go (about)

     1  package types
     2  
     3  import (
     4  	"strconv"
     5  	"testing"
     6  
     7  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
     8  	"github.com/fibonacci-chain/fbc/libs/tendermint/crypto/secp256k1"
     9  	"github.com/fibonacci-chain/fbc/x/common"
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  func TestNewMsgTokenIssue(t *testing.T) {
    14  	priKey := secp256k1.GenPrivKey()
    15  	pubKey := priKey.PubKey()
    16  	addr := sdk.AccAddress(pubKey.Address())
    17  	totalSupply := "20000"
    18  
    19  	testCase := []struct {
    20  		issueMsg MsgTokenIssue
    21  		err      sdk.Error
    22  	}{
    23  		{NewMsgTokenIssue("bnb", "bnb", "bnb", "binance coin", totalSupply, addr, true),
    24  			nil},
    25  		{NewMsgTokenIssue("", "", "", "binance coin", totalSupply, addr, true),
    26  			ErrUserInputSymbolIsEmpty()},
    27  		{NewMsgTokenIssue("bnb", "bnb", "bnb", "binance 278343298$%%^&  coin", totalSupply, addr, true),
    28  			ErrWholeNameIsNotValidl()},
    29  		{NewMsgTokenIssue("bnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbnbbn", "bnb", "bnb", "binance coin", totalSupply, addr, true),
    30  			ErrDescLenBiggerThanLimit()},
    31  		{NewMsgTokenIssue("bnb", "bnb", "bnb", "binance coin", strconv.FormatInt(int64(99*1e10), 10), addr, true),
    32  			ErrTotalSupplyOutOfRange()},
    33  		{NewMsgTokenIssue("", "", "", "binance coin", totalSupply, sdk.AccAddress{}, true),
    34  			ErrAddressIsRequired()},
    35  		{NewMsgTokenIssue("", "", "bnb-asd", "binance coin", totalSupply, addr, true),
    36  			ErrNotAllowedOriginalSymbol("bnb-asd")},
    37  	}
    38  
    39  	for _, msgCase := range testCase {
    40  		err := msgCase.issueMsg.ValidateBasic()
    41  		if err != nil {
    42  			require.EqualValues(t, msgCase.err.Error(), err.Error())
    43  		} else {
    44  			require.EqualValues(t, err, msgCase.err)
    45  		}
    46  
    47  	}
    48  
    49  	tokenIssueMsg := testCase[0].issueMsg
    50  	signAddr := tokenIssueMsg.GetSigners()
    51  	require.EqualValues(t, []sdk.AccAddress{addr}, signAddr)
    52  
    53  	bz := ModuleCdc.MustMarshalJSON(tokenIssueMsg)
    54  	require.EqualValues(t, sdk.MustSortJSON(bz), tokenIssueMsg.GetSignBytes())
    55  	require.EqualValues(t, "token", tokenIssueMsg.Route())
    56  	require.EqualValues(t, "issue", tokenIssueMsg.Type())
    57  }
    58  
    59  func TestNewMsgTokenBurn(t *testing.T) {
    60  	priKey := secp256k1.GenPrivKey()
    61  	pubKey := priKey.PubKey()
    62  	addr := sdk.AccAddress(pubKey.Address())
    63  	decCoin := sdk.NewDecCoinFromDec(common.NativeToken, sdk.NewDec(100))
    64  
    65  	decCoin0 := decCoin
    66  	decCoin0.Denom = ""
    67  
    68  	decCoin1 := decCoin
    69  	decCoin1.Denom = "1okb-ads"
    70  
    71  	testCase := []struct {
    72  		burnMsg MsgTokenBurn
    73  		err     sdk.Error
    74  	}{
    75  		{NewMsgTokenBurn(decCoin, addr), nil},
    76  		{NewMsgTokenBurn(decCoin0, addr), common.ErrInsufficientCoins(DefaultParamspace, "100.000000000000000000")},
    77  		{NewMsgTokenBurn(decCoin, sdk.AccAddress{}), ErrAddressIsRequired()},
    78  		{NewMsgTokenBurn(decCoin1, addr), common.ErrInsufficientCoins(DefaultParamspace, "100.0000000000000000001okb-ads")},
    79  	}
    80  
    81  	for _, msgCase := range testCase {
    82  		err := msgCase.burnMsg.ValidateBasic()
    83  		if err != nil {
    84  			require.EqualValues(t, msgCase.err.Error(), err.Error())
    85  		} else {
    86  			require.EqualValues(t, err, msgCase.err)
    87  		}
    88  	}
    89  
    90  	tokenBurnMsg := testCase[0].burnMsg
    91  	signAddr := tokenBurnMsg.GetSigners()
    92  	require.EqualValues(t, []sdk.AccAddress{addr}, signAddr)
    93  
    94  	bz := ModuleCdc.MustMarshalJSON(tokenBurnMsg)
    95  	require.EqualValues(t, sdk.MustSortJSON(bz), tokenBurnMsg.GetSignBytes())
    96  	require.EqualValues(t, "token", tokenBurnMsg.Route())
    97  	require.EqualValues(t, "burn", tokenBurnMsg.Type())
    98  
    99  	err := tokenBurnMsg.ValidateBasic()
   100  	require.NoError(t, err)
   101  }
   102  
   103  // tokenMintMsg := NewMsgTokenMint("btc", mintNum, testAccounts[0].baseAccount.Address)
   104  func TestNewMsgTokenMint(t *testing.T) {
   105  	priKey := secp256k1.GenPrivKey()
   106  	pubKey := priKey.PubKey()
   107  	addr := sdk.AccAddress(pubKey.Address())
   108  
   109  	decCoin := sdk.NewDecCoinFromDec(common.NativeToken, sdk.NewDec(1000))
   110  	decCoin0 := decCoin
   111  	decCoin0.Denom = ""
   112  
   113  	decCoin1 := decCoin
   114  	decCoin1.Denom = "11234"
   115  
   116  	decCoin2 := decCoin
   117  	decCoin2.Amount = sdk.NewDec(TotalSupplyUpperbound + 1)
   118  
   119  	testCase := []struct {
   120  		mintMsg MsgTokenMint
   121  		err     sdk.Error
   122  	}{
   123  		{NewMsgTokenMint(decCoin, addr), nil},
   124  		{NewMsgTokenMint(decCoin0, addr), ErrAmountIsNotValid("1000.000000000000000000")},
   125  		{NewMsgTokenMint(decCoin, sdk.AccAddress{}), ErrAddressIsRequired()},
   126  		{NewMsgTokenMint(decCoin1, addr), ErrAmountIsNotValid("1000.00000000000000000011234")},
   127  		{NewMsgTokenMint(decCoin2, addr), ErrAmountBiggerThanTotalSupplyUpperbound()},
   128  	}
   129  
   130  	for _, msgCase := range testCase {
   131  		err := msgCase.mintMsg.ValidateBasic()
   132  		if err != nil {
   133  			require.EqualValues(t, msgCase.err.Error(), err.Error())
   134  		} else {
   135  			require.EqualValues(t, err, msgCase.err)
   136  		}
   137  	}
   138  
   139  	tokenMintMsg := testCase[0].mintMsg
   140  	signAddr := tokenMintMsg.GetSigners()
   141  	require.EqualValues(t, []sdk.AccAddress{addr}, signAddr)
   142  
   143  	bz := ModuleCdc.MustMarshalJSON(tokenMintMsg)
   144  	require.EqualValues(t, sdk.MustSortJSON(bz), tokenMintMsg.GetSignBytes())
   145  	require.EqualValues(t, "token", tokenMintMsg.Route())
   146  	require.EqualValues(t, "mint", tokenMintMsg.Type())
   147  
   148  	err := tokenMintMsg.ValidateBasic()
   149  	require.NoError(t, err)
   150  }
   151  
   152  func TestNewTokenMsgSend(t *testing.T) {
   153  	// from
   154  	fromPriKey := secp256k1.GenPrivKey()
   155  	fromPubKey := fromPriKey.PubKey()
   156  	fromAddr := sdk.AccAddress(fromPubKey.Address())
   157  
   158  	// to
   159  	toPriKey := secp256k1.GenPrivKey()
   160  	toPubKey := toPriKey.PubKey()
   161  	toAddr := sdk.AccAddress(toPubKey.Address())
   162  
   163  	coins := sdk.SysCoins{
   164  		sdk.NewDecCoinFromDec(common.NativeToken, sdk.NewDec(100)),
   165  	}
   166  
   167  	Errorcoins := sdk.SysCoins{
   168  		sdk.NewDecCoinFromDec("okc", sdk.NewDec(100)),
   169  		sdk.NewDecCoinFromDec("okc", sdk.NewDec(100)),
   170  		sdk.NewDecCoinFromDec("oke", sdk.NewDec(100)),
   171  	}
   172  
   173  	// not valid coins
   174  	decCoin := sdk.SysCoin{
   175  		Denom:  "",
   176  		Amount: sdk.NewDec(100),
   177  	}
   178  	notValidCoins := sdk.SysCoins{
   179  		decCoin,
   180  	}
   181  
   182  	testCase := []struct {
   183  		sendMsg MsgSend
   184  		err     sdk.Error
   185  	}{
   186  		{NewMsgTokenSend(fromAddr, toAddr, coins), nil},
   187  		{NewMsgTokenSend(fromAddr, toAddr, sdk.SysCoins{}), common.ErrInsufficientCoins(DefaultParamspace, "")},
   188  		{NewMsgTokenSend(fromAddr, toAddr, Errorcoins), ErrInvalidCoins("100.000000000000000000okc,100.000000000000000000okc,100.000000000000000000oke")},
   189  		{NewMsgTokenSend(sdk.AccAddress{}, toAddr, coins), ErrAddressIsRequired()},
   190  		{NewMsgTokenSend(fromAddr, sdk.AccAddress{}, coins), ErrAddressIsRequired()},
   191  		{NewMsgTokenSend(fromAddr, toAddr, notValidCoins), ErrInvalidCoins("100.000000000000000000")},
   192  	}
   193  	for _, msgCase := range testCase {
   194  		err := msgCase.sendMsg.ValidateBasic()
   195  		if err != nil {
   196  			require.EqualValues(t, msgCase.err.Error(), err.Error())
   197  		} else {
   198  			require.EqualValues(t, err, msgCase.err)
   199  		}
   200  	}
   201  
   202  	tokenSendMsg := testCase[0].sendMsg
   203  	signAddr := tokenSendMsg.GetSigners()
   204  	require.EqualValues(t, []sdk.AccAddress{fromAddr}, signAddr)
   205  	require.EqualValues(t, RouterKey, tokenSendMsg.Route())
   206  	require.EqualValues(t, "send", tokenSendMsg.Type())
   207  
   208  	bz := ModuleCdc.MustMarshalJSON(tokenSendMsg)
   209  	require.EqualValues(t, sdk.MustSortJSON(bz), tokenSendMsg.GetSignBytes())
   210  
   211  	err := tokenSendMsg.ValidateBasic()
   212  	require.NoError(t, err)
   213  }
   214  
   215  func TestNewTokenMultiSend(t *testing.T) {
   216  	common.InitConfig()
   217  	// from
   218  	fromPriKey := secp256k1.GenPrivKey()
   219  	fromPubKey := fromPriKey.PubKey()
   220  	fromAddr := sdk.AccAddress(fromPubKey.Address())
   221  
   222  	// correct message
   223  	coinStr := `[{"to":"fb18rrc500xu2haw7vyksqlj2lfp9xex2hczv3jkx","amount":"1` + common.NativeToken + `"}]`
   224  	transfers, err := StrToTransfers(coinStr)
   225  	require.Nil(t, err)
   226  
   227  	// coins not positive
   228  	toAddr0, err := sdk.AccAddressFromBech32("fb18rrc500xu2haw7vyksqlj2lfp9xex2hczv3jkx")
   229  	require.Nil(t, err)
   230  	decCoin0 := sdk.NewDecCoinFromDec(common.NativeToken, sdk.NewDec(0))
   231  	transfers0 := []TransferUnit{
   232  		{
   233  			To:    toAddr0,
   234  			Coins: sdk.SysCoins{decCoin0},
   235  		},
   236  	}
   237  
   238  	// empty toAddr
   239  	decCoin1 := sdk.NewDecCoinFromDec("obk", sdk.NewDec(100))
   240  	transfers1 := []TransferUnit{
   241  		{
   242  			To:    sdk.AccAddress{},
   243  			Coins: sdk.SysCoins{decCoin1},
   244  		},
   245  	}
   246  
   247  	testCase := []struct {
   248  		multiSendMsg MsgMultiSend
   249  		err          sdk.Error
   250  	}{
   251  		{NewMsgMultiSend(fromAddr, transfers), nil},
   252  		{NewMsgMultiSend(sdk.AccAddress{}, transfers), ErrAddressIsRequired()},
   253  		{NewMsgMultiSend(fromAddr, make([]TransferUnit, MultiSendLimit+1)), ErrMsgTransfersAmountBiggerThanSendLimit()},
   254  		{NewMsgMultiSend(fromAddr, transfers0), ErrInvalidCoins("0.000000000000000000fibo")},
   255  		{NewMsgMultiSend(fromAddr, transfers1), ErrAddressIsRequired()},
   256  	}
   257  	for _, msgCase := range testCase {
   258  		err := msgCase.multiSendMsg.ValidateBasic()
   259  		if err != nil {
   260  			require.EqualValues(t, msgCase.err.Error(), err.Error())
   261  		} else {
   262  			require.EqualValues(t, err, msgCase.err)
   263  		}
   264  	}
   265  
   266  	tokenMultiSendMsg := testCase[0].multiSendMsg
   267  	signAddr := tokenMultiSendMsg.GetSigners()
   268  	require.EqualValues(t, []sdk.AccAddress{fromAddr}, signAddr)
   269  
   270  	bz := ModuleCdc.MustMarshalJSON(tokenMultiSendMsg)
   271  
   272  	require.NoError(t, err)
   273  	require.EqualValues(t, sdk.MustSortJSON(bz), tokenMultiSendMsg.GetSignBytes())
   274  	require.EqualValues(t, "token", tokenMultiSendMsg.Route())
   275  	require.EqualValues(t, "multi-send", tokenMultiSendMsg.Type())
   276  
   277  	err = tokenMultiSendMsg.ValidateBasic()
   278  	require.NoError(t, err)
   279  }
   280  
   281  func TestNewMsgTransferOwnership(t *testing.T) {
   282  	common.InitConfig()
   283  	// from
   284  	fromPriKey := secp256k1.GenPrivKey()
   285  	fromPubKey := fromPriKey.PubKey()
   286  	fromAddr := sdk.AccAddress(fromPubKey.Address())
   287  
   288  	// to
   289  	toPriKey := secp256k1.GenPrivKey()
   290  	toPubKey := toPriKey.PubKey()
   291  	toAddr := sdk.AccAddress(toPubKey.Address())
   292  
   293  	testCase := []struct {
   294  		transferOwnershipMsg MsgTransferOwnership
   295  		err                  sdk.Error
   296  	}{
   297  		{NewMsgTransferOwnership(fromAddr, sdk.AccAddress{}, common.NativeToken), ErrAddressIsRequired()},
   298  		{NewMsgTransferOwnership(sdk.AccAddress{}, toAddr, common.NativeToken), ErrAddressIsRequired()},
   299  		{NewMsgTransferOwnership(fromAddr, toAddr, ""), ErrMsgSymbolIsEmpty()},
   300  		{NewMsgTransferOwnership(fromAddr, toAddr, "1okb-ads"), ErrConfirmOwnershipNotExistOrBlockTimeAfter()},
   301  	}
   302  	for _, msgCase := range testCase {
   303  		err := msgCase.transferOwnershipMsg.ValidateBasic()
   304  		if err != nil {
   305  			require.EqualValues(t, msgCase.err.Error(), err.Error())
   306  		} else {
   307  			require.EqualValues(t, err, msgCase.err)
   308  		}
   309  	}
   310  
   311  	transferOwnershipMsg := testCase[0].transferOwnershipMsg
   312  	transferOwnershipMsg.Route()
   313  	transferOwnershipMsg.Type()
   314  	signAddr := transferOwnershipMsg.GetSigners()
   315  	require.EqualValues(t, []sdk.AccAddress{fromAddr}, signAddr)
   316  }
   317  
   318  func TestNewMsgTokenModify(t *testing.T) {
   319  	common.InitConfig()
   320  
   321  	priKey := secp256k1.GenPrivKey()
   322  	pubKey := priKey.PubKey()
   323  	addr := sdk.AccAddress(pubKey.Address())
   324  
   325  	testCase := []struct {
   326  		tokenModifyMsg MsgTokenModify
   327  		err            sdk.Error
   328  	}{
   329  		{NewMsgTokenModify("bnb", "bnb", "bnb bnb", true, true, addr),
   330  			nil},
   331  		{NewMsgTokenModify("", "bnb", "bnb bnb", true, true, addr),
   332  			ErrMsgSymbolIsEmpty()},
   333  		{NewMsgTokenModify("bnb", "bnb", "bnb bnb", true, true, sdk.AccAddress{}),
   334  			ErrAddressIsRequired()},
   335  		{NewMsgTokenModify("bnb", "bnb", "bnbbbbbbbbbb bnbbbbbbbbbbbbbbbbb", true, true, addr),
   336  			ErrWholeNameIsNotValidl()},
   337  		{NewMsgTokenModify("bnb", "bnb", "bnbbbbbbbbbb bnbbbbbbbbbbbbbbbbb", true, false, addr),
   338  			nil},
   339  		{NewMsgTokenModify("bnb", `bnbbbbbbbbbbbnbbbbbbbbbbnbbbbbbbbbbbnbbbbbbbbb1234
   340  bnbbbbbbbbbbbnbbbbbbbbbbnbbbbbbbbbbbnbbbbbbbbb1234
   341  bnbbbbbbbbbbbnbbbbbbbbbbnbbbbbbbbbbbnbbbbbbbbb1234
   342  bnbbbbbbbbbbbnbbbbbbbbbbnbbbbbbbbbbbnbbbbbbbbb1234
   343  bnbbbbbbbbbbbnbbbbbbbbbbnbbbbbbbbbbbnbbbbbbbbb1234
   344  bnbbbbbbbbbbbnbbbbbbbbbbnbbbbbbbbbbbnbbbbbbbbb1234`, "bnbbbbbbbbbb", true, false, addr),
   345  			ErrDescLenBiggerThanLimit()},
   346  		{NewMsgTokenModify("bnb", `bnbbbbbbbbbbbnbbbbbbbbbbnbbbbbbbbbbbnbbbbbbbbb1234
   347  bnbbbbbbbbbbbnbbbbbbbbbbnbbbbbbbbbbbnbbbbbbbbb1234
   348  bnbbbbbbbbbbbnbbbbbbbbbbnbbbbbbbbbbbnbbbbbbbbb1234
   349  bnbbbbbbbbbbbnbbbbbbbbbbnbbbbbbbbbbbnbbbbbbbbb1234
   350  bnbbbbbbbbbbbnbbbbbbbbbbnbbbbbbbbbbbnbbbbbbbbb1234
   351  bnbbbbbbbbbbbnbbbbbbbbbbnbbbbbbbbbbbnbbbbbbbbb1234`, "bnbbbbbbbbbb", false, false, addr),
   352  			nil},
   353  	}
   354  	for _, msgCase := range testCase {
   355  		err := msgCase.tokenModifyMsg.ValidateBasic()
   356  		if err != nil {
   357  			require.EqualValues(t, msgCase.err.Error(), err.Error())
   358  		} else {
   359  			require.EqualValues(t, err, msgCase.err)
   360  		}
   361  	}
   362  
   363  	// correct message
   364  	tokenEditMsg := testCase[0].tokenModifyMsg
   365  	signAddr := tokenEditMsg.GetSigners()
   366  	require.EqualValues(t, []sdk.AccAddress{addr}, signAddr)
   367  
   368  	bz := ModuleCdc.MustMarshalJSON(tokenEditMsg)
   369  	require.EqualValues(t, sdk.MustSortJSON(bz), tokenEditMsg.GetSignBytes())
   370  	require.EqualValues(t, "edit", tokenEditMsg.Type())
   371  	require.EqualValues(t, "token", tokenEditMsg.Route())
   372  
   373  	err := tokenEditMsg.ValidateBasic()
   374  	require.NoError(t, err)
   375  }