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 }