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`.
|
||||
* (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
|
||||
|
||||
|
@ -137,14 +137,17 @@ func (avd EthAccountVerificationDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx
|
||||
// gas consumption.
|
||||
type EthGasConsumeDecorator struct {
|
||||
evmKeeper EVMKeeper
|
||||
maxGasWanted uint64
|
||||
}
|
||||
|
||||
// NewEthGasConsumeDecorator creates a new EthGasConsumeDecorator
|
||||
func NewEthGasConsumeDecorator(
|
||||
evmKeeper EVMKeeper,
|
||||
maxGasWanted uint64,
|
||||
) 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() {
|
||||
// We can't trust the tx gas limit, because we'll refund the unused gas.
|
||||
if txData.GetGas() > MaxTxGasWanted {
|
||||
gasWanted += MaxTxGasWanted
|
||||
if txData.GetGas() > egcd.maxGasWanted {
|
||||
gasWanted += egcd.maxGasWanted
|
||||
} else {
|
||||
gasWanted += txData.GetGas()
|
||||
}
|
||||
|
@ -6,6 +6,7 @@ import (
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
|
||||
"github.com/tharsis/ethermint/app/ante"
|
||||
"github.com/tharsis/ethermint/server/config"
|
||||
"github.com/tharsis/ethermint/tests"
|
||||
"github.com/tharsis/ethermint/x/evm/statedb"
|
||||
evmtypes "github.com/tharsis/ethermint/x/evm/types"
|
||||
@ -201,7 +202,7 @@ func (suite AnteTestSuite) TestEthNonceVerificationDecorator() {
|
||||
}
|
||||
|
||||
func (suite AnteTestSuite) TestEthGasConsumeDecorator() {
|
||||
dec := ante.NewEthGasConsumeDecorator(suite.app.EvmKeeper)
|
||||
dec := ante.NewEthGasConsumeDecorator(suite.app.EvmKeeper, config.DefaultMaxTxGasWanted)
|
||||
|
||||
addr := tests.GenerateAddress()
|
||||
|
||||
|
@ -25,6 +25,7 @@ type HandlerOptions struct {
|
||||
FeegrantKeeper ante.FeegrantKeeper
|
||||
SignModeHandler authsigning.SignModeHandler
|
||||
SigGasConsumer func(meter sdk.GasMeter, sig signing.SignatureV2, params authtypes.Params) error
|
||||
MaxTxGasWanted uint64
|
||||
}
|
||||
|
||||
func (options HandlerOptions) Validate() error {
|
||||
@ -53,7 +54,7 @@ func newEthAnteHandler(options HandlerOptions) sdk.AnteHandler {
|
||||
NewEthValidateBasicDecorator(options.EvmKeeper),
|
||||
NewEthSigVerificationDecorator(options.EvmKeeper),
|
||||
NewEthAccountVerificationDecorator(options.AccountKeeper, options.BankKeeper, options.EvmKeeper),
|
||||
NewEthGasConsumeDecorator(options.EvmKeeper),
|
||||
NewEthGasConsumeDecorator(options.EvmKeeper, options.MaxTxGasWanted),
|
||||
NewCanTransferDecorator(options.EvmKeeper),
|
||||
NewEthIncrementSenderSequenceDecorator(options.AccountKeeper), // innermost AnteDecorator.
|
||||
)
|
||||
|
@ -567,6 +567,7 @@ func NewEthermintApp(
|
||||
|
||||
// use Ethermint's custom AnteHandler
|
||||
|
||||
maxGasWanted := cast.ToUint64(appOpts.Get(srvflags.EVMMaxTxGasWanted))
|
||||
options := ante.HandlerOptions{
|
||||
AccountKeeper: app.AccountKeeper,
|
||||
BankKeeper: app.BankKeeper,
|
||||
@ -576,6 +577,7 @@ func NewEthermintApp(
|
||||
FeeMarketKeeper: app.FeeMarketKeeper,
|
||||
SignModeHandler: encodingConfig.TxConfig.SignModeHandler(),
|
||||
SigGasConsumer: ante.DefaultSigVerificationGasConsumer,
|
||||
MaxTxGasWanted: maxGasWanted,
|
||||
}
|
||||
|
||||
if err := options.Validate(); err != nil {
|
||||
|
@ -28,6 +28,8 @@ const (
|
||||
// DefaultEVMTracer is the default vm.Tracer type
|
||||
DefaultEVMTracer = ""
|
||||
|
||||
DefaultMaxTxGasWanted = 500000
|
||||
|
||||
DefaultGasCap uint64 = 25000000
|
||||
|
||||
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
|
||||
// trace mode. Default: 'json'.
|
||||
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.
|
||||
@ -153,6 +157,7 @@ func DefaultConfig() *Config {
|
||||
func DefaultEVMConfig() *EVMConfig {
|
||||
return &EVMConfig{
|
||||
Tracer: DefaultEVMTracer,
|
||||
MaxTxGasWanted: DefaultMaxTxGasWanted,
|
||||
}
|
||||
}
|
||||
|
||||
@ -278,6 +283,7 @@ func GetConfig(v *viper.Viper) Config {
|
||||
Config: cfg,
|
||||
EVM: EVMConfig{
|
||||
Tracer: v.GetString("evm.tracer"),
|
||||
MaxTxGasWanted: v.GetUint64("evm.max-tx-gas-wanted"),
|
||||
},
|
||||
JSONRPC: JSONRPCConfig{
|
||||
Enable: v.GetBool("json-rpc.enable"),
|
||||
|
@ -13,6 +13,9 @@ const DefaultConfigTemplate = `
|
||||
# Valid types are: json|struct|access_list|markdown
|
||||
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 ###
|
||||
###############################################################################
|
||||
|
@ -49,6 +49,7 @@ const (
|
||||
// EVM flags
|
||||
const (
|
||||
EVMTracer = "evm.tracer"
|
||||
EVMMaxTxGasWanted = "evm.max-tx-gas-wanted"
|
||||
)
|
||||
|
||||
// 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().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.TLSKeyPath, "", "the key.pem file path for the server TLS configuration")
|
||||
|
Loading…
Reference in New Issue
Block a user