@lodestar/beacon-node 1.40.0-dev.c975f70481 → 1.40.0-dev.cd347a28d7

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 (379) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +15 -25
  3. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  4. package/lib/api/impl/debug/index.d.ts +1 -1
  5. package/lib/api/impl/debug/index.d.ts.map +1 -1
  6. package/lib/api/impl/debug/index.js +3 -6
  7. package/lib/api/impl/debug/index.js.map +1 -1
  8. package/lib/api/impl/lodestar/index.d.ts.map +1 -1
  9. package/lib/api/impl/lodestar/index.js +15 -2
  10. package/lib/api/impl/lodestar/index.js.map +1 -1
  11. package/lib/api/impl/validator/index.d.ts.map +1 -1
  12. package/lib/api/impl/validator/index.js +9 -8
  13. package/lib/api/impl/validator/index.js.map +1 -1
  14. package/lib/chain/ColumnReconstructionTracker.d.ts +2 -0
  15. package/lib/chain/ColumnReconstructionTracker.d.ts.map +1 -1
  16. package/lib/chain/ColumnReconstructionTracker.js +7 -3
  17. package/lib/chain/ColumnReconstructionTracker.js.map +1 -1
  18. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -1
  19. package/lib/chain/archiveStore/utils/archiveBlocks.js +4 -0
  20. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  21. package/lib/chain/blocks/blockInput/blockInput.d.ts +30 -0
  22. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
  23. package/lib/chain/blocks/blockInput/blockInput.js +42 -1
  24. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  25. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  26. package/lib/chain/blocks/importBlock.js +3 -7
  27. package/lib/chain/blocks/importBlock.js.map +1 -1
  28. package/lib/chain/blocks/index.d.ts.map +1 -1
  29. package/lib/chain/blocks/index.js +0 -14
  30. package/lib/chain/blocks/index.js.map +1 -1
  31. package/lib/chain/blocks/types.d.ts +0 -2
  32. package/lib/chain/blocks/types.d.ts.map +1 -1
  33. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  34. package/lib/chain/blocks/verifyBlock.js +1 -8
  35. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  36. package/lib/chain/blocks/verifyBlocksSignatures.d.ts +2 -2
  37. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  38. package/lib/chain/blocks/verifyBlocksSignatures.js +2 -2
  39. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  40. package/lib/chain/blocks/writeBlockInputToDb.d.ts +1 -4
  41. package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +1 -1
  42. package/lib/chain/blocks/writeBlockInputToDb.js +28 -28
  43. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  44. package/lib/chain/bls/multithread/index.d.ts +3 -1
  45. package/lib/chain/bls/multithread/index.d.ts.map +1 -1
  46. package/lib/chain/bls/multithread/index.js +5 -3
  47. package/lib/chain/bls/multithread/index.js.map +1 -1
  48. package/lib/chain/bls/multithread/jobItem.d.ts +2 -2
  49. package/lib/chain/bls/multithread/jobItem.d.ts.map +1 -1
  50. package/lib/chain/bls/multithread/jobItem.js +2 -2
  51. package/lib/chain/bls/multithread/jobItem.js.map +1 -1
  52. package/lib/chain/bls/singleThread.d.ts +4 -2
  53. package/lib/chain/bls/singleThread.d.ts.map +1 -1
  54. package/lib/chain/bls/singleThread.js +4 -2
  55. package/lib/chain/bls/singleThread.js.map +1 -1
  56. package/lib/chain/bls/utils.d.ts +2 -2
  57. package/lib/chain/bls/utils.d.ts.map +1 -1
  58. package/lib/chain/bls/utils.js +9 -6
  59. package/lib/chain/bls/utils.js.map +1 -1
  60. package/lib/chain/chain.d.ts +22 -5
  61. package/lib/chain/chain.d.ts.map +1 -1
  62. package/lib/chain/chain.js +197 -44
  63. package/lib/chain/chain.js.map +1 -1
  64. package/lib/chain/errors/attestationError.d.ts +14 -1
  65. package/lib/chain/errors/attestationError.d.ts.map +1 -1
  66. package/lib/chain/errors/attestationError.js +8 -0
  67. package/lib/chain/errors/attestationError.js.map +1 -1
  68. package/lib/chain/errors/executionPayloadBid.d.ts +48 -0
  69. package/lib/chain/errors/executionPayloadBid.d.ts.map +1 -0
  70. package/lib/chain/errors/executionPayloadBid.js +15 -0
  71. package/lib/chain/errors/executionPayloadBid.js.map +1 -0
  72. package/lib/chain/errors/executionPayloadEnvelope.d.ts +48 -0
  73. package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -0
  74. package/lib/chain/errors/executionPayloadEnvelope.js +16 -0
  75. package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -0
  76. package/lib/chain/errors/index.d.ts +3 -0
  77. package/lib/chain/errors/index.d.ts.map +1 -1
  78. package/lib/chain/errors/index.js +3 -0
  79. package/lib/chain/errors/index.js.map +1 -1
  80. package/lib/chain/errors/payloadAttestation.d.ts +34 -0
  81. package/lib/chain/errors/payloadAttestation.d.ts.map +1 -0
  82. package/lib/chain/errors/payloadAttestation.js +13 -0
  83. package/lib/chain/errors/payloadAttestation.js.map +1 -0
  84. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  85. package/lib/chain/forkChoice/index.js +18 -0
  86. package/lib/chain/forkChoice/index.js.map +1 -1
  87. package/lib/chain/interface.d.ts +21 -3
  88. package/lib/chain/interface.d.ts.map +1 -1
  89. package/lib/chain/interface.js.map +1 -1
  90. package/lib/chain/opPools/executionPayloadBidPool.d.ts +21 -0
  91. package/lib/chain/opPools/executionPayloadBidPool.d.ts.map +1 -0
  92. package/lib/chain/opPools/executionPayloadBidPool.js +57 -0
  93. package/lib/chain/opPools/executionPayloadBidPool.js.map +1 -0
  94. package/lib/chain/opPools/index.d.ts +2 -0
  95. package/lib/chain/opPools/index.d.ts.map +1 -1
  96. package/lib/chain/opPools/index.js +2 -0
  97. package/lib/chain/opPools/index.js.map +1 -1
  98. package/lib/chain/opPools/payloadAttestationPool.d.ts +24 -0
  99. package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -0
  100. package/lib/chain/opPools/payloadAttestationPool.js +109 -0
  101. package/lib/chain/opPools/payloadAttestationPool.js.map +1 -0
  102. package/lib/chain/options.d.ts +0 -1
  103. package/lib/chain/options.d.ts.map +1 -1
  104. package/lib/chain/options.js +0 -1
  105. package/lib/chain/options.js.map +1 -1
  106. package/lib/chain/prepareNextSlot.js +6 -4
  107. package/lib/chain/prepareNextSlot.js.map +1 -1
  108. package/lib/chain/produceBlock/produceBlockBody.d.ts +3 -2
  109. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  110. package/lib/chain/produceBlock/produceBlockBody.js +5 -3
  111. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  112. package/lib/chain/regen/interface.d.ts +4 -9
  113. package/lib/chain/regen/interface.d.ts.map +1 -1
  114. package/lib/chain/regen/interface.js +1 -1
  115. package/lib/chain/regen/interface.js.map +1 -1
  116. package/lib/chain/regen/queued.d.ts +2 -3
  117. package/lib/chain/regen/queued.d.ts.map +1 -1
  118. package/lib/chain/regen/queued.js +2 -16
  119. package/lib/chain/regen/queued.js.map +1 -1
  120. package/lib/chain/regen/regen.d.ts +5 -7
  121. package/lib/chain/regen/regen.d.ts.map +1 -1
  122. package/lib/chain/regen/regen.js +7 -17
  123. package/lib/chain/regen/regen.js.map +1 -1
  124. package/lib/chain/seenCache/index.d.ts +3 -1
  125. package/lib/chain/seenCache/index.d.ts.map +1 -1
  126. package/lib/chain/seenCache/index.js +3 -1
  127. package/lib/chain/seenCache/index.js.map +1 -1
  128. package/lib/chain/seenCache/seenAttesters.d.ts +5 -0
  129. package/lib/chain/seenCache/seenAttesters.d.ts.map +1 -1
  130. package/lib/chain/seenCache/seenAttesters.js +5 -0
  131. package/lib/chain/seenCache/seenAttesters.js.map +1 -1
  132. package/lib/chain/seenCache/seenExecutionPayloadBids.d.ts +12 -0
  133. package/lib/chain/seenCache/seenExecutionPayloadBids.d.ts.map +1 -0
  134. package/lib/chain/seenCache/seenExecutionPayloadBids.js +30 -0
  135. package/lib/chain/seenCache/seenExecutionPayloadBids.js.map +1 -0
  136. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.d.ts +15 -0
  137. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.d.ts.map +1 -0
  138. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.js +28 -0
  139. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.js.map +1 -0
  140. package/lib/chain/seenCache/seenGossipBlockInput.js +1 -1
  141. package/lib/chain/stateCache/index.d.ts +0 -2
  142. package/lib/chain/stateCache/index.d.ts.map +1 -1
  143. package/lib/chain/stateCache/index.js +0 -2
  144. package/lib/chain/stateCache/index.js.map +1 -1
  145. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +2 -1
  146. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  147. package/lib/chain/stateCache/persistentCheckpointsCache.js +3 -0
  148. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  149. package/lib/chain/validation/aggregateAndProof.js +35 -14
  150. package/lib/chain/validation/aggregateAndProof.js.map +1 -1
  151. package/lib/chain/validation/attestation.d.ts +2 -2
  152. package/lib/chain/validation/attestation.d.ts.map +1 -1
  153. package/lib/chain/validation/attestation.js +27 -8
  154. package/lib/chain/validation/attestation.js.map +1 -1
  155. package/lib/chain/validation/attesterSlashing.d.ts.map +1 -1
  156. package/lib/chain/validation/attesterSlashing.js +1 -1
  157. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  158. package/lib/chain/validation/blobSidecar.d.ts.map +1 -1
  159. package/lib/chain/validation/blobSidecar.js +3 -3
  160. package/lib/chain/validation/blobSidecar.js.map +1 -1
  161. package/lib/chain/validation/block.d.ts.map +1 -1
  162. package/lib/chain/validation/block.js +6 -6
  163. package/lib/chain/validation/block.js.map +1 -1
  164. package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -1
  165. package/lib/chain/validation/dataColumnSidecar.js +3 -3
  166. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  167. package/lib/chain/validation/executionPayloadBid.d.ts +5 -0
  168. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -0
  169. package/lib/chain/validation/executionPayloadBid.js +104 -0
  170. package/lib/chain/validation/executionPayloadBid.js.map +1 -0
  171. package/lib/chain/validation/executionPayloadEnvelope.d.ts +5 -0
  172. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -0
  173. package/lib/chain/validation/executionPayloadEnvelope.js +89 -0
  174. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -0
  175. package/lib/chain/validation/payloadAttestationMessage.d.ts +9 -0
  176. package/lib/chain/validation/payloadAttestationMessage.d.ts.map +1 -0
  177. package/lib/chain/validation/payloadAttestationMessage.js +72 -0
  178. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -0
  179. package/lib/chain/validation/proposerSlashing.js +1 -1
  180. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  181. package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts +2 -3
  182. package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts.map +1 -1
  183. package/lib/chain/validation/signatureSets/aggregateAndProof.js +8 -3
  184. package/lib/chain/validation/signatureSets/aggregateAndProof.js.map +1 -1
  185. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts +2 -2
  186. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -1
  187. package/lib/chain/validation/signatureSets/contributionAndProof.js +3 -3
  188. package/lib/chain/validation/signatureSets/contributionAndProof.js.map +1 -1
  189. package/lib/chain/validation/signatureSets/selectionProof.d.ts +2 -3
  190. package/lib/chain/validation/signatureSets/selectionProof.d.ts.map +1 -1
  191. package/lib/chain/validation/signatureSets/selectionProof.js +8 -3
  192. package/lib/chain/validation/signatureSets/selectionProof.js.map +1 -1
  193. package/lib/chain/validation/signatureSets/syncCommittee.d.ts +2 -2
  194. package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -1
  195. package/lib/chain/validation/signatureSets/syncCommittee.js +3 -3
  196. package/lib/chain/validation/signatureSets/syncCommittee.js.map +1 -1
  197. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts +1 -2
  198. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -1
  199. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js +2 -2
  200. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js.map +1 -1
  201. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts +2 -2
  202. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -1
  203. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js +3 -3
  204. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js.map +1 -1
  205. package/lib/chain/validation/syncCommittee.js +1 -1
  206. package/lib/chain/validation/syncCommittee.js.map +1 -1
  207. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -1
  208. package/lib/chain/validation/syncCommitteeContributionAndProof.js +3 -5
  209. package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
  210. package/lib/chain/validation/voluntaryExit.js +1 -1
  211. package/lib/chain/validation/voluntaryExit.js.map +1 -1
  212. package/lib/chain/validatorMonitor.d.ts +2 -0
  213. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  214. package/lib/chain/validatorMonitor.js +49 -7
  215. package/lib/chain/validatorMonitor.js.map +1 -1
  216. package/lib/db/repositories/checkpointState.js +0 -1
  217. package/lib/db/repositories/checkpointState.js.map +1 -1
  218. package/lib/metrics/metrics/lodestar.d.ts +27 -0
  219. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  220. package/lib/metrics/metrics/lodestar.js +64 -0
  221. package/lib/metrics/metrics/lodestar.js.map +1 -1
  222. package/lib/network/gossip/gossipsub.d.ts +19 -0
  223. package/lib/network/gossip/gossipsub.d.ts.map +1 -1
  224. package/lib/network/gossip/gossipsub.js +71 -0
  225. package/lib/network/gossip/gossipsub.js.map +1 -1
  226. package/lib/network/gossip/interface.d.ts +20 -2
  227. package/lib/network/gossip/interface.d.ts.map +1 -1
  228. package/lib/network/gossip/interface.js +3 -0
  229. package/lib/network/gossip/interface.js.map +1 -1
  230. package/lib/network/gossip/scoringParameters.d.ts.map +1 -1
  231. package/lib/network/gossip/scoringParameters.js +38 -2
  232. package/lib/network/gossip/scoringParameters.js.map +1 -1
  233. package/lib/network/gossip/topic.d.ts +77 -1
  234. package/lib/network/gossip/topic.d.ts.map +1 -1
  235. package/lib/network/gossip/topic.js +20 -0
  236. package/lib/network/gossip/topic.js.map +1 -1
  237. package/lib/network/options.d.ts +6 -0
  238. package/lib/network/options.d.ts.map +1 -1
  239. package/lib/network/options.js.map +1 -1
  240. package/lib/network/peers/peerManager.d.ts.map +1 -1
  241. package/lib/network/peers/peerManager.js +9 -0
  242. package/lib/network/peers/peerManager.js.map +1 -1
  243. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  244. package/lib/network/processor/gossipHandlers.js +35 -4
  245. package/lib/network/processor/gossipHandlers.js.map +1 -1
  246. package/lib/network/processor/gossipQueues/index.d.ts.map +1 -1
  247. package/lib/network/processor/gossipQueues/index.js +16 -0
  248. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  249. package/lib/network/processor/index.d.ts.map +1 -1
  250. package/lib/network/processor/index.js +3 -0
  251. package/lib/network/processor/index.js.map +1 -1
  252. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -1
  253. package/lib/network/reqresp/handlers/beaconBlocksByRange.js +2 -4
  254. package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
  255. package/lib/network/reqresp/handlers/beaconBlocksByRoot.d.ts +1 -2
  256. package/lib/network/reqresp/handlers/beaconBlocksByRoot.d.ts.map +1 -1
  257. package/lib/network/reqresp/handlers/beaconBlocksByRoot.js +5 -26
  258. package/lib/network/reqresp/handlers/beaconBlocksByRoot.js.map +1 -1
  259. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts +1 -2
  260. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts.map +1 -1
  261. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js +5 -7
  262. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js.map +1 -1
  263. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -1
  264. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +1 -2
  265. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -1
  266. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.d.ts.map +1 -1
  267. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js +1 -5
  268. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -1
  269. package/lib/network/reqresp/handlers/index.js +2 -2
  270. package/lib/network/reqresp/handlers/index.js.map +1 -1
  271. package/lib/sync/backfill/backfill.js +2 -2
  272. package/lib/sync/backfill/backfill.js.map +1 -1
  273. package/lib/sync/backfill/verify.d.ts +1 -2
  274. package/lib/sync/backfill/verify.d.ts.map +1 -1
  275. package/lib/sync/backfill/verify.js +2 -2
  276. package/lib/sync/backfill/verify.js.map +1 -1
  277. package/lib/sync/range/chain.d.ts.map +1 -1
  278. package/lib/sync/range/chain.js +0 -1
  279. package/lib/sync/range/chain.js.map +1 -1
  280. package/lib/sync/range/range.d.ts.map +1 -1
  281. package/lib/sync/range/range.js +0 -3
  282. package/lib/sync/range/range.js.map +1 -1
  283. package/lib/sync/unknownBlock.d.ts.map +1 -1
  284. package/lib/sync/unknownBlock.js +0 -3
  285. package/lib/sync/unknownBlock.js.map +1 -1
  286. package/package.json +15 -15
  287. package/src/api/impl/beacon/blocks/index.ts +17 -25
  288. package/src/api/impl/debug/index.ts +2 -6
  289. package/src/api/impl/lodestar/index.ts +18 -3
  290. package/src/api/impl/validator/index.ts +14 -12
  291. package/src/chain/ColumnReconstructionTracker.ts +8 -4
  292. package/src/chain/archiveStore/utils/archiveBlocks.ts +4 -0
  293. package/src/chain/blocks/blockInput/blockInput.ts +53 -2
  294. package/src/chain/blocks/importBlock.ts +3 -7
  295. package/src/chain/blocks/index.ts +0 -19
  296. package/src/chain/blocks/types.ts +0 -2
  297. package/src/chain/blocks/verifyBlock.ts +0 -9
  298. package/src/chain/blocks/verifyBlocksSignatures.ts +4 -12
  299. package/src/chain/blocks/writeBlockInputToDb.ts +33 -30
  300. package/src/chain/bls/multithread/index.ts +7 -4
  301. package/src/chain/bls/multithread/jobItem.ts +7 -3
  302. package/src/chain/bls/singleThread.ts +5 -3
  303. package/src/chain/bls/utils.ts +15 -7
  304. package/src/chain/chain.ts +227 -56
  305. package/src/chain/errors/attestationError.ts +11 -1
  306. package/src/chain/errors/executionPayloadBid.ts +35 -0
  307. package/src/chain/errors/executionPayloadEnvelope.ts +34 -0
  308. package/src/chain/errors/index.ts +3 -0
  309. package/src/chain/errors/payloadAttestation.ts +25 -0
  310. package/src/chain/forkChoice/index.ts +19 -0
  311. package/src/chain/interface.ts +32 -1
  312. package/src/chain/opPools/executionPayloadBidPool.ts +77 -0
  313. package/src/chain/opPools/index.ts +2 -0
  314. package/src/chain/opPools/payloadAttestationPool.ts +157 -0
  315. package/src/chain/options.ts +0 -2
  316. package/src/chain/prepareNextSlot.ts +6 -6
  317. package/src/chain/produceBlock/produceBlockBody.ts +7 -5
  318. package/src/chain/regen/interface.ts +3 -13
  319. package/src/chain/regen/queued.ts +3 -24
  320. package/src/chain/regen/regen.ts +10 -25
  321. package/src/chain/seenCache/index.ts +3 -1
  322. package/src/chain/seenCache/seenAttesters.ts +5 -0
  323. package/src/chain/seenCache/seenExecutionPayloadBids.ts +35 -0
  324. package/src/chain/seenCache/seenExecutionPayloadEnvelope.ts +34 -0
  325. package/src/chain/seenCache/seenGossipBlockInput.ts +1 -1
  326. package/src/chain/stateCache/index.ts +0 -2
  327. package/src/chain/stateCache/persistentCheckpointsCache.ts +6 -2
  328. package/src/chain/validation/aggregateAndProof.ts +36 -14
  329. package/src/chain/validation/attestation.ts +33 -16
  330. package/src/chain/validation/attesterSlashing.ts +1 -6
  331. package/src/chain/validation/blobSidecar.ts +2 -7
  332. package/src/chain/validation/block.ts +6 -6
  333. package/src/chain/validation/dataColumnSidecar.ts +2 -7
  334. package/src/chain/validation/executionPayloadBid.ts +141 -0
  335. package/src/chain/validation/executionPayloadEnvelope.ts +122 -0
  336. package/src/chain/validation/payloadAttestationMessage.ts +109 -0
  337. package/src/chain/validation/proposerSlashing.ts +1 -6
  338. package/src/chain/validation/signatureSets/aggregateAndProof.ts +9 -14
  339. package/src/chain/validation/signatureSets/contributionAndProof.ts +2 -4
  340. package/src/chain/validation/signatureSets/selectionProof.ts +9 -9
  341. package/src/chain/validation/signatureSets/syncCommittee.ts +2 -4
  342. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +2 -3
  343. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +2 -4
  344. package/src/chain/validation/syncCommittee.ts +1 -1
  345. package/src/chain/validation/syncCommitteeContributionAndProof.ts +3 -5
  346. package/src/chain/validation/voluntaryExit.ts +1 -1
  347. package/src/chain/validatorMonitor.ts +62 -8
  348. package/src/db/repositories/checkpointState.ts +1 -1
  349. package/src/metrics/metrics/lodestar.ts +65 -0
  350. package/src/network/gossip/gossipsub.ts +86 -1
  351. package/src/network/gossip/interface.ts +17 -0
  352. package/src/network/gossip/scoringParameters.ts +44 -2
  353. package/src/network/gossip/topic.ts +21 -0
  354. package/src/network/options.ts +6 -0
  355. package/src/network/peers/peerManager.ts +11 -0
  356. package/src/network/processor/gossipHandlers.ts +49 -4
  357. package/src/network/processor/gossipQueues/index.ts +16 -0
  358. package/src/network/processor/index.ts +3 -0
  359. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +2 -4
  360. package/src/network/reqresp/handlers/beaconBlocksByRoot.ts +5 -32
  361. package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +5 -9
  362. package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +5 -2
  363. package/src/network/reqresp/handlers/dataColumnSidecarsByRoot.ts +1 -5
  364. package/src/network/reqresp/handlers/index.ts +2 -2
  365. package/src/sync/backfill/backfill.ts +2 -2
  366. package/src/sync/backfill/verify.ts +2 -3
  367. package/src/sync/range/chain.ts +0 -1
  368. package/src/sync/range/range.ts +0 -3
  369. package/src/sync/unknownBlock.ts +0 -3
  370. package/lib/chain/stateCache/blockStateCacheImpl.d.ts +0 -54
  371. package/lib/chain/stateCache/blockStateCacheImpl.d.ts.map +0 -1
  372. package/lib/chain/stateCache/blockStateCacheImpl.js +0 -130
  373. package/lib/chain/stateCache/blockStateCacheImpl.js.map +0 -1
  374. package/lib/chain/stateCache/inMemoryCheckpointsCache.d.ts +0 -60
  375. package/lib/chain/stateCache/inMemoryCheckpointsCache.d.ts.map +0 -1
  376. package/lib/chain/stateCache/inMemoryCheckpointsCache.js +0 -156
  377. package/lib/chain/stateCache/inMemoryCheckpointsCache.js.map +0 -1
  378. package/src/chain/stateCache/blockStateCacheImpl.ts +0 -149
  379. package/src/chain/stateCache/inMemoryCheckpointsCache.ts +0 -192
@@ -38,7 +38,6 @@ export async function* onDataColumnSidecarsByRange(
38
38
  }
39
39
 
40
40
  const finalized = db.dataColumnSidecarArchive;
41
- const unfinalized = db.dataColumnSidecar;
42
41
  const finalizedSlot = chain.forkChoice.getFinalizedBlock().slot;
43
42
 
44
43
  // Finalized range of columns
@@ -92,7 +91,11 @@ export async function* onDataColumnSidecarsByRange(
92
91
  // at the time of the start of the request. Spec is clear the chain of columns must be consistent, but on
93
92
  // re-org there's no need to abort the request
94
93
  // Spec: https://github.com/ethereum/consensus-specs/blob/ad36024441cf910d428d03f87f331fbbd2b3e5f1/specs/fulu/p2p-interface.md#L425-L429
95
- const dataColumnSidecars = await unfinalized.getManyBinary(fromHex(block.blockRoot), availableColumns);
94
+ const dataColumnSidecars = await chain.getSerializedDataColumnSidecars(
95
+ block.slot,
96
+ block.blockRoot,
97
+ availableColumns
98
+ );
96
99
 
97
100
  const unavailableColumnIndices: ColumnIndex[] = [];
98
101
  for (let i = 0; i < dataColumnSidecars.length; i++) {
@@ -61,11 +61,7 @@ export async function* onDataColumnSidecarsByRoot(
61
61
  continue;
62
62
  }
63
63
 
64
- const dataColumns = block
65
- ? // Non-finalized sidecars are stored by block root
66
- await db.dataColumnSidecar.getManyBinary(blockRoot, availableColumns)
67
- : // Finalized sidecars are archived and stored by slot
68
- await db.dataColumnSidecarArchive.getManyBinary(slot, availableColumns);
64
+ const dataColumns = await chain.getSerializedDataColumnSidecars(slot, blockRootHex, availableColumns);
69
65
 
70
66
  const unavailableColumnIndices: ColumnIndex[] = [];
71
67
  for (let i = 0; i < dataColumns.length; i++) {
@@ -42,12 +42,12 @@ export function getReqRespHandlers({db, chain}: {db: IBeaconDb; chain: IBeaconCh
42
42
  [ReqRespMethod.BeaconBlocksByRoot]: (req) => {
43
43
  const fork = chain.config.getForkName(chain.clock.currentSlot);
44
44
  const body = BeaconBlocksByRootRequestType(fork, chain.config).deserialize(req.data);
45
- return onBeaconBlocksByRoot(body, chain, db);
45
+ return onBeaconBlocksByRoot(body, chain);
46
46
  },
47
47
  [ReqRespMethod.BlobSidecarsByRoot]: (req) => {
48
48
  const fork = chain.config.getForkName(chain.clock.currentSlot);
49
49
  const body = BlobSidecarsByRootRequestType(fork, chain.config).deserialize(req.data);
50
- return onBlobSidecarsByRoot(body, chain, db);
50
+ return onBlobSidecarsByRoot(body, chain);
51
51
  },
52
52
  [ReqRespMethod.BlobSidecarsByRange]: (req) => {
53
53
  const body = ssz.deneb.BlobSidecarsByRangeRequest.deserialize(req.data);
@@ -750,7 +750,7 @@ export class BackfillSync extends (EventEmitter as {new (): BackfillSyncEmitter}
750
750
 
751
751
  // GENESIS_SLOT doesn't has valid signature
752
752
  if (anchorBlock.message.slot === GENESIS_SLOT) return;
753
- await verifyBlockProposerSignature(this.chain.config, this.chain.index2pubkey, this.chain.bls, [anchorBlock]);
753
+ await verifyBlockProposerSignature(this.chain.config, this.chain.bls, [anchorBlock]);
754
754
 
755
755
  // We can write to the disk if this is ahead of prevFinalizedCheckpointBlock otherwise
756
756
  // we will need to go make checks on the top of sync loop before writing as it might
@@ -815,7 +815,7 @@ export class BackfillSync extends (EventEmitter as {new (): BackfillSyncEmitter}
815
815
 
816
816
  // If any of the block's proposer signature fail, we can't trust this peer at all
817
817
  if (verifiedBlocks.length > 0) {
818
- await verifyBlockProposerSignature(this.chain.config, this.chain.index2pubkey, this.chain.bls, verifiedBlocks);
818
+ await verifyBlockProposerSignature(this.chain.config, this.chain.bls, verifiedBlocks);
819
819
 
820
820
  // This is bad, like super bad. Abort the backfill
821
821
  if (!nextAnchor)
@@ -1,6 +1,6 @@
1
1
  import {BeaconConfig} from "@lodestar/config";
2
2
  import {GENESIS_SLOT} from "@lodestar/params";
3
- import {ISignatureSet, Index2PubkeyCache, getBlockProposerSignatureSet} from "@lodestar/state-transition";
3
+ import {ISignatureSet, getBlockProposerSignatureSet} from "@lodestar/state-transition";
4
4
  import {Root, SignedBeaconBlock, Slot, ssz} from "@lodestar/types";
5
5
  import {IBlsVerifier} from "../../chain/bls/index.js";
6
6
  import {BackfillSyncError, BackfillSyncErrorCode} from "./errors.js";
@@ -42,14 +42,13 @@ export function verifyBlockSequence(
42
42
 
43
43
  export async function verifyBlockProposerSignature(
44
44
  config: BeaconConfig,
45
- index2pubkey: Index2PubkeyCache,
46
45
  bls: IBlsVerifier,
47
46
  blocks: SignedBeaconBlock[]
48
47
  ): Promise<void> {
49
48
  if (blocks.length === 1 && blocks[0].message.slot === GENESIS_SLOT) return;
50
49
  const signatures = blocks.reduce((sigs: ISignatureSet[], block) => {
51
50
  // genesis block doesn't have valid signature
52
- if (block.message.slot !== GENESIS_SLOT) sigs.push(getBlockProposerSignatureSet(config, index2pubkey, block));
51
+ if (block.message.slot !== GENESIS_SLOT) sigs.push(getBlockProposerSignatureSet(config, block));
53
52
  return sigs;
54
53
  }, []);
55
54
 
@@ -585,7 +585,6 @@ export class SyncChain {
585
585
 
586
586
  if (!res.err) {
587
587
  batch.processingSuccess();
588
- this.pruneBlockInputs(batch.getBlocks());
589
588
 
590
589
  // If the processed batch is not empty, validate previous AwaitingValidation blocks.
591
590
  if (blocks.length > 0) {
@@ -188,9 +188,6 @@ export class RangeSync extends (EventEmitter as {new (): RangeSyncEmitter}) {
188
188
  // when this runs, syncing is the most important thing and gossip is not likely to run
189
189
  // so we can utilize worker threads to verify signatures
190
190
  blsVerifyOnMainThread: false,
191
- // we want to be safe to only persist blocks after verifying it to avoid any attacks that may cause our DB
192
- // to grow too much
193
- eagerPersistBlock: false,
194
191
  };
195
192
 
196
193
  if (this.opts?.disableProcessAsChainSegment) {
@@ -423,8 +423,6 @@ export class BlockInputSync {
423
423
  // see https://github.com/ChainSafe/lodestar/issues/5650
424
424
  ignoreIfFinalized: true,
425
425
  blsVerifyOnMainThread: true,
426
- // block is validated with correct root, we want to process it as soon as possible
427
- eagerPersistBlock: true,
428
426
  })
429
427
  );
430
428
 
@@ -434,7 +432,6 @@ export class BlockInputSync {
434
432
  if (!res.err) {
435
433
  // no need to update status to "processed", delete anyway
436
434
  this.pendingBlocks.delete(pendingBlock.blockInput.blockRootHex);
437
- this.chain.seenBlockInputCache.prune(pendingBlock.blockInput.blockRootHex);
438
435
 
439
436
  // Send child blocks to the processor
440
437
  for (const descendantBlock of getDescendantBlocks(pendingBlock.blockInput.blockRootHex, this.pendingBlocks)) {
@@ -1,54 +0,0 @@
1
- import { routes } from "@lodestar/api";
2
- import { CachedBeaconStateAllForks } from "@lodestar/state-transition";
3
- import { Epoch, RootHex } from "@lodestar/types";
4
- import { Metrics } from "../../metrics/index.js";
5
- import { BlockStateCache } from "./types.js";
6
- /**
7
- * Old implementation of StateCache (used to call `StateContextCache`)
8
- * - Prune per checkpoint so number of states ranges from 96 to 128
9
- * - Keep a separate head state to make sure it is always available
10
- */
11
- export declare class BlockStateCacheImpl implements BlockStateCache {
12
- /**
13
- * Max number of states allowed in the cache
14
- */
15
- readonly maxStates: number;
16
- private readonly cache;
17
- /** Epoch -> Set<blockRoot> */
18
- private readonly epochIndex;
19
- private readonly metrics;
20
- /**
21
- * Strong reference to prevent head state from being pruned.
22
- * null if head state is being regen and not available at the moment.
23
- */
24
- private head;
25
- constructor({ maxStates, metrics }: {
26
- maxStates?: number;
27
- metrics?: Metrics | null;
28
- });
29
- get(rootHex: RootHex): CachedBeaconStateAllForks | null;
30
- add(item: CachedBeaconStateAllForks): void;
31
- setHeadState(item: CachedBeaconStateAllForks | null): void;
32
- /**
33
- * Get a seed state for state reload.
34
- * This is to conform to the api only as this cache is not used in n-historical state.
35
- * See ./fifoBlockStateCache.ts for implementation
36
- */
37
- getSeedState(): CachedBeaconStateAllForks;
38
- clear(): void;
39
- get size(): number;
40
- /**
41
- * TODO make this more robust.
42
- * Without more thought, this currently breaks our assumptions about recent state availablity
43
- */
44
- prune(headStateRootHex: RootHex): void;
45
- /**
46
- * Prune per finalized epoch.
47
- */
48
- deleteAllBeforeEpoch(finalizedEpoch: Epoch): void;
49
- /** ONLY FOR DEBUGGING PURPOSES. For lodestar debug API */
50
- dumpSummary(): routes.lodestar.StateCacheItem[];
51
- getStates(): IterableIterator<CachedBeaconStateAllForks>;
52
- private deleteAllEpochItems;
53
- }
54
- //# sourceMappingURL=blockStateCacheImpl.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"blockStateCacheImpl.d.ts","sourceRoot":"","sources":["../../../src/chain/stateCache/blockStateCacheImpl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;AACrC,OAAO,EAAC,yBAAyB,EAAC,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAC,KAAK,EAAE,OAAO,EAAC,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAC,OAAO,EAAC,MAAM,wBAAwB,CAAC;AAE/C,OAAO,EAAC,eAAe,EAAC,MAAM,YAAY,CAAC;AAI3C;;;;GAIG;AACH,qBAAa,mBAAoB,YAAW,eAAe;IACzD;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgD;IACtE,8BAA8B;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiC;IAC5D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2C;IACnE;;;OAGG;IACH,OAAO,CAAC,IAAI,CAAuE;gBAEvE,EAAC,SAAsB,EAAE,OAAO,EAAC,EAAE;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;KAAC;IAS7F,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,yBAAyB,GAAG,IAAI;IAavD,GAAG,CAAC,IAAI,EAAE,yBAAyB,GAAG,IAAI;IAgB1C,YAAY,CAAC,IAAI,EAAE,yBAAyB,GAAG,IAAI,GAAG,IAAI;IAS1D;;;;OAIG;IACH,YAAY,IAAI,yBAAyB;IAIzC,KAAK,IAAI,IAAI;IAKb,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;OAGG;IACH,KAAK,CAAC,gBAAgB,EAAE,OAAO,GAAG,IAAI;IAgBtC;;OAEG;IACH,oBAAoB,CAAC,cAAc,EAAE,KAAK,GAAG,IAAI;IAQjD,0DAA0D;IAC1D,WAAW,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE;IAU/C,SAAS,IAAI,gBAAgB,CAAC,yBAAyB,CAAC;IAIxD,OAAO,CAAC,mBAAmB;CAM5B"}
@@ -1,130 +0,0 @@
1
- import { toRootHex } from "@lodestar/utils";
2
- import { MapTracker } from "./mapMetrics.js";
3
- const MAX_STATES = 3 * 32;
4
- /**
5
- * Old implementation of StateCache (used to call `StateContextCache`)
6
- * - Prune per checkpoint so number of states ranges from 96 to 128
7
- * - Keep a separate head state to make sure it is always available
8
- */
9
- export class BlockStateCacheImpl {
10
- /**
11
- * Max number of states allowed in the cache
12
- */
13
- maxStates;
14
- cache;
15
- /** Epoch -> Set<blockRoot> */
16
- epochIndex = new Map();
17
- metrics;
18
- /**
19
- * Strong reference to prevent head state from being pruned.
20
- * null if head state is being regen and not available at the moment.
21
- */
22
- head = null;
23
- constructor({ maxStates = MAX_STATES, metrics }) {
24
- this.maxStates = maxStates;
25
- this.cache = new MapTracker(metrics?.stateCache);
26
- if (metrics) {
27
- this.metrics = metrics.stateCache;
28
- metrics.stateCache.size.addCollect(() => metrics.stateCache.size.set(this.cache.size));
29
- }
30
- }
31
- get(rootHex) {
32
- this.metrics?.lookups.inc();
33
- const item = this.head?.stateRoot === rootHex ? this.head.state : this.cache.get(rootHex);
34
- if (!item) {
35
- return null;
36
- }
37
- this.metrics?.hits.inc();
38
- this.metrics?.stateClonedCount.observe(item.clonedCount);
39
- return item;
40
- }
41
- add(item) {
42
- const key = toRootHex(item.hashTreeRoot());
43
- if (this.cache.get(key)) {
44
- return;
45
- }
46
- this.metrics?.adds.inc();
47
- this.cache.set(key, item);
48
- const epoch = item.epochCtx.epoch;
49
- const blockRoots = this.epochIndex.get(epoch);
50
- if (blockRoots) {
51
- blockRoots.add(key);
52
- }
53
- else {
54
- this.epochIndex.set(epoch, new Set([key]));
55
- }
56
- }
57
- setHeadState(item) {
58
- if (item) {
59
- const key = toRootHex(item.hashTreeRoot());
60
- this.head = { state: item, stateRoot: key };
61
- }
62
- else {
63
- this.head = null;
64
- }
65
- }
66
- /**
67
- * Get a seed state for state reload.
68
- * This is to conform to the api only as this cache is not used in n-historical state.
69
- * See ./fifoBlockStateCache.ts for implementation
70
- */
71
- getSeedState() {
72
- throw Error("Not implemented for BlockStateCacheImpl");
73
- }
74
- clear() {
75
- this.cache.clear();
76
- this.epochIndex.clear();
77
- }
78
- get size() {
79
- return this.cache.size;
80
- }
81
- /**
82
- * TODO make this more robust.
83
- * Without more thought, this currently breaks our assumptions about recent state availablity
84
- */
85
- prune(headStateRootHex) {
86
- const keys = Array.from(this.cache.keys());
87
- if (keys.length > this.maxStates) {
88
- // object keys are stored in insertion order, delete keys starting from the front
89
- for (const key of keys.slice(0, keys.length - this.maxStates)) {
90
- if (key !== headStateRootHex) {
91
- const item = this.cache.get(key);
92
- if (item) {
93
- this.epochIndex.get(item.epochCtx.epoch)?.delete(key);
94
- this.cache.delete(key);
95
- }
96
- }
97
- }
98
- }
99
- }
100
- /**
101
- * Prune per finalized epoch.
102
- */
103
- deleteAllBeforeEpoch(finalizedEpoch) {
104
- for (const epoch of this.epochIndex.keys()) {
105
- if (epoch < finalizedEpoch) {
106
- this.deleteAllEpochItems(epoch);
107
- }
108
- }
109
- }
110
- /** ONLY FOR DEBUGGING PURPOSES. For lodestar debug API */
111
- dumpSummary() {
112
- return Array.from(this.cache.entries()).map(([key, state]) => ({
113
- slot: state.slot,
114
- root: toRootHex(state.hashTreeRoot()),
115
- reads: this.cache.readCount.get(key) ?? 0,
116
- lastRead: this.cache.lastRead.get(key) ?? 0,
117
- checkpointState: false,
118
- }));
119
- }
120
- getStates() {
121
- return this.cache.values();
122
- }
123
- deleteAllEpochItems(epoch) {
124
- for (const rootHex of this.epochIndex.get(epoch) || []) {
125
- this.cache.delete(rootHex);
126
- }
127
- this.epochIndex.delete(epoch);
128
- }
129
- }
130
- //# sourceMappingURL=blockStateCacheImpl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"blockStateCacheImpl.js","sourceRoot":"","sources":["../../../src/chain/stateCache/blockStateCacheImpl.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAG3C,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,CAAC;AAE1B;;;;GAIG;AACH,MAAM,OAAO,mBAAmB;IAC9B;;OAEG;IACM,SAAS,CAAS;IAEV,KAAK,CAAgD;IACtE,8BAA8B;IACb,UAAU,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC3C,OAAO,CAA2C;IACnE;;;OAGG;IACK,IAAI,GAAkE,IAAI,CAAC;IAEnF,YAAY,EAAC,SAAS,GAAG,UAAU,EAAE,OAAO,EAAiD;QAC3F,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACjD,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;YAClC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IAED,GAAG,CAAC,OAAgB;QAClB,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1F,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEzD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,IAA+B;QACjC,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAC3C,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAClC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,YAAY,CAAC,IAAsC;QACjD,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;YAC3C,IAAI,CAAC,IAAI,GAAG,EAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,YAAY;QACV,MAAM,KAAK,CAAC,yCAAyC,CAAC,CAAC;IACzD,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,gBAAyB;QAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3C,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACjC,iFAAiF;YACjF,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9D,IAAI,GAAG,KAAK,gBAAgB,EAAE,CAAC;oBAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjC,IAAI,IAAI,EAAE,CAAC;wBACT,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;wBACtD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACzB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,cAAqB;QACxC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;YAC3C,IAAI,KAAK,GAAG,cAAc,EAAE,CAAC;gBAC3B,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED,0DAA0D;IAC1D,WAAW;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7D,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;YACrC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;YACzC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;YAC3C,eAAe,EAAE,KAAK;SACvB,CAAC,CAAC,CAAC;IACN,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IAC7B,CAAC;IAEO,mBAAmB,CAAC,KAAY;QACtC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YACvD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;CACF"}
@@ -1,60 +0,0 @@
1
- import { routes } from "@lodestar/api";
2
- import { CachedBeaconStateAllForks } from "@lodestar/state-transition";
3
- import { Epoch, RootHex, phase0 } from "@lodestar/types";
4
- import { Metrics } from "../../metrics/index.js";
5
- import { CheckpointStateCache } from "./types.js";
6
- export type CheckpointHex = {
7
- epoch: Epoch;
8
- rootHex: RootHex;
9
- };
10
- /**
11
- * In memory cache of CachedBeaconState
12
- * belonging to checkpoint
13
- *
14
- * Similar API to Repository
15
- */
16
- export declare class InMemoryCheckpointStateCache implements CheckpointStateCache {
17
- private readonly cache;
18
- /** Epoch -> Set<blockRoot> */
19
- private readonly epochIndex;
20
- /**
21
- * Max number of epochs allowed in the cache
22
- */
23
- private readonly maxEpochs;
24
- private readonly metrics;
25
- private preComputedCheckpoint;
26
- private preComputedCheckpointHits;
27
- constructor({ metrics }: {
28
- metrics?: Metrics | null;
29
- }, { maxEpochs }?: {
30
- maxEpochs?: number;
31
- });
32
- getOrReload(cp: CheckpointHex): Promise<CachedBeaconStateAllForks | null>;
33
- getStateOrBytes(cp: CheckpointHex): Promise<Uint8Array | CachedBeaconStateAllForks | null>;
34
- getOrReloadLatest(rootHex: string, maxEpoch: number): Promise<CachedBeaconStateAllForks | null>;
35
- processState(): Promise<number>;
36
- get(cp: CheckpointHex): CachedBeaconStateAllForks | null;
37
- add(cp: phase0.Checkpoint, item: CachedBeaconStateAllForks): void;
38
- /**
39
- * Searches for the latest cached state with a `root`, starting with `epoch` and descending
40
- */
41
- getLatest(rootHex: RootHex, maxEpoch: Epoch): CachedBeaconStateAllForks | null;
42
- /**
43
- * Update the precomputed checkpoint and return the number of his for the
44
- * previous one (if any).
45
- */
46
- updatePreComputedCheckpoint(rootHex: RootHex, epoch: Epoch): number | null;
47
- pruneFinalized(finalizedEpoch: Epoch): void;
48
- prune(finalizedEpoch: Epoch, justifiedEpoch: Epoch): void;
49
- delete(cp: phase0.Checkpoint): void;
50
- deleteAllEpochItems(epoch: Epoch): void;
51
- clear(): void;
52
- /** ONLY FOR DEBUGGING PURPOSES. For lodestar debug API */
53
- dumpSummary(): routes.lodestar.StateCacheItem[];
54
- getStates(): IterableIterator<CachedBeaconStateAllForks>;
55
- /** ONLY FOR DEBUGGING PURPOSES. For spec tests on error */
56
- dumpCheckpointKeys(): string[];
57
- }
58
- export declare function toCheckpointHex(checkpoint: phase0.Checkpoint): CheckpointHex;
59
- export declare function toCheckpointKey(cp: CheckpointHex): string;
60
- //# sourceMappingURL=inMemoryCheckpointsCache.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inMemoryCheckpointsCache.d.ts","sourceRoot":"","sources":["../../../src/chain/stateCache/inMemoryCheckpointsCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;AACrC,OAAO,EAAC,yBAAyB,EAAC,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAEvD,OAAO,EAAC,OAAO,EAAC,MAAM,wBAAwB,CAAC;AAE/C,OAAO,EAAgB,oBAAoB,EAAC,MAAM,YAAY,CAAC;AAE/D,MAAM,MAAM,aAAa,GAAG;IAAC,KAAK,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAC,CAAC;AAG7D;;;;;GAKG;AACH,qBAAa,4BAA6B,YAAW,oBAAoB;IACvE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgD;IACtE,8BAA8B;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA2D;IACtF;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6C;IACrE,OAAO,CAAC,qBAAqB,CAAuB;IACpD,OAAO,CAAC,yBAAyB,CAAuB;gBAE5C,EAAC,OAAc,EAAC,EAAE;QAAC,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;KAAC,EAAE,EAAC,SAAsB,EAAC,GAAE;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAM;IAcvG,WAAW,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC;IAIzE,eAAe,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,GAAG,yBAAyB,GAAG,IAAI,CAAC;IAI1F,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC;IAI/F,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAKrC,GAAG,CAAC,EAAE,EAAE,aAAa,GAAG,yBAAyB,GAAG,IAAI;IAoBxD,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,yBAAyB,GAAG,IAAI;IAWjE;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,GAAG,yBAAyB,GAAG,IAAI;IAa9E;;;OAGG;IACH,2BAA2B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI;IAO1E,cAAc,CAAC,cAAc,EAAE,KAAK,GAAG,IAAI;IAQ3C,KAAK,CAAC,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,GAAG,IAAI;IAWzD,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,UAAU,GAAG,IAAI;IAYnC,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAOvC,KAAK,IAAI,IAAI;IAKb,0DAA0D;IAC1D,WAAW,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE;IAU/C,SAAS,IAAI,gBAAgB,CAAC,yBAAyB,CAAC;IAIxD,2DAA2D;IAC3D,kBAAkB,IAAI,MAAM,EAAE;CAG/B;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,GAAG,aAAa,CAK5E;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,aAAa,GAAG,MAAM,CAEzD"}
@@ -1,156 +0,0 @@
1
- import { MapDef, toRootHex } from "@lodestar/utils";
2
- import { MapTracker } from "./mapMetrics.js";
3
- import { CacheItemType } from "./types.js";
4
- const MAX_EPOCHS = 10;
5
- /**
6
- * In memory cache of CachedBeaconState
7
- * belonging to checkpoint
8
- *
9
- * Similar API to Repository
10
- */
11
- export class InMemoryCheckpointStateCache {
12
- cache;
13
- /** Epoch -> Set<blockRoot> */
14
- epochIndex = new MapDef(() => new Set());
15
- /**
16
- * Max number of epochs allowed in the cache
17
- */
18
- maxEpochs;
19
- metrics;
20
- preComputedCheckpoint = null;
21
- preComputedCheckpointHits = null;
22
- constructor({ metrics = null }, { maxEpochs = MAX_EPOCHS } = {}) {
23
- this.cache = new MapTracker(metrics?.cpStateCache);
24
- if (metrics) {
25
- this.metrics = metrics.cpStateCache;
26
- metrics.cpStateCache.size.addCollect(() => metrics.cpStateCache.size.set({ type: CacheItemType.inMemory }, this.cache.size));
27
- metrics.cpStateCache.epochSize.addCollect(() => metrics.cpStateCache.epochSize.set({ type: CacheItemType.inMemory }, this.epochIndex.size));
28
- }
29
- this.maxEpochs = maxEpochs;
30
- }
31
- async getOrReload(cp) {
32
- return this.get(cp);
33
- }
34
- async getStateOrBytes(cp) {
35
- return this.get(cp);
36
- }
37
- async getOrReloadLatest(rootHex, maxEpoch) {
38
- return this.getLatest(rootHex, maxEpoch);
39
- }
40
- async processState() {
41
- // do nothing, this class does not support prunning
42
- return 0;
43
- }
44
- get(cp) {
45
- this.metrics?.lookups.inc();
46
- const cpKey = toCheckpointKey(cp);
47
- const item = this.cache.get(cpKey);
48
- if (!item) {
49
- return null;
50
- }
51
- this.metrics?.hits.inc();
52
- if (cpKey === this.preComputedCheckpoint) {
53
- this.preComputedCheckpointHits = (this.preComputedCheckpointHits ?? 0) + 1;
54
- }
55
- this.metrics?.stateClonedCount.observe(item.clonedCount);
56
- return item;
57
- }
58
- add(cp, item) {
59
- const cpHex = toCheckpointHex(cp);
60
- const key = toCheckpointKey(cpHex);
61
- if (this.cache.has(key)) {
62
- return;
63
- }
64
- this.metrics?.adds.inc();
65
- this.cache.set(key, item);
66
- this.epochIndex.getOrDefault(cp.epoch).add(cpHex.rootHex);
67
- }
68
- /**
69
- * Searches for the latest cached state with a `root`, starting with `epoch` and descending
70
- */
71
- getLatest(rootHex, maxEpoch) {
72
- // sort epochs in descending order, only consider epochs lte `epoch`
73
- const epochs = Array.from(this.epochIndex.keys())
74
- .sort((a, b) => b - a)
75
- .filter((e) => e <= maxEpoch);
76
- for (const epoch of epochs) {
77
- if (this.epochIndex.get(epoch)?.has(rootHex)) {
78
- return this.get({ rootHex, epoch });
79
- }
80
- }
81
- return null;
82
- }
83
- /**
84
- * Update the precomputed checkpoint and return the number of his for the
85
- * previous one (if any).
86
- */
87
- updatePreComputedCheckpoint(rootHex, epoch) {
88
- const previousHits = this.preComputedCheckpointHits;
89
- this.preComputedCheckpoint = toCheckpointKey({ rootHex, epoch });
90
- this.preComputedCheckpointHits = 0;
91
- return previousHits;
92
- }
93
- pruneFinalized(finalizedEpoch) {
94
- for (const epoch of this.epochIndex.keys()) {
95
- if (epoch < finalizedEpoch) {
96
- this.deleteAllEpochItems(epoch);
97
- }
98
- }
99
- }
100
- prune(finalizedEpoch, justifiedEpoch) {
101
- const epochs = Array.from(this.epochIndex.keys()).filter((epoch) => epoch !== finalizedEpoch && epoch !== justifiedEpoch);
102
- if (epochs.length > this.maxEpochs) {
103
- for (const epoch of epochs.slice(0, epochs.length - this.maxEpochs)) {
104
- this.deleteAllEpochItems(epoch);
105
- }
106
- }
107
- }
108
- delete(cp) {
109
- this.cache.delete(toCheckpointKey(toCheckpointHex(cp)));
110
- const epochKey = toRootHex(cp.root);
111
- const value = this.epochIndex.get(cp.epoch);
112
- if (value) {
113
- value.delete(epochKey);
114
- if (value.size === 0) {
115
- this.epochIndex.delete(cp.epoch);
116
- }
117
- }
118
- }
119
- deleteAllEpochItems(epoch) {
120
- for (const rootHex of this.epochIndex.get(epoch) || []) {
121
- this.cache.delete(toCheckpointKey({ rootHex, epoch }));
122
- }
123
- this.epochIndex.delete(epoch);
124
- }
125
- clear() {
126
- this.cache.clear();
127
- this.epochIndex.clear();
128
- }
129
- /** ONLY FOR DEBUGGING PURPOSES. For lodestar debug API */
130
- dumpSummary() {
131
- return Array.from(this.cache.entries()).map(([key, state]) => ({
132
- slot: state.slot,
133
- root: toRootHex(state.hashTreeRoot()),
134
- reads: this.cache.readCount.get(key) ?? 0,
135
- lastRead: this.cache.lastRead.get(key) ?? 0,
136
- checkpointState: true,
137
- }));
138
- }
139
- getStates() {
140
- return this.cache.values();
141
- }
142
- /** ONLY FOR DEBUGGING PURPOSES. For spec tests on error */
143
- dumpCheckpointKeys() {
144
- return Array.from(this.cache.keys());
145
- }
146
- }
147
- export function toCheckpointHex(checkpoint) {
148
- return {
149
- epoch: checkpoint.epoch,
150
- rootHex: toRootHex(checkpoint.root),
151
- };
152
- }
153
- export function toCheckpointKey(cp) {
154
- return `${cp.rootHex}:${cp.epoch}`;
155
- }
156
- //# sourceMappingURL=inMemoryCheckpointsCache.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inMemoryCheckpointsCache.js","sourceRoot":"","sources":["../../../src/chain/stateCache/inMemoryCheckpointsCache.ts"],"names":[],"mappings":"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"}