Skip to content

bug: eth_subscribe newHeads does not emit events on base-reth-node (0.7.6) #2368

@bigdegenenergy

Description

@bigdegenenergy

Description

After upgrading from op-reth (ghcr.io/paradigmxyz/op-reth:latest) to base-reth-node v0.7.6 using the base/node repository with CLIENT=reth and USE_BASE_CONSENSUS=true, WebSocket subscriptions (eth_subscribe("newHeads")) accept the subscription but never emit any events.

Environment

  • Execution client: base-reth-node v0.7.6 (reth/v1.11.3-d6324d6/x86_64-unknown-linux-gnu/base/v0.7.6)
  • Consensus client: base-consensus v0.7.6
  • Network: Base Mainnet
  • Instance: AWS i4i.4xlarge (16 vCPUs, 128GB RAM, NVMe instance store)
  • Docker: Using official base/node docker-compose with CLIENT=reth

Steps to Reproduce

  1. Set up node using base/node repo with CLIENT=reth, USE_BASE_CONSENSUS=true
  2. Node syncs and tracks chain tip successfully (execution logs show "Received new payload from consensus engine" every 2 seconds)
  3. HTTP RPC works fine (eth_blockNumber returns current block)
  4. Connect to WebSocket on port 8546:
import websocket, json
ws = websocket.create_connection("ws://localhost:8546", timeout=15)
ws.send(json.dumps({"jsonrpc":"2.0","method":"eth_subscribe","params":["newHeads"],"id":1}))
sub = ws.recv()
print("Sub:", sub)  # Returns valid subscription ID
msg = ws.recv()     # Hangs forever — no events
  1. Also tested newPendingTransactions — same result (subscription accepted, no events)
  2. Verified WS flags are correct in the running process: --ws --ws.addr=0.0.0.0 --ws.port=8546 --ws.api=web3,debug,eth,net,txpool

What We Tried

  • --engine.persistence-threshold 0 — No effect. Events still don't fire.
  • Multiple WebSocket clients — All receive subscription IDs but no events.
  • Previous setup worked: The same data directory with op-reth + op-node had fully working newHeads subscriptions.

Expected Behavior

After subscribing to newHeads, the WebSocket should emit a JSON message for each new block, containing the block header data.

Actual Behavior

  • eth_subscribe returns a valid subscription ID
  • No events are ever emitted
  • The node IS processing blocks (logs show new payloads every 2 seconds)
  • HTTP RPC works normally

Impact

This is a critical issue for DeFi applications running on Base. Many bots, indexers, and MEV systems rely on newHeads subscriptions for block-by-block execution. Without working WebSocket subscriptions, these applications cannot detect new blocks in real-time and must fall back to HTTP polling, which adds latency.

With the Base Mainnet Azul activation targeted for May 13, 2026, all node operators will need to upgrade, and this will break any application depending on WebSocket subscriptions.

Workaround

Currently using HTTP polling (eth_blockNumber every 200ms) as a workaround, but this adds ~100-200ms latency compared to WebSocket push notifications.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugFlag: Something isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions