@lodestar/beacon-node 1.47.0 → 1.48.0-dev.04d463c59a

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 (86) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +4 -0
  3. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  4. package/lib/api/impl/validator/index.d.ts.map +1 -1
  5. package/lib/api/impl/validator/index.js +5 -0
  6. package/lib/api/impl/validator/index.js.map +1 -1
  7. package/lib/chain/blocks/index.js +7 -7
  8. package/lib/chain/blocks/index.js.map +1 -1
  9. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  10. package/lib/chain/blocks/verifyBlock.js +5 -2
  11. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  12. package/lib/chain/chain.d.ts +1 -1
  13. package/lib/chain/chain.d.ts.map +1 -1
  14. package/lib/chain/chain.js +2 -1
  15. package/lib/chain/chain.js.map +1 -1
  16. package/lib/chain/errors/executionPayloadBid.d.ts +5 -0
  17. package/lib/chain/errors/executionPayloadBid.d.ts.map +1 -1
  18. package/lib/chain/errors/executionPayloadBid.js +1 -0
  19. package/lib/chain/errors/executionPayloadBid.js.map +1 -1
  20. package/lib/chain/interface.d.ts +2 -2
  21. package/lib/chain/interface.d.ts.map +1 -1
  22. package/lib/chain/prepareNextSlot.d.ts +5 -0
  23. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  24. package/lib/chain/prepareNextSlot.js +24 -1
  25. package/lib/chain/prepareNextSlot.js.map +1 -1
  26. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
  27. package/lib/chain/produceBlock/computeNewStateRoot.js +3 -25
  28. package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
  29. package/lib/chain/regen/interface.d.ts +1 -0
  30. package/lib/chain/regen/interface.d.ts.map +1 -1
  31. package/lib/chain/regen/interface.js +1 -0
  32. package/lib/chain/regen/interface.js.map +1 -1
  33. package/lib/chain/validation/block.d.ts.map +1 -1
  34. package/lib/chain/validation/block.js +40 -10
  35. package/lib/chain/validation/block.js.map +1 -1
  36. package/lib/chain/validation/executionPayloadBid.d.ts +15 -3
  37. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  38. package/lib/chain/validation/executionPayloadBid.js +183 -28
  39. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  40. package/lib/execution/builder/apiClient.d.ts +6 -0
  41. package/lib/execution/builder/apiClient.d.ts.map +1 -1
  42. package/lib/execution/builder/apiClient.js +19 -1
  43. package/lib/execution/builder/apiClient.js.map +1 -1
  44. package/lib/execution/builder/validateBid.d.ts +1 -0
  45. package/lib/execution/builder/validateBid.d.ts.map +1 -1
  46. package/lib/execution/builder/validateBid.js +14 -6
  47. package/lib/execution/builder/validateBid.js.map +1 -1
  48. package/lib/metrics/metrics/lodestar.d.ts +10 -1
  49. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  50. package/lib/metrics/metrics/lodestar.js +19 -3
  51. package/lib/metrics/metrics/lodestar.js.map +1 -1
  52. package/lib/network/network.d.ts.map +1 -1
  53. package/lib/network/network.js +5 -4
  54. package/lib/network/network.js.map +1 -1
  55. package/lib/network/processor/gossipQueues/indexed.d.ts.map +1 -1
  56. package/lib/network/processor/gossipQueues/indexed.js +0 -1
  57. package/lib/network/processor/gossipQueues/indexed.js.map +1 -1
  58. package/lib/network/processor/index.d.ts.map +1 -1
  59. package/lib/network/processor/index.js +16 -8
  60. package/lib/network/processor/index.js.map +1 -1
  61. package/lib/sync/range/chain.d.ts.map +1 -1
  62. package/lib/sync/range/chain.js +9 -2
  63. package/lib/sync/range/chain.js.map +1 -1
  64. package/lib/sync/range/range.js +1 -1
  65. package/lib/sync/range/range.js.map +1 -1
  66. package/package.json +15 -15
  67. package/src/api/impl/beacon/blocks/index.ts +4 -0
  68. package/src/api/impl/validator/index.ts +5 -0
  69. package/src/chain/blocks/index.ts +7 -7
  70. package/src/chain/blocks/verifyBlock.ts +5 -2
  71. package/src/chain/chain.ts +2 -1
  72. package/src/chain/errors/executionPayloadBid.ts +6 -0
  73. package/src/chain/interface.ts +2 -2
  74. package/src/chain/prepareNextSlot.ts +26 -1
  75. package/src/chain/produceBlock/computeNewStateRoot.ts +3 -38
  76. package/src/chain/regen/interface.ts +1 -0
  77. package/src/chain/validation/block.ts +43 -10
  78. package/src/chain/validation/executionPayloadBid.ts +212 -32
  79. package/src/execution/builder/apiClient.ts +21 -1
  80. package/src/execution/builder/validateBid.ts +22 -7
  81. package/src/metrics/metrics/lodestar.ts +21 -4
  82. package/src/network/network.ts +7 -4
  83. package/src/network/processor/gossipQueues/indexed.ts +0 -1
  84. package/src/network/processor/index.ts +25 -11
  85. package/src/sync/range/chain.ts +9 -2
  86. package/src/sync/range/range.ts +1 -1
@@ -1,3 +1,4 @@
1
+ import {TopicValidatorResult} from "@libp2p/gossipsub";
1
2
  import {routes} from "@lodestar/api";
2
3
  import {ForkSeq} from "@lodestar/params";
3
4
  import {computeStartSlotAtEpoch} from "@lodestar/state-transition";
@@ -560,6 +561,7 @@ export class NetworkProcessor {
560
561
 
561
562
  private pushPendingGossipsubMessageToQueue(message: PendingGossipsubMessage): void {
562
563
  const topicType = message.topic.type;
564
+ message.queueAddedMs = Date.now();
563
565
  const droppedCount = this.gossipQueues[topicType].add(message);
564
566
  if (droppedCount) {
565
567
  // No need to report the dropped job to gossip. It will be eventually pruned from the mcache
@@ -746,12 +748,20 @@ export class NetworkProcessor {
746
748
  for (const msg of messageOrArray) {
747
749
  msg.startProcessUnixSec = nowSec;
748
750
  if (msg.queueAddedMs !== undefined) {
749
- this.metrics?.gossipValidationQueue.queueTime.observe(nowSec - msg.queueAddedMs / 1000);
751
+ this.metrics?.gossipValidationQueue.queueTime.observe(
752
+ {topic: msg.topic.type},
753
+ nowSec - msg.queueAddedMs / 1000
754
+ );
750
755
  }
751
756
  }
752
757
  } else {
753
- // indexed queue is not used here
754
758
  messageOrArray.startProcessUnixSec = nowSec;
759
+ if (messageOrArray.queueAddedMs !== undefined) {
760
+ this.metrics?.gossipValidationQueue.queueTime.observe(
761
+ {topic: messageOrArray.topic.type},
762
+ nowSec - messageOrArray.queueAddedMs / 1000
763
+ );
764
+ }
755
765
  }
756
766
 
757
767
  const acceptanceArr = Array.isArray(messageOrArray)
@@ -764,11 +774,11 @@ export class NetworkProcessor {
764
774
  ];
765
775
 
766
776
  if (Array.isArray(messageOrArray)) {
767
- for (const msg of messageOrArray) {
768
- this.trackJobTime(msg, messageOrArray.length);
777
+ for (const [i, msg] of messageOrArray.entries()) {
778
+ this.trackJobTime(msg, messageOrArray.length, acceptanceArr[i]);
769
779
  }
770
780
  } else {
771
- this.trackJobTime(messageOrArray, 1);
781
+ this.trackJobTime(messageOrArray, 1, acceptanceArr[0]);
772
782
  }
773
783
 
774
784
  // Use setTimeout to yield to the macro queue
@@ -796,17 +806,21 @@ export class NetworkProcessor {
796
806
  }
797
807
  }
798
808
 
799
- private trackJobTime(message: PendingGossipsubMessage, numJob: number): void {
809
+ private trackJobTime(message: PendingGossipsubMessage, numJob: number, acceptance: TopicValidatorResult): void {
800
810
  if (message.startProcessUnixSec !== null) {
811
+ // record job wait time for all messages
801
812
  this.metrics?.gossipValidationQueue.jobWaitTime.observe(
802
813
  {topic: message.topic.type},
803
814
  message.startProcessUnixSec - message.seenTimestampSec
804
815
  );
805
- // if it takes 64ms to process 64 jobs, the average job time is 1ms
806
- this.metrics?.gossipValidationQueue.jobTime.observe(
807
- {topic: message.topic.type},
808
- (Date.now() / 1000 - message.startProcessUnixSec) / numJob
809
- );
816
+ // but only record job time for ACCEPT messages
817
+ if (acceptance === TopicValidatorResult.Accept) {
818
+ // if it takes 64ms to process 64 jobs, the average job time is 1ms
819
+ this.metrics?.gossipValidationQueue.jobTime.observe(
820
+ {topic: message.topic.type},
821
+ (Date.now() / 1000 - message.startProcessUnixSec) / numJob
822
+ );
823
+ }
810
824
  }
811
825
  }
812
826
 
@@ -652,7 +652,9 @@ export class SyncChain {
652
652
 
653
653
  const blockSlots = downloadSuccessOutput.blocks.map((b) => b.slot);
654
654
  const envelopeSlots = downloadSuccessOutput.payloadEnvelopes
655
- ? Array.from(downloadSuccessOutput.payloadEnvelopes.keys())
655
+ ? Array.from(downloadSuccessOutput.payloadEnvelopes.entries())
656
+ .filter(([, payloadInput]) => payloadInput.hasPayloadEnvelope())
657
+ .map(([slot]) => slot)
656
658
  : null;
657
659
 
658
660
  this.logger.debug(logMessage, {
@@ -684,13 +686,18 @@ export class SyncChain {
684
686
  */
685
687
  private async processBatch(batch: Batch): Promise<void> {
686
688
  const {blocks, payloadEnvelopes, peers} = batch.startProcessing();
689
+ const envelopeSlots = payloadEnvelopes
690
+ ? Array.from(payloadEnvelopes.entries())
691
+ .filter(([, payloadInput]) => payloadInput.hasPayloadEnvelope())
692
+ .map(([slot]) => slot)
693
+ : null;
687
694
 
688
695
  const logCtx = {
689
696
  id: this.logId,
690
697
  ...batch.getMetadata(),
691
698
  blockCount: blocks.length,
692
699
  blockSlots: prettyPrintIndices(blocks.map((b) => b.slot)),
693
- ...(payloadEnvelopes ? {envelopeSlots: prettyPrintIndices(Array.from(payloadEnvelopes.keys()))} : {}),
700
+ ...(envelopeSlots ? {envelopeSlots: prettyPrintIndices(envelopeSlots)} : {}),
694
701
  peers: peers.map(prettyPrintPeerIdStr).join(","),
695
702
  };
696
703
  this.logger.verbose("Processing batch", logCtx);
@@ -212,7 +212,7 @@ export class RangeSync extends (EventEmitter as {new (): RangeSyncEmitter}) {
212
212
  for (const block of blocks) {
213
213
  await this.chain.processBlock(block, flags);
214
214
  const payloadEnvelope = payloadEnvelopes?.get(block.slot);
215
- if (payloadEnvelope) {
215
+ if (payloadEnvelope?.hasPayloadEnvelope()) {
216
216
  await this.chain.processExecutionPayload(payloadEnvelope);
217
217
  }
218
218
  }