@lodestar/beacon-node 1.40.0-dev.9e8478fc70 → 1.40.0-dev.ade3accfa0

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 (386) 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 -9
  3. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  4. package/lib/api/impl/lodestar/index.d.ts.map +1 -1
  5. package/lib/api/impl/lodestar/index.js +24 -0
  6. package/lib/api/impl/lodestar/index.js.map +1 -1
  7. package/lib/api/impl/validator/index.d.ts.map +1 -1
  8. package/lib/api/impl/validator/index.js.map +1 -1
  9. package/lib/api/rest/base.d.ts.map +1 -1
  10. package/lib/api/rest/base.js +12 -10
  11. package/lib/api/rest/base.js.map +1 -1
  12. package/lib/chain/ColumnReconstructionTracker.d.ts +2 -0
  13. package/lib/chain/ColumnReconstructionTracker.d.ts.map +1 -1
  14. package/lib/chain/ColumnReconstructionTracker.js +7 -3
  15. package/lib/chain/ColumnReconstructionTracker.js.map +1 -1
  16. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  17. package/lib/chain/archiveStore/archiveStore.js +10 -4
  18. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  19. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +1 -1
  20. package/lib/chain/archiveStore/historicalState/getHistoricalState.js +2 -1
  21. package/lib/chain/archiveStore/historicalState/getHistoricalState.js.map +1 -1
  22. package/lib/chain/blocks/blockInput/blockInput.d.ts +28 -0
  23. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
  24. package/lib/chain/blocks/blockInput/blockInput.js +38 -3
  25. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  26. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  27. package/lib/chain/blocks/importBlock.js +10 -2
  28. package/lib/chain/blocks/importBlock.js.map +1 -1
  29. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  30. package/lib/chain/blocks/verifyBlock.js +1 -1
  31. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  32. package/lib/chain/blocks/verifyBlocksSignatures.d.ts +2 -2
  33. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  34. package/lib/chain/blocks/verifyBlocksSignatures.js +2 -2
  35. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  36. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +1 -1
  37. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js +1 -2
  38. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js.map +1 -1
  39. package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +1 -1
  40. package/lib/chain/blocks/writeBlockInputToDb.js +8 -0
  41. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  42. package/lib/chain/bls/multithread/index.d.ts +3 -1
  43. package/lib/chain/bls/multithread/index.d.ts.map +1 -1
  44. package/lib/chain/bls/multithread/index.js +5 -3
  45. package/lib/chain/bls/multithread/index.js.map +1 -1
  46. package/lib/chain/bls/multithread/jobItem.d.ts +2 -2
  47. package/lib/chain/bls/multithread/jobItem.d.ts.map +1 -1
  48. package/lib/chain/bls/multithread/jobItem.js +2 -2
  49. package/lib/chain/bls/multithread/jobItem.js.map +1 -1
  50. package/lib/chain/bls/singleThread.d.ts +4 -2
  51. package/lib/chain/bls/singleThread.d.ts.map +1 -1
  52. package/lib/chain/bls/singleThread.js +4 -2
  53. package/lib/chain/bls/singleThread.js.map +1 -1
  54. package/lib/chain/bls/utils.d.ts +2 -2
  55. package/lib/chain/bls/utils.d.ts.map +1 -1
  56. package/lib/chain/bls/utils.js +9 -6
  57. package/lib/chain/bls/utils.js.map +1 -1
  58. package/lib/chain/chain.d.ts +8 -3
  59. package/lib/chain/chain.d.ts.map +1 -1
  60. package/lib/chain/chain.js +44 -36
  61. package/lib/chain/chain.js.map +1 -1
  62. package/lib/chain/errors/attestationError.d.ts +14 -1
  63. package/lib/chain/errors/attestationError.d.ts.map +1 -1
  64. package/lib/chain/errors/attestationError.js +8 -0
  65. package/lib/chain/errors/attestationError.js.map +1 -1
  66. package/lib/chain/errors/executionPayloadBid.d.ts +48 -0
  67. package/lib/chain/errors/executionPayloadBid.d.ts.map +1 -0
  68. package/lib/chain/errors/executionPayloadBid.js +15 -0
  69. package/lib/chain/errors/executionPayloadBid.js.map +1 -0
  70. package/lib/chain/errors/executionPayloadEnvelope.d.ts +48 -0
  71. package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -0
  72. package/lib/chain/errors/executionPayloadEnvelope.js +16 -0
  73. package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -0
  74. package/lib/chain/errors/index.d.ts +3 -0
  75. package/lib/chain/errors/index.d.ts.map +1 -1
  76. package/lib/chain/errors/index.js +3 -0
  77. package/lib/chain/errors/index.js.map +1 -1
  78. package/lib/chain/errors/payloadAttestation.d.ts +34 -0
  79. package/lib/chain/errors/payloadAttestation.d.ts.map +1 -0
  80. package/lib/chain/errors/payloadAttestation.js +13 -0
  81. package/lib/chain/errors/payloadAttestation.js.map +1 -0
  82. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  83. package/lib/chain/forkChoice/index.js +18 -0
  84. package/lib/chain/forkChoice/index.js.map +1 -1
  85. package/lib/chain/initState.d.ts.map +1 -1
  86. package/lib/chain/initState.js +2 -2
  87. package/lib/chain/initState.js.map +1 -1
  88. package/lib/chain/interface.d.ts +7 -2
  89. package/lib/chain/interface.d.ts.map +1 -1
  90. package/lib/chain/interface.js.map +1 -1
  91. package/lib/chain/lightClient/index.d.ts +2 -0
  92. package/lib/chain/lightClient/index.d.ts.map +1 -1
  93. package/lib/chain/lightClient/index.js +11 -6
  94. package/lib/chain/lightClient/index.js.map +1 -1
  95. package/lib/chain/opPools/executionPayloadBidPool.d.ts +21 -0
  96. package/lib/chain/opPools/executionPayloadBidPool.d.ts.map +1 -0
  97. package/lib/chain/opPools/executionPayloadBidPool.js +57 -0
  98. package/lib/chain/opPools/executionPayloadBidPool.js.map +1 -0
  99. package/lib/chain/opPools/index.d.ts +2 -0
  100. package/lib/chain/opPools/index.d.ts.map +1 -1
  101. package/lib/chain/opPools/index.js +2 -0
  102. package/lib/chain/opPools/index.js.map +1 -1
  103. package/lib/chain/opPools/payloadAttestationPool.d.ts +24 -0
  104. package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -0
  105. package/lib/chain/opPools/payloadAttestationPool.js +109 -0
  106. package/lib/chain/opPools/payloadAttestationPool.js.map +1 -0
  107. package/lib/chain/options.d.ts +0 -1
  108. package/lib/chain/options.d.ts.map +1 -1
  109. package/lib/chain/options.js +0 -1
  110. package/lib/chain/options.js.map +1 -1
  111. package/lib/chain/regen/interface.d.ts +2 -1
  112. package/lib/chain/regen/interface.d.ts.map +1 -1
  113. package/lib/chain/regen/interface.js +1 -0
  114. package/lib/chain/regen/interface.js.map +1 -1
  115. package/lib/chain/regen/queued.d.ts +1 -1
  116. package/lib/chain/regen/queued.d.ts.map +1 -1
  117. package/lib/chain/regen/queued.js.map +1 -1
  118. package/lib/chain/regen/regen.d.ts +2 -0
  119. package/lib/chain/regen/regen.d.ts.map +1 -1
  120. package/lib/chain/regen/regen.js +4 -1
  121. package/lib/chain/regen/regen.js.map +1 -1
  122. package/lib/chain/seenCache/index.d.ts +3 -1
  123. package/lib/chain/seenCache/index.d.ts.map +1 -1
  124. package/lib/chain/seenCache/index.js +3 -1
  125. package/lib/chain/seenCache/index.js.map +1 -1
  126. package/lib/chain/seenCache/seenAttesters.d.ts +5 -0
  127. package/lib/chain/seenCache/seenAttesters.d.ts.map +1 -1
  128. package/lib/chain/seenCache/seenAttesters.js +5 -0
  129. package/lib/chain/seenCache/seenAttesters.js.map +1 -1
  130. package/lib/chain/seenCache/seenExecutionPayloadBids.d.ts +12 -0
  131. package/lib/chain/seenCache/seenExecutionPayloadBids.d.ts.map +1 -0
  132. package/lib/chain/seenCache/seenExecutionPayloadBids.js +30 -0
  133. package/lib/chain/seenCache/seenExecutionPayloadBids.js.map +1 -0
  134. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.d.ts +15 -0
  135. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.d.ts.map +1 -0
  136. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.js +28 -0
  137. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.js.map +1 -0
  138. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +7 -7
  139. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
  140. package/lib/chain/seenCache/seenGossipBlockInput.js +23 -12
  141. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  142. package/lib/chain/serializeState.d.ts.map +1 -1
  143. package/lib/chain/serializeState.js +2 -1
  144. package/lib/chain/serializeState.js.map +1 -1
  145. package/lib/chain/stateCache/index.d.ts +0 -2
  146. package/lib/chain/stateCache/index.d.ts.map +1 -1
  147. package/lib/chain/stateCache/index.js +0 -2
  148. package/lib/chain/stateCache/index.js.map +1 -1
  149. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +2 -1
  150. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  151. package/lib/chain/stateCache/persistentCheckpointsCache.js +3 -0
  152. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  153. package/lib/chain/validation/aggregateAndProof.js +35 -14
  154. package/lib/chain/validation/aggregateAndProof.js.map +1 -1
  155. package/lib/chain/validation/attestation.d.ts +2 -2
  156. package/lib/chain/validation/attestation.d.ts.map +1 -1
  157. package/lib/chain/validation/attestation.js +27 -8
  158. package/lib/chain/validation/attestation.js.map +1 -1
  159. package/lib/chain/validation/attesterSlashing.d.ts.map +1 -1
  160. package/lib/chain/validation/attesterSlashing.js +1 -1
  161. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  162. package/lib/chain/validation/blobSidecar.d.ts.map +1 -1
  163. package/lib/chain/validation/blobSidecar.js +4 -4
  164. package/lib/chain/validation/blobSidecar.js.map +1 -1
  165. package/lib/chain/validation/block.d.ts.map +1 -1
  166. package/lib/chain/validation/block.js +6 -6
  167. package/lib/chain/validation/block.js.map +1 -1
  168. package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -1
  169. package/lib/chain/validation/dataColumnSidecar.js +4 -4
  170. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  171. package/lib/chain/validation/executionPayloadBid.d.ts +5 -0
  172. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -0
  173. package/lib/chain/validation/executionPayloadBid.js +104 -0
  174. package/lib/chain/validation/executionPayloadBid.js.map +1 -0
  175. package/lib/chain/validation/executionPayloadEnvelope.d.ts +5 -0
  176. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -0
  177. package/lib/chain/validation/executionPayloadEnvelope.js +89 -0
  178. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -0
  179. package/lib/chain/validation/payloadAttestationMessage.d.ts +9 -0
  180. package/lib/chain/validation/payloadAttestationMessage.d.ts.map +1 -0
  181. package/lib/chain/validation/payloadAttestationMessage.js +72 -0
  182. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -0
  183. package/lib/chain/validation/proposerSlashing.js +1 -1
  184. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  185. package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts +2 -3
  186. package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts.map +1 -1
  187. package/lib/chain/validation/signatureSets/aggregateAndProof.js +8 -3
  188. package/lib/chain/validation/signatureSets/aggregateAndProof.js.map +1 -1
  189. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts +2 -2
  190. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -1
  191. package/lib/chain/validation/signatureSets/contributionAndProof.js +3 -3
  192. package/lib/chain/validation/signatureSets/contributionAndProof.js.map +1 -1
  193. package/lib/chain/validation/signatureSets/selectionProof.d.ts +2 -3
  194. package/lib/chain/validation/signatureSets/selectionProof.d.ts.map +1 -1
  195. package/lib/chain/validation/signatureSets/selectionProof.js +8 -3
  196. package/lib/chain/validation/signatureSets/selectionProof.js.map +1 -1
  197. package/lib/chain/validation/signatureSets/syncCommittee.d.ts +2 -2
  198. package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -1
  199. package/lib/chain/validation/signatureSets/syncCommittee.js +3 -3
  200. package/lib/chain/validation/signatureSets/syncCommittee.js.map +1 -1
  201. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts +1 -2
  202. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -1
  203. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js +2 -2
  204. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js.map +1 -1
  205. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts +2 -2
  206. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -1
  207. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js +3 -3
  208. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js.map +1 -1
  209. package/lib/chain/validation/syncCommittee.js +1 -1
  210. package/lib/chain/validation/syncCommittee.js.map +1 -1
  211. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -1
  212. package/lib/chain/validation/syncCommitteeContributionAndProof.js +3 -5
  213. package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
  214. package/lib/chain/validation/voluntaryExit.js +1 -1
  215. package/lib/chain/validation/voluntaryExit.js.map +1 -1
  216. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  217. package/lib/chain/validatorMonitor.js +7 -4
  218. package/lib/chain/validatorMonitor.js.map +1 -1
  219. package/lib/db/repositories/checkpointState.js +0 -1
  220. package/lib/db/repositories/checkpointState.js.map +1 -1
  221. package/lib/metrics/metrics/lodestar.d.ts +20 -0
  222. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  223. package/lib/metrics/metrics/lodestar.js +40 -0
  224. package/lib/metrics/metrics/lodestar.js.map +1 -1
  225. package/lib/network/core/networkCore.d.ts +3 -0
  226. package/lib/network/core/networkCore.d.ts.map +1 -1
  227. package/lib/network/core/networkCore.js +9 -0
  228. package/lib/network/core/networkCore.js.map +1 -1
  229. package/lib/network/core/networkCoreWorker.js +3 -0
  230. package/lib/network/core/networkCoreWorker.js.map +1 -1
  231. package/lib/network/core/networkCoreWorkerHandler.d.ts +3 -0
  232. package/lib/network/core/networkCoreWorkerHandler.d.ts.map +1 -1
  233. package/lib/network/core/networkCoreWorkerHandler.js +9 -0
  234. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  235. package/lib/network/core/types.d.ts +3 -0
  236. package/lib/network/core/types.d.ts.map +1 -1
  237. package/lib/network/gossip/gossipsub.d.ts +34 -0
  238. package/lib/network/gossip/gossipsub.d.ts.map +1 -1
  239. package/lib/network/gossip/gossipsub.js +123 -0
  240. package/lib/network/gossip/gossipsub.js.map +1 -1
  241. package/lib/network/gossip/interface.d.ts +20 -2
  242. package/lib/network/gossip/interface.d.ts.map +1 -1
  243. package/lib/network/gossip/interface.js +3 -0
  244. package/lib/network/gossip/interface.js.map +1 -1
  245. package/lib/network/gossip/scoringParameters.d.ts.map +1 -1
  246. package/lib/network/gossip/scoringParameters.js +38 -2
  247. package/lib/network/gossip/scoringParameters.js.map +1 -1
  248. package/lib/network/gossip/topic.d.ts +77 -1
  249. package/lib/network/gossip/topic.d.ts.map +1 -1
  250. package/lib/network/gossip/topic.js +20 -0
  251. package/lib/network/gossip/topic.js.map +1 -1
  252. package/lib/network/network.d.ts +3 -0
  253. package/lib/network/network.d.ts.map +1 -1
  254. package/lib/network/network.js +9 -0
  255. package/lib/network/network.js.map +1 -1
  256. package/lib/network/options.d.ts +6 -0
  257. package/lib/network/options.d.ts.map +1 -1
  258. package/lib/network/options.js.map +1 -1
  259. package/lib/network/peers/peerManager.d.ts.map +1 -1
  260. package/lib/network/peers/peerManager.js +9 -0
  261. package/lib/network/peers/peerManager.js.map +1 -1
  262. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  263. package/lib/network/processor/gossipHandlers.js +35 -1
  264. package/lib/network/processor/gossipHandlers.js.map +1 -1
  265. package/lib/network/processor/gossipQueues/index.d.ts.map +1 -1
  266. package/lib/network/processor/gossipQueues/index.js +16 -0
  267. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  268. package/lib/network/processor/index.d.ts.map +1 -1
  269. package/lib/network/processor/index.js +3 -0
  270. package/lib/network/processor/index.js.map +1 -1
  271. package/lib/sync/backfill/backfill.d.ts.map +1 -1
  272. package/lib/sync/backfill/backfill.js +3 -4
  273. package/lib/sync/backfill/backfill.js.map +1 -1
  274. package/lib/sync/backfill/verify.d.ts +1 -2
  275. package/lib/sync/backfill/verify.d.ts.map +1 -1
  276. package/lib/sync/backfill/verify.js +2 -2
  277. package/lib/sync/backfill/verify.js.map +1 -1
  278. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  279. package/lib/sync/utils/downloadByRange.js +2 -2
  280. package/lib/sync/utils/downloadByRange.js.map +1 -1
  281. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  282. package/lib/sync/utils/downloadByRoot.js +1 -2
  283. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  284. package/lib/util/queue/itemQueue.d.ts +10 -0
  285. package/lib/util/queue/itemQueue.d.ts.map +1 -1
  286. package/lib/util/queue/itemQueue.js +57 -0
  287. package/lib/util/queue/itemQueue.js.map +1 -1
  288. package/package.json +16 -16
  289. package/src/api/impl/beacon/blocks/index.ts +31 -19
  290. package/src/api/impl/lodestar/index.ts +29 -0
  291. package/src/api/impl/validator/index.ts +2 -1
  292. package/src/api/rest/base.ts +15 -13
  293. package/src/chain/ColumnReconstructionTracker.ts +8 -4
  294. package/src/chain/archiveStore/archiveStore.ts +10 -4
  295. package/src/chain/archiveStore/historicalState/getHistoricalState.ts +2 -1
  296. package/src/chain/blocks/blockInput/blockInput.ts +47 -4
  297. package/src/chain/blocks/importBlock.ts +10 -2
  298. package/src/chain/blocks/verifyBlock.ts +0 -1
  299. package/src/chain/blocks/verifyBlocksSignatures.ts +4 -12
  300. package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +1 -2
  301. package/src/chain/blocks/writeBlockInputToDb.ts +9 -0
  302. package/src/chain/bls/multithread/index.ts +7 -4
  303. package/src/chain/bls/multithread/jobItem.ts +7 -3
  304. package/src/chain/bls/singleThread.ts +5 -3
  305. package/src/chain/bls/utils.ts +15 -7
  306. package/src/chain/chain.ts +52 -38
  307. package/src/chain/errors/attestationError.ts +11 -1
  308. package/src/chain/errors/executionPayloadBid.ts +35 -0
  309. package/src/chain/errors/executionPayloadEnvelope.ts +34 -0
  310. package/src/chain/errors/index.ts +3 -0
  311. package/src/chain/errors/payloadAttestation.ts +25 -0
  312. package/src/chain/forkChoice/index.ts +19 -0
  313. package/src/chain/initState.ts +2 -2
  314. package/src/chain/interface.ts +16 -1
  315. package/src/chain/lightClient/index.ts +12 -6
  316. package/src/chain/opPools/executionPayloadBidPool.ts +77 -0
  317. package/src/chain/opPools/index.ts +2 -0
  318. package/src/chain/opPools/payloadAttestationPool.ts +157 -0
  319. package/src/chain/options.ts +0 -2
  320. package/src/chain/regen/interface.ts +2 -1
  321. package/src/chain/regen/queued.ts +1 -2
  322. package/src/chain/regen/regen.ts +6 -1
  323. package/src/chain/seenCache/index.ts +3 -1
  324. package/src/chain/seenCache/seenAttesters.ts +5 -0
  325. package/src/chain/seenCache/seenExecutionPayloadBids.ts +35 -0
  326. package/src/chain/seenCache/seenExecutionPayloadEnvelope.ts +34 -0
  327. package/src/chain/seenCache/seenGossipBlockInput.ts +31 -12
  328. package/src/chain/serializeState.ts +2 -1
  329. package/src/chain/stateCache/index.ts +0 -2
  330. package/src/chain/stateCache/persistentCheckpointsCache.ts +6 -2
  331. package/src/chain/validation/aggregateAndProof.ts +36 -14
  332. package/src/chain/validation/attestation.ts +33 -16
  333. package/src/chain/validation/attesterSlashing.ts +1 -6
  334. package/src/chain/validation/blobSidecar.ts +3 -8
  335. package/src/chain/validation/block.ts +6 -6
  336. package/src/chain/validation/dataColumnSidecar.ts +3 -8
  337. package/src/chain/validation/executionPayloadBid.ts +141 -0
  338. package/src/chain/validation/executionPayloadEnvelope.ts +122 -0
  339. package/src/chain/validation/payloadAttestationMessage.ts +109 -0
  340. package/src/chain/validation/proposerSlashing.ts +1 -6
  341. package/src/chain/validation/signatureSets/aggregateAndProof.ts +9 -14
  342. package/src/chain/validation/signatureSets/contributionAndProof.ts +2 -4
  343. package/src/chain/validation/signatureSets/selectionProof.ts +9 -9
  344. package/src/chain/validation/signatureSets/syncCommittee.ts +2 -4
  345. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +2 -3
  346. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +2 -4
  347. package/src/chain/validation/syncCommittee.ts +1 -1
  348. package/src/chain/validation/syncCommitteeContributionAndProof.ts +3 -5
  349. package/src/chain/validation/voluntaryExit.ts +1 -1
  350. package/src/chain/validatorMonitor.ts +10 -5
  351. package/src/db/repositories/checkpointState.ts +1 -1
  352. package/src/metrics/metrics/lodestar.ts +40 -0
  353. package/src/network/core/networkCore.ts +12 -0
  354. package/src/network/core/networkCoreWorker.ts +3 -0
  355. package/src/network/core/networkCoreWorkerHandler.ts +9 -0
  356. package/src/network/core/types.ts +6 -0
  357. package/src/network/gossip/gossipsub.ts +147 -1
  358. package/src/network/gossip/interface.ts +17 -0
  359. package/src/network/gossip/scoringParameters.ts +44 -2
  360. package/src/network/gossip/topic.ts +21 -0
  361. package/src/network/network.ts +12 -0
  362. package/src/network/options.ts +6 -0
  363. package/src/network/peers/peerManager.ts +11 -0
  364. package/src/network/processor/gossipHandlers.ts +49 -1
  365. package/src/network/processor/gossipQueues/index.ts +16 -0
  366. package/src/network/processor/index.ts +3 -0
  367. package/src/sync/backfill/backfill.ts +3 -4
  368. package/src/sync/backfill/verify.ts +2 -3
  369. package/src/sync/utils/downloadByRange.ts +2 -2
  370. package/src/sync/utils/downloadByRoot.ts +1 -2
  371. package/src/util/queue/itemQueue.ts +62 -0
  372. package/lib/chain/stateCache/blockStateCacheImpl.d.ts +0 -54
  373. package/lib/chain/stateCache/blockStateCacheImpl.d.ts.map +0 -1
  374. package/lib/chain/stateCache/blockStateCacheImpl.js +0 -130
  375. package/lib/chain/stateCache/blockStateCacheImpl.js.map +0 -1
  376. package/lib/chain/stateCache/inMemoryCheckpointsCache.d.ts +0 -60
  377. package/lib/chain/stateCache/inMemoryCheckpointsCache.d.ts.map +0 -1
  378. package/lib/chain/stateCache/inMemoryCheckpointsCache.js +0 -156
  379. package/lib/chain/stateCache/inMemoryCheckpointsCache.js.map +0 -1
  380. package/lib/util/bytes.d.ts +0 -3
  381. package/lib/util/bytes.d.ts.map +0 -1
  382. package/lib/util/bytes.js +0 -11
  383. package/lib/util/bytes.js.map +0 -1
  384. package/src/chain/stateCache/blockStateCacheImpl.ts +0 -149
  385. package/src/chain/stateCache/inMemoryCheckpointsCache.ts +0 -192
  386. package/src/util/bytes.ts +0 -11
@@ -721,6 +721,17 @@ export class PeerManager {
721
721
  // NOTE: libp2p may emit two "peer:connect" events: One for inbound, one for outbound
722
722
  // If that happens, it's okay. Only the "outbound" connection triggers immediate action
723
723
  const now = Date.now();
724
+
725
+ // Ethereum uses secp256k1 for node IDs, reject peers with other key types
726
+ if (remotePeer.type !== "secp256k1") {
727
+ this.logger.debug("Peer does not have secp256k1 key, disconnecting", {
728
+ peer: remotePeerPrettyStr,
729
+ type: remotePeer.type,
730
+ });
731
+ void this.goodbyeAndDisconnect(remotePeer, GoodByeReasonCode.IRRELEVANT_NETWORK);
732
+ return;
733
+ }
734
+
724
735
  const nodeId = computeNodeId(remotePeer);
725
736
  const peerData: PeerData = {
726
737
  lastReceivedMsgUnixTsMs: direction === "outbound" ? 0 : now,
@@ -48,6 +48,8 @@ import {
48
48
  import {IBeaconChain} from "../../chain/interface.js";
49
49
  import {validateGossipBlobSidecar} from "../../chain/validation/blobSidecar.js";
50
50
  import {validateGossipDataColumnSidecar} from "../../chain/validation/dataColumnSidecar.js";
51
+ import {validateGossipExecutionPayloadBid} from "../../chain/validation/executionPayloadBid.js";
52
+ import {validateGossipExecutionPayloadEnvelope} from "../../chain/validation/executionPayloadEnvelope.js";
51
53
  import {
52
54
  AggregateAndProofValidationResult,
53
55
  GossipAttestation,
@@ -64,6 +66,7 @@ import {
64
66
  } from "../../chain/validation/index.js";
65
67
  import {validateLightClientFinalityUpdate} from "../../chain/validation/lightClientFinalityUpdate.js";
66
68
  import {validateLightClientOptimisticUpdate} from "../../chain/validation/lightClientOptimisticUpdate.js";
69
+ import {validateGossipPayloadAttestationMessage} from "../../chain/validation/payloadAttestationMessage.js";
67
70
  import {OpSource} from "../../chain/validatorMonitor.js";
68
71
  import {Metrics} from "../../metrics/index.js";
69
72
  import {kzgCommitmentToVersionedHash} from "../../util/blobs.js";
@@ -576,7 +579,7 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
576
579
  break;
577
580
  }
578
581
 
579
- if (!blockInput.hasAllData()) {
582
+ if (!blockInput.hasComputedAllData()) {
580
583
  // immediately attempt fetch of data columns from execution engine
581
584
  chain.getBlobsTracker.triggerGetBlobs(blockInput);
582
585
  // if we've received at least half of the columns, trigger reconstruction of the rest
@@ -815,6 +818,51 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
815
818
 
816
819
  chain.emitter.emit(routes.events.EventType.blsToExecutionChange, blsToExecutionChange);
817
820
  },
821
+ [GossipType.execution_payload]: async ({
822
+ gossipData,
823
+ topic,
824
+ }: GossipHandlerParamGeneric<GossipType.execution_payload>) => {
825
+ const {serializedData} = gossipData;
826
+ const executionPayloadEnvelope = sszDeserialize(topic, serializedData);
827
+ await validateGossipExecutionPayloadEnvelope(chain, executionPayloadEnvelope);
828
+
829
+ // TODO GLOAS: Handle valid envelope. Need an import flow that calls `processExecutionPayloadEnvelope` and fork choice
830
+ },
831
+ [GossipType.payload_attestation_message]: async ({
832
+ gossipData,
833
+ topic,
834
+ }: GossipHandlerParamGeneric<GossipType.payload_attestation_message>) => {
835
+ const {serializedData} = gossipData;
836
+ const payloadAttestationMessage = sszDeserialize(topic, serializedData);
837
+ const validationResult = await validateGossipPayloadAttestationMessage(chain, payloadAttestationMessage);
838
+
839
+ try {
840
+ const insertOutcome = chain.payloadAttestationPool.add(
841
+ payloadAttestationMessage,
842
+ validationResult.attDataRootHex,
843
+ validationResult.validatorCommitteeIndex
844
+ );
845
+ metrics?.opPool.payloadAttestationPool.gossipInsertOutcome.inc({insertOutcome});
846
+ } catch (e) {
847
+ logger.error("Error adding to payloadAttestation pool", {}, e as Error);
848
+ }
849
+ },
850
+ [GossipType.execution_payload_bid]: async ({
851
+ gossipData,
852
+ topic,
853
+ }: GossipHandlerParamGeneric<GossipType.execution_payload_bid>) => {
854
+ const {serializedData} = gossipData;
855
+ const executionPayloadBid = sszDeserialize(topic, serializedData);
856
+ await validateGossipExecutionPayloadBid(chain, executionPayloadBid);
857
+
858
+ // Handle valid payload bid by storing in a bid pool
859
+ try {
860
+ const insertOutcome = chain.executionPayloadBidPool.add(executionPayloadBid.message);
861
+ metrics?.opPool.executionPayloadBidPool.gossipInsertOutcome.inc({insertOutcome});
862
+ } catch (e) {
863
+ logger.error("Error adding to executionPayloadBid pool", {}, e as Error);
864
+ }
865
+ },
818
866
  };
819
867
  }
820
868
 
@@ -67,6 +67,22 @@ const linearGossipQueueOpts: {
67
67
  type: QueueType.FIFO,
68
68
  dropOpts: {type: DropType.count, count: 1},
69
69
  },
70
+ [GossipType.execution_payload]: {
71
+ maxLength: 1024,
72
+ type: QueueType.FIFO,
73
+ dropOpts: {type: DropType.count, count: 1},
74
+ },
75
+ [GossipType.payload_attestation_message]: {
76
+ maxLength: 1024,
77
+ type: QueueType.FIFO,
78
+ dropOpts: {type: DropType.count, count: 1},
79
+ },
80
+ // TODO GLOAS: It is hard to predict how many bids are there. Put 1024 for max length for now
81
+ [GossipType.execution_payload_bid]: {
82
+ maxLength: 1024,
83
+ type: QueueType.FIFO,
84
+ dropOpts: {type: DropType.count, count: 1},
85
+ },
70
86
  };
71
87
 
72
88
  const indexedGossipQueueOpts: {
@@ -78,6 +78,9 @@ const executeGossipWorkOrderObj: Record<GossipType, WorkOpts> = {
78
78
  [GossipType.sync_committee]: {},
79
79
  [GossipType.light_client_finality_update]: {},
80
80
  [GossipType.light_client_optimistic_update]: {},
81
+ [GossipType.execution_payload]: {bypassQueue: true},
82
+ [GossipType.payload_attestation_message]: {},
83
+ [GossipType.execution_payload_bid]: {},
81
84
  };
82
85
  const executeGossipWorkOrder = Object.keys(executeGossipWorkOrderObj) as (keyof typeof executeGossipWorkOrderObj)[];
83
86
 
@@ -4,13 +4,12 @@ import {BeaconConfig, ChainForkConfig} from "@lodestar/config";
4
4
  import {SLOTS_PER_EPOCH} from "@lodestar/params";
5
5
  import {BeaconStateAllForks, blockToHeader, computeAnchorCheckpoint} from "@lodestar/state-transition";
6
6
  import {Root, SignedBeaconBlock, Slot, phase0, ssz} from "@lodestar/types";
7
- import {ErrorAborted, Logger, sleep, toRootHex} from "@lodestar/utils";
7
+ import {ErrorAborted, Logger, byteArrayEquals, sleep, toRootHex} from "@lodestar/utils";
8
8
  import {IBeaconChain} from "../../chain/index.js";
9
9
  import {GENESIS_SLOT, ZERO_HASH} from "../../constants/index.js";
10
10
  import {IBeaconDb} from "../../db/index.js";
11
11
  import {Metrics} from "../../metrics/metrics.js";
12
12
  import {INetwork, NetworkEvent, NetworkEventData, PeerAction} from "../../network/index.js";
13
- import {byteArrayEquals} from "../../util/bytes.js";
14
13
  import {ItTrigger} from "../../util/itTrigger.js";
15
14
  import {PeerIdStr} from "../../util/peerId.js";
16
15
  import {shuffleOne} from "../../util/shuffle.js";
@@ -750,7 +749,7 @@ export class BackfillSync extends (EventEmitter as {new (): BackfillSyncEmitter}
750
749
 
751
750
  // GENESIS_SLOT doesn't has valid signature
752
751
  if (anchorBlock.message.slot === GENESIS_SLOT) return;
753
- await verifyBlockProposerSignature(this.chain.config, this.chain.index2pubkey, this.chain.bls, [anchorBlock]);
752
+ await verifyBlockProposerSignature(this.chain.config, this.chain.bls, [anchorBlock]);
754
753
 
755
754
  // We can write to the disk if this is ahead of prevFinalizedCheckpointBlock otherwise
756
755
  // we will need to go make checks on the top of sync loop before writing as it might
@@ -815,7 +814,7 @@ export class BackfillSync extends (EventEmitter as {new (): BackfillSyncEmitter}
815
814
 
816
815
  // If any of the block's proposer signature fail, we can't trust this peer at all
817
816
  if (verifiedBlocks.length > 0) {
818
- await verifyBlockProposerSignature(this.chain.config, this.chain.index2pubkey, this.chain.bls, verifiedBlocks);
817
+ await verifyBlockProposerSignature(this.chain.config, this.chain.bls, verifiedBlocks);
819
818
 
820
819
  // This is bad, like super bad. Abort the backfill
821
820
  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
 
@@ -8,7 +8,7 @@ import {
8
8
  isForkPostGloas,
9
9
  } from "@lodestar/params";
10
10
  import {SignedBeaconBlock, Slot, deneb, fulu, phase0} from "@lodestar/types";
11
- import {LodestarError, Logger, fromHex, prettyPrintIndices, toRootHex} from "@lodestar/utils";
11
+ import {LodestarError, Logger, byteArrayEquals, fromHex, prettyPrintIndices, toRootHex} from "@lodestar/utils";
12
12
  import {
13
13
  BlockInputSource,
14
14
  DAType,
@@ -475,7 +475,7 @@ export function validateBlockByRangeResponse(
475
475
  if (i < blocks.length - 1) {
476
476
  // compare the block root against the next block's parent root
477
477
  const parentRoot = blocks[i + 1].message.parentRoot;
478
- if (Buffer.compare(blockRoot, parentRoot) !== 0) {
478
+ if (!byteArrayEquals(blockRoot, parentRoot)) {
479
479
  throw new DownloadByRangeError(
480
480
  {
481
481
  code: DownloadByRangeErrorCode.PARENT_ROOT_MISMATCH,
@@ -9,7 +9,7 @@ import {
9
9
  isForkPostFulu,
10
10
  } from "@lodestar/params";
11
11
  import {BeaconBlockBody, BlobIndex, ColumnIndex, SignedBeaconBlock, Slot, deneb, fulu} from "@lodestar/types";
12
- import {LodestarError, fromHex, prettyPrintIndices, toHex, toRootHex} from "@lodestar/utils";
12
+ import {LodestarError, byteArrayEquals, fromHex, prettyPrintIndices, toHex, toRootHex} from "@lodestar/utils";
13
13
  import {isBlockInputBlobs, isBlockInputColumns} from "../../chain/blocks/blockInput/blockInput.js";
14
14
  import {BlockInputSource, IBlockInput} from "../../chain/blocks/blockInput/types.js";
15
15
  import {ChainEventEmitter} from "../../chain/emitter.js";
@@ -19,7 +19,6 @@ import {validateBlockDataColumnSidecars} from "../../chain/validation/dataColumn
19
19
  import {INetwork} from "../../network/interface.js";
20
20
  import {PeerSyncMeta} from "../../network/peers/peersData.js";
21
21
  import {prettyPrintPeerIdStr} from "../../network/util.js";
22
- import {byteArrayEquals} from "../../util/bytes.js";
23
22
  import {PeerIdStr} from "../../util/peerId.js";
24
23
  import {WarnResult} from "../../util/wrapError.js";
25
24
  import {
@@ -24,6 +24,8 @@ export class JobItemQueue<Args extends any[], R> {
24
24
  private readonly metrics?: QueueMetrics;
25
25
  private runningJobs = 0;
26
26
  private lastYield = 0;
27
+ /** Resolvers waiting for space in the queue */
28
+ private spaceWaiters: (() => void)[] = [];
27
29
 
28
30
  constructor(
29
31
  private readonly itemProcessor: (...args: Args) => Promise<R>,
@@ -72,12 +74,57 @@ export class JobItemQueue<Args extends any[], R> {
72
74
  });
73
75
  }
74
76
 
77
+ /**
78
+ * Returns a promise that resolves when there is space in the queue.
79
+ * If the queue already has space, resolves immediately (noop).
80
+ * Use this to apply backpressure when the caller should wait rather than
81
+ * have push() throw QUEUE_MAX_LENGTH.
82
+ */
83
+ async waitForSpace(): Promise<void> {
84
+ if (this.opts.signal.aborted) {
85
+ throw new QueueError({code: QueueErrorCode.QUEUE_ABORTED});
86
+ }
87
+
88
+ if (this.jobs.length < this.opts.maxLength) {
89
+ return;
90
+ }
91
+
92
+ return new Promise<void>((resolve, reject) => {
93
+ let settled = false;
94
+
95
+ const onAbort = (): void => {
96
+ if (settled) return;
97
+ settled = true;
98
+ const index = this.spaceWaiters.indexOf(wrappedResolve);
99
+ if (index >= 0) {
100
+ this.spaceWaiters.splice(index, 1);
101
+ }
102
+ reject(new QueueError({code: QueueErrorCode.QUEUE_ABORTED}));
103
+ };
104
+
105
+ const wrappedResolve = (): void => {
106
+ if (settled) return;
107
+ settled = true;
108
+ this.opts.signal.removeEventListener("abort", onAbort);
109
+ resolve();
110
+ };
111
+
112
+ this.spaceWaiters.push(wrappedResolve);
113
+ this.opts.signal.addEventListener("abort", onAbort, {once: true});
114
+
115
+ // Re-check after attaching listener to close the race window where
116
+ // signal.abort() fires between the initial check and addEventListener
117
+ if (this.opts.signal.aborted) onAbort();
118
+ });
119
+ }
120
+
75
121
  getItems(): {args: Args; addedTimeMs: number}[] {
76
122
  return this.jobs.map((job) => ({args: job.args, addedTimeMs: job.addedTimeMs}));
77
123
  }
78
124
 
79
125
  dropAllJobs = (): void => {
80
126
  this.jobs.clear();
127
+ this.notifySpaceWaiters();
81
128
  };
82
129
 
83
130
  private runJob = async (): Promise<void> => {
@@ -115,10 +162,25 @@ export class JobItemQueue<Args extends any[], R> {
115
162
 
116
163
  this.runningJobs = Math.max(0, this.runningJobs - 1);
117
164
 
165
+ // Notify any waiters that space is available
166
+ this.notifySpaceWaiters();
167
+
118
168
  // Potentially run a new job
119
169
  void this.runJob();
120
170
  };
121
171
 
172
+ private notifySpaceWaiters(): void {
173
+ // Compute available slots once to avoid thundering herd: resolved waiters
174
+ // won't push() until the next microtask, so jobs.length doesn't change
175
+ // inside this loop. Without the cap we'd wake ALL waiters on a single slot.
176
+ let available = this.opts.maxLength - this.jobs.length;
177
+ while (available > 0 && this.spaceWaiters.length > 0) {
178
+ const resolve = this.spaceWaiters.shift();
179
+ if (resolve) resolve();
180
+ available--;
181
+ }
182
+ }
183
+
122
184
  private abortAllJobs = (): void => {
123
185
  while (this.jobs.length > 0) {
124
186
  const job = this.jobs.pop();
@@ -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":"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"}
@@ -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"}