@lodestar/beacon-node 1.31.0-dev.af28220937 → 1.31.0-dev.bde6131d6a

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 (42) hide show
  1. package/lib/api/impl/config/index.js +5 -0
  2. package/lib/api/impl/config/index.js.map +1 -1
  3. package/lib/api/impl/validator/index.js +2 -1
  4. package/lib/api/impl/validator/index.js.map +1 -1
  5. package/lib/chain/blocks/blockInput/blockInput.d.ts +4 -2
  6. package/lib/chain/blocks/blockInput/blockInput.js +28 -12
  7. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  8. package/lib/chain/blocks/blockInput/index.d.ts +1 -0
  9. package/lib/chain/blocks/blockInput/index.js +1 -0
  10. package/lib/chain/blocks/blockInput/index.js.map +1 -1
  11. package/lib/chain/blocks/blockInput/types.d.ts +2 -1
  12. package/lib/chain/blocks/blockInput/utils.d.ts +9 -0
  13. package/lib/chain/blocks/blockInput/utils.js +35 -0
  14. package/lib/chain/blocks/blockInput/utils.js.map +1 -0
  15. package/lib/chain/blocks/importBlock.d.ts +5 -0
  16. package/lib/chain/blocks/importBlock.js +27 -2
  17. package/lib/chain/blocks/importBlock.js.map +1 -1
  18. package/lib/chain/chain.d.ts +2 -0
  19. package/lib/chain/chain.js +11 -2
  20. package/lib/chain/chain.js.map +1 -1
  21. package/lib/chain/interface.d.ts +2 -0
  22. package/lib/chain/interface.js.map +1 -1
  23. package/lib/chain/opPools/syncContributionAndProofPool.d.ts +11 -4
  24. package/lib/chain/opPools/syncContributionAndProofPool.js +50 -8
  25. package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
  26. package/lib/chain/opPools/types.d.ts +1 -1
  27. package/lib/chain/opPools/types.js +1 -1
  28. package/lib/chain/opPools/types.js.map +1 -1
  29. package/lib/chain/seenCache/seenAggregateAndProof.d.ts +3 -3
  30. package/lib/chain/seenCache/seenAggregateAndProof.js +12 -6
  31. package/lib/chain/seenCache/seenAggregateAndProof.js.map +1 -1
  32. package/lib/chain/seenCache/seenBlockInput.d.ts +84 -0
  33. package/lib/chain/seenCache/seenBlockInput.js +225 -0
  34. package/lib/chain/seenCache/seenBlockInput.js.map +1 -0
  35. package/lib/chain/validation/aggregateAndProof.js +2 -2
  36. package/lib/chain/validation/aggregateAndProof.js.map +1 -1
  37. package/lib/metrics/metrics/lodestar.d.ts +32 -1
  38. package/lib/metrics/metrics/lodestar.js +70 -4
  39. package/lib/metrics/metrics/lodestar.js.map +1 -1
  40. package/lib/network/processor/gossipHandlers.js +2 -1
  41. package/lib/network/processor/gossipHandlers.js.map +1 -1
  42. package/package.json +15 -15
@@ -28,11 +28,14 @@ export class SeenAggregatedAttestations {
28
28
  * Array of AttestingIndices by same attestation data root by epoch.
29
29
  * Note that there are at most TARGET_AGGREGATORS_PER_COMMITTEE (16) per attestation data.
30
30
  * */
31
- this.aggregateRootsByEpoch = new MapDef(() => new MapDef(() => []));
31
+ this.aggregateRootsByEpoch = new MapDef(() => new MapDef(() => new MapDef(() => [])));
32
32
  this.lowestPermissibleEpoch = 0;
33
33
  }
34
- isKnown(targetEpoch, attDataRoot, aggregationBits) {
35
- const seenAggregationInfoArr = this.aggregateRootsByEpoch.getOrDefault(targetEpoch).getOrDefault(attDataRoot);
34
+ isKnown(targetEpoch, committeeIndex, attDataRoot, aggregationBits) {
35
+ const seenAggregationInfoArr = this.aggregateRootsByEpoch
36
+ .getOrDefault(targetEpoch)
37
+ .getOrDefault(committeeIndex)
38
+ .getOrDefault(attDataRoot);
36
39
  this.metrics?.seenCache.aggregatedAttestations.isKnownCalls.inc();
37
40
  for (let i = 0; i < seenAggregationInfoArr.length; i++) {
38
41
  if (isSuperSetOrEqual(seenAggregationInfoArr[i].aggregationBits, aggregationBits)) {
@@ -44,12 +47,15 @@ export class SeenAggregatedAttestations {
44
47
  this.metrics?.seenCache.aggregatedAttestations.superSetCheckTotal.observe(seenAggregationInfoArr.length);
45
48
  return false;
46
49
  }
47
- add(targetEpoch, attDataRoot, newItem, checkIsKnown) {
50
+ add(targetEpoch, committeeIndex, attDataRoot, newItem, checkIsKnown) {
48
51
  const { aggregationBits } = newItem;
49
- if (checkIsKnown && this.isKnown(targetEpoch, attDataRoot, aggregationBits)) {
52
+ if (checkIsKnown && this.isKnown(targetEpoch, committeeIndex, attDataRoot, aggregationBits)) {
50
53
  return;
51
54
  }
52
- const seenAggregationInfoArr = this.aggregateRootsByEpoch.getOrDefault(targetEpoch).getOrDefault(attDataRoot);
55
+ const seenAggregationInfoArr = this.aggregateRootsByEpoch
56
+ .getOrDefault(targetEpoch)
57
+ .getOrDefault(committeeIndex)
58
+ .getOrDefault(attDataRoot);
53
59
  insertDesc(seenAggregationInfoArr, newItem);
54
60
  }
55
61
  prune(currentEpoch) {
@@ -1 +1 @@
1
- {"version":3,"file":"seenAggregateAndProof.js","sourceRoot":"","sources":["../../../src/chain/seenCache/seenAggregateAndProof.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"seenAggregateAndProof.js","sourceRoot":"","sources":["../../../src/chain/seenCache/seenAggregateAndProof.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ import { ChainForkConfig } from "@lodestar/config";
2
+ import { CheckpointWithHex } from "@lodestar/fork-choice";
3
+ import { RootHex, SignedBeaconBlock, deneb } from "@lodestar/types";
4
+ import { Logger } from "@lodestar/utils";
5
+ import { Metrics } from "../../metrics/metrics.js";
6
+ import { IClock } from "../../util/clock.js";
7
+ import { BlockInputBlobs, IBlockInput, SourceMeta } from "../blocks/blockInput/index.js";
8
+ import { ChainEventEmitter } from "../emitter.js";
9
+ export type SeenBlockInputCacheModules = {
10
+ config: ChainForkConfig;
11
+ clock: IClock;
12
+ chainEvents: ChainEventEmitter;
13
+ signal: AbortSignal;
14
+ metrics: Metrics | null;
15
+ logger?: Logger;
16
+ };
17
+ export type GetByBlobOptions = {
18
+ throwErrorIfAlreadyKnown?: boolean;
19
+ };
20
+ /**
21
+ * Consumers that create BlockInputs or change types of old BlockInputs
22
+ *
23
+ * - gossipHandlers (block and blob)
24
+ * - beaconBlocksMaybeBlobsByRange
25
+ * - unavailableBeaconBlobsByRoot (beaconBlocksMaybeBlobsByRoot)
26
+ * - publishBlock in the beacon/blocks/index.ts API
27
+ * https://github.com/ChainSafe/lodestar/blob/unstable/packages/beacon-node/src/api/impl/beacon/blocks/index.ts#L62
28
+ * - maybeValidateBlobs in verifyBlocksDataAvailability (is_data_available spec function)
29
+ * https://github.com/ChainSafe/lodestar/blob/unstable/packages/beacon-node/src/chain/blocks/verifyBlocksDataAvailability.ts#L111
30
+ *
31
+ *
32
+ * Pruning management for SeenBlockInputCache
33
+ * ------------------------------------------
34
+ * There are four cases for how pruning needs to be handled
35
+ * - Normal operation following head via gossip (and/or reqresp). For this situation the consumer (process pipeline or
36
+ * caller of processBlock) will call the `prune` method to remove any processed BlockInputs from the cache. This will
37
+ * also remove any ancestors of the processed BlockInput as that will also need to have been successfully processed
38
+ * for import to work correctly
39
+ * - onFinalized event handler will help to prune any non-canonical forks once the chain finalizes. Any block-slots that
40
+ * are before the finalized checkpoint will be pruned.
41
+ * - Range-sync periods. The range process uses this cache to store and sync blocks with DA data as the chain is pulled
42
+ * from peers. We pull batches, by epoch, so 32 slots are pulled at a time and several batches are pulled concurrently.
43
+ * It is important to set the MAX_BLOCK_INPUT_CACHE_SIZE high enough to support range sync activities. Currently the
44
+ * value is set for 5 batches of 32 slots. As process block is called (similar to following head) the BlockInput and
45
+ * its ancestors will be pruned.
46
+ * - Non-Finality times. This is a bit more tricky. There can be long periods of non-finality and storing everything
47
+ * will cause OOM. The pruneToMax will help ensure a hard limit on the number of stored blocks (with DA) that are held
48
+ * in memory at any one time. The value for MAX_BLOCK_INPUT_CACHE_SIZE is set to accommodate range-sync but in
49
+ * practice this value may need to be massaged in the future if we find issues when debugging non-finality
50
+ */
51
+ export declare class SeenBlockInputCache {
52
+ private readonly config;
53
+ private readonly clock;
54
+ private readonly chainEvents;
55
+ private readonly signal;
56
+ private readonly metrics;
57
+ private readonly logger?;
58
+ private blockInputs;
59
+ constructor({ config, clock, chainEvents, signal, metrics, logger }: SeenBlockInputCacheModules);
60
+ has(rootHex: RootHex): boolean;
61
+ get(rootHex: RootHex): IBlockInput | undefined;
62
+ /**
63
+ * Removes the single BlockInput from the cache
64
+ */
65
+ remove(rootHex: RootHex): void;
66
+ /**
67
+ * Removes a processed BlockInput from the cache and also removes any ancestors of processed blocks
68
+ */
69
+ prune(rootHex: RootHex): void;
70
+ onFinalized: (checkpoint: CheckpointWithHex) => void;
71
+ getByBlock({ block, source, seenTimestampSec, peerIdStr }: SourceMeta & {
72
+ block: SignedBeaconBlock;
73
+ }): IBlockInput;
74
+ getByBlob({ blobSidecar, source, seenTimestampSec, peerIdStr }: SourceMeta & {
75
+ blobSidecar: deneb.BlobSidecar;
76
+ }, opts?: GetByBlobOptions): BlockInputBlobs;
77
+ private buildCommonProps;
78
+ /**
79
+ * Use custom implementation of pruneSetToMax to allow for sorting by slot
80
+ * and deleting via key/rootHex
81
+ */
82
+ private pruneToMaxSize;
83
+ }
84
+ //# sourceMappingURL=seenBlockInput.d.ts.map
@@ -0,0 +1,225 @@
1
+ import { isForkPostDeneb } from "@lodestar/params";
2
+ import { computeStartSlotAtEpoch } from "@lodestar/state-transition";
3
+ import { LodestarError, toRootHex } from "@lodestar/utils";
4
+ import { BlockInputBlobs, BlockInputPreData, DAType, isBlockInputBlobs, isDaOutOfRange, } from "../blocks/blockInput/index.js";
5
+ import { ChainEvent } from "../emitter.js";
6
+ const MAX_BLOCK_INPUT_CACHE_SIZE = 5;
7
+ /**
8
+ * Consumers that create BlockInputs or change types of old BlockInputs
9
+ *
10
+ * - gossipHandlers (block and blob)
11
+ * - beaconBlocksMaybeBlobsByRange
12
+ * - unavailableBeaconBlobsByRoot (beaconBlocksMaybeBlobsByRoot)
13
+ * - publishBlock in the beacon/blocks/index.ts API
14
+ * https://github.com/ChainSafe/lodestar/blob/unstable/packages/beacon-node/src/api/impl/beacon/blocks/index.ts#L62
15
+ * - maybeValidateBlobs in verifyBlocksDataAvailability (is_data_available spec function)
16
+ * https://github.com/ChainSafe/lodestar/blob/unstable/packages/beacon-node/src/chain/blocks/verifyBlocksDataAvailability.ts#L111
17
+ *
18
+ *
19
+ * Pruning management for SeenBlockInputCache
20
+ * ------------------------------------------
21
+ * There are four cases for how pruning needs to be handled
22
+ * - Normal operation following head via gossip (and/or reqresp). For this situation the consumer (process pipeline or
23
+ * caller of processBlock) will call the `prune` method to remove any processed BlockInputs from the cache. This will
24
+ * also remove any ancestors of the processed BlockInput as that will also need to have been successfully processed
25
+ * for import to work correctly
26
+ * - onFinalized event handler will help to prune any non-canonical forks once the chain finalizes. Any block-slots that
27
+ * are before the finalized checkpoint will be pruned.
28
+ * - Range-sync periods. The range process uses this cache to store and sync blocks with DA data as the chain is pulled
29
+ * from peers. We pull batches, by epoch, so 32 slots are pulled at a time and several batches are pulled concurrently.
30
+ * It is important to set the MAX_BLOCK_INPUT_CACHE_SIZE high enough to support range sync activities. Currently the
31
+ * value is set for 5 batches of 32 slots. As process block is called (similar to following head) the BlockInput and
32
+ * its ancestors will be pruned.
33
+ * - Non-Finality times. This is a bit more tricky. There can be long periods of non-finality and storing everything
34
+ * will cause OOM. The pruneToMax will help ensure a hard limit on the number of stored blocks (with DA) that are held
35
+ * in memory at any one time. The value for MAX_BLOCK_INPUT_CACHE_SIZE is set to accommodate range-sync but in
36
+ * practice this value may need to be massaged in the future if we find issues when debugging non-finality
37
+ */
38
+ export class SeenBlockInputCache {
39
+ constructor({ config, clock, chainEvents, signal, metrics, logger }) {
40
+ this.blockInputs = new Map();
41
+ this.onFinalized = (checkpoint) => {
42
+ const cutoffSlot = computeStartSlotAtEpoch(checkpoint.epoch);
43
+ for (const [rootHex, blockInput] of this.blockInputs) {
44
+ if (blockInput.slot < cutoffSlot) {
45
+ this.blockInputs.delete(rootHex);
46
+ }
47
+ }
48
+ this.pruneToMaxSize();
49
+ };
50
+ this.config = config;
51
+ this.clock = clock;
52
+ this.chainEvents = chainEvents;
53
+ this.signal = signal;
54
+ this.metrics = metrics;
55
+ this.logger = logger;
56
+ if (metrics) {
57
+ metrics.seenCache.blockInput.blockInputCount.addCollect(() => metrics.seenCache.blockInput.blockInputCount.set(this.blockInputs.size));
58
+ }
59
+ this.chainEvents.on(ChainEvent.forkChoiceFinalized, this.onFinalized);
60
+ this.signal.addEventListener("abort", () => {
61
+ this.chainEvents.off(ChainEvent.forkChoiceFinalized, this.onFinalized);
62
+ });
63
+ }
64
+ has(rootHex) {
65
+ return this.blockInputs.has(rootHex);
66
+ }
67
+ get(rootHex) {
68
+ return this.blockInputs.get(rootHex);
69
+ }
70
+ /**
71
+ * Removes the single BlockInput from the cache
72
+ */
73
+ remove(rootHex) {
74
+ this.blockInputs.delete(rootHex);
75
+ }
76
+ /**
77
+ * Removes a processed BlockInput from the cache and also removes any ancestors of processed blocks
78
+ */
79
+ prune(rootHex) {
80
+ let blockInput = this.blockInputs.get(rootHex);
81
+ let parentRootHex = blockInput?.parentRootHex;
82
+ while (blockInput) {
83
+ this.blockInputs.delete(blockInput.blockRootHex);
84
+ blockInput = this.blockInputs.get(parentRootHex ?? "");
85
+ parentRootHex = blockInput?.parentRootHex;
86
+ }
87
+ this.pruneToMaxSize();
88
+ }
89
+ getByBlock({ block, source, seenTimestampSec, peerIdStr }) {
90
+ const blockRoot = this.config.getForkTypes(block.message.slot).BeaconBlock.hashTreeRoot(block.message);
91
+ const blockRootHex = toRootHex(blockRoot);
92
+ // TODO(peerDAS): Why is it necessary to static cast this here. All conditional paths result in a valid value so should be defined correctly below
93
+ let blockInput = this.blockInputs.get(blockRootHex);
94
+ if (!blockInput) {
95
+ const { forkName, daOutOfRange } = this.buildCommonProps(block.message.slot);
96
+ if (!isForkPostDeneb(forkName)) {
97
+ blockInput = BlockInputPreData.createFromBlock({
98
+ block,
99
+ blockRootHex,
100
+ daOutOfRange,
101
+ forkName,
102
+ source: {
103
+ source,
104
+ seenTimestampSec,
105
+ peerIdStr,
106
+ },
107
+ });
108
+ }
109
+ // else if (isForkPostFulu(forkName)) {
110
+ // blockInput = new BlockInputColumns.createFromBlock({
111
+ // block,
112
+ // blockRootHex,
113
+ // daOutOfRange,
114
+ // forkName,
115
+ // custodyColumns: this.custodyConfig.custodyColumns,
116
+ // sampledColumns: this.custodyConfig.sampledColumns,
117
+ // source: {
118
+ // source,
119
+ // seenTimestampSec,
120
+ // peerIdStr
121
+ // }
122
+ // })
123
+ // }
124
+ else {
125
+ blockInput = BlockInputBlobs.createFromBlock({
126
+ block: block,
127
+ blockRootHex,
128
+ daOutOfRange,
129
+ forkName,
130
+ source: {
131
+ source,
132
+ seenTimestampSec,
133
+ peerIdStr,
134
+ },
135
+ });
136
+ }
137
+ this.blockInputs.set(blockInput.blockRootHex, blockInput);
138
+ }
139
+ if (!blockInput.hasBlock()) {
140
+ blockInput.addBlock({ block, blockRootHex, source: { source, seenTimestampSec, peerIdStr } });
141
+ }
142
+ else {
143
+ this.logger?.debug("Attempt to cache block but is already cached on BlockInput", blockInput.getLogMeta());
144
+ this.metrics?.seenCache.blockInput.duplicateBlockCount.inc({ source });
145
+ }
146
+ return blockInput;
147
+ }
148
+ getByBlob({ blobSidecar, source, seenTimestampSec, peerIdStr }, opts = {}) {
149
+ const blockRoot = this.config
150
+ .getForkTypes(blobSidecar.signedBlockHeader.message.slot)
151
+ .BeaconBlockHeader.hashTreeRoot(blobSidecar.signedBlockHeader.message);
152
+ const blockRootHex = toRootHex(blockRoot);
153
+ // TODO(peerDAS): Why is it necessary to static cast this here. All conditional paths result in a valid value so should be defined correctly below
154
+ let blockInput = this.blockInputs.get(blockRootHex);
155
+ let created = false;
156
+ if (!blockInput) {
157
+ created = true;
158
+ const { forkName, daOutOfRange } = this.buildCommonProps(blobSidecar.signedBlockHeader.message.slot);
159
+ blockInput = BlockInputBlobs.createFromBlob({
160
+ blobSidecar,
161
+ blockRootHex,
162
+ daOutOfRange,
163
+ forkName,
164
+ source,
165
+ seenTimestampSec,
166
+ peerIdStr,
167
+ });
168
+ this.metrics?.seenCache.blockInput.createdByBlob.inc();
169
+ this.blockInputs.set(blockRootHex, blockInput);
170
+ }
171
+ if (!isBlockInputBlobs(blockInput)) {
172
+ throw new SeenBlockInputCacheError({
173
+ code: SeenBlockInputCacheErrorCode.WRONG_BLOCK_INPUT_TYPE,
174
+ cachedType: blockInput.type,
175
+ requestedType: DAType.Blobs,
176
+ ...blockInput.getLogMeta(),
177
+ }, `BlockInputType mismatch adding blobIndex=${blobSidecar.index}`);
178
+ }
179
+ if (!blockInput.hasBlob(blobSidecar.index)) {
180
+ blockInput.addBlob({ blobSidecar, blockRootHex, source, seenTimestampSec, peerIdStr });
181
+ }
182
+ else if (!created) {
183
+ this.logger?.debug(`Attempt to cache blob index #${blobSidecar.index} but is already cached on BlockInput`, blockInput.getLogMeta());
184
+ this.metrics?.seenCache.blockInput.duplicateBlobCount.inc({ source });
185
+ if (opts.throwErrorIfAlreadyKnown) {
186
+ throw new SeenBlockInputCacheError({
187
+ code: SeenBlockInputCacheErrorCode.GOSSIP_BLOB_ALREADY_KNOWN,
188
+ ...blockInput.getLogMeta(),
189
+ });
190
+ }
191
+ }
192
+ return blockInput;
193
+ }
194
+ buildCommonProps(slot) {
195
+ const forkName = this.config.getForkName(slot);
196
+ return {
197
+ forkName,
198
+ daOutOfRange: isDaOutOfRange(this.config, forkName, slot, this.clock.currentEpoch),
199
+ };
200
+ }
201
+ /**
202
+ * Use custom implementation of pruneSetToMax to allow for sorting by slot
203
+ * and deleting via key/rootHex
204
+ */
205
+ pruneToMaxSize() {
206
+ let itemsToDelete = this.blockInputs.size - MAX_BLOCK_INPUT_CACHE_SIZE;
207
+ if (itemsToDelete > 0) {
208
+ const sorted = [...this.blockInputs.entries()].sort((a, b) => b[1].slot - a[1].slot);
209
+ for (const [rootHex] of sorted) {
210
+ this.blockInputs.delete(rootHex);
211
+ itemsToDelete--;
212
+ if (itemsToDelete <= 0)
213
+ return;
214
+ }
215
+ }
216
+ }
217
+ }
218
+ var SeenBlockInputCacheErrorCode;
219
+ (function (SeenBlockInputCacheErrorCode) {
220
+ SeenBlockInputCacheErrorCode["WRONG_BLOCK_INPUT_TYPE"] = "BLOCK_INPUT_CACHE_ERROR_WRONG_BLOCK_INPUT_TYPE";
221
+ SeenBlockInputCacheErrorCode["GOSSIP_BLOB_ALREADY_KNOWN"] = "BLOCK_INPUT_CACHE_ERROR_GOSSIP_BLOB_ALREADY_KNOWN";
222
+ })(SeenBlockInputCacheErrorCode || (SeenBlockInputCacheErrorCode = {}));
223
+ class SeenBlockInputCacheError extends LodestarError {
224
+ }
225
+ //# sourceMappingURL=seenBlockInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seenBlockInput.js","sourceRoot":"","sources":["../../../src/chain/seenCache/seenBlockInput.ts"],"names":[],"mappings":"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"}
@@ -88,7 +88,7 @@ async function validateAggregateAndProof(fork, chain, signedAggregateAndProof, s
88
88
  ? cachedAttData.attDataRootHex
89
89
  : toRootHex(ssz.phase0.AttestationData.hashTreeRoot(attData));
90
90
  if (!skipValidationKnownAttesters &&
91
- chain.seenAggregatedAttestations.isKnown(targetEpoch, attDataRootHex, aggregationBits)) {
91
+ chain.seenAggregatedAttestations.isKnown(targetEpoch, attIndex, attDataRootHex, aggregationBits)) {
92
92
  throw new AttestationError(GossipAction.IGNORE, {
93
93
  code: AttestationErrorCode.ATTESTERS_ALREADY_KNOWN,
94
94
  targetEpoch,
@@ -166,7 +166,7 @@ async function validateAggregateAndProof(fork, chain, signedAggregateAndProof, s
166
166
  });
167
167
  }
168
168
  chain.seenAggregators.add(targetEpoch, aggregatorIndex);
169
- chain.seenAggregatedAttestations.add(targetEpoch, attDataRootHex, { aggregationBits, trueBitCount: attestingIndices.length }, false);
169
+ chain.seenAggregatedAttestations.add(targetEpoch, attIndex, attDataRootHex, { aggregationBits, trueBitCount: attestingIndices.length }, false);
170
170
  return { indexedAttestation, committeeIndices, attDataRootHex };
171
171
  }
172
172
  //# sourceMappingURL=aggregateAndProof.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"aggregateAndProof.js","sourceRoot":"","sources":["../../../src/chain/validation/aggregateAndProof.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"aggregateAndProof.js","sourceRoot":"","sources":["../../../src/chain/validation/aggregateAndProof.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { BlockInputSource } from "../../chain/blocks/blockInput/index.js";
1
2
  import { BlobsSource, BlockSource } from "../../chain/blocks/types.js";
2
3
  import { JobQueueItemType } from "../../chain/bls/index.js";
3
4
  import { AttestationErrorCode, BlockErrorCode } from "../../chain/errors/index.js";
@@ -366,7 +367,26 @@ export declare function createLodestarMetrics(register: RegistryMetricCreator, m
366
367
  syncCommitteeMessagePoolInsertOutcome: import("@lodestar/utils").Counter<{
367
368
  insertOutcome: InsertOutcome;
368
369
  }>;
369
- syncContributionAndProofPoolSize: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
370
+ syncContributionAndProofPool: {
371
+ size: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
372
+ gossipInsertOutcome: import("@lodestar/utils").Counter<{
373
+ insertOutcome: InsertOutcome;
374
+ }>;
375
+ apiInsertOutcome: import("@lodestar/utils").Counter<{
376
+ insertOutcome: InsertOutcome;
377
+ }>;
378
+ blockRootsPerSlot: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
379
+ subnetsByBlockRoot: import("@lodestar/utils").GaugeExtra<{
380
+ index: number;
381
+ }>;
382
+ participantsByBlockRoot: import("@lodestar/utils").GaugeExtra<{
383
+ index: number;
384
+ }>;
385
+ getAggregateRoots: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
386
+ getAggregateSubnets: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
387
+ getAggregateParticipants: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
388
+ getAggregateReturnsEmpty: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
389
+ };
370
390
  };
371
391
  chain: {
372
392
  blacklistedBlocks: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
@@ -457,6 +477,17 @@ export declare function createLodestarMetrics(register: RegistryMetricCreator, m
457
477
  reason: RejectReason;
458
478
  }>;
459
479
  };
480
+ blockInput: {
481
+ blockInputCount: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
482
+ duplicateBlockCount: import("@lodestar/utils").GaugeExtra<{
483
+ source: BlockInputSource;
484
+ }>;
485
+ duplicateBlobCount: import("@lodestar/utils").GaugeExtra<{
486
+ source: BlockInputSource;
487
+ }>;
488
+ createdByBlock: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
489
+ createdByBlob: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
490
+ };
460
491
  };
461
492
  regenFnCallTotal: import("@lodestar/utils").GaugeExtra<{
462
493
  entrypoint: RegenFnName;
@@ -867,10 +867,52 @@ export function createLodestarMetrics(register, metadata, genesisTime) {
867
867
  help: "Total number of InsertOutcome as a result of adding a SyncCommitteeMessage to pool",
868
868
  labelNames: ["insertOutcome"],
869
869
  }),
870
- syncContributionAndProofPoolSize: register.gauge({
871
- name: "lodestar_oppool_sync_contribution_and_proof_pool_pool_size",
872
- help: "Current size of the SyncContributionAndProofPool unique by slot subnet and block root",
873
- }),
870
+ syncContributionAndProofPool: {
871
+ size: register.gauge({
872
+ name: "lodestar_oppool_sync_contribution_and_proof_pool_size",
873
+ help: "Current size of the SyncContributionAndProofPool unique by slot subnet and block root",
874
+ }),
875
+ gossipInsertOutcome: register.counter({
876
+ name: "lodestar_oppool_sync_contribution_and_proof_pool_gossip_insert_outcome_total",
877
+ help: "Total number of InsertOutcome as a result of adding a ContributionAndProof from gossip into the pool",
878
+ labelNames: ["insertOutcome"],
879
+ }),
880
+ apiInsertOutcome: register.counter({
881
+ name: "lodestar_oppool_sync_contribution_and_proof_pool_api_insert_outcome_total",
882
+ help: "Total number of InsertOutcome as a result of adding a ContributionAndProof from api into the pool",
883
+ labelNames: ["insertOutcome"],
884
+ }),
885
+ blockRootsPerSlot: register.gauge({
886
+ name: "lodestar_oppool_sync_contribution_and_proof_pool_block_roots_per_slot_total",
887
+ help: "Total number of block roots per slot in SyncContributionAndProofPool",
888
+ }),
889
+ subnetsByBlockRoot: register.gauge({
890
+ name: "lodestar_oppool_sync_contribution_and_proof_pool_subnets_by_block_root_total",
891
+ help: "Total number of subnets per block root in SyncContributionAndProofPool",
892
+ labelNames: ["index"],
893
+ }),
894
+ participantsByBlockRoot: register.gauge({
895
+ name: "lodestar_oppool_sync_contribution_and_proof_pool_participants_by_block_root_total",
896
+ help: "Total number of participants per block root in SyncContributionAndProofPool",
897
+ labelNames: ["index"],
898
+ }),
899
+ getAggregateRoots: register.gauge({
900
+ name: "lodestar_oppool_sync_contribution_and_proof_pool_get_aggregate_roots_total",
901
+ help: "Total number of block roots in SyncContributionAndProofPool.getAggregate(slot)",
902
+ }),
903
+ getAggregateSubnets: register.gauge({
904
+ name: "lodestar_oppool_sync_contribution_and_proof_pool_get_aggregate_subnets_total",
905
+ help: "Total number of subnets in SyncContributionAndProofPool.getAggregate(slot, root)",
906
+ }),
907
+ getAggregateParticipants: register.gauge({
908
+ name: "lodestar_oppool_sync_contribution_and_proof_pool_get_aggregate_participants_total",
909
+ help: "Total number of participants in SyncContributionAndProofPool.getAggregate(slot, root)",
910
+ }),
911
+ getAggregateReturnsEmpty: register.gauge({
912
+ name: "lodestar_oppool_sync_contribution_and_proof_pool_get_aggregate_returns_empty_total",
913
+ help: "Total number of empty returns in SyncContributionAndProofPool.getAggregate(slot, root)",
914
+ }),
915
+ },
874
916
  },
875
917
  chain: {
876
918
  blacklistedBlocks: register.gauge({
@@ -1137,6 +1179,30 @@ export function createLodestarMetrics(register, metadata, genesisTime) {
1137
1179
  labelNames: ["reason"],
1138
1180
  }),
1139
1181
  },
1182
+ blockInput: {
1183
+ blockInputCount: register.gauge({
1184
+ name: "lodestar_seen_block_input_cache_size",
1185
+ help: "Number of cached BlockInputs",
1186
+ }),
1187
+ duplicateBlockCount: register.gauge({
1188
+ name: "lodestar_seen_block_input_cache_duplicate_block_count",
1189
+ help: "Total number of duplicate blocks that pass validation and attempt to be cached but are known",
1190
+ labelNames: ["source"],
1191
+ }),
1192
+ duplicateBlobCount: register.gauge({
1193
+ name: "lodestar_seen_block_input_cache_duplicate_blob_count",
1194
+ help: "Total number of duplicate blobs that pass validation and attempt to be cached but are known",
1195
+ labelNames: ["source"],
1196
+ }),
1197
+ createdByBlock: register.gauge({
1198
+ name: "lodestar_seen_block_input_cache_items_created_by_block",
1199
+ help: "Number of BlockInputs created via a block being seen first",
1200
+ }),
1201
+ createdByBlob: register.gauge({
1202
+ name: "lodestar_seen_block_input_cache_items_created_by_blob",
1203
+ help: "Number of BlockInputs created via a blob being seen first",
1204
+ }),
1205
+ },
1140
1206
  },
1141
1207
  regenFnCallTotal: register.gauge({
1142
1208
  name: "lodestar_regen_fn_call_total",