///
import Account from 'ethereumjs-account';
import { Dictionary } from 'ts-essentials';
import { CheckpointMap } from './CheckpointMap';
import { Address } from '../../primitives/Address';
import { Hash, Quantity } from '../../primitives';
/**
* Holds account, code, storage state in memory.
* Pretends to maintain trie like structure by generating fake state roots and load them as snapshots when needed
*/
export declare class DethStateManger {
private accountsState;
private codeState;
private storageState;
private savedAccountsState;
private savedCodeState;
private savedStorageState;
private saveIndex;
constructor(accountsState?: CheckpointMap, codeState?: CheckpointMap, storageState?: CheckpointMap, Address>, savedAccountsState?: CheckpointMap, Hash>, savedCodeState?: CheckpointMap, Hash>, savedStorageState?: CheckpointMap, Address>, Hash>, saveIndex?: number);
copy(): DethStateManger;
getAccount(address: Address): Account;
putAccount(address: Address, account: Account): void;
putContractCode(address: Address, code: Buffer): void;
getContractCode(address: Address): Buffer;
getContractStorage(address: Address, key: Quantity): Buffer;
putContractStorage(address: Address, key: Quantity, value: Buffer): void;
clearContractStorage(address: Address): void;
checkpoint(): void;
commit(): void;
revert(): void;
getStateRoot(): Hash;
setStateRoot(root: Hash): void;
isAccountEmpty(address: Address): boolean;
}