forked from cerc-io/plugeth
core/txpool/legacypool: respect nolocals-setting (#28435)
This change adds a check to ensure that transactions added to the legacy pool are not treated as 'locals' if the global locals-management has been disabled. This change makes the pool enforce the --txpool.pricelimit setting.
This commit is contained in:
parent
a73748258f
commit
14a1e96b68
@ -959,6 +959,9 @@ func (pool *LegacyPool) addRemoteSync(tx *types.Transaction) error {
|
|||||||
// If sync is set, the method will block until all internal maintenance related
|
// If sync is set, the method will block until all internal maintenance related
|
||||||
// to the add is finished. Only use this during tests for determinism!
|
// to the add is finished. Only use this during tests for determinism!
|
||||||
func (pool *LegacyPool) Add(txs []*types.Transaction, local, sync bool) []error {
|
func (pool *LegacyPool) Add(txs []*types.Transaction, local, sync bool) []error {
|
||||||
|
// Do not treat as local if local transactions have been disabled
|
||||||
|
local = local && !pool.config.NoLocals
|
||||||
|
|
||||||
// Filter out known ones without obtaining the pool lock or recovering signatures
|
// Filter out known ones without obtaining the pool lock or recovering signatures
|
||||||
var (
|
var (
|
||||||
errs = make([]error, len(txs))
|
errs = make([]error, len(txs))
|
||||||
|
@ -1492,6 +1492,50 @@ func TestRepricing(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestMinGasPriceEnforced(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
// Create the pool to test the pricing enforcement with
|
||||||
|
statedb, _ := state.New(types.EmptyRootHash, state.NewDatabase(rawdb.NewMemoryDatabase()), nil)
|
||||||
|
blockchain := newTestBlockChain(eip1559Config, 10000000, statedb, new(event.Feed))
|
||||||
|
|
||||||
|
txPoolConfig := DefaultConfig
|
||||||
|
txPoolConfig.NoLocals = true
|
||||||
|
pool := New(txPoolConfig, blockchain)
|
||||||
|
pool.Init(new(big.Int).SetUint64(txPoolConfig.PriceLimit), blockchain.CurrentBlock(), makeAddressReserver())
|
||||||
|
defer pool.Close()
|
||||||
|
|
||||||
|
key, _ := crypto.GenerateKey()
|
||||||
|
testAddBalance(pool, crypto.PubkeyToAddress(key.PublicKey), big.NewInt(1000000))
|
||||||
|
|
||||||
|
tx := pricedTransaction(0, 100000, big.NewInt(2), key)
|
||||||
|
pool.SetGasTip(big.NewInt(tx.GasPrice().Int64() + 1))
|
||||||
|
|
||||||
|
if err := pool.addLocal(tx); !errors.Is(err, txpool.ErrUnderpriced) {
|
||||||
|
t.Fatalf("Min tip not enforced")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := pool.Add([]*types.Transaction{tx}, true, false)[0]; !errors.Is(err, txpool.ErrUnderpriced) {
|
||||||
|
t.Fatalf("Min tip not enforced")
|
||||||
|
}
|
||||||
|
|
||||||
|
tx = dynamicFeeTx(0, 100000, big.NewInt(3), big.NewInt(2), key)
|
||||||
|
pool.SetGasTip(big.NewInt(tx.GasTipCap().Int64() + 1))
|
||||||
|
|
||||||
|
if err := pool.addLocal(tx); !errors.Is(err, txpool.ErrUnderpriced) {
|
||||||
|
t.Fatalf("Min tip not enforced")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := pool.Add([]*types.Transaction{tx}, true, false)[0]; !errors.Is(err, txpool.ErrUnderpriced) {
|
||||||
|
t.Fatalf("Min tip not enforced")
|
||||||
|
}
|
||||||
|
// Make sure the tx is accepted if locals are enabled
|
||||||
|
pool.config.NoLocals = false
|
||||||
|
if err := pool.Add([]*types.Transaction{tx}, true, false)[0]; err != nil {
|
||||||
|
t.Fatalf("Min tip enforced with locals enabled, error: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Tests that setting the transaction pool gas price to a higher value correctly
|
// Tests that setting the transaction pool gas price to a higher value correctly
|
||||||
// discards everything cheaper (legacy & dynamic fee) than that and moves any
|
// discards everything cheaper (legacy & dynamic fee) than that and moves any
|
||||||
// gapped transactions back from the pending pool to the queue.
|
// gapped transactions back from the pending pool to the queue.
|
||||||
|
Loading…
Reference in New Issue
Block a user