Skip to main content
An RPC outage interrupts reads and transaction submissions through the affected endpoint. Restore access, resolve uncertain transaction outcomes, and prioritize repayment, liquidation, and storage-renewal coverage. Use the network passphrase from Addresses when checking or replacing an endpoint.

Impact

Triage

Compare independent providers before attributing the failure to the network. Several failed providers do not establish a consensus failure. Check network status and provider independence. During a network outage, monitor recovery and pending submissions; delayed protective transactions can still increase risk. For simulation failures, match the error code and emitting contract from the same raw diagnostic event. A handled nested failure can precede the final propagated error. Preserve raw diagnostics before using display helpers that omit metadata or success flags.

Failover

The keeper tries configured fallback endpoints for idempotent reads and simulations. Submissions use the active endpoint without blind retry. Read rpc.urls in the keeper’s active configuration, using services/keeper/config/<network>.yaml as the repository reference. Other services may require an explicit switch.
1

Select a healthy provider

Query an independent, trusted provider for the current ledger and confirm it advances. RPC responses influence displayed state and submitted actions.
2

Restore affected services

Check keeper fallback health. Update unavailable endpoints and switch the application, exporter, and indexer according to their failover support. Preserve the network passphrase.
3

Verify reads

Confirm each service reads current ledger state. Restore indexer ingestion from its durable checkpoint and backfill the gap.
4

Resolve uncertain submissions

Follow the original-hash recovery procedure below. Confirm submission recovery with an authorized test transaction and its final ledger result; successful reads alone do not establish submission recovery.

Resolve an unknown transaction

Before the first send, persist the network, signed envelope XDR, original hash, source account, sequence, and validity bounds. Preserve these records across endpoint switches and process restarts. getTransaction returns SUCCESS, FAILED, or NOT_FOUND; it has no PENDING status. While the original envelope remains valid, retry only that identical signed envelope. A new simulation, signature, sequence, or validity bound can produce a replacement transaction and must wait for outcome reconciliation. Use ledger close time to determine whether time bounds have expired. Expiry prevents future inclusion; it does not prove the original was never included. Check the provider’s oldest and latest retained ledgers and close times. History must cover every ledger in which the original could have been included, and the provider must have caught up. Search complete history for the original hash and reconcile the source sequence and affected contract state before replacement. A current sequence alone does not identify which transaction consumed it. If retained history cannot establish the original outcome, stop replacement submission and recover complete history. A second endpoint with the same retention gap does not resolve the uncertainty.

Storage-renewal deadline

Persistent Soroban entries archive when their time-to-live (TTL) expires and require restoration before use. On Protocol 23 and later, a normal simulated and assembled invocation can include inline restoration. Honor the RPC simulation and assembly result; use a separate restore transaction when that workflow requires one. Re-simulate after a separate restore before signing the invocation. The keeper also extends configured entries before expiry and submits dedicated restore operations for archived entries it finds. Read schedule.ttl_tick_seconds and schedule.ttl_safety_margin_days in the active keeper configuration. The safety margin is a renewal policy, not a guaranteed outage budget. Measure the minimum remaining TTL across required entries and check failed extensions, omitted keys, and added dependencies. Prioritize recovery using that deadline together with repayment and liquidation coverage. Pausing the controller does not restore connectivity, and unpausing requires governance.

Recovery criteria

Confirm current reads, final submission results, storage-renewal coverage, and liquidator access. Track indexer backfill separately until the missing event range is recovered.