@lodestar/config 1.35.0-dev.955e9f89ed → 1.35.0-dev.98d359db41

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 (67) hide show
  1. package/lib/beaconConfig.d.ts.map +1 -0
  2. package/lib/chainConfig/configs/mainnet.d.ts.map +1 -0
  3. package/lib/chainConfig/configs/mainnet.js +10 -0
  4. package/lib/chainConfig/configs/mainnet.js.map +1 -1
  5. package/lib/chainConfig/configs/minimal.d.ts.map +1 -0
  6. package/lib/chainConfig/configs/minimal.js +10 -0
  7. package/lib/chainConfig/configs/minimal.js.map +1 -1
  8. package/lib/chainConfig/default.d.ts.map +1 -0
  9. package/lib/chainConfig/index.d.ts +2 -2
  10. package/lib/chainConfig/index.d.ts.map +1 -0
  11. package/lib/chainConfig/index.js +2 -2
  12. package/lib/chainConfig/index.js.map +1 -1
  13. package/lib/chainConfig/json.d.ts.map +1 -0
  14. package/lib/chainConfig/networks/chiado.d.ts.map +1 -0
  15. package/lib/chainConfig/networks/ephemery.d.ts.map +1 -0
  16. package/lib/chainConfig/networks/gnosis.d.ts.map +1 -0
  17. package/lib/chainConfig/networks/holesky.d.ts.map +1 -0
  18. package/lib/chainConfig/networks/holesky.js +11 -2
  19. package/lib/chainConfig/networks/holesky.js.map +1 -1
  20. package/lib/chainConfig/networks/hoodi.d.ts.map +1 -0
  21. package/lib/chainConfig/networks/hoodi.js +11 -2
  22. package/lib/chainConfig/networks/hoodi.js.map +1 -1
  23. package/lib/chainConfig/networks/mainnet.d.ts.map +1 -0
  24. package/lib/chainConfig/networks/sepolia.d.ts.map +1 -0
  25. package/lib/chainConfig/networks/sepolia.js +11 -2
  26. package/lib/chainConfig/networks/sepolia.js.map +1 -1
  27. package/lib/chainConfig/types.d.ts +5 -0
  28. package/lib/chainConfig/types.d.ts.map +1 -0
  29. package/lib/chainConfig/types.js +5 -0
  30. package/lib/chainConfig/types.js.map +1 -1
  31. package/lib/configs.d.ts.map +1 -0
  32. package/lib/default.d.ts.map +1 -0
  33. package/lib/forkConfig/index.d.ts.map +1 -0
  34. package/lib/forkConfig/types.d.ts.map +1 -0
  35. package/lib/genesisConfig/index.d.ts.map +1 -0
  36. package/lib/genesisConfig/index.js.map +1 -1
  37. package/lib/genesisConfig/types.d.ts.map +1 -0
  38. package/lib/index.d.ts +2 -2
  39. package/lib/index.d.ts.map +1 -0
  40. package/lib/index.js +2 -2
  41. package/lib/index.js.map +1 -1
  42. package/lib/networks.d.ts.map +1 -0
  43. package/lib/utils/validateBlobSchedule.d.ts.map +1 -0
  44. package/package.json +12 -10
  45. package/src/beaconConfig.ts +31 -0
  46. package/src/chainConfig/configs/mainnet.ts +158 -0
  47. package/src/chainConfig/configs/minimal.ts +153 -0
  48. package/src/chainConfig/default.ts +19 -0
  49. package/src/chainConfig/index.ts +27 -0
  50. package/src/chainConfig/json.ts +175 -0
  51. package/src/chainConfig/networks/chiado.ts +49 -0
  52. package/src/chainConfig/networks/ephemery.ts +71 -0
  53. package/src/chainConfig/networks/gnosis.ts +74 -0
  54. package/src/chainConfig/networks/holesky.ts +64 -0
  55. package/src/chainConfig/networks/hoodi.ts +64 -0
  56. package/src/chainConfig/networks/mainnet.ts +19 -0
  57. package/src/chainConfig/networks/sepolia.ts +61 -0
  58. package/src/chainConfig/types.ts +252 -0
  59. package/src/configs.ts +4 -0
  60. package/src/default.ts +6 -0
  61. package/src/forkConfig/index.ts +203 -0
  62. package/src/forkConfig/types.ts +59 -0
  63. package/src/genesisConfig/index.ts +180 -0
  64. package/src/genesisConfig/types.ts +29 -0
  65. package/src/index.ts +4 -0
  66. package/src/networks.ts +65 -0
  67. package/src/utils/validateBlobSchedule.ts +32 -0
@@ -0,0 +1,74 @@
1
+ import {PresetName} from "@lodestar/params";
2
+ import {fromHex as b} from "@lodestar/utils";
3
+ import {chainConfig as mainnet} from "../configs/mainnet.js";
4
+ import {ChainConfig} from "../types.js";
5
+
6
+ // Gnosis beacon chain config:
7
+ // https://github.com/gnosischain/configs/blob/main/mainnet/config.yaml
8
+
9
+ export const gnosisChainConfig: ChainConfig = {
10
+ ...mainnet,
11
+
12
+ // NOTE: Only add diff values
13
+ PRESET_BASE: PresetName.gnosis,
14
+ CONFIG_NAME: "gnosis",
15
+
16
+ // Transition
17
+ TERMINAL_TOTAL_DIFFICULTY: BigInt("8626000000000000000000058750000000000000000000"),
18
+
19
+ // Time parameters
20
+ SECONDS_PER_SLOT: 5,
21
+ SECONDS_PER_ETH1_BLOCK: 6,
22
+ ETH1_FOLLOW_DISTANCE: 1024,
23
+ CHURN_LIMIT_QUOTIENT: 4096,
24
+
25
+ // Validator cycle
26
+ MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT: 2,
27
+
28
+ // Deposit contract
29
+ DEPOSIT_CHAIN_ID: 100,
30
+ DEPOSIT_NETWORK_ID: 100,
31
+ DEPOSIT_CONTRACT_ADDRESS: b("0x0b98057ea310f4d31f2a452b414647007d1645d9"),
32
+
33
+ // Networking
34
+ MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS: 16384,
35
+
36
+ // Dec 8, 2021, 13:00 UTC
37
+ MIN_GENESIS_TIME: 1638968400,
38
+ MIN_GENESIS_ACTIVE_VALIDATOR_COUNT: 4096,
39
+ GENESIS_FORK_VERSION: b("0x00000064"),
40
+ GENESIS_DELAY: 6000,
41
+
42
+ // Forking
43
+ ALTAIR_FORK_VERSION: b("0x01000064"),
44
+ ALTAIR_FORK_EPOCH: 512,
45
+ // Bellatrix
46
+ BELLATRIX_FORK_VERSION: b("0x02000064"),
47
+ BELLATRIX_FORK_EPOCH: 385536,
48
+ // Capella
49
+ CAPELLA_FORK_VERSION: b("0x03000064"),
50
+ CAPELLA_FORK_EPOCH: 648704, // 2023-08-01T11:34:20.000Z
51
+ // Deneb
52
+ DENEB_FORK_VERSION: b("0x04000064"),
53
+ DENEB_FORK_EPOCH: 889856, // 2024-03-11T18:30:20.000Z
54
+ // Electra
55
+ ELECTRA_FORK_VERSION: b("0x05000064"),
56
+ ELECTRA_FORK_EPOCH: 1337856, // 2025-04-30T14:03:40.000Z
57
+ // Fulu
58
+ FULU_FORK_VERSION: b("0x06000064"),
59
+ FULU_FORK_EPOCH: Infinity,
60
+
61
+ // Deneb
62
+ MAX_BLOBS_PER_BLOCK: 2,
63
+
64
+ // Electra
65
+ // 2**6 * 10**9 (= 64,000,000,000)
66
+ MAX_PER_EPOCH_ACTIVATION_EXIT_CHURN_LIMIT: 64000000000,
67
+ BLOB_SIDECAR_SUBNET_COUNT_ELECTRA: 2,
68
+ MAX_BLOBS_PER_BLOCK_ELECTRA: 2,
69
+ // MAX_REQUEST_BLOCKS_DENEB * MAX_BLOBS_PER_BLOCK_ELECTRA
70
+ MAX_REQUEST_BLOB_SIDECARS_ELECTRA: 256,
71
+
72
+ // Blob Scheduling
73
+ BLOB_SCHEDULE: [],
74
+ };
@@ -0,0 +1,64 @@
1
+ import {fromHex as b} from "@lodestar/utils";
2
+ import {chainConfig as mainnet} from "../configs/mainnet.js";
3
+ import {ChainConfig} from "../types.js";
4
+
5
+ // Holesky beacon chain config:
6
+ // https://github.com/eth-clients/holesky/blob/main/metadata/config.yaml
7
+
8
+ export const holeskyChainConfig: ChainConfig = {
9
+ ...mainnet,
10
+
11
+ CONFIG_NAME: "holesky",
12
+
13
+ // Genesis
14
+ // ---------------------------------------------------------------
15
+ MIN_GENESIS_ACTIVE_VALIDATOR_COUNT: 16384,
16
+ // Sep-28-2023 11:55:00 +UTC
17
+ MIN_GENESIS_TIME: 1695902100,
18
+ GENESIS_DELAY: 300,
19
+ GENESIS_FORK_VERSION: b("0x01017000"),
20
+
21
+ // Forking
22
+ // ---------------------------------------------------------------
23
+ // # Altair
24
+ ALTAIR_FORK_VERSION: b("0x02017000"),
25
+ ALTAIR_FORK_EPOCH: 0,
26
+ // # Merge
27
+ BELLATRIX_FORK_VERSION: b("0x03017000"),
28
+ BELLATRIX_FORK_EPOCH: 0,
29
+ TERMINAL_TOTAL_DIFFICULTY: BigInt("0"),
30
+ // Capella
31
+ CAPELLA_FORK_VERSION: b("0x04017000"),
32
+ CAPELLA_FORK_EPOCH: 256,
33
+ // Deneb
34
+ DENEB_FORK_VERSION: b("0x05017000"),
35
+ DENEB_FORK_EPOCH: 29696,
36
+ // Electra
37
+ ELECTRA_FORK_VERSION: b("0x06017000"),
38
+ ELECTRA_FORK_EPOCH: 115968,
39
+ // Fulu
40
+ FULU_FORK_VERSION: b("0x07017000"),
41
+ FULU_FORK_EPOCH: 165120,
42
+
43
+ // # 28,000,000,000 Gwei to ensure quicker ejection
44
+ EJECTION_BALANCE: 28000000000,
45
+
46
+ // Deposit contract
47
+ // ---------------------------------------------------------------
48
+ DEPOSIT_CHAIN_ID: 17000,
49
+ DEPOSIT_NETWORK_ID: 17000,
50
+ DEPOSIT_CONTRACT_ADDRESS: b("0x4242424242424242424242424242424242424242"),
51
+
52
+ // Blob Scheduling
53
+ // ---------------------------------------------------------------
54
+ BLOB_SCHEDULE: [
55
+ {
56
+ EPOCH: 166400,
57
+ MAX_BLOBS_PER_BLOCK: 15,
58
+ },
59
+ {
60
+ EPOCH: 167936,
61
+ MAX_BLOBS_PER_BLOCK: 21,
62
+ },
63
+ ],
64
+ };
@@ -0,0 +1,64 @@
1
+ import {fromHex as b} from "@lodestar/utils";
2
+ import {chainConfig as mainnet} from "../configs/mainnet.js";
3
+ import {ChainConfig} from "../types.js";
4
+
5
+ // Hoodi beacon chain config:
6
+ // https://github.com/eth-clients/hoodi/blob/main/metadata/config.yaml
7
+
8
+ export const hoodiChainConfig: ChainConfig = {
9
+ ...mainnet,
10
+
11
+ CONFIG_NAME: "hoodi",
12
+
13
+ // Genesis
14
+ // ---------------------------------------------------------------
15
+ // 2025-Mar-17 12:00:00 PM UTC
16
+ MIN_GENESIS_TIME: 1742212800,
17
+ GENESIS_DELAY: 600,
18
+ GENESIS_FORK_VERSION: b("0x10000910"),
19
+
20
+ // Forking
21
+ // ---------------------------------------------------------------
22
+ // # Altair
23
+ ALTAIR_FORK_VERSION: b("0x20000910"),
24
+ ALTAIR_FORK_EPOCH: 0,
25
+ // # Merge
26
+ BELLATRIX_FORK_VERSION: b("0x30000910"),
27
+ BELLATRIX_FORK_EPOCH: 0,
28
+ TERMINAL_TOTAL_DIFFICULTY: BigInt("0"),
29
+ // Capella
30
+ CAPELLA_FORK_VERSION: b("0x40000910"),
31
+ CAPELLA_FORK_EPOCH: 0,
32
+ // Deneb
33
+ DENEB_FORK_VERSION: b("0x50000910"),
34
+ DENEB_FORK_EPOCH: 0,
35
+ // Electra
36
+ ELECTRA_FORK_VERSION: b("0x60000910"),
37
+ ELECTRA_FORK_EPOCH: 2048,
38
+ // Fulu
39
+ FULU_FORK_VERSION: b("0x70000910"),
40
+ FULU_FORK_EPOCH: 50688,
41
+
42
+ // Time parameters
43
+ // ---------------------------------------------------------------
44
+ // 12 (update from older mainnet default of 14)
45
+ SECONDS_PER_ETH1_BLOCK: 12,
46
+
47
+ // Deposit contract
48
+ // ---------------------------------------------------------------
49
+ DEPOSIT_CHAIN_ID: 560048,
50
+ DEPOSIT_NETWORK_ID: 560048,
51
+
52
+ // Blob Scheduling
53
+ // ---------------------------------------------------------------
54
+ BLOB_SCHEDULE: [
55
+ {
56
+ EPOCH: 52480,
57
+ MAX_BLOBS_PER_BLOCK: 15,
58
+ },
59
+ {
60
+ EPOCH: 54016,
61
+ MAX_BLOBS_PER_BLOCK: 21,
62
+ },
63
+ ],
64
+ };
@@ -0,0 +1,19 @@
1
+ import {fromHex as b} from "@lodestar/utils";
2
+ import {chainConfig as mainnet} from "../configs/mainnet.js";
3
+ import {ChainConfig} from "../types.js";
4
+
5
+ export const mainnetChainConfig: ChainConfig = {
6
+ ...mainnet,
7
+
8
+ CONFIG_NAME: "mainnet",
9
+
10
+ DEPOSIT_CONTRACT_ADDRESS: b("0x00000000219ab540356cBB839Cbe05303d7705Fa"),
11
+
12
+ DEPOSIT_CHAIN_ID: 1,
13
+ DEPOSIT_NETWORK_ID: 1,
14
+
15
+ MIN_GENESIS_TIME: 1606824000, // Tuesday, December 1, 2020 12:00:00 PM UTC
16
+ GENESIS_DELAY: 604800,
17
+ // MUST NOT use `GENESIS_FORK_VERSION` here so for `minimal` networks the preset value of 0x00000001 take prevalence
18
+ // GENESIS_FORK_VERSION: "0x00000000",
19
+ };
@@ -0,0 +1,61 @@
1
+ import {fromHex as b} from "@lodestar/utils";
2
+ import {chainConfig as mainnet} from "../configs/mainnet.js";
3
+ import {ChainConfig} from "../types.js";
4
+
5
+ // Sepolia beacon chain config:
6
+ // https://github.com/eth-clients/sepolia/blob/main/metadata/config.yaml
7
+
8
+ export const sepoliaChainConfig: ChainConfig = {
9
+ ...mainnet,
10
+
11
+ CONFIG_NAME: "sepolia",
12
+
13
+ // Genesis
14
+ // ---------------------------------------------------------------
15
+ MIN_GENESIS_ACTIVE_VALIDATOR_COUNT: 1300,
16
+ // # Sunday, June 19, 2022 2:00:00 PM +UTC
17
+ MIN_GENESIS_TIME: 1655647200,
18
+ GENESIS_FORK_VERSION: b("0x90000069"),
19
+ GENESIS_DELAY: 86400,
20
+
21
+ // Forking
22
+ // ---------------------------------------------------------------
23
+ // # Altair
24
+ ALTAIR_FORK_VERSION: b("0x90000070"),
25
+ ALTAIR_FORK_EPOCH: 50,
26
+ // # Merge
27
+ BELLATRIX_FORK_VERSION: b("0x90000071"),
28
+ BELLATRIX_FORK_EPOCH: 100,
29
+ TERMINAL_TOTAL_DIFFICULTY: BigInt("17000000000000000"),
30
+ // Capella
31
+ CAPELLA_FORK_VERSION: b("0x90000072"),
32
+ CAPELLA_FORK_EPOCH: 56832,
33
+ // Deneb
34
+ DENEB_FORK_VERSION: b("0x90000073"),
35
+ DENEB_FORK_EPOCH: 132608,
36
+ // Electra
37
+ ELECTRA_FORK_VERSION: b("0x90000074"),
38
+ ELECTRA_FORK_EPOCH: 222464,
39
+ // Fulu
40
+ FULU_FORK_VERSION: b("0x90000075"),
41
+ FULU_FORK_EPOCH: 272640,
42
+
43
+ // Deposit contract
44
+ // ---------------------------------------------------------------
45
+ DEPOSIT_CHAIN_ID: 11155111,
46
+ DEPOSIT_NETWORK_ID: 11155111,
47
+ DEPOSIT_CONTRACT_ADDRESS: b("0x7f02C3E3c98b133055B8B348B2Ac625669Ed295D"),
48
+
49
+ // Blob Scheduling
50
+ // ---------------------------------------------------------------
51
+ BLOB_SCHEDULE: [
52
+ {
53
+ EPOCH: 274176,
54
+ MAX_BLOBS_PER_BLOCK: 15,
55
+ },
56
+ {
57
+ EPOCH: 275712,
58
+ MAX_BLOBS_PER_BLOCK: 21,
59
+ },
60
+ ],
61
+ };
@@ -0,0 +1,252 @@
1
+ import {PresetName} from "@lodestar/params";
2
+
3
+ /**
4
+ * Run-time chain configuration
5
+ */
6
+ export type ChainConfig = {
7
+ PRESET_BASE: PresetName;
8
+ /**
9
+ * Free-form short name of the network that this configuration applies to - known
10
+ * canonical network names include:
11
+ * * 'mainnet' - there can be only one
12
+ * * 'holesky' - testnet
13
+ * Must match the regex: [a-z0-9\-]
14
+ */
15
+ CONFIG_NAME: string;
16
+
17
+ // Transition
18
+ TERMINAL_TOTAL_DIFFICULTY: bigint;
19
+ TERMINAL_BLOCK_HASH: Uint8Array;
20
+ TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH: number;
21
+
22
+ // Genesis
23
+ MIN_GENESIS_ACTIVE_VALIDATOR_COUNT: number;
24
+ MIN_GENESIS_TIME: number;
25
+ GENESIS_FORK_VERSION: Uint8Array;
26
+ GENESIS_DELAY: number;
27
+
28
+ // Forking
29
+ // Altair
30
+ ALTAIR_FORK_VERSION: Uint8Array;
31
+ ALTAIR_FORK_EPOCH: number;
32
+ // Bellatrix
33
+ BELLATRIX_FORK_VERSION: Uint8Array;
34
+ BELLATRIX_FORK_EPOCH: number;
35
+ // Capella
36
+ CAPELLA_FORK_VERSION: Uint8Array;
37
+ CAPELLA_FORK_EPOCH: number;
38
+ // DENEB
39
+ DENEB_FORK_VERSION: Uint8Array;
40
+ DENEB_FORK_EPOCH: number;
41
+ // ELECTRA
42
+ ELECTRA_FORK_VERSION: Uint8Array;
43
+ ELECTRA_FORK_EPOCH: number;
44
+ // FULU
45
+ FULU_FORK_VERSION: Uint8Array;
46
+ FULU_FORK_EPOCH: number;
47
+ // GLOAS
48
+ GLOAS_FORK_VERSION: Uint8Array;
49
+ GLOAS_FORK_EPOCH: number;
50
+
51
+ // Time parameters
52
+ SECONDS_PER_SLOT: number;
53
+ SECONDS_PER_ETH1_BLOCK: number;
54
+ MIN_VALIDATOR_WITHDRAWABILITY_DELAY: number;
55
+ SHARD_COMMITTEE_PERIOD: number;
56
+ ETH1_FOLLOW_DISTANCE: number;
57
+
58
+ ATTESTATION_DUE_BPS_GLOAS: number;
59
+ AGGREGATE_DUE_BPS_GLOAS: number;
60
+ SYNC_MESSAGE_DUE_BPS_GLOAS: number;
61
+ CONTRIBUTION_DUE_BPS_GLOAS: number;
62
+ PAYLOAD_ATTESTATION_DUE_BPS: number;
63
+
64
+ // Validator cycle
65
+ INACTIVITY_SCORE_BIAS: number;
66
+ INACTIVITY_SCORE_RECOVERY_RATE: number;
67
+ EJECTION_BALANCE: number;
68
+ MIN_PER_EPOCH_CHURN_LIMIT: number;
69
+ MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT: number;
70
+ CHURN_LIMIT_QUOTIENT: number;
71
+ MAX_PER_EPOCH_ACTIVATION_EXIT_CHURN_LIMIT: number;
72
+ MIN_PER_EPOCH_CHURN_LIMIT_ELECTRA: number;
73
+
74
+ // Fork choice
75
+ PROPOSER_SCORE_BOOST: number;
76
+ REORG_HEAD_WEIGHT_THRESHOLD: number;
77
+ REORG_PARENT_WEIGHT_THRESHOLD: number;
78
+ REORG_MAX_EPOCHS_SINCE_FINALIZATION: number;
79
+
80
+ // Deposit contract
81
+ DEPOSIT_CHAIN_ID: number;
82
+ DEPOSIT_NETWORK_ID: number;
83
+ DEPOSIT_CONTRACT_ADDRESS: Uint8Array;
84
+
85
+ // Networking
86
+ MAX_REQUEST_BLOCKS: number;
87
+ MAX_REQUEST_BLOCKS_DENEB: number;
88
+ MIN_EPOCHS_FOR_BLOCK_REQUESTS: number;
89
+ MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS: number;
90
+ MIN_EPOCHS_FOR_DATA_COLUMN_SIDECARS_REQUESTS: number;
91
+ BLOB_SIDECAR_SUBNET_COUNT: number;
92
+ MAX_BLOBS_PER_BLOCK: number;
93
+ MAX_REQUEST_BLOB_SIDECARS: number;
94
+ BLOB_SIDECAR_SUBNET_COUNT_ELECTRA: number;
95
+ DATA_COLUMN_SIDECAR_SUBNET_COUNT: number;
96
+ MAX_BLOBS_PER_BLOCK_ELECTRA: number;
97
+ MAX_REQUEST_BLOB_SIDECARS_ELECTRA: number;
98
+ MAX_REQUEST_DATA_COLUMN_SIDECARS: number;
99
+
100
+ // Fulu
101
+ NUMBER_OF_CUSTODY_GROUPS: number;
102
+ SAMPLES_PER_SLOT: number;
103
+ CUSTODY_REQUIREMENT: number;
104
+ VALIDATOR_CUSTODY_REQUIREMENT: number;
105
+ BALANCE_PER_ADDITIONAL_CUSTODY_GROUP: number;
106
+
107
+ // Blob Scheduling
108
+ BLOB_SCHEDULE: BlobSchedule;
109
+ };
110
+
111
+ export const chainConfigTypes: SpecTypes<ChainConfig> = {
112
+ PRESET_BASE: "string",
113
+ CONFIG_NAME: "string",
114
+
115
+ // Transition
116
+ TERMINAL_TOTAL_DIFFICULTY: "bigint",
117
+ TERMINAL_BLOCK_HASH: "bytes",
118
+ TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH: "number",
119
+
120
+ // Genesis
121
+ MIN_GENESIS_ACTIVE_VALIDATOR_COUNT: "number",
122
+ MIN_GENESIS_TIME: "number",
123
+ GENESIS_FORK_VERSION: "bytes",
124
+ GENESIS_DELAY: "number",
125
+
126
+ // Forking
127
+ // Altair
128
+ ALTAIR_FORK_VERSION: "bytes",
129
+ ALTAIR_FORK_EPOCH: "number",
130
+ // Bellatrix
131
+ BELLATRIX_FORK_VERSION: "bytes",
132
+ BELLATRIX_FORK_EPOCH: "number",
133
+ // Capella
134
+ CAPELLA_FORK_VERSION: "bytes",
135
+ CAPELLA_FORK_EPOCH: "number",
136
+ // DENEB
137
+ DENEB_FORK_VERSION: "bytes",
138
+ DENEB_FORK_EPOCH: "number",
139
+ // ELECTRA
140
+ ELECTRA_FORK_VERSION: "bytes",
141
+ ELECTRA_FORK_EPOCH: "number",
142
+ // FULU
143
+ FULU_FORK_VERSION: "bytes",
144
+ FULU_FORK_EPOCH: "number",
145
+ // GLOAS
146
+ GLOAS_FORK_VERSION: "bytes",
147
+ GLOAS_FORK_EPOCH: "number",
148
+
149
+ // Time parameters
150
+ SECONDS_PER_SLOT: "number",
151
+ SECONDS_PER_ETH1_BLOCK: "number",
152
+ MIN_VALIDATOR_WITHDRAWABILITY_DELAY: "number",
153
+ SHARD_COMMITTEE_PERIOD: "number",
154
+ ETH1_FOLLOW_DISTANCE: "number",
155
+
156
+ ATTESTATION_DUE_BPS_GLOAS: "number",
157
+ AGGREGATE_DUE_BPS_GLOAS: "number",
158
+ SYNC_MESSAGE_DUE_BPS_GLOAS: "number",
159
+ CONTRIBUTION_DUE_BPS_GLOAS: "number",
160
+ PAYLOAD_ATTESTATION_DUE_BPS: "number",
161
+
162
+ // Validator cycle
163
+ INACTIVITY_SCORE_BIAS: "number",
164
+ INACTIVITY_SCORE_RECOVERY_RATE: "number",
165
+ EJECTION_BALANCE: "number",
166
+ MIN_PER_EPOCH_CHURN_LIMIT: "number",
167
+ MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT: "number",
168
+ CHURN_LIMIT_QUOTIENT: "number",
169
+ MAX_PER_EPOCH_ACTIVATION_EXIT_CHURN_LIMIT: "number",
170
+ MIN_PER_EPOCH_CHURN_LIMIT_ELECTRA: "number",
171
+
172
+ // Fork choice
173
+ PROPOSER_SCORE_BOOST: "number",
174
+ REORG_HEAD_WEIGHT_THRESHOLD: "number",
175
+ REORG_PARENT_WEIGHT_THRESHOLD: "number",
176
+ REORG_MAX_EPOCHS_SINCE_FINALIZATION: "number",
177
+
178
+ // Deposit contract
179
+ DEPOSIT_CHAIN_ID: "number",
180
+ DEPOSIT_NETWORK_ID: "number",
181
+ DEPOSIT_CONTRACT_ADDRESS: "bytes",
182
+
183
+ // Networking
184
+ MAX_REQUEST_BLOCKS: "number",
185
+ MAX_REQUEST_BLOCKS_DENEB: "number",
186
+ MIN_EPOCHS_FOR_BLOCK_REQUESTS: "number",
187
+ MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS: "number",
188
+ MIN_EPOCHS_FOR_DATA_COLUMN_SIDECARS_REQUESTS: "number",
189
+ BLOB_SIDECAR_SUBNET_COUNT: "number",
190
+ DATA_COLUMN_SIDECAR_SUBNET_COUNT: "number",
191
+ MAX_BLOBS_PER_BLOCK: "number",
192
+ MAX_REQUEST_BLOB_SIDECARS: "number",
193
+ BLOB_SIDECAR_SUBNET_COUNT_ELECTRA: "number",
194
+ MAX_BLOBS_PER_BLOCK_ELECTRA: "number",
195
+ MAX_REQUEST_BLOB_SIDECARS_ELECTRA: "number",
196
+ MAX_REQUEST_DATA_COLUMN_SIDECARS: "number",
197
+
198
+ // Fulu
199
+ NUMBER_OF_CUSTODY_GROUPS: "number",
200
+ SAMPLES_PER_SLOT: "number",
201
+ CUSTODY_REQUIREMENT: "number",
202
+ VALIDATOR_CUSTODY_REQUIREMENT: "number",
203
+ BALANCE_PER_ADDITIONAL_CUSTODY_GROUP: "number",
204
+
205
+ // Blob Scheduling
206
+ BLOB_SCHEDULE: "blob_schedule",
207
+ };
208
+
209
+ export type BlobScheduleEntry = {
210
+ EPOCH: number;
211
+ MAX_BLOBS_PER_BLOCK: number;
212
+ };
213
+
214
+ export type BlobSchedule = BlobScheduleEntry[];
215
+
216
+ export function isBlobSchedule(value: unknown): value is BlobSchedule {
217
+ return (
218
+ Array.isArray(value) &&
219
+ value.every(
220
+ (entry) =>
221
+ typeof entry === "object" &&
222
+ entry !== null &&
223
+ typeof entry.EPOCH === "number" &&
224
+ typeof entry.MAX_BLOBS_PER_BLOCK === "number"
225
+ )
226
+ );
227
+ }
228
+
229
+ /** Allows values in a Spec file */
230
+ export type SpecValue = number | bigint | Uint8Array | string | BlobSchedule;
231
+
232
+ /** Type value name of each spec field. Numbers are ignored since they are the most common */
233
+ export type SpecValueType<V extends SpecValue> = V extends number
234
+ ? "number"
235
+ : V extends bigint
236
+ ? "bigint"
237
+ : V extends Uint8Array
238
+ ? "bytes"
239
+ : V extends string
240
+ ? "string"
241
+ : V extends BlobSchedule
242
+ ? "blob_schedule"
243
+ : never;
244
+
245
+ /** All possible type names for a SpecValue */
246
+ export type SpecValueTypeName = SpecValueType<SpecValue>;
247
+
248
+ export type SpecTypes<Spec extends Record<string, SpecValue>> = {
249
+ [K in keyof Spec]: SpecValueType<Spec[K]>;
250
+ };
251
+
252
+ export type SpecJson = Record<string, string | Record<string, string>[]>;
package/src/configs.ts ADDED
@@ -0,0 +1,4 @@
1
+ import {chainConfig as mainnetChainConfig} from "./chainConfig/configs/mainnet.js";
2
+ import {chainConfig as minimalChainConfig} from "./chainConfig/configs/minimal.js";
3
+
4
+ export {mainnetChainConfig, minimalChainConfig};
package/src/default.ts ADDED
@@ -0,0 +1,6 @@
1
+ import {createChainForkConfig} from "./beaconConfig.js";
2
+ import {defaultChainConfig} from "./chainConfig/index.js";
3
+
4
+ export const chainConfig = defaultChainConfig;
5
+ // for testing purpose only
6
+ export const config = createChainForkConfig(defaultChainConfig);