@ethereumjs/common
Version:
Resources common to all Ethereum implementations
167 lines • 5.1 kB
TypeScript
import type { BigIntLike, KZG, PrefixedHexString } from '@ethereumjs/util';
import type { secp256k1 } from '@noble/curves/secp256k1.js';
import type { ConsensusAlgorithm, ConsensusType, Hardfork } from './enums.ts';
export interface ChainName {
[chainId: string]: string;
}
export interface ChainsConfig {
[key: string]: ChainConfig | ChainName;
}
export interface CommonEvent {
hardforkChanged: [hardfork: string];
}
export type CliqueConfig = {
period: number;
epoch: number;
};
export type EthashConfig = {};
export type CasperConfig = {};
type ConsensusConfig = {
type: ConsensusType | string;
algorithm: ConsensusAlgorithm | string;
clique?: CliqueConfig;
ethash?: EthashConfig;
casper?: CasperConfig;
};
export interface ChainConfig {
name: string;
chainId: number | string;
defaultHardfork?: string;
comment?: string;
url?: string;
genesis: GenesisBlockConfig;
hardforks: HardforkTransitionConfig[];
customHardforks?: HardforksDict;
bootstrapNodes: BootstrapNodeConfig[];
dnsNetworks?: string[];
consensus: ConsensusConfig;
depositContractAddress?: PrefixedHexString;
}
export interface GenesisBlockConfig {
timestamp?: PrefixedHexString;
gasLimit: number | PrefixedHexString;
difficulty: number | PrefixedHexString;
nonce: PrefixedHexString;
extraData: PrefixedHexString;
baseFeePerGas?: PrefixedHexString;
excessBlobGas?: PrefixedHexString;
requestsHash?: PrefixedHexString;
}
export interface HardforkTransitionConfig {
name: Hardfork | string;
block: number | null;
timestamp?: number | string;
forkHash?: PrefixedHexString | null;
}
export interface BootstrapNodeConfig {
ip: string;
port: number | string;
network?: string;
chainId?: number;
id: string;
location: string;
comment: string;
}
export interface CustomCrypto {
/**
* Interface for providing custom cryptographic primitives in place of `ethereum-cryptography` variants
*/
keccak256?: (msg: Uint8Array) => Uint8Array;
ecrecover?: (msgHash: Uint8Array, v: bigint, r: Uint8Array, s: Uint8Array, chainId?: bigint) => Uint8Array;
sha256?: (msg: Uint8Array) => Uint8Array;
ecsign?: typeof secp256k1.sign;
ecdsaRecover?: (sig: Uint8Array, recId: number, hash: Uint8Array) => Uint8Array;
kzg?: KZG;
}
export interface BaseOpts {
/**
* String identifier ('byzantium') for hardfork or {@link Hardfork} enum.
*
* Default: Hardfork.London
*/
hardfork?: string | Hardfork;
/**
* Selected EIPs which can be activated, please use an array for instantiation
* (e.g. `eips: [ 2537, ]`)
*
* Currently supported:
*
* - [EIP-2537](https://eips.ethereum.org/EIPS/eip-2537) - BLS12-381 precompiles
*/
eips?: number[];
/**
* Optionally pass in an EIP params dictionary, see one of the
* EthereumJS library `params.ts` files for an example (e.g. tx, evm).
* By default parameters are set by the respective library, so this
* is only relevant if you want to use EthereumJS libraries with a
* custom parameter set.
*
* Example Format:
*
* ```ts
* {
* 1559: {
* initialBaseFee: 1000000000,
* }
* }
* ```
*/
params?: ParamsDict;
/**
* This option can be used to replace the most common crypto primitives
* (keccak256 hashing e.g.) within the EthereumJS ecosystem libraries
* with alternative implementations (e.g. more performant WASM libraries).
*
* Note: please be aware that this is adding new dependencies for your
* system setup to be used for sensitive/core parts of the functionality
* and a choice on the libraries to add should be handled with care
* and be made with eventual security implications considered.
*/
customCrypto?: CustomCrypto;
}
/**
* Options for instantiating a {@link Common} instance.
*/
export interface CommonOpts extends BaseOpts {
/**
* The chain configuration to be used. There are available configuration object for mainnet
* (`Mainnet`) and the currently active testnets which can be directly used.
*/
chain: ChainConfig;
}
export interface GethConfigOpts extends BaseOpts {
chain?: string;
genesisHash?: Uint8Array;
}
export interface HardforkByOpts {
blockNumber?: BigIntLike;
timestamp?: BigIntLike;
}
export type EIPConfig = {
minimumHardfork: Hardfork;
requiredEIPs?: number[];
};
export type ParamsConfig = {
[key: string]: number | string | null;
};
export type HardforkConfig = {
eips?: number[];
consensus?: ConsensusConfig;
params?: ParamsConfig;
};
export type EIPsDict = {
[key: string]: EIPConfig;
};
export type ParamsDict = {
[key: string]: ParamsConfig;
};
export type HardforksDict = {
[key: string]: HardforkConfig;
};
export type BpoSchedule = {
targetBlobGasPerBlock: bigint;
maxBlobGasPerBlock: bigint;
blobGasPriceUpdateFraction: bigint;
};
export {};
//# sourceMappingURL=types.d.ts.map