@ethereumjs/common
Version:
Resources common to all Ethereum implementations
145 lines • 4.01 kB
TypeScript
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;
verkleTime?: 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<StoragePair>,
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
*/
export declare function parseGethGenesisState(gethGenesis: GethGenesis): GenesisState;
//# sourceMappingURL=gethGenesis.d.ts.map