diff --git a/x/evm/keeper/config.go b/x/evm/keeper/config.go index 068501fce5..2cd07f7c27 100644 --- a/x/evm/keeper/config.go +++ b/x/evm/keeper/config.go @@ -49,9 +49,13 @@ func (k *Keeper) EVMConfig(ctx sdk.Context, proposerAddress sdk.ConsAddress, cha ethCfg := params.ChainConfig.EthereumConfig(chainID) // get the coinbase address from the block proposer - coinbase, err := k.GetCoinbaseAddress(ctx, proposerAddress) - if err != nil { - return nil, errorsmod.Wrap(err, "failed to obtain coinbase address") + coinbase := common.Address{} + if !proposerAddress.Empty() || len(ctx.BlockHeader().ProposerAddress) > 0 { + var err error + coinbase, err = k.GetCoinbaseAddress(ctx, proposerAddress) + if err != nil { + return nil, errorsmod.Wrap(err, "failed to obtain coinbase address") + } } var txConfig statedb.TxConfig diff --git a/x/evm/keeper/statedb.go b/x/evm/keeper/statedb.go index d414bd193d..63851ac65e 100644 --- a/x/evm/keeper/statedb.go +++ b/x/evm/keeper/statedb.go @@ -21,6 +21,7 @@ import ( errorsmod "cosmossdk.io/errors" "github.com/cosmos/cosmos-sdk/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/ethereum/go-ethereum/common" ethermint "github.com/evmos/ethermint/types" "github.com/evmos/ethermint/x/evm/statedb" @@ -121,6 +122,17 @@ func (k *Keeper) SetAccount(ctx sdk.Context, addr common.Address, account stated if err := ethAcct.SetCodeHash(codeHash); err != nil { return err } + } else { + if account.IsContract() { + if baseAcct, isBaseAccount := acct.(*authtypes.BaseAccount); isBaseAccount { + acct = ðermint.EthAccount{ + BaseAccount: baseAcct, + CodeHash: codeHash.Hex(), + } + } else { + return errorsmod.Wrapf(types.ErrInvalidAccount, "type %T, address %s", acct, addr) + } + } } k.accountKeeper.SetAccount(ctx, acct)