import { type PrefixedHexString } from '@ethereumjs/util'; /** * Interface for Geth Genesis Config */ export interface GethGenesisConfig { chainId: number; depositContractAddress?: string; homesteadBlock?: number; daoForkBlock?: number; daoForkSupport?: boolean; eip150Block?: number; eip150Hash?: string; eip155Block?: number; eip158Block?: number; byzantiumBlock?: number; constantinopleBlock?: number; petersburgBlock?: number; istanbulBlock?: number; muirGlacierBlock?: number; berlinBlock?: number; londonBlock?: number; mergeForkBlock?: number; cancunBlock?: number; arrowGlacierBlock?: number; grayGlacierBlock?: number; mergeNetsplitBlock?: number; shanghaiTime?: number; cancunTime?: number; pragueTime?: number; terminalTotalDifficulty?: number; terminalTotalDifficultyPassed?: boolean; ethash?: {}; clique?: { period?: number; epoch?: number; blockperiodseconds?: number; epochlength?: number; }; trustedCheckpoint?: { sectionIndex: number; sectionHead: string; chtRoot: string; bloomRoot: string; }; trustedCheckpointOracle?: { address: string; signers: string[]; threshold: number; }; blobSchedule?: GethGenesisBlobSchedule; proofInBlocks?: boolean; } /** * Interface for account allocation in Geth Genesis */ export interface GethGenesisAlloc { [address: string]: { balance: string; code?: string; storage?: { [key: string]: string; }; nonce?: string; }; } /** * Interface for blob schedule in Geth Genesis (EIP-7840) */ export interface GethGenesisBlobSchedule { [fork: string]: { target?: number; max?: number; baseFeeUpdateFraction?: number; }; } /** * Interface for Geth Genesis object */ export interface GethGenesis { config: GethGenesisConfig; name?: string; excessBlobGas?: string; requestsHash?: string; nonce: string; timestamp: string; extraData?: string; gasLimit: PrefixedHexString; difficulty?: PrefixedHexString; mixHash?: PrefixedHexString; coinbase?: PrefixedHexString; alloc: GethGenesisAlloc; number?: PrefixedHexString; gasUsed?: PrefixedHexString; parentHash?: PrefixedHexString; baseFeePerGas?: PrefixedHexString | number | null; } /** * Type for the options passed to createCommonFromGethGenesis */ export interface CreateCommonFromGethGenesisOpts { chain?: string; genesisHash?: string; mergeForkIdPostMerge?: boolean; } export type StoragePair = [key: PrefixedHexString, value: PrefixedHexString]; export type AccountState = [ balance: PrefixedHexString, code?: PrefixedHexString, storage?: Array, nonce?: PrefixedHexString ]; /** * If you are using a custom chain {@link Common}, pass the genesis state. * * Pattern 1 (with genesis state see {@link GenesisState} for format): * * ```javascript * { * '0x0...01': '0x100', // For EoA * } * ``` * * Pattern 2 (with complex genesis state, containing contract accounts and storage). * Note that in {@link AccountState} there are two * accepted types. This allows to easily insert accounts in the genesis state: * * A complex genesis state with Contract and EoA states would have the following format: * * ```javascript * { * '0x0...01': '0x100', // For EoA * '0x0...02': ['0x1', '0xRUNTIME_BYTECODE', [[storageKey1, storageValue1], [storageKey2, storageValue2]]] // For contracts * } * ``` */ export interface GenesisState { [key: PrefixedHexString]: PrefixedHexString | AccountState; } /** * Parses the geth genesis state into Blockchain {@link GenesisState} * @param gethGenesis GethGenesis object * @returns Parsed {@link GenesisState} */ export declare function parseGethGenesisState(gethGenesis: GethGenesis): GenesisState; //# sourceMappingURL=gethGenesis.d.ts.map