import { Account, Address } from 'ethereumjs-util' import { AccessList } from '@ethereumjs/tx' import { Proof } from './stateManager' /** * Storage values of an account */ export interface StorageDump { [key: string]: string } export interface StateManager { copy(): StateManager getAccount(address: Address): Promise putAccount(address: Address, account: Account): Promise deleteAccount(address: Address): Promise touchAccount(address: Address): void putContractCode(address: Address, value: Buffer): Promise getContractCode(address: Address): Promise getContractStorage(address: Address, key: Buffer): Promise getOriginalContractStorage(address: Address, key: Buffer): Promise putContractStorage(address: Address, key: Buffer, value: Buffer): Promise clearContractStorage(address: Address): Promise checkpoint(): Promise commit(): Promise revert(): Promise getStateRoot(force?: boolean): Promise setStateRoot(stateRoot: Buffer): Promise dumpStorage(address: Address): Promise hasGenesisState(): Promise generateCanonicalGenesis(): Promise generateGenesis(initState: any): Promise accountIsEmpty(address: Address): Promise accountExists(address: Address): Promise cleanupTouchedAccounts(): Promise clearOriginalStorageCache(): void getProof?(address: Address, storageSlots: Buffer[]): Promise verifyProof?(proof: Proof): Promise } export interface EIP2929StateManager extends StateManager { addWarmedAddress(address: Buffer): void isWarmedAddress(address: Buffer): boolean addWarmedStorage(address: Buffer, slot: Buffer): void isWarmedStorage(address: Buffer, slot: Buffer): boolean clearWarmedAccounts(): void generateAccessList?(addressesRemoved: Address[], addressesOnlyStorage: Address[]): AccessList }