@feelyourprotocol/common 8141.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +409 -0
- package/dist/cjs/chains.d.ts +6 -0
- package/dist/cjs/chains.d.ts.map +1 -0
- package/dist/cjs/chains.js +637 -0
- package/dist/cjs/chains.js.map +1 -0
- package/dist/cjs/common.d.ts +318 -0
- package/dist/cjs/common.d.ts.map +1 -0
- package/dist/cjs/common.js +789 -0
- package/dist/cjs/common.js.map +1 -0
- package/dist/cjs/constructors.d.ts +27 -0
- package/dist/cjs/constructors.d.ts.map +1 -0
- package/dist/cjs/constructors.js +53 -0
- package/dist/cjs/constructors.js.map +1 -0
- package/dist/cjs/crc.d.ts +8 -0
- package/dist/cjs/crc.d.ts.map +1 -0
- package/dist/cjs/crc.js +63 -0
- package/dist/cjs/crc.js.map +1 -0
- package/dist/cjs/eips.d.ts +3 -0
- package/dist/cjs/eips.d.ts.map +1 -0
- package/dist/cjs/eips.js +589 -0
- package/dist/cjs/eips.js.map +1 -0
- package/dist/cjs/enums.d.ts +65 -0
- package/dist/cjs/enums.d.ts.map +1 -0
- package/dist/cjs/enums.js +80 -0
- package/dist/cjs/enums.js.map +1 -0
- package/dist/cjs/gethGenesis.d.ts +145 -0
- package/dist/cjs/gethGenesis.d.ts.map +1 -0
- package/dist/cjs/gethGenesis.js +26 -0
- package/dist/cjs/gethGenesis.js.map +1 -0
- package/dist/cjs/hardforks.d.ts +3 -0
- package/dist/cjs/hardforks.d.ts.map +1 -0
- package/dist/cjs/hardforks.js +207 -0
- package/dist/cjs/hardforks.js.map +1 -0
- package/dist/cjs/index.d.ts +9 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +25 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/interfaces.d.ts +132 -0
- package/dist/cjs/interfaces.d.ts.map +1 -0
- package/dist/cjs/interfaces.js +13 -0
- package/dist/cjs/interfaces.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/types.d.ts +167 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/utils.d.ts +60 -0
- package/dist/cjs/utils.d.ts.map +1 -0
- package/dist/cjs/utils.js +263 -0
- package/dist/cjs/utils.js.map +1 -0
- package/dist/esm/chains.d.ts +6 -0
- package/dist/esm/chains.d.ts.map +1 -0
- package/dist/esm/chains.js +634 -0
- package/dist/esm/chains.js.map +1 -0
- package/dist/esm/common.d.ts +318 -0
- package/dist/esm/common.d.ts.map +1 -0
- package/dist/esm/common.js +785 -0
- package/dist/esm/common.js.map +1 -0
- package/dist/esm/constructors.d.ts +27 -0
- package/dist/esm/constructors.d.ts.map +1 -0
- package/dist/esm/constructors.js +49 -0
- package/dist/esm/constructors.js.map +1 -0
- package/dist/esm/crc.d.ts +8 -0
- package/dist/esm/crc.d.ts.map +1 -0
- package/dist/esm/crc.js +59 -0
- package/dist/esm/crc.js.map +1 -0
- package/dist/esm/eips.d.ts +3 -0
- package/dist/esm/eips.d.ts.map +1 -0
- package/dist/esm/eips.js +586 -0
- package/dist/esm/eips.js.map +1 -0
- package/dist/esm/enums.d.ts +65 -0
- package/dist/esm/enums.d.ts.map +1 -0
- package/dist/esm/enums.js +77 -0
- package/dist/esm/enums.js.map +1 -0
- package/dist/esm/gethGenesis.d.ts +145 -0
- package/dist/esm/gethGenesis.d.ts.map +1 -0
- package/dist/esm/gethGenesis.js +23 -0
- package/dist/esm/gethGenesis.js.map +1 -0
- package/dist/esm/hardforks.d.ts +3 -0
- package/dist/esm/hardforks.d.ts.map +1 -0
- package/dist/esm/hardforks.js +204 -0
- package/dist/esm/hardforks.js.map +1 -0
- package/dist/esm/index.d.ts +9 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +9 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/interfaces.d.ts +132 -0
- package/dist/esm/interfaces.d.ts.map +1 -0
- package/dist/esm/interfaces.js +10 -0
- package/dist/esm/interfaces.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/types.d.ts +167 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/utils.d.ts +60 -0
- package/dist/esm/utils.d.ts.map +1 -0
- package/dist/esm/utils.js +258 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/tsconfig.prod.cjs.tsbuildinfo +1 -0
- package/dist/tsconfig.prod.esm.tsbuildinfo +1 -0
- package/package.json +77 -0
- package/src/chains.ts +638 -0
- package/src/common.ts +913 -0
- package/src/constructors.ts +60 -0
- package/src/crc.ts +63 -0
- package/src/eips.ts +588 -0
- package/src/enums.ts +104 -0
- package/src/gethGenesis.ts +175 -0
- package/src/hardforks.ts +205 -0
- package/src/index.ts +8 -0
- package/src/interfaces.ts +191 -0
- package/src/types.ts +193 -0
- package/src/utils.ts +324 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import type { BigIntLike, KZG, PrefixedHexString } from '@feelyourprotocol/util';
|
|
2
|
+
import type { secp256k1 } from '@noble/curves/secp256k1.js';
|
|
3
|
+
import type { ConsensusAlgorithm, ConsensusType, Hardfork } from './enums.ts';
|
|
4
|
+
export interface ChainName {
|
|
5
|
+
[chainId: string]: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ChainsConfig {
|
|
8
|
+
[key: string]: ChainConfig | ChainName;
|
|
9
|
+
}
|
|
10
|
+
export interface CommonEvent {
|
|
11
|
+
hardforkChanged: [hardfork: string];
|
|
12
|
+
}
|
|
13
|
+
export type CliqueConfig = {
|
|
14
|
+
period: number;
|
|
15
|
+
epoch: number;
|
|
16
|
+
};
|
|
17
|
+
export type EthashConfig = {};
|
|
18
|
+
export type CasperConfig = {};
|
|
19
|
+
type ConsensusConfig = {
|
|
20
|
+
type: ConsensusType | string;
|
|
21
|
+
algorithm: ConsensusAlgorithm | string;
|
|
22
|
+
clique?: CliqueConfig;
|
|
23
|
+
ethash?: EthashConfig;
|
|
24
|
+
casper?: CasperConfig;
|
|
25
|
+
};
|
|
26
|
+
export interface ChainConfig {
|
|
27
|
+
name: string;
|
|
28
|
+
chainId: number | string;
|
|
29
|
+
defaultHardfork?: string;
|
|
30
|
+
comment?: string;
|
|
31
|
+
url?: string;
|
|
32
|
+
genesis: GenesisBlockConfig;
|
|
33
|
+
hardforks: HardforkTransitionConfig[];
|
|
34
|
+
customHardforks?: HardforksDict;
|
|
35
|
+
bootstrapNodes: BootstrapNodeConfig[];
|
|
36
|
+
dnsNetworks?: string[];
|
|
37
|
+
consensus: ConsensusConfig;
|
|
38
|
+
depositContractAddress?: PrefixedHexString;
|
|
39
|
+
}
|
|
40
|
+
export interface GenesisBlockConfig {
|
|
41
|
+
timestamp?: PrefixedHexString;
|
|
42
|
+
gasLimit: number | PrefixedHexString;
|
|
43
|
+
difficulty: number | PrefixedHexString;
|
|
44
|
+
nonce: PrefixedHexString;
|
|
45
|
+
extraData: PrefixedHexString;
|
|
46
|
+
baseFeePerGas?: PrefixedHexString;
|
|
47
|
+
excessBlobGas?: PrefixedHexString;
|
|
48
|
+
requestsHash?: PrefixedHexString;
|
|
49
|
+
}
|
|
50
|
+
export interface HardforkTransitionConfig {
|
|
51
|
+
name: Hardfork | string;
|
|
52
|
+
block: number | null;
|
|
53
|
+
timestamp?: number | string;
|
|
54
|
+
forkHash?: PrefixedHexString | null;
|
|
55
|
+
}
|
|
56
|
+
export interface BootstrapNodeConfig {
|
|
57
|
+
ip: string;
|
|
58
|
+
port: number | string;
|
|
59
|
+
network?: string;
|
|
60
|
+
chainId?: number;
|
|
61
|
+
id: string;
|
|
62
|
+
location: string;
|
|
63
|
+
comment: string;
|
|
64
|
+
}
|
|
65
|
+
export interface CustomCrypto {
|
|
66
|
+
/**
|
|
67
|
+
* Interface for providing custom cryptographic primitives in place of `ethereum-cryptography` variants
|
|
68
|
+
*/
|
|
69
|
+
keccak256?: (msg: Uint8Array) => Uint8Array;
|
|
70
|
+
ecrecover?: (msgHash: Uint8Array, v: bigint, r: Uint8Array, s: Uint8Array, chainId?: bigint) => Uint8Array;
|
|
71
|
+
sha256?: (msg: Uint8Array) => Uint8Array;
|
|
72
|
+
ecsign?: typeof secp256k1.sign;
|
|
73
|
+
ecdsaRecover?: (sig: Uint8Array, recId: number, hash: Uint8Array) => Uint8Array;
|
|
74
|
+
kzg?: KZG;
|
|
75
|
+
}
|
|
76
|
+
export interface BaseOpts {
|
|
77
|
+
/**
|
|
78
|
+
* String identifier ('byzantium') for hardfork or {@link Hardfork} enum.
|
|
79
|
+
*
|
|
80
|
+
* Default: Hardfork.London
|
|
81
|
+
*/
|
|
82
|
+
hardfork?: string | Hardfork;
|
|
83
|
+
/**
|
|
84
|
+
* Selected EIPs which can be activated, please use an array for instantiation
|
|
85
|
+
* (e.g. `eips: [ 2537, ]`)
|
|
86
|
+
*
|
|
87
|
+
* Currently supported:
|
|
88
|
+
*
|
|
89
|
+
* - [EIP-2537](https://eips.ethereum.org/EIPS/eip-2537) - BLS12-381 precompiles
|
|
90
|
+
*/
|
|
91
|
+
eips?: number[];
|
|
92
|
+
/**
|
|
93
|
+
* Optionally pass in an EIP params dictionary, see one of the
|
|
94
|
+
* EthereumJS library `params.ts` files for an example (e.g. tx, evm).
|
|
95
|
+
* By default parameters are set by the respective library, so this
|
|
96
|
+
* is only relevant if you want to use EthereumJS libraries with a
|
|
97
|
+
* custom parameter set.
|
|
98
|
+
*
|
|
99
|
+
* Example Format:
|
|
100
|
+
*
|
|
101
|
+
* ```ts
|
|
102
|
+
* {
|
|
103
|
+
* 1559: {
|
|
104
|
+
* initialBaseFee: 1000000000,
|
|
105
|
+
* }
|
|
106
|
+
* }
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
params?: ParamsDict;
|
|
110
|
+
/**
|
|
111
|
+
* This option can be used to replace the most common crypto primitives
|
|
112
|
+
* (keccak256 hashing e.g.) within the EthereumJS ecosystem libraries
|
|
113
|
+
* with alternative implementations (e.g. more performant WASM libraries).
|
|
114
|
+
*
|
|
115
|
+
* Note: please be aware that this is adding new dependencies for your
|
|
116
|
+
* system setup to be used for sensitive/core parts of the functionality
|
|
117
|
+
* and a choice on the libraries to add should be handled with care
|
|
118
|
+
* and be made with eventual security implications considered.
|
|
119
|
+
*/
|
|
120
|
+
customCrypto?: CustomCrypto;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Options for instantiating a {@link Common} instance.
|
|
124
|
+
*/
|
|
125
|
+
export interface CommonOpts extends BaseOpts {
|
|
126
|
+
/**
|
|
127
|
+
* The chain configuration to be used. There are available configuration object for mainnet
|
|
128
|
+
* (`Mainnet`) and the currently active testnets which can be directly used.
|
|
129
|
+
*/
|
|
130
|
+
chain: ChainConfig;
|
|
131
|
+
}
|
|
132
|
+
export interface GethConfigOpts extends BaseOpts {
|
|
133
|
+
chain?: string;
|
|
134
|
+
genesisHash?: Uint8Array;
|
|
135
|
+
}
|
|
136
|
+
export interface HardforkByOpts {
|
|
137
|
+
blockNumber?: BigIntLike;
|
|
138
|
+
timestamp?: BigIntLike;
|
|
139
|
+
}
|
|
140
|
+
export type EIPConfig = {
|
|
141
|
+
minimumHardfork: Hardfork;
|
|
142
|
+
requiredEIPs?: number[];
|
|
143
|
+
};
|
|
144
|
+
export type ParamsConfig = {
|
|
145
|
+
[key: string]: number | string | null;
|
|
146
|
+
};
|
|
147
|
+
export type HardforkConfig = {
|
|
148
|
+
eips?: number[];
|
|
149
|
+
consensus?: ConsensusConfig;
|
|
150
|
+
params?: ParamsConfig;
|
|
151
|
+
};
|
|
152
|
+
export type EIPsDict = {
|
|
153
|
+
[key: string]: EIPConfig;
|
|
154
|
+
};
|
|
155
|
+
export type ParamsDict = {
|
|
156
|
+
[key: string]: ParamsConfig;
|
|
157
|
+
};
|
|
158
|
+
export type HardforksDict = {
|
|
159
|
+
[key: string]: HardforkConfig;
|
|
160
|
+
};
|
|
161
|
+
export type BpoSchedule = {
|
|
162
|
+
targetBlobGasPerBlock: bigint;
|
|
163
|
+
maxBlobGasPerBlock: bigint;
|
|
164
|
+
blobGasPriceUpdateFraction: bigint;
|
|
165
|
+
};
|
|
166
|
+
export {};
|
|
167
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { GethGenesis } from './gethGenesis.ts';
|
|
2
|
+
import type { HardforksDict } from './types.ts';
|
|
3
|
+
type ConfigHardfork = {
|
|
4
|
+
name: string;
|
|
5
|
+
block: null;
|
|
6
|
+
timestamp: number;
|
|
7
|
+
} | {
|
|
8
|
+
name: string;
|
|
9
|
+
block: number;
|
|
10
|
+
timestamp?: number;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Parses a genesis object exported from Geth into parameters for Common instance
|
|
14
|
+
* @param gethGenesis GethGenesis object
|
|
15
|
+
* @param name optional chain name
|
|
16
|
+
* @returns parsed params
|
|
17
|
+
*/
|
|
18
|
+
export declare function parseGethGenesis(gethGenesis: GethGenesis, name?: string): {
|
|
19
|
+
name: string | undefined;
|
|
20
|
+
chainId: number;
|
|
21
|
+
depositContractAddress: string | undefined;
|
|
22
|
+
genesis: {
|
|
23
|
+
timestamp: `0x${string}`;
|
|
24
|
+
gasLimit: `0x${string}`;
|
|
25
|
+
difficulty: `0x${string}` | undefined;
|
|
26
|
+
nonce: `0x${string}`;
|
|
27
|
+
extraData: `0x${string}`;
|
|
28
|
+
mixHash: `0x${string}` | undefined;
|
|
29
|
+
coinbase: `0x${string}` | undefined;
|
|
30
|
+
baseFeePerGas: number | `0x${string}` | null | undefined;
|
|
31
|
+
excessBlobGas: string | undefined;
|
|
32
|
+
requestsHash: string | undefined;
|
|
33
|
+
};
|
|
34
|
+
hardfork: string | undefined;
|
|
35
|
+
hardforks: ConfigHardfork[];
|
|
36
|
+
customHardforks: HardforksDict | undefined;
|
|
37
|
+
bootstrapNodes: never[];
|
|
38
|
+
consensus: {
|
|
39
|
+
type: string;
|
|
40
|
+
algorithm: string;
|
|
41
|
+
clique: {
|
|
42
|
+
period: number | undefined;
|
|
43
|
+
epoch: number | undefined;
|
|
44
|
+
};
|
|
45
|
+
ethash?: undefined;
|
|
46
|
+
} | {
|
|
47
|
+
type: string;
|
|
48
|
+
algorithm: string;
|
|
49
|
+
ethash: {};
|
|
50
|
+
clique?: undefined;
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Return the preset chain config for one of the predefined chain configurations
|
|
55
|
+
* @param chain the representing a network name (e.g. 'mainnet') or number representing the chain ID
|
|
56
|
+
* @returns a {@link ChainConfig}
|
|
57
|
+
*/
|
|
58
|
+
export declare const getPresetChainConfig: (chain: string | number) => import("./types.ts").ChainConfig;
|
|
59
|
+
export {};
|
|
60
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,KAAK,cAAc,GACf;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAgQvD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,MAAM;;;;;;;;;;;;;;;;cA3J7C,MAAM,GAAG,SAAS;eACxB,cAAc,EAAE;;;;;;;;;;;;;;;;;EA8KpC;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,OAAO,MAAM,GAAG,MAAM,qCAgB1D,CAAA"}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { EthereumJSErrorWithoutCode, addHexPrefix, intToHex, isHexString, stripHexPrefix, } from '@feelyourprotocol/util';
|
|
2
|
+
import { Holesky, Hoodi, Mainnet, Sepolia } from "./chains.js";
|
|
3
|
+
import { Hardfork } from "./enums.js";
|
|
4
|
+
import { hardforksDict } from "./hardforks.js";
|
|
5
|
+
/**
|
|
6
|
+
* Transforms Geth formatted nonce (i.e. hex string) to 8 byte 0x-prefixed string used internally
|
|
7
|
+
* @param nonce string parsed from the Geth genesis file
|
|
8
|
+
* @returns nonce as a 0x-prefixed 8 byte string
|
|
9
|
+
*/
|
|
10
|
+
function formatNonce(nonce) {
|
|
11
|
+
if (!nonce || nonce === '0x0') {
|
|
12
|
+
return '0x0000000000000000';
|
|
13
|
+
}
|
|
14
|
+
if (isHexString(nonce)) {
|
|
15
|
+
return `0x${stripHexPrefix(nonce).padStart(16, '0')}`;
|
|
16
|
+
}
|
|
17
|
+
return `0x${nonce.padStart(16, '0')}`;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Converts Geth genesis parameters to an EthereumJS compatible `CommonOpts` object
|
|
21
|
+
* @param gethGenesis GethGenesis object
|
|
22
|
+
* @returns genesis parameters in a `CommonOpts` compliant object
|
|
23
|
+
*/
|
|
24
|
+
function parseGethParams(gethGenesis) {
|
|
25
|
+
const { name, config, difficulty, mixHash, gasLimit, coinbase, baseFeePerGas, excessBlobGas, requestsHash, extraData: unparsedExtraData, nonce: unparsedNonce, timestamp: unparsedTimestamp, } = gethGenesis;
|
|
26
|
+
const genesisTimestamp = Number(unparsedTimestamp);
|
|
27
|
+
const { chainId, depositContractAddress } = config;
|
|
28
|
+
// geth is not strictly putting empty fields with a 0x prefix
|
|
29
|
+
const extraData = addHexPrefix(unparsedExtraData ?? '');
|
|
30
|
+
// geth may use number for timestamp
|
|
31
|
+
const timestamp = isHexString(unparsedTimestamp)
|
|
32
|
+
? unparsedTimestamp
|
|
33
|
+
: intToHex(parseInt(unparsedTimestamp));
|
|
34
|
+
// geth may not give us a nonce strictly formatted to an 8 byte 0x-prefixed hex string
|
|
35
|
+
const nonce = unparsedNonce.length !== 18 ? formatNonce(unparsedNonce) : addHexPrefix(unparsedNonce);
|
|
36
|
+
// EIP155 and EIP158 are both part of Spurious Dragon hardfork and must occur at the same time
|
|
37
|
+
// but have different configuration parameters in geth genesis parameters
|
|
38
|
+
if (config.eip155Block !== config.eip158Block) {
|
|
39
|
+
throw EthereumJSErrorWithoutCode('EIP155 block number must equal EIP 158 block number since both are part of SpuriousDragon hardfork and the client only supports activating the full hardfork');
|
|
40
|
+
}
|
|
41
|
+
let customHardforks = undefined;
|
|
42
|
+
if (config.blobSchedule !== undefined) {
|
|
43
|
+
customHardforks = {};
|
|
44
|
+
const blobGasPerBlob = 131072;
|
|
45
|
+
for (const [hfKey, hfSchedule] of Object.entries(config.blobSchedule)) {
|
|
46
|
+
const hfConfig = hardforksDict[hfKey];
|
|
47
|
+
if (hfConfig === undefined) {
|
|
48
|
+
throw EthereumJSErrorWithoutCode(`unknown hardfork=${hfKey} specified in blobSchedule`);
|
|
49
|
+
}
|
|
50
|
+
const { target, max, baseFeeUpdateFraction: blobGasPriceUpdateFraction } = hfSchedule;
|
|
51
|
+
if (target === undefined || max === undefined || blobGasPriceUpdateFraction === undefined) {
|
|
52
|
+
throw EthereumJSErrorWithoutCode(`undefined target, max or baseFeeUpdateFraction specified in blobSchedule for hardfork=${hfKey}`);
|
|
53
|
+
}
|
|
54
|
+
// copy current hardfork info to custom and add blob config
|
|
55
|
+
const customHfConfig = JSON.parse(JSON.stringify(hfConfig));
|
|
56
|
+
customHfConfig.params = {
|
|
57
|
+
...customHardforks.params,
|
|
58
|
+
// removes blobGasPriceUpdateFraction key to prevent undefined overriding if undefined
|
|
59
|
+
...{
|
|
60
|
+
targetBlobGasPerBlock: blobGasPerBlob * target,
|
|
61
|
+
maxBlobGasPerBlock: blobGasPerBlob * max,
|
|
62
|
+
blobGasPriceUpdateFraction,
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
customHardforks[hfKey] = customHfConfig;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const params = {
|
|
69
|
+
name,
|
|
70
|
+
chainId,
|
|
71
|
+
depositContractAddress,
|
|
72
|
+
genesis: {
|
|
73
|
+
timestamp,
|
|
74
|
+
gasLimit,
|
|
75
|
+
difficulty,
|
|
76
|
+
nonce,
|
|
77
|
+
extraData,
|
|
78
|
+
mixHash,
|
|
79
|
+
coinbase,
|
|
80
|
+
baseFeePerGas,
|
|
81
|
+
excessBlobGas,
|
|
82
|
+
requestsHash,
|
|
83
|
+
},
|
|
84
|
+
hardfork: undefined,
|
|
85
|
+
hardforks: [],
|
|
86
|
+
customHardforks,
|
|
87
|
+
bootstrapNodes: [],
|
|
88
|
+
consensus: config.clique !== undefined
|
|
89
|
+
? {
|
|
90
|
+
type: 'poa',
|
|
91
|
+
algorithm: 'clique',
|
|
92
|
+
clique: {
|
|
93
|
+
// The recent geth genesis seems to be using blockperiodseconds // cspell:disable-line
|
|
94
|
+
// and epochlength for clique specification
|
|
95
|
+
// see: https://hackmd.io/PqZgMpnkSWCWv5joJoFymQ
|
|
96
|
+
period: config.clique.period ?? config.clique.blockperiodseconds, // cspell:disable-line
|
|
97
|
+
epoch: config.clique.epoch ?? config.clique.epochlength,
|
|
98
|
+
},
|
|
99
|
+
}
|
|
100
|
+
: {
|
|
101
|
+
type: 'pow',
|
|
102
|
+
algorithm: 'ethash',
|
|
103
|
+
ethash: {},
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
const forkMap = {
|
|
107
|
+
[Hardfork.Homestead]: { name: 'homesteadBlock' },
|
|
108
|
+
[Hardfork.Dao]: { name: 'daoForkBlock' },
|
|
109
|
+
[Hardfork.TangerineWhistle]: { name: 'eip150Block' },
|
|
110
|
+
[Hardfork.SpuriousDragon]: { name: 'eip155Block' },
|
|
111
|
+
[Hardfork.Byzantium]: { name: 'byzantiumBlock' },
|
|
112
|
+
[Hardfork.Constantinople]: { name: 'constantinopleBlock' },
|
|
113
|
+
[Hardfork.Petersburg]: { name: 'petersburgBlock' },
|
|
114
|
+
[Hardfork.Istanbul]: { name: 'istanbulBlock' },
|
|
115
|
+
[Hardfork.MuirGlacier]: { name: 'muirGlacierBlock' },
|
|
116
|
+
[Hardfork.Berlin]: { name: 'berlinBlock' },
|
|
117
|
+
[Hardfork.London]: { name: 'londonBlock' },
|
|
118
|
+
[Hardfork.ArrowGlacier]: { name: 'arrowGlacierBlock' },
|
|
119
|
+
[Hardfork.GrayGlacier]: { name: 'grayGlacierBlock' },
|
|
120
|
+
[Hardfork.Paris]: { name: 'mergeForkBlock', postMerge: true },
|
|
121
|
+
[Hardfork.MergeNetsplitBlock]: { name: 'mergeNetsplitBlock', postMerge: true },
|
|
122
|
+
[Hardfork.Shanghai]: { name: 'shanghaiTime', postMerge: true, isTimestamp: true },
|
|
123
|
+
[Hardfork.Cancun]: { name: 'cancunTime', postMerge: true, isTimestamp: true },
|
|
124
|
+
[Hardfork.Prague]: { name: 'pragueTime', postMerge: true, isTimestamp: true },
|
|
125
|
+
[Hardfork.Osaka]: { name: 'osakaTime', postMerge: true, isTimestamp: true },
|
|
126
|
+
[Hardfork.Bpo1]: { name: 'bpo1Time', postMerge: true, isTimestamp: true },
|
|
127
|
+
[Hardfork.Bpo2]: { name: 'bpo2Time', postMerge: true, isTimestamp: true },
|
|
128
|
+
[Hardfork.Bpo3]: { name: 'bpo3Time', postMerge: true, isTimestamp: true },
|
|
129
|
+
[Hardfork.Bpo4]: { name: 'bpo4Time', postMerge: true, isTimestamp: true },
|
|
130
|
+
[Hardfork.Bpo5]: { name: 'bpo5Time', postMerge: true, isTimestamp: true },
|
|
131
|
+
};
|
|
132
|
+
// forkMapRev is the map from config field name to Hardfork
|
|
133
|
+
const forkMapRev = Object.keys(forkMap).reduce((acc, elem) => {
|
|
134
|
+
acc[forkMap[elem].name] = elem;
|
|
135
|
+
return acc;
|
|
136
|
+
}, {});
|
|
137
|
+
params.hardforks = Object.entries(forkMapRev)
|
|
138
|
+
.map(([nameBlock, hardfork]) => {
|
|
139
|
+
const configValue = config[nameBlock];
|
|
140
|
+
const isTimestamp = forkMap[hardfork].isTimestamp === true;
|
|
141
|
+
const block = isTimestamp || typeof configValue !== 'number' ? null : configValue;
|
|
142
|
+
const timestamp = isTimestamp && typeof configValue === 'number' ? configValue : undefined;
|
|
143
|
+
return { name: hardfork, block, timestamp };
|
|
144
|
+
})
|
|
145
|
+
.filter(({ block, timestamp }) => block !== null || timestamp !== undefined);
|
|
146
|
+
const mergeIndex = params.hardforks.findIndex((hf) => hf.name === Hardfork.Paris);
|
|
147
|
+
let mergeNetsplitBlockIndex = params.hardforks.findIndex((hf) => hf.name === Hardfork.MergeNetsplitBlock);
|
|
148
|
+
const firstPostMergeHFIndex = params.hardforks.findIndex((hf) => hf.timestamp !== undefined && hf.timestamp !== null);
|
|
149
|
+
// If we are missing a mergeNetsplitBlock, we assume it is at the same block as Paris (if present)
|
|
150
|
+
if (mergeIndex !== -1 && mergeNetsplitBlockIndex === -1) {
|
|
151
|
+
params.hardforks.splice(mergeIndex + 1, 0, {
|
|
152
|
+
name: Hardfork.MergeNetsplitBlock,
|
|
153
|
+
block: params.hardforks[mergeIndex].block,
|
|
154
|
+
});
|
|
155
|
+
mergeNetsplitBlockIndex = mergeIndex + 1;
|
|
156
|
+
}
|
|
157
|
+
// or zero if not and a postmerge hardfork is set (since testnets using the geth genesis format are all currently start postmerge)
|
|
158
|
+
if (firstPostMergeHFIndex !== -1) {
|
|
159
|
+
if (mergeNetsplitBlockIndex === -1) {
|
|
160
|
+
params.hardforks.splice(firstPostMergeHFIndex, 0, {
|
|
161
|
+
name: Hardfork.MergeNetsplitBlock,
|
|
162
|
+
block: 0,
|
|
163
|
+
});
|
|
164
|
+
mergeNetsplitBlockIndex = firstPostMergeHFIndex;
|
|
165
|
+
}
|
|
166
|
+
if (mergeIndex === -1) {
|
|
167
|
+
// If we don't have a Paris hardfork, add it at the mergeNetsplitBlock
|
|
168
|
+
params.hardforks.splice(mergeNetsplitBlockIndex, 0, {
|
|
169
|
+
name: Hardfork.Paris,
|
|
170
|
+
block: params.hardforks[mergeNetsplitBlockIndex].block,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
// Check for terminalTotalDifficultyPassed param in genesis config if no post merge hardforks are set
|
|
174
|
+
}
|
|
175
|
+
else if (config.terminalTotalDifficultyPassed === true) {
|
|
176
|
+
if (mergeIndex === -1) {
|
|
177
|
+
// If we don't have a Paris hardfork, add it at end of hardfork array
|
|
178
|
+
params.hardforks.push({
|
|
179
|
+
name: Hardfork.Paris,
|
|
180
|
+
block: 0,
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
// If we don't have a MergeNetsplitBlock hardfork, add it at end of hardfork array
|
|
184
|
+
if (mergeNetsplitBlockIndex === -1) {
|
|
185
|
+
params.hardforks.push({
|
|
186
|
+
name: Hardfork.MergeNetsplitBlock,
|
|
187
|
+
block: 0,
|
|
188
|
+
});
|
|
189
|
+
mergeNetsplitBlockIndex = firstPostMergeHFIndex;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
// TODO: Decide if we actually need to do this since `ForkMap` specifies the order we expect things in
|
|
193
|
+
params.hardforks.sort(function (a, b) {
|
|
194
|
+
return (a.block ?? Infinity) - (b.block ?? Infinity);
|
|
195
|
+
});
|
|
196
|
+
params.hardforks.sort(function (a, b) {
|
|
197
|
+
// non timestamp forks come before any timestamp forks
|
|
198
|
+
return (a.timestamp ?? 0) - (b.timestamp ?? 0);
|
|
199
|
+
});
|
|
200
|
+
// only set the genesis timestamp forks to zero post the above sort has happened
|
|
201
|
+
// to get the correct sorting
|
|
202
|
+
for (const hf of params.hardforks) {
|
|
203
|
+
if (hf.timestamp === genesisTimestamp) {
|
|
204
|
+
hf.timestamp = 0;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
const latestHardfork = params.hardforks.length > 0 ? params.hardforks.slice(-1)[0] : undefined;
|
|
208
|
+
params.hardfork = latestHardfork?.name;
|
|
209
|
+
params.hardforks.unshift({ name: Hardfork.Chainstart, block: 0 });
|
|
210
|
+
return params;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Parses a genesis object exported from Geth into parameters for Common instance
|
|
214
|
+
* @param gethGenesis GethGenesis object
|
|
215
|
+
* @param name optional chain name
|
|
216
|
+
* @returns parsed params
|
|
217
|
+
*/
|
|
218
|
+
export function parseGethGenesis(gethGenesis, name) {
|
|
219
|
+
try {
|
|
220
|
+
const required = ['config', 'difficulty', 'gasLimit', 'nonce', 'alloc'];
|
|
221
|
+
if (required.some((field) => !(field in gethGenesis))) {
|
|
222
|
+
const missingField = required.filter((field) => !(field in gethGenesis));
|
|
223
|
+
throw EthereumJSErrorWithoutCode(`Invalid format, expected geth genesis field "${missingField}" missing`);
|
|
224
|
+
}
|
|
225
|
+
// We copy the object here because it's frozen in browser and properties can't be modified
|
|
226
|
+
const finalGethGenesis = { ...gethGenesis };
|
|
227
|
+
if (name !== undefined) {
|
|
228
|
+
finalGethGenesis.name = name;
|
|
229
|
+
}
|
|
230
|
+
return parseGethParams(finalGethGenesis);
|
|
231
|
+
}
|
|
232
|
+
catch (e) {
|
|
233
|
+
throw EthereumJSErrorWithoutCode(`Error parsing parameters file: ${e.message}`);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Return the preset chain config for one of the predefined chain configurations
|
|
238
|
+
* @param chain the representing a network name (e.g. 'mainnet') or number representing the chain ID
|
|
239
|
+
* @returns a {@link ChainConfig}
|
|
240
|
+
*/
|
|
241
|
+
export const getPresetChainConfig = (chain) => {
|
|
242
|
+
switch (chain) {
|
|
243
|
+
case 'holesky':
|
|
244
|
+
case 17000:
|
|
245
|
+
return Holesky;
|
|
246
|
+
case 'hoodi':
|
|
247
|
+
case 560048:
|
|
248
|
+
return Hoodi;
|
|
249
|
+
case 'sepolia':
|
|
250
|
+
case 11155111:
|
|
251
|
+
return Sepolia;
|
|
252
|
+
case 'mainnet':
|
|
253
|
+
case 1:
|
|
254
|
+
default:
|
|
255
|
+
return Mainnet;
|
|
256
|
+
}
|
|
257
|
+
};
|
|
258
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
|