RPC Defaults
QTG ships a curated PublicNode-based default RPC endpoint table so a fresh quickstart can talk to the EVM lanes without operator setup. Per-chain entries inMG_EVM_RPC_ENDPOINTS_JSON always win; defaults fill the gaps.
Knobs
Override patterns
Override a single chain (Alchemy mainnet) while keeping defaults for the rest:Empty / null entries
{"8453": []} and {"8453": null} are treated as unregistered — the
default URL fills the gap. There is no per-chain “no endpoint” sentinel. To
block defaults for one chain, use the global MG_EVM_RPC_USE_DEFAULTS=false
switch and provide only the chains you want.
CCIP path is excluded
CCIP useschain_selector (a CCIP-specific identifier) as its primary key, not
chain_id. The shipped default table is keyed by chain_id, so CCIP lanes do
not benefit. CCIP operators must explicitly populate
MG_CCIP_EVM_RPC_ENDPOINTS_JSON with chain_selector keys.
Live broadcast tools
Live preflight / drill / e2e CLI tools (gateway_live_preflight,
gateway_live_e2e, cctp_live_preflight, agent_wallet_topup_preflight,
agent_wallet_topup_stage3_live, run_stargate_send_drill) force
use_defaults=False internally. They never use PublicNode defaults, even if
MG_EVM_RPC_USE_DEFAULTS=true. The operator must provide explicit, production-
grade RPC URLs before running these tools — PublicNode rate-limits could break
a live broadcast mid-flight.
Shipped chains
The authoritative list lives insrc/qtg/infrastructure/rpc/defaults.py.
Mainnet and testnet entries are intermixed; the file docstring documents
provenance and maintainer instructions.