A Verkle Tree is a data structure that would allow nodes to validate blocks without having to store large amounts of data.
Verkle Trees are essential for reaching stateless clients. Stateless clients don´t store the whole blockchain to validate blocks. The data arrives with the block they are going to validate, using a witness.
A witness is the collection of data necessary to execute the transactions in the block. The witness is used instead of the state database. Validators need to receive and process the data in a 12-second slot, so the witness has to be small. The witnesses generated by the current data structure, Merkle Tries, are too big.
Verkle tree testnets are already up and running, but there are still substantial outstanding updates to clients that are required to support Verkle trees. You can help accelerate progress by deploying contracts to the testnets or running testnet clients.
I went hunting for issues on the Lighthouse repo. There are two labels that seem related to this: tree-states and verge.
The Verge Tracking #4042 seems to be especially important.
An interesting PR I found was Add ExecutionWitness to the ExecutionPayload to support the Verge #3923. It looks like it stagnated, but no reason was provided.
For what I understand from #4042 the core logic of the Verge is already implemented in Lighthouse. There are some things that need to be done before it's ready to ship:
- Implement the ExecutionWitness type.
- Implement Optionals in SSZ and replace the instances of Union[None, T].
- Rebase on Capella and Deneb.
- Add fork implementation.
- Other unrelated fork additions?
The checkboxes that are left won't be enough for an EPF project, but would be a nice addition if I work on something else related to Verkle Trees.
Current Testnets
Beverly Hills
Running unchanged Consensus (all) with Verkle-enabled Execution (Geth-only)
Testnet linkKaustinen
Running Verkle-enabled Consensus (Lighthouse-only) with Verkle-enabled Execution (Geth-only)
Testnet linkHas been recently relaunched to use the full spec with the following changes:
- new_value is omitted from the SuffixStateDiff container.
- ExecutionWitness is added directly to the Bellatrix ExecutionPayload without any fork implementation.
- Is currently using Union[None, T] for optionals.
The last edit (March 20) mentions that geth is the only execution client that is Verkle enabled. I took a look at the Reth repo and found no mention of the Verge or Verkle Trees.
Some base features are not fully implemented in Reth. There are some issues around Merkle Trees, so maybe Reth is too unstable to try something with the Verge.
If I decide to work on this, I should just ask the Reth team about what current advancements are around the Verge in the client. And check if this would be feasible to complete (or at least make a significant advancement) during the EPF.