Skip to content

Commit

Permalink
test(evm): test for creating fun token from coin
Browse files Browse the repository at this point in the history
  • Loading branch information
onikonychev committed Jun 28, 2024
1 parent d865c25 commit 1931969
Show file tree
Hide file tree
Showing 8 changed files with 150 additions and 39 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- [#1917](https://github.com/NibiruChain/nibiru/pull/1917) - test(e2e-evm): TypeScript support. Type generation from compiled contracts. Formatter for TS code.
- [#1922](https://github.com/NibiruChain/nibiru/pull/1922) - feat(evm): tracer option is read from the config.
- [#1936](https://github.com/NibiruChain/nibiru/pull/1936) - feat(evm): EVM fungible token protobufs and encoding tests
- [#1946](https://github.com/NibiruChain/nibiru/pull/1946) - feat(evm): tx for creating fun token from coin

#### Dapp modules: perp, spot, oracle, etc

Expand Down
1 change: 1 addition & 0 deletions proto/eth/evm/v1/events.proto
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,5 @@ message EventBlockBloom {
message EventCreateFunTokenFromCoin {
string denom = 1;
string contract_address = 2;
string creator = 3;
}
7 changes: 1 addition & 6 deletions proto/eth/evm/v1/tx.proto
Original file line number Diff line number Diff line change
Expand Up @@ -181,12 +181,7 @@ message MsgUpdateParams {
message MsgUpdateParamsResponse {}


// MsgCreateFunTokenFromCoin: sdk.Msg that registers cosmos denom as an evm erc-20 contract.
// A denom has the form "tf/[creatorAddr]/[subdenom]".
// - Denoms become unique x/bank tokens, so the creator-subdenom pair that
// defines a denom cannot be reused.
// - The resulting denom's admin is originally set to be the creator, but the
// admin can be changed later.
// MsgCreateFunTokenFromCoin: sdk.Msg that registers cosmos denom as an evm erc-20 contract
message MsgCreateFunTokenFromCoin {
string sender = 1 [ (gogoproto.moretags) = "yaml:\"sender\"" ];
// cosmos denom. Ex: ibc/abc123def
Expand Down
106 changes: 79 additions & 27 deletions x/evm/events.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions x/evm/keeper/msg_fun_token.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ func (k *Keeper) CreateFunTokenFromCoin(
}

_ = ctx.EventManager().EmitTypedEvent(&evm.EventCreateFunTokenFromCoin{
Creator: msg.Sender,
Denom: msg.Denom,
ContractAddress: newContractAddress.String(),
})
Expand Down
62 changes: 62 additions & 0 deletions x/evm/keeper/msg_fun_token_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package keeper_test

import (
testutilevents "github.com/NibiruChain/nibiru/x/common/testutil"
"github.com/NibiruChain/nibiru/x/evm"
"github.com/NibiruChain/nibiru/x/evm/evmtest"
)

func (s *KeeperSuite) TestMsgCreateFunTokenFromCoin() {
testCases := []struct {
name string
denom string
sender string
wantErr string
}{
{
name: "happy: proper coin name",
denom: "tf/creator/usdt",
sender: "nibi1zaavvzxez0elundtn32qnk9lkm8kmcsz44g7xl",
wantErr: "",
},
{
name: "sad: empty coin name",
denom: "",
sender: "nibi1zaavvzxez0elundtn32qnk9lkm8kmcsz44g7xl",
wantErr: "invalid denom",
},
{
name: "sad: invalid sender",
denom: "tf/creator/usdt",
sender: "12345",
wantErr: "invalid sender",
},
}

for _, tc := range testCases {
s.Run(tc.name, func() {
deps := evmtest.NewTestDeps()
resp, err := deps.Chain.EvmKeeper.CreateFunTokenFromCoin(
deps.GoCtx(), &evm.MsgCreateFunTokenFromCoin{
Denom: tc.denom,
Sender: tc.sender,
},
)
if tc.wantErr != "" {
s.Require().ErrorContains(err, tc.wantErr)
return
}
s.Assert().NoError(err)
s.Require().NotNil(resp)
testutilevents.RequireContainsTypedEvent(
s.T(),
deps.Ctx,
&evm.EventCreateFunTokenFromCoin{
Creator: tc.sender,
Denom: tc.denom,
ContractAddress: resp.NewContractAddress,
},
)
})
}
}
4 changes: 4 additions & 0 deletions x/evm/msg.go
Original file line number Diff line number Diff line change
Expand Up @@ -475,6 +475,10 @@ func BinSearch(
}

func (msg *MsgCreateFunTokenFromCoin) ValidateBasic() error {
_, err := sdk.AccAddressFromBech32(msg.Sender)
if err != nil {
return fmt.Errorf("invalid sender: %s", msg.Sender)
}
if err := sdk.ValidateDenom(msg.Denom); err != nil {
return errValidateFunToken(err.Error())
}
Expand Down
7 changes: 1 addition & 6 deletions x/evm/tx.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 1931969

Please sign in to comment.