make MaxTxGasWanted configurable (#1004)
This commit is contained in:
parent
93a57bc330
commit
8bcdb2c0e5
@ -42,6 +42,7 @@ Ref: https://keepachangelog.com/en/1.0.0/
|
|||||||
|
|
||||||
* (rpc) [tharsis#990](https://github.com/tharsis/ethermint/pull/990) Calculate reward values from all `MsgEthereumTx` from a block in `eth_feeHistory`.
|
* (rpc) [tharsis#990](https://github.com/tharsis/ethermint/pull/990) Calculate reward values from all `MsgEthereumTx` from a block in `eth_feeHistory`.
|
||||||
* (ante) [tharsis#991](https://github.com/tharsis/ethermint/pull/991) Set an upper bound to gasWanted to prevent DoS attack.
|
* (ante) [tharsis#991](https://github.com/tharsis/ethermint/pull/991) Set an upper bound to gasWanted to prevent DoS attack.
|
||||||
|
* (ante) [tharsis#1004](https://github.com/tharsis/ethermint/pull/1004) make MaxTxGasWanted configurable.
|
||||||
|
|
||||||
## [v0.11.0] - 2022-03-06
|
## [v0.11.0] - 2022-03-06
|
||||||
|
|
||||||
|
@ -137,14 +137,17 @@ func (avd EthAccountVerificationDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx
|
|||||||
// gas consumption.
|
// gas consumption.
|
||||||
type EthGasConsumeDecorator struct {
|
type EthGasConsumeDecorator struct {
|
||||||
evmKeeper EVMKeeper
|
evmKeeper EVMKeeper
|
||||||
|
maxGasWanted uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewEthGasConsumeDecorator creates a new EthGasConsumeDecorator
|
// NewEthGasConsumeDecorator creates a new EthGasConsumeDecorator
|
||||||
func NewEthGasConsumeDecorator(
|
func NewEthGasConsumeDecorator(
|
||||||
evmKeeper EVMKeeper,
|
evmKeeper EVMKeeper,
|
||||||
|
maxGasWanted uint64,
|
||||||
) EthGasConsumeDecorator {
|
) EthGasConsumeDecorator {
|
||||||
return EthGasConsumeDecorator{
|
return EthGasConsumeDecorator{
|
||||||
evmKeeper: evmKeeper,
|
evmKeeper,
|
||||||
|
maxGasWanted,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -188,8 +191,8 @@ func (egcd EthGasConsumeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simula
|
|||||||
|
|
||||||
if ctx.IsCheckTx() {
|
if ctx.IsCheckTx() {
|
||||||
// We can't trust the tx gas limit, because we'll refund the unused gas.
|
// We can't trust the tx gas limit, because we'll refund the unused gas.
|
||||||
if txData.GetGas() > MaxTxGasWanted {
|
if txData.GetGas() > egcd.maxGasWanted {
|
||||||
gasWanted += MaxTxGasWanted
|
gasWanted += egcd.maxGasWanted
|
||||||
} else {
|
} else {
|
||||||
gasWanted += txData.GetGas()
|
gasWanted += txData.GetGas()
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ import (
|
|||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
|
|
||||||
"github.com/tharsis/ethermint/app/ante"
|
"github.com/tharsis/ethermint/app/ante"
|
||||||
|
"github.com/tharsis/ethermint/server/config"
|
||||||
"github.com/tharsis/ethermint/tests"
|
"github.com/tharsis/ethermint/tests"
|
||||||
"github.com/tharsis/ethermint/x/evm/statedb"
|
"github.com/tharsis/ethermint/x/evm/statedb"
|
||||||
evmtypes "github.com/tharsis/ethermint/x/evm/types"
|
evmtypes "github.com/tharsis/ethermint/x/evm/types"
|
||||||
@ -201,7 +202,7 @@ func (suite AnteTestSuite) TestEthNonceVerificationDecorator() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (suite AnteTestSuite) TestEthGasConsumeDecorator() {
|
func (suite AnteTestSuite) TestEthGasConsumeDecorator() {
|
||||||
dec := ante.NewEthGasConsumeDecorator(suite.app.EvmKeeper)
|
dec := ante.NewEthGasConsumeDecorator(suite.app.EvmKeeper, config.DefaultMaxTxGasWanted)
|
||||||
|
|
||||||
addr := tests.GenerateAddress()
|
addr := tests.GenerateAddress()
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@ type HandlerOptions struct {
|
|||||||
FeegrantKeeper ante.FeegrantKeeper
|
FeegrantKeeper ante.FeegrantKeeper
|
||||||
SignModeHandler authsigning.SignModeHandler
|
SignModeHandler authsigning.SignModeHandler
|
||||||
SigGasConsumer func(meter sdk.GasMeter, sig signing.SignatureV2, params authtypes.Params) error
|
SigGasConsumer func(meter sdk.GasMeter, sig signing.SignatureV2, params authtypes.Params) error
|
||||||
|
MaxTxGasWanted uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
func (options HandlerOptions) Validate() error {
|
func (options HandlerOptions) Validate() error {
|
||||||
@ -53,7 +54,7 @@ func newEthAnteHandler(options HandlerOptions) sdk.AnteHandler {
|
|||||||
NewEthValidateBasicDecorator(options.EvmKeeper),
|
NewEthValidateBasicDecorator(options.EvmKeeper),
|
||||||
NewEthSigVerificationDecorator(options.EvmKeeper),
|
NewEthSigVerificationDecorator(options.EvmKeeper),
|
||||||
NewEthAccountVerificationDecorator(options.AccountKeeper, options.BankKeeper, options.EvmKeeper),
|
NewEthAccountVerificationDecorator(options.AccountKeeper, options.BankKeeper, options.EvmKeeper),
|
||||||
NewEthGasConsumeDecorator(options.EvmKeeper),
|
NewEthGasConsumeDecorator(options.EvmKeeper, options.MaxTxGasWanted),
|
||||||
NewCanTransferDecorator(options.EvmKeeper),
|
NewCanTransferDecorator(options.EvmKeeper),
|
||||||
NewEthIncrementSenderSequenceDecorator(options.AccountKeeper), // innermost AnteDecorator.
|
NewEthIncrementSenderSequenceDecorator(options.AccountKeeper), // innermost AnteDecorator.
|
||||||
)
|
)
|
||||||
|
@ -567,6 +567,7 @@ func NewEthermintApp(
|
|||||||
|
|
||||||
// use Ethermint's custom AnteHandler
|
// use Ethermint's custom AnteHandler
|
||||||
|
|
||||||
|
maxGasWanted := cast.ToUint64(appOpts.Get(srvflags.EVMMaxTxGasWanted))
|
||||||
options := ante.HandlerOptions{
|
options := ante.HandlerOptions{
|
||||||
AccountKeeper: app.AccountKeeper,
|
AccountKeeper: app.AccountKeeper,
|
||||||
BankKeeper: app.BankKeeper,
|
BankKeeper: app.BankKeeper,
|
||||||
@ -576,6 +577,7 @@ func NewEthermintApp(
|
|||||||
FeeMarketKeeper: app.FeeMarketKeeper,
|
FeeMarketKeeper: app.FeeMarketKeeper,
|
||||||
SignModeHandler: encodingConfig.TxConfig.SignModeHandler(),
|
SignModeHandler: encodingConfig.TxConfig.SignModeHandler(),
|
||||||
SigGasConsumer: ante.DefaultSigVerificationGasConsumer,
|
SigGasConsumer: ante.DefaultSigVerificationGasConsumer,
|
||||||
|
MaxTxGasWanted: maxGasWanted,
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := options.Validate(); err != nil {
|
if err := options.Validate(); err != nil {
|
||||||
|
@ -28,6 +28,8 @@ const (
|
|||||||
// DefaultEVMTracer is the default vm.Tracer type
|
// DefaultEVMTracer is the default vm.Tracer type
|
||||||
DefaultEVMTracer = ""
|
DefaultEVMTracer = ""
|
||||||
|
|
||||||
|
DefaultMaxTxGasWanted = 500000
|
||||||
|
|
||||||
DefaultGasCap uint64 = 25000000
|
DefaultGasCap uint64 = 25000000
|
||||||
|
|
||||||
DefaultFilterCap int32 = 200
|
DefaultFilterCap int32 = 200
|
||||||
@ -64,6 +66,8 @@ type EVMConfig struct {
|
|||||||
// Tracer defines vm.Tracer type that the EVM will use if the node is run in
|
// Tracer defines vm.Tracer type that the EVM will use if the node is run in
|
||||||
// trace mode. Default: 'json'.
|
// trace mode. Default: 'json'.
|
||||||
Tracer string `mapstructure:"tracer"`
|
Tracer string `mapstructure:"tracer"`
|
||||||
|
// MaxTxGasWanted defines the gas wanted for each eth tx returned in ante handler in check tx mode.
|
||||||
|
MaxTxGasWanted uint64 `mapstructure:"max-tx-gas-wanted"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// JSONRPCConfig defines configuration for the EVM RPC server.
|
// JSONRPCConfig defines configuration for the EVM RPC server.
|
||||||
@ -153,6 +157,7 @@ func DefaultConfig() *Config {
|
|||||||
func DefaultEVMConfig() *EVMConfig {
|
func DefaultEVMConfig() *EVMConfig {
|
||||||
return &EVMConfig{
|
return &EVMConfig{
|
||||||
Tracer: DefaultEVMTracer,
|
Tracer: DefaultEVMTracer,
|
||||||
|
MaxTxGasWanted: DefaultMaxTxGasWanted,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -278,6 +283,7 @@ func GetConfig(v *viper.Viper) Config {
|
|||||||
Config: cfg,
|
Config: cfg,
|
||||||
EVM: EVMConfig{
|
EVM: EVMConfig{
|
||||||
Tracer: v.GetString("evm.tracer"),
|
Tracer: v.GetString("evm.tracer"),
|
||||||
|
MaxTxGasWanted: v.GetUint64("evm.max-tx-gas-wanted"),
|
||||||
},
|
},
|
||||||
JSONRPC: JSONRPCConfig{
|
JSONRPC: JSONRPCConfig{
|
||||||
Enable: v.GetBool("json-rpc.enable"),
|
Enable: v.GetBool("json-rpc.enable"),
|
||||||
|
@ -13,6 +13,9 @@ const DefaultConfigTemplate = `
|
|||||||
# Valid types are: json|struct|access_list|markdown
|
# Valid types are: json|struct|access_list|markdown
|
||||||
tracer = "{{ .EVM.Tracer }}"
|
tracer = "{{ .EVM.Tracer }}"
|
||||||
|
|
||||||
|
# MaxTxGasWanted defines the gas wanted for each eth tx returned in ante handler in check tx mode.
|
||||||
|
max-tx-gas-wanted = {{ .EVM.MaxTxGasWanted }}
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
### JSON RPC Configuration ###
|
### JSON RPC Configuration ###
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
@ -49,6 +49,7 @@ const (
|
|||||||
// EVM flags
|
// EVM flags
|
||||||
const (
|
const (
|
||||||
EVMTracer = "evm.tracer"
|
EVMTracer = "evm.tracer"
|
||||||
|
EVMMaxTxGasWanted = "evm.max-tx-gas-wanted"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TLS flags
|
// TLS flags
|
||||||
|
@ -166,6 +166,7 @@ which accepts a path for the resulting pprof file.
|
|||||||
cmd.Flags().Int32(srvflags.JSONRPCBlockRangeCap, config.DefaultBlockRangeCap, "Sets the max block range allowed for `eth_getLogs` query")
|
cmd.Flags().Int32(srvflags.JSONRPCBlockRangeCap, config.DefaultBlockRangeCap, "Sets the max block range allowed for `eth_getLogs` query")
|
||||||
|
|
||||||
cmd.Flags().String(srvflags.EVMTracer, config.DefaultEVMTracer, "the EVM tracer type to collect execution traces from the EVM transaction execution (json|struct|access_list|markdown)")
|
cmd.Flags().String(srvflags.EVMTracer, config.DefaultEVMTracer, "the EVM tracer type to collect execution traces from the EVM transaction execution (json|struct|access_list|markdown)")
|
||||||
|
cmd.Flags().Uint64(srvflags.EVMMaxTxGasWanted, config.DefaultMaxTxGasWanted, "the gas wanted for each eth tx returned in ante handler in check tx mode")
|
||||||
|
|
||||||
cmd.Flags().String(srvflags.TLSCertPath, "", "the cert.pem file path for the server TLS configuration")
|
cmd.Flags().String(srvflags.TLSCertPath, "", "the cert.pem file path for the server TLS configuration")
|
||||||
cmd.Flags().String(srvflags.TLSKeyPath, "", "the key.pem file path for the server TLS configuration")
|
cmd.Flags().String(srvflags.TLSKeyPath, "", "the key.pem file path for the server TLS configuration")
|
||||||
|
Loading…
Reference in New Issue
Block a user