All Blog Posts
Ethereum safe block tag: a FastConfirm rollout checklist

Ethereum safe block tag: a FastConfirm rollout checklist

By Elias Faltin 6min read

Enabling FastConfirm can change every customer's safe read before they change a line of code. A deposit service may start accepting newer blocks while a settlement service still expects checkpoint-based confirmation.

Audit those callers before changing your consensus client. Then test the new behavior on an isolated node pair, measure block lag, and verify fallback. This checklist covers that rollout. The Fast Confirmation Rule overview explains the protocol and its security assumptions.

Decide which callers can use faster confirmation

The Fast Confirmation Rule, or FCR, lets a consensus client report a newer safe block through the execution client's existing JSON-RPC endpoint. It requires no new RPC method or hard fork.

FCR provides confirmation under network and participation assumptions. It does not provide the economic security of finalized blocks. The FastConfirm project describes confirmation around 13 seconds under normal conditions, with possible stalls or fallback during poor conditions.

Classify callers by what happens if their provisional block reorganizes:

CallerRollout decision
Deposit display with a pending statusTest faster updates and preserve the finality distinction
Provisional credit with enforced withdrawal restrictionsEvaluate whether the application can reverse the credit
Indexer that can roll back provisional recordsTest rollback and restart behavior before migration
Withdrawal or bridge release that cannot reverseRetain the application's finality requirement
L2 deposit watcherCheck the rollup's derivation and reorg rules before changing its input

A reversible database entry does not guarantee a reversible financial action. If a customer can withdraw provisional credit, your system may already have committed funds.

Ethereum safe-tag rollout criteria for reversible provisional actions and irreversible settlement.

For each caller, record its current tag, confirmation policy, and rollback behavior. Notify owners who already use safe; they can inherit the change without an application deployment.

Check the installed consensus client

Verify support in your exact binary and release. Lighthouse documents --enable-fast-confirmation, which feeds its confirmed root into the execution layer's safe block hash. Its documentation describes confirmation within 1 to 2 slots of the head. See the Lighthouse flag reference.

Do not copy flags between clients or infer installed support from a project roadmap. Check the binary's help output, release notes, and configuration. Keep the first test pair outside the customer load-balancer pool.

Compare latest, safe, and finalized over RPC

Set ETH_EL_RPC to the test execution endpoint. Run this probe with curl and jq:

BASH
for TAG in latest safe finalized; do
  curl --fail-with-body -sS "$ETH_EL_RPC" \
    -H 'Content-Type: application/json' \
    -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_getBlockByNumber\",\"params\":[\"$TAG\",false]}" \
    | jq -e --arg tag "$TAG" '
        if .error then error(.error.message)
        elif .result == null then error("No block returned")
        else {tag:$tag, number:.result.number,
              hash:.result.hash, timestamp:.result.timestamp}
        end'
done

Repeat the probe and save responses with local observation times. Convert hexadecimal numbers and timestamps before calculating differences.

Check these properties:

  1. The safe head advances more frequently when FCR operates under healthy conditions.
  2. Safe blocks remain ancestors of the latest chain you observe. Check hashes and ancestry; block-number ordering alone cannot establish this.
  3. The gap from latest to safe decreases. The gap from safe to finalized can increase because finality has not accelerated.
  4. A stalled safe head triggers a freshness alert even when the RPC request succeeds.

The three requests are separate observations. A new block can arrive between them. Repeat inconsistent samples against known block hashes before declaring a fork or ordering failure.

RPC verification compares safe to latest while checking ancestry and unchanged finality.

A valid safe response does not identify the confirmation algorithm behind it. Check the consensus-client configuration before describing an endpoint as FastConfirm-enabled.

Do not use 13 seconds as a service guarantee. Establish a baseline from your client version and deployment. Track missed slots, participation, and consensus-client health alongside RPC results.

Test fallback and mixed client pools

A valid block response can still be too old for your application. Record both time since the last safe-head change and its lag behind latest.

ObservationWhat to investigateApplication response
safe stops advancing while latest advancesConsensus-client health, participation, and confirmation statePause actions that exceed their freshness limit
safe repeatedly equals finalizedDisabled FCR, fallback, or insufficient observationsShow the longer confirmation delay
Nodes return different safe headsClient versions, configuration, and observation timingKeep incompatible configurations in separate pools
A previously accepted safe hash leaves the chainA provisional reorgRoll back dependent provisional records
Finalized head also stops advancingA broader consensus or node problemKeep the settlement policy intact
FastConfirm monitoring detects stale responses, fallback, mixed pools, and provisional reorgs.

Rehearse rollback with recorded or simulated responses. Test a stagnant safe head, a fallback to finality, and a changed provisional hash. Confirm that retries do not issue duplicate credits.

Check caches separately. A cache can continue serving an old safe response after the node advances. Record the upstream observation time so application monitors can distinguish cached data from a fresh read.

Roll out with an explicit rollback policy

Replay one representative customer workload against the test endpoint. Compare its accepted blocks, credits, and alerts with the existing configuration.

Before expanding the pool, confirm that:

  • Each caller has an owner and a documented confirmation policy.
  • Provisional writes can be reversed without duplicating later work.
  • Monitoring detects stale safe responses and fallback.
  • Settlement callers retain their required finality checks.
  • Operators can restore the previous configuration and reconcile provisional state.

Changing the flag back cannot reverse actions customers already took. Include that reconciliation step in the rollout plan.

Use the Ethereum RPC documentation for method details. Contact the Dwellir team to confirm the client behavior behind your endpoint before migrating callers.

read another blog post