evm: geth 1.10.9 fee market changes to Keeper and AnteHandler (#620)

* evm: geth 1.10.9 fee market changes

* update

* changelog
This commit is contained in:
Federico Kunze Küllmer 2021-10-04 16:58:06 +02:00 committed by GitHub
parent 561d5db985
commit fb9adf979c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
25 changed files with 1748 additions and 433 deletions

View File

@ -37,6 +37,10 @@ Ref: https://keepachangelog.com/en/1.0.0/
## Unreleased ## Unreleased
### State Machine Breaking
* (evm, ante) [tharsis#620](https://github.com/tharsis/ethermint/pull/620) Add fee market field to EVM `Keeper` and `AnteHandler`.
### API Breaking ### API Breaking
* (rpc) [tharsis#400](https://github.com/tharsis/ethermint/issues/400) Restructure JSON-RPC directory and rename server config * (rpc) [tharsis#400](https://github.com/tharsis/ethermint/issues/400) Restructure JSON-RPC directory and rename server config

View File

@ -36,6 +36,7 @@ func NewAnteHandler(
evmKeeper EVMKeeper, evmKeeper EVMKeeper,
feeGrantKeeper authante.FeegrantKeeper, feeGrantKeeper authante.FeegrantKeeper,
channelKeeper channelkeeper.Keeper, channelKeeper channelkeeper.Keeper,
feeMarketKeeper evmtypes.FeeMarketKeeper,
signModeHandler authsigning.SignModeHandler, signModeHandler authsigning.SignModeHandler,
) sdk.AnteHandler { ) sdk.AnteHandler {
return func( return func(
@ -63,7 +64,7 @@ func NewAnteHandler(
NewEthAccountVerificationDecorator(ak, bankKeeper, evmKeeper), NewEthAccountVerificationDecorator(ak, bankKeeper, evmKeeper),
NewEthNonceVerificationDecorator(ak), NewEthNonceVerificationDecorator(ak),
NewEthGasConsumeDecorator(evmKeeper), NewEthGasConsumeDecorator(evmKeeper),
NewCanTransferDecorator(evmKeeper), NewCanTransferDecorator(evmKeeper, feeMarketKeeper),
NewEthIncrementSenderSequenceDecorator(ak), // innermost AnteDecorator. NewEthIncrementSenderSequenceDecorator(ak), // innermost AnteDecorator.
) )

View File

@ -4,10 +4,11 @@ import (
"errors" "errors"
"math/big" "math/big"
"github.com/palantir/stacktrace"
sdk "github.com/cosmos/cosmos-sdk/types" sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
authante "github.com/cosmos/cosmos-sdk/x/auth/ante" authante "github.com/cosmos/cosmos-sdk/x/auth/ante"
"github.com/palantir/stacktrace"
ethermint "github.com/tharsis/ethermint/types" ethermint "github.com/tharsis/ethermint/types"
evmkeeper "github.com/tharsis/ethermint/x/evm/keeper" evmkeeper "github.com/tharsis/ethermint/x/evm/keeper"
@ -28,10 +29,10 @@ type EVMKeeper interface {
GetParams(ctx sdk.Context) evmtypes.Params GetParams(ctx sdk.Context) evmtypes.Params
WithContext(ctx sdk.Context) WithContext(ctx sdk.Context)
ResetRefundTransient(ctx sdk.Context) ResetRefundTransient(ctx sdk.Context)
NewEVM(msg core.Message, config *params.ChainConfig, params evmtypes.Params, coinbase common.Address, tracer vm.Tracer) *vm.EVM NewEVM(msg core.Message, config *params.ChainConfig, params evmtypes.Params, coinbase common.Address, baseFee *big.Int, tracer vm.Tracer) *vm.EVM
GetCodeHash(addr common.Address) common.Hash GetCodeHash(addr common.Address) common.Hash
DeductTxCostsFromUserBalance( DeductTxCostsFromUserBalance(
ctx sdk.Context, msgEthTx evmtypes.MsgEthereumTx, txData evmtypes.TxData, denom string, homestead, istanbul bool, ctx sdk.Context, msgEthTx evmtypes.MsgEthereumTx, txData evmtypes.TxData, denom string, homestead, istanbul, london bool,
) (sdk.Coins, error) ) (sdk.Coins, error)
} }
@ -234,7 +235,9 @@ type EthGasConsumeDecorator struct {
} }
// NewEthGasConsumeDecorator creates a new EthGasConsumeDecorator // NewEthGasConsumeDecorator creates a new EthGasConsumeDecorator
func NewEthGasConsumeDecorator(evmKeeper EVMKeeper) EthGasConsumeDecorator { func NewEthGasConsumeDecorator(
evmKeeper EVMKeeper,
) EthGasConsumeDecorator {
return EthGasConsumeDecorator{ return EthGasConsumeDecorator{
evmKeeper: evmKeeper, evmKeeper: evmKeeper,
} }
@ -265,6 +268,8 @@ func (egcd EthGasConsumeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simula
blockHeight := big.NewInt(ctx.BlockHeight()) blockHeight := big.NewInt(ctx.BlockHeight())
homestead := ethCfg.IsHomestead(blockHeight) homestead := ethCfg.IsHomestead(blockHeight)
istanbul := ethCfg.IsIstanbul(blockHeight) istanbul := ethCfg.IsIstanbul(blockHeight)
// london := ethCfg.IsLondon(blockHeight)
london := false
evmDenom := params.EvmDenom evmDenom := params.EvmDenom
var events sdk.Events var events sdk.Events
@ -290,6 +295,7 @@ func (egcd EthGasConsumeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simula
evmDenom, evmDenom,
homestead, homestead,
istanbul, istanbul,
london,
) )
if err != nil { if err != nil {
return ctx, stacktrace.Propagate(err, "failed to deduct transaction costs from user balance") return ctx, stacktrace.Propagate(err, "failed to deduct transaction costs from user balance")
@ -321,13 +327,15 @@ func (egcd EthGasConsumeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simula
// CanTransferDecorator checks if the sender is allowed to transfer funds according to the EVM block // CanTransferDecorator checks if the sender is allowed to transfer funds according to the EVM block
// context rules. // context rules.
type CanTransferDecorator struct { type CanTransferDecorator struct {
evmKeeper EVMKeeper evmKeeper EVMKeeper
feemarketKeeper evmtypes.FeeMarketKeeper
} }
// NewCanTransferDecorator creates a new CanTransferDecorator instance. // NewCanTransferDecorator creates a new CanTransferDecorator instance.
func NewCanTransferDecorator(evmKeeper EVMKeeper) CanTransferDecorator { func NewCanTransferDecorator(evmKeeper EVMKeeper, fmk evmtypes.FeeMarketKeeper) CanTransferDecorator {
return CanTransferDecorator{ return CanTransferDecorator{
evmKeeper: evmKeeper, evmKeeper: evmKeeper,
feemarketKeeper: fmk,
} }
} }
@ -337,6 +345,7 @@ func (ctd CanTransferDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate
ctd.evmKeeper.WithContext(ctx) ctd.evmKeeper.WithContext(ctx)
params := ctd.evmKeeper.GetParams(ctx) params := ctd.evmKeeper.GetParams(ctx)
feeMktParams := ctd.feemarketKeeper.GetParams(ctx)
ethCfg := params.ChainConfig.EthereumConfig(ctd.evmKeeper.ChainID()) ethCfg := params.ChainConfig.EthereumConfig(ctd.evmKeeper.ChainID())
signer := ethtypes.MakeSigner(ethCfg, big.NewInt(ctx.BlockHeight())) signer := ethtypes.MakeSigner(ethCfg, big.NewInt(ctx.BlockHeight()))
@ -350,6 +359,11 @@ func (ctd CanTransferDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate
) )
} }
var baseFee *big.Int
if !feeMktParams.NoBaseFee {
baseFee = ctd.feemarketKeeper.GetBaseFee(ctx)
}
coreMsg, err := msgEthTx.AsMessage(signer) coreMsg, err := msgEthTx.AsMessage(signer)
if err != nil { if err != nil {
return ctx, stacktrace.Propagate( return ctx, stacktrace.Propagate(
@ -359,7 +373,7 @@ func (ctd CanTransferDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate
} }
// NOTE: pass in an empty coinbase address and nil tracer as we don't need them for the check below // NOTE: pass in an empty coinbase address and nil tracer as we don't need them for the check below
evm := ctd.evmKeeper.NewEVM(coreMsg, ethCfg, params, common.Address{}, evmtypes.NewNoOpTracer()) evm := ctd.evmKeeper.NewEVM(coreMsg, ethCfg, params, common.Address{}, baseFee, evmtypes.NewNoOpTracer())
// check that caller has enough balance to cover asset transfer for **topmost** call // check that caller has enough balance to cover asset transfer for **topmost** call
// NOTE: here the gas consumed is from the context with the infinite gas meter // NOTE: here the gas consumed is from the context with the infinite gas meter
@ -369,6 +383,20 @@ func (ctd CanTransferDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate
"failed to transfer %s using the EVM block context transfer function", coreMsg.Value(), "failed to transfer %s using the EVM block context transfer function", coreMsg.Value(),
) )
} }
// if !feeMktParams.NoBaseFee && baseFee == nil {
// return ctx, stacktrace.Propagate(
// sdkerrors.Wrap(evmtypes.ErrInvalidBaseFee, "base fee is supported but evm block context value is nil"),
// "address %s", coreMsg.From(),
// )
// }
// if !feeMktParams.NoBaseFee && baseFee != nil && coreMsg.GasFeeCap().Cmp(baseFee) < 0 {
// return ctx, stacktrace.Propagate(
// sdkerrors.Wrapf(evmtypes.ErrInvalidBaseFee, "max fee per gas less than block base fee (%s < %s)", coreMsg.GasFeeCap(), baseFee),
// "address %s", coreMsg.From(),
// )
// }
} }
ctd.evmKeeper.WithContext(ctx) ctd.evmKeeper.WithContext(ctx)

View File

@ -298,7 +298,7 @@ func (suite AnteTestSuite) TestEthGasConsumeDecorator() {
} }
func (suite AnteTestSuite) TestCanTransferDecorator() { func (suite AnteTestSuite) TestCanTransferDecorator() {
dec := ante.NewCanTransferDecorator(suite.app.EvmKeeper) dec := ante.NewCanTransferDecorator(suite.app.EvmKeeper, suite.app.FeeMarketKeeper)
addr, privKey := tests.NewAddrKey() addr, privKey := tests.NewAddrKey()

View File

@ -56,7 +56,11 @@ func (suite *AnteTestSuite) SetupTest() {
suite.clientCtx = client.Context{}.WithTxConfig(encodingConfig.TxConfig) suite.clientCtx = client.Context{}.WithTxConfig(encodingConfig.TxConfig)
suite.anteHandler = ante.NewAnteHandler(suite.app.AccountKeeper, suite.app.BankKeeper, suite.app.EvmKeeper, suite.app.FeeGrantKeeper, suite.app.IBCKeeper.ChannelKeeper, encodingConfig.TxConfig.SignModeHandler()) suite.anteHandler = ante.NewAnteHandler(
suite.app.AccountKeeper, suite.app.BankKeeper, suite.app.EvmKeeper, suite.app.FeeGrantKeeper,
suite.app.IBCKeeper.ChannelKeeper, suite.app.FeeMarketKeeper,
encodingConfig.TxConfig.SignModeHandler(),
)
suite.ethSigner = ethtypes.LatestSignerForChainID(suite.app.EvmKeeper.ChainID()) suite.ethSigner = ethtypes.LatestSignerForChainID(suite.app.EvmKeeper.ChainID())
} }

View File

@ -338,16 +338,16 @@ func NewEthermintApp(
tracer := cast.ToString(appOpts.Get(srvflags.EVMTracer)) tracer := cast.ToString(appOpts.Get(srvflags.EVMTracer))
// Create Ethermint keepers // Create Ethermint keepers
app.EvmKeeper = evmkeeper.NewKeeper(
appCodec, keys[evmtypes.StoreKey], tkeys[evmtypes.TransientKey], app.GetSubspace(evmtypes.ModuleName),
app.AccountKeeper, app.BankKeeper, app.StakingKeeper,
tracer, bApp.Trace(), // debug EVM based on Baseapp options
)
app.FeeMarketKeeper = feemarketkeeper.NewKeeper( app.FeeMarketKeeper = feemarketkeeper.NewKeeper(
appCodec, keys[feemarkettypes.StoreKey], app.GetSubspace(feemarkettypes.ModuleName), appCodec, keys[feemarkettypes.StoreKey], app.GetSubspace(feemarkettypes.ModuleName),
) )
app.EvmKeeper = evmkeeper.NewKeeper(
appCodec, keys[evmtypes.StoreKey], tkeys[evmtypes.TransientKey], app.GetSubspace(evmtypes.ModuleName),
app.AccountKeeper, app.BankKeeper, app.StakingKeeper, app.FeeMarketKeeper,
tracer, bApp.Trace(), // debug EVM based on Baseapp options
)
// Create IBC Keeper // Create IBC Keeper
app.IBCKeeper = ibckeeper.NewKeeper( app.IBCKeeper = ibckeeper.NewKeeper(
appCodec, keys[ibchost.StoreKey], app.GetSubspace(ibchost.ModuleName), app.StakingKeeper, app.UpgradeKeeper, scopedIBCKeeper, appCodec, keys[ibchost.StoreKey], app.GetSubspace(ibchost.ModuleName), app.StakingKeeper, app.UpgradeKeeper, scopedIBCKeeper,
@ -512,6 +512,7 @@ func NewEthermintApp(
app.SetAnteHandler( app.SetAnteHandler(
ante.NewAnteHandler( ante.NewAnteHandler(
app.AccountKeeper, app.BankKeeper, app.EvmKeeper, app.FeeGrantKeeper, app.IBCKeeper.ChannelKeeper, app.AccountKeeper, app.BankKeeper, app.EvmKeeper, app.FeeGrantKeeper, app.IBCKeeper.ChannelKeeper,
app.FeeMarketKeeper,
encodingConfig.TxConfig.SignModeHandler(), encodingConfig.TxConfig.SignModeHandler(),
), ),
) )

1124
docs/api/proto-docs.md Normal file

File diff suppressed because it is too large Load Diff

105
docs/protodoc-markdown.tmpl Normal file
View File

@ -0,0 +1,105 @@
<!-- This file is auto-generated. Please do not modify it yourself. -->
# Protobuf Documentation
<a name="top"></a>
## Table of Contents
{{range .Files}}
{{$file_name := .Name}}- [{{.Name}}](#{{.Name}})
{{- if .Messages }}
{{range .Messages}} - [{{.LongName}}](#{{.FullName}})
{{end}}
{{- end -}}
{{- if .Enums }}
{{range .Enums}} - [{{.LongName}}](#{{.FullName}})
{{end}}
{{- end -}}
{{- if .Extensions }}
{{range .Extensions}} - [File-level Extensions](#{{$file_name}}-extensions)
{{end}}
{{- end -}}
{{- if .Services }}
{{range .Services}} - [{{.Name}}](#{{.FullName}})
{{end}}
{{- end -}}
{{end}}
- [Scalar Value Types](#scalar-value-types)
{{range .Files}}
{{$file_name := .Name}}
<a name="{{.Name}}"></a>
<p align="right"><a href="#top">Top</a></p>
## {{.Name}}
{{.Description}}
{{range .Messages}}
<a name="{{.FullName}}"></a>
### {{.LongName}}
{{.Description}}
{{if .HasFields}}
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
{{range .Fields -}}
| `{{.Name}}` | [{{.LongType}}](#{{.FullType}}) | {{.Label}} | {{if (index .Options "deprecated"|default false)}}**Deprecated.** {{end}}{{nobr .Description}}{{if .DefaultValue}} Default: {{.DefaultValue}}{{end}} |
{{end}}
{{end}}
{{if .HasExtensions}}
| Extension | Type | Base | Number | Description |
| --------- | ---- | ---- | ------ | ----------- |
{{range .Extensions -}}
| `{{.Name}}` | {{.LongType}} | {{.ContainingLongType}} | {{.Number}} | {{nobr .Description}}{{if .DefaultValue}} Default: {{.DefaultValue}}{{end}} |
{{end}}
{{end}}
{{end}} <!-- end messages -->
{{range .Enums}}
<a name="{{.FullName}}"></a>
### {{.LongName}}
{{.Description}}
| Name | Number | Description |
| ---- | ------ | ----------- |
{{range .Values -}}
| {{.Name}} | {{.Number}} | {{nobr .Description}} |
{{end}}
{{end}} <!-- end enums -->
{{if .HasExtensions}}
<a name="{{$file_name}}-extensions"></a>
### File-level Extensions
| Extension | Type | Base | Number | Description |
| --------- | ---- | ---- | ------ | ----------- |
{{range .Extensions -}}
| `{{.Name}}` | {{.LongType}} | {{.ContainingLongType}} | {{.Number}} | {{nobr .Description}}{{if .DefaultValue}} Default: `{{.DefaultValue}}`{{end}} |
{{end}}
{{end}} <!-- end HasExtensions -->
{{range .Services}}
<a name="{{.FullName}}"></a>
### {{.Name}}
{{.Description}}
| Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint |
| ----------- | ------------ | ------------- | ------------| ------- | -------- |
{{range .Methods -}}
| `{{.Name}}` | [{{.RequestLongType}}](#{{.RequestFullType}}){{if .RequestStreaming}} stream{{end}} | [{{.ResponseLongType}}](#{{.ResponseFullType}}){{if .ResponseStreaming}} stream{{end}} | {{nobr .Description}} | {{with (index .Options "google.api.http")}}{{range .Rules}}{{.Method}}|{{.Pattern}}{{end}}{{end}}|
{{end}}
{{end}} <!-- end services -->
{{end}}
## Scalar Value Types
| .proto Type | Notes | C++ | Java | Python | Go | C# | PHP | Ruby |
| ----------- | ----- | --- | ---- | ------ | -- | -- | --- | ---- |
{{range .Scalars -}}
| <a name="{{.ProtoType}}" /> {{.ProtoType}} | {{.Notes}} | {{.CppType}} | {{.JavaType}} | {{.PythonType}} | {{.GoType}} | {{.CSharp}} | {{.PhpType}} | {{.RubyType}} |
{{end}}

4
go.mod
View File

@ -31,10 +31,10 @@ require (
github.com/tendermint/tm-db v0.6.4 github.com/tendermint/tm-db v0.6.4
github.com/tyler-smith/go-bip39 v1.1.0 github.com/tyler-smith/go-bip39 v1.1.0
go.etcd.io/bbolt v1.3.6 // indirect go.etcd.io/bbolt v1.3.6 // indirect
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 // indirect golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 // indirect
golang.org/x/net v0.0.0-20210903162142-ad29c8ab022f // indirect golang.org/x/net v0.0.0-20210903162142-ad29c8ab022f // indirect
golang.org/x/sys v0.0.0-20210903071746-97244b99971b // indirect golang.org/x/sys v0.0.0-20210903071746-97244b99971b // indirect
google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af google.golang.org/genproto v0.0.0-20211001223012-bfb93cce50d9
google.golang.org/grpc v1.41.0 google.golang.org/grpc v1.41.0
gopkg.in/yaml.v2 v2.4.0 gopkg.in/yaml.v2 v2.4.0
) )

7
go.sum
View File

@ -1329,8 +1329,9 @@ golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWP
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ=
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@ -1795,8 +1796,8 @@ google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKr
google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w=
google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=
google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=
google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af h1:aLMMXFYqw01RA6XJim5uaN+afqNNjc9P8HPAbnpnc5s= google.golang.org/genproto v0.0.0-20211001223012-bfb93cce50d9 h1:eF1wcrhdz56Vugf8qNX5dD93ItkrhothojQyHXqloe0=
google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20211001223012-bfb93cce50d9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o= 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 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= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.1/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=

View File

@ -7,8 +7,6 @@ option go_package = "github.com/tharsis/ethermint/x/evm/types";
// Params defines the EVM module parameters // Params defines the EVM module parameters
message Params { message Params {
option (gogoproto.goproto_stringer) = false;
// evm denom represents the token denomination used to run the EVM state // evm denom represents the token denomination used to run the EVM state
// transitions. // transitions.
string evm_denom = 1 [ (gogoproto.moretags) = "yaml:\"evm_denom\"" ]; string evm_denom = 1 [ (gogoproto.moretags) = "yaml:\"evm_denom\"" ];

View File

@ -9,9 +9,9 @@ option go_package = "github.com/tharsis/ethermint/x/evm/types";
// GenesisState defines the evm module's genesis state. // GenesisState defines the evm module's genesis state.
message GenesisState { message GenesisState {
// accounts is an array containing the ethereum genesis accounts. // accounts is an array containing the ethereum genesis accounts.
repeated GenesisAccount accounts = 1 [(gogoproto.nullable) = false]; repeated GenesisAccount accounts = 1 [ (gogoproto.nullable) = false ];
// params defines all the paramaters of the module. // params defines all the paramaters of the module.
Params params = 3 [(gogoproto.nullable) = false]; Params params = 2 [(gogoproto.nullable) = false];
} }
// GenesisAccount defines an account to be initialized in the genesis state. // GenesisAccount defines an account to be initialized in the genesis state.
@ -23,5 +23,6 @@ message GenesisAccount {
// code defines the hex bytes of the account code. // code defines the hex bytes of the account code.
string code = 2; string code = 2;
// storage defines the set of state key values for the account. // storage defines the set of state key values for the account.
repeated State storage = 3 [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "Storage"]; repeated State storage = 3
[ (gogoproto.nullable) = false, (gogoproto.castrepeated) = "Storage" ];
} }

View File

@ -208,9 +208,6 @@ message QueryParamsResponse {
Params params = 1 [ (gogoproto.nullable) = false ]; Params params = 1 [ (gogoproto.nullable) = false ];
} }
// QueryStaticCallRequest defines static call response
message QueryStaticCallResponse { bytes data = 1; }
// EthCallRequest defines EthCall request // EthCallRequest defines EthCall request
message EthCallRequest { message EthCallRequest {
// same json format as the json rpc api. // same json format as the json rpc api.

View File

@ -224,6 +224,7 @@ func (k Keeper) EthCall(c context.Context, req *types.EthCallRequest) (*types.Ms
msg := args.ToMessage(req.GasCap) msg := args.ToMessage(req.GasCap)
params := k.GetParams(ctx) params := k.GetParams(ctx)
feemktParams := k.feeMarketKeeper.GetParams(ctx)
ethCfg := params.ChainConfig.EthereumConfig(k.eip155ChainID) ethCfg := params.ChainConfig.EthereumConfig(k.eip155ChainID)
coinbase, err := k.GetCoinbaseAddress(ctx) coinbase, err := k.GetCoinbaseAddress(ctx)
@ -231,8 +232,16 @@ func (k Keeper) EthCall(c context.Context, req *types.EthCallRequest) (*types.Ms
return nil, status.Error(codes.Internal, err.Error()) return nil, status.Error(codes.Internal, err.Error())
} }
tracer := types.NewTracer(k.tracer, msg, ethCfg, k.Ctx().BlockHeight(), k.debug) var baseFee *big.Int
evm := k.NewEVM(msg, ethCfg, params, coinbase, tracer)
// ignore base fee if not enabled by fee market params
if !feemktParams.NoBaseFee {
baseFee = k.feeMarketKeeper.GetBaseFee(ctx)
}
tracer := types.NewTracer(k.tracer, msg, ethCfg, ctx.BlockHeight(), k.debug)
evm := k.NewEVM(msg, ethCfg, params, coinbase, baseFee, tracer)
// pass true means execute in query mode, which don't do actual gas refund. // pass true means execute in query mode, which don't do actual gas refund.
res, err := k.ApplyMessage(evm, msg, ethCfg, true) res, err := k.ApplyMessage(evm, msg, ethCfg, true)
@ -299,8 +308,10 @@ func (k Keeper) EstimateGas(c context.Context, req *types.EthCallRequest) (*type
return nil, status.Error(codes.Internal, err.Error()) return nil, status.Error(codes.Internal, err.Error())
} }
baseFee := k.feeMarketKeeper.GetBaseFee(ctx)
// Create a helper to check if a gas allowance results in an executable transaction // Create a helper to check if a gas allowance results in an executable transaction
executable := func(gas uint64) (bool, *types.MsgEthereumTxResponse, error) { executable := func(gas uint64) (vmerror bool, rsp *types.MsgEthereumTxResponse, err error) {
args.Gas = (*hexutil.Uint64)(&gas) args.Gas = (*hexutil.Uint64)(&gas)
// Reset to the initial context // Reset to the initial context
@ -309,9 +320,11 @@ func (k Keeper) EstimateGas(c context.Context, req *types.EthCallRequest) (*type
msg := args.ToMessage(req.GasCap) msg := args.ToMessage(req.GasCap)
tracer := types.NewTracer(k.tracer, msg, ethCfg, k.Ctx().BlockHeight(), k.debug) tracer := types.NewTracer(k.tracer, msg, ethCfg, k.Ctx().BlockHeight(), k.debug)
evm := k.NewEVM(msg, ethCfg, params, coinbase, tracer)
evm := k.NewEVM(msg, ethCfg, params, coinbase, baseFee, tracer)
// pass true means execute in query mode, which don't do actual gas refund. // pass true means execute in query mode, which don't do actual gas refund.
rsp, err := k.ApplyMessage(evm, msg, ethCfg, true) rsp, err = k.ApplyMessage(evm, msg, ethCfg, true)
k.ctxStack.RevertAll() k.ctxStack.RevertAll()
@ -370,8 +383,9 @@ func (k Keeper) TraceTx(c context.Context, req *types.QueryTraceTxRequest) (*typ
ethCfg := params.ChainConfig.EthereumConfig(k.eip155ChainID) ethCfg := params.ChainConfig.EthereumConfig(k.eip155ChainID)
signer := ethtypes.MakeSigner(ethCfg, big.NewInt(ctx.BlockHeight())) signer := ethtypes.MakeSigner(ethCfg, big.NewInt(ctx.BlockHeight()))
tx := req.Msg.AsTransaction() tx := req.Msg.AsTransaction()
baseFee := k.feeMarketKeeper.GetBaseFee(ctx)
result, err := k.traceTx(ctx, coinbase, signer, req.TxIndex, params, ethCfg, tx, req.TraceConfig) result, err := k.traceTx(ctx, coinbase, signer, req.TxIndex, params, ethCfg, tx, baseFee, req.TraceConfig)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -394,6 +408,7 @@ func (k *Keeper) traceTx(
params types.Params, params types.Params,
ethCfg *ethparams.ChainConfig, ethCfg *ethparams.ChainConfig,
tx *ethtypes.Transaction, tx *ethtypes.Transaction,
baseFee *big.Int,
traceConfig *types.TraceConfig, traceConfig *types.TraceConfig,
) (*interface{}, error) { ) (*interface{}, error) {
// Assemble the structured logger or the JavaScript tracer // Assemble the structured logger or the JavaScript tracer
@ -407,6 +422,8 @@ func (k *Keeper) traceTx(
return nil, status.Error(codes.Internal, err.Error()) return nil, status.Error(codes.Internal, err.Error())
} }
txHash := tx.Hash()
switch { switch {
case traceConfig != nil && traceConfig.Tracer != "": case traceConfig != nil && traceConfig.Tracer != "":
timeout := defaultTraceTimeout timeout := defaultTraceTimeout
@ -422,8 +439,7 @@ func (k *Keeper) traceTx(
txContext := core.NewEVMTxContext(msg) txContext := core.NewEVMTxContext(msg)
// Construct the JavaScript tracer to execute with // Construct the JavaScript tracer to execute with
tracer, err = tracers.New(traceConfig.Tracer, txContext) if tracer, err = tracers.New(traceConfig.Tracer, txContext); err != nil {
if err != nil {
return nil, status.Error(codes.Internal, err.Error()) return nil, status.Error(codes.Internal, err.Error())
} }
@ -450,9 +466,9 @@ func (k *Keeper) traceTx(
tracer = types.NewTracer(types.TracerStruct, msg, ethCfg, ctx.BlockHeight(), true) tracer = types.NewTracer(types.TracerStruct, msg, ethCfg, ctx.BlockHeight(), true)
} }
evm := k.NewEVM(msg, ethCfg, params, coinbase, tracer) evm := k.NewEVM(msg, ethCfg, params, coinbase, baseFee, tracer)
k.SetTxHashTransient(tx.Hash()) k.SetTxHashTransient(txHash)
k.SetTxIndexTransient(txIndex) k.SetTxIndexTransient(txIndex)
res, err := k.ApplyMessage(evm, msg, ethCfg, true) res, err := k.ApplyMessage(evm, msg, ethCfg, true)

View File

@ -39,6 +39,8 @@ type Keeper struct {
bankKeeper types.BankKeeper bankKeeper types.BankKeeper
// access historical headers for EVM state transition execution // access historical headers for EVM state transition execution
stakingKeeper types.StakingKeeper stakingKeeper types.StakingKeeper
// fetch EIP1559 base fee and parameters
feeMarketKeeper types.FeeMarketKeeper
// Manage the initial context and cache context stack for accessing the store, // Manage the initial context and cache context stack for accessing the store,
// emit events and log info. // emit events and log info.
@ -67,6 +69,7 @@ func NewKeeper(
cdc codec.BinaryCodec, cdc codec.BinaryCodec,
storeKey, transientKey sdk.StoreKey, paramSpace paramtypes.Subspace, storeKey, transientKey sdk.StoreKey, paramSpace paramtypes.Subspace,
ak types.AccountKeeper, bankKeeper types.BankKeeper, sk types.StakingKeeper, ak types.AccountKeeper, bankKeeper types.BankKeeper, sk types.StakingKeeper,
fmk types.FeeMarketKeeper,
tracer string, debug bool, tracer string, debug bool,
) *Keeper { ) *Keeper {
// ensure evm module account is set // ensure evm module account is set
@ -81,16 +84,17 @@ func NewKeeper(
// NOTE: we pass in the parameter space to the CommitStateDB in order to use custom denominations for the EVM operations // NOTE: we pass in the parameter space to the CommitStateDB in order to use custom denominations for the EVM operations
return &Keeper{ return &Keeper{
cdc: cdc, cdc: cdc,
paramSpace: paramSpace, paramSpace: paramSpace,
accountKeeper: ak, accountKeeper: ak,
bankKeeper: bankKeeper, bankKeeper: bankKeeper,
stakingKeeper: sk, stakingKeeper: sk,
storeKey: storeKey, feeMarketKeeper: fmk,
transientKey: transientKey, storeKey: storeKey,
tracer: tracer, transientKey: transientKey,
debug: debug, tracer: tracer,
stateErr: nil, debug: debug,
stateErr: nil,
} }
} }

View File

@ -30,6 +30,7 @@ func (k *Keeper) NewEVM(
config *params.ChainConfig, config *params.ChainConfig,
params types.Params, params types.Params,
coinbase common.Address, coinbase common.Address,
baseFee *big.Int,
tracer vm.Tracer, tracer vm.Tracer,
) *vm.EVM { ) *vm.EVM {
blockCtx := vm.BlockContext{ blockCtx := vm.BlockContext{
@ -41,6 +42,7 @@ func (k *Keeper) NewEVM(
BlockNumber: big.NewInt(k.Ctx().BlockHeight()), BlockNumber: big.NewInt(k.Ctx().BlockHeight()),
Time: big.NewInt(k.Ctx().BlockHeader().Time.Unix()), Time: big.NewInt(k.Ctx().BlockHeader().Time.Unix()),
Difficulty: big.NewInt(0), // unused. Only required in PoW context Difficulty: big.NewInt(0), // unused. Only required in PoW context
// BaseFee: baseFee,
} }
txCtx := core.NewEVMTxContext(msg) txCtx := core.NewEVMTxContext(msg)
@ -52,11 +54,14 @@ func (k *Keeper) NewEVM(
// VMConfig creates an EVM configuration from the debug setting and the extra EIPs enabled on the // VMConfig creates an EVM configuration from the debug setting and the extra EIPs enabled on the
// module parameters. The config generated uses the default JumpTable from the EVM. // module parameters. The config generated uses the default JumpTable from the EVM.
func (k Keeper) VMConfig(msg core.Message, params types.Params, tracer vm.Tracer) vm.Config { func (k Keeper) VMConfig(msg core.Message, params types.Params, tracer vm.Tracer) vm.Config {
// fmParams := k.feeMarketKeeper.GetParams(k.Ctx())
return vm.Config{ return vm.Config{
Debug: k.debug, Debug: k.debug,
Tracer: tracer, Tracer: tracer,
NoRecursion: false, // TODO: consider disabling recursion though params NoRecursion: false, // TODO: consider disabling recursion though params
ExtraEips: params.EIPs(), // NoBaseFee: fmParams.NoBaseFee,
ExtraEips: params.EIPs(),
} }
} }
@ -154,6 +159,8 @@ func (k *Keeper) ApplyTransaction(tx *ethtypes.Transaction) (*types.MsgEthereumT
// get the latest signer according to the chain rules from the config // get the latest signer according to the chain rules from the config
signer := ethtypes.MakeSigner(ethCfg, big.NewInt(ctx.BlockHeight())) signer := ethtypes.MakeSigner(ethCfg, big.NewInt(ctx.BlockHeight()))
baseFee := k.feeMarketKeeper.GetBaseFee(ctx)
msg, err := tx.AsMessage(signer) msg, err := tx.AsMessage(signer)
if err != nil { if err != nil {
return nil, stacktrace.Propagate(err, "failed to return ethereum transaction as core message") return nil, stacktrace.Propagate(err, "failed to return ethereum transaction as core message")
@ -167,7 +174,7 @@ func (k *Keeper) ApplyTransaction(tx *ethtypes.Transaction) (*types.MsgEthereumT
// create an ethereum EVM instance and run the message // create an ethereum EVM instance and run the message
tracer := types.NewTracer(k.tracer, msg, ethCfg, ctx.BlockHeight(), k.debug) tracer := types.NewTracer(k.tracer, msg, ethCfg, ctx.BlockHeight(), k.debug)
evm := k.NewEVM(msg, ethCfg, params, coinbase, tracer) evm := k.NewEVM(msg, ethCfg, params, coinbase, baseFee, tracer)
txHash := tx.Hash() txHash := tx.Hash()
@ -263,6 +270,7 @@ func (k *Keeper) ApplyMessage(evm *vm.EVM, msg core.Message, cfg *params.ChainCo
sender := vm.AccountRef(msg.From()) sender := vm.AccountRef(msg.From())
contractCreation := msg.To() == nil contractCreation := msg.To() == nil
// isLondon := cfg.IsLondon(evm.Context.BlockNumber)
intrinsicGas, err := k.GetEthIntrinsicGas(msg, cfg, contractCreation) intrinsicGas, err := k.GetEthIntrinsicGas(msg, cfg, contractCreation)
if err != nil { if err != nil {
@ -290,6 +298,13 @@ func (k *Keeper) ApplyMessage(evm *vm.EVM, msg core.Message, cfg *params.ChainCo
refundQuotient := uint64(2) refundQuotient := uint64(2)
// refundQuotient := params.RefundQuotient
// // After EIP-3529: refunds are capped to gasUsed / 5
// if isLondon {
// refundQuotient = params.RefundQuotientEIP3529
// }
if query { if query {
// gRPC query handlers don't go through the AnteHandler to deduct the gas fee from the sender or have access historical state. // gRPC query handlers don't go through the AnteHandler to deduct the gas fee from the sender or have access historical state.
// We don't refund gas to the sender. // We don't refund gas to the sender.
@ -340,7 +355,9 @@ func (k *Keeper) ApplyNativeMessage(msg core.Message) (*types.MsgEthereumTxRespo
return nil, stacktrace.Propagate(err, "failed to obtain coinbase address") return nil, stacktrace.Propagate(err, "failed to obtain coinbase address")
} }
evm := k.NewEVM(msg, ethCfg, params, coinbase, nil) baseFee := k.feeMarketKeeper.GetBaseFee(ctx)
evm := k.NewEVM(msg, ethCfg, params, coinbase, baseFee, nil)
ret, err := k.ApplyMessage(evm, msg, ethCfg, true) ret, err := k.ApplyMessage(evm, msg, ethCfg, true)
if err != nil { if err != nil {

View File

@ -91,7 +91,7 @@ func newNativeMessage(
return nil, err return nil, err
} }
m, err := msg.AsMessage(msgSigner) m, err := msg.AsMessage(msgSigner) // TODO: add DynamicFeeTx
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -1,6 +1,8 @@
package keeper package keeper
import ( import (
"math/big"
sdk "github.com/cosmos/cosmos-sdk/types" sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
authante "github.com/cosmos/cosmos-sdk/x/auth/ante" authante "github.com/cosmos/cosmos-sdk/x/auth/ante"
@ -8,6 +10,7 @@ import (
evmtypes "github.com/tharsis/ethermint/x/evm/types" evmtypes "github.com/tharsis/ethermint/x/evm/types"
cmath "github.com/ethereum/go-ethereum/common/math"
"github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core"
ethtypes "github.com/ethereum/go-ethereum/core/types" ethtypes "github.com/ethereum/go-ethereum/core/types"
) )
@ -18,8 +21,7 @@ func (k Keeper) DeductTxCostsFromUserBalance(
msgEthTx evmtypes.MsgEthereumTx, msgEthTx evmtypes.MsgEthereumTx,
txData evmtypes.TxData, txData evmtypes.TxData,
denom string, denom string,
homestead bool, homestead, istanbul, london bool,
istanbul bool,
) (sdk.Coins, error) { ) (sdk.Coins, error) {
isContractCreation := txData.GetTo() == nil isContractCreation := txData.GetTo() == nil
@ -53,8 +55,19 @@ func (k Keeper) DeductTxCostsFromUserBalance(
) )
} }
// calculate the fees paid to validators based on gas limit and price // calculate the fees paid to validators based on the effective tip and price
feeAmt := txData.Fee() // fee = gas limit * gas price effectiveTip := txData.GetGasPrice()
feeMktParams := k.feeMarketKeeper.GetParams(ctx)
if london && !feeMktParams.NoBaseFee {
// TODO: add to if statement above txData.TxType() == ethtypes.DynamicFeeTxType
baseFee := k.feeMarketKeeper.GetBaseFee(ctx)
effectiveTip = cmath.BigMin(txData.GetGasTipCap(), new(big.Int).Sub(txData.GetGasFeeCap(), baseFee))
}
gasUsed := new(big.Int).SetUint64(txData.GetGas())
feeAmt := new(big.Int).Mul(gasUsed, effectiveTip)
fees := sdk.Coins{sdk.NewCoin(denom, sdk.NewIntFromBigInt(feeAmt))} fees := sdk.Coins{sdk.NewCoin(denom, sdk.NewIntFromBigInt(feeAmt))}

View File

@ -242,6 +242,7 @@ func (suite *KeeperTestSuite) TestDeductTxCostsFromUserBalance() {
evmtypes.DefaultEVMDenom, evmtypes.DefaultEVMDenom,
false, false,
false, false,
false, // london
) )
if tc.expectPass { if tc.expectPass {

186
x/evm/types/evm.pb.go generated
View File

@ -39,8 +39,9 @@ type Params struct {
ChainConfig ChainConfig `protobuf:"bytes,5,opt,name=chain_config,json=chainConfig,proto3" json:"chain_config" yaml:"chain_config"` ChainConfig ChainConfig `protobuf:"bytes,5,opt,name=chain_config,json=chainConfig,proto3" json:"chain_config" yaml:"chain_config"`
} }
func (m *Params) Reset() { *m = Params{} } func (m *Params) Reset() { *m = Params{} }
func (*Params) ProtoMessage() {} func (m *Params) String() string { return proto.CompactTextString(m) }
func (*Params) ProtoMessage() {}
func (*Params) Descriptor() ([]byte, []int) { func (*Params) Descriptor() ([]byte, []int) {
return fileDescriptor_d21ecc92c8c8583e, []int{0} return fileDescriptor_d21ecc92c8c8583e, []int{0}
} }
@ -653,97 +654,96 @@ func init() {
func init() { proto.RegisterFile("ethermint/evm/v1/evm.proto", fileDescriptor_d21ecc92c8c8583e) } func init() { proto.RegisterFile("ethermint/evm/v1/evm.proto", fileDescriptor_d21ecc92c8c8583e) }
var fileDescriptor_d21ecc92c8c8583e = []byte{ var fileDescriptor_d21ecc92c8c8583e = []byte{
// 1427 bytes of a gzipped FileDescriptorProto // 1421 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x57, 0xcb, 0x6e, 0x1b, 0xb7, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x57, 0x4d, 0x6f, 0xdb, 0xb6,
0x1a, 0xb6, 0x2d, 0xd9, 0x1e, 0x51, 0x57, 0xd3, 0x8e, 0x8f, 0x92, 0xe0, 0x78, 0x7c, 0x66, 0x71, 0x1b, 0x4f, 0x62, 0x27, 0x91, 0xe9, 0xd7, 0x30, 0x69, 0xfe, 0x6e, 0x8b, 0x7f, 0x94, 0xe9, 0x30,
0xe0, 0x02, 0x89, 0x15, 0x3b, 0x30, 0x6a, 0x24, 0xe8, 0xc2, 0x63, 0x3b, 0xa9, 0xd3, 0xb4, 0x35, 0x64, 0x40, 0x1b, 0x37, 0x29, 0x82, 0x05, 0x2d, 0x76, 0x88, 0x92, 0xb4, 0x4b, 0xd7, 0x6d, 0x01,
0x68, 0x17, 0x05, 0x0a, 0x14, 0x03, 0x6a, 0x86, 0x19, 0x4d, 0x3d, 0x33, 0x14, 0x48, 0x8e, 0x2a, 0x93, 0x61, 0xc0, 0x80, 0x41, 0xa0, 0x25, 0x56, 0xd6, 0x22, 0x89, 0x06, 0x49, 0x79, 0xf6, 0xb0,
0x15, 0x7d, 0x80, 0x02, 0xdd, 0x74, 0xd9, 0x45, 0x17, 0x7d, 0x89, 0xbe, 0x43, 0xd0, 0x55, 0x96, 0x0f, 0x30, 0x60, 0x97, 0x7d, 0x80, 0x1d, 0xf6, 0x25, 0xf6, 0x1d, 0x8a, 0x9d, 0x7a, 0x19, 0x30,
0x45, 0x0b, 0x0c, 0x0a, 0x65, 0xa7, 0xa5, 0x9e, 0xa0, 0x18, 0x92, 0xba, 0x3a, 0x68, 0x6b, 0xaf, 0xec, 0x20, 0x0c, 0xee, 0xcd, 0x47, 0x7f, 0x82, 0x41, 0x24, 0xfd, 0x9a, 0x62, 0x5b, 0x72, 0x32,
0xc4, 0xef, 0xbf, 0x7c, 0x1f, 0xf9, 0xf3, 0x1f, 0x92, 0x02, 0xf7, 0x88, 0x68, 0x11, 0x16, 0x05, 0x7f, 0xcf, 0xcb, 0xef, 0x47, 0x3e, 0x7c, 0x48, 0xca, 0xe0, 0x1e, 0x11, 0x2d, 0xc2, 0xa2, 0x20,
0xb1, 0x68, 0x90, 0x4e, 0xd4, 0xe8, 0xec, 0x65, 0x3f, 0xbb, 0x6d, 0x46, 0x05, 0x85, 0xb5, 0xb1, 0x16, 0x0d, 0xd2, 0x89, 0x1a, 0x9d, 0xbd, 0xec, 0x67, 0xb7, 0xcd, 0xa8, 0xa0, 0xb0, 0x36, 0xf6,
0x6f, 0x37, 0x33, 0x76, 0xf6, 0xee, 0x6d, 0xf8, 0xd4, 0xa7, 0xd2, 0xd9, 0xc8, 0x46, 0x2a, 0xce, 0xed, 0x66, 0xc6, 0xce, 0xde, 0xbd, 0x0d, 0x9f, 0xfa, 0x54, 0x3a, 0x1b, 0xd9, 0x48, 0xc5, 0x59,
0xfa, 0x63, 0x09, 0xac, 0x9c, 0x63, 0x86, 0x23, 0x0e, 0xf7, 0x40, 0x81, 0x74, 0x22, 0xc7, 0x23, 0xbf, 0x2f, 0x81, 0x95, 0x73, 0xcc, 0x70, 0xc4, 0xe1, 0x1e, 0x28, 0x90, 0x4e, 0xe4, 0x78, 0x24,
0x31, 0x8d, 0xea, 0x8b, 0xdb, 0x8b, 0x3b, 0x05, 0x7b, 0x63, 0x98, 0x9a, 0xb5, 0x1e, 0x8e, 0xc2, 0xa6, 0x51, 0x7d, 0x71, 0x7b, 0x71, 0xa7, 0x60, 0x6f, 0x0c, 0x53, 0xb3, 0xd6, 0xc3, 0x51, 0xf8,
0x27, 0xd6, 0xd8, 0x65, 0x21, 0x83, 0x74, 0xa2, 0x93, 0x6c, 0x08, 0x3f, 0x00, 0x65, 0x12, 0xe3, 0xc4, 0x1a, 0xbb, 0x2c, 0x64, 0x90, 0x4e, 0x74, 0x92, 0x0d, 0xe1, 0x47, 0xa0, 0x4c, 0x62, 0xdc,
0x66, 0x48, 0x1c, 0x97, 0x11, 0x2c, 0x48, 0x7d, 0x69, 0x7b, 0x71, 0xc7, 0xb0, 0xeb, 0xc3, 0xd4, 0x0c, 0x89, 0xe3, 0x32, 0x82, 0x05, 0xa9, 0x2f, 0x6d, 0x2f, 0xee, 0x18, 0x76, 0x7d, 0x98, 0x9a,
0xdc, 0xd0, 0x69, 0xd3, 0x6e, 0x0b, 0x95, 0x14, 0x3e, 0x96, 0x10, 0xbe, 0x0f, 0x8a, 0x23, 0x3f, 0x1b, 0x3a, 0x6d, 0xda, 0x6d, 0xa1, 0x92, 0xc2, 0xc7, 0x12, 0xc2, 0x0f, 0x41, 0x71, 0xe4, 0xc7,
0x0e, 0xc3, 0x7a, 0x4e, 0x26, 0x6f, 0x0e, 0x53, 0x13, 0xce, 0x26, 0xe3, 0x30, 0xb4, 0x10, 0xd0, 0x61, 0x58, 0xcf, 0xc9, 0xe4, 0xcd, 0x61, 0x6a, 0xc2, 0xd9, 0x64, 0x1c, 0x86, 0x16, 0x02, 0x3a,
0xa9, 0x38, 0x0c, 0xe1, 0x11, 0x00, 0xa4, 0x2b, 0x18, 0x76, 0x48, 0xd0, 0xe6, 0xf5, 0xfc, 0x76, 0x15, 0x87, 0x21, 0x3c, 0x02, 0x80, 0x74, 0x05, 0xc3, 0x0e, 0x09, 0xda, 0xbc, 0x9e, 0xdf, 0xce,
0x6e, 0x27, 0x67, 0x5b, 0xfd, 0xd4, 0x2c, 0x9c, 0x66, 0xd6, 0xd3, 0xb3, 0x73, 0x3e, 0x4c, 0xcd, 0xed, 0xe4, 0x6c, 0xab, 0x9f, 0x9a, 0x85, 0xd3, 0xcc, 0x7a, 0x7a, 0x76, 0xce, 0x87, 0xa9, 0xb9,
0x35, 0x4d, 0x32, 0x0e, 0xb4, 0x50, 0x41, 0x82, 0xd3, 0xa0, 0xcd, 0xe1, 0x97, 0xa0, 0xe4, 0xb6, 0xa6, 0x49, 0xc6, 0x81, 0x16, 0x2a, 0x48, 0x70, 0x1a, 0xb4, 0x39, 0xfc, 0x1a, 0x94, 0xdc, 0x16,
0x70, 0x10, 0x3b, 0x2e, 0x8d, 0x5f, 0x05, 0x7e, 0x7d, 0x79, 0x7b, 0x71, 0xa7, 0xb8, 0xff, 0xdf, 0x0e, 0x62, 0xc7, 0xa5, 0xf1, 0xab, 0xc0, 0xaf, 0x2f, 0x6f, 0x2f, 0xee, 0x14, 0xf7, 0xff, 0xbf,
0xdd, 0xf9, 0xba, 0xed, 0x1e, 0x67, 0x51, 0xc7, 0x32, 0xc8, 0xbe, 0xff, 0x3a, 0x35, 0x17, 0x86, 0x3b, 0x5f, 0xb7, 0xdd, 0xe3, 0x2c, 0xea, 0x58, 0x06, 0xd9, 0xf7, 0x5f, 0xa7, 0xe6, 0xc2, 0x30,
0xa9, 0xb9, 0xae, 0xa8, 0xa7, 0x09, 0x2c, 0x54, 0x74, 0x27, 0x91, 0x4f, 0xf2, 0x3f, 0xfe, 0x6c, 0x35, 0xd7, 0x15, 0xf5, 0x34, 0x81, 0x85, 0x8a, 0xee, 0x24, 0xd2, 0xfa, 0xb9, 0x0c, 0x8a, 0x53,
0x2e, 0x58, 0x3f, 0x95, 0x41, 0x71, 0x2a, 0x1f, 0x46, 0xa0, 0xda, 0xa2, 0x11, 0xe1, 0x82, 0x60, 0x99, 0x30, 0x02, 0xd5, 0x16, 0x8d, 0x08, 0x17, 0x04, 0x7b, 0x4e, 0x33, 0xa4, 0xee, 0x95, 0x2e,
0xcf, 0x69, 0x86, 0xd4, 0xbd, 0xd2, 0x85, 0x3e, 0xf9, 0x3d, 0x35, 0xff, 0xef, 0x07, 0xa2, 0x95, 0xf1, 0xc9, 0x9f, 0xa9, 0xf9, 0xbe, 0x1f, 0x88, 0x56, 0xd2, 0xdc, 0x75, 0x69, 0xd4, 0x70, 0x29,
0x34, 0x77, 0x5d, 0x1a, 0x35, 0x5c, 0xca, 0x23, 0xca, 0xf5, 0xcf, 0x43, 0xee, 0x5d, 0x35, 0x44, 0x8f, 0x28, 0xd7, 0x3f, 0x0f, 0xb9, 0x77, 0xd5, 0x10, 0xbd, 0x36, 0xe1, 0xbb, 0x67, 0xb1, 0x18,
0xaf, 0x4d, 0xf8, 0xee, 0x59, 0x2c, 0x86, 0xa9, 0xb9, 0xa9, 0xe4, 0xe7, 0xa8, 0x2c, 0x54, 0x19, 0xa6, 0xe6, 0xa6, 0x12, 0x9e, 0xa3, 0xb2, 0x50, 0x65, 0x6c, 0xb1, 0x33, 0x03, 0xec, 0x81, 0x8a,
0x5b, 0xec, 0xcc, 0x00, 0x7b, 0xa0, 0xe2, 0x61, 0xea, 0xbc, 0xa2, 0xec, 0x4a, 0xab, 0x2d, 0x49, 0x87, 0xa9, 0xf3, 0x8a, 0xb2, 0x2b, 0xad, 0xb6, 0x24, 0xd5, 0x2e, 0xfe, 0xbb, 0x5a, 0x3f, 0x35,
0xb5, 0x8b, 0x7f, 0xaf, 0xd6, 0x4f, 0xcd, 0xd2, 0xc9, 0xd1, 0xa7, 0xcf, 0x28, 0xbb, 0x92, 0x9c, 0x4b, 0x27, 0x47, 0x9f, 0x3f, 0xa3, 0xec, 0x4a, 0x72, 0x0e, 0x53, 0xf3, 0x8e, 0x52, 0x9f, 0x65,
0xc3, 0xd4, 0xbc, 0xa3, 0xd4, 0x67, 0x99, 0x2d, 0x54, 0xf2, 0x30, 0x1d, 0x87, 0xc1, 0xcf, 0x41, 0xb6, 0x50, 0xc9, 0xc3, 0x74, 0x1c, 0x06, 0xbf, 0x04, 0xb5, 0x71, 0x00, 0x4f, 0xda, 0x6d, 0xca,
0x6d, 0x1c, 0xc0, 0x93, 0x76, 0x9b, 0x32, 0xa1, 0xf7, 0xf7, 0x61, 0x3f, 0x35, 0x2b, 0x9a, 0xf2, 0x84, 0xde, 0xd9, 0x87, 0xfd, 0xd4, 0xac, 0x68, 0xca, 0x0b, 0xe5, 0x19, 0xa6, 0xe6, 0xff, 0xe6,
0x42, 0x79, 0x86, 0xa9, 0xf9, 0x9f, 0x39, 0x52, 0x9d, 0x63, 0xa1, 0x8a, 0xa6, 0xd5, 0xa1, 0x90, 0x48, 0x75, 0x8e, 0x85, 0x2a, 0x9a, 0x56, 0x87, 0x42, 0x0e, 0x4a, 0x24, 0x68, 0xef, 0x1d, 0x3c,
0x83, 0x12, 0x09, 0xda, 0x7b, 0x07, 0x8f, 0xf4, 0x8a, 0xf2, 0x72, 0x45, 0xe7, 0x37, 0x5a, 0x51, 0xd2, 0x2b, 0xca, 0xcb, 0x15, 0x9d, 0xdf, 0x68, 0x45, 0xc5, 0xd3, 0xb3, 0xf3, 0xbd, 0x83, 0x47,
0xf1, 0xf4, 0xec, 0x7c, 0xef, 0xe0, 0xd1, 0x68, 0x41, 0x7a, 0x37, 0xa7, 0x69, 0x2d, 0x54, 0x54, 0xa3, 0x05, 0xe9, 0x7d, 0x9c, 0xa6, 0xb5, 0x50, 0x51, 0x41, 0xb5, 0x9a, 0x33, 0xa0, 0xa1, 0xd3,
0x50, 0xad, 0xe6, 0x0c, 0x68, 0xe8, 0xb4, 0x30, 0x6f, 0xc9, 0x5e, 0x29, 0xd8, 0x3b, 0xfd, 0xd4, 0xc2, 0xbc, 0x25, 0xbb, 0xa4, 0x60, 0xef, 0xf4, 0x53, 0x13, 0x28, 0xa6, 0x8f, 0x31, 0x6f, 0x4d,
0x04, 0x8a, 0xe9, 0x43, 0xcc, 0x5b, 0x93, 0x7d, 0x69, 0xf6, 0xbe, 0xc1, 0xb1, 0x08, 0x92, 0x68, 0xf6, 0xa5, 0xd9, 0xfb, 0x0e, 0xc7, 0x22, 0x48, 0xa2, 0x11, 0x17, 0x50, 0xc9, 0x59, 0xd4, 0x78,
0xc4, 0x05, 0x54, 0x72, 0x16, 0x35, 0x9e, 0xff, 0x81, 0x9e, 0xff, 0xca, 0xad, 0xe7, 0x7f, 0xf0, 0xfe, 0x07, 0x7a, 0xfe, 0x2b, 0xb7, 0x9e, 0xff, 0xc1, 0xbb, 0xe6, 0x7f, 0x30, 0x3b, 0x7f, 0x15,
0xae, 0xf9, 0x1f, 0xcc, 0xce, 0x5f, 0xc5, 0x8c, 0x45, 0x0f, 0xb5, 0xe8, 0xea, 0xad, 0x45, 0x0f, 0x33, 0x16, 0x3d, 0xd4, 0xa2, 0xab, 0xb7, 0x16, 0x3d, 0x7c, 0x97, 0xe8, 0xe1, 0xac, 0xa8, 0x8a,
0xdf, 0x25, 0x7a, 0x38, 0x2b, 0xaa, 0x62, 0xb2, 0x66, 0x9f, 0xab, 0x44, 0xdd, 0xb8, 0x7d, 0xb3, 0xc9, 0x9a, 0x7d, 0xae, 0x12, 0x75, 0xe3, 0xf6, 0xcd, 0x7e, 0xad, 0xa8, 0x95, 0xb1, 0x45, 0xc9,
0x5f, 0x2b, 0x6a, 0x65, 0x6c, 0x51, 0x72, 0xdf, 0x82, 0x0d, 0x97, 0xc6, 0x5c, 0x64, 0xb6, 0x98, 0x7d, 0x0f, 0x36, 0x5c, 0x1a, 0x73, 0x91, 0xd9, 0x62, 0xda, 0x0e, 0x89, 0xd6, 0x2c, 0x48, 0xcd,
0xb6, 0x43, 0xa2, 0x35, 0x0b, 0x52, 0xf3, 0xec, 0x46, 0x9a, 0xf7, 0xf5, 0xf7, 0xfd, 0x0e, 0x3e, 0xb3, 0x1b, 0x69, 0xde, 0xd7, 0x27, 0xfb, 0x1d, 0x7c, 0x16, 0x5a, 0x9f, 0x35, 0x2b, 0xf5, 0x36,
0x0b, 0xad, 0xcf, 0x9a, 0x95, 0x7a, 0x1b, 0xd4, 0xda, 0x44, 0x10, 0xc6, 0x9b, 0x09, 0xf3, 0xb5, 0xa8, 0xb5, 0x89, 0x20, 0x8c, 0x37, 0x13, 0xe6, 0x6b, 0x65, 0x20, 0x95, 0x4f, 0x6f, 0xa4, 0xac,
0x32, 0x90, 0xca, 0xa7, 0x37, 0x52, 0xd6, 0xdf, 0xc1, 0x3c, 0x97, 0x85, 0xaa, 0x13, 0x93, 0x52, 0xcf, 0xc1, 0x3c, 0x97, 0x85, 0xaa, 0x13, 0x93, 0x52, 0xfc, 0x06, 0x54, 0x82, 0x6c, 0x1a, 0xcd,
0xfc, 0x0a, 0x54, 0x82, 0x6c, 0x1a, 0xcd, 0x24, 0xd4, 0x7a, 0x45, 0xa9, 0x77, 0x7c, 0x23, 0x3d, 0x24, 0xd4, 0x7a, 0x45, 0xa9, 0x77, 0x7c, 0x23, 0x3d, 0x7d, 0x98, 0x67, 0x99, 0x2c, 0x54, 0x1e,
0xfd, 0x31, 0xcf, 0x32, 0x59, 0xa8, 0x3c, 0x32, 0x28, 0xad, 0x04, 0xc0, 0x28, 0x09, 0x98, 0xe3, 0x19, 0x94, 0x56, 0x02, 0x60, 0x94, 0x04, 0xcc, 0xf1, 0x43, 0xec, 0x06, 0x84, 0x69, 0xbd, 0x92,
0x87, 0xd8, 0x0d, 0x08, 0xd3, 0x7a, 0x25, 0xa9, 0xf7, 0xfc, 0x46, 0x7a, 0x77, 0x95, 0xde, 0x75, 0xd4, 0x7b, 0x7e, 0x23, 0xbd, 0xbb, 0x4a, 0xef, 0x3a, 0x9b, 0x85, 0x6a, 0x99, 0xf1, 0xb9, 0xb2,
0x36, 0x0b, 0xd5, 0x32, 0xe3, 0x73, 0x65, 0x53, 0xb2, 0x1e, 0x28, 0x35, 0x09, 0x0b, 0x83, 0x58, 0x29, 0x59, 0x0f, 0x94, 0x9a, 0x84, 0x85, 0x41, 0xac, 0x05, 0xcb, 0x52, 0xf0, 0xe8, 0x46, 0x82,
0x0b, 0x96, 0xa5, 0xe0, 0xd1, 0x8d, 0x04, 0x75, 0x9f, 0x4e, 0xf3, 0x58, 0xa8, 0xa8, 0xe0, 0xb8, 0xba, 0x4f, 0xa7, 0x79, 0x2c, 0x54, 0x54, 0x70, 0x5c, 0x48, 0x17, 0x0b, 0x1c, 0xf6, 0xb8, 0xd0,
0x90, 0x2e, 0x16, 0x38, 0xec, 0x71, 0xa1, 0x75, 0x6a, 0xb7, 0x2f, 0xe4, 0x2c, 0x93, 0x85, 0xca, 0x3a, 0xb5, 0xdb, 0x17, 0x72, 0x96, 0xc9, 0x42, 0xe5, 0x91, 0x61, 0xbc, 0xa2, 0x90, 0xc6, 0x1e,
0x23, 0xc3, 0x78, 0x45, 0x21, 0x8d, 0x3d, 0x3a, 0x5a, 0xd1, 0xda, 0xed, 0x57, 0x34, 0xcd, 0x63, 0x1d, 0xad, 0x68, 0xed, 0xf6, 0x2b, 0x9a, 0xe6, 0xb1, 0x50, 0x51, 0x41, 0xa9, 0xf2, 0x22, 0x6f,
0xa1, 0xa2, 0x82, 0x52, 0xe5, 0x45, 0xde, 0xa8, 0xd4, 0xaa, 0x2f, 0xf2, 0x46, 0xb5, 0x56, 0x43, 0x54, 0x6a, 0xd5, 0x17, 0x79, 0xa3, 0x5a, 0xab, 0xa1, 0x72, 0x8f, 0x86, 0xd4, 0xe9, 0x3c, 0x56,
0xe5, 0x1e, 0x0d, 0xa9, 0xd3, 0x79, 0xac, 0x02, 0x51, 0x91, 0x7c, 0x8d, 0xf9, 0xe8, 0x1b, 0x6a, 0x81, 0xa8, 0x48, 0xbe, 0xc5, 0x7c, 0x74, 0x86, 0x1a, 0x60, 0xf9, 0x42, 0x64, 0x4f, 0x70, 0x0d,
0x80, 0xe5, 0x0b, 0x91, 0x5d, 0xc4, 0x35, 0x90, 0xbb, 0x22, 0x3d, 0x75, 0x17, 0xa1, 0x6c, 0x08, 0xe4, 0xae, 0x48, 0x4f, 0xbd, 0x45, 0x28, 0x1b, 0xc2, 0x0d, 0xb0, 0xdc, 0xc1, 0x61, 0xa2, 0xde,
0x37, 0xc0, 0x72, 0x07, 0x87, 0x89, 0xba, 0xd1, 0x0b, 0x48, 0x01, 0xeb, 0x1c, 0x54, 0x2f, 0x19, 0xf2, 0x02, 0x52, 0xc0, 0x3a, 0x07, 0xd5, 0x4b, 0x86, 0x63, 0x8e, 0x5d, 0x11, 0xd0, 0xf8, 0x25,
0x8e, 0x39, 0x76, 0x45, 0x40, 0xe3, 0x97, 0xd4, 0xe7, 0x10, 0x82, 0xbc, 0x3c, 0x13, 0x55, 0xae, 0xf5, 0x39, 0x84, 0x20, 0x2f, 0xef, 0x44, 0x95, 0x2b, 0xc7, 0xf0, 0x03, 0x90, 0x0f, 0xa9, 0xcf,
0x1c, 0xc3, 0xf7, 0x40, 0x3e, 0xa4, 0x3e, 0xaf, 0x2f, 0x6d, 0xe7, 0x76, 0x8a, 0xfb, 0x77, 0xae, 0xeb, 0x4b, 0xdb, 0xb9, 0x9d, 0xe2, 0xfe, 0x9d, 0xeb, 0xaf, 0xe9, 0x4b, 0xea, 0x23, 0x19, 0x62,
0xdf, 0xa9, 0x2f, 0xa9, 0x8f, 0x64, 0x88, 0xf5, 0xeb, 0x12, 0xc8, 0xbd, 0xa4, 0x3e, 0xac, 0x83, 0xfd, 0xb6, 0x04, 0x72, 0x2f, 0xa9, 0x0f, 0xeb, 0x60, 0x15, 0x7b, 0x1e, 0x23, 0x9c, 0x6b, 0xa6,
0x55, 0xec, 0x79, 0x8c, 0x70, 0xae, 0x99, 0x46, 0x10, 0x6e, 0x82, 0x15, 0x41, 0xdb, 0x81, 0xab, 0x11, 0x84, 0x9b, 0x60, 0x45, 0xd0, 0x76, 0xe0, 0x2a, 0xba, 0x02, 0xd2, 0x28, 0x13, 0xf6, 0xb0,
0xe8, 0x0a, 0x48, 0xa3, 0x4c, 0xd8, 0xc3, 0x02, 0xcb, 0x5b, 0xa5, 0x84, 0xe4, 0x18, 0xee, 0x83, 0xc0, 0xf2, 0x55, 0x29, 0x21, 0x39, 0x86, 0xfb, 0xa0, 0x24, 0x57, 0xe6, 0xc4, 0x49, 0xd4, 0x24,
0x92, 0x5c, 0x99, 0x13, 0x27, 0x51, 0x93, 0x30, 0x79, 0x39, 0xe4, 0xed, 0xea, 0x20, 0x35, 0x8b, 0x4c, 0x3e, 0x0e, 0x79, 0xbb, 0x3a, 0x48, 0xcd, 0xa2, 0xb4, 0x7f, 0x26, 0xcd, 0x68, 0x1a, 0xc0,
0xd2, 0xfe, 0x89, 0x34, 0xa3, 0x69, 0x00, 0x1f, 0x80, 0x55, 0xd1, 0x9d, 0x3e, 0xd7, 0xd7, 0x07, 0x07, 0x60, 0x55, 0x74, 0xa7, 0xef, 0xf5, 0xf5, 0x41, 0x6a, 0x56, 0xc5, 0x64, 0x99, 0xd9, 0xb5,
0xa9, 0x59, 0x15, 0x93, 0x65, 0x66, 0xc7, 0x36, 0x5a, 0x11, 0x5d, 0x79, 0x7c, 0x37, 0x80, 0x21, 0x8d, 0x56, 0x44, 0x57, 0x5e, 0xdf, 0x0d, 0x60, 0x88, 0xae, 0x13, 0xc4, 0x1e, 0xe9, 0xca, 0xab,
0xba, 0x4e, 0x10, 0x7b, 0xa4, 0x2b, 0x8f, 0xee, 0xbc, 0xbd, 0x31, 0x48, 0xcd, 0xda, 0x54, 0xf8, 0x3b, 0x6f, 0x6f, 0x0c, 0x52, 0xb3, 0x36, 0x15, 0x7e, 0x96, 0xf9, 0xd0, 0xaa, 0xe8, 0xca, 0x01,
0x59, 0xe6, 0x43, 0xab, 0xa2, 0x2b, 0x07, 0xf0, 0x01, 0x00, 0x6a, 0x4a, 0x52, 0x41, 0x1d, 0xbc, 0x7c, 0x00, 0x80, 0x9a, 0x92, 0x54, 0x50, 0x17, 0x6f, 0x79, 0x90, 0x9a, 0x05, 0x69, 0x95, 0xdc,
0xe5, 0x41, 0x6a, 0x16, 0xa4, 0x55, 0x72, 0x4f, 0x86, 0xd0, 0x02, 0xcb, 0x8a, 0xdb, 0x90, 0xdc, 0x93, 0x21, 0xb4, 0xc0, 0xb2, 0xe2, 0x36, 0x24, 0x77, 0x69, 0x90, 0x9a, 0x46, 0x48, 0x7d, 0xc5,
0xa5, 0x41, 0x6a, 0x1a, 0x21, 0xf5, 0x15, 0xa7, 0x72, 0x65, 0xa5, 0x62, 0x24, 0xa2, 0x1d, 0xe2, 0xa9, 0x5c, 0x59, 0xa9, 0x18, 0x89, 0x68, 0x87, 0x78, 0xf2, 0x6e, 0x33, 0xd0, 0x08, 0x5a, 0x3f,
0xc9, 0xb3, 0xcd, 0x40, 0x23, 0x68, 0x7d, 0xbf, 0x04, 0x8c, 0xcb, 0x2e, 0x22, 0x3c, 0x09, 0x05, 0x2e, 0x01, 0xe3, 0xb2, 0x8b, 0x08, 0x4f, 0x42, 0x01, 0x9f, 0x81, 0x9a, 0x4b, 0x63, 0xc1, 0xb0,
0x7c, 0x06, 0x6a, 0x2e, 0x8d, 0x05, 0xc3, 0xae, 0x70, 0x66, 0x4a, 0x6b, 0xdf, 0x9f, 0x9c, 0x33, 0x2b, 0x9c, 0x99, 0xd2, 0xda, 0xf7, 0x27, 0xf7, 0xcc, 0x7c, 0x84, 0x85, 0xaa, 0x23, 0xd3, 0x91,
0xf3, 0x11, 0x16, 0xaa, 0x8e, 0x4c, 0x47, 0xba, 0xfe, 0x1b, 0x60, 0xb9, 0x19, 0x52, 0x1a, 0xc9, 0xae, 0xff, 0x06, 0x58, 0x6e, 0x86, 0x94, 0x46, 0xb2, 0x13, 0x4a, 0x48, 0x01, 0x88, 0x64, 0xd5,
0x4e, 0x28, 0x21, 0x05, 0x20, 0x92, 0x55, 0x93, 0xbb, 0x9c, 0x93, 0x2f, 0xa7, 0xff, 0x5d, 0xdf, 0xe4, 0x2e, 0xe7, 0xe4, 0x37, 0xd3, 0x7b, 0xd7, 0x77, 0x79, 0xae, 0x55, 0xec, 0x4d, 0xfd, 0xdd,
0xe5, 0xb9, 0x56, 0xb1, 0x37, 0xf5, 0xeb, 0xa9, 0xa2, 0xb4, 0x75, 0xbe, 0x95, 0xd5, 0x56, 0xb6, 0x54, 0x51, 0xda, 0x3a, 0xdf, 0xca, 0x6a, 0x2b, 0x5b, 0xa9, 0x06, 0x72, 0x8c, 0x08, 0xb9, 0x69,
0x52, 0x0d, 0xe4, 0x18, 0x11, 0x72, 0xd3, 0x4a, 0x28, 0x1b, 0xc2, 0x7b, 0xc0, 0x60, 0xa4, 0x43, 0x25, 0x94, 0x0d, 0xe1, 0x3d, 0x60, 0x30, 0xd2, 0x21, 0x4c, 0x10, 0x4f, 0x6e, 0x8e, 0x81, 0xc6,
0x98, 0x20, 0x9e, 0xdc, 0x1c, 0x03, 0x8d, 0x31, 0xbc, 0x0b, 0x0c, 0x1f, 0x73, 0x27, 0xe1, 0xc4, 0x18, 0xde, 0x05, 0x86, 0x8f, 0xb9, 0x93, 0x70, 0xe2, 0xa9, 0x9d, 0x40, 0xab, 0x3e, 0xe6, 0x5f,
0x53, 0x3b, 0x81, 0x56, 0x7d, 0xcc, 0x3f, 0xe3, 0xc4, 0x7b, 0x92, 0xff, 0x2e, 0x7b, 0x7c, 0x61, 0x70, 0xe2, 0x3d, 0xc9, 0xff, 0xf0, 0x8b, 0xb9, 0x60, 0x61, 0x50, 0x3c, 0x72, 0x5d, 0xc2, 0xf9,
0x50, 0x3c, 0x72, 0x5d, 0xc2, 0xf9, 0x65, 0xd2, 0x0e, 0xc9, 0xdf, 0x74, 0xd8, 0x3e, 0x28, 0x71, 0x65, 0xd2, 0x0e, 0xc9, 0x3f, 0x74, 0xd8, 0x3e, 0x28, 0x71, 0x41, 0x19, 0xf6, 0x89, 0x73, 0x45,
0x41, 0x19, 0xf6, 0x89, 0x73, 0x45, 0x7a, 0xba, 0xcf, 0x54, 0xd7, 0x68, 0xfb, 0x47, 0xa4, 0xc7, 0x7a, 0xba, 0xcf, 0x54, 0xd7, 0x68, 0xfb, 0x27, 0xa4, 0xc7, 0xd1, 0x34, 0xd0, 0x12, 0xbf, 0xe6,
0xd1, 0x34, 0xd0, 0x12, 0xbf, 0xe4, 0x40, 0xf1, 0x92, 0x61, 0x97, 0xe8, 0xf7, 0x5d, 0xd6, 0xab, 0x40, 0xf1, 0x92, 0x61, 0x97, 0xe8, 0xef, 0xbb, 0xac, 0x57, 0x33, 0xc8, 0xb4, 0x84, 0x46, 0x99,
0x19, 0x64, 0x5a, 0x42, 0xa3, 0x4c, 0x5b, 0x04, 0x11, 0xa1, 0x89, 0xd0, 0xdf, 0xd3, 0x08, 0x66, 0xb6, 0x08, 0x22, 0x42, 0x13, 0xa1, 0xcf, 0xd3, 0x08, 0x66, 0x19, 0x8c, 0x90, 0x2e, 0x71, 0x65,
0x19, 0x8c, 0x90, 0x2e, 0x71, 0x65, 0x19, 0xf3, 0x48, 0x23, 0x78, 0x08, 0x2a, 0x5e, 0xc0, 0xe5, 0x19, 0xf3, 0x48, 0x23, 0x78, 0x08, 0x2a, 0x5e, 0xc0, 0xe5, 0x87, 0x6f, 0x44, 0x22, 0xca, 0x7a,
0xf3, 0x37, 0x22, 0x11, 0x65, 0x3d, 0x59, 0x16, 0xc3, 0x5e, 0x1b, 0xa4, 0x66, 0x59, 0x7b, 0x3e, 0xb2, 0x2c, 0x86, 0xbd, 0x36, 0x48, 0xcd, 0xb2, 0xf6, 0x7c, 0x2a, 0x1d, 0x68, 0x16, 0xc2, 0x03,
0x96, 0x0e, 0x34, 0x0b, 0xe1, 0x01, 0x18, 0x19, 0x1c, 0x2e, 0xb0, 0x7b, 0xa5, 0x0a, 0x67, 0xd7, 0x30, 0x32, 0x38, 0x5c, 0x60, 0xf7, 0x4a, 0x15, 0xce, 0xae, 0x0d, 0x52, 0xb3, 0xa4, 0x1d, 0x17,
0x06, 0xa9, 0x59, 0xd2, 0x8e, 0x8b, 0xcc, 0x8e, 0x66, 0x10, 0x7c, 0x0a, 0xaa, 0x93, 0x34, 0xb9, 0x99, 0x1d, 0xcd, 0x20, 0xf8, 0x14, 0x54, 0x27, 0x69, 0x72, 0x9d, 0xb2, 0xaa, 0x86, 0x0d, 0x07,
0x4e, 0x59, 0x55, 0xc3, 0x86, 0x83, 0xd4, 0xac, 0x8c, 0x43, 0xa5, 0x07, 0xcd, 0x61, 0x78, 0x0a, 0xa9, 0x59, 0x19, 0x87, 0x4a, 0x0f, 0x9a, 0xc3, 0xf0, 0x14, 0xac, 0x8f, 0x92, 0x19, 0x11, 0x09,
0xd6, 0x47, 0xc9, 0x8c, 0x88, 0x84, 0xc5, 0x8e, 0xfc, 0x34, 0x57, 0x25, 0xc1, 0x9d, 0x41, 0x6a, 0x8b, 0x1d, 0x79, 0x34, 0x57, 0x25, 0xc1, 0x9d, 0x41, 0x6a, 0xae, 0x69, 0x37, 0x92, 0xde, 0x13,
0xae, 0x69, 0x37, 0x92, 0xde, 0x13, 0x2c, 0x30, 0xba, 0x6e, 0xca, 0x5a, 0xcd, 0x23, 0xcd, 0xc4, 0x2c, 0x30, 0xba, 0x6e, 0xca, 0x5a, 0xcd, 0x23, 0xcd, 0xc4, 0x97, 0xdd, 0x6f, 0x20, 0x05, 0x32,
0x97, 0xdd, 0x6f, 0x20, 0x05, 0x32, 0x6b, 0x18, 0x44, 0x81, 0x90, 0xdd, 0xbe, 0x8c, 0x14, 0x80, 0x6b, 0x18, 0x44, 0x81, 0x90, 0xdd, 0xbe, 0x8c, 0x14, 0x80, 0x4f, 0x41, 0x81, 0x76, 0x08, 0x63,
0x4f, 0x41, 0x81, 0x76, 0x08, 0x63, 0x81, 0x47, 0xb8, 0xbc, 0x69, 0xff, 0xe9, 0xf1, 0x8e, 0x26, 0x81, 0x47, 0xb8, 0x7c, 0x69, 0xff, 0xed, 0xb3, 0x1d, 0x4d, 0xe2, 0x6d, 0xfb, 0x75, 0x7f, 0x6b,
0xf1, 0xb6, 0xfd, 0xba, 0xbf, 0xb5, 0xf8, 0xa6, 0xbf, 0xb5, 0xf8, 0x67, 0x7f, 0x6b, 0xf1, 0x87, 0xf1, 0x4d, 0x7f, 0x6b, 0xf1, 0xaf, 0xfe, 0xd6, 0xe2, 0x4f, 0x6f, 0xb7, 0x16, 0xde, 0xbc, 0xdd,
0xb7, 0x5b, 0x0b, 0x6f, 0xde, 0x6e, 0x2d, 0xfc, 0xf6, 0x76, 0x6b, 0xe1, 0x8b, 0x9d, 0xa9, 0x63, 0x5a, 0xf8, 0xe3, 0xed, 0xd6, 0xc2, 0x57, 0x3b, 0x53, 0xd7, 0xb0, 0x68, 0x61, 0xc6, 0x03, 0xde,
0x58, 0xb4, 0x30, 0xe3, 0x01, 0x6f, 0x4c, 0xfe, 0x66, 0x75, 0xe5, 0x1f, 0x2d, 0x79, 0x18, 0x37, 0x98, 0xfc, 0xc1, 0xea, 0xca, 0xbf, 0x58, 0xf2, 0x32, 0x6e, 0xae, 0xc8, 0xbf, 0x4e, 0x8f, 0xff,
0x57, 0xe4, 0x1f, 0xa8, 0xc7, 0x7f, 0x05, 0x00, 0x00, 0xff, 0xff, 0xa4, 0xd8, 0x40, 0x2b, 0x86, 0x0e, 0x00, 0x00, 0xff, 0xff, 0x7f, 0x84, 0x30, 0xb7, 0x80, 0x0d, 0x00, 0x00,
0x0d, 0x00, 0x00,
} }
func (m *Params) Marshal() (dAtA []byte, err error) { func (m *Params) Marshal() (dAtA []byte, err error) {

View File

@ -28,7 +28,7 @@ type GenesisState struct {
// accounts is an array containing the ethereum genesis accounts. // accounts is an array containing the ethereum genesis accounts.
Accounts []GenesisAccount `protobuf:"bytes,1,rep,name=accounts,proto3" json:"accounts"` Accounts []GenesisAccount `protobuf:"bytes,1,rep,name=accounts,proto3" json:"accounts"`
// params defines all the paramaters of the module. // params defines all the paramaters of the module.
Params Params `protobuf:"bytes,3,opt,name=params,proto3" json:"params"` Params Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params"`
} }
func (m *GenesisState) Reset() { *m = GenesisState{} } func (m *GenesisState) Reset() { *m = GenesisState{} }
@ -152,26 +152,26 @@ func init() {
func init() { proto.RegisterFile("ethermint/evm/v1/genesis.proto", fileDescriptor_9bcdec50cc9d156d) } func init() { proto.RegisterFile("ethermint/evm/v1/genesis.proto", fileDescriptor_9bcdec50cc9d156d) }
var fileDescriptor_9bcdec50cc9d156d = []byte{ var fileDescriptor_9bcdec50cc9d156d = []byte{
// 299 bytes of a gzipped FileDescriptorProto // 300 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x50, 0xbd, 0x4e, 0xeb, 0x30, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x90, 0xb1, 0x4e, 0xc3, 0x30,
0x14, 0x8e, 0x6f, 0xab, 0xf6, 0xe2, 0x22, 0x40, 0x16, 0x12, 0x56, 0x07, 0xb7, 0xea, 0x94, 0xc9, 0x18, 0x84, 0x63, 0x5a, 0xb5, 0xd4, 0x45, 0x80, 0x2c, 0x24, 0xa2, 0x0e, 0x6e, 0xd4, 0x29, 0x93,
0x56, 0x8b, 0xc4, 0x8e, 0x17, 0x56, 0x94, 0x6e, 0x6c, 0x6e, 0x62, 0x25, 0x19, 0x12, 0x47, 0xb6, 0xad, 0x16, 0x89, 0x1d, 0x2f, 0xac, 0x28, 0xdd, 0xd8, 0xdc, 0xc4, 0x4a, 0x32, 0x24, 0x8e, 0x6c,
0x1b, 0xc1, 0xca, 0xc8, 0xc4, 0x73, 0xf0, 0x24, 0x1d, 0x3b, 0x32, 0x01, 0x4a, 0x5e, 0x04, 0xc5, 0x37, 0x82, 0x95, 0x91, 0x89, 0xe7, 0xe0, 0x49, 0x3a, 0x76, 0x64, 0x02, 0x94, 0xbc, 0x08, 0x8a,
0x49, 0x8b, 0x20, 0xdb, 0xb1, 0xbf, 0xbf, 0x73, 0x3e, 0x48, 0xa4, 0x4d, 0xa4, 0xce, 0xd2, 0xdc, 0x93, 0x16, 0x41, 0xb6, 0xdf, 0xba, 0xef, 0xee, 0x7e, 0xff, 0x10, 0x0b, 0x93, 0x08, 0x95, 0xa5,
0x32, 0x59, 0x66, 0xac, 0x5c, 0xb2, 0x58, 0xe6, 0xd2, 0xa4, 0x86, 0x16, 0x5a, 0x59, 0x85, 0x2e, 0xb9, 0xa1, 0xa2, 0xcc, 0x68, 0xb9, 0xa4, 0xb1, 0xc8, 0x85, 0x4e, 0x35, 0x29, 0x94, 0x34, 0x12,
0x8e, 0x38, 0x95, 0x65, 0x46, 0xcb, 0xe5, 0xf4, 0x32, 0x56, 0xb1, 0x72, 0x20, 0x6b, 0xa6, 0x96, 0x5d, 0x1e, 0x75, 0x22, 0xca, 0x8c, 0x94, 0xcb, 0xd9, 0x55, 0x2c, 0x63, 0x69, 0x45, 0xda, 0x4c,
0x37, 0x9d, 0xf6, 0x7c, 0x1a, 0xba, 0xc3, 0x16, 0x2f, 0x00, 0x9e, 0xde, 0xb5, 0xae, 0x6b, 0x2b, 0x2d, 0x37, 0x9b, 0xf5, 0x72, 0x1a, 0xdc, 0x6a, 0x8b, 0x57, 0x00, 0xcf, 0xee, 0xdb, 0xd4, 0xb5,
0xac, 0x44, 0x1c, 0xfe, 0x17, 0x61, 0xa8, 0xb6, 0xb9, 0x35, 0x18, 0xcc, 0x07, 0xfe, 0x64, 0x35, 0xe1, 0x46, 0x20, 0x06, 0x4f, 0x79, 0x18, 0xca, 0x6d, 0x6e, 0xb4, 0x0b, 0xbc, 0x81, 0x3f, 0x5d,
0xa7, 0x7f, 0x73, 0x68, 0xa7, 0xb8, 0x6d, 0x89, 0x7c, 0xb8, 0xfb, 0x98, 0x79, 0xc1, 0x51, 0x87, 0x79, 0xe4, 0x7f, 0x0f, 0xe9, 0x1c, 0x77, 0x2d, 0xc8, 0x86, 0xbb, 0xcf, 0xb9, 0x13, 0x1c, 0x7d,
0x6e, 0xe0, 0xa8, 0x10, 0x5a, 0x64, 0x06, 0x0f, 0xe6, 0xc0, 0x9f, 0xac, 0x70, 0xdf, 0xe1, 0xde, 0xe8, 0x16, 0x8e, 0x0a, 0xae, 0x78, 0xa6, 0xdd, 0x13, 0x0f, 0xf8, 0xd3, 0x95, 0xdb, 0x4f, 0x78,
0xe1, 0x9d, 0xb2, 0x63, 0x2f, 0x9e, 0x01, 0x3c, 0xfb, 0x6d, 0x8d, 0x30, 0x1c, 0x8b, 0x28, 0xd2, 0xb0, 0x7a, 0xe7, 0xec, 0xe8, 0xc5, 0x0b, 0x80, 0xe7, 0x7f, 0xa3, 0x91, 0x0b, 0xc7, 0x3c, 0x8a,
0xd2, 0x34, 0xdb, 0x00, 0xff, 0x24, 0x38, 0x3c, 0x11, 0x82, 0xc3, 0x50, 0x45, 0x12, 0xff, 0x73, 0x94, 0xd0, 0xcd, 0x36, 0xc0, 0x9f, 0x04, 0x87, 0x27, 0x42, 0x70, 0x18, 0xca, 0x48, 0xd8, 0x8a,
0xdf, 0x6e, 0x46, 0x1c, 0x8e, 0x8d, 0x55, 0x5a, 0xc4, 0x12, 0x0f, 0xdc, 0xee, 0x57, 0xfd, 0x64, 0x49, 0x60, 0x67, 0xc4, 0xe0, 0x58, 0x1b, 0xa9, 0x78, 0x2c, 0xdc, 0x81, 0xdd, 0xfd, 0xba, 0xdf,
0x77, 0x26, 0x3f, 0x6f, 0x82, 0xdf, 0x3e, 0x67, 0xe3, 0x75, 0xcb, 0x0f, 0x0e, 0x42, 0xce, 0x77, 0x6c, 0xbf, 0xc9, 0x2e, 0x9a, 0xe2, 0xf7, 0xaf, 0xf9, 0x78, 0xdd, 0xf2, 0xc1, 0xc1, 0xc8, 0xd8,
0x15, 0x01, 0xfb, 0x8a, 0x80, 0xaf, 0x8a, 0x80, 0xd7, 0x9a, 0x78, 0xfb, 0x9a, 0x78, 0xef, 0x35, 0xae, 0xc2, 0x60, 0x5f, 0x61, 0xf0, 0x5d, 0x61, 0xf0, 0x56, 0x63, 0x67, 0x5f, 0x63, 0xe7, 0xa3,
0xf1, 0x1e, 0xfc, 0x38, 0xb5, 0xc9, 0x76, 0x43, 0x43, 0x95, 0x31, 0x9b, 0x08, 0x6d, 0x52, 0xc3, 0xc6, 0xce, 0xa3, 0x1f, 0xa7, 0x26, 0xd9, 0x6e, 0x48, 0x28, 0x33, 0x6a, 0x12, 0xae, 0x74, 0xaa,
0x7e, 0xaa, 0x7d, 0x74, 0xe5, 0xda, 0xa7, 0x42, 0x9a, 0xcd, 0xc8, 0x95, 0x7b, 0xfd, 0x1d, 0x00, 0xe9, 0xef, 0x69, 0x9f, 0xec, 0x71, 0xcd, 0x73, 0x21, 0xf4, 0x66, 0x64, 0x8f, 0x7b, 0xf3, 0x13,
0x00, 0xff, 0xff, 0x87, 0x96, 0x85, 0x5d, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x34, 0xd7, 0x33, 0xa0, 0xc2, 0x01, 0x00, 0x00,
} }
func (m *GenesisState) Marshal() (dAtA []byte, err error) { func (m *GenesisState) Marshal() (dAtA []byte, err error) {
@ -203,7 +203,7 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i = encodeVarintGenesis(dAtA, i, uint64(size)) i = encodeVarintGenesis(dAtA, i, uint64(size))
} }
i-- i--
dAtA[i] = 0x1a dAtA[i] = 0x12
if len(m.Accounts) > 0 { if len(m.Accounts) > 0 {
for iNdEx := len(m.Accounts) - 1; iNdEx >= 0; iNdEx-- { for iNdEx := len(m.Accounts) - 1; iNdEx >= 0; iNdEx-- {
{ {
@ -392,7 +392,7 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error {
return err return err
} }
iNdEx = postIndex iNdEx = postIndex
case 3: case 2:
if wireType != 2 { if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType)
} }

View File

@ -1,9 +1,14 @@
package types package types
import ( import (
"math/big"
sdk "github.com/cosmos/cosmos-sdk/types" sdk "github.com/cosmos/cosmos-sdk/types"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
feemarkettypes "github.com/tharsis/ethermint/x/feemarket/types"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
ethtypes "github.com/ethereum/go-ethereum/core/types" ethtypes "github.com/ethereum/go-ethereum/core/types"
) )
@ -37,6 +42,12 @@ type StakingKeeper interface {
GetValidatorByConsAddr(ctx sdk.Context, consAddr sdk.ConsAddress) (validator stakingtypes.Validator, found bool) GetValidatorByConsAddr(ctx sdk.Context, consAddr sdk.ConsAddress) (validator stakingtypes.Validator, found bool)
} }
// FeeMarketKeeper
type FeeMarketKeeper interface {
GetBaseFee(ctx sdk.Context) *big.Int
GetParams(ctx sdk.Context) feemarkettypes.Params
}
// Event Hooks // Event Hooks
// These can be utilized to customize evm transaction processing. // These can be utilized to customize evm transaction processing.

View File

@ -3,8 +3,6 @@ package types
import ( import (
"fmt" "fmt"
yaml "gopkg.in/yaml.v2"
sdk "github.com/cosmos/cosmos-sdk/types" sdk "github.com/cosmos/cosmos-sdk/types"
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
"github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/core/vm"
@ -24,7 +22,6 @@ var (
ParamStoreKeyEnableCall = []byte("EnableCall") ParamStoreKeyEnableCall = []byte("EnableCall")
ParamStoreKeyExtraEIPs = []byte("EnableExtraEIPs") ParamStoreKeyExtraEIPs = []byte("EnableExtraEIPs")
ParamStoreKeyChainConfig = []byte("ChainConfig") ParamStoreKeyChainConfig = []byte("ChainConfig")
ParamStoreKeyNoBaseFee = []byte("NoBaseFee")
// AvailableExtraEIPs define the list of all EIPs that can be enabled by the EVM interpreter. These EIPs are applied in // AvailableExtraEIPs define the list of all EIPs that can be enabled by the EVM interpreter. These EIPs are applied in
// order and can override the instruction sets from the latest hard fork enabled by the ChainConfig. For more info // order and can override the instruction sets from the latest hard fork enabled by the ChainConfig. For more info
@ -60,12 +57,6 @@ func DefaultParams() Params {
} }
} }
// String implements the fmt.Stringer interface
func (p Params) String() string {
out, _ := yaml.Marshal(p)
return string(out)
}
// ParamSetPairs returns the parameter set pairs. // ParamSetPairs returns the parameter set pairs.
func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs {
return paramtypes.ParamSetPairs{ return paramtypes.ParamSetPairs{

326
x/evm/types/query.pb.go generated
View File

@ -781,51 +781,6 @@ func (m *QueryParamsResponse) GetParams() Params {
return Params{} return Params{}
} }
// QueryStaticCallRequest defines static call response
type QueryStaticCallResponse struct {
Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"`
}
func (m *QueryStaticCallResponse) Reset() { *m = QueryStaticCallResponse{} }
func (m *QueryStaticCallResponse) String() string { return proto.CompactTextString(m) }
func (*QueryStaticCallResponse) ProtoMessage() {}
func (*QueryStaticCallResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_e15a877459347994, []int{16}
}
func (m *QueryStaticCallResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
}
func (m *QueryStaticCallResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
if deterministic {
return xxx_messageInfo_QueryStaticCallResponse.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 *QueryStaticCallResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_QueryStaticCallResponse.Merge(m, src)
}
func (m *QueryStaticCallResponse) XXX_Size() int {
return m.Size()
}
func (m *QueryStaticCallResponse) XXX_DiscardUnknown() {
xxx_messageInfo_QueryStaticCallResponse.DiscardUnknown(m)
}
var xxx_messageInfo_QueryStaticCallResponse proto.InternalMessageInfo
func (m *QueryStaticCallResponse) GetData() []byte {
if m != nil {
return m.Data
}
return nil
}
// EthCallRequest defines EthCall request // EthCallRequest defines EthCall request
type EthCallRequest struct { type EthCallRequest struct {
// same json format as the json rpc api. // same json format as the json rpc api.
@ -838,7 +793,7 @@ func (m *EthCallRequest) Reset() { *m = EthCallRequest{} }
func (m *EthCallRequest) String() string { return proto.CompactTextString(m) } func (m *EthCallRequest) String() string { return proto.CompactTextString(m) }
func (*EthCallRequest) ProtoMessage() {} func (*EthCallRequest) ProtoMessage() {}
func (*EthCallRequest) Descriptor() ([]byte, []int) { func (*EthCallRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_e15a877459347994, []int{17} return fileDescriptor_e15a877459347994, []int{16}
} }
func (m *EthCallRequest) XXX_Unmarshal(b []byte) error { func (m *EthCallRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b) return m.Unmarshal(b)
@ -891,7 +846,7 @@ func (m *EstimateGasResponse) Reset() { *m = EstimateGasResponse{} }
func (m *EstimateGasResponse) String() string { return proto.CompactTextString(m) } func (m *EstimateGasResponse) String() string { return proto.CompactTextString(m) }
func (*EstimateGasResponse) ProtoMessage() {} func (*EstimateGasResponse) ProtoMessage() {}
func (*EstimateGasResponse) Descriptor() ([]byte, []int) { func (*EstimateGasResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_e15a877459347994, []int{18} return fileDescriptor_e15a877459347994, []int{17}
} }
func (m *EstimateGasResponse) XXX_Unmarshal(b []byte) error { func (m *EstimateGasResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b) return m.Unmarshal(b)
@ -941,7 +896,7 @@ func (m *QueryTraceTxRequest) Reset() { *m = QueryTraceTxRequest{} }
func (m *QueryTraceTxRequest) String() string { return proto.CompactTextString(m) } func (m *QueryTraceTxRequest) String() string { return proto.CompactTextString(m) }
func (*QueryTraceTxRequest) ProtoMessage() {} func (*QueryTraceTxRequest) ProtoMessage() {}
func (*QueryTraceTxRequest) Descriptor() ([]byte, []int) { func (*QueryTraceTxRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_e15a877459347994, []int{19} return fileDescriptor_e15a877459347994, []int{18}
} }
func (m *QueryTraceTxRequest) XXX_Unmarshal(b []byte) error { func (m *QueryTraceTxRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b) return m.Unmarshal(b)
@ -1001,7 +956,7 @@ func (m *QueryTraceTxResponse) Reset() { *m = QueryTraceTxResponse{} }
func (m *QueryTraceTxResponse) String() string { return proto.CompactTextString(m) } func (m *QueryTraceTxResponse) String() string { return proto.CompactTextString(m) }
func (*QueryTraceTxResponse) ProtoMessage() {} func (*QueryTraceTxResponse) ProtoMessage() {}
func (*QueryTraceTxResponse) Descriptor() ([]byte, []int) { func (*QueryTraceTxResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_e15a877459347994, []int{20} return fileDescriptor_e15a877459347994, []int{19}
} }
func (m *QueryTraceTxResponse) XXX_Unmarshal(b []byte) error { func (m *QueryTraceTxResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b) return m.Unmarshal(b)
@ -1054,7 +1009,6 @@ func init() {
proto.RegisterType((*QueryTxLogsResponse)(nil), "ethermint.evm.v1.QueryTxLogsResponse") proto.RegisterType((*QueryTxLogsResponse)(nil), "ethermint.evm.v1.QueryTxLogsResponse")
proto.RegisterType((*QueryParamsRequest)(nil), "ethermint.evm.v1.QueryParamsRequest") proto.RegisterType((*QueryParamsRequest)(nil), "ethermint.evm.v1.QueryParamsRequest")
proto.RegisterType((*QueryParamsResponse)(nil), "ethermint.evm.v1.QueryParamsResponse") proto.RegisterType((*QueryParamsResponse)(nil), "ethermint.evm.v1.QueryParamsResponse")
proto.RegisterType((*QueryStaticCallResponse)(nil), "ethermint.evm.v1.QueryStaticCallResponse")
proto.RegisterType((*EthCallRequest)(nil), "ethermint.evm.v1.EthCallRequest") proto.RegisterType((*EthCallRequest)(nil), "ethermint.evm.v1.EthCallRequest")
proto.RegisterType((*EstimateGasResponse)(nil), "ethermint.evm.v1.EstimateGasResponse") proto.RegisterType((*EstimateGasResponse)(nil), "ethermint.evm.v1.EstimateGasResponse")
proto.RegisterType((*QueryTraceTxRequest)(nil), "ethermint.evm.v1.QueryTraceTxRequest") proto.RegisterType((*QueryTraceTxRequest)(nil), "ethermint.evm.v1.QueryTraceTxRequest")
@ -1064,79 +1018,78 @@ func init() {
func init() { proto.RegisterFile("ethermint/evm/v1/query.proto", fileDescriptor_e15a877459347994) } func init() { proto.RegisterFile("ethermint/evm/v1/query.proto", fileDescriptor_e15a877459347994) }
var fileDescriptor_e15a877459347994 = []byte{ var fileDescriptor_e15a877459347994 = []byte{
// 1138 bytes of a gzipped FileDescriptorProto // 1123 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0x4d, 0x6f, 0x1b, 0x55, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x96, 0x4d, 0x6f, 0x1b, 0x45,
0x17, 0xf6, 0x24, 0x4e, 0x9c, 0x1e, 0x27, 0x7d, 0xf3, 0xde, 0x06, 0x35, 0x19, 0x52, 0x27, 0x9d, 0x18, 0xc7, 0xbd, 0x89, 0x13, 0xa7, 0x8f, 0x93, 0x12, 0xa6, 0x41, 0x24, 0x4b, 0xea, 0xa4, 0x9b,
0x34, 0xdf, 0x61, 0x06, 0x1b, 0x54, 0x89, 0x4a, 0x08, 0x92, 0x28, 0x14, 0xd4, 0x16, 0x15, 0x13, 0xe6, 0x3d, 0xda, 0xc5, 0x06, 0x55, 0xa2, 0x12, 0x82, 0x24, 0x0a, 0x05, 0xb5, 0x45, 0xc5, 0x44,
0xb1, 0x60, 0x63, 0x5d, 0x8f, 0x2f, 0xe3, 0x51, 0xed, 0xb9, 0xee, 0xdc, 0x6b, 0xe3, 0xb4, 0x84, 0x1c, 0xb8, 0x58, 0xe3, 0xf5, 0xb0, 0xb6, 0x6a, 0xef, 0xb8, 0x3b, 0x63, 0xe3, 0xb4, 0x84, 0x03,
0x05, 0x12, 0x15, 0xa8, 0x1b, 0x24, 0xf6, 0xa8, 0x1b, 0xd6, 0xfc, 0x8d, 0x2e, 0x2b, 0xb1, 0x61, 0x12, 0x15, 0xa8, 0x17, 0x24, 0xee, 0xa8, 0x17, 0xce, 0x7c, 0x8d, 0x1e, 0x2b, 0x71, 0xe1, 0x84,
0x85, 0x50, 0x82, 0x10, 0x3f, 0x03, 0xdd, 0x8f, 0xb1, 0x3d, 0x1e, 0x4f, 0x9d, 0x22, 0x76, 0xf7, 0x50, 0x82, 0x10, 0x1f, 0x03, 0xcd, 0xcb, 0xda, 0xbb, 0x5e, 0x6f, 0x9d, 0xa2, 0xde, 0xe6, 0xe5,
0xe3, 0x9c, 0xf3, 0x3c, 0xe7, 0x9e, 0x33, 0xcf, 0xd1, 0xc0, 0x32, 0xe1, 0x75, 0x12, 0x36, 0xfd, 0x99, 0xe7, 0xff, 0x9b, 0x99, 0x67, 0xff, 0xb3, 0xb0, 0x4c, 0x78, 0x9d, 0x04, 0xad, 0x86, 0xcf,
0x80, 0x3b, 0xa4, 0xd3, 0x74, 0x3a, 0x45, 0xe7, 0x61, 0x9b, 0x84, 0x27, 0x76, 0x2b, 0xa4, 0x9c, 0x1d, 0xd2, 0x6d, 0x39, 0xdd, 0xa2, 0xf3, 0xa0, 0x43, 0x82, 0x13, 0xbb, 0x1d, 0x50, 0x4e, 0xd1,
0xa2, 0xf9, 0xde, 0xad, 0x4d, 0x3a, 0x4d, 0xbb, 0x53, 0x34, 0x17, 0x3c, 0xea, 0x51, 0x79, 0xe9, 0x7c, 0x7f, 0xd6, 0x26, 0xdd, 0x96, 0xdd, 0x2d, 0x9a, 0x0b, 0x1e, 0xf5, 0xa8, 0x9c, 0x74, 0x44,
0x88, 0x95, 0xb2, 0x33, 0x77, 0x5c, 0xca, 0x9a, 0x94, 0x39, 0x55, 0xcc, 0x88, 0x0a, 0xe0, 0x74, 0x4b, 0xc5, 0x99, 0x3b, 0x2e, 0x65, 0x2d, 0xca, 0x9c, 0x2a, 0x66, 0x44, 0x25, 0x70, 0xba, 0xc5,
0x8a, 0x55, 0xc2, 0x71, 0xd1, 0x69, 0x61, 0xcf, 0x0f, 0x30, 0xf7, 0x69, 0xa0, 0x6d, 0x97, 0x3d, 0x2a, 0xe1, 0xb8, 0xe8, 0xb4, 0xb1, 0xd7, 0xf0, 0x31, 0x6f, 0x50, 0x5f, 0xc7, 0x2e, 0x7b, 0x94,
0x4a, 0xbd, 0x06, 0x71, 0x70, 0xcb, 0x77, 0x70, 0x10, 0x50, 0x2e, 0x2f, 0x99, 0xbe, 0x35, 0x13, 0x7a, 0x4d, 0xe2, 0xe0, 0x76, 0xc3, 0xc1, 0xbe, 0x4f, 0xb9, 0x9c, 0x64, 0x7a, 0xd6, 0x4c, 0xf0,
0x7c, 0x04, 0xb0, 0xba, 0x5b, 0x4a, 0xdc, 0xf1, 0xae, 0xba, 0xb2, 0xde, 0x81, 0x2b, 0x9f, 0x08, 0x08, 0x61, 0x35, 0xb7, 0x94, 0x98, 0xe3, 0x3d, 0x35, 0x65, 0xbd, 0x07, 0x57, 0x3e, 0x13, 0xb2,
0xd8, 0x7d, 0xd7, 0xa5, 0xed, 0x80, 0x97, 0xc9, 0xc3, 0x36, 0x61, 0x1c, 0x2d, 0x42, 0x0e, 0xd7, 0xfb, 0xae, 0x4b, 0x3b, 0x3e, 0x2f, 0x93, 0x07, 0x1d, 0xc2, 0x38, 0x5a, 0x84, 0x1c, 0xae, 0xd5,
0x6a, 0x21, 0x61, 0x6c, 0xd1, 0x58, 0x35, 0xb6, 0x2e, 0x95, 0xa3, 0xed, 0xad, 0x99, 0xef, 0x9e, 0x02, 0xc2, 0xd8, 0xa2, 0xb1, 0x6a, 0x6c, 0x5d, 0x2a, 0x87, 0xdd, 0x9b, 0x33, 0x3f, 0x3c, 0x5d,
0xad, 0x64, 0xfe, 0x7e, 0xb6, 0x92, 0xb1, 0x5c, 0x58, 0x88, 0xbb, 0xb2, 0x16, 0x0d, 0x18, 0x11, 0xc9, 0xfc, 0xfb, 0x74, 0x25, 0x63, 0xb9, 0xb0, 0x10, 0x5f, 0xca, 0xda, 0xd4, 0x67, 0x44, 0xac,
0xbe, 0x55, 0xdc, 0xc0, 0x81, 0x4b, 0x22, 0x5f, 0xbd, 0x45, 0xaf, 0xc3, 0x25, 0x97, 0xd6, 0x48, 0xad, 0xe2, 0x26, 0xf6, 0x5d, 0x12, 0xae, 0xd5, 0x5d, 0xf4, 0x16, 0x5c, 0x72, 0x69, 0x8d, 0x54,
0xa5, 0x8e, 0x59, 0x7d, 0x71, 0x42, 0xde, 0xcd, 0x88, 0x83, 0x0f, 0x31, 0xab, 0xa3, 0x05, 0x98, 0xea, 0x98, 0xd5, 0x17, 0x27, 0xe4, 0xdc, 0x8c, 0x18, 0xf8, 0x18, 0xb3, 0x3a, 0x5a, 0x80, 0x29,
0x0a, 0xa8, 0x70, 0x9a, 0x5c, 0x35, 0xb6, 0xb2, 0x65, 0xb5, 0xb1, 0xde, 0x83, 0x25, 0x09, 0x72, 0x9f, 0x8a, 0x45, 0x93, 0xab, 0xc6, 0x56, 0xb6, 0xac, 0x3a, 0xd6, 0x07, 0xb0, 0x24, 0x45, 0x0e,
0x28, 0xdf, 0xe9, 0x5f, 0xb0, 0x7c, 0x62, 0x80, 0x39, 0x2a, 0x82, 0x26, 0xbb, 0x0e, 0x97, 0x55, 0xe5, 0x39, 0xfd, 0x0f, 0xca, 0xc7, 0x06, 0x98, 0xa3, 0x32, 0x68, 0xd8, 0x75, 0xb8, 0xac, 0xae,
0x09, 0x2a, 0xf1, 0x48, 0x73, 0xea, 0x74, 0x5f, 0x1d, 0x22, 0x13, 0x66, 0x98, 0x00, 0x15, 0xfc, 0xa0, 0x12, 0xcf, 0x34, 0xa7, 0x46, 0xf7, 0xd5, 0x20, 0x32, 0x61, 0x86, 0x09, 0x51, 0xc1, 0x37,
0x26, 0x24, 0xbf, 0xde, 0x5e, 0x84, 0xc0, 0x2a, 0x6a, 0x25, 0x68, 0x37, 0xab, 0x24, 0xd4, 0x19, 0x21, 0xf9, 0xfa, 0x7d, 0x91, 0x02, 0xab, 0xac, 0x15, 0xbf, 0xd3, 0xaa, 0x92, 0x40, 0xef, 0x60,
0xcc, 0xe9, 0xd3, 0x8f, 0xe5, 0xa1, 0x75, 0x07, 0x96, 0x25, 0x8f, 0xcf, 0x70, 0xc3, 0xaf, 0x61, 0x4e, 0x8f, 0x7e, 0x2a, 0x07, 0xad, 0xdb, 0xb0, 0x2c, 0x39, 0xbe, 0xc0, 0xcd, 0x46, 0x0d, 0x73,
0x4e, 0xc3, 0xa1, 0x64, 0xae, 0xc3, 0xac, 0x4b, 0x83, 0x61, 0x1e, 0x79, 0x71, 0xb6, 0x9f, 0xc8, 0x1a, 0x0c, 0x6d, 0xe6, 0x1a, 0xcc, 0xba, 0xd4, 0x1f, 0xe6, 0xc8, 0x8b, 0xb1, 0xfd, 0xc4, 0xae,
0xea, 0xa9, 0x01, 0xd7, 0x52, 0xa2, 0xe9, 0xc4, 0x36, 0xe1, 0x7f, 0x11, 0xab, 0x78, 0xc4, 0x88, 0x9e, 0x18, 0x70, 0x35, 0x25, 0x9b, 0xde, 0xd8, 0x26, 0xbc, 0x16, 0x52, 0xc5, 0x33, 0x86, 0xb0,
0xec, 0x7f, 0x98, 0x5a, 0xd4, 0x44, 0x07, 0xaa, 0xce, 0xaf, 0x52, 0x9e, 0x37, 0x75, 0x13, 0xf5, 0xaf, 0x70, 0x6b, 0x61, 0x11, 0x1d, 0xa8, 0x7b, 0x7e, 0x99, 0xeb, 0x79, 0x5b, 0x17, 0x51, 0x7f,
0x5c, 0xc7, 0x35, 0x91, 0x75, 0x47, 0x83, 0x7d, 0xca, 0x69, 0x88, 0xbd, 0xf1, 0x60, 0x68, 0x1e, 0xe9, 0xb8, 0x22, 0xb2, 0x6e, 0x6b, 0xb1, 0xcf, 0x39, 0x0d, 0xb0, 0x37, 0x5e, 0x0c, 0xcd, 0xc3,
0x26, 0x1f, 0x90, 0x13, 0xdd, 0x6f, 0x62, 0x39, 0x00, 0xbf, 0xa7, 0xe1, 0x7b, 0xc1, 0x34, 0xfc, 0xe4, 0x7d, 0x72, 0xa2, 0xeb, 0x4d, 0x34, 0x23, 0xf2, 0x7b, 0x5a, 0xbe, 0x9f, 0x4c, 0xcb, 0x2f,
0x02, 0x4c, 0x75, 0x70, 0xa3, 0x1d, 0x81, 0xab, 0x8d, 0x75, 0x13, 0xe6, 0x75, 0x2b, 0xd5, 0x5e, 0xc0, 0x54, 0x17, 0x37, 0x3b, 0xa1, 0xb8, 0xea, 0x58, 0x37, 0x60, 0x5e, 0x97, 0x52, 0xed, 0xa5,
0x29, 0xc9, 0x4d, 0xf8, 0xff, 0x80, 0x9f, 0x86, 0x40, 0x90, 0x15, 0xbd, 0x2f, 0xbd, 0x66, 0xcb, 0x36, 0xb9, 0x09, 0xaf, 0x47, 0xd6, 0x69, 0x09, 0x04, 0x59, 0x51, 0xfb, 0x72, 0xd5, 0x6c, 0x59,
0x72, 0x6d, 0x3d, 0x02, 0x24, 0x0d, 0x8f, 0xbb, 0x77, 0xa9, 0xc7, 0x22, 0x08, 0x04, 0x59, 0xf9, 0xb6, 0xad, 0x87, 0x80, 0x64, 0xe0, 0x71, 0xef, 0x0e, 0xf5, 0x58, 0x28, 0x81, 0x20, 0x2b, 0xbf,
0xc5, 0xa8, 0xf8, 0x72, 0x8d, 0x3e, 0x00, 0xe8, 0x0b, 0x84, 0xcc, 0x2d, 0x5f, 0xda, 0xb0, 0x55, 0x18, 0x95, 0x5f, 0xb6, 0xd1, 0x47, 0x00, 0x03, 0x83, 0x90, 0x7b, 0xcb, 0x97, 0x36, 0x6c, 0x55,
0xd3, 0xda, 0x42, 0x4d, 0x6c, 0x25, 0x47, 0x5a, 0x4d, 0xec, 0xfb, 0xfd, 0xa7, 0x2a, 0x0f, 0x78, 0xb4, 0xb6, 0x70, 0x13, 0x5b, 0xd9, 0x91, 0x76, 0x13, 0xfb, 0xde, 0xe0, 0xa8, 0xca, 0x91, 0x95,
0x0e, 0x90, 0xfc, 0xde, 0xd0, 0x0f, 0x1b, 0x81, 0x6b, 0x9e, 0xdb, 0x90, 0x6d, 0x50, 0x4f, 0x64, 0x11, 0xc8, 0x1f, 0x0d, 0x7d, 0xb0, 0xa1, 0xb8, 0xe6, 0xdc, 0x86, 0x6c, 0x93, 0x7a, 0x62, 0x77,
0x37, 0xb9, 0x95, 0x2f, 0xbd, 0x66, 0x0f, 0x2b, 0x9b, 0x7d, 0x97, 0x7a, 0x65, 0x69, 0x82, 0x6e, 0x93, 0x5b, 0xf9, 0xd2, 0x1b, 0xf6, 0xb0, 0xb3, 0xd9, 0x77, 0xa8, 0x57, 0x96, 0x21, 0xe8, 0xd6,
0x8f, 0x20, 0xb5, 0x39, 0x96, 0x94, 0xc2, 0x19, 0x64, 0x65, 0x2d, 0xe8, 0x77, 0xb8, 0x8f, 0x43, 0x08, 0xa8, 0xcd, 0xb1, 0x50, 0x4a, 0x27, 0x4a, 0x65, 0x2d, 0xe8, 0x73, 0xb8, 0x87, 0x03, 0xdc,
0xdc, 0x8c, 0xde, 0xc1, 0xba, 0xa7, 0x09, 0x46, 0xa7, 0x9a, 0xe0, 0x4d, 0x98, 0x6e, 0xc9, 0x13, 0x0a, 0xcf, 0xc1, 0xba, 0xab, 0x01, 0xc3, 0x51, 0x0d, 0x78, 0x03, 0xa6, 0xdb, 0x72, 0x44, 0x1e,
0xf9, 0x40, 0xf9, 0xd2, 0x62, 0x92, 0xa2, 0xf2, 0x38, 0xc8, 0x3e, 0xff, 0x7d, 0x25, 0x53, 0xd6, 0x50, 0xbe, 0xb4, 0x98, 0x44, 0x54, 0x2b, 0x0e, 0xb2, 0xcf, 0xfe, 0x5c, 0xc9, 0x94, 0x75, 0xb4,
0xd6, 0xd6, 0x1b, 0x70, 0x55, 0xd7, 0x1e, 0x73, 0xdf, 0x3d, 0xc4, 0x8d, 0xc6, 0x60, 0x6d, 0x6a, 0xf5, 0x3e, 0x5c, 0x3e, 0xe2, 0xf5, 0x43, 0xdc, 0x6c, 0x46, 0x0e, 0x1a, 0x07, 0x1e, 0x0b, 0xaf,
0x98, 0xe3, 0xa8, 0x36, 0x62, 0x6d, 0xbd, 0x0b, 0x97, 0x8f, 0x78, 0x5d, 0x99, 0xf5, 0xea, 0x82, 0x44, 0xb4, 0xd1, 0x9b, 0x90, 0xf3, 0x30, 0xab, 0xb8, 0xb8, 0xad, 0xbf, 0x8e, 0x69, 0x0f, 0xb3,
0x43, 0x8f, 0x45, 0x56, 0x62, 0x8d, 0xae, 0x42, 0xce, 0xc3, 0xac, 0xe2, 0xe2, 0x96, 0xfe, 0x98, 0x43, 0xdc, 0xb6, 0x36, 0xe1, 0xca, 0x11, 0xe3, 0x8d, 0x16, 0xe6, 0xe4, 0x16, 0x1e, 0xd0, 0xcc,
0xa6, 0x3d, 0xcc, 0x0e, 0x71, 0xcb, 0xda, 0x84, 0x2b, 0x47, 0x8c, 0xfb, 0x4d, 0xcc, 0xc9, 0x6d, 0xc3, 0xa4, 0x87, 0x55, 0x8a, 0x6c, 0x59, 0x34, 0xad, 0x5f, 0xfb, 0x07, 0x1b, 0x60, 0x97, 0x1c,
0xdc, 0x27, 0x3f, 0x0f, 0x93, 0x1e, 0x56, 0x21, 0xb2, 0x65, 0xb1, 0xb4, 0x7e, 0xee, 0xd5, 0x21, 0xf7, 0x42, 0xb5, 0x22, 0x4c, 0xb6, 0x98, 0xa7, 0xa1, 0x57, 0x92, 0xd0, 0x77, 0x99, 0x77, 0x24,
0xc4, 0x2e, 0x39, 0xee, 0x46, 0x68, 0x45, 0x98, 0x6c, 0x32, 0x4f, 0xe7, 0xb8, 0x92, 0xcc, 0xf1, 0xc6, 0x48, 0xa7, 0x75, 0xdc, 0x2b, 0x8b, 0x58, 0xb4, 0x04, 0x33, 0xbc, 0x57, 0x69, 0xf8, 0x35,
0x1e, 0xf3, 0x8e, 0xc4, 0x19, 0x69, 0x37, 0x8f, 0xbb, 0x65, 0x61, 0x8b, 0x96, 0x60, 0x86, 0x77, 0xd2, 0xd3, 0x34, 0x39, 0xde, 0xfb, 0x44, 0x74, 0xd1, 0x87, 0x30, 0xcb, 0x45, 0xfe, 0x8a, 0x4b,
0x2b, 0x7e, 0x50, 0x23, 0x5d, 0xcd, 0x26, 0xc7, 0xbb, 0x1f, 0x89, 0x2d, 0x7a, 0x1f, 0x66, 0xb9, 0xfd, 0xaf, 0x1a, 0x9e, 0xfc, 0x50, 0xf3, 0xa5, 0xab, 0xc9, 0xb4, 0x92, 0xe2, 0x50, 0x06, 0x95,
0x88, 0x5f, 0x71, 0x69, 0xf0, 0x85, 0xef, 0xc9, 0xef, 0x3a, 0x5f, 0xba, 0x96, 0x0c, 0x2b, 0x59, 0xf3, 0x7c, 0xd0, 0xb1, 0x76, 0xf4, 0xb7, 0xd0, 0xc7, 0x1c, 0x14, 0x6a, 0x0d, 0x73, 0x1c, 0x9e,
0x1c, 0x4a, 0xa3, 0x72, 0x9e, 0xf7, 0x37, 0xd6, 0x8e, 0xfe, 0x74, 0x7a, 0x34, 0xd3, 0xdf, 0xae, 0x8a, 0x68, 0x97, 0xfe, 0x01, 0x98, 0x92, 0xc1, 0xe8, 0x7b, 0x03, 0x72, 0xda, 0x7b, 0xd0, 0x7a,
0xf4, 0x17, 0xc0, 0x94, 0x34, 0x46, 0xdf, 0x1a, 0x90, 0xd3, 0x52, 0x85, 0xd6, 0x93, 0x68, 0x23, 0x52, 0x6d, 0xc4, 0xe3, 0x62, 0x6e, 0x8c, 0x0b, 0x53, 0xc2, 0xd6, 0xee, 0x77, 0xbf, 0xff, 0xfd,
0x66, 0x91, 0xb9, 0x31, 0xce, 0x4c, 0x01, 0x5b, 0xbb, 0xdf, 0xfc, 0xfa, 0xe7, 0x8f, 0x13, 0xeb, 0xf3, 0xc4, 0x3a, 0x5a, 0x73, 0x12, 0xef, 0x97, 0xf6, 0x1f, 0xe7, 0x91, 0xfe, 0xd8, 0x4e, 0xd1,
0x68, 0xcd, 0x49, 0x8c, 0x3b, 0x2d, 0x57, 0xce, 0x63, 0xfd, 0x6d, 0x9e, 0xa2, 0x9f, 0x0c, 0x98, 0x2f, 0x06, 0xcc, 0xc5, 0x2c, 0x1e, 0xed, 0xa6, 0xc8, 0x8c, 0x7a, 0x4a, 0xcc, 0xbd, 0x8b, 0x05,
0x8b, 0x4d, 0x04, 0xb4, 0x9b, 0x02, 0x33, 0x6a, 0xf2, 0x98, 0x7b, 0x17, 0x33, 0xd6, 0xcc, 0x4a, 0x6b, 0xb2, 0x92, 0x24, 0xdb, 0x43, 0x3b, 0x49, 0xb2, 0xf0, 0x35, 0x49, 0x00, 0xfe, 0x66, 0xc0,
0x92, 0xd9, 0x1e, 0xda, 0x49, 0x32, 0x8b, 0x86, 0x4f, 0x82, 0xe0, 0x2f, 0x06, 0xcc, 0x0f, 0x8b, 0xfc, 0xb0, 0x5b, 0x23, 0x3b, 0x45, 0x36, 0xe5, 0x91, 0x30, 0x9d, 0x0b, 0xc7, 0x6b, 0xd2, 0x9b,
0x3b, 0xb2, 0x53, 0x60, 0x53, 0x66, 0x8a, 0xe9, 0x5c, 0xd8, 0x5e, 0x33, 0xbd, 0x25, 0x99, 0xbe, 0x92, 0xf4, 0x5d, 0x54, 0x4a, 0x92, 0x76, 0xc3, 0x35, 0x03, 0xd8, 0xe8, 0x03, 0x74, 0x8a, 0x1e,
0x8d, 0x4a, 0x49, 0xa6, 0x9d, 0xc8, 0xa7, 0x4f, 0x76, 0x70, 0x5e, 0x9d, 0xa2, 0x27, 0x06, 0xe4, 0x1b, 0x90, 0xd3, 0xbe, 0x9c, 0x7a, 0xb5, 0x71, 0xcb, 0x4f, 0xbd, 0xda, 0x21, 0x7b, 0xb7, 0xf6,
0xb4, 0x8c, 0xa7, 0x96, 0x36, 0x3e, 0x21, 0x52, 0x4b, 0x3b, 0x34, 0x0d, 0xac, 0x3d, 0x49, 0x6b, 0x24, 0xd6, 0x06, 0xba, 0x9e, 0xc4, 0xd2, 0x3e, 0xcf, 0x22, 0x47, 0xf7, 0xc4, 0x80, 0x9c, 0x76,
0x03, 0xdd, 0x48, 0xd2, 0xd2, 0x63, 0x81, 0x0d, 0x3c, 0xdd, 0x53, 0x03, 0x72, 0x5a, 0xd0, 0x53, 0xe8, 0x54, 0x90, 0xf8, 0x73, 0x90, 0x0a, 0x32, 0x64, 0xf4, 0x56, 0x51, 0x82, 0xec, 0xa2, 0xed,
0x89, 0xc4, 0xa7, 0x47, 0x2a, 0x91, 0xa1, 0xb9, 0x60, 0x15, 0x25, 0x91, 0x5d, 0xb4, 0x9d, 0x24, 0x24, 0x08, 0x53, 0xa1, 0x03, 0x0e, 0xe7, 0xd1, 0x7d, 0x72, 0x72, 0x8a, 0x1e, 0x42, 0x56, 0x18,
0xc2, 0x94, 0x69, 0x9f, 0x87, 0xf3, 0xf8, 0x01, 0x39, 0x39, 0x45, 0x8f, 0x20, 0x2b, 0x74, 0x1f, 0x39, 0xb2, 0x52, 0x4b, 0xa6, 0xff, 0x3a, 0x98, 0x6b, 0x2f, 0x8c, 0xd1, 0x0c, 0xdb, 0x92, 0x61,
0x59, 0xa9, 0x2d, 0xd3, 0x1b, 0x26, 0xe6, 0xda, 0x4b, 0x6d, 0x34, 0x87, 0x6d, 0xc9, 0x61, 0x0d, 0x0d, 0x5d, 0x1b, 0x55, 0x4d, 0xb5, 0xd8, 0x49, 0x7c, 0x0d, 0xd3, 0xca, 0xcb, 0xd0, 0xf5, 0x94,
0x5d, 0x1f, 0xd5, 0x4d, 0xb5, 0xd8, 0x4b, 0x7c, 0x09, 0xd3, 0x4a, 0xfa, 0xd0, 0x8d, 0x94, 0xc8, 0xcc, 0x31, 0xcb, 0x34, 0xd7, 0xc7, 0x44, 0x69, 0x82, 0x55, 0x49, 0x60, 0xa2, 0xc5, 0x24, 0x81,
0x31, 0x85, 0x35, 0xd7, 0xc7, 0x58, 0x69, 0x06, 0xab, 0x92, 0x81, 0x89, 0x16, 0x93, 0x0c, 0x94, 0x32, 0x4b, 0xd4, 0x83, 0x9c, 0x36, 0x4b, 0xb4, 0x9a, 0xcc, 0x19, 0xf7, 0x51, 0x73, 0x73, 0x9c,
0xb6, 0xa2, 0x2e, 0xe4, 0xb4, 0x58, 0xa2, 0xd5, 0x64, 0xcc, 0xb8, 0x8e, 0x9a, 0x9b, 0xe3, 0xc4, 0x99, 0x85, 0xba, 0x96, 0xd4, 0x5d, 0x46, 0x66, 0x52, 0x97, 0xf0, 0x7a, 0xc5, 0x15, 0x72, 0xdf,
0x2c, 0xc2, 0xb5, 0x24, 0xee, 0x32, 0x32, 0x93, 0xb8, 0x84, 0xd7, 0x2b, 0xae, 0x80, 0xfb, 0x1a, 0x42, 0x3e, 0xe2, 0xb3, 0x17, 0x50, 0x1f, 0xb1, 0xe7, 0x11, 0x46, 0x6d, 0x6d, 0x48, 0xed, 0x55,
0xf2, 0x03, 0x3a, 0x7b, 0x01, 0xf4, 0x11, 0x39, 0x8f, 0x10, 0x6a, 0x6b, 0x43, 0x62, 0xaf, 0xa2, 0x54, 0x18, 0xa1, 0xad, 0xc3, 0x2b, 0x1e, 0x66, 0xe8, 0x1b, 0xc8, 0x69, 0x47, 0x4c, 0xad, 0xbd,
0xc2, 0x08, 0x6c, 0x6d, 0x5e, 0xf1, 0x30, 0x43, 0x5f, 0x41, 0x4e, 0x2b, 0x62, 0x6a, 0xef, 0xc5, 0xb8, 0xb1, 0xa7, 0xd6, 0xde, 0x90, 0xb1, 0xbe, 0x68, 0xf7, 0xca, 0xca, 0x79, 0xef, 0xe0, 0xe0,
0x85, 0x3d, 0xb5, 0xf7, 0x86, 0x84, 0xf5, 0x65, 0xd9, 0x2b, 0x29, 0xe7, 0xdd, 0x83, 0x83, 0xe7, 0xd9, 0x59, 0xc1, 0x78, 0x7e, 0x56, 0x30, 0xfe, 0x3a, 0x2b, 0x18, 0x3f, 0x9d, 0x17, 0x32, 0xcf,
0x67, 0x05, 0xe3, 0xc5, 0x59, 0xc1, 0xf8, 0xe3, 0xac, 0x60, 0xfc, 0x70, 0x5e, 0xc8, 0xbc, 0x38, 0xcf, 0x0b, 0x99, 0x3f, 0xce, 0x0b, 0x99, 0x2f, 0xb7, 0xbc, 0x06, 0xaf, 0x77, 0xaa, 0xb6, 0x4b,
0x2f, 0x64, 0x7e, 0x3b, 0x2f, 0x64, 0x3e, 0xdf, 0xf2, 0x7c, 0x5e, 0x6f, 0x57, 0x6d, 0x97, 0x36, 0x5b, 0x0e, 0xaf, 0xe3, 0x80, 0x35, 0x58, 0x24, 0x4f, 0x4f, 0x66, 0xe2, 0x27, 0x6d, 0xc2, 0xaa,
0x1d, 0x5e, 0xc7, 0x21, 0xf3, 0xd9, 0x40, 0x9c, 0xae, 0x8c, 0xc4, 0x4f, 0x5a, 0x84, 0x55, 0xa7, 0xd3, 0xf2, 0x57, 0xff, 0x9d, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x55, 0x07, 0x68, 0x0c, 0xb3,
0xe5, 0x9f, 0xc1, 0x5b, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0xf4, 0x5c, 0x4c, 0x85, 0xe2, 0x0c, 0x0c, 0x00, 0x00,
0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
@ -2113,36 +2066,6 @@ func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
return len(dAtA) - i, nil return len(dAtA) - i, nil
} }
func (m *QueryStaticCallResponse) 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 *QueryStaticCallResponse) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
func (m *QueryStaticCallResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
_ = i
var l int
_ = l
if len(m.Data) > 0 {
i -= len(m.Data)
copy(dAtA[i:], m.Data)
i = encodeVarintQuery(dAtA, i, uint64(len(m.Data)))
i--
dAtA[i] = 0xa
}
return len(dAtA) - i, nil
}
func (m *EthCallRequest) Marshal() (dAtA []byte, err error) { func (m *EthCallRequest) Marshal() (dAtA []byte, err error) {
size := m.Size() size := m.Size()
dAtA = make([]byte, size) dAtA = make([]byte, size)
@ -2534,19 +2457,6 @@ func (m *QueryParamsResponse) Size() (n int) {
return n return n
} }
func (m *QueryStaticCallResponse) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
l = len(m.Data)
if l > 0 {
n += 1 + l + sovQuery(uint64(l))
}
return n
}
func (m *EthCallRequest) Size() (n int) { func (m *EthCallRequest) Size() (n int) {
if m == nil { if m == nil {
return 0 return 0
@ -4130,90 +4040,6 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error {
} }
return nil return nil
} }
func (m *QueryStaticCallResponse) 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 ErrIntOverflowQuery
}
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: QueryStaticCallResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: QueryStaticCallResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType)
}
var byteLen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowQuery
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
byteLen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
if byteLen < 0 {
return ErrInvalidLengthQuery
}
postIndex := iNdEx + byteLen
if postIndex < 0 {
return ErrInvalidLengthQuery
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Data = append(m.Data[:0], dAtA[iNdEx:postIndex]...)
if m.Data == nil {
m.Data = []byte{}
}
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipQuery(dAtA[iNdEx:])
if err != nil {
return err
}
if (skippy < 0) || (iNdEx+skippy) < 0 {
return ErrInvalidLengthQuery
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func (m *EthCallRequest) Unmarshal(dAtA []byte) error { func (m *EthCallRequest) Unmarshal(dAtA []byte) error {
l := len(dAtA) l := len(dAtA)
iNdEx := 0 iNdEx := 0

172
x/evm/types/tx_args.go Normal file
View File

@ -0,0 +1,172 @@
package types
import (
"errors"
"fmt"
math "math"
"math/big"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil"
ethtypes "github.com/ethereum/go-ethereum/core/types"
)
// TransactionArgs represents the arguments to construct a new transaction
// or a message call using JSON-RPC.
// Duplicate struct definition since geth struct is in internal package
// Ref: https://github.com/ethereum/go-ethereum/blob/release/1.10.4/internal/ethapi/transaction_args.go#L36
type TransactionArgs struct {
From *common.Address `json:"from"`
To *common.Address `json:"to"`
Gas *hexutil.Uint64 `json:"gas"`
GasPrice *hexutil.Big `json:"gasPrice"`
MaxFeePerGas *hexutil.Big `json:"maxFeePerGas"`
MaxPriorityFeePerGas *hexutil.Big `json:"maxPriorityFeePerGas"`
Value *hexutil.Big `json:"value"`
Nonce *hexutil.Uint64 `json:"nonce"`
// We accept "data" and "input" for backwards-compatibility reasons.
// "input" is the newer name and should be preferred by clients.
// Issue detail: https://github.com/ethereum/go-ethereum/issues/15628
Data *hexutil.Bytes `json:"data"`
Input *hexutil.Bytes `json:"input"`
// Introduced by AccessListTxType transaction.
AccessList *ethtypes.AccessList `json:"accessList,omitempty"`
ChainID *hexutil.Big `json:"chainId,omitempty"`
}
// String return the struct in a string format
func (args *TransactionArgs) String() string {
// Todo: There is currently a bug with hexutil.Big when the value its nil, printing would trigger an exception
return fmt.Sprintf("TransactionArgs{From:%v, To:%v, Gas:%v,"+
" Nonce:%v, Data:%v, Input:%v, AccessList:%v}",
args.From,
args.To,
args.Gas,
args.Nonce,
args.Data,
args.Input,
args.AccessList)
}
// ToTransaction converts the arguments to an ethereum transaction.
// This assumes that setTxDefaults has been called.
func (args *TransactionArgs) ToTransaction() *MsgEthereumTx {
var (
input []byte
chainID, value, gasPrice *big.Int
// maxFeePerGas, maxPriorityFeePerGas *big.Int
addr common.Address
gas, nonce uint64
)
// Set sender address or use zero address if none specified.
if args.From != nil {
addr = *args.From
}
if args.Input != nil {
input = *args.Input
} else if args.Data != nil {
input = *args.Data
}
if args.ChainID != nil {
chainID = args.ChainID.ToInt()
}
if args.Nonce != nil {
nonce = uint64(*args.Nonce)
}
if args.Gas != nil {
gas = uint64(*args.Gas)
}
if args.GasPrice != nil {
gasPrice = args.GasPrice.ToInt()
}
// if args.MaxFeePerGas != nil {
// maxFeePerGas = args.MaxFeePerGas.ToInt()
// }
// if args.MaxPriorityFeePerGas != nil {
// maxPriorityFeePerGas = args.MaxPriorityFeePerGas.ToInt()
// }
if args.GasPrice != nil {
gasPrice = args.GasPrice.ToInt()
}
if args.Value != nil {
value = args.Value.ToInt()
}
tx := NewTx(chainID, nonce, args.To, value, gas, gasPrice, input, args.AccessList)
tx.From = addr.Hex()
return tx
}
// ToMessage converts the arguments to the Message type used by the core evm.
// This assumes that setTxDefaults has been called.
func (args *TransactionArgs) ToMessage(globalGasCap uint64) (ethtypes.Message, error) {
var (
input []byte
value, gasPrice *big.Int
// gasFeeCap, gasTipCap *big.Int
addr common.Address
gas, nonce uint64
)
// Reject invalid combinations of pre- and post-1559 fee styles
if args.GasPrice != nil && (args.MaxFeePerGas != nil || args.MaxPriorityFeePerGas != nil) {
return ethtypes.Message{}, errors.New("both gasPrice and (maxFeePerGas or maxPriorityFeePerGas) specified")
}
// Set sender address or use zero address if none specified.
if args.From != nil {
addr = *args.From
}
// Set default gas & gas price if none were set
gas = globalGasCap
if gas == 0 {
gas = uint64(math.MaxUint64 / 2)
}
if args.Gas != nil {
gas = uint64(*args.Gas)
}
if globalGasCap != 0 && globalGasCap < gas {
gas = globalGasCap
}
if args.GasPrice != nil {
gasPrice = args.GasPrice.ToInt()
}
if args.Value != nil {
value = args.Value.ToInt()
}
// if args.MaxFeePerGas != nil {
// gasFeeCap = args.MaxFeePerGas.ToInt()
// }
// if args.MaxPriorityFeePerGas != nil {
// gasTipCap = args.MaxPriorityFeePerGas.ToInt()
// }
if args.Data != nil {
input = *args.Data
}
var accessList ethtypes.AccessList
if args.AccessList != nil {
accessList = *args.AccessList
}
msg := ethtypes.NewMessage(addr, args.To, nonce, value, gas, gasPrice, input, accessList, false)
return msg, nil
}