@lodestar/beacon-node 1.43.0-dev.ca1fc40294 → 1.43.0-dev.dfb984e779

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 (170) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +3 -2
  3. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  4. package/lib/api/impl/lodestar/index.js +1 -1
  5. package/lib/api/impl/lodestar/index.js.map +1 -1
  6. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  7. package/lib/chain/blocks/importBlock.js +6 -3
  8. package/lib/chain/blocks/importBlock.js.map +1 -1
  9. package/lib/chain/blocks/importExecutionPayload.d.ts +26 -14
  10. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  11. package/lib/chain/blocks/importExecutionPayload.js +73 -77
  12. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  13. package/lib/chain/blocks/index.d.ts +5 -3
  14. package/lib/chain/blocks/index.d.ts.map +1 -1
  15. package/lib/chain/blocks/index.js +28 -10
  16. package/lib/chain/blocks/index.js.map +1 -1
  17. package/lib/chain/blocks/payloadEnvelopeProcessor.js +2 -2
  18. package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -1
  19. package/lib/chain/blocks/types.d.ts +14 -20
  20. package/lib/chain/blocks/types.d.ts.map +1 -1
  21. package/lib/chain/blocks/utils/chainSegment.d.ts +23 -2
  22. package/lib/chain/blocks/utils/chainSegment.d.ts.map +1 -1
  23. package/lib/chain/blocks/utils/chainSegment.js +81 -12
  24. package/lib/chain/blocks/utils/chainSegment.js.map +1 -1
  25. package/lib/chain/blocks/verifyBlock.d.ts +3 -2
  26. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  27. package/lib/chain/blocks/verifyBlock.js +30 -5
  28. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  29. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -1
  30. package/lib/chain/blocks/verifyBlocksSanityChecks.js +15 -4
  31. package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
  32. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts +24 -0
  33. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts.map +1 -0
  34. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js +76 -0
  35. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js.map +1 -0
  36. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts +1 -1
  37. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts.map +1 -1
  38. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js +2 -11
  39. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js.map +1 -1
  40. package/lib/chain/chain.d.ts +3 -2
  41. package/lib/chain/chain.d.ts.map +1 -1
  42. package/lib/chain/chain.js +14 -3
  43. package/lib/chain/chain.js.map +1 -1
  44. package/lib/chain/errors/blockError.d.ts +8 -1
  45. package/lib/chain/errors/blockError.d.ts.map +1 -1
  46. package/lib/chain/errors/blockError.js +2 -0
  47. package/lib/chain/errors/blockError.js.map +1 -1
  48. package/lib/chain/errors/executionPayloadBid.d.ts +5 -0
  49. package/lib/chain/errors/executionPayloadBid.d.ts.map +1 -1
  50. package/lib/chain/errors/executionPayloadBid.js +1 -0
  51. package/lib/chain/errors/executionPayloadBid.js.map +1 -1
  52. package/lib/chain/errors/executionPayloadEnvelope.d.ts +5 -0
  53. package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
  54. package/lib/chain/errors/executionPayloadEnvelope.js +1 -0
  55. package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
  56. package/lib/chain/forkChoice/index.js +2 -2
  57. package/lib/chain/forkChoice/index.js.map +1 -1
  58. package/lib/chain/interface.d.ts +3 -2
  59. package/lib/chain/interface.d.ts.map +1 -1
  60. package/lib/chain/interface.js.map +1 -1
  61. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  62. package/lib/chain/prepareNextSlot.js +30 -10
  63. package/lib/chain/prepareNextSlot.js.map +1 -1
  64. package/lib/chain/produceBlock/produceBlockBody.d.ts +3 -2
  65. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  66. package/lib/chain/produceBlock/produceBlockBody.js +34 -13
  67. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  68. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +11 -4
  69. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -1
  70. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +20 -18
  71. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -1
  72. package/lib/chain/validation/block.d.ts.map +1 -1
  73. package/lib/chain/validation/block.js +1 -0
  74. package/lib/chain/validation/block.js.map +1 -1
  75. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  76. package/lib/chain/validation/executionPayloadBid.js +13 -1
  77. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  78. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
  79. package/lib/chain/validation/executionPayloadEnvelope.js +11 -1
  80. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  81. package/lib/metrics/metrics/lodestar.d.ts +1 -0
  82. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  83. package/lib/metrics/metrics/lodestar.js +4 -0
  84. package/lib/metrics/metrics/lodestar.js.map +1 -1
  85. package/lib/network/processor/gossipHandlers.js +4 -6
  86. package/lib/network/processor/gossipHandlers.js.map +1 -1
  87. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -1
  88. package/lib/network/reqresp/handlers/beaconBlocksByRange.js +14 -6
  89. package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
  90. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +1 -1
  91. package/lib/network/reqresp/handlers/blobSidecarsByRange.js +11 -5
  92. package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +1 -1
  93. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -1
  94. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +17 -5
  95. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -1
  96. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts.map +1 -1
  97. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js +7 -4
  98. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js.map +1 -1
  99. package/lib/node/notifier.js +7 -1
  100. package/lib/node/notifier.js.map +1 -1
  101. package/lib/sync/range/batch.d.ts +12 -2
  102. package/lib/sync/range/batch.d.ts.map +1 -1
  103. package/lib/sync/range/batch.js +56 -30
  104. package/lib/sync/range/batch.js.map +1 -1
  105. package/lib/sync/range/chain.d.ts +6 -2
  106. package/lib/sync/range/chain.d.ts.map +1 -1
  107. package/lib/sync/range/chain.js +4 -3
  108. package/lib/sync/range/chain.js.map +1 -1
  109. package/lib/sync/range/range.d.ts.map +1 -1
  110. package/lib/sync/range/range.js +17 -6
  111. package/lib/sync/range/range.js.map +1 -1
  112. package/lib/sync/types.d.ts +34 -0
  113. package/lib/sync/types.d.ts.map +1 -1
  114. package/lib/sync/types.js +34 -0
  115. package/lib/sync/types.js.map +1 -1
  116. package/lib/sync/unknownBlock.d.ts +24 -1
  117. package/lib/sync/unknownBlock.d.ts.map +1 -1
  118. package/lib/sync/unknownBlock.js +649 -53
  119. package/lib/sync/unknownBlock.js.map +1 -1
  120. package/lib/sync/utils/downloadByRange.d.ts +46 -10
  121. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  122. package/lib/sync/utils/downloadByRange.js +147 -24
  123. package/lib/sync/utils/downloadByRange.js.map +1 -1
  124. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  125. package/lib/sync/utils/downloadByRoot.js +6 -2
  126. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  127. package/lib/sync/utils/pendingBlocksTree.d.ts +0 -1
  128. package/lib/sync/utils/pendingBlocksTree.d.ts.map +1 -1
  129. package/lib/sync/utils/pendingBlocksTree.js +0 -9
  130. package/lib/sync/utils/pendingBlocksTree.js.map +1 -1
  131. package/package.json +16 -15
  132. package/src/api/impl/beacon/blocks/index.ts +5 -2
  133. package/src/api/impl/lodestar/index.ts +1 -1
  134. package/src/chain/blocks/importBlock.ts +4 -2
  135. package/src/chain/blocks/importExecutionPayload.ts +92 -97
  136. package/src/chain/blocks/index.ts +44 -13
  137. package/src/chain/blocks/payloadEnvelopeProcessor.ts +2 -2
  138. package/src/chain/blocks/types.ts +14 -25
  139. package/src/chain/blocks/utils/chainSegment.ts +106 -17
  140. package/src/chain/blocks/verifyBlock.ts +35 -6
  141. package/src/chain/blocks/verifyBlocksSanityChecks.ts +16 -7
  142. package/src/chain/blocks/verifyExecutionPayloadEnvelope.ts +129 -0
  143. package/src/chain/blocks/writePayloadEnvelopeInputToDb.ts +9 -18
  144. package/src/chain/chain.ts +23 -3
  145. package/src/chain/errors/blockError.ts +4 -1
  146. package/src/chain/errors/executionPayloadBid.ts +6 -0
  147. package/src/chain/errors/executionPayloadEnvelope.ts +6 -0
  148. package/src/chain/forkChoice/index.ts +2 -2
  149. package/src/chain/interface.ts +7 -1
  150. package/src/chain/prepareNextSlot.ts +42 -12
  151. package/src/chain/produceBlock/produceBlockBody.ts +37 -11
  152. package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +22 -20
  153. package/src/chain/validation/block.ts +1 -0
  154. package/src/chain/validation/executionPayloadBid.ts +14 -0
  155. package/src/chain/validation/executionPayloadEnvelope.ts +12 -2
  156. package/src/metrics/metrics/lodestar.ts +4 -0
  157. package/src/network/processor/gossipHandlers.ts +6 -6
  158. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +14 -6
  159. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +11 -5
  160. package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +17 -5
  161. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRange.ts +7 -4
  162. package/src/node/notifier.ts +8 -1
  163. package/src/sync/range/batch.ts +90 -35
  164. package/src/sync/range/chain.ts +13 -5
  165. package/src/sync/range/range.ts +18 -6
  166. package/src/sync/types.ts +72 -0
  167. package/src/sync/unknownBlock.ts +810 -57
  168. package/src/sync/utils/downloadByRange.ts +256 -39
  169. package/src/sync/utils/downloadByRoot.ts +12 -2
  170. package/src/sync/utils/pendingBlocksTree.ts +0 -15
@@ -1,11 +1,11 @@
1
1
  import { routes } from "@lodestar/api";
2
2
  import { ExecutionStatus } from "@lodestar/fork-choice";
3
- import { SLOTS_PER_EPOCH } from "@lodestar/params";
4
- import { getExecutionPayloadEnvelopeSignatureSet, isStatePostGloas } from "@lodestar/state-transition";
5
- import { fromHex, toRootHex } from "@lodestar/utils";
3
+ import { isStatePostGloas } from "@lodestar/state-transition";
4
+ import { fromHex } from "@lodestar/utils";
6
5
  import { ExecutionPayloadStatus } from "../../execution/index.js";
7
6
  import { isQueueErrorAborted } from "../../util/queue/index.js";
8
7
  import { RegenCaller } from "../regen/interface.js";
8
+ import { verifyExecutionPayloadEnvelope, verifyExecutionPayloadEnvelopeSignature, } from "./verifyExecutionPayloadEnvelope.js";
9
9
  import { verifyPayloadsDataAvailability } from "./verifyPayloadsDataAvailability.js";
10
10
  const EVENTSTREAM_EMIT_RECENT_EXECUTION_PAYLOAD_SLOTS = 64;
11
11
  export { PayloadErrorCode };
@@ -14,7 +14,7 @@ var PayloadErrorCode;
14
14
  PayloadErrorCode["EXECUTION_ENGINE_INVALID"] = "PAYLOAD_ERROR_EXECUTION_ENGINE_INVALID";
15
15
  PayloadErrorCode["EXECUTION_ENGINE_ERROR"] = "PAYLOAD_ERROR_EXECUTION_ENGINE_ERROR";
16
16
  PayloadErrorCode["BLOCK_NOT_IN_FORK_CHOICE"] = "PAYLOAD_ERROR_BLOCK_NOT_IN_FORK_CHOICE";
17
- PayloadErrorCode["STATE_TRANSITION_ERROR"] = "PAYLOAD_ERROR_STATE_TRANSITION_ERROR";
17
+ PayloadErrorCode["ENVELOPE_VERIFICATION_ERROR"] = "PAYLOAD_ERROR_ENVELOPE_VERIFICATION_ERROR";
18
18
  PayloadErrorCode["INVALID_SIGNATURE"] = "PAYLOAD_ERROR_INVALID_SIGNATURE";
19
19
  })(PayloadErrorCode || (PayloadErrorCode = {}));
20
20
  export class PayloadError extends Error {
@@ -39,32 +39,36 @@ function toForkChoiceExecutionStatus(status) {
39
39
  /**
40
40
  * Import an execution payload envelope after all data is available.
41
41
  *
42
- * This function:
43
- * 1. Emits `execution_payload_available` if payload is for current slot
44
- * 2. Gets the ProtoBlock from fork choice
45
- * 3. Applies write-queue backpressure (waitForSpace) early, before verification
46
- * 4. Regenerates the block state
47
- * 5. Runs EL verification (notifyNewPayload) in parallel with signature verification and processExecutionPayloadEnvelope
48
- * 6. Persists verified payload envelope to hot DB
49
- * 7. Updates fork choice
50
- * 8. Caches the post-execution payload state
51
- * 9. Records metrics for column sources
52
- * 10. Emits `execution_payload` for recent enough payloads after successful import
42
+ * The envelope is only verified here, no state mutation. State effects from the payload
43
+ * are applied on the next block via processParentExecutionPayload.
53
44
  *
45
+ * The DA wait must have run upstream (range sync awaits DA in `verifyBlocksInEpoch` for the
46
+ * whole segment; gossip / API path uses the `processExecutionPayload` wrapper below).
47
+ *
48
+ * Steps:
49
+ * 1. Emit `execution_payload_available` event for payload attestation
50
+ * 2. Get the ProtoBlock from fork choice
51
+ * 3. Regenerate state for envelope verification
52
+ * 4. Verify envelope (fields against state, signature, and EL in parallel where possible)
53
+ * 5. Persist verified payload envelope to hot DB (waits for write-queue space for backpressure)
54
+ * 6. Update fork choice (transitions the block's PENDING variant to FULL)
55
+ * 7. Record metrics for payload envelope and column sources
56
+ * 8. Emit `execution_payload` event
54
57
  */
55
- export async function importExecutionPayload(payloadInput, signal, opts = {}) {
58
+ export async function importExecutionPayload(payloadInput, opts = {}) {
56
59
  const signedEnvelope = payloadInput.getPayloadEnvelope();
57
60
  const envelope = signedEnvelope.message;
61
+ const slot = envelope.payload.slotNumber;
58
62
  const blockRootHex = payloadInput.blockRootHex;
59
63
  const blockHashHex = payloadInput.getBlockHashHex();
60
- const fork = this.config.getForkName(envelope.payload.slotNumber);
61
- // 1. Emit `execution_payload_available` event at the start of import. At this point the payload input
62
- // is already complete, so the payload and required data are available for payload attestation.
63
- // This event is only about availability, not validity of the execution payload, hence we can emit
64
- // it before getting a response from the execution client on whether the payload is valid or not.
65
- if (this.clock.currentSlot - envelope.payload.slotNumber < EVENTSTREAM_EMIT_RECENT_EXECUTION_PAYLOAD_SLOTS) {
64
+ const fork = this.config.getForkName(slot);
65
+ // 1. Emit `execution_payload_available` event at the start of import. At this point the
66
+ // payload input is already complete, so the payload and required data are available for
67
+ // payload attestation. This event only signals availability (not validity), so we can emit
68
+ // it before getting a response from the EL on whether the payload is valid or not.
69
+ if (this.clock.currentSlot - slot < EVENTSTREAM_EMIT_RECENT_EXECUTION_PAYLOAD_SLOTS) {
66
70
  this.emitter.emit(routes.events.EventType.executionPayloadAvailable, {
67
- slot: envelope.payload.slotNumber,
71
+ slot,
68
72
  blockRoot: blockRootHex,
69
73
  });
70
74
  }
@@ -76,54 +80,40 @@ export async function importExecutionPayload(payloadInput, signal, opts = {}) {
76
80
  blockRootHex,
77
81
  });
78
82
  }
79
- // 3. Wait for data columns to be available before claiming a write-queue slot.
80
- // The helper is shared with future gloas sync services; take the single-item batch form here.
81
- await verifyPayloadsDataAvailability([payloadInput], signal);
82
- // 4. Apply backpressure from the write queue, before doing verification work.
83
- // The actual DB write is deferred until after verification succeeds.
84
- await this.unfinalizedPayloadEnvelopeWrites.waitForSpace();
85
- // 5. Get pre-state for processExecutionPayloadEnvelope
86
- // We need the block state (post-block, pre-payload) to process the envelope
83
+ // 3. Regenerate state for envelope verification
87
84
  const blockState = await this.regen.getBlockSlotState(protoBlock, protoBlock.slot, { dontTransferCache: true }, RegenCaller.processBlock);
88
85
  if (!isStatePostGloas(blockState)) {
89
86
  throw new PayloadError({
90
- code: PayloadErrorCode.STATE_TRANSITION_ERROR,
91
- message: `Expected gloas+ block state for payload import, got fork=${blockState.forkName}`,
87
+ code: PayloadErrorCode.ENVELOPE_VERIFICATION_ERROR,
88
+ message: `Expected gloas+ state for payload import, got fork=${blockState.forkName}`,
92
89
  });
93
90
  }
94
- // 6. Run verification steps in parallel
95
- const [execResult, signatureValid, postPayloadResult] = await Promise.all([
91
+ // 4. Verify envelope fields against state first to fail fast before the EL + BLS work.
92
+ // When validSignature is true, gossip/API has already verified both the signature and the
93
+ // executionRequestsRoot, so we skip those checks here.
94
+ try {
95
+ verifyExecutionPayloadEnvelope(this.config, blockState, envelope, {
96
+ verifyExecutionRequestsRoot: !opts.validSignature,
97
+ });
98
+ }
99
+ catch (e) {
100
+ throw new PayloadError({
101
+ code: PayloadErrorCode.ENVELOPE_VERIFICATION_ERROR,
102
+ message: e.message,
103
+ }, `Envelope verification error: ${e.message}`);
104
+ }
105
+ // 4a. Run EL and signature verification in parallel
106
+ const [execResult, signatureValid] = await Promise.all([
96
107
  this.executionEngine.notifyNewPayload(fork, envelope.payload, payloadInput.getVersionedHashes(), fromHex(protoBlock.parentRoot), envelope.executionRequests),
97
108
  opts.validSignature === true
98
109
  ? Promise.resolve(true)
99
- : (async () => {
100
- const signatureSet = getExecutionPayloadEnvelopeSignatureSet(this.config, this.pubkeyCache, blockState, signedEnvelope, payloadInput.proposerIndex);
101
- return this.bls.verifySignatureSets([signatureSet]);
102
- })(),
103
- // Signature verified separately above.
104
- // State root check is done separately below with better error typing (matching block pipeline pattern).
105
- (async () => {
106
- try {
107
- return {
108
- postPayloadState: blockState.processExecutionPayloadEnvelope(signedEnvelope, {
109
- verifySignature: false,
110
- verifyStateRoot: false,
111
- }),
112
- };
113
- }
114
- catch (e) {
115
- throw new PayloadError({
116
- code: PayloadErrorCode.STATE_TRANSITION_ERROR,
117
- message: e.message,
118
- }, `State transition error: ${e.message}`);
119
- }
120
- })(),
110
+ : verifyExecutionPayloadEnvelopeSignature(this.config, blockState, this.pubkeyCache, signedEnvelope, payloadInput.proposerIndex, this.bls),
121
111
  ]);
122
- // 5a. Check signature verification result
112
+ // 4b. Check signature verification result
123
113
  if (!signatureValid) {
124
114
  throw new PayloadError({ code: PayloadErrorCode.INVALID_SIGNATURE });
125
115
  }
126
- // 5b. Handle EL response
116
+ // 4c. Handle EL response
127
117
  switch (execResult.status) {
128
118
  case ExecutionPayloadStatus.VALID:
129
119
  break;
@@ -145,32 +135,26 @@ export async function importExecutionPayload(payloadInput, signal, opts = {}) {
145
135
  errorMessage: execResult.validationError ?? "",
146
136
  });
147
137
  }
148
- // 5c. Compute post-payload state root
149
- const postPayloadState = postPayloadResult.postPayloadState;
150
- const postPayloadStateRoot = postPayloadState.hashTreeRoot();
151
- // 6. Persist payload envelope to hot DB (performed asynchronously to avoid blocking)
138
+ // 5. Persist payload envelope to hot DB. Wait for write-queue space here to apply backpressure
139
+ // on the import pipeline during sync, then perform the write asynchronously to avoid blocking.
140
+ await this.unfinalizedPayloadEnvelopeWrites.waitForSpace();
152
141
  this.unfinalizedPayloadEnvelopeWrites.push(payloadInput).catch((e) => {
153
142
  if (!isQueueErrorAborted(e)) {
154
- this.logger.error("Error pushing payload envelope to unfinalized write queue", { slot: envelope.payload.slotNumber, blockRoot: blockRootHex }, e);
143
+ this.logger.error("Error pushing payload envelope to unfinalized write queue", { slot, blockRoot: blockRootHex }, e);
155
144
  }
156
145
  });
157
- // 7. Update fork choice
158
- this.forkChoice.onExecutionPayload(blockRootHex, blockHashHex, envelope.payload.blockNumber, toRootHex(postPayloadStateRoot), toForkChoiceExecutionStatus(execResult.status));
159
- // 8. Cache payload state
160
- this.regen.processState(blockRootHex, postPayloadState);
161
- if (postPayloadState.slot % SLOTS_PER_EPOCH === 0) {
162
- const { checkpoint } = postPayloadState.computeAnchorCheckpoint();
163
- this.regen.addCheckpointState(checkpoint, postPayloadState);
164
- }
165
- // 9. Record metrics for payload envelope and column sources
146
+ // 6. Update fork choice, transitions the block's PENDING variant to FULL
147
+ const execStatus = toForkChoiceExecutionStatus(execResult.status);
148
+ this.forkChoice.onExecutionPayload(blockRootHex, blockHashHex, envelope.payload.blockNumber, execStatus);
149
+ // 7. Record metrics for payload envelope and column sources
166
150
  this.metrics?.importPayload.bySource.inc({ source: payloadInput.getPayloadEnvelopeSource().source });
167
151
  for (const { source } of payloadInput.getSampledColumnsWithSource()) {
168
152
  this.metrics?.importPayload.columnsBySource.inc({ source });
169
153
  }
170
- // 10. Emit event after payload is fully verified and imported to fork choice, only for recent enough payloads
171
- if (this.clock.currentSlot - envelope.payload.slotNumber < EVENTSTREAM_EMIT_RECENT_EXECUTION_PAYLOAD_SLOTS) {
154
+ // 8. Emit event after payload is fully verified and imported to fork choice, only for recent enough payloads
155
+ if (this.clock.currentSlot - slot < EVENTSTREAM_EMIT_RECENT_EXECUTION_PAYLOAD_SLOTS) {
172
156
  this.emitter.emit(routes.events.EventType.executionPayload, {
173
- slot: envelope.payload.slotNumber,
157
+ slot,
174
158
  builderIndex: envelope.builderIndex,
175
159
  blockHash: blockHashHex,
176
160
  blockRoot: blockRootHex,
@@ -179,10 +163,22 @@ export async function importExecutionPayload(payloadInput, signal, opts = {}) {
179
163
  });
180
164
  }
181
165
  this.logger.verbose("Execution payload imported", {
182
- slot: envelope.payload.slotNumber,
166
+ slot,
183
167
  builderIndex: envelope.builderIndex,
184
168
  blockRoot: blockRootHex,
185
169
  blockHash: blockHashHex,
186
170
  });
187
171
  }
172
+ /**
173
+ * Process an execution payload envelope end-to-end: wait for DA, then import.
174
+ *
175
+ * Used by the PayloadEnvelopeProcessor queue (gossip / API / unknown-payload sync) — i.e.
176
+ * callers that have NOT already awaited DA themselves. Range sync's inline dispatch in
177
+ * processBlocks skips this wrapper and calls `importExecutionPayload` directly, since
178
+ * `verifyBlocksInEpoch` already awaited DA for the segment.
179
+ */
180
+ export async function processExecutionPayload(payloadInput, signal, opts = {}) {
181
+ await verifyPayloadsDataAvailability([payloadInput], signal);
182
+ await importExecutionPayload.call(this, payloadInput, opts);
183
+ }
188
184
  //# sourceMappingURL=importExecutionPayload.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"importExecutionPayload.js","sourceRoot":"","sources":["../../../src/chain/blocks/importExecutionPayload.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"importExecutionPayload.js","sourceRoot":"","sources":["../../../src/chain/blocks/importExecutionPayload.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,19 @@
1
+ import { Slot } from "@lodestar/types";
1
2
  import { Metrics } from "../../metrics/metrics.js";
2
3
  import { JobItemQueue } from "../../util/queue/index.js";
3
4
  import type { BeaconChain } from "../chain.js";
4
5
  import { BlockProcessOpts } from "../options.js";
5
6
  import { IBlockInput } from "./blockInput/types.js";
7
+ import { PayloadEnvelopeInput } from "./payloadEnvelopeInput/payloadEnvelopeInput.js";
6
8
  import { ImportBlockOpts } from "./types.js";
7
9
  export { AttestationImportOpt, type ImportBlockOpts } from "./types.js";
8
10
  /**
9
11
  * BlockProcessor processes block jobs in a queued fashion, one after the other.
10
12
  */
11
13
  export declare class BlockProcessor {
12
- readonly jobQueue: JobItemQueue<[IBlockInput[], ImportBlockOpts], void>;
14
+ readonly jobQueue: JobItemQueue<[IBlockInput[], Map<Slot, PayloadEnvelopeInput> | null, ImportBlockOpts], void>;
13
15
  constructor(chain: BeaconChain, metrics: Metrics | null, opts: BlockProcessOpts, signal: AbortSignal);
14
- processBlocksJob(job: IBlockInput[], opts?: ImportBlockOpts): Promise<void>;
16
+ processBlocksJob(job: IBlockInput[], payloadEnvelopes: Map<Slot, PayloadEnvelopeInput> | null, opts?: ImportBlockOpts): Promise<void>;
15
17
  }
16
18
  /**
17
19
  * Validate and process a block
@@ -23,5 +25,5 @@ export declare class BlockProcessor {
23
25
  *
24
26
  * All other effects are provided by downstream event handlers
25
27
  */
26
- export declare function processBlocks(this: BeaconChain, blocks: IBlockInput[], opts: BlockProcessOpts & ImportBlockOpts): Promise<void>;
28
+ export declare function processBlocks(this: BeaconChain, blocks: IBlockInput[], payloadEnvelopes: Map<Slot, PayloadEnvelopeInput> | null, opts: BlockProcessOpts & ImportBlockOpts): Promise<void>;
27
29
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/chain/blocks/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,OAAO,EAAC,MAAM,0BAA0B,CAAC;AAEjD,OAAO,EAAC,YAAY,EAAsB,MAAM,2BAA2B,CAAC;AAC5E,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAC,gBAAgB,EAAC,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAC,WAAW,EAAC,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAqB,eAAe,EAAC,MAAM,YAAY,CAAC;AAK/D,OAAO,EAAC,oBAAoB,EAAE,KAAK,eAAe,EAAC,MAAM,YAAY,CAAC;AAItE;;GAEG;AACH,qBAAa,cAAc;IACzB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,WAAW,EAAE,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,CAAC;IAExE,YAAY,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,WAAW,EAQnG;IAEK,gBAAgB,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpF;CACF;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,WAAW,EAAE,EACrB,IAAI,EAAE,gBAAgB,GAAG,eAAe,GACvC,OAAO,CAAC,IAAI,CAAC,CA8Ff"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/chain/blocks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,IAAI,EAAC,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAC,OAAO,EAAC,MAAM,0BAA0B,CAAC;AAEjD,OAAO,EAAC,YAAY,EAAsB,MAAM,2BAA2B,CAAC;AAC5E,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAC,gBAAgB,EAAC,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAC,WAAW,EAAC,MAAM,uBAAuB,CAAC;AAGlD,OAAO,EAAC,oBAAoB,EAAC,MAAM,gDAAgD,CAAC;AACpF,OAAO,EAAqB,eAAe,EAAC,MAAM,YAAY,CAAC;AAK/D,OAAO,EAAC,oBAAoB,EAAE,KAAK,eAAe,EAAC,MAAM,YAAY,CAAC;AAItE;;GAEG;AACH,qBAAa,cAAc;IACzB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,oBAAoB,CAAC,GAAG,IAAI,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,CAAC;IAEhH,YAAY,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,WAAW,EAQnG;IAEK,gBAAgB,CACpB,GAAG,EAAE,WAAW,EAAE,EAClB,gBAAgB,EAAE,GAAG,CAAC,IAAI,EAAE,oBAAoB,CAAC,GAAG,IAAI,EACxD,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC,IAAI,CAAC,CAEf;CACF;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,WAAW,EAAE,EACrB,gBAAgB,EAAE,GAAG,CAAC,IAAI,EAAE,oBAAoB,CAAC,GAAG,IAAI,EACxD,IAAI,EAAE,gBAAgB,GAAG,eAAe,GACvC,OAAO,CAAC,IAAI,CAAC,CAsHf"}
@@ -3,6 +3,7 @@ import { nextEventLoop } from "../../util/eventLoop.js";
3
3
  import { JobItemQueue, isQueueErrorAborted } from "../../util/queue/index.js";
4
4
  import { BlockError, BlockErrorCode, isBlockErrorAborted } from "../errors/index.js";
5
5
  import { importBlock } from "./importBlock.js";
6
+ import { importExecutionPayload } from "./importExecutionPayload.js";
6
7
  import { assertLinearChainSegment } from "./utils/chainSegment.js";
7
8
  import { verifyBlocksInEpoch } from "./verifyBlock.js";
8
9
  import { verifyBlocksSanityChecks } from "./verifyBlocksSanityChecks.js";
@@ -14,12 +15,12 @@ const QUEUE_MAX_LENGTH = 256;
14
15
  export class BlockProcessor {
15
16
  jobQueue;
16
17
  constructor(chain, metrics, opts, signal) {
17
- this.jobQueue = new JobItemQueue((job, importOpts) => {
18
- return processBlocks.call(chain, job, { ...opts, ...importOpts });
18
+ this.jobQueue = new JobItemQueue((job, payloadEnvelopes, importOpts) => {
19
+ return processBlocks.call(chain, job, payloadEnvelopes, { ...opts, ...importOpts });
19
20
  }, { maxLength: QUEUE_MAX_LENGTH, noYieldIfOneItem: true, signal }, metrics?.blockProcessorQueue ?? undefined);
20
21
  }
21
- async processBlocksJob(job, opts = {}) {
22
- await this.jobQueue.push(job, opts);
22
+ async processBlocksJob(job, payloadEnvelopes, opts = {}) {
23
+ await this.jobQueue.push(job, payloadEnvelopes, opts);
23
24
  }
24
25
  }
25
26
  /**
@@ -32,13 +33,10 @@ export class BlockProcessor {
32
33
  *
33
34
  * All other effects are provided by downstream event handlers
34
35
  */
35
- export async function processBlocks(blocks, opts) {
36
+ export async function processBlocks(blocks, payloadEnvelopes, opts) {
36
37
  if (blocks.length === 0) {
37
38
  return; // TODO: or throw?
38
39
  }
39
- if (blocks.length > 1) {
40
- assertLinearChainSegment(this.config, blocks);
41
- }
42
40
  try {
43
41
  const { relevantBlocks, parentSlots, parentBlock } = verifyBlocksSanityChecks(this, blocks, opts);
44
42
  // No relevant blocks, skip verifyBlocksInEpoch()
@@ -46,9 +44,18 @@ export async function processBlocks(blocks, opts) {
46
44
  // parentBlock can only be null if relevantBlocks are empty
47
45
  return;
48
46
  }
47
+ const { warnings: orphanedPayloads } = assertLinearChainSegment(this.config, relevantBlocks, payloadEnvelopes, parentBlock);
48
+ if (orphanedPayloads != null) {
49
+ for (const orphaned of orphanedPayloads) {
50
+ this.logger.debug("Orphaned payload envelope in chain segment", {
51
+ slot: orphaned.slot,
52
+ blockRoot: orphaned.payloadEnvelopeInput.blockRootHex,
53
+ });
54
+ }
55
+ }
49
56
  // Fully verify a block to be imported immediately after. Does not produce any side-effects besides adding intermediate
50
57
  // states in the state cache through regen.
51
- const { postStates, dataAvailabilityStatuses, proposerBalanceDeltas, segmentExecStatus, indexedAttestationsByBlock } = await verifyBlocksInEpoch.call(this, parentBlock, relevantBlocks, opts);
58
+ const { postStates, dataAvailabilityStatuses, proposerBalanceDeltas, segmentExecStatus, indexedAttestationsByBlock } = await verifyBlocksInEpoch.call(this, parentBlock, relevantBlocks, payloadEnvelopes, opts);
52
59
  // If segmentExecStatus has lvhForkchoice then, the entire segment should be invalid
53
60
  // and we need to further propagate
54
61
  if (segmentExecStatus.execAborted !== null) {
@@ -61,7 +68,6 @@ export async function processBlocks(blocks, opts) {
61
68
  const fullyVerifiedBlocks = relevantBlocks.map((block, i) => ({
62
69
  blockInput: block,
63
70
  postState: postStates[i],
64
- postPayloadState: null,
65
71
  parentBlockSlot: parentSlots[i],
66
72
  executionStatus: executionStatuses[i],
67
73
  // start supporting optimistic syncing/processing
@@ -74,6 +80,18 @@ export async function processBlocks(blocks, opts) {
74
80
  for (const fullyVerifiedBlock of fullyVerifiedBlocks) {
75
81
  // TODO: Consider batching importBlock too if it takes significant time
76
82
  await importBlock.call(this, fullyVerifiedBlock, opts);
83
+ const slot = fullyVerifiedBlock.blockInput.getBlock().message.slot;
84
+ const payloadInput = payloadEnvelopes?.get(slot);
85
+ if (payloadInput?.hasPayloadEnvelope()) {
86
+ if (!payloadInput.isComplete()) {
87
+ // we validated DA before reaching this
88
+ throw new Error(`Payload envelope for slot ${slot} not complete after DA verification`);
89
+ }
90
+ // we already awaited DA in verifyBlocksInEpoch for this segment
91
+ // TODO GLOAS: may need FullyVerifiedPayload here with DatAvailabilityStatus added from here
92
+ // the current flow use that data from the forkchoice pending node which is not correct
93
+ await importExecutionPayload.call(this, payloadInput, { validSignature: false });
94
+ }
77
95
  await nextEventLoop();
78
96
  }
79
97
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/chain/blocks/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/chain/blocks/index.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { JobItemQueue } from "../../util/queue/index.js";
2
- import { importExecutionPayload } from "./importExecutionPayload.js";
2
+ import { processExecutionPayload } from "./importExecutionPayload.js";
3
3
  // TODO GLOAS: Set to be equal to DEFAULT_MAX_PENDING_UNFINALIZED_PAYLOAD_ENVELOPE_WRITES for now
4
4
  const QUEUE_MAX_LENGTH = 16;
5
5
  var PayloadEnvelopeImportStatus;
@@ -22,7 +22,7 @@ export class PayloadEnvelopeProcessor {
22
22
  constructor(chain, metrics, signal) {
23
23
  this.jobQueue = new JobItemQueue((payloadInput, opts) => {
24
24
  this.importStatus.set(payloadInput, PayloadEnvelopeImportStatus.importing);
25
- return importExecutionPayload.call(chain, payloadInput, signal, opts);
25
+ return processExecutionPayload.call(chain, payloadInput, signal, opts);
26
26
  }, { maxLength: QUEUE_MAX_LENGTH, noYieldIfOneItem: true, signal }, metrics?.payloadEnvelopeProcessorQueue ?? undefined);
27
27
  }
28
28
  async processPayloadEnvelopeJob(payloadInput, opts = {}) {
@@ -1 +1 @@
1
- {"version":3,"file":"payloadEnvelopeProcessor.js","sourceRoot":"","sources":["../../../src/chain/blocks/payloadEnvelopeProcessor.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,2BAA2B,CAAC;AAGvD,OAAO,EAAC,sBAAsB,EAAC,MAAM,6BAA6B,CAAC;AAGnE,iGAAiG;AACjG,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAE5B,IAAK,2BAIJ;AAJD,WAAK,2BAA2B;IAC9B,gDAAiB,CAAA;IACjB,sDAAuB,CAAA;IACvB,oDAAqB,CAAA;AAAC,CACxB,EAJK,2BAA2B,KAA3B,2BAA2B,QAI/B;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,wBAAwB;IAC1B,QAAQ,CAAgE;IAChE,YAAY,GAAG,IAAI,OAAO,EAAqD,CAAC;IAEjG,YAAY,KAAkB,EAAE,OAAuB,EAAE,MAAmB,EAAE;QAC5E,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,CAC9B,CAAC,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,2BAA2B,CAAC,SAAS,CAAC,CAAC;YAC3E,OAAO,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAAA,CACvE,EACD,EAAC,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAC,EAC7D,OAAO,EAAE,6BAA6B,IAAI,SAAS,CACpD,CAAC;IAAA,CACH;IAED,KAAK,CAAC,yBAAyB,CAAC,YAAkC,EAAE,IAAI,GAAsB,EAAE,EAAiB;QAC/G,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,SAAS,EAAE,CAAC;YACtD,OAAO;QACT,CAAC;QAED,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;QAEnC,sEAAsE;QACtE,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,SAAS,EAAE,CAAC;YACtD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,2BAA2B,CAAC,MAAM,CAAC,CAAC;QAExE,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YAC7C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,2BAA2B,CAAC,QAAQ,CAAC,CAAC;QAC5E,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACvC,MAAM,CAAC,CAAC;QACV,CAAC;IAAA,CACF;CACF"}
1
+ {"version":3,"file":"payloadEnvelopeProcessor.js","sourceRoot":"","sources":["../../../src/chain/blocks/payloadEnvelopeProcessor.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,2BAA2B,CAAC;AAGvD,OAAO,EAAC,uBAAuB,EAAC,MAAM,6BAA6B,CAAC;AAGpE,iGAAiG;AACjG,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAE5B,IAAK,2BAIJ;AAJD,WAAK,2BAA2B;IAC9B,gDAAiB,CAAA;IACjB,sDAAuB,CAAA;IACvB,oDAAqB,CAAA;AAAC,CACxB,EAJK,2BAA2B,KAA3B,2BAA2B,QAI/B;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,wBAAwB;IAC1B,QAAQ,CAAgE;IAChE,YAAY,GAAG,IAAI,OAAO,EAAqD,CAAC;IAEjG,YAAY,KAAkB,EAAE,OAAuB,EAAE,MAAmB,EAAE;QAC5E,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,CAC9B,CAAC,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,2BAA2B,CAAC,SAAS,CAAC,CAAC;YAC3E,OAAO,uBAAuB,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAAA,CACxE,EACD,EAAC,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAC,EAC7D,OAAO,EAAE,6BAA6B,IAAI,SAAS,CACpD,CAAC;IAAA,CACH;IAED,KAAK,CAAC,yBAAyB,CAAC,YAAkC,EAAE,IAAI,GAAsB,EAAE,EAAiB;QAC/G,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,SAAS,EAAE,CAAC;YACtD,OAAO;QACT,CAAC;QAED,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;QAEnC,sEAAsE;QACtE,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,SAAS,EAAE,CAAC;YACtD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,2BAA2B,CAAC,MAAM,CAAC,CAAC;QAExE,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YAC7C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,2BAA2B,CAAC,QAAQ,CAAC,CAAC;QAC5E,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACvC,MAAM,CAAC,CAAC;QACV,CAAC;IAAA,CACF;CACF"}
@@ -1,5 +1,5 @@
1
1
  import type { ChainForkConfig } from "@lodestar/config";
2
- import { BlockExecutionStatus, PayloadExecutionStatus } from "@lodestar/fork-choice";
2
+ import type { BlockExecutionStatus, PayloadExecutionStatus } from "@lodestar/fork-choice";
3
3
  import { DataAvailabilityStatus, IBeaconStateView } from "@lodestar/state-transition";
4
4
  import type { IndexedAttestation, Slot, fulu } from "@lodestar/types";
5
5
  import { IBlockInput } from "./blockInput/types.js";
@@ -30,8 +30,9 @@ export declare enum BlobSidecarValidation {
30
30
  }
31
31
  export type ImportPayloadOpts = {
32
32
  /**
33
- * Set to true if envelope signature was already verified (e.g., during gossip/API validation).
34
- * When false/undefined, signature will be verified during import.
33
+ * Set to true when the envelope was already validated upstream (e.g., gossip/API validation):
34
+ * signature is trusted and execution_requests_root was already verified against the bid.
35
+ * When false/undefined, both are verified during import.
35
36
  */
36
37
  validSignature?: boolean;
37
38
  };
@@ -73,7 +74,14 @@ export type ImportBlockOpts = {
73
74
  /** Seen timestamp seconds */
74
75
  seenTimestampSec?: number;
75
76
  };
76
- type FullyVerifiedBlockBase = {
77
+ /**
78
+ * A wrapper around a `SignedBeaconBlock` that indicates that this block is fully verified and ready to import.
79
+ *
80
+ * `executionStatus` reflects the outcome of execution payload verification at block-import time:
81
+ * - pre-gloas: Valid | Syncing | PreMerge (from EL notifyNewPayload against the in-block payload)
82
+ * - post-gloas: PayloadSeparated (payload arrives separately as an envelope and is imported later)
83
+ */
84
+ export type FullyVerifiedBlock = {
77
85
  blockInput: IBlockInput;
78
86
  postState: IBeaconStateView;
79
87
  parentBlockSlot: Slot;
@@ -83,22 +91,8 @@ type FullyVerifiedBlockBase = {
83
91
  indexedAttestations: IndexedAttestation[];
84
92
  /** Seen timestamp seconds */
85
93
  seenTimestampSec: number;
94
+ /** If the execution payload couldn't be verified because of EL syncing status, used in optimistic sync */
95
+ executionStatus: BlockExecutionStatus | PayloadExecutionStatus;
86
96
  };
87
- /**
88
- * A wrapper around a `SignedBeaconBlock` that indicates that this block is fully verified and ready to import.
89
- *
90
- * Discriminated union on `postPayloadState`:
91
- * - `null` → block has no pre-verified envelope; `executionStatus` is any `BlockExecutionStatus`
92
- * - non-null → envelope was pre-verified during state transition; `executionStatus` is narrowed to
93
- * `Valid | Syncing` (matching what `forkChoice.onExecutionPayload` expects)
94
- */
95
- export type FullyVerifiedBlock = FullyVerifiedBlockBase & ({
96
- postPayloadState: null;
97
- /** If the execution payload couldn't be verified because of EL syncing status, used in optimistic sync or for merge block */
98
- executionStatus: BlockExecutionStatus;
99
- } | {
100
- postPayloadState: IBeaconStateView;
101
- executionStatus: PayloadExecutionStatus;
102
- });
103
97
  export {};
104
98
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/chain/blocks/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAC,oBAAoB,EAAE,sBAAsB,EAAC,MAAM,uBAAuB,CAAC;AAEnF,OAAO,EAAC,sBAAsB,EAAE,gBAAgB,EAAqB,MAAM,4BAA4B,CAAC;AACxG,OAAO,KAAK,EAAC,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAC,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAC,WAAW,EAAC,MAAM,uBAAuB,CAAC;AAElD,oBAAY,iBAAiB;IAC3B,KAAK,UAAU;IACf,IAAI,SAAS;IACb,UAAU,gBAAgB;CAC3B;AAED,KAAK,cAAc,GAAG;IACpB,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC;IACnC,eAAe,EAAE,UAAU,GAAG,IAAI,CAAC;CACpC,CAAC;AACF,MAAM,MAAM,mBAAmB,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAE9D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAAG,OAAO,CAMrG;AAED,oBAAY,oBAAoB;IAC9B,IAAI,IAAA;IACJ,KAAK,IAAA;CACN;AAED,oBAAY,qBAAqB;IAC/B,gFAAgF;IAChF,UAAU,IAAA;IACV;;;;OAIG;IACH,IAAI,IAAA;CACL;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B;;OAEG;IACH,kBAAkB,CAAC,EAAE,oBAAoB,CAAC;IAC1C;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;OAEG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,mFAAmF;IACnF,iBAAiB,CAAC,EAAE,qBAAqB,CAAC;IAC1C,6BAA6B;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,KAAK,sBAAsB,GAAG;IAC5B,UAAU,EAAE,WAAW,CAAC;IACxB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,eAAe,EAAE,IAAI,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,4FAA4F;IAC5F,mBAAmB,EAAE,kBAAkB,EAAE,CAAC;IAC1C,6BAA6B;IAC7B,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,kBAAkB,GAAG,sBAAsB,GACrD,CACI;IACE,gBAAgB,EAAE,IAAI,CAAC;IACvB,6HAA6H;IAC7H,eAAe,EAAE,oBAAoB,CAAC;CACvC,GACD;IACE,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,eAAe,EAAE,sBAAsB,CAAC;CACzC,CACJ,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/chain/blocks/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAC,oBAAoB,EAAE,sBAAsB,EAAC,MAAM,uBAAuB,CAAC;AAExF,OAAO,EAAC,sBAAsB,EAAE,gBAAgB,EAAqB,MAAM,4BAA4B,CAAC;AACxG,OAAO,KAAK,EAAC,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAC,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAC,WAAW,EAAC,MAAM,uBAAuB,CAAC;AAElD,oBAAY,iBAAiB;IAC3B,KAAK,UAAU;IACf,IAAI,SAAS;IACb,UAAU,gBAAgB;CAC3B;AAED,KAAK,cAAc,GAAG;IACpB,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC;IACnC,eAAe,EAAE,UAAU,GAAG,IAAI,CAAC;CACpC,CAAC;AACF,MAAM,MAAM,mBAAmB,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAE9D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAAG,OAAO,CAMrG;AAED,oBAAY,oBAAoB;IAC9B,IAAI,IAAA;IACJ,KAAK,IAAA;CACN;AAED,oBAAY,qBAAqB;IAC/B,gFAAgF;IAChF,UAAU,IAAA;IACV;;;;OAIG;IACH,IAAI,IAAA;CACL;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B;;OAEG;IACH,kBAAkB,CAAC,EAAE,oBAAoB,CAAC;IAC1C;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;OAEG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,mFAAmF;IACnF,iBAAiB,CAAC,EAAE,qBAAqB,CAAC;IAC1C,6BAA6B;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,EAAE,WAAW,CAAC;IACxB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,eAAe,EAAE,IAAI,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,4FAA4F;IAC5F,mBAAmB,EAAE,kBAAkB,EAAE,CAAC;IAC1C,6BAA6B;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,0GAA0G;IAC1G,eAAe,EAAE,oBAAoB,GAAG,sBAAsB,CAAC;CAChE,CAAC"}
@@ -1,7 +1,28 @@
1
1
  import { ChainForkConfig } from "@lodestar/config";
2
+ import { ProtoBlock } from "@lodestar/fork-choice";
3
+ import { Slot } from "@lodestar/types";
2
4
  import { IBlockInput } from "../blockInput/types.js";
5
+ import { PayloadEnvelopeInput } from "../payloadEnvelopeInput/payloadEnvelopeInput.js";
6
+ export type OrphanedPayloadEnvelope = {
7
+ slot: Slot;
8
+ payloadEnvelopeInput: PayloadEnvelopeInput;
9
+ };
10
+ export type ChainSegmentResult = {
11
+ warnings: OrphanedPayloadEnvelope[] | null;
12
+ };
3
13
  /**
4
- * Assert this chain segment of blocks is linear with slot numbers and hashes
14
+ * Assert this chain segment of blocks is linear with slot numbers and hashes,
15
+ * and that the provided envelopes are consistent with their respective blocks.
16
+ *
17
+ * Must be called after verifyBlocksSanityChecks so that parentBlock (from forkchoice)
18
+ * is available to seed the execution hash chain.
19
+ *
20
+ * For each block:
21
+ * - Verifies parent root + slot linearity
22
+ * - For gloas: verifies bid.parentBlockHash matches the tracked execution hash; if not, the
23
+ * previous FULL envelope is treated as orphaned (segment continues as if previous slot was EMPTY)
24
+ * - If an envelope exists for this slot: verifies it references this block's root
25
+ * - Advances the tracked execution hash (FULL if envelope present, EMPTY if not)
5
26
  */
6
- export declare function assertLinearChainSegment(config: ChainForkConfig, blocks: IBlockInput[]): void;
27
+ export declare function assertLinearChainSegment(config: ChainForkConfig, blocks: IBlockInput[], payloadEnvelopes: Map<Slot, PayloadEnvelopeInput> | null, parentBlock: ProtoBlock): ChainSegmentResult;
7
28
  //# sourceMappingURL=chainSegment.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chainSegment.d.ts","sourceRoot":"","sources":["../../../../src/chain/blocks/utils/chainSegment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAGjD,OAAO,EAAC,WAAW,EAAC,MAAM,wBAAwB,CAAC;AAEnD;;GAEG;AAEH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAmB7F"}
1
+ {"version":3,"file":"chainSegment.d.ts","sourceRoot":"","sources":["../../../../src/chain/blocks/utils/chainSegment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAC,UAAU,EAAC,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAC,IAAI,EAA0B,MAAM,iBAAiB,CAAC;AAG9D,OAAO,EAAC,WAAW,EAAC,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAC,oBAAoB,EAAC,MAAM,iDAAiD,CAAC;AAErF,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,IAAI,CAAC;IACX,oBAAoB,EAAE,oBAAoB,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAAC,QAAQ,EAAE,uBAAuB,EAAE,GAAG,IAAI,CAAA;CAAC,CAAC;AAE9E;;;;;;;;;;;;;GAaG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,WAAW,EAAE,EACrB,gBAAgB,EAAE,GAAG,CAAC,IAAI,EAAE,oBAAoB,CAAC,GAAG,IAAI,EACxD,WAAW,EAAE,UAAU,GACtB,kBAAkB,CAmFpB"}