@lodestar/beacon-node 1.41.0-dev.e1d339886d → 1.41.0-dev.e6c853da0e

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 (384) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +123 -4
  3. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  4. package/lib/api/impl/beacon/state/index.js +8 -8
  5. package/lib/api/impl/beacon/state/index.js.map +1 -1
  6. package/lib/api/impl/beacon/state/utils.d.ts +3 -4
  7. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
  8. package/lib/api/impl/beacon/state/utils.js +5 -24
  9. package/lib/api/impl/beacon/state/utils.js.map +1 -1
  10. package/lib/api/impl/debug/index.d.ts.map +1 -1
  11. package/lib/api/impl/debug/index.js +6 -2
  12. package/lib/api/impl/debug/index.js.map +1 -1
  13. package/lib/api/impl/node/utils.d.ts +1 -1
  14. package/lib/api/impl/node/utils.d.ts.map +1 -1
  15. package/lib/api/impl/node/utils.js.map +1 -1
  16. package/lib/api/impl/validator/index.d.ts.map +1 -1
  17. package/lib/api/impl/validator/index.js +130 -16
  18. package/lib/api/impl/validator/index.js.map +1 -1
  19. package/lib/chain/archiveStore/archiveStore.d.ts +1 -0
  20. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  21. package/lib/chain/archiveStore/archiveStore.js +9 -0
  22. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  23. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts +5 -6
  24. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +1 -1
  25. package/lib/chain/archiveStore/historicalState/getHistoricalState.js +9 -10
  26. package/lib/chain/archiveStore/historicalState/getHistoricalState.js.map +1 -1
  27. package/lib/chain/archiveStore/historicalState/worker.js +3 -3
  28. package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
  29. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +3 -8
  30. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -1
  31. package/lib/chain/archiveStore/utils/archiveBlocks.js +1 -1
  32. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  33. package/lib/chain/archiveStore/utils/archivePayloads.d.ts +7 -0
  34. package/lib/chain/archiveStore/utils/archivePayloads.d.ts.map +1 -0
  35. package/lib/chain/archiveStore/utils/archivePayloads.js +10 -0
  36. package/lib/chain/archiveStore/utils/archivePayloads.js.map +1 -0
  37. package/lib/chain/archiveStore/utils/updateBackfillRange.js +1 -1
  38. package/lib/chain/archiveStore/utils/updateBackfillRange.js.map +1 -1
  39. package/lib/chain/blocks/blockInput/blockInput.d.ts +20 -2
  40. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
  41. package/lib/chain/blocks/blockInput/blockInput.js +47 -0
  42. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  43. package/lib/chain/blocks/blockInput/types.d.ts +13 -1
  44. package/lib/chain/blocks/blockInput/types.d.ts.map +1 -1
  45. package/lib/chain/blocks/blockInput/types.js +1 -0
  46. package/lib/chain/blocks/blockInput/types.js.map +1 -1
  47. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  48. package/lib/chain/blocks/importBlock.js +27 -4
  49. package/lib/chain/blocks/importBlock.js.map +1 -1
  50. package/lib/chain/blocks/index.d.ts.map +1 -1
  51. package/lib/chain/blocks/index.js +2 -1
  52. package/lib/chain/blocks/index.js.map +1 -1
  53. package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts.map +1 -1
  54. package/lib/chain/blocks/verifyBlocksDataAvailability.js +3 -0
  55. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  56. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +4 -0
  57. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  58. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +5 -1
  59. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  60. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -1
  61. package/lib/chain/blocks/verifyBlocksSanityChecks.js +4 -1
  62. package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
  63. package/lib/chain/blocks/writeBlockInputToDb.d.ts +12 -3
  64. package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +1 -1
  65. package/lib/chain/blocks/writeBlockInputToDb.js +101 -96
  66. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  67. package/lib/chain/bls/multithread/index.d.ts +3 -3
  68. package/lib/chain/bls/multithread/index.d.ts.map +1 -1
  69. package/lib/chain/bls/multithread/index.js +5 -5
  70. package/lib/chain/bls/multithread/index.js.map +1 -1
  71. package/lib/chain/bls/multithread/jobItem.d.ts +2 -2
  72. package/lib/chain/bls/multithread/jobItem.d.ts.map +1 -1
  73. package/lib/chain/bls/multithread/jobItem.js +2 -2
  74. package/lib/chain/bls/multithread/jobItem.js.map +1 -1
  75. package/lib/chain/bls/singleThread.d.ts +4 -4
  76. package/lib/chain/bls/singleThread.d.ts.map +1 -1
  77. package/lib/chain/bls/singleThread.js +4 -4
  78. package/lib/chain/bls/singleThread.js.map +1 -1
  79. package/lib/chain/bls/utils.d.ts +2 -2
  80. package/lib/chain/bls/utils.d.ts.map +1 -1
  81. package/lib/chain/bls/utils.js +7 -4
  82. package/lib/chain/bls/utils.js.map +1 -1
  83. package/lib/chain/chain.d.ts +7 -10
  84. package/lib/chain/chain.d.ts.map +1 -1
  85. package/lib/chain/chain.js +43 -27
  86. package/lib/chain/chain.js.map +1 -1
  87. package/lib/chain/emitter.d.ts +5 -5
  88. package/lib/chain/emitter.d.ts.map +1 -1
  89. package/lib/chain/errors/executionPayloadEnvelope.d.ts +2 -2
  90. package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
  91. package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
  92. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  93. package/lib/chain/forkChoice/index.js +30 -24
  94. package/lib/chain/forkChoice/index.js.map +1 -1
  95. package/lib/chain/interface.d.ts +4 -6
  96. package/lib/chain/interface.d.ts.map +1 -1
  97. package/lib/chain/interface.js.map +1 -1
  98. package/lib/chain/opPools/aggregatedAttestationPool.js +1 -1
  99. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  100. package/lib/chain/options.d.ts.map +1 -1
  101. package/lib/chain/options.js.map +1 -1
  102. package/lib/chain/prepareNextSlot.js +3 -3
  103. package/lib/chain/prepareNextSlot.js.map +1 -1
  104. package/lib/chain/produceBlock/computeNewStateRoot.d.ts +10 -2
  105. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
  106. package/lib/chain/produceBlock/computeNewStateRoot.js +24 -2
  107. package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
  108. package/lib/chain/produceBlock/produceBlockBody.d.ts +22 -7
  109. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  110. package/lib/chain/produceBlock/produceBlockBody.js +109 -10
  111. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  112. package/lib/chain/regen/queued.d.ts.map +1 -1
  113. package/lib/chain/regen/queued.js +4 -1
  114. package/lib/chain/regen/queued.js.map +1 -1
  115. package/lib/chain/regen/regen.d.ts.map +1 -1
  116. package/lib/chain/regen/regen.js +6 -2
  117. package/lib/chain/regen/regen.js.map +1 -1
  118. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
  119. package/lib/chain/seenCache/seenGossipBlockInput.js +15 -7
  120. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  121. package/lib/chain/validation/aggregateAndProof.js +1 -1
  122. package/lib/chain/validation/aggregateAndProof.js.map +1 -1
  123. package/lib/chain/validation/attestation.d.ts.map +1 -1
  124. package/lib/chain/validation/attestation.js +7 -4
  125. package/lib/chain/validation/attestation.js.map +1 -1
  126. package/lib/chain/validation/attesterSlashing.d.ts.map +1 -1
  127. package/lib/chain/validation/attesterSlashing.js +9 -2
  128. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  129. package/lib/chain/validation/blobSidecar.js +2 -2
  130. package/lib/chain/validation/blobSidecar.js.map +1 -1
  131. package/lib/chain/validation/block.d.ts.map +1 -1
  132. package/lib/chain/validation/block.js +6 -3
  133. package/lib/chain/validation/block.js.map +1 -1
  134. package/lib/chain/validation/dataColumnSidecar.d.ts +2 -2
  135. package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -1
  136. package/lib/chain/validation/dataColumnSidecar.js +1 -1
  137. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  138. package/lib/chain/validation/executionPayloadBid.js +1 -2
  139. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  140. package/lib/chain/validation/executionPayloadEnvelope.js +4 -4
  141. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  142. package/lib/chain/validation/payloadAttestationMessage.js +9 -3
  143. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
  144. package/lib/chain/validation/proposerSlashing.js +1 -1
  145. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  146. package/lib/chain/validation/syncCommitteeContributionAndProof.js +1 -1
  147. package/lib/db/beacon.d.ts +3 -1
  148. package/lib/db/beacon.d.ts.map +1 -1
  149. package/lib/db/beacon.js +5 -1
  150. package/lib/db/beacon.js.map +1 -1
  151. package/lib/db/buckets.d.ts +3 -1
  152. package/lib/db/buckets.d.ts.map +1 -1
  153. package/lib/db/buckets.js +2 -0
  154. package/lib/db/buckets.js.map +1 -1
  155. package/lib/db/interface.d.ts +3 -1
  156. package/lib/db/interface.d.ts.map +1 -1
  157. package/lib/db/repositories/blockArchive.d.ts.map +1 -1
  158. package/lib/db/repositories/blockArchive.js +1 -2
  159. package/lib/db/repositories/blockArchive.js.map +1 -1
  160. package/lib/db/repositories/blockArchiveIndex.d.ts +2 -2
  161. package/lib/db/repositories/blockArchiveIndex.d.ts.map +1 -1
  162. package/lib/db/repositories/dataColumnSidecar.d.ts +5 -3
  163. package/lib/db/repositories/dataColumnSidecar.d.ts.map +1 -1
  164. package/lib/db/repositories/dataColumnSidecar.js +14 -1
  165. package/lib/db/repositories/dataColumnSidecar.js.map +1 -1
  166. package/lib/db/repositories/dataColumnSidecarArchive.d.ts +5 -3
  167. package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +1 -1
  168. package/lib/db/repositories/dataColumnSidecarArchive.js +14 -1
  169. package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
  170. package/lib/db/repositories/executionPayloadEnvelope.d.ts +19 -0
  171. package/lib/db/repositories/executionPayloadEnvelope.d.ts.map +1 -0
  172. package/lib/db/repositories/executionPayloadEnvelope.js +22 -0
  173. package/lib/db/repositories/executionPayloadEnvelope.js.map +1 -0
  174. package/lib/db/repositories/executionPayloadEnvelopeArchive.d.ts +18 -0
  175. package/lib/db/repositories/executionPayloadEnvelopeArchive.d.ts.map +1 -0
  176. package/lib/db/repositories/executionPayloadEnvelopeArchive.js +28 -0
  177. package/lib/db/repositories/executionPayloadEnvelopeArchive.js.map +1 -0
  178. package/lib/db/repositories/index.d.ts +2 -0
  179. package/lib/db/repositories/index.d.ts.map +1 -1
  180. package/lib/db/repositories/index.js +2 -0
  181. package/lib/db/repositories/index.js.map +1 -1
  182. package/lib/execution/engine/http.d.ts +1 -0
  183. package/lib/execution/engine/http.d.ts.map +1 -1
  184. package/lib/execution/engine/http.js +3 -0
  185. package/lib/execution/engine/http.js.map +1 -1
  186. package/lib/metrics/metrics/beacon.d.ts +1 -0
  187. package/lib/metrics/metrics/beacon.d.ts.map +1 -1
  188. package/lib/metrics/metrics/beacon.js +5 -0
  189. package/lib/metrics/metrics/beacon.js.map +1 -1
  190. package/lib/metrics/metrics/lodestar.d.ts +8 -0
  191. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  192. package/lib/metrics/metrics/lodestar.js +14 -0
  193. package/lib/metrics/metrics/lodestar.js.map +1 -1
  194. package/lib/monitoring/service.d.ts +2 -2
  195. package/lib/monitoring/service.d.ts.map +1 -1
  196. package/lib/monitoring/service.js +3 -2
  197. package/lib/monitoring/service.js.map +1 -1
  198. package/lib/network/core/networkCore.d.ts +3 -3
  199. package/lib/network/core/networkCore.d.ts.map +1 -1
  200. package/lib/network/core/networkCore.js.map +1 -1
  201. package/lib/network/core/networkCoreWorkerHandler.d.ts +3 -3
  202. package/lib/network/core/networkCoreWorkerHandler.d.ts.map +1 -1
  203. package/lib/network/core/types.d.ts +2 -2
  204. package/lib/network/core/types.d.ts.map +1 -1
  205. package/lib/network/events.d.ts +2 -1
  206. package/lib/network/events.d.ts.map +1 -1
  207. package/lib/network/events.js.map +1 -1
  208. package/lib/network/gossip/encoding.d.ts +3 -3
  209. package/lib/network/gossip/encoding.d.ts.map +1 -1
  210. package/lib/network/gossip/encoding.js.map +1 -1
  211. package/lib/network/gossip/gossipsub.d.ts +13 -4
  212. package/lib/network/gossip/gossipsub.d.ts.map +1 -1
  213. package/lib/network/gossip/gossipsub.js +47 -20
  214. package/lib/network/gossip/gossipsub.js.map +1 -1
  215. package/lib/network/gossip/interface.d.ts +6 -6
  216. package/lib/network/gossip/interface.d.ts.map +1 -1
  217. package/lib/network/gossip/scoringParameters.d.ts +1 -1
  218. package/lib/network/gossip/scoringParameters.d.ts.map +1 -1
  219. package/lib/network/gossip/scoringParameters.js +1 -1
  220. package/lib/network/gossip/scoringParameters.js.map +1 -1
  221. package/lib/network/gossip/topic.d.ts +113 -63
  222. package/lib/network/gossip/topic.d.ts.map +1 -1
  223. package/lib/network/gossip/topic.js +2 -2
  224. package/lib/network/gossip/topic.js.map +1 -1
  225. package/lib/network/interface.d.ts +6 -5
  226. package/lib/network/interface.d.ts.map +1 -1
  227. package/lib/network/libp2p/index.d.ts +1 -1
  228. package/lib/network/libp2p/index.d.ts.map +1 -1
  229. package/lib/network/libp2p/index.js +7 -2
  230. package/lib/network/libp2p/index.js.map +1 -1
  231. package/lib/network/network.d.ts +5 -4
  232. package/lib/network/network.d.ts.map +1 -1
  233. package/lib/network/network.js +10 -1
  234. package/lib/network/network.js.map +1 -1
  235. package/lib/network/options.d.ts.map +1 -1
  236. package/lib/network/options.js +3 -0
  237. package/lib/network/options.js.map +1 -1
  238. package/lib/network/peers/datastore.d.ts +7 -5
  239. package/lib/network/peers/datastore.d.ts.map +1 -1
  240. package/lib/network/peers/datastore.js +10 -10
  241. package/lib/network/peers/datastore.js.map +1 -1
  242. package/lib/network/peers/peerManager.d.ts +3 -0
  243. package/lib/network/peers/peerManager.d.ts.map +1 -1
  244. package/lib/network/peers/peerManager.js +103 -53
  245. package/lib/network/peers/peerManager.js.map +1 -1
  246. package/lib/network/peers/utils/prioritizePeers.d.ts +3 -3
  247. package/lib/network/peers/utils/prioritizePeers.d.ts.map +1 -1
  248. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  249. package/lib/network/processor/gossipHandlers.js +9 -2
  250. package/lib/network/processor/gossipHandlers.js.map +1 -1
  251. package/lib/network/processor/gossipValidatorFn.js +1 -1
  252. package/lib/network/processor/types.d.ts +1 -1
  253. package/lib/network/processor/types.d.ts.map +1 -1
  254. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -1
  255. package/lib/network/reqresp/handlers/beaconBlocksByRange.js +3 -2
  256. package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
  257. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +1 -1
  258. package/lib/network/reqresp/handlers/blobSidecarsByRange.js +3 -2
  259. package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +1 -1
  260. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js +1 -1
  261. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js.map +1 -1
  262. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -1
  263. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +3 -2
  264. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -1
  265. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js +1 -1
  266. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -1
  267. package/lib/network/reqresp/score.d.ts.map +1 -1
  268. package/lib/network/reqresp/score.js +0 -1
  269. package/lib/network/reqresp/score.js.map +1 -1
  270. package/lib/network/util.js +2 -2
  271. package/lib/network/util.js.map +1 -1
  272. package/lib/node/nodejs.d.ts +3 -5
  273. package/lib/node/nodejs.d.ts.map +1 -1
  274. package/lib/node/nodejs.js +6 -4
  275. package/lib/node/nodejs.js.map +1 -1
  276. package/lib/util/blobs.d.ts +2 -2
  277. package/lib/util/blobs.d.ts.map +1 -1
  278. package/lib/util/blobs.js.map +1 -1
  279. package/lib/util/clock.d.ts +6 -0
  280. package/lib/util/clock.d.ts.map +1 -1
  281. package/lib/util/clock.js +9 -3
  282. package/lib/util/clock.js.map +1 -1
  283. package/lib/util/dataColumns.d.ts +11 -3
  284. package/lib/util/dataColumns.d.ts.map +1 -1
  285. package/lib/util/dataColumns.js +27 -0
  286. package/lib/util/dataColumns.js.map +1 -1
  287. package/lib/util/multifork.d.ts +8 -0
  288. package/lib/util/multifork.d.ts.map +1 -1
  289. package/lib/util/multifork.js +37 -0
  290. package/lib/util/multifork.js.map +1 -1
  291. package/package.json +39 -42
  292. package/src/api/impl/beacon/blocks/index.ts +147 -3
  293. package/src/api/impl/beacon/state/index.ts +8 -8
  294. package/src/api/impl/beacon/state/utils.ts +15 -29
  295. package/src/api/impl/debug/index.ts +9 -5
  296. package/src/api/impl/node/utils.ts +3 -3
  297. package/src/api/impl/validator/index.ts +153 -17
  298. package/src/chain/archiveStore/archiveStore.ts +15 -5
  299. package/src/chain/archiveStore/historicalState/getHistoricalState.ts +10 -11
  300. package/src/chain/archiveStore/historicalState/worker.ts +3 -3
  301. package/src/chain/archiveStore/utils/archiveBlocks.ts +4 -5
  302. package/src/chain/archiveStore/utils/archivePayloads.ts +15 -0
  303. package/src/chain/archiveStore/utils/updateBackfillRange.ts +1 -1
  304. package/src/chain/blocks/blockInput/blockInput.ts +68 -3
  305. package/src/chain/blocks/blockInput/types.ts +13 -0
  306. package/src/chain/blocks/importBlock.ts +35 -4
  307. package/src/chain/blocks/index.ts +2 -1
  308. package/src/chain/blocks/verifyBlocksDataAvailability.ts +3 -0
  309. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +9 -2
  310. package/src/chain/blocks/verifyBlocksSanityChecks.ts +7 -2
  311. package/src/chain/blocks/writeBlockInputToDb.ts +119 -101
  312. package/src/chain/bls/multithread/index.ts +7 -7
  313. package/src/chain/bls/multithread/jobItem.ts +3 -3
  314. package/src/chain/bls/singleThread.ts +5 -5
  315. package/src/chain/bls/utils.ts +8 -5
  316. package/src/chain/chain.ts +77 -40
  317. package/src/chain/emitter.ts +5 -5
  318. package/src/chain/errors/executionPayloadEnvelope.ts +6 -2
  319. package/src/chain/forkChoice/index.ts +39 -21
  320. package/src/chain/interface.ts +4 -11
  321. package/src/chain/opPools/aggregatedAttestationPool.ts +1 -1
  322. package/src/chain/options.ts +1 -0
  323. package/src/chain/prepareNextSlot.ts +5 -5
  324. package/src/chain/produceBlock/computeNewStateRoot.ts +35 -3
  325. package/src/chain/produceBlock/produceBlockBody.ts +162 -13
  326. package/src/chain/regen/queued.ts +7 -2
  327. package/src/chain/regen/regen.ts +9 -3
  328. package/src/chain/seenCache/seenGossipBlockInput.ts +16 -7
  329. package/src/chain/validation/aggregateAndProof.ts +1 -1
  330. package/src/chain/validation/attestation.ts +7 -4
  331. package/src/chain/validation/attesterSlashing.ts +10 -1
  332. package/src/chain/validation/blobSidecar.ts +2 -2
  333. package/src/chain/validation/block.ts +9 -4
  334. package/src/chain/validation/dataColumnSidecar.ts +3 -6
  335. package/src/chain/validation/executionPayloadBid.ts +1 -2
  336. package/src/chain/validation/executionPayloadEnvelope.ts +4 -4
  337. package/src/chain/validation/payloadAttestationMessage.ts +10 -3
  338. package/src/chain/validation/proposerSlashing.ts +1 -1
  339. package/src/chain/validation/syncCommitteeContributionAndProof.ts +1 -1
  340. package/src/db/beacon.ts +8 -0
  341. package/src/db/buckets.ts +3 -0
  342. package/src/db/interface.ts +5 -0
  343. package/src/db/repositories/blockArchive.ts +1 -2
  344. package/src/db/repositories/dataColumnSidecar.ts +18 -3
  345. package/src/db/repositories/dataColumnSidecarArchive.ts +18 -3
  346. package/src/db/repositories/executionPayloadEnvelope.ts +26 -0
  347. package/src/db/repositories/executionPayloadEnvelopeArchive.ts +32 -0
  348. package/src/db/repositories/index.ts +2 -0
  349. package/src/execution/engine/http.ts +3 -0
  350. package/src/metrics/metrics/beacon.ts +5 -0
  351. package/src/metrics/metrics/lodestar.ts +14 -0
  352. package/src/monitoring/service.ts +3 -2
  353. package/src/network/core/networkCore.ts +3 -3
  354. package/src/network/core/networkCoreWorkerHandler.ts +3 -3
  355. package/src/network/core/types.ts +2 -2
  356. package/src/network/events.ts +2 -1
  357. package/src/network/gossip/encoding.ts +3 -3
  358. package/src/network/gossip/gossipsub.ts +86 -25
  359. package/src/network/gossip/interface.ts +6 -6
  360. package/src/network/gossip/scoringParameters.ts +4 -4
  361. package/src/network/gossip/topic.ts +2 -1
  362. package/src/network/interface.ts +7 -4
  363. package/src/network/libp2p/index.ts +8 -3
  364. package/src/network/network.ts +24 -6
  365. package/src/network/options.ts +3 -0
  366. package/src/network/peers/datastore.ts +13 -10
  367. package/src/network/peers/peerManager.ts +118 -54
  368. package/src/network/peers/utils/prioritizePeers.ts +3 -3
  369. package/src/network/processor/gossipHandlers.ts +19 -4
  370. package/src/network/processor/gossipValidatorFn.ts +1 -1
  371. package/src/network/processor/types.ts +1 -1
  372. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +3 -2
  373. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +3 -2
  374. package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +1 -1
  375. package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +3 -2
  376. package/src/network/reqresp/handlers/dataColumnSidecarsByRoot.ts +1 -1
  377. package/src/network/reqresp/score.ts +0 -1
  378. package/src/network/util.ts +2 -2
  379. package/src/node/nodejs.ts +8 -9
  380. package/src/util/blobs.ts +3 -3
  381. package/src/util/clock.ts +9 -4
  382. package/src/util/dataColumns.ts +37 -1
  383. package/src/util/multifork.ts +45 -0
  384. package/src/util/workerEvents.ts +1 -1
@@ -20,7 +20,7 @@ export async function* onBlobSidecarsByRoot(
20
20
  for (const blobIdentifier of requestBody) {
21
21
  const {blockRoot, index} = blobIdentifier;
22
22
  const blockRootHex = toRootHex(blockRoot);
23
- const block = chain.forkChoice.getBlockHex(blockRootHex);
23
+ const block = chain.forkChoice.getBlockHexDefaultStatus(blockRootHex);
24
24
 
25
25
  // NOTE: Only support non-finalized blocks.
26
26
  // SPEC: Clients MUST support requesting blocks and sidecars since the latest finalized epoch.
@@ -78,8 +78,9 @@ export async function* onDataColumnSidecarsByRange(
78
78
 
79
79
  // Non-finalized range of columns
80
80
  if (endSlot > finalizedSlot) {
81
- const headRoot = chain.forkChoice.getHeadRoot();
82
- const headChain = chain.forkChoice.getAllAncestorBlocks(headRoot);
81
+ const headBlock = chain.forkChoice.getHead();
82
+ const headRoot = headBlock.blockRoot;
83
+ const headChain = chain.forkChoice.getAllAncestorBlocks(headRoot, headBlock.payloadStatus);
83
84
 
84
85
  // Iterate head chain with ascending block numbers
85
86
  for (let i = headChain.length - 1; i >= 0; i--) {
@@ -34,7 +34,7 @@ export async function* onDataColumnSidecarsByRoot(
34
34
  }
35
35
 
36
36
  const blockRootHex = toRootHex(blockRoot);
37
- const block = chain.forkChoice.getBlockHex(blockRootHex);
37
+ const block = chain.forkChoice.getBlockHexDefaultStatus(blockRootHex);
38
38
  // If the block is not in fork choice, it may be finalized. Attempt to find its slot in block archive
39
39
  const slot = block ? block.slot : await db.blockArchive.getSlotByRoot(blockRoot);
40
40
 
@@ -38,7 +38,6 @@ export function onOutgoingReqRespError(e: RequestError, method: ReqRespMethod):
38
38
  : PeerAction.LowToleranceError;
39
39
  // TODO: Detect SSZDecodeError and return PeerAction.Fatal
40
40
 
41
- case RequestErrorCode.TTFB_TIMEOUT:
42
41
  case RequestErrorCode.RESP_TIMEOUT:
43
42
  switch (method) {
44
43
  case ReqRespMethod.Ping:
@@ -23,7 +23,7 @@ export function getConnection(libp2p: Libp2p, peerIdStr: string): Connection | u
23
23
  return getConnectionsMap(libp2p).get(peerIdStr)?.value[0] ?? undefined;
24
24
  }
25
25
 
26
- // https://github.com/ChainSafe/js-libp2p-gossipsub/blob/3475242ed254f7647798ab7f36b21909f6cb61da/src/index.ts#L2009
26
+ // https://github.com/libp2p/js-libp2p/blob/f87cba928991736d9646b3e054c367f55cab315c/packages/gossipsub/src/gossipsub.ts#L2076
27
27
  export function isPublishToZeroPeersError(e: Error): boolean {
28
- return e.message.includes("PublishError.InsufficientPeers");
28
+ return e.message.includes("PublishError.NoPeersSubscribedToTopic");
29
29
  }
@@ -2,12 +2,11 @@ import {setMaxListeners} from "node:events";
2
2
  import {PrivateKey} from "@libp2p/interface";
3
3
  import {Registry} from "prom-client";
4
4
  import {hasher} from "@chainsafe/persistent-merkle-tree";
5
- import {PubkeyIndexMap} from "@chainsafe/pubkey-index-map";
6
5
  import {BeaconApiMethods} from "@lodestar/api/beacon/server";
7
6
  import {BeaconConfig} from "@lodestar/config";
8
7
  import type {LoggerNode} from "@lodestar/logger/node";
9
8
  import {ZERO_HASH_HEX} from "@lodestar/params";
10
- import {CachedBeaconStateAllForks, Index2PubkeyCache, isExecutionCachedStateType} from "@lodestar/state-transition";
9
+ import {CachedBeaconStateAllForks, PubkeyCache, isExecutionCachedStateType} from "@lodestar/state-transition";
11
10
  import {phase0} from "@lodestar/types";
12
11
  import {sleep, toRootHex} from "@lodestar/utils";
13
12
  import {ProcessShutdownCallback} from "@lodestar/validator";
@@ -47,8 +46,7 @@ export type BeaconNodeModules = {
47
46
  export type BeaconNodeInitModules = {
48
47
  opts: IBeaconNodeOptions;
49
48
  config: BeaconConfig;
50
- pubkey2index: PubkeyIndexMap;
51
- index2pubkey: Index2PubkeyCache;
49
+ pubkeyCache: PubkeyCache;
52
50
  db: IBeaconDb;
53
51
  logger: LoggerNode;
54
52
  processShutdownCallback: ProcessShutdownCallback;
@@ -150,8 +148,7 @@ export class BeaconNode {
150
148
  static async init<T extends BeaconNode = BeaconNode>({
151
149
  opts,
152
150
  config,
153
- pubkey2index,
154
- index2pubkey,
151
+ pubkeyCache,
155
152
  db,
156
153
  logger,
157
154
  processShutdownCallback,
@@ -240,8 +237,7 @@ export class BeaconNode {
240
237
  privateKey,
241
238
  config,
242
239
  clock,
243
- pubkey2index,
244
- index2pubkey,
240
+ pubkeyCache,
245
241
  dataDir,
246
242
  db,
247
243
  dbName: opts.db.name,
@@ -364,9 +360,12 @@ export class BeaconNode {
364
360
  if (this.restApi) await this.restApi.close();
365
361
  await this.network.close();
366
362
  if (this.metricsServer) await this.metricsServer.close();
367
- if (this.monitoring) this.monitoring.close();
363
+ if (this.monitoring) await this.monitoring.close();
368
364
  await this.chain.persistToDisk();
369
365
  await this.chain.close();
366
+ // Abort signal last: close() calls above clear intervals/timeouts so no new
367
+ // operations get scheduled. If we aborted first, a still-pending interval could
368
+ // fire and schedule a new operation after abort, leaving it stuck and delaying shutdown.
370
369
  if (this.controller) this.controller.abort();
371
370
  await sleep(DELAY_BEFORE_CLOSING_DB_MS);
372
371
  await this.db.close();
package/src/util/blobs.ts CHANGED
@@ -13,7 +13,7 @@ import {
13
13
  VERSIONED_HASH_VERSION_KZG,
14
14
  } from "@lodestar/params";
15
15
  import {signedBlockToSignedHeader} from "@lodestar/state-transition";
16
- import {BeaconBlockBody, SSZTypesFor, SignedBeaconBlock, deneb, fulu, ssz} from "@lodestar/types";
16
+ import {BeaconBlockBody, DataColumnSidecars, SSZTypesFor, SignedBeaconBlock, deneb, fulu, ssz} from "@lodestar/types";
17
17
  import {kzg} from "./kzg.js";
18
18
 
19
19
  type VersionHash = Uint8Array;
@@ -149,7 +149,7 @@ export async function dataColumnMatrixRecovery(
149
149
  * Reconstruct blobs from a set of data columns, at least 50%+ of all the columns
150
150
  * must be provided to allow to reconstruct the full data matrix
151
151
  */
152
- export async function reconstructBlobs(sidecars: fulu.DataColumnSidecars, indices?: number[]): Promise<deneb.Blobs> {
152
+ export async function reconstructBlobs(sidecars: DataColumnSidecars, indices?: number[]): Promise<deneb.Blobs> {
153
153
  if (sidecars.length < NUMBER_OF_COLUMNS / 2) {
154
154
  throw Error(
155
155
  `Expected at least ${NUMBER_OF_COLUMNS / 2} data columns to reconstruct blobs, received ${sidecars.length}`
@@ -188,7 +188,7 @@ export async function reconstructBlobs(sidecars: fulu.DataColumnSidecars, indice
188
188
  * Recover cells for specific blob indices from a set of data columns
189
189
  */
190
190
  async function recoverBlobCells(
191
- partialSidecars: fulu.DataColumnSidecar[],
191
+ partialSidecars: DataColumnSidecars,
192
192
  blobIndices: number[]
193
193
  ): Promise<Map<number, fulu.Cell[]> | null> {
194
194
  const columnCount = partialSidecars.length;
package/src/util/clock.ts CHANGED
@@ -92,15 +92,17 @@ export class Clock extends EventEmitter implements IClock {
92
92
  }
93
93
  return slot;
94
94
  }
95
-
96
95
  /**
97
96
  * If it's too close to next slot given MAXIMUM_GOSSIP_CLOCK_DISPARITY, return currentSlot + 1.
98
97
  * Otherwise return currentSlot
98
+ *
99
+ * Spec: phase0/p2p-interface.md - gossip validation uses `current_time + MAXIMUM_GOSSIP_CLOCK_DISPARITY < message_time`
100
+ * to reject future messages (strict `<`), so the boundary (exactly equal) is accepted, hence `<=` here.
99
101
  */
100
102
  get currentSlotWithGossipDisparity(): Slot {
101
103
  const currentSlot = this.currentSlot;
102
104
  const nextSlotTime = computeTimeAtSlot(this.config, currentSlot + 1, this.genesisTime) * 1000;
103
- return nextSlotTime - Date.now() < this.config.MAXIMUM_GOSSIP_CLOCK_DISPARITY ? currentSlot + 1 : currentSlot;
105
+ return nextSlotTime - Date.now() <= this.config.MAXIMUM_GOSSIP_CLOCK_DISPARITY ? currentSlot + 1 : currentSlot;
104
106
  }
105
107
 
106
108
  get currentEpoch(): Epoch {
@@ -121,6 +123,9 @@ export class Clock extends EventEmitter implements IClock {
121
123
 
122
124
  /**
123
125
  * Check if a slot is current slot given MAXIMUM_GOSSIP_CLOCK_DISPARITY.
126
+ *
127
+ * Uses `<=` for disparity checks because the spec rejects with strict `<`
128
+ * (phase0/p2p-interface.md), meaning the boundary (exactly equal) is accepted.
124
129
  */
125
130
  isCurrentSlotGivenGossipDisparity(slot: Slot): boolean {
126
131
  const currentSlot = this.currentSlot;
@@ -129,12 +134,12 @@ export class Clock extends EventEmitter implements IClock {
129
134
  }
130
135
  const nextSlotTime = computeTimeAtSlot(this.config, currentSlot + 1, this.genesisTime) * 1000;
131
136
  // we're too close to next slot, accept next slot
132
- if (nextSlotTime - Date.now() < this.config.MAXIMUM_GOSSIP_CLOCK_DISPARITY) {
137
+ if (nextSlotTime - Date.now() <= this.config.MAXIMUM_GOSSIP_CLOCK_DISPARITY) {
133
138
  return slot === currentSlot + 1;
134
139
  }
135
140
  const currentSlotTime = computeTimeAtSlot(this.config, currentSlot, this.genesisTime) * 1000;
136
141
  // we've just passed the current slot, accept previous slot
137
- if (Date.now() - currentSlotTime < this.config.MAXIMUM_GOSSIP_CLOCK_DISPARITY) {
142
+ if (Date.now() - currentSlotTime <= this.config.MAXIMUM_GOSSIP_CLOCK_DISPARITY) {
138
143
  return slot === currentSlot - 1;
139
144
  }
140
145
  return false;
@@ -4,6 +4,7 @@ import {ChainForkConfig} from "@lodestar/config";
4
4
  import {
5
5
  ForkAll,
6
6
  ForkName,
7
+ ForkPostDeneb,
7
8
  ForkPostFulu,
8
9
  ForkPreGloas,
9
10
  KZG_COMMITMENTS_GINDEX,
@@ -15,9 +16,11 @@ import {
15
16
  BeaconBlockBody,
16
17
  ColumnIndex,
17
18
  CustodyIndex,
19
+ Root,
18
20
  SSZTypesFor,
19
21
  SignedBeaconBlock,
20
22
  SignedBeaconBlockHeader,
23
+ Slot,
21
24
  deneb,
22
25
  fulu,
23
26
  gloas,
@@ -269,7 +272,7 @@ export async function getCellsAndProofs(
269
272
  */
270
273
  export function getBlobKzgCommitments(
271
274
  fork: ForkName,
272
- signedBlock: SignedBeaconBlock<ForkPostFulu>
275
+ signedBlock: SignedBeaconBlock<ForkPostDeneb>
273
276
  ): deneb.KZGCommitment[] {
274
277
  if (isForkPostGloas(fork)) {
275
278
  return (signedBlock as gloas.SignedBeaconBlock).message.body.signedExecutionPayloadBid.message.blobKzgCommitments;
@@ -359,6 +362,39 @@ export function getDataColumnSidecarsFromColumnSidecar(
359
362
  );
360
363
  }
361
364
 
365
+ /**
366
+ * In Gloas, data column sidecars have a simplified structure with `slot` and `beaconBlockRoot`
367
+ * instead of `signedBlockHeader`, `kzgCommitments`, and `kzgCommitmentsInclusionProof`.
368
+ */
369
+ export function getDataColumnSidecarsForGloas(
370
+ slot: Slot,
371
+ beaconBlockRoot: Root,
372
+ cellsAndKzgProofs: {cells: Uint8Array[]; proofs: Uint8Array[]}[]
373
+ ): gloas.DataColumnSidecars {
374
+ // No need to create data column sidecars if there are no blobs
375
+ if (cellsAndKzgProofs.length === 0) {
376
+ return [];
377
+ }
378
+
379
+ const sidecars: gloas.DataColumnSidecars = [];
380
+ for (let columnIndex = 0; columnIndex < NUMBER_OF_COLUMNS; columnIndex++) {
381
+ const column: Uint8Array[] = [];
382
+ const kzgProofs: Uint8Array[] = [];
383
+ for (const {cells, proofs} of cellsAndKzgProofs) {
384
+ column.push(cells[columnIndex]);
385
+ kzgProofs.push(proofs[columnIndex]);
386
+ }
387
+ sidecars.push({
388
+ index: columnIndex,
389
+ column,
390
+ kzgProofs,
391
+ slot,
392
+ beaconBlockRoot,
393
+ });
394
+ }
395
+ return sidecars;
396
+ }
397
+
362
398
  /**
363
399
  * If we receive more than half of NUMBER_OF_COLUMNS (64) we should recover all remaining columns
364
400
  */
@@ -9,6 +9,11 @@ import {getSlotFromSignedBeaconBlockSerialized} from "./sszBytes.js";
9
9
  */
10
10
  const SLOT_BYTE_COUNT = 8;
11
11
 
12
+ /**
13
+ * SSZ offset uint32
14
+ */
15
+ const OFFSET_BYTE_COUNT = 4;
16
+
12
17
  /**
13
18
  * 8 + 32 = 40
14
19
  * ```
@@ -67,3 +72,43 @@ export function getLightClientHeaderTypeFromBytes(
67
72
  );
68
73
  return config.getPostAltairForkTypes(slot).LightClientHeader;
69
74
  }
75
+
76
+ /**
77
+ * Position of first offset in DataColumnSidecar (after index field)
78
+ *
79
+ * Fulu DataColumnSidecar (6 fields):
80
+ * index: uint64 [fixed - 8 bytes]
81
+ * column: List [variable - 4-byte offset]
82
+ * kzgCommitments: List [variable - 4-byte offset]
83
+ * kzgProofs: List [variable - 4-byte offset]
84
+ * signedBlockHeader: Container [fixed - 208 bytes]
85
+ * kzgCommitmentsInclusionProof: Vector[Bytes32, 4] [fixed - 128 bytes]
86
+ * => First offset value = 8 + 4 + 4 + 4 + 208 + 128 = 356
87
+ *
88
+ * Gloas DataColumnSidecar (5 fields):
89
+ * index: uint64 [fixed - 8 bytes]
90
+ * column: List [variable - 4-byte offset]
91
+ * kzgProofs: List [variable - 4-byte offset]
92
+ * slot: uint64 [fixed - 8 bytes]
93
+ * beaconBlockRoot: Bytes32 [fixed - 32 bytes]
94
+ * => First offset value = 8 + 4 + 4 + 8 + 32 = 56
95
+ */
96
+ const FIRST_OFFSET_POSITION_IN_DATA_COLUMN_SIDECAR = 8;
97
+ const GLOAS_DATA_COLUMN_SIDECAR_FIRST_OFFSET = 56;
98
+
99
+ /**
100
+ * Determines if DataColumnSidecar bytes are from Gloas fork by checking the SSZ offset structure.
101
+ *
102
+ * The first offset (bytes 8-12) indicates where variable-size data begins:
103
+ * - Gloas: 56 (small fixed section)
104
+ * - Fulu: 356
105
+ */
106
+ export function isGloasDataColumnSidecarBytes(bytes: Uint8Array): boolean {
107
+ const firstOffset = bytesToInt(
108
+ bytes.subarray(
109
+ FIRST_OFFSET_POSITION_IN_DATA_COLUMN_SIDECAR,
110
+ FIRST_OFFSET_POSITION_IN_DATA_COLUMN_SIDECAR + OFFSET_BYTE_COUNT
111
+ )
112
+ );
113
+ return firstOffset === GLOAS_DATA_COLUMN_SIDECAR_FIRST_OFFSET;
114
+ }
@@ -1,5 +1,5 @@
1
1
  import {MessagePort, Worker} from "node:worker_threads";
2
- import {Message} from "@libp2p/interface";
2
+ import type {Message} from "@libp2p/gossipsub";
3
3
  import {Thread} from "@chainsafe/threads";
4
4
  import {Logger} from "@lodestar/logger";
5
5
  import {sleep} from "@lodestar/utils";