@lodestar/beacon-node 1.39.0-dev.882891d89c → 1.39.0-dev.aceb5b7416

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 (119) hide show
  1. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  2. package/lib/chain/blocks/verifyBlock.js +1 -1
  3. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  4. package/lib/chain/blocks/verifyBlocksSignatures.d.ts +1 -2
  5. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  6. package/lib/chain/blocks/verifyBlocksSignatures.js +2 -2
  7. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  8. package/lib/chain/chain.d.ts.map +1 -1
  9. package/lib/chain/chain.js +4 -6
  10. package/lib/chain/chain.js.map +1 -1
  11. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +4 -4
  12. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  13. package/lib/chain/opPools/aggregatedAttestationPool.js +4 -4
  14. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  15. package/lib/chain/opPools/opPool.d.ts +0 -3
  16. package/lib/chain/opPools/opPool.d.ts.map +1 -1
  17. package/lib/chain/opPools/opPool.js +8 -9
  18. package/lib/chain/opPools/opPool.js.map +1 -1
  19. package/lib/chain/produceBlock/produceBlockBody.js +2 -2
  20. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  21. package/lib/chain/rewards/attestationsRewards.d.ts +1 -2
  22. package/lib/chain/rewards/attestationsRewards.d.ts.map +1 -1
  23. package/lib/chain/rewards/attestationsRewards.js +8 -8
  24. package/lib/chain/rewards/attestationsRewards.js.map +1 -1
  25. package/lib/chain/rewards/blockRewards.d.ts +1 -2
  26. package/lib/chain/rewards/blockRewards.d.ts.map +1 -1
  27. package/lib/chain/rewards/blockRewards.js +5 -5
  28. package/lib/chain/rewards/blockRewards.js.map +1 -1
  29. package/lib/chain/rewards/syncCommitteeRewards.d.ts +1 -2
  30. package/lib/chain/rewards/syncCommitteeRewards.d.ts.map +1 -1
  31. package/lib/chain/rewards/syncCommitteeRewards.js +2 -2
  32. package/lib/chain/rewards/syncCommitteeRewards.js.map +1 -1
  33. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +1 -4
  34. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  35. package/lib/chain/stateCache/persistentCheckpointsCache.js +2 -4
  36. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  37. package/lib/chain/validation/attesterSlashing.js +1 -1
  38. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  39. package/lib/chain/validation/block.js +1 -1
  40. package/lib/chain/validation/block.js.map +1 -1
  41. package/lib/chain/validation/blsToExecutionChange.js +1 -1
  42. package/lib/chain/validation/proposerSlashing.js +1 -1
  43. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  44. package/lib/chain/validation/signatureSets/aggregateAndProof.js +1 -1
  45. package/lib/chain/validation/signatureSets/aggregateAndProof.js.map +1 -1
  46. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts +1 -2
  47. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -1
  48. package/lib/chain/validation/signatureSets/contributionAndProof.js +2 -2
  49. package/lib/chain/validation/signatureSets/contributionAndProof.js.map +1 -1
  50. package/lib/chain/validation/signatureSets/syncCommittee.d.ts +1 -2
  51. package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -1
  52. package/lib/chain/validation/signatureSets/syncCommittee.js +2 -2
  53. package/lib/chain/validation/signatureSets/syncCommittee.js.map +1 -1
  54. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts +1 -2
  55. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -1
  56. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js +2 -2
  57. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js.map +1 -1
  58. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts +1 -2
  59. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -1
  60. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js +2 -1
  61. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js.map +1 -1
  62. package/lib/chain/validation/syncCommittee.js +1 -1
  63. package/lib/chain/validation/syncCommittee.js.map +1 -1
  64. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -1
  65. package/lib/chain/validation/syncCommitteeContributionAndProof.js +3 -3
  66. package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
  67. package/lib/chain/validation/voluntaryExit.js +1 -1
  68. package/lib/chain/validation/voluntaryExit.js.map +1 -1
  69. package/lib/db/beacon.d.ts +0 -2
  70. package/lib/db/beacon.d.ts.map +1 -1
  71. package/lib/db/beacon.js +0 -32
  72. package/lib/db/beacon.js.map +1 -1
  73. package/lib/db/buckets.d.ts +0 -12
  74. package/lib/db/buckets.d.ts.map +1 -1
  75. package/lib/db/buckets.js +6 -12
  76. package/lib/db/buckets.js.map +1 -1
  77. package/lib/db/interface.d.ts +0 -1
  78. package/lib/db/interface.d.ts.map +1 -1
  79. package/lib/db/repositories/blockArchiveIndex.d.ts +2 -2
  80. package/lib/db/repositories/blockArchiveIndex.d.ts.map +1 -1
  81. package/lib/node/nodejs.d.ts.map +1 -1
  82. package/lib/node/nodejs.js +0 -10
  83. package/lib/node/nodejs.js.map +1 -1
  84. package/lib/sync/backfill/backfill.d.ts.map +1 -1
  85. package/lib/sync/backfill/backfill.js +4 -2
  86. package/lib/sync/backfill/backfill.js.map +1 -1
  87. package/lib/sync/backfill/verify.d.ts +1 -1
  88. package/lib/sync/backfill/verify.d.ts.map +1 -1
  89. package/lib/sync/backfill/verify.js +2 -2
  90. package/lib/sync/backfill/verify.js.map +1 -1
  91. package/package.json +14 -14
  92. package/src/chain/blocks/verifyBlock.ts +0 -1
  93. package/src/chain/blocks/verifyBlocksSignatures.ts +1 -3
  94. package/src/chain/chain.ts +4 -6
  95. package/src/chain/opPools/aggregatedAttestationPool.ts +7 -7
  96. package/src/chain/opPools/opPool.ts +8 -8
  97. package/src/chain/produceBlock/produceBlockBody.ts +2 -2
  98. package/src/chain/rewards/attestationsRewards.ts +4 -13
  99. package/src/chain/rewards/blockRewards.ts +3 -6
  100. package/src/chain/rewards/syncCommitteeRewards.ts +1 -3
  101. package/src/chain/stateCache/persistentCheckpointsCache.ts +2 -15
  102. package/src/chain/validation/attesterSlashing.ts +1 -1
  103. package/src/chain/validation/block.ts +1 -1
  104. package/src/chain/validation/blsToExecutionChange.ts +1 -1
  105. package/src/chain/validation/proposerSlashing.ts +1 -1
  106. package/src/chain/validation/signatureSets/aggregateAndProof.ts +1 -1
  107. package/src/chain/validation/signatureSets/contributionAndProof.ts +1 -3
  108. package/src/chain/validation/signatureSets/syncCommittee.ts +1 -3
  109. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +1 -3
  110. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +1 -2
  111. package/src/chain/validation/syncCommittee.ts +1 -1
  112. package/src/chain/validation/syncCommitteeContributionAndProof.ts +3 -8
  113. package/src/chain/validation/voluntaryExit.ts +1 -1
  114. package/src/db/beacon.ts +1 -38
  115. package/src/db/buckets.ts +6 -12
  116. package/src/db/interface.ts +0 -2
  117. package/src/node/nodejs.ts +0 -11
  118. package/src/sync/backfill/backfill.ts +3 -8
  119. package/src/sync/backfill/verify.ts +1 -3
@@ -1,4 +1,3 @@
1
- import {BeaconConfig} from "@lodestar/config";
2
1
  import {Id, Repository} from "@lodestar/db";
3
2
  import {
4
3
  BLS_WITHDRAWAL_PREFIX,
@@ -52,8 +51,6 @@ export class OpPool {
52
51
  /** Map of validator index -> SignedBLSToExecutionChange */
53
52
  private readonly blsToExecutionChanges = new Map<ValidatorIndex, SignedBLSToExecutionChangeVersioned>();
54
53
 
55
- constructor(private readonly config: BeaconConfig) {}
56
-
57
54
  // Getters for metrics
58
55
 
59
56
  get attesterSlashingsSize(): number {
@@ -194,8 +191,9 @@ export class OpPool {
194
191
  phase0.SignedVoluntaryExit[],
195
192
  capella.SignedBLSToExecutionChange[],
196
193
  ] {
194
+ const {config} = state;
197
195
  const stateEpoch = computeEpochAtSlot(state.slot);
198
- const stateFork = this.config.getForkSeq(state.slot);
196
+ const stateFork = config.getForkSeq(state.slot);
199
197
  const toBeSlashedIndices = new Set<ValidatorIndex>();
200
198
  const proposerSlashings: phase0.ProposerSlashing[] = [];
201
199
 
@@ -267,7 +265,7 @@ export class OpPool {
267
265
  // a future fork.
268
266
  isVoluntaryExitSignatureIncludable(
269
267
  stateFork,
270
- this.config.getForkSeq(computeStartSlotAtEpoch(voluntaryExit.message.epoch))
268
+ config.getForkSeq(computeStartSlotAtEpoch(voluntaryExit.message.epoch))
271
269
  )
272
270
  ) {
273
271
  voluntaryExits.push(voluntaryExit);
@@ -370,13 +368,14 @@ export class OpPool {
370
368
  * Prune if validator has already exited at or before the finalized checkpoint of the head.
371
369
  */
372
370
  private pruneVoluntaryExits(headState: CachedBeaconStateAllForks): void {
373
- const headStateFork = this.config.getForkSeq(headState.slot);
371
+ const {config} = headState;
372
+ const headStateFork = config.getForkSeq(headState.slot);
374
373
  const finalizedEpoch = headState.finalizedCheckpoint.epoch;
375
374
 
376
375
  for (const [key, voluntaryExit] of this.voluntaryExits.entries()) {
377
376
  // VoluntaryExit messages signed in the previous fork become invalid and can never be included in any future
378
377
  // block, so just drop as the head state advances into the next fork.
379
- if (this.config.getForkSeq(computeStartSlotAtEpoch(voluntaryExit.message.epoch)) < headStateFork) {
378
+ if (config.getForkSeq(computeStartSlotAtEpoch(voluntaryExit.message.epoch)) < headStateFork) {
380
379
  this.voluntaryExits.delete(key);
381
380
  }
382
381
 
@@ -393,8 +392,9 @@ export class OpPool {
393
392
  * to opPool once gossipsub seen cache TTL passes.
394
393
  */
395
394
  private pruneBlsToExecutionChanges(headBlock: SignedBeaconBlock, headState: CachedBeaconStateAllForks): void {
395
+ const {config} = headState;
396
396
  const recentBlsToExecutionChanges =
397
- this.config.getForkSeq(headBlock.message.slot) >= ForkSeq.capella
397
+ config.getForkSeq(headBlock.message.slot) >= ForkSeq.capella
398
398
  ? (headBlock as capella.SignedBeaconBlock).message.body.blsToExecutionChanges
399
399
  : [];
400
400
 
@@ -165,7 +165,7 @@ export async function produceBlockBody<T extends BlockType>(
165
165
  // even though shouldOverrideBuilder is relevant for the engine response, for simplicity of typing
166
166
  // we just return it undefined for the builder which anyway doesn't get consumed downstream
167
167
  let shouldOverrideBuilder: boolean | undefined;
168
- const fork = this.config.getForkName(blockSlot);
168
+ const fork = currentState.config.getForkName(blockSlot);
169
169
  const produceResult = {
170
170
  type: blockType,
171
171
  fork,
@@ -644,7 +644,7 @@ export async function produceCommonBlockBody<T extends BlockType>(
644
644
  ? this.metrics?.executionBlockProductionTimeSteps
645
645
  : this.metrics?.builderBlockProductionTimeSteps;
646
646
 
647
- const fork = this.config.getForkName(slot);
647
+ const fork = currentState.config.getForkName(slot);
648
648
 
649
649
  // TODO:
650
650
  // Iterate through the naive aggregation pool and ensure all the attestations from there
@@ -1,6 +1,5 @@
1
1
  import {PubkeyIndexMap} from "@chainsafe/pubkey-index-map";
2
2
  import {routes} from "@lodestar/api";
3
- import {BeaconConfig} from "@lodestar/config";
4
3
  import {
5
4
  EFFECTIVE_BALANCE_INCREMENT,
6
5
  ForkName,
@@ -39,12 +38,11 @@ const defaultAttestationsReward = {head: 0, target: 0, source: 0, inclusionDelay
39
38
  const defaultAttestationsPenalty = {target: 0, source: 0};
40
39
 
41
40
  export async function computeAttestationsRewards(
42
- config: BeaconConfig,
43
41
  pubkey2index: PubkeyIndexMap,
44
42
  state: CachedBeaconStateAllForks,
45
43
  validatorIds?: (ValidatorIndex | string)[]
46
44
  ): Promise<AttestationsRewards> {
47
- const fork = config.getForkName(state.slot);
45
+ const fork = state.config.getForkName(state.slot);
48
46
  if (fork === ForkName.phase0) {
49
47
  throw Error("Unsupported fork. Attestations rewards calculation is not available in phase0");
50
48
  }
@@ -52,13 +50,8 @@ export async function computeAttestationsRewards(
52
50
  const stateAltair = state as CachedBeaconStateAltair;
53
51
  const transitionCache = beforeProcessEpoch(stateAltair);
54
52
 
55
- const [idealRewards, penalties] = computeIdealAttestationsRewardsAndPenaltiesAltair(
56
- config,
57
- stateAltair,
58
- transitionCache
59
- );
53
+ const [idealRewards, penalties] = computeIdealAttestationsRewardsAndPenaltiesAltair(stateAltair, transitionCache);
60
54
  const totalRewards = computeTotalAttestationsRewardsAltair(
61
- config,
62
55
  pubkey2index,
63
56
  stateAltair,
64
57
  transitionCache,
@@ -71,13 +64,12 @@ export async function computeAttestationsRewards(
71
64
  }
72
65
 
73
66
  function computeIdealAttestationsRewardsAndPenaltiesAltair(
74
- config: BeaconConfig,
75
67
  state: CachedBeaconStateAllForks,
76
68
  transitionCache: EpochTransitionCache
77
69
  ): [IdealAttestationsReward[], AttestationsPenalty[]] {
78
70
  const baseRewardPerIncrement = transitionCache.baseRewardPerIncrement;
79
71
  const activeBalanceByIncrement = transitionCache.totalActiveStakeByIncrement;
80
- const fork = config.getForkName(state.slot);
72
+ const fork = state.config.getForkName(state.slot);
81
73
  const maxEffectiveBalance = isForkPostElectra(fork) ? MAX_EFFECTIVE_BALANCE_ELECTRA : MAX_EFFECTIVE_BALANCE;
82
74
  const maxEffectiveBalanceByIncrement = Math.floor(maxEffectiveBalance / EFFECTIVE_BALANCE_INCREMENT);
83
75
 
@@ -147,7 +139,6 @@ function computeIdealAttestationsRewardsAndPenaltiesAltair(
147
139
 
148
140
  // Same calculation as `getRewardsAndPenaltiesAltair` but returns the breakdown of rewards instead of aggregated
149
141
  function computeTotalAttestationsRewardsAltair(
150
- config: BeaconConfig,
151
142
  pubkey2index: PubkeyIndexMap,
152
143
  state: CachedBeaconStateAltair,
153
144
  transitionCache: EpochTransitionCache,
@@ -157,7 +148,7 @@ function computeTotalAttestationsRewardsAltair(
157
148
  ): TotalAttestationsReward[] {
158
149
  const rewards = [];
159
150
  const {flags} = transitionCache;
160
- const {epochCtx} = state;
151
+ const {epochCtx, config} = state;
161
152
  const validatorIndices = validatorIds
162
153
  .map((id) => (typeof id === "number" ? id : pubkey2index.get(fromHex(id))))
163
154
  .filter((index) => index !== undefined); // Validator indices to include in the result
@@ -1,5 +1,4 @@
1
1
  import {routes} from "@lodestar/api";
2
- import {BeaconConfig} from "@lodestar/config";
3
2
  import {
4
3
  ForkName,
5
4
  WHISTLEBLOWER_REWARD_QUOTIENT,
@@ -27,12 +26,11 @@ type SubRewardValue = number; // All reward values should be integer
27
26
  * 3) Reporting slashable behaviours from proposer and attester
28
27
  */
29
28
  export async function computeBlockRewards(
30
- config: BeaconConfig,
31
29
  block: BeaconBlock,
32
30
  preState: CachedBeaconStateAllForks,
33
31
  postState?: CachedBeaconStateAllForks
34
32
  ): Promise<BlockRewards> {
35
- const fork = config.getForkName(block.slot);
33
+ const fork = preState.config.getForkName(block.slot);
36
34
  const {attestations: cachedAttestationsReward = 0, syncAggregate: cachedSyncAggregateReward = 0} =
37
35
  postState?.proposerRewards ?? {};
38
36
  let blockAttestationReward = cachedAttestationsReward;
@@ -42,7 +40,7 @@ export async function computeBlockRewards(
42
40
  blockAttestationReward =
43
41
  fork === ForkName.phase0
44
42
  ? computeBlockAttestationRewardPhase0(block as phase0.BeaconBlock, preState as CachedBeaconStatePhase0)
45
- : computeBlockAttestationRewardAltair(config, block as altair.BeaconBlock, preState as CachedBeaconStateAltair);
43
+ : computeBlockAttestationRewardAltair(block as altair.BeaconBlock, preState as CachedBeaconStateAltair);
46
44
  }
47
45
 
48
46
  if (syncAggregateReward === 0) {
@@ -80,11 +78,10 @@ function computeBlockAttestationRewardPhase0(
80
78
  * Reuses `processAttestationsAltair()`. Has dependency on RewardCache
81
79
  */
82
80
  function computeBlockAttestationRewardAltair(
83
- config: BeaconConfig,
84
81
  block: altair.BeaconBlock,
85
82
  preState: CachedBeaconStateAltair
86
83
  ): SubRewardValue {
87
- const fork = config.getForkSeq(block.slot);
84
+ const fork = preState.config.getForkSeq(block.slot);
88
85
  const {attestations} = block.body;
89
86
 
90
87
  processAttestationsAltair(fork, preState, attestations, false);
@@ -1,5 +1,4 @@
1
1
  import {routes} from "@lodestar/api";
2
- import {BeaconConfig} from "@lodestar/config";
3
2
  import {ForkName, SYNC_COMMITTEE_SIZE} from "@lodestar/params";
4
3
  import {CachedBeaconStateAllForks, CachedBeaconStateAltair, Index2PubkeyCache} from "@lodestar/state-transition";
5
4
  import {BeaconBlock, ValidatorIndex, altair} from "@lodestar/types";
@@ -8,13 +7,12 @@ export type SyncCommitteeRewards = routes.beacon.SyncCommitteeRewards;
8
7
  type BalanceRecord = {val: number}; // Use val for convenient way to increment/decrement balance
9
8
 
10
9
  export async function computeSyncCommitteeRewards(
11
- config: BeaconConfig,
12
10
  index2pubkey: Index2PubkeyCache,
13
11
  block: BeaconBlock,
14
12
  preState: CachedBeaconStateAllForks,
15
13
  validatorIds: (ValidatorIndex | string)[] = []
16
14
  ): Promise<SyncCommitteeRewards> {
17
- const fork = config.getForkName(block.slot);
15
+ const fork = preState.config.getForkName(block.slot);
18
16
  if (fork === ForkName.phase0) {
19
17
  throw Error("Cannot get sync rewards as phase0 block does not have sync committee");
20
18
  }
@@ -1,5 +1,4 @@
1
1
  import {routes} from "@lodestar/api";
2
- import {BeaconConfig} from "@lodestar/config";
3
2
  import {
4
3
  CachedBeaconStateAllForks,
5
4
  computeStartSlotAtEpoch,
@@ -25,7 +24,6 @@ export type PersistentCheckpointStateCacheOpts = {
25
24
  };
26
25
 
27
26
  type PersistentCheckpointStateCacheModules = {
28
- config: BeaconConfig;
29
27
  metrics?: Metrics | null;
30
28
  logger: Logger;
31
29
  clock?: IClock | null;
@@ -109,7 +107,6 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
109
107
  private readonly cache: MapTracker<CacheKey, CacheItem>;
110
108
  /** Epoch -> Set<blockRoot> */
111
109
  private readonly epochIndex = new MapDef<Epoch, Set<RootHex>>(() => new Set<string>());
112
- private readonly config: BeaconConfig;
113
110
  private readonly metrics: Metrics | null | undefined;
114
111
  private readonly logger: Logger;
115
112
  private readonly clock: IClock | null | undefined;
@@ -123,20 +120,10 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
123
120
  private readonly bufferPool?: BufferPool | null;
124
121
 
125
122
  constructor(
126
- {
127
- config,
128
- metrics,
129
- logger,
130
- clock,
131
- signal,
132
- datastore,
133
- blockStateCache,
134
- bufferPool,
135
- }: PersistentCheckpointStateCacheModules,
123
+ {metrics, logger, clock, signal, datastore, blockStateCache, bufferPool}: PersistentCheckpointStateCacheModules,
136
124
  opts: PersistentCheckpointStateCacheOpts
137
125
  ) {
138
126
  this.cache = new MapTracker(metrics?.cpStateCache);
139
- this.config = config;
140
127
  if (metrics) {
141
128
  this.metrics = metrics;
142
129
  metrics.cpStateCache.size.addCollect(() => {
@@ -497,7 +484,7 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
497
484
  }
498
485
 
499
486
  const blockSlot = state.slot;
500
- const processCPStatesTimeMs = this.config.getSlotComponentDurationMs(PROCESS_CHECKPOINT_STATES_BPS);
487
+ const processCPStatesTimeMs = state.config.getSlotComponentDurationMs(PROCESS_CHECKPOINT_STATES_BPS);
501
488
  // we always have clock in production, fallback value is only for test
502
489
  const msFromSlot = this.clock?.msFromSlot(blockSlot) ?? processCPStatesTimeMs;
503
490
  const msToProcessCPStates = processCPStatesTimeMs - msFromSlot;
@@ -51,7 +51,7 @@ export async function validateAttesterSlashing(
51
51
  });
52
52
  }
53
53
 
54
- const signatureSets = getAttesterSlashingSignatureSets(chain.config, chain.index2pubkey, state, attesterSlashing);
54
+ const signatureSets = getAttesterSlashingSignatureSets(chain.index2pubkey, state, attesterSlashing);
55
55
  if (!(await chain.bls.verifySignatureSets(signatureSets, {batchable: true, priority: prioritizeBls}))) {
56
56
  throw new AttesterSlashingError(GossipAction.REJECT, {
57
57
  code: AttesterSlashingErrorCode.INVALID,
@@ -153,7 +153,7 @@ export async function validateGossipBlock(
153
153
 
154
154
  // [REJECT] The proposer signature, signed_beacon_block.signature, is valid with respect to the proposer_index pubkey.
155
155
  if (!chain.seenBlockInputCache.isVerifiedProposerSignature(blockSlot, blockRoot, signedBlock.signature)) {
156
- const signatureSet = getBlockProposerSignatureSet(chain.config, chain.index2pubkey, blockState, signedBlock);
156
+ const signatureSet = getBlockProposerSignatureSet(chain.index2pubkey, blockState, signedBlock);
157
157
  // Don't batch so verification is not delayed
158
158
  if (!(await chain.bls.verifySignatureSets([signatureSet], {verifyOnMainThread: true}))) {
159
159
  throw new BlockGossipError(GossipAction.REJECT, {
@@ -41,7 +41,7 @@ async function validateBlsToExecutionChange(
41
41
  // NOTE: No need to advance head state since the signature's fork is handled with `broadcastedOnFork`,
42
42
  // and chanes relevant to `isValidBlsToExecutionChange()` happen only on processBlock(), not processEpoch()
43
43
  const state = chain.getHeadState();
44
- const {config} = chain;
44
+ const {config} = state;
45
45
 
46
46
  // [REJECT] All of the conditions within process_bls_to_execution_change pass validation.
47
47
  // verifySignature = false, verified in batch below
@@ -44,7 +44,7 @@ async function validateProposerSlashing(
44
44
  });
45
45
  }
46
46
 
47
- const signatureSets = getProposerSlashingSignatureSets(chain.config, chain.index2pubkey, state, proposerSlashing);
47
+ const signatureSets = getProposerSlashingSignatureSets(chain.index2pubkey, state, proposerSlashing);
48
48
  if (!(await chain.bls.verifySignatureSets(signatureSets, {batchable: true, priority: prioritizeBls}))) {
49
49
  throw new ProposerSlashingError(GossipAction.REJECT, {
50
50
  code: ProposerSlashingErrorCode.INVALID,
@@ -14,7 +14,7 @@ export function getAggregateAndProofSigningRoot(
14
14
  epoch: Epoch,
15
15
  aggregateAndProof: SignedAggregateAndProof
16
16
  ): Uint8Array {
17
- // previously, we call `const aggregatorDomain = config.getDomain(state.slot, DOMAIN_AGGREGATE_AND_PROOF, slot);`
17
+ // previously, we call `const aggregatorDomain = state.config.getDomain(state.slot, DOMAIN_AGGREGATE_AND_PROOF, slot);`
18
18
  // at fork boundary, it's required to dial to target epoch https://github.com/ChainSafe/lodestar/blob/v1.11.3/packages/beacon-node/src/chain/validation/attestation.ts#L573
19
19
  // instead of that, just use the fork of slot in the attestation data
20
20
  const slot = computeStartSlotAtEpoch(epoch);
@@ -1,4 +1,3 @@
1
- import {BeaconConfig} from "@lodestar/config";
2
1
  import {DOMAIN_CONTRIBUTION_AND_PROOF} from "@lodestar/params";
3
2
  import {
4
3
  CachedBeaconStateAllForks,
@@ -10,12 +9,11 @@ import {
10
9
  import {altair, ssz} from "@lodestar/types";
11
10
 
12
11
  export function getContributionAndProofSignatureSet(
13
- config: BeaconConfig,
14
12
  index2pubkey: Index2PubkeyCache,
15
13
  state: CachedBeaconStateAllForks,
16
14
  signedContributionAndProof: altair.SignedContributionAndProof
17
15
  ): ISignatureSet {
18
- const domain = config.getDomain(
16
+ const domain = state.config.getDomain(
19
17
  state.slot,
20
18
  DOMAIN_CONTRIBUTION_AND_PROOF,
21
19
  signedContributionAndProof.message.contribution.slot
@@ -1,4 +1,3 @@
1
- import {BeaconConfig} from "@lodestar/config";
2
1
  import {DOMAIN_SYNC_COMMITTEE} from "@lodestar/params";
3
2
  import {
4
3
  CachedBeaconStateAllForks,
@@ -10,12 +9,11 @@ import {
10
9
  import {altair, ssz} from "@lodestar/types";
11
10
 
12
11
  export function getSyncCommitteeSignatureSet(
13
- config: BeaconConfig,
14
12
  index2pubkey: Index2PubkeyCache,
15
13
  state: CachedBeaconStateAllForks,
16
14
  syncCommittee: altair.SyncCommitteeMessage
17
15
  ): ISignatureSet {
18
- const domain = config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE, syncCommittee.slot);
16
+ const domain = state.config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE, syncCommittee.slot);
19
17
 
20
18
  return {
21
19
  type: SignatureSetType.single,
@@ -1,16 +1,14 @@
1
1
  import {PublicKey} from "@chainsafe/blst";
2
- import {BeaconConfig} from "@lodestar/config";
3
2
  import {DOMAIN_SYNC_COMMITTEE} from "@lodestar/params";
4
3
  import {CachedBeaconStateAltair, ISignatureSet, SignatureSetType, computeSigningRoot} from "@lodestar/state-transition";
5
4
  import {altair, ssz} from "@lodestar/types";
6
5
 
7
6
  export function getSyncCommitteeContributionSignatureSet(
8
- config: BeaconConfig,
9
7
  state: CachedBeaconStateAltair,
10
8
  contribution: altair.SyncCommitteeContribution,
11
9
  pubkeys: PublicKey[]
12
10
  ): ISignatureSet {
13
- const domain = config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE, contribution.slot);
11
+ const domain = state.config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE, contribution.slot);
14
12
  return {
15
13
  type: SignatureSetType.aggregate,
16
14
  pubkeys,
@@ -1,4 +1,3 @@
1
- import {BeaconConfig} from "@lodestar/config";
2
1
  import {DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF} from "@lodestar/params";
3
2
  import {
4
3
  CachedBeaconStateAllForks,
@@ -10,11 +9,11 @@ import {
10
9
  import {altair, ssz} from "@lodestar/types";
11
10
 
12
11
  export function getSyncCommitteeSelectionProofSignatureSet(
13
- config: BeaconConfig,
14
12
  index2pubkey: Index2PubkeyCache,
15
13
  state: CachedBeaconStateAllForks,
16
14
  contributionAndProof: altair.ContributionAndProof
17
15
  ): ISignatureSet {
16
+ const {config} = state;
18
17
  const slot = contributionAndProof.contribution.slot;
19
18
  const domain = config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF, slot);
20
19
  const signingData: altair.SyncAggregatorSelectionData = {
@@ -89,7 +89,7 @@ async function validateSyncCommitteeSigOnly(
89
89
  syncCommittee: altair.SyncCommitteeMessage,
90
90
  prioritizeBls = false
91
91
  ): Promise<void> {
92
- const signatureSet = getSyncCommitteeSignatureSet(chain.config, chain.index2pubkey, headState, syncCommittee);
92
+ const signatureSet = getSyncCommitteeSignatureSet(chain.index2pubkey, headState, syncCommittee);
93
93
  if (!(await chain.bls.verifySignatureSets([signatureSet], {batchable: true, priority: prioritizeBls}))) {
94
94
  throw new SyncCommitteeError(GossipAction.REJECT, {
95
95
  code: SyncCommitteeErrorCode.INVALID_SIGNATURE,
@@ -78,19 +78,14 @@ export async function validateSyncCommitteeGossipContributionAndProof(
78
78
  const signatureSets = [
79
79
  // [REJECT] The contribution_and_proof.selection_proof is a valid signature of the SyncAggregatorSelectionData
80
80
  // derived from the contribution by the validator with index contribution_and_proof.aggregator_index.
81
- getSyncCommitteeSelectionProofSignatureSet(chain.config, index2pubkey, headState, contributionAndProof),
81
+ getSyncCommitteeSelectionProofSignatureSet(index2pubkey, headState, contributionAndProof),
82
82
 
83
83
  // [REJECT] The aggregator signature, signed_contribution_and_proof.signature, is valid.
84
- getContributionAndProofSignatureSet(chain.config, index2pubkey, headState, signedContributionAndProof),
84
+ getContributionAndProofSignatureSet(index2pubkey, headState, signedContributionAndProof),
85
85
 
86
86
  // [REJECT] The aggregate signature is valid for the message beacon_block_root and aggregate pubkey derived from
87
87
  // the participation info in aggregation_bits for the subcommittee specified by the contribution.subcommittee_index.
88
- getSyncCommitteeContributionSignatureSet(
89
- chain.config,
90
- headState as CachedBeaconStateAltair,
91
- contribution,
92
- participantPubkeys
93
- ),
88
+ getSyncCommitteeContributionSignatureSet(headState as CachedBeaconStateAltair, contribution, participantPubkeys),
94
89
  ];
95
90
 
96
91
  if (!(await chain.bls.verifySignatureSets(signatureSets, {batchable: true}))) {
@@ -59,7 +59,7 @@ async function validateVoluntaryExit(
59
59
  });
60
60
  }
61
61
 
62
- const signatureSet = getVoluntaryExitSignatureSet(chain.config, chain.index2pubkey, state, voluntaryExit);
62
+ const signatureSet = getVoluntaryExitSignatureSet(chain.index2pubkey, state, voluntaryExit);
63
63
  if (!(await chain.bls.verifySignatureSets([signatureSet], {batchable: true, priority: prioritizeBls}))) {
64
64
  throw new VoluntaryExitError(GossipAction.REJECT, {
65
65
  code: VoluntaryExitErrorCode.INVALID_SIGNATURE,
package/src/db/beacon.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  import {ChainForkConfig} from "@lodestar/config";
2
- import {Db, LevelDbControllerMetrics, encodeKey} from "@lodestar/db";
3
- import {Bucket} from "./buckets.js";
2
+ import {Db, LevelDbControllerMetrics} from "@lodestar/db";
4
3
  import {IBeaconDb} from "./interface.js";
5
4
  import {CheckpointStateRepository} from "./repositories/checkpointState.js";
6
5
  import {
@@ -96,40 +95,4 @@ export class BeaconDb implements IBeaconDb {
96
95
  // TODO: Enable once it's deemed safe
97
96
  // await this.block.batchDelete(await this.block.keys());
98
97
  }
99
-
100
- async deleteDeprecatedEth1Data(): Promise<void> {
101
- const deprecatedBuckets = [
102
- Bucket.phase0_eth1Data,
103
- Bucket.index_depositDataRoot,
104
- Bucket.phase0_depositData,
105
- Bucket.phase0_depositEvent,
106
- Bucket.phase0_preGenesisState,
107
- Bucket.phase0_preGenesisStateLastProcessedBlock,
108
- ];
109
-
110
- for (const bucket of deprecatedBuckets) {
111
- await this.deleteBucketData(bucket);
112
- }
113
- }
114
-
115
- private async deleteBucketData(bucket: Bucket): Promise<void> {
116
- const minKey = encodeKey(bucket, Buffer.alloc(0));
117
- const maxKey = encodeKey(bucket + 1, Buffer.alloc(0));
118
-
119
- // Batch delete to avoid loading all keys into memory at once
120
- const BATCH_DELETE_SIZE = 1000;
121
- let keysBatch: Uint8Array[] = [];
122
-
123
- for await (const key of this.db.keysStream({gte: minKey, lt: maxKey})) {
124
- keysBatch.push(key);
125
- if (keysBatch.length >= BATCH_DELETE_SIZE) {
126
- await this.db.batchDelete(keysBatch);
127
- keysBatch = [];
128
- }
129
- }
130
-
131
- if (keysBatch.length > 0) {
132
- await this.db.batchDelete(keysBatch);
133
- }
134
- }
135
98
  }
package/src/db/buckets.ts CHANGED
@@ -16,16 +16,13 @@ export enum Bucket {
16
16
  index_mainChain = 6, // Slot -> Root<BeaconBlock>
17
17
  // justified, finalized state and block hashes
18
18
  index_chainInfo = 7, // Key -> Number64 | stateHash | blockHash
19
- /** @deprecated Eth1 deposit tracking is not required since electra, only kept around to delete data from existing databases */
20
- phase0_eth1Data = 8,
21
- /** @deprecated Eth1 deposit tracking is not required since electra, only kept around to delete data from existing databases */
22
- index_depositDataRoot = 9,
19
+ // phase0_eth1Data = 8, // DEPRECATED - eth1 deposit tracking is not required since electra
20
+ // index_depositDataRoot = 9, // DEPRECATED - eth1 deposit tracking is not required since electra
23
21
 
24
22
  // op pool
25
23
  // phase0_attestation = 10, // DEPRECATED on v0.25.0
26
24
  // phase0_aggregateAndProof = 11, // Root -> AggregateAndProof, DEPRECATED on v.27.0
27
- /** @deprecated Eth1 deposit tracking is not required since electra, only kept around to delete data from existing databases */
28
- phase0_depositData = 12,
25
+ // phase0_depositData = 12, // DEPRECATED - eth1 deposit tracking is not required since electra
29
26
  phase0_exit = 13, // ValidatorIndex -> VoluntaryExit
30
27
  phase0_proposerSlashing = 14, // ValidatorIndex -> ProposerSlashing
31
28
  allForks_attesterSlashing = 15, // Root -> AttesterSlashing
@@ -34,18 +31,15 @@ export enum Bucket {
34
31
  allForks_checkpointState = 17, // Root -> BeaconState
35
32
 
36
33
  // allForks_pendingBlock = 25, // Root -> SignedBeaconBlock // DEPRECATED on v0.30.0
37
- /** @deprecated Eth1 deposit tracking is not required since electra, only kept around to delete data from existing databases */
38
- phase0_depositEvent = 19,
34
+ // phase0_depositEvent = 19, // DEPRECATED - eth1 deposit tracking is not required since electra
39
35
 
40
36
  index_stateArchiveRootIndex = 26, // State Root -> slot
41
37
 
42
38
  deneb_blobSidecars = 27, // DENEB BeaconBlockRoot -> BlobSidecars
43
39
  deneb_blobSidecarsArchive = 28, // DENEB BeaconBlockSlot -> BlobSidecars
44
40
 
45
- /** @deprecated Genesis from eth1 is no longer supported, only kept around to delete data from existing databases */
46
- phase0_preGenesisState = 30,
47
- /** @deprecated Genesis from eth1 is no longer supported, only kept around to delete data from existing databases */
48
- phase0_preGenesisStateLastProcessedBlock = 31,
41
+ // phase0_preGenesisState = 30, // DEPRECATED - genesis from eth1 is no longer supported
42
+ // phase0_preGenesisStateLastProcessedBlock = 31, // DEPRECATED - genesis from eth1 is no longer supported
49
43
 
50
44
  // Lightclient server
51
45
  // altair_bestUpdatePerCommitteePeriod = 30, // DEPRECATED on v0.32.0
@@ -56,8 +56,6 @@ export interface IBeaconDb {
56
56
 
57
57
  pruneHotDb(): Promise<void>;
58
58
 
59
- deleteDeprecatedEth1Data(): Promise<void>;
60
-
61
59
  /** Close the connection to the db instance and close the db store. */
62
60
  close(): Promise<void>;
63
61
  /** To inject metrics after CLI initialization */
@@ -197,17 +197,6 @@ export class BeaconNode {
197
197
  // TODO: Should this call be awaited?
198
198
  await db.pruneHotDb();
199
199
 
200
- // Delete deprecated eth1 data to free up disk space for users
201
- logger.debug("Deleting deprecated eth1 data from database");
202
- const startTime = Date.now();
203
- db.deleteDeprecatedEth1Data()
204
- .then(() => {
205
- logger.debug("Deleted deprecated eth1 data", {durationMs: Date.now() - startTime});
206
- })
207
- .catch((e) => {
208
- logger.error("Failed to delete deprecated eth1 data", {}, e);
209
- });
210
-
211
200
  const monitoring = opts.monitoring.endpoint
212
201
  ? new MonitoringService(
213
202
  "beacon",
@@ -750,13 +750,9 @@ export class BackfillSync extends (EventEmitter as {new (): BackfillSyncEmitter}
750
750
 
751
751
  // GENESIS_SLOT doesn't has valid signature
752
752
  if (anchorBlock.message.slot === GENESIS_SLOT) return;
753
- await verifyBlockProposerSignature(
754
- this.chain.config,
755
- this.chain.index2pubkey,
756
- this.chain.bls,
757
- this.chain.getHeadState(),
758
- [anchorBlock]
759
- );
753
+ await verifyBlockProposerSignature(this.chain.index2pubkey, this.chain.bls, this.chain.getHeadState(), [
754
+ anchorBlock,
755
+ ]);
760
756
 
761
757
  // We can write to the disk if this is ahead of prevFinalizedCheckpointBlock otherwise
762
758
  // we will need to go make checks on the top of sync loop before writing as it might
@@ -822,7 +818,6 @@ export class BackfillSync extends (EventEmitter as {new (): BackfillSyncEmitter}
822
818
  // If any of the block's proposer signature fail, we can't trust this peer at all
823
819
  if (verifiedBlocks.length > 0) {
824
820
  await verifyBlockProposerSignature(
825
- this.chain.config,
826
821
  this.chain.index2pubkey,
827
822
  this.chain.bls,
828
823
  this.chain.getHeadState(),
@@ -46,7 +46,6 @@ export function verifyBlockSequence(
46
46
  }
47
47
 
48
48
  export async function verifyBlockProposerSignature(
49
- config: BeaconConfig,
50
49
  index2pubkey: Index2PubkeyCache,
51
50
  bls: IBlsVerifier,
52
51
  state: CachedBeaconStateAllForks,
@@ -55,8 +54,7 @@ export async function verifyBlockProposerSignature(
55
54
  if (blocks.length === 1 && blocks[0].message.slot === GENESIS_SLOT) return;
56
55
  const signatures = blocks.reduce((sigs: ISignatureSet[], block) => {
57
56
  // genesis block doesn't have valid signature
58
- if (block.message.slot !== GENESIS_SLOT)
59
- sigs.push(getBlockProposerSignatureSet(config, index2pubkey, state, block));
57
+ if (block.message.slot !== GENESIS_SLOT) sigs.push(getBlockProposerSignatureSet(index2pubkey, state, block));
60
58
  return sigs;
61
59
  }, []);
62
60