@lodestar/beacon-node 1.42.0-dev.eec18d0609 → 1.42.0-dev.f403d99def

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 (286) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +31 -11
  3. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  4. package/lib/api/impl/beacon/pool/index.d.ts.map +1 -1
  5. package/lib/api/impl/beacon/pool/index.js +4 -0
  6. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  7. package/lib/api/impl/beacon/state/index.d.ts.map +1 -1
  8. package/lib/api/impl/beacon/state/index.js +13 -10
  9. package/lib/api/impl/beacon/state/index.js.map +1 -1
  10. package/lib/api/impl/debug/index.js.map +1 -1
  11. package/lib/api/impl/lodestar/index.d.ts.map +1 -1
  12. package/lib/api/impl/lodestar/index.js +4 -0
  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 +9 -3
  16. package/lib/api/impl/validator/index.js.map +1 -1
  17. package/lib/chain/ColumnReconstructionTracker.d.ts +2 -1
  18. package/lib/chain/ColumnReconstructionTracker.d.ts.map +1 -1
  19. package/lib/chain/ColumnReconstructionTracker.js +5 -5
  20. package/lib/chain/ColumnReconstructionTracker.js.map +1 -1
  21. package/lib/chain/GetBlobsTracker.d.ts +2 -1
  22. package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
  23. package/lib/chain/GetBlobsTracker.js +14 -12
  24. package/lib/chain/GetBlobsTracker.js.map +1 -1
  25. package/lib/chain/blocks/blockInput/blockInput.d.ts +5 -5
  26. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
  27. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  28. package/lib/chain/blocks/blockInput/types.d.ts +4 -4
  29. package/lib/chain/blocks/blockInput/types.d.ts.map +1 -1
  30. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  31. package/lib/chain/blocks/importBlock.js +19 -5
  32. package/lib/chain/blocks/importBlock.js.map +1 -1
  33. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  34. package/lib/chain/blocks/importExecutionPayload.js +14 -5
  35. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  36. package/lib/chain/blocks/index.js +1 -1
  37. package/lib/chain/blocks/index.js.map +1 -1
  38. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +14 -6
  39. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -1
  40. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +33 -2
  41. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -1
  42. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +2 -1
  43. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts.map +1 -1
  44. package/lib/chain/blocks/types.d.ts +3 -3
  45. package/lib/chain/blocks/types.d.ts.map +1 -1
  46. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  47. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +3 -2
  48. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  49. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  50. package/lib/chain/blocks/verifyBlocksSignatures.js +4 -2
  51. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  52. package/lib/chain/chain.d.ts +4 -2
  53. package/lib/chain/chain.d.ts.map +1 -1
  54. package/lib/chain/chain.js +77 -28
  55. package/lib/chain/chain.js.map +1 -1
  56. package/lib/chain/emitter.d.ts +29 -7
  57. package/lib/chain/emitter.d.ts.map +1 -1
  58. package/lib/chain/emitter.js +12 -3
  59. package/lib/chain/emitter.js.map +1 -1
  60. package/lib/chain/errors/blockError.d.ts +11 -1
  61. package/lib/chain/errors/blockError.d.ts.map +1 -1
  62. package/lib/chain/errors/blockError.js +4 -0
  63. package/lib/chain/errors/blockError.js.map +1 -1
  64. package/lib/chain/errors/dataColumnSidecarError.d.ts +31 -1
  65. package/lib/chain/errors/dataColumnSidecarError.d.ts.map +1 -1
  66. package/lib/chain/errors/dataColumnSidecarError.js +7 -0
  67. package/lib/chain/errors/dataColumnSidecarError.js.map +1 -1
  68. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  69. package/lib/chain/forkChoice/index.js +10 -8
  70. package/lib/chain/forkChoice/index.js.map +1 -1
  71. package/lib/chain/interface.d.ts +5 -2
  72. package/lib/chain/interface.d.ts.map +1 -1
  73. package/lib/chain/interface.js.map +1 -1
  74. package/lib/chain/lightClient/index.d.ts +2 -2
  75. package/lib/chain/lightClient/index.d.ts.map +1 -1
  76. package/lib/chain/lightClient/index.js +7 -0
  77. package/lib/chain/lightClient/index.js.map +1 -1
  78. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  79. package/lib/chain/opPools/aggregatedAttestationPool.js +5 -2
  80. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  81. package/lib/chain/opPools/executionPayloadBidPool.d.ts +2 -2
  82. package/lib/chain/opPools/executionPayloadBidPool.d.ts.map +1 -1
  83. package/lib/chain/opPools/executionPayloadBidPool.js +2 -2
  84. package/lib/chain/opPools/executionPayloadBidPool.js.map +1 -1
  85. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  86. package/lib/chain/prepareNextSlot.js +7 -1
  87. package/lib/chain/prepareNextSlot.js.map +1 -1
  88. package/lib/chain/produceBlock/computeNewStateRoot.d.ts +3 -3
  89. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
  90. package/lib/chain/produceBlock/computeNewStateRoot.js +8 -8
  91. package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
  92. package/lib/chain/produceBlock/produceBlockBody.d.ts +5 -5
  93. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  94. package/lib/chain/produceBlock/produceBlockBody.js +23 -4
  95. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  96. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +1 -1
  97. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
  98. package/lib/chain/seenCache/seenGossipBlockInput.js +2 -2
  99. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  100. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +1 -1
  101. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -1
  102. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +2 -2
  103. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -1
  104. package/lib/chain/validation/block.d.ts.map +1 -1
  105. package/lib/chain/validation/block.js +27 -5
  106. package/lib/chain/validation/block.js.map +1 -1
  107. package/lib/chain/validation/dataColumnSidecar.d.ts +11 -4
  108. package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -1
  109. package/lib/chain/validation/dataColumnSidecar.js +184 -5
  110. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  111. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  112. package/lib/chain/validation/executionPayloadBid.js +7 -4
  113. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  114. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
  115. package/lib/chain/validation/executionPayloadEnvelope.js +6 -1
  116. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  117. package/lib/chain/validation/payloadAttestationMessage.d.ts.map +1 -1
  118. package/lib/chain/validation/payloadAttestationMessage.js +4 -1
  119. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
  120. package/lib/chain/validation/syncCommittee.d.ts.map +1 -1
  121. package/lib/chain/validation/syncCommittee.js +4 -0
  122. package/lib/chain/validation/syncCommittee.js.map +1 -1
  123. package/lib/chain/validation/syncCommitteeContributionAndProof.js +4 -1
  124. package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
  125. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  126. package/lib/chain/validatorMonitor.js +3 -3
  127. package/lib/chain/validatorMonitor.js.map +1 -1
  128. package/lib/db/buckets.d.ts +2 -2
  129. package/lib/db/buckets.d.ts.map +1 -1
  130. package/lib/db/buckets.js +2 -2
  131. package/lib/db/buckets.js.map +1 -1
  132. package/lib/db/repositories/blockArchiveIndex.d.ts +2 -2
  133. package/lib/db/repositories/blockArchiveIndex.d.ts.map +1 -1
  134. package/lib/db/repositories/dataColumnSidecar.d.ts.map +1 -1
  135. package/lib/db/repositories/dataColumnSidecar.js +4 -2
  136. package/lib/db/repositories/dataColumnSidecar.js.map +1 -1
  137. package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +1 -1
  138. package/lib/db/repositories/dataColumnSidecarArchive.js +4 -2
  139. package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
  140. package/lib/metrics/metrics/lodestar.d.ts +20 -0
  141. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  142. package/lib/metrics/metrics/lodestar.js +33 -0
  143. package/lib/metrics/metrics/lodestar.js.map +1 -1
  144. package/lib/network/interface.d.ts +3 -2
  145. package/lib/network/interface.d.ts.map +1 -1
  146. package/lib/network/network.d.ts +3 -2
  147. package/lib/network/network.d.ts.map +1 -1
  148. package/lib/network/network.js +3 -0
  149. package/lib/network/network.js.map +1 -1
  150. package/lib/network/processor/extractSlotRootFns.d.ts +1 -1
  151. package/lib/network/processor/extractSlotRootFns.d.ts.map +1 -1
  152. package/lib/network/processor/extractSlotRootFns.js +25 -5
  153. package/lib/network/processor/extractSlotRootFns.js.map +1 -1
  154. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  155. package/lib/network/processor/gossipHandlers.js +246 -66
  156. package/lib/network/processor/gossipHandlers.js.map +1 -1
  157. package/lib/network/processor/index.d.ts +11 -1
  158. package/lib/network/processor/index.d.ts.map +1 -1
  159. package/lib/network/processor/index.js +234 -22
  160. package/lib/network/processor/index.js.map +1 -1
  161. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -1
  162. package/lib/network/reqresp/handlers/beaconBlocksByRange.js +2 -1
  163. package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
  164. package/lib/network/reqresp/handlers/beaconBlocksByRoot.d.ts.map +1 -1
  165. package/lib/network/reqresp/handlers/beaconBlocksByRoot.js +2 -0
  166. package/lib/network/reqresp/handlers/beaconBlocksByRoot.js.map +1 -1
  167. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts +2 -2
  168. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +1 -1
  169. package/lib/network/reqresp/handlers/blobSidecarsByRange.js +7 -3
  170. package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +1 -1
  171. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts.map +1 -1
  172. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js +6 -0
  173. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js.map +1 -1
  174. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts +2 -2
  175. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -1
  176. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +7 -3
  177. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -1
  178. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts.map +1 -1
  179. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js +2 -1
  180. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js.map +1 -1
  181. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.d.ts.map +1 -1
  182. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js +3 -8
  183. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js.map +1 -1
  184. package/lib/network/reqresp/types.d.ts +3 -3
  185. package/lib/network/reqresp/types.d.ts.map +1 -1
  186. package/lib/network/reqresp/types.js +9 -3
  187. package/lib/network/reqresp/types.js.map +1 -1
  188. package/lib/node/nodejs.d.ts.map +1 -1
  189. package/lib/node/nodejs.js +4 -1
  190. package/lib/node/nodejs.js.map +1 -1
  191. package/lib/node/notifier.d.ts.map +1 -1
  192. package/lib/node/notifier.js +2 -2
  193. package/lib/node/notifier.js.map +1 -1
  194. package/lib/sync/unknownBlock.js +2 -2
  195. package/lib/sync/unknownBlock.js.map +1 -1
  196. package/lib/sync/utils/downloadByRange.d.ts +3 -3
  197. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  198. package/lib/sync/utils/downloadByRange.js +4 -2
  199. package/lib/sync/utils/downloadByRange.js.map +1 -1
  200. package/lib/sync/utils/downloadByRoot.d.ts +3 -3
  201. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  202. package/lib/sync/utils/downloadByRoot.js +10 -5
  203. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  204. package/lib/util/blobs.d.ts +3 -3
  205. package/lib/util/blobs.d.ts.map +1 -1
  206. package/lib/util/blobs.js +21 -10
  207. package/lib/util/blobs.js.map +1 -1
  208. package/lib/util/dataColumns.d.ts +18 -11
  209. package/lib/util/dataColumns.d.ts.map +1 -1
  210. package/lib/util/dataColumns.js +51 -17
  211. package/lib/util/dataColumns.js.map +1 -1
  212. package/lib/util/execution.d.ts +6 -2
  213. package/lib/util/execution.d.ts.map +1 -1
  214. package/lib/util/execution.js +49 -25
  215. package/lib/util/execution.js.map +1 -1
  216. package/lib/util/sszBytes.d.ts +25 -1
  217. package/lib/util/sszBytes.d.ts.map +1 -1
  218. package/lib/util/sszBytes.js +189 -2
  219. package/lib/util/sszBytes.js.map +1 -1
  220. package/package.json +15 -15
  221. package/src/api/impl/beacon/blocks/index.ts +46 -14
  222. package/src/api/impl/beacon/pool/index.ts +4 -0
  223. package/src/api/impl/beacon/state/index.ts +15 -15
  224. package/src/api/impl/debug/index.ts +2 -2
  225. package/src/api/impl/lodestar/index.ts +4 -0
  226. package/src/api/impl/validator/index.ts +9 -2
  227. package/src/chain/ColumnReconstructionTracker.ts +6 -5
  228. package/src/chain/GetBlobsTracker.ts +14 -12
  229. package/src/chain/blocks/blockInput/blockInput.ts +8 -8
  230. package/src/chain/blocks/blockInput/types.ts +4 -4
  231. package/src/chain/blocks/importBlock.ts +29 -8
  232. package/src/chain/blocks/importExecutionPayload.ts +15 -5
  233. package/src/chain/blocks/index.ts +1 -1
  234. package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +53 -12
  235. package/src/chain/blocks/payloadEnvelopeInput/types.ts +2 -1
  236. package/src/chain/blocks/types.ts +3 -3
  237. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +2 -1
  238. package/src/chain/blocks/verifyBlocksSignatures.ts +9 -2
  239. package/src/chain/chain.ts +93 -32
  240. package/src/chain/emitter.ts +25 -7
  241. package/src/chain/errors/blockError.ts +7 -1
  242. package/src/chain/errors/dataColumnSidecarError.ts +32 -1
  243. package/src/chain/forkChoice/index.ts +11 -8
  244. package/src/chain/interface.ts +9 -2
  245. package/src/chain/lightClient/index.ts +15 -3
  246. package/src/chain/opPools/aggregatedAttestationPool.ts +6 -1
  247. package/src/chain/opPools/executionPayloadBidPool.ts +3 -3
  248. package/src/chain/prepareNextSlot.ts +8 -0
  249. package/src/chain/produceBlock/computeNewStateRoot.ts +11 -10
  250. package/src/chain/produceBlock/produceBlockBody.ts +40 -10
  251. package/src/chain/seenCache/seenGossipBlockInput.ts +2 -2
  252. package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +2 -2
  253. package/src/chain/validation/block.ts +30 -7
  254. package/src/chain/validation/dataColumnSidecar.ts +230 -7
  255. package/src/chain/validation/executionPayloadBid.ts +7 -3
  256. package/src/chain/validation/executionPayloadEnvelope.ts +10 -1
  257. package/src/chain/validation/payloadAttestationMessage.ts +4 -0
  258. package/src/chain/validation/syncCommittee.ts +5 -1
  259. package/src/chain/validation/syncCommitteeContributionAndProof.ts +5 -1
  260. package/src/chain/validatorMonitor.ts +3 -2
  261. package/src/db/buckets.ts +2 -2
  262. package/src/db/repositories/dataColumnSidecar.ts +4 -2
  263. package/src/db/repositories/dataColumnSidecarArchive.ts +4 -2
  264. package/src/metrics/metrics/lodestar.ts +34 -0
  265. package/src/network/interface.ts +3 -2
  266. package/src/network/network.ts +7 -4
  267. package/src/network/processor/extractSlotRootFns.ts +32 -6
  268. package/src/network/processor/gossipHandlers.ts +310 -79
  269. package/src/network/processor/index.ts +304 -22
  270. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +3 -1
  271. package/src/network/reqresp/handlers/beaconBlocksByRoot.ts +3 -0
  272. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +15 -3
  273. package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +11 -0
  274. package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +19 -3
  275. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRange.ts +3 -1
  276. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRoot.ts +3 -12
  277. package/src/network/reqresp/types.ts +13 -5
  278. package/src/node/nodejs.ts +5 -2
  279. package/src/node/notifier.ts +7 -2
  280. package/src/sync/unknownBlock.ts +3 -3
  281. package/src/sync/utils/downloadByRange.ts +9 -7
  282. package/src/sync/utils/downloadByRoot.ts +16 -12
  283. package/src/util/blobs.ts +35 -15
  284. package/src/util/dataColumns.ts +69 -25
  285. package/src/util/execution.ts +49 -30
  286. package/src/util/sszBytes.ts +245 -3
@@ -7,6 +7,7 @@ import { ChainEvent } from "../../chain/emitter.js";
7
7
  import { GossipErrorCode } from "../../chain/errors/gossipValidation.js";
8
8
  import { ClockEvent } from "../../util/clock.js";
9
9
  import { callInNextEventLoop } from "../../util/eventLoop.js";
10
+ import { getBeaconBlockRootFromExecutionPayloadEnvelopeSerialized, getDataIndexFromSignedAggregateAndProofSerialized, getDataIndexFromSingleAttestationSerialized, getParentBlockHashFromGloasSignedBeaconBlockSerialized, getParentBlockHashFromSignedExecutionPayloadBidSerialized, getParentBlockRootFromSignedExecutionPayloadBidSerialized, getParentRootFromSignedBeaconBlockSerialized, getPayloadPresentFromPayloadAttestationMessageSerialized, } from "../../util/sszBytes.js";
10
11
  import { NetworkEvent } from "../events.js";
11
12
  import { GossipType, } from "../gossip/interface.js";
12
13
  import { createExtractBlockSlotRootFns } from "./extractSlotRootFns.js";
@@ -52,6 +53,8 @@ const executeGossipWorkOrder = Object.keys(executeGossipWorkOrderObj);
52
53
  const MAX_JOBS_SUBMITTED_PER_TICK = 128;
53
54
  // How many gossip messages we keep before new ones get dropped.
54
55
  const MAX_QUEUED_UNKNOWN_BLOCK_GOSSIP_OBJECTS = 16_384;
56
+ // TODO gloas: arbitrary constant, check metrics.
57
+ const MAX_QUEUED_UNKNOWN_PAYLOAD_GOSSIP_OBJECTS = 1024;
55
58
  // We don't want to process too many gossip messages in a single tick
56
59
  // As seen on mainnet, gossip messages concurrency metric ranges from 1000 to 2000
57
60
  // so make this constant a little bit conservative
@@ -88,6 +91,15 @@ var CannotAcceptWorkReason;
88
91
  */
89
92
  CannotAcceptWorkReason["regen"] = "regen_busy";
90
93
  })(CannotAcceptWorkReason || (CannotAcceptWorkReason = {}));
94
+ /**
95
+ * No metrics needed here; using a number to keep it lightweight
96
+ */
97
+ var PreprocessAction;
98
+ (function (PreprocessAction) {
99
+ PreprocessAction[PreprocessAction["AwaitBlock"] = 0] = "AwaitBlock";
100
+ PreprocessAction[PreprocessAction["AwaitEnvelope"] = 1] = "AwaitEnvelope";
101
+ PreprocessAction[PreprocessAction["PushToQueue"] = 2] = "PushToQueue";
102
+ })(PreprocessAction || (PreprocessAction = {}));
91
103
  /**
92
104
  * Network processor handles the gossip queues and throtles processing to not overload the main thread
93
105
  * - Decides when to process work and what to process
@@ -122,7 +134,11 @@ export class NetworkProcessor {
122
134
  // we may not receive the block for messages like Attestation and SignedAggregateAndProof messages, in that case PendingGossipsubMessage needs
123
135
  // to be stored in this Map and reprocessed once the block comes
124
136
  awaitingMessagesByBlockRoot;
137
+ // we may not receive the payload for messages that require the FULL payload variant to be processed,
138
+ // in that case PendingGossipsubMessage needs to be stored in this Map and reprocessed once the payload comes
139
+ awaitingMessagesByPayloadBlockRoot;
125
140
  unknownBlocksBySlot = new MapDef(() => new Set());
141
+ unknownEnvelopesBySlot = new MapDef(() => new Set());
126
142
  constructor(modules, opts) {
127
143
  this.opts = opts;
128
144
  const { chain, events, logger, metrics } = modules;
@@ -135,10 +151,12 @@ export class NetworkProcessor {
135
151
  this.gossipTopicConcurrency = mapValues(this.gossipQueues, () => 0);
136
152
  this.gossipValidatorFn = getGossipValidatorFn(modules.gossipHandlers ?? getGossipHandlers(modules, opts), modules);
137
153
  this.gossipValidatorBatchFn = getGossipValidatorBatchFn(modules.gossipHandlers ?? getGossipHandlers(modules, opts), modules);
138
- events.on(NetworkEvent.pendingGossipsubMessage, this.onPendingGossipsubMessage.bind(this));
139
- this.chain.emitter.on(routes.events.EventType.block, this.onBlockProcessed.bind(this));
140
- this.chain.clock.on(ClockEvent.slot, this.onClockSlot.bind(this));
154
+ events.on(NetworkEvent.pendingGossipsubMessage, this.onPendingGossipsubMessage);
155
+ this.chain.emitter.on(routes.events.EventType.block, this.onBlockProcessed);
156
+ this.chain.emitter.on(routes.events.EventType.executionPayload, this.onPayloadEnvelopeProcessed);
157
+ this.chain.clock.on(ClockEvent.slot, this.onClockSlot);
141
158
  this.awaitingMessagesByBlockRoot = new MapDef(() => new Set());
159
+ this.awaitingMessagesByPayloadBlockRoot = new MapDef(() => new Set());
142
160
  // TODO: Implement queues and priorization for ReqResp incoming requests
143
161
  // Listens to NetworkEvent.reqRespIncomingRequest event
144
162
  if (metrics) {
@@ -149,6 +167,7 @@ export class NetworkProcessor {
149
167
  metrics.gossipValidationQueue.concurrency.set({ topic }, this.gossipTopicConcurrency[topic]);
150
168
  }
151
169
  metrics.awaitingBlockGossipMessages.countPerSlot.set(this.unknownBlockGossipsubMessagesCount);
170
+ metrics.awaitingPayloadGossipMessages.countPerSlot.set(this.unknownPayloadGossipsubMessagesCount);
152
171
  // specific metric for beacon_attestation topic
153
172
  metrics.gossipValidationQueue.keyAge.reset();
154
173
  for (const ageMs of this.gossipQueues.beacon_attestation.getDataAgeMs()) {
@@ -163,6 +182,7 @@ export class NetworkProcessor {
163
182
  async stop() {
164
183
  this.events.off(NetworkEvent.pendingGossipsubMessage, this.onPendingGossipsubMessage);
165
184
  this.chain.emitter.off(routes.events.EventType.block, this.onBlockProcessed);
185
+ this.chain.emitter.off(routes.events.EventType.executionPayload, this.onPayloadEnvelopeProcessed);
166
186
  this.chain.emitter.off(ClockEvent.slot, this.onClockSlot);
167
187
  }
168
188
  dropAllJobs() {
@@ -179,7 +199,7 @@ export class NetworkProcessor {
179
199
  }
180
200
  /**
181
201
  * Search block via `ChainEvent.unknownBlockRoot` event
182
- * Note that slot is not necessarily the same to the block's slot but it can be used for a good prune strategy.
202
+ * Slot is the message slot, which is not necessarily the same as the block's slot, but it can be used for a good prune strategy.
183
203
  * In the rare case, if 2 messages on 2 slots search for the same root (for example beacon_attestation) we may emit the same root twice but BlockInputSync should handle it well.
184
204
  */
185
205
  searchUnknownBlock({ slot, root }, source, peer) {
@@ -192,9 +212,25 @@ export class NetworkProcessor {
192
212
  this.unknownBlocksBySlot.getOrDefault(slot).add(root);
193
213
  this.chain.emitter.emit(ChainEvent.unknownBlockRoot, { rootHex: root, peer, source });
194
214
  }
195
- onPendingGossipsubMessage(message) {
215
+ /**
216
+ * Search envelope via `ChainEvent.unknownEnvelopeBlockRoot` event
217
+ * Slot is the message slot, which is not necessarily the same as the envelope's slot, but it can be used for a good prune strategy.
218
+ * In the rare case, if 2 messages on 2 slots search for the same root (for example beacon_attestation) we may emit the same root twice but BlockInputSync should handle it well.
219
+ */
220
+ searchUnknownEnvelope({ slot, root }, source, peer) {
221
+ if (this.chain.seenPayloadEnvelope(root) ||
222
+ this.awaitingMessagesByPayloadBlockRoot.has(root) ||
223
+ this.unknownEnvelopesBySlot.getOrDefault(slot).has(root)) {
224
+ return;
225
+ }
226
+ this.unknownEnvelopesBySlot.getOrDefault(slot).add(root);
227
+ this.chain.emitter.emit(ChainEvent.unknownEnvelopeBlockRoot, { rootHex: root, peer, source });
228
+ }
229
+ onPendingGossipsubMessage = (message) => {
196
230
  const topicType = message.topic.type;
197
231
  const extractBlockSlotRootFn = this.extractBlockSlotRootFns[topicType];
232
+ // 1st extract round: make sure slot is in range and if block root is not available
233
+ // proactively search for it + queue the message
198
234
  const slotRoot = extractBlockSlotRootFn
199
235
  ? extractBlockSlotRootFn(message.msg.data, message.topic.boundary.fork)
200
236
  : null;
@@ -223,24 +259,153 @@ export class NetworkProcessor {
223
259
  return;
224
260
  }
225
261
  message.msgSlot = slot;
262
+ // this determines whether this message needs to wait for a Block or Envelope
263
+ // a message should only wait for what it voted for, hence we don't want to put it on both queues
264
+ let preprocessResult = { action: PreprocessAction.PushToQueue };
226
265
  // no need to check if root is a descendant of the current finalized block, it will be checked once we validate the message if needed
227
266
  if (root && !this.chain.forkChoice.hasBlockHexUnsafe(root)) {
267
+ // starting from GLOAS, unknown root from data_column_sidecar also falls into this case
228
268
  this.searchUnknownBlock({ slot, root }, BlockInputSource.network_processor, message.propagationSource.toString());
229
- if (this.unknownBlockGossipsubMessagesCount > MAX_QUEUED_UNKNOWN_BLOCK_GOSSIP_OBJECTS) {
230
- // No need to report the dropped job to gossip. It will be eventually pruned from the mcache
231
- this.metrics?.awaitingBlockGossipMessages.reject.inc({
232
- reason: ReprocessRejectReason.reached_limit,
233
- topic: topicType,
234
- });
235
- return;
269
+ // for beacon_attestation and beacon_aggregate_and_proof messages, this is only temporary.
270
+ // if "index = 1" we need to await for the Envelope instead
271
+ preprocessResult = { action: PreprocessAction.AwaitBlock, root };
272
+ }
273
+ // 2nd extract round for some specific topics
274
+ // we separate the search action from the await action
275
+ // beacon_block: proactively search for parent block/envelope across all forks, but never queue.
276
+ // BlockInputSync handles cascading recovery if the gossip handler throws.
277
+ if (topicType === GossipType.beacon_block) {
278
+ const parentRoot = getParentRootFromSignedBeaconBlockSerialized(message.msg.data);
279
+ if (parentRoot) {
280
+ if (ForkSeq[fork] >= ForkSeq.gloas) {
281
+ // GLOAS: also check parent envelope, same logic as execution_payload_bid
282
+ const parentBlockHash = getParentBlockHashFromGloasSignedBeaconBlockSerialized(message.msg.data);
283
+ if (parentBlockHash && !this.chain.forkChoice.getBlockHexAndBlockHash(parentRoot, parentBlockHash)) {
284
+ const protoBlock = this.chain.forkChoice.getBlockHexDefaultStatus(parentRoot);
285
+ if (protoBlock === null) {
286
+ this.searchUnknownBlock({ slot, root: parentRoot }, BlockInputSource.network_processor, message.propagationSource.toString());
287
+ }
288
+ else if (protoBlock.executionPayloadBlockHash &&
289
+ protoBlock.executionPayloadBlockHash !== parentBlockHash) {
290
+ // only search for the envelope by block root if we're sure there is one. Otherwise UnknownBlockSync will penalize the peer.
291
+ this.searchUnknownEnvelope({ slot, root: parentRoot }, BlockInputSource.network_processor, message.propagationSource.toString());
292
+ }
293
+ }
294
+ }
295
+ else if (!this.chain.forkChoice.hasBlockHexUnsafe(parentRoot)) {
296
+ this.searchUnknownBlock({ slot, root: parentRoot }, BlockInputSource.network_processor, message.propagationSource.toString());
297
+ }
236
298
  }
237
- this.metrics?.awaitingBlockGossipMessages.queue.inc({ topic: topicType });
238
- const awaitingGossipsubMessages = this.awaitingMessagesByBlockRoot.getOrDefault(root);
239
- awaitingGossipsubMessages.add(message);
240
- return;
299
+ preprocessResult = { action: PreprocessAction.PushToQueue };
241
300
  }
242
- this.pushPendingGossipsubMessageToQueue(message);
243
- }
301
+ if (ForkSeq[fork] >= ForkSeq.gloas) {
302
+ // specific check for each topic
303
+ // note that it's supposed to NOT queue beacon_block (handled above) and execution_payload because it's not a one-off;
304
+ // for those topics, gossip handlers will throw and BlockInputSync will handle a tree of them instead
305
+ switch (topicType) {
306
+ case GossipType.beacon_attestation:
307
+ case GossipType.beacon_aggregate_and_proof: {
308
+ if (root == null)
309
+ break;
310
+ const attIndex = topicType === GossipType.beacon_attestation
311
+ ? getDataIndexFromSingleAttestationSerialized(fork, message.msg.data)
312
+ : getDataIndexFromSignedAggregateAndProofSerialized(message.msg.data);
313
+ if (attIndex === 1 && !this.chain.forkChoice.hasPayloadHexUnsafe(root)) {
314
+ // attestation votes that the payload is available but it is not yet known
315
+ this.searchUnknownEnvelope({ slot, root }, BlockInputSource.network_processor, message.propagationSource.toString());
316
+ preprocessResult = { action: PreprocessAction.AwaitEnvelope, root };
317
+ }
318
+ break;
319
+ }
320
+ case GossipType.payload_attestation_message: {
321
+ if (root == null)
322
+ break;
323
+ const payloadPresent = getPayloadPresentFromPayloadAttestationMessageSerialized(message.msg.data);
324
+ if (payloadPresent && !this.chain.forkChoice.hasPayloadHexUnsafe(root)) {
325
+ // payload attestation votes that the payload is available but it is not yet known
326
+ this.searchUnknownEnvelope({ slot, root }, BlockInputSource.network_processor, message.propagationSource.toString());
327
+ // do not await the envelope, payload attestation processing only requires that the block is known
328
+ // also do not reset preprocessResult, we may already await for the block
329
+ }
330
+ break;
331
+ }
332
+ case GossipType.data_column_sidecar: {
333
+ if (root == null)
334
+ break;
335
+ if (!this.chain.forkChoice.hasPayloadHexUnsafe(root)) {
336
+ this.searchUnknownEnvelope({ slot, root }, BlockInputSource.network_processor, message.propagationSource.toString());
337
+ // do not await the envelope, we can do gossip validation
338
+ // also do not reset preprocessResult, we may already await for the block
339
+ }
340
+ break;
341
+ }
342
+ case GossipType.execution_payload: {
343
+ // extractBlockSlotRootFn does not return a root for this topic.
344
+ // Extract beacon_block_root directly and proactively trigger block sync if missing.
345
+ // Do NOT await the block — the handler runs immediately; BlockInputSync handles recovery.
346
+ const blockRoot = getBeaconBlockRootFromExecutionPayloadEnvelopeSerialized(message.msg.data);
347
+ if (blockRoot && !this.chain.forkChoice.hasBlockHexUnsafe(blockRoot)) {
348
+ this.searchUnknownBlock({ slot, root: blockRoot }, BlockInputSource.network_processor, message.propagationSource.toString());
349
+ }
350
+ // do not await the block, we want UnknownBlockSync to handle it.
351
+ preprocessResult = { action: PreprocessAction.PushToQueue };
352
+ break;
353
+ }
354
+ case GossipType.execution_payload_bid: {
355
+ // instead of searching for the message root, this searches for the parent root
356
+ const parentBlockRoot = getParentBlockRootFromSignedExecutionPayloadBidSerialized(message.msg.data);
357
+ const parentBlockHash = getParentBlockHashFromSignedExecutionPayloadBidSerialized(message.msg.data);
358
+ if (parentBlockRoot &&
359
+ parentBlockHash &&
360
+ !this.chain.forkChoice.getBlockHexAndBlockHash(parentBlockRoot, parentBlockHash)) {
361
+ const protoBlock = this.chain.forkChoice.getBlockHexDefaultStatus(parentBlockRoot);
362
+ if (protoBlock === null) {
363
+ this.searchUnknownBlock({ slot, root: parentBlockRoot }, BlockInputSource.network_processor, message.propagationSource.toString());
364
+ preprocessResult = { action: PreprocessAction.AwaitBlock, root: parentBlockRoot };
365
+ }
366
+ else if (protoBlock.executionPayloadBlockHash &&
367
+ protoBlock.executionPayloadBlockHash !== parentBlockHash) {
368
+ this.searchUnknownEnvelope({ slot, root: parentBlockRoot }, BlockInputSource.network_processor, message.propagationSource.toString());
369
+ preprocessResult = { action: PreprocessAction.AwaitEnvelope, root: parentBlockRoot };
370
+ }
371
+ }
372
+ break;
373
+ }
374
+ }
375
+ }
376
+ switch (preprocessResult.action) {
377
+ case PreprocessAction.PushToQueue:
378
+ this.pushPendingGossipsubMessageToQueue(message);
379
+ break;
380
+ case PreprocessAction.AwaitBlock: {
381
+ if (this.unknownBlockGossipsubMessagesCount > MAX_QUEUED_UNKNOWN_BLOCK_GOSSIP_OBJECTS) {
382
+ // No need to report the dropped job to gossip. It will be eventually pruned from the mcache
383
+ this.metrics?.awaitingBlockGossipMessages.reject.inc({
384
+ reason: ReprocessRejectReason.reached_limit,
385
+ topic: topicType,
386
+ });
387
+ return;
388
+ }
389
+ this.metrics?.awaitingBlockGossipMessages.queue.inc({ topic: topicType });
390
+ const awaitingGossipsubMessages = this.awaitingMessagesByBlockRoot.getOrDefault(preprocessResult.root);
391
+ awaitingGossipsubMessages.add(message);
392
+ break;
393
+ }
394
+ case PreprocessAction.AwaitEnvelope: {
395
+ if (this.unknownPayloadGossipsubMessagesCount > MAX_QUEUED_UNKNOWN_PAYLOAD_GOSSIP_OBJECTS) {
396
+ this.metrics?.awaitingPayloadGossipMessages.reject.inc({
397
+ reason: ReprocessRejectReason.reached_limit,
398
+ topic: topicType,
399
+ });
400
+ return;
401
+ }
402
+ this.metrics?.awaitingPayloadGossipMessages.queue.inc({ topic: topicType });
403
+ const awaitingPayloadGossipsubMessages = this.awaitingMessagesByPayloadBlockRoot.getOrDefault(preprocessResult.root);
404
+ awaitingPayloadGossipsubMessages.add(message);
405
+ break;
406
+ }
407
+ }
408
+ };
244
409
  pushPendingGossipsubMessageToQueue(message) {
245
410
  const topicType = message.topic.type;
246
411
  const droppedCount = this.gossipQueues[topicType].add(message);
@@ -251,7 +416,7 @@ export class NetworkProcessor {
251
416
  // Tentatively perform work
252
417
  this.executeWork();
253
418
  }
254
- async onBlockProcessed({ block: rootHex }) {
419
+ onBlockProcessed = async ({ block: rootHex }) => {
255
420
  const waitingGossipsubMessages = this.awaitingMessagesByBlockRoot.get(rootHex);
256
421
  if (!waitingGossipsubMessages || waitingGossipsubMessages.size === 0) {
257
422
  return;
@@ -273,8 +438,28 @@ export class NetworkProcessor {
273
438
  }
274
439
  }
275
440
  this.awaitingMessagesByBlockRoot.delete(rootHex);
276
- }
277
- onClockSlot(clockSlot) {
441
+ };
442
+ onPayloadEnvelopeProcessed = async ({ blockRoot: rootHex }) => {
443
+ const waitingGossipsubMessages = this.awaitingMessagesByPayloadBlockRoot.get(rootHex);
444
+ if (!waitingGossipsubMessages || waitingGossipsubMessages.size === 0) {
445
+ return;
446
+ }
447
+ const nowSec = Date.now() / 1000;
448
+ let count = 0;
449
+ for (const message of waitingGossipsubMessages) {
450
+ const topicType = message.topic.type;
451
+ this.metrics?.awaitingPayloadGossipMessages.waitSecBeforeResolve.set({ topic: topicType }, nowSec - message.seenTimestampSec);
452
+ this.metrics?.awaitingPayloadGossipMessages.resolve.inc({ topic: topicType });
453
+ this.pushPendingGossipsubMessageToQueue(message);
454
+ count++;
455
+ if (count === MAX_AWAITING_GOSSIP_OBJECTS_PER_TICK) {
456
+ count = 0;
457
+ await sleep(AWAITING_GOSSIP_OBJECTS_YIELD_EVERY_MS);
458
+ }
459
+ }
460
+ this.awaitingMessagesByPayloadBlockRoot.delete(rootHex);
461
+ };
462
+ onClockSlot = (clockSlot) => {
278
463
  const nowSec = Date.now() / 1000;
279
464
  const minSlot = clockSlot - MAX_UNKNOWN_ROOTS_SLOT_CACHE_SIZE;
280
465
  for (const [slot, roots] of this.unknownBlocksBySlot) {
@@ -297,7 +482,27 @@ export class NetworkProcessor {
297
482
  }
298
483
  this.unknownBlocksBySlot.delete(slot);
299
484
  }
300
- }
485
+ for (const [slot, roots] of this.unknownEnvelopesBySlot) {
486
+ if (slot > minSlot)
487
+ continue;
488
+ for (const rootHex of roots) {
489
+ const gossipMessages = this.awaitingMessagesByPayloadBlockRoot.get(rootHex);
490
+ if (gossipMessages !== undefined) {
491
+ for (const message of gossipMessages) {
492
+ const topicType = message.topic.type;
493
+ this.metrics?.awaitingPayloadGossipMessages.reject.inc({
494
+ topic: topicType,
495
+ reason: ReprocessRejectReason.expired,
496
+ });
497
+ this.metrics?.awaitingPayloadGossipMessages.waitSecBeforeReject.set({ topic: topicType, reason: ReprocessRejectReason.expired }, nowSec - message.seenTimestampSec);
498
+ // No need to report the dropped job to gossip. It will be eventually pruned from the mcache
499
+ }
500
+ this.awaitingMessagesByPayloadBlockRoot.delete(rootHex);
501
+ }
502
+ }
503
+ this.unknownEnvelopesBySlot.delete(slot);
504
+ }
505
+ };
301
506
  executeWork() {
302
507
  // TODO: Maybe de-bounce by timing the last time executeWork was run
303
508
  this.metrics?.networkProcessor.executeWorkCalls.inc();
@@ -418,5 +623,12 @@ export class NetworkProcessor {
418
623
  }
419
624
  return count;
420
625
  }
626
+ get unknownPayloadGossipsubMessagesCount() {
627
+ let count = 0;
628
+ for (const messages of this.awaitingMessagesByPayloadBlockRoot.values()) {
629
+ count += messages.size;
630
+ }
631
+ return count;
632
+ }
421
633
  }
422
634
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/network/processor/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/network/processor/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"beaconBlocksByRange.d.ts","sourceRoot":"","sources":["../../../../src/network/reqresp/handlers/beaconBlocksByRange.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAA4B,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AAE9E,OAAO,EAAC,KAAK,EAAE,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAC,YAAY,EAAC,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAC,SAAS,EAAC,MAAM,sBAAsB,CAAC;AAK/C,wBAAuB,qBAAqB,CAC1C,OAAO,EAAE,MAAM,CAAC,0BAA0B,EAC1C,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,aAAa,CAAC,gBAAgB,CAAC,CAoEjC;AAED,wBAAgB,kCAAkC,CAChD,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,MAAM,CAAC,0BAA0B,GACzC,KAAK,CAAC,0BAA0B,CAuBlC"}
1
+ {"version":3,"file":"beaconBlocksByRange.d.ts","sourceRoot":"","sources":["../../../../src/network/reqresp/handlers/beaconBlocksByRange.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAA4B,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AAE9E,OAAO,EAAC,KAAK,EAAE,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAC,YAAY,EAAC,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAC,SAAS,EAAC,MAAM,sBAAsB,CAAC;AAK/C,wBAAuB,qBAAqB,CAC1C,OAAO,EAAE,MAAM,CAAC,0BAA0B,EAC1C,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,aAAa,CAAC,gBAAgB,CAAC,CAoEjC;AAED,wBAAgB,kCAAkC,CAChD,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,MAAM,CAAC,0BAA0B,GACzC,KAAK,CAAC,0BAA0B,CAyBlC"}
@@ -66,10 +66,11 @@ export function validateBeaconBlocksByRangeRequest(config, request) {
66
66
  if (count < 1) {
67
67
  throw new ResponseError(RespStatus.INVALID_REQUEST, "count < 1");
68
68
  }
69
- // TODO: validate against MIN_EPOCHS_FOR_BLOCK_REQUESTS
70
69
  if (startSlot < GENESIS_SLOT) {
71
70
  throw new ResponseError(RespStatus.INVALID_REQUEST, "startSlot < genesis");
72
71
  }
72
+ // The phase0 req/resp spec uses MIN_EPOCHS_FOR_BLOCK_REQUESTS to define the minimum range peers MUST serve.
73
+ // Archival nodes may still serve older retained blocks to allow genesis sync.
73
74
  // step > 1 is deprecated, see https://github.com/ethereum/consensus-specs/pull/2856
74
75
  const maxRequestBlocks = isForkPostDeneb(config.getForkName(startSlot))
75
76
  ? config.MAX_REQUEST_BLOCKS_DENEB
@@ -1 +1 @@
1
- {"version":3,"file":"beaconBlocksByRange.js","sourceRoot":"","sources":["../../../../src/network/reqresp/handlers/beaconBlocksByRange.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,YAAY,EAAE,eAAe,EAAE,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAC,UAAU,EAAE,aAAa,EAAmB,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAC,kBAAkB,EAAC,MAAM,4BAA4B,CAAC;AAI9D,OAAO,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAEhD,kBAAkB;AAElB,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,qBAAqB,CAC1C,OAA0C,EAC1C,KAAmB,EACnB,EAAa,EACb,MAAc,EACd,UAAkB,EACe;IACjC,MAAM,EAAC,SAAS,EAAE,KAAK,EAAC,GAAG,kCAAkC,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrF,MAAM,OAAO,GAAG,SAAS,GAAG,KAAK,CAAC;IAElC,MAAM,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC;IAClC,sHAAsH;IACtH,2CAA2C;IAC3C,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,0BAA0B,EAAE,CAAC;IAEpE,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACrD,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAI,SAAS,GAAG,KAAK,CAAC,qBAAqB,EAAE,CAAC;QACxE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,oEAAoE,EAAE;YACzF,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC;YAC/B,MAAM,EAAE,UAAU;SACnB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,4BAA4B;IAC5B,IAAI,SAAS,IAAI,aAAa,EAAE,CAAC;QAC/B,8BAA8B;QAC9B,IAAI,KAAK,EAAE,MAAM,EAAC,GAAG,EAAE,KAAK,EAAC,IAAI,SAAS,CAAC,mBAAmB,CAAC,EAAC,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAC,CAAC,EAAE,CAAC;YAC9F,MAAM;gBACJ,IAAI,EAAE,KAAK;gBACX,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;aAC5F,CAAC;QACJ,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,IAAI,OAAO,GAAG,aAAa,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAC7C,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC;QACrC,+FAA+F;QAC/F,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,oBAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;QAC3F,gFAAgF;QAEhF,kDAAkD;QAClD,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAE3B,kDAAkD;YAClD,IAAI,KAAK,CAAC,IAAI,IAAI,SAAS,IAAI,KAAK,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC;gBACpD,2GAA2G;gBAC3G,uGAAuG;gBACvG,8CAA8C;gBAC9C,yJAAyJ;gBAEzJ,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBACzE,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,MAAM,IAAI,aAAa,CACrB,UAAU,CAAC,YAAY,EACvB,qBAAqB,KAAK,CAAC,SAAS,SAAS,KAAK,CAAC,IAAI,eAAe,SAAS,YAAY,OAAO,kBAAkB,aAAa,EAAE,CACpI,CAAC;gBACJ,CAAC;gBAED,MAAM;oBACJ,IAAI,EAAE,UAAU,CAAC,KAAK;oBACtB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;iBAC9E,CAAC;YACJ,CAAC;YAED,4CAA4C;iBACvC,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;gBAC/B,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;AAAA,CACF;AAED,MAAM,UAAU,kCAAkC,CAChD,MAAoB,EACpB,OAA0C,EACR;IAClC,MAAM,EAAC,SAAS,EAAC,GAAG,OAAO,CAAC;IAC5B,IAAI,EAAC,KAAK,EAAC,GAAG,OAAO,CAAC;IAEtB,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,MAAM,IAAI,aAAa,CAAC,UAAU,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IACnE,CAAC;IACD,uDAAuD;IACvD,IAAI,SAAS,GAAG,YAAY,EAAE,CAAC;QAC7B,MAAM,IAAI,aAAa,CAAC,UAAU,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC;IAC7E,CAAC;IAED,oFAAoF;IAEpF,MAAM,gBAAgB,GAAG,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACrE,CAAC,CAAC,MAAM,CAAC,wBAAwB;QACjC,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC;IAE9B,IAAI,KAAK,GAAG,gBAAgB,EAAE,CAAC;QAC7B,KAAK,GAAG,gBAAgB,CAAC;IAC3B,CAAC;IAED,OAAO,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;AAAA,CAC3B"}
1
+ {"version":3,"file":"beaconBlocksByRange.js","sourceRoot":"","sources":["../../../../src/network/reqresp/handlers/beaconBlocksByRange.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"beaconBlocksByRoot.d.ts","sourceRoot":"","sources":["../../../../src/network/reqresp/handlers/beaconBlocksByRoot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AAGnD,OAAO,EAAC,YAAY,EAAC,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAC,yBAAyB,EAAC,MAAM,wBAAwB,CAAC;AAEjE,wBAAuB,oBAAoB,CACzC,WAAW,EAAE,yBAAyB,EACtC,KAAK,EAAE,YAAY,GAClB,aAAa,CAAC,gBAAgB,CAAC,CAYjC"}
1
+ {"version":3,"file":"beaconBlocksByRoot.d.ts","sourceRoot":"","sources":["../../../../src/network/reqresp/handlers/beaconBlocksByRoot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AAGnD,OAAO,EAAC,YAAY,EAAC,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAC,yBAAyB,EAAC,MAAM,wBAAwB,CAAC;AAEjE,wBAAuB,oBAAoB,CACzC,WAAW,EAAE,yBAAyB,EACtC,KAAK,EAAE,YAAY,GAClB,aAAa,CAAC,gBAAgB,CAAC,CAejC"}
@@ -1,6 +1,8 @@
1
1
  import { computeEpochAtSlot } from "@lodestar/state-transition";
2
2
  import { toRootHex } from "@lodestar/utils";
3
3
  export async function* onBeaconBlocksByRoot(requestBody, chain) {
4
+ // The phase0 req/resp spec uses MIN_EPOCHS_FOR_BLOCK_REQUESTS to define the minimum range peers MUST serve.
5
+ // Archival nodes may still serve older retained blocks to allow genesis sync.
4
6
  for (const blockRoot of requestBody) {
5
7
  const root = blockRoot;
6
8
  const block = await chain.getSerializedBlockByRoot(toRootHex(root));
@@ -1 +1 @@
1
- {"version":3,"file":"beaconBlocksByRoot.js","sourceRoot":"","sources":["../../../../src/network/reqresp/handlers/beaconBlocksByRoot.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,kBAAkB,EAAC,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAI1C,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,oBAAoB,CACzC,WAAsC,EACtC,KAAmB,EACc;IACjC,KAAK,MAAM,SAAS,IAAI,WAAW,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,SAAS,CAAC;QACvB,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,wBAAwB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAEpE,IAAI,KAAK,EAAE,CAAC;YACV,MAAM;gBACJ,IAAI,EAAE,KAAK,CAAC,KAAK;gBACjB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;aAC9E,CAAC;QACJ,CAAC;IACH,CAAC;AAAA,CACF"}
1
+ {"version":3,"file":"beaconBlocksByRoot.js","sourceRoot":"","sources":["../../../../src/network/reqresp/handlers/beaconBlocksByRoot.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,kBAAkB,EAAC,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAI1C,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,oBAAoB,CACzC,WAAsC,EACtC,KAAmB,EACc;IACjC,4GAA4G;IAC5G,8EAA8E;IAE9E,KAAK,MAAM,SAAS,IAAI,WAAW,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,SAAS,CAAC;QACvB,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,wBAAwB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAEpE,IAAI,KAAK,EAAE,CAAC;YACV,MAAM;gBACJ,IAAI,EAAE,KAAK,CAAC,KAAK;gBACjB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;aAC9E,CAAC;QACJ,CAAC;IACH,CAAC;AAAA,CACF"}
@@ -1,9 +1,9 @@
1
1
  import { ChainConfig } from "@lodestar/config";
2
2
  import { ResponseOutgoing } from "@lodestar/reqresp";
3
- import { Slot, deneb } from "@lodestar/types";
3
+ import { Epoch, Slot, deneb } from "@lodestar/types";
4
4
  import { IBeaconChain } from "../../../chain/index.js";
5
5
  import { IBeaconDb } from "../../../db/index.js";
6
6
  export declare function onBlobSidecarsByRange(request: deneb.BlobSidecarsByRangeRequest, chain: IBeaconChain, db: IBeaconDb): AsyncIterable<ResponseOutgoing>;
7
7
  export declare function iterateBlobBytesFromWrapper(chain: IBeaconChain, blobSideCarsBytesWrapped: Uint8Array, blockSlot: Slot): Iterable<ResponseOutgoing>;
8
- export declare function validateBlobSidecarsByRangeRequest(config: ChainConfig, request: deneb.BlobSidecarsByRangeRequest): deneb.BlobSidecarsByRangeRequest;
8
+ export declare function validateBlobSidecarsByRangeRequest(config: ChainConfig, currentEpoch: Epoch, request: deneb.BlobSidecarsByRangeRequest): deneb.BlobSidecarsByRangeRequest;
9
9
  //# sourceMappingURL=blobSidecarsByRange.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"blobSidecarsByRange.d.ts","sourceRoot":"","sources":["../../../../src/network/reqresp/handlers/blobSidecarsByRange.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EAA4B,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AAE9E,OAAO,EAAC,IAAI,EAAE,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAC,YAAY,EAAC,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAC,SAAS,EAAC,MAAM,sBAAsB,CAAC;AAG/C,wBAAuB,qBAAqB,CAC1C,OAAO,EAAE,KAAK,CAAC,0BAA0B,EACzC,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,SAAS,GACZ,aAAa,CAAC,gBAAgB,CAAC,CAoDjC;AAED,wBAAiB,2BAA2B,CAC1C,KAAK,EAAE,YAAY,EACnB,wBAAwB,EAAE,UAAU,EACpC,SAAS,EAAE,IAAI,GACd,QAAQ,CAAC,gBAAgB,CAAC,CAoB5B;AAED,wBAAgB,kCAAkC,CAChD,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,KAAK,CAAC,0BAA0B,GACxC,KAAK,CAAC,0BAA0B,CAiBlC"}
1
+ {"version":3,"file":"blobSidecarsByRange.d.ts","sourceRoot":"","sources":["../../../../src/network/reqresp/handlers/blobSidecarsByRange.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EAA4B,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AAE9E,OAAO,EAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAEnD,OAAO,EAAC,YAAY,EAAC,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAC,SAAS,EAAC,MAAM,sBAAsB,CAAC;AAG/C,wBAAuB,qBAAqB,CAC1C,OAAO,EAAE,KAAK,CAAC,0BAA0B,EACzC,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,SAAS,GACZ,aAAa,CAAC,gBAAgB,CAAC,CAoDjC;AAED,wBAAiB,2BAA2B,CAC1C,KAAK,EAAE,YAAY,EACnB,wBAAwB,EAAE,UAAU,EACpC,SAAS,EAAE,IAAI,GACd,QAAQ,CAAC,gBAAgB,CAAC,CAoB5B;AAED,wBAAgB,kCAAkC,CAChD,MAAM,EAAE,WAAW,EACnB,YAAY,EAAE,KAAK,EACnB,OAAO,EAAE,KAAK,CAAC,0BAA0B,GACxC,KAAK,CAAC,0BAA0B,CA4BlC"}
@@ -5,7 +5,7 @@ import { fromHex } from "@lodestar/utils";
5
5
  import { BLOB_SIDECARS_IN_WRAPPER_INDEX } from "../../../db/repositories/blobSidecars.js";
6
6
  export async function* onBlobSidecarsByRange(request, chain, db) {
7
7
  // Non-finalized range of blobs
8
- const { startSlot, count } = validateBlobSidecarsByRangeRequest(chain.config, request);
8
+ const { startSlot, count } = validateBlobSidecarsByRangeRequest(chain.config, chain.clock.currentEpoch, request);
9
9
  const endSlot = startSlot + count;
10
10
  const finalized = db.blobSidecarsArchive;
11
11
  const unfinalized = db.blobSidecars;
@@ -63,16 +63,20 @@ export function* iterateBlobBytesFromWrapper(chain, blobSideCarsBytesWrapped, bl
63
63
  };
64
64
  }
65
65
  }
66
- export function validateBlobSidecarsByRangeRequest(config, request) {
66
+ export function validateBlobSidecarsByRangeRequest(config, currentEpoch, request) {
67
67
  const { startSlot } = request;
68
68
  let { count } = request;
69
69
  if (count < 1) {
70
70
  throw new ResponseError(RespStatus.INVALID_REQUEST, "count < 1");
71
71
  }
72
- // TODO: validate against MIN_EPOCHS_FOR_BLOCK_REQUESTS
73
72
  if (startSlot < GENESIS_SLOT) {
74
73
  throw new ResponseError(RespStatus.INVALID_REQUEST, "startSlot < genesis");
75
74
  }
75
+ // Spec: [max(current_epoch - MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS, DENEB_FORK_EPOCH), current_epoch]
76
+ const minimumRequestEpoch = Math.max(currentEpoch - config.MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS, config.DENEB_FORK_EPOCH);
77
+ if (computeEpochAtSlot(startSlot) < minimumRequestEpoch) {
78
+ throw new ResponseError(RespStatus.RESOURCE_UNAVAILABLE, "startSlot is before MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS");
79
+ }
76
80
  if (count > config.MAX_REQUEST_BLOCKS_DENEB) {
77
81
  count = config.MAX_REQUEST_BLOCKS_DENEB;
78
82
  }
@@ -1 +1 @@
1
- {"version":3,"file":"blobSidecarsByRange.js","sourceRoot":"","sources":["../../../../src/network/reqresp/handlers/blobSidecarsByRange.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,uBAAuB,EAAE,YAAY,EAAC,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAC,UAAU,EAAE,aAAa,EAAmB,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAC,kBAAkB,EAAC,MAAM,4BAA4B,CAAC;AAE9D,OAAO,EAAC,OAAO,EAAC,MAAM,iBAAiB,CAAC;AAGxC,OAAO,EAAC,8BAA8B,EAAC,MAAM,0CAA0C,CAAC;AAExF,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,qBAAqB,CAC1C,OAAyC,EACzC,KAAmB,EACnB,EAAa,EACoB;IACjC,+BAA+B;IAC/B,MAAM,EAAC,SAAS,EAAE,KAAK,EAAC,GAAG,kCAAkC,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrF,MAAM,OAAO,GAAG,SAAS,GAAG,KAAK,CAAC;IAElC,MAAM,SAAS,GAAG,EAAE,CAAC,mBAAmB,CAAC;IACzC,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC;IACpC,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC;IAEhE,2BAA2B;IAC3B,IAAI,SAAS,IAAI,aAAa,EAAE,CAAC;QAC/B,8BAA8B;QAC9B,IAAI,KAAK,EAAE,MAAM,EAAC,GAAG,EAAE,KAAK,EAAE,wBAAwB,EAAC,IAAI,SAAS,CAAC,mBAAmB,CAAC;YACvF,GAAG,EAAE,SAAS;YACd,EAAE,EAAE,OAAO;SACZ,CAAC,EAAE,CAAC;YACH,KAAK,CAAC,CAAC,2BAA2B,CAAC,KAAK,EAAE,wBAAwB,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAChG,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,IAAI,OAAO,GAAG,aAAa,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAC7C,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC;QACrC,+FAA+F;QAC/F,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,oBAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;QAE3F,kDAAkD;QAClD,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAE3B,iDAAiD;YACjD,IAAI,KAAK,CAAC,IAAI,IAAI,SAAS,IAAI,KAAK,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC;gBACpD,2GAA2G;gBAC3G,uGAAuG;gBACvG,8CAA8C;gBAC9C,yJAAyJ;gBAEzJ,MAAM,wBAAwB,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;gBACvF,IAAI,CAAC,wBAAwB,EAAE,CAAC;oBAC9B,2CAA2C;oBAC3C,MAAM,IAAI,aAAa,CAAC,UAAU,CAAC,YAAY,EAAE,oBAAoB,KAAK,CAAC,SAAS,SAAS,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC7G,CAAC;gBACD,KAAK,CAAC,CAAC,2BAA2B,CAAC,KAAK,EAAE,wBAAwB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAClF,CAAC;YAED,4CAA4C;iBACvC,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;gBAC/B,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;AAAA,CACF;AAED,MAAM,SAAS,CAAC,CAAC,2BAA2B,CAC1C,KAAmB,EACnB,wBAAoC,EACpC,SAAe,EACa;IAC5B,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAC5F,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,GAAG,uBAAuB,CAAC;IAEvE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC;QAC9C,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,KAAK,CACjD,KAAK,GAAG,uBAAuB,EAC/B,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,uBAAuB,CACtC,CAAC;QACF,IAAI,gBAAgB,CAAC,MAAM,KAAK,uBAAuB,EAAE,CAAC;YACxD,MAAM,IAAI,aAAa,CACrB,UAAU,CAAC,YAAY,EACvB,6BAA6B,KAAK,iBAAiB,gBAAgB,CAAC,MAAM,aAAa,uBAAuB,aAAa,SAAS,aAAa,QAAQ,EAAE,CAC5J,CAAC;QACJ,CAAC;QACD,MAAM;YACJ,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;SAC7E,CAAC;IACJ,CAAC;AAAA,CACF;AAED,MAAM,UAAU,kCAAkC,CAChD,MAAmB,EACnB,OAAyC,EACP;IAClC,MAAM,EAAC,SAAS,EAAC,GAAG,OAAO,CAAC;IAC5B,IAAI,EAAC,KAAK,EAAC,GAAG,OAAO,CAAC;IAEtB,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,MAAM,IAAI,aAAa,CAAC,UAAU,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IACnE,CAAC;IACD,uDAAuD;IACvD,IAAI,SAAS,GAAG,YAAY,EAAE,CAAC;QAC7B,MAAM,IAAI,aAAa,CAAC,UAAU,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,KAAK,GAAG,MAAM,CAAC,wBAAwB,EAAE,CAAC;QAC5C,KAAK,GAAG,MAAM,CAAC,wBAAwB,CAAC;IAC1C,CAAC;IAED,OAAO,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;AAAA,CAC3B"}
1
+ {"version":3,"file":"blobSidecarsByRange.js","sourceRoot":"","sources":["../../../../src/network/reqresp/handlers/blobSidecarsByRange.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"blobSidecarsByRoot.d.ts","sourceRoot":"","sources":["../../../../src/network/reqresp/handlers/blobSidecarsByRoot.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AAI9E,OAAO,EAAC,YAAY,EAAC,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAC,yBAAyB,EAAC,MAAM,wBAAwB,CAAC;AAEjE,wBAAuB,oBAAoB,CACzC,WAAW,EAAE,yBAAyB,EACtC,KAAK,EAAE,YAAY,GAClB,aAAa,CAAC,gBAAgB,CAAC,CA8CjC"}
1
+ {"version":3,"file":"blobSidecarsByRoot.d.ts","sourceRoot":"","sources":["../../../../src/network/reqresp/handlers/blobSidecarsByRoot.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AAI9E,OAAO,EAAC,YAAY,EAAC,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAC,yBAAyB,EAAC,MAAM,wBAAwB,CAAC;AAEjE,wBAAuB,oBAAoB,CACzC,WAAW,EAAE,yBAAyB,EACtC,KAAK,EAAE,YAAY,GAClB,aAAa,CAAC,gBAAgB,CAAC,CAyDjC"}
@@ -4,6 +4,9 @@ import { computeEpochAtSlot } from "@lodestar/state-transition";
4
4
  import { toRootHex } from "@lodestar/utils";
5
5
  export async function* onBlobSidecarsByRoot(requestBody, chain) {
6
6
  const finalizedSlot = chain.forkChoice.getFinalizedBlock().slot;
7
+ // Spec: [max(current_epoch - MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS, DENEB_FORK_EPOCH), current_epoch]
8
+ const currentEpoch = chain.clock.currentEpoch;
9
+ const minimumRequestEpoch = Math.max(currentEpoch - chain.config.MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS, chain.config.DENEB_FORK_EPOCH);
7
10
  // In sidecars by root request, it can be expected that sidecar requests will be come
8
11
  // clustured by blockroots, and this helps us save db lookups once we load sidecars
9
12
  // for a root
@@ -18,6 +21,9 @@ export async function* onBlobSidecarsByRoot(requestBody, chain) {
18
21
  if (!block || block.slot <= finalizedSlot) {
19
22
  continue;
20
23
  }
24
+ if (computeEpochAtSlot(block.slot) < minimumRequestEpoch) {
25
+ continue;
26
+ }
21
27
  // Check if we need to load sidecars for a new block root
22
28
  if (lastFetchedSideCars === null || lastFetchedSideCars.blockRoot !== blockRootHex) {
23
29
  const blobSidecarsBytes = await chain.getSerializedBlobSidecars(block.slot, blockRootHex);
@@ -1 +1 @@
1
- {"version":3,"file":"blobSidecarsByRoot.js","sourceRoot":"","sources":["../../../../src/network/reqresp/handlers/blobSidecarsByRoot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,uBAAuB,EAAC,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAC,UAAU,EAAE,aAAa,EAAmB,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAC,kBAAkB,EAAC,MAAM,4BAA4B,CAAC;AAE9D,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAI1C,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,oBAAoB,CACzC,WAAsC,EACtC,KAAmB,EACc;IACjC,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC;IAEhE,qFAAqF;IACrF,mFAAmF;IACnF,aAAa;IACb,IAAI,mBAAmB,GAAmD,IAAI,CAAC;IAE/E,KAAK,MAAM,cAAc,IAAI,WAAW,EAAE,CAAC;QACzC,MAAM,EAAC,SAAS,EAAE,KAAK,EAAC,GAAG,cAAc,CAAC;QAC1C,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC;QAEtE,2CAA2C;QAC3C,8FAA8F;QAC9F,+JAA+J;QAC/J,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,IAAI,aAAa,EAAE,CAAC;YAC1C,SAAS;QACX,CAAC;QAED,yDAAyD;QACzD,IAAI,mBAAmB,KAAK,IAAI,IAAI,mBAAmB,CAAC,SAAS,KAAK,YAAY,EAAE,CAAC;YACnF,MAAM,iBAAiB,GAAG,MAAM,KAAK,CAAC,yBAAyB,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAC1F,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACvB,2CAA2C;gBAC3C,MAAM,IAAI,aAAa,CAAC,UAAU,CAAC,YAAY,EAAE,oBAAoB,KAAK,CAAC,SAAS,SAAS,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7G,CAAC;YAED,mBAAmB,GAAG,EAAC,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,iBAAiB,EAAC,CAAC;QAC5E,CAAC;QAED,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAC,KAAK,CACtD,KAAK,GAAG,uBAAuB,EAC/B,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,uBAAuB,CACtC,CAAC;QACF,IAAI,gBAAgB,CAAC,MAAM,KAAK,uBAAuB,EAAE,CAAC;YACxD,MAAM,KAAK,CACT,6CAA6C,YAAY,UAAU,KAAK,qBAAqB,gBAAgB,CAAC,MAAM,aAAa,uBAAuB,EAAE,CAC3J,CAAC;QACJ,CAAC;QAED,MAAM;YACJ,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SAC9E,CAAC;IACJ,CAAC;AAAA,CACF"}
1
+ {"version":3,"file":"blobSidecarsByRoot.js","sourceRoot":"","sources":["../../../../src/network/reqresp/handlers/blobSidecarsByRoot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,uBAAuB,EAAC,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAC,UAAU,EAAE,aAAa,EAAmB,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAC,kBAAkB,EAAC,MAAM,4BAA4B,CAAC;AAE9D,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAI1C,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,oBAAoB,CACzC,WAAsC,EACtC,KAAmB,EACc;IACjC,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC;IAEhE,sGAAsG;IACtG,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC;IAC9C,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAClC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,qCAAqC,EACjE,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAC9B,CAAC;IAEF,qFAAqF;IACrF,mFAAmF;IACnF,aAAa;IACb,IAAI,mBAAmB,GAAmD,IAAI,CAAC;IAE/E,KAAK,MAAM,cAAc,IAAI,WAAW,EAAE,CAAC;QACzC,MAAM,EAAC,SAAS,EAAE,KAAK,EAAC,GAAG,cAAc,CAAC;QAC1C,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC;QAEtE,2CAA2C;QAC3C,8FAA8F;QAC9F,+JAA+J;QAC/J,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,IAAI,aAAa,EAAE,CAAC;YAC1C,SAAS;QACX,CAAC;QAED,IAAI,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,mBAAmB,EAAE,CAAC;YACzD,SAAS;QACX,CAAC;QAED,yDAAyD;QACzD,IAAI,mBAAmB,KAAK,IAAI,IAAI,mBAAmB,CAAC,SAAS,KAAK,YAAY,EAAE,CAAC;YACnF,MAAM,iBAAiB,GAAG,MAAM,KAAK,CAAC,yBAAyB,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAC1F,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACvB,2CAA2C;gBAC3C,MAAM,IAAI,aAAa,CAAC,UAAU,CAAC,YAAY,EAAE,oBAAoB,KAAK,CAAC,SAAS,SAAS,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7G,CAAC;YAED,mBAAmB,GAAG,EAAC,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,iBAAiB,EAAC,CAAC;QAC5E,CAAC;QAED,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAC,KAAK,CACtD,KAAK,GAAG,uBAAuB,EAC/B,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,uBAAuB,CACtC,CAAC;QACF,IAAI,gBAAgB,CAAC,MAAM,KAAK,uBAAuB,EAAE,CAAC;YACxD,MAAM,KAAK,CACT,6CAA6C,YAAY,UAAU,KAAK,qBAAqB,gBAAgB,CAAC,MAAM,aAAa,uBAAuB,EAAE,CAC3J,CAAC;QACJ,CAAC;QAED,MAAM;YACJ,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SAC9E,CAAC;IACJ,CAAC;AAAA,CACF"}