Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Sync Modes

Full sync

Full syncing works by downloading and executing every block from genesis. This means that full syncing will only work for networks that started after The Merge, as ethrex only supports post merge execution.

Snap sync

For snap sync, you can view the main document here.

snap/2 (EIP-8189)

ethrex advertises snap/2 alongside snap/1 unless its own state sync still depends on GetTrieNodes, which snap/2 removes; the version is negotiated per-peer at handshake.

On a post-Amsterdam chain with a snap/2 peer available, state sync downloads flat key-value state, patches it with the block access lists of the blocks that passed while it downloaded, then rebuilds every trie locally and verifies the result against the pivot’s state root. There is no trie healing at all.

It falls back to snap/1 when no snap/2 peer is available, when the pivot is pre-Amsterdam, or when BAL validation fails.

Implementation notes and known gaps are in snap/2 internals.

Historical chain backfill

A snap-synced node keeps only block headers below the sync pivot, so historical RPC queries for pre-pivot blocks (eth_getBlockByNumber, eth_getBlockReceipts, eth_getTransactionByHash, eth_getLogs, …) return empty. Historical chain backfill is an opt-in background process (--history.chain postmerge) that downloads and validates the missing bodies and receipts after snap sync completes, so the node can serve those queries.

See Historical chain backfill for the flags, how it works, durability across restarts, and its limitations.