forked from cerc-io/laconicd-deprecated
		
	chore(evm): Deprecate x/params usage in x/evm (#1472)
* imp(evm): Migrate from old Cosmos SDK params module to new way of keeping params in module Keeper * Updated changelog * Apply changes from code review * (impv): Added Shanghai and Cancun blocks to current types and latest migration * (tests): Update unit tests to include Shanghai and Cancun blocks * (fix) - ran golangci-lint on the entire project * (fix) - remove deprecated params method * (impv): added marshaling of booleans per individual param key * (impv): added individual param getting and setting * (impv): replaced getters with individual param * (impv): added amino codec for MsgEthereumTx * Added changes suggested in code review * (fix): updated the migration files for v4 * (fix): fixed unit tests panic for incorrect interface * (fix): updated module msg handler * (fix): rename to original params getter method * (refactor): registered implementation for the new msg * (refactor): added correct amino codec for MsgUpdateParams and removed for MsgEthTx * Applied changes from code review * (fix): removed unnecessary duplicate * (fix): removed params_legacy from the types and moved logic to migration * (fix): Added v4 mocks to the migrations_test * (fix): undo all the non related work regarding the Cancun and Shanghai blocks * (fix): reverted linting the entire project - will make a separate PR for it * Applied changes from review * Applied changes from code review * (fix): removed comments * (fix): Ran formatter and fixed linting issues on unsed functions * (fix): Linting issues resolved * (fix): refactor migrations and added default EIPs * (fix): Combined into one call * (fix): Added more straightforward way to handle migration * (fix): corrected migration test * Applied changes from code review * (fix): Linter fix * (fix): Linter * (fix): Lint proto files * Apply suggestions from code review Co-authored-by: MalteHerrmann <42640438+MalteHerrmann@users.noreply.github.com> * (fix): Added new block to migration * (fix): Added additional comments and formatted proto files * (fix): Added name to unit test cases * (fix): removed unused import * Apply changes from code review * (fix): typo * (fix): remove HTTP endpoint exposure * Apply suggestions from code review Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * applied changes from code review * fix: extra line added in merge removed * fix: applied changes from code review Co-authored-by: MalteHerrmann <42640438+MalteHerrmann@users.noreply.github.com> Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									e4ac0c9b42
								
							
						
					
					
						commit
						0f7bdceaa0
					
				| @ -40,6 +40,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ | |||||||
| 
 | 
 | ||||||
| ### State Machine Breaking | ### State Machine Breaking | ||||||
| 
 | 
 | ||||||
|  | * (evm) [#1472](https://github.com/evmos/ethermint/pull/1472) Deprecate x/params usage in x/evm | ||||||
| * (deps) #[1575](https://github.com/evmos/ethermint/pull/1575) bump ibc-go to [`v6.1.0`] | * (deps) #[1575](https://github.com/evmos/ethermint/pull/1575) bump ibc-go to [`v6.1.0`] | ||||||
| * (deps) [#1361](https://github.com/evmos/ethermint/pull/1361) Bump ibc-go to [`v5.1.0`](https://github.com/cosmos/ibc-go/releases/tag/v5.1.0) | * (deps) [#1361](https://github.com/evmos/ethermint/pull/1361) Bump ibc-go to [`v5.1.0`](https://github.com/cosmos/ibc-go/releases/tag/v5.1.0) | ||||||
| * (evm) [\#1272](https://github.com/evmos/ethermint/pull/1272) Implement modular interface for the EVM. | * (evm) [\#1272](https://github.com/evmos/ethermint/pull/1272) Implement modular interface for the EVM. | ||||||
|  | |||||||
| @ -50,10 +50,10 @@ type EVMKeeper interface { | |||||||
| 	ResetTransientGasUsed(ctx sdk.Context) | 	ResetTransientGasUsed(ctx sdk.Context) | ||||||
| 	GetTxIndexTransient(ctx sdk.Context) uint64 | 	GetTxIndexTransient(ctx sdk.Context) uint64 | ||||||
| 	GetChainConfig(ctx sdk.Context) evmtypes.ChainConfig | 	GetChainConfig(ctx sdk.Context) evmtypes.ChainConfig | ||||||
| 	GetEVMDenom(ctx sdk.Context) string |  | ||||||
| 	GetEnableCreate(ctx sdk.Context) bool |  | ||||||
| 	GetEnableCall(ctx sdk.Context) bool |  | ||||||
| 	GetAllowUnprotectedTxs(ctx sdk.Context) bool | 	GetAllowUnprotectedTxs(ctx sdk.Context) bool | ||||||
|  | 	GetEVMDenom(ctx sdk.Context) string | ||||||
|  | 	GetEnableCall(ctx sdk.Context) bool | ||||||
|  | 	GetEnableCreate(ctx sdk.Context) bool | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| type protoTxProvider interface { | type protoTxProvider interface { | ||||||
|  | |||||||
| @ -416,8 +416,9 @@ func NewEthermintApp( | |||||||
| 		appCodec, app.GetSubspace(feemarkettypes.ModuleName), keys[feemarkettypes.StoreKey], tkeys[feemarkettypes.TransientKey], | 		appCodec, app.GetSubspace(feemarkettypes.ModuleName), keys[feemarkettypes.StoreKey], tkeys[feemarkettypes.TransientKey], | ||||||
| 	) | 	) | ||||||
| 
 | 
 | ||||||
|  | 	// Set authority to x/gov module account to only expect the module account to update params
 | ||||||
| 	app.EvmKeeper = evmkeeper.NewKeeper( | 	app.EvmKeeper = evmkeeper.NewKeeper( | ||||||
| 		appCodec, keys[evmtypes.StoreKey], tkeys[evmtypes.TransientKey], app.GetSubspace(evmtypes.ModuleName), | 		appCodec, keys[evmtypes.StoreKey], tkeys[evmtypes.TransientKey], authtypes.NewModuleAddress(govtypes.ModuleName), | ||||||
| 		app.AccountKeeper, app.BankKeeper, app.StakingKeeper, app.FeeMarketKeeper, | 		app.AccountKeeper, app.BankKeeper, app.StakingKeeper, app.FeeMarketKeeper, | ||||||
| 		nil, geth.NewEVM, tracer, | 		nil, geth.NewEVM, tracer, | ||||||
| 	) | 	) | ||||||
| @ -505,7 +506,7 @@ func NewEthermintApp( | |||||||
| 		ibc.NewAppModule(app.IBCKeeper), | 		ibc.NewAppModule(app.IBCKeeper), | ||||||
| 		transferModule, | 		transferModule, | ||||||
| 		// Ethermint app modules
 | 		// Ethermint app modules
 | ||||||
| 		evm.NewAppModule(app.EvmKeeper, app.AccountKeeper), | 		evm.NewAppModule(app.EvmKeeper, app.AccountKeeper, app.GetSubspace(evmtypes.ModuleName)), | ||||||
| 		feemarket.NewAppModule(app.FeeMarketKeeper), | 		feemarket.NewAppModule(app.FeeMarketKeeper), | ||||||
| 	) | 	) | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										6
									
								
								client/docs/statik/statik.go
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								client/docs/statik/statik.go
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @ -15,7 +15,11 @@ message Params { | |||||||
|   // enable_call toggles state transitions that use the vm.Call function |   // enable_call toggles state transitions that use the vm.Call function | ||||||
|   bool enable_call = 3 [(gogoproto.moretags) = "yaml:\"enable_call\""]; |   bool enable_call = 3 [(gogoproto.moretags) = "yaml:\"enable_call\""]; | ||||||
|   // extra_eips defines the additional EIPs for the vm.Config |   // extra_eips defines the additional EIPs for the vm.Config | ||||||
|   repeated int64 extra_eips = 4 [(gogoproto.customname) = "ExtraEIPs", (gogoproto.moretags) = "yaml:\"extra_eips\""]; |   ExtraEIPs extra_eips = 4 [ | ||||||
|  |     (gogoproto.customname) = "ExtraEIPs", | ||||||
|  |     (gogoproto.moretags) = "yaml:\"extra_eips\"", | ||||||
|  |     (gogoproto.nullable) = false | ||||||
|  |   ]; | ||||||
|   // chain_config defines the EVM chain configuration parameters |   // chain_config defines the EVM chain configuration parameters | ||||||
|   ChainConfig chain_config = 5 [(gogoproto.moretags) = "yaml:\"chain_config\"", (gogoproto.nullable) = false]; |   ChainConfig chain_config = 5 [(gogoproto.moretags) = "yaml:\"chain_config\"", (gogoproto.nullable) = false]; | ||||||
|   // allow_unprotected_txs defines if replay-protected (i.e non EIP155 |   // allow_unprotected_txs defines if replay-protected (i.e non EIP155 | ||||||
| @ -23,6 +27,12 @@ message Params { | |||||||
|   bool allow_unprotected_txs = 6; |   bool allow_unprotected_txs = 6; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // ExtraEIPs represents extra EIPs for the vm.Config | ||||||
|  | message ExtraEIPs { | ||||||
|  |   // eips defines the additional EIPs for the vm.Config | ||||||
|  |   repeated int64 eips = 1 [(gogoproto.customname) = "EIPs", (gogoproto.moretags) = "yaml:\"eips\""]; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // ChainConfig defines the Ethereum ChainConfig parameters using *sdk.Int values | // ChainConfig defines the Ethereum ChainConfig parameters using *sdk.Int values | ||||||
| // instead of *big.Int. | // instead of *big.Int. | ||||||
| message ChainConfig { | message ChainConfig { | ||||||
| @ -39,7 +49,7 @@ message ChainConfig { | |||||||
|   ]; |   ]; | ||||||
|   // dao_fork_support defines whether the nodes supports or opposes the DAO hard-fork |   // dao_fork_support defines whether the nodes supports or opposes the DAO hard-fork | ||||||
|   bool dao_fork_support = 3 |   bool dao_fork_support = 3 | ||||||
|   [(gogoproto.customname) = "DAOForkSupport", (gogoproto.moretags) = "yaml:\"dao_fork_support\""]; |       [(gogoproto.customname) = "DAOForkSupport", (gogoproto.moretags) = "yaml:\"dao_fork_support\""]; | ||||||
|   // eip150_block: EIP150 implements the Gas price changes |   // eip150_block: EIP150 implements the Gas price changes | ||||||
|   // (https://github.com/ethereum/EIPs/issues/150) EIP150 HF block (nil no fork) |   // (https://github.com/ethereum/EIPs/issues/150) EIP150 HF block (nil no fork) | ||||||
|   string eip150_block = 4 [ |   string eip150_block = 4 [ | ||||||
| @ -127,7 +137,6 @@ message ChainConfig { | |||||||
|     (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", |     (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", | ||||||
|     (gogoproto.moretags) = "yaml:\"cancun_block\"" |     (gogoproto.moretags) = "yaml:\"cancun_block\"" | ||||||
|   ]; |   ]; | ||||||
| 
 |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // State represents a single Storage key value pair item. | // State represents a single Storage key value pair item. | ||||||
|  | |||||||
| @ -1,6 +1,7 @@ | |||||||
| syntax = "proto3"; | syntax = "proto3"; | ||||||
| package ethermint.evm.v1; | package ethermint.evm.v1; | ||||||
| 
 | 
 | ||||||
|  | import "cosmos/msg/v1/msg.proto"; | ||||||
| import "cosmos_proto/cosmos.proto"; | import "cosmos_proto/cosmos.proto"; | ||||||
| import "ethermint/evm/v1/evm.proto"; | import "ethermint/evm/v1/evm.proto"; | ||||||
| import "gogoproto/gogo.proto"; | import "gogoproto/gogo.proto"; | ||||||
| @ -15,6 +16,9 @@ service Msg { | |||||||
|   rpc EthereumTx(MsgEthereumTx) returns (MsgEthereumTxResponse) { |   rpc EthereumTx(MsgEthereumTx) returns (MsgEthereumTxResponse) { | ||||||
|     option (google.api.http).post = "/ethermint/evm/v1/ethereum_tx"; |     option (google.api.http).post = "/ethermint/evm/v1/ethereum_tx"; | ||||||
|   }; |   }; | ||||||
|  |   // UpdateParams defined a governance operation for updating the x/evm module parameters. | ||||||
|  |   // The authority is hard-coded to the Cosmos SDK x/gov module account | ||||||
|  |   rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // MsgEthereumTx encapsulates an Ethereum transaction as an SDK message. | // MsgEthereumTx encapsulates an Ethereum transaction as an SDK message. | ||||||
| @ -158,3 +162,19 @@ message MsgEthereumTxResponse { | |||||||
|   // gas_used specifies how much gas was consumed by the transaction |   // gas_used specifies how much gas was consumed by the transaction | ||||||
|   uint64 gas_used = 5; |   uint64 gas_used = 5; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | // MsgUpdateParams defines a Msg for updating the x/evm module parameters. | ||||||
|  | message MsgUpdateParams { | ||||||
|  |   option (cosmos.msg.v1.signer) = "authority"; | ||||||
|  | 
 | ||||||
|  |   // authority is the address of the governance account. | ||||||
|  |   string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; | ||||||
|  | 
 | ||||||
|  |   // params defines the x/evm parameters to update. | ||||||
|  |   // NOTE: All parameters must be supplied. | ||||||
|  |   Params params = 2 [(gogoproto.nullable) = false]; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // MsgUpdateParamsResponse defines the response structure for executing a | ||||||
|  | // MsgUpdateParams message. | ||||||
|  | message MsgUpdateParamsResponse {} | ||||||
|  | |||||||
| @ -7,8 +7,6 @@ import ( | |||||||
| 	"path/filepath" | 	"path/filepath" | ||||||
| 	"testing" | 	"testing" | ||||||
| 
 | 
 | ||||||
| 	"github.com/evmos/ethermint/crypto/ethsecp256k1" |  | ||||||
| 
 |  | ||||||
| 	dbm "github.com/tendermint/tm-db" | 	dbm "github.com/tendermint/tm-db" | ||||||
| 
 | 
 | ||||||
| 	"github.com/cosmos/cosmos-sdk/client" | 	"github.com/cosmos/cosmos-sdk/client" | ||||||
| @ -21,6 +19,7 @@ import ( | |||||||
| 	tmrpctypes "github.com/tendermint/tendermint/rpc/core/types" | 	tmrpctypes "github.com/tendermint/tendermint/rpc/core/types" | ||||||
| 
 | 
 | ||||||
| 	"github.com/evmos/ethermint/app" | 	"github.com/evmos/ethermint/app" | ||||||
|  | 	"github.com/evmos/ethermint/crypto/ethsecp256k1" | ||||||
| 	"github.com/evmos/ethermint/crypto/hd" | 	"github.com/evmos/ethermint/crypto/hd" | ||||||
| 	"github.com/evmos/ethermint/encoding" | 	"github.com/evmos/ethermint/encoding" | ||||||
| 	"github.com/evmos/ethermint/indexer" | 	"github.com/evmos/ethermint/indexer" | ||||||
|  | |||||||
| @ -39,7 +39,10 @@ func InitGenesis( | |||||||
| ) []abci.ValidatorUpdate { | ) []abci.ValidatorUpdate { | ||||||
| 	k.WithChainID(ctx) | 	k.WithChainID(ctx) | ||||||
| 
 | 
 | ||||||
| 	k.SetParams(ctx, data.Params) | 	err := k.SetParams(ctx, data.Params) | ||||||
|  | 	if err != nil { | ||||||
|  | 		panic(fmt.Errorf("error setting params %s", err)) | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| 	// ensure evm module account is set
 | 	// ensure evm module account is set
 | ||||||
| 	if addr := accountKeeper.GetModuleAddress(types.ModuleName); addr == nil { | 	if addr := accountKeeper.GetModuleAddress(types.ModuleName); addr == nil { | ||||||
|  | |||||||
| @ -30,10 +30,11 @@ func NewHandler(server types.MsgServer) sdk.Handler { | |||||||
| 
 | 
 | ||||||
| 		switch msg := msg.(type) { | 		switch msg := msg.(type) { | ||||||
| 		case *types.MsgEthereumTx: | 		case *types.MsgEthereumTx: | ||||||
| 			// execute state transition
 |  | ||||||
| 			res, err := server.EthereumTx(sdk.WrapSDKContext(ctx), msg) | 			res, err := server.EthereumTx(sdk.WrapSDKContext(ctx), msg) | ||||||
| 			return sdk.WrapServiceResult(ctx, res, err) | 			return sdk.WrapServiceResult(ctx, res, err) | ||||||
| 
 | 		case *types.MsgUpdateParams: | ||||||
|  | 			res, err := server.UpdateParams(sdk.WrapSDKContext(ctx), msg) | ||||||
|  | 			return sdk.WrapServiceResult(ctx, res, err) | ||||||
| 		default: | 		default: | ||||||
| 			err := errorsmod.Wrapf(errortypes.ErrUnknownRequest, "unrecognized %s message type: %T", types.ModuleName, msg) | 			err := errorsmod.Wrapf(errortypes.ErrUnknownRequest, "unrecognized %s message type: %T", types.ModuleName, msg) | ||||||
| 			return nil, err | 			return nil, err | ||||||
|  | |||||||
| @ -540,7 +540,11 @@ func (suite *KeeperTestSuite) TestEstimateGas() { | |||||||
| 			"enough balance", | 			"enough balance", | ||||||
| 			func() { | 			func() { | ||||||
| 				args = types.TransactionArgs{To: &common.Address{}, From: &suite.address, Value: (*hexutil.Big)(big.NewInt(100))} | 				args = types.TransactionArgs{To: &common.Address{}, From: &suite.address, Value: (*hexutil.Big)(big.NewInt(100))} | ||||||
| 			}, false, 0, false}, | 			}, | ||||||
|  | 			false, | ||||||
|  | 			0, | ||||||
|  | 			false, | ||||||
|  | 		}, | ||||||
| 		// should success, because gas limit lower than 21000 is ignored
 | 		// should success, because gas limit lower than 21000 is ignored
 | ||||||
| 		{ | 		{ | ||||||
| 			"gas exceed allowance", | 			"gas exceed allowance", | ||||||
| @ -1261,9 +1265,7 @@ func (suite *KeeperTestSuite) TestQueryBaseFee() { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (suite *KeeperTestSuite) TestEthCall() { | func (suite *KeeperTestSuite) TestEthCall() { | ||||||
| 	var ( | 	var req *types.EthCallRequest | ||||||
| 		req *types.EthCallRequest |  | ||||||
| 	) |  | ||||||
| 
 | 
 | ||||||
| 	address := tests.GenerateAddress() | 	address := tests.GenerateAddress() | ||||||
| 	suite.Require().Equal(uint64(0), suite.app.EvmKeeper.GetNonce(suite.ctx, address)) | 	suite.Require().Equal(uint64(0), suite.app.EvmKeeper.GetNonce(suite.ctx, address)) | ||||||
| @ -1334,7 +1336,6 @@ func (suite *KeeperTestSuite) TestEthCall() { | |||||||
| 			} | 			} | ||||||
| 		}) | 		}) | ||||||
| 	} | 	} | ||||||
| 
 |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (suite *KeeperTestSuite) TestEmptyRequest() { | func (suite *KeeperTestSuite) TestEmptyRequest() { | ||||||
|  | |||||||
| @ -23,7 +23,6 @@ import ( | |||||||
| 	"github.com/cosmos/cosmos-sdk/store/prefix" | 	"github.com/cosmos/cosmos-sdk/store/prefix" | ||||||
| 	storetypes "github.com/cosmos/cosmos-sdk/store/types" | 	storetypes "github.com/cosmos/cosmos-sdk/store/types" | ||||||
| 	sdk "github.com/cosmos/cosmos-sdk/types" | 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||||
| 	paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" |  | ||||||
| 	"github.com/ethereum/go-ethereum/common" | 	"github.com/ethereum/go-ethereum/common" | ||||||
| 	"github.com/ethereum/go-ethereum/core" | 	"github.com/ethereum/go-ethereum/core" | ||||||
| 	ethtypes "github.com/ethereum/go-ethereum/core/types" | 	ethtypes "github.com/ethereum/go-ethereum/core/types" | ||||||
| @ -51,8 +50,8 @@ type Keeper struct { | |||||||
| 	// key to access the transient store, which is reset on every block during Commit
 | 	// key to access the transient store, which is reset on every block during Commit
 | ||||||
| 	transientKey storetypes.StoreKey | 	transientKey storetypes.StoreKey | ||||||
| 
 | 
 | ||||||
| 	// module specific parameter space that can be configured through governance
 | 	// the address capable of executing a MsgUpdateParams message. Typically, this should be the x/gov module account.
 | ||||||
| 	paramSpace paramtypes.Subspace | 	authority sdk.AccAddress | ||||||
| 	// access to account state
 | 	// access to account state
 | ||||||
| 	accountKeeper types.AccountKeeper | 	accountKeeper types.AccountKeeper | ||||||
| 	// update balance and accounting operations with coins
 | 	// update balance and accounting operations with coins
 | ||||||
| @ -82,7 +81,7 @@ type Keeper struct { | |||||||
| func NewKeeper( | func NewKeeper( | ||||||
| 	cdc codec.BinaryCodec, | 	cdc codec.BinaryCodec, | ||||||
| 	storeKey, transientKey storetypes.StoreKey, | 	storeKey, transientKey storetypes.StoreKey, | ||||||
| 	paramSpace paramtypes.Subspace, | 	authority sdk.AccAddress, | ||||||
| 	ak types.AccountKeeper, | 	ak types.AccountKeeper, | ||||||
| 	bankKeeper types.BankKeeper, | 	bankKeeper types.BankKeeper, | ||||||
| 	sk types.StakingKeeper, | 	sk types.StakingKeeper, | ||||||
| @ -96,15 +95,15 @@ func NewKeeper( | |||||||
| 		panic("the EVM module account has not been set") | 		panic("the EVM module account has not been set") | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// set KeyTable if it has not already been set
 | 	// ensure the authority account is correct
 | ||||||
| 	if !paramSpace.HasKeyTable() { | 	if err := sdk.VerifyAddressFormat(authority); err != nil { | ||||||
| 		paramSpace = paramSpace.WithKeyTable(types.ParamKeyTable()) | 		panic(err) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// NOTE: we pass in the parameter space to the CommitStateDB in order to use custom denominations for the EVM operations
 | 	// NOTE: we pass in the parameter space to the CommitStateDB in order to use custom denominations for the EVM operations
 | ||||||
| 	return &Keeper{ | 	return &Keeper{ | ||||||
| 		cdc:               cdc, | 		cdc:               cdc, | ||||||
| 		paramSpace:        paramSpace, | 		authority:         authority, | ||||||
| 		accountKeeper:     ak, | 		accountKeeper:     ak, | ||||||
| 		bankKeeper:        bankKeeper, | 		bankKeeper:        bankKeeper, | ||||||
| 		stakingKeeper:     sk, | 		stakingKeeper:     sk, | ||||||
| @ -156,6 +155,11 @@ func (k Keeper) EmitBlockBloomEvent(ctx sdk.Context, bloom ethtypes.Bloom) { | |||||||
| 	) | 	) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // GetAuthority returns the x/evm module authority address
 | ||||||
|  | func (k Keeper) GetAuthority() sdk.AccAddress { | ||||||
|  | 	return k.authority | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // GetBlockBloomTransient returns bloom bytes for the current block height
 | // GetBlockBloomTransient returns bloom bytes for the current block height
 | ||||||
| func (k Keeper) GetBlockBloomTransient(ctx sdk.Context) *big.Int { | func (k Keeper) GetBlockBloomTransient(ctx sdk.Context) *big.Int { | ||||||
| 	store := prefix.NewStore(ctx.TransientStore(k.transientKey), types.KeyPrefixTransientBloom) | 	store := prefix.NewStore(ctx.TransientStore(k.transientKey), types.KeyPrefixTransientBloom) | ||||||
| @ -312,8 +316,7 @@ func (k *Keeper) GetNonce(ctx sdk.Context, addr common.Address) uint64 { | |||||||
| // GetBalance load account's balance of gas token
 | // GetBalance load account's balance of gas token
 | ||||||
| func (k *Keeper) GetBalance(ctx sdk.Context, addr common.Address) *big.Int { | func (k *Keeper) GetBalance(ctx sdk.Context, addr common.Address) *big.Int { | ||||||
| 	cosmosAddr := sdk.AccAddress(addr.Bytes()) | 	cosmosAddr := sdk.AccAddress(addr.Bytes()) | ||||||
| 	evmDenom := "" | 	evmDenom := k.GetEVMDenom(ctx) | ||||||
| 	k.paramSpace.GetIfExists(ctx, types.ParamStoreKeyEVMDenom, &evmDenom) |  | ||||||
| 	// if node is pruned, params is empty. Return invalid value
 | 	// if node is pruned, params is empty. Return invalid value
 | ||||||
| 	if evmDenom == "" { | 	if evmDenom == "" { | ||||||
| 		return big.NewInt(-1) | 		return big.NewInt(-1) | ||||||
|  | |||||||
| @ -489,10 +489,8 @@ func (suite *KeeperTestSuite) TestGetAccountStorage() { | |||||||
| 				i++ | 				i++ | ||||||
| 				return false | 				return false | ||||||
| 			}) | 			}) | ||||||
| 
 |  | ||||||
| 		}) | 		}) | ||||||
| 	} | 	} | ||||||
| 
 |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (suite *KeeperTestSuite) TestGetAccountOrEmpty() { | func (suite *KeeperTestSuite) TestGetAccountOrEmpty() { | ||||||
| @ -529,7 +527,6 @@ func (suite *KeeperTestSuite) TestGetAccountOrEmpty() { | |||||||
| 			} else { | 			} else { | ||||||
| 				suite.Require().NotEqual(empty, res) | 				suite.Require().NotEqual(empty, res) | ||||||
| 			} | 			} | ||||||
| 
 |  | ||||||
| 		}) | 		}) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | |||||||
| @ -15,14 +15,27 @@ | |||||||
| // along with the Ethermint library. If not, see https://github.com/evmos/ethermint/blob/main/LICENSE
 | // along with the Ethermint library. If not, see https://github.com/evmos/ethermint/blob/main/LICENSE
 | ||||||
| package keeper | package keeper | ||||||
| 
 | 
 | ||||||
|  | import ( | ||||||
|  | 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||||
|  | 	v4 "github.com/evmos/ethermint/x/evm/migrations/v4" | ||||||
|  | 	"github.com/evmos/ethermint/x/evm/types" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
| // Migrator is a struct for handling in-place store migrations.
 | // Migrator is a struct for handling in-place store migrations.
 | ||||||
| type Migrator struct { | type Migrator struct { | ||||||
| 	keeper Keeper | 	keeper         Keeper | ||||||
|  | 	legacySubspace types.Subspace | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // NewMigrator returns a new Migrator.
 | // NewMigrator returns a new Migrator.
 | ||||||
| func NewMigrator(keeper Keeper) Migrator { | func NewMigrator(keeper Keeper, legacySubspace types.Subspace) Migrator { | ||||||
| 	return Migrator{ | 	return Migrator{ | ||||||
| 		keeper: keeper, | 		keeper:         keeper, | ||||||
|  | 		legacySubspace: legacySubspace, | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | // Migrate3to4 migrates the store from consensus version 3 to 4
 | ||||||
|  | func (m Migrator) Migrate3to4(ctx sdk.Context) error { | ||||||
|  | 	return v4.MigrateStore(ctx, m.keeper.storeKey, m.legacySubspace, m.keeper.cdc) | ||||||
|  | } | ||||||
|  | |||||||
							
								
								
									
										42
									
								
								x/evm/keeper/migrations_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								x/evm/keeper/migrations_test.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,42 @@ | |||||||
|  | package keeper_test | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||||
|  | 	evmkeeper "github.com/evmos/ethermint/x/evm/keeper" | ||||||
|  | 	v4types "github.com/evmos/ethermint/x/evm/migrations/v4/types" | ||||||
|  | 	"github.com/evmos/ethermint/x/evm/types" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type mockSubspace struct { | ||||||
|  | 	ps v4types.V4Params | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func newMockSubspace(ps v4types.V4Params) mockSubspace { | ||||||
|  | 	return mockSubspace{ps: ps} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (ms mockSubspace) GetParamSetIfExists(_ sdk.Context, ps types.LegacyParams) { | ||||||
|  | 	*ps.(*v4types.V4Params) = ms.ps | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (suite *KeeperTestSuite) TestMigrations() { | ||||||
|  | 	legacySubspace := newMockSubspace(v4types.DefaultParams()) | ||||||
|  | 	migrator := evmkeeper.NewMigrator(*suite.app.EvmKeeper, legacySubspace) | ||||||
|  | 
 | ||||||
|  | 	testCases := []struct { | ||||||
|  | 		name        string | ||||||
|  | 		migrateFunc func(ctx sdk.Context) error | ||||||
|  | 	}{ | ||||||
|  | 		{ | ||||||
|  | 			"Run Migrate3to4", | ||||||
|  | 			migrator.Migrate3to4, | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	for _, tc := range testCases { | ||||||
|  | 		suite.Run(tc.name, func() { | ||||||
|  | 			err := tc.migrateFunc(suite.ctx) | ||||||
|  | 			suite.Require().NoError(err) | ||||||
|  | 		}) | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @ -21,6 +21,8 @@ import ( | |||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"strconv" | 	"strconv" | ||||||
| 
 | 
 | ||||||
|  | 	govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" | ||||||
|  | 
 | ||||||
| 	tmbytes "github.com/tendermint/tendermint/libs/bytes" | 	tmbytes "github.com/tendermint/tendermint/libs/bytes" | ||||||
| 	tmtypes "github.com/tendermint/tendermint/types" | 	tmtypes "github.com/tendermint/tendermint/types" | ||||||
| 
 | 
 | ||||||
| @ -140,3 +142,20 @@ func (k *Keeper) EthereumTx(goCtx context.Context, msg *types.MsgEthereumTx) (*t | |||||||
| 
 | 
 | ||||||
| 	return response, nil | 	return response, nil | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | // UpdateParams implements the gRPC MsgServer interface. When an UpdateParams
 | ||||||
|  | // proposal passes, it updates the module parameters. The update can only be
 | ||||||
|  | // performed if the requested authority is the Cosmos SDK governance module
 | ||||||
|  | // account.
 | ||||||
|  | func (k *Keeper) UpdateParams(goCtx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { | ||||||
|  | 	if k.authority.String() != req.Authority { | ||||||
|  | 		return nil, errorsmod.Wrapf(govtypes.ErrInvalidSigner, "invalid authority, expected %s, got %s", k.authority.String(), req.Authority) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	ctx := sdk.UnwrapSDKContext(goCtx) | ||||||
|  | 	if err := k.SetParams(ctx, req.Params); err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return &types.MsgUpdateParamsResponse{}, nil | ||||||
|  | } | ||||||
|  | |||||||
| @ -3,6 +3,9 @@ package keeper_test | |||||||
| import ( | import ( | ||||||
| 	"math/big" | 	"math/big" | ||||||
| 
 | 
 | ||||||
|  | 	authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" | ||||||
|  | 	govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" | ||||||
|  | 
 | ||||||
| 	ethtypes "github.com/ethereum/go-ethereum/core/types" | 	ethtypes "github.com/ethereum/go-ethereum/core/types" | ||||||
| 	"github.com/ethereum/go-ethereum/params" | 	"github.com/ethereum/go-ethereum/params" | ||||||
| 	"github.com/evmos/ethermint/x/evm/statedb" | 	"github.com/evmos/ethermint/x/evm/statedb" | ||||||
| @ -78,3 +81,37 @@ func (suite *KeeperTestSuite) TestEthereumTx() { | |||||||
| 		}) | 		}) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func (suite *KeeperTestSuite) TestUpdateParams() { | ||||||
|  | 	testCases := []struct { | ||||||
|  | 		name      string | ||||||
|  | 		request   *types.MsgUpdateParams | ||||||
|  | 		expectErr bool | ||||||
|  | 	}{ | ||||||
|  | 		{ | ||||||
|  | 			name:      "fail - invalid authority", | ||||||
|  | 			request:   &types.MsgUpdateParams{Authority: "foobar"}, | ||||||
|  | 			expectErr: true, | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name: "pass - valid Update msg", | ||||||
|  | 			request: &types.MsgUpdateParams{ | ||||||
|  | 				Authority: authtypes.NewModuleAddress(govtypes.ModuleName).String(), | ||||||
|  | 				Params:    types.DefaultParams(), | ||||||
|  | 			}, | ||||||
|  | 			expectErr: false, | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	for _, tc := range testCases { | ||||||
|  | 		tc := tc | ||||||
|  | 		suite.Run("MsgUpdateParams", func() { | ||||||
|  | 			_, err := suite.app.EvmKeeper.UpdateParams(suite.ctx, tc.request) | ||||||
|  | 			if tc.expectErr { | ||||||
|  | 				suite.Require().Error(err) | ||||||
|  | 			} else { | ||||||
|  | 				suite.Require().NoError(err) | ||||||
|  | 			} | ||||||
|  | 		}) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | |||||||
| @ -17,57 +17,135 @@ package keeper | |||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	sdk "github.com/cosmos/cosmos-sdk/types" | 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||||
| 
 |  | ||||||
| 	"github.com/evmos/ethermint/x/evm/types" | 	"github.com/evmos/ethermint/x/evm/types" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // GetParams returns the total set of evm parameters.
 | // GetParams returns the total set of evm parameters.
 | ||||||
| func (k Keeper) GetParams(ctx sdk.Context) (params types.Params) { | func (k Keeper) GetParams(ctx sdk.Context) (params types.Params) { | ||||||
| 	// TODO: update once https://github.com/cosmos/cosmos-sdk/pull/12615 is merged
 | 	evmDenom := k.GetEVMDenom(ctx) | ||||||
| 	// and released
 | 	allowUnprotectedTx := k.GetAllowUnprotectedTxs(ctx) | ||||||
| 	for _, pair := range params.ParamSetPairs() { | 	enableCreate := k.GetEnableCreate(ctx) | ||||||
| 		k.paramSpace.GetIfExists(ctx, pair.Key, pair.Value) | 	enableCall := k.GetEnableCall(ctx) | ||||||
| 	} | 	chainCfg := k.GetChainConfig(ctx) | ||||||
|  | 	extraEIPs := k.GetExtraEIPs(ctx) | ||||||
| 
 | 
 | ||||||
| 	return params | 	return types.NewParams(evmDenom, allowUnprotectedTx, enableCreate, enableCall, chainCfg, extraEIPs) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // SetParams sets the evm parameters to the param space.
 | // SetParams sets the EVM params each in their individual key for better get performance
 | ||||||
| func (k Keeper) SetParams(ctx sdk.Context, params types.Params) { | func (k Keeper) SetParams(ctx sdk.Context, params types.Params) error { | ||||||
| 	k.paramSpace.SetParamSet(ctx, ¶ms) | 	if err := params.Validate(); err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	k.setExtraEIPs(ctx, params.ExtraEIPs) | ||||||
|  | 	k.setChainConfig(ctx, params.ChainConfig) | ||||||
|  | 	k.setEvmDenom(ctx, params.EvmDenom) | ||||||
|  | 	k.setEnableCall(ctx, params.EnableCall) | ||||||
|  | 	k.setEnableCreate(ctx, params.EnableCreate) | ||||||
|  | 	k.setAllowUnprotectedTxs(ctx, params.AllowUnprotectedTxs) | ||||||
|  | 
 | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // GetExtraEIPs returns the extra EIPs enabled on the chain.
 | ||||||
|  | func (k Keeper) GetExtraEIPs(ctx sdk.Context) types.ExtraEIPs { | ||||||
|  | 	var extraEIPs types.ExtraEIPs | ||||||
|  | 	store := ctx.KVStore(k.storeKey) | ||||||
|  | 	bz := store.Get(types.ParamStoreKeyExtraEIPs) | ||||||
|  | 	if len(bz) == 0 { | ||||||
|  | 		return extraEIPs | ||||||
|  | 	} | ||||||
|  | 	k.cdc.MustUnmarshal(bz, &extraEIPs) | ||||||
|  | 	return extraEIPs | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // GetChainConfig returns the chain configuration parameter.
 | // GetChainConfig returns the chain configuration parameter.
 | ||||||
| func (k Keeper) GetChainConfig(ctx sdk.Context) types.ChainConfig { | func (k Keeper) GetChainConfig(ctx sdk.Context) types.ChainConfig { | ||||||
| 	var chainCfg types.ChainConfig | 	var chainCfg types.ChainConfig | ||||||
| 	k.paramSpace.GetIfExists(ctx, types.ParamStoreKeyChainConfig, &chainCfg) | 	store := ctx.KVStore(k.storeKey) | ||||||
|  | 	bz := store.Get(types.ParamStoreKeyChainConfig) | ||||||
|  | 	if len(bz) == 0 { | ||||||
|  | 		return chainCfg | ||||||
|  | 	} | ||||||
|  | 	k.cdc.MustUnmarshal(bz, &chainCfg) | ||||||
| 	return chainCfg | 	return chainCfg | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // GetEVMDenom returns the EVM denom.
 | // GetEVMDenom returns the EVM denom.
 | ||||||
| func (k Keeper) GetEVMDenom(ctx sdk.Context) string { | func (k Keeper) GetEVMDenom(ctx sdk.Context) string { | ||||||
| 	var evmDenom string | 	store := ctx.KVStore(k.storeKey) | ||||||
| 	k.paramSpace.GetIfExists(ctx, types.ParamStoreKeyEVMDenom, &evmDenom) | 	bz := store.Get(types.ParamStoreKeyEVMDenom) | ||||||
| 	return evmDenom | 	if len(bz) == 0 { | ||||||
|  | 		return "" | ||||||
|  | 	} | ||||||
|  | 	return string(bz) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // GetEnableCall returns true if the EVM Call operation is enabled.
 | // GetEnableCall returns true if the EVM Call operation is enabled.
 | ||||||
| func (k Keeper) GetEnableCall(ctx sdk.Context) bool { | func (k Keeper) GetEnableCall(ctx sdk.Context) bool { | ||||||
| 	var enableCall bool | 	store := ctx.KVStore(k.storeKey) | ||||||
| 	k.paramSpace.GetIfExists(ctx, types.ParamStoreKeyEnableCall, &enableCall) | 	return store.Has(types.ParamStoreKeyEnableCall) | ||||||
| 	return enableCall |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // GetEnableCreate returns true if the EVM Create contract operation is enabled.
 | // GetEnableCreate returns true if the EVM Create contract operation is enabled.
 | ||||||
| func (k Keeper) GetEnableCreate(ctx sdk.Context) bool { | func (k Keeper) GetEnableCreate(ctx sdk.Context) bool { | ||||||
| 	var enableCreate bool | 	store := ctx.KVStore(k.storeKey) | ||||||
| 	k.paramSpace.GetIfExists(ctx, types.ParamStoreKeyEnableCreate, &enableCreate) | 	return store.Has(types.ParamStoreKeyEnableCreate) | ||||||
| 	return enableCreate |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // GetAllowUnprotectedTxs returns true if unprotected txs (i.e non-replay protected as per EIP-155) are supported by the chain.
 | // GetAllowUnprotectedTxs returns true if unprotected txs (i.e non-replay protected as per EIP-155) are supported by the chain.
 | ||||||
| func (k Keeper) GetAllowUnprotectedTxs(ctx sdk.Context) bool { | func (k Keeper) GetAllowUnprotectedTxs(ctx sdk.Context) bool { | ||||||
| 	var allowUnprotectedTx bool | 	store := ctx.KVStore(k.storeKey) | ||||||
| 	k.paramSpace.GetIfExists(ctx, types.ParamStoreKeyAllowUnprotectedTxs, &allowUnprotectedTx) | 	return store.Has(types.ParamStoreKeyAllowUnprotectedTxs) | ||||||
| 	return allowUnprotectedTx | } | ||||||
|  | 
 | ||||||
|  | // setChainConfig sets the ChainConfig in the store
 | ||||||
|  | func (k Keeper) setChainConfig(ctx sdk.Context, chainCfg types.ChainConfig) { | ||||||
|  | 	store := ctx.KVStore(k.storeKey) | ||||||
|  | 	chainCfgBz := k.cdc.MustMarshal(&chainCfg) | ||||||
|  | 	store.Set(types.ParamStoreKeyChainConfig, chainCfgBz) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // setExtraEIPs sets the ExtraEIPs in the store
 | ||||||
|  | func (k Keeper) setExtraEIPs(ctx sdk.Context, extraEIPs types.ExtraEIPs) { | ||||||
|  | 	extraEIPsBz := k.cdc.MustMarshal(&extraEIPs) | ||||||
|  | 	store := ctx.KVStore(k.storeKey) | ||||||
|  | 	store.Set(types.ParamStoreKeyExtraEIPs, extraEIPsBz) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // setEvmDenom sets the EVMDenom param in the store
 | ||||||
|  | func (k Keeper) setEvmDenom(ctx sdk.Context, evmDenom string) { | ||||||
|  | 	store := ctx.KVStore(k.storeKey) | ||||||
|  | 	store.Set(types.ParamStoreKeyEVMDenom, []byte(evmDenom)) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // setAllowUnprotectedTxs sets the AllowUnprotectedTxs param in the store
 | ||||||
|  | func (k Keeper) setAllowUnprotectedTxs(ctx sdk.Context, enable bool) { | ||||||
|  | 	store := ctx.KVStore(k.storeKey) | ||||||
|  | 	if enable { | ||||||
|  | 		store.Set(types.ParamStoreKeyAllowUnprotectedTxs, []byte{0x01}) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	store.Delete(types.ParamStoreKeyAllowUnprotectedTxs) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // setEnableCreate sets the EnableCreate param in the store
 | ||||||
|  | func (k Keeper) setEnableCreate(ctx sdk.Context, enable bool) { | ||||||
|  | 	store := ctx.KVStore(k.storeKey) | ||||||
|  | 	if enable { | ||||||
|  | 		store.Set(types.ParamStoreKeyEnableCreate, []byte{0x01}) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	store.Delete(types.ParamStoreKeyEnableCreate) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // setEnableCall sets the EnableCall param in the store
 | ||||||
|  | func (k Keeper) setEnableCall(ctx sdk.Context, enable bool) { | ||||||
|  | 	store := ctx.KVStore(k.storeKey) | ||||||
|  | 	if enable { | ||||||
|  | 		store.Set(types.ParamStoreKeyEnableCall, []byte{0x01}) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	store.Delete(types.ParamStoreKeyEnableCall) | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,8 +1,9 @@ | |||||||
| package keeper_test | package keeper_test | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"github.com/evmos/ethermint/x/evm/types" |  | ||||||
| 	"reflect" | 	"reflect" | ||||||
|  | 
 | ||||||
|  | 	"github.com/evmos/ethermint/x/evm/types" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func (suite *KeeperTestSuite) TestParams() { | func (suite *KeeperTestSuite) TestParams() { | ||||||
| @ -91,5 +92,4 @@ func (suite *KeeperTestSuite) TestParams() { | |||||||
| 			suite.Require().Equal(tc.expected, outcome) | 			suite.Require().Equal(tc.expected, outcome) | ||||||
| 		}) | 		}) | ||||||
| 	} | 	} | ||||||
| 
 |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -143,7 +143,6 @@ func newNativeMessage( | |||||||
| 	msgSigner := ethtypes.MakeSigner(cfg, big.NewInt(blockHeight)) | 	msgSigner := ethtypes.MakeSigner(cfg, big.NewInt(blockHeight)) | ||||||
| 
 | 
 | ||||||
| 	msg, baseFee, err := newEthMsgTx(nonce, blockHeight, address, cfg, krSigner, ethSigner, txType, data, accessList) | 	msg, baseFee, err := newEthMsgTx(nonce, blockHeight, address, cfg, krSigner, ethSigner, txType, data, accessList) | ||||||
| 
 |  | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -897,7 +897,6 @@ func (suite *KeeperTestSuite) TestSetBalance() { | |||||||
| 				suite.Require().NoError(err) | 				suite.Require().NoError(err) | ||||||
| 				suite.Require().Equal(amount, balance) | 				suite.Require().Equal(amount, balance) | ||||||
| 			} | 			} | ||||||
| 
 |  | ||||||
| 		}) | 		}) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										51
									
								
								x/evm/migrations/v4/migrate.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								x/evm/migrations/v4/migrate.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,51 @@ | |||||||
|  | package v4 | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"github.com/cosmos/cosmos-sdk/codec" | ||||||
|  | 	storetypes "github.com/cosmos/cosmos-sdk/store/types" | ||||||
|  | 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||||
|  | 	v4types "github.com/evmos/ethermint/x/evm/migrations/v4/types" | ||||||
|  | 	"github.com/evmos/ethermint/x/evm/types" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | // MigrateStore migrates the x/evm module state from the consensus version 3 to
 | ||||||
|  | // version 4. Specifically, it takes the parameters that are currently stored
 | ||||||
|  | // and managed by the Cosmos SDK params module and stores them directly into the x/evm module state.
 | ||||||
|  | func MigrateStore( | ||||||
|  | 	ctx sdk.Context, | ||||||
|  | 	storeKey storetypes.StoreKey, | ||||||
|  | 	legacySubspace types.Subspace, | ||||||
|  | 	cdc codec.BinaryCodec, | ||||||
|  | ) error { | ||||||
|  | 	var ( | ||||||
|  | 		store  = ctx.KVStore(storeKey) | ||||||
|  | 		params v4types.V4Params | ||||||
|  | 	) | ||||||
|  | 
 | ||||||
|  | 	legacySubspace.GetParamSetIfExists(ctx, ¶ms) | ||||||
|  | 
 | ||||||
|  | 	if err := params.Validate(); err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	chainCfgBz := cdc.MustMarshal(¶ms.ChainConfig) | ||||||
|  | 	extraEIPsBz := cdc.MustMarshal(&v4types.ExtraEIPs{EIPs: v4types.AvailableExtraEIPs}) | ||||||
|  | 
 | ||||||
|  | 	store.Set(v4types.ParamStoreKeyEVMDenom, []byte(params.EvmDenom)) | ||||||
|  | 	store.Set(v4types.ParamStoreKeyExtraEIPs, extraEIPsBz) | ||||||
|  | 	store.Set(v4types.ParamStoreKeyChainConfig, chainCfgBz) | ||||||
|  | 
 | ||||||
|  | 	if params.AllowUnprotectedTxs { | ||||||
|  | 		store.Set(v4types.ParamStoreKeyAllowUnprotectedTxs, []byte{0x01}) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if params.EnableCall { | ||||||
|  | 		store.Set(v4types.ParamStoreKeyEnableCall, []byte{0x01}) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if params.EnableCreate { | ||||||
|  | 		store.Set(v4types.ParamStoreKeyEnableCreate, []byte{0x01}) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
							
								
								
									
										64
									
								
								x/evm/migrations/v4/migrate_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								x/evm/migrations/v4/migrate_test.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,64 @@ | |||||||
|  | package v4_test | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"testing" | ||||||
|  | 
 | ||||||
|  | 	"github.com/evmos/ethermint/x/evm/types" | ||||||
|  | 	gogotypes "github.com/gogo/protobuf/types" | ||||||
|  | 
 | ||||||
|  | 	"github.com/cosmos/cosmos-sdk/testutil" | ||||||
|  | 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||||
|  | 	"github.com/evmos/ethermint/app" | ||||||
|  | 	"github.com/evmos/ethermint/encoding" | ||||||
|  | 	v4 "github.com/evmos/ethermint/x/evm/migrations/v4" | ||||||
|  | 	v4types "github.com/evmos/ethermint/x/evm/migrations/v4/types" | ||||||
|  | 	"github.com/stretchr/testify/require" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type mockSubspace struct { | ||||||
|  | 	ps v4types.V4Params | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func newMockSubspace(ps v4types.V4Params) mockSubspace { | ||||||
|  | 	return mockSubspace{ps: ps} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (ms mockSubspace) GetParamSetIfExists(ctx sdk.Context, ps types.LegacyParams) { | ||||||
|  | 	*ps.(*v4types.V4Params) = ms.ps | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func TestMigrate(t *testing.T) { | ||||||
|  | 	encCfg := encoding.MakeConfig(app.ModuleBasics) | ||||||
|  | 	cdc := encCfg.Codec | ||||||
|  | 
 | ||||||
|  | 	storeKey := sdk.NewKVStoreKey(types.ModuleName) | ||||||
|  | 	tKey := sdk.NewTransientStoreKey("transient_test") | ||||||
|  | 	ctx := testutil.DefaultContext(storeKey, tKey) | ||||||
|  | 	kvStore := ctx.KVStore(storeKey) | ||||||
|  | 
 | ||||||
|  | 	legacySubspace := newMockSubspace(v4types.DefaultParams()) | ||||||
|  | 	require.NoError(t, v4.MigrateStore(ctx, storeKey, legacySubspace, cdc)) | ||||||
|  | 
 | ||||||
|  | 	// Get all the new parameters from the kvStore
 | ||||||
|  | 	var evmDenom string | ||||||
|  | 	bz := kvStore.Get(v4types.ParamStoreKeyEVMDenom) | ||||||
|  | 	evmDenom = string(bz) | ||||||
|  | 
 | ||||||
|  | 	var allowUnprotectedTx gogotypes.BoolValue | ||||||
|  | 	bz = kvStore.Get(v4types.ParamStoreKeyAllowUnprotectedTxs) | ||||||
|  | 	cdc.MustUnmarshal(bz, &allowUnprotectedTx) | ||||||
|  | 
 | ||||||
|  | 	enableCreate := kvStore.Has(v4types.ParamStoreKeyEnableCreate) | ||||||
|  | 	enableCall := kvStore.Has(v4types.ParamStoreKeyEnableCall) | ||||||
|  | 
 | ||||||
|  | 	var chainCfg v4types.ChainConfig | ||||||
|  | 	bz = kvStore.Get(v4types.ParamStoreKeyChainConfig) | ||||||
|  | 	cdc.MustUnmarshal(bz, &chainCfg) | ||||||
|  | 
 | ||||||
|  | 	var extraEIPs v4types.ExtraEIPs | ||||||
|  | 	bz = kvStore.Get(v4types.ParamStoreKeyExtraEIPs) | ||||||
|  | 	cdc.MustUnmarshal(bz, &extraEIPs) | ||||||
|  | 
 | ||||||
|  | 	params := v4types.NewParams(evmDenom, allowUnprotectedTx.Value, enableCreate, enableCall, chainCfg, extraEIPs) | ||||||
|  | 	require.Equal(t, legacySubspace.ps, params) | ||||||
|  | } | ||||||
							
								
								
									
										175
									
								
								x/evm/migrations/v4/types/chain_config.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										175
									
								
								x/evm/migrations/v4/types/chain_config.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,175 @@ | |||||||
|  | package types | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"math/big" | ||||||
|  | 	"strings" | ||||||
|  | 
 | ||||||
|  | 	"github.com/evmos/ethermint/x/evm/types" | ||||||
|  | 
 | ||||||
|  | 	sdkmath "cosmossdk.io/math" | ||||||
|  | 
 | ||||||
|  | 	errorsmod "cosmossdk.io/errors" | ||||||
|  | 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||||
|  | 
 | ||||||
|  | 	"github.com/ethereum/go-ethereum/common" | ||||||
|  | 	"github.com/ethereum/go-ethereum/params" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | // EthereumConfig returns an Ethereum ChainConfig for EVM state transitions.
 | ||||||
|  | // All the negative or nil values are converted to nil
 | ||||||
|  | func (cc ChainConfig) EthereumConfig(chainID *big.Int) *params.ChainConfig { | ||||||
|  | 	return ¶ms.ChainConfig{ | ||||||
|  | 		ChainID:                 chainID, | ||||||
|  | 		HomesteadBlock:          getBlockValue(cc.HomesteadBlock), | ||||||
|  | 		DAOForkBlock:            getBlockValue(cc.DAOForkBlock), | ||||||
|  | 		DAOForkSupport:          cc.DAOForkSupport, | ||||||
|  | 		EIP150Block:             getBlockValue(cc.EIP150Block), | ||||||
|  | 		EIP150Hash:              common.HexToHash(cc.EIP150Hash), | ||||||
|  | 		EIP155Block:             getBlockValue(cc.EIP155Block), | ||||||
|  | 		EIP158Block:             getBlockValue(cc.EIP158Block), | ||||||
|  | 		ByzantiumBlock:          getBlockValue(cc.ByzantiumBlock), | ||||||
|  | 		ConstantinopleBlock:     getBlockValue(cc.ConstantinopleBlock), | ||||||
|  | 		PetersburgBlock:         getBlockValue(cc.PetersburgBlock), | ||||||
|  | 		IstanbulBlock:           getBlockValue(cc.IstanbulBlock), | ||||||
|  | 		MuirGlacierBlock:        getBlockValue(cc.MuirGlacierBlock), | ||||||
|  | 		BerlinBlock:             getBlockValue(cc.BerlinBlock), | ||||||
|  | 		LondonBlock:             getBlockValue(cc.LondonBlock), | ||||||
|  | 		ArrowGlacierBlock:       getBlockValue(cc.ArrowGlacierBlock), | ||||||
|  | 		GrayGlacierBlock:        getBlockValue(cc.GrayGlacierBlock), | ||||||
|  | 		MergeNetsplitBlock:      getBlockValue(cc.MergeNetsplitBlock), | ||||||
|  | 		ShanghaiBlock:           getBlockValue(cc.ShanghaiBlock), | ||||||
|  | 		CancunBlock:             getBlockValue(cc.CancunBlock), | ||||||
|  | 		TerminalTotalDifficulty: nil, | ||||||
|  | 		Ethash:                  nil, | ||||||
|  | 		Clique:                  nil, | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // DefaultChainConfig returns default evm parameters.
 | ||||||
|  | func DefaultChainConfig() ChainConfig { | ||||||
|  | 	homesteadBlock := sdk.ZeroInt() | ||||||
|  | 	daoForkBlock := sdk.ZeroInt() | ||||||
|  | 	eip150Block := sdk.ZeroInt() | ||||||
|  | 	eip155Block := sdk.ZeroInt() | ||||||
|  | 	eip158Block := sdk.ZeroInt() | ||||||
|  | 	byzantiumBlock := sdk.ZeroInt() | ||||||
|  | 	constantinopleBlock := sdk.ZeroInt() | ||||||
|  | 	petersburgBlock := sdk.ZeroInt() | ||||||
|  | 	istanbulBlock := sdk.ZeroInt() | ||||||
|  | 	muirGlacierBlock := sdk.ZeroInt() | ||||||
|  | 	berlinBlock := sdk.ZeroInt() | ||||||
|  | 	londonBlock := sdk.ZeroInt() | ||||||
|  | 	arrowGlacierBlock := sdk.ZeroInt() | ||||||
|  | 	grayGlacierBlock := sdk.ZeroInt() | ||||||
|  | 	mergeNetsplitBlock := sdk.ZeroInt() | ||||||
|  | 
 | ||||||
|  | 	return ChainConfig{ | ||||||
|  | 		HomesteadBlock:      &homesteadBlock, | ||||||
|  | 		DAOForkBlock:        &daoForkBlock, | ||||||
|  | 		DAOForkSupport:      true, | ||||||
|  | 		EIP150Block:         &eip150Block, | ||||||
|  | 		EIP150Hash:          common.Hash{}.String(), | ||||||
|  | 		EIP155Block:         &eip155Block, | ||||||
|  | 		EIP158Block:         &eip158Block, | ||||||
|  | 		ByzantiumBlock:      &byzantiumBlock, | ||||||
|  | 		ConstantinopleBlock: &constantinopleBlock, | ||||||
|  | 		PetersburgBlock:     &petersburgBlock, | ||||||
|  | 		IstanbulBlock:       &istanbulBlock, | ||||||
|  | 		MuirGlacierBlock:    &muirGlacierBlock, | ||||||
|  | 		BerlinBlock:         &berlinBlock, | ||||||
|  | 		LondonBlock:         &londonBlock, | ||||||
|  | 		ArrowGlacierBlock:   &arrowGlacierBlock, | ||||||
|  | 		GrayGlacierBlock:    &grayGlacierBlock, | ||||||
|  | 		MergeNetsplitBlock:  &mergeNetsplitBlock, | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func getBlockValue(block *sdkmath.Int) *big.Int { | ||||||
|  | 	if block == nil || block.IsNegative() { | ||||||
|  | 		return nil | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return block.BigInt() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Validate performs a basic validation of the ChainConfig params. The function will return an error
 | ||||||
|  | // if any of the block values is uninitialized (i.e nil) or if the EIP150Hash is an invalid hash.
 | ||||||
|  | func (cc ChainConfig) Validate() error { | ||||||
|  | 	if err := validateBlock(cc.HomesteadBlock); err != nil { | ||||||
|  | 		return errorsmod.Wrap(err, "homesteadBlock") | ||||||
|  | 	} | ||||||
|  | 	if err := validateBlock(cc.DAOForkBlock); err != nil { | ||||||
|  | 		return errorsmod.Wrap(err, "daoForkBlock") | ||||||
|  | 	} | ||||||
|  | 	if err := validateBlock(cc.EIP150Block); err != nil { | ||||||
|  | 		return errorsmod.Wrap(err, "eip150Block") | ||||||
|  | 	} | ||||||
|  | 	if err := validateHash(cc.EIP150Hash); err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	if err := validateBlock(cc.EIP155Block); err != nil { | ||||||
|  | 		return errorsmod.Wrap(err, "eip155Block") | ||||||
|  | 	} | ||||||
|  | 	if err := validateBlock(cc.EIP158Block); err != nil { | ||||||
|  | 		return errorsmod.Wrap(err, "eip158Block") | ||||||
|  | 	} | ||||||
|  | 	if err := validateBlock(cc.ByzantiumBlock); err != nil { | ||||||
|  | 		return errorsmod.Wrap(err, "byzantiumBlock") | ||||||
|  | 	} | ||||||
|  | 	if err := validateBlock(cc.ConstantinopleBlock); err != nil { | ||||||
|  | 		return errorsmod.Wrap(err, "constantinopleBlock") | ||||||
|  | 	} | ||||||
|  | 	if err := validateBlock(cc.PetersburgBlock); err != nil { | ||||||
|  | 		return errorsmod.Wrap(err, "petersburgBlock") | ||||||
|  | 	} | ||||||
|  | 	if err := validateBlock(cc.IstanbulBlock); err != nil { | ||||||
|  | 		return errorsmod.Wrap(err, "istanbulBlock") | ||||||
|  | 	} | ||||||
|  | 	if err := validateBlock(cc.MuirGlacierBlock); err != nil { | ||||||
|  | 		return errorsmod.Wrap(err, "muirGlacierBlock") | ||||||
|  | 	} | ||||||
|  | 	if err := validateBlock(cc.BerlinBlock); err != nil { | ||||||
|  | 		return errorsmod.Wrap(err, "berlinBlock") | ||||||
|  | 	} | ||||||
|  | 	if err := validateBlock(cc.LondonBlock); err != nil { | ||||||
|  | 		return errorsmod.Wrap(err, "londonBlock") | ||||||
|  | 	} | ||||||
|  | 	if err := validateBlock(cc.ArrowGlacierBlock); err != nil { | ||||||
|  | 		return errorsmod.Wrap(err, "arrowGlacierBlock") | ||||||
|  | 	} | ||||||
|  | 	if err := validateBlock(cc.GrayGlacierBlock); err != nil { | ||||||
|  | 		return errorsmod.Wrap(err, "GrayGlacierBlock") | ||||||
|  | 	} | ||||||
|  | 	if err := validateBlock(cc.MergeNetsplitBlock); err != nil { | ||||||
|  | 		return errorsmod.Wrap(err, "MergeNetsplitBlock") | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// NOTE: chain ID is not needed to check config order
 | ||||||
|  | 	if err := cc.EthereumConfig(nil).CheckConfigForkOrder(); err != nil { | ||||||
|  | 		return errorsmod.Wrap(err, "invalid config fork order") | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func validateHash(hex string) error { | ||||||
|  | 	if hex != "" && strings.TrimSpace(hex) == "" { | ||||||
|  | 		return errorsmod.Wrap(types.ErrInvalidChainConfig, "hash cannot be blank") | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func validateBlock(block *sdkmath.Int) error { | ||||||
|  | 	// nil value means that the fork has not yet been applied
 | ||||||
|  | 	if block == nil { | ||||||
|  | 		return nil | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if block.IsNegative() { | ||||||
|  | 		return errorsmod.Wrapf( | ||||||
|  | 			types.ErrInvalidChainConfig, "block value cannot be negative: %s", block, | ||||||
|  | 		) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
							
								
								
									
										4235
									
								
								x/evm/migrations/v4/types/evm.pb.go
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										4235
									
								
								x/evm/migrations/v4/types/evm.pb.go
									
									
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										154
									
								
								x/evm/migrations/v4/types/params.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										154
									
								
								x/evm/migrations/v4/types/params.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,154 @@ | |||||||
|  | package types | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"math/big" | ||||||
|  | 
 | ||||||
|  | 	evmtypes "github.com/evmos/ethermint/x/evm/types" | ||||||
|  | 
 | ||||||
|  | 	"github.com/ethereum/go-ethereum/params" | ||||||
|  | 
 | ||||||
|  | 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||||
|  | 	paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" | ||||||
|  | 	"github.com/ethereum/go-ethereum/core/vm" | ||||||
|  | 	"github.com/evmos/ethermint/types" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | var _ evmtypes.LegacyParams = &V4Params{} | ||||||
|  | 
 | ||||||
|  | var ( | ||||||
|  | 	// DefaultEVMDenom defines the default EVM denomination on Ethermint
 | ||||||
|  | 	DefaultEVMDenom = types.AttoPhoton | ||||||
|  | 	// DefaultAllowUnprotectedTxs rejects all unprotected txs (i.e false)
 | ||||||
|  | 	DefaultAllowUnprotectedTxs = false | ||||||
|  | 	DefaultEnableCreate        = true | ||||||
|  | 	DefaultEnableCall          = true | ||||||
|  | 	DefaultExtraEIPs           = ExtraEIPs{AvailableExtraEIPs} | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | // Parameter keys
 | ||||||
|  | var ( | ||||||
|  | 	ParamStoreKeyEVMDenom            = []byte("EVMDenom") | ||||||
|  | 	ParamStoreKeyEnableCreate        = []byte("EnableCreate") | ||||||
|  | 	ParamStoreKeyEnableCall          = []byte("EnableCall") | ||||||
|  | 	ParamStoreKeyExtraEIPs           = []byte("EnableExtraEIPs") | ||||||
|  | 	ParamStoreKeyChainConfig         = []byte("ChainConfig") | ||||||
|  | 	ParamStoreKeyAllowUnprotectedTxs = []byte("AllowUnprotectedTxs") | ||||||
|  | 
 | ||||||
|  | 	// AvailableExtraEIPs define the list of all EIPs that can be enabled by the
 | ||||||
|  | 	// EVM interpreter. These EIPs are applied in order and can override the
 | ||||||
|  | 	// instruction sets from the latest hard fork enabled by the ChainConfig. For
 | ||||||
|  | 	// more info check:
 | ||||||
|  | 	// https://github.com/ethereum/go-ethereum/blob/master/core/vm/interpreter.go#L97
 | ||||||
|  | 	AvailableExtraEIPs = []int64{1344, 1884, 2200, 2929, 3198, 3529} | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | // ParamKeyTable returns the parameter key table.
 | ||||||
|  | func ParamKeyTable() paramtypes.KeyTable { | ||||||
|  | 	return paramtypes.NewKeyTable().RegisterParamSet(&V4Params{}) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // NewParams creates a new Params instance
 | ||||||
|  | func NewParams(evmDenom string, allowUnprotectedTxs, enableCreate, enableCall bool, config ChainConfig, extraEIPs ExtraEIPs) V4Params { | ||||||
|  | 	return V4Params{ | ||||||
|  | 		EvmDenom:            evmDenom, | ||||||
|  | 		AllowUnprotectedTxs: allowUnprotectedTxs, | ||||||
|  | 		EnableCreate:        enableCreate, | ||||||
|  | 		EnableCall:          enableCall, | ||||||
|  | 		ExtraEIPs:           extraEIPs, | ||||||
|  | 		ChainConfig:         config, | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // DefaultParams returns default evm parameters
 | ||||||
|  | // ExtraEIPs is empty to prevent overriding the latest hard fork instruction set
 | ||||||
|  | func DefaultParams() V4Params { | ||||||
|  | 	return V4Params{ | ||||||
|  | 		EvmDenom:            DefaultEVMDenom, | ||||||
|  | 		EnableCreate:        DefaultEnableCreate, | ||||||
|  | 		EnableCall:          DefaultEnableCall, | ||||||
|  | 		ChainConfig:         DefaultChainConfig(), | ||||||
|  | 		ExtraEIPs:           DefaultExtraEIPs, | ||||||
|  | 		AllowUnprotectedTxs: DefaultAllowUnprotectedTxs, | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // ParamSetPairs returns the parameter set pairs.
 | ||||||
|  | func (p *V4Params) ParamSetPairs() paramtypes.ParamSetPairs { | ||||||
|  | 	return paramtypes.ParamSetPairs{ | ||||||
|  | 		paramtypes.NewParamSetPair(ParamStoreKeyEVMDenom, &p.EvmDenom, validateEVMDenom), | ||||||
|  | 		paramtypes.NewParamSetPair(ParamStoreKeyEnableCreate, &p.EnableCreate, validateBool), | ||||||
|  | 		paramtypes.NewParamSetPair(ParamStoreKeyEnableCall, &p.EnableCall, validateBool), | ||||||
|  | 		paramtypes.NewParamSetPair(ParamStoreKeyExtraEIPs, &p.ExtraEIPs, validateEIPs), | ||||||
|  | 		paramtypes.NewParamSetPair(ParamStoreKeyChainConfig, &p.ChainConfig, validateChainConfig), | ||||||
|  | 		paramtypes.NewParamSetPair(ParamStoreKeyAllowUnprotectedTxs, &p.AllowUnprotectedTxs, validateBool), | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Validate performs basic validation on evm parameters.
 | ||||||
|  | func (p V4Params) Validate() error { | ||||||
|  | 	if err := sdk.ValidateDenom(p.EvmDenom); err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if err := validateEIPs(p.ExtraEIPs); err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return p.ChainConfig.Validate() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // EIPs returns the ExtraEIPS as a int slice
 | ||||||
|  | func (p V4Params) EIPs() []int { | ||||||
|  | 	eips := make([]int, len(p.ExtraEIPs.EIPs)) | ||||||
|  | 	for i, eip := range p.ExtraEIPs.EIPs { | ||||||
|  | 		eips[i] = int(eip) | ||||||
|  | 	} | ||||||
|  | 	return eips | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func validateEVMDenom(i interface{}) error { | ||||||
|  | 	denom, ok := i.(string) | ||||||
|  | 	if !ok { | ||||||
|  | 		return fmt.Errorf("invalid parameter EVM denom type: %T", i) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return sdk.ValidateDenom(denom) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func validateBool(i interface{}) error { | ||||||
|  | 	_, ok := i.(bool) | ||||||
|  | 	if !ok { | ||||||
|  | 		return fmt.Errorf("invalid parameter type: %T", i) | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func validateEIPs(i interface{}) error { | ||||||
|  | 	eips, ok := i.(ExtraEIPs) | ||||||
|  | 	if !ok { | ||||||
|  | 		return fmt.Errorf("invalid EIP slice type: %T", i) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	for _, eip := range eips.EIPs { | ||||||
|  | 		if !vm.ValidEip(int(eip)) { | ||||||
|  | 			return fmt.Errorf("EIP %d is not activateable, valid EIPS are: %s", eip, vm.ActivateableEips()) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func validateChainConfig(i interface{}) error { | ||||||
|  | 	cfg, ok := i.(ChainConfig) | ||||||
|  | 	if !ok { | ||||||
|  | 		return fmt.Errorf("invalid chain config type: %T", i) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return cfg.Validate() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // IsLondon returns if london hardfork is enabled.
 | ||||||
|  | func IsLondon(ethConfig *params.ChainConfig, height int64) bool { | ||||||
|  | 	return ethConfig.IsLondon(big.NewInt(height)) | ||||||
|  | } | ||||||
| @ -52,13 +52,14 @@ func (AppModuleBasic) Name() string { | |||||||
| 	return types.ModuleName | 	return types.ModuleName | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // RegisterLegacyAminoCodec performs a no-op as the evm module doesn't support amino.
 | // RegisterLegacyAminoCodec registers the module's types with the given codec.
 | ||||||
| func (AppModuleBasic) RegisterLegacyAminoCodec(_ *codec.LegacyAmino) { | func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { | ||||||
|  | 	types.RegisterLegacyAminoCodec(cdc) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // ConsensusVersion returns the consensus state-breaking version for the module.
 | // ConsensusVersion returns the consensus state-breaking version for the module.
 | ||||||
| func (AppModuleBasic) ConsensusVersion() uint64 { | func (AppModuleBasic) ConsensusVersion() uint64 { | ||||||
| 	return 3 | 	return 4 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // DefaultGenesis returns default genesis state as raw bytes for the evm
 | // DefaultGenesis returns default genesis state as raw bytes for the evm
 | ||||||
| @ -110,14 +111,17 @@ type AppModule struct { | |||||||
| 	AppModuleBasic | 	AppModuleBasic | ||||||
| 	keeper *keeper.Keeper | 	keeper *keeper.Keeper | ||||||
| 	ak     types.AccountKeeper | 	ak     types.AccountKeeper | ||||||
|  | 	// legacySubspace is used solely for migration of x/params managed parameters
 | ||||||
|  | 	legacySubspace types.Subspace | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // NewAppModule creates a new AppModule object
 | // NewAppModule creates a new AppModule object
 | ||||||
| func NewAppModule(k *keeper.Keeper, ak types.AccountKeeper) AppModule { | func NewAppModule(k *keeper.Keeper, ak types.AccountKeeper, ss types.Subspace) AppModule { | ||||||
| 	return AppModule{ | 	return AppModule{ | ||||||
| 		AppModuleBasic: AppModuleBasic{}, | 		AppModuleBasic: AppModuleBasic{}, | ||||||
| 		keeper:         k, | 		keeper:         k, | ||||||
| 		ak:             ak, | 		ak:             ak, | ||||||
|  | 		legacySubspace: ss, | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -136,6 +140,12 @@ func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) { | |||||||
| func (am AppModule) RegisterServices(cfg module.Configurator) { | func (am AppModule) RegisterServices(cfg module.Configurator) { | ||||||
| 	types.RegisterMsgServer(cfg.MsgServer(), am.keeper) | 	types.RegisterMsgServer(cfg.MsgServer(), am.keeper) | ||||||
| 	types.RegisterQueryServer(cfg.QueryServer(), am.keeper) | 	types.RegisterQueryServer(cfg.QueryServer(), am.keeper) | ||||||
|  | 
 | ||||||
|  | 	m := keeper.NewMigrator(*am.keeper, am.legacySubspace) | ||||||
|  | 	err := cfg.RegisterMigration(types.ModuleName, 3, m.Migrate3to4) | ||||||
|  | 	if err != nil { | ||||||
|  | 		panic(err) | ||||||
|  | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Route returns the message routing key for the evm module.
 | // Route returns the message routing key for the evm module.
 | ||||||
| @ -167,7 +177,6 @@ func (am AppModule) EndBlock(ctx sdk.Context, req abci.RequestEndBlock) []abci.V | |||||||
| // no validator updates.
 | // no validator updates.
 | ||||||
| func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate { | func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate { | ||||||
| 	var genesisState types.GenesisState | 	var genesisState types.GenesisState | ||||||
| 
 |  | ||||||
| 	cdc.MustUnmarshalJSON(data, &genesisState) | 	cdc.MustUnmarshalJSON(data, &genesisState) | ||||||
| 	InitGenesis(ctx, am.keeper, am.ak, genesisState) | 	InitGenesis(ctx, am.keeper, am.ak, genesisState) | ||||||
| 	return []abci.ValidatorUpdate{} | 	return []abci.ValidatorUpdate{} | ||||||
|  | |||||||
| @ -26,18 +26,38 @@ import ( | |||||||
| 	proto "github.com/gogo/protobuf/proto" | 	proto "github.com/gogo/protobuf/proto" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| var ModuleCdc = codec.NewProtoCodec(codectypes.NewInterfaceRegistry()) | var ( | ||||||
|  | 	amino = codec.NewLegacyAmino() | ||||||
|  | 	// ModuleCdc references the global evm module codec. Note, the codec should
 | ||||||
|  | 	// ONLY be used in certain instances of tests and for JSON encoding.
 | ||||||
|  | 	ModuleCdc = codec.NewProtoCodec(codectypes.NewInterfaceRegistry()) | ||||||
|  | 
 | ||||||
|  | 	// AminoCdc is a amino codec created to support amino JSON compatible msgs.
 | ||||||
|  | 	AminoCdc = codec.NewAminoCodec(amino) | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | const ( | ||||||
|  | 	// Amino names
 | ||||||
|  | 	updateParamsName = "ethermint/MsgUpdateParams" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | // NOTE: This is required for the GetSignBytes function
 | ||||||
|  | func init() { | ||||||
|  | 	RegisterLegacyAminoCodec(amino) | ||||||
|  | 	amino.Seal() | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| // RegisterInterfaces registers the client interfaces to protobuf Any.
 | // RegisterInterfaces registers the client interfaces to protobuf Any.
 | ||||||
| func RegisterInterfaces(registry codectypes.InterfaceRegistry) { | func RegisterInterfaces(registry codectypes.InterfaceRegistry) { | ||||||
| 	registry.RegisterImplementations( |  | ||||||
| 		(*sdk.Msg)(nil), |  | ||||||
| 		&MsgEthereumTx{}, |  | ||||||
| 	) |  | ||||||
| 	registry.RegisterImplementations( | 	registry.RegisterImplementations( | ||||||
| 		(*tx.TxExtensionOptionI)(nil), | 		(*tx.TxExtensionOptionI)(nil), | ||||||
| 		&ExtensionOptionsEthereumTx{}, | 		&ExtensionOptionsEthereumTx{}, | ||||||
| 	) | 	) | ||||||
|  | 	registry.RegisterImplementations( | ||||||
|  | 		(*sdk.Msg)(nil), | ||||||
|  | 		&MsgEthereumTx{}, | ||||||
|  | 		&MsgUpdateParams{}, | ||||||
|  | 	) | ||||||
| 	registry.RegisterInterface( | 	registry.RegisterInterface( | ||||||
| 		"ethermint.evm.v1.TxData", | 		"ethermint.evm.v1.TxData", | ||||||
| 		(*TxData)(nil), | 		(*TxData)(nil), | ||||||
| @ -49,7 +69,7 @@ func RegisterInterfaces(registry codectypes.InterfaceRegistry) { | |||||||
| 	msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) | 	msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // PackClientState constructs a new Any packed with the given tx data value. It returns
 | // PackTxData constructs a new Any packed with the given tx data value. It returns
 | ||||||
| // an error if the client state can't be casted to a protobuf message or if the concrete
 | // an error if the client state can't be casted to a protobuf message or if the concrete
 | ||||||
| // implementation is not registered to the protobuf codec.
 | // implementation is not registered to the protobuf codec.
 | ||||||
| func PackTxData(txData TxData) (*codectypes.Any, error) { | func PackTxData(txData TxData) (*codectypes.Any, error) { | ||||||
| @ -80,3 +100,8 @@ func UnpackTxData(any *codectypes.Any) (TxData, error) { | |||||||
| 
 | 
 | ||||||
| 	return txData, nil | 	return txData, nil | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | // RegisterLegacyAminoCodec required for EIP-712
 | ||||||
|  | func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { | ||||||
|  | 	cdc.RegisterConcrete(&MsgUpdateParams{}, updateParamsName, nil) | ||||||
|  | } | ||||||
|  | |||||||
							
								
								
									
										594
									
								
								x/evm/types/evm.pb.go
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										594
									
								
								x/evm/types/evm.pb.go
									
									
									
										generated
									
									
									
								
							| @ -34,7 +34,7 @@ type Params struct { | |||||||
| 	// enable_call toggles state transitions that use the vm.Call function
 | 	// enable_call toggles state transitions that use the vm.Call function
 | ||||||
| 	EnableCall bool `protobuf:"varint,3,opt,name=enable_call,json=enableCall,proto3" json:"enable_call,omitempty" yaml:"enable_call"` | 	EnableCall bool `protobuf:"varint,3,opt,name=enable_call,json=enableCall,proto3" json:"enable_call,omitempty" yaml:"enable_call"` | ||||||
| 	// extra_eips defines the additional EIPs for the vm.Config
 | 	// extra_eips defines the additional EIPs for the vm.Config
 | ||||||
| 	ExtraEIPs []int64 `protobuf:"varint,4,rep,packed,name=extra_eips,json=extraEips,proto3" json:"extra_eips,omitempty" yaml:"extra_eips"` | 	ExtraEIPs ExtraEIPs `protobuf:"bytes,4,opt,name=extra_eips,json=extraEips,proto3" json:"extra_eips" yaml:"extra_eips"` | ||||||
| 	// chain_config defines the EVM chain configuration parameters
 | 	// chain_config defines the EVM chain configuration parameters
 | ||||||
| 	ChainConfig ChainConfig `protobuf:"bytes,5,opt,name=chain_config,json=chainConfig,proto3" json:"chain_config" yaml:"chain_config"` | 	ChainConfig ChainConfig `protobuf:"bytes,5,opt,name=chain_config,json=chainConfig,proto3" json:"chain_config" yaml:"chain_config"` | ||||||
| 	// allow_unprotected_txs defines if replay-protected (i.e non EIP155
 | 	// allow_unprotected_txs defines if replay-protected (i.e non EIP155
 | ||||||
| @ -96,11 +96,11 @@ func (m *Params) GetEnableCall() bool { | |||||||
| 	return false | 	return false | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (m *Params) GetExtraEIPs() []int64 { | func (m *Params) GetExtraEIPs() ExtraEIPs { | ||||||
| 	if m != nil { | 	if m != nil { | ||||||
| 		return m.ExtraEIPs | 		return m.ExtraEIPs | ||||||
| 	} | 	} | ||||||
| 	return nil | 	return ExtraEIPs{} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (m *Params) GetChainConfig() ChainConfig { | func (m *Params) GetChainConfig() ChainConfig { | ||||||
| @ -117,6 +117,52 @@ func (m *Params) GetAllowUnprotectedTxs() bool { | |||||||
| 	return false | 	return false | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // ExtraEIPs represents extra EIPs for the vm.Config
 | ||||||
|  | type ExtraEIPs struct { | ||||||
|  | 	// eips defines the additional EIPs for the vm.Config
 | ||||||
|  | 	EIPs []int64 `protobuf:"varint,1,rep,packed,name=eips,proto3" json:"eips,omitempty" yaml:"eips"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (m *ExtraEIPs) Reset()         { *m = ExtraEIPs{} } | ||||||
|  | func (m *ExtraEIPs) String() string { return proto.CompactTextString(m) } | ||||||
|  | func (*ExtraEIPs) ProtoMessage()    {} | ||||||
|  | func (*ExtraEIPs) Descriptor() ([]byte, []int) { | ||||||
|  | 	return fileDescriptor_d21ecc92c8c8583e, []int{1} | ||||||
|  | } | ||||||
|  | func (m *ExtraEIPs) XXX_Unmarshal(b []byte) error { | ||||||
|  | 	return m.Unmarshal(b) | ||||||
|  | } | ||||||
|  | func (m *ExtraEIPs) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { | ||||||
|  | 	if deterministic { | ||||||
|  | 		return xxx_messageInfo_ExtraEIPs.Marshal(b, m, deterministic) | ||||||
|  | 	} else { | ||||||
|  | 		b = b[:cap(b)] | ||||||
|  | 		n, err := m.MarshalToSizedBuffer(b) | ||||||
|  | 		if err != nil { | ||||||
|  | 			return nil, err | ||||||
|  | 		} | ||||||
|  | 		return b[:n], nil | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | func (m *ExtraEIPs) XXX_Merge(src proto.Message) { | ||||||
|  | 	xxx_messageInfo_ExtraEIPs.Merge(m, src) | ||||||
|  | } | ||||||
|  | func (m *ExtraEIPs) XXX_Size() int { | ||||||
|  | 	return m.Size() | ||||||
|  | } | ||||||
|  | func (m *ExtraEIPs) XXX_DiscardUnknown() { | ||||||
|  | 	xxx_messageInfo_ExtraEIPs.DiscardUnknown(m) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | var xxx_messageInfo_ExtraEIPs proto.InternalMessageInfo | ||||||
|  | 
 | ||||||
|  | func (m *ExtraEIPs) GetEIPs() []int64 { | ||||||
|  | 	if m != nil { | ||||||
|  | 		return m.EIPs | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // ChainConfig defines the Ethereum ChainConfig parameters using *sdk.Int values
 | // ChainConfig defines the Ethereum ChainConfig parameters using *sdk.Int values
 | ||||||
| // instead of *big.Int.
 | // instead of *big.Int.
 | ||||||
| type ChainConfig struct { | type ChainConfig struct { | ||||||
| @ -165,7 +211,7 @@ func (m *ChainConfig) Reset()         { *m = ChainConfig{} } | |||||||
| func (m *ChainConfig) String() string { return proto.CompactTextString(m) } | func (m *ChainConfig) String() string { return proto.CompactTextString(m) } | ||||||
| func (*ChainConfig) ProtoMessage()    {} | func (*ChainConfig) ProtoMessage()    {} | ||||||
| func (*ChainConfig) Descriptor() ([]byte, []int) { | func (*ChainConfig) Descriptor() ([]byte, []int) { | ||||||
| 	return fileDescriptor_d21ecc92c8c8583e, []int{1} | 	return fileDescriptor_d21ecc92c8c8583e, []int{2} | ||||||
| } | } | ||||||
| func (m *ChainConfig) XXX_Unmarshal(b []byte) error { | func (m *ChainConfig) XXX_Unmarshal(b []byte) error { | ||||||
| 	return m.Unmarshal(b) | 	return m.Unmarshal(b) | ||||||
| @ -220,7 +266,7 @@ func (m *State) Reset()         { *m = State{} } | |||||||
| func (m *State) String() string { return proto.CompactTextString(m) } | func (m *State) String() string { return proto.CompactTextString(m) } | ||||||
| func (*State) ProtoMessage()    {} | func (*State) ProtoMessage()    {} | ||||||
| func (*State) Descriptor() ([]byte, []int) { | func (*State) Descriptor() ([]byte, []int) { | ||||||
| 	return fileDescriptor_d21ecc92c8c8583e, []int{2} | 	return fileDescriptor_d21ecc92c8c8583e, []int{3} | ||||||
| } | } | ||||||
| func (m *State) XXX_Unmarshal(b []byte) error { | func (m *State) XXX_Unmarshal(b []byte) error { | ||||||
| 	return m.Unmarshal(b) | 	return m.Unmarshal(b) | ||||||
| @ -277,7 +323,7 @@ func (m *TransactionLogs) Reset()         { *m = TransactionLogs{} } | |||||||
| func (m *TransactionLogs) String() string { return proto.CompactTextString(m) } | func (m *TransactionLogs) String() string { return proto.CompactTextString(m) } | ||||||
| func (*TransactionLogs) ProtoMessage()    {} | func (*TransactionLogs) ProtoMessage()    {} | ||||||
| func (*TransactionLogs) Descriptor() ([]byte, []int) { | func (*TransactionLogs) Descriptor() ([]byte, []int) { | ||||||
| 	return fileDescriptor_d21ecc92c8c8583e, []int{3} | 	return fileDescriptor_d21ecc92c8c8583e, []int{4} | ||||||
| } | } | ||||||
| func (m *TransactionLogs) XXX_Unmarshal(b []byte) error { | func (m *TransactionLogs) XXX_Unmarshal(b []byte) error { | ||||||
| 	return m.Unmarshal(b) | 	return m.Unmarshal(b) | ||||||
| @ -353,7 +399,7 @@ func (m *Log) Reset()         { *m = Log{} } | |||||||
| func (m *Log) String() string { return proto.CompactTextString(m) } | func (m *Log) String() string { return proto.CompactTextString(m) } | ||||||
| func (*Log) ProtoMessage()    {} | func (*Log) ProtoMessage()    {} | ||||||
| func (*Log) Descriptor() ([]byte, []int) { | func (*Log) Descriptor() ([]byte, []int) { | ||||||
| 	return fileDescriptor_d21ecc92c8c8583e, []int{4} | 	return fileDescriptor_d21ecc92c8c8583e, []int{5} | ||||||
| } | } | ||||||
| func (m *Log) XXX_Unmarshal(b []byte) error { | func (m *Log) XXX_Unmarshal(b []byte) error { | ||||||
| 	return m.Unmarshal(b) | 	return m.Unmarshal(b) | ||||||
| @ -468,7 +514,7 @@ func (m *TxResult) Reset()         { *m = TxResult{} } | |||||||
| func (m *TxResult) String() string { return proto.CompactTextString(m) } | func (m *TxResult) String() string { return proto.CompactTextString(m) } | ||||||
| func (*TxResult) ProtoMessage()    {} | func (*TxResult) ProtoMessage()    {} | ||||||
| func (*TxResult) Descriptor() ([]byte, []int) { | func (*TxResult) Descriptor() ([]byte, []int) { | ||||||
| 	return fileDescriptor_d21ecc92c8c8583e, []int{5} | 	return fileDescriptor_d21ecc92c8c8583e, []int{6} | ||||||
| } | } | ||||||
| func (m *TxResult) XXX_Unmarshal(b []byte) error { | func (m *TxResult) XXX_Unmarshal(b []byte) error { | ||||||
| 	return m.Unmarshal(b) | 	return m.Unmarshal(b) | ||||||
| @ -509,7 +555,7 @@ func (m *AccessTuple) Reset()         { *m = AccessTuple{} } | |||||||
| func (m *AccessTuple) String() string { return proto.CompactTextString(m) } | func (m *AccessTuple) String() string { return proto.CompactTextString(m) } | ||||||
| func (*AccessTuple) ProtoMessage()    {} | func (*AccessTuple) ProtoMessage()    {} | ||||||
| func (*AccessTuple) Descriptor() ([]byte, []int) { | func (*AccessTuple) Descriptor() ([]byte, []int) { | ||||||
| 	return fileDescriptor_d21ecc92c8c8583e, []int{6} | 	return fileDescriptor_d21ecc92c8c8583e, []int{7} | ||||||
| } | } | ||||||
| func (m *AccessTuple) XXX_Unmarshal(b []byte) error { | func (m *AccessTuple) XXX_Unmarshal(b []byte) error { | ||||||
| 	return m.Unmarshal(b) | 	return m.Unmarshal(b) | ||||||
| @ -569,7 +615,7 @@ func (m *TraceConfig) Reset()         { *m = TraceConfig{} } | |||||||
| func (m *TraceConfig) String() string { return proto.CompactTextString(m) } | func (m *TraceConfig) String() string { return proto.CompactTextString(m) } | ||||||
| func (*TraceConfig) ProtoMessage()    {} | func (*TraceConfig) ProtoMessage()    {} | ||||||
| func (*TraceConfig) Descriptor() ([]byte, []int) { | func (*TraceConfig) Descriptor() ([]byte, []int) { | ||||||
| 	return fileDescriptor_d21ecc92c8c8583e, []int{7} | 	return fileDescriptor_d21ecc92c8c8583e, []int{8} | ||||||
| } | } | ||||||
| func (m *TraceConfig) XXX_Unmarshal(b []byte) error { | func (m *TraceConfig) XXX_Unmarshal(b []byte) error { | ||||||
| 	return m.Unmarshal(b) | 	return m.Unmarshal(b) | ||||||
| @ -677,6 +723,7 @@ func (m *TraceConfig) GetTracerJsonConfig() string { | |||||||
| 
 | 
 | ||||||
| func init() { | func init() { | ||||||
| 	proto.RegisterType((*Params)(nil), "ethermint.evm.v1.Params") | 	proto.RegisterType((*Params)(nil), "ethermint.evm.v1.Params") | ||||||
|  | 	proto.RegisterType((*ExtraEIPs)(nil), "ethermint.evm.v1.ExtraEIPs") | ||||||
| 	proto.RegisterType((*ChainConfig)(nil), "ethermint.evm.v1.ChainConfig") | 	proto.RegisterType((*ChainConfig)(nil), "ethermint.evm.v1.ChainConfig") | ||||||
| 	proto.RegisterType((*State)(nil), "ethermint.evm.v1.State") | 	proto.RegisterType((*State)(nil), "ethermint.evm.v1.State") | ||||||
| 	proto.RegisterType((*TransactionLogs)(nil), "ethermint.evm.v1.TransactionLogs") | 	proto.RegisterType((*TransactionLogs)(nil), "ethermint.evm.v1.TransactionLogs") | ||||||
| @ -689,108 +736,110 @@ func init() { | |||||||
| func init() { proto.RegisterFile("ethermint/evm/v1/evm.proto", fileDescriptor_d21ecc92c8c8583e) } | func init() { proto.RegisterFile("ethermint/evm/v1/evm.proto", fileDescriptor_d21ecc92c8c8583e) } | ||||||
| 
 | 
 | ||||||
| var fileDescriptor_d21ecc92c8c8583e = []byte{ | var fileDescriptor_d21ecc92c8c8583e = []byte{ | ||||||
| 	// 1608 bytes of a gzipped FileDescriptorProto
 | 	// 1644 bytes of a gzipped FileDescriptorProto
 | ||||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x58, 0xdd, 0x6e, 0xe3, 0xc6, | 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x58, 0x4f, 0x6f, 0xe3, 0xc6, | ||||||
| 	0x15, 0xb6, 0x2d, 0xda, 0xa6, 0x46, 0xb2, 0x44, 0x8f, 0xb5, 0x8e, 0xb2, 0x8b, 0x9a, 0x2e, 0x2f, | 	0x15, 0xb7, 0x2d, 0xda, 0xa6, 0x46, 0xb2, 0x44, 0x8f, 0xb5, 0x5e, 0x65, 0x17, 0x35, 0x5d, 0x1e, | ||||||
| 	0x0a, 0x17, 0x48, 0xec, 0xd8, 0x81, 0xd1, 0x45, 0x82, 0x16, 0xb5, 0x76, 0x9d, 0xc4, 0xee, 0x36, | 	0x02, 0x17, 0x4d, 0xec, 0xd8, 0x81, 0xd1, 0x45, 0x82, 0x16, 0x5d, 0xed, 0x3a, 0x89, 0xdd, 0x6d, | ||||||
| 	0x35, 0xc6, 0x0e, 0x0a, 0x14, 0x28, 0x88, 0x11, 0x39, 0xa1, 0x18, 0x93, 0x1c, 0x61, 0x66, 0xa8, | 	0x6a, 0x8c, 0x1d, 0x14, 0x28, 0x50, 0x10, 0x23, 0x72, 0x42, 0x31, 0x26, 0x39, 0xc2, 0xcc, 0x50, | ||||||
| 	0x95, 0xda, 0x3e, 0x40, 0x8b, 0xde, 0xf4, 0x09, 0x8a, 0x3c, 0x4e, 0xd0, 0xab, 0xbd, 0x2c, 0x7a, | 	0x2b, 0xb5, 0xfd, 0x00, 0x05, 0x7a, 0xe9, 0x27, 0x28, 0x72, 0xee, 0x27, 0x09, 0x7a, 0xda, 0x63, | ||||||
| 	0x41, 0x14, 0xde, 0x3b, 0x5f, 0xea, 0x09, 0x8a, 0xf9, 0x11, 0xf5, 0x63, 0xa3, 0xad, 0x75, 0xe5, | 	0xd1, 0x03, 0x51, 0x78, 0x6f, 0x3e, 0xea, 0x13, 0x14, 0xf3, 0x47, 0xd4, 0x1f, 0x1b, 0x6d, 0xad, | ||||||
| 	0xf9, 0xce, 0x39, 0xf3, 0x7d, 0x33, 0x67, 0xce, 0x68, 0x0e, 0x0d, 0x9e, 0x13, 0xd1, 0x23, 0x2c, | 	0x93, 0xe7, 0xf7, 0xde, 0x9b, 0xdf, 0x6f, 0xde, 0x9b, 0x37, 0x9e, 0xa1, 0xc0, 0x33, 0x22, 0x7a, | ||||||
| 	0x8d, 0x33, 0x71, 0x44, 0x06, 0xe9, 0xd1, 0xe0, 0x58, 0xfe, 0x39, 0xec, 0x33, 0x2a, 0x28, 0x74, | 	0x84, 0xa5, 0x71, 0x26, 0x8e, 0xc8, 0x20, 0x3d, 0x1a, 0x1c, 0xcb, 0x3f, 0x87, 0x7d, 0x46, 0x05, | ||||||
| 	0x4a, 0xdf, 0xa1, 0x34, 0x0e, 0x8e, 0x9f, 0xb7, 0x22, 0x1a, 0x51, 0xe5, 0x3c, 0x92, 0x23, 0x1d, | 	0x85, 0x4e, 0xe9, 0x3b, 0x94, 0xc6, 0xc1, 0xf1, 0xb3, 0x56, 0x44, 0x23, 0xaa, 0x9c, 0x47, 0x72, | ||||||
| 	0xe7, 0xfd, 0xa5, 0x02, 0x36, 0xae, 0x30, 0xc3, 0x29, 0x87, 0xc7, 0xa0, 0x4a, 0x06, 0xa9, 0x1f, | 	0xa4, 0xe3, 0xbc, 0xbf, 0x57, 0xc0, 0xc6, 0x25, 0x66, 0x38, 0xe5, 0xf0, 0x18, 0x54, 0xc9, 0x20, | ||||||
| 	0x92, 0x8c, 0xa6, 0xed, 0xd5, 0xfd, 0xd5, 0x83, 0x6a, 0xa7, 0x35, 0x2e, 0x5c, 0x67, 0x84, 0xd3, | 	0xf5, 0x43, 0x92, 0xd1, 0xb4, 0xbd, 0xba, 0xbf, 0x7a, 0x50, 0xed, 0xb4, 0xc6, 0x85, 0xeb, 0x8c, | ||||||
| 	0xe4, 0x33, 0xaf, 0x74, 0x79, 0xc8, 0x26, 0x83, 0xf4, 0xb5, 0x1c, 0xc2, 0x9f, 0x83, 0x2d, 0x92, | 	0x70, 0x9a, 0x7c, 0xe6, 0x95, 0x2e, 0x0f, 0xd9, 0x64, 0x90, 0xbe, 0x96, 0x43, 0xf8, 0x73, 0xb0, | ||||||
| 	0xe1, 0x6e, 0x42, 0xfc, 0x80, 0x11, 0x2c, 0x48, 0x7b, 0x6d, 0x7f, 0xf5, 0xc0, 0xee, 0xb4, 0xc7, | 	0x45, 0x32, 0xdc, 0x4d, 0x88, 0x1f, 0x30, 0x82, 0x05, 0x69, 0xaf, 0xed, 0xaf, 0x1e, 0xd8, 0x9d, | ||||||
| 	0x85, 0xdb, 0x32, 0xd3, 0x66, 0xdd, 0x1e, 0xaa, 0x6b, 0xfc, 0x4a, 0x41, 0xf8, 0x33, 0x50, 0x9b, | 	0xf6, 0xb8, 0x70, 0x5b, 0x66, 0xda, 0xac, 0xdb, 0x43, 0x75, 0x8d, 0x5f, 0x29, 0x08, 0x7f, 0x06, | ||||||
| 	0xf8, 0x71, 0x92, 0xb4, 0x2b, 0x6a, 0xf2, 0xee, 0xb8, 0x70, 0xe1, 0xfc, 0x64, 0x9c, 0x24, 0x1e, | 	0x6a, 0x13, 0x3f, 0x4e, 0x92, 0x76, 0x45, 0x4d, 0xde, 0x1d, 0x17, 0x2e, 0x9c, 0x9f, 0x8c, 0x93, | ||||||
| 	0x02, 0x66, 0x2a, 0x4e, 0x12, 0x78, 0x06, 0x00, 0x19, 0x0a, 0x86, 0x7d, 0x12, 0xf7, 0x79, 0xdb, | 	0xc4, 0x43, 0xc0, 0x4c, 0xc5, 0x49, 0x02, 0xbb, 0x00, 0x90, 0xa1, 0x60, 0xd8, 0x27, 0x71, 0x9f, | ||||||
| 	0xda, 0xaf, 0x1c, 0x54, 0x3a, 0xde, 0x5d, 0xe1, 0x56, 0xcf, 0xa5, 0xf5, 0xfc, 0xe2, 0x8a, 0x8f, | 	0xb7, 0xad, 0xfd, 0xd5, 0x83, 0xda, 0xc9, 0xf3, 0xc3, 0xc5, 0x94, 0x0f, 0xcf, 0x64, 0xcc, 0xd9, | ||||||
| 	0x0b, 0x77, 0xdb, 0x90, 0x94, 0x81, 0x1e, 0xaa, 0x2a, 0x70, 0x1e, 0xf7, 0x39, 0xfc, 0x3d, 0xa8, | 	0xf9, 0x25, 0xef, 0x7c, 0xf8, 0x43, 0xe1, 0xae, 0xdc, 0x16, 0x6e, 0xb5, 0x34, 0x8d, 0x0b, 0x77, | ||||||
| 	0x07, 0x3d, 0x1c, 0x67, 0x7e, 0x40, 0xb3, 0x6f, 0xe3, 0xa8, 0xbd, 0xbe, 0xbf, 0x7a, 0x50, 0x3b, | 	0xdb, 0xa8, 0x94, 0x4c, 0x1e, 0xaa, 0x2a, 0x70, 0x16, 0xf7, 0x39, 0xfc, 0x3d, 0xa8, 0x07, 0x3d, | ||||||
| 	0xf9, 0xd1, 0xe1, 0x62, 0xde, 0x0e, 0x5f, 0xc9, 0xa8, 0x57, 0x2a, 0xa8, 0xf3, 0xe2, 0x87, 0xc2, | 	0x1c, 0x67, 0x7e, 0x40, 0xb3, 0x6f, 0xe3, 0xa8, 0xbd, 0xae, 0x54, 0x7e, 0x74, 0x5f, 0xe5, 0x95, | ||||||
| 	0x5d, 0x19, 0x17, 0xee, 0x8e, 0xa6, 0x9e, 0x25, 0xf0, 0x50, 0x2d, 0x98, 0x46, 0xc2, 0x13, 0xf0, | 	0x8c, 0x7a, 0xa5, 0x82, 0x3a, 0xcf, 0xa5, 0xce, 0xb8, 0x70, 0x77, 0x34, 0xf5, 0x2c, 0x81, 0x87, | ||||||
| 	0x0c, 0x27, 0x09, 0x7d, 0xeb, 0xe7, 0x99, 0x4c, 0x34, 0x09, 0x04, 0x09, 0x7d, 0x31, 0xe4, 0xed, | 	0x6a, 0xc1, 0x34, 0x12, 0x9e, 0x80, 0x27, 0x38, 0x49, 0xe8, 0x5b, 0x3f, 0xcf, 0xe4, 0x4e, 0x90, | ||||||
| 	0x0d, 0xb9, 0x49, 0xb4, 0xa3, 0x9c, 0xdf, 0x4c, 0x7d, 0x37, 0x43, 0xee, 0xfd, 0x7d, 0x1b, 0xd4, | 	0x40, 0x90, 0xd0, 0x17, 0x43, 0xde, 0xde, 0x90, 0x55, 0x40, 0x3b, 0xca, 0xf9, 0xcd, 0xd4, 0x77, | ||||||
| 	0x66, 0xd4, 0x60, 0x0a, 0x9a, 0x3d, 0x9a, 0x12, 0x2e, 0x08, 0x0e, 0xfd, 0x6e, 0x42, 0x83, 0x5b, | 	0x3d, 0xe4, 0xde, 0x0b, 0x30, 0x5d, 0x3f, 0xfc, 0x29, 0xb0, 0x54, 0xf6, 0xab, 0xfb, 0x95, 0x83, | ||||||
| 	0x73, 0x2c, 0xaf, 0xff, 0x55, 0xb8, 0x3f, 0x89, 0x62, 0xd1, 0xcb, 0xbb, 0x87, 0x01, 0x4d, 0x8f, | 	0x4a, 0xe7, 0xe9, 0x6d, 0xe1, 0x5a, 0x26, 0xaf, 0x9a, 0xc9, 0x4b, 0x65, 0xa4, 0x82, 0xbc, 0xbf, | ||||||
| 	0x02, 0xca, 0x53, 0xca, 0xcd, 0x9f, 0x8f, 0x79, 0x78, 0x7b, 0x24, 0x46, 0x7d, 0xc2, 0x0f, 0x2f, | 	0x6d, 0x83, 0xda, 0xcc, 0x3a, 0x61, 0x0a, 0x9a, 0x3d, 0x9a, 0x12, 0x2e, 0x08, 0x0e, 0xfd, 0x6e, | ||||||
| 	0x32, 0x31, 0x2e, 0xdc, 0x5d, 0xbd, 0xd8, 0x05, 0x2a, 0x0f, 0x35, 0x4a, 0x4b, 0x47, 0x1a, 0xe0, | 	0x42, 0x83, 0x1b, 0xb3, 0xe3, 0xaf, 0xff, 0x55, 0xb8, 0x1f, 0x46, 0xb1, 0xe8, 0xe5, 0xdd, 0xc3, | ||||||
| 	0x08, 0x34, 0x42, 0x4c, 0xfd, 0x6f, 0x29, 0xbb, 0x35, 0x6a, 0x6b, 0x4a, 0xed, 0xfa, 0xff, 0x57, | 	0x80, 0xa6, 0x47, 0x01, 0xe5, 0x29, 0xe5, 0xe6, 0xcf, 0xc7, 0x3c, 0xbc, 0x39, 0x12, 0xa3, 0x3e, | ||||||
| 	0xbb, 0x2b, 0xdc, 0xfa, 0xeb, 0xb3, 0xdf, 0x7c, 0x41, 0xd9, 0xad, 0xe2, 0x1c, 0x17, 0xee, 0x33, | 	0xe1, 0x87, 0xe7, 0x99, 0x18, 0x17, 0xee, 0xae, 0x56, 0x5a, 0xa0, 0xf2, 0x50, 0xa3, 0xb4, 0x74, | ||||||
| 	0xad, 0x3e, 0xcf, 0xec, 0xa1, 0x7a, 0x88, 0x69, 0x19, 0x06, 0x7f, 0x0b, 0x9c, 0x32, 0x80, 0xe7, | 	0xa4, 0x01, 0x8e, 0x40, 0x23, 0xc4, 0xd4, 0xff, 0x96, 0xb2, 0x1b, 0xa3, 0xb6, 0xa6, 0xd4, 0xae, | ||||||
| 	0xfd, 0x3e, 0x65, 0xc2, 0x54, 0xc3, 0xc7, 0x77, 0x85, 0xdb, 0x30, 0x94, 0xd7, 0xda, 0x33, 0x2e, | 	0xfe, 0x7f, 0xb5, 0xdb, 0xc2, 0xad, 0xbf, 0x7e, 0xf9, 0x9b, 0x2f, 0x28, 0xbb, 0x51, 0x9c, 0xe3, | ||||||
| 	0xdc, 0x0f, 0x16, 0x48, 0xcd, 0x1c, 0x0f, 0x35, 0x0c, 0xad, 0x09, 0x85, 0x1c, 0xd4, 0x49, 0xdc, | 	0xc2, 0x7d, 0xa2, 0xd5, 0xe7, 0x99, 0x3d, 0x54, 0x0f, 0x31, 0x2d, 0xc3, 0xe0, 0x6f, 0x81, 0x53, | ||||||
| 	0x3f, 0x3e, 0xfd, 0xc4, 0xec, 0xc8, 0x52, 0x3b, 0xba, 0x7a, 0xd2, 0x8e, 0x6a, 0xe7, 0x17, 0x57, | 	0x06, 0xf0, 0xbc, 0xdf, 0xa7, 0x4c, 0x98, 0x46, 0xfb, 0xf8, 0xb6, 0x70, 0x1b, 0x86, 0xf2, 0x4a, | ||||||
| 	0xc7, 0xa7, 0x9f, 0x4c, 0x36, 0x64, 0xce, 0x7e, 0x96, 0xd6, 0x43, 0x35, 0x0d, 0xf5, 0x6e, 0x2e, | 	0x7b, 0xc6, 0x85, 0xfb, 0x74, 0x81, 0xd4, 0xcc, 0xf1, 0x50, 0xc3, 0xd0, 0x9a, 0x50, 0xc8, 0x41, | ||||||
| 	0x80, 0x81, 0x7e, 0x0f, 0xf3, 0x9e, 0xaa, 0xac, 0x6a, 0xe7, 0xe0, 0xae, 0x70, 0x81, 0x66, 0xfa, | 	0x9d, 0xc4, 0xfd, 0xe3, 0xd3, 0x4f, 0x4c, 0x46, 0x96, 0xca, 0xe8, 0xf2, 0x51, 0x19, 0xd5, 0xce, | ||||||
| 	0x0a, 0xf3, 0xde, 0xf4, 0x5c, 0xba, 0xa3, 0x3f, 0xe0, 0x4c, 0xc4, 0x79, 0x3a, 0xe1, 0x02, 0x7a, | 	0xce, 0x2f, 0x8f, 0x4f, 0x3f, 0x99, 0x24, 0xb4, 0x53, 0x6e, 0x5c, 0x49, 0xeb, 0xa1, 0x9a, 0x86, | ||||||
| 	0xb2, 0x8c, 0x2a, 0xd7, 0x7f, 0x6a, 0xd6, 0xbf, 0xb1, 0xf4, 0xfa, 0x4f, 0x1f, 0x5b, 0xff, 0xe9, | 	0x3a, 0x9b, 0x73, 0x60, 0xa0, 0xdf, 0xc3, 0xbc, 0xa7, 0x7a, 0xb2, 0xda, 0x39, 0xb8, 0x2d, 0x5c, | ||||||
| 	0xfc, 0xfa, 0x75, 0x4c, 0x29, 0xfa, 0xd2, 0x88, 0x6e, 0x2e, 0x2d, 0xfa, 0xf2, 0x31, 0xd1, 0x97, | 	0xa0, 0x99, 0xbe, 0xc2, 0xbc, 0x37, 0xdd, 0x97, 0xee, 0xe8, 0x0f, 0x38, 0x13, 0x71, 0x9e, 0x4e, | ||||||
| 	0xf3, 0xa2, 0x3a, 0x46, 0x16, 0xfb, 0x42, 0x26, 0xda, 0xf6, 0xf2, 0xc5, 0xfe, 0x20, 0xa9, 0x8d, | 	0xb8, 0x80, 0x9e, 0x2c, 0xa3, 0xca, 0xf5, 0x9f, 0x9a, 0xf5, 0x6f, 0x2c, 0xbd, 0xfe, 0xd3, 0x87, | ||||||
| 	0xd2, 0xa2, 0xe5, 0xfe, 0x04, 0x5a, 0x01, 0xcd, 0xb8, 0x90, 0xb6, 0x8c, 0xf6, 0x13, 0x62, 0x34, | 	0xd6, 0x7f, 0x3a, 0xbf, 0x7e, 0x1d, 0x53, 0x8a, 0xbe, 0x30, 0xa2, 0x9b, 0x4b, 0x8b, 0xbe, 0x78, | ||||||
| 	0xab, 0x4a, 0xf3, 0xe2, 0x49, 0x9a, 0x2f, 0xcc, 0xaf, 0xc1, 0x23, 0x7c, 0x1e, 0xda, 0x99, 0x37, | 	0x48, 0xf4, 0xc5, 0xbc, 0xa8, 0x8e, 0x91, 0xcd, 0xbe, 0x50, 0x89, 0xb6, 0xbd, 0x7c, 0xb3, 0xdf, | ||||||
| 	0x6b, 0xf5, 0x3e, 0x70, 0xfa, 0x44, 0x10, 0xc6, 0xbb, 0x39, 0x8b, 0x8c, 0x32, 0x50, 0xca, 0xe7, | 	0x2b, 0x6a, 0xa3, 0xb4, 0x68, 0xb9, 0x3f, 0x81, 0x56, 0x40, 0x33, 0x2e, 0xa4, 0x2d, 0xa3, 0xfd, | ||||||
| 	0x4f, 0x52, 0x36, 0xf7, 0x60, 0x91, 0xcb, 0x43, 0xcd, 0xa9, 0x49, 0x2b, 0x7e, 0x07, 0x1a, 0xb1, | 	0x84, 0x18, 0xcd, 0xaa, 0xd2, 0x3c, 0x7f, 0x94, 0xe6, 0x73, 0xf3, 0x7f, 0xe4, 0x01, 0x3e, 0x0f, | ||||||
| 	0x5c, 0x46, 0x37, 0x4f, 0x8c, 0x5e, 0x4d, 0xe9, 0xbd, 0x7a, 0x92, 0x9e, 0xb9, 0xcc, 0xf3, 0x4c, | 	0xed, 0xcc, 0x9b, 0xb5, 0x7a, 0x1f, 0x38, 0x7d, 0x22, 0x08, 0xe3, 0xdd, 0x9c, 0x45, 0x46, 0x19, | ||||||
| 	0x1e, 0xda, 0x9a, 0x18, 0xb4, 0x56, 0x0e, 0x60, 0x9a, 0xc7, 0xcc, 0x8f, 0x12, 0x1c, 0xc4, 0x84, | 	0x28, 0xe5, 0xb3, 0x47, 0x29, 0x9b, 0x73, 0xb0, 0xc8, 0xe5, 0xa1, 0xe6, 0xd4, 0xa4, 0x15, 0xbf, | ||||||
| 	0x19, 0xbd, 0xba, 0xd2, 0xfb, 0xf2, 0x49, 0x7a, 0x1f, 0x6a, 0xbd, 0x87, 0x6c, 0x1e, 0x72, 0xa4, | 	0x03, 0x8d, 0x58, 0x2e, 0xa3, 0x9b, 0x27, 0x46, 0xaf, 0xa6, 0xf4, 0x5e, 0x3d, 0x4a, 0xcf, 0x1c, | ||||||
| 	0xf1, 0x4b, 0x6d, 0xd3, 0xb2, 0x21, 0xa8, 0x77, 0x09, 0x4b, 0xe2, 0xcc, 0x08, 0x6e, 0x29, 0xc1, | 	0xe6, 0x79, 0x26, 0x0f, 0x6d, 0x4d, 0x0c, 0x5a, 0x2b, 0x07, 0x30, 0xcd, 0x63, 0xe6, 0x47, 0x09, | ||||||
| 	0xb3, 0x27, 0x09, 0x9a, 0x3a, 0x9d, 0xe5, 0xf1, 0x50, 0x4d, 0xc3, 0x52, 0x25, 0xa1, 0x59, 0x48, | 	0x0e, 0x62, 0xc2, 0x8c, 0x5e, 0x5d, 0xe9, 0x7d, 0xf9, 0x28, 0xbd, 0x0f, 0xb4, 0xde, 0x7d, 0x36, | ||||||
| 	0x27, 0x2a, 0xdb, 0xcb, 0xab, 0xcc, 0xf2, 0x78, 0xa8, 0xa6, 0xa1, 0x56, 0x19, 0x82, 0x1d, 0xcc, | 	0x0f, 0x39, 0xd2, 0xf8, 0xa5, 0xb6, 0x69, 0xd9, 0x10, 0xd4, 0xbb, 0x84, 0x25, 0x71, 0x66, 0x04, | ||||||
| 	0x18, 0x7d, 0xbb, 0x90, 0x43, 0xa8, 0xc4, 0xbe, 0x7a, 0x92, 0xd8, 0x73, 0x2d, 0xf6, 0x08, 0x9d, | 	0xb7, 0x94, 0xe0, 0xcb, 0x47, 0x09, 0x9a, 0x3e, 0x9d, 0xe5, 0xf1, 0x50, 0x4d, 0xc3, 0x52, 0x25, | ||||||
| 	0x87, 0xb6, 0x95, 0x75, 0x2e, 0x8b, 0x39, 0x80, 0x11, 0xc3, 0xa3, 0x05, 0xe1, 0xd6, 0xf2, 0x87, | 	0xa1, 0x59, 0x48, 0x27, 0x2a, 0xdb, 0xcb, 0xab, 0xcc, 0xf2, 0x78, 0xa8, 0xa6, 0xa1, 0x56, 0x19, | ||||||
| 	0xf7, 0x90, 0xcd, 0x43, 0x8e, 0x34, 0xce, 0xc9, 0xfe, 0x11, 0xb4, 0x52, 0xc2, 0x22, 0xe2, 0x67, | 	0x82, 0x1d, 0xcc, 0x18, 0x7d, 0xbb, 0x50, 0x43, 0xa8, 0xc4, 0xbe, 0x7a, 0x94, 0xd8, 0x33, 0x2d, | ||||||
| 	0x44, 0xf0, 0x7e, 0x12, 0x0b, 0x23, 0xfc, 0x6c, 0xf9, 0xfb, 0xf8, 0x18, 0x9f, 0x87, 0xa0, 0x32, | 	0xf6, 0x00, 0x9d, 0x87, 0xb6, 0x95, 0x75, 0xae, 0x8a, 0x39, 0x80, 0x11, 0xc3, 0xa3, 0x05, 0xe1, | ||||||
| 	0x7f, 0x6d, 0xac, 0xe5, 0xe5, 0xe0, 0x3d, 0x9c, 0x45, 0x3d, 0x1c, 0x1b, 0xd9, 0xdd, 0xe5, 0x2f, | 	0xd6, 0xf2, 0x9b, 0x77, 0x9f, 0xcd, 0x43, 0x8e, 0x34, 0xce, 0xc9, 0xfe, 0x11, 0xb4, 0x52, 0xc2, | ||||||
| 	0xc7, 0x3c, 0x93, 0x87, 0xb6, 0x26, 0x86, 0xb2, 0x7e, 0x02, 0x9c, 0x05, 0xf9, 0xa4, 0x7e, 0x3e, | 	0x22, 0xe2, 0x67, 0x44, 0xf0, 0x7e, 0x12, 0x0b, 0x23, 0xfc, 0x64, 0xf9, 0xf3, 0xf8, 0x10, 0x9f, | ||||||
| 	0x58, 0xbe, 0x7e, 0x66, 0x79, 0x64, 0xfb, 0xa1, 0xa0, 0x52, 0xb9, 0xb4, 0xec, 0x86, 0xd3, 0xbc, | 	0x87, 0xa0, 0x32, 0x7f, 0x6d, 0xac, 0xe5, 0xe1, 0xe0, 0x3d, 0x9c, 0x45, 0x3d, 0x1c, 0x1b, 0xd9, | ||||||
| 	0xb4, 0xec, 0xa6, 0xe3, 0x5c, 0x5a, 0xb6, 0xe3, 0x6c, 0x5f, 0x5a, 0xf6, 0x8e, 0xd3, 0x42, 0x5b, | 	0xdd, 0xe5, 0x0f, 0xc7, 0x3c, 0x93, 0x87, 0xb6, 0x26, 0x86, 0xb2, 0x7f, 0x02, 0x9c, 0x05, 0xf9, | ||||||
| 	0x23, 0x9a, 0x50, 0x7f, 0xf0, 0xa9, 0x9e, 0x84, 0x6a, 0xe4, 0x2d, 0xe6, 0xe6, 0x37, 0x12, 0x35, | 	0xa4, 0x7f, 0x9e, 0x2e, 0xdf, 0x3f, 0xb3, 0x3c, 0xf2, 0xe1, 0xa2, 0xa0, 0x52, 0xb9, 0xb0, 0xec, | ||||||
| 	0x02, 0x2c, 0x70, 0x32, 0xe2, 0x26, 0x55, 0xc8, 0xd1, 0x09, 0x9c, 0x79, 0xb5, 0x8f, 0xc0, 0xfa, | 	0x86, 0xd3, 0xbc, 0xb0, 0xec, 0xa6, 0xe3, 0x5c, 0x58, 0xb6, 0xe3, 0x6c, 0x5f, 0x58, 0xf6, 0x8e, | ||||||
| 	0xb5, 0x90, 0x8d, 0x9b, 0x03, 0x2a, 0xb7, 0x64, 0xa4, 0xbb, 0x11, 0x24, 0x87, 0xb0, 0x05, 0xd6, | 	0xd3, 0x42, 0x5b, 0x23, 0x9a, 0x50, 0x7f, 0xf0, 0xa9, 0x9e, 0x84, 0x6a, 0xe4, 0x2d, 0xe6, 0xe6, | ||||||
| 	0x07, 0x38, 0xc9, 0x75, 0x07, 0x58, 0x45, 0x1a, 0x78, 0x57, 0xa0, 0x79, 0xc3, 0x70, 0xc6, 0x71, | 	0x7f, 0x24, 0x6a, 0x04, 0x58, 0xe0, 0x64, 0xc4, 0x4d, 0xa9, 0x90, 0xa3, 0x0b, 0x38, 0x73, 0x6b, | ||||||
| 	0x20, 0x62, 0x9a, 0xbd, 0xa1, 0x11, 0x87, 0x10, 0x58, 0xea, 0x55, 0xd4, 0x73, 0xd5, 0x18, 0xfe, | 	0x1f, 0x81, 0xf5, 0x2b, 0x21, 0xdf, 0x84, 0x0e, 0xa8, 0xdc, 0x90, 0x91, 0x7e, 0x8d, 0x20, 0x39, | ||||||
| 	0x14, 0x58, 0x09, 0x8d, 0x78, 0x7b, 0x6d, 0xbf, 0x72, 0x50, 0x3b, 0x79, 0xf6, 0xb0, 0x07, 0x7b, | 	0x84, 0x2d, 0xb0, 0x3e, 0xc0, 0x49, 0xae, 0x1f, 0x97, 0x55, 0xa4, 0x81, 0x77, 0x09, 0x9a, 0xd7, | ||||||
| 	0x43, 0x23, 0xa4, 0x42, 0xbc, 0x7f, 0xac, 0x81, 0xca, 0x1b, 0x1a, 0xc1, 0x36, 0xd8, 0xc4, 0x61, | 	0x0c, 0x67, 0x1c, 0x07, 0x22, 0xa6, 0xd9, 0x1b, 0x1a, 0x71, 0x08, 0x81, 0xa5, 0x6e, 0x45, 0x3d, | ||||||
| 	0xc8, 0x08, 0xe7, 0x86, 0x69, 0x02, 0xe1, 0x2e, 0xd8, 0x10, 0xb4, 0x1f, 0x07, 0x9a, 0xae, 0x8a, | 	0x57, 0x8d, 0xe1, 0x4f, 0x80, 0x95, 0xd0, 0x88, 0xb7, 0xd7, 0xf6, 0x2b, 0x07, 0xb5, 0x93, 0x27, | ||||||
| 	0x0c, 0x92, 0xc2, 0x21, 0x16, 0x58, 0xf5, 0x15, 0x75, 0xa4, 0xc6, 0xf0, 0x04, 0xd4, 0xd5, 0xce, | 	0xf7, 0x5f, 0x6f, 0x6f, 0x68, 0x84, 0x54, 0x88, 0xf7, 0x8f, 0x35, 0x50, 0x79, 0x43, 0x23, 0xd8, | ||||||
| 	0xfc, 0x2c, 0x4f, 0xbb, 0x84, 0xa9, 0xf6, 0xc0, 0xea, 0x34, 0xef, 0x0b, 0xb7, 0xa6, 0xec, 0x5f, | 	0x06, 0x9b, 0x38, 0x0c, 0x19, 0xe1, 0xdc, 0x30, 0x4d, 0x20, 0xdc, 0x05, 0x1b, 0x82, 0xf6, 0xe3, | ||||||
| 	0x2b, 0x33, 0x9a, 0x05, 0xf0, 0x23, 0xb0, 0x29, 0x86, 0xb3, 0x2f, 0xfb, 0xce, 0x7d, 0xe1, 0x36, | 	0x40, 0xd3, 0x55, 0x91, 0x41, 0x52, 0x38, 0xc4, 0x02, 0xab, 0x77, 0x45, 0x1d, 0xa9, 0x31, 0x3c, | ||||||
| 	0xc5, 0x74, 0x9b, 0xf2, 0xe1, 0x46, 0x1b, 0x62, 0xa8, 0x1e, 0xf0, 0x23, 0x60, 0x8b, 0xa1, 0x1f, | 	0x01, 0x75, 0x95, 0x99, 0x9f, 0xe5, 0x69, 0x97, 0x30, 0xf5, 0x3c, 0xb0, 0x3a, 0xcd, 0xbb, 0xc2, | ||||||
| 	0x67, 0x21, 0x19, 0xaa, 0xc7, 0xdb, 0xea, 0xb4, 0xee, 0x0b, 0xd7, 0x99, 0x09, 0xbf, 0x90, 0x3e, | 	0xad, 0x29, 0xfb, 0xd7, 0xca, 0x8c, 0x66, 0x01, 0xfc, 0x08, 0x6c, 0x8a, 0xe1, 0xec, 0xcd, 0xbe, | ||||||
| 	0xb4, 0x29, 0x86, 0x6a, 0x00, 0x3f, 0x02, 0x40, 0x2f, 0x49, 0x29, 0xe8, 0xa7, 0x77, 0xeb, 0xbe, | 	0x73, 0x57, 0xb8, 0x4d, 0x31, 0x4d, 0x53, 0x5e, 0xdc, 0x68, 0x43, 0x0c, 0xd5, 0x05, 0x7e, 0x04, | ||||||
| 	0x70, 0xab, 0xca, 0xaa, 0xb8, 0xa7, 0x43, 0xe8, 0x81, 0x75, 0xcd, 0x6d, 0x2b, 0xee, 0xfa, 0x7d, | 	0x6c, 0x31, 0xf4, 0xe3, 0x2c, 0x24, 0x43, 0x75, 0x79, 0x5b, 0x9d, 0xd6, 0x5d, 0xe1, 0x3a, 0x33, | ||||||
| 	0xe1, 0xda, 0x09, 0x8d, 0x34, 0xa7, 0x76, 0xc9, 0x54, 0x31, 0x92, 0xd2, 0x01, 0x09, 0xd5, 0xeb, | 	0xe1, 0xe7, 0xd2, 0x87, 0x36, 0xc5, 0x50, 0x0d, 0xe0, 0x47, 0x00, 0xe8, 0x25, 0x29, 0x05, 0x7d, | ||||||
| 	0x66, 0xa3, 0x09, 0xf4, 0xfe, 0xba, 0x06, 0xec, 0x9b, 0x21, 0x22, 0x3c, 0x4f, 0x04, 0xfc, 0x02, | 	0xf5, 0x6e, 0xdd, 0x15, 0x6e, 0x55, 0x59, 0x15, 0xf7, 0x74, 0x08, 0x3d, 0xb0, 0xae, 0xb9, 0x6d, | ||||||
| 	0x38, 0x01, 0xcd, 0x04, 0xc3, 0x81, 0xf0, 0xe7, 0x52, 0xdb, 0x79, 0x31, 0x7d, 0x69, 0x16, 0x23, | 	0xc5, 0x5d, 0xbf, 0x2b, 0x5c, 0x3b, 0xa1, 0x91, 0xe6, 0xd4, 0x2e, 0x59, 0x2a, 0x46, 0x52, 0x3a, | ||||||
| 	0x3c, 0xd4, 0x9c, 0x98, 0xce, 0x4c, 0xfe, 0x5b, 0x60, 0xbd, 0x9b, 0x50, 0x9a, 0xaa, 0x4a, 0xa8, | 	0x20, 0xa1, 0xba, 0xdd, 0x6c, 0x34, 0x81, 0xde, 0x5f, 0xd6, 0x80, 0x7d, 0x3d, 0x44, 0x84, 0xe7, | ||||||
| 	0x23, 0x0d, 0x20, 0x52, 0x59, 0x53, 0xa7, 0x5c, 0x51, 0x9d, 0xf6, 0x8f, 0x1f, 0x9e, 0xf2, 0x42, | 	0x89, 0x80, 0x5f, 0x00, 0x27, 0xa0, 0x99, 0x60, 0x38, 0x10, 0xfe, 0x5c, 0x69, 0x3b, 0xcf, 0xa7, | ||||||
| 	0xa9, 0x74, 0x76, 0x4d, 0xb7, 0xdd, 0xd0, 0xda, 0x66, 0xbe, 0x27, 0x73, 0xab, 0x4a, 0xc9, 0x01, | 	0x37, 0xcd, 0x62, 0x84, 0x87, 0x9a, 0x13, 0xd3, 0x4b, 0x53, 0xff, 0x16, 0x58, 0xef, 0x26, 0x94, | ||||||
| 	0x15, 0x46, 0x84, 0x3a, 0xb4, 0x3a, 0x92, 0x43, 0xf8, 0x1c, 0xd8, 0x8c, 0x0c, 0x08, 0x13, 0x24, | 	0xa6, 0xaa, 0x13, 0xea, 0x48, 0x03, 0x88, 0x54, 0xd5, 0xd4, 0x2e, 0x57, 0xd4, 0x1b, 0xfd, 0xc7, | ||||||
| 	0x54, 0x87, 0x63, 0xa3, 0x12, 0xc3, 0x0f, 0x81, 0x1d, 0x61, 0xee, 0xe7, 0x9c, 0x84, 0xfa, 0x24, | 	0xf7, 0x77, 0x79, 0xa1, 0x55, 0x3a, 0xbb, 0xe6, 0x9d, 0xde, 0xd0, 0xda, 0x66, 0xbe, 0x27, 0x6b, | ||||||
| 	0xd0, 0x66, 0x84, 0xf9, 0x37, 0x9c, 0x84, 0x9f, 0x59, 0x7f, 0xfe, 0xde, 0x5d, 0xf1, 0x30, 0xa8, | 	0xab, 0x5a, 0xc9, 0x01, 0x15, 0x46, 0x84, 0xda, 0xb4, 0x3a, 0x92, 0x43, 0xf8, 0x0c, 0xd8, 0x8c, | ||||||
| 	0x9d, 0x05, 0x01, 0xe1, 0xfc, 0x26, 0xef, 0x27, 0xe4, 0xbf, 0x54, 0xd8, 0x09, 0xa8, 0x73, 0x41, | 	0x0c, 0x08, 0x13, 0x24, 0x54, 0x9b, 0x63, 0xa3, 0x12, 0xc3, 0x0f, 0x80, 0x1d, 0x61, 0xee, 0xe7, | ||||||
| 	0x19, 0x8e, 0x88, 0x7f, 0x4b, 0x46, 0xa6, 0xce, 0x74, 0xd5, 0x18, 0xfb, 0xaf, 0xc8, 0x88, 0xa3, | 	0x9c, 0x84, 0x7a, 0x27, 0xd0, 0x66, 0x84, 0xf9, 0x37, 0x9c, 0x84, 0x9f, 0x59, 0x7f, 0xfe, 0xde, | ||||||
| 	0x59, 0x60, 0x24, 0xbe, 0xb7, 0x40, 0xed, 0x86, 0xe1, 0x80, 0x98, 0x0e, 0x5f, 0xd6, 0xaa, 0x84, | 	0x5d, 0xf1, 0x30, 0xa8, 0xbd, 0x0c, 0x02, 0xc2, 0xf9, 0x75, 0xde, 0x4f, 0xc8, 0x7f, 0xe9, 0xb0, | ||||||
| 	0xcc, 0x48, 0x18, 0x24, 0xb5, 0x45, 0x9c, 0x12, 0x9a, 0x0b, 0x73, 0x9f, 0x26, 0x50, 0xce, 0x60, | 	0x13, 0x50, 0xe7, 0x82, 0x32, 0x1c, 0x11, 0xff, 0x86, 0x8c, 0x4c, 0x9f, 0xe9, 0xae, 0x31, 0xf6, | ||||||
| 	0x84, 0x0c, 0x49, 0xa0, 0xd2, 0x68, 0x21, 0x83, 0xe0, 0x29, 0xd8, 0x0a, 0x63, 0xae, 0x3e, 0x97, | 	0x5f, 0x91, 0x11, 0x47, 0xb3, 0xc0, 0x48, 0x7c, 0x6f, 0x81, 0xda, 0x35, 0xc3, 0x01, 0x31, 0x2f, | ||||||
| 	0xb8, 0xc0, 0xc1, 0xad, 0xde, 0x7e, 0xc7, 0xb9, 0x2f, 0xdc, 0xba, 0x71, 0x5c, 0x4b, 0x3b, 0x9a, | 	0x7c, 0xd9, 0xab, 0x12, 0x32, 0x23, 0x61, 0x90, 0xd4, 0x16, 0x71, 0x4a, 0x68, 0x2e, 0xcc, 0x79, | ||||||
| 	0x43, 0xf0, 0x73, 0xd0, 0x9c, 0x4e, 0x53, 0xab, 0xd5, 0x1f, 0x28, 0x1d, 0x78, 0x5f, 0xb8, 0x8d, | 	0x9a, 0x40, 0x39, 0x83, 0x11, 0x32, 0x24, 0x81, 0x2a, 0xa3, 0x85, 0x0c, 0x82, 0xa7, 0x60, 0x2b, | ||||||
| 	0x32, 0x54, 0x79, 0xd0, 0x02, 0x96, 0x27, 0x1d, 0x92, 0x6e, 0x1e, 0xa9, 0xe2, 0xb3, 0x91, 0x06, | 	0x8c, 0xb9, 0xfa, 0x12, 0xe3, 0x02, 0x07, 0x37, 0x3a, 0xfd, 0x8e, 0x73, 0x57, 0xb8, 0x75, 0xe3, | ||||||
| 	0xd2, 0x9a, 0xc4, 0x69, 0x2c, 0x54, 0xb1, 0xad, 0x23, 0x0d, 0xe0, 0xe7, 0xa0, 0x4a, 0x07, 0x84, | 	0xb8, 0x92, 0x76, 0x34, 0x87, 0xe0, 0xe7, 0xa0, 0x39, 0x9d, 0xa6, 0x56, 0xab, 0x3f, 0x6d, 0x3a, | ||||||
| 	0xb1, 0x38, 0x24, 0x5c, 0xb5, 0x3a, 0xff, 0xeb, 0x5b, 0x0b, 0x4d, 0xe3, 0xe5, 0xe6, 0xcc, 0xa7, | 	0xf0, 0xae, 0x70, 0x1b, 0x65, 0xa8, 0xf2, 0xa0, 0x05, 0x2c, 0x77, 0x3a, 0x24, 0xdd, 0x3c, 0x52, | ||||||
| 	0x60, 0x4a, 0x52, 0xca, 0x46, 0xaa, 0x77, 0x31, 0x9b, 0xd3, 0x8e, 0x5f, 0x2b, 0x3b, 0x9a, 0x43, | 	0xcd, 0x67, 0x23, 0x0d, 0xa4, 0x35, 0x89, 0xd3, 0x58, 0xa8, 0x66, 0x5b, 0x47, 0x1a, 0xc0, 0xcf, | ||||||
| 	0xb0, 0x03, 0xa0, 0x99, 0xc6, 0x88, 0xc8, 0x59, 0xe6, 0xab, 0xfb, 0x5f, 0x57, 0x73, 0xd5, 0x2d, | 	0x41, 0x95, 0x0e, 0x08, 0x63, 0x71, 0x48, 0xb8, 0x7a, 0xea, 0xfc, 0xaf, 0xaf, 0x34, 0x34, 0x8d, | ||||||
| 	0xd4, 0x5e, 0xa4, 0x9c, 0xaf, 0xb1, 0xc0, 0xe8, 0x81, 0x05, 0xfe, 0x02, 0x40, 0x7d, 0x26, 0xfe, | 	0x97, 0xc9, 0x99, 0xaf, 0xcc, 0x94, 0xa4, 0x94, 0x8d, 0xd4, 0xdb, 0xc5, 0x24, 0xa7, 0x1d, 0xbf, | ||||||
| 	0x77, 0x9c, 0x96, 0x1f, 0x8b, 0xba, 0xb5, 0x50, 0xfa, 0xda, 0x6b, 0xd6, 0xec, 0x68, 0x74, 0xc9, | 	0x56, 0x76, 0x34, 0x87, 0x60, 0x07, 0x40, 0x33, 0x8d, 0x11, 0x91, 0xb3, 0xcc, 0x57, 0xe7, 0xbf, | ||||||
| 	0xa9, 0xd9, 0xc5, 0xa5, 0x65, 0x5b, 0xce, 0xfa, 0xa5, 0x65, 0x6f, 0x3a, 0x76, 0x99, 0x3f, 0xb3, | 	0xae, 0xe6, 0xaa, 0x53, 0xa8, 0xbd, 0x48, 0x39, 0x5f, 0x63, 0x81, 0xd1, 0x3d, 0x0b, 0xfc, 0x05, | ||||||
| 	0x0b, 0xb4, 0x33, 0xc1, 0x33, 0xcb, 0xeb, 0xfc, 0xf2, 0x87, 0xbb, 0xbd, 0xd5, 0x77, 0x77, 0x7b, | 	0x80, 0x7a, 0x4f, 0xfc, 0xef, 0x38, 0x2d, 0x3f, 0x33, 0xf5, 0xd3, 0x42, 0xe9, 0x6b, 0xaf, 0x59, | ||||||
| 	0xab, 0xff, 0xbe, 0xdb, 0x5b, 0xfd, 0xdb, 0xfb, 0xbd, 0x95, 0x77, 0xef, 0xf7, 0x56, 0xfe, 0xf9, | 	0xb3, 0xa3, 0xd1, 0x05, 0xa7, 0x26, 0x8b, 0x0b, 0xcb, 0xb6, 0x9c, 0xf5, 0x0b, 0xcb, 0xde, 0x74, | ||||||
| 	0x7e, 0x6f, 0xe5, 0x77, 0xb3, 0xef, 0x03, 0x19, 0xc8, 0xe7, 0x61, 0xfa, 0xfd, 0x3f, 0x54, 0xff, | 	0xec, 0xb2, 0x7e, 0x26, 0x0b, 0xb4, 0x33, 0xc1, 0x33, 0xcb, 0xeb, 0xfc, 0xf2, 0x87, 0xdb, 0xbd, | ||||||
| 	0x01, 0x50, 0x6f, 0x44, 0x77, 0x43, 0x7d, 0xd9, 0x7f, 0xfa, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, | 	0xd5, 0x77, 0xb7, 0x7b, 0xab, 0xff, 0xbe, 0xdd, 0x5b, 0xfd, 0xeb, 0xfb, 0xbd, 0x95, 0x77, 0xef, | ||||||
| 	0xe2, 0xe1, 0x18, 0x7a, 0x1f, 0x10, 0x00, 0x00, | 	0xf7, 0x56, 0xfe, 0xf9, 0x7e, 0x6f, 0xe5, 0x77, 0xb3, 0xf7, 0x03, 0x19, 0xc8, 0xeb, 0x61, 0xfa, | ||||||
|  | 	0xd3, 0xc2, 0x50, 0xfd, 0xb8, 0xa0, 0xee, 0x88, 0xee, 0x86, 0xfa, 0xd1, 0xe0, 0xd3, 0xff, 0x04, | ||||||
|  | 	0x00, 0x00, 0xff, 0xff, 0x68, 0xce, 0x8e, 0x23, 0x7a, 0x10, 0x00, 0x00, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (m *Params) Marshal() (dAtA []byte, err error) { | func (m *Params) Marshal() (dAtA []byte, err error) { | ||||||
| @ -833,25 +882,16 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { | |||||||
| 	} | 	} | ||||||
| 	i-- | 	i-- | ||||||
| 	dAtA[i] = 0x2a | 	dAtA[i] = 0x2a | ||||||
| 	if len(m.ExtraEIPs) > 0 { | 	{ | ||||||
| 		dAtA3 := make([]byte, len(m.ExtraEIPs)*10) | 		size, err := m.ExtraEIPs.MarshalToSizedBuffer(dAtA[:i]) | ||||||
| 		var j2 int | 		if err != nil { | ||||||
| 		for _, num1 := range m.ExtraEIPs { | 			return 0, err | ||||||
| 			num := uint64(num1) |  | ||||||
| 			for num >= 1<<7 { |  | ||||||
| 				dAtA3[j2] = uint8(uint64(num)&0x7f | 0x80) |  | ||||||
| 				num >>= 7 |  | ||||||
| 				j2++ |  | ||||||
| 			} |  | ||||||
| 			dAtA3[j2] = uint8(num) |  | ||||||
| 			j2++ |  | ||||||
| 		} | 		} | ||||||
| 		i -= j2 | 		i -= size | ||||||
| 		copy(dAtA[i:], dAtA3[:j2]) | 		i = encodeVarintEvm(dAtA, i, uint64(size)) | ||||||
| 		i = encodeVarintEvm(dAtA, i, uint64(j2)) |  | ||||||
| 		i-- |  | ||||||
| 		dAtA[i] = 0x22 |  | ||||||
| 	} | 	} | ||||||
|  | 	i-- | ||||||
|  | 	dAtA[i] = 0x22 | ||||||
| 	if m.EnableCall { | 	if m.EnableCall { | ||||||
| 		i-- | 		i-- | ||||||
| 		if m.EnableCall { | 		if m.EnableCall { | ||||||
| @ -882,6 +922,48 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { | |||||||
| 	return len(dAtA) - i, nil | 	return len(dAtA) - i, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (m *ExtraEIPs) Marshal() (dAtA []byte, err error) { | ||||||
|  | 	size := m.Size() | ||||||
|  | 	dAtA = make([]byte, size) | ||||||
|  | 	n, err := m.MarshalToSizedBuffer(dAtA[:size]) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	return dAtA[:n], nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (m *ExtraEIPs) MarshalTo(dAtA []byte) (int, error) { | ||||||
|  | 	size := m.Size() | ||||||
|  | 	return m.MarshalToSizedBuffer(dAtA[:size]) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (m *ExtraEIPs) MarshalToSizedBuffer(dAtA []byte) (int, error) { | ||||||
|  | 	i := len(dAtA) | ||||||
|  | 	_ = i | ||||||
|  | 	var l int | ||||||
|  | 	_ = l | ||||||
|  | 	if len(m.EIPs) > 0 { | ||||||
|  | 		dAtA4 := make([]byte, len(m.EIPs)*10) | ||||||
|  | 		var j3 int | ||||||
|  | 		for _, num1 := range m.EIPs { | ||||||
|  | 			num := uint64(num1) | ||||||
|  | 			for num >= 1<<7 { | ||||||
|  | 				dAtA4[j3] = uint8(uint64(num)&0x7f | 0x80) | ||||||
|  | 				num >>= 7 | ||||||
|  | 				j3++ | ||||||
|  | 			} | ||||||
|  | 			dAtA4[j3] = uint8(num) | ||||||
|  | 			j3++ | ||||||
|  | 		} | ||||||
|  | 		i -= j3 | ||||||
|  | 		copy(dAtA[i:], dAtA4[:j3]) | ||||||
|  | 		i = encodeVarintEvm(dAtA, i, uint64(j3)) | ||||||
|  | 		i-- | ||||||
|  | 		dAtA[i] = 0xa | ||||||
|  | 	} | ||||||
|  | 	return len(dAtA) - i, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (m *ChainConfig) Marshal() (dAtA []byte, err error) { | func (m *ChainConfig) Marshal() (dAtA []byte, err error) { | ||||||
| 	size := m.Size() | 	size := m.Size() | ||||||
| 	dAtA = make([]byte, size) | 	dAtA = make([]byte, size) | ||||||
| @ -1555,13 +1637,8 @@ func (m *Params) Size() (n int) { | |||||||
| 	if m.EnableCall { | 	if m.EnableCall { | ||||||
| 		n += 2 | 		n += 2 | ||||||
| 	} | 	} | ||||||
| 	if len(m.ExtraEIPs) > 0 { | 	l = m.ExtraEIPs.Size() | ||||||
| 		l = 0 | 	n += 1 + l + sovEvm(uint64(l)) | ||||||
| 		for _, e := range m.ExtraEIPs { |  | ||||||
| 			l += sovEvm(uint64(e)) |  | ||||||
| 		} |  | ||||||
| 		n += 1 + sovEvm(uint64(l)) + l |  | ||||||
| 	} |  | ||||||
| 	l = m.ChainConfig.Size() | 	l = m.ChainConfig.Size() | ||||||
| 	n += 1 + l + sovEvm(uint64(l)) | 	n += 1 + l + sovEvm(uint64(l)) | ||||||
| 	if m.AllowUnprotectedTxs { | 	if m.AllowUnprotectedTxs { | ||||||
| @ -1570,6 +1647,22 @@ func (m *Params) Size() (n int) { | |||||||
| 	return n | 	return n | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (m *ExtraEIPs) Size() (n int) { | ||||||
|  | 	if m == nil { | ||||||
|  | 		return 0 | ||||||
|  | 	} | ||||||
|  | 	var l int | ||||||
|  | 	_ = l | ||||||
|  | 	if len(m.EIPs) > 0 { | ||||||
|  | 		l = 0 | ||||||
|  | 		for _, e := range m.EIPs { | ||||||
|  | 			l += sovEvm(uint64(e)) | ||||||
|  | 		} | ||||||
|  | 		n += 1 + sovEvm(uint64(l)) + l | ||||||
|  | 	} | ||||||
|  | 	return n | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (m *ChainConfig) Size() (n int) { | func (m *ChainConfig) Size() (n int) { | ||||||
| 	if m == nil { | 	if m == nil { | ||||||
| 		return 0 | 		return 0 | ||||||
| @ -1935,81 +2028,38 @@ func (m *Params) Unmarshal(dAtA []byte) error { | |||||||
| 			} | 			} | ||||||
| 			m.EnableCall = bool(v != 0) | 			m.EnableCall = bool(v != 0) | ||||||
| 		case 4: | 		case 4: | ||||||
| 			if wireType == 0 { | 			if wireType != 2 { | ||||||
| 				var v int64 |  | ||||||
| 				for shift := uint(0); ; shift += 7 { |  | ||||||
| 					if shift >= 64 { |  | ||||||
| 						return ErrIntOverflowEvm |  | ||||||
| 					} |  | ||||||
| 					if iNdEx >= l { |  | ||||||
| 						return io.ErrUnexpectedEOF |  | ||||||
| 					} |  | ||||||
| 					b := dAtA[iNdEx] |  | ||||||
| 					iNdEx++ |  | ||||||
| 					v |= int64(b&0x7F) << shift |  | ||||||
| 					if b < 0x80 { |  | ||||||
| 						break |  | ||||||
| 					} |  | ||||||
| 				} |  | ||||||
| 				m.ExtraEIPs = append(m.ExtraEIPs, v) |  | ||||||
| 			} else if wireType == 2 { |  | ||||||
| 				var packedLen int |  | ||||||
| 				for shift := uint(0); ; shift += 7 { |  | ||||||
| 					if shift >= 64 { |  | ||||||
| 						return ErrIntOverflowEvm |  | ||||||
| 					} |  | ||||||
| 					if iNdEx >= l { |  | ||||||
| 						return io.ErrUnexpectedEOF |  | ||||||
| 					} |  | ||||||
| 					b := dAtA[iNdEx] |  | ||||||
| 					iNdEx++ |  | ||||||
| 					packedLen |= int(b&0x7F) << shift |  | ||||||
| 					if b < 0x80 { |  | ||||||
| 						break |  | ||||||
| 					} |  | ||||||
| 				} |  | ||||||
| 				if packedLen < 0 { |  | ||||||
| 					return ErrInvalidLengthEvm |  | ||||||
| 				} |  | ||||||
| 				postIndex := iNdEx + packedLen |  | ||||||
| 				if postIndex < 0 { |  | ||||||
| 					return ErrInvalidLengthEvm |  | ||||||
| 				} |  | ||||||
| 				if postIndex > l { |  | ||||||
| 					return io.ErrUnexpectedEOF |  | ||||||
| 				} |  | ||||||
| 				var elementCount int |  | ||||||
| 				var count int |  | ||||||
| 				for _, integer := range dAtA[iNdEx:postIndex] { |  | ||||||
| 					if integer < 128 { |  | ||||||
| 						count++ |  | ||||||
| 					} |  | ||||||
| 				} |  | ||||||
| 				elementCount = count |  | ||||||
| 				if elementCount != 0 && len(m.ExtraEIPs) == 0 { |  | ||||||
| 					m.ExtraEIPs = make([]int64, 0, elementCount) |  | ||||||
| 				} |  | ||||||
| 				for iNdEx < postIndex { |  | ||||||
| 					var v int64 |  | ||||||
| 					for shift := uint(0); ; shift += 7 { |  | ||||||
| 						if shift >= 64 { |  | ||||||
| 							return ErrIntOverflowEvm |  | ||||||
| 						} |  | ||||||
| 						if iNdEx >= l { |  | ||||||
| 							return io.ErrUnexpectedEOF |  | ||||||
| 						} |  | ||||||
| 						b := dAtA[iNdEx] |  | ||||||
| 						iNdEx++ |  | ||||||
| 						v |= int64(b&0x7F) << shift |  | ||||||
| 						if b < 0x80 { |  | ||||||
| 							break |  | ||||||
| 						} |  | ||||||
| 					} |  | ||||||
| 					m.ExtraEIPs = append(m.ExtraEIPs, v) |  | ||||||
| 				} |  | ||||||
| 			} else { |  | ||||||
| 				return fmt.Errorf("proto: wrong wireType = %d for field ExtraEIPs", wireType) | 				return fmt.Errorf("proto: wrong wireType = %d for field ExtraEIPs", wireType) | ||||||
| 			} | 			} | ||||||
|  | 			var msglen int | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return ErrIntOverflowEvm | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := dAtA[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				msglen |= int(b&0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			if msglen < 0 { | ||||||
|  | 				return ErrInvalidLengthEvm | ||||||
|  | 			} | ||||||
|  | 			postIndex := iNdEx + msglen | ||||||
|  | 			if postIndex < 0 { | ||||||
|  | 				return ErrInvalidLengthEvm | ||||||
|  | 			} | ||||||
|  | 			if postIndex > l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			if err := m.ExtraEIPs.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { | ||||||
|  | 				return err | ||||||
|  | 			} | ||||||
|  | 			iNdEx = postIndex | ||||||
| 		case 5: | 		case 5: | ||||||
| 			if wireType != 2 { | 			if wireType != 2 { | ||||||
| 				return fmt.Errorf("proto: wrong wireType = %d for field ChainConfig", wireType) | 				return fmt.Errorf("proto: wrong wireType = %d for field ChainConfig", wireType) | ||||||
| @ -2084,6 +2134,132 @@ func (m *Params) Unmarshal(dAtA []byte) error { | |||||||
| 	} | 	} | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  | func (m *ExtraEIPs) Unmarshal(dAtA []byte) error { | ||||||
|  | 	l := len(dAtA) | ||||||
|  | 	iNdEx := 0 | ||||||
|  | 	for iNdEx < l { | ||||||
|  | 		preIndex := iNdEx | ||||||
|  | 		var wire uint64 | ||||||
|  | 		for shift := uint(0); ; shift += 7 { | ||||||
|  | 			if shift >= 64 { | ||||||
|  | 				return ErrIntOverflowEvm | ||||||
|  | 			} | ||||||
|  | 			if iNdEx >= l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			b := dAtA[iNdEx] | ||||||
|  | 			iNdEx++ | ||||||
|  | 			wire |= uint64(b&0x7F) << shift | ||||||
|  | 			if b < 0x80 { | ||||||
|  | 				break | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		fieldNum := int32(wire >> 3) | ||||||
|  | 		wireType := int(wire & 0x7) | ||||||
|  | 		if wireType == 4 { | ||||||
|  | 			return fmt.Errorf("proto: ExtraEIPs: wiretype end group for non-group") | ||||||
|  | 		} | ||||||
|  | 		if fieldNum <= 0 { | ||||||
|  | 			return fmt.Errorf("proto: ExtraEIPs: illegal tag %d (wire type %d)", fieldNum, wire) | ||||||
|  | 		} | ||||||
|  | 		switch fieldNum { | ||||||
|  | 		case 1: | ||||||
|  | 			if wireType == 0 { | ||||||
|  | 				var v int64 | ||||||
|  | 				for shift := uint(0); ; shift += 7 { | ||||||
|  | 					if shift >= 64 { | ||||||
|  | 						return ErrIntOverflowEvm | ||||||
|  | 					} | ||||||
|  | 					if iNdEx >= l { | ||||||
|  | 						return io.ErrUnexpectedEOF | ||||||
|  | 					} | ||||||
|  | 					b := dAtA[iNdEx] | ||||||
|  | 					iNdEx++ | ||||||
|  | 					v |= int64(b&0x7F) << shift | ||||||
|  | 					if b < 0x80 { | ||||||
|  | 						break | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 				m.EIPs = append(m.EIPs, v) | ||||||
|  | 			} else if wireType == 2 { | ||||||
|  | 				var packedLen int | ||||||
|  | 				for shift := uint(0); ; shift += 7 { | ||||||
|  | 					if shift >= 64 { | ||||||
|  | 						return ErrIntOverflowEvm | ||||||
|  | 					} | ||||||
|  | 					if iNdEx >= l { | ||||||
|  | 						return io.ErrUnexpectedEOF | ||||||
|  | 					} | ||||||
|  | 					b := dAtA[iNdEx] | ||||||
|  | 					iNdEx++ | ||||||
|  | 					packedLen |= int(b&0x7F) << shift | ||||||
|  | 					if b < 0x80 { | ||||||
|  | 						break | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 				if packedLen < 0 { | ||||||
|  | 					return ErrInvalidLengthEvm | ||||||
|  | 				} | ||||||
|  | 				postIndex := iNdEx + packedLen | ||||||
|  | 				if postIndex < 0 { | ||||||
|  | 					return ErrInvalidLengthEvm | ||||||
|  | 				} | ||||||
|  | 				if postIndex > l { | ||||||
|  | 					return io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				var elementCount int | ||||||
|  | 				var count int | ||||||
|  | 				for _, integer := range dAtA[iNdEx:postIndex] { | ||||||
|  | 					if integer < 128 { | ||||||
|  | 						count++ | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 				elementCount = count | ||||||
|  | 				if elementCount != 0 && len(m.EIPs) == 0 { | ||||||
|  | 					m.EIPs = make([]int64, 0, elementCount) | ||||||
|  | 				} | ||||||
|  | 				for iNdEx < postIndex { | ||||||
|  | 					var v int64 | ||||||
|  | 					for shift := uint(0); ; shift += 7 { | ||||||
|  | 						if shift >= 64 { | ||||||
|  | 							return ErrIntOverflowEvm | ||||||
|  | 						} | ||||||
|  | 						if iNdEx >= l { | ||||||
|  | 							return io.ErrUnexpectedEOF | ||||||
|  | 						} | ||||||
|  | 						b := dAtA[iNdEx] | ||||||
|  | 						iNdEx++ | ||||||
|  | 						v |= int64(b&0x7F) << shift | ||||||
|  | 						if b < 0x80 { | ||||||
|  | 							break | ||||||
|  | 						} | ||||||
|  | 					} | ||||||
|  | 					m.EIPs = append(m.EIPs, v) | ||||||
|  | 				} | ||||||
|  | 			} else { | ||||||
|  | 				return fmt.Errorf("proto: wrong wireType = %d for field EIPs", wireType) | ||||||
|  | 			} | ||||||
|  | 		default: | ||||||
|  | 			iNdEx = preIndex | ||||||
|  | 			skippy, err := skipEvm(dAtA[iNdEx:]) | ||||||
|  | 			if err != nil { | ||||||
|  | 				return err | ||||||
|  | 			} | ||||||
|  | 			if (skippy < 0) || (iNdEx+skippy) < 0 { | ||||||
|  | 				return ErrInvalidLengthEvm | ||||||
|  | 			} | ||||||
|  | 			if (iNdEx + skippy) > l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			iNdEx += skippy | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if iNdEx > l { | ||||||
|  | 		return io.ErrUnexpectedEOF | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
| func (m *ChainConfig) Unmarshal(dAtA []byte) error { | func (m *ChainConfig) Unmarshal(dAtA []byte) error { | ||||||
| 	l := len(dAtA) | 	l := len(dAtA) | ||||||
| 	iNdEx := 0 | 	iNdEx := 0 | ||||||
|  | |||||||
| @ -18,6 +18,8 @@ package types | |||||||
| import ( | import ( | ||||||
| 	"math/big" | 	"math/big" | ||||||
| 
 | 
 | ||||||
|  | 	paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" | ||||||
|  | 
 | ||||||
| 	sdk "github.com/cosmos/cosmos-sdk/types" | 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||||
| 	authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" | 	authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" | ||||||
| 	stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" | 	stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" | ||||||
| @ -70,3 +72,12 @@ type EvmHooks interface { | |||||||
| 	// Must be called after tx is processed successfully, if return an error, the whole transaction is reverted.
 | 	// Must be called after tx is processed successfully, if return an error, the whole transaction is reverted.
 | ||||||
| 	PostTxProcessing(ctx sdk.Context, msg core.Message, receipt *ethtypes.Receipt) error | 	PostTxProcessing(ctx sdk.Context, msg core.Message, receipt *ethtypes.Receipt) error | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | type ( | ||||||
|  | 	LegacyParams = paramtypes.ParamSet | ||||||
|  | 	// Subspace defines an interface that implements the legacy Cosmos SDK x/params Subspace type.
 | ||||||
|  | 	// NOTE: This is used solely for migration of the Cosmos SDK x/params managed parameters.
 | ||||||
|  | 	Subspace interface { | ||||||
|  | 		GetParamSetIfExists(ctx sdk.Context, ps LegacyParams) | ||||||
|  | 	} | ||||||
|  | ) | ||||||
|  | |||||||
| @ -43,6 +43,7 @@ var ( | |||||||
| 	_ sdk.Msg    = &MsgEthereumTx{} | 	_ sdk.Msg    = &MsgEthereumTx{} | ||||||
| 	_ sdk.Tx     = &MsgEthereumTx{} | 	_ sdk.Tx     = &MsgEthereumTx{} | ||||||
| 	_ ante.GasTx = &MsgEthereumTx{} | 	_ ante.GasTx = &MsgEthereumTx{} | ||||||
|  | 	_ sdk.Msg    = &MsgUpdateParams{} | ||||||
| 
 | 
 | ||||||
| 	_ codectypes.UnpackInterfacesMessage = MsgEthereumTx{} | 	_ codectypes.UnpackInterfacesMessage = MsgEthereumTx{} | ||||||
| ) | ) | ||||||
| @ -389,3 +390,24 @@ func (msg *MsgEthereumTx) BuildTx(b client.TxBuilder, evmDenom string) (signing. | |||||||
| 	tx := builder.GetTx() | 	tx := builder.GetTx() | ||||||
| 	return tx, nil | 	return tx, nil | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | // GetSigners returns the expected signers for a MsgUpdateParams message.
 | ||||||
|  | func (m MsgUpdateParams) GetSigners() []sdk.AccAddress { | ||||||
|  | 	//#nosec G703 -- gosec raises a warning about a non-handled error which we deliberately ignore here
 | ||||||
|  | 	addr, _ := sdk.AccAddressFromBech32(m.Authority) | ||||||
|  | 	return []sdk.AccAddress{addr} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // ValidateBasic does a sanity check of the provided data
 | ||||||
|  | func (m *MsgUpdateParams) ValidateBasic() error { | ||||||
|  | 	if _, err := sdk.AccAddressFromBech32(m.Authority); err != nil { | ||||||
|  | 		return errortypes.Wrap(err, "invalid authority address") | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return m.Params.Validate() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // GetSignBytes implements the LegacyMsg interface.
 | ||||||
|  | func (m MsgUpdateParams) GetSignBytes() []byte { | ||||||
|  | 	return sdk.MustSortJSON(AminoCdc.MustMarshalJSON(&m)) | ||||||
|  | } | ||||||
|  | |||||||
| @ -22,20 +22,21 @@ import ( | |||||||
| 	"github.com/ethereum/go-ethereum/params" | 	"github.com/ethereum/go-ethereum/params" | ||||||
| 
 | 
 | ||||||
| 	sdk "github.com/cosmos/cosmos-sdk/types" | 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||||
| 	paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" |  | ||||||
| 	"github.com/ethereum/go-ethereum/core/vm" | 	"github.com/ethereum/go-ethereum/core/vm" | ||||||
| 	"github.com/evmos/ethermint/types" | 	"github.com/evmos/ethermint/types" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| var _ paramtypes.ParamSet = &Params{} |  | ||||||
| 
 |  | ||||||
| var ( | var ( | ||||||
| 	// DefaultEVMDenom defines the default EVM denomination on Ethermint
 | 	// DefaultEVMDenom defines the default EVM denomination on Ethermint
 | ||||||
| 	DefaultEVMDenom = types.AttoPhoton | 	DefaultEVMDenom = types.AttoPhoton | ||||||
| 	// DefaultMinGasMultiplier is 0.5 or 50%
 |  | ||||||
| 	DefaultMinGasMultiplier = sdk.NewDecWithPrec(50, 2) |  | ||||||
| 	// DefaultAllowUnprotectedTxs rejects all unprotected txs (i.e false)
 | 	// DefaultAllowUnprotectedTxs rejects all unprotected txs (i.e false)
 | ||||||
| 	DefaultAllowUnprotectedTxs = false | 	DefaultAllowUnprotectedTxs = false | ||||||
|  | 	// DefaultEnableCreate enables contract creation (i.e true)
 | ||||||
|  | 	DefaultEnableCreate = true | ||||||
|  | 	// DefaultEnableCall enables contract calls (i.e true)
 | ||||||
|  | 	DefaultEnableCall = true | ||||||
|  | 	// DefaultExtraEIPs  defines the set of activateable Ethereum Improvement Proposals
 | ||||||
|  | 	DefaultExtraEIPs = ExtraEIPs{AvailableExtraEIPs} | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // Parameter keys
 | // Parameter keys
 | ||||||
| @ -55,19 +56,15 @@ var ( | |||||||
| 	AvailableExtraEIPs = []int64{1344, 1884, 2200, 2929, 3198, 3529} | 	AvailableExtraEIPs = []int64{1344, 1884, 2200, 2929, 3198, 3529} | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // ParamKeyTable returns the parameter key table.
 |  | ||||||
| func ParamKeyTable() paramtypes.KeyTable { |  | ||||||
| 	return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // NewParams creates a new Params instance
 | // NewParams creates a new Params instance
 | ||||||
| func NewParams(evmDenom string, enableCreate, enableCall bool, config ChainConfig, extraEIPs ...int64) Params { | func NewParams(evmDenom string, allowUnprotectedTxs, enableCreate, enableCall bool, config ChainConfig, extraEIPs ExtraEIPs) Params { | ||||||
| 	return Params{ | 	return Params{ | ||||||
| 		EvmDenom:     evmDenom, | 		EvmDenom:            evmDenom, | ||||||
| 		EnableCreate: enableCreate, | 		AllowUnprotectedTxs: allowUnprotectedTxs, | ||||||
| 		EnableCall:   enableCall, | 		EnableCreate:        enableCreate, | ||||||
| 		ExtraEIPs:    extraEIPs, | 		EnableCall:          enableCall, | ||||||
| 		ChainConfig:  config, | 		ExtraEIPs:           extraEIPs, | ||||||
|  | 		ChainConfig:         config, | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -76,43 +73,43 @@ func NewParams(evmDenom string, enableCreate, enableCall bool, config ChainConfi | |||||||
| func DefaultParams() Params { | func DefaultParams() Params { | ||||||
| 	return Params{ | 	return Params{ | ||||||
| 		EvmDenom:            DefaultEVMDenom, | 		EvmDenom:            DefaultEVMDenom, | ||||||
| 		EnableCreate:        true, | 		EnableCreate:        DefaultEnableCreate, | ||||||
| 		EnableCall:          true, | 		EnableCall:          DefaultEnableCall, | ||||||
| 		ChainConfig:         DefaultChainConfig(), | 		ChainConfig:         DefaultChainConfig(), | ||||||
| 		ExtraEIPs:           nil, | 		ExtraEIPs:           DefaultExtraEIPs, | ||||||
| 		AllowUnprotectedTxs: DefaultAllowUnprotectedTxs, | 		AllowUnprotectedTxs: DefaultAllowUnprotectedTxs, | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // ParamSetPairs returns the parameter set pairs.
 |  | ||||||
| func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { |  | ||||||
| 	return paramtypes.ParamSetPairs{ |  | ||||||
| 		paramtypes.NewParamSetPair(ParamStoreKeyEVMDenom, &p.EvmDenom, validateEVMDenom), |  | ||||||
| 		paramtypes.NewParamSetPair(ParamStoreKeyEnableCreate, &p.EnableCreate, validateBool), |  | ||||||
| 		paramtypes.NewParamSetPair(ParamStoreKeyEnableCall, &p.EnableCall, validateBool), |  | ||||||
| 		paramtypes.NewParamSetPair(ParamStoreKeyExtraEIPs, &p.ExtraEIPs, validateEIPs), |  | ||||||
| 		paramtypes.NewParamSetPair(ParamStoreKeyChainConfig, &p.ChainConfig, validateChainConfig), |  | ||||||
| 		paramtypes.NewParamSetPair(ParamStoreKeyAllowUnprotectedTxs, &p.AllowUnprotectedTxs, validateBool), |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Validate performs basic validation on evm parameters.
 | // Validate performs basic validation on evm parameters.
 | ||||||
| func (p Params) Validate() error { | func (p Params) Validate() error { | ||||||
| 	if err := sdk.ValidateDenom(p.EvmDenom); err != nil { | 	if err := validateEVMDenom(p.EvmDenom); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if err := validateEIPs(p.ExtraEIPs); err != nil { | 	if err := validateEIPs(p.ExtraEIPs.EIPs); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return p.ChainConfig.Validate() | 	if err := validateBool(p.EnableCall); err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if err := validateBool(p.EnableCreate); err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if err := validateBool(p.AllowUnprotectedTxs); err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return validateChainConfig(p.ChainConfig) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // EIPs returns the ExtraEips as a int slice
 | // EIPs returns the ExtraEIPS as a int slice
 | ||||||
| func (p Params) EIPs() []int { | func (p Params) EIPs() []int { | ||||||
| 	eips := make([]int, len(p.ExtraEIPs)) | 	eips := make([]int, len(p.ExtraEIPs.EIPs)) | ||||||
| 	for i, eip := range p.ExtraEIPs { | 	for i, eip := range p.ExtraEIPs.EIPs { | ||||||
| 		eips[i] = int(eip) | 		eips[i] = int(eip) | ||||||
| 	} | 	} | ||||||
| 	return eips | 	return eips | ||||||
|  | |||||||
| @ -5,15 +5,11 @@ import ( | |||||||
| 
 | 
 | ||||||
| 	"github.com/ethereum/go-ethereum/params" | 	"github.com/ethereum/go-ethereum/params" | ||||||
| 
 | 
 | ||||||
| 	paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" |  | ||||||
| 	"github.com/stretchr/testify/require" | 	"github.com/stretchr/testify/require" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func TestParamKeyTable(t *testing.T) { |  | ||||||
| 	require.IsType(t, paramtypes.KeyTable{}, ParamKeyTable()) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func TestParamsValidate(t *testing.T) { | func TestParamsValidate(t *testing.T) { | ||||||
|  | 	extraEips := ExtraEIPs{[]int64{2929, 1884, 1344}} | ||||||
| 	testCases := []struct { | 	testCases := []struct { | ||||||
| 		name     string | 		name     string | ||||||
| 		params   Params | 		params   Params | ||||||
| @ -22,7 +18,7 @@ func TestParamsValidate(t *testing.T) { | |||||||
| 		{"default", DefaultParams(), false}, | 		{"default", DefaultParams(), false}, | ||||||
| 		{ | 		{ | ||||||
| 			"valid", | 			"valid", | ||||||
| 			NewParams("ara", true, true, DefaultChainConfig(), 2929, 1884, 1344), | 			NewParams("ara", false, true, true, DefaultChainConfig(), extraEips), | ||||||
| 			false, | 			false, | ||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
| @ -41,7 +37,7 @@ func TestParamsValidate(t *testing.T) { | |||||||
| 			"invalid eip", | 			"invalid eip", | ||||||
| 			Params{ | 			Params{ | ||||||
| 				EvmDenom:  "stake", | 				EvmDenom:  "stake", | ||||||
| 				ExtraEIPs: []int64{1}, | 				ExtraEIPs: ExtraEIPs{[]int64{1}}, | ||||||
| 			}, | 			}, | ||||||
| 			true, | 			true, | ||||||
| 		}, | 		}, | ||||||
| @ -59,7 +55,8 @@ func TestParamsValidate(t *testing.T) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func TestParamsEIPs(t *testing.T) { | func TestParamsEIPs(t *testing.T) { | ||||||
| 	params := NewParams("ara", true, true, DefaultChainConfig(), 2929, 1884, 1344) | 	extraEips := ExtraEIPs{[]int64{2929, 1884, 1344}} | ||||||
|  | 	params := NewParams("ara", false, true, true, DefaultChainConfig(), extraEips) | ||||||
| 	actual := params.EIPs() | 	actual := params.EIPs() | ||||||
| 
 | 
 | ||||||
| 	require.Equal(t, []int([]int{2929, 1884, 1344}), actual) | 	require.Equal(t, []int([]int{2929, 1884, 1344}), actual) | ||||||
|  | |||||||
							
								
								
									
										507
									
								
								x/evm/types/tx.pb.go
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										507
									
								
								x/evm/types/tx.pb.go
									
									
									
										generated
									
									
									
								
							| @ -10,6 +10,7 @@ import ( | |||||||
| 	_ "github.com/cosmos/cosmos-proto" | 	_ "github.com/cosmos/cosmos-proto" | ||||||
| 	types "github.com/cosmos/cosmos-sdk/codec/types" | 	types "github.com/cosmos/cosmos-sdk/codec/types" | ||||||
| 	github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" | 	github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" | ||||||
|  | 	_ "github.com/cosmos/cosmos-sdk/types/msgservice" | ||||||
| 	_ "github.com/cosmos/gogoproto/gogoproto" | 	_ "github.com/cosmos/gogoproto/gogoproto" | ||||||
| 	grpc1 "github.com/gogo/protobuf/grpc" | 	grpc1 "github.com/gogo/protobuf/grpc" | ||||||
| 	proto "github.com/gogo/protobuf/proto" | 	proto "github.com/gogo/protobuf/proto" | ||||||
| @ -345,6 +346,100 @@ func (m *MsgEthereumTxResponse) XXX_DiscardUnknown() { | |||||||
| 
 | 
 | ||||||
| var xxx_messageInfo_MsgEthereumTxResponse proto.InternalMessageInfo | var xxx_messageInfo_MsgEthereumTxResponse proto.InternalMessageInfo | ||||||
| 
 | 
 | ||||||
|  | // MsgUpdateParams defines a Msg for updating the x/evm module parameters.
 | ||||||
|  | type MsgUpdateParams struct { | ||||||
|  | 	// authority is the address of the governance account.
 | ||||||
|  | 	Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` | ||||||
|  | 	// params defines the x/evm parameters to update.
 | ||||||
|  | 	// NOTE: All parameters must be supplied.
 | ||||||
|  | 	Params Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (m *MsgUpdateParams) Reset()         { *m = MsgUpdateParams{} } | ||||||
|  | func (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) } | ||||||
|  | func (*MsgUpdateParams) ProtoMessage()    {} | ||||||
|  | func (*MsgUpdateParams) Descriptor() ([]byte, []int) { | ||||||
|  | 	return fileDescriptor_f75ac0a12d075f21, []int{6} | ||||||
|  | } | ||||||
|  | func (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error { | ||||||
|  | 	return m.Unmarshal(b) | ||||||
|  | } | ||||||
|  | func (m *MsgUpdateParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { | ||||||
|  | 	if deterministic { | ||||||
|  | 		return xxx_messageInfo_MsgUpdateParams.Marshal(b, m, deterministic) | ||||||
|  | 	} else { | ||||||
|  | 		b = b[:cap(b)] | ||||||
|  | 		n, err := m.MarshalToSizedBuffer(b) | ||||||
|  | 		if err != nil { | ||||||
|  | 			return nil, err | ||||||
|  | 		} | ||||||
|  | 		return b[:n], nil | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | func (m *MsgUpdateParams) XXX_Merge(src proto.Message) { | ||||||
|  | 	xxx_messageInfo_MsgUpdateParams.Merge(m, src) | ||||||
|  | } | ||||||
|  | func (m *MsgUpdateParams) XXX_Size() int { | ||||||
|  | 	return m.Size() | ||||||
|  | } | ||||||
|  | func (m *MsgUpdateParams) XXX_DiscardUnknown() { | ||||||
|  | 	xxx_messageInfo_MsgUpdateParams.DiscardUnknown(m) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | var xxx_messageInfo_MsgUpdateParams proto.InternalMessageInfo | ||||||
|  | 
 | ||||||
|  | func (m *MsgUpdateParams) GetAuthority() string { | ||||||
|  | 	if m != nil { | ||||||
|  | 		return m.Authority | ||||||
|  | 	} | ||||||
|  | 	return "" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (m *MsgUpdateParams) GetParams() Params { | ||||||
|  | 	if m != nil { | ||||||
|  | 		return m.Params | ||||||
|  | 	} | ||||||
|  | 	return Params{} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // MsgUpdateParamsResponse defines the response structure for executing a
 | ||||||
|  | // MsgUpdateParams message.
 | ||||||
|  | type MsgUpdateParamsResponse struct { | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (m *MsgUpdateParamsResponse) Reset()         { *m = MsgUpdateParamsResponse{} } | ||||||
|  | func (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) } | ||||||
|  | func (*MsgUpdateParamsResponse) ProtoMessage()    {} | ||||||
|  | func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { | ||||||
|  | 	return fileDescriptor_f75ac0a12d075f21, []int{7} | ||||||
|  | } | ||||||
|  | func (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error { | ||||||
|  | 	return m.Unmarshal(b) | ||||||
|  | } | ||||||
|  | func (m *MsgUpdateParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { | ||||||
|  | 	if deterministic { | ||||||
|  | 		return xxx_messageInfo_MsgUpdateParamsResponse.Marshal(b, m, deterministic) | ||||||
|  | 	} else { | ||||||
|  | 		b = b[:cap(b)] | ||||||
|  | 		n, err := m.MarshalToSizedBuffer(b) | ||||||
|  | 		if err != nil { | ||||||
|  | 			return nil, err | ||||||
|  | 		} | ||||||
|  | 		return b[:n], nil | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | func (m *MsgUpdateParamsResponse) XXX_Merge(src proto.Message) { | ||||||
|  | 	xxx_messageInfo_MsgUpdateParamsResponse.Merge(m, src) | ||||||
|  | } | ||||||
|  | func (m *MsgUpdateParamsResponse) XXX_Size() int { | ||||||
|  | 	return m.Size() | ||||||
|  | } | ||||||
|  | func (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() { | ||||||
|  | 	xxx_messageInfo_MsgUpdateParamsResponse.DiscardUnknown(m) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | var xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo | ||||||
|  | 
 | ||||||
| func init() { | func init() { | ||||||
| 	proto.RegisterType((*MsgEthereumTx)(nil), "ethermint.evm.v1.MsgEthereumTx") | 	proto.RegisterType((*MsgEthereumTx)(nil), "ethermint.evm.v1.MsgEthereumTx") | ||||||
| 	proto.RegisterType((*LegacyTx)(nil), "ethermint.evm.v1.LegacyTx") | 	proto.RegisterType((*LegacyTx)(nil), "ethermint.evm.v1.LegacyTx") | ||||||
| @ -352,66 +447,76 @@ func init() { | |||||||
| 	proto.RegisterType((*DynamicFeeTx)(nil), "ethermint.evm.v1.DynamicFeeTx") | 	proto.RegisterType((*DynamicFeeTx)(nil), "ethermint.evm.v1.DynamicFeeTx") | ||||||
| 	proto.RegisterType((*ExtensionOptionsEthereumTx)(nil), "ethermint.evm.v1.ExtensionOptionsEthereumTx") | 	proto.RegisterType((*ExtensionOptionsEthereumTx)(nil), "ethermint.evm.v1.ExtensionOptionsEthereumTx") | ||||||
| 	proto.RegisterType((*MsgEthereumTxResponse)(nil), "ethermint.evm.v1.MsgEthereumTxResponse") | 	proto.RegisterType((*MsgEthereumTxResponse)(nil), "ethermint.evm.v1.MsgEthereumTxResponse") | ||||||
|  | 	proto.RegisterType((*MsgUpdateParams)(nil), "ethermint.evm.v1.MsgUpdateParams") | ||||||
|  | 	proto.RegisterType((*MsgUpdateParamsResponse)(nil), "ethermint.evm.v1.MsgUpdateParamsResponse") | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func init() { proto.RegisterFile("ethermint/evm/v1/tx.proto", fileDescriptor_f75ac0a12d075f21) } | func init() { proto.RegisterFile("ethermint/evm/v1/tx.proto", fileDescriptor_f75ac0a12d075f21) } | ||||||
| 
 | 
 | ||||||
| var fileDescriptor_f75ac0a12d075f21 = []byte{ | var fileDescriptor_f75ac0a12d075f21 = []byte{ | ||||||
| 	// 853 bytes of a gzipped FileDescriptorProto
 | 	// 990 bytes of a gzipped FileDescriptorProto
 | ||||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x55, 0x31, 0x8f, 0xe3, 0x44, | 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x56, 0x4f, 0x8f, 0xdb, 0x44, | ||||||
| 	0x14, 0xce, 0x24, 0x4e, 0xec, 0x4c, 0xc2, 0xe9, 0x64, 0xed, 0x49, 0x4e, 0xc4, 0xc5, 0x91, 0x25, | 	0x14, 0x5f, 0x27, 0xce, 0xbf, 0x49, 0x58, 0xaa, 0xd1, 0x56, 0x75, 0x22, 0x1a, 0xa7, 0x96, 0xa0, | ||||||
| 	0x20, 0x20, 0xc5, 0xd6, 0x2d, 0x54, 0x5b, 0xdd, 0xe6, 0x76, 0xef, 0x74, 0xa7, 0x9c, 0x40, 0x56, | 	0x69, 0xa5, 0xd8, 0xea, 0x82, 0x7a, 0xd8, 0x53, 0x37, 0xdd, 0x6d, 0xd5, 0x6a, 0x57, 0x54, 0x26, | ||||||
| 	0x68, 0xb8, 0x22, 0x9a, 0x75, 0x66, 0x1d, 0x8b, 0xd8, 0x63, 0x79, 0x26, 0x96, 0x83, 0x44, 0x83, | 	0xbd, 0xd0, 0x43, 0x34, 0xeb, 0xcc, 0x4e, 0x2c, 0x62, 0x8f, 0xe5, 0x19, 0x5b, 0x09, 0x12, 0x97, | ||||||
| 	0x28, 0xe8, 0x40, 0xe2, 0x0f, 0x50, 0x50, 0xd1, 0xc2, 0x0f, 0xa0, 0x3c, 0x51, 0x9d, 0x44, 0x83, | 	0x4a, 0x48, 0x1c, 0x90, 0x00, 0xf1, 0x05, 0x38, 0x70, 0xe2, 0x84, 0x44, 0x3f, 0x00, 0xc7, 0x8a, | ||||||
| 	0x28, 0x0c, 0xca, 0x52, 0x6d, 0x07, 0xbf, 0x00, 0xcd, 0x8c, 0xb3, 0xd9, 0x10, 0x65, 0x81, 0x65, | 	0x53, 0x05, 0x17, 0xc4, 0x21, 0xa0, 0x2c, 0x12, 0xd2, 0xde, 0xe0, 0x13, 0xa0, 0x99, 0x71, 0x36, | ||||||
| 	0xd1, 0x55, 0x99, 0xe7, 0xf7, 0xde, 0x37, 0x6f, 0xde, 0xf7, 0xe5, 0x3d, 0xd8, 0xc2, 0x6c, 0x8a, | 	0x9b, 0x86, 0x6d, 0xa1, 0x14, 0x71, 0xf2, 0xbc, 0x79, 0x6f, 0xde, 0x7b, 0xf3, 0xfb, 0xfd, 0x66, | ||||||
| 	0x93, 0x30, 0x88, 0x98, 0x83, 0xd3, 0xd0, 0x49, 0xef, 0x39, 0x2c, 0xb3, 0xe3, 0x84, 0x30, 0xa2, | 	0xc6, 0xa0, 0x8e, 0xf9, 0x10, 0xc7, 0x81, 0x1f, 0x72, 0x07, 0xa7, 0x81, 0x93, 0x5e, 0x73, 0xf8, | ||||||
| 	0xdf, 0xbe, 0x70, 0xd9, 0x38, 0x0d, 0xed, 0xf4, 0x5e, 0xbb, 0xe5, 0x11, 0x1a, 0x12, 0x3a, 0x16, | 	0xd8, 0x8e, 0x62, 0xca, 0x29, 0x3c, 0x77, 0xe2, 0xb2, 0x71, 0x1a, 0xd8, 0xe9, 0xb5, 0xc6, 0x05, | ||||||
| 	0x7e, 0x47, 0x1a, 0x32, 0xb8, 0xdd, 0xde, 0xc2, 0xe1, 0x39, 0xd2, 0xb7, 0xe7, 0x13, 0x9f, 0xc8, | 	0x8f, 0xb2, 0x80, 0x32, 0x27, 0x60, 0x44, 0x44, 0x06, 0x8c, 0xa8, 0xd0, 0x46, 0x5d, 0x39, 0xfa, | ||||||
| 	0x1c, 0x7e, 0x2a, 0xbe, 0xbe, 0xea, 0x13, 0xe2, 0xcf, 0xb0, 0x83, 0xe2, 0xc0, 0x41, 0x51, 0x44, | 	0xd2, 0x72, 0x94, 0x91, 0xb9, 0x1a, 0x2b, 0x05, 0x44, 0x32, 0xe5, 0xdb, 0x20, 0x94, 0x50, 0xb5, | ||||||
| 	0x18, 0x62, 0x01, 0x89, 0x56, 0x78, 0xad, 0xc2, 0x2b, 0xac, 0x93, 0xf9, 0xa9, 0x83, 0xa2, 0x85, | 	0x46, 0x8c, 0xb2, 0xd9, 0xd7, 0x08, 0xa5, 0x64, 0x84, 0x1d, 0x14, 0xf9, 0x0e, 0x0a, 0x43, 0xca, | ||||||
| 	0x74, 0x59, 0x9f, 0x03, 0xf8, 0xca, 0x53, 0xea, 0x1f, 0xf3, 0x0b, 0xf1, 0x3c, 0x1c, 0x65, 0x7a, | 	0x11, 0xf7, 0x69, 0x38, 0xcf, 0x57, 0xcf, 0xbc, 0xd2, 0x3a, 0x48, 0x0e, 0x1d, 0x14, 0x4e, 0x94, | ||||||
| 	0x0f, 0x2a, 0x13, 0xc4, 0x90, 0x01, 0xba, 0xa0, 0xd7, 0xd8, 0xdf, 0xb3, 0x65, 0xae, 0xbd, 0xca, | 	0xcb, 0xfa, 0x44, 0x03, 0xaf, 0xec, 0x33, 0xb2, 0x2b, 0x0a, 0xe2, 0x24, 0xe8, 0x8d, 0x61, 0x1b, | ||||||
| 	0xb5, 0x0f, 0xa3, 0x85, 0x2b, 0x22, 0xf4, 0x16, 0x54, 0x68, 0xf0, 0x11, 0x36, 0xca, 0x5d, 0xd0, | 	0xe8, 0x03, 0xc4, 0x91, 0xa1, 0xb5, 0xb4, 0x76, 0x75, 0x73, 0xc3, 0x56, 0x6b, 0xed, 0xf9, 0x5a, | ||||||
| 	0x03, 0x83, 0xea, 0x79, 0x6e, 0x82, 0xbe, 0x2b, 0x3e, 0xe9, 0x26, 0x54, 0xa6, 0x88, 0x4e, 0x8d, | 	0x7b, 0x3b, 0x9c, 0xb8, 0x32, 0x02, 0xd6, 0x81, 0xce, 0xfc, 0xf7, 0xb1, 0x91, 0x6b, 0x69, 0x6d, | ||||||
| 	0x4a, 0x17, 0xf4, 0xea, 0x83, 0xc6, 0x1f, 0xb9, 0xa9, 0x26, 0xb3, 0xf8, 0xc0, 0xea, 0x5b, 0xae, | 	0xad, 0x5b, 0x38, 0x9e, 0x9a, 0x5a, 0xc7, 0x95, 0x53, 0xd0, 0x04, 0xfa, 0x10, 0xb1, 0xa1, 0x91, | ||||||
| 	0x70, 0xe8, 0x3a, 0x54, 0x4e, 0x13, 0x12, 0x1a, 0x0a, 0x0f, 0x70, 0xc5, 0xf9, 0x40, 0xf9, 0xec, | 	0x6f, 0x69, 0xed, 0x4a, 0xb7, 0xfa, 0xc7, 0xd4, 0x2c, 0xc5, 0xa3, 0x68, 0xcb, 0xea, 0x58, 0xae, | ||||||
| 	0x2b, 0xb3, 0x64, 0x7d, 0x5b, 0x86, 0xda, 0x10, 0xfb, 0xc8, 0x5b, 0x8c, 0x32, 0x7d, 0x0f, 0x56, | 	0x74, 0x40, 0x08, 0xf4, 0xc3, 0x98, 0x06, 0x86, 0x2e, 0x02, 0x5c, 0x39, 0xde, 0xd2, 0x3f, 0xfa, | ||||||
| 	0x23, 0x12, 0x79, 0x58, 0x54, 0xa3, 0xb8, 0xd2, 0xd0, 0x1f, 0xc1, 0xba, 0x8f, 0x78, 0xe7, 0x02, | 	0xc2, 0x5c, 0xb3, 0xbe, 0xc9, 0x81, 0xf2, 0x1e, 0x26, 0xc8, 0x9b, 0xf4, 0xc6, 0x70, 0x03, 0x14, | ||||||
| 	0x4f, 0xde, 0x5e, 0x1f, 0xbc, 0xf5, 0x73, 0x6e, 0xbe, 0xee, 0x07, 0x6c, 0x3a, 0x3f, 0xb1, 0x3d, | 	0x42, 0x1a, 0x7a, 0x58, 0x76, 0xa3, 0xbb, 0xca, 0x80, 0xb7, 0x41, 0x85, 0x20, 0x81, 0x9c, 0xef, | ||||||
| 	0x12, 0x16, 0xfd, 0x2c, 0x7e, 0xfa, 0x74, 0xf2, 0xa1, 0xc3, 0x16, 0x31, 0xa6, 0xf6, 0xe3, 0x88, | 	0xa9, 0xea, 0x95, 0xee, 0xd5, 0x9f, 0xa6, 0xe6, 0x1b, 0xc4, 0xe7, 0xc3, 0xe4, 0xc0, 0xf6, 0x68, | ||||||
| 	0xb9, 0x9a, 0x8f, 0xe8, 0x7b, 0x3c, 0x57, 0xef, 0xc0, 0x8a, 0x8f, 0xa8, 0xa8, 0x52, 0x19, 0x34, | 	0x90, 0xe1, 0x99, 0x7d, 0x3a, 0x6c, 0xf0, 0x9e, 0xc3, 0x27, 0x11, 0x66, 0xf6, 0x9d, 0x90, 0xbb, | ||||||
| 	0x97, 0xb9, 0xa9, 0x3d, 0x42, 0x74, 0x18, 0x84, 0x01, 0x73, 0xb9, 0x43, 0xbf, 0x05, 0xcb, 0x8c, | 	0x65, 0x82, 0xd8, 0x3d, 0xb1, 0x16, 0x36, 0x41, 0x9e, 0x20, 0x26, 0xbb, 0xd4, 0xbb, 0xb5, 0xd9, | ||||||
| 	0x14, 0x35, 0x96, 0x19, 0xd1, 0x9f, 0xc0, 0x6a, 0x8a, 0x66, 0x73, 0x6c, 0x54, 0xc5, 0xa5, 0xef, | 	0xd4, 0x2c, 0xdf, 0x46, 0x6c, 0xcf, 0x0f, 0x7c, 0xee, 0x0a, 0x07, 0x5c, 0x07, 0x39, 0x4e, 0xb3, | ||||||
| 	0xfc, 0xf3, 0x4b, 0x97, 0xb9, 0x59, 0x3b, 0x0c, 0xc9, 0x3c, 0x62, 0xae, 0x84, 0xe0, 0x1d, 0x10, | 	0x1e, 0x73, 0x9c, 0xc2, 0xbb, 0xa0, 0x90, 0xa2, 0x51, 0x82, 0x8d, 0x82, 0x2c, 0xfa, 0xd6, 0xdf, | ||||||
| 	0x7d, 0xae, 0x75, 0x41, 0xaf, 0x59, 0x74, 0xb4, 0x09, 0x41, 0x6a, 0xa8, 0xe2, 0x03, 0x48, 0xb9, | 	0x2f, 0x3a, 0x9b, 0x9a, 0xc5, 0xed, 0x80, 0x26, 0x21, 0x77, 0x55, 0x0a, 0x81, 0x80, 0xc4, 0xb9, | ||||||
| 	0x95, 0x18, 0x9a, 0xb4, 0x12, 0x6e, 0x51, 0xa3, 0x2e, 0x2d, 0x7a, 0x70, 0x8b, 0xf7, 0xea, 0x87, | 	0xd8, 0xd2, 0xda, 0xb5, 0x0c, 0xd1, 0x1a, 0xd0, 0x52, 0xa3, 0x24, 0x27, 0xb4, 0x54, 0x58, 0xb1, | ||||||
| 	0xef, 0xfa, 0xb5, 0x51, 0x76, 0x84, 0x18, 0xb2, 0x7e, 0xaf, 0xc0, 0xe6, 0xa1, 0xe7, 0x61, 0x4a, | 	0x51, 0x56, 0x56, 0x2c, 0x2c, 0x66, 0x54, 0x94, 0xc5, 0xb6, 0xd6, 0x05, 0x56, 0xdf, 0x3d, 0xea, | ||||||
| 	0x87, 0x01, 0x65, 0xa3, 0x4c, 0x7f, 0x06, 0x35, 0x6f, 0x8a, 0x82, 0x68, 0x1c, 0x4c, 0x44, 0xf3, | 	0x14, 0x7b, 0xe3, 0x1d, 0xc4, 0x91, 0xf5, 0x7b, 0x1e, 0xd4, 0xb6, 0x3d, 0x0f, 0x33, 0xb6, 0xe7, | ||||||
| 	0xea, 0x83, 0xfb, 0xff, 0xaa, 0x5a, 0xf5, 0x01, 0xcf, 0x7e, 0x7c, 0x74, 0x9e, 0x9b, 0xaa, 0x27, | 	0x33, 0xde, 0x1b, 0xc3, 0x07, 0xa0, 0xec, 0x0d, 0x91, 0x1f, 0xf6, 0xfd, 0x81, 0x04, 0xaf, 0xd2, | ||||||
| 	0x8f, 0x6e, 0x71, 0x98, 0xac, 0x69, 0x29, 0xef, 0xa4, 0xa5, 0xf2, 0xdf, 0x69, 0x51, 0xae, 0xa6, | 	0xbd, 0xf1, 0x8f, 0xba, 0x2d, 0xdd, 0x14, 0xab, 0xef, 0xec, 0x1c, 0x4f, 0xcd, 0x92, 0xa7, 0x86, | ||||||
| 	0xa5, 0xba, 0x4d, 0x4b, 0xed, 0xe6, 0x68, 0x51, 0x2f, 0xd1, 0xf2, 0x0c, 0x6a, 0x48, 0xf4, 0x16, | 	0x6e, 0x36, 0x18, 0x2c, 0x68, 0xc9, 0x9d, 0x49, 0x4b, 0xfe, 0xdf, 0xd3, 0xa2, 0x3f, 0x9b, 0x96, | ||||||
| 	0x53, 0x43, 0xeb, 0x56, 0x7a, 0x8d, 0xfd, 0xbb, 0xf6, 0x5f, 0xff, 0xcf, 0xb6, 0xec, 0xfe, 0x68, | 	0xc2, 0x2a, 0x2d, 0xc5, 0x97, 0x47, 0x4b, 0xe9, 0x14, 0x2d, 0x0f, 0x40, 0x19, 0x49, 0x6c, 0x31, | ||||||
| 	0x1e, 0xcf, 0xf0, 0xa0, 0xfb, 0x3c, 0x37, 0x4b, 0xe7, 0xb9, 0x09, 0xd1, 0x05, 0x25, 0xdf, 0xfc, | 	0x33, 0xca, 0xad, 0x7c, 0xbb, 0xba, 0x79, 0xd1, 0x7e, 0xfa, 0xa0, 0xdb, 0x0a, 0xfd, 0x5e, 0x12, | ||||||
| 	0x62, 0xc2, 0x35, 0x41, 0xee, 0x05, 0xa0, 0xe4, 0xbc, 0xbe, 0xc1, 0x39, 0xdc, 0xe0, 0xbc, 0xb1, | 	0x8d, 0x70, 0xb7, 0xf5, 0x78, 0x6a, 0xae, 0x1d, 0x4f, 0x4d, 0x80, 0x4e, 0x28, 0xf9, 0xea, 0x67, | ||||||
| 	0x8b, 0xf3, 0xef, 0x15, 0xd8, 0x3c, 0x5a, 0x44, 0x28, 0x0c, 0xbc, 0x87, 0x18, 0xbf, 0x1c, 0xce, | 	0x13, 0x2c, 0x08, 0x72, 0x4f, 0x12, 0x2a, 0xce, 0x2b, 0x4b, 0x9c, 0x83, 0x25, 0xce, 0xab, 0x67, | ||||||
| 	0x9f, 0xc0, 0x06, 0xe7, 0x9c, 0x05, 0xf1, 0xd8, 0x43, 0xf1, 0x35, 0x58, 0xe7, 0x92, 0x19, 0x05, | 	0x71, 0xfe, 0xad, 0x0e, 0x6a, 0x3b, 0x93, 0x10, 0x05, 0xbe, 0x77, 0x0b, 0xe3, 0xff, 0x87, 0xf3, | ||||||
| 	0xf1, 0x03, 0x14, 0xaf, 0xb0, 0x4e, 0x31, 0x16, 0x58, 0xca, 0xb5, 0xb0, 0x1e, 0x62, 0xcc, 0xb1, | 	0xbb, 0xa0, 0x2a, 0x38, 0xe7, 0x7e, 0xd4, 0xf7, 0x50, 0xf4, 0x02, 0xac, 0x0b, 0xc9, 0xf4, 0xfc, | ||||||
| 	0x0a, 0x09, 0x55, 0xaf, 0x96, 0x50, 0x6d, 0x5b, 0x42, 0xea, 0xcd, 0x49, 0x48, 0xdb, 0x21, 0xa1, | 	0xe8, 0x26, 0x8a, 0xe6, 0xb9, 0x0e, 0x31, 0x96, 0xb9, 0xf4, 0x17, 0xca, 0x75, 0x0b, 0x63, 0x91, | ||||||
| 	0xfa, 0xff, 0x22, 0x21, 0xb8, 0x21, 0xa1, 0xc6, 0x86, 0x84, 0x9a, 0xbb, 0x24, 0x64, 0xc1, 0xf6, | 	0x2b, 0x93, 0x50, 0xe1, 0xd9, 0x12, 0x2a, 0xae, 0x4a, 0xa8, 0xf4, 0xf2, 0x24, 0x54, 0x3e, 0x43, | ||||||
| 	0x71, 0xc6, 0x70, 0x44, 0x03, 0x12, 0xbd, 0x1b, 0x8b, 0x9d, 0xb1, 0x5e, 0x05, 0xc5, 0x40, 0xfe, | 	0x42, 0x95, 0xff, 0x44, 0x42, 0x60, 0x49, 0x42, 0xd5, 0x25, 0x09, 0xd5, 0xce, 0x92, 0x90, 0x05, | ||||||
| 	0x1a, 0xc0, 0x3b, 0x1b, 0x2b, 0xc2, 0xc5, 0x34, 0x26, 0x11, 0x15, 0x0f, 0x15, 0x53, 0x1e, 0xc8, | 	0x1a, 0xbb, 0x63, 0x8e, 0x43, 0xe6, 0xd3, 0xf0, 0xed, 0x48, 0xbe, 0x19, 0x8b, 0xa7, 0x20, 0xbb, | ||||||
| 	0x21, 0x2e, 0x06, 0xfb, 0x9b, 0x50, 0x99, 0x11, 0x9f, 0x1a, 0x65, 0xf1, 0xc8, 0x3b, 0xdb, 0x8f, | 	0x90, 0xbf, 0xd4, 0xc0, 0xf9, 0xa5, 0x27, 0xc2, 0xc5, 0x2c, 0xa2, 0x21, 0x93, 0x1b, 0x95, 0xb7, | ||||||
| 	0x1c, 0x12, 0xdf, 0x15, 0x21, 0xfa, 0x6d, 0x58, 0x49, 0x30, 0x13, 0x9a, 0x69, 0xba, 0xfc, 0xa8, | 	0xbc, 0xa6, 0x2e, 0x71, 0x79, 0xb1, 0x5f, 0x01, 0xfa, 0x88, 0x12, 0x66, 0xe4, 0xe4, 0x26, 0xcf, | ||||||
| 	0xb7, 0xa0, 0x96, 0x86, 0x63, 0x9c, 0x24, 0x24, 0x29, 0xa6, 0xae, 0x9a, 0x86, 0xc7, 0xdc, 0xe4, | 	0xaf, 0x6e, 0x72, 0x8f, 0x12, 0x57, 0x86, 0xc0, 0x73, 0x20, 0x1f, 0x63, 0x2e, 0x35, 0x53, 0x73, | ||||||
| 	0x2e, 0x2e, 0x8e, 0x39, 0xc5, 0x13, 0xc9, 0xaa, 0xab, 0xfa, 0x88, 0xbe, 0x4f, 0xf1, 0x44, 0x96, | 	0xc5, 0x10, 0xd6, 0x41, 0x39, 0x0d, 0xfa, 0x38, 0x8e, 0x69, 0x9c, 0xdd, 0xba, 0xa5, 0x34, 0xd8, | ||||||
| 	0xb9, 0xff, 0x29, 0x80, 0x95, 0xa7, 0xd4, 0xd7, 0x3f, 0x86, 0xf0, 0xd2, 0x36, 0x33, 0xb7, 0x0b, | 	0x15, 0xa6, 0x70, 0x09, 0x71, 0x24, 0x0c, 0x0f, 0x14, 0xab, 0x6e, 0x89, 0x20, 0x76, 0x9f, 0xe1, | ||||||
| 	0xd8, 0x78, 0x4b, 0xfb, 0x8d, 0xbf, 0x09, 0x58, 0x3d, 0xd6, 0x7a, 0xed, 0x93, 0x1f, 0x7f, 0xfb, | 	0x41, 0xd6, 0xe6, 0x67, 0x1a, 0x78, 0x75, 0x9f, 0x91, 0xfb, 0xd1, 0x00, 0x71, 0x7c, 0x0f, 0xc5, | ||||||
| 	0xb2, 0x6c, 0x5a, 0x77, 0x9d, 0xed, 0xed, 0x5c, 0x44, 0x8f, 0x59, 0x36, 0xb8, 0xff, 0x7c, 0xd9, | 	0x28, 0x60, 0xf0, 0x3a, 0xa8, 0xa0, 0x84, 0x0f, 0x69, 0xec, 0xf3, 0x49, 0x76, 0x22, 0x8c, 0xef, | ||||||
| 	0x01, 0x2f, 0x96, 0x1d, 0xf0, 0xeb, 0xb2, 0x03, 0xbe, 0x38, 0xeb, 0x94, 0x5e, 0x9c, 0x75, 0x4a, | 	0x1f, 0x75, 0x36, 0xb2, 0xd7, 0x76, 0x7b, 0x30, 0x88, 0x31, 0x63, 0xef, 0xf0, 0xd8, 0x0f, 0x89, | ||||||
| 	0x3f, 0x9d, 0x75, 0x4a, 0x1f, 0x5c, 0xd6, 0x13, 0x4e, 0xb9, 0x9c, 0xd6, 0x40, 0x99, 0x80, 0x12, | 	0xbb, 0x08, 0x85, 0xd7, 0x41, 0x31, 0x92, 0x19, 0xa4, 0xd8, 0xab, 0x9b, 0xc6, 0xea, 0x36, 0x54, | ||||||
| 	0x9a, 0x3a, 0xa9, 0x89, 0x55, 0xfb, 0xf6, 0x9f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xdd, 0xce, 0x14, | 	0x85, 0xae, 0x2e, 0x68, 0x72, 0xb3, 0xe8, 0xad, 0xf5, 0x87, 0xbf, 0x7d, 0x7d, 0x75, 0x91, 0xc7, | ||||||
| 	0xcb, 0x4e, 0x08, 0x00, 0x00, | 	0xaa, 0x83, 0x0b, 0x4f, 0xb5, 0x34, 0xc7, 0x6e, 0xf3, 0xe3, 0x1c, 0xc8, 0xef, 0x33, 0x02, 0x3f, | ||||||
|  | 	0x00, 0xe0, 0xd4, 0xe3, 0x6b, 0xae, 0x16, 0x5a, 0x82, 0xbe, 0x71, 0xf9, 0x39, 0x01, 0xf3, 0xfc, | ||||||
|  | 	0xd6, 0xeb, 0x0f, 0x7f, 0xf8, 0xf5, 0xf3, 0x9c, 0x69, 0x5d, 0x74, 0x56, 0x7f, 0x26, 0xb2, 0xe8, | ||||||
|  | 	0x3e, 0x1f, 0xc3, 0x0f, 0x35, 0x50, 0x5b, 0x82, 0xec, 0xd2, 0x5f, 0x16, 0x38, 0x1d, 0xd2, 0xb8, | ||||||
|  | 	0xf2, 0xdc, 0x90, 0x93, 0x2e, 0x2e, 0xcb, 0x2e, 0x2e, 0x59, 0xe6, 0x6a, 0x17, 0x89, 0x8c, 0xef, | ||||||
|  | 	0x2b, 0xe4, 0xba, 0x37, 0x1e, 0xcf, 0x9a, 0xda, 0x93, 0x59, 0x53, 0xfb, 0x65, 0xd6, 0xd4, 0x3e, | ||||||
|  | 	0x3d, 0x6a, 0xae, 0x3d, 0x39, 0x6a, 0xae, 0xfd, 0x78, 0xd4, 0x5c, 0x7b, 0xf7, 0xf4, 0x31, 0xc4, | ||||||
|  | 	0xa9, 0x38, 0x85, 0x8b, 0x54, 0x63, 0x99, 0x4c, 0x1e, 0xc5, 0x83, 0xa2, 0xfc, 0x43, 0x79, 0xf3, | ||||||
|  | 	0xcf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3c, 0x20, 0xbe, 0xf3, 0x9e, 0x09, 0x00, 0x00, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Reference imports to suppress errors if they are not otherwise used.
 | // Reference imports to suppress errors if they are not otherwise used.
 | ||||||
| @ -428,6 +533,9 @@ const _ = grpc.SupportPackageIsVersion4 | |||||||
| type MsgClient interface { | type MsgClient interface { | ||||||
| 	// EthereumTx defines a method submitting Ethereum transactions.
 | 	// EthereumTx defines a method submitting Ethereum transactions.
 | ||||||
| 	EthereumTx(ctx context.Context, in *MsgEthereumTx, opts ...grpc.CallOption) (*MsgEthereumTxResponse, error) | 	EthereumTx(ctx context.Context, in *MsgEthereumTx, opts ...grpc.CallOption) (*MsgEthereumTxResponse, error) | ||||||
|  | 	// UpdateParams defined a governance operation for updating the x/evm module parameters.
 | ||||||
|  | 	// The authority is hard-coded to the Cosmos SDK x/gov module account
 | ||||||
|  | 	UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| type msgClient struct { | type msgClient struct { | ||||||
| @ -447,10 +555,22 @@ func (c *msgClient) EthereumTx(ctx context.Context, in *MsgEthereumTx, opts ...g | |||||||
| 	return out, nil | 	return out, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { | ||||||
|  | 	out := new(MsgUpdateParamsResponse) | ||||||
|  | 	err := c.cc.Invoke(ctx, "/ethermint.evm.v1.Msg/UpdateParams", in, out, opts...) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	return out, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // MsgServer is the server API for Msg service.
 | // MsgServer is the server API for Msg service.
 | ||||||
| type MsgServer interface { | type MsgServer interface { | ||||||
| 	// EthereumTx defines a method submitting Ethereum transactions.
 | 	// EthereumTx defines a method submitting Ethereum transactions.
 | ||||||
| 	EthereumTx(context.Context, *MsgEthereumTx) (*MsgEthereumTxResponse, error) | 	EthereumTx(context.Context, *MsgEthereumTx) (*MsgEthereumTxResponse, error) | ||||||
|  | 	// UpdateParams defined a governance operation for updating the x/evm module parameters.
 | ||||||
|  | 	// The authority is hard-coded to the Cosmos SDK x/gov module account
 | ||||||
|  | 	UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // UnimplementedMsgServer can be embedded to have forward compatible implementations.
 | // UnimplementedMsgServer can be embedded to have forward compatible implementations.
 | ||||||
| @ -460,6 +580,9 @@ type UnimplementedMsgServer struct { | |||||||
| func (*UnimplementedMsgServer) EthereumTx(ctx context.Context, req *MsgEthereumTx) (*MsgEthereumTxResponse, error) { | func (*UnimplementedMsgServer) EthereumTx(ctx context.Context, req *MsgEthereumTx) (*MsgEthereumTxResponse, error) { | ||||||
| 	return nil, status.Errorf(codes.Unimplemented, "method EthereumTx not implemented") | 	return nil, status.Errorf(codes.Unimplemented, "method EthereumTx not implemented") | ||||||
| } | } | ||||||
|  | func (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateParams) (*MsgUpdateParamsResponse, error) { | ||||||
|  | 	return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented") | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| func RegisterMsgServer(s grpc1.Server, srv MsgServer) { | func RegisterMsgServer(s grpc1.Server, srv MsgServer) { | ||||||
| 	s.RegisterService(&_Msg_serviceDesc, srv) | 	s.RegisterService(&_Msg_serviceDesc, srv) | ||||||
| @ -483,6 +606,24 @@ func _Msg_EthereumTx_Handler(srv interface{}, ctx context.Context, dec func(inte | |||||||
| 	return interceptor(ctx, in, info, handler) | 	return interceptor(ctx, in, info, handler) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { | ||||||
|  | 	in := new(MsgUpdateParams) | ||||||
|  | 	if err := dec(in); err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	if interceptor == nil { | ||||||
|  | 		return srv.(MsgServer).UpdateParams(ctx, in) | ||||||
|  | 	} | ||||||
|  | 	info := &grpc.UnaryServerInfo{ | ||||||
|  | 		Server:     srv, | ||||||
|  | 		FullMethod: "/ethermint.evm.v1.Msg/UpdateParams", | ||||||
|  | 	} | ||||||
|  | 	handler := func(ctx context.Context, req interface{}) (interface{}, error) { | ||||||
|  | 		return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams)) | ||||||
|  | 	} | ||||||
|  | 	return interceptor(ctx, in, info, handler) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| var _Msg_serviceDesc = grpc.ServiceDesc{ | var _Msg_serviceDesc = grpc.ServiceDesc{ | ||||||
| 	ServiceName: "ethermint.evm.v1.Msg", | 	ServiceName: "ethermint.evm.v1.Msg", | ||||||
| 	HandlerType: (*MsgServer)(nil), | 	HandlerType: (*MsgServer)(nil), | ||||||
| @ -491,6 +632,10 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ | |||||||
| 			MethodName: "EthereumTx", | 			MethodName: "EthereumTx", | ||||||
| 			Handler:    _Msg_EthereumTx_Handler, | 			Handler:    _Msg_EthereumTx_Handler, | ||||||
| 		}, | 		}, | ||||||
|  | 		{ | ||||||
|  | 			MethodName: "UpdateParams", | ||||||
|  | 			Handler:    _Msg_UpdateParams_Handler, | ||||||
|  | 		}, | ||||||
| 	}, | 	}, | ||||||
| 	Streams:  []grpc.StreamDesc{}, | 	Streams:  []grpc.StreamDesc{}, | ||||||
| 	Metadata: "ethermint/evm/v1/tx.proto", | 	Metadata: "ethermint/evm/v1/tx.proto", | ||||||
| @ -977,6 +1122,69 @@ func (m *MsgEthereumTxResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { | |||||||
| 	return len(dAtA) - i, nil | 	return len(dAtA) - i, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (m *MsgUpdateParams) Marshal() (dAtA []byte, err error) { | ||||||
|  | 	size := m.Size() | ||||||
|  | 	dAtA = make([]byte, size) | ||||||
|  | 	n, err := m.MarshalToSizedBuffer(dAtA[:size]) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	return dAtA[:n], nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (m *MsgUpdateParams) MarshalTo(dAtA []byte) (int, error) { | ||||||
|  | 	size := m.Size() | ||||||
|  | 	return m.MarshalToSizedBuffer(dAtA[:size]) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { | ||||||
|  | 	i := len(dAtA) | ||||||
|  | 	_ = i | ||||||
|  | 	var l int | ||||||
|  | 	_ = l | ||||||
|  | 	{ | ||||||
|  | 		size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) | ||||||
|  | 		if err != nil { | ||||||
|  | 			return 0, err | ||||||
|  | 		} | ||||||
|  | 		i -= size | ||||||
|  | 		i = encodeVarintTx(dAtA, i, uint64(size)) | ||||||
|  | 	} | ||||||
|  | 	i-- | ||||||
|  | 	dAtA[i] = 0x12 | ||||||
|  | 	if len(m.Authority) > 0 { | ||||||
|  | 		i -= len(m.Authority) | ||||||
|  | 		copy(dAtA[i:], m.Authority) | ||||||
|  | 		i = encodeVarintTx(dAtA, i, uint64(len(m.Authority))) | ||||||
|  | 		i-- | ||||||
|  | 		dAtA[i] = 0xa | ||||||
|  | 	} | ||||||
|  | 	return len(dAtA) - i, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (m *MsgUpdateParamsResponse) Marshal() (dAtA []byte, err error) { | ||||||
|  | 	size := m.Size() | ||||||
|  | 	dAtA = make([]byte, size) | ||||||
|  | 	n, err := m.MarshalToSizedBuffer(dAtA[:size]) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	return dAtA[:n], nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (m *MsgUpdateParamsResponse) MarshalTo(dAtA []byte) (int, error) { | ||||||
|  | 	size := m.Size() | ||||||
|  | 	return m.MarshalToSizedBuffer(dAtA[:size]) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (m *MsgUpdateParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { | ||||||
|  | 	i := len(dAtA) | ||||||
|  | 	_ = i | ||||||
|  | 	var l int | ||||||
|  | 	_ = l | ||||||
|  | 	return len(dAtA) - i, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func encodeVarintTx(dAtA []byte, offset int, v uint64) int { | func encodeVarintTx(dAtA []byte, offset int, v uint64) int { | ||||||
| 	offset -= sovTx(v) | 	offset -= sovTx(v) | ||||||
| 	base := offset | 	base := offset | ||||||
| @ -1204,6 +1412,30 @@ func (m *MsgEthereumTxResponse) Size() (n int) { | |||||||
| 	return n | 	return n | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (m *MsgUpdateParams) Size() (n int) { | ||||||
|  | 	if m == nil { | ||||||
|  | 		return 0 | ||||||
|  | 	} | ||||||
|  | 	var l int | ||||||
|  | 	_ = l | ||||||
|  | 	l = len(m.Authority) | ||||||
|  | 	if l > 0 { | ||||||
|  | 		n += 1 + l + sovTx(uint64(l)) | ||||||
|  | 	} | ||||||
|  | 	l = m.Params.Size() | ||||||
|  | 	n += 1 + l + sovTx(uint64(l)) | ||||||
|  | 	return n | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (m *MsgUpdateParamsResponse) Size() (n int) { | ||||||
|  | 	if m == nil { | ||||||
|  | 		return 0 | ||||||
|  | 	} | ||||||
|  | 	var l int | ||||||
|  | 	_ = l | ||||||
|  | 	return n | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func sovTx(x uint64) (n int) { | func sovTx(x uint64) (n int) { | ||||||
| 	return (math_bits.Len64(x|1) + 6) / 7 | 	return (math_bits.Len64(x|1) + 6) / 7 | ||||||
| } | } | ||||||
| @ -2782,6 +3014,171 @@ func (m *MsgEthereumTxResponse) Unmarshal(dAtA []byte) error { | |||||||
| 	} | 	} | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  | func (m *MsgUpdateParams) Unmarshal(dAtA []byte) error { | ||||||
|  | 	l := len(dAtA) | ||||||
|  | 	iNdEx := 0 | ||||||
|  | 	for iNdEx < l { | ||||||
|  | 		preIndex := iNdEx | ||||||
|  | 		var wire uint64 | ||||||
|  | 		for shift := uint(0); ; shift += 7 { | ||||||
|  | 			if shift >= 64 { | ||||||
|  | 				return ErrIntOverflowTx | ||||||
|  | 			} | ||||||
|  | 			if iNdEx >= l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			b := dAtA[iNdEx] | ||||||
|  | 			iNdEx++ | ||||||
|  | 			wire |= uint64(b&0x7F) << shift | ||||||
|  | 			if b < 0x80 { | ||||||
|  | 				break | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		fieldNum := int32(wire >> 3) | ||||||
|  | 		wireType := int(wire & 0x7) | ||||||
|  | 		if wireType == 4 { | ||||||
|  | 			return fmt.Errorf("proto: MsgUpdateParams: wiretype end group for non-group") | ||||||
|  | 		} | ||||||
|  | 		if fieldNum <= 0 { | ||||||
|  | 			return fmt.Errorf("proto: MsgUpdateParams: illegal tag %d (wire type %d)", fieldNum, wire) | ||||||
|  | 		} | ||||||
|  | 		switch fieldNum { | ||||||
|  | 		case 1: | ||||||
|  | 			if wireType != 2 { | ||||||
|  | 				return fmt.Errorf("proto: wrong wireType = %d for field Authority", 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.Authority = string(dAtA[iNdEx:postIndex]) | ||||||
|  | 			iNdEx = postIndex | ||||||
|  | 		case 2: | ||||||
|  | 			if wireType != 2 { | ||||||
|  | 				return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) | ||||||
|  | 			} | ||||||
|  | 			var msglen int | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return ErrIntOverflowTx | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := dAtA[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				msglen |= int(b&0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			if msglen < 0 { | ||||||
|  | 				return ErrInvalidLengthTx | ||||||
|  | 			} | ||||||
|  | 			postIndex := iNdEx + msglen | ||||||
|  | 			if postIndex < 0 { | ||||||
|  | 				return ErrInvalidLengthTx | ||||||
|  | 			} | ||||||
|  | 			if postIndex > l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { | ||||||
|  | 				return err | ||||||
|  | 			} | ||||||
|  | 			iNdEx = postIndex | ||||||
|  | 		default: | ||||||
|  | 			iNdEx = preIndex | ||||||
|  | 			skippy, err := skipTx(dAtA[iNdEx:]) | ||||||
|  | 			if err != nil { | ||||||
|  | 				return err | ||||||
|  | 			} | ||||||
|  | 			if (skippy < 0) || (iNdEx+skippy) < 0 { | ||||||
|  | 				return ErrInvalidLengthTx | ||||||
|  | 			} | ||||||
|  | 			if (iNdEx + skippy) > l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			iNdEx += skippy | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if iNdEx > l { | ||||||
|  | 		return io.ErrUnexpectedEOF | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | func (m *MsgUpdateParamsResponse) Unmarshal(dAtA []byte) error { | ||||||
|  | 	l := len(dAtA) | ||||||
|  | 	iNdEx := 0 | ||||||
|  | 	for iNdEx < l { | ||||||
|  | 		preIndex := iNdEx | ||||||
|  | 		var wire uint64 | ||||||
|  | 		for shift := uint(0); ; shift += 7 { | ||||||
|  | 			if shift >= 64 { | ||||||
|  | 				return ErrIntOverflowTx | ||||||
|  | 			} | ||||||
|  | 			if iNdEx >= l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			b := dAtA[iNdEx] | ||||||
|  | 			iNdEx++ | ||||||
|  | 			wire |= uint64(b&0x7F) << shift | ||||||
|  | 			if b < 0x80 { | ||||||
|  | 				break | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		fieldNum := int32(wire >> 3) | ||||||
|  | 		wireType := int(wire & 0x7) | ||||||
|  | 		if wireType == 4 { | ||||||
|  | 			return fmt.Errorf("proto: MsgUpdateParamsResponse: wiretype end group for non-group") | ||||||
|  | 		} | ||||||
|  | 		if fieldNum <= 0 { | ||||||
|  | 			return fmt.Errorf("proto: MsgUpdateParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) | ||||||
|  | 		} | ||||||
|  | 		switch fieldNum { | ||||||
|  | 		default: | ||||||
|  | 			iNdEx = preIndex | ||||||
|  | 			skippy, err := skipTx(dAtA[iNdEx:]) | ||||||
|  | 			if err != nil { | ||||||
|  | 				return err | ||||||
|  | 			} | ||||||
|  | 			if (skippy < 0) || (iNdEx+skippy) < 0 { | ||||||
|  | 				return ErrInvalidLengthTx | ||||||
|  | 			} | ||||||
|  | 			if (iNdEx + skippy) > l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			iNdEx += skippy | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if iNdEx > l { | ||||||
|  | 		return io.ErrUnexpectedEOF | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
| func skipTx(dAtA []byte) (n int, err error) { | func skipTx(dAtA []byte) (n int, err error) { | ||||||
| 	l := len(dAtA) | 	l := len(dAtA) | ||||||
| 	iNdEx := 0 | 	iNdEx := 0 | ||||||
|  | |||||||
							
								
								
									
										83
									
								
								x/evm/types/tx.pb.gw.go
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										83
									
								
								x/evm/types/tx.pb.gw.go
									
									
									
										generated
									
									
									
								
							| @ -69,6 +69,42 @@ func local_request_Msg_EthereumTx_0(ctx context.Context, marshaler runtime.Marsh | |||||||
| 
 | 
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | var ( | ||||||
|  | 	filter_Msg_UpdateParams_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func request_Msg_UpdateParams_0(ctx context.Context, marshaler runtime.Marshaler, client MsgClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | ||||||
|  | 	var protoReq MsgUpdateParams | ||||||
|  | 	var metadata runtime.ServerMetadata | ||||||
|  | 
 | ||||||
|  | 	if err := req.ParseForm(); err != nil { | ||||||
|  | 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | ||||||
|  | 	} | ||||||
|  | 	if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Msg_UpdateParams_0); err != nil { | ||||||
|  | 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	msg, err := client.UpdateParams(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) | ||||||
|  | 	return msg, metadata, err | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func local_request_Msg_UpdateParams_0(ctx context.Context, marshaler runtime.Marshaler, server MsgServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | ||||||
|  | 	var protoReq MsgUpdateParams | ||||||
|  | 	var metadata runtime.ServerMetadata | ||||||
|  | 
 | ||||||
|  | 	if err := req.ParseForm(); err != nil { | ||||||
|  | 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | ||||||
|  | 	} | ||||||
|  | 	if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Msg_UpdateParams_0); err != nil { | ||||||
|  | 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	msg, err := server.UpdateParams(ctx, &protoReq) | ||||||
|  | 	return msg, metadata, err | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // RegisterMsgHandlerServer registers the http handlers for service Msg to "mux".
 | // RegisterMsgHandlerServer registers the http handlers for service Msg to "mux".
 | ||||||
| // UnaryRPC     :call MsgServer directly.
 | // UnaryRPC     :call MsgServer directly.
 | ||||||
| // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
 | // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
 | ||||||
| @ -98,6 +134,29 @@ func RegisterMsgHandlerServer(ctx context.Context, mux *runtime.ServeMux, server | |||||||
| 
 | 
 | ||||||
| 	}) | 	}) | ||||||
| 
 | 
 | ||||||
|  | 	mux.Handle("POST", pattern_Msg_UpdateParams_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { | ||||||
|  | 		ctx, cancel := context.WithCancel(req.Context()) | ||||||
|  | 		defer cancel() | ||||||
|  | 		var stream runtime.ServerTransportStream | ||||||
|  | 		ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) | ||||||
|  | 		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) | ||||||
|  | 		rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) | ||||||
|  | 		if err != nil { | ||||||
|  | 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 		resp, md, err := local_request_Msg_UpdateParams_0(rctx, inboundMarshaler, server, req, pathParams) | ||||||
|  | 		md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) | ||||||
|  | 		ctx = runtime.NewServerMetadataContext(ctx, md) | ||||||
|  | 		if err != nil { | ||||||
|  | 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		forward_Msg_UpdateParams_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | ||||||
|  | 
 | ||||||
|  | 	}) | ||||||
|  | 
 | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -159,13 +218,37 @@ func RegisterMsgHandlerClient(ctx context.Context, mux *runtime.ServeMux, client | |||||||
| 
 | 
 | ||||||
| 	}) | 	}) | ||||||
| 
 | 
 | ||||||
|  | 	mux.Handle("POST", pattern_Msg_UpdateParams_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { | ||||||
|  | 		ctx, cancel := context.WithCancel(req.Context()) | ||||||
|  | 		defer cancel() | ||||||
|  | 		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) | ||||||
|  | 		rctx, err := runtime.AnnotateContext(ctx, mux, req) | ||||||
|  | 		if err != nil { | ||||||
|  | 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 		resp, md, err := request_Msg_UpdateParams_0(rctx, inboundMarshaler, client, req, pathParams) | ||||||
|  | 		ctx = runtime.NewServerMetadataContext(ctx, md) | ||||||
|  | 		if err != nil { | ||||||
|  | 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		forward_Msg_UpdateParams_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | ||||||
|  | 
 | ||||||
|  | 	}) | ||||||
|  | 
 | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| var ( | var ( | ||||||
| 	pattern_Msg_EthereumTx_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"ethermint", "evm", "v1", "ethereum_tx"}, "", runtime.AssumeColonVerbOpt(false))) | 	pattern_Msg_EthereumTx_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"ethermint", "evm", "v1", "ethereum_tx"}, "", runtime.AssumeColonVerbOpt(false))) | ||||||
|  | 
 | ||||||
|  | 	pattern_Msg_UpdateParams_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"ethermint", "evm", "v1", "update_params"}, "", runtime.AssumeColonVerbOpt(false))) | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| var ( | var ( | ||||||
| 	forward_Msg_EthereumTx_0 = runtime.ForwardResponseMessage | 	forward_Msg_EthereumTx_0 = runtime.ForwardResponseMessage | ||||||
|  | 
 | ||||||
|  | 	forward_Msg_UpdateParams_0 = runtime.ForwardResponseMessage | ||||||
| ) | ) | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user