@lodestar/beacon-node 1.51.0-dev.b3beff2246 → 1.51.0-dev.b74e8e576d

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 (588) hide show
  1. package/lib/api/impl/api.js +1 -1
  2. package/lib/api/impl/api.js.map +1 -1
  3. package/lib/api/impl/beacon/blocks/index.d.ts +2 -1
  4. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  5. package/lib/api/impl/beacon/blocks/index.js +48 -95
  6. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  7. package/lib/api/impl/beacon/index.d.ts +2 -1
  8. package/lib/api/impl/beacon/index.d.ts.map +1 -1
  9. package/lib/api/impl/beacon/index.js +2 -2
  10. package/lib/api/impl/beacon/index.js.map +1 -1
  11. package/lib/api/impl/beacon/pool/index.d.ts.map +1 -1
  12. package/lib/api/impl/beacon/pool/index.js +22 -2
  13. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  14. package/lib/api/impl/beacon/state/utils.d.ts +1 -1
  15. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
  16. package/lib/api/impl/validator/index.d.ts +6 -0
  17. package/lib/api/impl/validator/index.d.ts.map +1 -1
  18. package/lib/api/impl/validator/index.js +42 -26
  19. package/lib/api/impl/validator/index.js.map +1 -1
  20. package/lib/api/options.d.ts +2 -0
  21. package/lib/api/options.d.ts.map +1 -1
  22. package/lib/api/options.js +1 -0
  23. package/lib/api/options.js.map +1 -1
  24. package/lib/chain/GetBlobsTracker.d.ts +13 -2
  25. package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
  26. package/lib/chain/GetBlobsTracker.js +69 -35
  27. package/lib/chain/GetBlobsTracker.js.map +1 -1
  28. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  29. package/lib/chain/archiveStore/archiveStore.js +1 -0
  30. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  31. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +4 -0
  32. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -1
  33. package/lib/chain/archiveStore/utils/archiveBlocks.js +61 -97
  34. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  35. package/lib/chain/blocks/blockInput/blockInput.d.ts +11 -56
  36. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
  37. package/lib/chain/blocks/blockInput/blockInput.js +5 -241
  38. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  39. package/lib/chain/blocks/blockInput/errors.d.ts +2 -4
  40. package/lib/chain/blocks/blockInput/errors.d.ts.map +1 -1
  41. package/lib/chain/blocks/blockInput/errors.js.map +1 -1
  42. package/lib/chain/blocks/blockInput/types.d.ts +2 -18
  43. package/lib/chain/blocks/blockInput/types.d.ts.map +1 -1
  44. package/lib/chain/blocks/blockInput/types.js +0 -1
  45. package/lib/chain/blocks/blockInput/types.js.map +1 -1
  46. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  47. package/lib/chain/blocks/importBlock.js +40 -56
  48. package/lib/chain/blocks/importBlock.js.map +1 -1
  49. package/lib/chain/blocks/importExecutionPayload.d.ts +10 -11
  50. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  51. package/lib/chain/blocks/importExecutionPayload.js +34 -19
  52. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  53. package/lib/chain/blocks/index.d.ts.map +1 -1
  54. package/lib/chain/blocks/index.js +4 -4
  55. package/lib/chain/blocks/index.js.map +1 -1
  56. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts +12 -9
  57. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts.map +1 -1
  58. package/lib/chain/blocks/payloadEnvelopeProcessor.js +24 -19
  59. package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -1
  60. package/lib/chain/blocks/types.d.ts +4 -20
  61. package/lib/chain/blocks/types.d.ts.map +1 -1
  62. package/lib/chain/blocks/types.js +0 -24
  63. package/lib/chain/blocks/types.js.map +1 -1
  64. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  65. package/lib/chain/blocks/verifyBlock.js +18 -7
  66. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  67. package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts.map +1 -1
  68. package/lib/chain/blocks/verifyBlocksDataAvailability.js +14 -2
  69. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  70. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +1 -1
  71. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  72. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +7 -3
  73. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  74. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -1
  75. package/lib/chain/blocks/verifyBlocksSanityChecks.js +4 -0
  76. package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
  77. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  78. package/lib/chain/blocks/verifyBlocksSignatures.js +7 -5
  79. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  80. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts +3 -3
  81. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts.map +1 -1
  82. package/lib/chain/blocks/verifyPayloadsDataAvailability.js +11 -6
  83. package/lib/chain/blocks/verifyPayloadsDataAvailability.js.map +1 -1
  84. package/lib/chain/blocks/writeBlockInputToDb.d.ts +0 -2
  85. package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +1 -1
  86. package/lib/chain/blocks/writeBlockInputToDb.js +6 -24
  87. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  88. package/lib/chain/bls/interface.d.ts +2 -0
  89. package/lib/chain/bls/interface.d.ts.map +1 -1
  90. package/lib/chain/bls/multithread/index.d.ts.map +1 -1
  91. package/lib/chain/bls/multithread/index.js +13 -11
  92. package/lib/chain/bls/multithread/index.js.map +1 -1
  93. package/lib/chain/bls/multithread/types.d.ts +1 -1
  94. package/lib/chain/bls/multithread/types.d.ts.map +1 -1
  95. package/lib/chain/bls/multithread/worker.js +1 -1
  96. package/lib/chain/bls/multithread/worker.js.map +1 -1
  97. package/lib/chain/bls/singleThread.js +1 -1
  98. package/lib/chain/bls/singleThread.js.map +1 -1
  99. package/lib/chain/bls/utils.js +1 -1
  100. package/lib/chain/bls/utils.js.map +1 -1
  101. package/lib/chain/chain.d.ts +25 -4
  102. package/lib/chain/chain.d.ts.map +1 -1
  103. package/lib/chain/chain.js +124 -43
  104. package/lib/chain/chain.js.map +1 -1
  105. package/lib/chain/emitter.d.ts +7 -7
  106. package/lib/chain/emitter.d.ts.map +1 -1
  107. package/lib/chain/emitter.js +5 -5
  108. package/lib/chain/emitter.js.map +1 -1
  109. package/lib/chain/errors/blockError.d.ts +1 -1
  110. package/lib/chain/errors/blockError.d.ts.map +1 -1
  111. package/lib/chain/errors/blockError.js +1 -1
  112. package/lib/chain/errors/blockError.js.map +1 -1
  113. package/lib/chain/errors/executionPayloadEnvelope.d.ts +7 -0
  114. package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
  115. package/lib/chain/errors/executionPayloadEnvelope.js +1 -0
  116. package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
  117. package/lib/chain/errors/index.d.ts +0 -1
  118. package/lib/chain/errors/index.d.ts.map +1 -1
  119. package/lib/chain/errors/index.js +0 -1
  120. package/lib/chain/errors/index.js.map +1 -1
  121. package/lib/chain/forkChoice/index.d.ts +11 -1
  122. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  123. package/lib/chain/forkChoice/index.js +11 -0
  124. package/lib/chain/forkChoice/index.js.map +1 -1
  125. package/lib/chain/forkChoiceExecutionEngine.d.ts +51 -0
  126. package/lib/chain/forkChoiceExecutionEngine.d.ts.map +1 -0
  127. package/lib/chain/forkChoiceExecutionEngine.js +117 -0
  128. package/lib/chain/forkChoiceExecutionEngine.js.map +1 -0
  129. package/lib/chain/interface.d.ts +9 -7
  130. package/lib/chain/interface.d.ts.map +1 -1
  131. package/lib/chain/interface.js.map +1 -1
  132. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +17 -4
  133. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  134. package/lib/chain/opPools/aggregatedAttestationPool.js +199 -46
  135. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  136. package/lib/chain/opPools/attestationPool.d.ts +1 -1
  137. package/lib/chain/opPools/attestationPool.d.ts.map +1 -1
  138. package/lib/chain/opPools/attestationPool.js +15 -4
  139. package/lib/chain/opPools/attestationPool.js.map +1 -1
  140. package/lib/chain/opPools/inclusionListStore.d.ts.map +1 -1
  141. package/lib/chain/opPools/inclusionListStore.js +2 -2
  142. package/lib/chain/opPools/inclusionListStore.js.map +1 -1
  143. package/lib/chain/opPools/index.d.ts +1 -0
  144. package/lib/chain/opPools/index.d.ts.map +1 -1
  145. package/lib/chain/opPools/index.js +1 -0
  146. package/lib/chain/opPools/index.js.map +1 -1
  147. package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -1
  148. package/lib/chain/opPools/payloadAttestationPool.js +17 -7
  149. package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
  150. package/lib/chain/opPools/singleAttestationPool.d.ts +77 -0
  151. package/lib/chain/opPools/singleAttestationPool.d.ts.map +1 -0
  152. package/lib/chain/opPools/singleAttestationPool.js +209 -0
  153. package/lib/chain/opPools/singleAttestationPool.js.map +1 -0
  154. package/lib/chain/opPools/syncCommitteeMessagePool.d.ts.map +1 -1
  155. package/lib/chain/opPools/syncCommitteeMessagePool.js +9 -3
  156. package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
  157. package/lib/chain/opPools/syncContributionAndProofPool.d.ts.map +1 -1
  158. package/lib/chain/opPools/syncContributionAndProofPool.js +11 -3
  159. package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
  160. package/lib/chain/opPools/utils.d.ts +1 -1
  161. package/lib/chain/opPools/utils.d.ts.map +1 -1
  162. package/lib/chain/opPools/utils.js +1 -1
  163. package/lib/chain/opPools/utils.js.map +1 -1
  164. package/lib/chain/options.d.ts +5 -3
  165. package/lib/chain/options.d.ts.map +1 -1
  166. package/lib/chain/options.js +0 -1
  167. package/lib/chain/options.js.map +1 -1
  168. package/lib/chain/produceBlock/produceBlockBody.d.ts +3 -2
  169. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  170. package/lib/chain/produceBlock/produceBlockBody.js +3 -3
  171. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  172. package/lib/chain/proposerTracker.d.ts +31 -0
  173. package/lib/chain/proposerTracker.d.ts.map +1 -0
  174. package/lib/chain/proposerTracker.js +75 -0
  175. package/lib/chain/proposerTracker.js.map +1 -0
  176. package/lib/chain/regen/interface.d.ts +1 -2
  177. package/lib/chain/regen/interface.d.ts.map +1 -1
  178. package/lib/chain/regen/interface.js +0 -1
  179. package/lib/chain/regen/interface.js.map +1 -1
  180. package/lib/chain/regen/queued.d.ts +1 -1
  181. package/lib/chain/regen/queued.d.ts.map +1 -1
  182. package/lib/chain/regen/queued.js +5 -3
  183. package/lib/chain/regen/queued.js.map +1 -1
  184. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +7 -14
  185. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
  186. package/lib/chain/seenCache/seenGossipBlockInput.js +6 -65
  187. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  188. package/lib/chain/validation/executionPayloadBid.d.ts +0 -15
  189. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  190. package/lib/chain/validation/executionPayloadBid.js +13 -166
  191. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  192. package/lib/chain/validation/executionPayloadEnvelope.d.ts +6 -0
  193. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
  194. package/lib/chain/validation/executionPayloadEnvelope.js +53 -0
  195. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  196. package/lib/chain/validation/inclusionList.d.ts.map +1 -1
  197. package/lib/chain/validation/inclusionList.js +11 -2
  198. package/lib/chain/validation/inclusionList.js.map +1 -1
  199. package/lib/chain/validatorMonitor.d.ts +1 -2
  200. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  201. package/lib/chain/validatorMonitor.js +0 -3
  202. package/lib/chain/validatorMonitor.js.map +1 -1
  203. package/lib/db/beacon.d.ts +7 -0
  204. package/lib/db/beacon.d.ts.map +1 -1
  205. package/lib/db/beacon.js +34 -0
  206. package/lib/db/beacon.js.map +1 -1
  207. package/lib/db/dataColumnStore.d.ts +1 -1
  208. package/lib/db/dataColumnStore.d.ts.map +1 -1
  209. package/lib/db/dataColumnStore.js +1 -4
  210. package/lib/db/dataColumnStore.js.map +1 -1
  211. package/lib/db/flatFileStore/flatFileStore.js +5 -5
  212. package/lib/db/flatFileStore/flatFileStore.js.map +1 -1
  213. package/lib/db/flatFileStore/slotIndex.d.ts.map +1 -1
  214. package/lib/db/flatFileStore/slotIndex.js +2 -2
  215. package/lib/db/flatFileStore/slotIndex.js.map +1 -1
  216. package/lib/db/interface.d.ts +1 -0
  217. package/lib/db/interface.d.ts.map +1 -1
  218. package/lib/db/repositories/blobSidecars.d.ts +0 -1
  219. package/lib/db/repositories/blobSidecars.d.ts.map +1 -1
  220. package/lib/db/repositories/blobSidecars.js +0 -1
  221. package/lib/db/repositories/blobSidecars.js.map +1 -1
  222. package/lib/db/repositories/dataColumnSidecarArchive.d.ts +6 -0
  223. package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +1 -1
  224. package/lib/db/repositories/dataColumnSidecarArchive.js +19 -0
  225. package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
  226. package/lib/execution/builder/apiClient.d.ts +14 -8
  227. package/lib/execution/builder/apiClient.d.ts.map +1 -1
  228. package/lib/execution/builder/apiClient.js +12 -10
  229. package/lib/execution/builder/apiClient.js.map +1 -1
  230. package/lib/execution/builder/http.d.ts +2 -0
  231. package/lib/execution/builder/http.d.ts.map +1 -1
  232. package/lib/execution/builder/http.js +2 -0
  233. package/lib/execution/builder/http.js.map +1 -1
  234. package/lib/execution/engine/blobVersionedHashes.d.ts +1 -1
  235. package/lib/execution/engine/blobVersionedHashes.d.ts.map +1 -1
  236. package/lib/execution/engine/blobVersionedHashes.js.map +1 -1
  237. package/lib/execution/engine/http.d.ts +4 -6
  238. package/lib/execution/engine/http.d.ts.map +1 -1
  239. package/lib/execution/engine/http.js +8 -11
  240. package/lib/execution/engine/http.js.map +1 -1
  241. package/lib/execution/engine/index.d.ts +1 -1
  242. package/lib/execution/engine/index.d.ts.map +1 -1
  243. package/lib/execution/engine/index.js +1 -1
  244. package/lib/execution/engine/index.js.map +1 -1
  245. package/lib/execution/engine/interface.d.ts +18 -6
  246. package/lib/execution/engine/interface.d.ts.map +1 -1
  247. package/lib/execution/engine/interface.js.map +1 -1
  248. package/lib/execution/engine/jsonRpcTransport.d.ts +2 -4
  249. package/lib/execution/engine/jsonRpcTransport.d.ts.map +1 -1
  250. package/lib/execution/engine/jsonRpcTransport.js +2 -12
  251. package/lib/execution/engine/jsonRpcTransport.js.map +1 -1
  252. package/lib/execution/engine/mock.d.ts +0 -1
  253. package/lib/execution/engine/mock.d.ts.map +1 -1
  254. package/lib/execution/engine/mock.js +6 -8
  255. package/lib/execution/engine/mock.js.map +1 -1
  256. package/lib/execution/engine/payloadIdCache.d.ts +1 -2
  257. package/lib/execution/engine/payloadIdCache.d.ts.map +1 -1
  258. package/lib/execution/engine/payloadIdCache.js +3 -3
  259. package/lib/execution/engine/payloadIdCache.js.map +1 -1
  260. package/lib/execution/engine/restTransport.d.ts +2 -4
  261. package/lib/execution/engine/restTransport.d.ts.map +1 -1
  262. package/lib/execution/engine/restTransport.js +1 -15
  263. package/lib/execution/engine/restTransport.js.map +1 -1
  264. package/lib/execution/engine/sszTypes.d.ts +38 -47
  265. package/lib/execution/engine/sszTypes.d.ts.map +1 -1
  266. package/lib/execution/engine/sszTypes.js +0 -5
  267. package/lib/execution/engine/sszTypes.js.map +1 -1
  268. package/lib/execution/engine/transport.d.ts +1 -14
  269. package/lib/execution/engine/transport.d.ts.map +1 -1
  270. package/lib/execution/engine/types.d.ts +1 -9
  271. package/lib/execution/engine/types.d.ts.map +1 -1
  272. package/lib/execution/engine/types.js +9 -16
  273. package/lib/execution/engine/types.js.map +1 -1
  274. package/lib/execution/engine/utils.d.ts.map +1 -1
  275. package/lib/execution/engine/utils.js +3 -2
  276. package/lib/execution/engine/utils.js.map +1 -1
  277. package/lib/index.d.ts +1 -0
  278. package/lib/index.d.ts.map +1 -1
  279. package/lib/index.js +2 -0
  280. package/lib/index.js.map +1 -1
  281. package/lib/metrics/metrics/beacon.d.ts +0 -9
  282. package/lib/metrics/metrics/beacon.d.ts.map +1 -1
  283. package/lib/metrics/metrics/beacon.js +0 -30
  284. package/lib/metrics/metrics/beacon.js.map +1 -1
  285. package/lib/metrics/metrics/lodestar.d.ts +33 -8
  286. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  287. package/lib/metrics/metrics/lodestar.js +84 -18
  288. package/lib/metrics/metrics/lodestar.js.map +1 -1
  289. package/lib/metrics/server/http.js +5 -5
  290. package/lib/metrics/server/http.js.map +1 -1
  291. package/lib/monitoring/service.js +1 -1
  292. package/lib/monitoring/service.js.map +1 -1
  293. package/lib/network/core/networkCore.d.ts +4 -1
  294. package/lib/network/core/networkCore.d.ts.map +1 -1
  295. package/lib/network/core/networkCore.js +7 -0
  296. package/lib/network/core/networkCore.js.map +1 -1
  297. package/lib/network/core/networkCoreWorker.js +2 -0
  298. package/lib/network/core/networkCoreWorker.js.map +1 -1
  299. package/lib/network/core/networkCoreWorkerHandler.d.ts +4 -1
  300. package/lib/network/core/networkCoreWorkerHandler.d.ts.map +1 -1
  301. package/lib/network/core/networkCoreWorkerHandler.js +6 -0
  302. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  303. package/lib/network/core/types.d.ts +6 -1
  304. package/lib/network/core/types.d.ts.map +1 -1
  305. package/lib/network/gossip/gossipsub.d.ts +1 -0
  306. package/lib/network/gossip/gossipsub.d.ts.map +1 -1
  307. package/lib/network/gossip/gossipsub.js +10 -0
  308. package/lib/network/gossip/gossipsub.js.map +1 -1
  309. package/lib/network/gossip/interface.d.ts +1 -8
  310. package/lib/network/gossip/interface.d.ts.map +1 -1
  311. package/lib/network/gossip/interface.js +0 -1
  312. package/lib/network/gossip/interface.js.map +1 -1
  313. package/lib/network/gossip/topic.d.ts +6 -22
  314. package/lib/network/gossip/topic.d.ts.map +1 -1
  315. package/lib/network/gossip/topic.js +0 -23
  316. package/lib/network/gossip/topic.js.map +1 -1
  317. package/lib/network/interface.d.ts +4 -5
  318. package/lib/network/interface.d.ts.map +1 -1
  319. package/lib/network/libp2p/index.d.ts.map +1 -1
  320. package/lib/network/libp2p/index.js +5 -1
  321. package/lib/network/libp2p/index.js.map +1 -1
  322. package/lib/network/network.d.ts +8 -7
  323. package/lib/network/network.d.ts.map +1 -1
  324. package/lib/network/network.js +53 -35
  325. package/lib/network/network.js.map +1 -1
  326. package/lib/network/options.d.ts +2 -0
  327. package/lib/network/options.d.ts.map +1 -1
  328. package/lib/network/options.js +2 -0
  329. package/lib/network/options.js.map +1 -1
  330. package/lib/network/peers/peerManager.d.ts +2 -1
  331. package/lib/network/peers/peerManager.d.ts.map +1 -1
  332. package/lib/network/peers/peerManager.js +28 -1
  333. package/lib/network/peers/peerManager.js.map +1 -1
  334. package/lib/network/peers/utils/assertPeerRelevance.d.ts +9 -1
  335. package/lib/network/peers/utils/assertPeerRelevance.d.ts.map +1 -1
  336. package/lib/network/peers/utils/assertPeerRelevance.js +32 -21
  337. package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
  338. package/lib/network/peers/utils/prioritizePeers.d.ts +4 -1
  339. package/lib/network/peers/utils/prioritizePeers.d.ts.map +1 -1
  340. package/lib/network/peers/utils/prioritizePeers.js +8 -16
  341. package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
  342. package/lib/network/peers/utils/subnetMap.d.ts +5 -2
  343. package/lib/network/peers/utils/subnetMap.d.ts.map +1 -1
  344. package/lib/network/peers/utils/subnetMap.js +6 -3
  345. package/lib/network/peers/utils/subnetMap.js.map +1 -1
  346. package/lib/network/processor/extractSlotRootFns.d.ts.map +1 -1
  347. package/lib/network/processor/extractSlotRootFns.js +1 -8
  348. package/lib/network/processor/extractSlotRootFns.js.map +1 -1
  349. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  350. package/lib/network/processor/gossipHandlers.js +79 -149
  351. package/lib/network/processor/gossipHandlers.js.map +1 -1
  352. package/lib/network/processor/gossipQueues/index.d.ts.map +1 -1
  353. package/lib/network/processor/gossipQueues/index.js +0 -6
  354. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  355. package/lib/network/processor/gossipValidatorFn.d.ts.map +1 -1
  356. package/lib/network/processor/gossipValidatorFn.js +1 -5
  357. package/lib/network/processor/gossipValidatorFn.js.map +1 -1
  358. package/lib/network/processor/index.d.ts +6 -0
  359. package/lib/network/processor/index.d.ts.map +1 -1
  360. package/lib/network/processor/index.js +29 -4
  361. package/lib/network/processor/index.js.map +1 -1
  362. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -1
  363. package/lib/network/reqresp/ReqRespBeaconNode.js +0 -3
  364. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  365. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts +2 -2
  366. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -1
  367. package/lib/network/reqresp/handlers/index.d.ts.map +1 -1
  368. package/lib/network/reqresp/handlers/index.js +1 -12
  369. package/lib/network/reqresp/handlers/index.js.map +1 -1
  370. package/lib/network/reqresp/protocols.d.ts +0 -2
  371. package/lib/network/reqresp/protocols.d.ts.map +1 -1
  372. package/lib/network/reqresp/protocols.js +0 -10
  373. package/lib/network/reqresp/protocols.js.map +1 -1
  374. package/lib/network/reqresp/rateLimit.d.ts.map +1 -1
  375. package/lib/network/reqresp/rateLimit.js +1 -17
  376. package/lib/network/reqresp/rateLimit.js.map +1 -1
  377. package/lib/network/reqresp/types.d.ts +2 -8
  378. package/lib/network/reqresp/types.d.ts.map +1 -1
  379. package/lib/network/reqresp/types.js +1 -7
  380. package/lib/network/reqresp/types.js.map +1 -1
  381. package/lib/network/subnets/attnetsService.d.ts +35 -5
  382. package/lib/network/subnets/attnetsService.d.ts.map +1 -1
  383. package/lib/network/subnets/attnetsService.js +84 -6
  384. package/lib/network/subnets/attnetsService.js.map +1 -1
  385. package/lib/network/subnets/interface.d.ts +7 -0
  386. package/lib/network/subnets/interface.d.ts.map +1 -1
  387. package/lib/network/subnets/interface.js.map +1 -1
  388. package/lib/node/nodejs.d.ts +3 -1
  389. package/lib/node/nodejs.d.ts.map +1 -1
  390. package/lib/node/nodejs.js +47 -21
  391. package/lib/node/nodejs.js.map +1 -1
  392. package/lib/node/options.d.ts +3 -1
  393. package/lib/node/options.d.ts.map +1 -1
  394. package/lib/node/options.js +4 -2
  395. package/lib/node/options.js.map +1 -1
  396. package/lib/sync/interface.d.ts.map +1 -1
  397. package/lib/sync/interface.js.map +1 -1
  398. package/lib/sync/range/batch.d.ts +2 -3
  399. package/lib/sync/range/batch.d.ts.map +1 -1
  400. package/lib/sync/range/batch.js +9 -22
  401. package/lib/sync/range/batch.js.map +1 -1
  402. package/lib/sync/range/chain.d.ts.map +1 -1
  403. package/lib/sync/range/chain.js +2 -15
  404. package/lib/sync/range/chain.js.map +1 -1
  405. package/lib/sync/sync.d.ts +7 -0
  406. package/lib/sync/sync.d.ts.map +1 -1
  407. package/lib/sync/sync.js +61 -3
  408. package/lib/sync/sync.js.map +1 -1
  409. package/lib/sync/unknownBlock.d.ts.map +1 -1
  410. package/lib/sync/unknownBlock.js +43 -25
  411. package/lib/sync/unknownBlock.js.map +1 -1
  412. package/lib/sync/utils/downloadByRange.d.ts +6 -34
  413. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  414. package/lib/sync/utils/downloadByRange.js +24 -128
  415. package/lib/sync/utils/downloadByRange.js.map +1 -1
  416. package/lib/sync/utils/downloadByRoot.d.ts +2 -18
  417. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  418. package/lib/sync/utils/downloadByRoot.js +14 -99
  419. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  420. package/lib/util/blobs.d.ts +1 -7
  421. package/lib/util/blobs.d.ts.map +1 -1
  422. package/lib/util/blobs.js +0 -19
  423. package/lib/util/blobs.js.map +1 -1
  424. package/lib/util/execution.d.ts +3 -4
  425. package/lib/util/execution.d.ts.map +1 -1
  426. package/lib/util/execution.js +1 -73
  427. package/lib/util/execution.js.map +1 -1
  428. package/lib/util/file.d.ts.map +1 -1
  429. package/lib/util/file.js +8 -9
  430. package/lib/util/file.js.map +1 -1
  431. package/lib/util/queue/itemQueue.js +1 -1
  432. package/lib/util/queue/itemQueue.js.map +1 -1
  433. package/lib/util/sszBytes.d.ts +5 -1
  434. package/lib/util/sszBytes.d.ts.map +1 -1
  435. package/lib/util/sszBytes.js +36 -19
  436. package/lib/util/sszBytes.js.map +1 -1
  437. package/lib/util/types.d.ts +0 -5
  438. package/lib/util/types.d.ts.map +1 -1
  439. package/lib/util/types.js +1 -2
  440. package/lib/util/types.js.map +1 -1
  441. package/package.json +17 -18
  442. package/src/api/impl/api.ts +1 -1
  443. package/src/api/impl/beacon/blocks/index.ts +81 -126
  444. package/src/api/impl/beacon/index.ts +3 -1
  445. package/src/api/impl/beacon/pool/index.ts +31 -1
  446. package/src/api/impl/beacon/state/utils.ts +1 -1
  447. package/src/api/impl/validator/index.ts +47 -30
  448. package/src/api/options.ts +3 -0
  449. package/src/chain/GetBlobsTracker.ts +82 -52
  450. package/src/chain/archiveStore/archiveStore.ts +1 -0
  451. package/src/chain/archiveStore/utils/archiveBlocks.ts +76 -130
  452. package/src/chain/blocks/blockInput/blockInput.ts +11 -343
  453. package/src/chain/blocks/blockInput/errors.ts +1 -2
  454. package/src/chain/blocks/blockInput/types.ts +2 -20
  455. package/src/chain/blocks/importBlock.ts +61 -76
  456. package/src/chain/blocks/importExecutionPayload.ts +57 -35
  457. package/src/chain/blocks/index.ts +11 -4
  458. package/src/chain/blocks/payloadEnvelopeProcessor.ts +35 -24
  459. package/src/chain/blocks/types.ts +5 -31
  460. package/src/chain/blocks/verifyBlock.ts +31 -16
  461. package/src/chain/blocks/verifyBlocksDataAvailability.ts +16 -2
  462. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +9 -6
  463. package/src/chain/blocks/verifyBlocksSanityChecks.ts +4 -1
  464. package/src/chain/blocks/verifyBlocksSignatures.ts +7 -5
  465. package/src/chain/blocks/verifyPayloadsDataAvailability.ts +14 -6
  466. package/src/chain/blocks/writeBlockInputToDb.ts +6 -29
  467. package/src/chain/bls/interface.ts +2 -0
  468. package/src/chain/bls/multithread/index.ts +14 -10
  469. package/src/chain/bls/multithread/types.ts +1 -1
  470. package/src/chain/bls/multithread/worker.ts +1 -5
  471. package/src/chain/bls/singleThread.ts +1 -1
  472. package/src/chain/bls/utils.ts +1 -1
  473. package/src/chain/chain.ts +140 -42
  474. package/src/chain/emitter.ts +8 -8
  475. package/src/chain/errors/blockError.ts +1 -1
  476. package/src/chain/errors/executionPayloadEnvelope.ts +8 -0
  477. package/src/chain/errors/index.ts +0 -1
  478. package/src/chain/forkChoice/index.ts +11 -0
  479. package/src/chain/forkChoiceExecutionEngine.ts +183 -0
  480. package/src/chain/interface.ts +9 -6
  481. package/src/chain/opPools/aggregatedAttestationPool.ts +246 -43
  482. package/src/chain/opPools/attestationPool.ts +16 -4
  483. package/src/chain/opPools/inclusionListStore.ts +3 -3
  484. package/src/chain/opPools/index.ts +1 -0
  485. package/src/chain/opPools/payloadAttestationPool.ts +18 -7
  486. package/src/chain/opPools/singleAttestationPool.ts +287 -0
  487. package/src/chain/opPools/syncCommitteeMessagePool.ts +10 -3
  488. package/src/chain/opPools/syncContributionAndProofPool.ts +13 -3
  489. package/src/chain/opPools/utils.ts +1 -1
  490. package/src/chain/options.ts +5 -4
  491. package/src/chain/produceBlock/produceBlockBody.ts +7 -4
  492. package/src/chain/proposerTracker.ts +94 -0
  493. package/src/chain/regen/interface.ts +1 -2
  494. package/src/chain/regen/queued.ts +6 -4
  495. package/src/chain/seenCache/seenGossipBlockInput.ts +9 -93
  496. package/src/chain/validation/executionPayloadBid.ts +14 -193
  497. package/src/chain/validation/executionPayloadEnvelope.ts +68 -1
  498. package/src/chain/validation/inclusionList.ts +11 -2
  499. package/src/chain/validatorMonitor.ts +0 -6
  500. package/src/db/beacon.ts +44 -0
  501. package/src/db/dataColumnStore.ts +2 -4
  502. package/src/db/flatFileStore/flatFileStore.ts +7 -7
  503. package/src/db/flatFileStore/slotIndex.ts +4 -3
  504. package/src/db/interface.ts +2 -0
  505. package/src/db/repositories/blobSidecars.ts +0 -1
  506. package/src/db/repositories/dataColumnSidecarArchive.ts +20 -0
  507. package/src/execution/builder/apiClient.ts +16 -13
  508. package/src/execution/builder/http.ts +4 -0
  509. package/src/execution/engine/blobVersionedHashes.ts +1 -1
  510. package/src/execution/engine/http.ts +19 -43
  511. package/src/execution/engine/index.ts +1 -1
  512. package/src/execution/engine/interface.ts +19 -10
  513. package/src/execution/engine/jsonRpcTransport.ts +10 -22
  514. package/src/execution/engine/mock.ts +6 -11
  515. package/src/execution/engine/payloadIdCache.ts +6 -7
  516. package/src/execution/engine/restTransport.ts +3 -22
  517. package/src/execution/engine/sszTypes.ts +0 -9
  518. package/src/execution/engine/transport.ts +8 -17
  519. package/src/execution/engine/types.ts +11 -26
  520. package/src/execution/engine/utils.ts +4 -2
  521. package/src/index.ts +2 -0
  522. package/src/metrics/metrics/beacon.ts +0 -30
  523. package/src/metrics/metrics/lodestar.ts +85 -18
  524. package/src/metrics/server/http.ts +5 -5
  525. package/src/monitoring/service.ts +1 -1
  526. package/src/network/core/networkCore.ts +11 -1
  527. package/src/network/core/networkCoreWorker.ts +2 -0
  528. package/src/network/core/networkCoreWorkerHandler.ts +8 -1
  529. package/src/network/core/types.ts +6 -1
  530. package/src/network/gossip/gossipsub.ts +11 -0
  531. package/src/network/gossip/interface.ts +0 -5
  532. package/src/network/gossip/topic.ts +0 -25
  533. package/src/network/interface.ts +2 -5
  534. package/src/network/libp2p/index.ts +5 -1
  535. package/src/network/network.ts +55 -58
  536. package/src/network/options.ts +4 -0
  537. package/src/network/peers/peerManager.ts +28 -3
  538. package/src/network/peers/utils/assertPeerRelevance.ts +39 -23
  539. package/src/network/peers/utils/prioritizePeers.ts +14 -22
  540. package/src/network/peers/utils/subnetMap.ts +6 -3
  541. package/src/network/processor/extractSlotRootFns.ts +0 -9
  542. package/src/network/processor/gossipHandlers.ts +99 -183
  543. package/src/network/processor/gossipQueues/index.ts +0 -6
  544. package/src/network/processor/gossipValidatorFn.ts +0 -5
  545. package/src/network/processor/index.ts +25 -4
  546. package/src/network/reqresp/ReqRespBeaconNode.ts +0 -7
  547. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +2 -2
  548. package/src/network/reqresp/handlers/index.ts +0 -17
  549. package/src/network/reqresp/protocols.ts +0 -12
  550. package/src/network/reqresp/rateLimit.ts +1 -17
  551. package/src/network/reqresp/types.ts +0 -13
  552. package/src/network/subnets/attnetsService.ts +94 -6
  553. package/src/network/subnets/interface.ts +7 -0
  554. package/src/node/nodejs.ts +58 -22
  555. package/src/node/options.ts +9 -6
  556. package/src/sync/interface.ts +1 -0
  557. package/src/sync/range/batch.ts +9 -21
  558. package/src/sync/range/chain.ts +2 -14
  559. package/src/sync/sync.ts +65 -4
  560. package/src/sync/unknownBlock.ts +48 -36
  561. package/src/sync/utils/downloadByRange.ts +31 -230
  562. package/src/sync/utils/downloadByRoot.ts +15 -142
  563. package/src/util/blobs.ts +0 -34
  564. package/src/util/execution.ts +8 -102
  565. package/src/util/file.ts +8 -9
  566. package/src/util/queue/itemQueue.ts +1 -1
  567. package/src/util/sszBytes.ts +42 -24
  568. package/src/util/types.ts +1 -8
  569. package/lib/chain/errors/blobSidecarError.d.ts +0 -108
  570. package/lib/chain/errors/blobSidecarError.d.ts.map +0 -1
  571. package/lib/chain/errors/blobSidecarError.js +0 -38
  572. package/lib/chain/errors/blobSidecarError.js.map +0 -1
  573. package/lib/chain/validation/blobSidecar.d.ts +0 -16
  574. package/lib/chain/validation/blobSidecar.d.ts.map +0 -1
  575. package/lib/chain/validation/blobSidecar.js +0 -276
  576. package/lib/chain/validation/blobSidecar.js.map +0 -1
  577. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts +0 -9
  578. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +0 -1
  579. package/lib/network/reqresp/handlers/blobSidecarsByRange.js +0 -91
  580. package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +0 -1
  581. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts +0 -5
  582. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts.map +0 -1
  583. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js +0 -46
  584. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js.map +0 -1
  585. package/src/chain/errors/blobSidecarError.ts +0 -70
  586. package/src/chain/validation/blobSidecar.ts +0 -357
  587. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +0 -133
  588. package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +0 -69
@@ -1,108 +0,0 @@
1
- import { RootHex, Slot, SubnetID, ValidatorIndex } from "@lodestar/types";
2
- import { LodestarError } from "@lodestar/utils";
3
- import { GossipActionError } from "./gossipValidation.js";
4
- export declare enum BlobSidecarErrorCode {
5
- INDEX_TOO_LARGE = "BLOB_SIDECAR_ERROR_INDEX_TOO_LARGE",
6
- INVALID_INDEX = "BLOB_SIDECAR_ERROR_INVALID_INDEX",
7
- /** !bls.KeyValidate(block.body.blob_kzg_commitments[i]) */
8
- INVALID_KZG = "BLOB_SIDECAR_ERROR_INVALID_KZG",
9
- /** !verify_kzg_commitments_against_transactions(block.body.execution_payload.transactions, block.body.blob_kzg_commitments) */
10
- INVALID_KZG_TXS = "BLOB_SIDECAR_ERROR_INVALID_KZG_TXS",
11
- /** sidecar.beacon_block_slot != block.slot */
12
- INCORRECT_SLOT = "BLOB_SIDECAR_ERROR_INCORRECT_SLOT",
13
- /** BLSFieldElement in valid range (x < BLS_MODULUS) */
14
- INVALID_BLOB = "BLOB_SIDECAR_ERROR_INVALID_BLOB",
15
- /** !bls.KeyValidate(blobs_sidecar.kzg_aggregated_proof) */
16
- INVALID_KZG_PROOF = "BLOBS_SIDECAR_ERROR_INVALID_KZG_PROOF",
17
- /** Block and sidecars blob count mismatch */
18
- INCORRECT_SIDECAR_COUNT = "BLOBS_SIDECAR_ERROR_INCORRECT_SIDECAR_COUNT",
19
- /** Sidecar doesn't match block */
20
- INCORRECT_BLOCK = "BLOBS_SIDECAR_ERROR_INCORRECT_BLOCK",
21
- /** Sidecars proofs not valid */
22
- INVALID_KZG_PROOF_BATCH = "BLOBS_SIDECAR_ERROR_INVALID_KZG_PROOF_BATCH",
23
- FUTURE_SLOT = "BLOB_SIDECAR_ERROR_FUTURE_SLOT",
24
- WOULD_REVERT_FINALIZED_SLOT = "BLOB_SIDECAR_ERROR_WOULD_REVERT_FINALIZED_SLOT",
25
- ALREADY_KNOWN = "BLOB_SIDECAR_ERROR_ALREADY_KNOWN",
26
- PARENT_UNKNOWN = "BLOB_SIDECAR_ERROR_PARENT_UNKNOWN",
27
- NOT_LATER_THAN_PARENT = "BLOB_SIDECAR_ERROR_NOT_LATER_THAN_PARENT",
28
- PROPOSAL_SIGNATURE_INVALID = "BLOB_SIDECAR_ERROR_PROPOSAL_SIGNATURE_INVALID",
29
- INCLUSION_PROOF_INVALID = "BLOB_SIDECAR_ERROR_INCLUSION_PROOF_INVALID",
30
- INCORRECT_PROPOSER = "BLOB_SIDECAR_ERROR_INCORRECT_PROPOSER"
31
- }
32
- export type BlobSidecarErrorType = {
33
- code: BlobSidecarErrorCode.INDEX_TOO_LARGE;
34
- blobIdx: number;
35
- maxBlobsPerBlock: number;
36
- } | {
37
- code: BlobSidecarErrorCode.INVALID_INDEX;
38
- blobIdx: number;
39
- subnet: SubnetID;
40
- } | {
41
- code: BlobSidecarErrorCode.INVALID_KZG;
42
- blobIdx: number;
43
- } | {
44
- code: BlobSidecarErrorCode.INVALID_KZG_TXS;
45
- } | {
46
- code: BlobSidecarErrorCode.INCORRECT_SLOT;
47
- blockSlot: Slot;
48
- blobSlot: Slot;
49
- blobIdx: number;
50
- } | {
51
- code: BlobSidecarErrorCode.INVALID_BLOB;
52
- blobIdx: number;
53
- } | {
54
- code: BlobSidecarErrorCode.INVALID_KZG_PROOF;
55
- blobIdx: number;
56
- } | {
57
- code: BlobSidecarErrorCode.INCORRECT_SIDECAR_COUNT;
58
- slot: number;
59
- expected: number;
60
- actual: number;
61
- } | {
62
- code: BlobSidecarErrorCode.INCORRECT_BLOCK;
63
- slot: number;
64
- blobIdx: number;
65
- expected: string;
66
- actual: string;
67
- } | {
68
- code: BlobSidecarErrorCode.INVALID_KZG_PROOF_BATCH;
69
- slot: number;
70
- reason: string;
71
- } | {
72
- code: BlobSidecarErrorCode.FUTURE_SLOT;
73
- blockSlot: Slot;
74
- currentSlot: Slot;
75
- } | {
76
- code: BlobSidecarErrorCode.WOULD_REVERT_FINALIZED_SLOT;
77
- blockSlot: Slot;
78
- finalizedSlot: Slot;
79
- } | {
80
- code: BlobSidecarErrorCode.ALREADY_KNOWN;
81
- root: RootHex;
82
- } | {
83
- code: BlobSidecarErrorCode.PARENT_UNKNOWN;
84
- parentRoot: RootHex;
85
- slot: Slot;
86
- blockRoot: RootHex;
87
- } | {
88
- code: BlobSidecarErrorCode.NOT_LATER_THAN_PARENT;
89
- parentSlot: Slot;
90
- slot: Slot;
91
- } | {
92
- code: BlobSidecarErrorCode.PROPOSAL_SIGNATURE_INVALID;
93
- blockRoot: RootHex;
94
- slot: Slot;
95
- index: number;
96
- } | {
97
- code: BlobSidecarErrorCode.INCLUSION_PROOF_INVALID;
98
- slot: Slot;
99
- blobIdx: number;
100
- } | {
101
- code: BlobSidecarErrorCode.INCORRECT_PROPOSER;
102
- proposerIndex: ValidatorIndex;
103
- };
104
- export declare class BlobSidecarGossipError extends GossipActionError<BlobSidecarErrorType> {
105
- }
106
- export declare class BlobSidecarValidationError extends LodestarError<BlobSidecarErrorType> {
107
- }
108
- //# sourceMappingURL=blobSidecarError.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"blobSidecarError.d.ts","sourceRoot":"","sources":["../../../src/chain/errors/blobSidecarError.ts"],"names":[],"mappings":"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"}
@@ -1,38 +0,0 @@
1
- import { LodestarError } from "@lodestar/utils";
2
- import { GossipActionError } from "./gossipValidation.js";
3
- export var BlobSidecarErrorCode;
4
- (function (BlobSidecarErrorCode) {
5
- BlobSidecarErrorCode["INDEX_TOO_LARGE"] = "BLOB_SIDECAR_ERROR_INDEX_TOO_LARGE";
6
- BlobSidecarErrorCode["INVALID_INDEX"] = "BLOB_SIDECAR_ERROR_INVALID_INDEX";
7
- /** !bls.KeyValidate(block.body.blob_kzg_commitments[i]) */
8
- BlobSidecarErrorCode["INVALID_KZG"] = "BLOB_SIDECAR_ERROR_INVALID_KZG";
9
- /** !verify_kzg_commitments_against_transactions(block.body.execution_payload.transactions, block.body.blob_kzg_commitments) */
10
- BlobSidecarErrorCode["INVALID_KZG_TXS"] = "BLOB_SIDECAR_ERROR_INVALID_KZG_TXS";
11
- /** sidecar.beacon_block_slot != block.slot */
12
- BlobSidecarErrorCode["INCORRECT_SLOT"] = "BLOB_SIDECAR_ERROR_INCORRECT_SLOT";
13
- /** BLSFieldElement in valid range (x < BLS_MODULUS) */
14
- BlobSidecarErrorCode["INVALID_BLOB"] = "BLOB_SIDECAR_ERROR_INVALID_BLOB";
15
- /** !bls.KeyValidate(blobs_sidecar.kzg_aggregated_proof) */
16
- BlobSidecarErrorCode["INVALID_KZG_PROOF"] = "BLOBS_SIDECAR_ERROR_INVALID_KZG_PROOF";
17
- // Validation errors when validating against an existing block
18
- /** Block and sidecars blob count mismatch */
19
- BlobSidecarErrorCode["INCORRECT_SIDECAR_COUNT"] = "BLOBS_SIDECAR_ERROR_INCORRECT_SIDECAR_COUNT";
20
- /** Sidecar doesn't match block */
21
- BlobSidecarErrorCode["INCORRECT_BLOCK"] = "BLOBS_SIDECAR_ERROR_INCORRECT_BLOCK";
22
- /** Sidecars proofs not valid */
23
- BlobSidecarErrorCode["INVALID_KZG_PROOF_BATCH"] = "BLOBS_SIDECAR_ERROR_INVALID_KZG_PROOF_BATCH";
24
- // following errors are adapted from the block errors
25
- BlobSidecarErrorCode["FUTURE_SLOT"] = "BLOB_SIDECAR_ERROR_FUTURE_SLOT";
26
- BlobSidecarErrorCode["WOULD_REVERT_FINALIZED_SLOT"] = "BLOB_SIDECAR_ERROR_WOULD_REVERT_FINALIZED_SLOT";
27
- BlobSidecarErrorCode["ALREADY_KNOWN"] = "BLOB_SIDECAR_ERROR_ALREADY_KNOWN";
28
- BlobSidecarErrorCode["PARENT_UNKNOWN"] = "BLOB_SIDECAR_ERROR_PARENT_UNKNOWN";
29
- BlobSidecarErrorCode["NOT_LATER_THAN_PARENT"] = "BLOB_SIDECAR_ERROR_NOT_LATER_THAN_PARENT";
30
- BlobSidecarErrorCode["PROPOSAL_SIGNATURE_INVALID"] = "BLOB_SIDECAR_ERROR_PROPOSAL_SIGNATURE_INVALID";
31
- BlobSidecarErrorCode["INCLUSION_PROOF_INVALID"] = "BLOB_SIDECAR_ERROR_INCLUSION_PROOF_INVALID";
32
- BlobSidecarErrorCode["INCORRECT_PROPOSER"] = "BLOB_SIDECAR_ERROR_INCORRECT_PROPOSER";
33
- })(BlobSidecarErrorCode || (BlobSidecarErrorCode = {}));
34
- export class BlobSidecarGossipError extends GossipActionError {
35
- }
36
- export class BlobSidecarValidationError extends LodestarError {
37
- }
38
- //# sourceMappingURL=blobSidecarError.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"blobSidecarError.js","sourceRoot":"","sources":["../../../src/chain/errors/blobSidecarError.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAC,iBAAiB,EAAC,MAAM,uBAAuB,CAAC;AAExD,MAAM,CAAN,IAAY,oBAgCX;AAhCD,WAAY,oBAAoB;IAC9B,8EAAsD,CAAA;IACtD,0EAAkD,CAAA;IAClD,2DAA2D;IAC3D,sEAA8C,CAAA;IAC9C,+HAA+H;IAC/H,8EAAsD,CAAA;IACtD,8CAA8C;IAC9C,4EAAoD,CAAA;IACpD,uDAAuD;IACvD,wEAAgD,CAAA;IAChD,2DAA2D;IAC3D,mFAA2D,CAAA;IAE3D,8DAA8D;IAE9D,6CAA6C;IAC7C,+FAAuE,CAAA;IACvE,kCAAkC;IAClC,+EAAuD,CAAA;IACvD,gCAAgC;IAChC,+FAAuE,CAAA;IAEvE,qDAAqD;IACrD,sEAA8C,CAAA;IAC9C,sGAA8E,CAAA;IAC9E,0EAAkD,CAAA;IAClD,4EAAoD,CAAA;IACpD,0FAAkE,CAAA;IAClE,oGAA4E,CAAA;IAC5E,8FAAsE,CAAA;IACtE,oFAA4D,CAAA;AAC9D,CAAC,EAhCW,oBAAoB,KAApB,oBAAoB,QAgC/B;AAgCD,MAAM,OAAO,sBAAuB,SAAQ,iBAAuC;CAAG;AACtF,MAAM,OAAO,0BAA2B,SAAQ,aAAmC;CAAG"}
@@ -1,16 +0,0 @@
1
- import { ForkName } from "@lodestar/params";
2
- import { Root, Slot, SubnetID, deneb } from "@lodestar/types";
3
- import { IBeaconChain } from "../interface.js";
4
- export declare function validateGossipBlobSidecar(fork: ForkName, chain: IBeaconChain, blobSidecar: deneb.BlobSidecar, subnet: SubnetID): Promise<void>;
5
- /**
6
- * Validate some blob sidecars in a block
7
- *
8
- * Requires the block to be known to the node
9
- *
10
- * NOTE: chain is optional to skip signature verification. Helpful for testing purposes and so that can control whether
11
- * signature gets checked depending on the reqresp method that is being checked
12
- */
13
- export declare function validateBlockBlobSidecars(chain: IBeaconChain | null, blockSlot: Slot, blockRoot: Root, blockBlobCount: number, blobSidecars: deneb.BlobSidecars): Promise<void>;
14
- export declare function validateBlobsAndBlobProofs(expectedKzgCommitments: deneb.BlobKzgCommitments, blobs: deneb.Blobs, proofs: deneb.KZGProofs): Promise<void>;
15
- export declare function validateBlobSidecarInclusionProof(blobSidecar: deneb.BlobSidecar): boolean;
16
- //# sourceMappingURL=blobSidecar.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"blobSidecar.d.ts","sourceRoot":"","sources":["../../../src/chain/validation/blobSidecar.ts"],"names":[],"mappings":"AACA,OAAO,EACL,QAAQ,EAIT,MAAM,kBAAkB,CAAC;AAO1B,OAAO,EAAY,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAM,MAAM,iBAAiB,CAAC;AAK5E,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAG7C,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,YAAY,EACnB,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,MAAM,EAAE,QAAQ,GACf,OAAO,CAAC,IAAI,CAAC,CAwKf;AAED;;;;;;;GAOG;AACH,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,YAAY,GAAG,IAAI,EAC1B,SAAS,EAAE,IAAI,EACf,SAAS,EAAE,IAAI,EACf,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,KAAK,CAAC,YAAY,GAC/B,OAAO,CAAC,IAAI,CAAC,CAgHf;AAED,wBAAsB,0BAA0B,CAC9C,sBAAsB,EAAE,KAAK,CAAC,kBAAkB,EAChD,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,MAAM,EAAE,KAAK,CAAC,SAAS,GACtB,OAAO,CAAC,IAAI,CAAC,CAYf;AAED,wBAAgB,iCAAiC,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,GAAG,OAAO,CAQzF"}
@@ -1,276 +0,0 @@
1
- import { KZG_COMMITMENT_INCLUSION_PROOF_DEPTH, KZG_COMMITMENT_SUBTREE_INDEX0, isForkPostElectra, } from "@lodestar/params";
2
- import { computeEpochAtSlot, computeStartSlotAtEpoch, getBlockHeaderProposerSignatureSetByHeaderSlot, getBlockHeaderProposerSignatureSetByParentStateSlot, } from "@lodestar/state-transition";
3
- import { ssz } from "@lodestar/types";
4
- import { byteArrayEquals, toRootHex, verifyMerkleBranch } from "@lodestar/utils";
5
- import { kzg } from "../../util/kzg.js";
6
- import { BlobSidecarErrorCode, BlobSidecarGossipError, BlobSidecarValidationError } from "../errors/blobSidecarError.js";
7
- import { GossipAction } from "../errors/gossipValidation.js";
8
- import { RegenCaller } from "../regen/index.js";
9
- export async function validateGossipBlobSidecar(fork, chain, blobSidecar, subnet) {
10
- const blobSlot = blobSidecar.signedBlockHeader.message.slot;
11
- // [REJECT] The sidecar's index is consistent with `MAX_BLOBS_PER_BLOCK` -- i.e. `blob_sidecar.index < MAX_BLOBS_PER_BLOCK`.
12
- const maxBlobsPerBlock = chain.config.getMaxBlobsPerBlock(computeEpochAtSlot(blobSlot));
13
- if (blobSidecar.index >= maxBlobsPerBlock) {
14
- throw new BlobSidecarGossipError(GossipAction.REJECT, {
15
- code: BlobSidecarErrorCode.INDEX_TOO_LARGE,
16
- blobIdx: blobSidecar.index,
17
- maxBlobsPerBlock,
18
- });
19
- }
20
- // [REJECT] The sidecar is for the correct subnet -- i.e. `compute_subnet_for_blob_sidecar(sidecar.index) == subnet_id`.
21
- if (computeSubnetForBlobSidecar(fork, chain.config, blobSidecar.index) !== subnet) {
22
- throw new BlobSidecarGossipError(GossipAction.REJECT, {
23
- code: BlobSidecarErrorCode.INVALID_INDEX,
24
- blobIdx: blobSidecar.index,
25
- subnet,
26
- });
27
- }
28
- // [IGNORE] The sidecar is not from a future slot (with a MAXIMUM_GOSSIP_CLOCK_DISPARITY allowance) --
29
- // i.e. validate that sidecar.slot <= current_slot (a client MAY queue future blocks for processing at
30
- // the appropriate slot).
31
- const currentSlotWithGossipDisparity = chain.clock.currentSlotWithGossipDisparity;
32
- if (currentSlotWithGossipDisparity < blobSlot) {
33
- throw new BlobSidecarGossipError(GossipAction.IGNORE, {
34
- code: BlobSidecarErrorCode.FUTURE_SLOT,
35
- currentSlot: currentSlotWithGossipDisparity,
36
- blockSlot: blobSlot,
37
- });
38
- }
39
- // [IGNORE] The sidecar is from a slot greater than the latest finalized slot -- i.e. validate that
40
- // sidecar.slot > compute_start_slot_at_epoch(state.finalized_checkpoint.epoch)
41
- const finalizedCheckpoint = chain.forkChoice.getFinalizedCheckpoint();
42
- const finalizedSlot = computeStartSlotAtEpoch(finalizedCheckpoint.epoch);
43
- if (blobSlot <= finalizedSlot) {
44
- throw new BlobSidecarGossipError(GossipAction.IGNORE, {
45
- code: BlobSidecarErrorCode.WOULD_REVERT_FINALIZED_SLOT,
46
- blockSlot: blobSlot,
47
- finalizedSlot,
48
- });
49
- }
50
- // Check if the block is already known. We know it is post-finalization, so it is sufficient to check the fork choice.
51
- //
52
- // In normal operation this isn't necessary, however it is useful immediately after a
53
- // reboot if the `observed_block_producers` cache is empty. In that case, without this
54
- // check, we will load the parent and state from disk only to find out later that we
55
- // already know this block.
56
- const blockRoot = ssz.phase0.BeaconBlockHeader.hashTreeRoot(blobSidecar.signedBlockHeader.message);
57
- const blockHex = toRootHex(blockRoot);
58
- if (chain.forkChoice.getBlockHexDefaultStatus(blockHex) !== null) {
59
- throw new BlobSidecarGossipError(GossipAction.IGNORE, { code: BlobSidecarErrorCode.ALREADY_KNOWN, root: blockHex });
60
- }
61
- // TODO: freetheblobs - check for badblock
62
- // TODO: freetheblobs - check that its first blob with valid signature
63
- // _[IGNORE]_ The blob's block's parent (defined by `sidecar.block_parent_root`) has been seen (via both
64
- // gossip and non-gossip sources) (a client MAY queue blocks for processing once the parent block is
65
- // retrieved).
66
- const parentRoot = toRootHex(blobSidecar.signedBlockHeader.message.parentRoot);
67
- const parentBlock = chain.forkChoice.getBlockHexDefaultStatus(parentRoot);
68
- if (parentBlock === null) {
69
- // If fork choice does *not* consider the parent to be a descendant of the finalized block,
70
- // then there are two more cases:
71
- //
72
- // 1. We have the parent stored in our database. Because fork-choice has confirmed the
73
- // parent is *not* in our post-finalization DAG, all other blocks must be either
74
- // pre-finalization or conflicting with finalization.
75
- // 2. The parent is unknown to us, we probably want to download it since it might actually
76
- // descend from the finalized root.
77
- // (Non-Lighthouse): Since we prune all blocks non-descendant from finalized checking the `db.block` database won't be useful to guard
78
- // against known bad fork blocks, so we throw PARENT_UNKNOWN for cases (1) and (2)
79
- throw new BlobSidecarGossipError(GossipAction.IGNORE, {
80
- code: BlobSidecarErrorCode.PARENT_UNKNOWN,
81
- parentRoot,
82
- blockRoot: blockHex,
83
- slot: blobSlot,
84
- });
85
- }
86
- // [REJECT] The blob is from a higher slot than its parent.
87
- if (parentBlock.slot >= blobSlot) {
88
- throw new BlobSidecarGossipError(GossipAction.REJECT, {
89
- code: BlobSidecarErrorCode.NOT_LATER_THAN_PARENT,
90
- parentSlot: parentBlock.slot,
91
- slot: blobSlot,
92
- });
93
- }
94
- // getBlockSlotState also checks for whether the current finalized checkpoint is an ancestor of the block.
95
- // As a result, we throw an IGNORE (whereas the spec says we should REJECT for this scenario).
96
- // this is something we should change this in the future to make the code airtight to the spec.
97
- // [IGNORE] The block's parent (defined by block.parent_root) has been seen (via both gossip and non-gossip sources) (a client MAY queue blocks for processing once the parent block is retrieved).
98
- // [REJECT] The block's parent (defined by block.parent_root) passes validation.
99
- const blockState = await chain.regen
100
- .getBlockSlotState(parentBlock, blobSlot, { dontTransferCache: true }, RegenCaller.validateGossipBlock)
101
- .catch(() => {
102
- throw new BlobSidecarGossipError(GossipAction.IGNORE, {
103
- code: BlobSidecarErrorCode.PARENT_UNKNOWN,
104
- parentRoot,
105
- blockRoot: blockHex,
106
- slot: blobSlot,
107
- });
108
- });
109
- // [REJECT] The proposer signature, signed_beacon_block.signature, is valid with respect to the proposer_index pubkey.
110
- const signature = blobSidecar.signedBlockHeader.signature;
111
- if (!chain.seenBlockInputCache.isVerifiedProposerSignature(blobSlot, blockHex, signature)) {
112
- const signatureSet = getBlockHeaderProposerSignatureSetByParentStateSlot(chain.config, blockState.slot, blobSidecar.signedBlockHeader);
113
- // Don't batch so verification is not delayed
114
- if (!(await chain.bls.verifySignatureSets([signatureSet], { verifyOnMainThread: true }))) {
115
- throw new BlobSidecarGossipError(GossipAction.REJECT, {
116
- code: BlobSidecarErrorCode.PROPOSAL_SIGNATURE_INVALID,
117
- blockRoot: blockHex,
118
- index: blobSidecar.index,
119
- slot: blobSlot,
120
- });
121
- }
122
- chain.seenBlockInputCache.markVerifiedProposerSignature(blobSlot, blockHex, signature);
123
- }
124
- // verify if the blob inclusion proof is correct
125
- if (!validateBlobSidecarInclusionProof(blobSidecar)) {
126
- throw new BlobSidecarGossipError(GossipAction.REJECT, {
127
- code: BlobSidecarErrorCode.INCLUSION_PROOF_INVALID,
128
- slot: blobSidecar.signedBlockHeader.message.slot,
129
- blobIdx: blobSidecar.index,
130
- });
131
- }
132
- // _[IGNORE]_ The sidecar is the only sidecar with valid signature received for the tuple
133
- // `(sidecar.block_root, sidecar.index)`
134
- //
135
- // This is already taken care of by the way we group the blobs in getFullBlockInput helper
136
- // but may be an error can be thrown there for this
137
- // _[REJECT]_ The sidecar is proposed by the expected `proposer_index` for the block's slot in the
138
- // context of the current shuffling (defined by `block_parent_root`/`slot`)
139
- // If the `proposer_index` cannot immediately be verified against the expected shuffling, the sidecar
140
- // MAY be queued for later processing while proposers for the block's branch are calculated -- in such
141
- // a case _do not_ `REJECT`, instead `IGNORE` this message.
142
- const proposerIndex = blobSidecar.signedBlockHeader.message.proposerIndex;
143
- if (blockState.getBeaconProposer(blobSlot) !== proposerIndex) {
144
- throw new BlobSidecarGossipError(GossipAction.REJECT, {
145
- code: BlobSidecarErrorCode.INCORRECT_PROPOSER,
146
- proposerIndex,
147
- });
148
- }
149
- // blob, proof and commitment as a valid BLS G1 point gets verified in batch validation
150
- try {
151
- await validateBlobsAndBlobProofs([blobSidecar.kzgCommitment], [blobSidecar.blob], [blobSidecar.kzgProof]);
152
- }
153
- catch (_e) {
154
- throw new BlobSidecarGossipError(GossipAction.REJECT, {
155
- code: BlobSidecarErrorCode.INVALID_KZG_PROOF,
156
- blobIdx: blobSidecar.index,
157
- });
158
- }
159
- }
160
- /**
161
- * Validate some blob sidecars in a block
162
- *
163
- * Requires the block to be known to the node
164
- *
165
- * NOTE: chain is optional to skip signature verification. Helpful for testing purposes and so that can control whether
166
- * signature gets checked depending on the reqresp method that is being checked
167
- */
168
- export async function validateBlockBlobSidecars(chain, blockSlot, blockRoot, blockBlobCount, blobSidecars) {
169
- if (blobSidecars.length === 0) {
170
- return;
171
- }
172
- if (blockBlobCount === 0) {
173
- throw new BlobSidecarValidationError({
174
- code: BlobSidecarErrorCode.INCORRECT_SIDECAR_COUNT,
175
- slot: blockSlot,
176
- expected: blockBlobCount,
177
- actual: blobSidecars.length,
178
- });
179
- }
180
- // Hash the first sidecar block header and compare the rest via (cheaper) equality
181
- const firstSidecarSignedBlockHeader = blobSidecars[0].signedBlockHeader;
182
- const firstSidecarBlockHeader = firstSidecarSignedBlockHeader.message;
183
- const firstBlockRoot = ssz.phase0.BeaconBlockHeader.hashTreeRoot(firstSidecarBlockHeader);
184
- if (!byteArrayEquals(blockRoot, firstBlockRoot)) {
185
- throw new BlobSidecarValidationError({
186
- code: BlobSidecarErrorCode.INCORRECT_BLOCK,
187
- slot: blockSlot,
188
- blobIdx: 0,
189
- expected: toRootHex(blockRoot),
190
- actual: toRootHex(firstBlockRoot),
191
- }, "BlobSidecar doesn't match corresponding block");
192
- }
193
- if (chain !== null) {
194
- const blockRootHex = toRootHex(blockRoot);
195
- const signature = firstSidecarSignedBlockHeader.signature;
196
- if (!chain.seenBlockInputCache.isVerifiedProposerSignature(blockSlot, blockRootHex, signature)) {
197
- const signatureSet = getBlockHeaderProposerSignatureSetByHeaderSlot(chain.config, firstSidecarSignedBlockHeader);
198
- if (!(await chain.bls.verifySignatureSets([signatureSet], {
199
- verifyOnMainThread: true,
200
- }))) {
201
- throw new BlobSidecarValidationError({
202
- code: BlobSidecarErrorCode.PROPOSAL_SIGNATURE_INVALID,
203
- blockRoot: blockRootHex,
204
- slot: blockSlot,
205
- index: blobSidecars[0].index,
206
- });
207
- }
208
- chain.seenBlockInputCache.markVerifiedProposerSignature(blockSlot, blockRootHex, signature);
209
- }
210
- }
211
- const commitments = [];
212
- const blobs = [];
213
- const proofs = [];
214
- for (let i = 0; i < blobSidecars.length; i++) {
215
- const blobSidecar = blobSidecars[i];
216
- const blobIndex = blobSidecar.index;
217
- if (i !== 0 &&
218
- !ssz.phase0.SignedBeaconBlockHeader.equals(blobSidecar.signedBlockHeader, firstSidecarSignedBlockHeader)) {
219
- throw new BlobSidecarValidationError({
220
- code: BlobSidecarErrorCode.INCORRECT_BLOCK,
221
- slot: blockSlot,
222
- blobIdx: blobIndex,
223
- expected: toRootHex(blockRoot),
224
- actual: "unknown - compared via equality",
225
- }, "BlobSidecar doesn't match corresponding block");
226
- }
227
- if (!validateBlobSidecarInclusionProof(blobSidecar)) {
228
- throw new BlobSidecarValidationError({
229
- code: BlobSidecarErrorCode.INCLUSION_PROOF_INVALID,
230
- slot: blockSlot,
231
- blobIdx: blobIndex,
232
- }, "BlobSidecar inclusion proof invalid");
233
- }
234
- commitments.push(blobSidecar.kzgCommitment);
235
- blobs.push(blobSidecar.blob);
236
- proofs.push(blobSidecar.kzgProof);
237
- }
238
- // Final batch KZG proof verification
239
- let reason = undefined;
240
- try {
241
- if (!(await kzg.asyncVerifyBlobKzgProofBatch(blobs, commitments, proofs))) {
242
- reason = "Invalid verifyBlobKzgProofBatch";
243
- }
244
- }
245
- catch (e) {
246
- reason = e.message;
247
- }
248
- if (reason !== undefined) {
249
- throw new BlobSidecarValidationError({
250
- code: BlobSidecarErrorCode.INVALID_KZG_PROOF_BATCH,
251
- slot: blockSlot,
252
- reason,
253
- }, "BlobSidecar has invalid KZG proof batch");
254
- }
255
- }
256
- export async function validateBlobsAndBlobProofs(expectedKzgCommitments, blobs, proofs) {
257
- // assert verify_aggregate_kzg_proof(blobs, expected_kzg_commitments, kzg_aggregated_proof)
258
- let isProofValid;
259
- try {
260
- isProofValid = await kzg.asyncVerifyBlobKzgProofBatch(blobs, expectedKzgCommitments, proofs);
261
- }
262
- catch (e) {
263
- e.message = `Error on verifyBlobKzgProofBatch: ${e.message}`;
264
- throw e;
265
- }
266
- if (!isProofValid) {
267
- throw Error("Invalid verifyBlobKzgProofBatch");
268
- }
269
- }
270
- export function validateBlobSidecarInclusionProof(blobSidecar) {
271
- return verifyMerkleBranch(ssz.deneb.KZGCommitment.hashTreeRoot(blobSidecar.kzgCommitment), blobSidecar.kzgCommitmentInclusionProof, KZG_COMMITMENT_INCLUSION_PROOF_DEPTH, KZG_COMMITMENT_SUBTREE_INDEX0 + blobSidecar.index, blobSidecar.signedBlockHeader.message.bodyRoot);
272
- }
273
- function computeSubnetForBlobSidecar(fork, config, blobIndex) {
274
- return (blobIndex % (isForkPostElectra(fork) ? config.BLOB_SIDECAR_SUBNET_COUNT_ELECTRA : config.BLOB_SIDECAR_SUBNET_COUNT));
275
- }
276
- //# sourceMappingURL=blobSidecar.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"blobSidecar.js","sourceRoot":"","sources":["../../../src/chain/validation/blobSidecar.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import { ChainConfig } from "@lodestar/config";
2
- import { ResponseOutgoing } from "@lodestar/reqresp";
3
- import { Epoch, Slot, deneb } from "@lodestar/types";
4
- import { IBeaconChain } from "../../../chain/index.js";
5
- import { IBeaconDb } from "../../../db/index.js";
6
- export declare function onBlobSidecarsByRange(request: deneb.BlobSidecarsByRangeRequest, chain: IBeaconChain, db: IBeaconDb): AsyncIterable<ResponseOutgoing>;
7
- export declare function iterateBlobBytesFromWrapper(chain: IBeaconChain, blobSideCarsBytesWrapped: Uint8Array, blockSlot: Slot): Iterable<ResponseOutgoing>;
8
- export declare function validateBlobSidecarsByRangeRequest(config: ChainConfig, currentEpoch: Epoch, request: deneb.BlobSidecarsByRangeRequest): deneb.BlobSidecarsByRangeRequest;
9
- //# sourceMappingURL=blobSidecarsByRange.d.ts.map
@@ -1 +0,0 @@
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,CA0DjC;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"}
@@ -1,91 +0,0 @@
1
- import { BLOB_SIDECAR_FIXED_SIZE, GENESIS_SLOT } from "@lodestar/params";
2
- import { RespStatus, ResponseError } from "@lodestar/reqresp";
3
- import { computeEpochAtSlot } from "@lodestar/state-transition";
4
- import { fromHex } from "@lodestar/utils";
5
- import { BLOB_SIDECARS_IN_WRAPPER_INDEX } from "../../../db/repositories/blobSidecars.js";
6
- export async function* onBlobSidecarsByRange(request, chain, db) {
7
- // Non-finalized range of blobs
8
- const { startSlot, count } = validateBlobSidecarsByRangeRequest(chain.config, chain.clock.currentEpoch, request);
9
- const endSlot = startSlot + count;
10
- const finalized = db.blobSidecarsArchive;
11
- const unfinalized = db.blobSidecars;
12
- const finalizedSlot = chain.forkChoice.getFinalizedBlock().slot;
13
- // Blobs are migrated to blobSidecarsArchive at finalization (including the finalized block
14
- // itself), so the archive loop serves up to AND INCLUDING finalizedSlot and the headChain
15
- // loop starts above it to avoid duplicate yields. See archiveBlocks.ts for the migration logic.
16
- const archiveMaxSlot = finalizedSlot;
17
- // Finalized range of blobs
18
- if (startSlot <= archiveMaxSlot) {
19
- // Chain of blobs won't change
20
- for await (const { key, value: blobSideCarsBytesWrapped } of finalized.binaryEntriesStream({
21
- gte: startSlot,
22
- lt: Math.min(endSlot, archiveMaxSlot + 1),
23
- })) {
24
- yield* iterateBlobBytesFromWrapper(chain, blobSideCarsBytesWrapped, finalized.decodeKey(key));
25
- }
26
- }
27
- // Non-finalized range of blobs
28
- if (endSlot > archiveMaxSlot) {
29
- const headBlock = chain.forkChoice.getHead();
30
- const headRoot = headBlock.blockRoot;
31
- // TODO DENEB: forkChoice should mantain an array of canonical blocks, and change only on reorg
32
- const headChain = chain.forkChoice.getAllAncestorBlocks(headRoot, headBlock.payloadStatus);
33
- // `getAllAncestorBlocks` includes both the head and the previous-finalized boundary.
34
- // Iterate head chain with ascending block numbers
35
- for (let i = headChain.length - 1; i >= 0; i--) {
36
- const block = headChain[i];
37
- // Must include only blobs in the range requested, and skip anything the archive loop
38
- // above already served via the block.slot > archiveMaxSlot filter.
39
- if (block.slot > archiveMaxSlot && block.slot >= startSlot && block.slot < endSlot) {
40
- // Note: Here the forkChoice head may change due to a re-org, so the headChain reflects the canonical chain
41
- // at the time of the start of the request. Spec is clear the chain of blobs must be consistent, but on
42
- // re-org there's no need to abort the request
43
- // Spec: https://github.com/ethereum/consensus-specs/blob/a1e46d1ae47dd9d097725801575b46907c12a1f8/specs/eip4844/p2p-interface.md#blobssidecarsbyrange-v1
44
- const blobSideCarsBytesWrapped = await unfinalized.getBinary(fromHex(block.blockRoot));
45
- if (!blobSideCarsBytesWrapped) {
46
- // Handle the same to onBeaconBlocksByRange
47
- throw new ResponseError(RespStatus.SERVER_ERROR, `No item for root ${block.blockRoot} slot ${block.slot}`);
48
- }
49
- yield* iterateBlobBytesFromWrapper(chain, blobSideCarsBytesWrapped, block.slot);
50
- }
51
- // If block is after endSlot, stop iterating
52
- else if (block.slot >= endSlot) {
53
- break;
54
- }
55
- }
56
- }
57
- }
58
- export function* iterateBlobBytesFromWrapper(chain, blobSideCarsBytesWrapped, blockSlot) {
59
- const allBlobSideCarsBytes = blobSideCarsBytesWrapped.slice(BLOB_SIDECARS_IN_WRAPPER_INDEX);
60
- const blobsLen = allBlobSideCarsBytes.length / BLOB_SIDECAR_FIXED_SIZE;
61
- for (let index = 0; index < blobsLen; index++) {
62
- const blobSideCarBytes = allBlobSideCarsBytes.slice(index * BLOB_SIDECAR_FIXED_SIZE, (index + 1) * BLOB_SIDECAR_FIXED_SIZE);
63
- if (blobSideCarBytes.length !== BLOB_SIDECAR_FIXED_SIZE) {
64
- throw new ResponseError(RespStatus.SERVER_ERROR, `Invalid blobSidecar index=${index} bytes length=${blobSideCarBytes.length} expected=${BLOB_SIDECAR_FIXED_SIZE} for slot ${blockSlot} blobsLen=${blobsLen}`);
65
- }
66
- yield {
67
- data: blobSideCarBytes,
68
- boundary: chain.config.getForkBoundaryAtEpoch(computeEpochAtSlot(blockSlot)),
69
- };
70
- }
71
- }
72
- export function validateBlobSidecarsByRangeRequest(config, currentEpoch, request) {
73
- const { startSlot } = request;
74
- let { count } = request;
75
- if (count < 1) {
76
- throw new ResponseError(RespStatus.INVALID_REQUEST, "count < 1");
77
- }
78
- if (startSlot < GENESIS_SLOT) {
79
- throw new ResponseError(RespStatus.INVALID_REQUEST, "startSlot < genesis");
80
- }
81
- // Spec: [max(current_epoch - MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS, DENEB_FORK_EPOCH), current_epoch]
82
- const minimumRequestEpoch = Math.max(currentEpoch - config.MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS, config.DENEB_FORK_EPOCH);
83
- if (computeEpochAtSlot(startSlot) < minimumRequestEpoch) {
84
- throw new ResponseError(RespStatus.RESOURCE_UNAVAILABLE, "startSlot is before MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS");
85
- }
86
- if (count > config.MAX_REQUEST_BLOCKS_DENEB) {
87
- count = config.MAX_REQUEST_BLOCKS_DENEB;
88
- }
89
- return { startSlot, count };
90
- }
91
- //# sourceMappingURL=blobSidecarsByRange.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"blobSidecarsByRange.js","sourceRoot":"","sources":["../../../../src/network/reqresp/handlers/blobSidecarsByRange.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- import { ResponseOutgoing } from "@lodestar/reqresp";
2
- import { IBeaconChain } from "../../../chain/index.js";
3
- import { BlobSidecarsByRootRequest } from "../../../util/types.js";
4
- export declare function onBlobSidecarsByRoot(requestBody: BlobSidecarsByRootRequest, chain: IBeaconChain): AsyncIterable<ResponseOutgoing>;
5
- //# sourceMappingURL=blobSidecarsByRoot.d.ts.map
@@ -1 +0,0 @@
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"}