From f36ebfb6aec60fbbc6b20e05779dfebacdee2532 Mon Sep 17 00:00:00 2001 From: Solovyov1796 Date: Wed, 12 Feb 2025 00:12:17 +0800 Subject: [PATCH] remove suggestion gas price code from abci_util.go --- app/abci_utils.go | 142 +++--------------------------------------- app/ante/ante_test.go | 1 - app/app.go | 8 +-- app/app_test.go | 2 - app/test_common.go | 4 +- cmd/0gchaind/app.go | 11 ++-- 6 files changed, 16 insertions(+), 152 deletions(-) diff --git a/app/abci_utils.go b/app/abci_utils.go index dcc299cc..67142a7d 100644 --- a/app/abci_utils.go +++ b/app/abci_utils.go @@ -2,10 +2,7 @@ package app import ( "fmt" - "math/big" - "sort" - "github.com/0glabs/0g-chain/chaincfg" "github.com/cockroachdb/errors" abci "github.com/cometbft/cometbft/abci/types" gethtypes "github.com/ethereum/go-ethereum/core/types" @@ -16,8 +13,6 @@ import ( "github.com/cosmos/cosmos-sdk/x/auth/signing" ) -const gasPriceSuggestionBlockNum int64 = 5 - type ( // GasTx defines the contract that a transaction with a gas limit must implement. GasTx interface { @@ -35,29 +30,17 @@ type ( // DefaultProposalHandler defines the default ABCI PrepareProposal and // ProcessProposal handlers. DefaultProposalHandler struct { - mempool mempool.Mempool - txVerifier ProposalTxVerifier - txSelector TxSelector - feemarketKeeper FeeMarketKeeper - } - FeeMarketKeeper interface { - SetSuggestionGasPrice(ctx sdk.Context, gas *big.Int) - } - - txnInfo struct { - gasPrice *big.Int - gasLimit uint64 - nonce uint64 - sender string + mempool mempool.Mempool + txVerifier ProposalTxVerifier + txSelector TxSelector } ) -func NewDefaultProposalHandler(mp mempool.Mempool, txVerifier ProposalTxVerifier, feemarketKeeper FeeMarketKeeper) *DefaultProposalHandler { +func NewDefaultProposalHandler(mp mempool.Mempool, txVerifier ProposalTxVerifier) *DefaultProposalHandler { return &DefaultProposalHandler{ - mempool: mp, - txVerifier: txVerifier, - txSelector: NewDefaultTxSelector(), - feemarketKeeper: feemarketKeeper, + mempool: mp, + txVerifier: txVerifier, + txSelector: NewDefaultTxSelector(), } } @@ -114,8 +97,6 @@ func (h *DefaultProposalHandler) PrepareProposalHandler() sdk.PrepareProposalHan return abci.ResponsePrepareProposal{Txs: h.txSelector.SelectedTxs()} } - txnInfoMap := make(map[string][]*txnInfo, h.mempool.CountTx()) - iterator := h.mempool.Select(ctx, req.Txs) selectedTxsSignersSeqs := make(map[string]uint64) var selectedTxsNums int @@ -154,42 +135,10 @@ func (h *DefaultProposalHandler) PrepareProposalHandler() sdk.PrepareProposalHan txSignersSeqs[signer] = nonce } } - - if _, exists := txnInfoMap[signer]; !exists { - txnInfoMap[signer] = make([]*txnInfo, 0, 128) - } - - txnInfoMap[signer] = append(txnInfoMap[signer], &txnInfo{ - gasPrice: ethTx.GasPrice(), - gasLimit: ethTx.Gas(), - nonce: nonce, - sender: signer, - }) } } } } else { - // ignore multisig case now - fee := memTx.(sdk.Fee) - if len(sigs) == 1 { - signer := sdk.AccAddress(sigs[0].PubKey.Address()).String() - - if _, exists := txnInfoMap[signer]; !exists { - txnInfoMap[signer] = make([]*txnInfo, 0, 16) - } - - evmGasPrice, err := utilCosmosDemonGasPriceToEvmDemonGasPrice(fee.GetAmount()) - - if err == nil { - txnInfoMap[signer] = append(txnInfoMap[signer], &txnInfo{ - gasPrice: evmGasPrice, - gasLimit: utilCosmosDemonGasLimitToEvmDemonGasLimit(fee.GetGas()), - nonce: sigs[0].Sequence, - sender: signer, - }) - } - } - for _, sig := range sigs { signer := sdk.AccAddress(sig.PubKey.Address()).String() seq, ok := selectedTxsSignersSeqs[signer] @@ -251,64 +200,6 @@ func (h *DefaultProposalHandler) PrepareProposalHandler() sdk.PrepareProposalHan iterator = iterator.Next() } - if len(txnInfoMap) == 0 { - h.feemarketKeeper.SetSuggestionGasPrice(ctx, big.NewInt(0)) - } else { - senderCnt := 0 - txnCnt := 0 - for sender := range txnInfoMap { - sort.Slice(txnInfoMap[sender], func(i, j int) bool { - return txnInfoMap[sender][i].nonce < txnInfoMap[sender][j].nonce - }) - txnCnt += len(txnInfoMap[sender]) - senderCnt++ - } - - remaing := gasPriceSuggestionBlockNum * int64(maxBlockGas) - var lastProcessedTx *txnInfo - - for remaing > 0 && len(txnInfoMap) > 0 { - // Find the highest gas price among the first transaction of each account - var highestGasPrice *big.Int - var selectedSender string - - // Compare first transaction (lowest nonce) from each account - for sender, txns := range txnInfoMap { - if len(txns) == 0 { - delete(txnInfoMap, sender) - continue - } - - // First tx has lowest nonce due to earlier sorting - if highestGasPrice == nil || txns[0].gasPrice.Cmp(highestGasPrice) > 0 { - highestGasPrice = txns[0].gasPrice - selectedSender = sender - } - } - - if selectedSender == "" { - break - } - - // Process the selected transaction - selectedTx := txnInfoMap[selectedSender][0] - remaing -= int64(selectedTx.gasLimit) - lastProcessedTx = selectedTx - - // Remove processed transaction - txnInfoMap[selectedSender] = txnInfoMap[selectedSender][1:] - if len(txnInfoMap[selectedSender]) == 0 { - delete(txnInfoMap, selectedSender) - } - } - - if lastProcessedTx != nil && remaing <= 0 { - h.feemarketKeeper.SetSuggestionGasPrice(ctx, lastProcessedTx.gasPrice) - } else { - h.feemarketKeeper.SetSuggestionGasPrice(ctx, big.NewInt(0)) - } - } - return abci.ResponsePrepareProposal{Txs: h.txSelector.SelectedTxs()} } } @@ -447,22 +338,3 @@ func (ts *defaultTxSelector) SelectTxForProposal(maxTxBytes, maxBlockGas uint64, // check if we've reached capacity; if so, we cannot select any more transactions return ts.totalTxBytes >= maxTxBytes || (maxBlockGas > 0 && (ts.totalTxGas >= maxBlockGas)) } - -func utilCosmosDemonGasPriceToEvmDemonGasPrice(gasGroup sdk.Coins) (*big.Int, error) { - gasPrice := big.NewInt(0) - for _, coin := range gasGroup { - if coin.Denom == chaincfg.GasDenom { - thisGasPrice := big.NewInt(0).SetUint64(coin.Amount.Uint64()) - thisGasPrice = thisGasPrice.Mul(thisGasPrice, big.NewInt(0).SetInt64(chaincfg.GasDenomConversionMultiplier)) - gasPrice = gasPrice.Add(gasPrice, thisGasPrice) - } else { - return big.NewInt(0), fmt.Errorf("invalid denom: %s", coin.Denom) - } - } - - return gasPrice, nil -} - -func utilCosmosDemonGasLimitToEvmDemonGasLimit(gasLimit uint64) uint64 { - return gasLimit * chaincfg.GasDenomConversionMultiplier -} diff --git a/app/ante/ante_test.go b/app/ante/ante_test.go index eb5aad35..35853919 100644 --- a/app/ante/ante_test.go +++ b/app/ante/ante_test.go @@ -62,7 +62,6 @@ func TestAppAnteHandler_AuthorizedMempool(t *testing.T) { encodingConfig, baseapp.SetChainID(app.TestChainId), ), - nil, ), } diff --git a/app/app.go b/app/app.go index 49c71347..9bc9b066 100644 --- a/app/app.go +++ b/app/app.go @@ -267,7 +267,7 @@ type App struct { packetForwardKeeper *packetforwardkeeper.Keeper evmKeeper *evmkeeper.Keeper evmutilKeeper evmutilkeeper.Keeper - feeMarketKeeper *feemarketkeeper.Keeper + feeMarketKeeper feemarketkeeper.Keeper upgradeKeeper upgradekeeper.Keeper evidenceKeeper evidencekeeper.Keeper transferKeeper ibctransferkeeper.Keeper @@ -313,7 +313,6 @@ func NewApp( encodingConfig chainparams.EncodingConfig, options Options, bApp *baseapp.BaseApp, - setAbciProposalHandler func(feemarketKeeper FeeMarketKeeper) sdk.PrepareProposalHandler, ) *App { appCodec := encodingConfig.Marshaler legacyAmino := encodingConfig.Amino @@ -490,6 +489,7 @@ func NewApp( keys[feemarkettypes.StoreKey], tkeys[feemarkettypes.TransientKey], feemarketSubspace, + bApp.Mempool(), ) app.evmutilKeeper = evmutilkeeper.NewKeeper( @@ -902,10 +902,6 @@ func NewApp( app.SetBeginBlocker(app.BeginBlocker) app.SetEndBlocker(app.EndBlocker) - if setAbciProposalHandler != nil { - abciProposalHandler := setAbciProposalHandler(app.feeMarketKeeper) - bApp.SetPrepareProposal(abciProposalHandler) - } // load store if !options.SkipLoadLatest { if err := app.LoadLatestVersion(); err != nil { diff --git a/app/app_test.go b/app/app_test.go index becb9464..3f95d81f 100644 --- a/app/app_test.go +++ b/app/app_test.go @@ -38,7 +38,6 @@ func TestNewApp(t *testing.T) { MakeEncodingConfig(), baseapp.SetChainID(TestChainId), ), - nil, ) } @@ -56,7 +55,6 @@ func TestExport(t *testing.T) { MakeEncodingConfig(), baseapp.SetChainID(TestChainId), ), - nil, ) genesisState := GenesisStateWithSingleValidator(&TestApp{App: *app}, NewDefaultGenesisState()) diff --git a/app/test_common.go b/app/test_common.go index 6c469e4a..52b527e0 100644 --- a/app/test_common.go +++ b/app/test_common.go @@ -96,7 +96,7 @@ func NewTestAppFromSealed() TestApp { bApp := NewBaseApp(log.NewNopLogger(), db, encCfg, baseapp.SetChainID(TestChainId)) app := NewApp( chaincfg.DefaultNodeHome, nil, - encCfg, DefaultOptions, bApp, nil, + encCfg, DefaultOptions, bApp, ) return TestApp{App: *app} } @@ -117,7 +117,7 @@ func (tApp TestApp) GetPriceFeedKeeper() pricefeedkeeper.Keeper { return tAp func (tApp TestApp) GetCommitteeKeeper() committeekeeper.Keeper { return tApp.committeeKeeper } func (tApp TestApp) GetEvmutilKeeper() evmutilkeeper.Keeper { return tApp.evmutilKeeper } func (tApp TestApp) GetEvmKeeper() *evmkeeper.Keeper { return tApp.evmKeeper } -func (tApp TestApp) GetFeeMarketKeeper() *feemarketkeeper.Keeper { return tApp.feeMarketKeeper } +func (tApp TestApp) GetFeeMarketKeeper() feemarketkeeper.Keeper { return tApp.feeMarketKeeper } func (tApp TestApp) GetDASignersKeeper() dasignerskeeper.Keeper { return tApp.dasignersKeeper } func (tApp TestApp) GetPrecisebankKeeper() precisebankkeeper.Keeper { return tApp.precisebankKeeper } func (tApp TestApp) GetWrappedA0GIBaseKeeper() wrappeda0gibasekeeper.Keeper { diff --git a/cmd/0gchaind/app.go b/cmd/0gchaind/app.go index d8d3d10b..5c8eaa99 100644 --- a/cmd/0gchaind/app.go +++ b/cmd/0gchaind/app.go @@ -125,7 +125,10 @@ func (ac appCreator) newApp( baseapp.SetChainID(chainID), baseapp.SetMempool(mempool), ) + bApp.SetTxEncoder(ac.encodingConfig.TxConfig.TxEncoder()) + abciProposalHandler := app.NewDefaultProposalHandler(mempool, bApp) + bApp.SetPrepareProposal(abciProposalHandler.PrepareProposalHandler()) newApp := app.NewApp( homeDir, traceStore, ac.encodingConfig, @@ -140,10 +143,6 @@ func (ac appCreator) newApp( EVMMaxGasWanted: cast.ToUint64(appOpts.Get(ethermintflags.EVMMaxTxGasWanted)), }, bApp, - func(k app.FeeMarketKeeper) sdk.PrepareProposalHandler { - abciProposalHandler := app.NewDefaultProposalHandler(mempool, bApp, k) - return abciProposalHandler.PrepareProposalHandler() - }, ) return newApp @@ -172,14 +171,14 @@ func (ac appCreator) appExport( var tempApp *app.App if height != -1 { bApp := app.NewBaseApp(logger, db, ac.encodingConfig) - tempApp = app.NewApp(homePath, traceStore, ac.encodingConfig, options, bApp, nil) + tempApp = app.NewApp(homePath, traceStore, ac.encodingConfig, options, bApp) if err := tempApp.LoadHeight(height); err != nil { return servertypes.ExportedApp{}, err } } else { bApp := app.NewBaseApp(logger, db, ac.encodingConfig) - tempApp = app.NewApp(homePath, traceStore, ac.encodingConfig, options, bApp, nil) + tempApp = app.NewApp(homePath, traceStore, ac.encodingConfig, options, bApp) } return tempApp.ExportAppStateAndValidators(forZeroHeight, jailAllowedAddrs, modulesToExport) }