From 8990d38b2976fe35c3d55755923c3ee3a57845dc Mon Sep 17 00:00:00 2001 From: Austin Chandra Date: Mon, 14 Nov 2022 15:44:58 -0800 Subject: [PATCH 1/4] Refactor to omit empty values from type creation; add test for v1.vote --- app/ante/ante_test.go | 11 +++++++++++ app/ante/utils_test.go | 6 ++++++ ethereum/eip712/eip712.go | 4 ++-- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/app/ante/ante_test.go b/app/ante/ante_test.go index 689f56cef4..7b986aadcf 100644 --- a/app/ante/ante_test.go +++ b/app/ante/ante_test.go @@ -413,6 +413,17 @@ func (suite AnteTestSuite) TestAnteHandler() { return txBuilder.GetTx() }, false, false, true, }, + { + "success- DeliverTx EIP712 MsgVoteV1", + func() sdk.Tx { + from := acc.GetAddress() + coinAmount := sdk.NewCoin(evmtypes.DefaultEVMDenom, sdk.NewInt(20)) + amount := sdk.NewCoins(coinAmount) + gas := uint64(200000) + txBuilder := suite.CreateTestEIP712MsgVoteV1(from, privKey, "ethermint_9000-1", gas, amount) + return txBuilder.GetTx() + }, false, false, true, + }, { "fails - DeliverTx EIP712 signed Cosmos Tx with wrong Chain ID", func() sdk.Tx { diff --git a/app/ante/utils_test.go b/app/ante/utils_test.go index 14b79b581c..400278e5ff 100644 --- a/app/ante/utils_test.go +++ b/app/ante/utils_test.go @@ -43,6 +43,7 @@ import ( "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" evtypes "github.com/cosmos/cosmos-sdk/x/evidence/types" "github.com/cosmos/cosmos-sdk/x/feegrant" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1" types5 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" "github.com/evmos/ethermint/app" ante "github.com/evmos/ethermint/app/ante" @@ -343,6 +344,11 @@ func (suite *AnteTestSuite) CreateTestEIP712MsgSubmitEvidence(from sdk.AccAddres return suite.CreateTestEIP712CosmosTxBuilder(from, priv, chainId, gas, gasAmount, msgEvidence) } +func (suite *AnteTestSuite) CreateTestEIP712MsgVoteV1(from sdk.AccAddress, priv cryptotypes.PrivKey, chainId string, gas uint64, gasAmount sdk.Coins) client.TxBuilder { + msgVote := govtypes.NewMsgVote(from, 1, govtypes.VoteOption_VOTE_OPTION_YES, "") + return suite.CreateTestEIP712CosmosTxBuilder(from, priv, chainId, gas, gasAmount, msgVote) +} + // StdSignBytes returns the bytes to sign for a transaction. func StdSignBytes(cdc *codec.LegacyAmino, chainID string, accnum uint64, sequence uint64, timeout uint64, fee legacytx.StdFee, msgs []sdk.Msg, memo string, tip *txtypes.Tip) []byte { msgsBytes := make([]json.RawMessage, 0, len(msgs)) diff --git a/ethereum/eip712/eip712.go b/ethereum/eip712/eip712.go index c621aaa98c..326c24e2c1 100644 --- a/ethereum/eip712/eip712.go +++ b/ethereum/eip712/eip712.go @@ -235,8 +235,8 @@ func traverseFields( // then continue as normal } - // If its a nil pointer, do not include in types - if fieldType.Kind() == reflect.Ptr && field.IsNil() { + // If field is an empty value, do not include in types, since it will not be present in the object + if field.IsZero() { continue } From 6648c08c5f87ed40641e1551b8099e5d17fe58d2 Mon Sep 17 00:00:00 2001 From: Austin Chandra Date: Mon, 14 Nov 2022 15:52:39 -0800 Subject: [PATCH 2/4] Add test for createValidator with optional fields left blank --- app/ante/ante_test.go | 11 +++++++++++ app/ante/utils_test.go | 18 +++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/app/ante/ante_test.go b/app/ante/ante_test.go index 7b986aadcf..79cda75324 100644 --- a/app/ante/ante_test.go +++ b/app/ante/ante_test.go @@ -349,6 +349,17 @@ func (suite AnteTestSuite) TestAnteHandler() { return txBuilder.GetTx() }, false, false, true, }, + { + "success- DeliverTx EIP712 create validator (with blank fields)", + func() sdk.Tx { + from := acc.GetAddress() + coinAmount := sdk.NewCoin(evmtypes.DefaultEVMDenom, sdk.NewInt(20)) + amount := sdk.NewCoins(coinAmount) + gas := uint64(200000) + txBuilder := suite.CreateTestEIP712MsgCreateValidator2(from, privKey, "ethermint_9000-1", gas, amount) + return txBuilder.GetTx() + }, false, false, true, + }, { "success- DeliverTx EIP712 MsgSubmitProposal", func() sdk.Tx { diff --git a/app/ante/utils_test.go b/app/ante/utils_test.go index 400278e5ff..22f3c2c6bc 100644 --- a/app/ante/utils_test.go +++ b/app/ante/utils_test.go @@ -289,7 +289,6 @@ func (suite *AnteTestSuite) CreateTestEIP712MsgCreateValidator(from sdk.AccAddre valAddr, privEd.PubKey(), sdk.NewCoin(evmtypes.DefaultEVMDenom, sdk.NewInt(20)), - // TODO: can this values be empty strings? types3.NewDescription("moniker", "indentity", "website", "security_contract", "details"), types3.NewCommissionRates(sdk.OneDec(), sdk.OneDec(), sdk.OneDec()), sdk.OneInt(), @@ -298,6 +297,23 @@ func (suite *AnteTestSuite) CreateTestEIP712MsgCreateValidator(from sdk.AccAddre return suite.CreateTestEIP712CosmosTxBuilder(from, priv, chainId, gas, gasAmount, msgCreate) } +func (suite *AnteTestSuite) CreateTestEIP712MsgCreateValidator2(from sdk.AccAddress, priv cryptotypes.PrivKey, chainId string, gas uint64, gasAmount sdk.Coins) client.TxBuilder { + // Build MsgCreateValidator + valAddr := sdk.ValAddress(from.Bytes()) + privEd := ed25519.GenPrivKey() + msgCreate, err := types3.NewMsgCreateValidator( + valAddr, + privEd.PubKey(), + sdk.NewCoin(evmtypes.DefaultEVMDenom, sdk.NewInt(20)), + // Ensure optional fields can be left blank + types3.NewDescription("moniker", "indentity", "", "", ""), + types3.NewCommissionRates(sdk.OneDec(), sdk.OneDec(), sdk.OneDec()), + sdk.OneInt(), + ) + suite.Require().NoError(err) + return suite.CreateTestEIP712CosmosTxBuilder(from, priv, chainId, gas, gasAmount, msgCreate) +} + func (suite *AnteTestSuite) CreateTestEIP712SubmitProposal(from sdk.AccAddress, priv cryptotypes.PrivKey, chainId string, gas uint64, gasAmount sdk.Coins, deposit sdk.Coins) client.TxBuilder { proposal, ok := types5.ContentFromProposalType("My proposal", "My description", types5.ProposalTypeText) suite.Require().True(ok) From 4a0e43e9a75af70e19c61b333ada479bf803cb41 Mon Sep 17 00:00:00 2001 From: Austin Chandra Date: Mon, 14 Nov 2022 15:57:06 -0800 Subject: [PATCH 3/4] Add changelog entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c87967620c..1e09925880 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -45,6 +45,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (deps) [#1168](https://github.com/evmos/ethermint/pull/1168) Upgrade Cosmos SDK to `v0.46`. * (feemarket) [#1194](https://github.com/evmos/ethermint/pull/1194) Apply feemarket to native cosmos tx. * (eth) [#1346](https://github.com/evmos/ethermint/pull/1346) Added support for `sdk.Dec` and `ed25519` type on eip712. +* (eth) [#1459](https://github.com/evmos/ethermint/pull/1459) Added support for messages with optional types omitted. ### API Breaking From a841e9738ae71dfb6145865c6746560f18664c1f Mon Sep 17 00:00:00 2001 From: Austin Chandra Date: Mon, 14 Nov 2022 16:01:05 -0800 Subject: [PATCH 4/4] Update changelog entry --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e09925880..28a1650821 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -45,7 +45,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (deps) [#1168](https://github.com/evmos/ethermint/pull/1168) Upgrade Cosmos SDK to `v0.46`. * (feemarket) [#1194](https://github.com/evmos/ethermint/pull/1194) Apply feemarket to native cosmos tx. * (eth) [#1346](https://github.com/evmos/ethermint/pull/1346) Added support for `sdk.Dec` and `ed25519` type on eip712. -* (eth) [#1459](https://github.com/evmos/ethermint/pull/1459) Added support for messages with optional types omitted. +* (eth) [#1459](https://github.com/evmos/ethermint/pull/1459) Added support for messages with optional types omitted on eip712. ### API Breaking