Troubleshooting

ProblemCauseSolution
Error: subscribe_limitSubscription exceeds the limit (3 items)Reduce the number of items or run the server with --unrestricted
Gaps in seqBackpressure — messages are being droppedProcess faster, narrow your subscription, use filters
No events after connectingSubscribe not sentSend {"subscribe": [...]}
Warning: backpressureClient cannot keep up with messagesDo not perform heavy work in the message handler
Disconnection after 10,000 dropsslow_off_limit reachedNarrow subscription, speed up processing
Resume → snapshot instead of replayCursor is stale (outside the 100K buffer)Reconnect faster, check oldest_seqno via /v1/status
commit_stage is always "Proposed"Normal for the live streamExecution events are written at the Proposed stage; use Lifecycle to track finality
Blocked events not deliveredBlocked in blocked_filters.jsonCheck blocked_events in Hello; run with --unrestricted
Heartbeat timeoutNo client activity within 60sSend periodic Ping or messages to keep the connection alive
Error: empty_subscribeEmpty subscription listSpecify at least one item

Comparison with eth_subscribe

eth_subscribe (JSON-RPC)Events Stream
ProtocolJSON-RPC 2.0Custom JSON over WebSocket
Latency1-5 seconds< 5 ms
Event types3-425+
Internal callsNoTxnCallFrame, NativeTransfer
FinalityN/A4 MonadBFT stages (lifecycle)
Filteringaddress, topics7 fields (+ function_selector, sender, to)
RecoveryManual gap detectionCursor resume (?resume_from=seq)
Transaction correlationNocorrelate: true
MetricsNoTPS, ContentionData, TopAccesses
Own node requiredYesNo