@lodestar/beacon-node 1.41.0 → 1.42.0-dev.4118b5b440

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 (252) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +35 -16
  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/validator/index.d.ts.map +1 -1
  8. package/lib/api/impl/validator/index.js +6 -2
  9. package/lib/api/impl/validator/index.js.map +1 -1
  10. package/lib/chain/archiveStore/archiveStore.d.ts +0 -1
  11. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  12. package/lib/chain/archiveStore/archiveStore.js +0 -9
  13. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  14. package/lib/chain/archiveStore/interface.d.ts +4 -4
  15. package/lib/chain/archiveStore/interface.d.ts.map +1 -1
  16. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts +4 -4
  17. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts.map +1 -1
  18. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js +4 -1
  19. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js.map +1 -1
  20. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -1
  21. package/lib/chain/archiveStore/utils/archiveBlocks.js +38 -0
  22. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  23. package/lib/chain/blocks/blockInput/types.d.ts +4 -3
  24. package/lib/chain/blocks/blockInput/types.d.ts.map +1 -1
  25. package/lib/chain/blocks/blockInput/types.js +1 -0
  26. package/lib/chain/blocks/blockInput/types.js.map +1 -1
  27. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  28. package/lib/chain/blocks/importBlock.js +29 -9
  29. package/lib/chain/blocks/importBlock.js.map +1 -1
  30. package/lib/chain/blocks/importExecutionPayload.d.ts +48 -0
  31. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -0
  32. package/lib/chain/blocks/importExecutionPayload.js +159 -0
  33. package/lib/chain/blocks/importExecutionPayload.js.map +1 -0
  34. package/lib/chain/blocks/payloadEnvelopeInput/index.d.ts +3 -0
  35. package/lib/chain/blocks/payloadEnvelopeInput/index.d.ts.map +1 -0
  36. package/lib/chain/blocks/payloadEnvelopeInput/index.js +3 -0
  37. package/lib/chain/blocks/payloadEnvelopeInput/index.js.map +1 -0
  38. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +80 -0
  39. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -0
  40. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +248 -0
  41. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -0
  42. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +29 -0
  43. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts.map +1 -0
  44. package/lib/chain/blocks/payloadEnvelopeInput/types.js +11 -0
  45. package/lib/chain/blocks/payloadEnvelopeInput/types.js.map +1 -0
  46. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts +15 -0
  47. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts.map +1 -0
  48. package/lib/chain/blocks/payloadEnvelopeProcessor.js +46 -0
  49. package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -0
  50. package/lib/chain/blocks/types.d.ts +7 -0
  51. package/lib/chain/blocks/types.d.ts.map +1 -1
  52. package/lib/chain/blocks/verifyBlocksSignatures.js +1 -1
  53. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  54. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts +12 -0
  55. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts.map +1 -0
  56. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js +40 -0
  57. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js.map +1 -0
  58. package/lib/chain/chain.d.ts +10 -5
  59. package/lib/chain/chain.d.ts.map +1 -1
  60. package/lib/chain/chain.js +44 -10
  61. package/lib/chain/chain.js.map +1 -1
  62. package/lib/chain/errors/executionPayloadEnvelope.d.ts +12 -2
  63. package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
  64. package/lib/chain/errors/executionPayloadEnvelope.js +3 -1
  65. package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
  66. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  67. package/lib/chain/forkChoice/index.js +0 -10
  68. package/lib/chain/forkChoice/index.js.map +1 -1
  69. package/lib/chain/interface.d.ts +8 -5
  70. package/lib/chain/interface.d.ts.map +1 -1
  71. package/lib/chain/opPools/utils.js +1 -1
  72. package/lib/chain/opPools/utils.js.map +1 -1
  73. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  74. package/lib/chain/prepareNextSlot.js +6 -2
  75. package/lib/chain/prepareNextSlot.js.map +1 -1
  76. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
  77. package/lib/chain/produceBlock/computeNewStateRoot.js +6 -1
  78. package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
  79. package/lib/chain/produceBlock/produceBlockBody.js +1 -1
  80. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  81. package/lib/chain/regen/errors.d.ts +11 -1
  82. package/lib/chain/regen/errors.d.ts.map +1 -1
  83. package/lib/chain/regen/errors.js +2 -0
  84. package/lib/chain/regen/errors.js.map +1 -1
  85. package/lib/chain/regen/interface.d.ts +14 -6
  86. package/lib/chain/regen/interface.d.ts.map +1 -1
  87. package/lib/chain/regen/interface.js +2 -0
  88. package/lib/chain/regen/interface.js.map +1 -1
  89. package/lib/chain/regen/queued.d.ts +11 -6
  90. package/lib/chain/regen/queued.d.ts.map +1 -1
  91. package/lib/chain/regen/queued.js +40 -8
  92. package/lib/chain/regen/queued.js.map +1 -1
  93. package/lib/chain/regen/regen.d.ts +5 -0
  94. package/lib/chain/regen/regen.d.ts.map +1 -1
  95. package/lib/chain/regen/regen.js +33 -6
  96. package/lib/chain/regen/regen.js.map +1 -1
  97. package/lib/chain/seenCache/index.d.ts +1 -1
  98. package/lib/chain/seenCache/index.d.ts.map +1 -1
  99. package/lib/chain/seenCache/index.js +1 -1
  100. package/lib/chain/seenCache/index.js.map +1 -1
  101. package/lib/chain/seenCache/seenGossipBlockInput.js +2 -2
  102. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  103. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +38 -0
  104. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -0
  105. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +76 -0
  106. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -0
  107. package/lib/chain/stateCache/datastore/db.d.ts +4 -5
  108. package/lib/chain/stateCache/datastore/db.d.ts.map +1 -1
  109. package/lib/chain/stateCache/datastore/db.js +32 -10
  110. package/lib/chain/stateCache/datastore/db.js.map +1 -1
  111. package/lib/chain/stateCache/datastore/file.d.ts +1 -1
  112. package/lib/chain/stateCache/datastore/file.d.ts.map +1 -1
  113. package/lib/chain/stateCache/datastore/file.js +5 -5
  114. package/lib/chain/stateCache/datastore/file.js.map +1 -1
  115. package/lib/chain/stateCache/datastore/types.d.ts +1 -1
  116. package/lib/chain/stateCache/datastore/types.d.ts.map +1 -1
  117. package/lib/chain/stateCache/fifoBlockStateCache.d.ts +7 -4
  118. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -1
  119. package/lib/chain/stateCache/fifoBlockStateCache.js +8 -3
  120. package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
  121. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +33 -14
  122. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  123. package/lib/chain/stateCache/persistentCheckpointsCache.js +217 -119
  124. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  125. package/lib/chain/stateCache/types.d.ts +15 -8
  126. package/lib/chain/stateCache/types.d.ts.map +1 -1
  127. package/lib/chain/stateCache/types.js.map +1 -1
  128. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
  129. package/lib/chain/validation/executionPayloadEnvelope.js +30 -19
  130. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  131. package/lib/chain/validation/lightClientFinalityUpdate.js +1 -1
  132. package/lib/chain/validation/lightClientFinalityUpdate.js.map +1 -1
  133. package/lib/chain/validation/lightClientOptimisticUpdate.js +1 -1
  134. package/lib/chain/validation/lightClientOptimisticUpdate.js.map +1 -1
  135. package/lib/chain/validation/syncCommittee.d.ts +2 -2
  136. package/lib/chain/validation/syncCommittee.d.ts.map +1 -1
  137. package/lib/chain/validation/syncCommittee.js +12 -11
  138. package/lib/chain/validation/syncCommittee.js.map +1 -1
  139. package/lib/chain/validation/voluntaryExit.d.ts.map +1 -1
  140. package/lib/chain/validation/voluntaryExit.js +2 -2
  141. package/lib/chain/validation/voluntaryExit.js.map +1 -1
  142. package/lib/chain/validatorMonitor.d.ts +2 -1
  143. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  144. package/lib/chain/validatorMonitor.js +4 -1
  145. package/lib/chain/validatorMonitor.js.map +1 -1
  146. package/lib/execution/engine/interface.d.ts +2 -2
  147. package/lib/metrics/metrics/lodestar.d.ts +40 -4
  148. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  149. package/lib/metrics/metrics/lodestar.js +93 -15
  150. package/lib/metrics/metrics/lodestar.js.map +1 -1
  151. package/lib/network/gossip/encoding.d.ts.map +1 -1
  152. package/lib/network/gossip/encoding.js +15 -0
  153. package/lib/network/gossip/encoding.js.map +1 -1
  154. package/lib/network/interface.d.ts +1 -1
  155. package/lib/network/interface.d.ts.map +1 -1
  156. package/lib/network/network.d.ts +1 -1
  157. package/lib/network/network.d.ts.map +1 -1
  158. package/lib/network/network.js +4 -4
  159. package/lib/network/network.js.map +1 -1
  160. package/lib/network/processor/extractSlotRootFns.d.ts +1 -1
  161. package/lib/network/processor/extractSlotRootFns.d.ts.map +1 -1
  162. package/lib/network/processor/extractSlotRootFns.js +15 -5
  163. package/lib/network/processor/extractSlotRootFns.js.map +1 -1
  164. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  165. package/lib/network/processor/gossipHandlers.js +39 -9
  166. package/lib/network/processor/gossipHandlers.js.map +1 -1
  167. package/lib/network/processor/index.d.ts +12 -7
  168. package/lib/network/processor/index.d.ts.map +1 -1
  169. package/lib/network/processor/index.js +99 -78
  170. package/lib/network/processor/index.js.map +1 -1
  171. package/lib/network/reqresp/ReqRespBeaconNode.d.ts +1 -1
  172. package/lib/network/reqresp/ReqRespBeaconNode.js +1 -1
  173. package/lib/sync/backfill/backfill.d.ts +1 -1
  174. package/lib/sync/backfill/backfill.js +1 -1
  175. package/lib/sync/constants.d.ts +1 -1
  176. package/lib/sync/constants.js +1 -1
  177. package/lib/sync/unknownBlock.d.ts +3 -9
  178. package/lib/sync/unknownBlock.d.ts.map +1 -1
  179. package/lib/sync/unknownBlock.js +8 -41
  180. package/lib/sync/unknownBlock.js.map +1 -1
  181. package/lib/util/sszBytes.d.ts +4 -1
  182. package/lib/util/sszBytes.d.ts.map +1 -1
  183. package/lib/util/sszBytes.js +69 -12
  184. package/lib/util/sszBytes.js.map +1 -1
  185. package/package.json +15 -15
  186. package/src/api/impl/beacon/blocks/index.ts +36 -17
  187. package/src/api/impl/beacon/state/utils.ts +2 -2
  188. package/src/api/impl/validator/index.ts +8 -4
  189. package/src/chain/archiveStore/archiveStore.ts +0 -10
  190. package/src/chain/archiveStore/interface.ts +4 -4
  191. package/src/chain/archiveStore/strategies/frequencyStateArchiveStrategy.ts +8 -5
  192. package/src/chain/archiveStore/utils/archiveBlocks.ts +59 -1
  193. package/src/chain/blocks/blockInput/types.ts +4 -3
  194. package/src/chain/blocks/importBlock.ts +47 -8
  195. package/src/chain/blocks/importExecutionPayload.ts +241 -0
  196. package/src/chain/blocks/payloadEnvelopeInput/index.ts +2 -0
  197. package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +336 -0
  198. package/src/chain/blocks/payloadEnvelopeInput/types.ts +33 -0
  199. package/src/chain/blocks/payloadEnvelopeProcessor.ts +61 -0
  200. package/src/chain/blocks/types.ts +8 -0
  201. package/src/chain/blocks/verifyBlocksSignatures.ts +1 -1
  202. package/src/chain/blocks/writePayloadEnvelopeInputToDb.ts +55 -0
  203. package/src/chain/chain.ts +60 -15
  204. package/src/chain/errors/executionPayloadEnvelope.ts +6 -2
  205. package/src/chain/forkChoice/index.ts +0 -10
  206. package/src/chain/interface.ts +8 -5
  207. package/src/chain/opPools/utils.ts +1 -1
  208. package/src/chain/prepareNextSlot.ts +6 -2
  209. package/src/chain/produceBlock/computeNewStateRoot.ts +6 -1
  210. package/src/chain/produceBlock/produceBlockBody.ts +1 -1
  211. package/src/chain/regen/errors.ts +6 -1
  212. package/src/chain/regen/interface.ts +14 -6
  213. package/src/chain/regen/queued.ts +48 -12
  214. package/src/chain/regen/regen.ts +37 -7
  215. package/src/chain/seenCache/index.ts +1 -1
  216. package/src/chain/seenCache/seenGossipBlockInput.ts +2 -2
  217. package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +106 -0
  218. package/src/chain/stateCache/datastore/db.ts +33 -10
  219. package/src/chain/stateCache/datastore/file.ts +6 -5
  220. package/src/chain/stateCache/datastore/types.ts +3 -2
  221. package/src/chain/stateCache/fifoBlockStateCache.ts +10 -4
  222. package/src/chain/stateCache/persistentCheckpointsCache.ts +248 -139
  223. package/src/chain/stateCache/types.ts +18 -8
  224. package/src/chain/validation/executionPayloadEnvelope.ts +38 -25
  225. package/src/chain/validation/lightClientFinalityUpdate.ts +1 -1
  226. package/src/chain/validation/lightClientOptimisticUpdate.ts +1 -1
  227. package/src/chain/validation/syncCommittee.ts +15 -14
  228. package/src/chain/validation/voluntaryExit.ts +2 -1
  229. package/src/chain/validatorMonitor.ts +11 -1
  230. package/src/execution/engine/interface.ts +2 -2
  231. package/src/metrics/metrics/lodestar.ts +100 -19
  232. package/src/network/gossip/encoding.ts +16 -0
  233. package/src/network/interface.ts +1 -1
  234. package/src/network/network.ts +4 -4
  235. package/src/network/processor/extractSlotRootFns.ts +19 -6
  236. package/src/network/processor/gossipHandlers.ts +45 -8
  237. package/src/network/processor/index.ts +110 -89
  238. package/src/network/reqresp/ReqRespBeaconNode.ts +1 -1
  239. package/src/sync/backfill/backfill.ts +1 -1
  240. package/src/sync/constants.ts +1 -1
  241. package/src/sync/unknownBlock.ts +10 -50
  242. package/src/util/sszBytes.ts +90 -10
  243. package/lib/chain/archiveStore/utils/archivePayloads.d.ts +0 -7
  244. package/lib/chain/archiveStore/utils/archivePayloads.d.ts.map +0 -1
  245. package/lib/chain/archiveStore/utils/archivePayloads.js +0 -10
  246. package/lib/chain/archiveStore/utils/archivePayloads.js.map +0 -1
  247. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.d.ts +0 -15
  248. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.d.ts.map +0 -1
  249. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.js +0 -28
  250. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.js.map +0 -1
  251. package/src/chain/archiveStore/utils/archivePayloads.ts +0 -15
  252. package/src/chain/seenCache/seenExecutionPayloadEnvelope.ts +0 -34
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importExecutionPayload.d.ts","sourceRoot":"","sources":["../../../src/chain/blocks/importExecutionPayload.ts"],"names":[],"mappings":"AASA,OAAO,EAAC,sBAAsB,EAAC,MAAM,0BAA0B,CAAC;AAEhE,OAAO,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AAExC,OAAO,EAAC,oBAAoB,EAAC,MAAM,0CAA0C,CAAC;AAC9E,OAAO,EAAC,iBAAiB,EAAC,MAAM,YAAY,CAAC;AAI7C,oBAAY,gBAAgB;IAC1B,wBAAwB,2CAA2C;IACnE,sBAAsB,yCAAyC;IAC/D,wBAAwB,2CAA2C;IACnE,sBAAsB,yCAAyC;IAC/D,iBAAiB,oCAAoC;CACtD;AAED,MAAM,MAAM,gBAAgB,GACxB;IACE,IAAI,EAAE,gBAAgB,CAAC,wBAAwB,CAAC;IAChD,UAAU,EAAE,sBAAsB,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;CACtB,GACD;IACE,IAAI,EAAE,gBAAgB,CAAC,sBAAsB,CAAC;IAC9C,UAAU,EAAE,sBAAsB,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;CACtB,GACD;IACE,IAAI,EAAE,gBAAgB,CAAC,wBAAwB,CAAC;IAChD,YAAY,EAAE,MAAM,CAAC;CACtB,GACD;IACE,IAAI,EAAE,gBAAgB,CAAC,sBAAsB,CAAC;IAC9C,OAAO,EAAE,MAAM,CAAC;CACjB,GACD;IACE,IAAI,EAAE,gBAAgB,CAAC,iBAAiB,CAAC;CAC1C,CAAC;AAEN,qBAAa,YAAa,SAAQ,KAAK;IACrC,IAAI,EAAE,gBAAgB,CAAC;IAEvB,YAAY,IAAI,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,MAAM,EAGnD;CACF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,WAAW,EACjB,YAAY,EAAE,oBAAoB,EAClC,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAoKf"}
@@ -0,0 +1,159 @@
1
+ import { routes } from "@lodestar/api";
2
+ import { ForkName } from "@lodestar/params";
3
+ import { BeaconStateView, getExecutionPayloadEnvelopeSignatureSet, } from "@lodestar/state-transition";
4
+ import { processExecutionPayloadEnvelope } from "@lodestar/state-transition/block";
5
+ import { byteArrayEquals, fromHex, toRootHex } from "@lodestar/utils";
6
+ import { ExecutionPayloadStatus } from "../../execution/index.js";
7
+ import { isQueueErrorAborted } from "../../util/queue/index.js";
8
+ import { RegenCaller } from "../regen/interface.js";
9
+ const EVENTSTREAM_EMIT_RECENT_EXECUTION_PAYLOAD_SLOTS = 64;
10
+ export { PayloadErrorCode };
11
+ var PayloadErrorCode;
12
+ (function (PayloadErrorCode) {
13
+ PayloadErrorCode["EXECUTION_ENGINE_INVALID"] = "PAYLOAD_ERROR_EXECUTION_ENGINE_INVALID";
14
+ PayloadErrorCode["EXECUTION_ENGINE_ERROR"] = "PAYLOAD_ERROR_EXECUTION_ENGINE_ERROR";
15
+ PayloadErrorCode["BLOCK_NOT_IN_FORK_CHOICE"] = "PAYLOAD_ERROR_BLOCK_NOT_IN_FORK_CHOICE";
16
+ PayloadErrorCode["STATE_TRANSITION_ERROR"] = "PAYLOAD_ERROR_STATE_TRANSITION_ERROR";
17
+ PayloadErrorCode["INVALID_SIGNATURE"] = "PAYLOAD_ERROR_INVALID_SIGNATURE";
18
+ })(PayloadErrorCode || (PayloadErrorCode = {}));
19
+ export class PayloadError extends Error {
20
+ type;
21
+ constructor(type, message) {
22
+ super(message ?? type.code);
23
+ this.type = type;
24
+ }
25
+ }
26
+ /**
27
+ * Import an execution payload envelope after all data is available.
28
+ *
29
+ * This function:
30
+ * 1. Gets the ProtoBlock from fork choice
31
+ * 2. Applies write-queue backpressure (waitForSpace) early, before verification
32
+ * 3. Regenerates the block state
33
+ * 4. Runs EL verification (notifyNewPayload) in parallel with signature verification and processExecutionPayloadEnvelope
34
+ * 5. Persists verified payload envelope to hot DB
35
+ * 6. Updates fork choice
36
+ * 7. Caches the post-execution payload state
37
+ * 8. Records metrics for column sources
38
+ *
39
+ */
40
+ export async function importExecutionPayload(payloadInput, opts = {}) {
41
+ const envelope = payloadInput.getPayloadEnvelope();
42
+ const blockRootHex = payloadInput.blockRootHex;
43
+ // 1. Get ProtoBlock for parent root lookup
44
+ const protoBlock = this.forkChoice.getBlockHexDefaultStatus(blockRootHex);
45
+ if (!protoBlock) {
46
+ throw new PayloadError({
47
+ code: PayloadErrorCode.BLOCK_NOT_IN_FORK_CHOICE,
48
+ blockRootHex,
49
+ });
50
+ }
51
+ // 2. Apply backpressure from the write queue early, before doing verification work.
52
+ // The actual DB write is deferred until after verification succeeds.
53
+ await this.unfinalizedPayloadEnvelopeWrites.waitForSpace();
54
+ // 3. Get pre-state for processExecutionPayloadEnvelope
55
+ // We need the block state (post-block, pre-payload) to process the envelope
56
+ const blockState = (await this.regen.getBlockSlotState(protoBlock, protoBlock.slot, { dontTransferCache: true }, RegenCaller.processBlock));
57
+ // 4. Run verification steps in parallel
58
+ // Note: No data availability check needed here - importExecutionPayload is only
59
+ // called when payloadInput.isComplete() is true, so all data is already available.
60
+ const [execResult, signatureValid, postPayloadResult] = await Promise.all([
61
+ this.executionEngine.notifyNewPayload(ForkName.gloas, envelope.message.payload, payloadInput.getVersionedHashes(), fromHex(protoBlock.parentRoot), envelope.message.executionRequests),
62
+ opts.validSignature === true
63
+ ? Promise.resolve(true)
64
+ : (async () => {
65
+ const signatureSet = getExecutionPayloadEnvelopeSignatureSet(this.config, blockState.epochCtx.pubkeyCache, new BeaconStateView(blockState), envelope, payloadInput.proposerIndex);
66
+ return this.bls.verifySignatureSets([signatureSet]);
67
+ })(),
68
+ // Signature verified separately above.
69
+ // State root check is done separately below with better error typing (matching block pipeline pattern).
70
+ (async () => {
71
+ try {
72
+ return {
73
+ postPayloadState: processExecutionPayloadEnvelope(blockState, envelope, {
74
+ verifySignature: false,
75
+ verifyStateRoot: false,
76
+ }),
77
+ };
78
+ }
79
+ catch (e) {
80
+ throw new PayloadError({
81
+ code: PayloadErrorCode.STATE_TRANSITION_ERROR,
82
+ message: e.message,
83
+ }, `State transition error: ${e.message}`);
84
+ }
85
+ })(),
86
+ ]);
87
+ // 4b. Check signature verification result
88
+ if (!signatureValid) {
89
+ throw new PayloadError({ code: PayloadErrorCode.INVALID_SIGNATURE });
90
+ }
91
+ // 5. Handle EL response
92
+ switch (execResult.status) {
93
+ case ExecutionPayloadStatus.VALID:
94
+ break;
95
+ case ExecutionPayloadStatus.INVALID:
96
+ throw new PayloadError({
97
+ code: PayloadErrorCode.EXECUTION_ENGINE_INVALID,
98
+ execStatus: execResult.status,
99
+ errorMessage: execResult.validationError ?? "",
100
+ });
101
+ case ExecutionPayloadStatus.ACCEPTED:
102
+ case ExecutionPayloadStatus.SYNCING:
103
+ // TODO GLOAS: Handle optimistic import for payload - for now treat as error
104
+ throw new PayloadError({
105
+ code: PayloadErrorCode.EXECUTION_ENGINE_ERROR,
106
+ execStatus: execResult.status,
107
+ errorMessage: execResult.validationError ?? "EL syncing, payload not yet validated",
108
+ });
109
+ case ExecutionPayloadStatus.INVALID_BLOCK_HASH:
110
+ case ExecutionPayloadStatus.ELERROR:
111
+ case ExecutionPayloadStatus.UNAVAILABLE:
112
+ throw new PayloadError({
113
+ code: PayloadErrorCode.EXECUTION_ENGINE_ERROR,
114
+ execStatus: execResult.status,
115
+ errorMessage: execResult.validationError ?? "",
116
+ });
117
+ }
118
+ // 5b. Verify envelope state root matches post-state
119
+ const postPayloadState = postPayloadResult.postPayloadState;
120
+ const postPayloadStateRoot = postPayloadState.hashTreeRoot();
121
+ if (!byteArrayEquals(envelope.message.stateRoot, postPayloadStateRoot)) {
122
+ throw new PayloadError({
123
+ code: PayloadErrorCode.STATE_TRANSITION_ERROR,
124
+ message: `Envelope state root mismatch expected=${toRootHex(envelope.message.stateRoot)} actual=${toRootHex(postPayloadStateRoot)}`,
125
+ });
126
+ }
127
+ // 5c. Persist payload envelope to hot DB (performed asynchronously to avoid blocking)
128
+ this.unfinalizedPayloadEnvelopeWrites.push(payloadInput).catch((e) => {
129
+ if (!isQueueErrorAborted(e)) {
130
+ this.logger.error("Error pushing payload envelope to unfinalized write queue", { slot: payloadInput.slot, root: blockRootHex }, e);
131
+ }
132
+ });
133
+ // 6. Update fork choice
134
+ this.forkChoice.onExecutionPayload(blockRootHex, payloadInput.getBlockHashHex(), envelope.message.payload.blockNumber, toRootHex(postPayloadStateRoot));
135
+ // 7. Cache payload state
136
+ // TODO GLOAS: Enable when PR #8868 merged (adds processPayloadState)
137
+ // this.regen.processPayloadState(postPayloadState);
138
+ // if epoch boundary also call
139
+ // this.regen.addCheckpointState(cp, checkpointState, true);
140
+ // 8. Record metrics for payload envelope and column sources
141
+ this.metrics?.importPayload.bySource.inc({ source: payloadInput.getPayloadEnvelopeSource().source });
142
+ for (const { source } of payloadInput.getSampledColumnsWithSource()) {
143
+ this.metrics?.importPayload.columnsBySource.inc({ source });
144
+ }
145
+ this.logger.verbose("Execution payload imported", {
146
+ slot: payloadInput.slot,
147
+ root: blockRootHex,
148
+ blockHash: payloadInput.getBlockHashHex(),
149
+ });
150
+ // 9. Emit event after payload is fully verified and imported to fork choice, only for recent enough payloads
151
+ const currentSlot = this.clock.currentSlot;
152
+ if (currentSlot - payloadInput.slot < EVENTSTREAM_EMIT_RECENT_EXECUTION_PAYLOAD_SLOTS) {
153
+ this.emitter.emit(routes.events.EventType.executionPayloadAvailable, {
154
+ slot: payloadInput.slot,
155
+ blockRoot: blockRootHex,
156
+ });
157
+ }
158
+ }
159
+ //# sourceMappingURL=importExecutionPayload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importExecutionPayload.js","sourceRoot":"","sources":["../../../src/chain/blocks/importExecutionPayload.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from "./payloadEnvelopeInput.js";
2
+ export * from "./types.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/chain/blocks/payloadEnvelopeInput/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./payloadEnvelopeInput.js";
2
+ export * from "./types.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/chain/blocks/payloadEnvelopeInput/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,YAAY,CAAC"}
@@ -0,0 +1,80 @@
1
+ import { DataColumnSidecars, RootHex, Slot, ValidatorIndex, deneb, gloas } from "@lodestar/types";
2
+ import { VersionedHashes } from "../../../execution/index.js";
3
+ import { AddPayloadEnvelopeProps, ColumnWithSource, CreateFromBlockProps, SourceMeta } from "./types.js";
4
+ export type PayloadEnvelopeInputState = {
5
+ hasPayload: false;
6
+ hasAllData: false;
7
+ hasComputedAllData: false;
8
+ } | {
9
+ hasPayload: false;
10
+ hasAllData: true;
11
+ hasComputedAllData: boolean;
12
+ } | {
13
+ hasPayload: true;
14
+ hasAllData: false;
15
+ hasComputedAllData: false;
16
+ payloadEnvelope: gloas.SignedExecutionPayloadEnvelope;
17
+ payloadEnvelopeSource: SourceMeta;
18
+ } | {
19
+ hasPayload: true;
20
+ hasAllData: true;
21
+ hasComputedAllData: boolean;
22
+ payloadEnvelope: gloas.SignedExecutionPayloadEnvelope;
23
+ payloadEnvelopeSource: SourceMeta;
24
+ timeCompleteSec: number;
25
+ };
26
+ /**
27
+ * Tracks bid + payload envelope + data columns for a Gloas block.
28
+ *
29
+ * Created during block import from signedExecutionPayloadBid in block body.
30
+ * Always has bid (required for creation).
31
+ *
32
+ * Completion requires: payload envelope + all sampled columns
33
+ */
34
+ export declare class PayloadEnvelopeInput {
35
+ readonly blockRootHex: RootHex;
36
+ readonly slot: Slot;
37
+ readonly proposerIndex: ValidatorIndex;
38
+ readonly bid: gloas.ExecutionPayloadBid;
39
+ readonly versionedHashes: VersionedHashes;
40
+ private columnsCache;
41
+ private readonly sampledColumns;
42
+ private readonly custodyColumns;
43
+ private timeCreatedSec;
44
+ private readonly payloadEnvelopeDataPromise;
45
+ private readonly columnsDataPromise;
46
+ state: PayloadEnvelopeInputState;
47
+ private constructor();
48
+ static createFromBlock(props: CreateFromBlockProps): PayloadEnvelopeInput;
49
+ getBid(): gloas.ExecutionPayloadBid;
50
+ getBuilderIndex(): ValidatorIndex;
51
+ getBlockHashHex(): RootHex;
52
+ getBlobKzgCommitments(): deneb.BlobKzgCommitments;
53
+ addPayloadEnvelope(props: AddPayloadEnvelopeProps): void;
54
+ addColumn(columnWithSource: ColumnWithSource): void;
55
+ getVersionedHashes(): VersionedHashes;
56
+ hasPayloadEnvelope(): boolean;
57
+ getPayloadEnvelope(): gloas.SignedExecutionPayloadEnvelope;
58
+ getPayloadEnvelopeSource(): SourceMeta;
59
+ getSampledColumns(): gloas.DataColumnSidecars;
60
+ getSampledColumnsWithSource(): ColumnWithSource[];
61
+ getCustodyColumns(): gloas.DataColumnSidecars;
62
+ hasComputedAllData(): boolean;
63
+ waitForComputedAllData(timeout: number, signal?: AbortSignal): Promise<DataColumnSidecars>;
64
+ getTimeCreated(): number;
65
+ getTimeComplete(): number;
66
+ isComplete(): boolean;
67
+ waitForData(): Promise<gloas.SignedExecutionPayloadEnvelope>;
68
+ getSerializedCacheKeys(): object[];
69
+ getLogMeta(): {
70
+ slot: number;
71
+ blockRoot: string;
72
+ hasPayload: boolean;
73
+ hasAllData: boolean;
74
+ hasComputedAllData: boolean;
75
+ isComplete: boolean;
76
+ columnsCount: number;
77
+ sampledColumnsCount: number;
78
+ };
79
+ }
80
+ //# sourceMappingURL=payloadEnvelopeInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payloadEnvelopeInput.d.ts","sourceRoot":"","sources":["../../../../src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,248 @@
1
+ import { NUMBER_OF_COLUMNS } from "@lodestar/params";
2
+ import { toRootHex, withTimeout } from "@lodestar/utils";
3
+ import { kzgCommitmentToVersionedHash } from "../../../util/blobs.js";
4
+ function createPromise() {
5
+ let resolve;
6
+ let reject;
7
+ const promise = new Promise((_resolve, _reject) => {
8
+ resolve = _resolve;
9
+ reject = _reject;
10
+ });
11
+ return { promise, resolve, reject };
12
+ }
13
+ /**
14
+ * Tracks bid + payload envelope + data columns for a Gloas block.
15
+ *
16
+ * Created during block import from signedExecutionPayloadBid in block body.
17
+ * Always has bid (required for creation).
18
+ *
19
+ * Completion requires: payload envelope + all sampled columns
20
+ */
21
+ export class PayloadEnvelopeInput {
22
+ blockRootHex;
23
+ slot;
24
+ proposerIndex;
25
+ bid;
26
+ versionedHashes;
27
+ columnsCache = new Map();
28
+ sampledColumns;
29
+ custodyColumns;
30
+ timeCreatedSec;
31
+ payloadEnvelopeDataPromise;
32
+ columnsDataPromise;
33
+ state;
34
+ constructor(props) {
35
+ this.blockRootHex = props.blockRootHex;
36
+ this.slot = props.slot;
37
+ this.proposerIndex = props.proposerIndex;
38
+ this.bid = props.bid;
39
+ this.versionedHashes = props.bid.blobKzgCommitments.map(kzgCommitmentToVersionedHash);
40
+ this.sampledColumns = props.sampledColumns;
41
+ this.custodyColumns = props.custodyColumns;
42
+ this.timeCreatedSec = props.timeCreatedSec;
43
+ this.payloadEnvelopeDataPromise = createPromise();
44
+ this.columnsDataPromise = createPromise();
45
+ const noBlobs = props.bid.blobKzgCommitments.length === 0;
46
+ const noSampledColumns = props.sampledColumns.length === 0;
47
+ const hasAllData = noBlobs || noSampledColumns;
48
+ if (hasAllData) {
49
+ this.state = { hasPayload: false, hasAllData: true, hasComputedAllData: true };
50
+ this.columnsDataPromise.resolve(this.getSampledColumns());
51
+ }
52
+ else {
53
+ this.state = { hasPayload: false, hasAllData: false, hasComputedAllData: false };
54
+ }
55
+ }
56
+ static createFromBlock(props) {
57
+ const bid = props.block.message.body.signedExecutionPayloadBid.message;
58
+ return new PayloadEnvelopeInput({
59
+ blockRootHex: props.blockRootHex,
60
+ slot: props.block.message.slot,
61
+ proposerIndex: props.block.message.proposerIndex,
62
+ bid,
63
+ sampledColumns: props.sampledColumns,
64
+ custodyColumns: props.custodyColumns,
65
+ timeCreatedSec: props.timeCreatedSec,
66
+ });
67
+ }
68
+ getBid() {
69
+ return this.bid;
70
+ }
71
+ getBuilderIndex() {
72
+ return this.bid.builderIndex;
73
+ }
74
+ getBlockHashHex() {
75
+ return toRootHex(this.bid.blockHash);
76
+ }
77
+ getBlobKzgCommitments() {
78
+ return this.bid.blobKzgCommitments;
79
+ }
80
+ addPayloadEnvelope(props) {
81
+ if (this.state.hasPayload) {
82
+ throw new Error(`Payload envelope already set for block ${this.blockRootHex}`);
83
+ }
84
+ if (toRootHex(props.envelope.message.beaconBlockRoot) !== this.blockRootHex) {
85
+ throw new Error("Payload envelope beacon_block_root mismatch");
86
+ }
87
+ const source = {
88
+ source: props.source,
89
+ seenTimestampSec: props.seenTimestampSec,
90
+ peerIdStr: props.peerIdStr,
91
+ };
92
+ if (this.state.hasAllData) {
93
+ // Complete state
94
+ this.state = {
95
+ hasPayload: true,
96
+ hasAllData: true,
97
+ hasComputedAllData: this.state.hasComputedAllData,
98
+ payloadEnvelope: props.envelope,
99
+ payloadEnvelopeSource: source,
100
+ timeCompleteSec: props.seenTimestampSec,
101
+ };
102
+ this.payloadEnvelopeDataPromise.resolve(props.envelope);
103
+ }
104
+ else {
105
+ // Has payload, waiting for columns
106
+ this.state = {
107
+ hasPayload: true,
108
+ hasAllData: false,
109
+ hasComputedAllData: false,
110
+ payloadEnvelope: props.envelope,
111
+ payloadEnvelopeSource: source,
112
+ };
113
+ }
114
+ }
115
+ addColumn(columnWithSource) {
116
+ const { columnSidecar, seenTimestampSec } = columnWithSource;
117
+ this.columnsCache.set(columnSidecar.index, columnWithSource);
118
+ const sampledColumns = this.getSampledColumns();
119
+ const hasAllData =
120
+ // already hasAllData
121
+ this.state.hasAllData ||
122
+ // has all sampled columns
123
+ sampledColumns.length === this.sampledColumns.length ||
124
+ // has enough columns to reconstruct the rest
125
+ this.columnsCache.size >= NUMBER_OF_COLUMNS / 2;
126
+ const hasComputedAllData =
127
+ // has all sampled columns
128
+ sampledColumns.length === this.sampledColumns.length;
129
+ if (!hasAllData) {
130
+ return;
131
+ }
132
+ if (hasComputedAllData) {
133
+ this.columnsDataPromise.resolve(sampledColumns);
134
+ }
135
+ if (this.state.hasPayload) {
136
+ // Complete state
137
+ this.state = {
138
+ hasPayload: true,
139
+ hasAllData: true,
140
+ hasComputedAllData: hasComputedAllData || this.state.hasComputedAllData,
141
+ payloadEnvelope: this.state.payloadEnvelope,
142
+ payloadEnvelopeSource: this.state.payloadEnvelopeSource,
143
+ timeCompleteSec: seenTimestampSec,
144
+ };
145
+ this.payloadEnvelopeDataPromise.resolve(this.state.payloadEnvelope);
146
+ }
147
+ else {
148
+ // No payload yet, all data ready
149
+ this.state = {
150
+ hasPayload: false,
151
+ hasAllData: true,
152
+ hasComputedAllData: hasComputedAllData || this.state.hasComputedAllData,
153
+ };
154
+ }
155
+ }
156
+ getVersionedHashes() {
157
+ return this.versionedHashes;
158
+ }
159
+ hasPayloadEnvelope() {
160
+ return this.state.hasPayload;
161
+ }
162
+ getPayloadEnvelope() {
163
+ if (!this.state.hasPayload)
164
+ throw new Error("Payload envelope not set");
165
+ return this.state.payloadEnvelope;
166
+ }
167
+ getPayloadEnvelopeSource() {
168
+ if (!this.state.hasPayload)
169
+ throw new Error("Payload envelope source not set");
170
+ return this.state.payloadEnvelopeSource;
171
+ }
172
+ getSampledColumns() {
173
+ const columns = [];
174
+ for (const index of this.sampledColumns) {
175
+ const column = this.columnsCache.get(index);
176
+ if (column) {
177
+ columns.push(column.columnSidecar);
178
+ }
179
+ }
180
+ return columns;
181
+ }
182
+ getSampledColumnsWithSource() {
183
+ const columns = [];
184
+ for (const index of this.sampledColumns) {
185
+ const column = this.columnsCache.get(index);
186
+ if (column) {
187
+ columns.push(column);
188
+ }
189
+ }
190
+ return columns;
191
+ }
192
+ getCustodyColumns() {
193
+ const columns = [];
194
+ for (const index of this.custodyColumns) {
195
+ const column = this.columnsCache.get(index);
196
+ if (column) {
197
+ columns.push(column.columnSidecar);
198
+ }
199
+ }
200
+ return columns;
201
+ }
202
+ hasComputedAllData() {
203
+ return this.state.hasComputedAllData;
204
+ }
205
+ waitForComputedAllData(timeout, signal) {
206
+ if (this.state.hasComputedAllData) {
207
+ return Promise.resolve(this.getSampledColumns());
208
+ }
209
+ return withTimeout(() => this.columnsDataPromise.promise, timeout, signal);
210
+ }
211
+ getTimeCreated() {
212
+ return this.timeCreatedSec;
213
+ }
214
+ getTimeComplete() {
215
+ if (!this.state.hasPayload || !this.state.hasAllData)
216
+ throw new Error("Not yet complete");
217
+ return this.state.timeCompleteSec;
218
+ }
219
+ isComplete() {
220
+ return this.state.hasPayload && this.state.hasAllData;
221
+ }
222
+ async waitForData() {
223
+ return this.payloadEnvelopeDataPromise.promise;
224
+ }
225
+ getSerializedCacheKeys() {
226
+ const objects = [];
227
+ if (this.state.hasPayload) {
228
+ objects.push(this.state.payloadEnvelope);
229
+ }
230
+ for (const { columnSidecar } of this.columnsCache.values()) {
231
+ objects.push(columnSidecar);
232
+ }
233
+ return objects;
234
+ }
235
+ getLogMeta() {
236
+ return {
237
+ slot: this.slot,
238
+ blockRoot: this.blockRootHex,
239
+ hasPayload: this.state.hasPayload,
240
+ hasAllData: this.state.hasAllData,
241
+ hasComputedAllData: this.state.hasComputedAllData,
242
+ isComplete: this.isComplete(),
243
+ columnsCount: this.columnsCache.size,
244
+ sampledColumnsCount: this.sampledColumns.length,
245
+ };
246
+ }
247
+ }
248
+ //# sourceMappingURL=payloadEnvelopeInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payloadEnvelopeInput.js","sourceRoot":"","sources":["../../../../src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { ForkPostGloas } from "@lodestar/params";
2
+ import { ColumnIndex, RootHex, SignedBeaconBlock, gloas } from "@lodestar/types";
3
+ export declare enum PayloadEnvelopeInputSource {
4
+ gossip = "gossip",
5
+ api = "api",
6
+ engine = "engine",
7
+ byRange = "req_resp_by_range",
8
+ byRoot = "req_resp_by_root",
9
+ recovery = "recovery"
10
+ }
11
+ export type SourceMeta = {
12
+ source: PayloadEnvelopeInputSource;
13
+ seenTimestampSec: number;
14
+ peerIdStr?: string;
15
+ };
16
+ export type ColumnWithSource = SourceMeta & {
17
+ columnSidecar: gloas.DataColumnSidecar;
18
+ };
19
+ export type CreateFromBlockProps = {
20
+ blockRootHex: RootHex;
21
+ block: SignedBeaconBlock<ForkPostGloas>;
22
+ sampledColumns: ColumnIndex[];
23
+ custodyColumns: ColumnIndex[];
24
+ timeCreatedSec: number;
25
+ };
26
+ export type AddPayloadEnvelopeProps = SourceMeta & {
27
+ envelope: gloas.SignedExecutionPayloadEnvelope;
28
+ };
29
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/chain/blocks/payloadEnvelopeInput/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAC,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAE/E,oBAAY,0BAA0B;IACpC,MAAM,WAAW;IACjB,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,OAAO,sBAAsB;IAC7B,MAAM,qBAAqB;IAC3B,QAAQ,aAAa;CACtB;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,0BAA0B,CAAC;IACnC,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG;IAC1C,aAAa,EAAE,KAAK,CAAC,iBAAiB,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC;IACxC,cAAc,EAAE,WAAW,EAAE,CAAC;IAC9B,cAAc,EAAE,WAAW,EAAE,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,UAAU,GAAG;IACjD,QAAQ,EAAE,KAAK,CAAC,8BAA8B,CAAC;CAChD,CAAC"}
@@ -0,0 +1,11 @@
1
+ export { PayloadEnvelopeInputSource };
2
+ var PayloadEnvelopeInputSource;
3
+ (function (PayloadEnvelopeInputSource) {
4
+ PayloadEnvelopeInputSource["gossip"] = "gossip";
5
+ PayloadEnvelopeInputSource["api"] = "api";
6
+ PayloadEnvelopeInputSource["engine"] = "engine";
7
+ PayloadEnvelopeInputSource["byRange"] = "req_resp_by_range";
8
+ PayloadEnvelopeInputSource["byRoot"] = "req_resp_by_root";
9
+ PayloadEnvelopeInputSource["recovery"] = "recovery";
10
+ })(PayloadEnvelopeInputSource || (PayloadEnvelopeInputSource = {}));
11
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/chain/blocks/payloadEnvelopeInput/types.ts"],"names":[],"mappings":"SAGY,0BAA0B;AAAtC,IAAY,0BAOX;AAPD,WAAY,0BAA0B;IACpC,+CAAiB,CAAA;IACjB,yCAAW,CAAA;IACX,+CAAiB,CAAA;IACjB,2DAA6B,CAAA;IAC7B,yDAA2B,CAAA;IAC3B,mDAAqB,CAAA;AAAC,CACxB,EAPY,0BAA0B,KAA1B,0BAA0B,QAOrC"}
@@ -0,0 +1,15 @@
1
+ import { Metrics } from "../../metrics/metrics.js";
2
+ import { JobItemQueue } from "../../util/queue/index.js";
3
+ import type { BeaconChain } from "../chain.js";
4
+ import { PayloadEnvelopeInput } from "../seenCache/seenPayloadEnvelopeInput.js";
5
+ import { ImportPayloadOpts } from "./types.js";
6
+ /**
7
+ * PayloadEnvelopeProcessor processes payload envelope jobs in a queued fashion, one after the other.
8
+ */
9
+ export declare class PayloadEnvelopeProcessor {
10
+ readonly jobQueue: JobItemQueue<[PayloadEnvelopeInput, ImportPayloadOpts], void>;
11
+ private readonly importStatus;
12
+ constructor(chain: BeaconChain, metrics: Metrics | null, signal: AbortSignal);
13
+ processPayloadEnvelopeJob(payloadInput: PayloadEnvelopeInput, opts?: ImportPayloadOpts): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=payloadEnvelopeProcessor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payloadEnvelopeProcessor.d.ts","sourceRoot":"","sources":["../../../src/chain/blocks/payloadEnvelopeProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAC,YAAY,EAAC,MAAM,2BAA2B,CAAC;AACvD,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAC,oBAAoB,EAAC,MAAM,0CAA0C,CAAC;AAE9E,OAAO,EAAC,iBAAiB,EAAC,MAAM,YAAY,CAAC;AAW7C;;GAEG;AACH,qBAAa,wBAAwB;IACnC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,EAAE,IAAI,CAAC,CAAC;IACjF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoE;IAEjG,YAAY,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,EAAE,MAAM,EAAE,WAAW,EAS3E;IAEK,yBAAyB,CAAC,YAAY,EAAE,oBAAoB,EAAE,IAAI,GAAE,iBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB/G;CACF"}