@ethereumjs/statemanager / StatelessVerkleStateManager
Stateless Verkle StateManager implementation for the VM.
Experimental.
This State Manager enables stateless block execution by building a temporary (1-block) state from the verkle block witness. The Stateless Verkle State Manager then uses that populated state to fetch data requested by the the VM.
EVMStateManagerInterface• new StatelessVerkleStateManager(opts?)
Instantiate the StateManager interface.
| Name | Type | 
|---|---|
opts | 
      StatelessVerkleStateManagerOpts | 
    
statelessVerkleStateManager.ts:178
• Optional _accountCache: AccountCache
statelessVerkleStateManager.ts:138
• Optional _codeCache: CodeCache
statelessVerkleStateManager.ts:140
• Optional _storageCache: StorageCache
statelessVerkleStateManager.ts:139
• Optional accessWitness: AccessWitness
statelessVerkleStateManager.ts:171
• originalStorageCache: OriginalStorageCache
EVMStateManagerInterface.originalStorageCache
statelessVerkleStateManager.ts:142
▸ checkChunkWitnessPresent(address, codeOffset): boolean
| Name | Type | 
|---|---|
address | 
      Address | 
    
codeOffset | 
      number | 
    
boolean
statelessVerkleStateManager.ts:344
▸ checkpoint(): Promise<void>
Checkpoints the current state of the StateManager instance.
State changes that follow can then be committed by calling
commit or reverted by calling rollback.
Promise<void>
EVMStateManagerInterface.checkpoint
statelessVerkleStateManager.ts:806
▸ chunkifyCode(code): void
| Name | Type | 
|---|---|
code | 
      Uint8Array | 
    
void
statelessVerkleStateManager.ts:328
▸ clearCaches(): void
Clears all underlying caches
void
statelessVerkleStateManager.ts:881
▸ clearContractStorage(address): Promise<void>
Clears all storage entries for the account corresponding to address.
| Name | Type | Description | 
|---|---|---|
address | 
      Address | 
      Address to clear the storage of | 
Promise<void>
EVMStateManagerInterface.clearContractStorage
statelessVerkleStateManager.ts:495
▸ commit(): Promise<void>
Commits the current change-set to the instance since the last call to checkpoint.
Promise<void>
EVMStateManagerInterface.commit
statelessVerkleStateManager.ts:817
▸ deleteAccount(address): Promise<void>
Deletes an account from state under the provided address.
| Name | Type | Description | 
|---|---|---|
address | 
      Address | 
      Address of the account which should be deleted | 
Promise<void>
EVMStateManagerInterface.deleteAccount
statelessVerkleStateManager.ts:595
▸ dumpStorage(_): Promise<StorageDump>
Dumps the RLP-encoded storage values for an account specified by address.
| Name | Type | 
|---|---|
_ | 
      Address | 
    
Promise<StorageDump>
Object map.
Keys are are the storage keys, values are the storage values as strings.
Both are represented as hex strings without the 0x prefix.EVMStateManagerInterface.dumpStorage
statelessVerkleStateManager.ts:870
▸ dumpStorageRange(_, __, ___): Promise<StorageRange>
| Name | Type | 
|---|---|
_ | 
      Address | 
    
__ | 
      bigint | 
    
___ | 
      number | 
    
Promise<StorageRange>
EVMStateManagerInterface.dumpStorageRange
statelessVerkleStateManager.ts:874
▸ flush(): Promise<void>
Writes all cache items to the trie
Promise<void>
statelessVerkleStateManager.ts:844
▸ generateCanonicalGenesis(_initState): Promise<void>
| Name | Type | 
|---|---|
_initState | 
      any | 
    
Promise<void>
EVMStateManagerInterface.generateCanonicalGenesis
statelessVerkleStateManager.ts:887
▸ getAccount(address): Promise<undefined | Account>
| Name | Type | 
|---|---|
address | 
      Address | 
    
Promise<undefined | Account>
EVMStateManagerInterface.getAccount
statelessVerkleStateManager.ts:505
▸ getAppliedKey(_): Uint8Array
| Name | Type | 
|---|---|
_ | 
      Uint8Array | 
    
Uint8Array
EVMStateManagerInterface.getAppliedKey
statelessVerkleStateManager.ts:891
▸ getComputedValue(accessedState): null | string
| Name | Type | 
|---|---|
accessedState | 
      AccessedStateWithAddress | 
    
null | string
statelessVerkleStateManager.ts:717
▸ getContractCode(address): Promise<Uint8Array>
Gets the code corresponding to the provided address.
| Name | Type | Description | 
|---|---|---|
address | 
      Address | 
      Address to get the code for | 
    
Promise<Uint8Array>
Uint8Array if the account has no associated code.EVMStateManagerInterface.getContractCode
statelessVerkleStateManager.ts:391
▸ getContractStorage(address, key): Promise<Uint8Array>
Gets the storage value associated with the provided address and key. This method returns
the shortest representation of the stored value.
| Name | Type | Description | 
|---|---|---|
address | 
      Address | 
      Address of the account to get the storage for | 
key | 
      Uint8Array | 
      Key in the account’s storage to get the value for. Must be 32 bytes long. | 
Promise<Uint8Array>
Uint8Array is returned.EVMStateManagerInterface.getContractStorage
statelessVerkleStateManager.ts:455
▸ getProof(_, __?): Promise<Proof>
| Name | Type | Default value | 
|---|---|---|
_ | 
      Address | 
      undefined | 
    
__ | 
      Uint8Array[] | 
      [] | 
    
Promise<Proof>
EVMStateManagerInterface.getProof
statelessVerkleStateManager.ts:621
▸ getStateRoot(): Promise<Uint8Array>
Gets the verkle root. NOTE: this needs some examination in the code where this is needed and if we have the verkle root present
Promise<Uint8Array>
StateManagerEVMStateManagerInterface.getStateRoot
statelessVerkleStateManager.ts:852
▸ getTransitionStateRoot(_, __): Promise<Uint8Array>
| Name | Type | 
|---|---|
_ | 
      DefaultStateManager | 
    
__ | 
      Uint8Array | 
    
Promise<Uint8Array>
statelessVerkleStateManager.ts:242
▸ getTreeKeyForBalance(stem): Uint8Array
| Name | Type | 
|---|---|
stem | 
      Uint8Array | 
    
Uint8Array
statelessVerkleStateManager.ts:307
▸ getTreeKeyForCodeChunk(address, chunkId): Uint8Array
| Name | Type | 
|---|---|
address | 
      Address | 
    
chunkId | 
      number | 
    
Uint8Array
statelessVerkleStateManager.ts:323
▸ getTreeKeyForCodeHash(stem): Uint8Array
| Name | Type | 
|---|---|
stem | 
      Uint8Array | 
    
Uint8Array
statelessVerkleStateManager.ts:315
▸ getTreeKeyForCodeSize(stem): Uint8Array
| Name | Type | 
|---|---|
stem | 
      Uint8Array | 
    
Uint8Array
statelessVerkleStateManager.ts:319
▸ getTreeKeyForNonce(stem): Uint8Array
| Name | Type | 
|---|---|
stem | 
      Uint8Array | 
    
Uint8Array
statelessVerkleStateManager.ts:311
▸ getTreeKeyForStorageSlot(address, storageKey): Uint8Array
| Name | Type | 
|---|---|
address | 
      Address | 
    
storageKey | 
      bigint | 
    
Uint8Array
statelessVerkleStateManager.ts:338
▸ getTreeKeyForVersion(stem): Uint8Array
| Name | Type | 
|---|---|
stem | 
      Uint8Array | 
    
Uint8Array
statelessVerkleStateManager.ts:303
▸ hasStateRoot(_): Promise<boolean>
| Name | Type | 
|---|---|
_ | 
      Uint8Array | 
    
Promise<boolean>
EVMStateManagerInterface.hasStateRoot
statelessVerkleStateManager.ts:825
▸ initVerkleExecutionWitness(executionWitness?, accessWitness?): void
| Name | Type | 
|---|---|
executionWitness? | 
      null | VerkleExecutionWitness | 
    
accessWitness? | 
      AccessWitness | 
    
void
statelessVerkleStateManager.ts:246
▸ modifyAccountFields(address, accountFields): Promise<void>
| Name | Type | 
|---|---|
address | 
      Address | 
    
accountFields | 
      Partial<Pick<Account, "nonce" | "balance" | "storageRoot" | "codeHash">> | 
    
Promise<void>
EVMStateManagerInterface.modifyAccountFields
statelessVerkleStateManager.ts:608
▸ putAccount(address, account): Promise<void>
| Name | Type | 
|---|---|
address | 
      Address | 
    
account | 
      Account | 
    
Promise<void>
EVMStateManagerInterface.putAccount
statelessVerkleStateManager.ts:561
▸ putContractCode(address, value): Promise<void>
Adds value to the state trie as code, and sets codeHash on the account
corresponding to address to reference this.
| Name | Type | Description | 
|---|---|---|
address | 
      Address | 
      Address of the account to add the code for | 
    
value | 
      Uint8Array | 
      The value of the code | 
    
Promise<void>
EVMStateManagerInterface.putContractCode
statelessVerkleStateManager.ts:367
▸ putContractStorage(address, key, value): Promise<void>
Adds value to the state for the account
corresponding to address at the provided key.
| Name | Type | Description | 
|---|---|---|
address | 
      Address | 
      Address to set a storage value for | 
key | 
      Uint8Array | 
      Key to set the value at. Must be 32 bytes long. | 
value | 
      Uint8Array | 
      Value to set at key for account corresponding to address. Cannot be more than 32 bytes. Leading zeros are stripped. If it is a empty or filled with zeros, deletes the value. | 
    
Promise<void>
EVMStateManagerInterface.putContractStorage
statelessVerkleStateManager.ts:480
▸ revert(): Promise<void>
Reverts the current change-set to the instance since the last call to checkpoint.
Promise<void>
EVMStateManagerInterface.revert
statelessVerkleStateManager.ts:833
▸ setStateRoot(_): Promise<void>
TODO: needed? Maybe in this context: reset to original pre state suffice
| Name | Type | 
|---|---|
_ | 
      Uint8Array | 
    
Promise<void>
EVMStateManagerInterface.setStateRoot
statelessVerkleStateManager.ts:861
▸ shallowCopy(): EVMStateManagerInterface
Copies the current instance of the StateManager
at the last fully committed point, i.e. as if all current
checkpoints were reverted.
EVMStateManagerInterface
EVMStateManagerInterface.shallowCopy
statelessVerkleStateManager.ts:355
▸ verifyPostState(): boolean
boolean
statelessVerkleStateManager.ts:648
▸ verifyProof(parentVerkleRoot): Promise<boolean>
| Name | Type | 
|---|---|
parentVerkleRoot | 
      Uint8Array | 
    
Promise<boolean>