Skip to content

Commit 9c42882

Browse files
committed
fix ConvertCosmosTxToEthereumTx to properly check type url
1 parent 900e643 commit 9c42882

File tree

2 files changed

+23
-8
lines changed

2 files changed

+23
-8
lines changed

x/evm/keeper/txutils.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,12 @@ func (u *TxUtils) ConvertCosmosTxToEthereumTx(ctx context.Context, sdkTx sdk.Tx)
195195
return nil, nil, nil
196196
}
197197

198+
msg := msgs[0]
199+
typeUrl := sdk.MsgTypeURL(msg)
200+
if typeUrl != "/minievm.evm.v1.MsgCall" && typeUrl != "/minievm.evm.v1.MsgCreate" {
201+
return nil, nil, nil
202+
}
203+
198204
authTx := sdkTx.(authsigning.Tx)
199205
memo := authTx.GetMemo()
200206
if len(memo) == 0 {
@@ -231,10 +237,6 @@ func (u *TxUtils) ConvertCosmosTxToEthereumTx(ctx context.Context, sdkTx sdk.Tx)
231237

232238
var tx *coretypes.Transaction
233239

234-
msg := msgs[0]
235-
gas := authTx.GetGas()
236-
typeUrl := sdk.MsgTypeURL(msg)
237-
238240
sig := sigs[0]
239241
cosmosSender := sig.PubKey.Address()
240242
if len(cosmosSender.Bytes()) != common.AddressLength {
@@ -272,6 +274,7 @@ func (u *TxUtils) ConvertCosmosTxToEthereumTx(ctx context.Context, sdkTx sdk.Tx)
272274
}
273275

274276
// check if the fee amount is correctly converted
277+
gas := authTx.GetGas()
275278
computedFeeAmount := sdk.NewCoins(sdk.NewCoin(params.FeeDenom, math.NewIntFromBigInt(computeGasFeeAmount(gasFeeCap, gas, decimals))))
276279
if !feeAmount.Equal(computedFeeAmount) {
277280
u.Logger(ctx).Error("fee amount manipulation detected", "expected", computedFeeAmount, "actual", feeAmount)
@@ -315,9 +318,6 @@ func (u *TxUtils) ConvertCosmosTxToEthereumTx(ctx context.Context, sdkTx sdk.Tx)
315318
// Same as above (MsgCall)
316319
value = types.ToEthersUnit(decimals, createMsg.Value.BigInt())
317320
accessList = types.ConvertCosmosAccessListToEth(createMsg.AccessList)
318-
case "/minievm.evm.v1.MsgCreate2":
319-
// create2 is not supported
320-
return nil, nil, nil
321321
}
322322

323323
chainID := sdk.UnwrapSDKContext(ctx).ChainID()

x/evm/keeper/txutils_test.go

+16-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"github.com/cosmos/cosmos-sdk/types/tx/signing"
1616
authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing"
1717
authtx "github.com/cosmos/cosmos-sdk/x/auth/tx"
18+
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
1819

1920
"github.com/ethereum/go-ethereum/common"
2021
"github.com/ethereum/go-ethereum/common/hexutil"
@@ -477,7 +478,21 @@ func Test_IsEthereumTx(t *testing.T) {
477478
require.NoError(t, err)
478479
require.False(t, ok)
479480

480-
// 4. wrong signature type
481+
// 4. wrong cosmos type
482+
txBuilder.SetMsgs(&banktypes.MsgMultiSend{})
483+
txBuilder.SetMemo("{}")
484+
txBuilder.SetFeeAmount(sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, math.NewInt(100))))
485+
tx = txBuilder.GetTx()
486+
487+
ok, err = input.EVMKeeper.TxUtils().IsEthereumTx(ctx, tx)
488+
require.NoError(t, err)
489+
require.False(t, ok)
490+
491+
ethTx, _, err := input.EVMKeeper.TxUtils().ConvertCosmosTxToEthereumTx(ctx, tx)
492+
require.NoError(t, err)
493+
require.Nil(t, ethTx)
494+
495+
// 5. wrong signature type
481496
txBuilder.SetMsgs(&types.MsgCreate{})
482497
txBuilder.SetMemo("{}")
483498
txBuilder.SetFeeAmount(sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, math.NewInt(100))))

0 commit comments

Comments
 (0)