remove suggestion gas price code from abci_util.go

This commit is contained in:
Solovyov1796 2025-02-12 00:12:17 +08:00
parent a0426c63f7
commit f36ebfb6ae
6 changed files with 16 additions and 152 deletions

View File

@ -2,10 +2,7 @@ package app
import ( import (
"fmt" "fmt"
"math/big"
"sort"
"github.com/0glabs/0g-chain/chaincfg"
"github.com/cockroachdb/errors" "github.com/cockroachdb/errors"
abci "github.com/cometbft/cometbft/abci/types" abci "github.com/cometbft/cometbft/abci/types"
gethtypes "github.com/ethereum/go-ethereum/core/types" gethtypes "github.com/ethereum/go-ethereum/core/types"
@ -16,8 +13,6 @@ import (
"github.com/cosmos/cosmos-sdk/x/auth/signing" "github.com/cosmos/cosmos-sdk/x/auth/signing"
) )
const gasPriceSuggestionBlockNum int64 = 5
type ( type (
// GasTx defines the contract that a transaction with a gas limit must implement. // GasTx defines the contract that a transaction with a gas limit must implement.
GasTx interface { GasTx interface {
@ -38,26 +33,14 @@ type (
mempool mempool.Mempool mempool mempool.Mempool
txVerifier ProposalTxVerifier txVerifier ProposalTxVerifier
txSelector TxSelector txSelector TxSelector
feemarketKeeper FeeMarketKeeper
}
FeeMarketKeeper interface {
SetSuggestionGasPrice(ctx sdk.Context, gas *big.Int)
}
txnInfo struct {
gasPrice *big.Int
gasLimit uint64
nonce uint64
sender string
} }
) )
func NewDefaultProposalHandler(mp mempool.Mempool, txVerifier ProposalTxVerifier, feemarketKeeper FeeMarketKeeper) *DefaultProposalHandler { func NewDefaultProposalHandler(mp mempool.Mempool, txVerifier ProposalTxVerifier) *DefaultProposalHandler {
return &DefaultProposalHandler{ return &DefaultProposalHandler{
mempool: mp, mempool: mp,
txVerifier: txVerifier, txVerifier: txVerifier,
txSelector: NewDefaultTxSelector(), txSelector: NewDefaultTxSelector(),
feemarketKeeper: feemarketKeeper,
} }
} }
@ -114,8 +97,6 @@ func (h *DefaultProposalHandler) PrepareProposalHandler() sdk.PrepareProposalHan
return abci.ResponsePrepareProposal{Txs: h.txSelector.SelectedTxs()} return abci.ResponsePrepareProposal{Txs: h.txSelector.SelectedTxs()}
} }
txnInfoMap := make(map[string][]*txnInfo, h.mempool.CountTx())
iterator := h.mempool.Select(ctx, req.Txs) iterator := h.mempool.Select(ctx, req.Txs)
selectedTxsSignersSeqs := make(map[string]uint64) selectedTxsSignersSeqs := make(map[string]uint64)
var selectedTxsNums int var selectedTxsNums int
@ -154,42 +135,10 @@ func (h *DefaultProposalHandler) PrepareProposalHandler() sdk.PrepareProposalHan
txSignersSeqs[signer] = nonce 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 { } 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 { for _, sig := range sigs {
signer := sdk.AccAddress(sig.PubKey.Address()).String() signer := sdk.AccAddress(sig.PubKey.Address()).String()
seq, ok := selectedTxsSignersSeqs[signer] seq, ok := selectedTxsSignersSeqs[signer]
@ -251,64 +200,6 @@ func (h *DefaultProposalHandler) PrepareProposalHandler() sdk.PrepareProposalHan
iterator = iterator.Next() 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()} 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 // check if we've reached capacity; if so, we cannot select any more transactions
return ts.totalTxBytes >= maxTxBytes || (maxBlockGas > 0 && (ts.totalTxGas >= maxBlockGas)) 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
}

View File

@ -62,7 +62,6 @@ func TestAppAnteHandler_AuthorizedMempool(t *testing.T) {
encodingConfig, encodingConfig,
baseapp.SetChainID(app.TestChainId), baseapp.SetChainID(app.TestChainId),
), ),
nil,
), ),
} }

View File

@ -267,7 +267,7 @@ type App struct {
packetForwardKeeper *packetforwardkeeper.Keeper packetForwardKeeper *packetforwardkeeper.Keeper
evmKeeper *evmkeeper.Keeper evmKeeper *evmkeeper.Keeper
evmutilKeeper evmutilkeeper.Keeper evmutilKeeper evmutilkeeper.Keeper
feeMarketKeeper *feemarketkeeper.Keeper feeMarketKeeper feemarketkeeper.Keeper
upgradeKeeper upgradekeeper.Keeper upgradeKeeper upgradekeeper.Keeper
evidenceKeeper evidencekeeper.Keeper evidenceKeeper evidencekeeper.Keeper
transferKeeper ibctransferkeeper.Keeper transferKeeper ibctransferkeeper.Keeper
@ -313,7 +313,6 @@ func NewApp(
encodingConfig chainparams.EncodingConfig, encodingConfig chainparams.EncodingConfig,
options Options, options Options,
bApp *baseapp.BaseApp, bApp *baseapp.BaseApp,
setAbciProposalHandler func(feemarketKeeper FeeMarketKeeper) sdk.PrepareProposalHandler,
) *App { ) *App {
appCodec := encodingConfig.Marshaler appCodec := encodingConfig.Marshaler
legacyAmino := encodingConfig.Amino legacyAmino := encodingConfig.Amino
@ -490,6 +489,7 @@ func NewApp(
keys[feemarkettypes.StoreKey], keys[feemarkettypes.StoreKey],
tkeys[feemarkettypes.TransientKey], tkeys[feemarkettypes.TransientKey],
feemarketSubspace, feemarketSubspace,
bApp.Mempool(),
) )
app.evmutilKeeper = evmutilkeeper.NewKeeper( app.evmutilKeeper = evmutilkeeper.NewKeeper(
@ -902,10 +902,6 @@ func NewApp(
app.SetBeginBlocker(app.BeginBlocker) app.SetBeginBlocker(app.BeginBlocker)
app.SetEndBlocker(app.EndBlocker) app.SetEndBlocker(app.EndBlocker)
if setAbciProposalHandler != nil {
abciProposalHandler := setAbciProposalHandler(app.feeMarketKeeper)
bApp.SetPrepareProposal(abciProposalHandler)
}
// load store // load store
if !options.SkipLoadLatest { if !options.SkipLoadLatest {
if err := app.LoadLatestVersion(); err != nil { if err := app.LoadLatestVersion(); err != nil {

View File

@ -38,7 +38,6 @@ func TestNewApp(t *testing.T) {
MakeEncodingConfig(), MakeEncodingConfig(),
baseapp.SetChainID(TestChainId), baseapp.SetChainID(TestChainId),
), ),
nil,
) )
} }
@ -56,7 +55,6 @@ func TestExport(t *testing.T) {
MakeEncodingConfig(), MakeEncodingConfig(),
baseapp.SetChainID(TestChainId), baseapp.SetChainID(TestChainId),
), ),
nil,
) )
genesisState := GenesisStateWithSingleValidator(&TestApp{App: *app}, NewDefaultGenesisState()) genesisState := GenesisStateWithSingleValidator(&TestApp{App: *app}, NewDefaultGenesisState())

View File

@ -96,7 +96,7 @@ func NewTestAppFromSealed() TestApp {
bApp := NewBaseApp(log.NewNopLogger(), db, encCfg, baseapp.SetChainID(TestChainId)) bApp := NewBaseApp(log.NewNopLogger(), db, encCfg, baseapp.SetChainID(TestChainId))
app := NewApp( app := NewApp(
chaincfg.DefaultNodeHome, nil, chaincfg.DefaultNodeHome, nil,
encCfg, DefaultOptions, bApp, nil, encCfg, DefaultOptions, bApp,
) )
return TestApp{App: *app} 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) GetCommitteeKeeper() committeekeeper.Keeper { return tApp.committeeKeeper }
func (tApp TestApp) GetEvmutilKeeper() evmutilkeeper.Keeper { return tApp.evmutilKeeper } func (tApp TestApp) GetEvmutilKeeper() evmutilkeeper.Keeper { return tApp.evmutilKeeper }
func (tApp TestApp) GetEvmKeeper() *evmkeeper.Keeper { return tApp.evmKeeper } 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) GetDASignersKeeper() dasignerskeeper.Keeper { return tApp.dasignersKeeper }
func (tApp TestApp) GetPrecisebankKeeper() precisebankkeeper.Keeper { return tApp.precisebankKeeper } func (tApp TestApp) GetPrecisebankKeeper() precisebankkeeper.Keeper { return tApp.precisebankKeeper }
func (tApp TestApp) GetWrappedA0GIBaseKeeper() wrappeda0gibasekeeper.Keeper { func (tApp TestApp) GetWrappedA0GIBaseKeeper() wrappeda0gibasekeeper.Keeper {

View File

@ -125,7 +125,10 @@ func (ac appCreator) newApp(
baseapp.SetChainID(chainID), baseapp.SetChainID(chainID),
baseapp.SetMempool(mempool), baseapp.SetMempool(mempool),
) )
bApp.SetTxEncoder(ac.encodingConfig.TxConfig.TxEncoder()) bApp.SetTxEncoder(ac.encodingConfig.TxConfig.TxEncoder())
abciProposalHandler := app.NewDefaultProposalHandler(mempool, bApp)
bApp.SetPrepareProposal(abciProposalHandler.PrepareProposalHandler())
newApp := app.NewApp( newApp := app.NewApp(
homeDir, traceStore, ac.encodingConfig, homeDir, traceStore, ac.encodingConfig,
@ -140,10 +143,6 @@ func (ac appCreator) newApp(
EVMMaxGasWanted: cast.ToUint64(appOpts.Get(ethermintflags.EVMMaxTxGasWanted)), EVMMaxGasWanted: cast.ToUint64(appOpts.Get(ethermintflags.EVMMaxTxGasWanted)),
}, },
bApp, bApp,
func(k app.FeeMarketKeeper) sdk.PrepareProposalHandler {
abciProposalHandler := app.NewDefaultProposalHandler(mempool, bApp, k)
return abciProposalHandler.PrepareProposalHandler()
},
) )
return newApp return newApp
@ -172,14 +171,14 @@ func (ac appCreator) appExport(
var tempApp *app.App var tempApp *app.App
if height != -1 { if height != -1 {
bApp := app.NewBaseApp(logger, db, ac.encodingConfig) 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 { if err := tempApp.LoadHeight(height); err != nil {
return servertypes.ExportedApp{}, err return servertypes.ExportedApp{}, err
} }
} else { } else {
bApp := app.NewBaseApp(logger, db, ac.encodingConfig) 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) return tempApp.ExportAppStateAndValidators(forZeroHeight, jailAllowedAddrs, modulesToExport)
} }