From 27725c46af78e27f48573e7ffc13f0e934a23527 Mon Sep 17 00:00:00 2001 From: Marius van der Wijden Date: Fri, 25 Apr 2025 14:50:52 +0200 Subject: [PATCH] core/txpool/legacypool: refactor truncatePending --- core/txpool/legacypool/legacypool.go | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/core/txpool/legacypool/legacypool.go b/core/txpool/legacypool/legacypool.go index 7bf360ff65..a337c42e25 100644 --- a/core/txpool/legacypool/legacypool.go +++ b/core/txpool/legacypool/legacypool.go @@ -1494,22 +1494,22 @@ func (pool *LegacyPool) promoteExecutables(accounts []common.Address) []*types.T // equal number for all for accounts with many pending transactions. func (pool *LegacyPool) truncatePending() { pending := uint64(0) - for _, list := range pool.pending { - pending += uint64(list.Len()) + + // Assemble a spam order to penalize large transactors first + spammers := prque.New[uint64, common.Address](nil) + for addr, list := range pool.pending { + // Only evict transactions from high rollers + length := uint64(list.Len()) + pending += length + if length > pool.config.AccountSlots { + spammers.Push(addr, uint64(length)) + } } if pending <= pool.config.GlobalSlots { return } - pendingBeforeCap := pending - // Assemble a spam order to penalize large transactors first - spammers := prque.New[int64, common.Address](nil) - for addr, list := range pool.pending { - // Only evict transactions from high rollers - if uint64(list.Len()) > pool.config.AccountSlots { - spammers.Push(addr, int64(list.Len())) - } - } + // Gradually drop transactions from offenders offenders := []common.Address{} for pending > pool.config.GlobalSlots && !spammers.Empty() {