Relayer
StreamingFast Firehose Relayer component
The Relayer is the live block distribution hub of the Firehose stack. It connects to one or more Reader Nodes, consolidates their block streams, and provides a unified, deduplicated live block feed to downstream consumers including the Firehose and Substreams components.
How Relayer Works
The Relayer creates a multiplexed connection to multiple block sources, manages their health and latency, and exposes a single gRPC endpoint that other components use to receive live blocks.
┌─────────────────────────────────────────────────────────────────────────┐
│ Relayer Component │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Reader 1 │ │ Reader 2 │ │ Reader N │ │
│ │ (source) │ │ (source) │ │ (source) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ └────────────────┼────────────────┘ │
│ ▼ │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ Multiplexed Source │ │
│ │ • Connects to multiple Reader endpoints │ │
│ │ • Races sources for fastest block delivery │ │
│ │ • Filters lagging sources based on latency threshold │ │
│ └───────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ ForkableHub │ │
│ │ • Maintains fork-aware block graph │ │
│ │ • Tracks head block and time drift │ │
│ │ • Signals readiness when synchronized │ │
│ └───────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ gRPC BlockStream Server │ │
│ │ • Streams live blocks to Firehose, Substreams, etc. │ │
│ │ • Same interface as Reader Node (BlockStream::Blocks) │ │
│ └───────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌───────────┴───────────┐ │
│ ▼ ▼ │
│ Firehose Substreams Tier 1 │
│ Component │
└─────────────────────────────────────────────────────────────────────────┘Source Multiplexing
The Relayer connects to multiple Reader Nodes simultaneously for:
Redundancy: If one Reader fails, others continue providing blocks
Fork Coverage: Different Readers may observe different forks from their network peers
Latency Optimization: Sources race to deliver blocks; the fastest wins
Each source connection includes automatic reconnection and health monitoring.
Realtime Gating
The Relayer monitors each source's latency against a configurable threshold:
Sources exceeding the latency threshold are temporarily filtered out
This prevents lagging sources from degrading overall performance
Sources automatically rejoin when they catch up
ForkableHub
The ForkableHub is the core data structure that:
Maintains a fork-aware graph of recent blocks
Tracks the current head block number and timestamp
Calculates time drift between chain time and wall clock
Provides readiness signaling to downstream components
The hub reads from both the live source factory (for new blocks) and one-block storage (for recent historical blocks not yet merged).
gRPC Interface
The Relayer exposes the same BlockStream::Blocks interface as the Reader Node. This consistent interface allows:
Downstream components to connect to either Reader or Relayer
Simple failover configurations
Uniform client code regardless of data source
Blocks are streamed with metadata including:
Block number and hash
Parent block information
Fork step (new, undo, irreversible)
Partial block indicators (when applicable)
Operational Patterns
Single Relayer
For simple deployments, one Relayer connects to all Readers:
Regional Relayers
For geographically distributed deployments, regional Relayers can aggregate local Readers:
Storage Access
The Relayer requires read access to one-block storage:
Purpose: Bootstrap ForkableHub with recent blocks
Access pattern: Read-only
Volume: Only reads recent blocks, not full history
This allows the Relayer to maintain fork awareness even when starting up after all Readers have moved past certain blocks.
Configuration Reference
For complete configuration options, flags, and health check endpoints, see Relayer CLI Reference.
Last updated
Was this helpful?
