Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Verkle Readiness Tracker #3417

Open
11 of 18 tasks
gabrocheleau opened this issue May 11, 2024 · 0 comments
Open
11 of 18 tasks

Verkle Readiness Tracker #3417

gabrocheleau opened this issue May 11, 2024 · 0 comments

Comments

@gabrocheleau
Copy link
Contributor

gabrocheleau commented May 11, 2024

This meta-issue tracks the TODOs for a complete (i.e. stateful) verkle implementation. I've tried ordering the todo by priority. This has been inpart inspired by this article from Ignacio: https://ihagopian.com/posts/anatomy-of-a-verkle-proof

Milestone 1 - Unsecure Stateless Execution.

The EthereumJS client can now successfully run blocks from the provided witness. However it blindly trusts that the provided witness is correct, as it does not have the ability to verify the verkle proof yet.

  • Block execution verification from post-state (verify that computed post-state matches provided post-state). Not necessary for secure stateless execution, but very useful in the context of testnets to spot discrepencies and other execution or block-building related issues.

Milestone 2 - Secure Stateless Execution

The EthereumJS client can now successfully run blocks from the provided witness, and can verify that the provided witness is correct. It can therefore serve as a full validator and contribute to the security of the network.

Milestone 3 - Verkle Trie Implementation

The EthereumJS monorepo has a functioning verkle trie implementation.

  • Verkle tree implementation. The implementation should allow building a persistent verkle trie locally (putting and getting values).

Milestone 4 - Stateful Execution

The EthereumJS client can now successfully run blocks from the local verkle state trie, and verify that the computed state root matches that of the block.

  • Preimage saving.
  • Implementation of a statefulVerkleStateManager class to handle state management using the already implemented verkle trie library
  • Preimage distribution (being able to export and import a flat binary file containing all the pre-images)
  • Merkle->Verkle Tree transition. The client should be able to transition from using the Merkle tree for state, to using Verkle tree for state, and perform the conversion according to the spec.

Milestone 4 - Ready for the transition

The EthereumJS client can now statefully run and validate blocks through the merkle->verkle transition.

  • Witness (pre-state) generation. From a list of txs, we can build a Witness that can be used to run the block statelessly.
  • Witness (post-state) generation. From an executed block, we can build the post-state that can be used to validate the block execution.
  • Verkle proof generation. We are able to generate a verkle proof that proves that the key/value pairs of the pre-state witness belong to the previous block's stateRoot.

Milestone 5 - Block proposal

The EthereumJS client can now propose complete verkle blocks containing pre-state, post-state and verkle proof.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant