///
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;
}