Skip to content

Commit

Permalink
merge: get tests passing with non-default fee cap
Browse files Browse the repository at this point in the history
commit e7ffdadf55aa1aecf19f2add744067cfcd57e083
Author: Unique-Divine <[email protected]>
Date:   Sat Aug 24 22:30:00 2024 -0500

    fix: more RPC tests and refactor more

commit e17c50ddffc6767679a67b92bd5dc6fe3eeae94f
Author: Unique-Divine <[email protected]>
Date:   Fri Aug 23 22:46:46 2024 -0500

    test(e2e): get tests passing with non-default fee cap
  • Loading branch information
Unique-Divine committed Aug 25, 2024
1 parent 005e4cd commit 9276333
Show file tree
Hide file tree
Showing 18 changed files with 511 additions and 325 deletions.
20 changes: 12 additions & 8 deletions app/evmante/evmante_mempool_fees.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package evmante

import (
"cosmossdk.io/errors"
"cosmossdk.io/math"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"

Expand Down Expand Up @@ -38,14 +39,15 @@ func (d MempoolGasPriceDecorator) AnteHandle(
}

minGasPrice := ctx.MinGasPrices().AmountOf(d.evmKeeper.GetParams(ctx).EvmDenom)
baseFeeMicronibi := d.evmKeeper.GetBaseFee(ctx)
baseFeeDec := math.LegacyNewDecFromBigInt(baseFeeMicronibi)
// if MinGasPrices is not set, skip the check
if minGasPrice.IsZero() {
return next(ctx, tx, simulate)
} else if minGasPrice.LT(baseFeeDec) {
minGasPrice = baseFeeDec
}

baseFeeMicronibi := d.evmKeeper.GetBaseFee(ctx)
baseFeeWei := evm.NativeToWei(baseFeeMicronibi)

for _, msg := range tx.GetMsgs() {
ethTx, ok := msg.(*evm.MsgEthereumTx)
if !ok {
Expand All @@ -56,16 +58,18 @@ func (d MempoolGasPriceDecorator) AnteHandle(
)
}

effectiveGasPriceWei := ethTx.GetEffectiveGasPrice(baseFeeWei)
effectiveGasPrice := evm.WeiToNative(effectiveGasPriceWei)

if sdk.NewDecFromBigInt(effectiveGasPrice).LT(minGasPrice) {
baseFeeWei := evm.NativeToWei(baseFeeMicronibi)
effectiveGasPriceDec := math.LegacyNewDecFromBigInt(
evm.WeiToNative(ethTx.GetEffectiveGasPrice(baseFeeWei)),
)
if effectiveGasPriceDec.LT(minGasPrice) {
// if sdk.NewDecFromBigInt(effectiveGasPrice).LT(minGasPrice) {
return ctx, errors.Wrapf(
sdkerrors.ErrInsufficientFee,
"provided gas price < minimum local gas price (%s < %s). "+
"Please increase the priority tip (for EIP-1559 txs) or the gas prices "+
"(for access list or legacy txs)",
effectiveGasPrice.String(), minGasPrice.String(),
effectiveGasPriceDec, minGasPrice,
)
}
}
Expand Down
83 changes: 49 additions & 34 deletions app/server/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import (
dbm "github.com/cometbft/cometbft-db"
abciserver "github.com/cometbft/cometbft/abci/server"
tcmd "github.com/cometbft/cometbft/cmd/cometbft/commands"
"github.com/cometbft/cometbft/libs/log"
tmos "github.com/cometbft/cometbft/libs/os"
"github.com/cometbft/cometbft/node"
"github.com/cometbft/cometbft/p2p"
Expand All @@ -44,7 +45,7 @@ import (
errorsmod "cosmossdk.io/errors"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/client/flags"
"github.com/cosmos/cosmos-sdk/server"
sdkserver "github.com/cosmos/cosmos-sdk/server"
"github.com/cosmos/cosmos-sdk/server/api"
serverconfig "github.com/cosmos/cosmos-sdk/server/config"
servergrpc "github.com/cosmos/cosmos-sdk/server/grpc"
Expand Down Expand Up @@ -101,7 +102,7 @@ For profiling and benchmarking purposes, CPU profiling can be enabled via the '-
which accepts a path for the resulting pprof file.
`,
PreRunE: func(cmd *cobra.Command, _ []string) error {
serverCtx := server.GetServerContextFromCmd(cmd)
serverCtx := sdkserver.GetServerContextFromCmd(cmd)

// Bind flags to the Context's Viper so the app construction can set
// options accordingly.
Expand All @@ -110,11 +111,11 @@ which accepts a path for the resulting pprof file.
return err
}

_, err = server.GetPruningOptionsFromFlags(serverCtx.Viper)
_, err = sdkserver.GetPruningOptionsFromFlags(serverCtx.Viper)
return err
},
RunE: func(cmd *cobra.Command, _ []string) error {
serverCtx := server.GetServerContextFromCmd(cmd)
serverCtx := sdkserver.GetServerContextFromCmd(cmd)
clientCtx, err := client.GetClientQueryContext(cmd)
if err != nil {
return err
Expand Down Expand Up @@ -143,7 +144,7 @@ which accepts a path for the resulting pprof file.

// amino is needed here for backwards compatibility of REST routes
err = startInProcess(serverCtx, clientCtx, opts)
errCode, ok := err.(server.ErrorCode)
errCode, ok := err.(sdkserver.ErrorCode)
if !ok {
return err
}
Expand All @@ -158,18 +159,18 @@ which accepts a path for the resulting pprof file.
cmd.Flags().String(Address, "tcp://0.0.0.0:26658", "Listen address")
cmd.Flags().String(Transport, "socket", "Transport protocol: socket, grpc")
cmd.Flags().String(TraceStore, "", "Enable KVStore tracing to an output file")
cmd.Flags().String(server.FlagMinGasPrices, "", "Minimum gas prices to accept for transactions; Any fee in a tx must meet this minimum (e.g. 5000unibi)") //nolint:lll
cmd.Flags().IntSlice(server.FlagUnsafeSkipUpgrades, []int{}, "Skip a set of upgrade heights to continue the old binary")
cmd.Flags().Uint64(server.FlagHaltHeight, 0, "Block height at which to gracefully halt the chain and shutdown the node")
cmd.Flags().Uint64(server.FlagHaltTime, 0, "Minimum block time (in Unix seconds) at which to gracefully halt the chain and shutdown the node")
cmd.Flags().Bool(server.FlagInterBlockCache, true, "Enable inter-block caching")
cmd.Flags().String(sdkserver.FlagMinGasPrices, "", "Minimum gas prices to accept for transactions; Any fee in a tx must meet this minimum (e.g. 5000unibi)") //nolint:lll
cmd.Flags().IntSlice(sdkserver.FlagUnsafeSkipUpgrades, []int{}, "Skip a set of upgrade heights to continue the old binary")
cmd.Flags().Uint64(sdkserver.FlagHaltHeight, 0, "Block height at which to gracefully halt the chain and shutdown the node")
cmd.Flags().Uint64(sdkserver.FlagHaltTime, 0, "Minimum block time (in Unix seconds) at which to gracefully halt the chain and shutdown the node")
cmd.Flags().Bool(sdkserver.FlagInterBlockCache, true, "Enable inter-block caching")
cmd.Flags().String(CPUProfile, "", "Enable CPU profiling and write to the provided file")
cmd.Flags().Bool(server.FlagTrace, false, "Provide full stack traces for errors in ABCI Log")
cmd.Flags().String(server.FlagPruning, pruningtypes.PruningOptionDefault, "Pruning strategy (default|nothing|everything|custom)")
cmd.Flags().Uint64(server.FlagPruningKeepRecent, 0, "Number of recent heights to keep on disk (ignored if pruning is not 'custom')")
cmd.Flags().Uint64(server.FlagPruningInterval, 0, "Height interval at which pruned heights are removed from disk (ignored if pruning is not 'custom')") //nolint:lll
cmd.Flags().Uint(server.FlagInvCheckPeriod, 0, "Assert registered invariants every N blocks")
cmd.Flags().Uint64(server.FlagMinRetainBlocks, 0, "Minimum block height offset during ABCI commit to prune Tendermint blocks")
cmd.Flags().Bool(sdkserver.FlagTrace, false, "Provide full stack traces for errors in ABCI Log")
cmd.Flags().String(sdkserver.FlagPruning, pruningtypes.PruningOptionDefault, "Pruning strategy (default|nothing|everything|custom)")
cmd.Flags().Uint64(sdkserver.FlagPruningKeepRecent, 0, "Number of recent heights to keep on disk (ignored if pruning is not 'custom')")
cmd.Flags().Uint64(sdkserver.FlagPruningInterval, 0, "Height interval at which pruned heights are removed from disk (ignored if pruning is not 'custom')") //nolint:lll
cmd.Flags().Uint(sdkserver.FlagInvCheckPeriod, 0, "Assert registered invariants every N blocks")
cmd.Flags().Uint64(sdkserver.FlagMinRetainBlocks, 0, "Minimum block height offset during ABCI commit to prune Tendermint blocks")
cmd.Flags().String(AppDBBackend, "", "The type of database for application and snapshots databases")

cmd.Flags().Bool(GRPCOnly, false, "Start the node in gRPC query only mode without Tendermint process")
Expand Down Expand Up @@ -204,20 +205,20 @@ which accepts a path for the resulting pprof file.
cmd.Flags().String(TLSCertPath, "", "the cert.pem file path for the server TLS configuration")
cmd.Flags().String(TLSKeyPath, "", "the key.pem file path for the server TLS configuration")

cmd.Flags().Uint64(server.FlagStateSyncSnapshotInterval, 0, "State sync snapshot interval")
cmd.Flags().Uint32(server.FlagStateSyncSnapshotKeepRecent, 2, "State sync snapshot to keep")
cmd.Flags().Uint64(sdkserver.FlagStateSyncSnapshotInterval, 0, "State sync snapshot interval")
cmd.Flags().Uint32(sdkserver.FlagStateSyncSnapshotKeepRecent, 2, "State sync snapshot to keep")

// add support for all Tendermint-specific command line options
tcmd.AddNodeFlags(cmd)
return cmd
}

func startStandAlone(ctx *server.Context, opts StartOptions) error {
func startStandAlone(ctx *sdkserver.Context, opts StartOptions) error {
addr := ctx.Viper.GetString(Address)
transport := ctx.Viper.GetString(Transport)
home := ctx.Viper.GetString(flags.FlagHome)

db, err := openDB(home, server.GetAppDBBackend(ctx.Viper))
db, err := openDB(home, sdkserver.GetAppDBBackend(ctx.Viper))
if err != nil {
return err
}
Expand Down Expand Up @@ -271,16 +272,16 @@ func startStandAlone(ctx *server.Context, opts StartOptions) error {
}()

// Wait for SIGINT or SIGTERM signal
return server.WaitForQuitSignals()
return sdkserver.WaitForQuitSignals()
}

// legacyAminoCdc is used for the legacy REST API
func startInProcess(ctx *server.Context, clientCtx client.Context, opts StartOptions) (err error) {
func startInProcess(ctx *sdkserver.Context, clientCtx client.Context, opts StartOptions) (err error) {
cfg := ctx.Config
home := cfg.RootDir
logger := ctx.Logger

db, err := openDB(home, server.GetAppDBBackend(ctx.Viper))
db, err := openDB(home, sdkserver.GetAppDBBackend(ctx.Viper))
if err != nil {
logger.Error("failed to open DB", "error", err.Error())
return err
Expand Down Expand Up @@ -381,16 +382,14 @@ func startInProcess(ctx *server.Context, clientCtx client.Context, opts StartOpt
ethmetricsexp.Setup(conf.JSONRPC.MetricsAddress)
}

var idxer eth.EVMTxIndexer
var evmIdxer eth.EVMTxIndexer
if conf.JSONRPC.EnableIndexer {
idxDB, err := OpenIndexerDB(home, server.GetAppDBBackend(ctx.Viper))
idxer, err := OpenEVMIndexer(ctx, ctx.Logger, clientCtx, home)
if err != nil {
logger.Error("failed to open evm indexer DB", "error", err.Error())
return err
}

idxLogger := ctx.Logger.With("indexer", "evm")
idxer = indexer.NewKVIndexer(idxDB, idxLogger, clientCtx)
evmIdxer = idxer
}

if conf.API.Enable || conf.JSONRPC.Enable {
Expand Down Expand Up @@ -508,7 +507,7 @@ func startInProcess(ctx *server.Context, clientCtx client.Context, opts StartOpt

tmEndpoint := "/websocket"
tmRPCAddr := cfg.RPC.ListenAddress
httpSrv, httpSrvDone, err = StartJSONRPC(ctx, clientCtx, tmRPCAddr, tmEndpoint, &conf, idxer)
httpSrv, httpSrvDone, err = StartJSONRPC(ctx, clientCtx, tmRPCAddr, tmEndpoint, &conf, evmIdxer)
if err != nil {
return err
}
Expand All @@ -531,7 +530,7 @@ func startInProcess(ctx *server.Context, clientCtx client.Context, opts StartOpt
// we do not need to start Rosetta or handle any Tendermint related processes.
if gRPCOnly {
// wait for signal capture and gracefully return
return server.WaitForQuitSignals()
return sdkserver.WaitForQuitSignals()
}

var rosettaSrv crgserver.Server
Expand Down Expand Up @@ -584,7 +583,7 @@ func startInProcess(ctx *server.Context, clientCtx client.Context, opts StartOpt
}
}
// Wait for SIGINT or SIGTERM signal
return server.WaitForQuitSignals()
return sdkserver.WaitForQuitSignals()
}

// OpenIndexerDB opens the custom eth indexer db, using the same db backend as the main app
Expand All @@ -593,6 +592,22 @@ func OpenIndexerDB(rootDir string, backendType dbm.BackendType) (dbm.DB, error)
return dbm.NewDB("evmindexer", backendType, dataDir)
}

func OpenEVMIndexer(
ctx *sdkserver.Context,
logger log.Logger,
clientCtx client.Context,
homeDir string,
) (eth.EVMTxIndexer, error) {
idxDB, err := OpenIndexerDB(homeDir, sdkserver.GetAppDBBackend(ctx.Viper))
if err != nil {
logger.Error("failed to open evm indexer DB", "error", err.Error())
return nil, err
}

idxLogger := ctx.Logger.With("indexer", "evm")
return indexer.NewKVIndexer(idxDB, idxLogger, clientCtx), nil
}

func openTraceWriter(traceWriterFile string) (w io.Writer, err error) {
if traceWriterFile == "" {
return
Expand All @@ -614,15 +629,15 @@ func startTelemetry(cfg config.Config) (*telemetry.Metrics, error) {
}

// WaitForQuitSignals waits for SIGINT and SIGTERM and returns.
func WaitForQuitSignals() server.ErrorCode {
func WaitForQuitSignals() sdkserver.ErrorCode {
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
sig := <-sigs
return server.ErrorCode{Code: int(sig.(syscall.Signal)) + 128}
return sdkserver.ErrorCode{Code: int(sig.(syscall.Signal)) + 128}
}

// wrapCPUProfile runs callback in a goroutine, then wait for quit signals.
func wrapCPUProfile(ctx *server.Context, callback func() error) error {
func wrapCPUProfile(ctx *sdkserver.Context, callback func() error) error {
if cpuProfile := ctx.Viper.GetString(CPUProfile); cpuProfile != "" {
f, err := os.Create(cpuProfile)
if err != nil {
Expand Down
Binary file modified e2e/evm/bun.lockb
Binary file not shown.
Loading

0 comments on commit 9276333

Please sign in to comment.