@lodestar/beacon-node 1.43.0-dev.aef3645690 → 1.43.0-dev.e341cdc614

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 (136) hide show
  1. package/lib/api/impl/validator/index.d.ts.map +1 -1
  2. package/lib/api/impl/validator/index.js +4 -3
  3. package/lib/api/impl/validator/index.js.map +1 -1
  4. package/lib/chain/GetBlobsTracker.d.ts +1 -1
  5. package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
  6. package/lib/chain/GetBlobsTracker.js +1 -2
  7. package/lib/chain/GetBlobsTracker.js.map +1 -1
  8. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts.map +1 -1
  9. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js +2 -4
  10. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js.map +1 -1
  11. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  12. package/lib/chain/blocks/importBlock.js +27 -35
  13. package/lib/chain/blocks/importBlock.js.map +1 -1
  14. package/lib/chain/blocks/importExecutionPayload.d.ts +1 -1
  15. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  16. package/lib/chain/blocks/importExecutionPayload.js +10 -8
  17. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  18. package/lib/chain/blocks/index.js +1 -1
  19. package/lib/chain/blocks/index.js.map +1 -1
  20. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +3 -0
  21. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -1
  22. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +20 -0
  23. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -1
  24. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts +5 -0
  25. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts.map +1 -1
  26. package/lib/chain/blocks/payloadEnvelopeProcessor.js +6 -4
  27. package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -1
  28. package/lib/chain/blocks/types.d.ts +1 -1
  29. package/lib/chain/blocks/types.d.ts.map +1 -1
  30. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts +14 -0
  31. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts.map +1 -0
  32. package/lib/chain/blocks/verifyPayloadsDataAvailability.js +25 -0
  33. package/lib/chain/blocks/verifyPayloadsDataAvailability.js.map +1 -0
  34. package/lib/chain/chain.d.ts.map +1 -1
  35. package/lib/chain/chain.js +17 -37
  36. package/lib/chain/chain.js.map +1 -1
  37. package/lib/chain/emitter.d.ts +13 -1
  38. package/lib/chain/emitter.d.ts.map +1 -1
  39. package/lib/chain/emitter.js +5 -0
  40. package/lib/chain/emitter.js.map +1 -1
  41. package/lib/chain/errors/attestationError.d.ts +8 -1
  42. package/lib/chain/errors/attestationError.d.ts.map +1 -1
  43. package/lib/chain/errors/attestationError.js +4 -0
  44. package/lib/chain/errors/attestationError.js.map +1 -1
  45. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  46. package/lib/chain/forkChoice/index.js +6 -2
  47. package/lib/chain/forkChoice/index.js.map +1 -1
  48. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  49. package/lib/chain/prepareNextSlot.js +2 -6
  50. package/lib/chain/prepareNextSlot.js.map +1 -1
  51. package/lib/chain/produceBlock/computeNewStateRoot.d.ts +3 -9
  52. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
  53. package/lib/chain/produceBlock/computeNewStateRoot.js +5 -32
  54. package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
  55. package/lib/chain/produceBlock/produceBlockBody.d.ts +0 -6
  56. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  57. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  58. package/lib/chain/regen/errors.d.ts +1 -11
  59. package/lib/chain/regen/errors.d.ts.map +1 -1
  60. package/lib/chain/regen/errors.js +0 -2
  61. package/lib/chain/regen/errors.js.map +1 -1
  62. package/lib/chain/regen/interface.d.ts +6 -12
  63. package/lib/chain/regen/interface.d.ts.map +1 -1
  64. package/lib/chain/regen/queued.d.ts +6 -11
  65. package/lib/chain/regen/queued.d.ts.map +1 -1
  66. package/lib/chain/regen/queued.js +8 -40
  67. package/lib/chain/regen/queued.js.map +1 -1
  68. package/lib/chain/regen/regen.d.ts +0 -5
  69. package/lib/chain/regen/regen.d.ts.map +1 -1
  70. package/lib/chain/regen/regen.js +7 -34
  71. package/lib/chain/regen/regen.js.map +1 -1
  72. package/lib/chain/stateCache/datastore/db.d.ts +5 -4
  73. package/lib/chain/stateCache/datastore/db.d.ts.map +1 -1
  74. package/lib/chain/stateCache/datastore/db.js +10 -32
  75. package/lib/chain/stateCache/datastore/db.js.map +1 -1
  76. package/lib/chain/stateCache/datastore/file.d.ts +1 -1
  77. package/lib/chain/stateCache/datastore/file.d.ts.map +1 -1
  78. package/lib/chain/stateCache/datastore/file.js +5 -5
  79. package/lib/chain/stateCache/datastore/file.js.map +1 -1
  80. package/lib/chain/stateCache/datastore/types.d.ts +1 -1
  81. package/lib/chain/stateCache/datastore/types.d.ts.map +1 -1
  82. package/lib/chain/stateCache/fifoBlockStateCache.d.ts +1 -7
  83. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -1
  84. package/lib/chain/stateCache/fifoBlockStateCache.js +0 -8
  85. package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
  86. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +13 -30
  87. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  88. package/lib/chain/stateCache/persistentCheckpointsCache.js +116 -215
  89. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  90. package/lib/chain/stateCache/types.d.ts +8 -15
  91. package/lib/chain/stateCache/types.d.ts.map +1 -1
  92. package/lib/chain/stateCache/types.js.map +1 -1
  93. package/lib/chain/validation/aggregateAndProof.js +12 -0
  94. package/lib/chain/validation/aggregateAndProof.js.map +1 -1
  95. package/lib/chain/validation/attestation.d.ts.map +1 -1
  96. package/lib/chain/validation/attestation.js +12 -0
  97. package/lib/chain/validation/attestation.js.map +1 -1
  98. package/lib/chain/validation/executionPayloadEnvelope.js +2 -2
  99. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  100. package/lib/network/gossip/topic.d.ts +2 -729
  101. package/lib/network/gossip/topic.d.ts.map +1 -1
  102. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  103. package/lib/network/processor/gossipHandlers.js +19 -3
  104. package/lib/network/processor/gossipHandlers.js.map +1 -1
  105. package/package.json +15 -15
  106. package/src/api/impl/validator/index.ts +6 -5
  107. package/src/chain/GetBlobsTracker.ts +1 -2
  108. package/src/chain/archiveStore/strategies/frequencyStateArchiveStrategy.ts +2 -4
  109. package/src/chain/blocks/importBlock.ts +26 -39
  110. package/src/chain/blocks/importExecutionPayload.ts +11 -7
  111. package/src/chain/blocks/index.ts +1 -1
  112. package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +27 -0
  113. package/src/chain/blocks/payloadEnvelopeProcessor.ts +6 -5
  114. package/src/chain/blocks/types.ts +1 -1
  115. package/src/chain/blocks/verifyPayloadsDataAvailability.ts +38 -0
  116. package/src/chain/chain.ts +16 -47
  117. package/src/chain/emitter.ts +12 -0
  118. package/src/chain/errors/attestationError.ts +6 -1
  119. package/src/chain/forkChoice/index.ts +6 -2
  120. package/src/chain/prepareNextSlot.ts +2 -6
  121. package/src/chain/produceBlock/computeNewStateRoot.ts +6 -43
  122. package/src/chain/produceBlock/produceBlockBody.ts +0 -6
  123. package/src/chain/regen/errors.ts +1 -6
  124. package/src/chain/regen/interface.ts +6 -12
  125. package/src/chain/regen/queued.ts +12 -48
  126. package/src/chain/regen/regen.ts +8 -36
  127. package/src/chain/stateCache/datastore/db.ts +10 -33
  128. package/src/chain/stateCache/datastore/file.ts +5 -6
  129. package/src/chain/stateCache/datastore/types.ts +2 -3
  130. package/src/chain/stateCache/fifoBlockStateCache.ts +1 -10
  131. package/src/chain/stateCache/persistentCheckpointsCache.ts +135 -246
  132. package/src/chain/stateCache/types.ts +8 -14
  133. package/src/chain/validation/aggregateAndProof.ts +13 -0
  134. package/src/chain/validation/attestation.ts +13 -0
  135. package/src/chain/validation/executionPayloadEnvelope.ts +2 -2
  136. package/src/network/processor/gossipHandlers.ts +23 -7
@@ -315,6 +315,19 @@ async function validateAttestationNoSignatureCheck(
315
315
  code: AttestationErrorCode.PREMATURELY_INDICATED_PAYLOAD_PRESENT,
316
316
  });
317
317
  }
318
+
319
+ // [REJECT] If `attestation.data.index == 1` (payload present for a past
320
+ // block), the execution payload for `block` passes validation.
321
+ // [IGNORE] When `attestation.data.index == 1` (payload present for a past block),
322
+ // the corresponding execution payload for `block` has been seen (a client MAY queue
323
+ // attestations for processing once the payload is retrieved and SHOULD request the
324
+ // payload envelope via `ExecutionPayloadEnvelopesByRoot`).
325
+ if (block !== null && attData.index === 1 && !chain.seenPayloadEnvelope(toRootHex(attData.beaconBlockRoot))) {
326
+ throw new AttestationError(GossipAction.IGNORE, {
327
+ code: AttestationErrorCode.EXECUTION_PAYLOAD_NOT_SEEN,
328
+ beaconBlockRoot: toRootHex(attData.beaconBlockRoot),
329
+ });
330
+ }
318
331
  } else {
319
332
  // [REJECT] attestation.data.index == 0
320
333
  if (attData.index !== 0) {
@@ -32,7 +32,7 @@ async function validateExecutionPayloadEnvelope(
32
32
  const {payload} = envelope;
33
33
  const blockRootHex = toRootHex(envelope.beaconBlockRoot);
34
34
 
35
- // [IGNORE] The envelope's block root `envelope.block_root` has been seen (via
35
+ // [IGNORE] The envelope's block root `envelope.beacon_block_root` has been seen (via
36
36
  // gossip or non-gossip sources) (a client MAY queue payload for processing once
37
37
  // the block is retrieved).
38
38
  // TODO GLOAS: Need to review this, we should queue the envelope for later
@@ -107,7 +107,7 @@ async function validateExecutionPayloadEnvelope(
107
107
  });
108
108
  }
109
109
 
110
- // Get the post block state which is the pre-payload state to verify the builder's signature.
110
+ // Get the block state to verify the builder's signature.
111
111
  const blockState = await chain.regen
112
112
  .getState(block.stateRoot, RegenCaller.validateGossipPayloadEnvelope)
113
113
  .catch(() => {
@@ -745,13 +745,29 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
745
745
  });
746
746
  }
747
747
 
748
- chain.processExecutionPayload(payloadInput, {validSignature: true}).catch((e) => {
749
- chain.logger.debug(
750
- "Error processing execution payload from gossip data column",
751
- {slot: dataColumnSlot, root: payloadInput.blockRootHex},
752
- e as Error
753
- );
754
- });
748
+ // NOTE: we do NOT call chain.processExecutionPayload here. That is triggered only by
749
+ // envelope arrival (gossip or API). An in-flight importExecutionPayload is awaiting
750
+ // payloadInput.waitForAllData(); addColumn above will resolve it once hasAllData flips.
751
+
752
+ if (!payloadInput.isComplete()) {
753
+ const cutoffTimeMs = getCutoffTimeMs(chain, dataColumnSlot, BLOCK_AVAILABILITY_CUTOFF_MS);
754
+ // do not await here to not delay gossip validation
755
+ payloadInput.waitForEnvelopeAndAllData(cutoffTimeMs).catch((_e) => {
756
+ chain.logger.debug(
757
+ "Waited for envelope and data after receiving gossip column. Cut-off reached so emitting incompletePayloadEnvelope",
758
+ {
759
+ dataColumnIndex: index,
760
+ ...payloadInputMeta,
761
+ }
762
+ );
763
+ // TODO GLOAS: UnknownBlockSync to handle this event
764
+ chain.emitter.emit(ChainEvent.incompletePayloadEnvelope, {
765
+ payloadInput,
766
+ peer: peerIdStr,
767
+ source: BlockInputSource.gossip,
768
+ });
769
+ });
770
+ }
755
771
  } else {
756
772
  if (config.getForkSeq(dataColumnSlot) < ForkSeq.fulu) {
757
773
  throw new GossipActionError(GossipAction.REJECT, {code: "PRE_FULU_BLOCK"});