From ca39b185a538418ff394b74c87ad4d90b6f5021b Mon Sep 17 00:00:00 2001 From: Youngtaek Yoon Date: Sat, 23 Mar 2024 02:40:28 +0000 Subject: [PATCH] fix: reject NFT coins on FT APIs (#1294) * Reject using NFTs on FT APIs * Update tests * Update CHANGELOG.md * Fix expected errors --- CHANGELOG.md | 1 + x/collection/msgs.go | 14 ++++++------ x/collection/msgs_test.go | 45 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b889797b0..2f53c61cd4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -59,6 +59,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (x/foundation) [\#1277](https://github.com/Finschia/finschia-sdk/pull/1277) add init logic of foundation module accounts to InitGenesis in order to eliminate potential panic * (x/collection, x/token) [\#1288](https://github.com/Finschia/finschia-sdk/pull/1288) use accAddress to compare in validatebasic function in collection & token modules * (x/collection) [\#1268](https://github.com/Finschia/finschia-sdk/pull/1268) export x/collection params into genesis +* (x/collection) [\#1294](https://github.com/Finschia/finschia-sdk/pull/1294) reject NFT coins on FT APIs ### Removed diff --git a/x/collection/msgs.go b/x/collection/msgs.go index 3da74a2c0e..0d3406691f 100644 --- a/x/collection/msgs.go +++ b/x/collection/msgs.go @@ -46,8 +46,8 @@ func validateAmount(amount sdk.Int) error { } // deprecated -func validateCoins(amount []Coin) error { - return validateCoinsWithIDValidator(amount, ValidateTokenID) +func validateFTCoins(amount []Coin) error { + return validateCoinsWithIDValidator(amount, ValidateFTID) } // deprecated @@ -247,7 +247,7 @@ func (m MsgSendFT) ValidateBasic() error { return sdkerrors.ErrInvalidAddress.Wrapf("invalid to address: %s", m.To) } - if err := validateCoins(m.Amount); err != nil { + if err := validateFTCoins(m.Amount); err != nil { return err } @@ -293,7 +293,7 @@ func (m MsgOperatorSendFT) ValidateBasic() error { return sdkerrors.ErrInvalidAddress.Wrapf("invalid to address: %s", m.To) } - if err := validateCoins(m.Amount); err != nil { + if err := validateFTCoins(m.Amount); err != nil { return err } @@ -675,7 +675,7 @@ func (m MsgMintFT) ValidateBasic() error { return sdkerrors.ErrInvalidAddress.Wrapf("invalid to address: %s", m.To) } - if err := validateCoins(m.Amount); err != nil { + if err := validateFTCoins(m.Amount); err != nil { return err } @@ -775,7 +775,7 @@ func (m MsgBurnFT) ValidateBasic() error { return sdkerrors.ErrInvalidAddress.Wrapf("invalid from address: %s", m.From) } - if err := validateCoins(m.Amount); err != nil { + if err := validateFTCoins(m.Amount); err != nil { return err } @@ -818,7 +818,7 @@ func (m MsgOperatorBurnFT) ValidateBasic() error { return sdkerrors.ErrInvalidAddress.Wrapf("invalid from address: %s", m.From) } - if err := validateCoins(m.Amount); err != nil { + if err := validateFTCoins(m.Amount); err != nil { return err } diff --git a/x/collection/msgs_test.go b/x/collection/msgs_test.go index aff826fbf4..04de79a91c 100644 --- a/x/collection/msgs_test.go +++ b/x/collection/msgs_test.go @@ -85,6 +85,15 @@ func TestMsgSendFT(t *testing.T) { }}, err: collection.ErrInvalidTokenID, }, + "nft id": { + contractID: "deadbeef", + from: addrs[0], + to: addrs[1], + amount: []collection.Coin{ + collection.NewNFTCoin("deadbeef", 42), + }, + err: collection.ErrInvalidTokenID, + }, } for name, tc := range testCases { @@ -185,6 +194,16 @@ func TestMsgOperatorSendFT(t *testing.T) { }}, err: collection.ErrInvalidTokenID, }, + "nft id": { + contractID: "deadbeef", + operator: addrs[0], + from: addrs[1], + to: addrs[2], + amount: []collection.Coin{ + collection.NewNFTCoin("deadbeef", 42), + }, + err: collection.ErrInvalidTokenID, + }, } for name, tc := range testCases { @@ -848,6 +867,15 @@ func TestMsgMintFT(t *testing.T) { }}, err: collection.ErrInvalidTokenID, }, + "nft id": { + contractID: contractID, + operator: addrs[0], + to: addrs[1], + amount: []collection.Coin{ + collection.NewNFTCoin("deadbeef", 42), + }, + err: collection.ErrInvalidTokenID, + }, } for name, tc := range testCases { @@ -1030,6 +1058,14 @@ func TestMsgBurnFT(t *testing.T) { }}, err: collection.ErrInvalidAmount, }, + "nft id": { + contractID: "deadbeef", + from: addrs[0], + amount: []collection.Coin{ + collection.NewNFTCoin("deadbeef", 42), + }, + err: collection.ErrInvalidTokenID, + }, } for name, tc := range testCases { @@ -1110,6 +1146,15 @@ func TestMsgOperatorBurnFT(t *testing.T) { }}, err: collection.ErrInvalidAmount, }, + "nft id": { + contractID: "deadbeef", + grantee: addrs[0], + from: addrs[1], + amount: []collection.Coin{ + collection.NewNFTCoin("deadbeef", 42), + }, + err: collection.ErrInvalidTokenID, + }, } for name, tc := range testCases {