-
-
Published
Linked with GitHub
# 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