You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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
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.
Add test data from kaustinen7 to verify interoperability is maintained after latest changes for EIP-6800 (parent block stateroot in witness and shift to basic data entry for account header)
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).
Optimize handling of children/values in internal and leaf nodes (currently uses full 32 byte uint8Arrays to represent empty values - should be replaced with simple 0/1 to indicate empty or overwritten values)
Change db keys to something like the output of hashCommitment or the node commitment itself, add the partial path as a property on VerkleNode, and update findPath and put to use this revised schema for walking the trie Use node hash as db key #3472
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.
The text was updated successfully, but these errors were encountered:
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.
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.
verkle-cryptography-wasm
Milestone 3 - Verkle Trie Implementation
The EthereumJS monorepo has a functioning verkle trie implementation.
findPath
,get
, and cleans up existing API.put
following logic outlined in this test. There are also edge cases tests created by Ignacio here: https://hackmd.io/@jsign/verkle-test-vectors Implementtrie.put
#3473uint8Arrays
to represent empty values - should be replaced with simple 0/1 to indicate empty or overwritten values)hashCommitment
or the node commitment itself, add the partial path as a property onVerkleNode
, and updatefindPath
andput
to use this revised schema for walking the trie Use node hash as db key #3472Milestone 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.
statefulVerkleStateManager
class to handle state management using the already implemented verkle trie libraryMilestone 4 - Ready for the transition
The EthereumJS client can now statefully run and validate blocks through the merkle->verkle transition.
Milestone 5 - Block proposal
The EthereumJS client can now propose complete verkle blocks containing pre-state, post-state and verkle proof.
The text was updated successfully, but these errors were encountered: