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:
parent
561d5db985
commit
fb9adf979c
@ -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
|
||||||
|
@ -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.
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -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")
|
||||||
@ -322,12 +328,14 @@ func (egcd EthGasConsumeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simula
|
|||||||
// 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)
|
||||||
|
@ -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()
|
||||||
|
|
||||||
|
@ -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())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
13
app/app.go
13
app/app.go
@ -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
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
105
docs/protodoc-markdown.tmpl
Normal 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
4
go.mod
@ -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
7
go.sum
@ -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=
|
||||||
|
@ -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\"" ];
|
||||||
|
@ -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" ];
|
||||||
}
|
}
|
||||||
|
@ -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.
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
@ -86,6 +89,7 @@ func NewKeeper(
|
|||||||
accountKeeper: ak,
|
accountKeeper: ak,
|
||||||
bankKeeper: bankKeeper,
|
bankKeeper: bankKeeper,
|
||||||
stakingKeeper: sk,
|
stakingKeeper: sk,
|
||||||
|
feeMarketKeeper: fmk,
|
||||||
storeKey: storeKey,
|
storeKey: storeKey,
|
||||||
transientKey: transientKey,
|
transientKey: transientKey,
|
||||||
tracer: tracer,
|
tracer: tracer,
|
||||||
|
@ -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,10 +54,13 @@ 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
|
||||||
|
// NoBaseFee: fmParams.NoBaseFee,
|
||||||
ExtraEips: params.EIPs(),
|
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 {
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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))}
|
||||||
|
|
||||||
|
@ -242,6 +242,7 @@ func (suite *KeeperTestSuite) TestDeductTxCostsFromUserBalance() {
|
|||||||
evmtypes.DefaultEVMDenom,
|
evmtypes.DefaultEVMDenom,
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
|
false, // london
|
||||||
)
|
)
|
||||||
|
|
||||||
if tc.expectPass {
|
if tc.expectPass {
|
||||||
|
182
x/evm/types/evm.pb.go
generated
182
x/evm/types/evm.pb.go
generated
@ -40,6 +40,7 @@ type Params struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m *Params) Reset() { *m = Params{} }
|
func (m *Params) Reset() { *m = Params{} }
|
||||||
|
func (m *Params) String() string { return proto.CompactTextString(m) }
|
||||||
func (*Params) ProtoMessage() {}
|
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) {
|
||||||
|
46
x/evm/types/genesis.pb.go
generated
46
x/evm/types/genesis.pb.go
generated
@ -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)
|
||||||
}
|
}
|
||||||
|
@ -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.
|
||||||
|
|
||||||
|
@ -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
326
x/evm/types/query.pb.go
generated
@ -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
172
x/evm/types/tx_args.go
Normal 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
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user