@lodestar/beacon-node 1.43.0-dev.6641fd750e → 1.43.0-dev.7622a1076c

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 (228) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +1 -4
  3. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  4. package/lib/api/impl/beacon/state/utils.d.ts +2 -2
  5. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
  6. package/lib/api/impl/beacon/state/utils.js.map +1 -1
  7. package/lib/api/impl/lodestar/attesterSlashing.d.ts +8 -0
  8. package/lib/api/impl/lodestar/attesterSlashing.d.ts.map +1 -0
  9. package/lib/api/impl/lodestar/attesterSlashing.js +29 -0
  10. package/lib/api/impl/lodestar/attesterSlashing.js.map +1 -0
  11. package/lib/api/impl/lodestar/index.d.ts.map +1 -1
  12. package/lib/api/impl/lodestar/index.js +36 -1
  13. package/lib/api/impl/lodestar/index.js.map +1 -1
  14. package/lib/api/impl/validator/index.d.ts.map +1 -1
  15. package/lib/api/impl/validator/index.js +1 -4
  16. package/lib/api/impl/validator/index.js.map +1 -1
  17. package/lib/chain/GetBlobsTracker.d.ts +1 -1
  18. package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
  19. package/lib/chain/GetBlobsTracker.js +1 -2
  20. package/lib/chain/GetBlobsTracker.js.map +1 -1
  21. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  22. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  23. package/lib/chain/archiveStore/interface.d.ts +4 -4
  24. package/lib/chain/archiveStore/interface.d.ts.map +1 -1
  25. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts +4 -4
  26. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts.map +1 -1
  27. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js +2 -4
  28. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js.map +1 -1
  29. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +2 -2
  30. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -1
  31. package/lib/chain/archiveStore/utils/archiveBlocks.js +110 -58
  32. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  33. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  34. package/lib/chain/blocks/importBlock.js +27 -35
  35. package/lib/chain/blocks/importBlock.js.map +1 -1
  36. package/lib/chain/blocks/importExecutionPayload.d.ts +15 -14
  37. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  38. package/lib/chain/blocks/importExecutionPayload.js +63 -85
  39. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  40. package/lib/chain/blocks/index.d.ts.map +1 -1
  41. package/lib/chain/blocks/index.js +1 -2
  42. package/lib/chain/blocks/index.js.map +1 -1
  43. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +3 -0
  44. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -1
  45. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +20 -0
  46. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -1
  47. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts +5 -0
  48. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts.map +1 -1
  49. package/lib/chain/blocks/payloadEnvelopeProcessor.js +6 -4
  50. package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -1
  51. package/lib/chain/blocks/types.d.ts +15 -21
  52. package/lib/chain/blocks/types.d.ts.map +1 -1
  53. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts +24 -0
  54. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts.map +1 -0
  55. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js +76 -0
  56. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js.map +1 -0
  57. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts +14 -0
  58. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts.map +1 -0
  59. package/lib/chain/blocks/verifyPayloadsDataAvailability.js +25 -0
  60. package/lib/chain/blocks/verifyPayloadsDataAvailability.js.map +1 -0
  61. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts +1 -1
  62. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js +1 -1
  63. package/lib/chain/chain.d.ts +3 -3
  64. package/lib/chain/chain.d.ts.map +1 -1
  65. package/lib/chain/chain.js +19 -39
  66. package/lib/chain/chain.js.map +1 -1
  67. package/lib/chain/emitter.d.ts +16 -4
  68. package/lib/chain/emitter.d.ts.map +1 -1
  69. package/lib/chain/emitter.js +5 -0
  70. package/lib/chain/emitter.js.map +1 -1
  71. package/lib/chain/errors/attestationError.d.ts +8 -1
  72. package/lib/chain/errors/attestationError.d.ts.map +1 -1
  73. package/lib/chain/errors/attestationError.js +4 -0
  74. package/lib/chain/errors/attestationError.js.map +1 -1
  75. package/lib/chain/errors/executionPayloadBid.d.ts +5 -0
  76. package/lib/chain/errors/executionPayloadBid.d.ts.map +1 -1
  77. package/lib/chain/errors/executionPayloadBid.js +1 -0
  78. package/lib/chain/errors/executionPayloadBid.js.map +1 -1
  79. package/lib/chain/errors/executionPayloadEnvelope.d.ts +5 -0
  80. package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
  81. package/lib/chain/errors/executionPayloadEnvelope.js +1 -0
  82. package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
  83. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  84. package/lib/chain/forkChoice/index.js +11 -15
  85. package/lib/chain/forkChoice/index.js.map +1 -1
  86. package/lib/chain/interface.d.ts +2 -2
  87. package/lib/chain/interface.d.ts.map +1 -1
  88. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  89. package/lib/chain/prepareNextSlot.js +22 -16
  90. package/lib/chain/prepareNextSlot.js.map +1 -1
  91. package/lib/chain/produceBlock/computeNewStateRoot.d.ts +3 -9
  92. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
  93. package/lib/chain/produceBlock/computeNewStateRoot.js +5 -32
  94. package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
  95. package/lib/chain/produceBlock/produceBlockBody.d.ts +3 -8
  96. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  97. package/lib/chain/produceBlock/produceBlockBody.js +30 -19
  98. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  99. package/lib/chain/regen/errors.d.ts +1 -11
  100. package/lib/chain/regen/errors.d.ts.map +1 -1
  101. package/lib/chain/regen/errors.js +0 -2
  102. package/lib/chain/regen/errors.js.map +1 -1
  103. package/lib/chain/regen/interface.d.ts +6 -12
  104. package/lib/chain/regen/interface.d.ts.map +1 -1
  105. package/lib/chain/regen/queued.d.ts +6 -11
  106. package/lib/chain/regen/queued.d.ts.map +1 -1
  107. package/lib/chain/regen/queued.js +8 -40
  108. package/lib/chain/regen/queued.js.map +1 -1
  109. package/lib/chain/regen/regen.d.ts +0 -5
  110. package/lib/chain/regen/regen.d.ts.map +1 -1
  111. package/lib/chain/regen/regen.js +7 -34
  112. package/lib/chain/regen/regen.js.map +1 -1
  113. package/lib/chain/stateCache/datastore/db.d.ts +5 -4
  114. package/lib/chain/stateCache/datastore/db.d.ts.map +1 -1
  115. package/lib/chain/stateCache/datastore/db.js +10 -32
  116. package/lib/chain/stateCache/datastore/db.js.map +1 -1
  117. package/lib/chain/stateCache/datastore/file.d.ts +1 -1
  118. package/lib/chain/stateCache/datastore/file.d.ts.map +1 -1
  119. package/lib/chain/stateCache/datastore/file.js +5 -5
  120. package/lib/chain/stateCache/datastore/file.js.map +1 -1
  121. package/lib/chain/stateCache/datastore/types.d.ts +1 -1
  122. package/lib/chain/stateCache/datastore/types.d.ts.map +1 -1
  123. package/lib/chain/stateCache/fifoBlockStateCache.d.ts +1 -7
  124. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -1
  125. package/lib/chain/stateCache/fifoBlockStateCache.js +0 -8
  126. package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
  127. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +13 -30
  128. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  129. package/lib/chain/stateCache/persistentCheckpointsCache.js +120 -216
  130. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  131. package/lib/chain/stateCache/types.d.ts +8 -15
  132. package/lib/chain/stateCache/types.d.ts.map +1 -1
  133. package/lib/chain/stateCache/types.js.map +1 -1
  134. package/lib/chain/validation/aggregateAndProof.js +12 -0
  135. package/lib/chain/validation/aggregateAndProof.js.map +1 -1
  136. package/lib/chain/validation/attestation.d.ts.map +1 -1
  137. package/lib/chain/validation/attestation.js +12 -0
  138. package/lib/chain/validation/attestation.js.map +1 -1
  139. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  140. package/lib/chain/validation/executionPayloadBid.js +13 -1
  141. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  142. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
  143. package/lib/chain/validation/executionPayloadEnvelope.js +21 -11
  144. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  145. package/lib/chain/validation/payloadAttestationMessage.d.ts.map +1 -1
  146. package/lib/chain/validation/payloadAttestationMessage.js +4 -3
  147. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
  148. package/lib/db/repositories/executionPayloadEnvelopeArchive.js +1 -1
  149. package/lib/db/repositories/executionPayloadEnvelopeArchive.js.map +1 -1
  150. package/lib/execution/engine/http.d.ts.map +1 -1
  151. package/lib/execution/engine/http.js +21 -14
  152. package/lib/execution/engine/http.js.map +1 -1
  153. package/lib/execution/engine/interface.d.ts +1 -0
  154. package/lib/execution/engine/interface.d.ts.map +1 -1
  155. package/lib/execution/engine/mock.d.ts.map +1 -1
  156. package/lib/execution/engine/mock.js +6 -0
  157. package/lib/execution/engine/mock.js.map +1 -1
  158. package/lib/execution/engine/types.d.ts +20 -0
  159. package/lib/execution/engine/types.d.ts.map +1 -1
  160. package/lib/execution/engine/types.js +18 -0
  161. package/lib/execution/engine/types.js.map +1 -1
  162. package/lib/network/gossip/topic.d.ts +3 -729
  163. package/lib/network/gossip/topic.d.ts.map +1 -1
  164. package/lib/network/network.js +1 -1
  165. package/lib/network/network.js.map +1 -1
  166. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  167. package/lib/network/processor/gossipHandlers.js +22 -6
  168. package/lib/network/processor/gossipHandlers.js.map +1 -1
  169. package/lib/node/nodejs.d.ts.map +1 -1
  170. package/lib/node/nodejs.js +4 -2
  171. package/lib/node/nodejs.js.map +1 -1
  172. package/lib/util/sszBytes.d.ts.map +1 -1
  173. package/lib/util/sszBytes.js +16 -3
  174. package/lib/util/sszBytes.js.map +1 -1
  175. package/package.json +16 -16
  176. package/src/api/impl/beacon/blocks/index.ts +1 -4
  177. package/src/api/impl/beacon/state/utils.ts +2 -2
  178. package/src/api/impl/lodestar/attesterSlashing.ts +43 -0
  179. package/src/api/impl/lodestar/index.ts +48 -2
  180. package/src/api/impl/validator/index.ts +3 -6
  181. package/src/chain/GetBlobsTracker.ts +1 -2
  182. package/src/chain/archiveStore/archiveStore.ts +5 -5
  183. package/src/chain/archiveStore/interface.ts +4 -4
  184. package/src/chain/archiveStore/strategies/frequencyStateArchiveStrategy.ts +6 -8
  185. package/src/chain/archiveStore/utils/archiveBlocks.ts +153 -94
  186. package/src/chain/blocks/importBlock.ts +26 -39
  187. package/src/chain/blocks/importExecutionPayload.ts +77 -103
  188. package/src/chain/blocks/index.ts +1 -2
  189. package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +27 -0
  190. package/src/chain/blocks/payloadEnvelopeProcessor.ts +6 -5
  191. package/src/chain/blocks/types.ts +15 -26
  192. package/src/chain/blocks/verifyExecutionPayloadEnvelope.ts +129 -0
  193. package/src/chain/blocks/verifyPayloadsDataAvailability.ts +38 -0
  194. package/src/chain/blocks/writePayloadEnvelopeInputToDb.ts +1 -1
  195. package/src/chain/chain.ts +25 -62
  196. package/src/chain/emitter.ts +15 -3
  197. package/src/chain/errors/attestationError.ts +6 -1
  198. package/src/chain/errors/executionPayloadBid.ts +6 -0
  199. package/src/chain/errors/executionPayloadEnvelope.ts +6 -0
  200. package/src/chain/forkChoice/index.ts +8 -20
  201. package/src/chain/interface.ts +2 -2
  202. package/src/chain/prepareNextSlot.ts +25 -16
  203. package/src/chain/produceBlock/computeNewStateRoot.ts +6 -43
  204. package/src/chain/produceBlock/produceBlockBody.ts +41 -20
  205. package/src/chain/regen/errors.ts +1 -6
  206. package/src/chain/regen/interface.ts +6 -12
  207. package/src/chain/regen/queued.ts +12 -48
  208. package/src/chain/regen/regen.ts +8 -36
  209. package/src/chain/stateCache/datastore/db.ts +10 -33
  210. package/src/chain/stateCache/datastore/file.ts +5 -6
  211. package/src/chain/stateCache/datastore/types.ts +2 -3
  212. package/src/chain/stateCache/fifoBlockStateCache.ts +1 -10
  213. package/src/chain/stateCache/persistentCheckpointsCache.ts +139 -247
  214. package/src/chain/stateCache/types.ts +8 -14
  215. package/src/chain/validation/aggregateAndProof.ts +13 -0
  216. package/src/chain/validation/attestation.ts +13 -0
  217. package/src/chain/validation/executionPayloadBid.ts +14 -0
  218. package/src/chain/validation/executionPayloadEnvelope.ts +22 -12
  219. package/src/chain/validation/payloadAttestationMessage.ts +5 -3
  220. package/src/db/repositories/executionPayloadEnvelopeArchive.ts +1 -1
  221. package/src/execution/engine/http.ts +21 -14
  222. package/src/execution/engine/interface.ts +1 -0
  223. package/src/execution/engine/mock.ts +8 -1
  224. package/src/execution/engine/types.ts +41 -0
  225. package/src/network/network.ts +1 -1
  226. package/src/network/processor/gossipHandlers.ts +26 -10
  227. package/src/node/nodejs.ts +4 -2
  228. package/src/util/sszBytes.ts +21 -3
@@ -28,9 +28,10 @@ async function persistOrphanedBlock(slot, blockRoot, bytes, opts) {
28
28
  * the next run should not reprocess finalzied block of this run.
29
29
  */
30
30
  export async function archiveBlocks(config, db, forkChoice, lightclientServer, logger, finalizedCheckpoint, currentEpoch, archiveDataEpochs, persistOrphanedBlocks, persistOrphanedBlocksDir) {
31
- // Use fork choice to determine the blocks to archive and delete
32
- // getAllAncestorBlocks response includes the finalized block, so it's also moved to the cold db
33
- const { ancestors: finalizedCanonicalBlocks, nonAncestors: finalizedNonCanonicalBlocks } = forkChoice.getAllAncestorAndNonAncestorBlocks(finalizedCheckpoint.rootHex, finalizedCheckpoint.payloadStatus);
31
+ // Use fork choice to determine the blocks to archive and delete.
32
+ // `ancestors` is the canonical walk back from the finalized root, including the previous finalized
33
+ // block as its last element.
34
+ const { ancestors: finalizedCanonicalBlocks, nonAncestors: finalizedNonCanonicalBlocks } = forkChoice.getAllAncestorAndNonAncestorBlocksDefaultStatus(finalizedCheckpoint.rootHex);
34
35
  // NOTE: The finalized block will be exactly the first block of `epoch` or previous
35
36
  const finalizedPostDeneb = finalizedCheckpoint.epoch >= config.DENEB_FORK_EPOCH;
36
37
  const finalizedPostFulu = finalizedCheckpoint.epoch >= config.FULU_FORK_EPOCH;
@@ -41,24 +42,34 @@ export async function archiveBlocks(config, db, forkChoice, lightclientServer, l
41
42
  }));
42
43
  const logCtx = { currentEpoch, finalizedEpoch: finalizedCheckpoint.epoch, finalizedRoot: finalizedCheckpoint.rootHex };
43
44
  if (finalizedCanonicalBlockRoots.length > 0) {
44
- await migrateBlocksFromHotToColdDb(db, finalizedCanonicalBlockRoots);
45
+ const migratedSlots = await migrateBlocksFromHotToColdDb(db, logger, finalizedCanonicalBlockRoots);
45
46
  logger.verbose("Migrated blocks from hot DB to cold DB", {
46
47
  ...logCtx,
47
48
  fromSlot: finalizedCanonicalBlockRoots[0].slot,
48
49
  toSlot: finalizedCanonicalBlockRoots.at(-1)?.slot,
49
50
  size: finalizedCanonicalBlockRoots.length,
51
+ migratedEntries: migratedSlots.length,
52
+ slotRange: prettyPrintIndices(migratedSlots),
50
53
  });
51
54
  if (finalizedPostDeneb) {
52
- const migratedEntries = await migrateBlobSidecarsFromHotToColdDb(config, db, finalizedCanonicalBlockRoots, currentEpoch);
55
+ const migratedEntries = await migrateBlobSidecarsFromHotToColdDb(config, db, logger, finalizedCanonicalBlockRoots, currentEpoch);
53
56
  logger.verbose("Migrated blobSidecars from hot DB to cold DB", { ...logCtx, migratedEntries });
54
57
  }
55
58
  if (finalizedPostFulu) {
56
- const migratedEntries = await migrateDataColumnSidecarsFromHotToColdDb(config, db, logger, finalizedCanonicalBlockRoots, currentEpoch);
57
- logger.verbose("Migrated dataColumnSidecars from hot DB to cold DB", { ...logCtx, migratedEntries });
59
+ const migratedSlots = await migrateDataColumnSidecarsFromHotToColdDb(config, db, logger, finalizedCanonicalBlocks, currentEpoch);
60
+ logger.verbose("Migrated dataColumnSidecars from hot DB to cold DB", {
61
+ ...logCtx,
62
+ migratedEntries: migratedSlots.length,
63
+ slotRange: prettyPrintIndices(migratedSlots),
64
+ });
58
65
  }
59
66
  if (finalizedPostGloas) {
60
- const migratedEntries = await migrateExecutionPayloadEnvelopesFromHotToColdDb(config, db, logger, finalizedCanonicalBlocks);
61
- logger.verbose("Migrated executionPayloadEnvelopes from hot DB to cold DB", { ...logCtx, migratedEntries });
67
+ const migratedSlots = await migrateExecutionPayloadEnvelopesFromHotToColdDb(config, db, logger, finalizedCanonicalBlocks);
68
+ logger.verbose("Migrated executionPayloadEnvelopes from hot DB to cold DB", {
69
+ ...logCtx,
70
+ migratedEntries: migratedSlots.length,
71
+ slotRange: prettyPrintIndices(migratedSlots),
72
+ });
62
73
  }
63
74
  }
64
75
  // deleteNonCanonicalBlocks
@@ -82,22 +93,25 @@ export async function archiveBlocks(config, db, forkChoice, lightclientServer, l
82
93
  }
83
94
  }));
84
95
  }
85
- await db.block.batchDelete(nonCanonicalBlockRoots);
86
- logger.verbose("Deleted non canonical blocks from hot DB", {
96
+ const nonCanonicalSlots = finalizedNonCanonicalBlocks.map((summary) => summary.slot).sort((a, b) => a - b);
97
+ const nonCanonicalLogCtx = {
87
98
  ...logCtx,
88
- slots: finalizedNonCanonicalBlocks.map((summary) => summary.slot).join(","),
89
- });
99
+ count: nonCanonicalBlockRoots.length,
100
+ slotRange: prettyPrintIndices(nonCanonicalSlots),
101
+ };
102
+ await db.block.batchDelete(nonCanonicalBlockRoots);
103
+ logger.verbose("Deleted non canonical blocks from hot DB", nonCanonicalLogCtx);
90
104
  if (finalizedPostDeneb) {
91
105
  await db.blobSidecars.batchDelete(nonCanonicalBlockRoots);
92
- logger.verbose("Deleted non canonical blobSidecars from hot DB", logCtx);
106
+ logger.verbose("Deleted non canonical blobSidecars from hot DB", nonCanonicalLogCtx);
93
107
  }
94
108
  if (finalizedPostFulu) {
95
109
  await db.dataColumnSidecar.deleteMany(nonCanonicalBlockRoots);
96
- logger.verbose("Deleted non canonical dataColumnSidecars from hot DB", logCtx);
110
+ logger.verbose("Deleted non canonical dataColumnSidecars from hot DB", nonCanonicalLogCtx);
97
111
  }
98
112
  if (finalizedPostGloas) {
99
113
  await db.executionPayloadEnvelope.batchDelete(nonCanonicalBlockRoots);
100
- logger.verbose("Deleted non canonical executionPayloadEnvelopes from hot DB", logCtx);
114
+ logger.verbose("Deleted non canonical executionPayloadEnvelopes from hot DB", nonCanonicalLogCtx);
101
115
  }
102
116
  }
103
117
  // Delete expired blobs
@@ -170,22 +184,25 @@ export async function archiveBlocks(config, db, forkChoice, lightclientServer, l
170
184
  totalArchived: finalizedCanonicalBlocks.length,
171
185
  });
172
186
  }
173
- async function migrateBlocksFromHotToColdDb(db, blocks) {
174
- // Start from `i=0`: 1st block in iterateAncestorBlocks() is the finalized block itself
175
- // we move it to blockArchive but forkchoice still have it to check next onBlock calls
176
- // the next iterateAncestorBlocks call does not return this block
187
+ async function migrateBlocksFromHotToColdDb(db, logger, blocks) {
188
+ // The input includes the previous finalized block as the last ancestor; its SignedBeaconBlock
189
+ // was archived on a previous run and is no longer in hot db. `getBinary` returning null for any
190
+ // block in the batch is therefore treated as "already migrated, skip" rather than an error.
191
+ const migratedSlots = [];
177
192
  for (let i = 0; i < blocks.length; i += BLOCK_BATCH_SIZE) {
178
193
  const toIdx = Math.min(i + BLOCK_BATCH_SIZE, blocks.length);
179
194
  const canonicalBlocks = blocks.slice(i, toIdx);
180
- // processCanonicalBlocks
181
195
  if (canonicalBlocks.length === 0)
182
- return;
196
+ break;
183
197
  // load Buffer instead of SignedBeaconBlock to improve performance
184
- const canonicalBlockEntries = await Promise.all(canonicalBlocks.map(async (block) => {
185
- // Here we assume the blocks are already in the hot db
198
+ const canonicalBlockEntries = (await Promise.all(canonicalBlocks.map(async (block) => {
186
199
  const blockBuffer = await db.block.getBinary(block.root);
187
200
  if (!blockBuffer) {
188
- throw Error(`Block not found for slot ${block.slot} root ${toRootHex(block.root)}`);
201
+ logger.debug("Block in forkchoice but missing in hot db, could be already archived", {
202
+ slot: block.slot,
203
+ root: toRootHex(block.root),
204
+ });
205
+ return null;
189
206
  }
190
207
  return {
191
208
  key: block.slot,
@@ -195,19 +212,24 @@ async function migrateBlocksFromHotToColdDb(db, blocks) {
195
212
  // TODO: Benchmark if faster to slice Buffer or fromHex()
196
213
  parentRoot: getParentRootFromSignedBlock(blockBuffer),
197
214
  };
198
- }));
199
- // put to blockArchive db and delete block db
215
+ }))).filter((entry) => entry !== null);
216
+ if (canonicalBlockEntries.length === 0)
217
+ continue;
200
218
  await Promise.all([
201
219
  db.blockArchive.batchPutBinary(canonicalBlockEntries),
202
- db.block.batchDelete(canonicalBlocks.map((block) => block.root)),
220
+ db.block.batchDelete(canonicalBlockEntries.map((entry) => entry.blockRoot)),
203
221
  ]);
222
+ for (const entry of canonicalBlockEntries)
223
+ migratedSlots.push(entry.slot);
204
224
  }
225
+ // Ancestor walk is newest → oldest; sort ascending so `prettyPrintIndices` renders cleanly.
226
+ return migratedSlots.sort((a, b) => a - b);
205
227
  }
206
228
  /**
207
229
  * Migrate blobSidecars from hot db to cold db.
208
230
  * @returns true if we do that, false if block is out of range data.
209
231
  */
210
- async function migrateBlobSidecarsFromHotToColdDb(config, db, blocks, currentEpoch) {
232
+ async function migrateBlobSidecarsFromHotToColdDb(config, db, logger, blocks, currentEpoch) {
211
233
  let migratedWrappedBlobSidecars = 0;
212
234
  for (let i = 0; i < blocks.length; i += BLOB_SIDECAR_BATCH_SIZE) {
213
235
  const toIdx = Math.min(i + BLOB_SIDECAR_BATCH_SIZE, blocks.length);
@@ -216,7 +238,7 @@ async function migrateBlobSidecarsFromHotToColdDb(config, db, blocks, currentEpo
216
238
  if (canonicalBlocks.length === 0)
217
239
  break;
218
240
  // load Buffer instead of ssz deserialized to improve performance
219
- const canonicalBlobSidecarsEntries = await Promise.all(canonicalBlocks
241
+ const canonicalBlobSidecarsEntries = (await Promise.all(canonicalBlocks
220
242
  .filter((block) => {
221
243
  const blockSlot = block.slot;
222
244
  const blockEpoch = computeEpochAtSlot(blockSlot);
@@ -227,14 +249,19 @@ async function migrateBlobSidecarsFromHotToColdDb(config, db, blocks, currentEpo
227
249
  blockEpoch >= currentEpoch - config.MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS);
228
250
  })
229
251
  .map(async (block) => {
230
- // Here we assume the blob sidecars are already in the hot db
231
- // instead of checking first the block input cache
252
+ // The ancestor walk includes the boundary (previous finalized) block; on first
253
+ // finalization that boundary is the anchor which has no blob sidecars in hot db.
254
+ // Treat a null hot-db entry as "nothing to migrate" rather than an error.
232
255
  const bytes = await db.blobSidecars.getBinary(block.root);
233
256
  if (!bytes) {
234
- throw Error(`No blobSidecars found for slot ${block.slot} root ${toRootHex(block.root)}`);
257
+ logger.debug("BlobSidecars in forkchoice but missing in hot db, could be already archived", {
258
+ slot: block.slot,
259
+ root: toRootHex(block.root),
260
+ });
261
+ return null;
235
262
  }
236
263
  return { key: block.slot, value: bytes };
237
- }));
264
+ }))).filter((e) => e !== null);
238
265
  // put to blockArchive db and delete block db
239
266
  await Promise.all([
240
267
  db.blobSidecarsArchive.batchPutBinary(canonicalBlobSidecarsEntries),
@@ -245,17 +272,27 @@ async function migrateBlobSidecarsFromHotToColdDb(config, db, blocks, currentEpo
245
272
  return migratedWrappedBlobSidecars;
246
273
  }
247
274
  // TODO: This function can be simplified further by reducing layers of promises in a loop
248
- async function migrateDataColumnSidecarsFromHotToColdDb(config, db, logger, blocks, currentEpoch) {
249
- let migratedWrappedDataColumns = 0;
275
+ /**
276
+ * Post-gloas the data columns of a Gloas block are tied to its execution payload envelope —
277
+ * columns only exist once the FULL variant of the block is in the proto-array. Pre-Gloas (Fulu)
278
+ * blocks only have a FULL variant, so the `payloadStatus === FULL` filter passes them all.
279
+ * Blocks whose canonical variant is PENDING/EMPTY are skipped here — their columns will be picked
280
+ * up on a later run once the FULL variant appears in the ancestor walk.
281
+ */
282
+ async function migrateDataColumnSidecarsFromHotToColdDb(config, db, logger, canonicalBlocks, currentEpoch) {
283
+ const columnBlocks = canonicalBlocks.filter((block) => config.getForkSeq(block.slot) < ForkSeq.gloas || block.payloadStatus === PayloadStatus.FULL);
284
+ if (columnBlocks.length === 0)
285
+ return [];
286
+ const blocks = columnBlocks.map((block) => ({ slot: block.slot, root: fromHex(block.blockRoot) }));
287
+ const migratedSlots = [];
250
288
  for (let i = 0; i < blocks.length; i += BLOB_SIDECAR_BATCH_SIZE) {
251
289
  const toIdx = Math.min(i + BLOB_SIDECAR_BATCH_SIZE, blocks.length);
252
- const canonicalBlocks = blocks.slice(i, toIdx);
253
- // processCanonicalBlocks
254
- if (canonicalBlocks.length === 0)
290
+ const batch = blocks.slice(i, toIdx);
291
+ if (batch.length === 0)
255
292
  break;
256
293
  const promises = [];
257
294
  // load Buffer instead of ssz deserialized to improve performance
258
- for (const block of canonicalBlocks) {
295
+ for (const block of batch) {
259
296
  const blockSlot = block.slot;
260
297
  const blockEpoch = computeEpochAtSlot(blockSlot);
261
298
  if (config.getForkSeq(blockSlot) < ForkSeq.fulu ||
@@ -265,27 +302,38 @@ async function migrateDataColumnSidecarsFromHotToColdDb(config, db, logger, bloc
265
302
  }
266
303
  // Here we assume the data column sidecars are already in the hot db
267
304
  const dataColumnSidecarBytes = await fromAsync(db.dataColumnSidecar.valuesStreamBinary(block.root));
268
- // there could be 0 dataColumnSidecarBytes if block has no blob
269
- logger.verbose("migrateDataColumnSidecarsFromHotToColdDb", {
305
+ if (dataColumnSidecarBytes.length === 0) {
306
+ // Empty stream: either the block has no blobs, or columns were already archived on a
307
+ // previous run (boundary block). Nothing to migrate.
308
+ logger.debug("DataColumnSidecars in forkchoice but missing in hot db, could be already archived", {
309
+ slot: block.slot,
310
+ root: toRootHex(block.root),
311
+ });
312
+ continue;
313
+ }
314
+ logger.verbose("Migrated dataColumnSidecars for block", {
270
315
  currentEpoch,
271
316
  slot: block.slot,
272
317
  root: toRootHex(block.root),
273
318
  numSidecars: dataColumnSidecarBytes.length,
274
319
  });
275
320
  promises.push(db.dataColumnSidecarArchive.putManyBinary(block.slot, dataColumnSidecarBytes.map((p) => ({ key: p.id, value: p.value }))));
276
- migratedWrappedDataColumns += dataColumnSidecarBytes.length;
321
+ migratedSlots.push(block.slot);
277
322
  }
278
- promises.push(db.dataColumnSidecar.deleteMany(canonicalBlocks.map((block) => block.root)));
279
- // put to blockArchive db and delete block db
323
+ promises.push(db.dataColumnSidecar.deleteMany(batch.map((block) => block.root)));
280
324
  await Promise.all(promises);
281
325
  }
282
- return migratedWrappedDataColumns;
326
+ // Ancestor walk is newest → oldest; sort ascending so `prettyPrintIndices` renders cleanly.
327
+ return migratedSlots.sort((a, b) => a - b);
283
328
  }
329
+ /**
330
+ * Post-gloas given a finalized checkpoint at a block root, payload of that block root
331
+ * is not considered finalized, hence they are archived in the next run.
332
+ */
284
333
  async function migrateExecutionPayloadEnvelopesFromHotToColdDb(config, db, logger, canonicalBlocks) {
285
- let migratedEnvelopes = 0;
286
- const payloadBlocks = canonicalBlocks.filter((block) => config.getForkSeq(block.slot) >= ForkSeq.gloas && block.payloadStatus === PayloadStatus.FULL);
334
+ const payloadBlocks = canonicalBlocks.filter((block) => config.getForkSeq(block.slot) < ForkSeq.gloas || block.payloadStatus === PayloadStatus.FULL);
287
335
  if (payloadBlocks.length === 0)
288
- return 0;
336
+ return [];
289
337
  const blocks = payloadBlocks.map((block) => ({ slot: block.slot, root: fromHex(block.blockRoot) }));
290
338
  const envelopeEntries = [];
291
339
  const migratedRoots = [];
@@ -297,17 +345,21 @@ async function migrateExecutionPayloadEnvelopesFromHotToColdDb(config, db, logge
297
345
  migratedRoots.push(blocks[i].root);
298
346
  }
299
347
  else {
300
- logger.debug("Payload in forkchoice but missing in db", { slot: blocks[i].slot, root: toRootHex(blocks[i].root) });
348
+ logger.debug("ExecutionPayloadEnvelope in forkchoice but missing in hot db, could be already archived", {
349
+ slot: blocks[i].slot,
350
+ root: toRootHex(blocks[i].root),
351
+ });
301
352
  }
302
353
  }
303
- if (envelopeEntries.length > 0) {
304
- await Promise.all([
305
- db.executionPayloadEnvelopeArchive.batchPutBinary(envelopeEntries),
306
- db.executionPayloadEnvelope.batchDelete(migratedRoots),
307
- ]);
308
- migratedEnvelopes = envelopeEntries.length;
309
- }
310
- return migratedEnvelopes;
354
+ if (envelopeEntries.length === 0)
355
+ return [];
356
+ await Promise.all([
357
+ db.executionPayloadEnvelopeArchive.batchPutBinary(envelopeEntries),
358
+ db.executionPayloadEnvelope.batchDelete(migratedRoots),
359
+ ]);
360
+ // Slots are ascending in hot-db key order — sort to guarantee `prettyPrintIndices` output is clean
361
+ // regardless of ancestor-walk order (newest → oldest).
362
+ return envelopeEntries.map((entry) => entry.key).sort((a, b) => a - b);
311
363
  }
312
364
  /**
313
365
  * ```
@@ -1 +1 @@
1
- {"version":3,"file":"archiveBlocks.js","sourceRoot":"","sources":["../../../../src/chain/archiveStore/utils/archiveBlocks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"archiveBlocks.js","sourceRoot":"","sources":["../../../../src/chain/archiveStore/utils/archiveBlocks.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"importBlock.d.ts","sourceRoot":"","sources":["../../../src/chain/blocks/importBlock.ts"],"names":[],"mappings":"AAYA,OAAO,EAEL,eAAe,EAKhB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,gBAAgB,EAQjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,WAAW,EAKX,OAAO,EAEP,MAAM,EAEP,MAAM,iBAAiB,CAAC;AAMzB,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AAM7C,OAAO,EAAuB,kBAAkB,EAAE,eAAe,EAAC,MAAM,YAAY,CAAC;AAYrF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,WAAW,EACjB,kBAAkB,EAAE,kBAAkB,EACtC,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,IAAI,CAAC,CA6iBf;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,WAAW,EAEjB,CAAC,EAAE,gBAAgB,EACnB,MAAM,EAAE,MAAM,CAAC,UAAU,EACzB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,WAAW,EACxB,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,GAC5C,IAAI,CAQN;AAED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,gBAAgB,EACvB,MAAM,EAAE,MAAM,CAAC,UAAU,EACzB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,WAAW,CAAC,eAAe,CAAC,EACzC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,GAC7C,IAAI,CA+BN"}
1
+ {"version":3,"file":"importBlock.d.ts","sourceRoot":"","sources":["../../../src/chain/blocks/importBlock.ts"],"names":[],"mappings":"AAWA,OAAO,EAEL,eAAe,EAKhB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,gBAAgB,EAQjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,WAAW,EAKX,OAAO,EAEP,MAAM,EAEP,MAAM,iBAAiB,CAAC;AAMzB,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AAM7C,OAAO,EAAuB,kBAAkB,EAAE,eAAe,EAAC,MAAM,YAAY,CAAC;AAYrF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,WAAW,EACjB,kBAAkB,EAAE,kBAAkB,EACtC,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,IAAI,CAAC,CAiiBf;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,WAAW,EAEjB,CAAC,EAAE,gBAAgB,EACnB,MAAM,EAAE,MAAM,CAAC,UAAU,EACzB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,WAAW,EACxB,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,GAC5C,IAAI,CAQN;AAED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,gBAAgB,EACvB,MAAM,EAAE,MAAM,CAAC,UAAU,EACzB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,WAAW,CAAC,eAAe,CAAC,EACzC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,GAC7C,IAAI,CA+BN"}
@@ -1,6 +1,6 @@
1
1
  import { BitArray } from "@chainsafe/ssz";
2
2
  import { routes } from "@lodestar/api";
3
- import { AncestorStatus, EpochDifference, ExecutionStatus, ForkChoiceError, ForkChoiceErrorCode, NotReorgedReason, getSafeExecutionBlockHash, isGloasBlock, } from "@lodestar/fork-choice";
3
+ import { AncestorStatus, EpochDifference, ExecutionStatus, ForkChoiceError, ForkChoiceErrorCode, NotReorgedReason, getSafeExecutionBlockHash, } from "@lodestar/fork-choice";
4
4
  import { ForkSeq, MAX_SEED_LOOKAHEAD, SLOTS_PER_EPOCH, } from "@lodestar/params";
5
5
  import { RootCache, computeEpochAtSlot, computeStartSlotAtEpoch, computeTimeAtSlot, isStartSlotOfEpoch, isStatePostAltair, isStatePostBellatrix, } from "@lodestar/state-transition";
6
6
  import { isGloasBeaconBlock, ssz, } from "@lodestar/types";
@@ -12,7 +12,7 @@ import { isQueueErrorAborted } from "../../util/queue/index.js";
12
12
  import { ChainEvent } from "../emitter.js";
13
13
  import { ForkchoiceCaller } from "../forkChoice/index.js";
14
14
  import { REPROCESS_MIN_TIME_TO_NEXT_SLOT_SEC } from "../reprocess.js";
15
- import { toCheckpointHexPayload } from "../stateCache/persistentCheckpointsCache.js";
15
+ import { toCheckpointHex } from "../stateCache/persistentCheckpointsCache.js";
16
16
  import { isBlockInputBlobs, isBlockInputColumns } from "./blockInput/blockInput.js";
17
17
  import { AttestationImportOpt } from "./types.js";
18
18
  import { getCheckpointFromState } from "./utils/checkpoint.js";
@@ -45,7 +45,7 @@ const EVENTSTREAM_EMIT_RECENT_BLOCK_SLOTS = 64;
45
45
  * 7. Add post state to stateCache
46
46
  */
47
47
  export async function importBlock(fullyVerifiedBlock, opts) {
48
- const { blockInput, postBlockState, parentBlockSlot, executionStatus, dataAvailabilityStatus, indexedAttestations } = fullyVerifiedBlock;
48
+ const { blockInput, postState, parentBlockSlot, executionStatus, dataAvailabilityStatus, indexedAttestations } = fullyVerifiedBlock;
49
49
  const block = blockInput.getBlock();
50
50
  const source = blockInput.getBlockSource();
51
51
  const { slot: blockSlot } = block.message;
@@ -55,7 +55,7 @@ export async function importBlock(fullyVerifiedBlock, opts) {
55
55
  const currentEpoch = computeEpochAtSlot(currentSlot);
56
56
  const blockEpoch = computeEpochAtSlot(blockSlot);
57
57
  const prevFinalizedEpoch = this.forkChoice.getFinalizedCheckpoint().epoch;
58
- const blockDelaySec = fullyVerifiedBlock.seenTimestampSec - computeTimeAtSlot(this.config, blockSlot, postBlockState.genesisTime);
58
+ const blockDelaySec = fullyVerifiedBlock.seenTimestampSec - computeTimeAtSlot(this.config, blockSlot, postState.genesisTime);
59
59
  const recvToValLatency = Date.now() / 1000 - (opts.seenTimestampSec ?? Date.now() / 1000);
60
60
  const fork = this.config.getForkSeq(blockSlot);
61
61
  // this is just a type assertion since blockinput with dataPromise type will not end up here
@@ -74,15 +74,11 @@ export async function importBlock(fullyVerifiedBlock, opts) {
74
74
  });
75
75
  // 2. Import block to fork choice
76
76
  // Should compute checkpoint balances before forkchoice.onBlock
77
- this.checkpointBalancesCache.processState(blockRootHex, postBlockState);
78
- const blockSummary = this.forkChoice.onBlock(block.message, postBlockState, blockDelaySec, currentSlot, fork >= ForkSeq.gloas ? ExecutionStatus.PayloadSeparated : executionStatus, dataAvailabilityStatus);
77
+ this.checkpointBalancesCache.processState(blockRootHex, postState);
78
+ const blockSummary = this.forkChoice.onBlock(block.message, postState, blockDelaySec, currentSlot, fork >= ForkSeq.gloas ? ExecutionStatus.PayloadSeparated : executionStatus, dataAvailabilityStatus);
79
79
  // This adds the state necessary to process the next block
80
80
  // Some block event handlers require state being in state cache so need to do this before emitting EventType.block
81
- // Pre-Gloas: blockSummary.payloadStatus is always FULL, payloadPresent = true
82
- // Post-Gloas: blockSummary.payloadStatus is always PENDING, so payloadPresent = false (block state only, no payload processing yet)
83
- const payloadPresent = !isGloasBlock(blockSummary);
84
- // processState manages both block state and payload state variants together for memory/disk management
85
- this.regen.processBlockState(blockRootHex, postBlockState);
81
+ this.regen.processState(blockRootHex, postState);
86
82
  // For Gloas blocks, create PayloadEnvelopeInput so it's available for later payload import
87
83
  if (fork >= ForkSeq.gloas) {
88
84
  const payloadInput = this.seenPayloadEnvelopeInputCache.add({
@@ -103,13 +99,9 @@ export async function importBlock(fullyVerifiedBlock, opts) {
103
99
  // which is all the information we need so there is no reason to delay until execution payload arrives
104
100
  // TODO GLOAS: If we want EL retries after this initial attempt, add an explicit retry policy here
105
101
  // (for example later in the slot). Do not couple retries to incoming gossip columns.
106
- this.getBlobsTracker.triggerGetBlobs(payloadInput, () => {
107
- // TODO GLOAS: come up with a better mechanism to trigger processExecutionPayload after data becomes available,
108
- // similar to how pre-gloas uses waitForBlockAndAllData with a cutoff timeout and incompleteBlockInput event
109
- this.processExecutionPayload(payloadInput, { validSignature: true }).catch((e) => {
110
- this.logger.debug("Error processing execution payload after getBlobs", { slot: blockSlot, root: blockRootHex }, e);
111
- });
112
- });
102
+ // Columns fetched here feed payloadInput.addColumn, which resolves waitForAllData for any
103
+ // in-flight importExecutionPayload. No processExecutionPayload trigger needed from this path.
104
+ this.getBlobsTracker.triggerGetBlobs(payloadInput);
113
105
  }
114
106
  this.metrics?.importBlock.bySource.inc({ source: source.source });
115
107
  this.logger.verbose("Added block to forkchoice and state cache", { slot: blockSlot, root: blockRootHex });
@@ -125,7 +117,7 @@ export async function importBlock(fullyVerifiedBlock, opts) {
125
117
  if (opts.importAttestations === AttestationImportOpt.Force ||
126
118
  (opts.importAttestations !== AttestationImportOpt.Skip && blockEpoch >= currentEpoch - FORK_CHOICE_ATT_EPOCH_LIMIT)) {
127
119
  const attestations = block.message.body.attestations;
128
- const rootCache = new RootCache(postBlockState);
120
+ const rootCache = new RootCache(postState);
129
121
  const invalidAttestationErrorsByCode = new Map();
130
122
  const addAttestation = fork >= ForkSeq.electra ? addAttestationPostElectra : addAttestationPreElectra;
131
123
  for (let i = 0; i < attestations.length; i++) {
@@ -134,7 +126,7 @@ export async function importBlock(fullyVerifiedBlock, opts) {
134
126
  const indexedAttestation = indexedAttestations[i];
135
127
  const { target, beaconBlockRoot } = attestation.data;
136
128
  const attDataRoot = toRootHex(ssz.phase0.AttestationData.hashTreeRoot(indexedAttestation.data));
137
- addAttestation.call(this, postBlockState, target, attDataRoot, attestation, indexedAttestation);
129
+ addAttestation.call(this, postState, target, attDataRoot, attestation, indexedAttestation);
138
130
  // Duplicated logic from fork-choice onAttestation validation logic.
139
131
  // Attestations outside of this range will be dropped as Errors, so no need to import
140
132
  if (opts.importAttestations === AttestationImportOpt.Force ||
@@ -214,7 +206,7 @@ export async function importBlock(fullyVerifiedBlock, opts) {
214
206
  const currFinalizedEpoch = this.forkChoice.getFinalizedCheckpoint().epoch;
215
207
  if (newHead.blockRoot !== oldHead.blockRoot) {
216
208
  // Set head state as strong reference
217
- this.regen.updateHeadState(newHead, postBlockState);
209
+ this.regen.updateHeadState(newHead, postState);
218
210
  try {
219
211
  this.emitter.emit(routes.events.EventType.head, {
220
212
  block: newHead.blockRoot,
@@ -275,8 +267,8 @@ export async function importBlock(fullyVerifiedBlock, opts) {
275
267
  // we want to import block asap so do this in the next event loop
276
268
  callInNextEventLoop(() => {
277
269
  try {
278
- if (isStatePostAltair(postBlockState)) {
279
- this.lightClientServer?.onImportBlockHead(block.message, postBlockState, parentBlockSlot);
270
+ if (isStatePostAltair(postState)) {
271
+ this.lightClientServer?.onImportBlockHead(block.message, postState, parentBlockSlot);
280
272
  }
281
273
  }
282
274
  catch (e) {
@@ -294,11 +286,11 @@ export async function importBlock(fullyVerifiedBlock, opts) {
294
286
  // Suppress fcu call if shouldOverrideFcu is true. This only happens if we have proposer boost reorg enabled
295
287
  // and the block is weak and can potentially be reorged out.
296
288
  let shouldOverrideFcu = false;
297
- if (blockSlot >= currentSlot && isStatePostBellatrix(postBlockState) && postBlockState.isExecutionStateType) {
289
+ if (blockSlot >= currentSlot && isStatePostBellatrix(postState) && postState.isExecutionStateType) {
298
290
  let notOverrideFcuReason = NotReorgedReason.Unknown;
299
291
  const proposalSlot = blockSlot + 1;
300
292
  try {
301
- const proposerIndex = postBlockState.getBeaconProposer(proposalSlot);
293
+ const proposerIndex = postState.getBeaconProposer(proposalSlot);
302
294
  const feeRecipient = this.beaconProposerCache.get(proposerIndex);
303
295
  if (feeRecipient) {
304
296
  // We would set this to true if
@@ -367,24 +359,24 @@ export async function importBlock(fullyVerifiedBlock, opts) {
367
359
  });
368
360
  }
369
361
  }
370
- if (!postBlockState.isStateValidatorsNodesPopulated()) {
371
- this.logger.verbose("After importBlock caching postState without SSZ cache", { slot: postBlockState.slot });
362
+ if (!postState.isStateValidatorsNodesPopulated()) {
363
+ this.logger.verbose("After importBlock caching postState without SSZ cache", { slot: postState.slot });
372
364
  }
373
365
  // Cache shufflings when crossing an epoch boundary
374
366
  const parentEpoch = computeEpochAtSlot(parentBlockSlot);
375
367
  if (parentEpoch < blockEpoch) {
376
- this.shufflingCache.processState(postBlockState);
368
+ this.shufflingCache.processState(postState);
377
369
  this.logger.verbose("Processed shuffling for next epoch", { parentEpoch, blockEpoch, slot: blockSlot });
378
370
  }
379
371
  if (blockSlot % SLOTS_PER_EPOCH === 0) {
380
372
  // Cache state to preserve epoch transition work
381
- const checkpointState = postBlockState;
373
+ const checkpointState = postState;
382
374
  const cp = getCheckpointFromState(checkpointState);
383
- this.regen.addCheckpointState(cp, checkpointState, payloadPresent);
375
+ this.regen.addCheckpointState(cp, checkpointState);
384
376
  // consumers should not mutate state ever
385
377
  this.emitter.emit(ChainEvent.checkpoint, cp, checkpointState);
386
378
  // Note: in-lined code from previos handler of ChainEvent.checkpoint
387
- this.logger.verbose("Checkpoint processed", toCheckpointHexPayload(cp, payloadPresent));
379
+ this.logger.verbose("Checkpoint processed", toCheckpointHex(cp));
388
380
  const activeValidatorsCount = checkpointState.activeValidatorCount;
389
381
  this.metrics?.currentActiveValidators.set(activeValidatorsCount);
390
382
  this.metrics?.currentValidators.set({ status: "active" }, activeValidatorsCount);
@@ -396,7 +388,7 @@ export async function importBlock(fullyVerifiedBlock, opts) {
396
388
  const justifiedEpoch = justifiedCheckpoint.epoch;
397
389
  const preJustifiedEpoch = parentBlockSummary.justifiedEpoch;
398
390
  if (justifiedEpoch > preJustifiedEpoch) {
399
- this.logger.verbose("Checkpoint justified", toCheckpointHexPayload(justifiedCheckpoint, payloadPresent));
391
+ this.logger.verbose("Checkpoint justified", toCheckpointHex(justifiedCheckpoint));
400
392
  this.metrics?.previousJustifiedEpoch.set(checkpointState.previousJustifiedCheckpoint.epoch);
401
393
  this.metrics?.currentJustifiedEpoch.set(justifiedCheckpoint.epoch);
402
394
  }
@@ -410,7 +402,7 @@ export async function importBlock(fullyVerifiedBlock, opts) {
410
402
  state: toRootHex(checkpointState.hashTreeRoot()),
411
403
  executionOptimistic: false,
412
404
  });
413
- this.logger.verbose("Checkpoint finalized", toCheckpointHexPayload(finalizedCheckpoint, payloadPresent));
405
+ this.logger.verbose("Checkpoint finalized", toCheckpointHex(finalizedCheckpoint));
414
406
  this.metrics?.finalizedEpoch.set(finalizedCheckpoint.epoch);
415
407
  }
416
408
  }
@@ -458,8 +450,8 @@ export async function importBlock(fullyVerifiedBlock, opts) {
458
450
  this.metrics?.parentBlockDistance.observe(blockSlot - parentBlockSlot);
459
451
  this.metrics?.proposerBalanceDeltaAny.observe(fullyVerifiedBlock.proposerBalanceDelta);
460
452
  this.validatorMonitor?.registerImportedBlock(block.message, fullyVerifiedBlock);
461
- if (isStatePostAltair(fullyVerifiedBlock.postBlockState)) {
462
- this.validatorMonitor?.registerSyncAggregateInBlock(blockEpoch, block.message.body.syncAggregate, fullyVerifiedBlock.postBlockState.currentSyncCommitteeIndexed.validatorIndices);
453
+ if (isStatePostAltair(fullyVerifiedBlock.postState)) {
454
+ this.validatorMonitor?.registerSyncAggregateInBlock(blockEpoch, block.message.body.syncAggregate, fullyVerifiedBlock.postState.currentSyncCommitteeIndexed.validatorIndices);
463
455
  }
464
456
  if (isBlockInputColumns(blockInput)) {
465
457
  for (const { source } of blockInput.getSampledColumnsWithSource()) {