diff --git a/core/tx_list.go b/core/tx_list.go index e763777e33..fea4434b9b 100644 --- a/core/tx_list.go +++ b/core/tx_list.go @@ -351,9 +351,8 @@ func (m *txSortedMap) lastElement() *types.Transaction { m.cacheMu.Unlock() - cache = make(types.Transactions, 0, len(m.items)) - m.m.RLock() + cache = make(types.Transactions, 0, len(m.items)) for _, tx := range m.items { cache = append(cache, tx) @@ -373,6 +372,11 @@ func (m *txSortedMap) lastElement() *types.Transaction { hitCacheCounter.Inc(1) } + ln := len(cache) + if ln == 0 { + return nil + } + return cache[len(cache)-1] } diff --git a/core/tx_pool.go b/core/tx_pool.go index b4aa7111ca..b12d4f31ad 100644 --- a/core/tx_pool.go +++ b/core/tx_pool.go @@ -1544,6 +1544,7 @@ func (pool *TxPool) runReorg(ctx context.Context, done chan struct{}, reset *txp // remove any transaction that has been included in the block or was invalidated // because of another transaction (e.g. higher gas price). + //nolint:nestif if reset != nil { tracing.ElapsedTime(ctx, span, "new block", func(_ context.Context, innerSpan trace.Span) { @@ -1578,7 +1579,9 @@ func (pool *TxPool) runReorg(ctx context.Context, done chan struct{}, reset *txp tracing.ElapsedTime(ctx, innerSpan, "09 fill nonces", func(_ context.Context, innerSpan trace.Span) { for addr, list := range pool.pending { highestPending = list.LastElement() - nonces[addr] = highestPending.Nonce() + 1 + if highestPending != nil { + nonces[addr] = highestPending.Nonce() + 1 + } } })