@lodestar/params 1.35.0-dev.f80d2d52da → 1.35.0-dev.fcf8d024ea
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/lib/forkName.d.ts.map +1 -0
- package/lib/index.d.ts +12 -2
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +9 -1
- package/lib/index.js.map +1 -1
- package/lib/json.d.ts.map +1 -0
- package/lib/presetName.d.ts.map +1 -0
- package/lib/presetStatus.d.ts.map +1 -0
- package/lib/presets/gnosis.d.ts.map +1 -0
- package/lib/presets/mainnet.d.ts.map +1 -0
- package/lib/presets/mainnet.js +4 -0
- package/lib/presets/mainnet.js.map +1 -1
- package/lib/presets/minimal.d.ts.map +1 -0
- package/lib/presets/minimal.js +4 -0
- package/lib/presets/minimal.js.map +1 -1
- package/lib/setPreset.d.ts.map +1 -0
- package/lib/types.d.ts +3 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +4 -0
- package/lib/types.js.map +1 -1
- package/package.json +10 -7
- package/src/forkName.ts +195 -0
- package/src/index.ts +313 -0
- package/src/json.ts +58 -0
- package/src/presetName.ts +5 -0
- package/src/presetStatus.ts +3 -0
- package/src/presets/gnosis.ts +22 -0
- package/src/presets/mainnet.ts +149 -0
- package/src/presets/minimal.ts +150 -0
- package/src/setPreset.ts +48 -0
- package/src/types.ts +228 -0
package/src/index.ts
ADDED
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
import {PresetName} from "./presetName.js";
|
|
2
|
+
import {presetStatus} from "./presetStatus.js";
|
|
3
|
+
import {gnosisPreset} from "./presets/gnosis.js";
|
|
4
|
+
import {mainnetPreset} from "./presets/mainnet.js";
|
|
5
|
+
import {minimalPreset} from "./presets/minimal.js";
|
|
6
|
+
import {userOverrides, userSelectedPreset} from "./setPreset.js";
|
|
7
|
+
|
|
8
|
+
export * from "./forkName.js";
|
|
9
|
+
export {presetToJson} from "./json.js";
|
|
10
|
+
export type {BeaconPreset} from "./types.js";
|
|
11
|
+
export {PresetName};
|
|
12
|
+
|
|
13
|
+
const presets = {
|
|
14
|
+
[PresetName.mainnet]: mainnetPreset,
|
|
15
|
+
[PresetName.minimal]: minimalPreset,
|
|
16
|
+
[PresetName.gnosis]: gnosisPreset,
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
// Once this file is imported, freeze the preset so calling setActivePreset() will throw an error
|
|
20
|
+
presetStatus.frozen = true;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* The preset name currently exported by this library
|
|
24
|
+
*
|
|
25
|
+
* The `LODESTAR_PRESET` environment variable is used to select the active preset
|
|
26
|
+
* If `LODESTAR_PRESET` is not set, the default is `mainnet`.
|
|
27
|
+
*
|
|
28
|
+
* The active preset can be manually overridden with `setActivePreset`
|
|
29
|
+
*/
|
|
30
|
+
export const ACTIVE_PRESET =
|
|
31
|
+
userSelectedPreset ??
|
|
32
|
+
(typeof process !== "undefined" ? PresetName[process?.env?.LODESTAR_PRESET as PresetName] : undefined) ??
|
|
33
|
+
PresetName.mainnet;
|
|
34
|
+
export const activePreset = {...presets[ACTIVE_PRESET], ...userOverrides};
|
|
35
|
+
|
|
36
|
+
// These variables must be exported individually and explicitly
|
|
37
|
+
// in order to be accessible as top-level exports
|
|
38
|
+
export const {
|
|
39
|
+
MAX_COMMITTEES_PER_SLOT,
|
|
40
|
+
TARGET_COMMITTEE_SIZE,
|
|
41
|
+
MAX_VALIDATORS_PER_COMMITTEE,
|
|
42
|
+
SHUFFLE_ROUND_COUNT,
|
|
43
|
+
HYSTERESIS_QUOTIENT,
|
|
44
|
+
HYSTERESIS_DOWNWARD_MULTIPLIER,
|
|
45
|
+
HYSTERESIS_UPWARD_MULTIPLIER,
|
|
46
|
+
MIN_DEPOSIT_AMOUNT,
|
|
47
|
+
MAX_EFFECTIVE_BALANCE,
|
|
48
|
+
EFFECTIVE_BALANCE_INCREMENT,
|
|
49
|
+
MIN_ATTESTATION_INCLUSION_DELAY,
|
|
50
|
+
SLOTS_PER_EPOCH,
|
|
51
|
+
MIN_SEED_LOOKAHEAD,
|
|
52
|
+
MAX_SEED_LOOKAHEAD,
|
|
53
|
+
EPOCHS_PER_ETH1_VOTING_PERIOD,
|
|
54
|
+
SLOTS_PER_HISTORICAL_ROOT,
|
|
55
|
+
MIN_EPOCHS_TO_INACTIVITY_PENALTY,
|
|
56
|
+
EPOCHS_PER_HISTORICAL_VECTOR,
|
|
57
|
+
EPOCHS_PER_SLASHINGS_VECTOR,
|
|
58
|
+
HISTORICAL_ROOTS_LIMIT,
|
|
59
|
+
VALIDATOR_REGISTRY_LIMIT,
|
|
60
|
+
BASE_REWARD_FACTOR,
|
|
61
|
+
WHISTLEBLOWER_REWARD_QUOTIENT,
|
|
62
|
+
PROPOSER_REWARD_QUOTIENT,
|
|
63
|
+
INACTIVITY_PENALTY_QUOTIENT,
|
|
64
|
+
MIN_SLASHING_PENALTY_QUOTIENT,
|
|
65
|
+
PROPORTIONAL_SLASHING_MULTIPLIER,
|
|
66
|
+
MAX_PROPOSER_SLASHINGS,
|
|
67
|
+
MAX_ATTESTER_SLASHINGS,
|
|
68
|
+
MAX_ATTESTATIONS,
|
|
69
|
+
MAX_DEPOSITS,
|
|
70
|
+
MAX_VOLUNTARY_EXITS,
|
|
71
|
+
|
|
72
|
+
SYNC_COMMITTEE_SIZE,
|
|
73
|
+
EPOCHS_PER_SYNC_COMMITTEE_PERIOD,
|
|
74
|
+
INACTIVITY_PENALTY_QUOTIENT_ALTAIR,
|
|
75
|
+
MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR,
|
|
76
|
+
PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR,
|
|
77
|
+
MIN_SYNC_COMMITTEE_PARTICIPANTS,
|
|
78
|
+
UPDATE_TIMEOUT,
|
|
79
|
+
|
|
80
|
+
INACTIVITY_PENALTY_QUOTIENT_BELLATRIX,
|
|
81
|
+
MIN_SLASHING_PENALTY_QUOTIENT_BELLATRIX,
|
|
82
|
+
PROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX,
|
|
83
|
+
MAX_BYTES_PER_TRANSACTION,
|
|
84
|
+
MAX_TRANSACTIONS_PER_PAYLOAD,
|
|
85
|
+
BYTES_PER_LOGS_BLOOM,
|
|
86
|
+
MAX_EXTRA_DATA_BYTES,
|
|
87
|
+
|
|
88
|
+
MAX_BLS_TO_EXECUTION_CHANGES,
|
|
89
|
+
MAX_WITHDRAWALS_PER_PAYLOAD,
|
|
90
|
+
MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP,
|
|
91
|
+
|
|
92
|
+
FIELD_ELEMENTS_PER_BLOB,
|
|
93
|
+
MAX_BLOB_COMMITMENTS_PER_BLOCK,
|
|
94
|
+
KZG_COMMITMENT_INCLUSION_PROOF_DEPTH,
|
|
95
|
+
|
|
96
|
+
MAX_EFFECTIVE_BALANCE_ELECTRA,
|
|
97
|
+
MIN_ACTIVATION_BALANCE,
|
|
98
|
+
PENDING_DEPOSITS_LIMIT,
|
|
99
|
+
PENDING_PARTIAL_WITHDRAWALS_LIMIT,
|
|
100
|
+
PENDING_CONSOLIDATIONS_LIMIT,
|
|
101
|
+
MIN_SLASHING_PENALTY_QUOTIENT_ELECTRA,
|
|
102
|
+
MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD,
|
|
103
|
+
|
|
104
|
+
MAX_DEPOSIT_REQUESTS_PER_PAYLOAD,
|
|
105
|
+
MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD,
|
|
106
|
+
MAX_ATTESTER_SLASHINGS_ELECTRA,
|
|
107
|
+
MAX_ATTESTATIONS_ELECTRA,
|
|
108
|
+
MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP,
|
|
109
|
+
MAX_PENDING_DEPOSITS_PER_EPOCH,
|
|
110
|
+
WHISTLEBLOWER_REWARD_QUOTIENT_ELECTRA,
|
|
111
|
+
|
|
112
|
+
NUMBER_OF_COLUMNS,
|
|
113
|
+
CELLS_PER_EXT_BLOB,
|
|
114
|
+
FIELD_ELEMENTS_PER_CELL,
|
|
115
|
+
FIELD_ELEMENTS_PER_EXT_BLOB,
|
|
116
|
+
KZG_COMMITMENTS_INCLUSION_PROOF_DEPTH,
|
|
117
|
+
|
|
118
|
+
PTC_SIZE,
|
|
119
|
+
MAX_PAYLOAD_ATTESTATIONS,
|
|
120
|
+
BUILDER_PENDING_WITHDRAWALS_LIMIT,
|
|
121
|
+
} = activePreset;
|
|
122
|
+
|
|
123
|
+
////////////
|
|
124
|
+
// Constants
|
|
125
|
+
////////////
|
|
126
|
+
|
|
127
|
+
// Exported directly on the index for faster accessing without commonjs compiled star import shenanigans
|
|
128
|
+
|
|
129
|
+
// Misc
|
|
130
|
+
|
|
131
|
+
export const GENESIS_SLOT = 0;
|
|
132
|
+
export const GENESIS_EPOCH = 0;
|
|
133
|
+
export const FAR_FUTURE_EPOCH = Infinity;
|
|
134
|
+
export const BASE_REWARDS_PER_EPOCH = 4;
|
|
135
|
+
export const DEPOSIT_CONTRACT_TREE_DEPTH = 2 ** 5; // 32
|
|
136
|
+
export const JUSTIFICATION_BITS_LENGTH = 4;
|
|
137
|
+
export const ZERO_HASH = Buffer.alloc(32, 0);
|
|
138
|
+
export const ZERO_HASH_HEX = "0x" + "00".repeat(32);
|
|
139
|
+
|
|
140
|
+
// Withdrawal prefixes
|
|
141
|
+
// Since the prefixes are just 1 byte, we define and use them as number
|
|
142
|
+
export const BLS_WITHDRAWAL_PREFIX = 0;
|
|
143
|
+
export const ETH1_ADDRESS_WITHDRAWAL_PREFIX = 1;
|
|
144
|
+
export const COMPOUNDING_WITHDRAWAL_PREFIX = 2;
|
|
145
|
+
export const BUILDER_WITHDRAWAL_PREFIX = 3;
|
|
146
|
+
|
|
147
|
+
// Domain types
|
|
148
|
+
|
|
149
|
+
export const DOMAIN_BEACON_PROPOSER = Uint8Array.from([0, 0, 0, 0]);
|
|
150
|
+
export const DOMAIN_BEACON_ATTESTER = Uint8Array.from([1, 0, 0, 0]);
|
|
151
|
+
export const DOMAIN_RANDAO = Uint8Array.from([2, 0, 0, 0]);
|
|
152
|
+
export const DOMAIN_DEPOSIT = Uint8Array.from([3, 0, 0, 0]);
|
|
153
|
+
export const DOMAIN_VOLUNTARY_EXIT = Uint8Array.from([4, 0, 0, 0]);
|
|
154
|
+
export const DOMAIN_SELECTION_PROOF = Uint8Array.from([5, 0, 0, 0]);
|
|
155
|
+
export const DOMAIN_AGGREGATE_AND_PROOF = Uint8Array.from([6, 0, 0, 0]);
|
|
156
|
+
export const DOMAIN_SYNC_COMMITTEE = Uint8Array.from([7, 0, 0, 0]);
|
|
157
|
+
export const DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF = Uint8Array.from([8, 0, 0, 0]);
|
|
158
|
+
export const DOMAIN_CONTRIBUTION_AND_PROOF = Uint8Array.from([9, 0, 0, 0]);
|
|
159
|
+
export const DOMAIN_BLS_TO_EXECUTION_CHANGE = Uint8Array.from([10, 0, 0, 0]);
|
|
160
|
+
export const DOMAIN_BEACON_BUILDER = Uint8Array.from([27, 0, 0, 0]);
|
|
161
|
+
export const DOMAIN_PTC_ATTESTER = Uint8Array.from([12, 0, 0, 0]);
|
|
162
|
+
|
|
163
|
+
// Application specific domains
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* `DOMAIN_APPLICATION_MASK` reserves the rest of the bitspace in `DomainType` for application
|
|
167
|
+
* usage. This means for some `DomainType` `DOMAIN_SOME_APPLICATION`, `DOMAIN_SOME_APPLICATION
|
|
168
|
+
* & DOMAIN_APPLICATION_MASK` **MUST** be non-zero. This expression for any other `DomainType`
|
|
169
|
+
* in the consensus specs **MUST** be zero.
|
|
170
|
+
*/
|
|
171
|
+
export const DOMAIN_APPLICATION_MASK = Uint8Array.from([0, 0, 0, 1]);
|
|
172
|
+
export const DOMAIN_APPLICATION_BUILDER = Uint8Array.from([0, 0, 0, 1]);
|
|
173
|
+
|
|
174
|
+
// Participation flag indices
|
|
175
|
+
|
|
176
|
+
export const TIMELY_SOURCE_FLAG_INDEX = 0;
|
|
177
|
+
export const TIMELY_TARGET_FLAG_INDEX = 1;
|
|
178
|
+
export const TIMELY_HEAD_FLAG_INDEX = 2;
|
|
179
|
+
|
|
180
|
+
// Incentivization weights
|
|
181
|
+
|
|
182
|
+
export const TIMELY_SOURCE_WEIGHT = 14;
|
|
183
|
+
export const TIMELY_TARGET_WEIGHT = 26;
|
|
184
|
+
export const TIMELY_HEAD_WEIGHT = 14;
|
|
185
|
+
export const SYNC_REWARD_WEIGHT = 2;
|
|
186
|
+
export const PROPOSER_WEIGHT = 8;
|
|
187
|
+
export const WEIGHT_DENOMINATOR = 64;
|
|
188
|
+
|
|
189
|
+
// altair misc
|
|
190
|
+
|
|
191
|
+
export const PARTICIPATION_FLAG_WEIGHTS = [TIMELY_SOURCE_WEIGHT, TIMELY_TARGET_WEIGHT, TIMELY_HEAD_WEIGHT];
|
|
192
|
+
|
|
193
|
+
// phase0 validator
|
|
194
|
+
|
|
195
|
+
export const TARGET_AGGREGATORS_PER_COMMITTEE = 16;
|
|
196
|
+
export const RANDOM_SUBNETS_PER_VALIDATOR = 1;
|
|
197
|
+
export const EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION = 256;
|
|
198
|
+
/** Rationale: https://github.com/ethereum/consensus-specs/blob/v1.1.10/specs/phase0/p2p-interface.md#why-are-there-attestation_subnet_count-attestation-subnets */
|
|
199
|
+
export const ATTESTATION_SUBNET_COUNT = 64;
|
|
200
|
+
export const SUBNETS_PER_NODE = 2;
|
|
201
|
+
export const NODE_ID_BITS = 256;
|
|
202
|
+
export const ATTESTATION_SUBNET_PREFIX_BITS = Math.log2(ATTESTATION_SUBNET_COUNT);
|
|
203
|
+
export const EPOCHS_PER_SUBNET_SUBSCRIPTION = 256;
|
|
204
|
+
|
|
205
|
+
// altair validator
|
|
206
|
+
|
|
207
|
+
export const TARGET_AGGREGATORS_PER_SYNC_SUBCOMMITTEE = 16;
|
|
208
|
+
export const SYNC_COMMITTEE_SUBNET_COUNT = 4;
|
|
209
|
+
export const SYNC_COMMITTEE_SUBNET_SIZE = Math.floor(SYNC_COMMITTEE_SIZE / SYNC_COMMITTEE_SUBNET_COUNT);
|
|
210
|
+
|
|
211
|
+
// Lightclient pre-computed
|
|
212
|
+
/**
|
|
213
|
+
* ```ts
|
|
214
|
+
* config.types.altair.BeaconState.getPathGindex(["finalizedCheckpoint", "root"])
|
|
215
|
+
* ```
|
|
216
|
+
*/
|
|
217
|
+
export const FINALIZED_ROOT_GINDEX = 105;
|
|
218
|
+
/**
|
|
219
|
+
* ```ts
|
|
220
|
+
* Math.floor(Math.log2(FINALIZED_ROOT_GINDEX))
|
|
221
|
+
* ```
|
|
222
|
+
*/
|
|
223
|
+
export const FINALIZED_ROOT_DEPTH = 6;
|
|
224
|
+
export const FINALIZED_ROOT_INDEX = 41;
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* ```ts
|
|
228
|
+
* types.ssz.capella.BeaconBlockBody.getPathInfo(['executionPayload']).gindex
|
|
229
|
+
* ```
|
|
230
|
+
*/
|
|
231
|
+
export const BLOCK_BODY_EXECUTION_PAYLOAD_GINDEX = 25;
|
|
232
|
+
/**
|
|
233
|
+
* ```ts
|
|
234
|
+
* Math.floor(Math.log2(EXECUTION_PAYLOAD_GINDEX))
|
|
235
|
+
* ```
|
|
236
|
+
*/
|
|
237
|
+
export const BLOCK_BODY_EXECUTION_PAYLOAD_DEPTH = 4;
|
|
238
|
+
export const BLOCK_BODY_EXECUTION_PAYLOAD_INDEX = 9;
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* ```ts
|
|
242
|
+
* config.types.altair.BeaconState.getPathGindex(["currentSyncCommittee"])
|
|
243
|
+
* ```
|
|
244
|
+
*/
|
|
245
|
+
export const CURRENT_SYNC_COMMITTEE_GINDEX = 54;
|
|
246
|
+
/**
|
|
247
|
+
* ```ts
|
|
248
|
+
* Math.floor(Math.log2(CURRENT_SYNC_COMMITTEE_GINDEX))
|
|
249
|
+
* ```
|
|
250
|
+
*/
|
|
251
|
+
export const CURRENT_SYNC_COMMITTEE_DEPTH = 5;
|
|
252
|
+
export const CURRENT_SYNC_COMMITTEE_INDEX = 22;
|
|
253
|
+
/**
|
|
254
|
+
* ```ts
|
|
255
|
+
* config.types.altair.BeaconState.getPathGindex(["nextSyncCommittee"])
|
|
256
|
+
* ```
|
|
257
|
+
*/
|
|
258
|
+
export const NEXT_SYNC_COMMITTEE_GINDEX = 55;
|
|
259
|
+
/**
|
|
260
|
+
* ```ts
|
|
261
|
+
* Math.floor(Math.log2(NEXT_SYNC_COMMITTEE_GINDEX))
|
|
262
|
+
* ```
|
|
263
|
+
*/
|
|
264
|
+
export const NEXT_SYNC_COMMITTEE_DEPTH = 5;
|
|
265
|
+
export const NEXT_SYNC_COMMITTEE_INDEX = 23;
|
|
266
|
+
export const MAX_REQUEST_LIGHT_CLIENT_UPDATES = 128;
|
|
267
|
+
export const MAX_REQUEST_LIGHT_CLIENT_COMMITTEE_HASHES = 128;
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Optimistic sync
|
|
271
|
+
*/
|
|
272
|
+
export const SAFE_SLOTS_TO_IMPORT_OPTIMISTICALLY = 128;
|
|
273
|
+
/** @deprecated */
|
|
274
|
+
export const INTERVALS_PER_SLOT = 3;
|
|
275
|
+
export const BASIS_POINTS = 10000;
|
|
276
|
+
|
|
277
|
+
// EIP-4844: Crypto const
|
|
278
|
+
export const BYTES_PER_FIELD_ELEMENT = 32;
|
|
279
|
+
export const BLOB_TX_TYPE = 0x03;
|
|
280
|
+
export const VERSIONED_HASH_VERSION_KZG = 0x01;
|
|
281
|
+
|
|
282
|
+
// ssz.deneb.BeaconBlockBody.getPathInfo(['blobKzgCommitments',0]).gindex
|
|
283
|
+
export const KZG_COMMITMENT_GINDEX0 = 221184;
|
|
284
|
+
export const KZG_COMMITMENT_SUBTREE_INDEX0 = KZG_COMMITMENT_GINDEX0 - 2 ** KZG_COMMITMENT_INCLUSION_PROOF_DEPTH;
|
|
285
|
+
|
|
286
|
+
// ssz.deneb.BlobSidecars.elementType.fixedSize
|
|
287
|
+
export const BLOBSIDECAR_FIXED_SIZE = 131928;
|
|
288
|
+
|
|
289
|
+
// Electra Misc
|
|
290
|
+
export const UNSET_DEPOSIT_REQUESTS_START_INDEX = 2n ** 64n - 1n;
|
|
291
|
+
export const FULL_EXIT_REQUEST_AMOUNT = 0;
|
|
292
|
+
export const FINALIZED_ROOT_GINDEX_ELECTRA = 169;
|
|
293
|
+
export const FINALIZED_ROOT_DEPTH_ELECTRA = 7;
|
|
294
|
+
export const FINALIZED_ROOT_INDEX_ELECTRA = 41;
|
|
295
|
+
export const CURRENT_SYNC_COMMITTEE_GINDEX_ELECTRA = 86;
|
|
296
|
+
export const CURRENT_SYNC_COMMITTEE_DEPTH_ELECTRA = 6;
|
|
297
|
+
export const CURRENT_SYNC_COMMITTEE_INDEX_ELECTRA = 22;
|
|
298
|
+
export const NEXT_SYNC_COMMITTEE_GINDEX_ELECTRA = 87;
|
|
299
|
+
export const NEXT_SYNC_COMMITTEE_DEPTH_ELECTRA = 6;
|
|
300
|
+
export const NEXT_SYNC_COMMITTEE_INDEX_ELECTRA = 23;
|
|
301
|
+
export const DEPOSIT_REQUEST_TYPE = 0x00;
|
|
302
|
+
export const WITHDRAWAL_REQUEST_TYPE = 0x01;
|
|
303
|
+
export const CONSOLIDATION_REQUEST_TYPE = 0x02;
|
|
304
|
+
|
|
305
|
+
export const BYTES_PER_CELL = FIELD_ELEMENTS_PER_CELL * BYTES_PER_FIELD_ELEMENT;
|
|
306
|
+
|
|
307
|
+
// ssz.fulu.BeaconBlockBody.getPathInfo(['blobKzgCommitments']).gindex
|
|
308
|
+
export const KZG_COMMITMENTS_GINDEX = 27;
|
|
309
|
+
export const KZG_COMMITMENTS_SUBTREE_INDEX = KZG_COMMITMENTS_GINDEX - 2 ** KZG_COMMITMENTS_INCLUSION_PROOF_DEPTH;
|
|
310
|
+
|
|
311
|
+
// Gloas Misc
|
|
312
|
+
export const BUILDER_PAYMENT_THRESHOLD_NUMERATOR = 6;
|
|
313
|
+
export const BUILDER_PAYMENT_THRESHOLD_DENOMINATOR = 10;
|
package/src/json.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import {BeaconPreset, beaconPresetTypes} from "./types.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Render BeaconPreset to JSON strings
|
|
5
|
+
* - Numbers: Render as a quoted decimal string
|
|
6
|
+
*/
|
|
7
|
+
export function presetToJson(preset: BeaconPreset): Record<string, string> {
|
|
8
|
+
const json: Record<string, string> = {};
|
|
9
|
+
|
|
10
|
+
for (const key of Object.keys(preset) as (keyof BeaconPreset)[]) {
|
|
11
|
+
json[key] = serializePresetValue(preset[key]);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
return json;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Type Wrapper to ensure that all values of BeaconPreset are number.
|
|
19
|
+
* If there are more types, expand this function with a type switch
|
|
20
|
+
*/
|
|
21
|
+
function serializePresetValue(value: number): string {
|
|
22
|
+
return value.toString(10);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Parse JSON strings of BeaconPreset
|
|
27
|
+
* - Numbers: Convert quoted decimal string to number
|
|
28
|
+
*/
|
|
29
|
+
export function presetFromJson(json: Record<string, unknown>): Partial<BeaconPreset> {
|
|
30
|
+
const beaconPreset = {} as BeaconPreset;
|
|
31
|
+
|
|
32
|
+
for (const key of Object.keys(beaconPresetTypes) as (keyof BeaconPreset)[]) {
|
|
33
|
+
const value = json[key];
|
|
34
|
+
if (value !== undefined) {
|
|
35
|
+
beaconPreset[key] = deserializePresetValue(value, key);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return beaconPreset;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Ensure that all values of parsed BeaconPreset are numbers
|
|
44
|
+
* If there are more types, expand this function with a type switch
|
|
45
|
+
*/
|
|
46
|
+
function deserializePresetValue(valueStr: unknown, keyName: string): number {
|
|
47
|
+
if (typeof valueStr !== "string") {
|
|
48
|
+
throw Error(`Invalid ${keyName} value ${valueStr as string} expected string`);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const value = parseInt(valueStr, 10);
|
|
52
|
+
|
|
53
|
+
if (Number.isNaN(value)) {
|
|
54
|
+
throw Error(`Invalid ${keyName} value ${valueStr} expected number`);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return value;
|
|
58
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import {BeaconPreset} from "../types.js";
|
|
2
|
+
import {mainnetPreset} from "./mainnet.js";
|
|
3
|
+
|
|
4
|
+
// Gnosis preset
|
|
5
|
+
// https://github.com/gnosischain/specs/tree/master/consensus/preset/gnosis
|
|
6
|
+
|
|
7
|
+
export const gnosisPreset: BeaconPreset = {
|
|
8
|
+
...mainnetPreset,
|
|
9
|
+
|
|
10
|
+
/// NOTE: Only add diff values
|
|
11
|
+
|
|
12
|
+
// phase0
|
|
13
|
+
BASE_REWARD_FACTOR: 25,
|
|
14
|
+
SLOTS_PER_EPOCH: 16,
|
|
15
|
+
|
|
16
|
+
// altair
|
|
17
|
+
EPOCHS_PER_SYNC_COMMITTEE_PERIOD: 512,
|
|
18
|
+
|
|
19
|
+
// capella
|
|
20
|
+
MAX_WITHDRAWALS_PER_PAYLOAD: 8,
|
|
21
|
+
MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP: 8192,
|
|
22
|
+
};
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import {BeaconPreset} from "../types.js";
|
|
2
|
+
|
|
3
|
+
// Mainnet preset
|
|
4
|
+
// https://github.com/ethereum/consensus-specs/tree/dev/presets/mainnet
|
|
5
|
+
|
|
6
|
+
export const mainnetPreset: BeaconPreset = {
|
|
7
|
+
// Misc
|
|
8
|
+
// ---------------------------------------------------------------
|
|
9
|
+
// 2**6 (= 64)
|
|
10
|
+
MAX_COMMITTEES_PER_SLOT: 64,
|
|
11
|
+
// 2**7 (= 128)
|
|
12
|
+
TARGET_COMMITTEE_SIZE: 128,
|
|
13
|
+
// 2**11 (= 2,048)
|
|
14
|
+
MAX_VALIDATORS_PER_COMMITTEE: 2048,
|
|
15
|
+
// See issue 563
|
|
16
|
+
SHUFFLE_ROUND_COUNT: 90,
|
|
17
|
+
// 4
|
|
18
|
+
HYSTERESIS_QUOTIENT: 4,
|
|
19
|
+
// 1 (minus 0.25)
|
|
20
|
+
HYSTERESIS_DOWNWARD_MULTIPLIER: 1,
|
|
21
|
+
// 5 (plus 1.25)
|
|
22
|
+
HYSTERESIS_UPWARD_MULTIPLIER: 5,
|
|
23
|
+
|
|
24
|
+
// Gwei values
|
|
25
|
+
// ---------------------------------------------------------------
|
|
26
|
+
// 2**0 * 10**9 (= 1,000,000,000) Gwei
|
|
27
|
+
MIN_DEPOSIT_AMOUNT: 1000000000,
|
|
28
|
+
// 2**5 * 10**9 (= 32,000,000,000) Gwei
|
|
29
|
+
MAX_EFFECTIVE_BALANCE: 32000000000,
|
|
30
|
+
// 2**0 * 10**9 (= 1,000,000,000) Gwei
|
|
31
|
+
EFFECTIVE_BALANCE_INCREMENT: 1000000000,
|
|
32
|
+
|
|
33
|
+
// Time parameters
|
|
34
|
+
// ---------------------------------------------------------------
|
|
35
|
+
// 2**0 (= 1) slots 12 seconds
|
|
36
|
+
MIN_ATTESTATION_INCLUSION_DELAY: 1,
|
|
37
|
+
// 2**5 (= 32) slots 6.4 minutes
|
|
38
|
+
SLOTS_PER_EPOCH: 32,
|
|
39
|
+
// 2**0 (= 1) epochs 6.4 minutes
|
|
40
|
+
MIN_SEED_LOOKAHEAD: 1,
|
|
41
|
+
// 2**2 (= 4) epochs 25.6 minutes
|
|
42
|
+
MAX_SEED_LOOKAHEAD: 4,
|
|
43
|
+
// 2**6 (= 64) epochs ~6.8 hours
|
|
44
|
+
EPOCHS_PER_ETH1_VOTING_PERIOD: 64,
|
|
45
|
+
// 2**13 (= 8,192) slots ~13 hours
|
|
46
|
+
SLOTS_PER_HISTORICAL_ROOT: 8192,
|
|
47
|
+
// 2**2 (= 4) epochs 25.6 minutes
|
|
48
|
+
MIN_EPOCHS_TO_INACTIVITY_PENALTY: 4,
|
|
49
|
+
|
|
50
|
+
// State vector lengths
|
|
51
|
+
// ---------------------------------------------------------------
|
|
52
|
+
// 2**16 (= 65,536) epochs ~0.8 years
|
|
53
|
+
EPOCHS_PER_HISTORICAL_VECTOR: 65536,
|
|
54
|
+
// 2**13 (= 8,192) epochs ~36 days
|
|
55
|
+
EPOCHS_PER_SLASHINGS_VECTOR: 8192,
|
|
56
|
+
// 2**24 (= 16,777,216) historical roots, ~26,131 years
|
|
57
|
+
HISTORICAL_ROOTS_LIMIT: 16777216,
|
|
58
|
+
// 2**40 (= 1,099,511,627,776) validator spots
|
|
59
|
+
VALIDATOR_REGISTRY_LIMIT: 1099511627776,
|
|
60
|
+
|
|
61
|
+
// Reward and penalty quotients
|
|
62
|
+
// ---------------------------------------------------------------
|
|
63
|
+
// 2**6 (= 64)
|
|
64
|
+
BASE_REWARD_FACTOR: 64,
|
|
65
|
+
// 2**9 (= 512)
|
|
66
|
+
WHISTLEBLOWER_REWARD_QUOTIENT: 512,
|
|
67
|
+
// 2**3 (= 8)
|
|
68
|
+
PROPOSER_REWARD_QUOTIENT: 8,
|
|
69
|
+
// 2**26 (= 67,108,864)
|
|
70
|
+
INACTIVITY_PENALTY_QUOTIENT: 67108864,
|
|
71
|
+
// 2**7 (= 128) (lower safety margin at Phase 0 genesis)
|
|
72
|
+
MIN_SLASHING_PENALTY_QUOTIENT: 128,
|
|
73
|
+
PROPORTIONAL_SLASHING_MULTIPLIER: 1,
|
|
74
|
+
|
|
75
|
+
// Max operations per block
|
|
76
|
+
// ---------------------------------------------------------------
|
|
77
|
+
// 2**4 (= 16)
|
|
78
|
+
MAX_PROPOSER_SLASHINGS: 16,
|
|
79
|
+
// 2**1 (= 2)
|
|
80
|
+
MAX_ATTESTER_SLASHINGS: 2,
|
|
81
|
+
// 2**7 (= 128)
|
|
82
|
+
MAX_ATTESTATIONS: 128,
|
|
83
|
+
// 2**4 (= 16)
|
|
84
|
+
MAX_DEPOSITS: 16,
|
|
85
|
+
// 2**4 (= 16)
|
|
86
|
+
MAX_VOLUNTARY_EXITS: 16,
|
|
87
|
+
|
|
88
|
+
// ALTAIR
|
|
89
|
+
/////////
|
|
90
|
+
SYNC_COMMITTEE_SIZE: 512,
|
|
91
|
+
EPOCHS_PER_SYNC_COMMITTEE_PERIOD: 256,
|
|
92
|
+
INACTIVITY_PENALTY_QUOTIENT_ALTAIR: 50331648,
|
|
93
|
+
MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR: 64,
|
|
94
|
+
PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR: 2,
|
|
95
|
+
MIN_SYNC_COMMITTEE_PARTICIPANTS: 1,
|
|
96
|
+
UPDATE_TIMEOUT: 8192,
|
|
97
|
+
|
|
98
|
+
// BELLATRIX
|
|
99
|
+
////////////
|
|
100
|
+
INACTIVITY_PENALTY_QUOTIENT_BELLATRIX: 16777216,
|
|
101
|
+
MIN_SLASHING_PENALTY_QUOTIENT_BELLATRIX: 32,
|
|
102
|
+
PROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX: 3,
|
|
103
|
+
MAX_BYTES_PER_TRANSACTION: 1073741824,
|
|
104
|
+
MAX_TRANSACTIONS_PER_PAYLOAD: 1048576,
|
|
105
|
+
BYTES_PER_LOGS_BLOOM: 256,
|
|
106
|
+
MAX_EXTRA_DATA_BYTES: 32,
|
|
107
|
+
|
|
108
|
+
// CAPELLA
|
|
109
|
+
//////////
|
|
110
|
+
MAX_BLS_TO_EXECUTION_CHANGES: 16,
|
|
111
|
+
MAX_WITHDRAWALS_PER_PAYLOAD: 16,
|
|
112
|
+
MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP: 16384,
|
|
113
|
+
|
|
114
|
+
// DENEB
|
|
115
|
+
///////////
|
|
116
|
+
FIELD_ELEMENTS_PER_BLOB: 4096,
|
|
117
|
+
MAX_BLOB_COMMITMENTS_PER_BLOCK: 4096,
|
|
118
|
+
KZG_COMMITMENT_INCLUSION_PROOF_DEPTH: 17,
|
|
119
|
+
|
|
120
|
+
// ELECTRA
|
|
121
|
+
MAX_DEPOSIT_REQUESTS_PER_PAYLOAD: 8192,
|
|
122
|
+
MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD: 16,
|
|
123
|
+
MAX_ATTESTER_SLASHINGS_ELECTRA: 1,
|
|
124
|
+
MAX_ATTESTATIONS_ELECTRA: 8,
|
|
125
|
+
MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP: 8,
|
|
126
|
+
MAX_PENDING_DEPOSITS_PER_EPOCH: 16,
|
|
127
|
+
// 2**11 * 10**9 (= 2,048,000,000,000) Gwei
|
|
128
|
+
MAX_EFFECTIVE_BALANCE_ELECTRA: 2048000000000,
|
|
129
|
+
MIN_SLASHING_PENALTY_QUOTIENT_ELECTRA: 4096,
|
|
130
|
+
MIN_ACTIVATION_BALANCE: 32000000000,
|
|
131
|
+
PENDING_DEPOSITS_LIMIT: 134217728,
|
|
132
|
+
PENDING_PARTIAL_WITHDRAWALS_LIMIT: 134217728,
|
|
133
|
+
PENDING_CONSOLIDATIONS_LIMIT: 262144,
|
|
134
|
+
MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD: 2,
|
|
135
|
+
WHISTLEBLOWER_REWARD_QUOTIENT_ELECTRA: 4096,
|
|
136
|
+
|
|
137
|
+
// FULU
|
|
138
|
+
///////////
|
|
139
|
+
NUMBER_OF_COLUMNS: 128,
|
|
140
|
+
CELLS_PER_EXT_BLOB: 128,
|
|
141
|
+
FIELD_ELEMENTS_PER_CELL: 64,
|
|
142
|
+
FIELD_ELEMENTS_PER_EXT_BLOB: 8192,
|
|
143
|
+
KZG_COMMITMENTS_INCLUSION_PROOF_DEPTH: 4,
|
|
144
|
+
|
|
145
|
+
// GLOAS
|
|
146
|
+
PTC_SIZE: 512,
|
|
147
|
+
MAX_PAYLOAD_ATTESTATIONS: 4,
|
|
148
|
+
BUILDER_PENDING_WITHDRAWALS_LIMIT: 1048576, // 2**20
|
|
149
|
+
};
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import {BeaconPreset} from "../types.js";
|
|
2
|
+
|
|
3
|
+
// Minimal preset
|
|
4
|
+
// https://github.com/ethereum/consensus-specs/tree/dev/presets/minimal
|
|
5
|
+
|
|
6
|
+
export const minimalPreset: BeaconPreset = {
|
|
7
|
+
// Misc
|
|
8
|
+
// ---------------------------------------------------------------
|
|
9
|
+
// [customized] Just 4 committees for slot for testing purposes
|
|
10
|
+
MAX_COMMITTEES_PER_SLOT: 4,
|
|
11
|
+
// [customized] unsecure, but fast
|
|
12
|
+
TARGET_COMMITTEE_SIZE: 4,
|
|
13
|
+
// 2**11 (= 2,048)
|
|
14
|
+
MAX_VALIDATORS_PER_COMMITTEE: 2048,
|
|
15
|
+
// [customized] Faster, but unsecure.
|
|
16
|
+
SHUFFLE_ROUND_COUNT: 10,
|
|
17
|
+
// 4
|
|
18
|
+
HYSTERESIS_QUOTIENT: 4,
|
|
19
|
+
// 1 (minus 0.25)
|
|
20
|
+
HYSTERESIS_DOWNWARD_MULTIPLIER: 1,
|
|
21
|
+
// 5 (plus 1.25)
|
|
22
|
+
HYSTERESIS_UPWARD_MULTIPLIER: 5,
|
|
23
|
+
|
|
24
|
+
// Gwei values
|
|
25
|
+
// ---------------------------------------------------------------
|
|
26
|
+
// 2**0 * 10**9 (= 1,000,000,000) Gwei
|
|
27
|
+
MIN_DEPOSIT_AMOUNT: 1000000000,
|
|
28
|
+
// 2**5 * 10**9 (= 32,000,000,000) Gwei
|
|
29
|
+
MAX_EFFECTIVE_BALANCE: 32000000000,
|
|
30
|
+
// 2**0 * 10**9 (= 1,000,000,000) Gwei
|
|
31
|
+
EFFECTIVE_BALANCE_INCREMENT: 1000000000,
|
|
32
|
+
|
|
33
|
+
// Time parameters
|
|
34
|
+
// ---------------------------------------------------------------
|
|
35
|
+
// 2**0 (= 1) slots 6 seconds
|
|
36
|
+
MIN_ATTESTATION_INCLUSION_DELAY: 1,
|
|
37
|
+
// [customized] fast epochs
|
|
38
|
+
SLOTS_PER_EPOCH: 8,
|
|
39
|
+
// 2**0 (= 1) epochs
|
|
40
|
+
MIN_SEED_LOOKAHEAD: 1,
|
|
41
|
+
// 2**2 (= 4) epochs
|
|
42
|
+
MAX_SEED_LOOKAHEAD: 4,
|
|
43
|
+
// [customized] higher frequency new deposits from eth1 for testing
|
|
44
|
+
EPOCHS_PER_ETH1_VOTING_PERIOD: 4,
|
|
45
|
+
// [customized] smaller state
|
|
46
|
+
SLOTS_PER_HISTORICAL_ROOT: 64,
|
|
47
|
+
// 2**2 (= 4) epochs
|
|
48
|
+
MIN_EPOCHS_TO_INACTIVITY_PENALTY: 4,
|
|
49
|
+
|
|
50
|
+
// State vector lengths
|
|
51
|
+
// ---------------------------------------------------------------
|
|
52
|
+
// [customized] smaller state
|
|
53
|
+
EPOCHS_PER_HISTORICAL_VECTOR: 64,
|
|
54
|
+
// [customized] smaller state
|
|
55
|
+
EPOCHS_PER_SLASHINGS_VECTOR: 64,
|
|
56
|
+
// 2**24 (= 16,777,216) historical roots
|
|
57
|
+
HISTORICAL_ROOTS_LIMIT: 16777216,
|
|
58
|
+
// 2**40 (= 1,099,511,627,776) validator spots
|
|
59
|
+
VALIDATOR_REGISTRY_LIMIT: 1099511627776,
|
|
60
|
+
|
|
61
|
+
// Reward and penalty quotients
|
|
62
|
+
// ---------------------------------------------------------------
|
|
63
|
+
// 2**6 (= 64)
|
|
64
|
+
BASE_REWARD_FACTOR: 64,
|
|
65
|
+
// 2**9 (= 512)
|
|
66
|
+
WHISTLEBLOWER_REWARD_QUOTIENT: 512,
|
|
67
|
+
// 2**3 (= 8)
|
|
68
|
+
PROPOSER_REWARD_QUOTIENT: 8,
|
|
69
|
+
// [customized] 2**25 (= 33,554,432)
|
|
70
|
+
INACTIVITY_PENALTY_QUOTIENT: 33554432,
|
|
71
|
+
// [customized] 2**6 (= 64)
|
|
72
|
+
MIN_SLASHING_PENALTY_QUOTIENT: 64,
|
|
73
|
+
// [customized] 2 (lower safety margin than Phase 0 genesis but different than mainnet config for testing)
|
|
74
|
+
PROPORTIONAL_SLASHING_MULTIPLIER: 2,
|
|
75
|
+
|
|
76
|
+
// Max operations per block
|
|
77
|
+
// ---------------------------------------------------------------
|
|
78
|
+
// 2**4 (= 16)
|
|
79
|
+
MAX_PROPOSER_SLASHINGS: 16,
|
|
80
|
+
// 2**1 (= 2)
|
|
81
|
+
MAX_ATTESTER_SLASHINGS: 2,
|
|
82
|
+
// 2**7 (= 128)
|
|
83
|
+
MAX_ATTESTATIONS: 128,
|
|
84
|
+
// 2**4 (= 16)
|
|
85
|
+
MAX_DEPOSITS: 16,
|
|
86
|
+
// 2**4 (= 16)
|
|
87
|
+
MAX_VOLUNTARY_EXITS: 16,
|
|
88
|
+
|
|
89
|
+
// ALTAIR
|
|
90
|
+
/////////
|
|
91
|
+
SYNC_COMMITTEE_SIZE: 32,
|
|
92
|
+
EPOCHS_PER_SYNC_COMMITTEE_PERIOD: 8,
|
|
93
|
+
INACTIVITY_PENALTY_QUOTIENT_ALTAIR: 50331648,
|
|
94
|
+
MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR: 64,
|
|
95
|
+
PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR: 2,
|
|
96
|
+
MIN_SYNC_COMMITTEE_PARTICIPANTS: 1,
|
|
97
|
+
UPDATE_TIMEOUT: 64,
|
|
98
|
+
|
|
99
|
+
// BELLATRIX
|
|
100
|
+
////////////
|
|
101
|
+
INACTIVITY_PENALTY_QUOTIENT_BELLATRIX: 16777216,
|
|
102
|
+
MIN_SLASHING_PENALTY_QUOTIENT_BELLATRIX: 32,
|
|
103
|
+
PROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX: 3,
|
|
104
|
+
MAX_BYTES_PER_TRANSACTION: 1073741824,
|
|
105
|
+
MAX_TRANSACTIONS_PER_PAYLOAD: 1048576,
|
|
106
|
+
BYTES_PER_LOGS_BLOOM: 256,
|
|
107
|
+
MAX_EXTRA_DATA_BYTES: 32,
|
|
108
|
+
|
|
109
|
+
// CAPELLA
|
|
110
|
+
//////////
|
|
111
|
+
MAX_BLS_TO_EXECUTION_CHANGES: 16,
|
|
112
|
+
MAX_WITHDRAWALS_PER_PAYLOAD: 4,
|
|
113
|
+
MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP: 16,
|
|
114
|
+
|
|
115
|
+
// DENEB
|
|
116
|
+
///////////
|
|
117
|
+
FIELD_ELEMENTS_PER_BLOB: 4096,
|
|
118
|
+
|
|
119
|
+
// ELECTRA
|
|
120
|
+
MAX_DEPOSIT_REQUESTS_PER_PAYLOAD: 8192,
|
|
121
|
+
MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD: 16,
|
|
122
|
+
MAX_ATTESTER_SLASHINGS_ELECTRA: 1,
|
|
123
|
+
MAX_ATTESTATIONS_ELECTRA: 8,
|
|
124
|
+
MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP: 2,
|
|
125
|
+
MAX_PENDING_DEPOSITS_PER_EPOCH: 16,
|
|
126
|
+
// 2**11 * 10**9 (= 2,048,000,000,000) Gwei
|
|
127
|
+
MAX_EFFECTIVE_BALANCE_ELECTRA: 2048000000000,
|
|
128
|
+
MIN_SLASHING_PENALTY_QUOTIENT_ELECTRA: 4096,
|
|
129
|
+
MIN_ACTIVATION_BALANCE: 32000000000,
|
|
130
|
+
PENDING_DEPOSITS_LIMIT: 134217728,
|
|
131
|
+
PENDING_PARTIAL_WITHDRAWALS_LIMIT: 64,
|
|
132
|
+
PENDING_CONSOLIDATIONS_LIMIT: 64,
|
|
133
|
+
MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD: 2,
|
|
134
|
+
WHISTLEBLOWER_REWARD_QUOTIENT_ELECTRA: 4096,
|
|
135
|
+
MAX_BLOB_COMMITMENTS_PER_BLOCK: 4096,
|
|
136
|
+
KZG_COMMITMENT_INCLUSION_PROOF_DEPTH: 17,
|
|
137
|
+
|
|
138
|
+
// FULU
|
|
139
|
+
///////////
|
|
140
|
+
NUMBER_OF_COLUMNS: 128,
|
|
141
|
+
CELLS_PER_EXT_BLOB: 128,
|
|
142
|
+
FIELD_ELEMENTS_PER_CELL: 64,
|
|
143
|
+
FIELD_ELEMENTS_PER_EXT_BLOB: 8192,
|
|
144
|
+
KZG_COMMITMENTS_INCLUSION_PROOF_DEPTH: 4,
|
|
145
|
+
|
|
146
|
+
// GLOAS
|
|
147
|
+
PTC_SIZE: 2,
|
|
148
|
+
MAX_PAYLOAD_ATTESTATIONS: 4,
|
|
149
|
+
BUILDER_PENDING_WITHDRAWALS_LIMIT: 1048576, // 2**20
|
|
150
|
+
};
|