---
title: "RPC and Transport Policy"
seo_title: "RPC Selection, Transaction Send and Backfill Policy"
description: "How the keepers and the indexer talk to chains: ordered RPC failover with Multicall3 batching for reads, and paced eth_getLogs scans with a per-chain source in front for indexer backfill."
audience: tech
type: reference
status: live
lang: en
updated: "2026-10-14"
publish: true
---
# RPC and Transport Policy

Reads go to an ordered RPC list with failover and are batched through Multicall3. The indexer reads logs from a per-chain log source when one answers and falls back to paced `eth_getLogs` on public RPCs. Anything this page does not pin down is marked unknown; do not implement from guesses.

This page states policy. The implementation lives in the keeper and the back end, never in docs.

---

## 1. Reads: ordered failover plus Multicall3

One client builds every provider, so endpoint policy is decided once. The URL list is ordered and list order is the policy: a read goes to the first endpoint that is not parked. A failure parks that endpoint and the same call moves to the next; the head of the list takes traffic again when the park lapses.

Reads are batched through Multicall3 (`0xca11bde05977b3631167028862be2a173976ca11`). One RPC call per storage slot is a bug, not a fallback.

The arb keeper's hot read pool is the exception: it ranks endpoints by measured latency. Unknown, not pinned: park duration and the per-endpoint health thresholds. See [deployed instances](/docs/2-1-contract-addresses) for what is live where.

## 2. Writes

Sends use their own endpoint list with the same ordered failover. A send that leaves the head of the list stays on the fallback for 180 s, so a stuck head does not pin the nonce lane. The send endpoint's chain id is checked at startup and a mismatch refuses to start. A send may be mirrored to a second endpoint.

The tip is set per chain: a configured minimum (`min_tip_gwei`) or a follow-the-market tip. A stuck transaction is replaced with the fee raised by the unstick percentage, never below the node's 10% replacement bump. There is no private (MEV-protected) submission route in the keeper send lane today.

Unknown, not pinned: the retry count for a send that never lands. The wallet-facing endpoint list is a different surface: [MEV Protection](/docs/4-6-mev-protection). On-chain damage bounds that apply regardless of route: [Slippage & Price Impact §4](/docs/1-1-5-slippage-price-impact#4-protections).

## 3. Backfill: log source, then paced public-RPC scan

The indexer asks each chain's log source first. It is on by default per chain, capped at 5 requests per second per process (one clock for all chains), and switched off per chain by setting its URL to `off`.

When that source is unreachable or off, logs come from `eth_getLogs`: 2,000 blocks per call by default, paced at 10 calls per second per endpoint unless the chain record sets its own limit. Ranges older than the tip window (about 3 minutes of blocks; 450 when the block time is unknown) go to the public endpoints; the paid primary is billed for backfill only when every public endpoint fails and the chain opts in. The primary's span cap is 10,000 blocks per call.

Unknown, not pinned: retry backoff after a 429.

## 4. Streams: arb feed only

The arb keeper on Monad consumes one block stream on the first live key of an ordered key list. The next key takes over when one is refused, past 90% of its 7M-block monthly quota, or silent for 60 s. `streams = 1`: more than one stream bills every block that many times. Nothing else in the stack consumes a stream.

## 5. Proxies: which kind

Contract proxies (UUPS, ERC-1967, beacon) are the upgrade story and are documented where the contracts are: [deployed instances](/docs/2-1-contract-addresses). They have nothing to do with this page. RPC proxy topology (whether reads run through a shared gateway or hit providers directly) is unknown, not pinned.

## 6. Open unknowns

1. Park duration and health thresholds for the read list.
2. Write path: retry count for a send that never lands; private submission route.
3. Retry backoff after a 429.
4. RPC proxy topology.
