Frontmatter
The frontmatter section contains profile-level metadata and rate limiting configuration.string
required
Human-readable profile name displayed in the dashboard and logs.
string
required
URL-safe identifier used in request paths. Must be unique across all profiles.Accessed via:
/rpc/profile/production/:chaininteger
default:"100"
Per-API-key requests per second limit. Uses token bucket rate limiting.
integer
default:"500"
Token bucket burst capacity. Allows short traffic spikes above
rps_limit.Example Frontmatter
Chain Configuration
Each chain is defined under thechains: key with a unique identifier (e.g., ethereum, base, arbitrum).
Basic Fields
integer
required
EIP-155 chain ID. Used for request validation and multi-chain routing.
string
Display name for the chain. Defaults to the chain key if omitted.
integer
Average block time in milliseconds. Used for optimistic lag calculation and timeout defaults.Typical values:
- Ethereum: 12000
- Base: 2000
- Arbitrum: 250
Monitoring
Controls health probe frequency and lag alerting.integer
default:"12000"
Interval between health checks in milliseconds. Set to approximately 1x block time for L1 chains, 2.5x for L2 chains.
integer
default:"5"
Log a warning when a provider lags this many blocks behind consensus.
Selection
Controls provider eligibility filtering during request routing.integer
default:"1"
Exclude providers lagging more than this many blocks behind the highest known block.Recommendations:
- L1 chains (Ethereum): 1-2 blocks
- Fast L2 chains (Arbitrum): 10 blocks
- Standard L2 chains (Base): 5 blocks
integer
default:"128"
Number of blocks before data is considered “archival”. Requests for blocks older than
head - threshold are only routed to providers marked as archival: true.WebSocket
Controls upstream WebSocket subscription behavior for real-time block tracking.boolean
default:"true"
Subscribe to
newHeads events for real-time block tracking. Enables sub-second lag detection.integer
default:"35000"
Timeout before marking a subscription as stale. Set to approximately 3x block time.
integer
default:"100"
Maximum number of blocks to fetch via HTTP during subscription failover to prevent gaps.
integer
default:"30000"
Timeout for backfill HTTP requests during failover.
UI Topology
Dashboard visualization settings for the topology view.string
Hex color code for the chain node in the dashboard topology view.
string
default:"md"
Node size in the topology view. Options:
sm, md, lg, xl.Complete Example
Here’s a complete chain configuration for Ethereum Mainnet:L2 Chain Example
L2 chains have different timing characteristics:Best Practices
Match probe intervals to block time
Match probe intervals to block time
Set
probe_interval_ms to 1x block time for L1 chains and 2.5x for L2 chains. This balances responsiveness with overhead.Adjust lag tolerance for chain speed
Adjust lag tolerance for chain speed
Fast L2 chains produce many blocks quickly. Increase
max_lag_blocks to 5-10 to avoid false positives from temporary sync delays.Calculate archival threshold by time
Calculate archival threshold by time
Use the ~25 minute rule:
archival_threshold = (25 * 60 * 1000) / block_time_ms. This ensures consistent historical data access across chains.Enable WebSocket subscriptions when available
Enable WebSocket subscriptions when available
WebSocket subscriptions provide real-time block tracking with sub-second lag detection. Disable only if providers don’t support it or stability is an issue.
Use descriptive chain keys
Use descriptive chain keys
Chain keys (e.g.,
ethereum, base-sepolia) appear in URLs and logs. Use canonical names that clearly identify the network.Next Steps
Provider Configuration
Learn how to configure providers for your chains