fix: several issues with the passing receipt to hooks change (#869)

Closes: #868

Solution:
- contract address in receipt should only be the newly created contract
- fix the order of operations in state transition
- compute contract address in `ApplyTransaction` on the fly

Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com>
This commit is contained in:
yihuang 2022-01-04 19:02:41 +08:00 committed by GitHub
parent 7ec5e5fdef
commit 7c53e32c78
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 1721 additions and 207 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -491,7 +491,6 @@ MsgEthereumTxResponse defines the Msg/EthereumTx response type.
| `ret` | [bytes](#bytes) | | returned data from evm function (result or data supplied with revert opcode) |
| `vm_error` | [string](#string) | | vm error is the error returned by vm execution |
| `gas_used` | [uint64](#uint64) | | gas consumed by the transaction |
| `contract_address` | [string](#string) | | hex address of the contract created / called |

View File

@ -169,6 +169,4 @@ message MsgEthereumTxResponse {
string vm_error = 4;
// gas consumed by the transaction
uint64 gas_used = 5;
// hex address of the contract created / called
string contract_address = 6;
}

View File

@ -18,6 +18,7 @@ import (
"github.com/ethereum/go-ethereum/core"
ethtypes "github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/core/vm"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/params"
)
@ -165,6 +166,11 @@ func (k Keeper) GetHashFn() vm.GetHashFunc {
//
// For relevant discussion see: https://github.com/cosmos/cosmos-sdk/discussions/9072
func (k *Keeper) ApplyTransaction(tx *ethtypes.Transaction) (*types.MsgEthereumTxResponse, error) {
var (
bloom *big.Int
bloomReceipt ethtypes.Bloom
)
ctx := k.Ctx()
// ensure keeper state error is cleared
@ -211,26 +217,13 @@ func (k *Keeper) ApplyTransaction(tx *ethtypes.Transaction) (*types.MsgEthereumT
res.Hash = txHash.Hex()
logs := k.GetTxLogsTransient(txHash)
// change to original context
k.WithContext(ctx)
// refund gas according to Ethereum gas accounting rules.
if err := k.RefundGas(msg, msg.Gas()-res.GasUsed, cfg.Params.EvmDenom); err != nil {
return nil, sdkerrors.Wrapf(err, "failed to refund gas leftover gas to sender %s", msg.From())
}
var bloomReceipt ethtypes.Bloom
// Compute block bloom filter
if len(logs) > 0 {
res.Logs = types.NewLogsFromEth(logs)
// Update transient block bloom filter
bloom := k.GetBlockBloomTransient()
bloom = k.GetBlockBloomTransient()
bloom.Or(bloom, big.NewInt(0).SetBytes(ethtypes.LogsBloom(logs)))
k.SetBlockBloomTransient(bloom)
bloomReceipt = ethtypes.BytesToBloom(bloom.Bytes())
}
k.IncreaseTxIndexTransient()
if !res.Failed() {
cumulativeGasUsed := res.GasUsed
if ctx.BlockGasMeter() != nil {
@ -239,6 +232,11 @@ func (k *Keeper) ApplyTransaction(tx *ethtypes.Transaction) (*types.MsgEthereumT
cumulativeGasUsed = uint64(math.Min(float64(cumulativeGasUsed+consumed), float64(limit)))
}
var contractAddr common.Address
if msg.To() == nil {
contractAddr = crypto.CreateAddress(msg.From(), msg.Nonce())
}
receipt := &ethtypes.Receipt{
Type: tx.Type(),
PostState: nil, // TODO: intermediate state root
@ -247,7 +245,7 @@ func (k *Keeper) ApplyTransaction(tx *ethtypes.Transaction) (*types.MsgEthereumT
Bloom: bloomReceipt,
Logs: logs,
TxHash: txHash,
ContractAddress: common.HexToAddress(res.ContractAddress),
ContractAddress: contractAddr,
GasUsed: res.GasUsed,
BlockHash: common.BytesToHash(ctx.HeaderHash()),
BlockNumber: big.NewInt(ctx.BlockHeight()),
@ -266,6 +264,23 @@ func (k *Keeper) ApplyTransaction(tx *ethtypes.Transaction) (*types.MsgEthereumT
}
}
// change to original context
k.WithContext(ctx)
// refund gas according to Ethereum gas accounting rules.
if err := k.RefundGas(msg, msg.Gas()-res.GasUsed, cfg.Params.EvmDenom); err != nil {
return nil, sdkerrors.Wrapf(err, "failed to refund gas leftover gas to sender %s", msg.From())
}
if len(logs) > 0 {
res.Logs = types.NewLogsFromEth(logs)
// Update transient block bloom filter
k.SetBlockBloomTransient(bloom)
}
k.IncreaseTxIndexTransient()
// update the gas used after refund
k.ResetGasMeterAndConsumeGas(res.GasUsed)
return res, nil
@ -312,9 +327,8 @@ func (k *Keeper) ApplyTransaction(tx *ethtypes.Transaction) (*types.MsgEthereumT
// If commit is true, the cache context stack will be committed, otherwise discarded.
func (k *Keeper) ApplyMessageWithConfig(msg core.Message, tracer vm.Tracer, commit bool, cfg *types.EVMConfig) (*types.MsgEthereumTxResponse, error) {
var (
ret []byte // return bytes from evm execution
vmErr error // vm errors do not effect consensus and are therefore not assigned to err
contractAddr common.Address
ret []byte // return bytes from evm execution
vmErr error // vm errors do not effect consensus and are therefore not assigned to err
)
if !k.ctxStack.IsEmpty() {
@ -362,17 +376,10 @@ func (k *Keeper) ApplyMessageWithConfig(msg core.Message, tracer vm.Tracer, comm
// - reset sender's nonce to msg.Nonce() before calling evm.
// - increase sender's nonce by one no matter the result.
k.SetNonce(sender.Address(), msg.Nonce())
ret, contractAddr, leftoverGas, vmErr = evm.Create(sender, msg.Data(), leftoverGas, msg.Value())
ret, _, leftoverGas, vmErr = evm.Create(sender, msg.Data(), leftoverGas, msg.Value())
k.SetNonce(sender.Address(), msg.Nonce()+1)
} else {
ret, leftoverGas, vmErr = evm.Call(sender, *msg.To(), msg.Data(), leftoverGas, msg.Value())
to := *msg.To()
acc := k.accountKeeper.GetAccount(k.Ctx(), sdk.AccAddress(to.Bytes()))
if acc != nil {
if ethAcc, ok := acc.(*ethermint.EthAccount); ok && ethAcc.Type() == ethermint.AccountTypeContract {
contractAddr = to
}
}
}
refundQuotient := params.RefundQuotient
@ -408,10 +415,9 @@ func (k *Keeper) ApplyMessageWithConfig(msg core.Message, tracer vm.Tracer, comm
}
return &types.MsgEthereumTxResponse{
GasUsed: gasUsed,
VmError: vmError,
Ret: ret,
ContractAddress: contractAddr.String(),
GasUsed: gasUsed,
VmError: vmError,
Ret: ret,
}, nil
}

156
x/evm/types/tx.pb.go generated
View File

@ -305,8 +305,6 @@ type MsgEthereumTxResponse struct {
VmError string `protobuf:"bytes,4,opt,name=vm_error,json=vmError,proto3" json:"vm_error,omitempty"`
// gas consumed by the transaction
GasUsed uint64 `protobuf:"varint,5,opt,name=gas_used,json=gasUsed,proto3" json:"gas_used,omitempty"`
// hex address of the contract created / called
ContractAddress string `protobuf:"bytes,6,opt,name=contract_address,json=contractAddress,proto3" json:"contract_address,omitempty"`
}
func (m *MsgEthereumTxResponse) Reset() { *m = MsgEthereumTxResponse{} }
@ -354,62 +352,61 @@ func init() {
func init() { proto.RegisterFile("ethermint/evm/v1/tx.proto", fileDescriptor_f75ac0a12d075f21) }
var fileDescriptor_f75ac0a12d075f21 = []byte{
// 876 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x55, 0x41, 0x6f, 0x1b, 0x45,
0x14, 0xf6, 0xd8, 0x6b, 0x7b, 0x3d, 0x36, 0x25, 0x1a, 0xa5, 0xd2, 0xc6, 0xa2, 0x5e, 0xcb, 0x12,
0xe0, 0x22, 0x65, 0x57, 0x0d, 0x9c, 0x72, 0x22, 0x6e, 0xd2, 0xaa, 0x55, 0x2a, 0xd0, 0xca, 0x5c,
0xe8, 0xc1, 0x9a, 0xac, 0x27, 0xeb, 0x11, 0xde, 0x99, 0xd5, 0xce, 0x78, 0x65, 0x23, 0x71, 0x41,
0x1c, 0xb8, 0x81, 0xc4, 0x1f, 0xe0, 0xcc, 0x15, 0x7e, 0x00, 0xc7, 0xde, 0xa8, 0xe0, 0x82, 0x38,
0x2c, 0xc8, 0xe1, 0x94, 0x1b, 0xfc, 0x02, 0x34, 0x33, 0xeb, 0x24, 0xc6, 0x4a, 0x81, 0x52, 0xc4,
0xc9, 0xf3, 0xe6, 0x7b, 0xfb, 0xe6, 0xbd, 0xf7, 0x7d, 0x7e, 0x0f, 0xee, 0x10, 0x39, 0x21, 0x69,
0x4c, 0x99, 0xf4, 0x49, 0x16, 0xfb, 0xd9, 0x1d, 0x5f, 0xce, 0xbd, 0x24, 0xe5, 0x92, 0xa3, 0xad,
0x0b, 0xc8, 0x23, 0x59, 0xec, 0x65, 0x77, 0xda, 0xdb, 0x11, 0x8f, 0xb8, 0x06, 0x7d, 0x75, 0x32,
0x7e, 0xed, 0x57, 0x22, 0xce, 0xa3, 0x29, 0xf1, 0x71, 0x42, 0x7d, 0xcc, 0x18, 0x97, 0x58, 0x52,
0xce, 0x44, 0x81, 0xee, 0x14, 0xa8, 0xb6, 0x4e, 0x66, 0xa7, 0x3e, 0x66, 0x8b, 0x15, 0x14, 0x72,
0x11, 0x73, 0x31, 0x32, 0x11, 0x8d, 0x51, 0x40, 0xed, 0x8d, 0xb4, 0x54, 0x0a, 0x1a, 0xeb, 0x7d,
0x06, 0xe0, 0x4b, 0x8f, 0x44, 0x74, 0xa4, 0x3c, 0xc8, 0x2c, 0x1e, 0xce, 0x51, 0x1f, 0x5a, 0x63,
0x2c, 0xb1, 0x03, 0xba, 0xa0, 0xdf, 0xdc, 0xdb, 0xf6, 0xcc, 0x93, 0xde, 0xea, 0x49, 0xef, 0x80,
0x2d, 0x02, 0xed, 0x81, 0x76, 0xa0, 0x25, 0xe8, 0x87, 0xc4, 0x29, 0x77, 0x41, 0x1f, 0x0c, 0xaa,
0xe7, 0xb9, 0x0b, 0x76, 0x03, 0x7d, 0x85, 0x5c, 0x68, 0x4d, 0xb0, 0x98, 0x38, 0x95, 0x2e, 0xe8,
0x37, 0x06, 0xcd, 0xdf, 0x73, 0xb7, 0x9e, 0x4e, 0x93, 0xfd, 0xde, 0x6e, 0x2f, 0xd0, 0x00, 0x42,
0xd0, 0x3a, 0x4d, 0x79, 0xec, 0x58, 0xca, 0x21, 0xd0, 0xe7, 0x7d, 0xeb, 0xd3, 0x2f, 0xdd, 0x52,
0xef, 0xeb, 0x32, 0xb4, 0x8f, 0x49, 0x84, 0xc3, 0xc5, 0x70, 0x8e, 0xb6, 0x61, 0x95, 0x71, 0x16,
0x12, 0x9d, 0x8d, 0x15, 0x18, 0x03, 0xdd, 0x87, 0x8d, 0x08, 0xab, 0x52, 0x69, 0x68, 0x5e, 0x6f,
0x0c, 0xde, 0xf8, 0x29, 0x77, 0x5f, 0x8b, 0xa8, 0x9c, 0xcc, 0x4e, 0xbc, 0x90, 0xc7, 0x45, 0x03,
0x8a, 0x9f, 0x5d, 0x31, 0xfe, 0xc0, 0x97, 0x8b, 0x84, 0x08, 0xef, 0x01, 0x93, 0x81, 0x1d, 0x61,
0xf1, 0xae, 0xfa, 0x16, 0x75, 0x60, 0x25, 0xc2, 0x42, 0x67, 0x69, 0x0d, 0x5a, 0xcb, 0xdc, 0xb5,
0xef, 0x63, 0x71, 0x4c, 0x63, 0x2a, 0x03, 0x05, 0xa0, 0x1b, 0xb0, 0x2c, 0x79, 0x91, 0x63, 0x59,
0x72, 0xf4, 0x10, 0x56, 0x33, 0x3c, 0x9d, 0x11, 0xa7, 0xaa, 0x1f, 0x7d, 0xeb, 0xef, 0x3f, 0xba,
0xcc, 0xdd, 0xda, 0x41, 0xcc, 0x67, 0x4c, 0x06, 0x26, 0x84, 0xea, 0x80, 0xee, 0x73, 0xad, 0x0b,
0xfa, 0xad, 0xa2, 0xa3, 0x2d, 0x08, 0x32, 0xa7, 0xae, 0x2f, 0x40, 0xa6, 0xac, 0xd4, 0xb1, 0x8d,
0x95, 0x2a, 0x4b, 0x38, 0x0d, 0x63, 0x89, 0xfd, 0x1b, 0xaa, 0x57, 0xdf, 0x7f, 0xb3, 0x5b, 0x1b,
0xce, 0x0f, 0xb1, 0xc4, 0xbd, 0xdf, 0x2a, 0xb0, 0x75, 0x10, 0x86, 0x44, 0x88, 0x63, 0x2a, 0xe4,
0x70, 0x8e, 0x1e, 0x43, 0x3b, 0x9c, 0x60, 0xca, 0x46, 0x74, 0xac, 0x9b, 0xd7, 0x18, 0xbc, 0xfd,
0x8f, 0xb2, 0xad, 0xdf, 0x55, 0x5f, 0x3f, 0x38, 0x3c, 0xcf, 0xdd, 0x7a, 0x68, 0x8e, 0x41, 0x71,
0x18, 0x5f, 0xd2, 0x52, 0xbe, 0x96, 0x96, 0xca, 0xbf, 0xa7, 0xc5, 0x7a, 0x36, 0x2d, 0xd5, 0x4d,
0x5a, 0x6a, 0x2f, 0x8e, 0x96, 0xfa, 0x15, 0x5a, 0x1e, 0x43, 0x1b, 0xeb, 0xde, 0x12, 0xe1, 0xd8,
0xdd, 0x4a, 0xbf, 0xb9, 0x77, 0xcb, 0xfb, 0xf3, 0xff, 0xd9, 0x33, 0xdd, 0x1f, 0xce, 0x92, 0x29,
0x19, 0x74, 0x9f, 0xe4, 0x6e, 0xe9, 0x3c, 0x77, 0x21, 0xbe, 0xa0, 0xe4, 0xab, 0x9f, 0x5d, 0x78,
0x49, 0x50, 0x70, 0x11, 0xd0, 0x70, 0xde, 0x58, 0xe3, 0x1c, 0xae, 0x71, 0xde, 0xbc, 0x8e, 0xf3,
0x6f, 0x2d, 0xd8, 0x3a, 0x5c, 0x30, 0x1c, 0xd3, 0xf0, 0x1e, 0x21, 0xff, 0x0f, 0xe7, 0x0f, 0x61,
0x53, 0x71, 0x2e, 0x69, 0x32, 0x0a, 0x71, 0xf2, 0x1c, 0xac, 0x2b, 0xc9, 0x0c, 0x69, 0x72, 0x17,
0x27, 0xab, 0x58, 0xa7, 0x84, 0xe8, 0x58, 0xd6, 0x73, 0xc5, 0xba, 0x47, 0x88, 0x8a, 0x55, 0x48,
0xa8, 0xfa, 0x6c, 0x09, 0xd5, 0x36, 0x25, 0x54, 0x7f, 0x71, 0x12, 0xb2, 0xaf, 0x91, 0x50, 0xe3,
0x3f, 0x91, 0x10, 0x5c, 0x93, 0x50, 0x73, 0x4d, 0x42, 0xad, 0xeb, 0x24, 0xd4, 0x83, 0xed, 0xa3,
0xb9, 0x24, 0x4c, 0x50, 0xce, 0xde, 0x49, 0xf4, 0xaa, 0xb9, 0x5c, 0x05, 0xc5, 0x40, 0xfe, 0x0e,
0xc0, 0x9b, 0x6b, 0x2b, 0x22, 0x20, 0x22, 0xe1, 0x4c, 0xe8, 0x42, 0xf5, 0x94, 0x07, 0x66, 0x88,
0xeb, 0xc1, 0x7e, 0x1b, 0x5a, 0x53, 0x1e, 0x09, 0xa7, 0xac, 0x8b, 0xbc, 0xb9, 0x59, 0xe4, 0x31,
0x8f, 0x02, 0xed, 0x82, 0xb6, 0x60, 0x25, 0x25, 0x52, 0x6b, 0xa6, 0x15, 0xa8, 0x23, 0xda, 0x81,
0x76, 0x16, 0x8f, 0x48, 0x9a, 0xf2, 0xb4, 0x98, 0xba, 0xf5, 0x2c, 0x3e, 0x52, 0xa6, 0x82, 0x94,
0x38, 0x66, 0x82, 0x8c, 0x0d, 0xab, 0x41, 0x3d, 0xc2, 0xe2, 0x3d, 0x41, 0xc6, 0xe8, 0x36, 0xdc,
0x0a, 0x39, 0x93, 0x29, 0x0e, 0xe5, 0x08, 0x8f, 0xc7, 0x29, 0x11, 0xa2, 0x60, 0xf6, 0xe5, 0xd5,
0xfd, 0x81, 0xb9, 0x36, 0x15, 0xed, 0x7d, 0x02, 0x60, 0xe5, 0x91, 0x88, 0xd0, 0x47, 0x10, 0x5e,
0x59, 0x7c, 0xee, 0x66, 0xae, 0x6b, 0x65, 0xb7, 0x5f, 0xff, 0x0b, 0x87, 0x55, 0x5f, 0x7a, 0xaf,
0x7e, 0xfc, 0xc3, 0xaf, 0x5f, 0x94, 0xdd, 0xde, 0x2d, 0x7f, 0x73, 0xf3, 0x16, 0xde, 0x23, 0x39,
0x1f, 0x0c, 0x9e, 0x2c, 0x3b, 0xe0, 0xe9, 0xb2, 0x03, 0x7e, 0x59, 0x76, 0xc0, 0xe7, 0x67, 0x9d,
0xd2, 0xd3, 0xb3, 0x4e, 0xe9, 0xc7, 0xb3, 0x4e, 0xe9, 0xfd, 0xfe, 0x15, 0xe9, 0xc9, 0x09, 0x4e,
0x05, 0x15, 0x57, 0x42, 0xcd, 0x75, 0x30, 0x2d, 0xc0, 0x93, 0x9a, 0xde, 0xcb, 0x6f, 0xfe, 0x11,
0x00, 0x00, 0xff, 0xff, 0x5d, 0x97, 0x2d, 0xb6, 0x7b, 0x08, 0x00, 0x00,
// 853 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x55, 0x31, 0x8f, 0xe3, 0x44,
0x14, 0xce, 0x24, 0x4e, 0xec, 0x4c, 0xc2, 0xe9, 0x64, 0xed, 0x49, 0x4e, 0xc4, 0xc5, 0x91, 0x25,
0x20, 0x20, 0xc5, 0xd6, 0x2d, 0x54, 0x5b, 0xb1, 0xbe, 0xdd, 0x3b, 0xdd, 0x29, 0x27, 0x90, 0x15,
0x1a, 0xae, 0x88, 0x66, 0x9d, 0x59, 0x67, 0x44, 0xec, 0xb1, 0x3c, 0x13, 0xcb, 0x41, 0xa2, 0x41,
0x14, 0x74, 0x20, 0xf1, 0x07, 0x28, 0xa8, 0x68, 0xe1, 0x07, 0x50, 0x5e, 0x79, 0x82, 0x06, 0x51,
0x18, 0x94, 0xa5, 0xda, 0x0e, 0x7e, 0x01, 0x9a, 0xb1, 0xb3, 0x9b, 0x10, 0xe5, 0x80, 0xe3, 0x10,
0x55, 0xe6, 0xf9, 0x7b, 0xf3, 0xe6, 0xbd, 0xf7, 0x7d, 0x79, 0x0f, 0x76, 0x30, 0x9f, 0xe1, 0x24,
0x24, 0x11, 0x77, 0x70, 0x1a, 0x3a, 0xe9, 0x1d, 0x87, 0x67, 0x76, 0x9c, 0x50, 0x4e, 0xf5, 0x9b,
0x57, 0x90, 0x8d, 0xd3, 0xd0, 0x4e, 0xef, 0x74, 0x0f, 0x02, 0x1a, 0x50, 0x09, 0x3a, 0xe2, 0x54,
0xf8, 0x75, 0x5f, 0x0e, 0x28, 0x0d, 0xe6, 0xd8, 0x41, 0x31, 0x71, 0x50, 0x14, 0x51, 0x8e, 0x38,
0xa1, 0x11, 0x2b, 0xd1, 0x4e, 0x89, 0x4a, 0xeb, 0x6c, 0x71, 0xee, 0xa0, 0x68, 0xb9, 0x86, 0x7c,
0xca, 0x42, 0xca, 0x26, 0x45, 0xc4, 0xc2, 0x28, 0xa1, 0xee, 0x4e, 0x5a, 0x22, 0x05, 0x89, 0x59,
0x9f, 0x01, 0xf8, 0xd2, 0x23, 0x16, 0x9c, 0x0a, 0x0f, 0xbc, 0x08, 0xc7, 0x99, 0x3e, 0x80, 0xca,
0x14, 0x71, 0x64, 0x80, 0x3e, 0x18, 0xb4, 0x0e, 0x0f, 0xec, 0xe2, 0x49, 0x7b, 0xfd, 0xa4, 0x7d,
0x1c, 0x2d, 0x3d, 0xe9, 0xa1, 0x77, 0xa0, 0xc2, 0xc8, 0x87, 0xd8, 0xa8, 0xf6, 0xc1, 0x00, 0xb8,
0xf5, 0xcb, 0xdc, 0x04, 0x43, 0x4f, 0x7e, 0xd2, 0x4d, 0xa8, 0xcc, 0x10, 0x9b, 0x19, 0xb5, 0x3e,
0x18, 0x34, 0xdd, 0xd6, 0xef, 0xb9, 0xa9, 0x26, 0xf3, 0xf8, 0xc8, 0x1a, 0x5a, 0x9e, 0x04, 0x74,
0x1d, 0x2a, 0xe7, 0x09, 0x0d, 0x0d, 0x45, 0x38, 0x78, 0xf2, 0x7c, 0xa4, 0x7c, 0xfa, 0xa5, 0x59,
0xb1, 0xbe, 0xa9, 0x42, 0x6d, 0x84, 0x03, 0xe4, 0x2f, 0xc7, 0x99, 0x7e, 0x00, 0xeb, 0x11, 0x8d,
0x7c, 0x2c, 0xb3, 0x51, 0xbc, 0xc2, 0xd0, 0xef, 0xc3, 0x66, 0x80, 0x44, 0xa9, 0xc4, 0x2f, 0x5e,
0x6f, 0xba, 0x6f, 0xfc, 0x94, 0x9b, 0xaf, 0x06, 0x84, 0xcf, 0x16, 0x67, 0xb6, 0x4f, 0xc3, 0xb2,
0x01, 0xe5, 0xcf, 0x90, 0x4d, 0x3f, 0x70, 0xf8, 0x32, 0xc6, 0xcc, 0x7e, 0x10, 0x71, 0x4f, 0x0b,
0x10, 0x7b, 0x57, 0xdc, 0xd5, 0x7b, 0xb0, 0x16, 0x20, 0x26, 0xb3, 0x54, 0xdc, 0xf6, 0x2a, 0x37,
0xb5, 0xfb, 0x88, 0x8d, 0x48, 0x48, 0xb8, 0x27, 0x00, 0xfd, 0x06, 0xac, 0x72, 0x5a, 0xe6, 0x58,
0xe5, 0x54, 0x7f, 0x08, 0xeb, 0x29, 0x9a, 0x2f, 0xb0, 0x51, 0x97, 0x8f, 0xbe, 0xf5, 0xf7, 0x1f,
0x5d, 0xe5, 0x66, 0xe3, 0x38, 0xa4, 0x8b, 0x88, 0x7b, 0x45, 0x08, 0xd1, 0x01, 0xd9, 0xe7, 0x46,
0x1f, 0x0c, 0xda, 0x65, 0x47, 0xdb, 0x10, 0xa4, 0x86, 0x2a, 0x3f, 0x80, 0x54, 0x58, 0x89, 0xa1,
0x15, 0x56, 0x22, 0x2c, 0x66, 0x34, 0x0b, 0x8b, 0x1d, 0xdd, 0x10, 0xbd, 0xfa, 0xfe, 0xdb, 0x61,
0x63, 0x9c, 0x9d, 0x20, 0x8e, 0xac, 0xdf, 0x6a, 0xb0, 0x7d, 0xec, 0xfb, 0x98, 0xb1, 0x11, 0x61,
0x7c, 0x9c, 0xe9, 0x8f, 0xa1, 0xe6, 0xcf, 0x10, 0x89, 0x26, 0x64, 0x2a, 0x9b, 0xd7, 0x74, 0xdf,
0xfe, 0x47, 0xd9, 0xaa, 0x77, 0xc5, 0xed, 0x07, 0x27, 0x97, 0xb9, 0xa9, 0xfa, 0xc5, 0xd1, 0x2b,
0x0f, 0xd3, 0x6b, 0x5a, 0xaa, 0x7b, 0x69, 0xa9, 0xfd, 0x7b, 0x5a, 0x94, 0x67, 0xd3, 0x52, 0xdf,
0xa5, 0xa5, 0xf1, 0xe2, 0x68, 0x51, 0x37, 0x68, 0x79, 0x0c, 0x35, 0x24, 0x7b, 0x8b, 0x99, 0xa1,
0xf5, 0x6b, 0x83, 0xd6, 0xe1, 0x6d, 0xfb, 0xcf, 0xff, 0x67, 0xbb, 0xe8, 0xfe, 0x78, 0x11, 0xcf,
0xb1, 0xdb, 0x7f, 0x92, 0x9b, 0x95, 0xcb, 0xdc, 0x84, 0xe8, 0x8a, 0x92, 0xaf, 0x7f, 0x36, 0xe1,
0x35, 0x41, 0xde, 0x55, 0xc0, 0x82, 0xf3, 0xe6, 0x16, 0xe7, 0x70, 0x8b, 0xf3, 0xd6, 0x3e, 0xce,
0xbf, 0x53, 0x60, 0xfb, 0x64, 0x19, 0xa1, 0x90, 0xf8, 0xf7, 0x30, 0xfe, 0x7f, 0x38, 0x7f, 0x08,
0x5b, 0x82, 0x73, 0x4e, 0xe2, 0x89, 0x8f, 0xe2, 0xe7, 0x60, 0x5d, 0x48, 0x66, 0x4c, 0xe2, 0xbb,
0x28, 0x5e, 0xc7, 0x3a, 0xc7, 0x58, 0xc6, 0x52, 0x9e, 0x2b, 0xd6, 0x3d, 0x8c, 0x45, 0xac, 0x52,
0x42, 0xf5, 0x67, 0x4b, 0xa8, 0xb1, 0x2b, 0x21, 0xf5, 0xc5, 0x49, 0x48, 0xdb, 0x23, 0xa1, 0xe6,
0x7f, 0x22, 0x21, 0xb8, 0x25, 0xa1, 0xd6, 0x96, 0x84, 0xda, 0xfb, 0x24, 0x64, 0xc1, 0xee, 0x69,
0xc6, 0x71, 0xc4, 0x08, 0x8d, 0xde, 0x89, 0xe5, 0xaa, 0xb9, 0x5e, 0x05, 0xe5, 0x40, 0xfe, 0x0a,
0xc0, 0x5b, 0x5b, 0x2b, 0xc2, 0xc3, 0x2c, 0xa6, 0x11, 0x93, 0x85, 0xca, 0x29, 0x0f, 0x8a, 0x21,
0x2e, 0x07, 0xfb, 0xeb, 0x50, 0x99, 0xd3, 0x80, 0x19, 0x55, 0x59, 0xe4, 0xad, 0xdd, 0x22, 0x47,
0x34, 0xf0, 0xa4, 0x8b, 0x7e, 0x13, 0xd6, 0x12, 0xcc, 0xa5, 0x66, 0xda, 0x9e, 0x38, 0xea, 0x1d,
0xa8, 0xa5, 0xe1, 0x04, 0x27, 0x09, 0x4d, 0xca, 0xa9, 0xab, 0xa6, 0xe1, 0xa9, 0x30, 0x05, 0x24,
0xc4, 0xb1, 0x60, 0x78, 0x5a, 0xb0, 0xea, 0xa9, 0x01, 0x62, 0xef, 0x31, 0x3c, 0x2d, 0xd2, 0x3c,
0xfc, 0x04, 0xc0, 0xda, 0x23, 0x16, 0xe8, 0x1f, 0x41, 0xb8, 0xb1, 0xcd, 0xcc, 0xdd, 0x04, 0xb6,
0x6a, 0xe9, 0xbe, 0xf6, 0x17, 0x0e, 0xeb, 0x62, 0xad, 0x57, 0x3e, 0xfe, 0xe1, 0xd7, 0x2f, 0xaa,
0xa6, 0x75, 0xdb, 0xd9, 0x5d, 0xa7, 0xa5, 0xf7, 0x84, 0x67, 0xae, 0xfb, 0x64, 0xd5, 0x03, 0x4f,
0x57, 0x3d, 0xf0, 0xcb, 0xaa, 0x07, 0x3e, 0xbf, 0xe8, 0x55, 0x9e, 0x5e, 0xf4, 0x2a, 0x3f, 0x5e,
0xf4, 0x2a, 0xef, 0x0f, 0x36, 0xf4, 0xc4, 0x67, 0x28, 0x61, 0x84, 0x6d, 0x84, 0xca, 0x64, 0x30,
0xa9, 0xaa, 0xb3, 0x86, 0x5c, 0xb6, 0x6f, 0xfe, 0x11, 0x00, 0x00, 0xff, 0xff, 0x4a, 0x54, 0xa7,
0x4c, 0x50, 0x08, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -932,13 +929,6 @@ func (m *MsgEthereumTxResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
if len(m.ContractAddress) > 0 {
i -= len(m.ContractAddress)
copy(dAtA[i:], m.ContractAddress)
i = encodeVarintTx(dAtA, i, uint64(len(m.ContractAddress)))
i--
dAtA[i] = 0x32
}
if m.GasUsed != 0 {
i = encodeVarintTx(dAtA, i, uint64(m.GasUsed))
i--
@ -1206,10 +1196,6 @@ func (m *MsgEthereumTxResponse) Size() (n int) {
if m.GasUsed != 0 {
n += 1 + sovTx(uint64(m.GasUsed))
}
l = len(m.ContractAddress)
if l > 0 {
n += 1 + l + sovTx(uint64(l))
}
return n
}
@ -2770,38 +2756,6 @@ func (m *MsgEthereumTxResponse) Unmarshal(dAtA []byte) error {
break
}
}
case 6:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ContractAddress", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTx
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthTx
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthTx
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ContractAddress = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipTx(dAtA[iNdEx:])