# Verkle Migration Sketch ## Phase 1: Offline Verkle Conversion who: - people who want to independently verify Verkle conversion input: - conversion block height $h_0$ output: - agreed upon Verkle root $V_0$ for $h_0$ - broadly available Verkle tree for $V_0$ provided tooling: - pre-image list construction via full sync & online updating - Merkle tree to Verkle tree conversion using pre-image list steps (each participant): - construct pre-image lists & start live updating them - ensure ongoing agreement on pre-image list hashes - wait for agreement (i.e. finalization) on merkle tree root $M_0$ for $h_0$ - agree on pre-image list hash $I_0$ for $h_0$ - convert Merkle tree to Verkle tree for $h_0$ - agree on Verkle root $V_0$ for $h_0$ ## Phase 2: Verkle Distribution & Catchup who: - every node operator input: - conversion block height $h_0$ - agreed upon Verkle root $V_0$ for $h_0$ - broadly available Verkle tree for $V_0$ output: - ongoing agreement on Verkle root hashes provided tooling: - Verkle tree download steps (each node operator): - download Verkle tree for $V_0$ - execution clients: - import Verkle tree into (live) node - replay historical blocks starting at $h_0$ against Verkle tree (basically full sync) - in parallel continue following live chain using Merkle tree - once caught up, run both Merkle and Verkle in parallel (including e.g. reorgs), but keep using Merkle exclusively for consensus purposes - ensure ongoing agreement on Verkle root hashes ## Phase 3: Verkle Hard Fork - pick fork height $h_1$ - at $h_1$, switch to using Verkle tree instead of Merkle tree for consensus purposes - keep running Merkle tree in parallel until $h_1$ finalizes