@lodestar/beacon-node 1.42.0-dev.4411584fd8 → 1.42.0-dev.47afaa6bb7

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 (505) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +60 -29
  3. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  4. package/lib/api/impl/beacon/pool/index.d.ts.map +1 -1
  5. package/lib/api/impl/beacon/pool/index.js +5 -1
  6. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  7. package/lib/api/impl/beacon/state/index.d.ts.map +1 -1
  8. package/lib/api/impl/beacon/state/index.js +38 -40
  9. package/lib/api/impl/beacon/state/index.js.map +1 -1
  10. package/lib/api/impl/beacon/state/utils.d.ts +4 -4
  11. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
  12. package/lib/api/impl/beacon/state/utils.js +7 -10
  13. package/lib/api/impl/beacon/state/utils.js.map +1 -1
  14. package/lib/api/impl/debug/index.js.map +1 -1
  15. package/lib/api/impl/lodestar/index.d.ts.map +1 -1
  16. package/lib/api/impl/lodestar/index.js +8 -6
  17. package/lib/api/impl/lodestar/index.js.map +1 -1
  18. package/lib/api/impl/proof/index.d.ts.map +1 -1
  19. package/lib/api/impl/proof/index.js +2 -6
  20. package/lib/api/impl/proof/index.js.map +1 -1
  21. package/lib/api/impl/validator/index.d.ts.map +1 -1
  22. package/lib/api/impl/validator/index.js +35 -29
  23. package/lib/api/impl/validator/index.js.map +1 -1
  24. package/lib/api/impl/validator/utils.d.ts +2 -2
  25. package/lib/api/impl/validator/utils.d.ts.map +1 -1
  26. package/lib/api/impl/validator/utils.js +3 -3
  27. package/lib/api/impl/validator/utils.js.map +1 -1
  28. package/lib/chain/ColumnReconstructionTracker.d.ts +2 -1
  29. package/lib/chain/ColumnReconstructionTracker.d.ts.map +1 -1
  30. package/lib/chain/ColumnReconstructionTracker.js +5 -5
  31. package/lib/chain/ColumnReconstructionTracker.js.map +1 -1
  32. package/lib/chain/GetBlobsTracker.d.ts +2 -1
  33. package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
  34. package/lib/chain/GetBlobsTracker.js +14 -12
  35. package/lib/chain/GetBlobsTracker.js.map +1 -1
  36. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  37. package/lib/chain/archiveStore/archiveStore.js +1 -0
  38. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  39. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts +3 -7
  40. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +1 -1
  41. package/lib/chain/archiveStore/historicalState/getHistoricalState.js +8 -26
  42. package/lib/chain/archiveStore/historicalState/getHistoricalState.js.map +1 -1
  43. package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts +2 -2
  44. package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts.map +1 -1
  45. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js +1 -0
  46. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js.map +1 -1
  47. package/lib/chain/archiveStore/historicalState/types.d.ts +2 -0
  48. package/lib/chain/archiveStore/historicalState/types.d.ts.map +1 -1
  49. package/lib/chain/archiveStore/historicalState/types.js.map +1 -1
  50. package/lib/chain/archiveStore/historicalState/worker.js +1 -3
  51. package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
  52. package/lib/chain/archiveStore/interface.d.ts +1 -0
  53. package/lib/chain/archiveStore/interface.d.ts.map +1 -1
  54. package/lib/chain/balancesCache.d.ts +2 -2
  55. package/lib/chain/balancesCache.d.ts.map +1 -1
  56. package/lib/chain/balancesCache.js +4 -4
  57. package/lib/chain/balancesCache.js.map +1 -1
  58. package/lib/chain/blocks/blockInput/blockInput.d.ts +5 -5
  59. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
  60. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  61. package/lib/chain/blocks/blockInput/types.d.ts +5 -4
  62. package/lib/chain/blocks/blockInput/types.d.ts.map +1 -1
  63. package/lib/chain/blocks/blockInput/types.js +1 -0
  64. package/lib/chain/blocks/blockInput/types.js.map +1 -1
  65. package/lib/chain/blocks/importBlock.d.ts +3 -3
  66. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  67. package/lib/chain/blocks/importBlock.js +54 -24
  68. package/lib/chain/blocks/importBlock.js.map +1 -1
  69. package/lib/chain/blocks/importExecutionPayload.d.ts +50 -0
  70. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -0
  71. package/lib/chain/blocks/importExecutionPayload.js +195 -0
  72. package/lib/chain/blocks/importExecutionPayload.js.map +1 -0
  73. package/lib/chain/blocks/index.d.ts.map +1 -1
  74. package/lib/chain/blocks/index.js +3 -2
  75. package/lib/chain/blocks/index.js.map +1 -1
  76. package/lib/chain/blocks/payloadEnvelopeInput/index.d.ts +3 -0
  77. package/lib/chain/blocks/payloadEnvelopeInput/index.d.ts.map +1 -0
  78. package/lib/chain/blocks/payloadEnvelopeInput/index.js +3 -0
  79. package/lib/chain/blocks/payloadEnvelopeInput/index.js.map +1 -0
  80. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +88 -0
  81. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -0
  82. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +279 -0
  83. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -0
  84. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +30 -0
  85. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts.map +1 -0
  86. package/lib/chain/blocks/payloadEnvelopeInput/types.js +11 -0
  87. package/lib/chain/blocks/payloadEnvelopeInput/types.js.map +1 -0
  88. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts +15 -0
  89. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts.map +1 -0
  90. package/lib/chain/blocks/payloadEnvelopeProcessor.js +46 -0
  91. package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -0
  92. package/lib/chain/blocks/types.d.ts +28 -15
  93. package/lib/chain/blocks/types.d.ts.map +1 -1
  94. package/lib/chain/blocks/types.js.map +1 -1
  95. package/lib/chain/blocks/utils/checkpoint.d.ts +2 -2
  96. package/lib/chain/blocks/utils/checkpoint.d.ts.map +1 -1
  97. package/lib/chain/blocks/utils/checkpoint.js.map +1 -1
  98. package/lib/chain/blocks/verifyBlock.d.ts +2 -2
  99. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  100. package/lib/chain/blocks/verifyBlock.js +4 -4
  101. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  102. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +5 -5
  103. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  104. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +5 -4
  105. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  106. package/lib/chain/blocks/verifyBlocksSignatures.d.ts +2 -2
  107. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  108. package/lib/chain/blocks/verifyBlocksSignatures.js +4 -2
  109. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  110. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts +3 -3
  111. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +1 -1
  112. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js +3 -3
  113. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js.map +1 -1
  114. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts +12 -0
  115. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts.map +1 -0
  116. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js +40 -0
  117. package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js.map +1 -0
  118. package/lib/chain/chain.d.ts +22 -16
  119. package/lib/chain/chain.d.ts.map +1 -1
  120. package/lib/chain/chain.js +142 -69
  121. package/lib/chain/chain.js.map +1 -1
  122. package/lib/chain/emitter.d.ts +31 -9
  123. package/lib/chain/emitter.d.ts.map +1 -1
  124. package/lib/chain/emitter.js +12 -3
  125. package/lib/chain/emitter.js.map +1 -1
  126. package/lib/chain/errors/blockError.d.ts +10 -5
  127. package/lib/chain/errors/blockError.d.ts.map +1 -1
  128. package/lib/chain/errors/blockError.js +2 -0
  129. package/lib/chain/errors/blockError.js.map +1 -1
  130. package/lib/chain/errors/dataColumnSidecarError.d.ts +31 -1
  131. package/lib/chain/errors/dataColumnSidecarError.d.ts.map +1 -1
  132. package/lib/chain/errors/dataColumnSidecarError.js +7 -0
  133. package/lib/chain/errors/dataColumnSidecarError.js.map +1 -1
  134. package/lib/chain/errors/executionPayloadEnvelope.d.ts +12 -2
  135. package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
  136. package/lib/chain/errors/executionPayloadEnvelope.js +3 -1
  137. package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
  138. package/lib/chain/forkChoice/index.d.ts +4 -4
  139. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  140. package/lib/chain/forkChoice/index.js +30 -34
  141. package/lib/chain/forkChoice/index.js.map +1 -1
  142. package/lib/chain/initState.d.ts +2 -2
  143. package/lib/chain/initState.d.ts.map +1 -1
  144. package/lib/chain/initState.js +1 -1
  145. package/lib/chain/initState.js.map +1 -1
  146. package/lib/chain/interface.d.ts +21 -17
  147. package/lib/chain/interface.d.ts.map +1 -1
  148. package/lib/chain/lightClient/index.d.ts +2 -2
  149. package/lib/chain/lightClient/index.d.ts.map +1 -1
  150. package/lib/chain/lightClient/index.js +11 -4
  151. package/lib/chain/lightClient/index.js.map +1 -1
  152. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +6 -6
  153. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  154. package/lib/chain/opPools/aggregatedAttestationPool.js +13 -13
  155. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  156. package/lib/chain/opPools/executionPayloadBidPool.d.ts +2 -2
  157. package/lib/chain/opPools/executionPayloadBidPool.d.ts.map +1 -1
  158. package/lib/chain/opPools/executionPayloadBidPool.js +2 -2
  159. package/lib/chain/opPools/executionPayloadBidPool.js.map +1 -1
  160. package/lib/chain/opPools/opPool.d.ts +3 -3
  161. package/lib/chain/opPools/opPool.d.ts.map +1 -1
  162. package/lib/chain/opPools/opPool.js +7 -7
  163. package/lib/chain/opPools/opPool.js.map +1 -1
  164. package/lib/chain/opPools/utils.d.ts +2 -2
  165. package/lib/chain/opPools/utils.d.ts.map +1 -1
  166. package/lib/chain/opPools/utils.js +1 -1
  167. package/lib/chain/opPools/utils.js.map +1 -1
  168. package/lib/chain/options.d.ts +1 -0
  169. package/lib/chain/options.d.ts.map +1 -1
  170. package/lib/chain/options.js +1 -0
  171. package/lib/chain/options.js.map +1 -1
  172. package/lib/chain/prepareNextSlot.d.ts +2 -2
  173. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  174. package/lib/chain/prepareNextSlot.js +10 -4
  175. package/lib/chain/prepareNextSlot.js.map +1 -1
  176. package/lib/chain/produceBlock/computeNewStateRoot.d.ts +4 -4
  177. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
  178. package/lib/chain/produceBlock/computeNewStateRoot.js +14 -10
  179. package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
  180. package/lib/chain/produceBlock/produceBlockBody.d.ts +7 -7
  181. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  182. package/lib/chain/produceBlock/produceBlockBody.js +32 -17
  183. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  184. package/lib/chain/regen/interface.d.ts +15 -13
  185. package/lib/chain/regen/interface.d.ts.map +1 -1
  186. package/lib/chain/regen/interface.js +2 -0
  187. package/lib/chain/regen/interface.js.map +1 -1
  188. package/lib/chain/regen/queued.d.ts +14 -14
  189. package/lib/chain/regen/queued.d.ts.map +1 -1
  190. package/lib/chain/regen/queued.js.map +1 -1
  191. package/lib/chain/regen/regen.d.ts +6 -5
  192. package/lib/chain/regen/regen.d.ts.map +1 -1
  193. package/lib/chain/regen/regen.js +6 -6
  194. package/lib/chain/regen/regen.js.map +1 -1
  195. package/lib/chain/seenCache/index.d.ts +1 -1
  196. package/lib/chain/seenCache/index.d.ts.map +1 -1
  197. package/lib/chain/seenCache/index.js +1 -1
  198. package/lib/chain/seenCache/index.js.map +1 -1
  199. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +1 -1
  200. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
  201. package/lib/chain/seenCache/seenGossipBlockInput.js +4 -4
  202. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  203. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +38 -0
  204. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -0
  205. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +76 -0
  206. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -0
  207. package/lib/chain/serializeState.d.ts +2 -2
  208. package/lib/chain/serializeState.d.ts.map +1 -1
  209. package/lib/chain/serializeState.js +1 -1
  210. package/lib/chain/serializeState.js.map +1 -1
  211. package/lib/chain/shufflingCache.d.ts +2 -2
  212. package/lib/chain/shufflingCache.d.ts.map +1 -1
  213. package/lib/chain/shufflingCache.js +3 -4
  214. package/lib/chain/shufflingCache.js.map +1 -1
  215. package/lib/chain/stateCache/fifoBlockStateCache.d.ts +6 -6
  216. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -1
  217. package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
  218. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +11 -11
  219. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  220. package/lib/chain/stateCache/persistentCheckpointsCache.js +12 -16
  221. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  222. package/lib/chain/stateCache/types.d.ts +14 -14
  223. package/lib/chain/stateCache/types.d.ts.map +1 -1
  224. package/lib/chain/stateCache/types.js.map +1 -1
  225. package/lib/chain/validation/attesterSlashing.js +3 -3
  226. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  227. package/lib/chain/validation/blobSidecar.js +1 -1
  228. package/lib/chain/validation/blobSidecar.js.map +1 -1
  229. package/lib/chain/validation/block.d.ts.map +1 -1
  230. package/lib/chain/validation/block.js +15 -6
  231. package/lib/chain/validation/block.js.map +1 -1
  232. package/lib/chain/validation/blsToExecutionChange.js +2 -2
  233. package/lib/chain/validation/blsToExecutionChange.js.map +1 -1
  234. package/lib/chain/validation/dataColumnSidecar.d.ts +11 -4
  235. package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -1
  236. package/lib/chain/validation/dataColumnSidecar.js +185 -6
  237. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  238. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  239. package/lib/chain/validation/executionPayloadBid.js +10 -7
  240. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  241. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
  242. package/lib/chain/validation/executionPayloadEnvelope.js +34 -19
  243. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  244. package/lib/chain/validation/payloadAttestationMessage.js +5 -3
  245. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
  246. package/lib/chain/validation/proposerSlashing.js +1 -1
  247. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  248. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts +2 -2
  249. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -1
  250. package/lib/chain/validation/signatureSets/contributionAndProof.js +1 -1
  251. package/lib/chain/validation/signatureSets/contributionAndProof.js.map +1 -1
  252. package/lib/chain/validation/signatureSets/syncCommittee.d.ts +2 -2
  253. package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -1
  254. package/lib/chain/validation/signatureSets/syncCommittee.js +1 -1
  255. package/lib/chain/validation/signatureSets/syncCommittee.js.map +1 -1
  256. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts +2 -2
  257. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -1
  258. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js.map +1 -1
  259. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts +2 -2
  260. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -1
  261. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js +1 -1
  262. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js.map +1 -1
  263. package/lib/chain/validation/syncCommittee.d.ts +4 -4
  264. package/lib/chain/validation/syncCommittee.d.ts.map +1 -1
  265. package/lib/chain/validation/syncCommittee.js +17 -12
  266. package/lib/chain/validation/syncCommittee.js.map +1 -1
  267. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -1
  268. package/lib/chain/validation/syncCommitteeContributionAndProof.js +5 -2
  269. package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
  270. package/lib/chain/validation/voluntaryExit.d.ts.map +1 -1
  271. package/lib/chain/validation/voluntaryExit.js +3 -3
  272. package/lib/chain/validation/voluntaryExit.js.map +1 -1
  273. package/lib/chain/validatorMonitor.d.ts +5 -4
  274. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  275. package/lib/chain/validatorMonitor.js +14 -9
  276. package/lib/chain/validatorMonitor.js.map +1 -1
  277. package/lib/db/buckets.d.ts +2 -2
  278. package/lib/db/buckets.d.ts.map +1 -1
  279. package/lib/db/buckets.js +2 -2
  280. package/lib/db/buckets.js.map +1 -1
  281. package/lib/db/repositories/blockArchiveIndex.d.ts +2 -2
  282. package/lib/db/repositories/blockArchiveIndex.d.ts.map +1 -1
  283. package/lib/db/repositories/dataColumnSidecar.d.ts.map +1 -1
  284. package/lib/db/repositories/dataColumnSidecar.js +4 -2
  285. package/lib/db/repositories/dataColumnSidecar.js.map +1 -1
  286. package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +1 -1
  287. package/lib/db/repositories/dataColumnSidecarArchive.js +4 -2
  288. package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
  289. package/lib/metrics/metrics/lodestar.d.ts +60 -4
  290. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  291. package/lib/metrics/metrics/lodestar.js +126 -15
  292. package/lib/metrics/metrics/lodestar.js.map +1 -1
  293. package/lib/network/gossip/encoding.d.ts.map +1 -1
  294. package/lib/network/gossip/encoding.js +15 -0
  295. package/lib/network/gossip/encoding.js.map +1 -1
  296. package/lib/network/interface.d.ts +7 -4
  297. package/lib/network/interface.d.ts.map +1 -1
  298. package/lib/network/libp2p/index.d.ts.map +1 -1
  299. package/lib/network/libp2p/index.js +22 -11
  300. package/lib/network/libp2p/index.js.map +1 -1
  301. package/lib/network/network.d.ts +7 -4
  302. package/lib/network/network.d.ts.map +1 -1
  303. package/lib/network/network.js +12 -3
  304. package/lib/network/network.js.map +1 -1
  305. package/lib/network/options.d.ts.map +1 -1
  306. package/lib/network/options.js +7 -2
  307. package/lib/network/options.js.map +1 -1
  308. package/lib/network/processor/extractSlotRootFns.d.ts +1 -1
  309. package/lib/network/processor/extractSlotRootFns.d.ts.map +1 -1
  310. package/lib/network/processor/extractSlotRootFns.js +34 -4
  311. package/lib/network/processor/extractSlotRootFns.js.map +1 -1
  312. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  313. package/lib/network/processor/gossipHandlers.js +287 -70
  314. package/lib/network/processor/gossipHandlers.js.map +1 -1
  315. package/lib/network/processor/index.d.ts +22 -7
  316. package/lib/network/processor/index.d.ts.map +1 -1
  317. package/lib/network/processor/index.js +313 -80
  318. package/lib/network/processor/index.js.map +1 -1
  319. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -1
  320. package/lib/network/reqresp/ReqRespBeaconNode.js +9 -0
  321. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  322. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts +8 -0
  323. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts.map +1 -0
  324. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js +69 -0
  325. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js.map +1 -0
  326. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.d.ts +6 -0
  327. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.d.ts.map +1 -0
  328. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js +28 -0
  329. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js.map +1 -0
  330. package/lib/network/reqresp/handlers/index.d.ts.map +1 -1
  331. package/lib/network/reqresp/handlers/index.js +11 -1
  332. package/lib/network/reqresp/handlers/index.js.map +1 -1
  333. package/lib/network/reqresp/protocols.d.ts +2 -0
  334. package/lib/network/reqresp/protocols.d.ts.map +1 -1
  335. package/lib/network/reqresp/protocols.js +10 -0
  336. package/lib/network/reqresp/protocols.js.map +1 -1
  337. package/lib/network/reqresp/rateLimit.d.ts.map +1 -1
  338. package/lib/network/reqresp/rateLimit.js +8 -0
  339. package/lib/network/reqresp/rateLimit.js.map +1 -1
  340. package/lib/network/reqresp/score.d.ts.map +1 -1
  341. package/lib/network/reqresp/score.js +2 -0
  342. package/lib/network/reqresp/score.js.map +1 -1
  343. package/lib/network/reqresp/types.d.ts +10 -4
  344. package/lib/network/reqresp/types.d.ts.map +1 -1
  345. package/lib/network/reqresp/types.js +16 -4
  346. package/lib/network/reqresp/types.js.map +1 -1
  347. package/lib/node/nodejs.d.ts +2 -2
  348. package/lib/node/nodejs.d.ts.map +1 -1
  349. package/lib/node/nodejs.js +3 -3
  350. package/lib/node/nodejs.js.map +1 -1
  351. package/lib/node/notifier.d.ts.map +1 -1
  352. package/lib/node/notifier.js +3 -3
  353. package/lib/node/notifier.js.map +1 -1
  354. package/lib/sync/backfill/backfill.d.ts +2 -2
  355. package/lib/sync/backfill/backfill.d.ts.map +1 -1
  356. package/lib/sync/backfill/backfill.js +2 -2
  357. package/lib/sync/backfill/backfill.js.map +1 -1
  358. package/lib/sync/unknownBlock.d.ts +3 -9
  359. package/lib/sync/unknownBlock.d.ts.map +1 -1
  360. package/lib/sync/unknownBlock.js +10 -43
  361. package/lib/sync/unknownBlock.js.map +1 -1
  362. package/lib/sync/utils/downloadByRange.d.ts +3 -3
  363. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  364. package/lib/sync/utils/downloadByRange.js +4 -2
  365. package/lib/sync/utils/downloadByRange.js.map +1 -1
  366. package/lib/sync/utils/downloadByRoot.d.ts +3 -3
  367. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  368. package/lib/sync/utils/downloadByRoot.js +10 -5
  369. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  370. package/lib/util/blobs.d.ts +3 -3
  371. package/lib/util/blobs.d.ts.map +1 -1
  372. package/lib/util/blobs.js +21 -10
  373. package/lib/util/blobs.js.map +1 -1
  374. package/lib/util/dataColumns.d.ts +18 -11
  375. package/lib/util/dataColumns.d.ts.map +1 -1
  376. package/lib/util/dataColumns.js +51 -17
  377. package/lib/util/dataColumns.js.map +1 -1
  378. package/lib/util/execution.d.ts +6 -2
  379. package/lib/util/execution.d.ts.map +1 -1
  380. package/lib/util/execution.js +49 -25
  381. package/lib/util/execution.js.map +1 -1
  382. package/lib/util/sszBytes.d.ts +29 -2
  383. package/lib/util/sszBytes.d.ts.map +1 -1
  384. package/lib/util/sszBytes.js +258 -14
  385. package/lib/util/sszBytes.js.map +1 -1
  386. package/lib/util/types.d.ts +2 -0
  387. package/lib/util/types.d.ts.map +1 -1
  388. package/lib/util/types.js +1 -0
  389. package/lib/util/types.js.map +1 -1
  390. package/package.json +16 -16
  391. package/src/api/impl/beacon/blocks/index.ts +69 -33
  392. package/src/api/impl/beacon/pool/index.ts +5 -1
  393. package/src/api/impl/beacon/state/index.ts +43 -55
  394. package/src/api/impl/beacon/state/utils.ts +11 -25
  395. package/src/api/impl/debug/index.ts +2 -2
  396. package/src/api/impl/lodestar/index.ts +8 -8
  397. package/src/api/impl/proof/index.ts +2 -9
  398. package/src/api/impl/validator/index.ts +38 -43
  399. package/src/api/impl/validator/utils.ts +4 -7
  400. package/src/chain/ColumnReconstructionTracker.ts +6 -5
  401. package/src/chain/GetBlobsTracker.ts +14 -12
  402. package/src/chain/archiveStore/archiveStore.ts +1 -0
  403. package/src/chain/archiveStore/historicalState/getHistoricalState.ts +10 -39
  404. package/src/chain/archiveStore/historicalState/historicalStateRegen.ts +2 -1
  405. package/src/chain/archiveStore/historicalState/types.ts +2 -0
  406. package/src/chain/archiveStore/historicalState/worker.ts +1 -4
  407. package/src/chain/archiveStore/interface.ts +1 -0
  408. package/src/chain/balancesCache.ts +5 -11
  409. package/src/chain/blocks/blockInput/blockInput.ts +8 -8
  410. package/src/chain/blocks/blockInput/types.ts +5 -4
  411. package/src/chain/blocks/importBlock.ts +85 -32
  412. package/src/chain/blocks/importExecutionPayload.ts +277 -0
  413. package/src/chain/blocks/index.ts +3 -2
  414. package/src/chain/blocks/payloadEnvelopeInput/index.ts +2 -0
  415. package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +377 -0
  416. package/src/chain/blocks/payloadEnvelopeInput/types.ts +34 -0
  417. package/src/chain/blocks/payloadEnvelopeProcessor.ts +61 -0
  418. package/src/chain/blocks/types.ts +34 -15
  419. package/src/chain/blocks/utils/checkpoint.ts +2 -2
  420. package/src/chain/blocks/verifyBlock.ts +5 -10
  421. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +10 -14
  422. package/src/chain/blocks/verifyBlocksSignatures.ts +10 -3
  423. package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +6 -8
  424. package/src/chain/blocks/writePayloadEnvelopeInputToDb.ts +55 -0
  425. package/src/chain/chain.ts +188 -101
  426. package/src/chain/emitter.ts +27 -9
  427. package/src/chain/errors/blockError.ts +8 -5
  428. package/src/chain/errors/dataColumnSidecarError.ts +32 -1
  429. package/src/chain/errors/executionPayloadEnvelope.ts +6 -2
  430. package/src/chain/forkChoice/index.ts +35 -51
  431. package/src/chain/initState.ts +7 -2
  432. package/src/chain/interface.ts +22 -18
  433. package/src/chain/lightClient/index.ts +17 -18
  434. package/src/chain/opPools/aggregatedAttestationPool.ts +20 -21
  435. package/src/chain/opPools/executionPayloadBidPool.ts +3 -3
  436. package/src/chain/opPools/opPool.ts +13 -14
  437. package/src/chain/opPools/utils.ts +3 -3
  438. package/src/chain/options.ts +2 -0
  439. package/src/chain/prepareNextSlot.ts +14 -8
  440. package/src/chain/produceBlock/computeNewStateRoot.ts +18 -16
  441. package/src/chain/produceBlock/produceBlockBody.ts +51 -48
  442. package/src/chain/regen/interface.ts +15 -17
  443. package/src/chain/regen/queued.ts +16 -20
  444. package/src/chain/regen/regen.ts +16 -17
  445. package/src/chain/seenCache/index.ts +1 -1
  446. package/src/chain/seenCache/seenGossipBlockInput.ts +4 -4
  447. package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +106 -0
  448. package/src/chain/serializeState.ts +3 -3
  449. package/src/chain/shufflingCache.ts +5 -7
  450. package/src/chain/stateCache/fifoBlockStateCache.ts +7 -7
  451. package/src/chain/stateCache/persistentCheckpointsCache.ts +27 -42
  452. package/src/chain/stateCache/types.ts +14 -18
  453. package/src/chain/validation/attesterSlashing.ts +3 -3
  454. package/src/chain/validation/blobSidecar.ts +1 -1
  455. package/src/chain/validation/block.ts +16 -10
  456. package/src/chain/validation/blsToExecutionChange.ts +2 -2
  457. package/src/chain/validation/dataColumnSidecar.ts +231 -8
  458. package/src/chain/validation/executionPayloadBid.ts +10 -10
  459. package/src/chain/validation/executionPayloadEnvelope.ts +42 -26
  460. package/src/chain/validation/payloadAttestationMessage.ts +6 -4
  461. package/src/chain/validation/proposerSlashing.ts +1 -1
  462. package/src/chain/validation/signatureSets/contributionAndProof.ts +2 -7
  463. package/src/chain/validation/signatureSets/syncCommittee.ts +2 -7
  464. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +2 -2
  465. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +2 -7
  466. package/src/chain/validation/syncCommittee.ts +25 -20
  467. package/src/chain/validation/syncCommitteeContributionAndProof.ts +9 -10
  468. package/src/chain/validation/voluntaryExit.ts +3 -8
  469. package/src/chain/validatorMonitor.ts +25 -13
  470. package/src/db/buckets.ts +2 -2
  471. package/src/db/repositories/dataColumnSidecar.ts +4 -2
  472. package/src/db/repositories/dataColumnSidecarArchive.ts +4 -2
  473. package/src/metrics/metrics/lodestar.ts +134 -19
  474. package/src/network/gossip/encoding.ts +16 -0
  475. package/src/network/interface.ts +18 -4
  476. package/src/network/libp2p/index.ts +24 -13
  477. package/src/network/network.ts +39 -8
  478. package/src/network/options.ts +7 -2
  479. package/src/network/processor/extractSlotRootFns.ts +43 -4
  480. package/src/network/processor/gossipHandlers.ts +356 -80
  481. package/src/network/processor/index.ts +395 -92
  482. package/src/network/reqresp/ReqRespBeaconNode.ts +13 -0
  483. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRange.ts +94 -0
  484. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRoot.ts +43 -0
  485. package/src/network/reqresp/handlers/index.ts +12 -0
  486. package/src/network/reqresp/protocols.ts +12 -0
  487. package/src/network/reqresp/rateLimit.ts +18 -0
  488. package/src/network/reqresp/score.ts +2 -0
  489. package/src/network/reqresp/types.ts +26 -5
  490. package/src/node/nodejs.ts +6 -5
  491. package/src/node/notifier.ts +5 -6
  492. package/src/sync/backfill/backfill.ts +3 -3
  493. package/src/sync/unknownBlock.ts +13 -53
  494. package/src/sync/utils/downloadByRange.ts +9 -7
  495. package/src/sync/utils/downloadByRoot.ts +16 -12
  496. package/src/util/blobs.ts +35 -15
  497. package/src/util/dataColumns.ts +69 -25
  498. package/src/util/execution.ts +49 -30
  499. package/src/util/sszBytes.ts +335 -13
  500. package/src/util/types.ts +6 -0
  501. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.d.ts +0 -15
  502. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.d.ts.map +0 -1
  503. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.js +0 -28
  504. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.js.map +0 -1
  505. package/src/chain/seenCache/seenExecutionPayloadEnvelope.ts +0 -34
@@ -1,5 +1,5 @@
1
1
  import {SYNC_COMMITTEE_SUBNET_COUNT, SYNC_COMMITTEE_SUBNET_SIZE} from "@lodestar/params";
2
- import {CachedBeaconStateAllForks} from "@lodestar/state-transition";
2
+ import {IBeaconStateView, isStatePostAltair} from "@lodestar/state-transition";
3
3
  import {SubnetID, altair} from "@lodestar/types";
4
4
  import {toRootHex} from "@lodestar/utils";
5
5
  import {GossipAction, SyncCommitteeError, SyncCommitteeErrorCode} from "../errors/index.js";
@@ -15,12 +15,12 @@ export async function validateGossipSyncCommittee(
15
15
  chain: IBeaconChain,
16
16
  syncCommittee: altair.SyncCommitteeMessage,
17
17
  subnet: SubnetID
18
- ): Promise<{indexInSubcommittee: IndexInSubcommittee}> {
18
+ ): Promise<{indicesInSubcommittee: IndexInSubcommittee[]}> {
19
19
  const {slot, validatorIndex, beaconBlockRoot} = syncCommittee;
20
20
  const messageRoot = toRootHex(beaconBlockRoot);
21
21
 
22
22
  const headState = chain.getHeadState();
23
- const indexInSubcommittee = validateGossipSyncCommitteeExceptSig(chain, headState, subnet, syncCommittee);
23
+ const indicesInSubcommittee = validateGossipSyncCommitteeExceptSig(chain, headState, subnet, syncCommittee);
24
24
 
25
25
  // [IGNORE] The signature's slot is for the current slot, i.e. sync_committee_signature.slot == current_slot.
26
26
  // > Checked in validateGossipSyncCommitteeExceptSig()
@@ -68,12 +68,12 @@ export async function validateGossipSyncCommittee(
68
68
  // Register this valid item as seen
69
69
  chain.seenSyncCommitteeMessages.add(slot, subnet, validatorIndex, messageRoot);
70
70
 
71
- return {indexInSubcommittee};
71
+ return {indicesInSubcommittee};
72
72
  }
73
73
 
74
74
  export async function validateApiSyncCommittee(
75
75
  chain: IBeaconChain,
76
- headState: CachedBeaconStateAllForks,
76
+ headState: IBeaconStateView,
77
77
  syncCommittee: altair.SyncCommitteeMessage
78
78
  ): Promise<void> {
79
79
  const prioritizeBls = true;
@@ -85,7 +85,7 @@ export async function validateApiSyncCommittee(
85
85
  */
86
86
  async function validateSyncCommitteeSigOnly(
87
87
  chain: IBeaconChain,
88
- headState: CachedBeaconStateAllForks,
88
+ headState: IBeaconStateView,
89
89
  syncCommittee: altair.SyncCommitteeMessage,
90
90
  prioritizeBls = false
91
91
  ): Promise<void> {
@@ -102,10 +102,10 @@ async function validateSyncCommitteeSigOnly(
102
102
  */
103
103
  export function validateGossipSyncCommitteeExceptSig(
104
104
  chain: IBeaconChain,
105
- headState: CachedBeaconStateAllForks,
105
+ headState: IBeaconStateView,
106
106
  subnet: SubnetID,
107
107
  data: Pick<altair.SyncCommitteeMessage, "slot" | "validatorIndex">
108
- ): IndexInSubcommittee {
108
+ ): IndexInSubcommittee[] {
109
109
  const {slot, validatorIndex} = data;
110
110
  // [IGNORE] The signature's slot is for the current slot, i.e. sync_committee_signature.slot == current_slot.
111
111
  // (with a MAXIMUM_GOSSIP_CLOCK_DISPARITY allowance)
@@ -127,39 +127,44 @@ export function validateGossipSyncCommitteeExceptSig(
127
127
 
128
128
  // [REJECT] The subnet_id is valid for the given validator, i.e. subnet_id in compute_subnets_for_sync_committee(state, sync_committee_signature.validator_index).
129
129
  // Note this validation implies the validator is part of the broader current sync committee along with the correct subcommittee.
130
- const indexInSubcommittee = getIndexInSubcommittee(headState, subnet, data);
131
- if (indexInSubcommittee === null) {
130
+ const indicesInSubcommittee = getIndicesInSubcommittee(headState, subnet, data);
131
+ if (indicesInSubcommittee === null) {
132
132
  throw new SyncCommitteeError(GossipAction.REJECT, {
133
133
  code: SyncCommitteeErrorCode.VALIDATOR_NOT_IN_SYNC_COMMITTEE,
134
134
  validatorIndex,
135
135
  });
136
136
  }
137
137
 
138
- return indexInSubcommittee;
138
+ return indicesInSubcommittee;
139
139
  }
140
140
 
141
141
  /**
142
- * Returns the IndexInSubcommittee of the given `subnet`.
143
- * Returns `null` if not part of the sync committee or not part of the given `subnet`
142
+ * Returns all IndexInSubcommittee positions of the given `subnet`.
143
+ * Returns `null` if not part of the sync committee or not part of the given `subnet`.
144
+ * A validator may appear multiple times in the same subcommittee.
144
145
  */
145
- function getIndexInSubcommittee(
146
- headState: CachedBeaconStateAllForks,
146
+ function getIndicesInSubcommittee(
147
+ headState: IBeaconStateView,
147
148
  subnet: SubnetID,
148
149
  data: Pick<altair.SyncCommitteeMessage, "slot" | "validatorIndex">
149
- ): IndexInSubcommittee | null {
150
- const syncCommittee = headState.epochCtx.getIndexedSyncCommittee(data.slot);
150
+ ): IndexInSubcommittee[] | null {
151
+ if (!isStatePostAltair(headState)) {
152
+ return null;
153
+ }
154
+
155
+ const syncCommittee = headState.getIndexedSyncCommittee(data.slot);
151
156
  const indexesInCommittee = syncCommittee.validatorIndexMap.get(data.validatorIndex);
152
157
  if (indexesInCommittee === undefined) {
153
158
  // Not part of the sync committee
154
159
  return null;
155
160
  }
156
161
 
162
+ const indices: IndexInSubcommittee[] = [];
157
163
  for (const indexInCommittee of indexesInCommittee) {
158
164
  if (Math.floor(indexInCommittee / SYNC_COMMITTEE_SUBNET_SIZE) === subnet) {
159
- return indexInCommittee % SYNC_COMMITTEE_SUBNET_SIZE;
165
+ indices.push(indexInCommittee % SYNC_COMMITTEE_SUBNET_SIZE);
160
166
  }
161
167
  }
162
168
 
163
- // Not part of this specific subnet
164
- return null;
169
+ return indices.length > 0 ? indices : null;
165
170
  }
@@ -1,5 +1,5 @@
1
1
  import {SYNC_COMMITTEE_SUBNET_SIZE} from "@lodestar/params";
2
- import {CachedBeaconStateAltair, isSyncCommitteeAggregator} from "@lodestar/state-transition";
2
+ import {IBeaconStateView, isStatePostAltair, isSyncCommitteeAggregator} from "@lodestar/state-transition";
3
3
  import {ValidatorIndex, altair} from "@lodestar/types";
4
4
  import {GossipAction, SyncCommitteeError, SyncCommitteeErrorCode} from "../errors/index.js";
5
5
  import {IBeaconChain} from "../interface.js";
@@ -53,7 +53,7 @@ export async function validateSyncCommitteeGossipContributionAndProof(
53
53
  }
54
54
 
55
55
  // [REJECT] The contribution has participants -- that is, any(contribution.aggregation_bits)
56
- const syncCommitteeParticipantIndices = getContributionIndices(headState as CachedBeaconStateAltair, contribution);
56
+ const syncCommitteeParticipantIndices = getContributionIndices(headState, contribution);
57
57
  if (syncCommitteeParticipantIndices.length === 0) {
58
58
  throw new SyncCommitteeError(GossipAction.REJECT, {
59
59
  code: SyncCommitteeErrorCode.NO_PARTICIPANT,
@@ -83,12 +83,7 @@ export async function validateSyncCommitteeGossipContributionAndProof(
83
83
 
84
84
  // [REJECT] The aggregate signature is valid for the message beacon_block_root and aggregate pubkey derived from
85
85
  // the participation info in aggregation_bits for the subcommittee specified by the contribution.subcommittee_index.
86
- getSyncCommitteeContributionSignatureSet(
87
- chain.config,
88
- headState as CachedBeaconStateAltair,
89
- contribution,
90
- syncCommitteeParticipantIndices
91
- ),
86
+ getSyncCommitteeContributionSignatureSet(chain.config, headState, contribution, syncCommitteeParticipantIndices),
92
87
  ];
93
88
 
94
89
  if (!(await chain.bls.verifySignatureSets(signatureSets, {batchable: true}))) {
@@ -109,12 +104,16 @@ export async function validateSyncCommitteeGossipContributionAndProof(
109
104
  * - pubkeyCache
110
105
  */
111
106
  function getContributionIndices(
112
- state: CachedBeaconStateAltair,
107
+ state: IBeaconStateView,
113
108
  contribution: altair.SyncCommitteeContribution
114
109
  ): ValidatorIndex[] {
110
+ if (!isStatePostAltair(state)) {
111
+ throw new Error("Expected Altair state for sync committee contribution");
112
+ }
113
+
115
114
  const startIndex = contribution.subcommitteeIndex * SYNC_COMMITTEE_SUBNET_SIZE;
116
115
 
117
- const syncCommittee = state.epochCtx.getIndexedSyncCommittee(contribution.slot);
116
+ const syncCommittee = state.getIndexedSyncCommittee(contribution.slot);
118
117
  // The bits in contribution.aggregationBits select validatorIndexes in the subcommittee starting at startIndex
119
118
  const subcommitteeValidatorIndices = syncCommittee.validatorIndices.slice(
120
119
  startIndex,
@@ -1,9 +1,4 @@
1
- import {
2
- BeaconStateView,
3
- VoluntaryExitValidity,
4
- getVoluntaryExitSignatureSet,
5
- getVoluntaryExitValidity,
6
- } from "@lodestar/state-transition";
1
+ import {VoluntaryExitValidity, getVoluntaryExitSignatureSet} from "@lodestar/state-transition";
7
2
  import {phase0} from "@lodestar/types";
8
3
  import {
9
4
  GossipAction,
@@ -53,14 +48,14 @@ async function validateVoluntaryExit(
53
48
 
54
49
  // [REJECT] All of the conditions within process_voluntary_exit pass validation.
55
50
  // verifySignature = false, verified in batch below
56
- const validity = getVoluntaryExitValidity(chain.config.getForkSeq(state.slot), state, voluntaryExit, false);
51
+ const validity = state.getVoluntaryExitValidity(voluntaryExit, false);
57
52
  if (validity !== VoluntaryExitValidity.valid) {
58
53
  throw new VoluntaryExitError(GossipAction.REJECT, {
59
54
  code: voluntaryExitValidityToErrorCode(validity),
60
55
  });
61
56
  }
62
57
 
63
- const signatureSet = getVoluntaryExitSignatureSet(chain.config, new BeaconStateView(state), voluntaryExit);
58
+ const signatureSet = getVoluntaryExitSignatureSet(chain.config, state, voluntaryExit);
64
59
  if (!(await chain.bls.verifySignatureSets([signatureSet], {batchable: true, priority: prioritizeBls}))) {
65
60
  throw new VoluntaryExitError(GossipAction.REJECT, {
66
61
  code: VoluntaryExitErrorCode.INVALID_SIGNATURE,
@@ -1,14 +1,13 @@
1
1
  import {ChainForkConfig} from "@lodestar/config";
2
- import {ForkSeq, MIN_ATTESTATION_INCLUSION_DELAY, SLOTS_PER_EPOCH} from "@lodestar/params";
2
+ import {MIN_ATTESTATION_INCLUSION_DELAY, SLOTS_PER_EPOCH} from "@lodestar/params";
3
3
  import {
4
- CachedBeaconStateAllForks,
5
- CachedBeaconStateAltair,
4
+ IBeaconStateView,
6
5
  ParticipationFlags,
7
6
  computeEpochAtSlot,
8
7
  computeStartSlotAtEpoch,
9
8
  computeTimeAtSlot,
10
- getBlockRootAtSlot,
11
9
  getCurrentSlot,
10
+ isStatePostAltair,
12
11
  parseAttesterFlags,
13
12
  parseParticipationFlags,
14
13
  } from "@lodestar/state-transition";
@@ -23,6 +22,7 @@ import {
23
22
  ValidatorIndex,
24
23
  altair,
25
24
  deneb,
25
+ gloas,
26
26
  } from "@lodestar/types";
27
27
  import {LogData, LogHandler, LogLevel, Logger, MapDef, MapDefMax, prettyPrintIndices, toRootHex} from "@lodestar/utils";
28
28
  import {GENESIS_SLOT} from "../constants/constants.js";
@@ -61,6 +61,11 @@ export type ValidatorMonitor = {
61
61
  ): void;
62
62
  registerBeaconBlock(src: OpSource, delaySec: Seconds, block: BeaconBlock): void;
63
63
  registerBlobSidecar(src: OpSource, seenTimestampSec: Seconds, blob: deneb.BlobSidecar): void;
64
+ registerExecutionPayloadEnvelope(
65
+ src: OpSource,
66
+ delaySec: Seconds,
67
+ envelope: gloas.SignedExecutionPayloadEnvelope
68
+ ): void;
64
69
  registerImportedBlock(block: BeaconBlock, data: {proposerBalanceDelta: number}): void;
65
70
  onPoolSubmitUnaggregatedAttestation(
66
71
  seenTimestampSec: number,
@@ -96,7 +101,7 @@ export type ValidatorMonitor = {
96
101
  syncAggregate: altair.SyncAggregate,
97
102
  syncCommitteeIndices: Uint32Array
98
103
  ): void;
99
- onceEveryEndOfEpoch(state: CachedBeaconStateAllForks): void;
104
+ onceEveryEndOfEpoch(state: IBeaconStateView): void;
100
105
  scrapeMetrics(slotClock: Slot): void;
101
106
  /** Returns the list of validator indices currently being monitored */
102
107
  getMonitoredValidatorIndices(): ValidatorIndex[];
@@ -450,6 +455,10 @@ export function createValidatorMonitor(
450
455
  //TODO: freetheblobs
451
456
  },
452
457
 
458
+ registerExecutionPayloadEnvelope(_src, _delaySec, _envelope) {
459
+ // TODO GLOAS: implement execution payload envelope monitoring
460
+ },
461
+
453
462
  registerImportedBlock(block, {proposerBalanceDelta}) {
454
463
  const validator = validators.get(block.proposerIndex);
455
464
  if (validator) {
@@ -726,16 +735,19 @@ export function createValidatorMonitor(
726
735
  return;
727
736
  }
728
737
 
738
+ if (validators.size === 0) {
739
+ return;
740
+ }
741
+
729
742
  const rootCache = new RootHexCache(headState);
730
743
 
731
- if (config.getForkSeq(headState.slot) >= ForkSeq.altair) {
732
- const {previousEpochParticipation} = headState as CachedBeaconStateAltair;
744
+ if (isStatePostAltair(headState)) {
733
745
  const prevEpochStartSlot = computeStartSlotAtEpoch(prevEpoch);
734
- const prevEpochTargetRoot = toRootHex(getBlockRootAtSlot(headState, prevEpochStartSlot));
746
+ const prevEpochTargetRoot = toRootHex(headState.getBlockRootAtSlot(prevEpochStartSlot));
735
747
 
736
748
  // Check attestation performance
737
749
  for (const [index, validator] of validators.entries()) {
738
- const flags = parseParticipationFlags(previousEpochParticipation.get(index));
750
+ const flags = parseParticipationFlags(headState.getPreviousEpochParticipation(index));
739
751
  const attestationSummary = validator.attestations.get(prevEpoch)?.get(prevEpochTargetRoot);
740
752
  const summary = renderAttestationSummary(config, rootCache, attestationSummary, flags);
741
753
  validatorMonitorMetrics?.prevEpochAttestationSummary.inc({summary});
@@ -747,9 +759,9 @@ export function createValidatorMonitor(
747
759
  }
748
760
  }
749
761
 
750
- if (headState.epochCtx.proposersPrevEpoch !== null) {
762
+ if (headState.previousProposers !== null) {
751
763
  // proposersPrevEpoch is null on the first epoch of `headState` being generated
752
- for (const [slotIndex, validatorIndex] of headState.epochCtx.proposersPrevEpoch.entries()) {
764
+ for (const [slotIndex, validatorIndex] of headState.previousProposers.entries()) {
753
765
  const validator = validators.get(validatorIndex);
754
766
  if (validator) {
755
767
  // If expected proposer is a tracked validator
@@ -1129,12 +1141,12 @@ function renderBlockProposalSummary(
1129
1141
  export class RootHexCache {
1130
1142
  private readonly blockRootSlotCache = new Map<Slot, RootHex>();
1131
1143
 
1132
- constructor(private readonly state: CachedBeaconStateAllForks) {}
1144
+ constructor(private readonly state: IBeaconStateView) {}
1133
1145
 
1134
1146
  getBlockRootAtSlot(slot: Slot): RootHex {
1135
1147
  let root = this.blockRootSlotCache.get(slot);
1136
1148
  if (!root) {
1137
- root = toRootHex(getBlockRootAtSlot(this.state, slot));
1149
+ root = toRootHex(this.state.getBlockRootAtSlot(slot));
1138
1150
  this.blockRootSlotCache.set(slot, root);
1139
1151
  }
1140
1152
  return root;
package/src/db/buckets.ts CHANGED
@@ -67,8 +67,8 @@ export enum Bucket {
67
67
  // lightClient_bestLightClientUpdate = 55, // SyncPeriod -> LightClientUpdate // DEPRECATED on v1.5.0
68
68
  lightClient_bestLightClientUpdate = 56, // SyncPeriod -> [Slot, LightClientUpdate]
69
69
 
70
- fulu_dataColumnSidecars = 57, // FULU BeaconBlockRoot -> DataColumnSidecars
71
- fulu_dataColumnSidecarsArchive = 58, // FULU BeaconBlockSlot -> DataColumnSidecars
70
+ allForks_dataColumnSidecars = 57, // BeaconBlockRoot -> DataColumnSidecars
71
+ allForks_dataColumnSidecarsArchive = 58, // BeaconBlockSlot -> DataColumnSidecars
72
72
 
73
73
  gloas_executionPayloadEnvelope = 59, // GLOAS BeaconBlockRoot -> SignedExecutionPayloadEnvelope
74
74
  gloas_executionPayloadEnvelopeArchive = 60, // GLOAS Slot -> SignedExecutionPayloadEnvelope
@@ -18,8 +18,10 @@ type BlockRoot = Root;
18
18
  */
19
19
  export class DataColumnSidecarRepository extends PrefixedRepository<BlockRoot, ColumnIndex, DataColumnSidecar> {
20
20
  constructor(config: ChainForkConfig, db: Db) {
21
- const bucket = Bucket.fulu_dataColumnSidecars;
22
- super(config, db, bucket, ssz.fulu.DataColumnSidecar, getBucketNameByValue(bucket));
21
+ const bucket = Bucket.allForks_dataColumnSidecars;
22
+ // Type won't be used since we select it dynamically based on fork
23
+ const type = ssz.fulu.DataColumnSidecar;
24
+ super(config, db, bucket, type, getBucketNameByValue(bucket));
23
25
  }
24
26
 
25
27
  /**
@@ -16,8 +16,10 @@ const SLOT_BYTE_SIZE = 8;
16
16
  */
17
17
  export class DataColumnSidecarArchiveRepository extends PrefixedRepository<Slot, ColumnIndex, DataColumnSidecar> {
18
18
  constructor(config: ChainForkConfig, db: Db) {
19
- const bucket = Bucket.fulu_dataColumnSidecarsArchive;
20
- super(config, db, bucket, ssz.fulu.DataColumnSidecar, getBucketNameByValue(bucket));
19
+ const bucket = Bucket.allForks_dataColumnSidecarsArchive;
20
+ // Type won't be used since we select it dynamically based on fork
21
+ const type = ssz.fulu.DataColumnSidecar;
22
+ super(config, db, bucket, type, getBucketNameByValue(bucket));
21
23
  }
22
24
 
23
25
  /**
@@ -3,6 +3,7 @@ import {NotReorgedReason} from "@lodestar/fork-choice";
3
3
  import {ArchiveStoreTask} from "../../chain/archiveStore/archiveStore.js";
4
4
  import {FrequencyStateArchiveStep} from "../../chain/archiveStore/strategies/frequencyStateArchiveStrategy.js";
5
5
  import {BlockInputSource} from "../../chain/blocks/blockInput/index.js";
6
+ import {PayloadEnvelopeInputSource} from "../../chain/blocks/payloadEnvelopeInput/index.js";
6
7
  import {JobQueueItemType} from "../../chain/bls/index.js";
7
8
  import {AttestationErrorCode, BlockErrorCode} from "../../chain/errors/index.js";
8
9
  import {
@@ -237,6 +238,56 @@ export function createLodestarMetrics(
237
238
  }),
238
239
  },
239
240
 
241
+ payloadEnvelopeProcessorQueue: {
242
+ length: register.gauge({
243
+ name: "lodestar_payload_envelope_processor_queue_length",
244
+ help: "Count of total payload envelope processor queue length",
245
+ }),
246
+ droppedJobs: register.gauge({
247
+ name: "lodestar_payload_envelope_processor_queue_dropped_jobs_total",
248
+ help: "Count of total payload envelope processor queue dropped jobs",
249
+ }),
250
+ jobTime: register.histogram({
251
+ name: "lodestar_payload_envelope_processor_queue_job_time_seconds",
252
+ help: "Time to process payload envelope processor queue job in seconds",
253
+ buckets: [0.01, 0.1, 1, 4, 12],
254
+ }),
255
+ jobWaitTime: register.histogram({
256
+ name: "lodestar_payload_envelope_processor_queue_job_wait_time_seconds",
257
+ help: "Time from job added to the payload envelope processor queue to starting in seconds",
258
+ buckets: [0.01, 0.1, 1, 4, 12],
259
+ }),
260
+ concurrency: register.gauge({
261
+ name: "lodestar_payload_envelope_processor_queue_concurrency",
262
+ help: "Current concurrency of payload envelope processor queue",
263
+ }),
264
+ },
265
+
266
+ unfinalizedPayloadEnvelopeWritesQueue: {
267
+ length: register.gauge({
268
+ name: "lodestar_unfinalized_payload_envelope_writes_queue_length",
269
+ help: "Count of total unfinalized payload envelope writes queue length",
270
+ }),
271
+ droppedJobs: register.gauge({
272
+ name: "lodestar_unfinalized_payload_envelope_writes_queue_dropped_jobs_total",
273
+ help: "Count of total unfinalized payload envelope writes queue dropped jobs",
274
+ }),
275
+ jobTime: register.histogram({
276
+ name: "lodestar_unfinalized_payload_envelope_writes_queue_job_time_seconds",
277
+ help: "Time to process unfinalized payload envelope writes queue job in seconds",
278
+ buckets: [0.01, 0.1, 1, 4, 12],
279
+ }),
280
+ jobWaitTime: register.histogram({
281
+ name: "lodestar_unfinalized_payload_envelope_writes_queue_job_wait_time_seconds",
282
+ help: "Time from job added to the unfinalized payload envelope writes queue to starting in seconds",
283
+ buckets: [0.01, 0.1, 1, 4, 12],
284
+ }),
285
+ concurrency: register.gauge({
286
+ name: "lodestar_unfinalized_payload_envelope_writes_queue_concurrency",
287
+ help: "Current concurrency of unfinalized payload envelope writes queue",
288
+ }),
289
+ },
290
+
240
291
  engineHttpProcessorQueue: {
241
292
  length: register.gauge({
242
293
  name: "lodestar_engine_http_processor_queue_length",
@@ -925,6 +976,18 @@ export function createLodestarMetrics(
925
976
  labelNames: ["reason"],
926
977
  }),
927
978
  },
979
+ importPayload: {
980
+ bySource: register.gauge<{source: PayloadEnvelopeInputSource}>({
981
+ name: "lodestar_import_payload_by_source_total",
982
+ help: "Total number of imported execution payload envelopes by source",
983
+ labelNames: ["source"],
984
+ }),
985
+ columnsBySource: register.gauge<{source: PayloadEnvelopeInputSource}>({
986
+ name: "lodestar_import_payload_columns_by_source_total",
987
+ help: "Total number of payload-attached columns (sampled columns for Gloas) by source",
988
+ labelNames: ["source"],
989
+ }),
990
+ },
928
991
  engineNotifyNewPayloadResult: register.gauge<{result: ExecutionPayloadStatus}>({
929
992
  name: "lodestar_execution_engine_notify_new_payload_result_total",
930
993
  help: "The total result of calling notifyNewPayload execution engine api",
@@ -1495,6 +1558,20 @@ export function createLodestarMetrics(
1495
1558
  help: "Number of BlockInputs created via a data column being seen first",
1496
1559
  }),
1497
1560
  },
1561
+ payloadEnvelopeInput: {
1562
+ count: register.gauge({
1563
+ name: "lodestar_seen_payload_envelope_input_cache_size",
1564
+ help: "Number of cached PayloadEnvelopeInputs",
1565
+ }),
1566
+ serializedObjectRefs: register.gauge({
1567
+ name: "lodestar_seen_payload_envelope_input_cache_serialized_object_refs",
1568
+ help: "Number of serialized-cache object refs retained by cached PayloadEnvelopeInputs",
1569
+ }),
1570
+ created: register.counter({
1571
+ name: "lodestar_seen_payload_envelope_input_cache_items_created_total",
1572
+ help: "Number of PayloadEnvelopeInputs created",
1573
+ }),
1574
+ },
1498
1575
  },
1499
1576
 
1500
1577
  processFinalizedCheckpoint: {
@@ -1635,33 +1712,71 @@ export function createLodestarMetrics(
1635
1712
  }),
1636
1713
  },
1637
1714
 
1638
- // reprocess gossip attestations
1639
- reprocessGossipAttestations: {
1640
- total: register.gauge({
1641
- name: "lodestar_reprocess_gossip_attestations_total",
1642
- help: "Total number of gossip attestations waiting to reprocess",
1715
+ // some gossip messages need to wait for block to be processed before they can be processed
1716
+ awaitingBlockGossipMessages: {
1717
+ queue: register.gauge<{topic: GossipType}>({
1718
+ name: "lodestar_awaiting_block_gossip_messages_total",
1719
+ help: "Total number of gossip messages waiting for block to be processed",
1720
+ labelNames: ["topic"],
1643
1721
  }),
1644
1722
  countPerSlot: register.gauge({
1645
- name: "lodestar_reprocess_gossip_attestations_per_slot_total",
1646
- help: "Total number of gossip attestations waiting to reprocess pet slot",
1723
+ name: "lodestar_awaiting_block_gossip_messages_per_slot_total",
1724
+ help: "Total number of gossip messages waiting for block to be processed per slot",
1647
1725
  }),
1648
- resolve: register.gauge({
1649
- name: "lodestar_reprocess_gossip_attestations_resolve_total",
1650
- help: "Total number of gossip attestations are reprocessed",
1726
+ resolve: register.gauge<{topic: GossipType}>({
1727
+ name: "lodestar_awaiting_block_gossip_messages_resolve_total",
1728
+ help: "Total number of gossip messages are reprocessed",
1729
+ labelNames: ["topic"],
1651
1730
  }),
1652
- waitSecBeforeResolve: register.gauge({
1653
- name: "lodestar_reprocess_gossip_attestations_wait_time_resolve_seconds",
1731
+ waitSecBeforeResolve: register.gauge<{topic: GossipType}>({
1732
+ name: "lodestar_awaiting_block_gossip_messages_wait_time_resolve_seconds",
1654
1733
  help: "Time to wait for unknown block in seconds",
1734
+ labelNames: ["topic"],
1655
1735
  }),
1656
- reject: register.gauge<{reason: ReprocessRejectReason}>({
1657
- name: "lodestar_reprocess_gossip_attestations_reject_total",
1658
- help: "Total number of attestations are rejected to reprocess",
1659
- labelNames: ["reason"],
1736
+ // having 2 labels here is not great for performance, however it's rarely happening and having the reason label is important for debugging
1737
+ reject: register.gauge<{reason: ReprocessRejectReason; topic: GossipType}>({
1738
+ name: "lodestar_awaiting_block_gossip_messages_reject_total",
1739
+ help: "Total number of gossip messages are rejected to reprocess",
1740
+ labelNames: ["reason", "topic"],
1660
1741
  }),
1661
- waitSecBeforeReject: register.gauge<{reason: ReprocessRejectReason}>({
1662
- name: "lodestar_reprocess_gossip_attestations_wait_time_reject_seconds",
1742
+ waitSecBeforeReject: register.gauge<{reason: ReprocessRejectReason; topic: GossipType}>({
1743
+ name: "lodestar_awaiting_block_gossip_messages_wait_time_reject_seconds",
1663
1744
  help: "Time to wait for unknown block before being rejected",
1664
- labelNames: ["reason"],
1745
+ labelNames: ["reason", "topic"],
1746
+ }),
1747
+ },
1748
+
1749
+ // some gossip messages need to wait for payload to be processed before they can be processed
1750
+ awaitingPayloadGossipMessages: {
1751
+ queue: register.gauge<{topic: GossipType}>({
1752
+ name: "lodestar_awaiting_payload_gossip_messages_total",
1753
+ help: "Total number of gossip messages waiting for payload to be processed",
1754
+ labelNames: ["topic"],
1755
+ }),
1756
+ countPerSlot: register.gauge({
1757
+ name: "lodestar_awaiting_payload_gossip_messages_per_slot_total",
1758
+ help: "Total number of gossip messages waiting for payload to be processed per slot",
1759
+ }),
1760
+ resolve: register.gauge<{topic: GossipType}>({
1761
+ name: "lodestar_awaiting_payload_gossip_messages_resolve_total",
1762
+ help: "Total number of gossip messages are reprocessed",
1763
+ labelNames: ["topic"],
1764
+ }),
1765
+ waitSecBeforeResolve: register.gauge<{topic: GossipType}>({
1766
+ name: "lodestar_awaiting_payload_gossip_messages_wait_time_resolve_seconds",
1767
+ help: "Time to wait for unknown payload in seconds",
1768
+ labelNames: ["topic"],
1769
+ }),
1770
+ // having 2 labels here is not great for performance, however it's rarely happening and having the reason label is important for debugging
1771
+ reject: register.gauge<{reason: ReprocessRejectReason; topic: GossipType}>({
1772
+ name: "lodestar_awaiting_payload_gossip_messages_reject_total",
1773
+ help: "Total number of gossip messages are rejected to reprocess",
1774
+ labelNames: ["reason", "topic"],
1775
+ }),
1776
+ waitSecBeforeReject: register.gauge<{reason: ReprocessRejectReason; topic: GossipType}>({
1777
+ name: "lodestar_awaiting_payload_gossip_messages_wait_time_reject_seconds",
1778
+ help: "Time to wait for unknown payload before being rejected",
1779
+ labelNames: ["reason", "topic"],
1665
1780
  }),
1666
1781
  },
1667
1782
 
@@ -24,12 +24,28 @@ const decoder = new snappyWasm.Decoder();
24
24
  // Shared buffer to convert msgId to string
25
25
  const sharedMsgIdBuf = Buffer.alloc(20);
26
26
 
27
+ // Cache topic -> seed to avoid per-message allocations on the hot path.
28
+ // Topics are a fixed set per fork (changes only at fork boundaries).
29
+ const topicSeedCache = new Map<string, bigint>();
30
+
27
31
  /**
28
32
  * The function used to generate a gossipsub message id
29
33
  * We use the first 8 bytes of SHA256(data) for content addressing
30
34
  */
31
35
  export function fastMsgIdFn(rpcMsg: RPC.Message): string {
32
36
  if (rpcMsg.data) {
37
+ if (rpcMsg.topic) {
38
+ // Use topic-derived seed to prevent cross-topic deduplication of identical messages.
39
+ // SyncCommitteeMessages are published to multiple sync_committee_{subnet} topics with
40
+ // identical data, so hashing only the data incorrectly deduplicates across subnets.
41
+ // See https://github.com/ChainSafe/lodestar/issues/8294
42
+ let topicSeed = topicSeedCache.get(rpcMsg.topic);
43
+ if (topicSeed === undefined) {
44
+ topicSeed = xxhash.h64Raw(Buffer.from(rpcMsg.topic), h64Seed);
45
+ topicSeedCache.set(rpcMsg.topic, topicSeed);
46
+ }
47
+ return xxhash.h64Raw(rpcMsg.data, topicSeed).toString(16);
48
+ }
33
49
  return xxhash.h64Raw(rpcMsg.data, h64Seed).toString(16);
34
50
  }
35
51
  return "0000000000000000";
@@ -38,7 +38,12 @@ import {
38
38
  import {BlockInputSource} from "../chain/blocks/blockInput/types.js";
39
39
  import {CustodyConfig} from "../util/dataColumns.js";
40
40
  import {PeerIdStr} from "../util/peerId.js";
41
- import {BeaconBlocksByRootRequest, BlobSidecarsByRootRequest, DataColumnSidecarsByRootRequest} from "../util/types.js";
41
+ import {
42
+ BeaconBlocksByRootRequest,
43
+ BlobSidecarsByRootRequest,
44
+ DataColumnSidecarsByRootRequest,
45
+ ExecutionPayloadEnvelopesByRootRequest,
46
+ } from "../util/types.js";
42
47
  import {INetworkCorePublic} from "./core/types.js";
43
48
  import {INetworkEventBus} from "./events.js";
44
49
  import {GossipType} from "./gossip/interface.js";
@@ -68,7 +73,8 @@ export interface INetwork extends INetworkCorePublic {
68
73
  reportPeer(peer: PeerIdStr, action: PeerAction, actionName: string): void;
69
74
  shouldAggregate(subnet: SubnetID, slot: Slot): boolean;
70
75
  reStatusPeers(peers: PeerIdStr[]): Promise<void>;
71
- searchUnknownSlotRoot(slotRoot: SlotRootHex, source: BlockInputSource, peer?: PeerIdStr): void;
76
+ searchUnknownBlock(slotRoot: SlotRootHex, source: BlockInputSource, peer?: PeerIdStr): void;
77
+ searchUnknownEnvelope(slotRoot: SlotRootHex, source: BlockInputSource, peer?: PeerIdStr): void;
72
78
  // ReqResp
73
79
  sendBeaconBlocksByRange(peerId: PeerIdStr, request: phase0.BeaconBlocksByRangeRequest): Promise<SignedBeaconBlock[]>;
74
80
  sendBeaconBlocksByRoot(peerId: PeerIdStr, request: BeaconBlocksByRootRequest): Promise<SignedBeaconBlock[]>;
@@ -77,11 +83,19 @@ export interface INetwork extends INetworkCorePublic {
77
83
  sendDataColumnSidecarsByRange(
78
84
  peerId: PeerIdStr,
79
85
  request: fulu.DataColumnSidecarsByRangeRequest
80
- ): Promise<fulu.DataColumnSidecar[]>;
86
+ ): Promise<DataColumnSidecar[]>;
81
87
  sendDataColumnSidecarsByRoot(
82
88
  peerId: PeerIdStr,
83
89
  request: DataColumnSidecarsByRootRequest
84
- ): Promise<fulu.DataColumnSidecar[]>;
90
+ ): Promise<DataColumnSidecar[]>;
91
+ sendExecutionPayloadEnvelopesByRange(
92
+ peerId: PeerIdStr,
93
+ request: gloas.ExecutionPayloadEnvelopesByRangeRequest
94
+ ): Promise<gloas.SignedExecutionPayloadEnvelope[]>;
95
+ sendExecutionPayloadEnvelopesByRoot(
96
+ peerId: PeerIdStr,
97
+ request: ExecutionPayloadEnvelopesByRootRequest
98
+ ): Promise<gloas.SignedExecutionPayloadEnvelope[]>;
85
99
 
86
100
  // Gossip
87
101
  publishBeaconBlock(signedBlock: SignedBeaconBlock): Promise<number>;