@lodestar/beacon-node 1.51.0-dev.d5620be4a1 → 1.51.0-dev.dc21d14c20

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.
@@ -1 +1 @@
1
- {"version":3,"file":"syncCommittee.d.ts","sourceRoot":"","sources":["../../../src/chain/validation/syncCommittee.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,gBAAgB,EAAoB,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAC,QAAQ,EAAE,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAGjD,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAG7C,KAAK,mBAAmB,GAAG,MAAM,CAAC;AAElC;;GAEG;AACH,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,YAAY,EACnB,aAAa,EAAE,MAAM,CAAC,oBAAoB,EAC1C,MAAM,EAAE,QAAQ,GACf,OAAO,CAAC;IAAC,qBAAqB,EAAE,mBAAmB,EAAE,CAAA;CAAC,CAAC,CAsDzD;AAED,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,gBAAgB,EAC3B,aAAa,EAAE,MAAM,CAAC,oBAAoB,GACzC,OAAO,CAAC,IAAI,CAAC,CAGf;AAmBD;;GAEG;AACH,wBAAgB,oCAAoC,CAClD,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,gBAAgB,EAC3B,MAAM,EAAE,QAAQ,EAChB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,GAAG,gBAAgB,CAAC,GACjE,mBAAmB,EAAE,CA+BvB"}
1
+ {"version":3,"file":"syncCommittee.d.ts","sourceRoot":"","sources":["../../../src/chain/validation/syncCommittee.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,gBAAgB,EAAoB,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAgB,QAAQ,EAAkB,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAIhF,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAG7C,KAAK,mBAAmB,GAAG,MAAM,CAAC;AAElC;;GAEG;AACH,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,YAAY,EACnB,aAAa,EAAE,MAAM,CAAC,oBAAoB,EAC1C,MAAM,EAAE,QAAQ,GACf,OAAO,CAAC;IAAC,qBAAqB,EAAE,mBAAmB,EAAE,CAAA;CAAC,CAAC,CAkCzD;AAqCD,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,gBAAgB,EAC3B,aAAa,EAAE,MAAM,CAAC,oBAAoB,GACzC,OAAO,CAAC,IAAI,CAAC,CAGf;AAmBD;;GAEG;AACH,wBAAgB,oCAAoC,CAClD,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,gBAAgB,EAC3B,MAAM,EAAE,QAAQ,EAChB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,GAAG,gBAAgB,CAAC,GACjE,mBAAmB,EAAE,CA+BvB"}
@@ -19,6 +19,20 @@ export async function validateGossipSyncCommittee(chain, syncCommittee, subnet)
19
19
  // > Checked in validateGossipSyncCommitteeExceptSig()
20
20
  // [IGNORE] There has been no other valid sync committee signature for the declared slot for the validator referenced
21
21
  // by sync_committee_signature.validator_index.
22
+ assertSyncCommitteeMessageNotKnown(chain, slot, subnet, validatorIndex, messageRoot, chain.metrics);
23
+ // [REJECT] The subnet_id is valid for the given validator, i.e. subnet_id in compute_subnets_for_sync_committee(state, sync_committee_signature.validator_index).
24
+ // Note this validation implies the validator is part of the broader current sync committee along with the correct subcommittee.
25
+ // > Checked in validateGossipSyncCommitteeExceptSig()
26
+ // [REJECT] The signature is valid for the message beacon_block_root for the validator referenced by validator_index.
27
+ await validateSyncCommitteeSigOnly(chain, headState, syncCommittee);
28
+ // Re-check after the await: concurrent messages from the same validator all pass the check above.
29
+ // Metrics were already counted by the first check.
30
+ assertSyncCommitteeMessageNotKnown(chain, slot, subnet, validatorIndex, messageRoot, null);
31
+ // Register this valid item as seen
32
+ chain.seenSyncCommitteeMessages.add(slot, subnet, validatorIndex, messageRoot);
33
+ return { indicesInSubcommittee };
34
+ }
35
+ function assertSyncCommitteeMessageNotKnown(chain, slot, subnet, validatorIndex, messageRoot, metrics) {
22
36
  const prevRoot = chain.seenSyncCommitteeMessages.get(slot, subnet, validatorIndex);
23
37
  if (prevRoot) {
24
38
  let shouldIgnore = false;
@@ -27,9 +41,9 @@ export async function validateGossipSyncCommittee(chain, syncCommittee, subnet)
27
41
  }
28
42
  else {
29
43
  const headRoot = chain.forkChoice.getHeadRoot();
30
- chain.metrics?.gossipSyncCommittee.equivocationCount.inc();
44
+ metrics?.gossipSyncCommittee.equivocationCount.inc();
31
45
  if (messageRoot === headRoot) {
32
- chain.metrics?.gossipSyncCommittee.equivocationToHeadCount.inc();
46
+ metrics?.gossipSyncCommittee.equivocationToHeadCount.inc();
33
47
  }
34
48
  else {
35
49
  shouldIgnore = true;
@@ -45,14 +59,6 @@ export async function validateGossipSyncCommittee(chain, syncCommittee, subnet)
45
59
  });
46
60
  }
47
61
  }
48
- // [REJECT] The subnet_id is valid for the given validator, i.e. subnet_id in compute_subnets_for_sync_committee(state, sync_committee_signature.validator_index).
49
- // Note this validation implies the validator is part of the broader current sync committee along with the correct subcommittee.
50
- // > Checked in validateGossipSyncCommitteeExceptSig()
51
- // [REJECT] The signature is valid for the message beacon_block_root for the validator referenced by validator_index.
52
- await validateSyncCommitteeSigOnly(chain, headState, syncCommittee);
53
- // Register this valid item as seen
54
- chain.seenSyncCommitteeMessages.add(slot, subnet, validatorIndex, messageRoot);
55
- return { indicesInSubcommittee };
56
62
  }
57
63
  export async function validateApiSyncCommittee(chain, headState, syncCommittee) {
58
64
  const prioritizeBls = true;
@@ -1 +1 @@
1
- {"version":3,"file":"syncCommittee.js","sourceRoot":"","sources":["../../../src/chain/validation/syncCommittee.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"syncCommittee.js","sourceRoot":"","sources":["../../../src/chain/validation/syncCommittee.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"syncCommitteeContributionAndProof.d.ts","sourceRoot":"","sources":["../../../src/chain/validation/syncCommitteeContributionAndProof.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,cAAc,EAAE,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAEvD,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAQ7C;;GAEG;AACH,wBAAsB,+CAA+C,CACnE,KAAK,EAAE,YAAY,EACnB,0BAA0B,EAAE,MAAM,CAAC,0BAA0B,EAC7D,+BAA+B,UAAQ,GACtC,OAAO,CAAC;IAAC,+BAA+B,EAAE,cAAc,EAAE,CAAA;CAAC,CAAC,CA+E9D"}
1
+ {"version":3,"file":"syncCommitteeContributionAndProof.d.ts","sourceRoot":"","sources":["../../../src/chain/validation/syncCommitteeContributionAndProof.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,cAAc,EAAE,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAEvD,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAQ7C;;GAEG;AACH,wBAAsB,+CAA+C,CACnE,KAAK,EAAE,YAAY,EACnB,0BAA0B,EAAE,MAAM,CAAC,0BAA0B,EAC7D,+BAA+B,UAAQ,GACtC,OAAO,CAAC;IAAC,+BAA+B,EAAE,cAAc,EAAE,CAAA;CAAC,CAAC,CA4F9D"}
@@ -68,6 +68,17 @@ export async function validateSyncCommitteeGossipContributionAndProof(chain, sig
68
68
  code: SyncCommitteeErrorCode.INVALID_SIGNATURE,
69
69
  });
70
70
  }
71
+ // Re-check after the await: concurrent contributions from the same aggregator all pass the checks above
72
+ if (chain.seenContributionAndProof.isAggregatorKnown(slot, subcommitteeIndex, aggregatorIndex)) {
73
+ throw new SyncCommitteeError(GossipAction.IGNORE, {
74
+ code: SyncCommitteeErrorCode.SYNC_COMMITTEE_AGGREGATOR_ALREADY_KNOWN,
75
+ });
76
+ }
77
+ if (!skipValidationKnownParticipants && chain.seenContributionAndProof.participantsKnown(contribution)) {
78
+ throw new SyncCommitteeError(GossipAction.IGNORE, {
79
+ code: SyncCommitteeErrorCode.SYNC_COMMITTEE_PARTICIPANTS_ALREADY_KNOWN,
80
+ });
81
+ }
71
82
  // no need to add to seenSyncCommittteeContributionCache here, gossip handler will do that
72
83
  chain.seenContributionAndProof.add(contributionAndProof, syncCommitteeParticipantIndices.length);
73
84
  return { syncCommitteeParticipantIndices };
@@ -1 +1 @@
1
- {"version":3,"file":"syncCommitteeContributionAndProof.js","sourceRoot":"","sources":["../../../src/chain/validation/syncCommitteeContributionAndProof.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"syncCommitteeContributionAndProof.js","sourceRoot":"","sources":["../../../src/chain/validation/syncCommitteeContributionAndProof.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,8 @@ export declare class BeaconSync implements IBeaconSync {
14
14
  /** For metrics only */
15
15
  private readonly peerSyncType;
16
16
  private readonly slotImportTolerance;
17
+ /** The requested subscription state, set while a change is being applied */
18
+ private pendingGossipSubscribed;
17
19
  constructor(opts: SyncOptions, modules: SyncModules);
18
20
  close(): void;
19
21
  getSyncStatus(): SyncingStatus;
@@ -46,6 +48,12 @@ export declare class BeaconSync implements IBeaconSync {
46
48
  * Run this function when the sync state can potentially change.
47
49
  */
48
50
  private updateSyncState;
51
+ private setGossipSubscription;
52
+ /**
53
+ * Applies the latest requested state one request at a time. Network skips a subscribe issued while an unsubscribe is
54
+ * in flight, so opposite requests must not overlap.
55
+ */
56
+ private applyGossipSubscription;
49
57
  private onClockEpoch;
50
58
  private scrapeMetrics;
51
59
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/sync/sync.ts"],"names":[],"mappings":"AAEA,OAAO,EAAO,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAW7C,OAAO,EAAC,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EAAC,WAAW,EAAE,mBAAmB,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAkB,MAAM,gBAAgB,CAAC;AACxH,OAAO,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AAKzC,qBAAa,UAAW,YAAW,WAAW;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAW;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IACrC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAY;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;IAEnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAiB;IAElD,uBAAuB;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmC;IAChE,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAO;IAE3C,YAAY,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAoDlD;IAED,KAAK,IAAI,IAAI,CAMZ;IAED,aAAa,IAAI,aAAa,CAyC7B;IAED,SAAS,IAAI,OAAO,CAGnB;IAED,QAAQ,IAAI,OAAO,CAElB;IAED,IAAI,KAAK,IAAI,SAAS,CA8BrB;IAED,wCAAwC;IACxC,uBAAuB,IAAI,mBAAmB,EAAE,CAE/C;IAED;;;;;;;;;;OAUG;IACH,OAAO,CAAC,OAAO,CA6Bb;IAEF;;OAEG;IACG,6BAA6B,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6ClF;IAED;;OAEG;IACH,OAAO,CAAC,UAAU,CAIhB;IAEF;;OAEG;IACH,OAAO,CAAC,eAAe,CAqDrB;IAEF,OAAO,CAAC,YAAY,CAMlB;IAEF,OAAO,CAAC,aAAa;CAkBtB"}
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/sync/sync.ts"],"names":[],"mappings":"AAEA,OAAO,EAAO,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAW7C,OAAO,EAAC,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EAAC,WAAW,EAAE,mBAAmB,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAkB,MAAM,gBAAgB,CAAC;AACxH,OAAO,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AAKzC,qBAAa,UAAW,YAAW,WAAW;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAW;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IACrC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAY;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;IAEnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAiB;IAElD,uBAAuB;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmC;IAChE,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAO;IAC3C,4EAA4E;IAC5E,OAAO,CAAC,uBAAuB,CAAsB;IAErD,YAAY,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAoDlD;IAED,KAAK,IAAI,IAAI,CAOZ;IAED,aAAa,IAAI,aAAa,CAyC7B;IAED,SAAS,IAAI,OAAO,CAGnB;IAED,QAAQ,IAAI,OAAO,CAElB;IAED,IAAI,KAAK,IAAI,SAAS,CA8BrB;IAED,wCAAwC;IACxC,uBAAuB,IAAI,mBAAmB,EAAE,CAE/C;IAED;;;;;;;;;;OAUG;IACH,OAAO,CAAC,OAAO,CA6Bb;IAEF;;OAEG;IACG,6BAA6B,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6ClF;IAED;;OAEG;IACH,OAAO,CAAC,UAAU,CAIhB;IAEF;;OAEG;IACH,OAAO,CAAC,eAAe,CAkCrB;IAEF,OAAO,CAAC,qBAAqB;IAQ7B;;;OAGG;YACW,uBAAuB;IAyBrC,OAAO,CAAC,YAAY,CAMlB;IAEF,OAAO,CAAC,aAAa;CAkBtB"}
package/lib/sync/sync.js CHANGED
@@ -24,6 +24,8 @@ export class BeaconSync {
24
24
  /** For metrics only */
25
25
  peerSyncType = new Map();
26
26
  slotImportTolerance;
27
+ /** The requested subscription state, set while a change is being applied */
28
+ pendingGossipSubscribed;
27
29
  constructor(opts, modules) {
28
30
  const { config, chain, db, metrics, network, logger } = modules;
29
31
  this.opts = opts;
@@ -75,6 +77,7 @@ export class BeaconSync {
75
77
  }
76
78
  }
77
79
  close() {
80
+ this.pendingGossipSubscribed = undefined;
78
81
  this.network.events.off(NetworkEvent.peerConnected, this.addPeer);
79
82
  this.network.events.off(NetworkEvent.peerDisconnected, this.removePeer);
80
83
  this.chain.clock.off(ClockEvent.epoch, this.onClockEpoch);
@@ -261,17 +264,7 @@ export class BeaconSync {
261
264
  // We have become synced, subscribe to all the gossip core topics
262
265
  if (state === SyncState.Synced && this.chain.clock.currentEpoch >= MIN_EPOCH_TO_START_GOSSIP) {
263
266
  this.chain.forkChoice.resumeFastConfirmation();
264
- if (!this.network.isSubscribedToGossipCoreTopics()) {
265
- this.network
266
- .subscribeGossipCoreTopics()
267
- .then(() => {
268
- this.metrics?.syncSwitchGossipSubscriptions.inc({ action: "subscribed" });
269
- this.logger.info("Subscribed gossip core topics");
270
- })
271
- .catch((e) => {
272
- this.logger.error("Error subscribing to gossip core topics", {}, e);
273
- });
274
- }
267
+ this.setGossipSubscription(true);
275
268
  // also start searching for unknown blocks
276
269
  if (!this.unknownBlockSync.isSubscribedToNetwork()) {
277
270
  this.unknownBlockSync.subscribeToNetwork();
@@ -284,17 +277,8 @@ export class BeaconSync {
284
277
  if (syncDiff > this.slotImportTolerance * 2) {
285
278
  // Same debounce as gossip: transient blips keep the rule running, only a real gap pauses it
286
279
  this.chain.forkChoice.pauseFastConfirmation();
287
- if (this.network.isSubscribedToGossipCoreTopics()) {
288
- this.logger.warn(`Node sync has fallen behind by ${syncDiff} slots`);
289
- this.network
290
- .unsubscribeGossipCoreTopics()
291
- .then(() => {
292
- this.metrics?.syncSwitchGossipSubscriptions.inc({ action: "unsubscribed" });
293
- this.logger.info("Un-subscribed gossip core topics");
294
- })
295
- .catch((e) => {
296
- this.logger.error("Error unsubscribing to gossip core topics", {}, e);
297
- });
280
+ if (this.setGossipSubscription(false)) {
281
+ this.logger.warn("Node sync has fallen behind", { slots: syncDiff });
298
282
  }
299
283
  // also stop searching for unknown blocks
300
284
  if (this.unknownBlockSync.isSubscribedToNetwork()) {
@@ -304,6 +288,42 @@ export class BeaconSync {
304
288
  }
305
289
  }
306
290
  };
291
+ setGossipSubscription(subscribe) {
292
+ if ((this.pendingGossipSubscribed ?? this.network.isSubscribedToGossipCoreTopics()) === subscribe)
293
+ return false;
294
+ const applying = this.pendingGossipSubscribed !== undefined;
295
+ this.pendingGossipSubscribed = subscribe;
296
+ if (!applying)
297
+ void this.applyGossipSubscription();
298
+ return true;
299
+ }
300
+ /**
301
+ * Applies the latest requested state one request at a time. Network skips a subscribe issued while an unsubscribe is
302
+ * in flight, so opposite requests must not overlap.
303
+ */
304
+ async applyGossipSubscription() {
305
+ for (;;) {
306
+ const subscribe = this.pendingGossipSubscribed;
307
+ if (subscribe === undefined || subscribe === this.network.isSubscribedToGossipCoreTopics())
308
+ break;
309
+ try {
310
+ await (subscribe ? this.network.subscribeGossipCoreTopics() : this.network.unsubscribeGossipCoreTopics());
311
+ }
312
+ catch (e) {
313
+ this.logger.error(subscribe ? "Error subscribing to gossip core topics" : "Error unsubscribing to gossip core topics", {}, e);
314
+ // Leave a retry of the same request to the next sync state update
315
+ if (this.pendingGossipSubscribed === subscribe)
316
+ break;
317
+ continue;
318
+ }
319
+ if (this.pendingGossipSubscribed === undefined || this.network.isSubscribedToGossipCoreTopics() !== subscribe) {
320
+ break;
321
+ }
322
+ this.metrics?.syncSwitchGossipSubscriptions.inc({ action: subscribe ? "subscribed" : "unsubscribed" });
323
+ this.logger.info(subscribe ? "Subscribed gossip core topics" : "Un-subscribed gossip core topics");
324
+ }
325
+ this.pendingGossipSubscribed = undefined;
326
+ }
307
327
  onClockEpoch = () => {
308
328
  // If a node witness the genesis event consider starting gossip
309
329
  // Also, ensure that updateSyncState is run at least once per epoch.
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/sync/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/sync/sync.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "bugs": {
12
12
  "url": "https://github.com/ChainSafe/lodestar/issues"
13
13
  },
14
- "version": "1.51.0-dev.d5620be4a1",
14
+ "version": "1.51.0-dev.dc21d14c20",
15
15
  "type": "module",
16
16
  "exports": {
17
17
  ".": {
@@ -126,18 +126,18 @@
126
126
  "@libp2p/prometheus-metrics": "^5.0.31",
127
127
  "@libp2p/tcp": "^11.0.30",
128
128
  "@libp2p/utils": "^7.4.3",
129
- "@lodestar/api": "^1.51.0-dev.d5620be4a1",
130
- "@lodestar/config": "^1.51.0-dev.d5620be4a1",
131
- "@lodestar/db": "^1.51.0-dev.d5620be4a1",
132
- "@lodestar/fork-choice": "^1.51.0-dev.d5620be4a1",
133
- "@lodestar/logger": "^1.51.0-dev.d5620be4a1",
134
- "@lodestar/native": "^1.51.0-dev.d5620be4a1",
135
- "@lodestar/params": "^1.51.0-dev.d5620be4a1",
136
- "@lodestar/reqresp": "^1.51.0-dev.d5620be4a1",
137
- "@lodestar/state-transition": "^1.51.0-dev.d5620be4a1",
138
- "@lodestar/types": "^1.51.0-dev.d5620be4a1",
139
- "@lodestar/utils": "^1.51.0-dev.d5620be4a1",
140
- "@lodestar/validator": "^1.51.0-dev.d5620be4a1",
129
+ "@lodestar/api": "^1.51.0-dev.dc21d14c20",
130
+ "@lodestar/config": "^1.51.0-dev.dc21d14c20",
131
+ "@lodestar/db": "^1.51.0-dev.dc21d14c20",
132
+ "@lodestar/fork-choice": "^1.51.0-dev.dc21d14c20",
133
+ "@lodestar/logger": "^1.51.0-dev.dc21d14c20",
134
+ "@lodestar/native": "^1.51.0-dev.dc21d14c20",
135
+ "@lodestar/params": "^1.51.0-dev.dc21d14c20",
136
+ "@lodestar/reqresp": "^1.51.0-dev.dc21d14c20",
137
+ "@lodestar/state-transition": "^1.51.0-dev.dc21d14c20",
138
+ "@lodestar/types": "^1.51.0-dev.dc21d14c20",
139
+ "@lodestar/utils": "^1.51.0-dev.dc21d14c20",
140
+ "@lodestar/validator": "^1.51.0-dev.dc21d14c20",
141
141
  "@multiformats/multiaddr": "^13.0.1",
142
142
  "datastore-core": "^12.0.1",
143
143
  "datastore-level": "^13.0.1",
@@ -159,8 +159,8 @@
159
159
  "@ethereumjs/rlp": "^4.0.1",
160
160
  "@libp2p/interface-internal": "^3.2.0",
161
161
  "@libp2p/logger": "^6.2.15",
162
- "@lodestar/spec-test-util": "^1.51.0-dev.d5620be4a1",
163
- "@lodestar/test-utils": "^1.51.0-dev.d5620be4a1",
162
+ "@lodestar/spec-test-util": "^1.51.0-dev.dc21d14c20",
163
+ "@lodestar/test-utils": "^1.51.0-dev.dc21d14c20",
164
164
  "@types/js-yaml": "^4.0.5",
165
165
  "@types/qs": "^6.9.7",
166
166
  "@types/tmp": "^0.2.3",
@@ -174,5 +174,5 @@
174
174
  "beacon",
175
175
  "blockchain"
176
176
  ],
177
- "gitHead": "c76975acffbeab8e33a2f1ae9197767e6eac357f"
177
+ "gitHead": "56da6cdc884c1d382bb0704af336aeb2de5de774"
178
178
  }
@@ -1,7 +1,8 @@
1
1
  import {SYNC_COMMITTEE_SUBNET_COUNT, SYNC_COMMITTEE_SUBNET_SIZE} from "@lodestar/params";
2
2
  import {IBeaconStateView, isStatePostAltair} from "@lodestar/state-transition";
3
- import {SubnetID, altair} from "@lodestar/types";
3
+ import {RootHex, Slot, SubnetID, ValidatorIndex, altair} from "@lodestar/types";
4
4
  import {toRootHex} from "@lodestar/utils";
5
+ import {Metrics} from "../../metrics/metrics.js";
5
6
  import {GossipAction, SyncCommitteeError, SyncCommitteeErrorCode} from "../errors/index.js";
6
7
  import {IBeaconChain} from "../interface.js";
7
8
  import {getSyncCommitteeSignatureSet} from "./signatureSets/index.js";
@@ -32,6 +33,33 @@ export async function validateGossipSyncCommittee(
32
33
 
33
34
  // [IGNORE] There has been no other valid sync committee signature for the declared slot for the validator referenced
34
35
  // by sync_committee_signature.validator_index.
36
+ assertSyncCommitteeMessageNotKnown(chain, slot, subnet, validatorIndex, messageRoot, chain.metrics);
37
+
38
+ // [REJECT] The subnet_id is valid for the given validator, i.e. subnet_id in compute_subnets_for_sync_committee(state, sync_committee_signature.validator_index).
39
+ // Note this validation implies the validator is part of the broader current sync committee along with the correct subcommittee.
40
+ // > Checked in validateGossipSyncCommitteeExceptSig()
41
+
42
+ // [REJECT] The signature is valid for the message beacon_block_root for the validator referenced by validator_index.
43
+ await validateSyncCommitteeSigOnly(chain, headState, syncCommittee);
44
+
45
+ // Re-check after the await: concurrent messages from the same validator all pass the check above.
46
+ // Metrics were already counted by the first check.
47
+ assertSyncCommitteeMessageNotKnown(chain, slot, subnet, validatorIndex, messageRoot, null);
48
+
49
+ // Register this valid item as seen
50
+ chain.seenSyncCommitteeMessages.add(slot, subnet, validatorIndex, messageRoot);
51
+
52
+ return {indicesInSubcommittee};
53
+ }
54
+
55
+ function assertSyncCommitteeMessageNotKnown(
56
+ chain: IBeaconChain,
57
+ slot: Slot,
58
+ subnet: SubnetID,
59
+ validatorIndex: ValidatorIndex,
60
+ messageRoot: RootHex,
61
+ metrics: Metrics | null
62
+ ): void {
35
63
  const prevRoot = chain.seenSyncCommitteeMessages.get(slot, subnet, validatorIndex);
36
64
  if (prevRoot) {
37
65
  let shouldIgnore = false;
@@ -39,9 +67,9 @@ export async function validateGossipSyncCommittee(
39
67
  shouldIgnore = true;
40
68
  } else {
41
69
  const headRoot = chain.forkChoice.getHeadRoot();
42
- chain.metrics?.gossipSyncCommittee.equivocationCount.inc();
70
+ metrics?.gossipSyncCommittee.equivocationCount.inc();
43
71
  if (messageRoot === headRoot) {
44
- chain.metrics?.gossipSyncCommittee.equivocationToHeadCount.inc();
72
+ metrics?.gossipSyncCommittee.equivocationToHeadCount.inc();
45
73
  } else {
46
74
  shouldIgnore = true;
47
75
  }
@@ -57,18 +85,6 @@ export async function validateGossipSyncCommittee(
57
85
  });
58
86
  }
59
87
  }
60
-
61
- // [REJECT] The subnet_id is valid for the given validator, i.e. subnet_id in compute_subnets_for_sync_committee(state, sync_committee_signature.validator_index).
62
- // Note this validation implies the validator is part of the broader current sync committee along with the correct subcommittee.
63
- // > Checked in validateGossipSyncCommitteeExceptSig()
64
-
65
- // [REJECT] The signature is valid for the message beacon_block_root for the validator referenced by validator_index.
66
- await validateSyncCommitteeSigOnly(chain, headState, syncCommittee);
67
-
68
- // Register this valid item as seen
69
- chain.seenSyncCommitteeMessages.add(slot, subnet, validatorIndex, messageRoot);
70
-
71
- return {indicesInSubcommittee};
72
88
  }
73
89
 
74
90
  export async function validateApiSyncCommittee(
@@ -92,6 +92,19 @@ export async function validateSyncCommitteeGossipContributionAndProof(
92
92
  });
93
93
  }
94
94
 
95
+ // Re-check after the await: concurrent contributions from the same aggregator all pass the checks above
96
+ if (chain.seenContributionAndProof.isAggregatorKnown(slot, subcommitteeIndex, aggregatorIndex)) {
97
+ throw new SyncCommitteeError(GossipAction.IGNORE, {
98
+ code: SyncCommitteeErrorCode.SYNC_COMMITTEE_AGGREGATOR_ALREADY_KNOWN,
99
+ });
100
+ }
101
+
102
+ if (!skipValidationKnownParticipants && chain.seenContributionAndProof.participantsKnown(contribution)) {
103
+ throw new SyncCommitteeError(GossipAction.IGNORE, {
104
+ code: SyncCommitteeErrorCode.SYNC_COMMITTEE_PARTICIPANTS_ALREADY_KNOWN,
105
+ });
106
+ }
107
+
95
108
  // no need to add to seenSyncCommittteeContributionCache here, gossip handler will do that
96
109
  chain.seenContributionAndProof.add(contributionAndProof, syncCommitteeParticipantIndices.length);
97
110
 
package/src/sync/sync.ts CHANGED
@@ -33,6 +33,8 @@ export class BeaconSync implements IBeaconSync {
33
33
  /** For metrics only */
34
34
  private readonly peerSyncType = new Map<string, PeerSyncType>();
35
35
  private readonly slotImportTolerance: Slot;
36
+ /** The requested subscription state, set while a change is being applied */
37
+ private pendingGossipSubscribed: boolean | undefined;
36
38
 
37
39
  constructor(opts: SyncOptions, modules: SyncModules) {
38
40
  const {config, chain, db, metrics, network, logger} = modules;
@@ -89,6 +91,7 @@ export class BeaconSync implements IBeaconSync {
89
91
  }
90
92
 
91
93
  close(): void {
94
+ this.pendingGossipSubscribed = undefined;
92
95
  this.network.events.off(NetworkEvent.peerConnected, this.addPeer);
93
96
  this.network.events.off(NetworkEvent.peerDisconnected, this.removePeer);
94
97
  this.chain.clock.off(ClockEvent.epoch, this.onClockEpoch);
@@ -296,17 +299,7 @@ export class BeaconSync implements IBeaconSync {
296
299
  if (state === SyncState.Synced && this.chain.clock.currentEpoch >= MIN_EPOCH_TO_START_GOSSIP) {
297
300
  this.chain.forkChoice.resumeFastConfirmation();
298
301
 
299
- if (!this.network.isSubscribedToGossipCoreTopics()) {
300
- this.network
301
- .subscribeGossipCoreTopics()
302
- .then(() => {
303
- this.metrics?.syncSwitchGossipSubscriptions.inc({action: "subscribed"});
304
- this.logger.info("Subscribed gossip core topics");
305
- })
306
- .catch((e) => {
307
- this.logger.error("Error subscribing to gossip core topics", {}, e);
308
- });
309
- }
302
+ this.setGossipSubscription(true);
310
303
 
311
304
  // also start searching for unknown blocks
312
305
  if (!this.unknownBlockSync.isSubscribedToNetwork()) {
@@ -322,17 +315,8 @@ export class BeaconSync implements IBeaconSync {
322
315
  // Same debounce as gossip: transient blips keep the rule running, only a real gap pauses it
323
316
  this.chain.forkChoice.pauseFastConfirmation();
324
317
 
325
- if (this.network.isSubscribedToGossipCoreTopics()) {
326
- this.logger.warn(`Node sync has fallen behind by ${syncDiff} slots`);
327
- this.network
328
- .unsubscribeGossipCoreTopics()
329
- .then(() => {
330
- this.metrics?.syncSwitchGossipSubscriptions.inc({action: "unsubscribed"});
331
- this.logger.info("Un-subscribed gossip core topics");
332
- })
333
- .catch((e) => {
334
- this.logger.error("Error unsubscribing to gossip core topics", {}, e);
335
- });
318
+ if (this.setGossipSubscription(false)) {
319
+ this.logger.warn("Node sync has fallen behind", {slots: syncDiff});
336
320
  }
337
321
 
338
322
  // also stop searching for unknown blocks
@@ -344,6 +328,43 @@ export class BeaconSync implements IBeaconSync {
344
328
  }
345
329
  };
346
330
 
331
+ private setGossipSubscription(subscribe: boolean): boolean {
332
+ if ((this.pendingGossipSubscribed ?? this.network.isSubscribedToGossipCoreTopics()) === subscribe) return false;
333
+ const applying = this.pendingGossipSubscribed !== undefined;
334
+ this.pendingGossipSubscribed = subscribe;
335
+ if (!applying) void this.applyGossipSubscription();
336
+ return true;
337
+ }
338
+
339
+ /**
340
+ * Applies the latest requested state one request at a time. Network skips a subscribe issued while an unsubscribe is
341
+ * in flight, so opposite requests must not overlap.
342
+ */
343
+ private async applyGossipSubscription(): Promise<void> {
344
+ for (;;) {
345
+ const subscribe = this.pendingGossipSubscribed;
346
+ if (subscribe === undefined || subscribe === this.network.isSubscribedToGossipCoreTopics()) break;
347
+ try {
348
+ await (subscribe ? this.network.subscribeGossipCoreTopics() : this.network.unsubscribeGossipCoreTopics());
349
+ } catch (e) {
350
+ this.logger.error(
351
+ subscribe ? "Error subscribing to gossip core topics" : "Error unsubscribing to gossip core topics",
352
+ {},
353
+ e as Error
354
+ );
355
+ // Leave a retry of the same request to the next sync state update
356
+ if (this.pendingGossipSubscribed === subscribe) break;
357
+ continue;
358
+ }
359
+ if (this.pendingGossipSubscribed === undefined || this.network.isSubscribedToGossipCoreTopics() !== subscribe) {
360
+ break;
361
+ }
362
+ this.metrics?.syncSwitchGossipSubscriptions.inc({action: subscribe ? "subscribed" : "unsubscribed"});
363
+ this.logger.info(subscribe ? "Subscribed gossip core topics" : "Un-subscribed gossip core topics");
364
+ }
365
+ this.pendingGossipSubscribed = undefined;
366
+ }
367
+
347
368
  private onClockEpoch = (): void => {
348
369
  // If a node witness the genesis event consider starting gossip
349
370
  // Also, ensure that updateSyncState is run at least once per epoch.