@lodestar/beacon-node 1.51.0-dev.d2b5232209 → 1.51.0-dev.d5620be4a1

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 (530) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +36 -88
  3. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  4. package/lib/api/impl/beacon/pool/index.d.ts.map +1 -1
  5. package/lib/api/impl/beacon/pool/index.js +22 -2
  6. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  7. package/lib/api/impl/beacon/state/utils.d.ts +1 -1
  8. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
  9. package/lib/api/impl/validator/index.d.ts +6 -0
  10. package/lib/api/impl/validator/index.d.ts.map +1 -1
  11. package/lib/api/impl/validator/index.js +38 -25
  12. package/lib/api/impl/validator/index.js.map +1 -1
  13. package/lib/chain/GetBlobsTracker.d.ts +2 -2
  14. package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
  15. package/lib/chain/GetBlobsTracker.js +11 -33
  16. package/lib/chain/GetBlobsTracker.js.map +1 -1
  17. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  18. package/lib/chain/archiveStore/archiveStore.js +1 -0
  19. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  20. package/lib/chain/blocks/blockInput/blockInput.d.ts +11 -56
  21. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
  22. package/lib/chain/blocks/blockInput/blockInput.js +5 -241
  23. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  24. package/lib/chain/blocks/blockInput/errors.d.ts +2 -4
  25. package/lib/chain/blocks/blockInput/errors.d.ts.map +1 -1
  26. package/lib/chain/blocks/blockInput/errors.js.map +1 -1
  27. package/lib/chain/blocks/blockInput/types.d.ts +2 -18
  28. package/lib/chain/blocks/blockInput/types.d.ts.map +1 -1
  29. package/lib/chain/blocks/blockInput/types.js +0 -1
  30. package/lib/chain/blocks/blockInput/types.js.map +1 -1
  31. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  32. package/lib/chain/blocks/importBlock.js +36 -53
  33. package/lib/chain/blocks/importBlock.js.map +1 -1
  34. package/lib/chain/blocks/importExecutionPayload.d.ts +10 -11
  35. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  36. package/lib/chain/blocks/importExecutionPayload.js +32 -18
  37. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  38. package/lib/chain/blocks/index.d.ts.map +1 -1
  39. package/lib/chain/blocks/index.js +2 -2
  40. package/lib/chain/blocks/index.js.map +1 -1
  41. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts +10 -7
  42. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts.map +1 -1
  43. package/lib/chain/blocks/payloadEnvelopeProcessor.js +22 -17
  44. package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -1
  45. package/lib/chain/blocks/types.d.ts +4 -20
  46. package/lib/chain/blocks/types.d.ts.map +1 -1
  47. package/lib/chain/blocks/types.js +0 -24
  48. package/lib/chain/blocks/types.js.map +1 -1
  49. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  50. package/lib/chain/blocks/verifyBlock.js +17 -6
  51. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  52. package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts.map +1 -1
  53. package/lib/chain/blocks/verifyBlocksDataAvailability.js +14 -2
  54. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  55. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +1 -1
  56. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  57. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +7 -3
  58. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  59. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -1
  60. package/lib/chain/blocks/verifyBlocksSanityChecks.js +4 -0
  61. package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
  62. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  63. package/lib/chain/blocks/verifyBlocksSignatures.js +10 -5
  64. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  65. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts.map +1 -1
  66. package/lib/chain/blocks/verifyPayloadsDataAvailability.js +9 -4
  67. package/lib/chain/blocks/verifyPayloadsDataAvailability.js.map +1 -1
  68. package/lib/chain/blocks/writeBlockInputToDb.d.ts +0 -2
  69. package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +1 -1
  70. package/lib/chain/blocks/writeBlockInputToDb.js +6 -24
  71. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  72. package/lib/chain/bls/interface.d.ts +2 -0
  73. package/lib/chain/bls/interface.d.ts.map +1 -1
  74. package/lib/chain/bls/multithread/index.d.ts +1 -1
  75. package/lib/chain/bls/multithread/index.d.ts.map +1 -1
  76. package/lib/chain/bls/multithread/index.js +50 -22
  77. package/lib/chain/bls/multithread/index.js.map +1 -1
  78. package/lib/chain/bls/multithread/types.d.ts +1 -1
  79. package/lib/chain/bls/multithread/types.d.ts.map +1 -1
  80. package/lib/chain/bls/multithread/worker.js +1 -1
  81. package/lib/chain/bls/multithread/worker.js.map +1 -1
  82. package/lib/chain/bls/singleThread.js +1 -1
  83. package/lib/chain/bls/singleThread.js.map +1 -1
  84. package/lib/chain/bls/utils.js +1 -1
  85. package/lib/chain/bls/utils.js.map +1 -1
  86. package/lib/chain/chain.d.ts +25 -4
  87. package/lib/chain/chain.d.ts.map +1 -1
  88. package/lib/chain/chain.js +120 -39
  89. package/lib/chain/chain.js.map +1 -1
  90. package/lib/chain/emitter.d.ts +7 -7
  91. package/lib/chain/emitter.d.ts.map +1 -1
  92. package/lib/chain/emitter.js +5 -5
  93. package/lib/chain/emitter.js.map +1 -1
  94. package/lib/chain/errors/blockError.d.ts +1 -1
  95. package/lib/chain/errors/blockError.d.ts.map +1 -1
  96. package/lib/chain/errors/blockError.js +1 -1
  97. package/lib/chain/errors/blockError.js.map +1 -1
  98. package/lib/chain/errors/executionPayloadEnvelope.d.ts +7 -0
  99. package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
  100. package/lib/chain/errors/executionPayloadEnvelope.js +1 -0
  101. package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
  102. package/lib/chain/errors/index.d.ts +0 -1
  103. package/lib/chain/errors/index.d.ts.map +1 -1
  104. package/lib/chain/errors/index.js +0 -1
  105. package/lib/chain/errors/index.js.map +1 -1
  106. package/lib/chain/forkChoice/index.d.ts +11 -1
  107. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  108. package/lib/chain/forkChoice/index.js +11 -0
  109. package/lib/chain/forkChoice/index.js.map +1 -1
  110. package/lib/chain/forkChoiceExecutionEngine.d.ts +51 -0
  111. package/lib/chain/forkChoiceExecutionEngine.d.ts.map +1 -0
  112. package/lib/chain/forkChoiceExecutionEngine.js +117 -0
  113. package/lib/chain/forkChoiceExecutionEngine.js.map +1 -0
  114. package/lib/chain/interface.d.ts +9 -7
  115. package/lib/chain/interface.d.ts.map +1 -1
  116. package/lib/chain/interface.js.map +1 -1
  117. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +17 -4
  118. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  119. package/lib/chain/opPools/aggregatedAttestationPool.js +199 -46
  120. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  121. package/lib/chain/opPools/attestationPool.d.ts +1 -1
  122. package/lib/chain/opPools/attestationPool.d.ts.map +1 -1
  123. package/lib/chain/opPools/attestationPool.js +15 -4
  124. package/lib/chain/opPools/attestationPool.js.map +1 -1
  125. package/lib/chain/opPools/index.d.ts +1 -0
  126. package/lib/chain/opPools/index.d.ts.map +1 -1
  127. package/lib/chain/opPools/index.js +1 -0
  128. package/lib/chain/opPools/index.js.map +1 -1
  129. package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -1
  130. package/lib/chain/opPools/payloadAttestationPool.js +17 -7
  131. package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
  132. package/lib/chain/opPools/singleAttestationPool.d.ts +77 -0
  133. package/lib/chain/opPools/singleAttestationPool.d.ts.map +1 -0
  134. package/lib/chain/opPools/singleAttestationPool.js +209 -0
  135. package/lib/chain/opPools/singleAttestationPool.js.map +1 -0
  136. package/lib/chain/opPools/syncCommitteeMessagePool.d.ts.map +1 -1
  137. package/lib/chain/opPools/syncCommitteeMessagePool.js +9 -3
  138. package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
  139. package/lib/chain/opPools/syncContributionAndProofPool.d.ts.map +1 -1
  140. package/lib/chain/opPools/syncContributionAndProofPool.js +11 -3
  141. package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
  142. package/lib/chain/opPools/utils.d.ts +1 -1
  143. package/lib/chain/opPools/utils.d.ts.map +1 -1
  144. package/lib/chain/opPools/utils.js +1 -1
  145. package/lib/chain/opPools/utils.js.map +1 -1
  146. package/lib/chain/options.d.ts +5 -3
  147. package/lib/chain/options.d.ts.map +1 -1
  148. package/lib/chain/options.js +0 -1
  149. package/lib/chain/options.js.map +1 -1
  150. package/lib/chain/produceBlock/produceBlockBody.d.ts +3 -2
  151. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  152. package/lib/chain/produceBlock/produceBlockBody.js +3 -2
  153. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  154. package/lib/chain/proposerTracker.d.ts +31 -0
  155. package/lib/chain/proposerTracker.d.ts.map +1 -0
  156. package/lib/chain/proposerTracker.js +75 -0
  157. package/lib/chain/proposerTracker.js.map +1 -0
  158. package/lib/chain/regen/interface.d.ts +1 -1
  159. package/lib/chain/regen/interface.d.ts.map +1 -1
  160. package/lib/chain/regen/queued.d.ts +1 -1
  161. package/lib/chain/regen/queued.d.ts.map +1 -1
  162. package/lib/chain/regen/queued.js +5 -3
  163. package/lib/chain/regen/queued.js.map +1 -1
  164. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +7 -14
  165. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
  166. package/lib/chain/seenCache/seenGossipBlockInput.js +6 -65
  167. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  168. package/lib/chain/validation/executionPayloadBid.js +13 -13
  169. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  170. package/lib/chain/validation/executionPayloadEnvelope.d.ts +6 -0
  171. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
  172. package/lib/chain/validation/executionPayloadEnvelope.js +53 -0
  173. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  174. package/lib/chain/validatorMonitor.d.ts +1 -2
  175. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  176. package/lib/chain/validatorMonitor.js +0 -3
  177. package/lib/chain/validatorMonitor.js.map +1 -1
  178. package/lib/db/flatFileStore/flatFileStore.js +5 -5
  179. package/lib/db/flatFileStore/flatFileStore.js.map +1 -1
  180. package/lib/db/flatFileStore/slotIndex.d.ts.map +1 -1
  181. package/lib/db/flatFileStore/slotIndex.js +2 -2
  182. package/lib/db/flatFileStore/slotIndex.js.map +1 -1
  183. package/lib/db/repositories/blobSidecars.d.ts +0 -1
  184. package/lib/db/repositories/blobSidecars.d.ts.map +1 -1
  185. package/lib/db/repositories/blobSidecars.js +0 -1
  186. package/lib/db/repositories/blobSidecars.js.map +1 -1
  187. package/lib/execution/builder/apiClient.d.ts +14 -8
  188. package/lib/execution/builder/apiClient.d.ts.map +1 -1
  189. package/lib/execution/builder/apiClient.js +12 -10
  190. package/lib/execution/builder/apiClient.js.map +1 -1
  191. package/lib/execution/builder/http.d.ts +2 -0
  192. package/lib/execution/builder/http.d.ts.map +1 -1
  193. package/lib/execution/builder/http.js +2 -0
  194. package/lib/execution/builder/http.js.map +1 -1
  195. package/lib/execution/engine/http.d.ts +4 -6
  196. package/lib/execution/engine/http.d.ts.map +1 -1
  197. package/lib/execution/engine/http.js +8 -10
  198. package/lib/execution/engine/http.js.map +1 -1
  199. package/lib/execution/engine/index.d.ts +1 -1
  200. package/lib/execution/engine/index.d.ts.map +1 -1
  201. package/lib/execution/engine/index.js +1 -1
  202. package/lib/execution/engine/index.js.map +1 -1
  203. package/lib/execution/engine/interface.d.ts +18 -6
  204. package/lib/execution/engine/interface.d.ts.map +1 -1
  205. package/lib/execution/engine/interface.js.map +1 -1
  206. package/lib/execution/engine/jsonRpcTransport.d.ts +2 -4
  207. package/lib/execution/engine/jsonRpcTransport.d.ts.map +1 -1
  208. package/lib/execution/engine/jsonRpcTransport.js +2 -12
  209. package/lib/execution/engine/jsonRpcTransport.js.map +1 -1
  210. package/lib/execution/engine/mock.d.ts +0 -1
  211. package/lib/execution/engine/mock.d.ts.map +1 -1
  212. package/lib/execution/engine/mock.js +0 -4
  213. package/lib/execution/engine/mock.js.map +1 -1
  214. package/lib/execution/engine/restTransport.d.ts +2 -4
  215. package/lib/execution/engine/restTransport.d.ts.map +1 -1
  216. package/lib/execution/engine/restTransport.js +1 -15
  217. package/lib/execution/engine/restTransport.js.map +1 -1
  218. package/lib/execution/engine/sszTypes.d.ts +0 -9
  219. package/lib/execution/engine/sszTypes.d.ts.map +1 -1
  220. package/lib/execution/engine/sszTypes.js +0 -5
  221. package/lib/execution/engine/sszTypes.js.map +1 -1
  222. package/lib/execution/engine/transport.d.ts +1 -14
  223. package/lib/execution/engine/transport.d.ts.map +1 -1
  224. package/lib/execution/engine/types.d.ts +0 -8
  225. package/lib/execution/engine/types.d.ts.map +1 -1
  226. package/lib/execution/engine/types.js +2 -10
  227. package/lib/execution/engine/types.js.map +1 -1
  228. package/lib/execution/engine/utils.d.ts.map +1 -1
  229. package/lib/execution/engine/utils.js +3 -2
  230. package/lib/execution/engine/utils.js.map +1 -1
  231. package/lib/index.d.ts +1 -1
  232. package/lib/index.d.ts.map +1 -1
  233. package/lib/index.js +1 -1
  234. package/lib/index.js.map +1 -1
  235. package/lib/metrics/metrics/beacon.d.ts +0 -9
  236. package/lib/metrics/metrics/beacon.d.ts.map +1 -1
  237. package/lib/metrics/metrics/beacon.js +0 -30
  238. package/lib/metrics/metrics/beacon.js.map +1 -1
  239. package/lib/metrics/metrics/lodestar.d.ts +30 -8
  240. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  241. package/lib/metrics/metrics/lodestar.js +79 -18
  242. package/lib/metrics/metrics/lodestar.js.map +1 -1
  243. package/lib/metrics/server/http.js +5 -5
  244. package/lib/metrics/server/http.js.map +1 -1
  245. package/lib/monitoring/service.js +1 -1
  246. package/lib/monitoring/service.js.map +1 -1
  247. package/lib/network/core/networkCore.d.ts +4 -1
  248. package/lib/network/core/networkCore.d.ts.map +1 -1
  249. package/lib/network/core/networkCore.js +7 -0
  250. package/lib/network/core/networkCore.js.map +1 -1
  251. package/lib/network/core/networkCoreWorker.js +2 -0
  252. package/lib/network/core/networkCoreWorker.js.map +1 -1
  253. package/lib/network/core/networkCoreWorkerHandler.d.ts +4 -1
  254. package/lib/network/core/networkCoreWorkerHandler.d.ts.map +1 -1
  255. package/lib/network/core/networkCoreWorkerHandler.js +6 -0
  256. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  257. package/lib/network/core/types.d.ts +6 -1
  258. package/lib/network/core/types.d.ts.map +1 -1
  259. package/lib/network/gossip/gossipsub.d.ts +1 -0
  260. package/lib/network/gossip/gossipsub.d.ts.map +1 -1
  261. package/lib/network/gossip/gossipsub.js +10 -0
  262. package/lib/network/gossip/gossipsub.js.map +1 -1
  263. package/lib/network/gossip/interface.d.ts +1 -8
  264. package/lib/network/gossip/interface.d.ts.map +1 -1
  265. package/lib/network/gossip/interface.js +0 -1
  266. package/lib/network/gossip/interface.js.map +1 -1
  267. package/lib/network/gossip/topic.d.ts +0 -16
  268. package/lib/network/gossip/topic.d.ts.map +1 -1
  269. package/lib/network/gossip/topic.js +0 -23
  270. package/lib/network/gossip/topic.js.map +1 -1
  271. package/lib/network/interface.d.ts +4 -5
  272. package/lib/network/interface.d.ts.map +1 -1
  273. package/lib/network/libp2p/index.d.ts.map +1 -1
  274. package/lib/network/libp2p/index.js +5 -1
  275. package/lib/network/libp2p/index.js.map +1 -1
  276. package/lib/network/network.d.ts +8 -7
  277. package/lib/network/network.d.ts.map +1 -1
  278. package/lib/network/network.js +53 -35
  279. package/lib/network/network.js.map +1 -1
  280. package/lib/network/options.d.ts +2 -0
  281. package/lib/network/options.d.ts.map +1 -1
  282. package/lib/network/options.js +2 -0
  283. package/lib/network/options.js.map +1 -1
  284. package/lib/network/peers/peerManager.d.ts +2 -1
  285. package/lib/network/peers/peerManager.d.ts.map +1 -1
  286. package/lib/network/peers/peerManager.js +28 -1
  287. package/lib/network/peers/peerManager.js.map +1 -1
  288. package/lib/network/peers/utils/assertPeerRelevance.d.ts +9 -1
  289. package/lib/network/peers/utils/assertPeerRelevance.d.ts.map +1 -1
  290. package/lib/network/peers/utils/assertPeerRelevance.js +32 -21
  291. package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
  292. package/lib/network/peers/utils/prioritizePeers.d.ts +4 -1
  293. package/lib/network/peers/utils/prioritizePeers.d.ts.map +1 -1
  294. package/lib/network/peers/utils/prioritizePeers.js +8 -16
  295. package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
  296. package/lib/network/peers/utils/subnetMap.d.ts +5 -2
  297. package/lib/network/peers/utils/subnetMap.d.ts.map +1 -1
  298. package/lib/network/peers/utils/subnetMap.js +6 -3
  299. package/lib/network/peers/utils/subnetMap.js.map +1 -1
  300. package/lib/network/processor/extractSlotRootFns.d.ts.map +1 -1
  301. package/lib/network/processor/extractSlotRootFns.js +1 -8
  302. package/lib/network/processor/extractSlotRootFns.js.map +1 -1
  303. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  304. package/lib/network/processor/gossipHandlers.js +52 -131
  305. package/lib/network/processor/gossipHandlers.js.map +1 -1
  306. package/lib/network/processor/gossipQueues/index.d.ts.map +1 -1
  307. package/lib/network/processor/gossipQueues/index.js +0 -6
  308. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  309. package/lib/network/processor/gossipValidatorFn.d.ts.map +1 -1
  310. package/lib/network/processor/gossipValidatorFn.js +1 -5
  311. package/lib/network/processor/gossipValidatorFn.js.map +1 -1
  312. package/lib/network/processor/index.d.ts +6 -0
  313. package/lib/network/processor/index.d.ts.map +1 -1
  314. package/lib/network/processor/index.js +29 -4
  315. package/lib/network/processor/index.js.map +1 -1
  316. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -1
  317. package/lib/network/reqresp/ReqRespBeaconNode.js +0 -3
  318. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  319. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts +2 -2
  320. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -1
  321. package/lib/network/reqresp/handlers/index.d.ts.map +1 -1
  322. package/lib/network/reqresp/handlers/index.js +1 -12
  323. package/lib/network/reqresp/handlers/index.js.map +1 -1
  324. package/lib/network/reqresp/protocols.d.ts +0 -2
  325. package/lib/network/reqresp/protocols.d.ts.map +1 -1
  326. package/lib/network/reqresp/protocols.js +0 -10
  327. package/lib/network/reqresp/protocols.js.map +1 -1
  328. package/lib/network/reqresp/rateLimit.d.ts.map +1 -1
  329. package/lib/network/reqresp/rateLimit.js +1 -17
  330. package/lib/network/reqresp/rateLimit.js.map +1 -1
  331. package/lib/network/reqresp/types.d.ts +2 -8
  332. package/lib/network/reqresp/types.d.ts.map +1 -1
  333. package/lib/network/reqresp/types.js +1 -7
  334. package/lib/network/reqresp/types.js.map +1 -1
  335. package/lib/network/subnets/attnetsService.d.ts +35 -5
  336. package/lib/network/subnets/attnetsService.d.ts.map +1 -1
  337. package/lib/network/subnets/attnetsService.js +84 -6
  338. package/lib/network/subnets/attnetsService.js.map +1 -1
  339. package/lib/network/subnets/interface.d.ts +7 -0
  340. package/lib/network/subnets/interface.d.ts.map +1 -1
  341. package/lib/network/subnets/interface.js.map +1 -1
  342. package/lib/node/nodejs.d.ts +3 -1
  343. package/lib/node/nodejs.d.ts.map +1 -1
  344. package/lib/node/nodejs.js +38 -20
  345. package/lib/node/nodejs.js.map +1 -1
  346. package/lib/node/options.d.ts +3 -1
  347. package/lib/node/options.d.ts.map +1 -1
  348. package/lib/node/options.js +4 -2
  349. package/lib/node/options.js.map +1 -1
  350. package/lib/sync/interface.d.ts.map +1 -1
  351. package/lib/sync/interface.js.map +1 -1
  352. package/lib/sync/range/batch.d.ts +2 -3
  353. package/lib/sync/range/batch.d.ts.map +1 -1
  354. package/lib/sync/range/batch.js +9 -22
  355. package/lib/sync/range/batch.js.map +1 -1
  356. package/lib/sync/range/chain.d.ts.map +1 -1
  357. package/lib/sync/range/chain.js +2 -15
  358. package/lib/sync/range/chain.js.map +1 -1
  359. package/lib/sync/sync.d.ts +7 -0
  360. package/lib/sync/sync.d.ts.map +1 -1
  361. package/lib/sync/sync.js +61 -3
  362. package/lib/sync/sync.js.map +1 -1
  363. package/lib/sync/unknownBlock.d.ts.map +1 -1
  364. package/lib/sync/unknownBlock.js +1 -7
  365. package/lib/sync/unknownBlock.js.map +1 -1
  366. package/lib/sync/utils/downloadByRange.d.ts +6 -34
  367. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  368. package/lib/sync/utils/downloadByRange.js +24 -128
  369. package/lib/sync/utils/downloadByRange.js.map +1 -1
  370. package/lib/sync/utils/downloadByRoot.d.ts +2 -18
  371. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  372. package/lib/sync/utils/downloadByRoot.js +14 -99
  373. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  374. package/lib/util/blobs.d.ts +1 -7
  375. package/lib/util/blobs.d.ts.map +1 -1
  376. package/lib/util/blobs.js +0 -19
  377. package/lib/util/blobs.js.map +1 -1
  378. package/lib/util/execution.d.ts +3 -4
  379. package/lib/util/execution.d.ts.map +1 -1
  380. package/lib/util/execution.js +1 -73
  381. package/lib/util/execution.js.map +1 -1
  382. package/lib/util/file.d.ts.map +1 -1
  383. package/lib/util/file.js +8 -9
  384. package/lib/util/file.js.map +1 -1
  385. package/lib/util/queue/itemQueue.js +1 -1
  386. package/lib/util/queue/itemQueue.js.map +1 -1
  387. package/lib/util/sszBytes.d.ts +5 -1
  388. package/lib/util/sszBytes.d.ts.map +1 -1
  389. package/lib/util/sszBytes.js +36 -19
  390. package/lib/util/sszBytes.js.map +1 -1
  391. package/lib/util/types.d.ts +0 -5
  392. package/lib/util/types.d.ts.map +1 -1
  393. package/lib/util/types.js +1 -2
  394. package/lib/util/types.js.map +1 -1
  395. package/package.json +16 -17
  396. package/src/api/impl/beacon/blocks/index.ts +59 -109
  397. package/src/api/impl/beacon/pool/index.ts +31 -1
  398. package/src/api/impl/beacon/state/utils.ts +1 -1
  399. package/src/api/impl/validator/index.ts +43 -29
  400. package/src/chain/GetBlobsTracker.ts +14 -41
  401. package/src/chain/archiveStore/archiveStore.ts +1 -0
  402. package/src/chain/blocks/blockInput/blockInput.ts +11 -343
  403. package/src/chain/blocks/blockInput/errors.ts +1 -2
  404. package/src/chain/blocks/blockInput/types.ts +2 -20
  405. package/src/chain/blocks/importBlock.ts +56 -72
  406. package/src/chain/blocks/importExecutionPayload.ts +55 -34
  407. package/src/chain/blocks/index.ts +5 -2
  408. package/src/chain/blocks/payloadEnvelopeProcessor.ts +33 -22
  409. package/src/chain/blocks/types.ts +5 -31
  410. package/src/chain/blocks/verifyBlock.ts +30 -16
  411. package/src/chain/blocks/verifyBlocksDataAvailability.ts +16 -2
  412. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +9 -6
  413. package/src/chain/blocks/verifyBlocksSanityChecks.ts +4 -1
  414. package/src/chain/blocks/verifyBlocksSignatures.ts +10 -5
  415. package/src/chain/blocks/verifyPayloadsDataAvailability.ts +11 -4
  416. package/src/chain/blocks/writeBlockInputToDb.ts +6 -29
  417. package/src/chain/bls/interface.ts +2 -0
  418. package/src/chain/bls/multithread/index.ts +48 -24
  419. package/src/chain/bls/multithread/types.ts +1 -1
  420. package/src/chain/bls/multithread/worker.ts +1 -5
  421. package/src/chain/bls/singleThread.ts +1 -1
  422. package/src/chain/bls/utils.ts +1 -1
  423. package/src/chain/chain.ts +136 -38
  424. package/src/chain/emitter.ts +8 -8
  425. package/src/chain/errors/blockError.ts +1 -1
  426. package/src/chain/errors/executionPayloadEnvelope.ts +8 -0
  427. package/src/chain/errors/index.ts +0 -1
  428. package/src/chain/forkChoice/index.ts +11 -0
  429. package/src/chain/forkChoiceExecutionEngine.ts +183 -0
  430. package/src/chain/interface.ts +9 -6
  431. package/src/chain/opPools/aggregatedAttestationPool.ts +246 -43
  432. package/src/chain/opPools/attestationPool.ts +16 -4
  433. package/src/chain/opPools/index.ts +1 -0
  434. package/src/chain/opPools/payloadAttestationPool.ts +18 -7
  435. package/src/chain/opPools/singleAttestationPool.ts +287 -0
  436. package/src/chain/opPools/syncCommitteeMessagePool.ts +10 -3
  437. package/src/chain/opPools/syncContributionAndProofPool.ts +13 -3
  438. package/src/chain/opPools/utils.ts +1 -1
  439. package/src/chain/options.ts +5 -4
  440. package/src/chain/produceBlock/produceBlockBody.ts +7 -3
  441. package/src/chain/proposerTracker.ts +94 -0
  442. package/src/chain/regen/interface.ts +1 -1
  443. package/src/chain/regen/queued.ts +6 -4
  444. package/src/chain/seenCache/seenGossipBlockInput.ts +9 -93
  445. package/src/chain/validation/executionPayloadBid.ts +14 -13
  446. package/src/chain/validation/executionPayloadEnvelope.ts +68 -1
  447. package/src/chain/validatorMonitor.ts +0 -6
  448. package/src/db/flatFileStore/flatFileStore.ts +7 -7
  449. package/src/db/flatFileStore/slotIndex.ts +4 -3
  450. package/src/db/repositories/blobSidecars.ts +0 -1
  451. package/src/execution/builder/apiClient.ts +16 -13
  452. package/src/execution/builder/http.ts +4 -0
  453. package/src/execution/engine/http.ts +19 -42
  454. package/src/execution/engine/index.ts +1 -1
  455. package/src/execution/engine/interface.ts +19 -10
  456. package/src/execution/engine/jsonRpcTransport.ts +10 -22
  457. package/src/execution/engine/mock.ts +0 -7
  458. package/src/execution/engine/restTransport.ts +3 -22
  459. package/src/execution/engine/sszTypes.ts +0 -9
  460. package/src/execution/engine/transport.ts +8 -17
  461. package/src/execution/engine/types.ts +3 -18
  462. package/src/execution/engine/utils.ts +4 -2
  463. package/src/index.ts +1 -1
  464. package/src/metrics/metrics/beacon.ts +0 -30
  465. package/src/metrics/metrics/lodestar.ts +80 -18
  466. package/src/metrics/server/http.ts +5 -5
  467. package/src/monitoring/service.ts +1 -1
  468. package/src/network/core/networkCore.ts +11 -1
  469. package/src/network/core/networkCoreWorker.ts +2 -0
  470. package/src/network/core/networkCoreWorkerHandler.ts +8 -1
  471. package/src/network/core/types.ts +6 -1
  472. package/src/network/gossip/gossipsub.ts +11 -0
  473. package/src/network/gossip/interface.ts +0 -5
  474. package/src/network/gossip/topic.ts +0 -25
  475. package/src/network/interface.ts +2 -5
  476. package/src/network/libp2p/index.ts +5 -1
  477. package/src/network/network.ts +55 -58
  478. package/src/network/options.ts +4 -0
  479. package/src/network/peers/peerManager.ts +28 -3
  480. package/src/network/peers/utils/assertPeerRelevance.ts +39 -23
  481. package/src/network/peers/utils/prioritizePeers.ts +14 -22
  482. package/src/network/peers/utils/subnetMap.ts +6 -3
  483. package/src/network/processor/extractSlotRootFns.ts +0 -9
  484. package/src/network/processor/gossipHandlers.ts +65 -164
  485. package/src/network/processor/gossipQueues/index.ts +0 -6
  486. package/src/network/processor/gossipValidatorFn.ts +0 -5
  487. package/src/network/processor/index.ts +25 -4
  488. package/src/network/reqresp/ReqRespBeaconNode.ts +0 -7
  489. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +2 -2
  490. package/src/network/reqresp/handlers/index.ts +0 -17
  491. package/src/network/reqresp/protocols.ts +0 -12
  492. package/src/network/reqresp/rateLimit.ts +1 -17
  493. package/src/network/reqresp/types.ts +0 -13
  494. package/src/network/subnets/attnetsService.ts +94 -6
  495. package/src/network/subnets/interface.ts +7 -0
  496. package/src/node/nodejs.ts +40 -21
  497. package/src/node/options.ts +9 -6
  498. package/src/sync/interface.ts +1 -0
  499. package/src/sync/range/batch.ts +9 -21
  500. package/src/sync/range/chain.ts +2 -14
  501. package/src/sync/sync.ts +65 -4
  502. package/src/sync/unknownBlock.ts +1 -8
  503. package/src/sync/utils/downloadByRange.ts +31 -230
  504. package/src/sync/utils/downloadByRoot.ts +15 -142
  505. package/src/util/blobs.ts +0 -34
  506. package/src/util/execution.ts +8 -102
  507. package/src/util/file.ts +8 -9
  508. package/src/util/queue/itemQueue.ts +1 -1
  509. package/src/util/sszBytes.ts +42 -24
  510. package/src/util/types.ts +1 -8
  511. package/lib/chain/errors/blobSidecarError.d.ts +0 -108
  512. package/lib/chain/errors/blobSidecarError.d.ts.map +0 -1
  513. package/lib/chain/errors/blobSidecarError.js +0 -38
  514. package/lib/chain/errors/blobSidecarError.js.map +0 -1
  515. package/lib/chain/validation/blobSidecar.d.ts +0 -16
  516. package/lib/chain/validation/blobSidecar.d.ts.map +0 -1
  517. package/lib/chain/validation/blobSidecar.js +0 -276
  518. package/lib/chain/validation/blobSidecar.js.map +0 -1
  519. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts +0 -9
  520. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +0 -1
  521. package/lib/network/reqresp/handlers/blobSidecarsByRange.js +0 -91
  522. package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +0 -1
  523. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts +0 -5
  524. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts.map +0 -1
  525. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js +0 -46
  526. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js.map +0 -1
  527. package/src/chain/errors/blobSidecarError.ts +0 -70
  528. package/src/chain/validation/blobSidecar.ts +0 -357
  529. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +0 -133
  530. package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +0 -69
@@ -1,5 +1,5 @@
1
1
  import {ChainForkConfig} from "@lodestar/config";
2
- import {ForkName, isForkPostDeneb, isForkPostFulu, isForkPostGloas} from "@lodestar/params";
2
+ import {ForkName, isForkPostFulu, isForkPostGloas} from "@lodestar/params";
3
3
  import {Epoch, RootHex, SignedBeaconBlock, Slot, gloas, phase0} from "@lodestar/types";
4
4
  import {LodestarError, byteArrayEquals, prettyPrintIndices, toRootHex} from "@lodestar/utils";
5
5
  import {isBlockInputColumns} from "../../chain/blocks/blockInput/blockInput.js";
@@ -112,7 +112,6 @@ export type BatchMetadata = {
112
112
  // Per-type outstanding request shapes; only present when that sub-request exists.
113
113
  // Format: "startSlot=<n>,count=<n>" (plus ",cols=<indices>" for columns).
114
114
  blocksReq?: string;
115
- blobsReq?: string;
116
115
  columnsReq?: string;
117
116
  envelopesReq?: string;
118
117
 
@@ -159,7 +158,7 @@ export class Batch {
159
158
  readonly startSlot: Slot;
160
159
  readonly count: number;
161
160
 
162
- /** Block, blob and column requests that are used to determine the best peer and are used in downloadByRange */
161
+ /** Block, column and envelope requests that are used to determine the best peer and are used in downloadByRange */
163
162
  requests: DownloadByRangeRequests;
164
163
  /** State of the batch. */
165
164
  state: BatchState = {status: BatchStatus.AwaitingDownload, blocks: [], payloadEnvelopes: null};
@@ -224,7 +223,7 @@ export class Batch {
224
223
  }
225
224
 
226
225
  /**
227
- * Builds ByRange requests for block, blobs and columns
226
+ * Builds ByRange requests for block, columns and envelopes
228
227
  */
229
228
  private getRequests(blocks: IBlockInput[]): DownloadByRangeRequests {
230
229
  const withinValidRequestWindow = !isDaOutOfRange(
@@ -254,8 +253,6 @@ export class Batch {
254
253
  count: this.count,
255
254
  columns: this.custodyConfig.sampledColumns,
256
255
  };
257
- } else if (isForkPostDeneb(this.forkName) && withinValidRequestWindow) {
258
- requests.blobsRequest = {startSlot: this.startSlot, count: this.count};
259
256
  }
260
257
 
261
258
  return requests;
@@ -334,23 +331,15 @@ export class Batch {
334
331
  if (dataStartSlot <= endSlot) {
335
332
  // range of 40 - 63, startSlot will be inclusive but subtraction will exclusive so need to + 1
336
333
  const count = endSlot - dataStartSlot + 1;
337
- if (isForkPostFulu(this.forkName) && withinValidRequestWindow) {
338
- // Skip the column re-request when we have no specific column indices outstanding.
339
- // Peer rejects an empty `columns` list
340
- if (neededColumns.size > 0) {
341
- requests.columnsRequest = {
342
- count,
343
- startSlot: dataStartSlot,
344
- columns: Array.from(neededColumns),
345
- };
346
- }
347
- } else if (isForkPostDeneb(this.forkName) && withinValidRequestWindow) {
348
- requests.blobsRequest = {
334
+ // Peer rejects an empty `columns` list
335
+ if (isForkPostFulu(this.forkName) && withinValidRequestWindow && neededColumns.size > 0) {
336
+ requests.columnsRequest = {
349
337
  count,
350
338
  startSlot: dataStartSlot,
339
+ columns: Array.from(neededColumns),
351
340
  };
352
341
  }
353
- // dataSlot will still have a value but do not create a request for preDeneb forks
342
+ // dataSlot will still have a value but do not create a request for pre-fulu forks
354
343
  }
355
344
 
356
345
  if (isForkPostGloas(this.forkName) && envelopeStartSlot <= endSlot) {
@@ -471,7 +460,7 @@ export class Batch {
471
460
  }
472
461
 
473
462
  getMetadata(): BatchMetadata {
474
- const {blocksRequest, blobsRequest, columnsRequest, envelopesRequest} = this.requests;
463
+ const {blocksRequest, columnsRequest, envelopesRequest} = this.requests;
475
464
  const failedProcessingPeerList = this.failedProcessingAttempts.flatMap((a) => a.peers);
476
465
  const executionErrorPeerList = this.executionErrorAttempts.flatMap((a) => a.peers);
477
466
  return {
@@ -480,7 +469,6 @@ export class Batch {
480
469
  count: this.count,
481
470
  status: this.state.status,
482
471
  ...(blocksRequest && {blocksReq: formatRangeReq(blocksRequest)}),
483
- ...(blobsRequest && {blobsReq: formatRangeReq(blobsRequest)}),
484
472
  ...(columnsRequest && {columnsReq: formatColumnsReq(columnsRequest)}),
485
473
  ...(envelopesRequest && {envelopesReq: formatRangeReq(envelopesRequest)}),
486
474
  downloadAttempts: this.failedDownloadAttempts.length,
@@ -1,11 +1,10 @@
1
1
  import {ChainForkConfig} from "@lodestar/config";
2
2
  import {Epoch, Root, Slot} from "@lodestar/types";
3
3
  import {ErrorAborted, LodestarError, Logger, prettyPrintIndices, toRootHex} from "@lodestar/utils";
4
- import {isBlockInputBlobs, isBlockInputColumns} from "../../chain/blocks/blockInput/blockInput.js";
4
+ import {isBlockInputColumns} from "../../chain/blocks/blockInput/blockInput.js";
5
5
  import {BlockInputErrorCode} from "../../chain/blocks/blockInput/errors.js";
6
6
  import {IBlockInput} from "../../chain/blocks/blockInput/types.js";
7
7
  import {PayloadEnvelopeInput} from "../../chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js";
8
- import {BlobSidecarErrorCode} from "../../chain/errors/blobSidecarError.js";
9
8
  import {DataColumnSidecarErrorCode} from "../../chain/errors/dataColumnSidecarError.js";
10
9
  import {Metrics} from "../../metrics/metrics.js";
11
10
  import {PeerAction, prettyPrintPeerIdStr} from "../../network/index.js";
@@ -569,12 +568,8 @@ export class SyncChain {
569
568
  // The below cases indicate the peer may be on a different chain, so are not penalized during head sync.
570
569
  switch (errCode) {
571
570
  case BlockInputErrorCode.MISMATCHED_ROOT_HEX:
572
- case DownloadByRangeErrorCode.MISSING_BLOBS:
573
- case DownloadByRangeErrorCode.EXTRA_BLOBS:
574
571
  case DownloadByRangeErrorCode.MISSING_COLUMNS:
575
572
  case DownloadByRangeErrorCode.EXTRA_COLUMNS:
576
- case BlobSidecarErrorCode.INCORRECT_SIDECAR_COUNT:
577
- case BlobSidecarErrorCode.INCORRECT_BLOCK:
578
573
  case DataColumnSidecarErrorCode.INCORRECT_SIDECAR_COUNT:
579
574
  case DataColumnSidecarErrorCode.INCORRECT_BLOCK:
580
575
  this.reportPeer(peer.peerId, PeerAction.LowToleranceError, res.err.message);
@@ -589,8 +584,6 @@ export class SyncChain {
589
584
  case DownloadByRangeErrorCode.INVALID_ENVELOPE_BLOCK_HASH:
590
585
  case DownloadByRangeErrorCode.INVALID_ENVELOPE_SLOT:
591
586
  case DownloadByRangeErrorCode.INVALID_CHAIN_SEGMENT:
592
- case BlobSidecarErrorCode.INCLUSION_PROOF_INVALID:
593
- case BlobSidecarErrorCode.INVALID_KZG_PROOF_BATCH:
594
587
  case DataColumnSidecarErrorCode.INCORRECT_KZG_COMMITMENTS_COUNT:
595
588
  case DataColumnSidecarErrorCode.INCORRECT_KZG_PROOF_COUNT:
596
589
  case DataColumnSidecarErrorCode.INVALID_KZG_PROOF_BATCH:
@@ -638,12 +631,7 @@ export class SyncChain {
638
631
  }
639
632
 
640
633
  for (const block of downloadSuccessOutput.blocks) {
641
- if (isBlockInputBlobs(block)) {
642
- const blockLogMeta = block.getLogMeta();
643
- const expectedBlobs = typeof blockLogMeta.expectedBlobs === "number" ? blockLogMeta.expectedBlobs : 0;
644
- logMeta.expectedBlobCount = (logMeta.expectedBlobCount ?? 0) + expectedBlobs;
645
- logMeta.receivedBlobCount = (logMeta.receivedBlobCount ?? 0) + blockLogMeta.receivedBlobs;
646
- } else if (isBlockInputColumns(block)) {
634
+ if (isBlockInputColumns(block)) {
647
635
  logMeta.columnCount = (logMeta.columnCount ?? 0) + block.getLogMeta().receivedColumns;
648
636
  }
649
637
  }
package/src/sync/sync.ts CHANGED
@@ -1,13 +1,17 @@
1
1
  import {SLOTS_PER_EPOCH} from "@lodestar/params";
2
- import {Slot} from "@lodestar/types";
2
+ import {computeStartSlotAtEpoch} from "@lodestar/state-transition";
3
+ import {Slot, Status} from "@lodestar/types";
3
4
  import {Logger, toRootHex} from "@lodestar/utils";
4
5
  import {IBeaconChain} from "../chain/index.js";
5
- import {GENESIS_SLOT} from "../constants/constants.js";
6
+ import {GENESIS_EPOCH, GENESIS_SLOT} from "../constants/constants.js";
7
+ import {GoodByeReasonCode} from "../constants/index.js";
8
+ import {IBeaconDb} from "../db/index.js";
6
9
  import {ExecutionEngineState} from "../execution/index.js";
7
10
  import {Metrics} from "../metrics/index.js";
8
- import {INetwork, NetworkEvent, NetworkEventData} from "../network/index.js";
11
+ import {INetwork, NetworkEvent, NetworkEventData, PeerAction} from "../network/index.js";
9
12
  import {ClockEvent} from "../util/clock.js";
10
13
  import {isOptimisticBlock} from "../util/forkChoice.js";
14
+ import {PeerIdStr} from "../util/peerId.js";
11
15
  import {MIN_EPOCH_TO_START_GOSSIP} from "./constants.js";
12
16
  import {IBeaconSync, SyncChainDebugState, SyncModules, SyncState, SyncingStatus, syncStateMetric} from "./interface.js";
13
17
  import {SyncOptions} from "./options.js";
@@ -19,6 +23,7 @@ export class BeaconSync implements IBeaconSync {
19
23
  private readonly logger: Logger;
20
24
  private readonly network: INetwork;
21
25
  private readonly chain: IBeaconChain;
26
+ private readonly db: IBeaconDb;
22
27
  private readonly metrics: Metrics | null;
23
28
  private readonly opts: SyncOptions;
24
29
 
@@ -30,10 +35,11 @@ export class BeaconSync implements IBeaconSync {
30
35
  private readonly slotImportTolerance: Slot;
31
36
 
32
37
  constructor(opts: SyncOptions, modules: SyncModules) {
33
- const {config, chain, metrics, network, logger} = modules;
38
+ const {config, chain, db, metrics, network, logger} = modules;
34
39
  this.opts = opts;
35
40
  this.network = network;
36
41
  this.chain = chain;
42
+ this.db = db;
37
43
  this.metrics = metrics;
38
44
  this.logger = logger;
39
45
  this.rangeSync = new RangeSync(modules, opts);
@@ -192,6 +198,11 @@ export class BeaconSync implements IBeaconSync {
192
198
  */
193
199
  private addPeer = (data: NetworkEventData[NetworkEvent.peerConnected]): void => {
194
200
  const localStatus = this.chain.getStatus();
201
+ // Genesis and equal finalized epochs are already checked by assertPeerRelevance in the network worker
202
+ if (data.status.finalizedEpoch > GENESIS_EPOCH && data.status.finalizedEpoch < localStatus.finalizedEpoch) {
203
+ void this.verifyPastFinalizedCheckpoint(data.peer, data.status);
204
+ }
205
+
195
206
  const syncType = getPeerSyncType(localStatus, data.status, this.chain.forkChoice, this.slotImportTolerance);
196
207
  this.logger.verbose("Peer sync type classified", {
197
208
  peer: data.peer,
@@ -216,6 +227,56 @@ export class BeaconSync implements IBeaconSync {
216
227
  this.updateSyncState();
217
228
  };
218
229
 
230
+ /**
231
+ * A behind peer's finalized checkpoint must be the canonical block in effect at the start slot of its epoch
232
+ */
233
+ async verifyPastFinalizedCheckpoint(peer: PeerIdStr, remote: Status): Promise<void> {
234
+ const startSlot = computeStartSlotAtEpoch(remote.finalizedEpoch);
235
+ const root = toRootHex(remote.finalizedRoot);
236
+ try {
237
+ let reason: string | null = null;
238
+ // After a finality jump, finalized blocks stay in fork choice until the archiver migrates them.
239
+ // Fork choice is pruned only after archiving, so a miss here means the db already has this range.
240
+ const canonicalBlock = this.chain.forkChoice.getCanonicalBlockClosestLteSlot(startSlot);
241
+ if (canonicalBlock !== null) {
242
+ if (canonicalBlock.blockRoot === root) return;
243
+ reason = "finalized_root_not_canonical";
244
+ } else {
245
+ const slot = await this.db.blockArchive.getSlotByRoot(remote.finalizedRoot);
246
+ if (slot !== null && slot > startSlot) {
247
+ reason = "finalized_root_after_epoch_start";
248
+ } else if (slot !== startSlot) {
249
+ const childSlot = await this.db.blockArchive.getSlotByParentRoot(remote.finalizedRoot);
250
+ if (childSlot !== null) {
251
+ if (childSlot <= startSlot) reason = "finalized_root_not_in_effect_at_epoch_start";
252
+ } else if (slot === null && startSlot > this.chain.earliestAvailableSlot) {
253
+ // childSlot == null too, neither the root nor a child is canonical
254
+ // or they are canonical and both pruned but peer's finalized epoch starts after earliestAvailableSlot
255
+ reason = "unknown_finalized_root";
256
+ }
257
+ }
258
+ }
259
+
260
+ if (reason !== null) {
261
+ this.logger.debug("Peer finalized checkpoint not in our chain", {
262
+ peer,
263
+ finalizedEpoch: remote.finalizedEpoch,
264
+ root,
265
+ reason,
266
+ });
267
+ this.metrics?.syncPeerFinalizedCheckpointMismatch.inc({reason});
268
+ this.network.reportPeer(peer, PeerAction.Fatal, "PeerFinalizedCheckpointMismatch");
269
+ await this.network.goodbyeAndDisconnect(peer, GoodByeReasonCode.IRRELEVANT_NETWORK);
270
+ }
271
+ } catch (e) {
272
+ this.logger.debug(
273
+ "Error verifying peer finalized checkpoint",
274
+ {peer, finalizedEpoch: remote.finalizedEpoch, root},
275
+ e as Error
276
+ );
277
+ }
278
+ }
279
+
219
280
  /**
220
281
  * Must be called by libp2p when a peer is removed from the peer manager
221
282
  */
@@ -6,7 +6,7 @@ import {RequestError, RequestErrorCode} from "@lodestar/reqresp";
6
6
  import {computeTimeAtSlot} from "@lodestar/state-transition";
7
7
  import {RootHex, Slot, gloas} from "@lodestar/types";
8
8
  import {Logger, fromHex, isErrorAborted, prettyPrintIndices, pruneSetToMax, sleep, toRootHex} from "@lodestar/utils";
9
- import {isBlockInputBlobs, isBlockInputColumns} from "../chain/blocks/blockInput/blockInput.js";
9
+ import {isBlockInputColumns} from "../chain/blocks/blockInput/blockInput.js";
10
10
  import {BlockInputSource, IBlockInput} from "../chain/blocks/blockInput/types.js";
11
11
  import {PayloadError, PayloadErrorCode} from "../chain/blocks/importExecutionPayload.js";
12
12
  import {PayloadEnvelopeInput, PayloadEnvelopeInputSource} from "../chain/blocks/payloadEnvelopeInput/index.js";
@@ -1910,13 +1910,6 @@ export class BlockInputSync {
1910
1910
  throw new Error(`${message} Block was not found.`);
1911
1911
  }
1912
1912
 
1913
- if (isBlockInputBlobs(cacheItem.blockInput)) {
1914
- const missing = cacheItem.blockInput.getMissingBlobMeta().map((b) => b.index);
1915
- if (missing.length) {
1916
- throw new Error(`${message} Missing blob indices=${prettyPrintIndices(missing)}.`);
1917
- }
1918
- }
1919
-
1920
1913
  if (isBlockInputColumns(cacheItem.blockInput)) {
1921
1914
  const missing = cacheItem.blockInput.getMissingSampledColumnMeta().missing;
1922
1915
  if (missing.length) {