feat: fee market module (#491)

* feat: fee market module

* update proto

* queriers: CLI + gRPC

* gov params

* genesis

* enable height

* fixes

* fix app
This commit is contained in:
Federico Kunze Küllmer 2021-08-26 06:08:11 -04:00 committed by GitHub
parent 4b11ac66c4
commit f469db94ef
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
34 changed files with 3544 additions and 647 deletions

View File

@ -102,6 +102,9 @@ import (
evmrest "github.com/tharsis/ethermint/x/evm/client/rest"
evmkeeper "github.com/tharsis/ethermint/x/evm/keeper"
evmtypes "github.com/tharsis/ethermint/x/evm/types"
"github.com/tharsis/ethermint/x/feemarket"
feemarketkeeper "github.com/tharsis/ethermint/x/feemarket/keeper"
feemarkettypes "github.com/tharsis/ethermint/x/feemarket/types"
)
func init() {
@ -148,7 +151,9 @@ var (
evidence.AppModuleBasic{},
transfer.AppModuleBasic{},
vesting.AppModuleBasic{},
// Ethermint modules
evm.AppModuleBasic{},
feemarket.AppModuleBasic{},
)
// module account permissions
@ -214,7 +219,8 @@ type EthermintApp struct {
ScopedTransferKeeper capabilitykeeper.ScopedKeeper
// Ethermint keepers
EvmKeeper *evmkeeper.Keeper
EvmKeeper *evmkeeper.Keeper
FeeMarketKeeper feemarketkeeper.Keeper
// the module manager
mm *module.Manager
@ -266,7 +272,7 @@ func NewEthermintApp(
// ibc keys
ibchost.StoreKey, ibctransfertypes.StoreKey,
// ethermint keys
evmtypes.StoreKey,
evmtypes.StoreKey, feemarkettypes.StoreKey,
)
// Add the EVM transient store key
@ -343,6 +349,10 @@ func NewEthermintApp(
tracer, bApp.Trace(), // debug EVM based on Baseapp options
)
app.FeeMarketKeeper = feemarketkeeper.NewKeeper(
appCodec, keys[feemarkettypes.StoreKey], app.GetSubspace(feemarkettypes.ModuleName),
)
// Create IBC Keeper
app.IBCKeeper = ibckeeper.NewKeeper(
appCodec, keys[ibchost.StoreKey], app.GetSubspace(ibchost.ModuleName), app.StakingKeeper, app.UpgradeKeeper, scopedIBCKeeper,
@ -422,6 +432,7 @@ func NewEthermintApp(
transferModule,
// Ethermint app modules
evm.NewAppModule(app.EvmKeeper, app.AccountKeeper),
feemarket.NewAppModule(app.FeeMarketKeeper),
)
// During begin block slashing happens after distr.BeginBlocker so that
@ -437,9 +448,11 @@ func NewEthermintApp(
minttypes.ModuleName, distrtypes.ModuleName, slashingtypes.ModuleName,
evidencetypes.ModuleName, stakingtypes.ModuleName, ibchost.ModuleName,
)
// NOTE: fee market module must go last in order to retrieve the block gas used.
app.mm.SetOrderEndBlockers(
crisistypes.ModuleName, govtypes.ModuleName, stakingtypes.ModuleName,
evmtypes.ModuleName,
evmtypes.ModuleName, feemarkettypes.ModuleName,
)
// NOTE: The genutils module must occur after staking so that pools are
@ -454,7 +467,7 @@ func NewEthermintApp(
ibchost.ModuleName, genutiltypes.ModuleName, evidencetypes.ModuleName, ibctransfertypes.ModuleName,
authz.ModuleName, feegrant.ModuleName,
// Ethermint modules
evmtypes.ModuleName,
evmtypes.ModuleName, feemarkettypes.ModuleName,
// NOTE: crisis module must go at the end to check for invariants on each module
crisistypes.ModuleName,
@ -696,5 +709,6 @@ func initParamsKeeper(
paramsKeeper.Subspace(ibchost.ModuleName)
// ethermint subspaces
paramsKeeper.Subspace(evmtypes.ModuleName)
paramsKeeper.Subspace(feemarkettypes.ModuleName)
return paramsKeeper
}

File diff suppressed because one or more lines are too long

View File

@ -439,210 +439,6 @@ paths:
type: string
tags:
- Query
/ethermint/evm/v1/base_fee:
get:
summary: BaseFee queries the base fee of the parent block of the current block.
operationId: BaseFee
responses:
'200':
description: A successful response.
schema:
type: object
properties:
base_fee:
type: string
description: BaseFeeResponse returns the EIP1559 base fee.
default:
description: An unexpected error response.
schema:
type: object
properties:
error:
type: string
code:
type: integer
format: int32
message:
type: string
details:
type: array
items:
type: object
properties:
type_url:
type: string
description: >-
A URL/resource name that uniquely identifies the type of
the serialized
protocol buffer message. This string must contain at
least
one "/" character. The last segment of the URL's path
must represent
the fully qualified name of the type (as in
`path/google.protobuf.Duration`). The name should be in
a canonical form
(e.g., leading "." is not accepted).
In practice, teams usually precompile into the binary
all types that they
expect it to use in the context of Any. However, for
URLs which use the
scheme `http`, `https`, or no scheme, one can optionally
set up a type
server that maps type URLs to message definitions as
follows:
* If no scheme is provided, `https` is assumed.
* An HTTP GET on the URL must yield a
[google.protobuf.Type][]
value in binary format, or produce an error.
* Applications are allowed to cache lookup results based
on the
URL, or have them precompiled into a binary to avoid any
lookup. Therefore, binary compatibility needs to be preserved
on changes to types. (Use versioned type names to manage
breaking changes.)
Note: this functionality is not currently available in
the official
protobuf release, and it is not used for type URLs
beginning with
type.googleapis.com.
Schemes other than `http`, `https` (or the empty scheme)
might be
used with implementation specific semantics.
value:
type: string
format: byte
description: >-
Must be a valid serialized protocol buffer of the above
specified type.
description: >-
`Any` contains an arbitrary serialized protocol buffer
message along with a
URL that describes the type of the serialized message.
Protobuf library provides support to pack/unpack Any values
in the form
of utility functions or additional generated methods of the
Any type.
Example 1: Pack and unpack a message in C++.
Foo foo = ...;
Any any;
any.PackFrom(foo);
...
if (any.UnpackTo(&foo)) {
...
}
Example 2: Pack and unpack a message in Java.
Foo foo = ...;
Any any = Any.pack(foo);
...
if (any.is(Foo.class)) {
foo = any.unpack(Foo.class);
}
Example 3: Pack and unpack a message in Python.
foo = Foo(...)
any = Any()
any.Pack(foo)
...
if any.Is(Foo.DESCRIPTOR):
any.Unpack(foo)
...
Example 4: Pack and unpack a message in Go
foo := &pb.Foo{...}
any, err := ptypes.MarshalAny(foo)
...
foo := &pb.Foo{}
if err := ptypes.UnmarshalAny(any, foo); err != nil {
...
}
The pack methods provided by protobuf library will by
default use
'type.googleapis.com/full.type.name' as the type URL and the
unpack
methods only use the fully qualified type name after the
last '/'
in the type URL, for example "foo.bar.com/x/y.z" will yield
type
name "y.z".
JSON
====
The JSON representation of an `Any` value uses the regular
representation of the deserialized, embedded message, with
an
additional field `@type` which contains the type URL.
Example:
package google.profile;
message Person {
string first_name = 1;
string last_name = 2;
}
{
"@type": "type.googleapis.com/google.profile.Person",
"firstName": <string>,
"lastName": <string>
}
If the embedded message type is well-known and has a custom
JSON
representation, that representation will be embedded adding
a field
`value` which holds the custom JSON in addition to the
`@type`
field. Example (for message [google.protobuf.Duration][]):
{
"@type": "type.googleapis.com/google.protobuf.Duration",
"value": "1.212s"
}
tags:
- Query
/ethermint/evm/v1/block_bloom:
get:
summary: BlockBloom queries the block bloom filter bytes at a given height.
@ -2294,11 +2090,6 @@ paths:
using *sdk.Int values
instead of *big.Int.
no_base_fee:
type: boolean
title: >-
no base fee forces the EIP-1559 base fee to 0 (needed for
0 price calls)
title: Params defines the EVM module parameters
description: >-
QueryParamsResponse defines the response type for querying x/evm
@ -13715,11 +13506,6 @@ definitions:
values
instead of *big.Int.
no_base_fee:
type: boolean
title: >-
no base fee forces the EIP-1559 base fee to 0 (needed for 0 price
calls)
title: Params defines the EVM module parameters
ethermint.evm.v1.QueryAccountResponse:
type: object
@ -13746,12 +13532,6 @@ definitions:
description: >-
QueryBalanceResponse is the response type for the Query/Balance RPC
method.
ethermint.evm.v1.QueryBaseFeeResponse:
type: object
properties:
base_fee:
type: string
description: BaseFeeResponse returns the EIP1559 base fee.
ethermint.evm.v1.QueryBlockBloomResponse:
type: object
properties:
@ -13976,11 +13756,6 @@ definitions:
*sdk.Int values
instead of *big.Int.
no_base_fee:
type: boolean
title: >-
no base fee forces the EIP-1559 base fee to 0 (needed for 0 price
calls)
title: Params defines the EVM module parameters
description: >-
QueryParamsResponse defines the response type for querying x/evm

View File

@ -60,6 +60,22 @@
- [Query](#ethermint.evm.v1.Query)
- [ethermint/feemarket/v1/feemarket.proto](#ethermint/feemarket/v1/feemarket.proto)
- [Params](#ethermint.feemarket.v1.Params)
- [ethermint/feemarket/v1/genesis.proto](#ethermint/feemarket/v1/genesis.proto)
- [GenesisState](#ethermint.feemarket.v1.GenesisState)
- [ethermint/feemarket/v1/query.proto](#ethermint/feemarket/v1/query.proto)
- [QueryBaseFeeRequest](#ethermint.feemarket.v1.QueryBaseFeeRequest)
- [QueryBaseFeeResponse](#ethermint.feemarket.v1.QueryBaseFeeResponse)
- [QueryBlockGasRequest](#ethermint.feemarket.v1.QueryBlockGasRequest)
- [QueryBlockGasResponse](#ethermint.feemarket.v1.QueryBlockGasResponse)
- [QueryParamsRequest](#ethermint.feemarket.v1.QueryParamsRequest)
- [QueryParamsResponse](#ethermint.feemarket.v1.QueryParamsResponse)
- [Query](#ethermint.feemarket.v1.Query)
- [ethermint/types/v1/account.proto](#ethermint/types/v1/account.proto)
- [EthAccount](#ethermint.types.v1.EthAccount)
@ -210,7 +226,6 @@ Params defines the EVM module parameters
| `enable_call` | [bool](#bool) | | enable call toggles state transitions that use the vm.Call function |
| `extra_eips` | [int64](#int64) | repeated | extra eips defines the additional EIPs for the vm.Config |
| `chain_config` | [ChainConfig](#ethermint.evm.v1.ChainConfig) | | chain config defines the EVM chain configuration parameters |
| `no_base_fee` | [bool](#bool) | | no base fee forces the EIP-1559 base fee to 0 (needed for 0 price calls) |
@ -895,7 +910,6 @@ Query defines the gRPC querier service.
| `BlockLogs` | [QueryBlockLogsRequest](#ethermint.evm.v1.QueryBlockLogsRequest) | [QueryBlockLogsResponse](#ethermint.evm.v1.QueryBlockLogsResponse) | BlockLogs queries all the ethereum logs for a given block hash. | GET|/ethermint/evm/v1/block_logs/{hash}|
| `BlockBloom` | [QueryBlockBloomRequest](#ethermint.evm.v1.QueryBlockBloomRequest) | [QueryBlockBloomResponse](#ethermint.evm.v1.QueryBlockBloomResponse) | BlockBloom queries the block bloom filter bytes at a given height. | GET|/ethermint/evm/v1/block_bloom|
| `Params` | [QueryParamsRequest](#ethermint.evm.v1.QueryParamsRequest) | [QueryParamsResponse](#ethermint.evm.v1.QueryParamsResponse) | Params queries the parameters of x/evm module. | GET|/ethermint/evm/v1/params|
| `BaseFee` | [QueryBaseFeeRequest](#ethermint.evm.v1.QueryBaseFeeRequest) | [QueryBaseFeeResponse](#ethermint.evm.v1.QueryBaseFeeResponse) | BaseFee queries the base fee of the parent block of the current block. | GET|/ethermint/evm/v1/base_fee|
| `EthCall` | [EthCallRequest](#ethermint.evm.v1.EthCallRequest) | [MsgEthereumTxResponse](#ethermint.evm.v1.MsgEthereumTxResponse) | EthCall implements the `eth_call` rpc api | GET|/ethermint/evm/v1/eth_call|
| `EstimateGas` | [EthCallRequest](#ethermint.evm.v1.EthCallRequest) | [EstimateGasResponse](#ethermint.evm.v1.EstimateGasResponse) | EstimateGas implements the `eth_estimateGas` rpc api | GET|/ethermint/evm/v1/estimate_gas|
@ -903,6 +917,179 @@ Query defines the gRPC querier service.
<a name="ethermint/feemarket/v1/feemarket.proto"></a>
<p align="right"><a href="#top">Top</a></p>
## ethermint/feemarket/v1/feemarket.proto
<a name="ethermint.feemarket.v1.Params"></a>
### Params
Params defines the EVM module parameters
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| `no_base_fee` | [bool](#bool) | | no base fee forces the EIP-1559 base fee to 0 (needed for 0 price calls) |
| `base_fee_change_denominator` | [uint32](#uint32) | | base fee change denominator bounds the amount the base fee can change between blocks. |
| `elasticity_multiplier` | [uint32](#uint32) | | elasticity multiplier bounds the maximum gas limit an EIP-1559 block may have. |
| `initial_base_fee` | [int64](#int64) | | initial base fee for EIP-1559 blocks. |
| `enable_height` | [int64](#int64) | | height at which the base fee calculation is enabled. |
<!-- end messages -->
<!-- end enums -->
<!-- end HasExtensions -->
<!-- end services -->
<a name="ethermint/feemarket/v1/genesis.proto"></a>
<p align="right"><a href="#top">Top</a></p>
## ethermint/feemarket/v1/genesis.proto
<a name="ethermint.feemarket.v1.GenesisState"></a>
### GenesisState
GenesisState defines the feemarket module's genesis state.
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| `params` | [Params](#ethermint.feemarket.v1.Params) | | params defines all the paramaters of the module. |
| `base_fee` | [string](#string) | | base fee is the exported value from previous software version. Zero by default. |
| `block_gas` | [uint64](#uint64) | | block gas is the amount of gas used on the last block before the upgrade. Zero by default. |
<!-- end messages -->
<!-- end enums -->
<!-- end HasExtensions -->
<!-- end services -->
<a name="ethermint/feemarket/v1/query.proto"></a>
<p align="right"><a href="#top">Top</a></p>
## ethermint/feemarket/v1/query.proto
<a name="ethermint.feemarket.v1.QueryBaseFeeRequest"></a>
### QueryBaseFeeRequest
QueryBaseFeeRequest defines the request type for querying the EIP1559 base
fee.
<a name="ethermint.feemarket.v1.QueryBaseFeeResponse"></a>
### QueryBaseFeeResponse
BaseFeeResponse returns the EIP1559 base fee.
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| `base_fee` | [string](#string) | | |
<a name="ethermint.feemarket.v1.QueryBlockGasRequest"></a>
### QueryBlockGasRequest
QueryBlockGasRequest defines the request type for querying the EIP1559 base
fee.
<a name="ethermint.feemarket.v1.QueryBlockGasResponse"></a>
### QueryBlockGasResponse
QueryBlockGasResponse returns block gas used for a given height.
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| `gas` | [int64](#int64) | | |
<a name="ethermint.feemarket.v1.QueryParamsRequest"></a>
### QueryParamsRequest
QueryParamsRequest defines the request type for querying x/evm parameters.
<a name="ethermint.feemarket.v1.QueryParamsResponse"></a>
### QueryParamsResponse
QueryParamsResponse defines the response type for querying x/evm parameters.
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| `params` | [Params](#ethermint.feemarket.v1.Params) | | params define the evm module parameters. |
<!-- end messages -->
<!-- end enums -->
<!-- end HasExtensions -->
<a name="ethermint.feemarket.v1.Query"></a>
### Query
Query defines the gRPC querier service.
| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint |
| ----------- | ------------ | ------------- | ------------| ------- | -------- |
| `Params` | [QueryParamsRequest](#ethermint.feemarket.v1.QueryParamsRequest) | [QueryParamsResponse](#ethermint.feemarket.v1.QueryParamsResponse) | Params queries the parameters of x/feemarket module. | GET|/feemarket/evm/v1/params|
| `BaseFee` | [QueryBaseFeeRequest](#ethermint.feemarket.v1.QueryBaseFeeRequest) | [QueryBaseFeeResponse](#ethermint.feemarket.v1.QueryBaseFeeResponse) | BaseFee queries the base fee of the parent block of the current block. | GET|/feemarket/evm/v1/base_fee|
| `BlockGas` | [QueryBlockGasRequest](#ethermint.feemarket.v1.QueryBlockGasRequest) | [QueryBlockGasResponse](#ethermint.feemarket.v1.QueryBlockGasResponse) | BlockGas queries the gas used at a given block height | GET|/feemarket/evm/v1/block_gas|
<!-- end services -->
<a name="ethermint/types/v1/account.proto"></a>
<p align="right"><a href="#top">Top</a></p>

2
go.mod
View File

@ -47,7 +47,7 @@ require (
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 // indirect
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d // indirect
golang.org/x/sys v0.0.0-20210817190340-bfb29a6856f2 // indirect
google.golang.org/genproto v0.0.0-20210824181836-a4879c3d0e89
google.golang.org/genproto v0.0.0-20210825212027-de86158e7fda
google.golang.org/grpc v1.40.0
gopkg.in/yaml.v2 v2.4.0
nhooyr.io/websocket v1.8.7 // indirect

4
go.sum
View File

@ -1425,8 +1425,8 @@ google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6D
google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A=
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
google.golang.org/genproto v0.0.0-20210824181836-a4879c3d0e89 h1:x1dY+qZWu7fKPOOo4mM9kMcUfVVlDvHreE17KGDho00=
google.golang.org/genproto v0.0.0-20210824181836-a4879c3d0e89/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=
google.golang.org/genproto v0.0.0-20210825212027-de86158e7fda h1:iT5uhT54PtbqUsWddv/nnEWdE5e/MTr+Nv3vjxlBP1A=
google.golang.org/genproto v0.0.0-20210825212027-de86158e7fda/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=
google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.1/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=

View File

@ -26,8 +26,6 @@ message Params {
(gogoproto.moretags) = "yaml:\"chain_config\"",
(gogoproto.nullable) = false
];
// no base fee forces the EIP-1559 base fee to 0 (needed for 0 price calls)
bool no_base_fee = 6 [ (gogoproto.moretags) = "yaml:\"no_base_fee\"" ];
}
// ChainConfig defines the Ethereum ChainConfig parameters using *sdk.Int values

View File

@ -68,11 +68,6 @@ service Query {
option (google.api.http).get = "/ethermint/evm/v1/params";
}
// BaseFee queries the base fee of the parent block of the current block.
rpc BaseFee(QueryBaseFeeRequest) returns (QueryBaseFeeResponse) {
option (google.api.http).get = "/ethermint/evm/v1/base_fee";
}
// EthCall implements the `eth_call` rpc api
rpc EthCall(EthCallRequest) returns (MsgEthereumTxResponse) {
option (google.api.http).get = "/ethermint/evm/v1/eth_call";

View File

@ -0,0 +1,20 @@
syntax = "proto3";
package ethermint.feemarket.v1;
import "gogoproto/gogo.proto";
option go_package = "github.com/tharsis/ethermint/x/feemarket/types";
// Params defines the EVM module parameters
message Params {
// no base fee forces the EIP-1559 base fee to 0 (needed for 0 price calls)
bool no_base_fee = 1;
// base fee change denominator bounds the amount the base fee can change between blocks.
uint32 base_fee_change_denominator = 2;
// elasticity multiplier bounds the maximum gas limit an EIP-1559 block may have.
uint32 elasticity_multiplier = 3;
// initial base fee for EIP-1559 blocks.
int64 initial_base_fee = 4;
// height at which the base fee calculation is enabled.
int64 enable_height = 5;
}

View File

@ -0,0 +1,22 @@
syntax = "proto3";
package ethermint.feemarket.v1;
import "gogoproto/gogo.proto";
import "ethermint/feemarket/v1/feemarket.proto";
option go_package = "github.com/tharsis/ethermint/x/feemarket/types";
// GenesisState defines the feemarket module's genesis state.
message GenesisState {
// params defines all the paramaters of the module.
Params params = 1 [(gogoproto.nullable) = false];
// base fee is the exported value from previous software version.
// Zero by default.
string base_fee = 2 [
(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int",
(gogoproto.nullable) = false
];
// block gas is the amount of gas used on the last block before the upgrade.
// Zero by default.
uint64 block_gas = 3;
}

View File

@ -0,0 +1,58 @@
syntax = "proto3";
package ethermint.feemarket.v1;
import "gogoproto/gogo.proto";
// import "cosmos/base/query/v1beta1/pagination.proto";
import "google/api/annotations.proto";
import "ethermint/feemarket/v1/feemarket.proto";
option go_package = "github.com/tharsis/ethermint/x/feemarket/types";
// Query defines the gRPC querier service.
service Query {
// Params queries the parameters of x/feemarket module.
rpc Params(QueryParamsRequest) returns (QueryParamsResponse) {
option (google.api.http).get = "/feemarket/evm/v1/params";
}
// BaseFee queries the base fee of the parent block of the current block.
rpc BaseFee(QueryBaseFeeRequest) returns (QueryBaseFeeResponse) {
option (google.api.http).get = "/feemarket/evm/v1/base_fee";
}
// BlockGas queries the gas used at a given block height
rpc BlockGas(QueryBlockGasRequest) returns (QueryBlockGasResponse) {
option (google.api.http).get = "/feemarket/evm/v1/block_gas";
}
}
// QueryParamsRequest defines the request type for querying x/evm parameters.
message QueryParamsRequest {}
// QueryParamsResponse defines the response type for querying x/evm parameters.
message QueryParamsResponse {
// params define the evm module parameters.
Params params = 1 [ (gogoproto.nullable) = false ];
}
// QueryBaseFeeRequest defines the request type for querying the EIP1559 base
// fee.
message QueryBaseFeeRequest {}
// BaseFeeResponse returns the EIP1559 base fee.
message QueryBaseFeeResponse {
string base_fee = 1 [
(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int",
(gogoproto.nullable) = false
];
}
// QueryBlockGasRequest defines the request type for querying the EIP1559 base
// fee.
message QueryBlockGasRequest {}
// QueryBlockGasResponse returns block gas used for a given height.
message QueryBlockGasResponse {
int64 gas = 1;
}

View File

@ -1,7 +1,6 @@
package keeper
import (
"fmt"
"time"
abci "github.com/tendermint/tendermint/abci/types"
@ -30,20 +29,6 @@ func (k *Keeper) EndBlock(ctx sdk.Context, req abci.RequestEndBlock) []abci.Vali
infCtx := ctx.WithGasMeter(sdk.NewInfiniteGasMeter())
k.WithContext(infCtx)
baseFee := k.CalculateBaseFee(ctx)
// only set base fee if the NoBaseFee param is false
if baseFee != nil {
k.SetBaseFee(ctx, baseFee)
k.SetBlockGasUsed(ctx)
k.Ctx().EventManager().EmitEvent(sdk.NewEvent(
"block_gas",
sdk.NewAttribute("height", fmt.Sprintf("%d", ctx.BlockHeight())),
sdk.NewAttribute("amount", fmt.Sprintf("%d", ctx.BlockGasMeter().GasConsumedToLimit())),
))
}
bloom := ethtypes.BytesToBloom(k.GetBlockBloomTransient().Bytes())
k.SetBlockBloom(infCtx, req.Height, bloom)

View File

@ -132,58 +132,6 @@ func (k Keeper) ChainID() *big.Int {
return k.eip155ChainID
}
// ----------------------------------------------------------------------------
// Parent Block Gas Used
// Required by EIP1559 base fee calculation.
// ----------------------------------------------------------------------------
// GetBlockGasUsed returns the last block gas used value from the store.
func (k Keeper) GetBlockGasUsed(ctx sdk.Context) uint64 {
store := ctx.KVStore(k.storeKey)
bz := store.Get(types.KeyPrefixBlockGasUsed)
if len(bz) == 0 {
return 0
}
return sdk.BigEndianToUint64(bz)
}
// SetBlockGasUsed gets the current block gas consumed to the store.
// CONTRACT: this should be only called during EndBlock.
func (k Keeper) SetBlockGasUsed(ctx sdk.Context) {
if ctx.BlockGasMeter() == nil {
k.Logger(ctx).Error("block gas meter is nil when setting block gas used")
return
}
store := ctx.KVStore(k.storeKey)
gasBz := sdk.Uint64ToBigEndian(ctx.BlockGasMeter().GasConsumedToLimit())
store.Set(types.KeyPrefixBlockGasUsed, gasBz)
}
// ----------------------------------------------------------------------------
// Parent Base Fee
// Required by EIP1559 base fee calculation.
// ----------------------------------------------------------------------------
// GetBlockGasUsed returns the last block gas used value from the store.
func (k Keeper) GetBaseFee(ctx sdk.Context) *big.Int {
store := ctx.KVStore(k.storeKey)
bz := store.Get(types.KeyPrefixBaseFee)
if len(bz) == 0 {
return new(big.Int).SetUint64(types.InitialBaseFee) // TODO: use geth params
}
return new(big.Int).SetBytes(bz)
}
// SetBlockGasUsed gets the current block gas consumed to the store.
// CONTRACT: this should be only called during EndBlock.
func (k Keeper) SetBaseFee(ctx sdk.Context, baseFee *big.Int) {
store := ctx.KVStore(k.storeKey)
store.Set(types.KeyPrefixBaseFee, baseFee.Bytes())
}
// ----------------------------------------------------------------------------
// Block Bloom
// Required by Web3 API.

View File

@ -10,13 +10,6 @@ import (
"github.com/tharsis/ethermint/types"
)
// TODO: remove once migrated to latest go-ethereum
const (
BaseFeeChangeDenominator = 8 // Bounds the amount the base fee can change between blocks.
ElasticityMultiplier = 2 // Bounds the maximum gas limit an EIP-1559 block may have.
InitialBaseFee = 1000000000 // Initial base fee for EIP-1559 blocks.
)
// nolint: deadcode, unused
func newDynamicFeeTx(tx *ethtypes.Transaction) *DynamicFeeTx {
txData := &DynamicFeeTx{

View File

@ -37,8 +37,6 @@ type Params struct {
ExtraEIPs []int64 `protobuf:"varint,4,rep,packed,name=extra_eips,json=extraEips,proto3" json:"extra_eips,omitempty" yaml:"extra_eips"`
// 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"`
// no base fee forces the EIP-1559 base fee to 0 (needed for 0 price calls)
NoBaseFee bool `protobuf:"varint,6,opt,name=no_base_fee,json=noBaseFee,proto3" json:"no_base_fee,omitempty" yaml:"no_base_fee"`
}
func (m *Params) Reset() { *m = Params{} }
@ -108,13 +106,6 @@ func (m *Params) GetChainConfig() ChainConfig {
return ChainConfig{}
}
func (m *Params) GetNoBaseFee() bool {
if m != nil {
return m.NoBaseFee
}
return false
}
// ChainConfig defines the Ethereum ChainConfig parameters using *sdk.Int values
// instead of *big.Int.
type ChainConfig struct {
@ -534,87 +525,86 @@ func init() {
func init() { proto.RegisterFile("ethermint/evm/v1/evm.proto", fileDescriptor_d21ecc92c8c8583e) }
var fileDescriptor_d21ecc92c8c8583e = []byte{
// 1277 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x96, 0xcf, 0x6f, 0xdb, 0x36,
0x1b, 0xc7, 0xe3, 0xd8, 0x49, 0x6c, 0x4a, 0xb6, 0x55, 0xd6, 0xcd, 0xeb, 0xb6, 0x78, 0xa3, 0xbc,
0x3c, 0xbc, 0xf0, 0x80, 0x36, 0x6e, 0x52, 0x64, 0x2b, 0x0a, 0xec, 0x10, 0xa5, 0x69, 0x97, 0xae,
0xd8, 0x02, 0xb6, 0xc3, 0x80, 0x01, 0x83, 0x40, 0x4b, 0xac, 0xac, 0x45, 0x12, 0x0d, 0x91, 0xf6,
0xec, 0x61, 0x7f, 0xc0, 0x80, 0x5d, 0x06, 0xec, 0xb2, 0xc3, 0x0e, 0xfb, 0x73, 0x8a, 0x9d, 0x7a,
0x1c, 0x76, 0x10, 0x06, 0xf7, 0x96, 0xa3, 0xff, 0x82, 0x41, 0x24, 0xfd, 0x33, 0xc5, 0xb0, 0xe4,
0x24, 0x3e, 0x0f, 0x1f, 0x7e, 0x3f, 0x7c, 0xc8, 0x47, 0x24, 0xc1, 0x1d, 0x2a, 0xba, 0x34, 0x8d,
0xc3, 0x44, 0xb4, 0xe9, 0x20, 0x6e, 0x0f, 0xf6, 0xf3, 0xcf, 0x5e, 0x2f, 0x65, 0x82, 0x41, 0x6b,
0xd6, 0xb7, 0x97, 0x3b, 0x07, 0xfb, 0x77, 0x1a, 0x01, 0x0b, 0x98, 0xec, 0x6c, 0xe7, 0x2d, 0x15,
0x87, 0x7e, 0x2e, 0x82, 0xcd, 0x33, 0x92, 0x92, 0x98, 0xc3, 0x7d, 0x50, 0xa1, 0x83, 0xd8, 0xf5,
0x69, 0xc2, 0xe2, 0x66, 0x61, 0xb7, 0xd0, 0xaa, 0x38, 0x8d, 0x49, 0x66, 0x5b, 0x23, 0x12, 0x47,
0x8f, 0xd1, 0xac, 0x0b, 0xe1, 0x32, 0x1d, 0xc4, 0x4f, 0xf2, 0x26, 0xfc, 0x18, 0x54, 0x69, 0x42,
0x3a, 0x11, 0x75, 0xbd, 0x94, 0x12, 0x41, 0x9b, 0xeb, 0xbb, 0x85, 0x56, 0xd9, 0x69, 0x4e, 0x32,
0xbb, 0xa1, 0x87, 0x2d, 0x76, 0x23, 0x6c, 0x2a, 0xfb, 0x58, 0x9a, 0xf0, 0x23, 0x60, 0x4c, 0xfb,
0x49, 0x14, 0x35, 0x8b, 0x72, 0xf0, 0xf6, 0x24, 0xb3, 0xe1, 0xf2, 0x60, 0x12, 0x45, 0x08, 0x03,
0x3d, 0x94, 0x44, 0x11, 0x3c, 0x02, 0x80, 0x0e, 0x45, 0x4a, 0x5c, 0x1a, 0xf6, 0x78, 0xb3, 0xb4,
0x5b, 0x6c, 0x15, 0x1d, 0x34, 0xce, 0xec, 0xca, 0x49, 0xee, 0x3d, 0x39, 0x3d, 0xe3, 0x93, 0xcc,
0xbe, 0xa1, 0x45, 0x66, 0x81, 0x08, 0x57, 0xa4, 0x71, 0x12, 0xf6, 0x38, 0xfc, 0x1a, 0x98, 0x5e,
0x97, 0x84, 0x89, 0xeb, 0xb1, 0xe4, 0x75, 0x18, 0x34, 0x37, 0x76, 0x0b, 0x2d, 0xe3, 0xe0, 0xbf,
0x7b, 0xab, 0xeb, 0xb6, 0x77, 0x9c, 0x47, 0x1d, 0xcb, 0x20, 0xe7, 0xee, 0x9b, 0xcc, 0x5e, 0x9b,
0x64, 0xf6, 0x4d, 0x25, 0xbd, 0x28, 0x80, 0xb0, 0xe1, 0xcd, 0x23, 0xe1, 0x87, 0xc0, 0x48, 0x98,
0xdb, 0x21, 0x9c, 0xba, 0xaf, 0x29, 0x6d, 0x6e, 0xae, 0xa6, 0xb6, 0xd0, 0x89, 0x70, 0x25, 0x61,
0x0e, 0xe1, 0xf4, 0x29, 0xa5, 0x8f, 0x4b, 0xbf, 0xfc, 0x66, 0xaf, 0xa1, 0x5f, 0xab, 0xc0, 0x58,
0xe0, 0xc2, 0x18, 0xd4, 0xbb, 0x2c, 0xa6, 0x5c, 0x50, 0xe2, 0xbb, 0x9d, 0x88, 0x79, 0xe7, 0x7a,
0x83, 0x9e, 0xfc, 0x99, 0xd9, 0xff, 0x0f, 0x42, 0xd1, 0xed, 0x77, 0xf6, 0x3c, 0x16, 0xb7, 0x3d,
0xc6, 0x63, 0xc6, 0xf5, 0xe7, 0x3e, 0xf7, 0xcf, 0xdb, 0x62, 0xd4, 0xa3, 0x7c, 0xef, 0x34, 0x11,
0x93, 0xcc, 0xde, 0x56, 0xec, 0x15, 0x29, 0x84, 0x6b, 0x33, 0x8f, 0x93, 0x3b, 0xe0, 0x08, 0xd4,
0x7c, 0xc2, 0xdc, 0xd7, 0x2c, 0x3d, 0xd7, 0xb4, 0x75, 0x49, 0x7b, 0xf9, 0xef, 0x69, 0xe3, 0xcc,
0x36, 0x9f, 0x1c, 0x7d, 0xfe, 0x94, 0xa5, 0xe7, 0x52, 0x73, 0x92, 0xd9, 0xb7, 0x14, 0x7d, 0x59,
0x19, 0x61, 0xd3, 0x27, 0x6c, 0x16, 0x06, 0xbf, 0x04, 0xd6, 0x2c, 0x80, 0xf7, 0x7b, 0x3d, 0x96,
0x0a, 0x5d, 0x17, 0xf7, 0xc7, 0x99, 0x5d, 0xd3, 0x92, 0x2f, 0x55, 0xcf, 0x24, 0xb3, 0xff, 0xb3,
0x22, 0xaa, 0xc7, 0x20, 0x5c, 0xd3, 0xb2, 0x3a, 0x14, 0x72, 0x60, 0xd2, 0xb0, 0xb7, 0x7f, 0xf8,
0x40, 0x67, 0x54, 0x92, 0x19, 0x9d, 0x5d, 0x29, 0x23, 0xe3, 0xe4, 0xf4, 0x6c, 0xff, 0xf0, 0xc1,
0x34, 0x21, 0x5d, 0x05, 0x8b, 0xb2, 0x08, 0x1b, 0xca, 0x54, 0xd9, 0x9c, 0x02, 0x6d, 0xba, 0x5d,
0xc2, 0xbb, 0xb2, 0xc6, 0x2a, 0x4e, 0x6b, 0x9c, 0xd9, 0x40, 0x29, 0x7d, 0x42, 0x78, 0x77, 0xbe,
0x2f, 0x9d, 0xd1, 0x77, 0x24, 0x11, 0x61, 0x3f, 0x9e, 0x6a, 0x01, 0x35, 0x38, 0x8f, 0x9a, 0xcd,
0xff, 0x50, 0xcf, 0x7f, 0xf3, 0xda, 0xf3, 0x3f, 0x7c, 0xdf, 0xfc, 0x0f, 0x97, 0xe7, 0xaf, 0x62,
0x66, 0xd0, 0x47, 0x1a, 0xba, 0x75, 0x6d, 0xe8, 0xa3, 0xf7, 0x41, 0x1f, 0x2d, 0x43, 0x55, 0x4c,
0x5e, 0xec, 0x2b, 0x2b, 0xd1, 0x2c, 0x5f, 0xbf, 0xd8, 0x2f, 0x2d, 0x6a, 0x6d, 0xe6, 0x51, 0xb8,
0xef, 0x41, 0xc3, 0x63, 0x09, 0x17, 0xb9, 0x2f, 0x61, 0xbd, 0x88, 0x6a, 0x66, 0x45, 0x32, 0x4f,
0xaf, 0xc4, 0xbc, 0xab, 0xcf, 0x85, 0xf7, 0xe8, 0x21, 0x7c, 0x73, 0xd9, 0xad, 0xe8, 0x3d, 0x60,
0xf5, 0xa8, 0xa0, 0x29, 0xef, 0xf4, 0xd3, 0x40, 0x93, 0x81, 0x24, 0x9f, 0x5c, 0x89, 0xac, 0xff,
0x83, 0x55, 0x2d, 0x84, 0xeb, 0x73, 0x97, 0x22, 0x7e, 0x03, 0x6a, 0x61, 0x3e, 0x8d, 0x4e, 0x3f,
0xd2, 0x3c, 0x43, 0xf2, 0x8e, 0xaf, 0xc4, 0xd3, 0x3f, 0xf3, 0xb2, 0x12, 0xc2, 0xd5, 0xa9, 0x43,
0xb1, 0xfa, 0x00, 0xc6, 0xfd, 0x30, 0x75, 0x83, 0x88, 0x78, 0x21, 0x4d, 0x35, 0xcf, 0x94, 0xbc,
0x67, 0x57, 0xe2, 0xdd, 0x56, 0xbc, 0xcb, 0x6a, 0x08, 0x5b, 0xb9, 0xf3, 0x99, 0xf2, 0x29, 0xac,
0x0f, 0xcc, 0x0e, 0x4d, 0xa3, 0x30, 0xd1, 0xc0, 0xaa, 0x04, 0x1e, 0x5d, 0x09, 0xa8, 0xeb, 0x74,
0x51, 0x07, 0x61, 0x43, 0x99, 0xb3, 0x85, 0xf4, 0x88, 0x20, 0xd1, 0x88, 0x0b, 0xcd, 0xb1, 0xae,
0xbf, 0x90, 0xcb, 0x4a, 0x08, 0x57, 0xa7, 0x8e, 0x59, 0x46, 0x11, 0x4b, 0x7c, 0x36, 0xcd, 0xe8,
0xc6, 0xf5, 0x33, 0x5a, 0xd4, 0x41, 0xd8, 0x50, 0xa6, 0xa4, 0x3c, 0x2f, 0x95, 0x6b, 0x56, 0xfd,
0x79, 0xa9, 0x5c, 0xb7, 0x2c, 0x5c, 0x1d, 0xb1, 0x88, 0xb9, 0x83, 0x87, 0x2a, 0x10, 0x1b, 0xf4,
0x5b, 0xc2, 0xa7, 0xff, 0x50, 0x1b, 0x6c, 0xbc, 0x14, 0xf9, 0x05, 0x6e, 0x81, 0xe2, 0x39, 0x1d,
0xa9, 0xbb, 0x08, 0xe7, 0x4d, 0xd8, 0x00, 0x1b, 0x03, 0x12, 0xf5, 0xd5, 0x4b, 0xa0, 0x82, 0x95,
0x81, 0xce, 0x40, 0xfd, 0x55, 0x4a, 0x12, 0x4e, 0x3c, 0x11, 0xb2, 0xe4, 0x05, 0x0b, 0x38, 0x84,
0xa0, 0x24, 0xcf, 0x44, 0x35, 0x56, 0xb6, 0xe1, 0x07, 0xa0, 0x14, 0xb1, 0x80, 0x37, 0xd7, 0x77,
0x8b, 0x2d, 0xe3, 0xe0, 0xd6, 0xe5, 0xbb, 0xf8, 0x05, 0x0b, 0xb0, 0x0c, 0x41, 0xbf, 0xaf, 0x83,
0xe2, 0x0b, 0x16, 0xc0, 0x26, 0xd8, 0x22, 0xbe, 0x9f, 0x52, 0xce, 0xb5, 0xd2, 0xd4, 0x84, 0xdb,
0x60, 0x53, 0xb0, 0x5e, 0xe8, 0x29, 0xb9, 0x0a, 0xd6, 0x56, 0x0e, 0xf6, 0x89, 0x20, 0xf2, 0x56,
0x31, 0xb1, 0x6c, 0xc3, 0x03, 0x60, 0xca, 0xcc, 0xdc, 0xa4, 0x1f, 0x77, 0x68, 0x2a, 0x2f, 0x87,
0x92, 0x53, 0xbf, 0xc8, 0x6c, 0x43, 0xfa, 0x3f, 0x93, 0x6e, 0xbc, 0x68, 0xc0, 0x7b, 0x60, 0x4b,
0x0c, 0x17, 0xcf, 0xf5, 0x9b, 0x17, 0x99, 0x5d, 0x17, 0xf3, 0x34, 0xf3, 0x63, 0x1b, 0x6f, 0x8a,
0xa1, 0x3c, 0xbe, 0xdb, 0xa0, 0x2c, 0x86, 0x6e, 0x98, 0xf8, 0x74, 0x28, 0x8f, 0xee, 0x92, 0xd3,
0xb8, 0xc8, 0x6c, 0x6b, 0x21, 0xfc, 0x34, 0xef, 0xc3, 0x5b, 0x62, 0x28, 0x1b, 0xf0, 0x1e, 0x00,
0x6a, 0x4a, 0x92, 0xa0, 0x0e, 0xde, 0xea, 0x45, 0x66, 0x57, 0xa4, 0x57, 0x6a, 0xcf, 0x9b, 0x10,
0x81, 0x0d, 0xa5, 0x5d, 0x96, 0xda, 0xe6, 0x45, 0x66, 0x97, 0x23, 0x16, 0x28, 0x4d, 0xd5, 0x95,
0x2f, 0x55, 0x4a, 0x63, 0x36, 0xa0, 0xbe, 0x3c, 0xdb, 0xca, 0x78, 0x6a, 0xa2, 0x1f, 0xd7, 0x41,
0xf9, 0xd5, 0x10, 0x53, 0xde, 0x8f, 0x04, 0x7c, 0x0a, 0x2c, 0x8f, 0x25, 0x22, 0x25, 0x9e, 0x70,
0x97, 0x96, 0xd6, 0xb9, 0x3b, 0x3f, 0x67, 0x56, 0x23, 0x10, 0xae, 0x4f, 0x5d, 0x47, 0x7a, 0xfd,
0x1b, 0x60, 0xa3, 0x13, 0x31, 0x16, 0xcb, 0x4a, 0x30, 0xb1, 0x32, 0x20, 0x96, 0xab, 0x26, 0x77,
0xb9, 0x28, 0x5f, 0x5c, 0xff, 0xbb, 0xbc, 0xcb, 0x2b, 0xa5, 0xe2, 0x6c, 0xeb, 0x57, 0x57, 0x4d,
0xb1, 0xf5, 0x78, 0x94, 0xaf, 0xad, 0x2c, 0x25, 0x0b, 0x14, 0x53, 0x2a, 0xe4, 0xa6, 0x99, 0x38,
0x6f, 0xc2, 0x3b, 0xa0, 0x9c, 0xd2, 0x01, 0x4d, 0x05, 0xf5, 0xe5, 0xe6, 0x94, 0xf1, 0xcc, 0x86,
0xb7, 0x41, 0x39, 0x20, 0xdc, 0xed, 0x73, 0xea, 0xab, 0x9d, 0xc0, 0x5b, 0x01, 0xe1, 0x5f, 0x70,
0xea, 0x3f, 0x2e, 0xfd, 0x90, 0x3f, 0xbe, 0x08, 0x30, 0x8e, 0x3c, 0x8f, 0x72, 0xfe, 0xaa, 0xdf,
0x8b, 0xe8, 0x3f, 0x54, 0xd8, 0x01, 0x30, 0xb9, 0x60, 0x29, 0x09, 0xa8, 0x7b, 0x4e, 0x47, 0xba,
0xce, 0x54, 0xd5, 0x68, 0xff, 0xa7, 0x74, 0xc4, 0xf1, 0xa2, 0xa1, 0x10, 0x8e, 0xf3, 0x66, 0xbc,
0x53, 0x78, 0x3b, 0xde, 0x29, 0xfc, 0x35, 0xde, 0x29, 0xfc, 0xf4, 0x6e, 0x67, 0xed, 0xed, 0xbb,
0x9d, 0xb5, 0x3f, 0xde, 0xed, 0xac, 0x7d, 0xd5, 0x5a, 0xf8, 0x9d, 0x45, 0x97, 0xa4, 0x3c, 0xe4,
0xed, 0xf9, 0x33, 0x7f, 0x28, 0x1f, 0xfa, 0xf2, 0xa7, 0xee, 0x6c, 0xca, 0x07, 0xfc, 0xc3, 0xbf,
0x03, 0x00, 0x00, 0xff, 0xff, 0xcd, 0xab, 0x31, 0x31, 0x06, 0x0c, 0x00, 0x00,
// 1249 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x96, 0x4f, 0x6f, 0xdb, 0xb6,
0x1b, 0xc7, 0xe3, 0xd8, 0x49, 0x64, 0x4a, 0xb6, 0x55, 0xd6, 0xcd, 0xcf, 0x6d, 0xf1, 0x8b, 0x32,
0x1e, 0x06, 0x0f, 0x68, 0xe3, 0x26, 0x45, 0xb0, 0xa2, 0xc0, 0x0e, 0x71, 0x9a, 0x76, 0xe9, 0x8a,
0x2d, 0x60, 0x3b, 0x0c, 0x18, 0x30, 0x08, 0xb4, 0xc4, 0xca, 0x5a, 0x24, 0xd1, 0x10, 0x69, 0xcf,
0x1e, 0xf6, 0x02, 0x06, 0xec, 0xb2, 0xe3, 0x0e, 0x3b, 0xec, 0xe5, 0x14, 0x3b, 0xf5, 0x38, 0x6c,
0x80, 0x30, 0xb8, 0xb7, 0x1c, 0xfd, 0x0a, 0x06, 0x91, 0xf4, 0xdf, 0x14, 0xc3, 0x92, 0x93, 0xf8,
0x3c, 0x7c, 0xf8, 0xfd, 0x90, 0x0f, 0x1f, 0x91, 0x04, 0x77, 0xa8, 0xe8, 0xd2, 0x34, 0x0e, 0x13,
0xd1, 0xa2, 0x83, 0xb8, 0x35, 0xd8, 0xcf, 0x3f, 0x7b, 0xbd, 0x94, 0x09, 0x06, 0xed, 0x59, 0xdf,
0x5e, 0xee, 0x1c, 0xec, 0xdf, 0xa9, 0x07, 0x2c, 0x60, 0xb2, 0xb3, 0x95, 0xb7, 0x54, 0x1c, 0xfa,
0x6b, 0x1d, 0x6c, 0x9e, 0x91, 0x94, 0xc4, 0x1c, 0xee, 0x83, 0x32, 0x1d, 0xc4, 0xae, 0x4f, 0x13,
0x16, 0x37, 0x0a, 0xbb, 0x85, 0x66, 0xb9, 0x5d, 0x9f, 0x64, 0x8e, 0x3d, 0x22, 0x71, 0xf4, 0x18,
0xcd, 0xba, 0x10, 0x36, 0xe8, 0x20, 0x7e, 0x92, 0x37, 0xe1, 0x27, 0xa0, 0x42, 0x13, 0xd2, 0x89,
0xa8, 0xeb, 0xa5, 0x94, 0x08, 0xda, 0x58, 0xdf, 0x2d, 0x34, 0x8d, 0x76, 0x63, 0x92, 0x39, 0x75,
0x3d, 0x6c, 0xb1, 0x1b, 0x61, 0x4b, 0xd9, 0xc7, 0xd2, 0x84, 0x1f, 0x03, 0x73, 0xda, 0x4f, 0xa2,
0xa8, 0x51, 0x94, 0x83, 0xb7, 0x27, 0x99, 0x03, 0x97, 0x07, 0x93, 0x28, 0x42, 0x18, 0xe8, 0xa1,
0x24, 0x8a, 0xe0, 0x11, 0x00, 0x74, 0x28, 0x52, 0xe2, 0xd2, 0xb0, 0xc7, 0x1b, 0xa5, 0xdd, 0x62,
0xb3, 0xd8, 0x46, 0xe3, 0xcc, 0x29, 0x9f, 0xe4, 0xde, 0x93, 0xd3, 0x33, 0x3e, 0xc9, 0x9c, 0x1b,
0x5a, 0x64, 0x16, 0x88, 0x70, 0x59, 0x1a, 0x27, 0x61, 0x8f, 0xc3, 0x6f, 0x80, 0xe5, 0x75, 0x49,
0x98, 0xb8, 0x1e, 0x4b, 0x5e, 0x87, 0x41, 0x63, 0x63, 0xb7, 0xd0, 0x34, 0x0f, 0xfe, 0xbf, 0xb7,
0x9a, 0xb7, 0xbd, 0xe3, 0x3c, 0xea, 0x58, 0x06, 0xb5, 0xef, 0xbe, 0xc9, 0x9c, 0xb5, 0x49, 0xe6,
0xdc, 0x54, 0xd2, 0x8b, 0x02, 0x08, 0x9b, 0xde, 0x3c, 0xf2, 0x71, 0xe9, 0x97, 0xdf, 0x9c, 0x35,
0xf4, 0x6b, 0x05, 0x98, 0x0b, 0xe3, 0x61, 0x0c, 0x6a, 0x5d, 0x16, 0x53, 0x2e, 0x28, 0xf1, 0xdd,
0x4e, 0xc4, 0xbc, 0x73, 0x9d, 0xe8, 0x27, 0x7f, 0x66, 0xce, 0x87, 0x41, 0x28, 0xba, 0xfd, 0xce,
0x9e, 0xc7, 0xe2, 0x96, 0xc7, 0x78, 0xcc, 0xb8, 0xfe, 0xdc, 0xe7, 0xfe, 0x79, 0x4b, 0x8c, 0x7a,
0x94, 0xef, 0x9d, 0x26, 0x62, 0x92, 0x39, 0xdb, 0x0a, 0xbf, 0x22, 0x85, 0x70, 0x75, 0xe6, 0x69,
0xe7, 0x0e, 0x38, 0x02, 0x55, 0x9f, 0x30, 0xf7, 0x35, 0x4b, 0xcf, 0x35, 0x6d, 0x5d, 0xd2, 0x5e,
0xfe, 0x77, 0xda, 0x38, 0x73, 0xac, 0x27, 0x47, 0x5f, 0x3c, 0x65, 0xe9, 0xb9, 0xd4, 0x9c, 0x64,
0xce, 0x2d, 0x45, 0x5f, 0x56, 0x46, 0xd8, 0xf2, 0x09, 0x9b, 0x85, 0xc1, 0xaf, 0x80, 0x3d, 0x0b,
0xe0, 0xfd, 0x5e, 0x8f, 0xa5, 0x42, 0xef, 0xef, 0xfd, 0x71, 0xe6, 0x54, 0xb5, 0xe4, 0x4b, 0xd5,
0x33, 0xc9, 0x9c, 0xff, 0xad, 0x88, 0xea, 0x31, 0x08, 0x57, 0xb5, 0xac, 0x0e, 0x85, 0x1c, 0x58,
0x34, 0xec, 0xed, 0x1f, 0x3e, 0xd0, 0x2b, 0x2a, 0xc9, 0x15, 0x9d, 0x5d, 0x69, 0x45, 0xe6, 0xc9,
0xe9, 0xd9, 0xfe, 0xe1, 0x83, 0xe9, 0x82, 0xf4, 0x6e, 0x2e, 0xca, 0x22, 0x6c, 0x2a, 0x53, 0xad,
0xe6, 0x14, 0x68, 0xd3, 0xed, 0x12, 0xde, 0x95, 0xb5, 0x52, 0x6e, 0x37, 0xc7, 0x99, 0x03, 0x94,
0xd2, 0xa7, 0x84, 0x77, 0xe7, 0xfb, 0xd2, 0x19, 0x7d, 0x4f, 0x12, 0x11, 0xf6, 0xe3, 0xa9, 0x16,
0x50, 0x83, 0xf3, 0xa8, 0xd9, 0xfc, 0x0f, 0xf5, 0xfc, 0x37, 0xaf, 0x3d, 0xff, 0xc3, 0xf7, 0xcd,
0xff, 0x70, 0x79, 0xfe, 0x2a, 0x66, 0x06, 0x7d, 0xa4, 0xa1, 0x5b, 0xd7, 0x86, 0x3e, 0x7a, 0x1f,
0xf4, 0xd1, 0x32, 0x54, 0xc5, 0xe4, 0xc5, 0xbe, 0x92, 0x89, 0x86, 0x71, 0xfd, 0x62, 0xbf, 0x94,
0xd4, 0xea, 0xcc, 0xa3, 0x70, 0x3f, 0x80, 0xba, 0xc7, 0x12, 0x2e, 0x72, 0x5f, 0xc2, 0x7a, 0x11,
0xd5, 0xcc, 0xb2, 0x64, 0x9e, 0x5e, 0x89, 0x79, 0x57, 0xff, 0xdf, 0xef, 0xd1, 0x43, 0xf8, 0xe6,
0xb2, 0x5b, 0xd1, 0x7b, 0xc0, 0xee, 0x51, 0x41, 0x53, 0xde, 0xe9, 0xa7, 0x81, 0x26, 0x03, 0x49,
0x3e, 0xb9, 0x12, 0x59, 0xff, 0x07, 0xab, 0x5a, 0x08, 0xd7, 0xe6, 0x2e, 0x45, 0xfc, 0x16, 0x54,
0xc3, 0x7c, 0x1a, 0x9d, 0x7e, 0xa4, 0x79, 0xa6, 0xe4, 0x1d, 0x5f, 0x89, 0xa7, 0x7f, 0xe6, 0x65,
0x25, 0x84, 0x2b, 0x53, 0x87, 0x62, 0xf5, 0x01, 0x8c, 0xfb, 0x61, 0xea, 0x06, 0x11, 0xf1, 0x42,
0x9a, 0x6a, 0x9e, 0x25, 0x79, 0xcf, 0xae, 0xc4, 0xbb, 0xad, 0x78, 0x97, 0xd5, 0x10, 0xb6, 0x73,
0xe7, 0x33, 0xe5, 0x53, 0x58, 0x1f, 0x58, 0x1d, 0x9a, 0x46, 0x61, 0xa2, 0x81, 0x15, 0x09, 0x3c,
0xba, 0x12, 0x50, 0xd7, 0xe9, 0xa2, 0x0e, 0xc2, 0xa6, 0x32, 0x67, 0x89, 0xf4, 0x88, 0x20, 0xd1,
0x88, 0x0b, 0xcd, 0xb1, 0xaf, 0x9f, 0xc8, 0x65, 0x25, 0x84, 0x2b, 0x53, 0xc7, 0x6c, 0x45, 0x11,
0x4b, 0x7c, 0x36, 0x5d, 0xd1, 0x8d, 0xeb, 0xaf, 0x68, 0x51, 0x07, 0x61, 0x53, 0x99, 0x92, 0xf2,
0xbc, 0x64, 0x54, 0xed, 0xda, 0xf3, 0x92, 0x51, 0xb3, 0x6d, 0x5c, 0x19, 0xb1, 0x88, 0xb9, 0x83,
0x87, 0x2a, 0x10, 0x9b, 0xf4, 0x3b, 0xc2, 0xa7, 0xff, 0x50, 0x0b, 0x6c, 0xbc, 0x14, 0xf9, 0x45,
0x6c, 0x83, 0xe2, 0x39, 0x1d, 0xa9, 0xbb, 0x08, 0xe7, 0x4d, 0x58, 0x07, 0x1b, 0x03, 0x12, 0xf5,
0xd5, 0x8d, 0x5e, 0xc6, 0xca, 0x40, 0x67, 0xa0, 0xf6, 0x2a, 0x25, 0x09, 0x27, 0x9e, 0x08, 0x59,
0xf2, 0x82, 0x05, 0x1c, 0x42, 0x50, 0x92, 0x67, 0xa2, 0x1a, 0x2b, 0xdb, 0xf0, 0x23, 0x50, 0x8a,
0x58, 0xc0, 0x1b, 0xeb, 0xbb, 0xc5, 0xa6, 0x79, 0x70, 0xeb, 0xf2, 0x9d, 0xfa, 0x82, 0x05, 0x58,
0x86, 0xa0, 0xdf, 0xd7, 0x41, 0xf1, 0x05, 0x0b, 0x60, 0x03, 0x6c, 0x11, 0xdf, 0x4f, 0x29, 0xe7,
0x5a, 0x69, 0x6a, 0xc2, 0x6d, 0xb0, 0x29, 0x58, 0x2f, 0xf4, 0x94, 0x5c, 0x19, 0x6b, 0x2b, 0x07,
0xfb, 0x44, 0x10, 0x79, 0xab, 0x58, 0x58, 0xb6, 0xe1, 0x01, 0xb0, 0xe4, 0xca, 0xdc, 0xa4, 0x1f,
0x77, 0x68, 0x2a, 0x2f, 0x87, 0x52, 0xbb, 0x76, 0x91, 0x39, 0xa6, 0xf4, 0x7f, 0x2e, 0xdd, 0x78,
0xd1, 0x80, 0xf7, 0xc0, 0x96, 0x18, 0x2e, 0x9e, 0xeb, 0x37, 0x2f, 0x32, 0xa7, 0x26, 0xe6, 0xcb,
0xcc, 0x8f, 0x6d, 0xbc, 0x29, 0x86, 0xf2, 0xf8, 0x6e, 0x01, 0x43, 0x0c, 0xdd, 0x30, 0xf1, 0xe9,
0x50, 0x1e, 0xdd, 0xa5, 0x76, 0xfd, 0x22, 0x73, 0xec, 0x85, 0xf0, 0xd3, 0xbc, 0x0f, 0x6f, 0x89,
0xa1, 0x6c, 0xc0, 0x7b, 0x00, 0xa8, 0x29, 0x49, 0x82, 0x3a, 0x78, 0x2b, 0x17, 0x99, 0x53, 0x96,
0x5e, 0xa9, 0x3d, 0x6f, 0x42, 0x04, 0x36, 0x94, 0xb6, 0x21, 0xb5, 0xad, 0x8b, 0xcc, 0x31, 0x22,
0x16, 0x28, 0x4d, 0xd5, 0x95, 0xa7, 0x2a, 0xa5, 0x31, 0x1b, 0x50, 0x5f, 0x9e, 0x6d, 0x06, 0x9e,
0x9a, 0xe8, 0xa7, 0x75, 0x60, 0xbc, 0x1a, 0x62, 0xca, 0xfb, 0x91, 0x80, 0x4f, 0x81, 0xed, 0xb1,
0x44, 0xa4, 0xc4, 0x13, 0xee, 0x52, 0x6a, 0xdb, 0x77, 0xe7, 0xe7, 0xcc, 0x6a, 0x04, 0xc2, 0xb5,
0xa9, 0xeb, 0x48, 0xe7, 0xbf, 0x0e, 0x36, 0x3a, 0x11, 0x63, 0xb1, 0xac, 0x04, 0x0b, 0x2b, 0x03,
0x62, 0x99, 0x35, 0xb9, 0xcb, 0x45, 0xf9, 0x72, 0xfa, 0xe0, 0xf2, 0x2e, 0xaf, 0x94, 0x4a, 0x7b,
0x5b, 0xbf, 0x9e, 0xaa, 0x8a, 0xad, 0xc7, 0xa3, 0x3c, 0xb7, 0xb2, 0x94, 0x6c, 0x50, 0x4c, 0xa9,
0x90, 0x9b, 0x66, 0xe1, 0xbc, 0x09, 0xef, 0x00, 0x23, 0xa5, 0x03, 0x9a, 0x0a, 0xea, 0xcb, 0xcd,
0x31, 0xf0, 0xcc, 0x86, 0xb7, 0x81, 0x11, 0x10, 0xee, 0xf6, 0x39, 0xf5, 0xd5, 0x4e, 0xe0, 0xad,
0x80, 0xf0, 0x2f, 0x39, 0xf5, 0x1f, 0x97, 0x7e, 0xcc, 0x1f, 0x5f, 0x04, 0x98, 0x47, 0x9e, 0x47,
0x39, 0x7f, 0xd5, 0xef, 0x45, 0xf4, 0x5f, 0x2a, 0xec, 0x00, 0x58, 0x5c, 0xb0, 0x94, 0x04, 0xd4,
0x3d, 0xa7, 0x23, 0x5d, 0x67, 0xaa, 0x6a, 0xb4, 0xff, 0x33, 0x3a, 0xe2, 0x78, 0xd1, 0x50, 0x88,
0x76, 0xfb, 0xcd, 0x78, 0xa7, 0xf0, 0x76, 0xbc, 0x53, 0xf8, 0x7b, 0xbc, 0x53, 0xf8, 0xf9, 0xdd,
0xce, 0xda, 0xdb, 0x77, 0x3b, 0x6b, 0x7f, 0xbc, 0xdb, 0x59, 0xfb, 0xba, 0xb9, 0xf0, 0x3b, 0x8b,
0x2e, 0x49, 0x79, 0xc8, 0x5b, 0xf3, 0xe7, 0xfa, 0x50, 0x3e, 0xd8, 0xe5, 0x4f, 0xdd, 0xd9, 0x94,
0x0f, 0xf1, 0x87, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x9c, 0x5c, 0x6d, 0xc5, 0xce, 0x0b, 0x00,
0x00,
}
func (m *Params) Marshal() (dAtA []byte, err error) {
@ -637,16 +627,6 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
if m.NoBaseFee {
i--
if m.NoBaseFee {
dAtA[i] = 1
} else {
dAtA[i] = 0
}
i--
dAtA[i] = 0x30
}
{
size, err := m.ChainConfig.MarshalToSizedBuffer(dAtA[:i])
if err != nil {
@ -1216,9 +1196,6 @@ func (m *Params) Size() (n int) {
}
l = m.ChainConfig.Size()
n += 1 + l + sovEvm(uint64(l))
if m.NoBaseFee {
n += 2
}
return n
}
@ -1633,26 +1610,6 @@ func (m *Params) Unmarshal(dAtA []byte) error {
return err
}
iNdEx = postIndex
case 6:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field NoBaseFee", wireType)
}
var v int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowEvm
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
m.NoBaseFee = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := skipEvm(dAtA[iNdEx:])

View File

@ -38,14 +38,13 @@ func ParamKeyTable() paramtypes.KeyTable {
}
// NewParams creates a new Params instance
func NewParams(evmDenom string, enableCreate, enableCall bool, config ChainConfig, noBaseFee bool, extraEIPs ...int64) Params {
func NewParams(evmDenom string, enableCreate, enableCall bool, config ChainConfig, extraEIPs ...int64) Params {
return Params{
EvmDenom: evmDenom,
EnableCreate: enableCreate,
EnableCall: enableCall,
ExtraEIPs: extraEIPs,
ChainConfig: config,
NoBaseFee: noBaseFee,
}
}
@ -58,7 +57,6 @@ func DefaultParams() Params {
EnableCall: true,
ChainConfig: DefaultChainConfig(),
ExtraEIPs: nil,
NoBaseFee: true,
}
}
@ -76,7 +74,6 @@ func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs {
paramtypes.NewParamSetPair(ParamStoreKeyEnableCall, &p.EnableCall, validateBool),
paramtypes.NewParamSetPair(ParamStoreKeyExtraEIPs, &p.ExtraEIPs, validateEIPs),
paramtypes.NewParamSetPair(ParamStoreKeyChainConfig, &p.ChainConfig, validateChainConfig),
paramtypes.NewParamSetPair(ParamStoreKeyNoBaseFee, &p.NoBaseFee, validateBool),
}
}

View File

@ -15,7 +15,7 @@ func TestParamsValidate(t *testing.T) {
{"default", DefaultParams(), false},
{
"valid",
NewParams("ara", true, true, DefaultChainConfig(), true, 2929, 1884, 1344),
NewParams("ara", true, true, DefaultChainConfig(), 2929, 1884, 1344),
false,
},
{
@ -40,7 +40,7 @@ func TestParamsValidate(t *testing.T) {
},
{
"invalid chain config",
NewParams("ara", true, true, ChainConfig{}, true, 2929, 1884, 1344),
NewParams("ara", true, true, ChainConfig{}, 2929, 1884, 1344),
false,
},
}

View File

@ -1217,87 +1217,86 @@ func init() {
func init() { proto.RegisterFile("ethermint/evm/v1/query.proto", fileDescriptor_e15a877459347994) }
var fileDescriptor_e15a877459347994 = []byte{
// 1279 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0x4f, 0x6f, 0x13, 0x47,
0x14, 0xf7, 0x12, 0x63, 0x87, 0x17, 0xa0, 0xe9, 0x10, 0x20, 0x6c, 0x83, 0x63, 0x06, 0x92, 0x38,
0x10, 0x76, 0x89, 0x5b, 0x21, 0x15, 0xa9, 0x2a, 0x38, 0x0a, 0x14, 0x01, 0x15, 0x35, 0x51, 0x0f,
0xbd, 0x58, 0xe3, 0xf5, 0x74, 0x6d, 0xc5, 0xde, 0x31, 0x9e, 0xb5, 0xeb, 0x34, 0x4d, 0x5b, 0x55,
0x2a, 0x42, 0xe2, 0x52, 0xa9, 0xf7, 0x0a, 0xa9, 0x1f, 0xa0, 0x5f, 0x83, 0x23, 0x52, 0x2f, 0x55,
0x0f, 0xa8, 0x4a, 0x7a, 0xe8, 0xc7, 0xa8, 0xe6, 0xcf, 0xda, 0xbb, 0x5e, 0x6f, 0x1c, 0xaa, 0x9e,
0xb2, 0x33, 0xf3, 0xde, 0xfb, 0xfd, 0xe6, 0xfd, 0x99, 0x5f, 0x0c, 0x0b, 0xd4, 0xaf, 0xd3, 0x4e,
0xab, 0xe1, 0xf9, 0x36, 0xed, 0xb5, 0xec, 0xde, 0xba, 0xfd, 0xb4, 0x4b, 0x3b, 0x3b, 0x56, 0xbb,
0xc3, 0x7c, 0x86, 0x66, 0x07, 0xa7, 0x16, 0xed, 0xb5, 0xac, 0xde, 0xba, 0x39, 0xe7, 0x32, 0x97,
0xc9, 0x43, 0x5b, 0x7c, 0x29, 0x3b, 0xf3, 0xaa, 0xc3, 0x78, 0x8b, 0x71, 0xbb, 0x4a, 0x38, 0x55,
0x01, 0xec, 0xde, 0x7a, 0x95, 0xfa, 0x64, 0xdd, 0x6e, 0x13, 0xb7, 0xe1, 0x11, 0xbf, 0xc1, 0x3c,
0x6d, 0xbb, 0xe0, 0x32, 0xe6, 0x36, 0xa9, 0x4d, 0xda, 0x0d, 0x9b, 0x78, 0x1e, 0xf3, 0xe5, 0x21,
0xd7, 0xa7, 0x66, 0x8c, 0x8f, 0x00, 0x56, 0x67, 0x17, 0x62, 0x67, 0x7e, 0x5f, 0x1d, 0xe1, 0x0f,
0xe1, 0xcc, 0x67, 0x02, 0xf6, 0x8e, 0xe3, 0xb0, 0xae, 0xe7, 0x97, 0xe9, 0xd3, 0x2e, 0xe5, 0x3e,
0x9a, 0x87, 0x2c, 0xa9, 0xd5, 0x3a, 0x94, 0xf3, 0x79, 0x23, 0x6f, 0x14, 0x4e, 0x94, 0x83, 0xe5,
0xad, 0xe9, 0xe7, 0x2f, 0x17, 0x53, 0xff, 0xbc, 0x5c, 0x4c, 0x61, 0x07, 0xe6, 0xa2, 0xae, 0xbc,
0xcd, 0x3c, 0x4e, 0x85, 0x6f, 0x95, 0x34, 0x89, 0xe7, 0xd0, 0xc0, 0x57, 0x2f, 0xd1, 0x7b, 0x70,
0xc2, 0x61, 0x35, 0x5a, 0xa9, 0x13, 0x5e, 0x9f, 0x3f, 0x26, 0xcf, 0xa6, 0xc5, 0xc6, 0x27, 0x84,
0xd7, 0xd1, 0x1c, 0x1c, 0xf7, 0x98, 0x70, 0x9a, 0xca, 0x1b, 0x85, 0x74, 0x59, 0x2d, 0xf0, 0xc7,
0x70, 0x41, 0x82, 0x6c, 0xc8, 0x3c, 0xfd, 0x07, 0x96, 0xcf, 0x0c, 0x30, 0xc7, 0x45, 0xd0, 0x64,
0x97, 0xe0, 0xb4, 0x2a, 0x41, 0x25, 0x1a, 0xe9, 0x94, 0xda, 0xbd, 0xa3, 0x36, 0x91, 0x09, 0xd3,
0x5c, 0x80, 0x0a, 0x7e, 0xc7, 0x24, 0xbf, 0xc1, 0x5a, 0x84, 0x20, 0x2a, 0x6a, 0xc5, 0xeb, 0xb6,
0xaa, 0xb4, 0xa3, 0x6f, 0x70, 0x4a, 0xef, 0x7e, 0x2a, 0x37, 0xf1, 0x03, 0x58, 0x90, 0x3c, 0x3e,
0x27, 0xcd, 0x46, 0x8d, 0xf8, 0xac, 0x33, 0x72, 0x99, 0x4b, 0x70, 0xd2, 0x61, 0xde, 0x28, 0x8f,
0x19, 0xb1, 0x77, 0x27, 0x76, 0xab, 0x17, 0x06, 0x5c, 0x4c, 0x88, 0xa6, 0x2f, 0xb6, 0x02, 0xef,
0x04, 0xac, 0xa2, 0x11, 0x03, 0xb2, 0xff, 0xe3, 0xd5, 0x82, 0x26, 0x2a, 0xa9, 0x3a, 0xbf, 0x4d,
0x79, 0x6e, 0xe8, 0x26, 0x1a, 0xb8, 0x4e, 0x6a, 0x22, 0xfc, 0x40, 0x83, 0x3d, 0xf1, 0x59, 0x87,
0xb8, 0x93, 0xc1, 0xd0, 0x2c, 0x4c, 0x6d, 0xd3, 0x1d, 0xdd, 0x6f, 0xe2, 0x33, 0x04, 0xbf, 0xa6,
0xe1, 0x07, 0xc1, 0x34, 0xfc, 0x1c, 0x1c, 0xef, 0x91, 0x66, 0x37, 0x00, 0x57, 0x0b, 0x7c, 0x13,
0x66, 0x75, 0x2b, 0xd5, 0xde, 0xea, 0x92, 0x2b, 0xf0, 0x6e, 0xc8, 0x4f, 0x43, 0x20, 0x48, 0x8b,
0xde, 0x97, 0x5e, 0x27, 0xcb, 0xf2, 0x1b, 0x17, 0x01, 0x49, 0xc3, 0xad, 0xfe, 0x43, 0xe6, 0xf2,
0x00, 0x02, 0x41, 0x5a, 0x4e, 0x8c, 0x8a, 0x2f, 0xbf, 0x43, 0xc1, 0x6f, 0xeb, 0x7c, 0x04, 0x3e,
0x3a, 0xfc, 0x2a, 0xa4, 0x9b, 0xcc, 0x15, 0xa4, 0xa6, 0x0a, 0x33, 0xc5, 0xb3, 0xd6, 0xe8, 0x83,
0x64, 0x3d, 0x64, 0x6e, 0x59, 0x9a, 0xe0, 0x3d, 0x38, 0xab, 0x6a, 0xd0, 0x64, 0xce, 0xf6, 0x04,
0x60, 0x74, 0x17, 0x60, 0xf8, 0x32, 0xc9, 0xa4, 0xce, 0x14, 0x97, 0x2d, 0x35, 0x2d, 0x96, 0x78,
0xc6, 0x2c, 0xf5, 0x0e, 0xea, 0x67, 0xcc, 0x7a, 0x3c, 0xac, 0x51, 0x39, 0xe4, 0x19, 0xba, 0xc0,
0xaf, 0x06, 0x9c, 0x1b, 0xc5, 0xd7, 0x97, 0xb8, 0x0d, 0x59, 0xbf, 0x5f, 0x09, 0xdd, 0xe3, 0x52,
0xfc, 0x1e, 0x5b, 0x1d, 0xe2, 0x71, 0xe2, 0x88, 0xa0, 0xc2, 0xb7, 0x94, 0x7e, 0xf5, 0x66, 0x31,
0x55, 0xce, 0xf8, 0x32, 0x1d, 0xe8, 0xde, 0x18, 0xba, 0x2b, 0x13, 0xe9, 0x2a, 0xf8, 0x30, 0x5f,
0x7c, 0x23, 0x4c, 0xb2, 0xd4, 0x64, 0xac, 0x15, 0x64, 0xe9, 0x1c, 0x64, 0xea, 0xb4, 0xe1, 0xd6,
0x7d, 0x99, 0xa7, 0xa9, 0xb2, 0x5e, 0x61, 0x1b, 0xce, 0xc7, 0x3c, 0x86, 0xed, 0x55, 0x15, 0x1b,
0xba, 0xf8, 0x6a, 0x81, 0xe7, 0x74, 0xf5, 0x1f, 0x93, 0x0e, 0x69, 0x05, 0x45, 0xc0, 0x8f, 0x74,
0x7d, 0x83, 0x5d, 0x1d, 0xe2, 0x26, 0x64, 0xda, 0x72, 0x47, 0xc6, 0x98, 0x29, 0xce, 0xc7, 0x33,
0xa3, 0x3c, 0x82, 0x84, 0x28, 0x6b, 0x7c, 0x76, 0x30, 0xab, 0x9c, 0xde, 0xa5, 0x41, 0x69, 0x30,
0x19, 0xcc, 0xa1, 0xde, 0xd6, 0x30, 0xf7, 0x61, 0x5a, 0x64, 0xa9, 0xf2, 0x25, 0xd5, 0xb3, 0x50,
0xb2, 0x44, 0xb8, 0x3f, 0xdf, 0x2c, 0x2e, 0xbb, 0x0d, 0xbf, 0xde, 0xad, 0x5a, 0x0e, 0x6b, 0xd9,
0x5a, 0xc5, 0xd4, 0x9f, 0xeb, 0xbc, 0xb6, 0x6d, 0xfb, 0x3b, 0x6d, 0xca, 0xad, 0xfb, 0x9e, 0x2f,
0x06, 0x57, 0x86, 0xc4, 0xd7, 0x75, 0x3e, 0x9e, 0x08, 0xe1, 0x72, 0x36, 0x48, 0xb3, 0x19, 0x9e,
0x85, 0x1a, 0xf1, 0x49, 0x30, 0x0b, 0xe2, 0x1b, 0x7f, 0x04, 0xa7, 0x37, 0xfd, 0xba, 0x32, 0x1b,
0xb4, 0x23, 0xe9, 0xb8, 0x3c, 0xb0, 0x12, 0xdf, 0xe8, 0x3c, 0x64, 0x5d, 0xc2, 0x2b, 0x0e, 0x69,
0xeb, 0xc7, 0x2b, 0xe3, 0x12, 0xbe, 0x41, 0xda, 0x78, 0x05, 0xce, 0x6c, 0x72, 0xbf, 0xd1, 0x22,
0x3e, 0xbd, 0x47, 0x86, 0x69, 0x9b, 0x85, 0x29, 0x97, 0xa8, 0x10, 0xe9, 0xb2, 0xf8, 0x2c, 0x7e,
0x7f, 0x1a, 0x8e, 0x4b, 0x5e, 0xe8, 0x47, 0x03, 0xb2, 0xfa, 0x19, 0x45, 0x4b, 0xf1, 0x74, 0x8e,
0xd1, 0x49, 0x73, 0x79, 0x92, 0x99, 0x82, 0xc5, 0xd7, 0x7e, 0xf8, 0xfd, 0xef, 0x9f, 0x8f, 0x2d,
0xa1, 0xcb, 0x76, 0x4c, 0x8a, 0xf5, 0x53, 0x6a, 0xef, 0xea, 0x77, 0x63, 0x0f, 0xfd, 0x62, 0xc0,
0xa9, 0x88, 0x5a, 0xa1, 0x6b, 0x09, 0x30, 0xe3, 0x54, 0xd1, 0x5c, 0x3b, 0x9a, 0xb1, 0x66, 0x56,
0x94, 0xcc, 0xd6, 0xd0, 0xd5, 0x38, 0xb3, 0x40, 0x18, 0x63, 0x04, 0x7f, 0x33, 0x60, 0x76, 0x54,
0x78, 0x90, 0x95, 0x00, 0x9b, 0xa0, 0x77, 0xa6, 0x7d, 0x64, 0x7b, 0xcd, 0xf4, 0x96, 0x64, 0xfa,
0x01, 0x2a, 0xc6, 0x99, 0xf6, 0x02, 0x9f, 0x21, 0xd9, 0xb0, 0x96, 0xee, 0xa1, 0x67, 0x06, 0x64,
0xb5, 0xc4, 0x24, 0x96, 0x36, 0xaa, 0x5e, 0x89, 0xa5, 0x1d, 0x51, 0x2a, 0xbc, 0x26, 0x69, 0x2d,
0xa3, 0x2b, 0x71, 0x5a, 0x5a, 0xb2, 0x78, 0x28, 0x75, 0x2f, 0x0c, 0xc8, 0x6a, 0xb1, 0x49, 0x24,
0x12, 0x55, 0xb6, 0x44, 0x22, 0x23, 0x9a, 0x85, 0xd7, 0x25, 0x91, 0x6b, 0x68, 0x35, 0x4e, 0x84,
0x2b, 0xd3, 0x21, 0x0f, 0x7b, 0x77, 0x9b, 0xee, 0xec, 0xa1, 0xaf, 0x21, 0x2d, 0x34, 0x09, 0xe1,
0xc4, 0x96, 0x19, 0x08, 0x9d, 0x79, 0xf9, 0x50, 0x1b, 0xcd, 0x61, 0x55, 0x72, 0xb8, 0x8c, 0x2e,
0x8d, 0xeb, 0xa6, 0x5a, 0x24, 0x13, 0xdf, 0x41, 0x46, 0x49, 0x16, 0xba, 0x92, 0x10, 0x39, 0xa2,
0x82, 0xe6, 0xd2, 0x04, 0x2b, 0xcd, 0xa0, 0x20, 0x19, 0x60, 0x94, 0xb7, 0xc7, 0xfc, 0xd3, 0x2b,
0xa5, 0xc4, 0xde, 0x15, 0x42, 0x26, 0x4b, 0x71, 0x62, 0x20, 0x39, 0x68, 0x25, 0xa9, 0xdc, 0x23,
0xa2, 0x68, 0x16, 0x26, 0x1b, 0x4e, 0x1e, 0xfa, 0xaa, 0x30, 0x8e, 0xb0, 0x79, 0x6e, 0x00, 0x0c,
0x95, 0x02, 0x1d, 0x8a, 0x12, 0x96, 0x1f, 0x73, 0xf5, 0x08, 0x96, 0x9a, 0xd0, 0x92, 0x24, 0xb4,
0x88, 0x2e, 0x26, 0x11, 0x92, 0x3a, 0x84, 0xbe, 0x82, 0x8c, 0x92, 0x8e, 0xc4, 0xca, 0x44, 0x14,
0x2a, 0xb1, 0x32, 0x51, 0xc5, 0xc2, 0x79, 0x89, 0x6e, 0xa2, 0xf9, 0x38, 0xba, 0xd2, 0x26, 0xf4,
0x8d, 0x18, 0x52, 0x29, 0x16, 0x87, 0x0c, 0x69, 0x58, 0xb6, 0x0e, 0x19, 0xd2, 0x88, 0x8c, 0x61,
0x2c, 0xb1, 0x17, 0x90, 0x39, 0x6e, 0x48, 0x95, 0xbc, 0xa1, 0x3e, 0x64, 0xb5, 0xe0, 0xa0, 0x7c,
0x3c, 0x6c, 0x54, 0x8b, 0xcc, 0x31, 0xed, 0xf2, 0x88, 0xbb, 0x9b, 0x62, 0x8f, 0x76, 0x5b, 0x5b,
0xfd, 0xa3, 0x20, 0x53, 0xbf, 0x5e, 0x71, 0x04, 0xdc, 0xb7, 0x30, 0x13, 0xd2, 0xaa, 0x23, 0xa0,
0x8f, 0xc9, 0xce, 0x18, 0xb1, 0xc3, 0xcb, 0x12, 0x3b, 0x8f, 0x72, 0x63, 0xb0, 0xb5, 0x79, 0xc5,
0x25, 0xbc, 0x54, 0x7a, 0xb5, 0x9f, 0x33, 0x5e, 0xef, 0xe7, 0x8c, 0xbf, 0xf6, 0x73, 0xc6, 0x4f,
0x07, 0xb9, 0xd4, 0xeb, 0x83, 0x5c, 0xea, 0x8f, 0x83, 0x5c, 0xea, 0x8b, 0x42, 0x48, 0xe4, 0xfd,
0x3a, 0xe9, 0xf0, 0x06, 0x0f, 0xc5, 0xea, 0xcb, 0x68, 0x52, 0xea, 0xab, 0x19, 0xf9, 0x7b, 0xf2,
0xfd, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x8b, 0x1a, 0xe1, 0x0e, 0x18, 0x0f, 0x00, 0x00,
// 1260 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xcf, 0x6f, 0x13, 0xc7,
0x17, 0xf7, 0x12, 0x63, 0x87, 0x17, 0xc2, 0x37, 0xdf, 0x21, 0x40, 0xd8, 0x06, 0xc7, 0x0c, 0x24,
0x71, 0x20, 0xec, 0x12, 0xb7, 0x42, 0x2a, 0x52, 0x55, 0xe2, 0x28, 0x50, 0x04, 0x54, 0xd4, 0x44,
0x3d, 0xf4, 0x62, 0x8d, 0xd7, 0xd3, 0xb5, 0x15, 0x7b, 0xc7, 0x78, 0xd6, 0xae, 0xd3, 0x28, 0xad,
0x84, 0x54, 0x84, 0xc4, 0xa5, 0x52, 0xef, 0x15, 0x52, 0xff, 0x80, 0xfe, 0x1b, 0x1c, 0x91, 0x7a,
0xa9, 0x7a, 0x40, 0x55, 0xd2, 0x43, 0xff, 0x8c, 0x6a, 0x7e, 0xac, 0xbd, 0xeb, 0xf5, 0xe2, 0x50,
0xf5, 0x94, 0x9d, 0x37, 0xef, 0xbd, 0xcf, 0xe7, 0xbd, 0x37, 0x33, 0x9f, 0x18, 0x16, 0xa9, 0x5f,
0xa7, 0x9d, 0x56, 0xc3, 0xf3, 0x6d, 0xda, 0x6b, 0xd9, 0xbd, 0x0d, 0xfb, 0x69, 0x97, 0x76, 0xf6,
0xac, 0x76, 0x87, 0xf9, 0x0c, 0xcd, 0x0d, 0x76, 0x2d, 0xda, 0x6b, 0x59, 0xbd, 0x0d, 0x73, 0xde,
0x65, 0x2e, 0x93, 0x9b, 0xb6, 0xf8, 0x52, 0x7e, 0xe6, 0x35, 0x87, 0xf1, 0x16, 0xe3, 0x76, 0x95,
0x70, 0xaa, 0x12, 0xd8, 0xbd, 0x8d, 0x2a, 0xf5, 0xc9, 0x86, 0xdd, 0x26, 0x6e, 0xc3, 0x23, 0x7e,
0x83, 0x79, 0xda, 0x77, 0xd1, 0x65, 0xcc, 0x6d, 0x52, 0x9b, 0xb4, 0x1b, 0x36, 0xf1, 0x3c, 0xe6,
0xcb, 0x4d, 0xae, 0x77, 0xcd, 0x18, 0x1f, 0x01, 0xac, 0xf6, 0x2e, 0xc6, 0xf6, 0xfc, 0xbe, 0xda,
0xc2, 0x1f, 0xc3, 0xd9, 0x2f, 0x04, 0xec, 0xa6, 0xe3, 0xb0, 0xae, 0xe7, 0x97, 0xe9, 0xd3, 0x2e,
0xe5, 0x3e, 0x5a, 0x80, 0x2c, 0xa9, 0xd5, 0x3a, 0x94, 0xf3, 0x05, 0x23, 0x6f, 0x14, 0x4e, 0x95,
0x83, 0xe5, 0xed, 0xe9, 0x17, 0xaf, 0x96, 0x52, 0x7f, 0xbf, 0x5a, 0x4a, 0x61, 0x07, 0xe6, 0xa3,
0xa1, 0xbc, 0xcd, 0x3c, 0x4e, 0x45, 0x6c, 0x95, 0x34, 0x89, 0xe7, 0xd0, 0x20, 0x56, 0x2f, 0xd1,
0x07, 0x70, 0xca, 0x61, 0x35, 0x5a, 0xa9, 0x13, 0x5e, 0x5f, 0x38, 0x21, 0xf7, 0xa6, 0x85, 0xe1,
0x33, 0xc2, 0xeb, 0x68, 0x1e, 0x4e, 0x7a, 0x4c, 0x04, 0x4d, 0xe5, 0x8d, 0x42, 0xba, 0xac, 0x16,
0xf8, 0x53, 0xb8, 0x28, 0x41, 0xb6, 0x64, 0x9f, 0xfe, 0x05, 0xcb, 0xe7, 0x06, 0x98, 0xe3, 0x32,
0x68, 0xb2, 0xcb, 0x70, 0x46, 0x8d, 0xa0, 0x12, 0xcd, 0x34, 0xab, 0xac, 0x9b, 0xca, 0x88, 0x4c,
0x98, 0xe6, 0x02, 0x54, 0xf0, 0x3b, 0x21, 0xf9, 0x0d, 0xd6, 0x22, 0x05, 0x51, 0x59, 0x2b, 0x5e,
0xb7, 0x55, 0xa5, 0x1d, 0x5d, 0xc1, 0xac, 0xb6, 0x7e, 0x2e, 0x8d, 0xf8, 0x01, 0x2c, 0x4a, 0x1e,
0x5f, 0x92, 0x66, 0xa3, 0x46, 0x7c, 0xd6, 0x19, 0x29, 0xe6, 0x32, 0x9c, 0x76, 0x98, 0x37, 0xca,
0x63, 0x46, 0xd8, 0x36, 0x63, 0x55, 0xbd, 0x34, 0xe0, 0x52, 0x42, 0x36, 0x5d, 0xd8, 0x2a, 0xfc,
0x2f, 0x60, 0x15, 0xcd, 0x18, 0x90, 0xfd, 0x0f, 0x4b, 0x0b, 0x0e, 0x51, 0x49, 0xcd, 0xf9, 0x7d,
0xc6, 0x73, 0x53, 0x1f, 0xa2, 0x41, 0xe8, 0xa4, 0x43, 0x84, 0x1f, 0x68, 0xb0, 0x27, 0x3e, 0xeb,
0x10, 0x77, 0x32, 0x18, 0x9a, 0x83, 0xa9, 0x5d, 0xba, 0xa7, 0xcf, 0x9b, 0xf8, 0x0c, 0xc1, 0xaf,
0x6b, 0xf8, 0x41, 0x32, 0x0d, 0x3f, 0x0f, 0x27, 0x7b, 0xa4, 0xd9, 0x0d, 0xc0, 0xd5, 0x02, 0xdf,
0x82, 0x39, 0x7d, 0x94, 0x6a, 0xef, 0x55, 0xe4, 0x2a, 0xfc, 0x3f, 0x14, 0xa7, 0x21, 0x10, 0xa4,
0xc5, 0xd9, 0x97, 0x51, 0xa7, 0xcb, 0xf2, 0x1b, 0x17, 0x01, 0x49, 0xc7, 0x9d, 0xfe, 0x43, 0xe6,
0xf2, 0x00, 0x02, 0x41, 0x5a, 0xde, 0x18, 0x95, 0x5f, 0x7e, 0x87, 0x92, 0xdf, 0xd1, 0xfd, 0x08,
0x62, 0x74, 0xfa, 0x35, 0x48, 0x37, 0x99, 0x2b, 0x48, 0x4d, 0x15, 0x66, 0x8a, 0xe7, 0xac, 0xd1,
0x07, 0xc9, 0x7a, 0xc8, 0xdc, 0xb2, 0x74, 0xc1, 0x07, 0x70, 0x4e, 0xcd, 0xa0, 0xc9, 0x9c, 0xdd,
0x09, 0xc0, 0xe8, 0x2e, 0xc0, 0xf0, 0x65, 0x92, 0x4d, 0x9d, 0x29, 0xae, 0x58, 0xea, 0xb6, 0x58,
0xe2, 0x19, 0xb3, 0xd4, 0x3b, 0xa8, 0x9f, 0x31, 0xeb, 0xf1, 0x70, 0x46, 0xe5, 0x50, 0x64, 0xa8,
0x80, 0x5f, 0x0c, 0x38, 0x3f, 0x8a, 0xaf, 0x8b, 0xb8, 0x03, 0x59, 0xbf, 0x5f, 0x09, 0xd5, 0x71,
0x39, 0x5e, 0xc7, 0x4e, 0x87, 0x78, 0x9c, 0x38, 0x22, 0xa9, 0x88, 0x2d, 0xa5, 0x5f, 0xbf, 0x5d,
0x4a, 0x95, 0x33, 0xbe, 0x6c, 0x07, 0xba, 0x37, 0x86, 0xee, 0xea, 0x44, 0xba, 0x0a, 0x3e, 0xcc,
0x17, 0xdf, 0x0c, 0x93, 0x2c, 0x35, 0x19, 0x6b, 0x05, 0x5d, 0x3a, 0x0f, 0x99, 0x3a, 0x6d, 0xb8,
0x75, 0x5f, 0xf6, 0x69, 0xaa, 0xac, 0x57, 0xd8, 0x86, 0x0b, 0xb1, 0x88, 0xe1, 0xf1, 0xaa, 0x0a,
0x83, 0x1e, 0xbe, 0x5a, 0xe0, 0x79, 0x3d, 0xfd, 0xc7, 0xa4, 0x43, 0x5a, 0xc1, 0x10, 0xf0, 0x23,
0x3d, 0xdf, 0xc0, 0xaa, 0x53, 0xdc, 0x82, 0x4c, 0x5b, 0x5a, 0x64, 0x8e, 0x99, 0xe2, 0x42, 0xbc,
0x33, 0x2a, 0x22, 0x68, 0x88, 0xf2, 0xc6, 0xe7, 0x06, 0x77, 0x95, 0xd3, 0xbb, 0x34, 0x18, 0x0d,
0x26, 0x83, 0x7b, 0xa8, 0xcd, 0x1a, 0xe6, 0x3e, 0x4c, 0x8b, 0x2e, 0x55, 0xbe, 0xa6, 0xfa, 0x2e,
0x94, 0x2c, 0x91, 0xee, 0x8f, 0xb7, 0x4b, 0x2b, 0x6e, 0xc3, 0xaf, 0x77, 0xab, 0x96, 0xc3, 0x5a,
0xb6, 0x56, 0x31, 0xf5, 0xe7, 0x06, 0xaf, 0xed, 0xda, 0xfe, 0x5e, 0x9b, 0x72, 0xeb, 0xbe, 0xe7,
0x8b, 0x8b, 0x2b, 0x53, 0xe2, 0x1b, 0xba, 0x1f, 0x4f, 0x84, 0x70, 0x39, 0x5b, 0xa4, 0xd9, 0x0c,
0xdf, 0x85, 0x1a, 0xf1, 0x49, 0x70, 0x17, 0xc4, 0x37, 0xfe, 0x04, 0xce, 0x6c, 0xfb, 0x75, 0xe5,
0x36, 0x38, 0x8e, 0xa4, 0xe3, 0xf2, 0xc0, 0x4b, 0x7c, 0xa3, 0x0b, 0x90, 0x75, 0x09, 0xaf, 0x38,
0xa4, 0xad, 0x1f, 0xaf, 0x8c, 0x4b, 0xf8, 0x16, 0x69, 0xe3, 0x55, 0x38, 0xbb, 0xcd, 0xfd, 0x46,
0x8b, 0xf8, 0xf4, 0x1e, 0x19, 0xb6, 0x6d, 0x0e, 0xa6, 0x5c, 0xa2, 0x52, 0xa4, 0xcb, 0xe2, 0xb3,
0xf8, 0x6c, 0x16, 0x4e, 0x4a, 0x5e, 0xe8, 0x07, 0x03, 0xb2, 0xfa, 0x19, 0x45, 0xcb, 0xf1, 0x76,
0x8e, 0xd1, 0x49, 0x73, 0x65, 0x92, 0x9b, 0x82, 0xc5, 0xd7, 0x9f, 0xfd, 0xf6, 0xd7, 0x4f, 0x27,
0x96, 0xd1, 0x15, 0x3b, 0x26, 0xc5, 0xfa, 0x29, 0xb5, 0xf7, 0xf5, 0xbb, 0x71, 0x80, 0x7e, 0x36,
0x60, 0x36, 0xa2, 0x56, 0xe8, 0x7a, 0x02, 0xcc, 0x38, 0x55, 0x34, 0xd7, 0x8f, 0xe7, 0xac, 0x99,
0x15, 0x25, 0xb3, 0x75, 0x74, 0x2d, 0xce, 0x2c, 0x10, 0xc6, 0x18, 0xc1, 0x5f, 0x0d, 0x98, 0x1b,
0x15, 0x1e, 0x64, 0x25, 0xc0, 0x26, 0xe8, 0x9d, 0x69, 0x1f, 0xdb, 0x5f, 0x33, 0xbd, 0x2d, 0x99,
0x7e, 0x84, 0x8a, 0x71, 0xa6, 0xbd, 0x20, 0x66, 0x48, 0x36, 0xac, 0xa5, 0x07, 0xe8, 0xb9, 0x01,
0x59, 0x2d, 0x31, 0x89, 0xa3, 0x8d, 0xaa, 0x57, 0xe2, 0x68, 0x47, 0x94, 0x0a, 0xaf, 0x4b, 0x5a,
0x2b, 0xe8, 0x6a, 0x9c, 0x96, 0x96, 0x2c, 0x1e, 0x6a, 0xdd, 0x4b, 0x03, 0xb2, 0x5a, 0x6c, 0x12,
0x89, 0x44, 0x95, 0x2d, 0x91, 0xc8, 0x88, 0x66, 0xe1, 0x0d, 0x49, 0xe4, 0x3a, 0x5a, 0x8b, 0x13,
0xe1, 0xca, 0x75, 0xc8, 0xc3, 0xde, 0xdf, 0xa5, 0x7b, 0x07, 0xe8, 0x5b, 0x48, 0x0b, 0x4d, 0x42,
0x38, 0xf1, 0xc8, 0x0c, 0x84, 0xce, 0xbc, 0xf2, 0x4e, 0x1f, 0xcd, 0x61, 0x4d, 0x72, 0xb8, 0x82,
0x2e, 0x8f, 0x3b, 0x4d, 0xb5, 0x48, 0x27, 0xbe, 0x87, 0x8c, 0x92, 0x2c, 0x74, 0x35, 0x21, 0x73,
0x44, 0x05, 0xcd, 0xe5, 0x09, 0x5e, 0x9a, 0x41, 0x41, 0x32, 0xc0, 0x28, 0x6f, 0x8f, 0xf9, 0xa7,
0x57, 0x4a, 0x89, 0xbd, 0x2f, 0x84, 0x4c, 0x8e, 0xe2, 0xd4, 0x40, 0x72, 0xd0, 0x6a, 0xd2, 0xb8,
0x47, 0x44, 0xd1, 0x2c, 0x4c, 0x76, 0x9c, 0x7c, 0xe9, 0xab, 0xc2, 0x39, 0xc2, 0xe6, 0x85, 0x01,
0x30, 0x54, 0x0a, 0xf4, 0x4e, 0x94, 0xb0, 0xfc, 0x98, 0x6b, 0xc7, 0xf0, 0xd4, 0x84, 0x96, 0x25,
0xa1, 0x25, 0x74, 0x29, 0x89, 0x90, 0xd4, 0x21, 0xf4, 0x0d, 0x64, 0x94, 0x74, 0x24, 0x4e, 0x26,
0xa2, 0x50, 0x89, 0x93, 0x89, 0x2a, 0x16, 0xce, 0x4b, 0x74, 0x13, 0x2d, 0xc4, 0xd1, 0x95, 0x36,
0xa1, 0x3e, 0x64, 0xf5, 0x93, 0x8f, 0xf2, 0xf1, 0x9c, 0x51, 0x35, 0x30, 0xc7, 0x0c, 0xec, 0x11,
0x77, 0xb7, 0x85, 0x8d, 0x76, 0x5b, 0x3b, 0xfd, 0x01, 0x2e, 0x96, 0xb8, 0x8b, 0xc8, 0x8c, 0xe3,
0x52, 0xbf, 0x5e, 0x71, 0x04, 0xdc, 0x77, 0x30, 0x13, 0x52, 0x8b, 0x63, 0xa0, 0x8f, 0xa9, 0x79,
0x8c, 0xdc, 0xe0, 0x15, 0x89, 0x9d, 0x47, 0xb9, 0x31, 0xd8, 0xda, 0xbd, 0xe2, 0x12, 0x5e, 0x2a,
0xbd, 0x3e, 0xcc, 0x19, 0x6f, 0x0e, 0x73, 0xc6, 0x9f, 0x87, 0x39, 0xe3, 0xc7, 0xa3, 0x5c, 0xea,
0xcd, 0x51, 0x2e, 0xf5, 0xfb, 0x51, 0x2e, 0xf5, 0x55, 0x21, 0x24, 0xb3, 0x7e, 0x9d, 0x74, 0x78,
0x83, 0x87, 0x72, 0xf5, 0x65, 0x36, 0x29, 0xb6, 0xd5, 0x8c, 0xfc, 0x45, 0xf7, 0xe1, 0x3f, 0x01,
0x00, 0x00, 0xff, 0xff, 0xa4, 0x91, 0x34, 0x9c, 0x9a, 0x0e, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -1334,8 +1333,6 @@ type QueryClient interface {
BlockBloom(ctx context.Context, in *QueryBlockBloomRequest, opts ...grpc.CallOption) (*QueryBlockBloomResponse, error)
// Params queries the parameters of x/evm module.
Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error)
// BaseFee queries the base fee of the parent block of the current block.
BaseFee(ctx context.Context, in *QueryBaseFeeRequest, opts ...grpc.CallOption) (*QueryBaseFeeResponse, error)
// EthCall implements the `eth_call` rpc api
EthCall(ctx context.Context, in *EthCallRequest, opts ...grpc.CallOption) (*MsgEthereumTxResponse, error)
// EstimateGas implements the `eth_estimateGas` rpc api
@ -1440,15 +1437,6 @@ func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts .
return out, nil
}
func (c *queryClient) BaseFee(ctx context.Context, in *QueryBaseFeeRequest, opts ...grpc.CallOption) (*QueryBaseFeeResponse, error) {
out := new(QueryBaseFeeResponse)
err := c.cc.Invoke(ctx, "/ethermint.evm.v1.Query/BaseFee", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *queryClient) EthCall(ctx context.Context, in *EthCallRequest, opts ...grpc.CallOption) (*MsgEthereumTxResponse, error) {
out := new(MsgEthereumTxResponse)
err := c.cc.Invoke(ctx, "/ethermint.evm.v1.Query/EthCall", in, out, opts...)
@ -1491,8 +1479,6 @@ type QueryServer interface {
BlockBloom(context.Context, *QueryBlockBloomRequest) (*QueryBlockBloomResponse, error)
// Params queries the parameters of x/evm module.
Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error)
// BaseFee queries the base fee of the parent block of the current block.
BaseFee(context.Context, *QueryBaseFeeRequest) (*QueryBaseFeeResponse, error)
// EthCall implements the `eth_call` rpc api
EthCall(context.Context, *EthCallRequest) (*MsgEthereumTxResponse, error)
// EstimateGas implements the `eth_estimateGas` rpc api
@ -1533,9 +1519,6 @@ func (*UnimplementedQueryServer) BlockBloom(ctx context.Context, req *QueryBlock
func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method Params not implemented")
}
func (*UnimplementedQueryServer) BaseFee(ctx context.Context, req *QueryBaseFeeRequest) (*QueryBaseFeeResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method BaseFee not implemented")
}
func (*UnimplementedQueryServer) EthCall(ctx context.Context, req *EthCallRequest) (*MsgEthereumTxResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method EthCall not implemented")
}
@ -1727,24 +1710,6 @@ func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interf
return interceptor(ctx, in, info, handler)
}
func _Query_BaseFee_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(QueryBaseFeeRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(QueryServer).BaseFee(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/ethermint.evm.v1.Query/BaseFee",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(QueryServer).BaseFee(ctx, req.(*QueryBaseFeeRequest))
}
return interceptor(ctx, in, info, handler)
}
func _Query_EthCall_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(EthCallRequest)
if err := dec(in); err != nil {
@ -1825,10 +1790,6 @@ var _Query_serviceDesc = grpc.ServiceDesc{
MethodName: "Params",
Handler: _Query_Params_Handler,
},
{
MethodName: "BaseFee",
Handler: _Query_BaseFee_Handler,
},
{
MethodName: "EthCall",
Handler: _Query_EthCall_Handler,

View File

@ -557,24 +557,6 @@ func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshal
}
func request_Query_BaseFee_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq QueryBaseFeeRequest
var metadata runtime.ServerMetadata
msg, err := client.BaseFee(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Query_BaseFee_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq QueryBaseFeeRequest
var metadata runtime.ServerMetadata
msg, err := server.BaseFee(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_Query_EthCall_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
@ -853,26 +835,6 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv
})
mux.Handle("GET", pattern_Query_BaseFee_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.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Query_BaseFee_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Query_BaseFee_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Query_EthCall_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@ -1154,26 +1116,6 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie
})
mux.Handle("GET", pattern_Query_BaseFee_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_Query_BaseFee_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Query_BaseFee_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Query_EthCall_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@ -1238,8 +1180,6 @@ var (
pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"ethermint", "evm", "v1", "params"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Query_BaseFee_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"ethermint", "evm", "v1", "base_fee"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Query_EthCall_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"ethermint", "evm", "v1", "eth_call"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Query_EstimateGas_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"ethermint", "evm", "v1", "estimate_gas"}, "", runtime.AssumeColonVerbOpt(true)))
@ -1266,8 +1206,6 @@ var (
forward_Query_Params_0 = runtime.ForwardResponseMessage
forward_Query_BaseFee_0 = runtime.ForwardResponseMessage
forward_Query_EthCall_0 = runtime.ForwardResponseMessage
forward_Query_EstimateGas_0 = runtime.ForwardResponseMessage

View File

@ -0,0 +1,139 @@
package cli
import (
"fmt"
"strconv"
"github.com/spf13/cobra"
"google.golang.org/grpc/metadata"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/client/flags"
grpctypes "github.com/cosmos/cosmos-sdk/types/grpc"
"github.com/tharsis/ethermint/x/feemarket/types"
)
// GetQueryCmd returns the parent command for all x/feemarket CLI query commands.
func GetQueryCmd() *cobra.Command {
cmd := &cobra.Command{
Use: types.ModuleName,
Short: "Querying commands for the fee market module",
DisableFlagParsing: true,
SuggestionsMinimumDistance: 2,
RunE: client.ValidateCmd,
}
cmd.AddCommand(
GetBlockGasCmd(),
GetBaseFeeCmd(),
GetParamsCmd(),
)
return cmd
}
// GetBlockGasCmd queries the gas used in a block
func GetBlockGasCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "block-gas [height]",
Short: "Get the block gas used at a given block height",
Long: "Get the block gas used at a given block height. If the height is not provided, it will use the latest height from context.",
Args: cobra.RangeArgs(0, 1),
RunE: func(cmd *cobra.Command, args []string) error {
clientCtx, err := client.GetClientQueryContext(cmd)
if err != nil {
return err
}
ctx := cmd.Context()
if len(args) == 1 {
height := args[0]
_, err := strconv.ParseInt(height, 10, 64)
if err != nil {
return fmt.Errorf("invalid height: %w", err)
}
ctx = metadata.AppendToOutgoingContext(ctx, grpctypes.GRPCBlockHeightHeader, height)
}
queryClient := types.NewQueryClient(clientCtx)
res, err := queryClient.BlockGas(ctx, &types.QueryBlockGasRequest{})
if err != nil {
return err
}
return clientCtx.PrintProto(res)
},
}
flags.AddQueryFlagsToCmd(cmd)
return cmd
}
// GetParamsCmd queries the fee market params
func GetParamsCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "params",
Short: "Get the fee market params",
Long: "Get the fee market parameter values.",
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, _ []string) error {
clientCtx, err := client.GetClientQueryContext(cmd)
if err != nil {
return err
}
queryClient := types.NewQueryClient(clientCtx)
res, err := queryClient.Params(cmd.Context(), &types.QueryParamsRequest{})
if err != nil {
return err
}
return clientCtx.PrintProto(res)
},
}
flags.AddQueryFlagsToCmd(cmd)
return cmd
}
// GetBaseFeeCmd queries the base fee at a given height
func GetBaseFeeCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "base-fee [height]",
Short: "Get the base fee amount at a given block height",
Long: "Get the base fee amount at a given block height. If the height is not provided, it will use the latest height from context.",
Args: cobra.RangeArgs(0, 1),
RunE: func(cmd *cobra.Command, args []string) error {
clientCtx, err := client.GetClientQueryContext(cmd)
if err != nil {
return err
}
ctx := cmd.Context()
if len(args) == 1 {
height := args[0]
_, err := strconv.ParseInt(height, 10, 64)
if err != nil {
return fmt.Errorf("invalid height: %w", err)
}
ctx = metadata.AppendToOutgoingContext(ctx, grpctypes.GRPCBlockHeightHeader, height)
}
queryClient := types.NewQueryClient(clientCtx)
res, err := queryClient.BaseFee(ctx, &types.QueryBaseFeeRequest{})
if err != nil {
return err
}
return clientCtx.PrintProto(res)
},
}
flags.AddQueryFlagsToCmd(cmd)
return cmd
}

38
x/feemarket/genesis.go Normal file
View File

@ -0,0 +1,38 @@
package feemarket
import (
sdk "github.com/cosmos/cosmos-sdk/types"
abci "github.com/tendermint/tendermint/abci/types"
"github.com/tharsis/ethermint/x/feemarket/keeper"
"github.com/tharsis/ethermint/x/feemarket/types"
)
// InitGenesis initializes genesis state based on exported genesis
func InitGenesis(
ctx sdk.Context,
k keeper.Keeper,
data types.GenesisState,
) []abci.ValidatorUpdate {
k.SetParams(ctx, data.Params)
k.SetBaseFee(ctx, data.BaseFee.BigInt())
k.SetBlockGasUsed(ctx, data.BlockGas)
return []abci.ValidatorUpdate{}
}
// ExportGenesis exports genesis state of the fee market module
func ExportGenesis(ctx sdk.Context, k keeper.Keeper) *types.GenesisState {
baseFee := sdk.ZeroInt()
baseFeeInt := k.GetBaseFee(ctx)
if baseFeeInt != nil {
baseFee = sdk.NewIntFromBigInt(baseFeeInt)
}
return &types.GenesisState{
Params: k.GetParams(ctx),
BaseFee: baseFee,
BlockGas: k.GetBlockGasUsed(ctx),
}
}

View File

@ -0,0 +1,43 @@
package keeper
import (
"fmt"
"time"
abci "github.com/tendermint/tendermint/abci/types"
"github.com/cosmos/cosmos-sdk/telemetry"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/tharsis/ethermint/x/feemarket/types"
)
// EndBlock also retrieves the bloom filter value from the transient store and commits it to the
// KVStore. The EVM end block logic doesn't update the validator set, thus it returns
// an empty slice.
func (k *Keeper) EndBlock(ctx sdk.Context, req abci.RequestEndBlock) {
defer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyEndBlocker)
baseFee := k.CalculateBaseFee(ctx)
if baseFee == nil {
return
}
// only set base fee if the NoBaseFee param is false
k.SetBaseFee(ctx, baseFee)
if ctx.BlockGasMeter() == nil {
k.Logger(ctx).Error("block gas meter is nil when setting block gas used")
return
}
gasUsed := ctx.BlockGasMeter().GasConsumedToLimit()
k.SetBlockGasUsed(ctx, gasUsed)
ctx.EventManager().EmitEvent(sdk.NewEvent(
"block_gas",
sdk.NewAttribute("height", fmt.Sprintf("%d", ctx.BlockHeight())),
sdk.NewAttribute("amount", fmt.Sprintf("%d", ctx.BlockGasMeter().GasConsumedToLimit())),
))
}

View File

@ -7,10 +7,6 @@ import (
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/math"
// "github.com/ethereum/go-ethereum/params"
"github.com/tharsis/ethermint/x/evm/types"
)
// CalculateBaseFee calculates the base fee for the current block. This is only calculated once per
@ -18,31 +14,25 @@ import (
// NOTE: This code is inspired from the go-ethereum EIP1559 implementation and adapted to Cosmos SDK-based
// chains. For the canonical code refer to: https://github.com/ethereum/go-ethereum/blob/master/consensus/misc/eip1559.go
func (k Keeper) CalculateBaseFee(ctx sdk.Context) *big.Int {
consParams := ctx.ConsensusParams()
params := k.GetParams(ctx)
if params.NoBaseFee {
return nil
}
chainConfig := params.ChainConfig
cfg := chainConfig.EthereumConfig(k.eip155ChainID)
consParams := ctx.ConsensusParams()
// If the current block is the first EIP-1559 block, return the InitialBaseFee.
// if !chainConfig.EthereumConfig(k.eip155ChainID).IsLondon(big.NewInt(ctx.BlockHeight())) {
// return new(big.Int).SetUint64(types.InitialBaseFee)
// }
// FIXME: remove and uncomment line above
height := big.NewInt(ctx.BlockHeight())
rules := cfg.Rules(height)
if rules.IsBerlin || cfg.IsMuirGlacier(height) || rules.IsIstanbul || rules.IsByzantium || rules.IsConstantinople {
return new(big.Int).SetUint64(types.InitialBaseFee)
if ctx.BlockHeight() <= params.EnableHeight {
return new(big.Int).SetInt64(params.InitialBaseFee)
}
// get the block gas used and the base fee values for the parent block.
parentBaseFee := k.GetBaseFee(ctx)
if parentBaseFee == nil {
parentBaseFee = new(big.Int).SetInt64(params.InitialBaseFee)
}
parentGasUsed := k.GetBlockGasUsed(ctx)
gasLimit := new(big.Int).SetUint64(math.MaxUint64)
@ -50,13 +40,13 @@ func (k Keeper) CalculateBaseFee(ctx sdk.Context) *big.Int {
gasLimit = big.NewInt(consParams.Block.MaxGas)
}
parentGasTargetBig := new(big.Int).Div(gasLimit, big.NewInt(types.ElasticityMultiplier)) // TODO: update to geth
parentGasTargetBig := new(big.Int).Div(gasLimit, new(big.Int).SetUint64(uint64(params.ElasticityMultiplier)))
if !parentGasTargetBig.IsUint64() {
return new(big.Int).SetUint64(types.InitialBaseFee) // TODO: update to geth
return new(big.Int).SetInt64(params.InitialBaseFee)
}
parentGasTarget := parentGasTargetBig.Uint64()
baseFeeChangeDenominator := new(big.Int).SetUint64(types.BaseFeeChangeDenominator) // TODO: update to geth
baseFeeChangeDenominator := new(big.Int).SetUint64(uint64(params.BaseFeeChangeDenominator))
// If the parent gasUsed is the same as the target, the baseFee remains unchanged.
if parentGasUsed == parentGasTarget {

View File

@ -0,0 +1,47 @@
package keeper
import (
"context"
"math/big"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/tharsis/ethermint/x/feemarket/types"
)
var _ types.QueryServer = Keeper{}
// Params implements the Query/Params gRPC method
func (k Keeper) Params(c context.Context, _ *types.QueryParamsRequest) (*types.QueryParamsResponse, error) {
ctx := sdk.UnwrapSDKContext(c)
params := k.GetParams(ctx)
return &types.QueryParamsResponse{
Params: params,
}, nil
}
// BaseFee implements the Query/BaseFee gRPC method
func (k Keeper) BaseFee(c context.Context, _ *types.QueryBaseFeeRequest) (*types.QueryBaseFeeResponse, error) {
ctx := sdk.UnwrapSDKContext(c)
baseFee := k.GetBaseFee(ctx)
if baseFee == nil {
// TODO: should this be 0? 1? error?
baseFee = big.NewInt(0)
}
return &types.QueryBaseFeeResponse{
BaseFee: sdk.NewIntFromBigInt(baseFee),
}, nil
}
// BlockGas implements the Query/BlockGas gRPC method
func (k Keeper) BlockGas(c context.Context, _ *types.QueryBlockGasRequest) (*types.QueryBlockGasResponse, error) {
ctx := sdk.UnwrapSDKContext(c)
gas := k.GetBlockGasUsed(ctx)
return &types.QueryBlockGasResponse{
Gas: int64(gas),
}, nil
}

View File

@ -0,0 +1,91 @@
package keeper
import (
"math/big"
"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
"github.com/tendermint/tendermint/libs/log"
"github.com/tharsis/ethermint/x/feemarket/types"
)
// Keeper grants access to the Fee Market module state.
type Keeper struct {
// Protobuf codec
cdc codec.BinaryCodec
// Store key required for the Fee Market Prefix KVStore.
storeKey sdk.StoreKey
// module specific parameter space that can be configured through governance
paramSpace paramtypes.Subspace
}
// NewKeeper generates new fee market module keeper
func NewKeeper(
cdc codec.BinaryCodec, storeKey sdk.StoreKey, paramSpace paramtypes.Subspace,
) Keeper {
// set KeyTable if it has not already been set
if !paramSpace.HasKeyTable() {
paramSpace = paramSpace.WithKeyTable(types.ParamKeyTable())
}
return Keeper{
cdc: cdc,
storeKey: storeKey,
paramSpace: paramSpace,
}
}
// Logger returns a module-specific logger.
func (k Keeper) Logger(ctx sdk.Context) log.Logger {
return ctx.Logger().With("module", types.ModuleName)
}
// ----------------------------------------------------------------------------
// Parent Block Gas Used
// Required by EIP1559 base fee calculation.
// ----------------------------------------------------------------------------
// GetBlockGasUsed returns the last block gas used value from the store.
func (k Keeper) GetBlockGasUsed(ctx sdk.Context) uint64 {
store := ctx.KVStore(k.storeKey)
bz := store.Get(types.KeyPrefixBlockGasUsed)
if len(bz) == 0 {
return 0
}
return sdk.BigEndianToUint64(bz)
}
// SetBlockGasUsed gets the block gas consumed to the store.
// CONTRACT: this should be only called during EndBlock.
func (k Keeper) SetBlockGasUsed(ctx sdk.Context, gas uint64) {
store := ctx.KVStore(k.storeKey)
gasBz := sdk.Uint64ToBigEndian(gas)
store.Set(types.KeyPrefixBlockGasUsed, gasBz)
}
// ----------------------------------------------------------------------------
// Parent Base Fee
// Required by EIP1559 base fee calculation.
// ----------------------------------------------------------------------------
// GetBlockGasUsed returns the last block gas used value from the store.
func (k Keeper) GetBaseFee(ctx sdk.Context) *big.Int {
store := ctx.KVStore(k.storeKey)
bz := store.Get(types.KeyPrefixBaseFee)
if len(bz) == 0 {
return nil
}
return new(big.Int).SetBytes(bz)
}
// SetBlockGasUsed gets the current block gas consumed to the store.
// CONTRACT: this should be only called during EndBlock.
func (k Keeper) SetBaseFee(ctx sdk.Context, baseFee *big.Int) {
store := ctx.KVStore(k.storeKey)
store.Set(types.KeyPrefixBaseFee, baseFee.Bytes())
}

View File

@ -0,0 +1,18 @@
package keeper
import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/tharsis/ethermint/x/feemarket/types"
)
// GetParams returns the total set of fee market parameters.
func (k Keeper) GetParams(ctx sdk.Context) (params types.Params) {
k.paramSpace.GetParamSet(ctx, &params)
return params
}
// SetParams sets the fee market parameters to the param space.
func (k Keeper) SetParams(ctx sdk.Context, params types.Params) {
k.paramSpace.SetParamSet(ctx, &params)
}

157
x/feemarket/module.go Normal file
View File

@ -0,0 +1,157 @@
package feemarket
import (
"context"
"encoding/json"
"fmt"
"github.com/gorilla/mux"
"github.com/grpc-ecosystem/grpc-gateway/runtime"
"github.com/spf13/cobra"
abci "github.com/tendermint/tendermint/abci/types"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/codec"
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/module"
"github.com/tharsis/ethermint/x/feemarket/client/cli"
"github.com/tharsis/ethermint/x/feemarket/keeper"
"github.com/tharsis/ethermint/x/feemarket/types"
)
var (
_ module.AppModule = AppModule{}
_ module.AppModuleBasic = AppModuleBasic{}
)
// AppModuleBasic defines the basic application module used by the fee market module.
type AppModuleBasic struct{}
// Name returns the fee market module's name.
func (AppModuleBasic) Name() string {
return types.ModuleName
}
// RegisterLegacyAminoCodec performs a no-op as the fee market module doesn't support amino.
func (AppModuleBasic) RegisterLegacyAminoCodec(_ *codec.LegacyAmino) {
}
// ConsensusVersion returns the consensus state-breaking version for the module.
func (AppModuleBasic) ConsensusVersion() uint64 {
return 1
}
// DefaultGenesis returns default genesis state as raw bytes for the fee market
// module.
func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage {
return cdc.MustMarshalJSON(types.DefaultGenesisState())
}
// ValidateGenesis is the validation check of the Genesis
func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, _ client.TxEncodingConfig, bz json.RawMessage) error {
var genesisState types.GenesisState
if err := cdc.UnmarshalJSON(bz, &genesisState); err != nil {
return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err)
}
return genesisState.Validate()
}
// RegisterRESTRoutes performs a no-op as the EVM module doesn't expose REST
// endpoints
func (AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Router) {
}
func (b AppModuleBasic) RegisterGRPCGatewayRoutes(c client.Context, serveMux *runtime.ServeMux) {
if err := types.RegisterQueryHandlerClient(context.Background(), serveMux, types.NewQueryClient(c)); err != nil {
panic(err)
}
}
// GetTxCmd returns the root tx command for the fee market module.
func (AppModuleBasic) GetTxCmd() *cobra.Command {
return nil
}
// GetQueryCmd returns no root query command for the fee market module.
func (AppModuleBasic) GetQueryCmd() *cobra.Command {
return cli.GetQueryCmd()
}
// RegisterInterfaces registers interfaces and implementations of the fee market module.
func (AppModuleBasic) RegisterInterfaces(_ codectypes.InterfaceRegistry) {}
// ____________________________________________________________________________
// AppModule implements an application module for the fee market module.
type AppModule struct {
AppModuleBasic
keeper keeper.Keeper
}
// NewAppModule creates a new AppModule object
func NewAppModule(k keeper.Keeper) AppModule {
return AppModule{
AppModuleBasic: AppModuleBasic{},
keeper: k,
}
}
// Name returns the fee market module's name.
func (AppModule) Name() string {
return types.ModuleName
}
// RegisterInvariants interface for registering invariants. Performs a no-op
// as the fee market module doesn't expose invariants.
func (am AppModule) RegisterInvariants(ir sdk.InvariantRegistry) {}
// RegisterQueryService registers a GRPC query service to respond to the
// module-specific GRPC queries.
func (am AppModule) RegisterServices(cfg module.Configurator) {
types.RegisterQueryServer(cfg.QueryServer(), am.keeper)
}
// Route returns the message routing key for the fee market module.
func (am AppModule) Route() sdk.Route {
return sdk.Route{}
}
// QuerierRoute returns the fee market module's querier route name.
func (AppModule) QuerierRoute() string { return types.RouterKey }
// LegacyQuerierHandler returns nil as the fee market module doesn't expose a legacy
// Querier.
func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sdk.Querier {
return nil
}
// BeginBlock returns the begin block for the fee market module.
func (am AppModule) BeginBlock(ctx sdk.Context, req abci.RequestBeginBlock) {}
// EndBlock returns the end blocker for the fee market module. It returns no validator
// updates.
func (am AppModule) EndBlock(ctx sdk.Context, req abci.RequestEndBlock) []abci.ValidatorUpdate {
am.keeper.EndBlock(ctx, req)
return []abci.ValidatorUpdate{}
}
// InitGenesis performs genesis initialization for the fee market module. It returns
// no validator updates.
func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate {
var genesisState types.GenesisState
cdc.MustUnmarshalJSON(data, &genesisState)
InitGenesis(ctx, am.keeper, genesisState)
return []abci.ValidatorUpdate{}
}
// ExportGenesis returns the exported genesis state as raw bytes for the fee market
// module.
func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage {
gs := ExportGenesis(ctx, am.keeper)
return cdc.MustMarshalJSON(gs)
}

View File

@ -0,0 +1,462 @@
// Code generated by protoc-gen-gogo. DO NOT EDIT.
// source: ethermint/feemarket/v1/feemarket.proto
package types
import (
fmt "fmt"
_ "github.com/gogo/protobuf/gogoproto"
proto "github.com/gogo/protobuf/proto"
io "io"
math "math"
math_bits "math/bits"
)
// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf
// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
// Params defines the EVM module parameters
type Params struct {
// no base fee forces the EIP-1559 base fee to 0 (needed for 0 price calls)
NoBaseFee bool `protobuf:"varint,1,opt,name=no_base_fee,json=noBaseFee,proto3" json:"no_base_fee,omitempty"`
// base fee change denominator bounds the amount the base fee can change between blocks.
BaseFeeChangeDenominator uint32 `protobuf:"varint,2,opt,name=base_fee_change_denominator,json=baseFeeChangeDenominator,proto3" json:"base_fee_change_denominator,omitempty"`
// elasticity multiplier bounds the maximum gas limit an EIP-1559 block may have.
ElasticityMultiplier uint32 `protobuf:"varint,3,opt,name=elasticity_multiplier,json=elasticityMultiplier,proto3" json:"elasticity_multiplier,omitempty"`
// initial base fee for EIP-1559 blocks.
InitialBaseFee int64 `protobuf:"varint,4,opt,name=initial_base_fee,json=initialBaseFee,proto3" json:"initial_base_fee,omitempty"`
// height at which the base fee calculation is enabled.
EnableHeight int64 `protobuf:"varint,5,opt,name=enable_height,json=enableHeight,proto3" json:"enable_height,omitempty"`
}
func (m *Params) Reset() { *m = Params{} }
func (m *Params) String() string { return proto.CompactTextString(m) }
func (*Params) ProtoMessage() {}
func (*Params) Descriptor() ([]byte, []int) {
return fileDescriptor_4feb8b20cf98e6e1, []int{0}
}
func (m *Params) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
}
func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
if deterministic {
return xxx_messageInfo_Params.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 *Params) XXX_Merge(src proto.Message) {
xxx_messageInfo_Params.Merge(m, src)
}
func (m *Params) XXX_Size() int {
return m.Size()
}
func (m *Params) XXX_DiscardUnknown() {
xxx_messageInfo_Params.DiscardUnknown(m)
}
var xxx_messageInfo_Params proto.InternalMessageInfo
func (m *Params) GetNoBaseFee() bool {
if m != nil {
return m.NoBaseFee
}
return false
}
func (m *Params) GetBaseFeeChangeDenominator() uint32 {
if m != nil {
return m.BaseFeeChangeDenominator
}
return 0
}
func (m *Params) GetElasticityMultiplier() uint32 {
if m != nil {
return m.ElasticityMultiplier
}
return 0
}
func (m *Params) GetInitialBaseFee() int64 {
if m != nil {
return m.InitialBaseFee
}
return 0
}
func (m *Params) GetEnableHeight() int64 {
if m != nil {
return m.EnableHeight
}
return 0
}
func init() {
proto.RegisterType((*Params)(nil), "ethermint.feemarket.v1.Params")
}
func init() {
proto.RegisterFile("ethermint/feemarket/v1/feemarket.proto", fileDescriptor_4feb8b20cf98e6e1)
}
var fileDescriptor_4feb8b20cf98e6e1 = []byte{
// 298 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x4c, 0x90, 0xc1, 0x4a, 0x33, 0x31,
0x14, 0x85, 0x9b, 0xbf, 0xbf, 0x45, 0xa3, 0x15, 0x19, 0xaa, 0x0c, 0x0a, 0xa1, 0x28, 0xc8, 0xac,
0x66, 0x28, 0x5d, 0xbb, 0xa9, 0x22, 0xdd, 0x08, 0xd2, 0xa5, 0x9b, 0x21, 0x53, 0x6f, 0x67, 0x2e,
0x4e, 0x92, 0x92, 0xdc, 0x16, 0xfb, 0x16, 0x3e, 0x96, 0xcb, 0x2e, 0x5d, 0x4a, 0xbb, 0xf4, 0x25,
0xc4, 0xd4, 0x36, 0xee, 0x92, 0xf3, 0x7d, 0x17, 0x0e, 0x87, 0x5f, 0x03, 0x55, 0x60, 0x15, 0x6a,
0xca, 0x26, 0x00, 0x4a, 0xda, 0x17, 0xa0, 0x6c, 0xde, 0x0b, 0x9f, 0x74, 0x6a, 0x0d, 0x99, 0xe8,
0x6c, 0xe7, 0xa5, 0x01, 0xcd, 0x7b, 0xe7, 0x9d, 0xd2, 0x94, 0xc6, 0x2b, 0xd9, 0xcf, 0x6b, 0x63,
0x5f, 0x7e, 0x31, 0xde, 0x7a, 0x94, 0x56, 0x2a, 0x17, 0x09, 0x7e, 0xa8, 0x4d, 0x5e, 0x48, 0x07,
0xf9, 0x04, 0x20, 0x66, 0x5d, 0x96, 0xec, 0x8f, 0x0e, 0xb4, 0x19, 0x48, 0x07, 0xf7, 0x00, 0xd1,
0x0d, 0xbf, 0xd8, 0xc2, 0x7c, 0x5c, 0x49, 0x5d, 0x42, 0xfe, 0x0c, 0xda, 0x28, 0xd4, 0x92, 0x8c,
0x8d, 0xff, 0x75, 0x59, 0xd2, 0x1e, 0xc5, 0xc5, 0xc6, 0xbe, 0xf5, 0xc2, 0x5d, 0xe0, 0x51, 0x9f,
0x9f, 0x42, 0x2d, 0x1d, 0xe1, 0x18, 0x69, 0x91, 0xab, 0x59, 0x4d, 0x38, 0xad, 0x11, 0x6c, 0xdc,
0xf4, 0x87, 0x9d, 0x00, 0x1f, 0x76, 0x2c, 0x4a, 0xf8, 0x09, 0x6a, 0x24, 0x94, 0x75, 0x28, 0xf6,
0xbf, 0xcb, 0x92, 0xe6, 0xe8, 0xf8, 0x37, 0xdf, 0xb6, 0xbb, 0xe2, 0x6d, 0xd0, 0xb2, 0xa8, 0x21,
0xaf, 0x00, 0xcb, 0x8a, 0xe2, 0x3d, 0xaf, 0x1d, 0x6d, 0xc2, 0xa1, 0xcf, 0x06, 0xc3, 0xf7, 0x95,
0x60, 0xcb, 0x95, 0x60, 0x9f, 0x2b, 0xc1, 0xde, 0xd6, 0xa2, 0xb1, 0x5c, 0x8b, 0xc6, 0xc7, 0x5a,
0x34, 0x9e, 0xd2, 0x12, 0xa9, 0x9a, 0x15, 0xe9, 0xd8, 0xa8, 0x8c, 0x2a, 0x69, 0x1d, 0xba, 0x2c,
0x0c, 0xfe, 0xfa, 0x67, 0x72, 0x5a, 0x4c, 0xc1, 0x15, 0x2d, 0x3f, 0x5f, 0xff, 0x3b, 0x00, 0x00,
0xff, 0xff, 0x69, 0x30, 0x96, 0xce, 0x96, 0x01, 0x00, 0x00,
}
func (m *Params) 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 *Params) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
_ = i
var l int
_ = l
if m.EnableHeight != 0 {
i = encodeVarintFeemarket(dAtA, i, uint64(m.EnableHeight))
i--
dAtA[i] = 0x28
}
if m.InitialBaseFee != 0 {
i = encodeVarintFeemarket(dAtA, i, uint64(m.InitialBaseFee))
i--
dAtA[i] = 0x20
}
if m.ElasticityMultiplier != 0 {
i = encodeVarintFeemarket(dAtA, i, uint64(m.ElasticityMultiplier))
i--
dAtA[i] = 0x18
}
if m.BaseFeeChangeDenominator != 0 {
i = encodeVarintFeemarket(dAtA, i, uint64(m.BaseFeeChangeDenominator))
i--
dAtA[i] = 0x10
}
if m.NoBaseFee {
i--
if m.NoBaseFee {
dAtA[i] = 1
} else {
dAtA[i] = 0
}
i--
dAtA[i] = 0x8
}
return len(dAtA) - i, nil
}
func encodeVarintFeemarket(dAtA []byte, offset int, v uint64) int {
offset -= sovFeemarket(v)
base := offset
for v >= 1<<7 {
dAtA[offset] = uint8(v&0x7f | 0x80)
v >>= 7
offset++
}
dAtA[offset] = uint8(v)
return base
}
func (m *Params) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
if m.NoBaseFee {
n += 2
}
if m.BaseFeeChangeDenominator != 0 {
n += 1 + sovFeemarket(uint64(m.BaseFeeChangeDenominator))
}
if m.ElasticityMultiplier != 0 {
n += 1 + sovFeemarket(uint64(m.ElasticityMultiplier))
}
if m.InitialBaseFee != 0 {
n += 1 + sovFeemarket(uint64(m.InitialBaseFee))
}
if m.EnableHeight != 0 {
n += 1 + sovFeemarket(uint64(m.EnableHeight))
}
return n
}
func sovFeemarket(x uint64) (n int) {
return (math_bits.Len64(x|1) + 6) / 7
}
func sozFeemarket(x uint64) (n int) {
return sovFeemarket(uint64((x << 1) ^ uint64((int64(x) >> 63))))
}
func (m *Params) 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 ErrIntOverflowFeemarket
}
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: Params: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field NoBaseFee", wireType)
}
var v int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowFeemarket
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
m.NoBaseFee = bool(v != 0)
case 2:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field BaseFeeChangeDenominator", wireType)
}
m.BaseFeeChangeDenominator = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowFeemarket
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
m.BaseFeeChangeDenominator |= uint32(b&0x7F) << shift
if b < 0x80 {
break
}
}
case 3:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field ElasticityMultiplier", wireType)
}
m.ElasticityMultiplier = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowFeemarket
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
m.ElasticityMultiplier |= uint32(b&0x7F) << shift
if b < 0x80 {
break
}
}
case 4:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field InitialBaseFee", wireType)
}
m.InitialBaseFee = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowFeemarket
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
m.InitialBaseFee |= int64(b&0x7F) << shift
if b < 0x80 {
break
}
}
case 5:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field EnableHeight", wireType)
}
m.EnableHeight = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowFeemarket
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
m.EnableHeight |= int64(b&0x7F) << shift
if b < 0x80 {
break
}
}
default:
iNdEx = preIndex
skippy, err := skipFeemarket(dAtA[iNdEx:])
if err != nil {
return err
}
if (skippy < 0) || (iNdEx+skippy) < 0 {
return ErrInvalidLengthFeemarket
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func skipFeemarket(dAtA []byte) (n int, err error) {
l := len(dAtA)
iNdEx := 0
depth := 0
for iNdEx < l {
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return 0, ErrIntOverflowFeemarket
}
if iNdEx >= l {
return 0, io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
wireType := int(wire & 0x7)
switch wireType {
case 0:
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return 0, ErrIntOverflowFeemarket
}
if iNdEx >= l {
return 0, io.ErrUnexpectedEOF
}
iNdEx++
if dAtA[iNdEx-1] < 0x80 {
break
}
}
case 1:
iNdEx += 8
case 2:
var length int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return 0, ErrIntOverflowFeemarket
}
if iNdEx >= l {
return 0, io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
length |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
if length < 0 {
return 0, ErrInvalidLengthFeemarket
}
iNdEx += length
case 3:
depth++
case 4:
if depth == 0 {
return 0, ErrUnexpectedEndOfGroupFeemarket
}
depth--
case 5:
iNdEx += 4
default:
return 0, fmt.Errorf("proto: illegal wireType %d", wireType)
}
if iNdEx < 0 {
return 0, ErrInvalidLengthFeemarket
}
if depth == 0 {
return iNdEx, nil
}
}
return 0, io.ErrUnexpectedEOF
}
var (
ErrInvalidLengthFeemarket = fmt.Errorf("proto: negative length found during unmarshaling")
ErrIntOverflowFeemarket = fmt.Errorf("proto: integer overflow")
ErrUnexpectedEndOfGroupFeemarket = fmt.Errorf("proto: unexpected end of group")
)

View File

@ -0,0 +1,26 @@
package types
import (
"fmt"
sdk "github.com/cosmos/cosmos-sdk/types"
)
// DefaultGenesisState sets default fee market genesis state.
func DefaultGenesisState() *GenesisState {
return &GenesisState{
Params: DefaultParams(),
BaseFee: sdk.ZeroInt(),
BlockGas: 0,
}
}
// Validate performs basic genesis state validation returning an error upon any
// failure.
func (gs GenesisState) Validate() error {
if gs.BaseFee.IsNegative() {
return fmt.Errorf("base fee cannot be negative: %s", gs.BaseFee)
}
return gs.Params.Validate()
}

View File

@ -0,0 +1,416 @@
// Code generated by protoc-gen-gogo. DO NOT EDIT.
// source: ethermint/feemarket/v1/genesis.proto
package types
import (
fmt "fmt"
github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types"
_ "github.com/gogo/protobuf/gogoproto"
proto "github.com/gogo/protobuf/proto"
io "io"
math "math"
math_bits "math/bits"
)
// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf
// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
// GenesisState defines the feemarket module's genesis state.
type GenesisState struct {
// params defines all the paramaters of the module.
Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"`
// base fee is the exported value from previous software version.
// Zero by default.
BaseFee github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,2,opt,name=base_fee,json=baseFee,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"base_fee"`
// block gas is the amount of gas used on the last block before the upgrade.
// Zero by default.
BlockGas uint64 `protobuf:"varint,3,opt,name=block_gas,json=blockGas,proto3" json:"block_gas,omitempty"`
}
func (m *GenesisState) Reset() { *m = GenesisState{} }
func (m *GenesisState) String() string { return proto.CompactTextString(m) }
func (*GenesisState) ProtoMessage() {}
func (*GenesisState) Descriptor() ([]byte, []int) {
return fileDescriptor_6241c21661288629, []int{0}
}
func (m *GenesisState) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
}
func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
if deterministic {
return xxx_messageInfo_GenesisState.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 *GenesisState) XXX_Merge(src proto.Message) {
xxx_messageInfo_GenesisState.Merge(m, src)
}
func (m *GenesisState) XXX_Size() int {
return m.Size()
}
func (m *GenesisState) XXX_DiscardUnknown() {
xxx_messageInfo_GenesisState.DiscardUnknown(m)
}
var xxx_messageInfo_GenesisState proto.InternalMessageInfo
func (m *GenesisState) GetParams() Params {
if m != nil {
return m.Params
}
return Params{}
}
func (m *GenesisState) GetBlockGas() uint64 {
if m != nil {
return m.BlockGas
}
return 0
}
func init() {
proto.RegisterType((*GenesisState)(nil), "ethermint.feemarket.v1.GenesisState")
}
func init() {
proto.RegisterFile("ethermint/feemarket/v1/genesis.proto", fileDescriptor_6241c21661288629)
}
var fileDescriptor_6241c21661288629 = []byte{
// 286 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x90, 0x31, 0x4b, 0xc3, 0x40,
0x14, 0xc7, 0x73, 0x5a, 0x6a, 0x1b, 0x9d, 0x82, 0x48, 0xa9, 0x70, 0x0d, 0x22, 0x25, 0x8b, 0x77,
0x54, 0x57, 0xa7, 0x0c, 0xd6, 0x6e, 0x12, 0x37, 0x97, 0x72, 0x89, 0xaf, 0x49, 0x88, 0xc9, 0x85,
0x7b, 0x67, 0xd1, 0x6f, 0xe1, 0x87, 0xf1, 0x43, 0x74, 0xec, 0x28, 0x0e, 0x45, 0x92, 0x2f, 0x22,
0xb9, 0x96, 0xb6, 0x83, 0x4e, 0x77, 0xbc, 0xf7, 0xfb, 0xbf, 0x1f, 0xfc, 0xed, 0x4b, 0xd0, 0x09,
0xa8, 0x3c, 0x2d, 0x34, 0x9f, 0x01, 0xe4, 0x42, 0x65, 0xa0, 0xf9, 0x7c, 0xc4, 0x63, 0x28, 0x00,
0x53, 0x64, 0xa5, 0x92, 0x5a, 0x3a, 0x67, 0x5b, 0x8a, 0x6d, 0x29, 0x36, 0x1f, 0xf5, 0x4f, 0x63,
0x19, 0x4b, 0x83, 0xf0, 0xe6, 0xb7, 0xa6, 0xfb, 0xc3, 0x7f, 0x6e, 0xee, 0xa2, 0x86, 0xbb, 0xf8,
0x24, 0xf6, 0xc9, 0x78, 0xed, 0x79, 0xd4, 0x42, 0x83, 0x73, 0x6b, 0xb7, 0x4b, 0xa1, 0x44, 0x8e,
0x3d, 0xe2, 0x12, 0xef, 0xf8, 0x9a, 0xb2, 0xbf, 0xbd, 0xec, 0xc1, 0x50, 0x7e, 0x6b, 0xb1, 0x1a,
0x58, 0xc1, 0x26, 0xe3, 0x4c, 0xec, 0x4e, 0x28, 0x10, 0xa6, 0x33, 0x80, 0xde, 0x81, 0x4b, 0xbc,
0xae, 0xcf, 0x9a, 0xfd, 0xf7, 0x6a, 0x30, 0x8c, 0x53, 0x9d, 0xbc, 0x86, 0x2c, 0x92, 0x39, 0x8f,
0x24, 0xe6, 0x12, 0x37, 0xcf, 0x15, 0x3e, 0x67, 0x5c, 0xbf, 0x97, 0x80, 0x6c, 0x52, 0xe8, 0xe0,
0xa8, 0xc9, 0xdf, 0x01, 0x38, 0xe7, 0x76, 0x37, 0x7c, 0x91, 0x51, 0x36, 0x8d, 0x05, 0xf6, 0x0e,
0x5d, 0xe2, 0xb5, 0x82, 0x8e, 0x19, 0x8c, 0x05, 0xfa, 0xf7, 0x8b, 0x8a, 0x92, 0x65, 0x45, 0xc9,
0x4f, 0x45, 0xc9, 0x47, 0x4d, 0xad, 0x65, 0x4d, 0xad, 0xaf, 0x9a, 0x5a, 0x4f, 0x6c, 0xcf, 0xa3,
0x13, 0xa1, 0x30, 0x45, 0xbe, 0xeb, 0xe2, 0x6d, 0xaf, 0x0d, 0xe3, 0x0c, 0xdb, 0xa6, 0x87, 0x9b,
0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x41, 0xbf, 0x7e, 0x16, 0x85, 0x01, 0x00, 0x00,
}
func (m *GenesisState) 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 *GenesisState) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
_ = i
var l int
_ = l
if m.BlockGas != 0 {
i = encodeVarintGenesis(dAtA, i, uint64(m.BlockGas))
i--
dAtA[i] = 0x18
}
{
size := m.BaseFee.Size()
i -= size
if _, err := m.BaseFee.MarshalTo(dAtA[i:]); err != nil {
return 0, err
}
i = encodeVarintGenesis(dAtA, i, uint64(size))
}
i--
dAtA[i] = 0x12
{
size, err := m.Params.MarshalToSizedBuffer(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = encodeVarintGenesis(dAtA, i, uint64(size))
}
i--
dAtA[i] = 0xa
return len(dAtA) - i, nil
}
func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int {
offset -= sovGenesis(v)
base := offset
for v >= 1<<7 {
dAtA[offset] = uint8(v&0x7f | 0x80)
v >>= 7
offset++
}
dAtA[offset] = uint8(v)
return base
}
func (m *GenesisState) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
l = m.Params.Size()
n += 1 + l + sovGenesis(uint64(l))
l = m.BaseFee.Size()
n += 1 + l + sovGenesis(uint64(l))
if m.BlockGas != 0 {
n += 1 + sovGenesis(uint64(m.BlockGas))
}
return n
}
func sovGenesis(x uint64) (n int) {
return (math_bits.Len64(x|1) + 6) / 7
}
func sozGenesis(x uint64) (n int) {
return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63))))
}
func (m *GenesisState) 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 ErrIntOverflowGenesis
}
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: GenesisState: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
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 ErrIntOverflowGenesis
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthGenesis
}
postIndex := iNdEx + msglen
if postIndex < 0 {
return ErrInvalidLengthGenesis
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field BaseFee", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowGenesis
}
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 ErrInvalidLengthGenesis
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthGenesis
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
if err := m.BaseFee.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
case 3:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field BlockGas", wireType)
}
m.BlockGas = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowGenesis
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
m.BlockGas |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
default:
iNdEx = preIndex
skippy, err := skipGenesis(dAtA[iNdEx:])
if err != nil {
return err
}
if (skippy < 0) || (iNdEx+skippy) < 0 {
return ErrInvalidLengthGenesis
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func skipGenesis(dAtA []byte) (n int, err error) {
l := len(dAtA)
iNdEx := 0
depth := 0
for iNdEx < l {
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return 0, ErrIntOverflowGenesis
}
if iNdEx >= l {
return 0, io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
wireType := int(wire & 0x7)
switch wireType {
case 0:
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return 0, ErrIntOverflowGenesis
}
if iNdEx >= l {
return 0, io.ErrUnexpectedEOF
}
iNdEx++
if dAtA[iNdEx-1] < 0x80 {
break
}
}
case 1:
iNdEx += 8
case 2:
var length int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return 0, ErrIntOverflowGenesis
}
if iNdEx >= l {
return 0, io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
length |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
if length < 0 {
return 0, ErrInvalidLengthGenesis
}
iNdEx += length
case 3:
depth++
case 4:
if depth == 0 {
return 0, ErrUnexpectedEndOfGroupGenesis
}
depth--
case 5:
iNdEx += 4
default:
return 0, fmt.Errorf("proto: illegal wireType %d", wireType)
}
if iNdEx < 0 {
return 0, ErrInvalidLengthGenesis
}
if depth == 0 {
return iNdEx, nil
}
}
return 0, io.ErrUnexpectedEOF
}
var (
ErrInvalidLengthGenesis = fmt.Errorf("proto: negative length found during unmarshaling")
ErrIntOverflowGenesis = fmt.Errorf("proto: integer overflow")
ErrUnexpectedEndOfGroupGenesis = fmt.Errorf("proto: unexpected end of group")
)

25
x/feemarket/types/keys.go Normal file
View File

@ -0,0 +1,25 @@
package types
const (
// ModuleName string name of module
ModuleName = "feemarket"
// StoreKey key for base fee and block gas used.
// The Fee Market module should use a prefix store.
StoreKey = ModuleName
// RouterKey uses module name for routing
RouterKey = ModuleName
)
// prefix bytes for the EVM persistent store
const (
prefixBlockGasUsed = iota + 1
prefixBaseFee
)
// KVStore key prefixes
var (
KeyPrefixBlockGasUsed = []byte{prefixBlockGasUsed}
KeyPrefixBaseFee = []byte{prefixBaseFee}
)

136
x/feemarket/types/params.go Normal file
View File

@ -0,0 +1,136 @@
package types
import (
"fmt"
"math"
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
)
const (
DefaultBaseFeeChangeDenominator = 8
DefaultElasticityMultiplier = 2
DefaultInitialBaseFee = 1000000000
)
var _ paramtypes.ParamSet = &Params{}
// Parameter keys
var (
ParamStoreKeyNoBaseFee = []byte("NoBaseFee")
ParamStoreKeyBaseFeeChangeDenominator = []byte("BaseFeeChangeDenominator")
ParamStoreKeyElasticityMultiplier = []byte("ElasticityMultiplier")
ParamStoreKeyInitialBaseFee = []byte("InitialBaseFee")
ParamStoreKeyEnableHeight = []byte("EnableHeight")
)
// ParamKeyTable returns the parameter key table.
func ParamKeyTable() paramtypes.KeyTable {
return paramtypes.NewKeyTable().RegisterParamSet(&Params{})
}
// NewParams creates a new Params instance
func NewParams(noBaseFee bool, baseFeeChangeDenom, elasticityMultiplier uint32, initialBaseFee, enableHeight int64) Params {
return Params{
NoBaseFee: noBaseFee,
BaseFeeChangeDenominator: baseFeeChangeDenom,
ElasticityMultiplier: elasticityMultiplier,
InitialBaseFee: initialBaseFee,
EnableHeight: enableHeight,
}
}
// DefaultParams returns default evm parameters
func DefaultParams() Params {
// TODO: use geth parameters
return Params{
NoBaseFee: true,
BaseFeeChangeDenominator: DefaultBaseFeeChangeDenominator,
ElasticityMultiplier: DefaultElasticityMultiplier,
InitialBaseFee: DefaultInitialBaseFee,
EnableHeight: math.MaxInt64,
}
}
// ParamSetPairs returns the parameter set pairs.
func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs {
return paramtypes.ParamSetPairs{
paramtypes.NewParamSetPair(ParamStoreKeyNoBaseFee, &p.NoBaseFee, validateBool),
paramtypes.NewParamSetPair(ParamStoreKeyBaseFeeChangeDenominator, &p.BaseFeeChangeDenominator, validateBaseFeeChangeDenominator),
paramtypes.NewParamSetPair(ParamStoreKeyElasticityMultiplier, &p.ElasticityMultiplier, validateElasticityMultiplier),
paramtypes.NewParamSetPair(ParamStoreKeyInitialBaseFee, &p.InitialBaseFee, validateInitialBaseFee),
paramtypes.NewParamSetPair(ParamStoreKeyEnableHeight, &p.EnableHeight, validateEnableHeight),
}
}
// Validate performs basic validation on fee market parameters.
func (p Params) Validate() error {
if p.BaseFeeChangeDenominator == 0 {
return fmt.Errorf("base fee change denominator cannot be 0")
}
if p.InitialBaseFee < 0 {
return fmt.Errorf("initial base fee cannot be negative: %d", p.InitialBaseFee)
}
if p.EnableHeight < 0 {
return fmt.Errorf("enable height cannot be negative: %d", p.EnableHeight)
}
return nil
}
func validateBool(i interface{}) error {
_, ok := i.(bool)
if !ok {
return fmt.Errorf("invalid parameter type: %T", i)
}
return nil
}
func validateBaseFeeChangeDenominator(i interface{}) error {
value, ok := i.(uint32)
if !ok {
return fmt.Errorf("invalid parameter type: %T", i)
}
if value == 0 {
return fmt.Errorf("base fee change denominator cannot be 0")
}
return nil
}
func validateElasticityMultiplier(i interface{}) error {
_, ok := i.(uint32)
if !ok {
return fmt.Errorf("invalid parameter type: %T", i)
}
return nil
}
func validateInitialBaseFee(i interface{}) error {
value, ok := i.(int64)
if !ok {
return fmt.Errorf("invalid parameter type: %T", i)
}
if value < 0 {
return fmt.Errorf("initial base fee cannot be negative: %d", value)
}
return nil
}
func validateEnableHeight(i interface{}) error {
value, ok := i.(int64)
if !ok {
return fmt.Errorf("invalid parameter type: %T", i)
}
if value < 0 {
return fmt.Errorf("enable height cannot be negative: %d", value)
}
return nil
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,272 @@
// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.
// source: ethermint/feemarket/v1/query.proto
/*
Package types is a reverse proxy.
It translates gRPC into RESTful JSON APIs.
*/
package types
import (
"context"
"io"
"net/http"
"github.com/golang/protobuf/descriptor"
"github.com/golang/protobuf/proto"
"github.com/grpc-ecosystem/grpc-gateway/runtime"
"github.com/grpc-ecosystem/grpc-gateway/utilities"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/grpclog"
"google.golang.org/grpc/status"
)
// Suppress "imported and not used" errors
var _ codes.Code
var _ io.Reader
var _ status.Status
var _ = runtime.String
var _ = utilities.NewDoubleArray
var _ = descriptor.ForMessage
func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq QueryParamsRequest
var metadata runtime.ServerMetadata
msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq QueryParamsRequest
var metadata runtime.ServerMetadata
msg, err := server.Params(ctx, &protoReq)
return msg, metadata, err
}
func request_Query_BaseFee_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq QueryBaseFeeRequest
var metadata runtime.ServerMetadata
msg, err := client.BaseFee(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Query_BaseFee_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq QueryBaseFeeRequest
var metadata runtime.ServerMetadata
msg, err := server.BaseFee(ctx, &protoReq)
return msg, metadata, err
}
func request_Query_BlockGas_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq QueryBlockGasRequest
var metadata runtime.ServerMetadata
msg, err := client.BlockGas(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Query_BlockGas_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq QueryBlockGasRequest
var metadata runtime.ServerMetadata
msg, err := server.BlockGas(ctx, &protoReq)
return msg, metadata, err
}
// RegisterQueryHandlerServer registers the http handlers for service Query to "mux".
// UnaryRPC :call QueryServer directly.
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
// Note that using this registration option will cause many gRPC library features (such as grpc.SendHeader, etc) to stop working. Consider using RegisterQueryHandlerFromEndpoint instead.
func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error {
mux.Handle("GET", pattern_Query_Params_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.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Query_BaseFee_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.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Query_BaseFee_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Query_BaseFee_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Query_BlockGas_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.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Query_BlockGas_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Query_BlockGas_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but
// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
func RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
conn, err := grpc.Dial(endpoint, opts...)
if err != nil {
return err
}
defer func() {
if err != nil {
if cerr := conn.Close(); cerr != nil {
grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
}
return
}
go func() {
<-ctx.Done()
if cerr := conn.Close(); cerr != nil {
grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
}
}()
}()
return RegisterQueryHandler(ctx, mux, conn)
}
// RegisterQueryHandler registers the http handlers for service Query to "mux".
// The handlers forward requests to the grpc endpoint over "conn".
func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
return RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn))
}
// RegisterQueryHandlerClient registers the http handlers for service Query
// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "QueryClient".
// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "QueryClient"
// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
// "QueryClient" to call the correct interceptors.
func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error {
mux.Handle("GET", pattern_Query_Params_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_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Query_BaseFee_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_Query_BaseFee_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Query_BaseFee_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Query_BlockGas_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_Query_BlockGas_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Query_BlockGas_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
var (
pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"feemarket", "evm", "v1", "params"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Query_BaseFee_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"feemarket", "evm", "v1", "base_fee"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Query_BlockGas_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"feemarket", "evm", "v1", "block_gas"}, "", runtime.AssumeColonVerbOpt(true)))
)
var (
forward_Query_Params_0 = runtime.ForwardResponseMessage
forward_Query_BaseFee_0 = runtime.ForwardResponseMessage
forward_Query_BlockGas_0 = runtime.ForwardResponseMessage
)