@lodestar/beacon-node 1.22.0-dev.6f470f8a35 → 1.22.0-dev.a7286bd669

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 (116) hide show
  1. package/lib/api/impl/beacon/blocks/index.js +14 -2
  2. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  3. package/lib/api/impl/beacon/pool/index.js +31 -4
  4. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  5. package/lib/api/impl/config/constants.d.ts +5 -1
  6. package/lib/api/impl/config/constants.js +7 -2
  7. package/lib/api/impl/config/constants.js.map +1 -1
  8. package/lib/api/impl/validator/index.js +26 -4
  9. package/lib/api/impl/validator/index.js.map +1 -1
  10. package/lib/chain/blocks/importBlock.js +3 -1
  11. package/lib/chain/blocks/importBlock.js.map +1 -1
  12. package/lib/chain/blocks/types.d.ts +2 -2
  13. package/lib/chain/blocks/types.js.map +1 -1
  14. package/lib/chain/chain.d.ts +40 -0
  15. package/lib/chain/chain.js +31 -2
  16. package/lib/chain/chain.js.map +1 -1
  17. package/lib/chain/errors/attestationError.d.ts +13 -1
  18. package/lib/chain/errors/attestationError.js +8 -0
  19. package/lib/chain/errors/attestationError.js.map +1 -1
  20. package/lib/chain/historicalState/worker.js +4 -0
  21. package/lib/chain/historicalState/worker.js.map +1 -1
  22. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +46 -12
  23. package/lib/chain/opPools/aggregatedAttestationPool.js +226 -59
  24. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  25. package/lib/chain/opPools/attestationPool.d.ts +22 -6
  26. package/lib/chain/opPools/attestationPool.js +61 -27
  27. package/lib/chain/opPools/attestationPool.js.map +1 -1
  28. package/lib/chain/opPools/opPool.d.ts +2 -2
  29. package/lib/chain/opPools/opPool.js +5 -3
  30. package/lib/chain/opPools/opPool.js.map +1 -1
  31. package/lib/chain/opPools/utils.d.ts +2 -0
  32. package/lib/chain/opPools/utils.js +3 -0
  33. package/lib/chain/opPools/utils.js.map +1 -1
  34. package/lib/chain/produceBlock/produceBlockBody.js +2 -1
  35. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  36. package/lib/chain/regen/queued.d.ts +6 -1
  37. package/lib/chain/regen/queued.js +38 -0
  38. package/lib/chain/regen/queued.js.map +1 -1
  39. package/lib/chain/seenCache/seenAttestationData.d.ts +13 -5
  40. package/lib/chain/seenCache/seenAttestationData.js +5 -3
  41. package/lib/chain/seenCache/seenAttestationData.js.map +1 -1
  42. package/lib/chain/stateCache/blockStateCacheImpl.d.ts +1 -0
  43. package/lib/chain/stateCache/blockStateCacheImpl.js +4 -1
  44. package/lib/chain/stateCache/blockStateCacheImpl.js.map +1 -1
  45. package/lib/chain/stateCache/fifoBlockStateCache.d.ts +1 -0
  46. package/lib/chain/stateCache/fifoBlockStateCache.js +3 -0
  47. package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
  48. package/lib/chain/stateCache/inMemoryCheckpointsCache.d.ts +1 -0
  49. package/lib/chain/stateCache/inMemoryCheckpointsCache.js +3 -0
  50. package/lib/chain/stateCache/inMemoryCheckpointsCache.js.map +1 -1
  51. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +1 -0
  52. package/lib/chain/stateCache/persistentCheckpointsCache.js +6 -0
  53. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  54. package/lib/chain/stateCache/types.d.ts +4 -0
  55. package/lib/chain/stateCache/types.js.map +1 -1
  56. package/lib/chain/validation/aggregateAndProof.d.ts +4 -4
  57. package/lib/chain/validation/aggregateAndProof.js +24 -7
  58. package/lib/chain/validation/aggregateAndProof.js.map +1 -1
  59. package/lib/chain/validation/attestation.d.ts +27 -6
  60. package/lib/chain/validation/attestation.js +109 -31
  61. package/lib/chain/validation/attestation.js.map +1 -1
  62. package/lib/chain/validation/attesterSlashing.js +2 -1
  63. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  64. package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts +4 -3
  65. package/lib/chain/validation/signatureSets/aggregateAndProof.js +3 -2
  66. package/lib/chain/validation/signatureSets/aggregateAndProof.js.map +1 -1
  67. package/lib/eth1/eth1DepositDataTracker.d.ts +5 -2
  68. package/lib/eth1/eth1DepositDataTracker.js +13 -2
  69. package/lib/eth1/eth1DepositDataTracker.js.map +1 -1
  70. package/lib/eth1/index.d.ts +2 -0
  71. package/lib/eth1/index.js +6 -0
  72. package/lib/eth1/index.js.map +1 -1
  73. package/lib/eth1/interface.d.ts +4 -0
  74. package/lib/eth1/utils/deposits.d.ts +2 -2
  75. package/lib/eth1/utils/deposits.js +6 -5
  76. package/lib/eth1/utils/deposits.js.map +1 -1
  77. package/lib/execution/engine/http.d.ts +2 -2
  78. package/lib/execution/engine/http.js +19 -15
  79. package/lib/execution/engine/http.js.map +1 -1
  80. package/lib/execution/engine/interface.d.ts +4 -4
  81. package/lib/execution/engine/interface.js.map +1 -1
  82. package/lib/execution/engine/mock.d.ts +1 -0
  83. package/lib/execution/engine/mock.js +6 -0
  84. package/lib/execution/engine/mock.js.map +1 -1
  85. package/lib/execution/engine/payloadIdCache.d.ts +17 -0
  86. package/lib/execution/engine/payloadIdCache.js.map +1 -1
  87. package/lib/execution/engine/types.d.ts +29 -3
  88. package/lib/execution/engine/types.js +81 -0
  89. package/lib/execution/engine/types.js.map +1 -1
  90. package/lib/metrics/metrics/beacon.d.ts +3 -0
  91. package/lib/metrics/metrics/beacon.js +6 -0
  92. package/lib/metrics/metrics/beacon.js.map +1 -1
  93. package/lib/metrics/metrics/lodestar.d.ts +9 -0
  94. package/lib/metrics/metrics/lodestar.js +34 -0
  95. package/lib/metrics/metrics/lodestar.js.map +1 -1
  96. package/lib/metrics/validatorMonitor.d.ts +1 -1
  97. package/lib/metrics/validatorMonitor.js +6 -1
  98. package/lib/metrics/validatorMonitor.js.map +1 -1
  99. package/lib/network/gossip/interface.d.ts +5 -5
  100. package/lib/network/gossip/interface.js.map +1 -1
  101. package/lib/network/gossip/topic.d.ts +1720 -129
  102. package/lib/network/gossip/topic.js +5 -5
  103. package/lib/network/gossip/topic.js.map +1 -1
  104. package/lib/network/interface.d.ts +2 -2
  105. package/lib/network/network.d.ts +2 -2
  106. package/lib/network/network.js.map +1 -1
  107. package/lib/network/processor/gossipHandlers.js +6 -6
  108. package/lib/network/processor/gossipHandlers.js.map +1 -1
  109. package/lib/network/processor/gossipQueues/index.js +5 -2
  110. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  111. package/lib/network/processor/gossipQueues/indexed.js +1 -0
  112. package/lib/network/processor/gossipQueues/indexed.js.map +1 -1
  113. package/lib/util/sszBytes.d.ts +31 -8
  114. package/lib/util/sszBytes.js +74 -13
  115. package/lib/util/sszBytes.js.map +1 -1
  116. package/package.json +15 -15
@@ -1,9 +1,10 @@
1
1
  import { aggregateSignatures } from "@chainsafe/blst";
2
- import { ForkName, ForkSeq, MAX_ATTESTATIONS, MIN_ATTESTATION_INCLUSION_DELAY, SLOTS_PER_EPOCH } from "@lodestar/params";
3
- import { ssz } from "@lodestar/types";
2
+ import { BitArray } from "@chainsafe/ssz";
3
+ import { ForkName, ForkSeq, isForkPostElectra, MAX_ATTESTATIONS, MAX_ATTESTATIONS_ELECTRA, MAX_COMMITTEES_PER_SLOT, MIN_ATTESTATION_INCLUSION_DELAY, SLOTS_PER_EPOCH, } from "@lodestar/params";
4
+ import { ssz, isElectraAttestation, } from "@lodestar/types";
4
5
  import { computeEpochAtSlot, computeStartSlotAtEpoch, getBlockRootAtSlot, } from "@lodestar/state-transition";
5
6
  import { EpochDifference } from "@lodestar/fork-choice";
6
- import { MapDef, toRootHex } from "@lodestar/utils";
7
+ import { MapDef, toRootHex, assert } from "@lodestar/utils";
7
8
  import { intersectUint8Arrays, IntersectResult } from "../../util/bitArray.js";
8
9
  import { pruneBySlot, signatureFromBytesNoCheck } from "./utils.js";
9
10
  import { InsertOutcome } from "./types.js";
@@ -15,13 +16,19 @@ import { InsertOutcome } from "./types.js";
15
16
  */
16
17
  const MAX_RETAINED_ATTESTATIONS_PER_GROUP = 4;
17
18
  /**
18
- * On mainnet, each slot has 64 committees, and each block has 128 attestations max so in average
19
+ * Pre-electra, each slot has 64 committees, and each block has 128 attestations max so in average
19
20
  * we get 2 attestation per groups.
20
21
  * Starting from Jan 2024, we have a performance issue getting attestations for a block. Based on the
21
- * fact that lot of groups will have only 1 attestation since it's full of participation increase this number
22
+ * fact that lot of groups will have only 1 full participation attestation, increase this number
22
23
  * a bit higher than average. This also help decrease number of slots to search for attestations.
23
24
  */
24
25
  const MAX_ATTESTATIONS_PER_GROUP = 3;
26
+ /**
27
+ * For electra, each block has up to 8 aggregated attestations, assuming there are 3 for the "best"
28
+ * attestation data, there are still 5 for other attestation data so this constant is still good.
29
+ * We should separate to 2 constant based on conditions of different networks
30
+ */
31
+ const MAX_ATTESTATIONS_PER_GROUP_ELECTRA = 3;
25
32
  /**
26
33
  * Maintain a pool of aggregated attestations. Attestations can be retrieved for inclusion in a block
27
34
  * or api. The returned attestations are aggregated to maximise the number of validators that can be
@@ -29,18 +36,24 @@ const MAX_ATTESTATIONS_PER_GROUP = 3;
29
36
  * Note that we want to remove attestations with attesters that were included in the chain.
30
37
  */
31
38
  export class AggregatedAttestationPool {
32
- constructor() {
33
- this.attestationGroupByDataHashByIndexBySlot = new MapDef(() => new Map());
39
+ constructor(config) {
40
+ this.config = config;
41
+ /**
42
+ * post electra, different committees could have the same AttData and we have to consolidate attestations of the same
43
+ * data to be included in block, so we should group by data before index
44
+ * // TODO: make sure it does not affect performance for pre electra forks
45
+ */
46
+ this.attestationGroupByIndexByDataHexBySlot = new MapDef(() => new Map());
34
47
  this.lowestPermissibleSlot = 0;
35
48
  }
36
49
  /** For metrics to track size of the pool */
37
50
  getAttestationCount() {
38
51
  let attestationCount = 0;
39
52
  let attestationDataCount = 0;
40
- for (const attestationGroupByDataByIndex of this.attestationGroupByDataHashByIndexBySlot.values()) {
41
- for (const attestationGroupByData of attestationGroupByDataByIndex.values()) {
42
- attestationDataCount += attestationGroupByData.size;
43
- for (const attestationGroup of attestationGroupByData.values()) {
53
+ for (const attestationGroupByIndexByDataHex of this.attestationGroupByIndexByDataHexBySlot.values()) {
54
+ for (const attestationGroupByIndex of attestationGroupByIndexByDataHex.values()) {
55
+ attestationDataCount += attestationGroupByIndex.size;
56
+ for (const attestationGroup of attestationGroupByIndex.values()) {
44
57
  attestationCount += attestationGroup.getAttestationCount();
45
58
  }
46
59
  }
@@ -54,16 +67,31 @@ export class AggregatedAttestationPool {
54
67
  if (slot < lowestPermissibleSlot) {
55
68
  return InsertOutcome.Old;
56
69
  }
57
- const attestationGroupByDataHashByIndex = this.attestationGroupByDataHashByIndexBySlot.getOrDefault(slot);
58
- let attestationGroupByDataHash = attestationGroupByDataHashByIndex.get(attestation.data.index);
59
- if (!attestationGroupByDataHash) {
60
- attestationGroupByDataHash = new Map();
61
- attestationGroupByDataHashByIndex.set(attestation.data.index, attestationGroupByDataHash);
70
+ const attestationGroupByIndexByDataHash = this.attestationGroupByIndexByDataHexBySlot.getOrDefault(slot);
71
+ let attestationGroupByIndex = attestationGroupByIndexByDataHash.get(dataRootHex);
72
+ if (!attestationGroupByIndex) {
73
+ attestationGroupByIndex = new Map();
74
+ attestationGroupByIndexByDataHash.set(dataRootHex, attestationGroupByIndex);
75
+ }
76
+ let committeeIndex;
77
+ if (isForkPostElectra(this.config.getForkName(slot))) {
78
+ if (!isElectraAttestation(attestation)) {
79
+ throw Error(`Attestation should be type electra.Attestation for slot ${slot}`);
80
+ }
81
+ committeeIndex = attestation.committeeBits.getSingleTrueBit();
82
+ }
83
+ else {
84
+ if (isElectraAttestation(attestation)) {
85
+ throw Error(`Attestation should be type phase0.Attestation for slot ${slot}`);
86
+ }
87
+ committeeIndex = attestation.data.index;
62
88
  }
63
- let attestationGroup = attestationGroupByDataHash.get(dataRootHex);
89
+ // this should not happen because attestation should be validated before reaching this
90
+ assert.notNull(committeeIndex, "Committee index should not be null in aggregated attestation pool");
91
+ let attestationGroup = attestationGroupByIndex.get(committeeIndex);
64
92
  if (!attestationGroup) {
65
93
  attestationGroup = new MatchingDataAttestationGroup(committee, attestation.data);
66
- attestationGroupByDataHash.set(dataRootHex, attestationGroup);
94
+ attestationGroupByIndex.set(committeeIndex, attestationGroup);
67
95
  }
68
96
  return attestationGroup.add({
69
97
  attestation,
@@ -73,27 +101,33 @@ export class AggregatedAttestationPool {
73
101
  /** Remove attestations which are too old to be included in a block. */
74
102
  prune(clockSlot) {
75
103
  // Only retain SLOTS_PER_EPOCH slots
76
- pruneBySlot(this.attestationGroupByDataHashByIndexBySlot, clockSlot, SLOTS_PER_EPOCH);
104
+ pruneBySlot(this.attestationGroupByIndexByDataHexBySlot, clockSlot, SLOTS_PER_EPOCH);
77
105
  this.lowestPermissibleSlot = Math.max(clockSlot - SLOTS_PER_EPOCH, 0);
78
106
  }
107
+ getAttestationsForBlock(fork, forkChoice, state) {
108
+ const forkSeq = ForkSeq[fork];
109
+ return forkSeq >= ForkSeq.electra
110
+ ? this.getAttestationsForBlockElectra(fork, forkChoice, state)
111
+ : this.getAttestationsForBlockPreElectra(fork, forkChoice, state);
112
+ }
79
113
  /**
80
- * Get attestations to be included in a block. Returns $MAX_ATTESTATIONS items
114
+ * Get attestations to be included in a block pre-electra. Returns up to $MAX_ATTESTATIONS items
81
115
  */
82
- getAttestationsForBlock(fork, forkChoice, state) {
116
+ getAttestationsForBlockPreElectra(fork, forkChoice, state) {
83
117
  const stateSlot = state.slot;
84
118
  const stateEpoch = state.epochCtx.epoch;
85
119
  const statePrevEpoch = stateEpoch - 1;
86
120
  const notSeenValidatorsFn = getNotSeenValidatorsFn(state);
87
121
  const validateAttestationDataFn = getValidateAttestationDataFn(forkChoice, state);
88
122
  const attestationsByScore = [];
89
- const slots = Array.from(this.attestationGroupByDataHashByIndexBySlot.keys()).sort((a, b) => b - a);
123
+ const slots = Array.from(this.attestationGroupByIndexByDataHexBySlot.keys()).sort((a, b) => b - a);
90
124
  let minScore = Number.MAX_SAFE_INTEGER;
91
125
  let slotCount = 0;
92
126
  slot: for (const slot of slots) {
93
127
  slotCount++;
94
- const attestationGroupByDataHashByIndex = this.attestationGroupByDataHashByIndexBySlot.get(slot);
128
+ const attestationGroupByIndexByDataHash = this.attestationGroupByIndexByDataHexBySlot.get(slot);
95
129
  // should not happen
96
- if (!attestationGroupByDataHashByIndex) {
130
+ if (!attestationGroupByIndexByDataHash) {
97
131
  throw Error(`No aggregated attestation pool for slot=${slot}`);
98
132
  }
99
133
  const epoch = computeEpochAtSlot(slot);
@@ -108,30 +142,21 @@ export class AggregatedAttestationPool {
108
142
  continue; // Invalid attestations
109
143
  }
110
144
  const slotDelta = stateSlot - slot;
111
- const shuffling = state.epochCtx.getShufflingAtEpoch(epoch);
112
- const slotCommittees = shuffling.committees[slot % SLOTS_PER_EPOCH];
113
- for (const [committeeIndex, attestationGroupByData] of attestationGroupByDataHashByIndex.entries()) {
114
- // all attestations will be validated against the state in next step so we can get committee from the state
115
- // this is an improvement to save the notSeenValidatorsFn call for the same slot/index instead of the same attestation data
116
- if (committeeIndex > slotCommittees.length) {
117
- // invalid index, should not happen
118
- continue;
119
- }
120
- const committee = slotCommittees[committeeIndex];
121
- const notSeenAttestingIndices = notSeenValidatorsFn(epoch, committee);
122
- if (notSeenAttestingIndices === null || notSeenAttestingIndices.size === 0) {
123
- continue;
124
- }
125
- if (slotCount > 2 &&
126
- attestationsByScore.length >= MAX_ATTESTATIONS &&
127
- notSeenAttestingIndices.size / slotDelta < minScore) {
128
- // after 2 slots, there are a good chance that we have 2 * MAX_ATTESTATIONS attestations and break the for loop early
129
- // if not, we may have to scan all slots in the pool
130
- // if we have enough attestations and the max possible score is lower than scores of `attestationsByScore`, we should skip
131
- // otherwise it takes time to check attestation, add it and remove it later after the sort by score
132
- continue;
133
- }
134
- for (const attestationGroup of attestationGroupByData.values()) {
145
+ for (const attestationGroupByIndex of attestationGroupByIndexByDataHash.values()) {
146
+ for (const [committeeIndex, attestationGroup] of attestationGroupByIndex.entries()) {
147
+ const notSeenAttestingIndices = notSeenValidatorsFn(epoch, slot, committeeIndex);
148
+ if (notSeenAttestingIndices === null || notSeenAttestingIndices.size === 0) {
149
+ continue;
150
+ }
151
+ if (slotCount > 2 &&
152
+ attestationsByScore.length >= MAX_ATTESTATIONS &&
153
+ notSeenAttestingIndices.size / slotDelta < minScore) {
154
+ // after 2 slots, there are a good chance that we have 2 * MAX_ATTESTATIONS attestations and break the for loop early
155
+ // if not, we may have to scan all slots in the pool
156
+ // if we have enough attestations and the max possible score is lower than scores of `attestationsByScore`, we should skip
157
+ // otherwise it takes time to check attestation, add it and remove it later after the sort by score
158
+ continue;
159
+ }
135
160
  if (!validateAttestationDataFn(attestationGroup.data)) {
136
161
  continue;
137
162
  }
@@ -142,7 +167,7 @@ export class AggregatedAttestationPool {
142
167
  // These properties should not change after being validate in gossip
143
168
  // IF they have to be validated, do it only with one attestation per group since same data
144
169
  // The committeeCountPerSlot can be precomputed once per slot
145
- for (const { attestation, notSeenAttesterCount } of attestationGroup.getAttestationsForBlock(notSeenAttestingIndices)) {
170
+ for (const { attestation, notSeenAttesterCount } of attestationGroup.getAttestationsForBlock(fork, notSeenAttestingIndices)) {
146
171
  const score = notSeenAttesterCount / slotDelta;
147
172
  if (score < minScore) {
148
173
  minScore = score;
@@ -170,17 +195,117 @@ export class AggregatedAttestationPool {
170
195
  }
171
196
  return attestationsForBlock;
172
197
  }
198
+ /**
199
+ * Get attestations to be included in an electra block. Returns up to $MAX_ATTESTATIONS_ELECTRA items
200
+ */
201
+ getAttestationsForBlockElectra(fork, forkChoice, state) {
202
+ const stateSlot = state.slot;
203
+ const stateEpoch = state.epochCtx.epoch;
204
+ const statePrevEpoch = stateEpoch - 1;
205
+ const notSeenValidatorsFn = getNotSeenValidatorsFn(state);
206
+ const validateAttestationDataFn = getValidateAttestationDataFn(forkChoice, state);
207
+ const slots = Array.from(this.attestationGroupByIndexByDataHexBySlot.keys()).sort((a, b) => b - a);
208
+ const consolidations = [];
209
+ let minScore = Number.MAX_SAFE_INTEGER;
210
+ let slotCount = 0;
211
+ slot: for (const slot of slots) {
212
+ slotCount++;
213
+ const attestationGroupByIndexByDataHash = this.attestationGroupByIndexByDataHexBySlot.get(slot);
214
+ // should not happen
215
+ if (!attestationGroupByIndexByDataHash) {
216
+ throw Error(`No aggregated attestation pool for slot=${slot}`);
217
+ }
218
+ const epoch = computeEpochAtSlot(slot);
219
+ // validateAttestation condition: Attestation target epoch not in previous or current epoch
220
+ if (!(epoch === stateEpoch || epoch === statePrevEpoch)) {
221
+ continue; // Invalid attestations
222
+ }
223
+ // validateAttestation condition: Attestation slot not within inclusion window
224
+ if (!(slot + MIN_ATTESTATION_INCLUSION_DELAY <= stateSlot)) {
225
+ continue; // Invalid attestations
226
+ }
227
+ const slotDelta = stateSlot - slot;
228
+ // CommitteeIndex 0 1 2 ... Consolidation
229
+ // Attestations att00 --- att10 --- att20 --- 0 (att 00 10 20)
230
+ // att01 --- - --- att21 --- 1 (att 01 __ 21)
231
+ // - --- - --- att22 --- 2 (att __ __ 22)
232
+ for (const attestationGroupByIndex of attestationGroupByIndexByDataHash.values()) {
233
+ // sameAttDataCons could be up to MAX_ATTESTATIONS_PER_GROUP_ELECTRA
234
+ const sameAttDataCons = [];
235
+ for (const [committeeIndex, attestationGroup] of attestationGroupByIndex.entries()) {
236
+ const notSeenAttestingIndices = notSeenValidatorsFn(epoch, slot, committeeIndex);
237
+ if (notSeenAttestingIndices === null || notSeenAttestingIndices.size === 0) {
238
+ continue;
239
+ }
240
+ if (slotCount > 2 &&
241
+ consolidations.length >= MAX_ATTESTATIONS_ELECTRA &&
242
+ notSeenAttestingIndices.size / slotDelta < minScore) {
243
+ // after 2 slots, there are a good chance that we have 2 * MAX_ATTESTATIONS_ELECTRA attestations and break the for loop early
244
+ // if not, we may have to scan all slots in the pool
245
+ // if we have enough attestations and the max possible score is lower than scores of `attestationsByScore`, we should skip
246
+ // otherwise it takes time to check attestation, add it and remove it later after the sort by score
247
+ continue;
248
+ }
249
+ if (!validateAttestationDataFn(attestationGroup.data)) {
250
+ continue;
251
+ }
252
+ // TODO: Is it necessary to validateAttestation for:
253
+ // - Attestation committee index not within current committee count
254
+ // - Attestation aggregation bits length does not match committee length
255
+ //
256
+ // These properties should not change after being validate in gossip
257
+ // IF they have to be validated, do it only with one attestation per group since same data
258
+ // The committeeCountPerSlot can be precomputed once per slot
259
+ for (const [i, attestationNonParticipation] of attestationGroup
260
+ .getAttestationsForBlock(fork, notSeenAttestingIndices)
261
+ .entries()) {
262
+ if (sameAttDataCons[i] === undefined) {
263
+ sameAttDataCons[i] = {
264
+ byCommittee: new Map(),
265
+ attData: attestationNonParticipation.attestation.data,
266
+ totalNotSeenCount: 0,
267
+ // only update score after we have full data
268
+ score: 0,
269
+ };
270
+ }
271
+ sameAttDataCons[i].byCommittee.set(committeeIndex, attestationNonParticipation);
272
+ sameAttDataCons[i].totalNotSeenCount += attestationNonParticipation.notSeenAttesterCount;
273
+ }
274
+ for (const consolidation of sameAttDataCons) {
275
+ const score = consolidation.totalNotSeenCount / slotDelta;
276
+ if (score < minScore) {
277
+ minScore = score;
278
+ }
279
+ consolidations.push({ ...consolidation, score });
280
+ // Stop accumulating attestations there are enough that may have good scoring
281
+ if (consolidations.length >= MAX_ATTESTATIONS_ELECTRA * 2) {
282
+ break slot;
283
+ }
284
+ }
285
+ }
286
+ }
287
+ }
288
+ const sortedConsolidationsByScore = consolidations
289
+ .sort((a, b) => b.score - a.score)
290
+ .slice(0, MAX_ATTESTATIONS_ELECTRA);
291
+ // on chain aggregation is expensive, only do it after all
292
+ return sortedConsolidationsByScore.map(aggregateConsolidation);
293
+ }
173
294
  /**
174
295
  * Get all attestations optionally filtered by `attestation.data.slot`
296
+ * Note this function is not fork aware and can potentially return a mix
297
+ * of phase0.Attestations and electra.Attestations.
298
+ * Caller of this function is expected to filtered result if they desire
299
+ * a homogenous array.
175
300
  * @param bySlot slot to filter, `bySlot === attestation.data.slot`
176
301
  */
177
302
  getAll(bySlot) {
178
303
  let attestationGroupsArr;
179
304
  if (bySlot === undefined) {
180
- attestationGroupsArr = Array.from(this.attestationGroupByDataHashByIndexBySlot.values()).flatMap((byIndex) => Array.from(byIndex.values()));
305
+ attestationGroupsArr = Array.from(this.attestationGroupByIndexByDataHexBySlot.values()).flatMap((byIndex) => Array.from(byIndex.values()));
181
306
  }
182
307
  else {
183
- const attestationGroupsByIndex = this.attestationGroupByDataHashByIndexBySlot.get(bySlot);
308
+ const attestationGroupsByIndex = this.attestationGroupByIndexByDataHexBySlot.get(bySlot);
184
309
  if (!attestationGroupsByIndex)
185
310
  throw Error(`No attestations for slot ${bySlot}`);
186
311
  attestationGroupsArr = Array.from(attestationGroupsByIndex.values());
@@ -255,9 +380,14 @@ export class MatchingDataAttestationGroup {
255
380
  * @param notSeenAttestingIndices not seen attestting indices, i.e. indices in the same committee
256
381
  * @returns an array of AttestationNonParticipant
257
382
  */
258
- getAttestationsForBlock(notSeenAttestingIndices) {
383
+ getAttestationsForBlock(fork, notSeenAttestingIndices) {
259
384
  const attestations = [];
385
+ const isPostElectra = isForkPostElectra(fork);
260
386
  for (const { attestation } of this.attestations) {
387
+ if ((isPostElectra && !isElectraAttestation(attestation)) ||
388
+ (!isPostElectra && isElectraAttestation(attestation))) {
389
+ continue;
390
+ }
261
391
  let notSeenAttesterCount = 0;
262
392
  const { aggregationBits } = attestation;
263
393
  for (const notSeenIndex of notSeenAttestingIndices) {
@@ -269,13 +399,12 @@ export class MatchingDataAttestationGroup {
269
399
  attestations.push({ attestation, notSeenAttesterCount });
270
400
  }
271
401
  }
272
- if (attestations.length <= MAX_ATTESTATIONS_PER_GROUP) {
402
+ const maxAttestation = isPostElectra ? MAX_ATTESTATIONS_PER_GROUP_ELECTRA : MAX_ATTESTATIONS_PER_GROUP;
403
+ if (attestations.length <= maxAttestation) {
273
404
  return attestations;
274
405
  }
275
406
  else {
276
- return attestations
277
- .sort((a, b) => b.notSeenAttesterCount - a.notSeenAttesterCount)
278
- .slice(0, MAX_ATTESTATIONS_PER_GROUP);
407
+ return attestations.sort((a, b) => b.notSeenAttesterCount - a.notSeenAttesterCount).slice(0, maxAttestation);
279
408
  }
280
409
  }
281
410
  /** Get attestations for API. */
@@ -290,6 +419,33 @@ export function aggregateInto(attestation1, attestation2) {
290
419
  const signature2 = signatureFromBytesNoCheck(attestation2.attestation.signature);
291
420
  attestation1.attestation.signature = aggregateSignatures([signature1, signature2]).toBytes();
292
421
  }
422
+ /**
423
+ * Electra and after: Block proposer consolidates attestations with the same
424
+ * attestation data from different committee into a single attestation
425
+ * https://github.com/ethereum/consensus-specs/blob/aba6345776aa876dad368cab27fbbb23fae20455/specs/_features/eip7549/validator.md?plain=1#L39
426
+ */
427
+ export function aggregateConsolidation({ byCommittee, attData }) {
428
+ const committeeBits = BitArray.fromBitLen(MAX_COMMITTEES_PER_SLOT);
429
+ // TODO: can we improve this?
430
+ let aggregationBits = [];
431
+ const signatures = [];
432
+ const sortedCommittees = Array.from(byCommittee.keys()).sort((a, b) => a - b);
433
+ for (const committeeIndex of sortedCommittees) {
434
+ const attestationNonParticipation = byCommittee.get(committeeIndex);
435
+ if (attestationNonParticipation !== undefined) {
436
+ const { attestation } = attestationNonParticipation;
437
+ committeeBits.set(committeeIndex, true);
438
+ aggregationBits = [...aggregationBits, ...attestation.aggregationBits.toBoolArray()];
439
+ signatures.push(signatureFromBytesNoCheck(attestation.signature));
440
+ }
441
+ }
442
+ return {
443
+ aggregationBits: BitArray.fromBoolArray(aggregationBits),
444
+ data: attData,
445
+ committeeBits,
446
+ signature: aggregateSignatures(signatures).toBytes(),
447
+ };
448
+ }
293
449
  /**
294
450
  * Pre-compute participation from a CachedBeaconStateAllForks, for use to check if an attestation's committee
295
451
  * has already attested or not.
@@ -304,11 +460,12 @@ export function getNotSeenValidatorsFn(state) {
304
460
  const stateEpoch = computeEpochAtSlot(state.slot);
305
461
  const previousEpochParticipants = extractParticipationPhase0(phase0State.previousEpochAttestations.getAllReadonly(), state);
306
462
  const currentEpochParticipants = extractParticipationPhase0(phase0State.currentEpochAttestations.getAllReadonly(), state);
307
- return (epoch, committee) => {
463
+ return (epoch, slot, committeeIndex) => {
308
464
  const participants = epoch === stateEpoch ? currentEpochParticipants : epoch === stateEpoch - 1 ? previousEpochParticipants : null;
309
465
  if (participants === null) {
310
466
  return null;
311
467
  }
468
+ const committee = state.epochCtx.getBeaconCommittee(slot, committeeIndex);
312
469
  const notSeenAttestingIndices = new Set();
313
470
  for (const [i, validatorIndex] of committee.entries()) {
314
471
  if (!participants.has(validatorIndex)) {
@@ -328,18 +485,28 @@ export function getNotSeenValidatorsFn(state) {
328
485
  const previousParticipation = altairState.previousEpochParticipation.getAll();
329
486
  const currentParticipation = altairState.currentEpochParticipation.getAll();
330
487
  const stateEpoch = computeEpochAtSlot(state.slot);
331
- return (epoch, committee) => {
488
+ // this function could be called multiple times with same slot + committeeIndex
489
+ const cachedNotSeenValidators = new Map();
490
+ return (epoch, slot, committeeIndex) => {
332
491
  const participationStatus = epoch === stateEpoch ? currentParticipation : epoch === stateEpoch - 1 ? previousParticipation : null;
333
492
  if (participationStatus === null) {
334
493
  return null;
335
494
  }
336
- const notSeenAttestingIndices = new Set();
495
+ const cacheKey = slot + "_" + committeeIndex;
496
+ let notSeenAttestingIndices = cachedNotSeenValidators.get(cacheKey);
497
+ if (notSeenAttestingIndices != null) {
498
+ // if all validators are seen then return null, we don't need to check for any attestations of same committee again
499
+ return notSeenAttestingIndices.size === 0 ? null : notSeenAttestingIndices;
500
+ }
501
+ const committee = state.epochCtx.getBeaconCommittee(slot, committeeIndex);
502
+ notSeenAttestingIndices = new Set();
337
503
  for (const [i, validatorIndex] of committee.entries()) {
338
504
  // no need to check flagIsTimelySource as if validator is not seen, it's participation status is 0
339
505
  if (participationStatus[validatorIndex] === 0) {
340
506
  notSeenAttestingIndices.add(i);
341
507
  }
342
508
  }
509
+ cachedNotSeenValidators.set(cacheKey, notSeenAttestingIndices);
343
510
  // if all validators are seen then return null, we don't need to check for any attestations of same committee again
344
511
  return notSeenAttestingIndices.size === 0 ? null : notSeenAttestingIndices;
345
512
  };
@@ -1 +1 @@
1
- {"version":3,"file":"aggregatedAttestationPool.js","sourceRoot":"","sources":["../../../src/chain/opPools/aggregatedAttestationPool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"aggregatedAttestationPool.js","sourceRoot":"","sources":["../../../src/chain/opPools/aggregatedAttestationPool.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,20 @@
1
- import { phase0, Slot, RootHex } from "@lodestar/types";
1
+ import { BitArray } from "@chainsafe/ssz";
2
+ import { Signature } from "@chainsafe/blst";
3
+ import { Slot, RootHex, Attestation } from "@lodestar/types";
4
+ import { ChainForkConfig } from "@lodestar/config";
2
5
  import { IClock } from "../../util/clock.js";
3
6
  import { InsertOutcome } from "./types.js";
7
+ type AggregateFastPhase0 = {
8
+ data: Attestation["data"];
9
+ aggregationBits: BitArray;
10
+ signature: Signature;
11
+ };
12
+ export type AggregateFastElectra = AggregateFastPhase0 & {
13
+ committeeBits: BitArray;
14
+ };
15
+ export type AggregateFast = AggregateFastPhase0 | AggregateFastElectra;
16
+ /** CommitteeIndex must be null for pre-electra. Must not be null post-electra */
17
+ type CommitteeIndex = number | null;
4
18
  /**
5
19
  * A pool of `Attestation` that is specially designed to store "unaggregated" attestations from
6
20
  * the native aggregation scheme.
@@ -25,12 +39,13 @@ import { InsertOutcome } from "./types.js";
25
39
  * receives and it can be triggered manually.
26
40
  */
27
41
  export declare class AttestationPool {
42
+ private readonly config;
28
43
  private readonly clock;
29
44
  private readonly cutOffSecFromSlot;
30
45
  private readonly preaggregateSlotDistance;
31
- private readonly attestationByRootBySlot;
46
+ private readonly aggregateByIndexByRootBySlot;
32
47
  private lowestPermissibleSlot;
33
- constructor(clock: IClock, cutOffSecFromSlot: number, preaggregateSlotDistance?: number);
48
+ constructor(config: ChainForkConfig, clock: IClock, cutOffSecFromSlot: number, preaggregateSlotDistance?: number);
34
49
  /** Returns current count of pre-aggregated attestations with unique data */
35
50
  getAttestationCount(): number;
36
51
  /**
@@ -50,11 +65,11 @@ export declare class AttestationPool {
50
65
  * - Valid committeeIndex
51
66
  * - Valid data
52
67
  */
53
- add(attestation: phase0.Attestation, attDataRootHex: RootHex): InsertOutcome;
68
+ add(committeeIndex: CommitteeIndex, attestation: Attestation, attDataRootHex: RootHex): InsertOutcome;
54
69
  /**
55
70
  * For validator API to get an aggregate
56
71
  */
57
- getAggregate(slot: Slot, dataRootHex: RootHex): phase0.Attestation | null;
72
+ getAggregate(slot: Slot, committeeIndex: CommitteeIndex, dataRootHex: RootHex): Attestation | null;
58
73
  /**
59
74
  * Removes any attestations with a slot lower than `current_slot - preaggregateSlotDistance`.
60
75
  * By default, not interested in attestations in old slots, we only preaggregate attestations for the current slot.
@@ -64,6 +79,7 @@ export declare class AttestationPool {
64
79
  * Get all attestations optionally filtered by `attestation.data.slot`
65
80
  * @param bySlot slot to filter, `bySlot === attestation.data.slot`
66
81
  */
67
- getAll(bySlot?: Slot): phase0.Attestation[];
82
+ getAll(bySlot?: Slot): Attestation[];
68
83
  }
84
+ export {};
69
85
  //# sourceMappingURL=attestationPool.d.ts.map