@lodestar/beacon-node 1.41.0-dev.e27085846c → 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 (405) 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/lightclient/index.d.ts.map +1 -1
  14. package/lib/api/impl/lightclient/index.js +19 -2
  15. package/lib/api/impl/lightclient/index.js.map +1 -1
  16. package/lib/api/impl/node/utils.d.ts +1 -1
  17. package/lib/api/impl/node/utils.d.ts.map +1 -1
  18. package/lib/api/impl/node/utils.js.map +1 -1
  19. package/lib/api/impl/validator/index.d.ts.map +1 -1
  20. package/lib/api/impl/validator/index.js +130 -16
  21. package/lib/api/impl/validator/index.js.map +1 -1
  22. package/lib/chain/archiveStore/archiveStore.d.ts +1 -0
  23. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  24. package/lib/chain/archiveStore/archiveStore.js +9 -0
  25. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  26. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts +5 -6
  27. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +1 -1
  28. package/lib/chain/archiveStore/historicalState/getHistoricalState.js +9 -10
  29. package/lib/chain/archiveStore/historicalState/getHistoricalState.js.map +1 -1
  30. package/lib/chain/archiveStore/historicalState/worker.js +3 -3
  31. package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
  32. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +3 -8
  33. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -1
  34. package/lib/chain/archiveStore/utils/archiveBlocks.js +1 -1
  35. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  36. package/lib/chain/archiveStore/utils/archivePayloads.d.ts +7 -0
  37. package/lib/chain/archiveStore/utils/archivePayloads.d.ts.map +1 -0
  38. package/lib/chain/archiveStore/utils/archivePayloads.js +10 -0
  39. package/lib/chain/archiveStore/utils/archivePayloads.js.map +1 -0
  40. package/lib/chain/archiveStore/utils/updateBackfillRange.js +1 -1
  41. package/lib/chain/archiveStore/utils/updateBackfillRange.js.map +1 -1
  42. package/lib/chain/blocks/blockInput/blockInput.d.ts +20 -2
  43. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
  44. package/lib/chain/blocks/blockInput/blockInput.js +47 -0
  45. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  46. package/lib/chain/blocks/blockInput/types.d.ts +13 -1
  47. package/lib/chain/blocks/blockInput/types.d.ts.map +1 -1
  48. package/lib/chain/blocks/blockInput/types.js +1 -0
  49. package/lib/chain/blocks/blockInput/types.js.map +1 -1
  50. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  51. package/lib/chain/blocks/importBlock.js +27 -6
  52. package/lib/chain/blocks/importBlock.js.map +1 -1
  53. package/lib/chain/blocks/index.d.ts.map +1 -1
  54. package/lib/chain/blocks/index.js +2 -1
  55. package/lib/chain/blocks/index.js.map +1 -1
  56. package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts.map +1 -1
  57. package/lib/chain/blocks/verifyBlocksDataAvailability.js +3 -0
  58. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  59. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +4 -0
  60. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  61. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +5 -1
  62. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  63. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -1
  64. package/lib/chain/blocks/verifyBlocksSanityChecks.js +4 -1
  65. package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
  66. package/lib/chain/blocks/writeBlockInputToDb.d.ts +12 -3
  67. package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +1 -1
  68. package/lib/chain/blocks/writeBlockInputToDb.js +103 -95
  69. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  70. package/lib/chain/bls/multithread/index.d.ts +3 -3
  71. package/lib/chain/bls/multithread/index.d.ts.map +1 -1
  72. package/lib/chain/bls/multithread/index.js +5 -5
  73. package/lib/chain/bls/multithread/index.js.map +1 -1
  74. package/lib/chain/bls/multithread/jobItem.d.ts +2 -2
  75. package/lib/chain/bls/multithread/jobItem.d.ts.map +1 -1
  76. package/lib/chain/bls/multithread/jobItem.js +2 -2
  77. package/lib/chain/bls/multithread/jobItem.js.map +1 -1
  78. package/lib/chain/bls/singleThread.d.ts +4 -4
  79. package/lib/chain/bls/singleThread.d.ts.map +1 -1
  80. package/lib/chain/bls/singleThread.js +4 -4
  81. package/lib/chain/bls/singleThread.js.map +1 -1
  82. package/lib/chain/bls/utils.d.ts +2 -2
  83. package/lib/chain/bls/utils.d.ts.map +1 -1
  84. package/lib/chain/bls/utils.js +7 -4
  85. package/lib/chain/bls/utils.js.map +1 -1
  86. package/lib/chain/chain.d.ts +7 -10
  87. package/lib/chain/chain.d.ts.map +1 -1
  88. package/lib/chain/chain.js +43 -27
  89. package/lib/chain/chain.js.map +1 -1
  90. package/lib/chain/emitter.d.ts +5 -5
  91. package/lib/chain/emitter.d.ts.map +1 -1
  92. package/lib/chain/errors/executionPayloadEnvelope.d.ts +2 -2
  93. package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
  94. package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
  95. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  96. package/lib/chain/forkChoice/index.js +30 -24
  97. package/lib/chain/forkChoice/index.js.map +1 -1
  98. package/lib/chain/interface.d.ts +4 -6
  99. package/lib/chain/interface.d.ts.map +1 -1
  100. package/lib/chain/interface.js.map +1 -1
  101. package/lib/chain/lightClient/index.d.ts.map +1 -1
  102. package/lib/chain/lightClient/index.js +1 -1
  103. package/lib/chain/lightClient/index.js.map +1 -1
  104. package/lib/chain/opPools/aggregatedAttestationPool.js +1 -1
  105. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  106. package/lib/chain/options.d.ts.map +1 -1
  107. package/lib/chain/options.js.map +1 -1
  108. package/lib/chain/prepareNextSlot.js +3 -3
  109. package/lib/chain/prepareNextSlot.js.map +1 -1
  110. package/lib/chain/produceBlock/computeNewStateRoot.d.ts +10 -2
  111. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
  112. package/lib/chain/produceBlock/computeNewStateRoot.js +24 -2
  113. package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
  114. package/lib/chain/produceBlock/produceBlockBody.d.ts +22 -7
  115. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  116. package/lib/chain/produceBlock/produceBlockBody.js +109 -10
  117. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  118. package/lib/chain/regen/queued.d.ts.map +1 -1
  119. package/lib/chain/regen/queued.js +4 -1
  120. package/lib/chain/regen/queued.js.map +1 -1
  121. package/lib/chain/regen/regen.d.ts.map +1 -1
  122. package/lib/chain/regen/regen.js +6 -2
  123. package/lib/chain/regen/regen.js.map +1 -1
  124. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
  125. package/lib/chain/seenCache/seenGossipBlockInput.js +15 -7
  126. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  127. package/lib/chain/validation/aggregateAndProof.js +1 -1
  128. package/lib/chain/validation/aggregateAndProof.js.map +1 -1
  129. package/lib/chain/validation/attestation.d.ts.map +1 -1
  130. package/lib/chain/validation/attestation.js +7 -4
  131. package/lib/chain/validation/attestation.js.map +1 -1
  132. package/lib/chain/validation/attesterSlashing.d.ts.map +1 -1
  133. package/lib/chain/validation/attesterSlashing.js +9 -2
  134. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  135. package/lib/chain/validation/blobSidecar.js +2 -2
  136. package/lib/chain/validation/blobSidecar.js.map +1 -1
  137. package/lib/chain/validation/block.d.ts.map +1 -1
  138. package/lib/chain/validation/block.js +6 -3
  139. package/lib/chain/validation/block.js.map +1 -1
  140. package/lib/chain/validation/dataColumnSidecar.d.ts +2 -2
  141. package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -1
  142. package/lib/chain/validation/dataColumnSidecar.js +1 -1
  143. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  144. package/lib/chain/validation/executionPayloadBid.js +1 -2
  145. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  146. package/lib/chain/validation/executionPayloadEnvelope.js +4 -4
  147. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  148. package/lib/chain/validation/payloadAttestationMessage.js +9 -3
  149. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
  150. package/lib/chain/validation/proposerSlashing.js +1 -1
  151. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  152. package/lib/chain/validation/syncCommitteeContributionAndProof.js +1 -1
  153. package/lib/db/beacon.d.ts +3 -1
  154. package/lib/db/beacon.d.ts.map +1 -1
  155. package/lib/db/beacon.js +5 -1
  156. package/lib/db/beacon.js.map +1 -1
  157. package/lib/db/buckets.d.ts +3 -1
  158. package/lib/db/buckets.d.ts.map +1 -1
  159. package/lib/db/buckets.js +2 -0
  160. package/lib/db/buckets.js.map +1 -1
  161. package/lib/db/interface.d.ts +3 -1
  162. package/lib/db/interface.d.ts.map +1 -1
  163. package/lib/db/repositories/blockArchive.d.ts.map +1 -1
  164. package/lib/db/repositories/blockArchive.js +1 -2
  165. package/lib/db/repositories/blockArchive.js.map +1 -1
  166. package/lib/db/repositories/blockArchiveIndex.d.ts +2 -2
  167. package/lib/db/repositories/blockArchiveIndex.d.ts.map +1 -1
  168. package/lib/db/repositories/dataColumnSidecar.d.ts +5 -3
  169. package/lib/db/repositories/dataColumnSidecar.d.ts.map +1 -1
  170. package/lib/db/repositories/dataColumnSidecar.js +14 -1
  171. package/lib/db/repositories/dataColumnSidecar.js.map +1 -1
  172. package/lib/db/repositories/dataColumnSidecarArchive.d.ts +5 -3
  173. package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +1 -1
  174. package/lib/db/repositories/dataColumnSidecarArchive.js +14 -1
  175. package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
  176. package/lib/db/repositories/executionPayloadEnvelope.d.ts +19 -0
  177. package/lib/db/repositories/executionPayloadEnvelope.d.ts.map +1 -0
  178. package/lib/db/repositories/executionPayloadEnvelope.js +22 -0
  179. package/lib/db/repositories/executionPayloadEnvelope.js.map +1 -0
  180. package/lib/db/repositories/executionPayloadEnvelopeArchive.d.ts +18 -0
  181. package/lib/db/repositories/executionPayloadEnvelopeArchive.d.ts.map +1 -0
  182. package/lib/db/repositories/executionPayloadEnvelopeArchive.js +28 -0
  183. package/lib/db/repositories/executionPayloadEnvelopeArchive.js.map +1 -0
  184. package/lib/db/repositories/index.d.ts +2 -0
  185. package/lib/db/repositories/index.d.ts.map +1 -1
  186. package/lib/db/repositories/index.js +2 -0
  187. package/lib/db/repositories/index.js.map +1 -1
  188. package/lib/execution/engine/http.d.ts +1 -0
  189. package/lib/execution/engine/http.d.ts.map +1 -1
  190. package/lib/execution/engine/http.js +3 -0
  191. package/lib/execution/engine/http.js.map +1 -1
  192. package/lib/metrics/metrics/beacon.d.ts +1 -0
  193. package/lib/metrics/metrics/beacon.d.ts.map +1 -1
  194. package/lib/metrics/metrics/beacon.js +5 -0
  195. package/lib/metrics/metrics/beacon.js.map +1 -1
  196. package/lib/metrics/metrics/lodestar.d.ts +8 -0
  197. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  198. package/lib/metrics/metrics/lodestar.js +14 -0
  199. package/lib/metrics/metrics/lodestar.js.map +1 -1
  200. package/lib/metrics/metrics.d.ts.map +1 -1
  201. package/lib/metrics/metrics.js +8 -3
  202. package/lib/metrics/metrics.js.map +1 -1
  203. package/lib/monitoring/service.d.ts +2 -2
  204. package/lib/monitoring/service.d.ts.map +1 -1
  205. package/lib/monitoring/service.js +3 -2
  206. package/lib/monitoring/service.js.map +1 -1
  207. package/lib/network/core/networkCore.d.ts +3 -3
  208. package/lib/network/core/networkCore.d.ts.map +1 -1
  209. package/lib/network/core/networkCore.js.map +1 -1
  210. package/lib/network/core/networkCoreWorkerHandler.d.ts +3 -3
  211. package/lib/network/core/networkCoreWorkerHandler.d.ts.map +1 -1
  212. package/lib/network/core/types.d.ts +2 -2
  213. package/lib/network/core/types.d.ts.map +1 -1
  214. package/lib/network/events.d.ts +2 -1
  215. package/lib/network/events.d.ts.map +1 -1
  216. package/lib/network/events.js.map +1 -1
  217. package/lib/network/gossip/encoding.d.ts +3 -3
  218. package/lib/network/gossip/encoding.d.ts.map +1 -1
  219. package/lib/network/gossip/encoding.js.map +1 -1
  220. package/lib/network/gossip/gossipsub.d.ts +13 -4
  221. package/lib/network/gossip/gossipsub.d.ts.map +1 -1
  222. package/lib/network/gossip/gossipsub.js +47 -20
  223. package/lib/network/gossip/gossipsub.js.map +1 -1
  224. package/lib/network/gossip/interface.d.ts +6 -6
  225. package/lib/network/gossip/interface.d.ts.map +1 -1
  226. package/lib/network/gossip/scoringParameters.d.ts +1 -1
  227. package/lib/network/gossip/scoringParameters.d.ts.map +1 -1
  228. package/lib/network/gossip/scoringParameters.js +1 -1
  229. package/lib/network/gossip/scoringParameters.js.map +1 -1
  230. package/lib/network/gossip/topic.d.ts +113 -63
  231. package/lib/network/gossip/topic.d.ts.map +1 -1
  232. package/lib/network/gossip/topic.js +2 -2
  233. package/lib/network/gossip/topic.js.map +1 -1
  234. package/lib/network/interface.d.ts +6 -5
  235. package/lib/network/interface.d.ts.map +1 -1
  236. package/lib/network/libp2p/index.d.ts +1 -1
  237. package/lib/network/libp2p/index.d.ts.map +1 -1
  238. package/lib/network/libp2p/index.js +7 -2
  239. package/lib/network/libp2p/index.js.map +1 -1
  240. package/lib/network/network.d.ts +5 -4
  241. package/lib/network/network.d.ts.map +1 -1
  242. package/lib/network/network.js +10 -1
  243. package/lib/network/network.js.map +1 -1
  244. package/lib/network/options.d.ts.map +1 -1
  245. package/lib/network/options.js +3 -0
  246. package/lib/network/options.js.map +1 -1
  247. package/lib/network/peers/datastore.d.ts +7 -5
  248. package/lib/network/peers/datastore.d.ts.map +1 -1
  249. package/lib/network/peers/datastore.js +10 -10
  250. package/lib/network/peers/datastore.js.map +1 -1
  251. package/lib/network/peers/peerManager.d.ts +3 -0
  252. package/lib/network/peers/peerManager.d.ts.map +1 -1
  253. package/lib/network/peers/peerManager.js +103 -53
  254. package/lib/network/peers/peerManager.js.map +1 -1
  255. package/lib/network/peers/utils/prioritizePeers.d.ts +3 -3
  256. package/lib/network/peers/utils/prioritizePeers.d.ts.map +1 -1
  257. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  258. package/lib/network/processor/gossipHandlers.js +9 -2
  259. package/lib/network/processor/gossipHandlers.js.map +1 -1
  260. package/lib/network/processor/gossipValidatorFn.js +1 -1
  261. package/lib/network/processor/types.d.ts +1 -1
  262. package/lib/network/processor/types.d.ts.map +1 -1
  263. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -1
  264. package/lib/network/reqresp/handlers/beaconBlocksByRange.js +3 -2
  265. package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
  266. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +1 -1
  267. package/lib/network/reqresp/handlers/blobSidecarsByRange.js +3 -2
  268. package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +1 -1
  269. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js +1 -1
  270. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js.map +1 -1
  271. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -1
  272. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +3 -2
  273. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -1
  274. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js +1 -1
  275. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -1
  276. package/lib/network/reqresp/handlers/lightClientUpdatesByRange.d.ts.map +1 -1
  277. package/lib/network/reqresp/handlers/lightClientUpdatesByRange.js +7 -1
  278. package/lib/network/reqresp/handlers/lightClientUpdatesByRange.js.map +1 -1
  279. package/lib/network/reqresp/score.d.ts.map +1 -1
  280. package/lib/network/reqresp/score.js +0 -1
  281. package/lib/network/reqresp/score.js.map +1 -1
  282. package/lib/network/util.js +2 -2
  283. package/lib/network/util.js.map +1 -1
  284. package/lib/node/nodejs.d.ts +3 -5
  285. package/lib/node/nodejs.d.ts.map +1 -1
  286. package/lib/node/nodejs.js +6 -4
  287. package/lib/node/nodejs.js.map +1 -1
  288. package/lib/util/blobs.d.ts +2 -2
  289. package/lib/util/blobs.d.ts.map +1 -1
  290. package/lib/util/blobs.js.map +1 -1
  291. package/lib/util/clock.d.ts +6 -0
  292. package/lib/util/clock.d.ts.map +1 -1
  293. package/lib/util/clock.js +9 -3
  294. package/lib/util/clock.js.map +1 -1
  295. package/lib/util/dataColumns.d.ts +11 -3
  296. package/lib/util/dataColumns.d.ts.map +1 -1
  297. package/lib/util/dataColumns.js +27 -0
  298. package/lib/util/dataColumns.js.map +1 -1
  299. package/lib/util/multifork.d.ts +8 -0
  300. package/lib/util/multifork.d.ts.map +1 -1
  301. package/lib/util/multifork.js +37 -0
  302. package/lib/util/multifork.js.map +1 -1
  303. package/lib/util/serializedCache.d.ts +5 -0
  304. package/lib/util/serializedCache.d.ts.map +1 -1
  305. package/lib/util/serializedCache.js +5 -0
  306. package/lib/util/serializedCache.js.map +1 -1
  307. package/package.json +39 -42
  308. package/src/api/impl/beacon/blocks/index.ts +147 -3
  309. package/src/api/impl/beacon/state/index.ts +8 -8
  310. package/src/api/impl/beacon/state/utils.ts +15 -29
  311. package/src/api/impl/debug/index.ts +9 -5
  312. package/src/api/impl/lightclient/index.ts +19 -2
  313. package/src/api/impl/node/utils.ts +3 -3
  314. package/src/api/impl/validator/index.ts +153 -17
  315. package/src/chain/archiveStore/archiveStore.ts +15 -5
  316. package/src/chain/archiveStore/historicalState/getHistoricalState.ts +10 -11
  317. package/src/chain/archiveStore/historicalState/worker.ts +3 -3
  318. package/src/chain/archiveStore/utils/archiveBlocks.ts +4 -5
  319. package/src/chain/archiveStore/utils/archivePayloads.ts +15 -0
  320. package/src/chain/archiveStore/utils/updateBackfillRange.ts +1 -1
  321. package/src/chain/blocks/blockInput/blockInput.ts +68 -3
  322. package/src/chain/blocks/blockInput/types.ts +13 -0
  323. package/src/chain/blocks/importBlock.ts +35 -7
  324. package/src/chain/blocks/index.ts +2 -1
  325. package/src/chain/blocks/verifyBlocksDataAvailability.ts +3 -0
  326. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +9 -2
  327. package/src/chain/blocks/verifyBlocksSanityChecks.ts +7 -2
  328. package/src/chain/blocks/writeBlockInputToDb.ts +121 -100
  329. package/src/chain/bls/multithread/index.ts +7 -7
  330. package/src/chain/bls/multithread/jobItem.ts +3 -3
  331. package/src/chain/bls/singleThread.ts +5 -5
  332. package/src/chain/bls/utils.ts +8 -5
  333. package/src/chain/chain.ts +77 -40
  334. package/src/chain/emitter.ts +5 -5
  335. package/src/chain/errors/executionPayloadEnvelope.ts +6 -2
  336. package/src/chain/forkChoice/index.ts +39 -21
  337. package/src/chain/interface.ts +4 -11
  338. package/src/chain/lightClient/index.ts +4 -1
  339. package/src/chain/opPools/aggregatedAttestationPool.ts +1 -1
  340. package/src/chain/options.ts +1 -0
  341. package/src/chain/prepareNextSlot.ts +5 -5
  342. package/src/chain/produceBlock/computeNewStateRoot.ts +35 -3
  343. package/src/chain/produceBlock/produceBlockBody.ts +162 -13
  344. package/src/chain/regen/queued.ts +7 -2
  345. package/src/chain/regen/regen.ts +9 -3
  346. package/src/chain/seenCache/seenGossipBlockInput.ts +16 -7
  347. package/src/chain/validation/aggregateAndProof.ts +1 -1
  348. package/src/chain/validation/attestation.ts +7 -4
  349. package/src/chain/validation/attesterSlashing.ts +10 -1
  350. package/src/chain/validation/blobSidecar.ts +2 -2
  351. package/src/chain/validation/block.ts +9 -4
  352. package/src/chain/validation/dataColumnSidecar.ts +3 -6
  353. package/src/chain/validation/executionPayloadBid.ts +1 -2
  354. package/src/chain/validation/executionPayloadEnvelope.ts +4 -4
  355. package/src/chain/validation/payloadAttestationMessage.ts +10 -3
  356. package/src/chain/validation/proposerSlashing.ts +1 -1
  357. package/src/chain/validation/syncCommitteeContributionAndProof.ts +1 -1
  358. package/src/db/beacon.ts +8 -0
  359. package/src/db/buckets.ts +3 -0
  360. package/src/db/interface.ts +5 -0
  361. package/src/db/repositories/blockArchive.ts +1 -2
  362. package/src/db/repositories/dataColumnSidecar.ts +18 -3
  363. package/src/db/repositories/dataColumnSidecarArchive.ts +18 -3
  364. package/src/db/repositories/executionPayloadEnvelope.ts +26 -0
  365. package/src/db/repositories/executionPayloadEnvelopeArchive.ts +32 -0
  366. package/src/db/repositories/index.ts +2 -0
  367. package/src/execution/engine/http.ts +3 -0
  368. package/src/metrics/metrics/beacon.ts +5 -0
  369. package/src/metrics/metrics/lodestar.ts +14 -0
  370. package/src/metrics/metrics.ts +8 -3
  371. package/src/monitoring/service.ts +3 -2
  372. package/src/network/core/networkCore.ts +3 -3
  373. package/src/network/core/networkCoreWorkerHandler.ts +3 -3
  374. package/src/network/core/types.ts +2 -2
  375. package/src/network/events.ts +2 -1
  376. package/src/network/gossip/encoding.ts +3 -3
  377. package/src/network/gossip/gossipsub.ts +86 -25
  378. package/src/network/gossip/interface.ts +6 -6
  379. package/src/network/gossip/scoringParameters.ts +4 -4
  380. package/src/network/gossip/topic.ts +2 -1
  381. package/src/network/interface.ts +7 -4
  382. package/src/network/libp2p/index.ts +8 -3
  383. package/src/network/network.ts +24 -6
  384. package/src/network/options.ts +3 -0
  385. package/src/network/peers/datastore.ts +13 -10
  386. package/src/network/peers/peerManager.ts +118 -54
  387. package/src/network/peers/utils/prioritizePeers.ts +3 -3
  388. package/src/network/processor/gossipHandlers.ts +19 -4
  389. package/src/network/processor/gossipValidatorFn.ts +1 -1
  390. package/src/network/processor/types.ts +1 -1
  391. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +3 -2
  392. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +3 -2
  393. package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +1 -1
  394. package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +3 -2
  395. package/src/network/reqresp/handlers/dataColumnSidecarsByRoot.ts +1 -1
  396. package/src/network/reqresp/handlers/lightClientUpdatesByRange.ts +6 -1
  397. package/src/network/reqresp/score.ts +0 -1
  398. package/src/network/util.ts +2 -2
  399. package/src/node/nodejs.ts +8 -9
  400. package/src/util/blobs.ts +3 -3
  401. package/src/util/clock.ts +9 -4
  402. package/src/util/dataColumns.ts +37 -1
  403. package/src/util/multifork.ts +45 -0
  404. package/src/util/serializedCache.ts +5 -0
  405. package/src/util/workerEvents.ts +1 -1
@@ -59,8 +59,7 @@ async function validatePayloadAttestationMessage(
59
59
  // [IGNORE] The message's block `data.beacon_block_root` has been seen (via
60
60
  // gossip or non-gossip sources) (a client MAY queue attestation for processing
61
61
  // once the block is retrieved. Note a client might want to request payload after).
62
- const block = chain.forkChoice.getBlock(data.beaconBlockRoot);
63
- if (block === null) {
62
+ if (!chain.forkChoice.hasBlock(data.beaconBlockRoot)) {
64
63
  throw new PayloadAttestationError(GossipAction.IGNORE, {
65
64
  code: PayloadAttestationErrorCode.UNKNOWN_BLOCK_ROOT,
66
65
  blockRoot: toRootHex(data.beaconBlockRoot),
@@ -87,8 +86,16 @@ async function validatePayloadAttestationMessage(
87
86
  }
88
87
 
89
88
  // [REJECT] `payload_attestation_message.signature` is valid with respect to the validator's public key.
89
+ const validatorPubkey = chain.pubkeyCache.get(validatorIndex);
90
+ if (!validatorPubkey) {
91
+ throw new PayloadAttestationError(GossipAction.REJECT, {
92
+ code: PayloadAttestationErrorCode.INVALID_ATTESTER,
93
+ attesterIndex: validatorIndex,
94
+ });
95
+ }
96
+
90
97
  const signatureSet = createSingleSignatureSetFromComponents(
91
- chain.index2pubkey[validatorIndex],
98
+ validatorPubkey,
92
99
  getPayloadAttestationDataSigningRoot(chain.config, data),
93
100
  payloadAttestationMessage.signature
94
101
  );
@@ -37,7 +37,7 @@ async function validateProposerSlashing(
37
37
  try {
38
38
  const proposer = state.validators.getReadonly(proposerSlashing.signedHeader1.message.proposerIndex);
39
39
  // verifySignature = false, verified in batch below
40
- assertValidProposerSlashing(chain.config, chain.index2pubkey, state.slot, proposerSlashing, proposer, false);
40
+ assertValidProposerSlashing(chain.config, chain.pubkeyCache, state.slot, proposerSlashing, proposer, false);
41
41
  } catch (e) {
42
42
  throw new ProposerSlashingError(GossipAction.REJECT, {
43
43
  code: ProposerSlashingErrorCode.INVALID,
@@ -106,7 +106,7 @@ export async function validateSyncCommitteeGossipContributionAndProof(
106
106
  /**
107
107
  * Retrieve pubkeys in contribution aggregate using epochCtx:
108
108
  * - currSyncCommitteeIndexes cache
109
- * - index2pubkey cache
109
+ * - pubkeyCache
110
110
  */
111
111
  function getContributionIndices(
112
112
  state: CachedBeaconStateAltair,
package/src/db/beacon.ts CHANGED
@@ -15,6 +15,8 @@ import {
15
15
  CheckpointHeaderRepository,
16
16
  DataColumnSidecarArchiveRepository,
17
17
  DataColumnSidecarRepository,
18
+ ExecutionPayloadEnvelopeArchiveRepository,
19
+ ExecutionPayloadEnvelopeRepository,
18
20
  ProposerSlashingRepository,
19
21
  StateArchiveRepository,
20
22
  SyncCommitteeRepository,
@@ -36,6 +38,9 @@ export class BeaconDb implements IBeaconDb {
36
38
  dataColumnSidecar: DataColumnSidecarRepository;
37
39
  dataColumnSidecarArchive: DataColumnSidecarArchiveRepository;
38
40
 
41
+ executionPayloadEnvelope: ExecutionPayloadEnvelopeRepository;
42
+ executionPayloadEnvelopeArchive: ExecutionPayloadEnvelopeArchiveRepository;
43
+
39
44
  stateArchive: StateArchiveRepository;
40
45
  checkpointState: CheckpointStateRepository;
41
46
 
@@ -65,6 +70,9 @@ export class BeaconDb implements IBeaconDb {
65
70
  this.dataColumnSidecar = new DataColumnSidecarRepository(config, db);
66
71
  this.dataColumnSidecarArchive = new DataColumnSidecarArchiveRepository(config, db);
67
72
 
73
+ this.executionPayloadEnvelope = new ExecutionPayloadEnvelopeRepository(config, db);
74
+ this.executionPayloadEnvelopeArchive = new ExecutionPayloadEnvelopeArchiveRepository(config, db);
75
+
68
76
  this.stateArchive = new StateArchiveRepository(config, db);
69
77
  this.checkpointState = new CheckpointStateRepository(config, db);
70
78
  this.voluntaryExit = new VoluntaryExitRepository(config, db);
package/src/db/buckets.ts CHANGED
@@ -69,6 +69,9 @@ export enum Bucket {
69
69
 
70
70
  fulu_dataColumnSidecars = 57, // FULU BeaconBlockRoot -> DataColumnSidecars
71
71
  fulu_dataColumnSidecarsArchive = 58, // FULU BeaconBlockSlot -> DataColumnSidecars
72
+
73
+ gloas_executionPayloadEnvelope = 59, // GLOAS BeaconBlockRoot -> SignedExecutionPayloadEnvelope
74
+ gloas_executionPayloadEnvelopeArchive = 60, // GLOAS Slot -> SignedExecutionPayloadEnvelope
72
75
  }
73
76
 
74
77
  export function getBucketNameByValue<T extends Bucket>(enumValue: T): keyof typeof Bucket {
@@ -12,6 +12,8 @@ import {
12
12
  CheckpointHeaderRepository,
13
13
  DataColumnSidecarArchiveRepository,
14
14
  DataColumnSidecarRepository,
15
+ ExecutionPayloadEnvelopeArchiveRepository,
16
+ ExecutionPayloadEnvelopeRepository,
15
17
  ProposerSlashingRepository,
16
18
  StateArchiveRepository,
17
19
  SyncCommitteeRepository,
@@ -35,6 +37,9 @@ export interface IBeaconDb {
35
37
  dataColumnSidecar: DataColumnSidecarRepository;
36
38
  dataColumnSidecarArchive: DataColumnSidecarArchiveRepository;
37
39
 
40
+ executionPayloadEnvelope: ExecutionPayloadEnvelopeRepository;
41
+ executionPayloadEnvelopeArchive: ExecutionPayloadEnvelopeArchiveRepository;
42
+
38
43
  // finalized states
39
44
  stateArchive: StateArchiveRepository;
40
45
  // checkpoint states
@@ -1,4 +1,3 @@
1
- import all from "it-all";
2
1
  import {ChainForkConfig} from "@lodestar/config";
3
2
  import {Db, FilterOptions, KeyValue, Repository} from "@lodestar/db";
4
3
  import {Root, SignedBeaconBlock, Slot, ssz} from "@lodestar/types";
@@ -121,7 +120,7 @@ export class BlockArchiveRepository extends Repository<Slot, SignedBeaconBlock>
121
120
  }
122
121
 
123
122
  async values(opts?: BlockFilterOptions): Promise<SignedBeaconBlock[]> {
124
- return all(this.valuesStream(opts));
123
+ return await Array.fromAsync(this.valuesStream(opts));
125
124
  }
126
125
 
127
126
  // INDEX
@@ -1,7 +1,8 @@
1
1
  import {ChainForkConfig} from "@lodestar/config";
2
2
  import {Db, PrefixedRepository, decodeNumberForDbKey, encodeNumberForDbKey} from "@lodestar/db";
3
3
  import {NUMBER_OF_COLUMNS} from "@lodestar/params";
4
- import {ColumnIndex, Root, fulu, ssz} from "@lodestar/types";
4
+ import {ColumnIndex, DataColumnSidecar, Root, isGloasDataColumnSidecar, ssz} from "@lodestar/types";
5
+ import {isGloasDataColumnSidecarBytes} from "../../util/multifork.js";
5
6
  import {Bucket, getBucketNameByValue} from "../buckets.js";
6
7
 
7
8
  const COLUMN_INDEX_BYTE_SIZE = 2;
@@ -15,7 +16,7 @@ type BlockRoot = Root;
15
16
  *
16
17
  * Indexed data by `blockRoot` + `columnIndex`
17
18
  */
18
- export class DataColumnSidecarRepository extends PrefixedRepository<BlockRoot, ColumnIndex, fulu.DataColumnSidecar> {
19
+ export class DataColumnSidecarRepository extends PrefixedRepository<BlockRoot, ColumnIndex, DataColumnSidecar> {
19
20
  constructor(config: ChainForkConfig, db: Db) {
20
21
  const bucket = Bucket.fulu_dataColumnSidecars;
21
22
  super(config, db, bucket, ssz.fulu.DataColumnSidecar, getBucketNameByValue(bucket));
@@ -24,10 +25,24 @@ export class DataColumnSidecarRepository extends PrefixedRepository<BlockRoot, C
24
25
  /**
25
26
  * Id is hashTreeRoot of unsigned BeaconBlock
26
27
  */
27
- getId(value: fulu.DataColumnSidecar): ColumnIndex {
28
+ getId(value: DataColumnSidecar): ColumnIndex {
28
29
  return value.index;
29
30
  }
30
31
 
32
+ encodeValue(value: DataColumnSidecar): Uint8Array {
33
+ if (isGloasDataColumnSidecar(value)) {
34
+ return ssz.gloas.DataColumnSidecar.serialize(value);
35
+ }
36
+ return ssz.fulu.DataColumnSidecar.serialize(value);
37
+ }
38
+
39
+ decodeValue(data: Uint8Array): DataColumnSidecar {
40
+ if (isGloasDataColumnSidecarBytes(data)) {
41
+ return ssz.gloas.DataColumnSidecar.deserialize(data);
42
+ }
43
+ return ssz.fulu.DataColumnSidecar.deserialize(data);
44
+ }
45
+
31
46
  encodeKeyRaw(prefix: BlockRoot, id: ColumnIndex): Uint8Array {
32
47
  return Buffer.concat([prefix, encodeNumberForDbKey(id, COLUMN_INDEX_BYTE_SIZE)]);
33
48
  }
@@ -1,7 +1,8 @@
1
1
  import {ChainForkConfig} from "@lodestar/config";
2
2
  import {Db, PrefixedRepository, decodeNumberForDbKey, encodeNumberForDbKey} from "@lodestar/db";
3
3
  import {NUMBER_OF_COLUMNS} from "@lodestar/params";
4
- import {ColumnIndex, Slot, fulu, ssz} from "@lodestar/types";
4
+ import {ColumnIndex, DataColumnSidecar, Slot, isGloasDataColumnSidecar, ssz} from "@lodestar/types";
5
+ import {isGloasDataColumnSidecarBytes} from "../../util/multifork.js";
5
6
  import {Bucket, getBucketNameByValue} from "../buckets.js";
6
7
 
7
8
  const COLUMN_INDEX_BYTE_SIZE = 2;
@@ -13,7 +14,7 @@ const SLOT_BYTE_SIZE = 8;
13
14
  *
14
15
  * Indexed data by `slot` + `columnIndex`
15
16
  */
16
- export class DataColumnSidecarArchiveRepository extends PrefixedRepository<Slot, ColumnIndex, fulu.DataColumnSidecar> {
17
+ export class DataColumnSidecarArchiveRepository extends PrefixedRepository<Slot, ColumnIndex, DataColumnSidecar> {
17
18
  constructor(config: ChainForkConfig, db: Db) {
18
19
  const bucket = Bucket.fulu_dataColumnSidecarsArchive;
19
20
  super(config, db, bucket, ssz.fulu.DataColumnSidecar, getBucketNameByValue(bucket));
@@ -22,10 +23,24 @@ export class DataColumnSidecarArchiveRepository extends PrefixedRepository<Slot,
22
23
  /**
23
24
  * Id is hashTreeRoot of unsigned BeaconBlock
24
25
  */
25
- getId(value: fulu.DataColumnSidecar): ColumnIndex {
26
+ getId(value: DataColumnSidecar): ColumnIndex {
26
27
  return value.index;
27
28
  }
28
29
 
30
+ encodeValue(value: DataColumnSidecar): Uint8Array {
31
+ if (isGloasDataColumnSidecar(value)) {
32
+ return ssz.gloas.DataColumnSidecar.serialize(value);
33
+ }
34
+ return ssz.fulu.DataColumnSidecar.serialize(value);
35
+ }
36
+
37
+ decodeValue(data: Uint8Array): DataColumnSidecar {
38
+ if (isGloasDataColumnSidecarBytes(data)) {
39
+ return ssz.gloas.DataColumnSidecar.deserialize(data);
40
+ }
41
+ return ssz.fulu.DataColumnSidecar.deserialize(data);
42
+ }
43
+
29
44
  encodeKeyRaw(prefix: Slot, id: ColumnIndex): Uint8Array {
30
45
  return Buffer.concat([
31
46
  encodeNumberForDbKey(prefix, SLOT_BYTE_SIZE),
@@ -0,0 +1,26 @@
1
+ import {ChainForkConfig} from "@lodestar/config";
2
+ import {Db, Repository} from "@lodestar/db";
3
+ import {Root, gloas, ssz} from "@lodestar/types";
4
+ import {Bucket, getBucketNameByValue} from "../buckets.js";
5
+
6
+ type BlockRoot = Root;
7
+
8
+ /**
9
+ * Used to store unfinalized `SignedExecutionPayloadEnvelope`
10
+ *
11
+ * Indexed by beacon block root (root of the beacon block that contains the bid)
12
+ */
13
+ export class ExecutionPayloadEnvelopeRepository extends Repository<BlockRoot, gloas.SignedExecutionPayloadEnvelope> {
14
+ constructor(config: ChainForkConfig, db: Db) {
15
+ const bucket = Bucket.gloas_executionPayloadEnvelope;
16
+ super(config, db, bucket, ssz.gloas.SignedExecutionPayloadEnvelope, getBucketNameByValue(bucket));
17
+ }
18
+
19
+ /**
20
+ * Id is the beacon block root (not execution payload hash)
21
+ * This allows correlation with the block that contains the bid
22
+ */
23
+ getId(value: gloas.SignedExecutionPayloadEnvelope): BlockRoot {
24
+ return value.message.beaconBlockRoot;
25
+ }
26
+ }
@@ -0,0 +1,32 @@
1
+ import {ChainForkConfig} from "@lodestar/config";
2
+ import {BUCKET_LENGTH, Db, Repository, encodeKey as encodeDbKey} from "@lodestar/db";
3
+ import {Slot, gloas, ssz} from "@lodestar/types";
4
+ import {bytesToInt} from "@lodestar/utils";
5
+ import {Bucket, getBucketNameByValue} from "../buckets.js";
6
+
7
+ /**
8
+ * Used to store finalized `SignedExecutionPayloadEnvelope`
9
+ *
10
+ * Indexed by slot for chronological archival
11
+ */
12
+ export class ExecutionPayloadEnvelopeArchiveRepository extends Repository<Slot, gloas.SignedExecutionPayloadEnvelope> {
13
+ constructor(config: ChainForkConfig, db: Db) {
14
+ const bucket = Bucket.gloas_executionPayloadEnvelopeArchive;
15
+ super(config, db, bucket, ssz.gloas.SignedExecutionPayloadEnvelope, getBucketNameByValue(bucket));
16
+ }
17
+
18
+ /**
19
+ * Id is the slot from the envelope
20
+ */
21
+ getId(value: gloas.SignedExecutionPayloadEnvelope): Slot {
22
+ return value.message.slot;
23
+ }
24
+
25
+ encodeKey(id: Slot): Uint8Array {
26
+ return encodeDbKey(this.bucket, id);
27
+ }
28
+
29
+ decodeKey(data: Uint8Array): number {
30
+ return bytesToInt(data.subarray(BUCKET_LENGTH), "be");
31
+ }
32
+ }
@@ -8,6 +8,8 @@ export {BlockArchiveRepository} from "./blockArchive.js";
8
8
  export {BLSToExecutionChangeRepository} from "./blsToExecutionChange.js";
9
9
  export {DataColumnSidecarRepository} from "./dataColumnSidecar.js";
10
10
  export {DataColumnSidecarArchiveRepository} from "./dataColumnSidecarArchive.js";
11
+ export {ExecutionPayloadEnvelopeRepository} from "./executionPayloadEnvelope.js";
12
+ export {ExecutionPayloadEnvelopeArchiveRepository} from "./executionPayloadEnvelopeArchive.js";
11
13
  export {BestLightClientUpdateRepository} from "./lightclientBestUpdate.js";
12
14
  export {CheckpointHeaderRepository} from "./lightclientCheckpointHeader.js";
13
15
  export {SyncCommitteeRepository} from "./lightclientSyncCommittee.js";
@@ -128,6 +128,7 @@ const getClientVersionOpts: ReqOpts = {routeId: "getClientVersion"};
128
128
  */
129
129
  export class ExecutionEngineHttp implements IExecutionEngine {
130
130
  private logger: Logger;
131
+ private metrics: Metrics | null;
131
132
 
132
133
  // The default state is ONLINE, it will be updated to SYNCING once we receive the first payload
133
134
  // This assumption is better than the OFFLINE state, since we can't be sure if the EL is offline and being offline may trigger some notifications
@@ -167,6 +168,7 @@ export class ExecutionEngineHttp implements IExecutionEngine {
167
168
  metrics?.engineHttpProcessorQueue
168
169
  );
169
170
  this.logger = logger;
171
+ this.metrics = metrics ?? null;
170
172
 
171
173
  this.rpc.emitter.on(JsonRpcHttpClientEvent.ERROR, ({error}) => {
172
174
  this.updateEngineState(getExecutionEngineState({payloadError: error, oldState: this.state}));
@@ -369,6 +371,7 @@ export class ExecutionEngineHttp implements IExecutionEngine {
369
371
  } = await request;
370
372
 
371
373
  this.updateEngineState(getExecutionEngineState({payloadStatus: status, oldState: this.state}));
374
+ this.metrics?.engineNotifyForkchoiceUpdateResult.inc({result: status});
372
375
 
373
376
  switch (status) {
374
377
  case ExecutionPayloadStatus.VALID:
@@ -144,6 +144,11 @@ export function createBeaconMetrics(register: RegistryMetricCreator) {
144
144
  help: "Time for preparing payload in advance",
145
145
  buckets: [0.1, 1, 3, 5, 10],
146
146
  }),
147
+ executionPayloadEnvelopeProcessingTime: register.histogram({
148
+ name: "beacon_block_payload_envelope_processing_seconds",
149
+ help: "Time to process execution payload envelope during block production",
150
+ buckets: [0.005, 0.01, 0.05, 0.1, 0.2, 0.5, 1],
151
+ }),
147
152
  payloadFetchedTime: register.histogram<{prepType: PayloadPreparationType}>({
148
153
  name: "beacon_block_payload_fetched_time",
149
154
  help: "Time to fetch the payload from EL",
@@ -827,6 +827,15 @@ export function createLodestarMetrics(
827
827
  help: "Total number of blobs retrieved from execution engine and published to gossip",
828
828
  }),
829
829
  },
830
+ // Gossip execution payload envelope
831
+ gossipExecutionPayloadEnvelope: {
832
+ elapsedTimeTillReceived: register.histogram<{source: OpSource}>({
833
+ name: "lodestar_gossip_execution_payload_envelope_elapsed_time_till_received",
834
+ help: "Time elapsed between slot time and the time execution payload envelope received",
835
+ labelNames: ["source"],
836
+ buckets: [0.5, 1, 2, 4, 6, 12],
837
+ }),
838
+ },
830
839
  recoverDataColumnSidecars: {
831
840
  recoverTime: register.histogram({
832
841
  name: "lodestar_recover_data_column_sidecar_recover_time_seconds",
@@ -919,6 +928,11 @@ export function createLodestarMetrics(
919
928
  help: "The total result of calling notifyNewPayload execution engine api",
920
929
  labelNames: ["result"],
921
930
  }),
931
+ engineNotifyForkchoiceUpdateResult: register.gauge<{result: ExecutionPayloadStatus}>({
932
+ name: "lodestar_execution_engine_notify_forkchoice_update_result_total",
933
+ help: "The total result of calling notifyForkchoiceUpdate execution engine api",
934
+ labelNames: ["result"],
935
+ }),
922
936
  backfillSync: {
923
937
  backfilledTillSlot: register.gauge({
924
938
  name: "lodestar_backfill_till_slot",
@@ -19,11 +19,16 @@ export function createMetrics(opts: MetricsOptions, genesisTime: number, externa
19
19
  const lodestar = createLodestarMetrics(register, opts.metadata, genesisTime);
20
20
  const stateTransition = getMetrics(register);
21
21
 
22
- process.on("unhandledRejection", (_error) => {
22
+ const onUnhandledRejection = (_error: unknown): void => {
23
23
  lodestar.unhandledPromiseRejections.inc();
24
- });
24
+ };
25
+ process.on("unhandledRejection", onUnhandledRejection);
25
26
 
26
- const close = collectNodeJSMetrics(register);
27
+ const nodeJsMetricsClose = collectNodeJSMetrics(register);
28
+ const close = (): void => {
29
+ process.removeListener("unhandledRejection", onUnhandledRejection);
30
+ nodeJsMetricsClose();
31
+ };
27
32
 
28
33
  // Merge external registries
29
34
  for (const externalRegister of externalRegistries) {
@@ -89,9 +89,9 @@ export class MonitoringService {
89
89
  }
90
90
 
91
91
  /**
92
- * Stop sending client stats
92
+ * Stop sending client stats and wait for any pending request to complete
93
93
  */
94
- close(): void {
94
+ async close(): Promise<void> {
95
95
  if (this.status === Status.Closed) return;
96
96
  this.status = Status.Closed;
97
97
 
@@ -103,6 +103,7 @@ export class MonitoringService {
103
103
  }
104
104
  if (this.pendingRequest) {
105
105
  this.fetchAbortController?.abort(FetchAbortReason.Close);
106
+ await this.pendingRequest;
106
107
  }
107
108
  }
108
109
 
@@ -1,8 +1,8 @@
1
- import {Connection, PrivateKey} from "@libp2p/interface";
1
+ import type {PeerScoreStatsDump} from "@libp2p/gossipsub/score";
2
+ import type {PublishOpts} from "@libp2p/gossipsub/types";
3
+ import type {Connection, PrivateKey} from "@libp2p/interface";
2
4
  import {peerIdFromPrivateKey} from "@libp2p/peer-id";
3
5
  import {multiaddr} from "@multiformats/multiaddr";
4
- import {PeerScoreStatsDump} from "@chainsafe/libp2p-gossipsub/score";
5
- import {PublishOpts} from "@chainsafe/libp2p-gossipsub/types";
6
6
  import {routes} from "@lodestar/api";
7
7
  import {BeaconConfig, ForkBoundary} from "@lodestar/config";
8
8
  import type {LoggerNode} from "@lodestar/logger/node";
@@ -1,9 +1,9 @@
1
1
  import path from "node:path";
2
2
  import workerThreads from "node:worker_threads";
3
3
  import {privateKeyToProtobuf} from "@libp2p/crypto/keys";
4
- import {PrivateKey} from "@libp2p/interface";
5
- import {PeerScoreStatsDump} from "@chainsafe/libp2p-gossipsub/score";
6
- import {PublishOpts} from "@chainsafe/libp2p-gossipsub/types";
4
+ import type {PeerScoreStatsDump} from "@libp2p/gossipsub/score";
5
+ import type {PublishOpts} from "@libp2p/gossipsub/types";
6
+ import type {PrivateKey} from "@libp2p/interface";
7
7
  import {ModuleThread, Thread, Worker, spawn} from "@chainsafe/threads";
8
8
  import {routes} from "@lodestar/api";
9
9
  import {BeaconConfig, chainConfigToJson} from "@lodestar/config";
@@ -1,5 +1,5 @@
1
- import {PeerScoreStatsDump} from "@chainsafe/libp2p-gossipsub/score";
2
- import {PublishOpts} from "@chainsafe/libp2p-gossipsub/types";
1
+ import type {PeerScoreStatsDump} from "@libp2p/gossipsub/score";
2
+ import type {PublishOpts} from "@libp2p/gossipsub/types";
3
3
  import {routes} from "@lodestar/api";
4
4
  import {SpecJson} from "@lodestar/config";
5
5
  import {LoggerNodeOpts} from "@lodestar/logger/node";
@@ -1,5 +1,6 @@
1
1
  import {EventEmitter} from "node:events";
2
- import {PeerId, TopicValidatorResult} from "@libp2p/interface";
2
+ import type {TopicValidatorResult} from "@libp2p/gossipsub";
3
+ import type {PeerId} from "@libp2p/interface";
3
4
  import {CustodyIndex, Status} from "@lodestar/types";
4
5
  import {PeerIdStr} from "../util/peerId.js";
5
6
  import {StrictEventEmitterSingleArg} from "../util/strictEvents.js";
@@ -1,9 +1,9 @@
1
- import {Message} from "@libp2p/interface";
1
+ import type {Message} from "@libp2p/gossipsub";
2
+ import type {RPC} from "@libp2p/gossipsub/message";
3
+ import type {DataTransform} from "@libp2p/gossipsub/types";
2
4
  // snappyjs is better for compression for smaller payloads
3
5
  import xxhashFactory from "xxhash-wasm";
4
6
  import {digest} from "@chainsafe/as-sha256";
5
- import {RPC} from "@chainsafe/libp2p-gossipsub/message";
6
- import {DataTransform} from "@chainsafe/libp2p-gossipsub/types";
7
7
  import snappyWasm from "@chainsafe/snappy-wasm";
8
8
  import {ForkName} from "@lodestar/params";
9
9
  import {intToBytes} from "@lodestar/utils";