Description
After restarting a Bor node, the eth_subscribe("newPendingTransactions") WebSocket subscription returns near-zero pending transactions instead of the expected volume. The issue does not recover over time — it persists for the lifetime of the restarted process.
Steps to Reproduce
- Start a Bor node on Polygon mainnet and let it sync fully
- Verify WS pending tx subscription works (should receive ~100+ tx/s)
- Restart the Bor process (same data directory, same config)
- Wait for the node to sync and establish peer connections
- Test WS pending tx subscription again
Expected Behavior
After restart and peer connection, pending tx subscription should return transactions at the same rate as before restart (~100-130 tx/s on mainnet).
Actual Behavior
After restart, the subscription returns 0-2 tx/s — sometimes zero transactions for minutes at a time. The node shows:
- Synced (not in syncing state)
- Full peer count (33+ peers)
- Other RPC methods work normally (eth_blockNumber, eth_call, etc.)
- Only
eth_subscribe("newPendingTransactions") is affected
Reproduction Data
Tested by subscribing to pending txs for 15-30 second windows:
| Condition |
tx/s received |
| Before restart |
~130 tx/s |
| After restart (1 min) |
0-1 tx/s |
| After restart (5 min) |
0-1 tx/s |
| After restart (10 min) |
0-2 tx/s |
| After restart (50 min) |
0-1 tx/s |
| Non-restarted node |
~130 tx/s (unchanged) |
Versions Tested
- Bor v2.6.3 — same issue
- Bor v2.7.0 (commit 21a6320) — same issue
Environment
- Polygon mainnet
- Multiple deployment environments, same behavior in all
- Tested across different cloud regions
Suspected Root Cause
The SubscribeFullPendingTransactions / SubscribePendingTransactions mechanism in go-ethereum/Bor appears to not properly reinitialize the pending tx event feed after process restart. The node can receive pending txs from peers (they appear in the txpool) but the internal Go channel/event subscription that delivers them to WS subscribers is broken.
Impact
Any application relying on real-time pending transaction notifications via WebSocket will be affected after Bor node restarts, including:
- MEV/searcher infrastructure
- DEX aggregators monitoring mempool
- Transaction monitoring and analytics services
Description
After restarting a Bor node, the
eth_subscribe("newPendingTransactions")WebSocket subscription returns near-zero pending transactions instead of the expected volume. The issue does not recover over time — it persists for the lifetime of the restarted process.Steps to Reproduce
Expected Behavior
After restart and peer connection, pending tx subscription should return transactions at the same rate as before restart (~100-130 tx/s on mainnet).
Actual Behavior
After restart, the subscription returns 0-2 tx/s — sometimes zero transactions for minutes at a time. The node shows:
eth_subscribe("newPendingTransactions")is affectedReproduction Data
Tested by subscribing to pending txs for 15-30 second windows:
Versions Tested
Environment
Suspected Root Cause
The
SubscribeFullPendingTransactions/SubscribePendingTransactionsmechanism in go-ethereum/Bor appears to not properly reinitialize the pending tx event feed after process restart. The node can receive pending txs from peers (they appear in the txpool) but the internal Go channel/event subscription that delivers them to WS subscribers is broken.Impact
Any application relying on real-time pending transaction notifications via WebSocket will be affected after Bor node restarts, including: