@lodestar/beacon-node 1.51.0-dev.c99cf49add → 1.51.0-dev.cda05d18f1

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 (645) 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/index.d.ts.map +1 -1
  15. package/lib/api/impl/beacon/state/index.js +8 -2
  16. package/lib/api/impl/beacon/state/index.js.map +1 -1
  17. package/lib/api/impl/beacon/state/utils.d.ts +3 -2
  18. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
  19. package/lib/api/impl/beacon/state/utils.js +17 -9
  20. package/lib/api/impl/beacon/state/utils.js.map +1 -1
  21. package/lib/api/impl/debug/index.d.ts.map +1 -1
  22. package/lib/api/impl/debug/index.js +3 -0
  23. package/lib/api/impl/debug/index.js.map +1 -1
  24. package/lib/api/impl/validator/index.d.ts +6 -0
  25. package/lib/api/impl/validator/index.d.ts.map +1 -1
  26. package/lib/api/impl/validator/index.js +143 -35
  27. package/lib/api/impl/validator/index.js.map +1 -1
  28. package/lib/api/options.d.ts +2 -0
  29. package/lib/api/options.d.ts.map +1 -1
  30. package/lib/api/options.js +1 -0
  31. package/lib/api/options.js.map +1 -1
  32. package/lib/chain/ColumnReconstructionTracker.d.ts +11 -11
  33. package/lib/chain/ColumnReconstructionTracker.d.ts.map +1 -1
  34. package/lib/chain/ColumnReconstructionTracker.js +46 -40
  35. package/lib/chain/ColumnReconstructionTracker.js.map +1 -1
  36. package/lib/chain/GetBlobsTracker.d.ts +13 -2
  37. package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
  38. package/lib/chain/GetBlobsTracker.js +69 -35
  39. package/lib/chain/GetBlobsTracker.js.map +1 -1
  40. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  41. package/lib/chain/archiveStore/archiveStore.js +1 -0
  42. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  43. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +4 -0
  44. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -1
  45. package/lib/chain/archiveStore/utils/archiveBlocks.js +61 -97
  46. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  47. package/lib/chain/blocks/blockInput/blockInput.d.ts +11 -56
  48. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
  49. package/lib/chain/blocks/blockInput/blockInput.js +5 -241
  50. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  51. package/lib/chain/blocks/blockInput/errors.d.ts +2 -4
  52. package/lib/chain/blocks/blockInput/errors.d.ts.map +1 -1
  53. package/lib/chain/blocks/blockInput/errors.js.map +1 -1
  54. package/lib/chain/blocks/blockInput/types.d.ts +2 -18
  55. package/lib/chain/blocks/blockInput/types.d.ts.map +1 -1
  56. package/lib/chain/blocks/blockInput/types.js +0 -1
  57. package/lib/chain/blocks/blockInput/types.js.map +1 -1
  58. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  59. package/lib/chain/blocks/importBlock.js +42 -57
  60. package/lib/chain/blocks/importBlock.js.map +1 -1
  61. package/lib/chain/blocks/importExecutionPayload.d.ts +10 -11
  62. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  63. package/lib/chain/blocks/importExecutionPayload.js +82 -20
  64. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  65. package/lib/chain/blocks/index.d.ts.map +1 -1
  66. package/lib/chain/blocks/index.js +4 -4
  67. package/lib/chain/blocks/index.js.map +1 -1
  68. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts +12 -9
  69. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts.map +1 -1
  70. package/lib/chain/blocks/payloadEnvelopeProcessor.js +24 -19
  71. package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -1
  72. package/lib/chain/blocks/types.d.ts +7 -19
  73. package/lib/chain/blocks/types.d.ts.map +1 -1
  74. package/lib/chain/blocks/types.js +5 -24
  75. package/lib/chain/blocks/types.js.map +1 -1
  76. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  77. package/lib/chain/blocks/verifyBlock.js +18 -7
  78. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  79. package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts.map +1 -1
  80. package/lib/chain/blocks/verifyBlocksDataAvailability.js +14 -2
  81. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  82. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +1 -1
  83. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  84. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +7 -3
  85. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  86. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -1
  87. package/lib/chain/blocks/verifyBlocksSanityChecks.js +4 -0
  88. package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
  89. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  90. package/lib/chain/blocks/verifyBlocksSignatures.js +10 -5
  91. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  92. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts +3 -3
  93. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts.map +1 -1
  94. package/lib/chain/blocks/verifyPayloadsDataAvailability.js +11 -6
  95. package/lib/chain/blocks/verifyPayloadsDataAvailability.js.map +1 -1
  96. package/lib/chain/blocks/writeBlockInputToDb.d.ts +0 -2
  97. package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +1 -1
  98. package/lib/chain/blocks/writeBlockInputToDb.js +6 -24
  99. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  100. package/lib/chain/bls/interface.d.ts +2 -0
  101. package/lib/chain/bls/interface.d.ts.map +1 -1
  102. package/lib/chain/bls/multithread/index.d.ts +1 -1
  103. package/lib/chain/bls/multithread/index.d.ts.map +1 -1
  104. package/lib/chain/bls/multithread/index.js +50 -22
  105. package/lib/chain/bls/multithread/index.js.map +1 -1
  106. package/lib/chain/bls/multithread/types.d.ts +1 -1
  107. package/lib/chain/bls/multithread/types.d.ts.map +1 -1
  108. package/lib/chain/bls/multithread/worker.js +1 -1
  109. package/lib/chain/bls/multithread/worker.js.map +1 -1
  110. package/lib/chain/bls/singleThread.js +1 -1
  111. package/lib/chain/bls/singleThread.js.map +1 -1
  112. package/lib/chain/bls/utils.js +1 -1
  113. package/lib/chain/bls/utils.js.map +1 -1
  114. package/lib/chain/chain.d.ts +26 -4
  115. package/lib/chain/chain.d.ts.map +1 -1
  116. package/lib/chain/chain.js +128 -43
  117. package/lib/chain/chain.js.map +1 -1
  118. package/lib/chain/emitter.d.ts +7 -7
  119. package/lib/chain/emitter.d.ts.map +1 -1
  120. package/lib/chain/emitter.js +5 -5
  121. package/lib/chain/emitter.js.map +1 -1
  122. package/lib/chain/errors/blockError.d.ts +1 -1
  123. package/lib/chain/errors/blockError.d.ts.map +1 -1
  124. package/lib/chain/errors/blockError.js +1 -1
  125. package/lib/chain/errors/blockError.js.map +1 -1
  126. package/lib/chain/errors/executionPayloadBid.d.ts +11 -1
  127. package/lib/chain/errors/executionPayloadBid.d.ts.map +1 -1
  128. package/lib/chain/errors/executionPayloadBid.js +2 -0
  129. package/lib/chain/errors/executionPayloadBid.js.map +1 -1
  130. package/lib/chain/errors/executionPayloadEnvelope.d.ts +7 -0
  131. package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
  132. package/lib/chain/errors/executionPayloadEnvelope.js +1 -0
  133. package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
  134. package/lib/chain/errors/inclusionList.d.ts +60 -0
  135. package/lib/chain/errors/inclusionList.d.ts.map +1 -0
  136. package/lib/chain/errors/inclusionList.js +19 -0
  137. package/lib/chain/errors/inclusionList.js.map +1 -0
  138. package/lib/chain/errors/index.d.ts +1 -1
  139. package/lib/chain/errors/index.d.ts.map +1 -1
  140. package/lib/chain/errors/index.js +1 -1
  141. package/lib/chain/errors/index.js.map +1 -1
  142. package/lib/chain/forkChoice/index.d.ts +11 -1
  143. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  144. package/lib/chain/forkChoice/index.js +11 -0
  145. package/lib/chain/forkChoice/index.js.map +1 -1
  146. package/lib/chain/forkChoiceExecutionEngine.d.ts +51 -0
  147. package/lib/chain/forkChoiceExecutionEngine.d.ts.map +1 -0
  148. package/lib/chain/forkChoiceExecutionEngine.js +117 -0
  149. package/lib/chain/forkChoiceExecutionEngine.js.map +1 -0
  150. package/lib/chain/interface.d.ts +10 -7
  151. package/lib/chain/interface.d.ts.map +1 -1
  152. package/lib/chain/interface.js.map +1 -1
  153. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +17 -4
  154. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  155. package/lib/chain/opPools/aggregatedAttestationPool.js +199 -46
  156. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  157. package/lib/chain/opPools/attestationPool.d.ts +1 -1
  158. package/lib/chain/opPools/attestationPool.d.ts.map +1 -1
  159. package/lib/chain/opPools/attestationPool.js +15 -4
  160. package/lib/chain/opPools/attestationPool.js.map +1 -1
  161. package/lib/chain/opPools/inclusionListStore.d.ts +63 -0
  162. package/lib/chain/opPools/inclusionListStore.d.ts.map +1 -0
  163. package/lib/chain/opPools/inclusionListStore.js +171 -0
  164. package/lib/chain/opPools/inclusionListStore.js.map +1 -0
  165. package/lib/chain/opPools/index.d.ts +2 -0
  166. package/lib/chain/opPools/index.d.ts.map +1 -1
  167. package/lib/chain/opPools/index.js +2 -0
  168. package/lib/chain/opPools/index.js.map +1 -1
  169. package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -1
  170. package/lib/chain/opPools/payloadAttestationPool.js +17 -7
  171. package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
  172. package/lib/chain/opPools/singleAttestationPool.d.ts +77 -0
  173. package/lib/chain/opPools/singleAttestationPool.d.ts.map +1 -0
  174. package/lib/chain/opPools/singleAttestationPool.js +209 -0
  175. package/lib/chain/opPools/singleAttestationPool.js.map +1 -0
  176. package/lib/chain/opPools/syncCommitteeMessagePool.d.ts.map +1 -1
  177. package/lib/chain/opPools/syncCommitteeMessagePool.js +9 -3
  178. package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
  179. package/lib/chain/opPools/syncContributionAndProofPool.d.ts.map +1 -1
  180. package/lib/chain/opPools/syncContributionAndProofPool.js +11 -3
  181. package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
  182. package/lib/chain/opPools/utils.d.ts +1 -1
  183. package/lib/chain/opPools/utils.d.ts.map +1 -1
  184. package/lib/chain/opPools/utils.js +1 -1
  185. package/lib/chain/opPools/utils.js.map +1 -1
  186. package/lib/chain/options.d.ts +5 -3
  187. package/lib/chain/options.d.ts.map +1 -1
  188. package/lib/chain/options.js +0 -1
  189. package/lib/chain/options.js.map +1 -1
  190. package/lib/chain/produceBlock/produceBlockBody.d.ts +6 -3
  191. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  192. package/lib/chain/produceBlock/produceBlockBody.js +32 -11
  193. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  194. package/lib/chain/proposerTracker.d.ts +31 -0
  195. package/lib/chain/proposerTracker.d.ts.map +1 -0
  196. package/lib/chain/proposerTracker.js +75 -0
  197. package/lib/chain/proposerTracker.js.map +1 -0
  198. package/lib/chain/regen/interface.d.ts +2 -2
  199. package/lib/chain/regen/interface.d.ts.map +1 -1
  200. package/lib/chain/regen/interface.js +1 -1
  201. package/lib/chain/regen/interface.js.map +1 -1
  202. package/lib/chain/regen/queued.d.ts +1 -1
  203. package/lib/chain/regen/queued.d.ts.map +1 -1
  204. package/lib/chain/regen/queued.js +5 -3
  205. package/lib/chain/regen/queued.js.map +1 -1
  206. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +7 -14
  207. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
  208. package/lib/chain/seenCache/seenGossipBlockInput.js +6 -65
  209. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  210. package/lib/chain/validation/executionPayloadBid.d.ts +0 -15
  211. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  212. package/lib/chain/validation/executionPayloadBid.js +37 -158
  213. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  214. package/lib/chain/validation/executionPayloadEnvelope.d.ts +6 -0
  215. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
  216. package/lib/chain/validation/executionPayloadEnvelope.js +53 -0
  217. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  218. package/lib/chain/validation/inclusionList.d.ts +14 -0
  219. package/lib/chain/validation/inclusionList.d.ts.map +1 -0
  220. package/lib/chain/validation/inclusionList.js +150 -0
  221. package/lib/chain/validation/inclusionList.js.map +1 -0
  222. package/lib/chain/validation/index.d.ts +1 -0
  223. package/lib/chain/validation/index.d.ts.map +1 -1
  224. package/lib/chain/validation/index.js +1 -0
  225. package/lib/chain/validation/index.js.map +1 -1
  226. package/lib/chain/validation/syncCommittee.d.ts.map +1 -1
  227. package/lib/chain/validation/syncCommittee.js +16 -10
  228. package/lib/chain/validation/syncCommittee.js.map +1 -1
  229. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -1
  230. package/lib/chain/validation/syncCommitteeContributionAndProof.js +11 -0
  231. package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
  232. package/lib/chain/validatorMonitor.d.ts +1 -2
  233. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  234. package/lib/chain/validatorMonitor.js +0 -3
  235. package/lib/chain/validatorMonitor.js.map +1 -1
  236. package/lib/db/beacon.d.ts +7 -0
  237. package/lib/db/beacon.d.ts.map +1 -1
  238. package/lib/db/beacon.js +34 -0
  239. package/lib/db/beacon.js.map +1 -1
  240. package/lib/db/dataColumnStore.d.ts +1 -1
  241. package/lib/db/dataColumnStore.d.ts.map +1 -1
  242. package/lib/db/dataColumnStore.js +1 -4
  243. package/lib/db/dataColumnStore.js.map +1 -1
  244. package/lib/db/flatFileStore/flatFileStore.js +5 -5
  245. package/lib/db/flatFileStore/flatFileStore.js.map +1 -1
  246. package/lib/db/flatFileStore/slotIndex.d.ts.map +1 -1
  247. package/lib/db/flatFileStore/slotIndex.js +2 -2
  248. package/lib/db/flatFileStore/slotIndex.js.map +1 -1
  249. package/lib/db/interface.d.ts +1 -0
  250. package/lib/db/interface.d.ts.map +1 -1
  251. package/lib/db/repositories/blobSidecars.d.ts +0 -1
  252. package/lib/db/repositories/blobSidecars.d.ts.map +1 -1
  253. package/lib/db/repositories/blobSidecars.js +0 -1
  254. package/lib/db/repositories/blobSidecars.js.map +1 -1
  255. package/lib/db/repositories/dataColumnSidecarArchive.d.ts +6 -0
  256. package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +1 -1
  257. package/lib/db/repositories/dataColumnSidecarArchive.js +19 -0
  258. package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
  259. package/lib/execution/builder/apiClient.d.ts +14 -8
  260. package/lib/execution/builder/apiClient.d.ts.map +1 -1
  261. package/lib/execution/builder/apiClient.js +12 -10
  262. package/lib/execution/builder/apiClient.js.map +1 -1
  263. package/lib/execution/builder/http.d.ts +2 -0
  264. package/lib/execution/builder/http.d.ts.map +1 -1
  265. package/lib/execution/builder/http.js +2 -0
  266. package/lib/execution/builder/http.js.map +1 -1
  267. package/lib/execution/builder/validateBid.d.ts.map +1 -1
  268. package/lib/execution/builder/validateBid.js +14 -1
  269. package/lib/execution/builder/validateBid.js.map +1 -1
  270. package/lib/execution/engine/blobVersionedHashes.d.ts +1 -1
  271. package/lib/execution/engine/blobVersionedHashes.d.ts.map +1 -1
  272. package/lib/execution/engine/blobVersionedHashes.js.map +1 -1
  273. package/lib/execution/engine/disabled.d.ts +1 -0
  274. package/lib/execution/engine/disabled.d.ts.map +1 -1
  275. package/lib/execution/engine/disabled.js +3 -0
  276. package/lib/execution/engine/disabled.js.map +1 -1
  277. package/lib/execution/engine/http.d.ts +12 -8
  278. package/lib/execution/engine/http.d.ts.map +1 -1
  279. package/lib/execution/engine/http.js +35 -14
  280. package/lib/execution/engine/http.js.map +1 -1
  281. package/lib/execution/engine/index.d.ts +1 -1
  282. package/lib/execution/engine/index.d.ts.map +1 -1
  283. package/lib/execution/engine/index.js +1 -1
  284. package/lib/execution/engine/index.js.map +1 -1
  285. package/lib/execution/engine/interface.d.ts +29 -8
  286. package/lib/execution/engine/interface.d.ts.map +1 -1
  287. package/lib/execution/engine/interface.js.map +1 -1
  288. package/lib/execution/engine/jsonRpcTransport.d.ts +5 -6
  289. package/lib/execution/engine/jsonRpcTransport.d.ts.map +1 -1
  290. package/lib/execution/engine/jsonRpcTransport.js +34 -20
  291. package/lib/execution/engine/jsonRpcTransport.js.map +1 -1
  292. package/lib/execution/engine/mock.d.ts +1 -1
  293. package/lib/execution/engine/mock.d.ts.map +1 -1
  294. package/lib/execution/engine/mock.js +31 -11
  295. package/lib/execution/engine/mock.js.map +1 -1
  296. package/lib/execution/engine/payloadIdCache.d.ts +5 -3
  297. package/lib/execution/engine/payloadIdCache.d.ts.map +1 -1
  298. package/lib/execution/engine/payloadIdCache.js +15 -4
  299. package/lib/execution/engine/payloadIdCache.js.map +1 -1
  300. package/lib/execution/engine/restTransport.d.ts +4 -5
  301. package/lib/execution/engine/restTransport.d.ts.map +1 -1
  302. package/lib/execution/engine/restTransport.js +4 -15
  303. package/lib/execution/engine/restTransport.js.map +1 -1
  304. package/lib/execution/engine/sszTypes.d.ts +38 -47
  305. package/lib/execution/engine/sszTypes.d.ts.map +1 -1
  306. package/lib/execution/engine/sszTypes.js +0 -5
  307. package/lib/execution/engine/sszTypes.js.map +1 -1
  308. package/lib/execution/engine/transport.d.ts +4 -14
  309. package/lib/execution/engine/transport.d.ts.map +1 -1
  310. package/lib/execution/engine/types.d.ts +25 -9
  311. package/lib/execution/engine/types.d.ts.map +1 -1
  312. package/lib/execution/engine/types.js +19 -14
  313. package/lib/execution/engine/types.js.map +1 -1
  314. package/lib/execution/engine/utils.d.ts.map +1 -1
  315. package/lib/execution/engine/utils.js +3 -2
  316. package/lib/execution/engine/utils.js.map +1 -1
  317. package/lib/index.d.ts +1 -0
  318. package/lib/index.d.ts.map +1 -1
  319. package/lib/index.js +2 -0
  320. package/lib/index.js.map +1 -1
  321. package/lib/metrics/metrics/beacon.d.ts +16 -9
  322. package/lib/metrics/metrics/beacon.d.ts.map +1 -1
  323. package/lib/metrics/metrics/beacon.js +35 -30
  324. package/lib/metrics/metrics/beacon.js.map +1 -1
  325. package/lib/metrics/metrics/lodestar.d.ts +49 -8
  326. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  327. package/lib/metrics/metrics/lodestar.js +128 -18
  328. package/lib/metrics/metrics/lodestar.js.map +1 -1
  329. package/lib/metrics/server/http.js +5 -5
  330. package/lib/metrics/server/http.js.map +1 -1
  331. package/lib/monitoring/service.js +1 -1
  332. package/lib/monitoring/service.js.map +1 -1
  333. package/lib/network/core/networkCore.d.ts +4 -1
  334. package/lib/network/core/networkCore.d.ts.map +1 -1
  335. package/lib/network/core/networkCore.js +7 -0
  336. package/lib/network/core/networkCore.js.map +1 -1
  337. package/lib/network/core/networkCoreWorker.js +2 -0
  338. package/lib/network/core/networkCoreWorker.js.map +1 -1
  339. package/lib/network/core/networkCoreWorkerHandler.d.ts +4 -1
  340. package/lib/network/core/networkCoreWorkerHandler.d.ts.map +1 -1
  341. package/lib/network/core/networkCoreWorkerHandler.js +6 -0
  342. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  343. package/lib/network/core/types.d.ts +6 -1
  344. package/lib/network/core/types.d.ts.map +1 -1
  345. package/lib/network/gossip/gossipsub.d.ts +1 -0
  346. package/lib/network/gossip/gossipsub.d.ts.map +1 -1
  347. package/lib/network/gossip/gossipsub.js +10 -0
  348. package/lib/network/gossip/gossipsub.js.map +1 -1
  349. package/lib/network/gossip/interface.d.ts +8 -9
  350. package/lib/network/gossip/interface.d.ts.map +1 -1
  351. package/lib/network/gossip/interface.js +1 -1
  352. package/lib/network/gossip/interface.js.map +1 -1
  353. package/lib/network/gossip/topic.d.ts +13 -21
  354. package/lib/network/gossip/topic.d.ts.map +1 -1
  355. package/lib/network/gossip/topic.js +13 -24
  356. package/lib/network/gossip/topic.js.map +1 -1
  357. package/lib/network/interface.d.ts +5 -5
  358. package/lib/network/interface.d.ts.map +1 -1
  359. package/lib/network/libp2p/index.d.ts.map +1 -1
  360. package/lib/network/libp2p/index.js +5 -1
  361. package/lib/network/libp2p/index.js.map +1 -1
  362. package/lib/network/network.d.ts +9 -7
  363. package/lib/network/network.d.ts.map +1 -1
  364. package/lib/network/network.js +58 -35
  365. package/lib/network/network.js.map +1 -1
  366. package/lib/network/options.d.ts +2 -0
  367. package/lib/network/options.d.ts.map +1 -1
  368. package/lib/network/options.js +2 -0
  369. package/lib/network/options.js.map +1 -1
  370. package/lib/network/peers/peerManager.d.ts +2 -1
  371. package/lib/network/peers/peerManager.d.ts.map +1 -1
  372. package/lib/network/peers/peerManager.js +28 -1
  373. package/lib/network/peers/peerManager.js.map +1 -1
  374. package/lib/network/peers/utils/assertPeerRelevance.d.ts +9 -1
  375. package/lib/network/peers/utils/assertPeerRelevance.d.ts.map +1 -1
  376. package/lib/network/peers/utils/assertPeerRelevance.js +32 -21
  377. package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
  378. package/lib/network/peers/utils/enrSubnetsDeserialize.d.ts.map +1 -1
  379. package/lib/network/peers/utils/enrSubnetsDeserialize.js +5 -2
  380. package/lib/network/peers/utils/enrSubnetsDeserialize.js.map +1 -1
  381. package/lib/network/peers/utils/prioritizePeers.d.ts +4 -1
  382. package/lib/network/peers/utils/prioritizePeers.d.ts.map +1 -1
  383. package/lib/network/peers/utils/prioritizePeers.js +8 -16
  384. package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
  385. package/lib/network/peers/utils/subnetMap.d.ts +5 -2
  386. package/lib/network/peers/utils/subnetMap.d.ts.map +1 -1
  387. package/lib/network/peers/utils/subnetMap.js +6 -3
  388. package/lib/network/peers/utils/subnetMap.js.map +1 -1
  389. package/lib/network/processor/extractSlotRootFns.d.ts.map +1 -1
  390. package/lib/network/processor/extractSlotRootFns.js +1 -8
  391. package/lib/network/processor/extractSlotRootFns.js.map +1 -1
  392. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  393. package/lib/network/processor/gossipHandlers.js +118 -149
  394. package/lib/network/processor/gossipHandlers.js.map +1 -1
  395. package/lib/network/processor/gossipQueues/index.js +6 -6
  396. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  397. package/lib/network/processor/gossipValidatorFn.js +5 -5
  398. package/lib/network/processor/gossipValidatorFn.js.map +1 -1
  399. package/lib/network/processor/index.d.ts +11 -0
  400. package/lib/network/processor/index.d.ts.map +1 -1
  401. package/lib/network/processor/index.js +66 -30
  402. package/lib/network/processor/index.js.map +1 -1
  403. package/lib/network/reqresp/ReqRespBeaconNode.js +6 -3
  404. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  405. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts +2 -2
  406. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -1
  407. package/lib/network/reqresp/handlers/inclusionListsByIndices.d.ts +10 -0
  408. package/lib/network/reqresp/handlers/inclusionListsByIndices.d.ts.map +1 -0
  409. package/lib/network/reqresp/handlers/inclusionListsByIndices.js +30 -0
  410. package/lib/network/reqresp/handlers/inclusionListsByIndices.js.map +1 -0
  411. package/lib/network/reqresp/handlers/index.d.ts.map +1 -1
  412. package/lib/network/reqresp/handlers/index.js +6 -12
  413. package/lib/network/reqresp/handlers/index.js.map +1 -1
  414. package/lib/network/reqresp/protocols.d.ts +1 -2
  415. package/lib/network/reqresp/protocols.d.ts.map +1 -1
  416. package/lib/network/reqresp/protocols.js +5 -10
  417. package/lib/network/reqresp/protocols.js.map +1 -1
  418. package/lib/network/reqresp/rateLimit.d.ts.map +1 -1
  419. package/lib/network/reqresp/rateLimit.js +5 -17
  420. package/lib/network/reqresp/rateLimit.js.map +1 -1
  421. package/lib/network/reqresp/types.d.ts +6 -9
  422. package/lib/network/reqresp/types.d.ts.map +1 -1
  423. package/lib/network/reqresp/types.js +4 -7
  424. package/lib/network/reqresp/types.js.map +1 -1
  425. package/lib/network/subnets/attnetsService.d.ts +35 -5
  426. package/lib/network/subnets/attnetsService.d.ts.map +1 -1
  427. package/lib/network/subnets/attnetsService.js +84 -6
  428. package/lib/network/subnets/attnetsService.js.map +1 -1
  429. package/lib/network/subnets/interface.d.ts +7 -0
  430. package/lib/network/subnets/interface.d.ts.map +1 -1
  431. package/lib/network/subnets/interface.js.map +1 -1
  432. package/lib/node/nodejs.d.ts +3 -1
  433. package/lib/node/nodejs.d.ts.map +1 -1
  434. package/lib/node/nodejs.js +47 -21
  435. package/lib/node/nodejs.js.map +1 -1
  436. package/lib/node/options.d.ts +3 -1
  437. package/lib/node/options.d.ts.map +1 -1
  438. package/lib/node/options.js +4 -2
  439. package/lib/node/options.js.map +1 -1
  440. package/lib/sync/interface.d.ts.map +1 -1
  441. package/lib/sync/interface.js.map +1 -1
  442. package/lib/sync/range/batch.d.ts +2 -3
  443. package/lib/sync/range/batch.d.ts.map +1 -1
  444. package/lib/sync/range/batch.js +9 -22
  445. package/lib/sync/range/batch.js.map +1 -1
  446. package/lib/sync/range/chain.d.ts.map +1 -1
  447. package/lib/sync/range/chain.js +2 -15
  448. package/lib/sync/range/chain.js.map +1 -1
  449. package/lib/sync/sync.d.ts +15 -0
  450. package/lib/sync/sync.d.ts.map +1 -1
  451. package/lib/sync/sync.js +103 -25
  452. package/lib/sync/sync.js.map +1 -1
  453. package/lib/sync/unknownBlock.d.ts.map +1 -1
  454. package/lib/sync/unknownBlock.js +43 -25
  455. package/lib/sync/unknownBlock.js.map +1 -1
  456. package/lib/sync/utils/downloadByRange.d.ts +6 -34
  457. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  458. package/lib/sync/utils/downloadByRange.js +24 -128
  459. package/lib/sync/utils/downloadByRange.js.map +1 -1
  460. package/lib/sync/utils/downloadByRoot.d.ts +2 -18
  461. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  462. package/lib/sync/utils/downloadByRoot.js +14 -99
  463. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  464. package/lib/util/blobs.d.ts +1 -7
  465. package/lib/util/blobs.d.ts.map +1 -1
  466. package/lib/util/blobs.js +0 -19
  467. package/lib/util/blobs.js.map +1 -1
  468. package/lib/util/execution.d.ts +3 -4
  469. package/lib/util/execution.d.ts.map +1 -1
  470. package/lib/util/execution.js +1 -73
  471. package/lib/util/execution.js.map +1 -1
  472. package/lib/util/file.d.ts.map +1 -1
  473. package/lib/util/file.js +8 -9
  474. package/lib/util/file.js.map +1 -1
  475. package/lib/util/queue/itemQueue.js +1 -1
  476. package/lib/util/queue/itemQueue.js.map +1 -1
  477. package/lib/util/sszBytes.d.ts +5 -1
  478. package/lib/util/sszBytes.d.ts.map +1 -1
  479. package/lib/util/sszBytes.js +36 -19
  480. package/lib/util/sszBytes.js.map +1 -1
  481. package/lib/util/types.d.ts +0 -5
  482. package/lib/util/types.d.ts.map +1 -1
  483. package/lib/util/types.js +1 -2
  484. package/lib/util/types.js.map +1 -1
  485. package/package.json +31 -32
  486. package/src/api/impl/api.ts +1 -1
  487. package/src/api/impl/beacon/blocks/index.ts +81 -126
  488. package/src/api/impl/beacon/index.ts +3 -1
  489. package/src/api/impl/beacon/pool/index.ts +31 -1
  490. package/src/api/impl/beacon/state/index.ts +10 -1
  491. package/src/api/impl/beacon/state/utils.ts +20 -10
  492. package/src/api/impl/debug/index.ts +4 -0
  493. package/src/api/impl/validator/index.ts +178 -39
  494. package/src/api/options.ts +3 -0
  495. package/src/chain/ColumnReconstructionTracker.ts +60 -41
  496. package/src/chain/GetBlobsTracker.ts +82 -52
  497. package/src/chain/archiveStore/archiveStore.ts +1 -0
  498. package/src/chain/archiveStore/utils/archiveBlocks.ts +76 -130
  499. package/src/chain/blocks/blockInput/blockInput.ts +11 -343
  500. package/src/chain/blocks/blockInput/errors.ts +1 -2
  501. package/src/chain/blocks/blockInput/types.ts +2 -20
  502. package/src/chain/blocks/importBlock.ts +58 -77
  503. package/src/chain/blocks/importExecutionPayload.ts +123 -36
  504. package/src/chain/blocks/index.ts +11 -4
  505. package/src/chain/blocks/payloadEnvelopeProcessor.ts +35 -24
  506. package/src/chain/blocks/types.ts +8 -29
  507. package/src/chain/blocks/verifyBlock.ts +31 -16
  508. package/src/chain/blocks/verifyBlocksDataAvailability.ts +16 -2
  509. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +9 -6
  510. package/src/chain/blocks/verifyBlocksSanityChecks.ts +4 -1
  511. package/src/chain/blocks/verifyBlocksSignatures.ts +10 -5
  512. package/src/chain/blocks/verifyPayloadsDataAvailability.ts +14 -6
  513. package/src/chain/blocks/writeBlockInputToDb.ts +6 -29
  514. package/src/chain/bls/interface.ts +2 -0
  515. package/src/chain/bls/multithread/index.ts +48 -24
  516. package/src/chain/bls/multithread/types.ts +1 -1
  517. package/src/chain/bls/multithread/worker.ts +1 -5
  518. package/src/chain/bls/singleThread.ts +1 -1
  519. package/src/chain/bls/utils.ts +1 -1
  520. package/src/chain/chain.ts +145 -42
  521. package/src/chain/emitter.ts +8 -8
  522. package/src/chain/errors/blockError.ts +1 -1
  523. package/src/chain/errors/executionPayloadBid.ts +12 -0
  524. package/src/chain/errors/executionPayloadEnvelope.ts +8 -0
  525. package/src/chain/errors/inclusionList.ts +38 -0
  526. package/src/chain/errors/index.ts +1 -1
  527. package/src/chain/forkChoice/index.ts +11 -0
  528. package/src/chain/forkChoiceExecutionEngine.ts +183 -0
  529. package/src/chain/interface.ts +11 -6
  530. package/src/chain/opPools/aggregatedAttestationPool.ts +246 -43
  531. package/src/chain/opPools/attestationPool.ts +16 -4
  532. package/src/chain/opPools/inclusionListStore.ts +208 -0
  533. package/src/chain/opPools/index.ts +2 -0
  534. package/src/chain/opPools/payloadAttestationPool.ts +18 -7
  535. package/src/chain/opPools/singleAttestationPool.ts +287 -0
  536. package/src/chain/opPools/syncCommitteeMessagePool.ts +10 -3
  537. package/src/chain/opPools/syncContributionAndProofPool.ts +13 -3
  538. package/src/chain/opPools/utils.ts +1 -1
  539. package/src/chain/options.ts +5 -4
  540. package/src/chain/produceBlock/produceBlockBody.ts +67 -22
  541. package/src/chain/proposerTracker.ts +94 -0
  542. package/src/chain/regen/interface.ts +2 -2
  543. package/src/chain/regen/queued.ts +6 -4
  544. package/src/chain/seenCache/seenGossipBlockInput.ts +9 -93
  545. package/src/chain/validation/executionPayloadBid.ts +54 -183
  546. package/src/chain/validation/executionPayloadEnvelope.ts +68 -1
  547. package/src/chain/validation/inclusionList.ts +192 -0
  548. package/src/chain/validation/index.ts +1 -0
  549. package/src/chain/validation/syncCommittee.ts +31 -15
  550. package/src/chain/validation/syncCommitteeContributionAndProof.ts +13 -0
  551. package/src/chain/validatorMonitor.ts +0 -6
  552. package/src/db/beacon.ts +44 -0
  553. package/src/db/dataColumnStore.ts +2 -4
  554. package/src/db/flatFileStore/flatFileStore.ts +7 -7
  555. package/src/db/flatFileStore/slotIndex.ts +4 -3
  556. package/src/db/interface.ts +2 -0
  557. package/src/db/repositories/blobSidecars.ts +0 -1
  558. package/src/db/repositories/dataColumnSidecarArchive.ts +20 -0
  559. package/src/execution/builder/apiClient.ts +16 -13
  560. package/src/execution/builder/http.ts +4 -0
  561. package/src/execution/builder/validateBid.ts +23 -2
  562. package/src/execution/engine/blobVersionedHashes.ts +1 -1
  563. package/src/execution/engine/disabled.ts +4 -0
  564. package/src/execution/engine/http.ts +59 -47
  565. package/src/execution/engine/index.ts +1 -1
  566. package/src/execution/engine/interface.ts +46 -13
  567. package/src/execution/engine/jsonRpcTransport.ts +56 -31
  568. package/src/execution/engine/mock.ts +32 -14
  569. package/src/execution/engine/payloadIdCache.ts +24 -6
  570. package/src/execution/engine/restTransport.ts +18 -23
  571. package/src/execution/engine/sszTypes.ts +0 -9
  572. package/src/execution/engine/transport.ts +13 -17
  573. package/src/execution/engine/types.ts +44 -24
  574. package/src/execution/engine/utils.ts +4 -2
  575. package/src/index.ts +2 -0
  576. package/src/metrics/metrics/beacon.ts +37 -30
  577. package/src/metrics/metrics/lodestar.ts +131 -18
  578. package/src/metrics/server/http.ts +5 -5
  579. package/src/monitoring/service.ts +1 -1
  580. package/src/network/core/networkCore.ts +11 -1
  581. package/src/network/core/networkCoreWorker.ts +2 -0
  582. package/src/network/core/networkCoreWorkerHandler.ts +8 -1
  583. package/src/network/core/types.ts +6 -1
  584. package/src/network/gossip/gossipsub.ts +11 -0
  585. package/src/network/gossip/interface.ts +5 -5
  586. package/src/network/gossip/topic.ts +14 -25
  587. package/src/network/interface.ts +4 -5
  588. package/src/network/libp2p/index.ts +5 -1
  589. package/src/network/network.ts +66 -58
  590. package/src/network/options.ts +4 -0
  591. package/src/network/peers/peerManager.ts +28 -3
  592. package/src/network/peers/utils/assertPeerRelevance.ts +39 -23
  593. package/src/network/peers/utils/enrSubnetsDeserialize.ts +5 -2
  594. package/src/network/peers/utils/prioritizePeers.ts +14 -22
  595. package/src/network/peers/utils/subnetMap.ts +6 -3
  596. package/src/network/processor/extractSlotRootFns.ts +0 -9
  597. package/src/network/processor/gossipHandlers.ts +150 -183
  598. package/src/network/processor/gossipQueues/index.ts +6 -6
  599. package/src/network/processor/gossipValidatorFn.ts +5 -5
  600. package/src/network/processor/index.ts +58 -28
  601. package/src/network/processor/types.ts +1 -1
  602. package/src/network/reqresp/ReqRespBeaconNode.ts +7 -7
  603. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +2 -2
  604. package/src/network/reqresp/handlers/inclusionListsByIndices.ts +44 -0
  605. package/src/network/reqresp/handlers/index.ts +5 -17
  606. package/src/network/reqresp/protocols.ts +6 -12
  607. package/src/network/reqresp/rateLimit.ts +5 -17
  608. package/src/network/reqresp/types.ts +6 -13
  609. package/src/network/subnets/attnetsService.ts +94 -6
  610. package/src/network/subnets/interface.ts +7 -0
  611. package/src/node/nodejs.ts +58 -22
  612. package/src/node/options.ts +9 -6
  613. package/src/sync/interface.ts +1 -0
  614. package/src/sync/range/batch.ts +9 -21
  615. package/src/sync/range/chain.ts +2 -14
  616. package/src/sync/sync.ts +108 -26
  617. package/src/sync/unknownBlock.ts +48 -36
  618. package/src/sync/utils/downloadByRange.ts +31 -230
  619. package/src/sync/utils/downloadByRoot.ts +15 -142
  620. package/src/util/blobs.ts +0 -34
  621. package/src/util/execution.ts +8 -102
  622. package/src/util/file.ts +8 -9
  623. package/src/util/queue/itemQueue.ts +1 -1
  624. package/src/util/sszBytes.ts +42 -24
  625. package/src/util/types.ts +1 -8
  626. package/lib/chain/errors/blobSidecarError.d.ts +0 -108
  627. package/lib/chain/errors/blobSidecarError.d.ts.map +0 -1
  628. package/lib/chain/errors/blobSidecarError.js +0 -38
  629. package/lib/chain/errors/blobSidecarError.js.map +0 -1
  630. package/lib/chain/validation/blobSidecar.d.ts +0 -16
  631. package/lib/chain/validation/blobSidecar.d.ts.map +0 -1
  632. package/lib/chain/validation/blobSidecar.js +0 -276
  633. package/lib/chain/validation/blobSidecar.js.map +0 -1
  634. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts +0 -9
  635. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +0 -1
  636. package/lib/network/reqresp/handlers/blobSidecarsByRange.js +0 -91
  637. package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +0 -1
  638. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts +0 -5
  639. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts.map +0 -1
  640. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js +0 -46
  641. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js.map +0 -1
  642. package/src/chain/errors/blobSidecarError.ts +0 -70
  643. package/src/chain/validation/blobSidecar.ts +0 -357
  644. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +0 -133
  645. package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +0 -69
@@ -9,8 +9,9 @@ import {routes} from "@lodestar/api";
9
9
  import {BeaconConfig, chainConfigToJson} from "@lodestar/config";
10
10
  import type {LoggerNode} from "@lodestar/logger/node";
11
11
  import {ResponseIncoming, ResponseOutgoing} from "@lodestar/reqresp";
12
- import {Status} from "@lodestar/types";
12
+ import {Slot, Status} from "@lodestar/types";
13
13
  import {withTimeout} from "@lodestar/utils";
14
+ import {GoodByeReasonCode} from "../../constants/index.js";
14
15
  import {Metrics} from "../../metrics/index.js";
15
16
  import {AsyncIterableBridgeCaller, AsyncIterableBridgeHandler} from "../../util/asyncIterableToEvents.js";
16
17
  import {PeerIdStr, peerIdFromString} from "../../util/peerId.js";
@@ -205,6 +206,9 @@ export class WorkerNetworkCore implements INetworkCore {
205
206
  reStatusPeers(peers: PeerIdStr[]): Promise<void> {
206
207
  return this.getApi().reStatusPeers(peers);
207
208
  }
209
+ goodbyeAndDisconnect(peer: PeerIdStr, reason: GoodByeReasonCode): Promise<void> {
210
+ return this.getApi().goodbyeAndDisconnect(peer, reason);
211
+ }
208
212
  reportPeer(peer: PeerIdStr, action: PeerAction, actionName: string): Promise<void> {
209
213
  return this.getApi().reportPeer(peer, action, actionName);
210
214
  }
@@ -216,6 +220,9 @@ export class WorkerNetworkCore implements INetworkCore {
216
220
  prepareSyncCommitteeSubnets(subscriptions: CommitteeSubscription[]): Promise<void> {
217
221
  return this.getApi().prepareSyncCommitteeSubnets(subscriptions);
218
222
  }
223
+ addLocalProposalSlots(slots: Slot[]): Promise<void> {
224
+ return this.getApi().addLocalProposalSlots(slots);
225
+ }
219
226
  subscribeGossipCoreTopics(): Promise<void> {
220
227
  return this.getApi().subscribeGossipCoreTopics();
221
228
  }
@@ -4,7 +4,8 @@ import {routes} from "@lodestar/api";
4
4
  import {SpecJson} from "@lodestar/config";
5
5
  import {LoggerNodeOpts} from "@lodestar/logger/node";
6
6
  import {ResponseIncoming} from "@lodestar/reqresp";
7
- import {Status} from "@lodestar/types";
7
+ import {Slot, Status} from "@lodestar/types";
8
+ import {GoodByeReasonCode} from "../../constants/index.js";
8
9
  import {PeerIdStr} from "../../util/peerId.js";
9
10
  import {NetworkOptions} from "../options.js";
10
11
  import {PeerAction, PeerScoreStats} from "../peers/index.js";
@@ -53,6 +54,7 @@ export interface INetworkCore extends INetworkCorePublic {
53
54
  // Sync method
54
55
  reportPeer(peer: PeerIdStr, action: PeerAction, actionName: string): void;
55
56
  reStatusPeers(peers: PeerIdStr[]): Promise<void>;
57
+ goodbyeAndDisconnect(peer: PeerIdStr, reason: GoodByeReasonCode): Promise<void>;
56
58
 
57
59
  // TODO: Duplicated methods with INetwork interface
58
60
  getConnectedPeers(): Promise<PeerIdStr[]>;
@@ -60,6 +62,8 @@ export interface INetworkCore extends INetworkCorePublic {
60
62
 
61
63
  /** Chain must push status updates to the network core */
62
64
  updateStatus(status: Status): Promise<void>;
65
+ /** Block proposal slots of connected validators, used to subscribe to all attestation subnets before them */
66
+ addLocalProposalSlots(slots: Slot[]): Promise<void>;
63
67
 
64
68
  setTargetGroupCount(count: number): Promise<void>;
65
69
  /** Opens stream to handle ReqResp outgoing request */
@@ -109,6 +113,7 @@ export type NetworkWorkerApi = INetworkCorePublic & {
109
113
  getConnectedPeers(): Promise<PeerIdStr[]>;
110
114
  getConnectedPeerCount(): Promise<number>;
111
115
  updateStatus(status: Status): Promise<void>;
116
+ addLocalProposalSlots(slots: Slot[]): Promise<void>;
112
117
 
113
118
  setTargetGroupCount(count: number): Promise<void>;
114
119
 
@@ -108,6 +108,7 @@ type GossipSubInternal = GossipSub & {
108
108
  score: {score: (peerIdStr: string) => number};
109
109
  direct: Set<string>;
110
110
  topics: Map<string, Set<string>>;
111
+ streamsOutbound: ReadonlyMap<string, unknown>;
111
112
  start: () => Promise<void>;
112
113
  stop: () => Promise<void>;
113
114
  publish: (topic: TopicStr, data: Uint8Array, opts?: PublishOpts) => Promise<PublishResult>;
@@ -248,6 +249,16 @@ export class Eth2Gossipsub {
248
249
  return this.gossipsub.getMeshPeers(topic);
249
250
  }
250
251
 
252
+ getSubscribersWithOutboundStream(topic: GossipTopic): Set<string> {
253
+ const topicStr = stringifyGossipTopic(this.config, topic);
254
+ const peers = new Set<string>();
255
+ for (const peer of this.gossipsub.getSubscribers(topicStr)) {
256
+ const id = peer.toString();
257
+ if (this.gossipsub.streamsOutbound.has(id)) peers.add(id);
258
+ }
259
+ return peers;
260
+ }
261
+
251
262
  publish(topic: TopicStr, data: Uint8Array, opts?: PublishOpts): Promise<PublishResult> {
252
263
  return this.gossipsub.publish(topic, data, opts);
253
264
  }
@@ -14,8 +14,8 @@ import {
14
14
  SubnetID,
15
15
  altair,
16
16
  capella,
17
- deneb,
18
17
  gloas,
18
+ heze,
19
19
  phase0,
20
20
  } from "@lodestar/types";
21
21
  import {Logger} from "@lodestar/utils";
@@ -26,7 +26,6 @@ import {JobItemQueue} from "../../util/queue/index.js";
26
26
 
27
27
  export enum GossipType {
28
28
  beacon_block = "beacon_block",
29
- blob_sidecar = "blob_sidecar",
30
29
  data_column_sidecar = "data_column_sidecar",
31
30
  beacon_aggregate_and_proof = "beacon_aggregate_and_proof",
32
31
  beacon_attestation = "beacon_attestation",
@@ -42,6 +41,7 @@ export enum GossipType {
42
41
  payload_attestation_message = "payload_attestation_message",
43
42
  execution_payload_bid = "execution_payload_bid",
44
43
  proposer_preferences = "proposer_preferences",
44
+ inclusion_list = "inclusion_list",
45
45
  }
46
46
 
47
47
  export type SequentialGossipType = Exclude<GossipType, GossipType.beacon_attestation>;
@@ -62,7 +62,6 @@ export interface IGossipTopic {
62
62
 
63
63
  export type GossipTopicTypeMap = {
64
64
  [GossipType.beacon_block]: {type: GossipType.beacon_block};
65
- [GossipType.blob_sidecar]: {type: GossipType.blob_sidecar; subnet: SubnetID};
66
65
  [GossipType.data_column_sidecar]: {type: GossipType.data_column_sidecar; subnet: SubnetID};
67
66
  [GossipType.beacon_aggregate_and_proof]: {type: GossipType.beacon_aggregate_and_proof};
68
67
  [GossipType.beacon_attestation]: {type: GossipType.beacon_attestation; subnet: SubnetID};
@@ -80,6 +79,7 @@ export type GossipTopicTypeMap = {
80
79
  [GossipType.payload_attestation_message]: {type: GossipType.payload_attestation_message};
81
80
  [GossipType.execution_payload_bid]: {type: GossipType.execution_payload_bid};
82
81
  [GossipType.proposer_preferences]: {type: GossipType.proposer_preferences};
82
+ [GossipType.inclusion_list]: {type: GossipType.inclusion_list};
83
83
  };
84
84
 
85
85
  export type GossipTopicMap = {
@@ -97,7 +97,6 @@ export type SSZTypeOfGossipTopic<T extends GossipTopic> = T extends {type: infer
97
97
 
98
98
  export type GossipTypeMap = {
99
99
  [GossipType.beacon_block]: SignedBeaconBlock;
100
- [GossipType.blob_sidecar]: deneb.BlobSidecar;
101
100
  [GossipType.beacon_aggregate_and_proof]: SignedAggregateAndProof;
102
101
  [GossipType.beacon_attestation]: SingleAttestation;
103
102
  [GossipType.data_column_sidecar]: DataColumnSidecar;
@@ -113,11 +112,11 @@ export type GossipTypeMap = {
113
112
  [GossipType.payload_attestation_message]: gloas.PayloadAttestationMessage;
114
113
  [GossipType.execution_payload_bid]: gloas.SignedExecutionPayloadBid;
115
114
  [GossipType.proposer_preferences]: gloas.SignedProposerPreferences;
115
+ [GossipType.inclusion_list]: heze.SignedInclusionList;
116
116
  };
117
117
 
118
118
  export type GossipFnByType = {
119
119
  [GossipType.beacon_block]: (signedBlock: SignedBeaconBlock) => Promise<void> | void;
120
- [GossipType.blob_sidecar]: (blobSidecar: deneb.BlobSidecar) => Promise<void> | void;
121
120
  [GossipType.beacon_aggregate_and_proof]: (aggregateAndProof: SignedAggregateAndProof) => Promise<void> | void;
122
121
  [GossipType.beacon_attestation]: (attestation: SingleAttestation) => Promise<void> | void;
123
122
  [GossipType.data_column_sidecar]: (dataColumnSidecar: DataColumnSidecar) => Promise<void> | void;
@@ -147,6 +146,7 @@ export type GossipFnByType = {
147
146
  [GossipType.proposer_preferences]: (
148
147
  signedProposerPreferences: gloas.SignedProposerPreferences
149
148
  ) => Promise<void> | void;
149
+ [GossipType.inclusion_list]: (signedInclusionList: heze.SignedInclusionList) => Promise<void> | void;
150
150
  };
151
151
 
152
152
  export type GossipFn = GossipFnByType[keyof GossipFnByType];
@@ -4,6 +4,7 @@ import {
4
4
  ATTESTATION_SUBNET_COUNT,
5
5
  ForkName,
6
6
  ForkSeq,
7
+ MAX_SIGNED_INCLUSION_LIST_SIZE,
7
8
  SYNC_COMMITTEE_SUBNET_COUNT,
8
9
  isForkPostAltair,
9
10
  isForkPostElectra,
@@ -91,12 +92,11 @@ function stringifyGossipTopicType(topic: GossipTopic): string {
91
92
  case GossipType.payload_attestation_message:
92
93
  case GossipType.execution_payload_bid:
93
94
  case GossipType.proposer_preferences:
95
+ case GossipType.inclusion_list:
94
96
  return topic.type;
95
97
  case GossipType.beacon_attestation:
96
98
  case GossipType.sync_committee:
97
99
  return `${topic.type}_${topic.subnet}`;
98
- case GossipType.blob_sidecar:
99
- return `${topic.type}_${topic.subnet}`;
100
100
  case GossipType.data_column_sidecar:
101
101
  return `${topic.type}_${topic.subnet}`;
102
102
  }
@@ -108,8 +108,6 @@ export function getGossipSSZType(topic: GossipTopic) {
108
108
  case GossipType.beacon_block:
109
109
  // beacon_block is updated in altair to support the updated SignedBeaconBlock type
110
110
  return ssz[fork].SignedBeaconBlock;
111
- case GossipType.blob_sidecar:
112
- return ssz.deneb.BlobSidecar;
113
111
  case GossipType.data_column_sidecar:
114
112
  return isForkPostFulu(fork) ? sszTypesFor(fork).DataColumnSidecar : ssz.fulu.DataColumnSidecar;
115
113
  case GossipType.beacon_aggregate_and_proof:
@@ -144,6 +142,8 @@ export function getGossipSSZType(topic: GossipTopic) {
144
142
  return isForkPostGloas(fork) ? sszTypesFor(fork).SignedExecutionPayloadBid : ssz.gloas.SignedExecutionPayloadBid;
145
143
  case GossipType.proposer_preferences:
146
144
  return ssz.gloas.SignedProposerPreferences;
145
+ case GossipType.inclusion_list:
146
+ return ssz.heze.SignedInclusionList;
147
147
  }
148
148
  }
149
149
 
@@ -152,6 +152,9 @@ export function getGossipSSZType(topic: GossipTopic) {
152
152
  */
153
153
  export function getGossipSSZMaxSize(topic: GossipTopic, config: ChainForkConfig, sszType: CompositeTypeAny): number {
154
154
  const maxSize = Math.min(sszType.maxSize, config.MAX_PAYLOAD_SIZE);
155
+ if (topic.type === GossipType.inclusion_list) {
156
+ return Math.min(maxSize, MAX_SIGNED_INCLUSION_LIST_SIZE);
157
+ }
155
158
  if (isForkPostGloas(topic.boundary.fork) && topic.type === GossipType.data_column_sidecar) {
156
159
  return Math.min(maxSize, computeMaxGloasDataColumnSidecarSize(config));
157
160
  }
@@ -235,6 +238,7 @@ export function parseGossipTopic(forkDigestContext: ForkDigestContext, topicStr:
235
238
  case GossipType.payload_attestation_message:
236
239
  case GossipType.execution_payload_bid:
237
240
  case GossipType.proposer_preferences:
241
+ case GossipType.inclusion_list:
238
242
  return {type: gossipTypeStr, boundary, encoding};
239
243
  }
240
244
 
@@ -247,13 +251,6 @@ export function parseGossipTopic(forkDigestContext: ForkDigestContext, topicStr:
247
251
  }
248
252
  }
249
253
 
250
- if (gossipTypeStr.startsWith(GossipType.blob_sidecar)) {
251
- const subnetStr = gossipTypeStr.slice(GossipType.blob_sidecar.length + 1); // +1 for '_' concatenating the topic name and the subnet
252
- const subnet = parseInt(subnetStr, 10);
253
- if (Number.isNaN(subnet)) throw Error(`subnet ${subnetStr} is not a number`);
254
- return {type: GossipType.blob_sidecar, subnet, boundary, encoding};
255
- }
256
-
257
254
  if (gossipTypeStr.startsWith(GossipType.data_column_sidecar)) {
258
255
  const subnetStr = gossipTypeStr.slice(GossipType.data_column_sidecar.length + 1); // +1 for '_' concatenating the topic name and the subnet
259
256
  const subnet = parseInt(subnetStr, 10);
@@ -292,23 +289,15 @@ export function getCoreTopicsAtFork(
292
289
  topics.push({type: GossipType.proposer_preferences});
293
290
  }
294
291
 
292
+ if (ForkSeq[fork] >= ForkSeq.heze) {
293
+ topics.push({type: GossipType.inclusion_list});
294
+ }
295
+
295
296
  // After fulu also track data_column_sidecar_{index}
296
297
  if (ForkSeq[fork] >= ForkSeq.fulu) {
297
298
  topics.push(...getDataColumnSidecarTopics(networkConfig, opts.subscribeAllColumnSubnets));
298
299
  }
299
300
 
300
- // After Deneb and before Fulu also track blob_sidecar_{subnet_id}
301
- if (ForkSeq[fork] >= ForkSeq.deneb && ForkSeq[fork] < ForkSeq.fulu) {
302
- const {config} = networkConfig;
303
- const subnetCount = isForkPostElectra(fork)
304
- ? config.BLOB_SIDECAR_SUBNET_COUNT_ELECTRA
305
- : config.BLOB_SIDECAR_SUBNET_COUNT;
306
-
307
- for (let subnet = 0; subnet < subnetCount; subnet++) {
308
- topics.push({type: GossipType.blob_sidecar, subnet});
309
- }
310
- }
311
-
312
301
  // capella
313
302
  if (ForkSeq[fork] >= ForkSeq.capella) {
314
303
  topics.push({type: GossipType.bls_to_execution_change});
@@ -393,7 +382,6 @@ function parseEncodingStr(encodingStr: string): GossipEncoding {
393
382
  // TODO: Review which yes, and which not
394
383
  export const gossipTopicIgnoreDuplicatePublishError: Record<GossipType, boolean> = {
395
384
  [GossipType.beacon_block]: true,
396
- [GossipType.blob_sidecar]: true,
397
385
  [GossipType.data_column_sidecar]: true,
398
386
  [GossipType.beacon_aggregate_and_proof]: true,
399
387
  [GossipType.beacon_attestation]: true,
@@ -409,6 +397,7 @@ export const gossipTopicIgnoreDuplicatePublishError: Record<GossipType, boolean>
409
397
  [GossipType.payload_attestation_message]: true,
410
398
  [GossipType.execution_payload_bid]: true,
411
399
  [GossipType.proposer_preferences]: true,
400
+ [GossipType.inclusion_list]: true,
412
401
  };
413
402
 
414
403
  /**
@@ -425,7 +414,6 @@ export const gossipTopicIgnoreDuplicatePublishError: Record<GossipType, boolean>
425
414
  */
426
415
  export const gossipTopicAllowPublishToZeroPeers: Record<GossipType, boolean> = {
427
416
  [GossipType.beacon_block]: false,
428
- [GossipType.blob_sidecar]: false,
429
417
  // data_column_sidecar: we ensure having all topic peers via prioritizePeers(). Even with 0 peers on the
430
418
  // topic the overall publish can still succeed, because a supernode rebuilds and publishes the missing
431
419
  // columns for us, so track sent peers as 0 instead of raising
@@ -447,4 +435,5 @@ export const gossipTopicAllowPublishToZeroPeers: Record<GossipType, boolean> = {
447
435
  [GossipType.payload_attestation_message]: false,
448
436
  [GossipType.execution_payload_bid]: false,
449
437
  [GossipType.proposer_preferences]: false,
438
+ [GossipType.inclusion_list]: false,
450
439
  };
@@ -30,17 +30,17 @@ import {
30
30
  SubnetID,
31
31
  altair,
32
32
  capella,
33
- deneb,
34
33
  fulu,
35
34
  gloas,
35
+ heze,
36
36
  phase0,
37
37
  } from "@lodestar/types";
38
38
  import {BlockInputSource} from "../chain/blocks/blockInput/types.js";
39
+ import {GoodByeReasonCode} from "../constants/index.js";
39
40
  import {CustodyConfig} from "../util/dataColumns.js";
40
41
  import {PeerIdStr} from "../util/peerId.js";
41
42
  import {
42
43
  BeaconBlocksByRootRequest,
43
- BlobSidecarsByRootRequest,
44
44
  DataColumnSidecarsByRootRequest,
45
45
  ExecutionPayloadEnvelopesByRootRequest,
46
46
  } from "../util/types.js";
@@ -73,14 +73,13 @@ export interface INetwork extends INetworkCorePublic {
73
73
  reportPeer(peer: PeerIdStr, action: PeerAction, actionName: string): void;
74
74
  shouldAggregate(subnet: SubnetID, slot: Slot): boolean;
75
75
  reStatusPeers(peers: PeerIdStr[]): Promise<void>;
76
+ goodbyeAndDisconnect(peer: PeerIdStr, reason: GoodByeReasonCode): Promise<void>;
76
77
  searchUnknownBlock(slotRoot: SlotRootHex, source: BlockInputSource, peer?: PeerIdStr): void;
77
78
  searchUnknownEnvelope(slotRoot: SlotRootHex, source: BlockInputSource, peer?: PeerIdStr): void;
78
79
  // ReqResp
79
80
  sendBeaconBlocksByRange(peerId: PeerIdStr, request: phase0.BeaconBlocksByRangeRequest): Promise<SignedBeaconBlock[]>;
80
81
  sendBeaconBlocksByRoot(peerId: PeerIdStr, request: BeaconBlocksByRootRequest): Promise<SignedBeaconBlock[]>;
81
82
  sendBeaconBlocksByHead(peerId: PeerIdStr, request: fulu.BeaconBlocksByHeadRequest): Promise<SignedBeaconBlock[]>;
82
- sendBlobSidecarsByRange(peerId: PeerIdStr, request: deneb.BlobSidecarsByRangeRequest): Promise<deneb.BlobSidecar[]>;
83
- sendBlobSidecarsByRoot(peerId: PeerIdStr, request: BlobSidecarsByRootRequest): Promise<deneb.BlobSidecar[]>;
84
83
  sendDataColumnSidecarsByRange(
85
84
  peerId: PeerIdStr,
86
85
  request: fulu.DataColumnSidecarsByRangeRequest
@@ -100,7 +99,6 @@ export interface INetwork extends INetworkCorePublic {
100
99
 
101
100
  // Gossip
102
101
  publishBeaconBlock(signedBlock: SignedBeaconBlock): Promise<number>;
103
- publishBlobSidecar(blobSidecar: deneb.BlobSidecar): Promise<number>;
104
102
  publishBeaconAggregateAndProof(aggregateAndProof: SignedAggregateAndProof): Promise<number>;
105
103
  publishBeaconAttestation(attestation: SingleAttestation, subnet: SubnetID): Promise<number>;
106
104
  publishDataColumnSidecar(
@@ -118,6 +116,7 @@ export interface INetwork extends INetworkCorePublic {
118
116
  publishSignedExecutionPayloadBid(signedBid: gloas.SignedExecutionPayloadBid): Promise<number>;
119
117
  publishPayloadAttestationMessage(payloadAttestationMessage: gloas.PayloadAttestationMessage): Promise<number>;
120
118
  publishProposerPreferences(signedProposerPreferences: gloas.SignedProposerPreferences): Promise<number>;
119
+ publishInclusionList(signedInclusionList: heze.SignedInclusionList): Promise<number>;
121
120
 
122
121
  // Debug
123
122
  dumpGossipQueue(gossipType: GossipType): Promise<PendingGossipsubMessage[]>;
@@ -150,7 +150,11 @@ export async function createNodeJsLibp2p(
150
150
  nodeInfo: {
151
151
  name: "lodestar",
152
152
  version: networkOpts.version ?? "unknown",
153
- userAgent: networkOpts.private ? "" : networkOpts.version ? `lodestar/${networkOpts.version}` : "lodestar",
153
+ userAgent: networkOpts.private
154
+ ? ""
155
+ : networkOpts.advertiseVersion && networkOpts.version
156
+ ? `lodestar/${networkOpts.version}`
157
+ : "lodestar",
154
158
  },
155
159
  addresses: {
156
160
  listen: localMultiaddrs,
@@ -19,20 +19,22 @@ import {
19
19
  SignedAggregateAndProof,
20
20
  SignedBeaconBlock,
21
21
  SingleAttestation,
22
+ Slot,
22
23
  SlotRootHex,
23
24
  SubnetID,
24
25
  altair,
25
26
  capella,
26
- deneb,
27
27
  fulu,
28
28
  gloas,
29
+ heze,
29
30
  isGloasDataColumnSidecar,
30
31
  phase0,
31
32
  } from "@lodestar/types";
32
- import {prettyPrintIndices, sleep} from "@lodestar/utils";
33
+ import {defer, prettyPrintIndices, sleep} from "@lodestar/utils";
33
34
  import {BlockInputSource} from "../chain/blocks/blockInput/types.js";
34
35
  import {ChainEvent, IBeaconChain} from "../chain/index.js";
35
36
  import {computeSubnetForDataColumnSidecar} from "../chain/validation/dataColumnSidecar.js";
37
+ import {GoodByeReasonCode} from "../constants/index.js";
36
38
  import {IBeaconDb} from "../db/interface.js";
37
39
  import {Metrics, RegistryMetricCreator} from "../metrics/index.js";
38
40
  import {IClock} from "../util/clock.js";
@@ -41,7 +43,6 @@ import {PeerIdStr, peerIdToString} from "../util/peerId.js";
41
43
  import {promiseAllMaybeAsync} from "../util/promises.js";
42
44
  import {
43
45
  BeaconBlocksByRootRequest,
44
- BlobSidecarsByRootRequest,
45
46
  DataColumnSidecarsByRootRequest,
46
47
  ExecutionPayloadEnvelopesByRootRequest,
47
48
  } from "../util/types.js";
@@ -126,6 +127,7 @@ export class Network implements INetwork {
126
127
 
127
128
  private subscribedToCoreTopics = false;
128
129
  private connectedPeersSyncMeta = new Map<PeerIdStr, Omit<PeerSyncMeta, "peerId">>();
130
+ private closePromise: Promise<void> | undefined;
129
131
 
130
132
  constructor(modules: NetworkModules) {
131
133
  this.peerId = peerIdFromPrivateKey(modules.privateKey);
@@ -143,17 +145,13 @@ export class Network implements INetwork {
143
145
  this.events.on(NetworkEvent.peerConnected, this.onPeerConnected);
144
146
  this.events.on(NetworkEvent.peerDisconnected, this.onPeerDisconnected);
145
147
  this.chain.emitter.on(routes.events.EventType.head, this.onHead);
146
- this.chain.emitter.on(routes.events.EventType.lightClientFinalityUpdate, ({data}) =>
147
- this.onLightClientFinalityUpdate(data)
148
- );
149
- this.chain.emitter.on(routes.events.EventType.lightClientOptimisticUpdate, ({data}) =>
150
- this.onLightClientOptimisticUpdate(data)
151
- );
148
+ this.chain.emitter.on(routes.events.EventType.lightClientFinalityUpdate, this.onLightClientFinalityUpdate);
149
+ this.chain.emitter.on(routes.events.EventType.lightClientOptimisticUpdate, this.onLightClientOptimisticUpdate);
152
150
  this.chain.emitter.on(ChainEvent.updateTargetCustodyGroupCount, this.onTargetGroupCountUpdated);
153
151
  this.chain.emitter.on(ChainEvent.publishDataColumns, this.onPublishDataColumns);
154
- this.chain.emitter.on(ChainEvent.publishBlobSidecars, this.onPublishBlobSidecars);
155
152
  this.chain.emitter.on(ChainEvent.publishProposerSlashing, this.onPublishProposerSlashing);
156
153
  this.chain.emitter.on(ChainEvent.updateStatus, this.onUpdateStatus);
154
+ this.chain.emitter.on(ChainEvent.localProposalSlots, this.onLocalProposalSlots);
157
155
  }
158
156
 
159
157
  static async init({
@@ -238,9 +236,16 @@ export class Network implements INetwork {
238
236
  return this.controller.signal.aborted;
239
237
  }
240
238
 
241
- /** Destroy this instance. Can only be called once. */
242
- async close(): Promise<void> {
243
- if (this.closed) return;
239
+ close(): Promise<void> {
240
+ if (this.closePromise !== undefined) return this.closePromise;
241
+ const completion = defer<void>();
242
+ this.closePromise = completion.promise;
243
+ void this.closeInternal().then(completion.resolve, completion.reject);
244
+ return this.closePromise;
245
+ }
246
+
247
+ private async closeInternal(): Promise<void> {
248
+ this.controller.abort();
244
249
 
245
250
  this.events.off(NetworkEvent.peerConnected, this.onPeerConnected);
246
251
  this.events.off(NetworkEvent.peerDisconnected, this.onPeerDisconnected);
@@ -249,13 +254,15 @@ export class Network implements INetwork {
249
254
  this.chain.emitter.off(routes.events.EventType.lightClientOptimisticUpdate, this.onLightClientOptimisticUpdate);
250
255
  this.chain.emitter.off(ChainEvent.updateTargetCustodyGroupCount, this.onTargetGroupCountUpdated);
251
256
  this.chain.emitter.off(ChainEvent.publishDataColumns, this.onPublishDataColumns);
252
- this.chain.emitter.off(ChainEvent.publishBlobSidecars, this.onPublishBlobSidecars);
253
257
  this.chain.emitter.off(ChainEvent.publishProposerSlashing, this.onPublishProposerSlashing);
254
258
  this.chain.emitter.off(ChainEvent.updateStatus, this.onUpdateStatus);
255
- await this.core.close();
256
-
257
- // Used only for sleep() statements
258
- this.controller.abort();
259
+ this.chain.emitter.off(ChainEvent.localProposalSlots, this.onLocalProposalSlots);
260
+ this.connectedPeersSyncMeta.clear();
261
+ this.subscribedToCoreTopics = false;
262
+ const results = await Promise.allSettled([this.networkProcessor.stop(), this.core.close()]);
263
+ for (const result of results) {
264
+ if (result.status === "rejected") throw result.reason;
265
+ }
259
266
  this.logger.debug("network core closed");
260
267
  }
261
268
 
@@ -277,6 +284,13 @@ export class Network implements INetwork {
277
284
  return this.core.prepareBeaconCommitteeSubnets(subscriptions);
278
285
  }
279
286
 
287
+ /** The core subscribes to all attestation subnets before these proposals, see `slotsToSubscribeBeforeProposalDuty` */
288
+ private onLocalProposalSlots = (proposalSlots: Slot[]): void => {
289
+ this.core.addLocalProposalSlots(proposalSlots).catch((e) => {
290
+ this.logger.debug("Error adding local proposal slots", {slots: proposalSlots.join(",")}, e as Error);
291
+ });
292
+ };
293
+
280
294
  async prepareSyncCommitteeSubnets(subscriptions: CommitteeSubscription[]): Promise<void> {
281
295
  return this.core.prepareSyncCommitteeSubnets(subscriptions);
282
296
  }
@@ -288,6 +302,10 @@ export class Network implements INetwork {
288
302
  return this.core.reStatusPeers(peers);
289
303
  }
290
304
 
305
+ async goodbyeAndDisconnect(peer: PeerIdStr, reason: GoodByeReasonCode): Promise<void> {
306
+ return this.core.goodbyeAndDisconnect(peer, reason);
307
+ }
308
+
291
309
  searchUnknownBlock(slotRoot: SlotRootHex, source: BlockInputSource, peer?: PeerIdStr): void {
292
310
  this.networkProcessor.searchUnknownBlock(slotRoot, source, peer);
293
311
  }
@@ -327,6 +345,7 @@ export class Network implements INetwork {
327
345
  async subscribeGossipCoreTopics(): Promise<void> {
328
346
  if (!this.subscribedToCoreTopics) {
329
347
  await this.core.subscribeGossipCoreTopics();
348
+ if (this.closed) return;
330
349
  // Only mark subscribedToCoreTopics if worker resolved this call
331
350
  this.subscribedToCoreTopics = true;
332
351
  }
@@ -360,15 +379,6 @@ export class Network implements INetwork {
360
379
  return this.publishGossip<GossipType.beacon_block>({type: GossipType.beacon_block, boundary}, signedBlock);
361
380
  }
362
381
 
363
- async publishBlobSidecar(blobSidecar: deneb.BlobSidecar): Promise<number> {
364
- const epoch = computeEpochAtSlot(blobSidecar.signedBlockHeader.message.slot);
365
- const boundary = this.config.getForkBoundaryAtEpoch(epoch);
366
-
367
- const subnet = blobSidecar.index;
368
-
369
- return this.publishGossip<GossipType.blob_sidecar>({type: GossipType.blob_sidecar, boundary, subnet}, blobSidecar);
370
- }
371
-
372
382
  async publishDataColumnSidecar(
373
383
  dataColumnSidecar: DataColumnSidecar
374
384
  ): Promise<{sentPeers: number; alreadyPublished: boolean}> {
@@ -531,6 +541,16 @@ export class Network implements INetwork {
531
541
  );
532
542
  }
533
543
 
544
+ async publishInclusionList(signedInclusionList: heze.SignedInclusionList): Promise<number> {
545
+ const epoch = computeEpochAtSlot(signedInclusionList.message.slot);
546
+ const boundary = this.config.getForkBoundaryAtEpoch(epoch);
547
+
548
+ return this.publishGossip<GossipType.inclusion_list>(
549
+ {type: GossipType.inclusion_list, boundary},
550
+ signedInclusionList
551
+ );
552
+ }
553
+
534
554
  async publishProposerPreferences(signedProposerPreferences: gloas.SignedProposerPreferences): Promise<number> {
535
555
  const epoch = computeEpochAtSlot(signedProposerPreferences.message.proposalSlot);
536
556
  const boundary = this.config.getForkBoundaryAtEpoch(epoch);
@@ -639,28 +659,6 @@ export class Network implements INetwork {
639
659
  );
640
660
  }
641
661
 
642
- async sendBlobSidecarsByRange(
643
- peerId: PeerIdStr,
644
- request: deneb.BlobSidecarsByRangeRequest
645
- ): Promise<deneb.BlobSidecar[]> {
646
- const epoch = computeEpochAtSlot(request.startSlot);
647
- return collectMaxResponseTyped(
648
- this.sendReqRespRequest(peerId, ReqRespMethod.BlobSidecarsByRange, [Version.V1], request),
649
- // request's count represent the slots, so the actual max count received could be slots * blobs per slot
650
- request.count * this.config.getMaxBlobsPerBlock(epoch),
651
- responseSszTypeByMethod[ReqRespMethod.BlobSidecarsByRange]
652
- );
653
- }
654
-
655
- async sendBlobSidecarsByRoot(peerId: PeerIdStr, request: BlobSidecarsByRootRequest): Promise<deneb.BlobSidecar[]> {
656
- return collectMaxResponseTyped(
657
- this.sendReqRespRequest(peerId, ReqRespMethod.BlobSidecarsByRoot, [Version.V1], request),
658
- request.length,
659
- responseSszTypeByMethod[ReqRespMethod.BlobSidecarsByRoot],
660
- this.chain.serializedCache
661
- );
662
- }
663
-
664
662
  async sendDataColumnSidecarsByRange(
665
663
  peerId: PeerIdStr,
666
664
  request: fulu.DataColumnSidecarsByRangeRequest
@@ -787,26 +785,32 @@ export class Network implements INetwork {
787
785
  return this.core.writeDiscv5HeapSnapshot(prefix, dirpath);
788
786
  }
789
787
 
790
- private onLightClientFinalityUpdate = async (finalityUpdate: LightClientFinalityUpdate): Promise<void> => {
788
+ private onLightClientFinalityUpdate = async ({
789
+ data: finalityUpdate,
790
+ }: routes.events.EventData[routes.events.EventType.lightClientFinalityUpdate]): Promise<void> => {
791
791
  // TODO: Review is OK to remove if (this.hasAttachedSyncCommitteeMember())
792
792
 
793
793
  try {
794
794
  // messages SHOULD be broadcast after SYNC_MESSAGE_DUE_BPS of slot has transpired
795
795
  // https://github.com/ethereum/consensus-specs/blob/v1.6.1/specs/altair/light-client/p2p-interface.md#sync-committee
796
796
  await this.waitForSyncMessageCutoff(finalityUpdate.signatureSlot);
797
+ if (this.closed) return;
797
798
  await this.publishLightClientFinalityUpdate(finalityUpdate);
798
799
  } catch (e) {
799
800
  this.logger.debug("Error on BeaconGossipHandler.onLightclientFinalityUpdate", {}, e as Error);
800
801
  }
801
802
  };
802
803
 
803
- private onLightClientOptimisticUpdate = async (optimisticUpdate: LightClientOptimisticUpdate): Promise<void> => {
804
+ private onLightClientOptimisticUpdate = async ({
805
+ data: optimisticUpdate,
806
+ }: routes.events.EventData[routes.events.EventType.lightClientOptimisticUpdate]): Promise<void> => {
804
807
  // TODO: Review is OK to remove if (this.hasAttachedSyncCommitteeMember())
805
808
 
806
809
  try {
807
810
  // messages SHOULD be broadcast after SYNC_MESSAGE_DUE_BPS of slot has transpired
808
811
  // https://github.com/ethereum/consensus-specs/blob/v1.6.1/specs/altair/light-client/p2p-interface.md#sync-committee
809
812
  await this.waitForSyncMessageCutoff(optimisticUpdate.signatureSlot);
813
+ if (this.closed) return;
810
814
  await this.publishLightClientOptimisticUpdate(optimisticUpdate);
811
815
  } catch (e) {
812
816
  this.logger.debug("Error on BeaconGossipHandler.onLightclientOptimisticUpdate", {}, e as Error);
@@ -843,18 +847,18 @@ export class Network implements INetwork {
843
847
  this.connectedPeersSyncMeta.delete(data.peer);
844
848
  };
845
849
 
846
- private onTargetGroupCountUpdated = (count: number): void => {
847
- this.core.setTargetGroupCount(count);
850
+ private onTargetGroupCountUpdated = async (count: number): Promise<void> => {
851
+ try {
852
+ await this.core.setTargetGroupCount(count);
853
+ } catch (error) {
854
+ this.logger.error("Error updating network custody group count", {count}, error as Error);
855
+ }
848
856
  };
849
857
 
850
858
  private onPublishDataColumns = async (sidecars: DataColumnSidecar[]): Promise<void> => {
851
859
  await promiseAllMaybeAsync(sidecars.map((sidecar) => () => this.publishDataColumnSidecar(sidecar)));
852
860
  };
853
861
 
854
- private onPublishBlobSidecars = (sidecars: deneb.BlobSidecar[]): Promise<number[]> => {
855
- return promiseAllMaybeAsync(sidecars.map((sidecar) => () => this.publishBlobSidecar(sidecar)));
856
- };
857
-
858
862
  private onPublishProposerSlashing = async (proposerSlashing: phase0.ProposerSlashing): Promise<void> => {
859
863
  try {
860
864
  await this.publishProposerSlashing(proposerSlashing);
@@ -868,6 +872,10 @@ export class Network implements INetwork {
868
872
  };
869
873
 
870
874
  private onUpdateStatus = async (): Promise<void> => {
871
- await this.core.updateStatus(this.chain.getStatus());
875
+ try {
876
+ await this.core.updateStatus(this.chain.getStatus());
877
+ } catch (error) {
878
+ this.logger.error("Error updating network status", {}, error as Error);
879
+ }
872
880
  };
873
881
  }
@@ -25,6 +25,8 @@ export interface NetworkOptions
25
25
  mdns?: boolean;
26
26
  connectToDiscv5Bootnodes?: boolean;
27
27
  version?: string;
28
+ /** Include the version in libp2p Identify. Private mode takes precedence. */
29
+ advertiseVersion?: boolean;
28
30
  private?: boolean;
29
31
  useWorker?: boolean;
30
32
  maxYoungGenerationSizeMb?: number;
@@ -72,6 +74,8 @@ export const defaultNetworkOptions: NetworkOptions = {
72
74
  maxYoungGenerationSizeMb: 152,
73
75
  // subscribe 2 slots before aggregator dutied slot to get stable mesh peers as monitored on goerli
74
76
  slotsToSubscribeBeforeAggregatorDuty: 2,
77
+ // up to the max number of attestations per block
78
+ slotsToSubscribeBeforeProposalDuty: 8,
75
79
  // This will enable the light client server by default
76
80
  disableLightClientServer: false,
77
81
  quic: true,