@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.
Files changed (115) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +409 -0
  3. package/dist/cjs/chains.d.ts +6 -0
  4. package/dist/cjs/chains.d.ts.map +1 -0
  5. package/dist/cjs/chains.js +637 -0
  6. package/dist/cjs/chains.js.map +1 -0
  7. package/dist/cjs/common.d.ts +318 -0
  8. package/dist/cjs/common.d.ts.map +1 -0
  9. package/dist/cjs/common.js +789 -0
  10. package/dist/cjs/common.js.map +1 -0
  11. package/dist/cjs/constructors.d.ts +27 -0
  12. package/dist/cjs/constructors.d.ts.map +1 -0
  13. package/dist/cjs/constructors.js +53 -0
  14. package/dist/cjs/constructors.js.map +1 -0
  15. package/dist/cjs/crc.d.ts +8 -0
  16. package/dist/cjs/crc.d.ts.map +1 -0
  17. package/dist/cjs/crc.js +63 -0
  18. package/dist/cjs/crc.js.map +1 -0
  19. package/dist/cjs/eips.d.ts +3 -0
  20. package/dist/cjs/eips.d.ts.map +1 -0
  21. package/dist/cjs/eips.js +589 -0
  22. package/dist/cjs/eips.js.map +1 -0
  23. package/dist/cjs/enums.d.ts +65 -0
  24. package/dist/cjs/enums.d.ts.map +1 -0
  25. package/dist/cjs/enums.js +80 -0
  26. package/dist/cjs/enums.js.map +1 -0
  27. package/dist/cjs/gethGenesis.d.ts +145 -0
  28. package/dist/cjs/gethGenesis.d.ts.map +1 -0
  29. package/dist/cjs/gethGenesis.js +26 -0
  30. package/dist/cjs/gethGenesis.js.map +1 -0
  31. package/dist/cjs/hardforks.d.ts +3 -0
  32. package/dist/cjs/hardforks.d.ts.map +1 -0
  33. package/dist/cjs/hardforks.js +207 -0
  34. package/dist/cjs/hardforks.js.map +1 -0
  35. package/dist/cjs/index.d.ts +9 -0
  36. package/dist/cjs/index.d.ts.map +1 -0
  37. package/dist/cjs/index.js +25 -0
  38. package/dist/cjs/index.js.map +1 -0
  39. package/dist/cjs/interfaces.d.ts +132 -0
  40. package/dist/cjs/interfaces.d.ts.map +1 -0
  41. package/dist/cjs/interfaces.js +13 -0
  42. package/dist/cjs/interfaces.js.map +1 -0
  43. package/dist/cjs/package.json +3 -0
  44. package/dist/cjs/types.d.ts +167 -0
  45. package/dist/cjs/types.d.ts.map +1 -0
  46. package/dist/cjs/types.js +3 -0
  47. package/dist/cjs/types.js.map +1 -0
  48. package/dist/cjs/utils.d.ts +60 -0
  49. package/dist/cjs/utils.d.ts.map +1 -0
  50. package/dist/cjs/utils.js +263 -0
  51. package/dist/cjs/utils.js.map +1 -0
  52. package/dist/esm/chains.d.ts +6 -0
  53. package/dist/esm/chains.d.ts.map +1 -0
  54. package/dist/esm/chains.js +634 -0
  55. package/dist/esm/chains.js.map +1 -0
  56. package/dist/esm/common.d.ts +318 -0
  57. package/dist/esm/common.d.ts.map +1 -0
  58. package/dist/esm/common.js +785 -0
  59. package/dist/esm/common.js.map +1 -0
  60. package/dist/esm/constructors.d.ts +27 -0
  61. package/dist/esm/constructors.d.ts.map +1 -0
  62. package/dist/esm/constructors.js +49 -0
  63. package/dist/esm/constructors.js.map +1 -0
  64. package/dist/esm/crc.d.ts +8 -0
  65. package/dist/esm/crc.d.ts.map +1 -0
  66. package/dist/esm/crc.js +59 -0
  67. package/dist/esm/crc.js.map +1 -0
  68. package/dist/esm/eips.d.ts +3 -0
  69. package/dist/esm/eips.d.ts.map +1 -0
  70. package/dist/esm/eips.js +586 -0
  71. package/dist/esm/eips.js.map +1 -0
  72. package/dist/esm/enums.d.ts +65 -0
  73. package/dist/esm/enums.d.ts.map +1 -0
  74. package/dist/esm/enums.js +77 -0
  75. package/dist/esm/enums.js.map +1 -0
  76. package/dist/esm/gethGenesis.d.ts +145 -0
  77. package/dist/esm/gethGenesis.d.ts.map +1 -0
  78. package/dist/esm/gethGenesis.js +23 -0
  79. package/dist/esm/gethGenesis.js.map +1 -0
  80. package/dist/esm/hardforks.d.ts +3 -0
  81. package/dist/esm/hardforks.d.ts.map +1 -0
  82. package/dist/esm/hardforks.js +204 -0
  83. package/dist/esm/hardforks.js.map +1 -0
  84. package/dist/esm/index.d.ts +9 -0
  85. package/dist/esm/index.d.ts.map +1 -0
  86. package/dist/esm/index.js +9 -0
  87. package/dist/esm/index.js.map +1 -0
  88. package/dist/esm/interfaces.d.ts +132 -0
  89. package/dist/esm/interfaces.d.ts.map +1 -0
  90. package/dist/esm/interfaces.js +10 -0
  91. package/dist/esm/interfaces.js.map +1 -0
  92. package/dist/esm/package.json +3 -0
  93. package/dist/esm/types.d.ts +167 -0
  94. package/dist/esm/types.d.ts.map +1 -0
  95. package/dist/esm/types.js +2 -0
  96. package/dist/esm/types.js.map +1 -0
  97. package/dist/esm/utils.d.ts +60 -0
  98. package/dist/esm/utils.d.ts.map +1 -0
  99. package/dist/esm/utils.js +258 -0
  100. package/dist/esm/utils.js.map +1 -0
  101. package/dist/tsconfig.prod.cjs.tsbuildinfo +1 -0
  102. package/dist/tsconfig.prod.esm.tsbuildinfo +1 -0
  103. package/package.json +77 -0
  104. package/src/chains.ts +638 -0
  105. package/src/common.ts +913 -0
  106. package/src/constructors.ts +60 -0
  107. package/src/crc.ts +63 -0
  108. package/src/eips.ts +588 -0
  109. package/src/enums.ts +104 -0
  110. package/src/gethGenesis.ts +175 -0
  111. package/src/hardforks.ts +205 -0
  112. package/src/index.ts +8 -0
  113. package/src/interfaces.ts +191 -0
  114. package/src/types.ts +193 -0
  115. package/src/utils.ts +324 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "module"
3
+ }
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -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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"}