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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (530) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +36 -88
  3. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  4. package/lib/api/impl/beacon/pool/index.d.ts.map +1 -1
  5. package/lib/api/impl/beacon/pool/index.js +22 -2
  6. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  7. package/lib/api/impl/beacon/state/utils.d.ts +1 -1
  8. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
  9. package/lib/api/impl/validator/index.d.ts +6 -0
  10. package/lib/api/impl/validator/index.d.ts.map +1 -1
  11. package/lib/api/impl/validator/index.js +38 -25
  12. package/lib/api/impl/validator/index.js.map +1 -1
  13. package/lib/chain/GetBlobsTracker.d.ts +2 -2
  14. package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
  15. package/lib/chain/GetBlobsTracker.js +11 -33
  16. package/lib/chain/GetBlobsTracker.js.map +1 -1
  17. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  18. package/lib/chain/archiveStore/archiveStore.js +1 -0
  19. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  20. package/lib/chain/blocks/blockInput/blockInput.d.ts +11 -56
  21. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
  22. package/lib/chain/blocks/blockInput/blockInput.js +5 -241
  23. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  24. package/lib/chain/blocks/blockInput/errors.d.ts +2 -4
  25. package/lib/chain/blocks/blockInput/errors.d.ts.map +1 -1
  26. package/lib/chain/blocks/blockInput/errors.js.map +1 -1
  27. package/lib/chain/blocks/blockInput/types.d.ts +2 -18
  28. package/lib/chain/blocks/blockInput/types.d.ts.map +1 -1
  29. package/lib/chain/blocks/blockInput/types.js +0 -1
  30. package/lib/chain/blocks/blockInput/types.js.map +1 -1
  31. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  32. package/lib/chain/blocks/importBlock.js +36 -53
  33. package/lib/chain/blocks/importBlock.js.map +1 -1
  34. package/lib/chain/blocks/importExecutionPayload.d.ts +10 -11
  35. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  36. package/lib/chain/blocks/importExecutionPayload.js +32 -18
  37. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  38. package/lib/chain/blocks/index.d.ts.map +1 -1
  39. package/lib/chain/blocks/index.js +2 -2
  40. package/lib/chain/blocks/index.js.map +1 -1
  41. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts +10 -7
  42. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts.map +1 -1
  43. package/lib/chain/blocks/payloadEnvelopeProcessor.js +22 -17
  44. package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -1
  45. package/lib/chain/blocks/types.d.ts +4 -20
  46. package/lib/chain/blocks/types.d.ts.map +1 -1
  47. package/lib/chain/blocks/types.js +0 -24
  48. package/lib/chain/blocks/types.js.map +1 -1
  49. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  50. package/lib/chain/blocks/verifyBlock.js +17 -6
  51. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  52. package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts.map +1 -1
  53. package/lib/chain/blocks/verifyBlocksDataAvailability.js +14 -2
  54. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  55. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +1 -1
  56. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  57. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +7 -3
  58. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  59. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -1
  60. package/lib/chain/blocks/verifyBlocksSanityChecks.js +4 -0
  61. package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
  62. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  63. package/lib/chain/blocks/verifyBlocksSignatures.js +10 -5
  64. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  65. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts.map +1 -1
  66. package/lib/chain/blocks/verifyPayloadsDataAvailability.js +9 -4
  67. package/lib/chain/blocks/verifyPayloadsDataAvailability.js.map +1 -1
  68. package/lib/chain/blocks/writeBlockInputToDb.d.ts +0 -2
  69. package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +1 -1
  70. package/lib/chain/blocks/writeBlockInputToDb.js +6 -24
  71. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  72. package/lib/chain/bls/interface.d.ts +2 -0
  73. package/lib/chain/bls/interface.d.ts.map +1 -1
  74. package/lib/chain/bls/multithread/index.d.ts +1 -1
  75. package/lib/chain/bls/multithread/index.d.ts.map +1 -1
  76. package/lib/chain/bls/multithread/index.js +50 -22
  77. package/lib/chain/bls/multithread/index.js.map +1 -1
  78. package/lib/chain/bls/multithread/types.d.ts +1 -1
  79. package/lib/chain/bls/multithread/types.d.ts.map +1 -1
  80. package/lib/chain/bls/multithread/worker.js +1 -1
  81. package/lib/chain/bls/multithread/worker.js.map +1 -1
  82. package/lib/chain/bls/singleThread.js +1 -1
  83. package/lib/chain/bls/singleThread.js.map +1 -1
  84. package/lib/chain/bls/utils.js +1 -1
  85. package/lib/chain/bls/utils.js.map +1 -1
  86. package/lib/chain/chain.d.ts +25 -4
  87. package/lib/chain/chain.d.ts.map +1 -1
  88. package/lib/chain/chain.js +120 -39
  89. package/lib/chain/chain.js.map +1 -1
  90. package/lib/chain/emitter.d.ts +7 -7
  91. package/lib/chain/emitter.d.ts.map +1 -1
  92. package/lib/chain/emitter.js +5 -5
  93. package/lib/chain/emitter.js.map +1 -1
  94. package/lib/chain/errors/blockError.d.ts +1 -1
  95. package/lib/chain/errors/blockError.d.ts.map +1 -1
  96. package/lib/chain/errors/blockError.js +1 -1
  97. package/lib/chain/errors/blockError.js.map +1 -1
  98. package/lib/chain/errors/executionPayloadEnvelope.d.ts +7 -0
  99. package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
  100. package/lib/chain/errors/executionPayloadEnvelope.js +1 -0
  101. package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
  102. package/lib/chain/errors/index.d.ts +0 -1
  103. package/lib/chain/errors/index.d.ts.map +1 -1
  104. package/lib/chain/errors/index.js +0 -1
  105. package/lib/chain/errors/index.js.map +1 -1
  106. package/lib/chain/forkChoice/index.d.ts +11 -1
  107. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  108. package/lib/chain/forkChoice/index.js +11 -0
  109. package/lib/chain/forkChoice/index.js.map +1 -1
  110. package/lib/chain/forkChoiceExecutionEngine.d.ts +51 -0
  111. package/lib/chain/forkChoiceExecutionEngine.d.ts.map +1 -0
  112. package/lib/chain/forkChoiceExecutionEngine.js +117 -0
  113. package/lib/chain/forkChoiceExecutionEngine.js.map +1 -0
  114. package/lib/chain/interface.d.ts +9 -7
  115. package/lib/chain/interface.d.ts.map +1 -1
  116. package/lib/chain/interface.js.map +1 -1
  117. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +17 -4
  118. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  119. package/lib/chain/opPools/aggregatedAttestationPool.js +199 -46
  120. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  121. package/lib/chain/opPools/attestationPool.d.ts +1 -1
  122. package/lib/chain/opPools/attestationPool.d.ts.map +1 -1
  123. package/lib/chain/opPools/attestationPool.js +15 -4
  124. package/lib/chain/opPools/attestationPool.js.map +1 -1
  125. package/lib/chain/opPools/index.d.ts +1 -0
  126. package/lib/chain/opPools/index.d.ts.map +1 -1
  127. package/lib/chain/opPools/index.js +1 -0
  128. package/lib/chain/opPools/index.js.map +1 -1
  129. package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -1
  130. package/lib/chain/opPools/payloadAttestationPool.js +17 -7
  131. package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
  132. package/lib/chain/opPools/singleAttestationPool.d.ts +77 -0
  133. package/lib/chain/opPools/singleAttestationPool.d.ts.map +1 -0
  134. package/lib/chain/opPools/singleAttestationPool.js +209 -0
  135. package/lib/chain/opPools/singleAttestationPool.js.map +1 -0
  136. package/lib/chain/opPools/syncCommitteeMessagePool.d.ts.map +1 -1
  137. package/lib/chain/opPools/syncCommitteeMessagePool.js +9 -3
  138. package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
  139. package/lib/chain/opPools/syncContributionAndProofPool.d.ts.map +1 -1
  140. package/lib/chain/opPools/syncContributionAndProofPool.js +11 -3
  141. package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
  142. package/lib/chain/opPools/utils.d.ts +1 -1
  143. package/lib/chain/opPools/utils.d.ts.map +1 -1
  144. package/lib/chain/opPools/utils.js +1 -1
  145. package/lib/chain/opPools/utils.js.map +1 -1
  146. package/lib/chain/options.d.ts +5 -3
  147. package/lib/chain/options.d.ts.map +1 -1
  148. package/lib/chain/options.js +0 -1
  149. package/lib/chain/options.js.map +1 -1
  150. package/lib/chain/produceBlock/produceBlockBody.d.ts +3 -2
  151. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  152. package/lib/chain/produceBlock/produceBlockBody.js +3 -2
  153. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  154. package/lib/chain/proposerTracker.d.ts +31 -0
  155. package/lib/chain/proposerTracker.d.ts.map +1 -0
  156. package/lib/chain/proposerTracker.js +75 -0
  157. package/lib/chain/proposerTracker.js.map +1 -0
  158. package/lib/chain/regen/interface.d.ts +1 -1
  159. package/lib/chain/regen/interface.d.ts.map +1 -1
  160. package/lib/chain/regen/queued.d.ts +1 -1
  161. package/lib/chain/regen/queued.d.ts.map +1 -1
  162. package/lib/chain/regen/queued.js +5 -3
  163. package/lib/chain/regen/queued.js.map +1 -1
  164. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +7 -14
  165. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
  166. package/lib/chain/seenCache/seenGossipBlockInput.js +6 -65
  167. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  168. package/lib/chain/validation/executionPayloadBid.js +13 -13
  169. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  170. package/lib/chain/validation/executionPayloadEnvelope.d.ts +6 -0
  171. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
  172. package/lib/chain/validation/executionPayloadEnvelope.js +53 -0
  173. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  174. package/lib/chain/validatorMonitor.d.ts +1 -2
  175. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  176. package/lib/chain/validatorMonitor.js +0 -3
  177. package/lib/chain/validatorMonitor.js.map +1 -1
  178. package/lib/db/flatFileStore/flatFileStore.js +5 -5
  179. package/lib/db/flatFileStore/flatFileStore.js.map +1 -1
  180. package/lib/db/flatFileStore/slotIndex.d.ts.map +1 -1
  181. package/lib/db/flatFileStore/slotIndex.js +2 -2
  182. package/lib/db/flatFileStore/slotIndex.js.map +1 -1
  183. package/lib/db/repositories/blobSidecars.d.ts +0 -1
  184. package/lib/db/repositories/blobSidecars.d.ts.map +1 -1
  185. package/lib/db/repositories/blobSidecars.js +0 -1
  186. package/lib/db/repositories/blobSidecars.js.map +1 -1
  187. package/lib/execution/builder/apiClient.d.ts +14 -8
  188. package/lib/execution/builder/apiClient.d.ts.map +1 -1
  189. package/lib/execution/builder/apiClient.js +12 -10
  190. package/lib/execution/builder/apiClient.js.map +1 -1
  191. package/lib/execution/builder/http.d.ts +2 -0
  192. package/lib/execution/builder/http.d.ts.map +1 -1
  193. package/lib/execution/builder/http.js +2 -0
  194. package/lib/execution/builder/http.js.map +1 -1
  195. package/lib/execution/engine/http.d.ts +4 -6
  196. package/lib/execution/engine/http.d.ts.map +1 -1
  197. package/lib/execution/engine/http.js +8 -10
  198. package/lib/execution/engine/http.js.map +1 -1
  199. package/lib/execution/engine/index.d.ts +1 -1
  200. package/lib/execution/engine/index.d.ts.map +1 -1
  201. package/lib/execution/engine/index.js +1 -1
  202. package/lib/execution/engine/index.js.map +1 -1
  203. package/lib/execution/engine/interface.d.ts +18 -6
  204. package/lib/execution/engine/interface.d.ts.map +1 -1
  205. package/lib/execution/engine/interface.js.map +1 -1
  206. package/lib/execution/engine/jsonRpcTransport.d.ts +2 -4
  207. package/lib/execution/engine/jsonRpcTransport.d.ts.map +1 -1
  208. package/lib/execution/engine/jsonRpcTransport.js +2 -12
  209. package/lib/execution/engine/jsonRpcTransport.js.map +1 -1
  210. package/lib/execution/engine/mock.d.ts +0 -1
  211. package/lib/execution/engine/mock.d.ts.map +1 -1
  212. package/lib/execution/engine/mock.js +0 -4
  213. package/lib/execution/engine/mock.js.map +1 -1
  214. package/lib/execution/engine/restTransport.d.ts +2 -4
  215. package/lib/execution/engine/restTransport.d.ts.map +1 -1
  216. package/lib/execution/engine/restTransport.js +1 -15
  217. package/lib/execution/engine/restTransport.js.map +1 -1
  218. package/lib/execution/engine/sszTypes.d.ts +0 -9
  219. package/lib/execution/engine/sszTypes.d.ts.map +1 -1
  220. package/lib/execution/engine/sszTypes.js +0 -5
  221. package/lib/execution/engine/sszTypes.js.map +1 -1
  222. package/lib/execution/engine/transport.d.ts +1 -14
  223. package/lib/execution/engine/transport.d.ts.map +1 -1
  224. package/lib/execution/engine/types.d.ts +0 -8
  225. package/lib/execution/engine/types.d.ts.map +1 -1
  226. package/lib/execution/engine/types.js +2 -10
  227. package/lib/execution/engine/types.js.map +1 -1
  228. package/lib/execution/engine/utils.d.ts.map +1 -1
  229. package/lib/execution/engine/utils.js +3 -2
  230. package/lib/execution/engine/utils.js.map +1 -1
  231. package/lib/index.d.ts +1 -1
  232. package/lib/index.d.ts.map +1 -1
  233. package/lib/index.js +1 -1
  234. package/lib/index.js.map +1 -1
  235. package/lib/metrics/metrics/beacon.d.ts +0 -9
  236. package/lib/metrics/metrics/beacon.d.ts.map +1 -1
  237. package/lib/metrics/metrics/beacon.js +0 -30
  238. package/lib/metrics/metrics/beacon.js.map +1 -1
  239. package/lib/metrics/metrics/lodestar.d.ts +30 -8
  240. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  241. package/lib/metrics/metrics/lodestar.js +79 -18
  242. package/lib/metrics/metrics/lodestar.js.map +1 -1
  243. package/lib/metrics/server/http.js +5 -5
  244. package/lib/metrics/server/http.js.map +1 -1
  245. package/lib/monitoring/service.js +1 -1
  246. package/lib/monitoring/service.js.map +1 -1
  247. package/lib/network/core/networkCore.d.ts +4 -1
  248. package/lib/network/core/networkCore.d.ts.map +1 -1
  249. package/lib/network/core/networkCore.js +7 -0
  250. package/lib/network/core/networkCore.js.map +1 -1
  251. package/lib/network/core/networkCoreWorker.js +2 -0
  252. package/lib/network/core/networkCoreWorker.js.map +1 -1
  253. package/lib/network/core/networkCoreWorkerHandler.d.ts +4 -1
  254. package/lib/network/core/networkCoreWorkerHandler.d.ts.map +1 -1
  255. package/lib/network/core/networkCoreWorkerHandler.js +6 -0
  256. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  257. package/lib/network/core/types.d.ts +6 -1
  258. package/lib/network/core/types.d.ts.map +1 -1
  259. package/lib/network/gossip/gossipsub.d.ts +1 -0
  260. package/lib/network/gossip/gossipsub.d.ts.map +1 -1
  261. package/lib/network/gossip/gossipsub.js +10 -0
  262. package/lib/network/gossip/gossipsub.js.map +1 -1
  263. package/lib/network/gossip/interface.d.ts +1 -8
  264. package/lib/network/gossip/interface.d.ts.map +1 -1
  265. package/lib/network/gossip/interface.js +0 -1
  266. package/lib/network/gossip/interface.js.map +1 -1
  267. package/lib/network/gossip/topic.d.ts +0 -16
  268. package/lib/network/gossip/topic.d.ts.map +1 -1
  269. package/lib/network/gossip/topic.js +0 -23
  270. package/lib/network/gossip/topic.js.map +1 -1
  271. package/lib/network/interface.d.ts +4 -5
  272. package/lib/network/interface.d.ts.map +1 -1
  273. package/lib/network/libp2p/index.d.ts.map +1 -1
  274. package/lib/network/libp2p/index.js +5 -1
  275. package/lib/network/libp2p/index.js.map +1 -1
  276. package/lib/network/network.d.ts +8 -7
  277. package/lib/network/network.d.ts.map +1 -1
  278. package/lib/network/network.js +53 -35
  279. package/lib/network/network.js.map +1 -1
  280. package/lib/network/options.d.ts +2 -0
  281. package/lib/network/options.d.ts.map +1 -1
  282. package/lib/network/options.js +2 -0
  283. package/lib/network/options.js.map +1 -1
  284. package/lib/network/peers/peerManager.d.ts +2 -1
  285. package/lib/network/peers/peerManager.d.ts.map +1 -1
  286. package/lib/network/peers/peerManager.js +28 -1
  287. package/lib/network/peers/peerManager.js.map +1 -1
  288. package/lib/network/peers/utils/assertPeerRelevance.d.ts +9 -1
  289. package/lib/network/peers/utils/assertPeerRelevance.d.ts.map +1 -1
  290. package/lib/network/peers/utils/assertPeerRelevance.js +32 -21
  291. package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
  292. package/lib/network/peers/utils/prioritizePeers.d.ts +4 -1
  293. package/lib/network/peers/utils/prioritizePeers.d.ts.map +1 -1
  294. package/lib/network/peers/utils/prioritizePeers.js +8 -16
  295. package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
  296. package/lib/network/peers/utils/subnetMap.d.ts +5 -2
  297. package/lib/network/peers/utils/subnetMap.d.ts.map +1 -1
  298. package/lib/network/peers/utils/subnetMap.js +6 -3
  299. package/lib/network/peers/utils/subnetMap.js.map +1 -1
  300. package/lib/network/processor/extractSlotRootFns.d.ts.map +1 -1
  301. package/lib/network/processor/extractSlotRootFns.js +1 -8
  302. package/lib/network/processor/extractSlotRootFns.js.map +1 -1
  303. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  304. package/lib/network/processor/gossipHandlers.js +52 -131
  305. package/lib/network/processor/gossipHandlers.js.map +1 -1
  306. package/lib/network/processor/gossipQueues/index.d.ts.map +1 -1
  307. package/lib/network/processor/gossipQueues/index.js +0 -6
  308. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  309. package/lib/network/processor/gossipValidatorFn.d.ts.map +1 -1
  310. package/lib/network/processor/gossipValidatorFn.js +1 -5
  311. package/lib/network/processor/gossipValidatorFn.js.map +1 -1
  312. package/lib/network/processor/index.d.ts +6 -0
  313. package/lib/network/processor/index.d.ts.map +1 -1
  314. package/lib/network/processor/index.js +29 -4
  315. package/lib/network/processor/index.js.map +1 -1
  316. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -1
  317. package/lib/network/reqresp/ReqRespBeaconNode.js +0 -3
  318. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  319. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts +2 -2
  320. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -1
  321. package/lib/network/reqresp/handlers/index.d.ts.map +1 -1
  322. package/lib/network/reqresp/handlers/index.js +1 -12
  323. package/lib/network/reqresp/handlers/index.js.map +1 -1
  324. package/lib/network/reqresp/protocols.d.ts +0 -2
  325. package/lib/network/reqresp/protocols.d.ts.map +1 -1
  326. package/lib/network/reqresp/protocols.js +0 -10
  327. package/lib/network/reqresp/protocols.js.map +1 -1
  328. package/lib/network/reqresp/rateLimit.d.ts.map +1 -1
  329. package/lib/network/reqresp/rateLimit.js +1 -17
  330. package/lib/network/reqresp/rateLimit.js.map +1 -1
  331. package/lib/network/reqresp/types.d.ts +2 -8
  332. package/lib/network/reqresp/types.d.ts.map +1 -1
  333. package/lib/network/reqresp/types.js +1 -7
  334. package/lib/network/reqresp/types.js.map +1 -1
  335. package/lib/network/subnets/attnetsService.d.ts +35 -5
  336. package/lib/network/subnets/attnetsService.d.ts.map +1 -1
  337. package/lib/network/subnets/attnetsService.js +84 -6
  338. package/lib/network/subnets/attnetsService.js.map +1 -1
  339. package/lib/network/subnets/interface.d.ts +7 -0
  340. package/lib/network/subnets/interface.d.ts.map +1 -1
  341. package/lib/network/subnets/interface.js.map +1 -1
  342. package/lib/node/nodejs.d.ts +3 -1
  343. package/lib/node/nodejs.d.ts.map +1 -1
  344. package/lib/node/nodejs.js +38 -20
  345. package/lib/node/nodejs.js.map +1 -1
  346. package/lib/node/options.d.ts +3 -1
  347. package/lib/node/options.d.ts.map +1 -1
  348. package/lib/node/options.js +4 -2
  349. package/lib/node/options.js.map +1 -1
  350. package/lib/sync/interface.d.ts.map +1 -1
  351. package/lib/sync/interface.js.map +1 -1
  352. package/lib/sync/range/batch.d.ts +2 -3
  353. package/lib/sync/range/batch.d.ts.map +1 -1
  354. package/lib/sync/range/batch.js +9 -22
  355. package/lib/sync/range/batch.js.map +1 -1
  356. package/lib/sync/range/chain.d.ts.map +1 -1
  357. package/lib/sync/range/chain.js +2 -15
  358. package/lib/sync/range/chain.js.map +1 -1
  359. package/lib/sync/sync.d.ts +7 -0
  360. package/lib/sync/sync.d.ts.map +1 -1
  361. package/lib/sync/sync.js +61 -3
  362. package/lib/sync/sync.js.map +1 -1
  363. package/lib/sync/unknownBlock.d.ts.map +1 -1
  364. package/lib/sync/unknownBlock.js +1 -7
  365. package/lib/sync/unknownBlock.js.map +1 -1
  366. package/lib/sync/utils/downloadByRange.d.ts +6 -34
  367. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  368. package/lib/sync/utils/downloadByRange.js +24 -128
  369. package/lib/sync/utils/downloadByRange.js.map +1 -1
  370. package/lib/sync/utils/downloadByRoot.d.ts +2 -18
  371. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  372. package/lib/sync/utils/downloadByRoot.js +14 -99
  373. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  374. package/lib/util/blobs.d.ts +1 -7
  375. package/lib/util/blobs.d.ts.map +1 -1
  376. package/lib/util/blobs.js +0 -19
  377. package/lib/util/blobs.js.map +1 -1
  378. package/lib/util/execution.d.ts +3 -4
  379. package/lib/util/execution.d.ts.map +1 -1
  380. package/lib/util/execution.js +1 -73
  381. package/lib/util/execution.js.map +1 -1
  382. package/lib/util/file.d.ts.map +1 -1
  383. package/lib/util/file.js +8 -9
  384. package/lib/util/file.js.map +1 -1
  385. package/lib/util/queue/itemQueue.js +1 -1
  386. package/lib/util/queue/itemQueue.js.map +1 -1
  387. package/lib/util/sszBytes.d.ts +5 -1
  388. package/lib/util/sszBytes.d.ts.map +1 -1
  389. package/lib/util/sszBytes.js +36 -19
  390. package/lib/util/sszBytes.js.map +1 -1
  391. package/lib/util/types.d.ts +0 -5
  392. package/lib/util/types.d.ts.map +1 -1
  393. package/lib/util/types.js +1 -2
  394. package/lib/util/types.js.map +1 -1
  395. package/package.json +16 -17
  396. package/src/api/impl/beacon/blocks/index.ts +59 -109
  397. package/src/api/impl/beacon/pool/index.ts +31 -1
  398. package/src/api/impl/beacon/state/utils.ts +1 -1
  399. package/src/api/impl/validator/index.ts +43 -29
  400. package/src/chain/GetBlobsTracker.ts +14 -41
  401. package/src/chain/archiveStore/archiveStore.ts +1 -0
  402. package/src/chain/blocks/blockInput/blockInput.ts +11 -343
  403. package/src/chain/blocks/blockInput/errors.ts +1 -2
  404. package/src/chain/blocks/blockInput/types.ts +2 -20
  405. package/src/chain/blocks/importBlock.ts +56 -72
  406. package/src/chain/blocks/importExecutionPayload.ts +55 -34
  407. package/src/chain/blocks/index.ts +5 -2
  408. package/src/chain/blocks/payloadEnvelopeProcessor.ts +33 -22
  409. package/src/chain/blocks/types.ts +5 -31
  410. package/src/chain/blocks/verifyBlock.ts +30 -16
  411. package/src/chain/blocks/verifyBlocksDataAvailability.ts +16 -2
  412. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +9 -6
  413. package/src/chain/blocks/verifyBlocksSanityChecks.ts +4 -1
  414. package/src/chain/blocks/verifyBlocksSignatures.ts +10 -5
  415. package/src/chain/blocks/verifyPayloadsDataAvailability.ts +11 -4
  416. package/src/chain/blocks/writeBlockInputToDb.ts +6 -29
  417. package/src/chain/bls/interface.ts +2 -0
  418. package/src/chain/bls/multithread/index.ts +48 -24
  419. package/src/chain/bls/multithread/types.ts +1 -1
  420. package/src/chain/bls/multithread/worker.ts +1 -5
  421. package/src/chain/bls/singleThread.ts +1 -1
  422. package/src/chain/bls/utils.ts +1 -1
  423. package/src/chain/chain.ts +136 -38
  424. package/src/chain/emitter.ts +8 -8
  425. package/src/chain/errors/blockError.ts +1 -1
  426. package/src/chain/errors/executionPayloadEnvelope.ts +8 -0
  427. package/src/chain/errors/index.ts +0 -1
  428. package/src/chain/forkChoice/index.ts +11 -0
  429. package/src/chain/forkChoiceExecutionEngine.ts +183 -0
  430. package/src/chain/interface.ts +9 -6
  431. package/src/chain/opPools/aggregatedAttestationPool.ts +246 -43
  432. package/src/chain/opPools/attestationPool.ts +16 -4
  433. package/src/chain/opPools/index.ts +1 -0
  434. package/src/chain/opPools/payloadAttestationPool.ts +18 -7
  435. package/src/chain/opPools/singleAttestationPool.ts +287 -0
  436. package/src/chain/opPools/syncCommitteeMessagePool.ts +10 -3
  437. package/src/chain/opPools/syncContributionAndProofPool.ts +13 -3
  438. package/src/chain/opPools/utils.ts +1 -1
  439. package/src/chain/options.ts +5 -4
  440. package/src/chain/produceBlock/produceBlockBody.ts +7 -3
  441. package/src/chain/proposerTracker.ts +94 -0
  442. package/src/chain/regen/interface.ts +1 -1
  443. package/src/chain/regen/queued.ts +6 -4
  444. package/src/chain/seenCache/seenGossipBlockInput.ts +9 -93
  445. package/src/chain/validation/executionPayloadBid.ts +14 -13
  446. package/src/chain/validation/executionPayloadEnvelope.ts +68 -1
  447. package/src/chain/validatorMonitor.ts +0 -6
  448. package/src/db/flatFileStore/flatFileStore.ts +7 -7
  449. package/src/db/flatFileStore/slotIndex.ts +4 -3
  450. package/src/db/repositories/blobSidecars.ts +0 -1
  451. package/src/execution/builder/apiClient.ts +16 -13
  452. package/src/execution/builder/http.ts +4 -0
  453. package/src/execution/engine/http.ts +19 -42
  454. package/src/execution/engine/index.ts +1 -1
  455. package/src/execution/engine/interface.ts +19 -10
  456. package/src/execution/engine/jsonRpcTransport.ts +10 -22
  457. package/src/execution/engine/mock.ts +0 -7
  458. package/src/execution/engine/restTransport.ts +3 -22
  459. package/src/execution/engine/sszTypes.ts +0 -9
  460. package/src/execution/engine/transport.ts +8 -17
  461. package/src/execution/engine/types.ts +3 -18
  462. package/src/execution/engine/utils.ts +4 -2
  463. package/src/index.ts +1 -1
  464. package/src/metrics/metrics/beacon.ts +0 -30
  465. package/src/metrics/metrics/lodestar.ts +80 -18
  466. package/src/metrics/server/http.ts +5 -5
  467. package/src/monitoring/service.ts +1 -1
  468. package/src/network/core/networkCore.ts +11 -1
  469. package/src/network/core/networkCoreWorker.ts +2 -0
  470. package/src/network/core/networkCoreWorkerHandler.ts +8 -1
  471. package/src/network/core/types.ts +6 -1
  472. package/src/network/gossip/gossipsub.ts +11 -0
  473. package/src/network/gossip/interface.ts +0 -5
  474. package/src/network/gossip/topic.ts +0 -25
  475. package/src/network/interface.ts +2 -5
  476. package/src/network/libp2p/index.ts +5 -1
  477. package/src/network/network.ts +55 -58
  478. package/src/network/options.ts +4 -0
  479. package/src/network/peers/peerManager.ts +28 -3
  480. package/src/network/peers/utils/assertPeerRelevance.ts +39 -23
  481. package/src/network/peers/utils/prioritizePeers.ts +14 -22
  482. package/src/network/peers/utils/subnetMap.ts +6 -3
  483. package/src/network/processor/extractSlotRootFns.ts +0 -9
  484. package/src/network/processor/gossipHandlers.ts +65 -164
  485. package/src/network/processor/gossipQueues/index.ts +0 -6
  486. package/src/network/processor/gossipValidatorFn.ts +0 -5
  487. package/src/network/processor/index.ts +25 -4
  488. package/src/network/reqresp/ReqRespBeaconNode.ts +0 -7
  489. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +2 -2
  490. package/src/network/reqresp/handlers/index.ts +0 -17
  491. package/src/network/reqresp/protocols.ts +0 -12
  492. package/src/network/reqresp/rateLimit.ts +1 -17
  493. package/src/network/reqresp/types.ts +0 -13
  494. package/src/network/subnets/attnetsService.ts +94 -6
  495. package/src/network/subnets/interface.ts +7 -0
  496. package/src/node/nodejs.ts +40 -21
  497. package/src/node/options.ts +9 -6
  498. package/src/sync/interface.ts +1 -0
  499. package/src/sync/range/batch.ts +9 -21
  500. package/src/sync/range/chain.ts +2 -14
  501. package/src/sync/sync.ts +65 -4
  502. package/src/sync/unknownBlock.ts +1 -8
  503. package/src/sync/utils/downloadByRange.ts +31 -230
  504. package/src/sync/utils/downloadByRoot.ts +15 -142
  505. package/src/util/blobs.ts +0 -34
  506. package/src/util/execution.ts +8 -102
  507. package/src/util/file.ts +8 -9
  508. package/src/util/queue/itemQueue.ts +1 -1
  509. package/src/util/sszBytes.ts +42 -24
  510. package/src/util/types.ts +1 -8
  511. package/lib/chain/errors/blobSidecarError.d.ts +0 -108
  512. package/lib/chain/errors/blobSidecarError.d.ts.map +0 -1
  513. package/lib/chain/errors/blobSidecarError.js +0 -38
  514. package/lib/chain/errors/blobSidecarError.js.map +0 -1
  515. package/lib/chain/validation/blobSidecar.d.ts +0 -16
  516. package/lib/chain/validation/blobSidecar.d.ts.map +0 -1
  517. package/lib/chain/validation/blobSidecar.js +0 -276
  518. package/lib/chain/validation/blobSidecar.js.map +0 -1
  519. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts +0 -9
  520. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +0 -1
  521. package/lib/network/reqresp/handlers/blobSidecarsByRange.js +0 -91
  522. package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +0 -1
  523. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts +0 -5
  524. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts.map +0 -1
  525. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js +0 -46
  526. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js.map +0 -1
  527. package/src/chain/errors/blobSidecarError.ts +0 -70
  528. package/src/chain/validation/blobSidecar.ts +0 -357
  529. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +0 -133
  530. package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +0 -69
@@ -1 +1 @@
1
- {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/chain/interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,WAAW,EAAC,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAC,IAAI,EAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAC,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAC,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAC,cAAc,EAAE,gBAAgB,EAAC,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,EACL,IAAI,EACJ,OAAO,EACP,iBAAiB,EACjB,IAAI,EACJ,MAAM,EACN,SAAS,EACT,cAAc,EACd,GAAG,EACH,MAAM,EACN,OAAO,EACP,KAAK,EACL,KAAK,EACL,MAAM,EACN,OAAO,EACR,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAC,gBAAgB,EAAC,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAC,iBAAiB,EAAE,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAC,OAAO,EAAC,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAC,UAAU,EAAC,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAC,MAAM,EAAC,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAC,aAAa,EAAC,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAC,qBAAqB,EAAC,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAC,eAAe,EAAC,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAC,aAAa,EAAC,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAC,uBAAuB,EAAC,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAC,mBAAmB,EAAE,uBAAuB,EAAC,MAAM,0BAA0B,CAAC;AACtF,OAAO,EAAC,WAAW,EAAC,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAC,eAAe,EAAE,iBAAiB,EAAE,mBAAmB,EAAC,MAAM,mBAAmB,CAAC;AAC1F,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAC,qBAAqB,EAAC,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAC,2BAA2B,EAAC,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAC,iBAAiB,EAAC,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAC,iBAAiB,EAAC,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAC,yBAAyB,EAAC,MAAM,wCAAwC,CAAC;AACjF,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,uBAAuB,EACvB,kBAAkB,EAClB,MAAM,EACN,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,4BAA4B,EAC7B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAC,kBAAkB,EAAE,eAAe,EAAE,SAAS,EAAE,aAAa,EAAC,MAAM,oCAAoC,CAAC;AACjH,OAAO,EAAC,iBAAiB,EAAE,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAC,mBAAmB,EAAC,MAAM,gBAAgB,CAAC;AACnD,OAAO,EACL,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,wBAAwB,EACxB,wBAAwB,EACxB,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAC,0BAA0B,EAAC,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAAC,oBAAoB,EAAC,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAC,kBAAkB,EAAC,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAC,cAAc,EAAC,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAC,oBAAoB,EAAE,wBAAwB,EAAC,MAAM,yCAAyC,CAAC;AACvG,OAAO,EAAC,cAAc,EAAC,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAC,SAAS,EAAE,KAAK,kBAAkB,EAAC,CAAC;AAC5C,OAAO,EAAC,KAAK,uBAAuB,EAAC,CAAC;AACtC,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC;AAEhC,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,oBAAY,cAAc;IACxB,uBAAuB,4BAA4B;IACnD,mBAAmB,wBAAwB;IAC3C,eAAe,oBAAoB;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC;IAChC,QAAQ,CAAC,qBAAqB,EAAE,IAAI,CAAC;IACrC,qBAAqB,EAAE,IAAI,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,gBAAgB,CAAC;IAC3C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IAC9C,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IACtD,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAE5C,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACnD,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAEvC,sDAAsD;IACtD,QAAQ,CAAC,0BAA0B,EAAE,IAAI,CAAC;IAE1C,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;IAClC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IAC/C,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAClD,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC;IAGrC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,yBAAyB,EAAE,yBAAyB,CAAC;IAC9D,QAAQ,CAAC,wBAAwB,EAAE,wBAAwB,CAAC;IAC5D,QAAQ,CAAC,4BAA4B,EAAE,4BAA4B,CAAC;IACpE,QAAQ,CAAC,uBAAuB,EAAE,uBAAuB,CAAC;IAC1D,QAAQ,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;IACxD,QAAQ,CAAC,uBAAuB,EAAE,uBAAuB,CAAC;IAC1D,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,yBAAyB,EAAE,yBAAyB,CAAC;IAG9D,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;IACpD,QAAQ,CAAC,0BAA0B,EAAE,0BAA0B,CAAC;IAChE,QAAQ,CAAC,wBAAwB,EAAE,wBAAwB,CAAC;IAC5D,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAChD,QAAQ,CAAC,yBAAyB,EAAE,yBAAyB,CAAC;IAC9D,QAAQ,CAAC,wBAAwB,EAAE,wBAAwB,CAAC;IAC5D,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;IACpD,QAAQ,CAAC,mBAAmB,EAAE,cAAc,CAAC;IAC7C,QAAQ,CAAC,6BAA6B,EAAE,wBAAwB,CAAC;IAEjE,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAEhD,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAClD,QAAQ,CAAC,uBAAuB,EAAE,uBAAuB,CAAC;IAE1D,QAAQ,CAAC,oBAAoB,EAAE,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAE3D,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,iBAAiB,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC;IAEtD,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAE1C,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,2BAA2B,EAAE,2BAA2B,CAAC;IAElE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAE7B,iFAAiF;IACjF,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,mCAAmC;IACnC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,+HAA+H;IAC/H,SAAS,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC;IACvC,sHAAsH;IACtH,mBAAmB,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC;IACjD,mFAAmF;IACnF,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,uFAAuF;IACvF,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/B,oBAAoB,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;IAEnE,YAAY,IAAI,gBAAgB,CAAC;IACjC,0BAA0B,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAChF,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEvF,wBAAwB,CACtB,IAAI,EAAE,IAAI,GACT,OAAO,CAAC;QAAC,KAAK,EAAE,UAAU,CAAC;QAAC,mBAAmB,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAC,GAAG,IAAI,CAAC,CAAC;IAEzF,gDAAgD;IAChD,cAAc,CACZ,IAAI,EAAE,IAAI,EACV,IAAI,CAAC,EAAE,YAAY,GAClB,OAAO,CAAC;QAAC,KAAK,EAAE,gBAAgB,CAAC;QAAC,mBAAmB,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAC,GAAG,IAAI,CAAC,CAAC;IAC/F,0CAA0C;IAC1C,mBAAmB,CACjB,SAAS,EAAE,OAAO,EAClB,IAAI,CAAC,EAAE,YAAY,GAClB,OAAO,CAAC;QAAC,KAAK,EAAE,gBAAgB,GAAG,UAAU,CAAC;QAAC,mBAAmB,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAC,GAAG,IAAI,CAAC,CAAC;IAC5G,8DAA8D;IAC9D,2BAA2B,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACxF,2CAA2C;IAC3C,oBAAoB,CAClB,UAAU,EAAE,iBAAiB,GAC5B;QAAC,KAAK,EAAE,gBAAgB,CAAC;QAAC,mBAAmB,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAC,GAAG,IAAI,CAAC;IACtF,uCAAuC;IACvC,2BAA2B,CACzB,UAAU,EAAE,iBAAiB,GAC5B,OAAO,CAAC;QAAC,KAAK,EAAE,gBAAgB,GAAG,UAAU,CAAC;QAAC,mBAAmB,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAC,GAAG,IAAI,CAAC,CAAC;IAE5G;;;;OAIG;IACH,uBAAuB,CACrB,IAAI,EAAE,IAAI,GACT,OAAO,CAAC;QAAC,KAAK,EAAE,iBAAiB,CAAC;QAAC,mBAAmB,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAC,GAAG,IAAI,CAAC,CAAC;IAChG;;OAEG;IACH,wBAAwB,CACtB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC;QAAC,KAAK,EAAE,UAAU,CAAC;QAAC,mBAAmB,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,IAAI,CAAA;KAAC,GAAG,IAAI,CAAC,CAAC;IACrG;;OAEG;IACH,cAAc,CACZ,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC;QAAC,KAAK,EAAE,iBAAiB,CAAC;QAAC,mBAAmB,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAC,GAAG,IAAI,CAAC,CAAC;IAChG,eAAe,CAAC,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAC3F,yBAAyB,CAAC,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAC7F,qBAAqB,CAAC,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC3F,+BAA+B,CAC7B,SAAS,EAAE,IAAI,EACf,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;IACvC,qCAAqC,CAAC,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACzG,sCAAsC,CACpC,QAAQ,EAAE;QAAC,SAAS,EAAE,IAAI,CAAC;QAAC,YAAY,EAAE,OAAO,CAAA;KAAC,EAAE,EACpD,MAAM,CAAC,EAAE,qBAAqB,GAC7B,OAAO,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IAClC,2BAA2B,CACzB,SAAS,EAAE,IAAI,EACf,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,KAAK,CAAC,8BAA8B,GAAG,IAAI,CAAC,CAAC;IACxD,0BAA0B,CAAC,eAAe,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAEjH,sBAAsB,CAAC,eAAe,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACnF,YAAY,CAAC,eAAe,EAAE,eAAe,GAAG;QAAC,sBAAsB,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;KAAC,GAAG,OAAO,CAAC;QAC3G,KAAK,EAAE,WAAW,CAAC;QACnB,qBAAqB,EAAE,GAAG,CAAC;QAC3B,mBAAmB,EAAE,GAAG,CAAC;QACzB,qBAAqB,CAAC,EAAE,OAAO,CAAC;KACjC,CAAC,CAAC;IACH,mBAAmB,CAAC,eAAe,EAAE,eAAe,GAAG;QAAC,sBAAsB,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;KAAC,GAAG,OAAO,CAAC;QAClH,KAAK,EAAE,kBAAkB,CAAC;QAC1B,qBAAqB,EAAE,GAAG,CAAC;QAC3B,mBAAmB,EAAE,GAAG,CAAC;KAC1B,CAAC,CAAC;IAEH,qCAAqC;IACrC,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,+CAA+C;IAC/C,mBAAmB,CACjB,MAAM,EAAE,WAAW,EAAE,EACrB,gBAAgB,EAAE,GAAG,CAAC,IAAI,EAAE,oBAAoB,CAAC,GAAG,IAAI,EACxD,IAAI,CAAC,EAAE,eAAe,GACrB,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAEhC,2FAA2F;IAC3F,uBAAuB,CAAC,YAAY,EAAE,oBAAoB,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErG,8GAA8G;IAC9G,2BAA2B,CAAC,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,cAAc,GAAG,IAAI,CAAC;IAElF,SAAS,IAAI,MAAM,CAAC;IAEpB,uBAAuB,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU,CAAC;IAE9D,8HAA8H;IAC9H,mBAAmB,IAAI,UAAU,CAAC;IAElC,gIAAgI;IAChI,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,UAAU,CAAC;IAExC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE1D,wBAAwB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,uBAAuB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5F,iGAAiG;IACjG,wBAAwB,CAAC,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1F,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,kBAAkB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5E,+BAA+B,CAAC,QAAQ,EAAE,KAAK,CAAC,wBAAwB,GAAG,IAAI,CAAC;IAChF,uBAAuB,CACrB,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,EAAE,gBAAgB,EAC3B,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,sBAAsB,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACjG,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpG,oCAAoC,CAClC,QAAQ,EAAE,KAAK,EACf,sBAAsB,EAAE,OAAO,EAC/B,YAAY,EAAE,UAAU,EACxB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3B,mBAAmB,CAAC,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IAE3C,kBAAkB,IAAI,OAAO,CAAC;IAC9B,0BAA0B,IAAI,OAAO,CAAC;IAEtC,eAAe,CAAC,QAAQ,EAAE,WAAW,GAAG,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3F,sBAAsB,CACpB,KAAK,EAAE,KAAK,EACZ,YAAY,CAAC,EAAE,CAAC,cAAc,GAAG,MAAM,CAAC,EAAE,GACzC,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC,mBAAmB,CAAC;QAAC,mBAAmB,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAC,CAAC,CAAC;IACrG,uBAAuB,CACrB,QAAQ,EAAE,WAAW,GAAG,kBAAkB,EAC1C,YAAY,CAAC,EAAE,CAAC,cAAc,GAAG,MAAM,CAAC,EAAE,GACzC,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAC1C;AAED,MAAM,MAAM,aAAa,GACrB,OAAO,GACP,aAAa,GACb,OAAO,GACP,aAAa,GACb,0BAA0B,GAC1B,eAAe,GACf,sBAAsB,CAAC;AAE3B,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,UAAU,GAAG,UAAU,CAAC,GACjF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,UAAU,GAAG,UAAU,CAAC,CAAC,GAC9D,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,uBAAuB,CAAC,GACtD,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC"}
1
+ {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/chain/interface.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/chain/interface.ts"],"names":[],"mappings":"AA2DA,OAAO,EAAsC,SAAS,EAAgB,MAAM,oCAAoC,CAAC;AAoBjH,OAAO,EAAC,SAAS,EAA0B,CAAC;AAQ5C,MAAM,CAAN,IAAY,cAIX;AAJD,WAAY,cAAc;IACxB,qEAAmD,CAAA;IACnD,6DAA2C,CAAA;IAC3C,qDAAmC,CAAA;AACrC,CAAC,EAJW,cAAc,KAAd,cAAc,QAIzB"}
1
+ {"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/chain/interface.ts"],"names":[],"mappings":"AA6DA,OAAO,EAAsC,SAAS,EAAgB,MAAM,oCAAoC,CAAC;AAqBjH,OAAO,EAA0B,SAAS,EAA+B,CAAC;AAO1E,MAAM,CAAN,IAAY,cAIX;AAJD,WAAY,cAAc;IACxB,qEAAmD,CAAA;IACnD,6DAA2C,CAAA;IAC3C,qDAAmC,CAAA;AACrC,CAAC,EAJW,cAAc,KAAd,cAAc,QAIzB"}
@@ -6,6 +6,7 @@ import { Attestation, Epoch, RootHex, Slot, electra, phase0 } from "@lodestar/ty
6
6
  import { Logger } from "@lodestar/utils";
7
7
  import { Metrics } from "../../metrics/metrics.js";
8
8
  import { ShufflingCache } from "../shufflingCache.js";
9
+ import { SingleAttestationPool, SinglesForCommittee } from "./singleAttestationPool.js";
9
10
  import { InsertOutcome } from "./types.js";
10
11
  type CommitteeIndex = number;
11
12
  /**
@@ -14,12 +15,23 @@ type CommitteeIndex = number;
14
15
  */
15
16
  export type AttestationsConsolidation = {
16
17
  byCommittee: Map<CommitteeIndex, AttestationNonParticipant>;
18
+ /**
19
+ * Single attestations of committee members that no aggregate in `byCommittee` covers, a committee may have both.
20
+ * Disjoint from `byCommittee` by construction so the signatures can be aggregated together
21
+ */
22
+ singlesByCommittee: Map<CommitteeIndex, SinglesForCommittee>;
17
23
  attData: phase0.AttestationData;
18
24
  totalNewSeenEffectiveBalance: number;
19
25
  newSeenAttesters: number;
20
26
  notSeenAttesters: number;
21
27
  /** total number of attesters across all committees in this consolidation */
22
28
  totalAttesters: number;
29
+ /** part of `totalNewSeenEffectiveBalance` contributed by `singlesByCommittee` */
30
+ singlesNewSeenEffectiveBalance: number;
31
+ /** part of `newSeenAttesters` contributed by `singlesByCommittee` */
32
+ singlesNewSeenAttesters: number;
33
+ /** sum of participation flag weights this consolidation earns, set when scoring */
34
+ weight: number;
23
35
  };
24
36
  /**
25
37
  * This function returns not seen participation for a given epoch and slot and committee index.
@@ -67,11 +79,12 @@ export declare class AggregatedAttestationPool {
67
79
  add(attestation: Attestation, dataRootHex: RootHex, attestingIndicesCount: number, committee: Uint32Array): InsertOutcome;
68
80
  /** Remove attestations which are too old to be included in a block. */
69
81
  prune(clockSlot: Slot): void;
70
- getAttestationsForBlock(fork: ForkName, forkChoice: IForkChoice, shufflingCache: ShufflingCache, state: IBeaconStateView): Attestation[];
82
+ getAttestationsForBlock(fork: ForkName, forkChoice: IForkChoice, shufflingCache: ShufflingCache, state: IBeaconStateView, singleAttestationPool: SingleAttestationPool): Attestation[];
71
83
  /**
72
- * Get attestations to be included in an electra block. Returns up to $MAX_ATTESTATIONS_ELECTRA items
84
+ * Get attestations to be included in an electra block. Returns up to $MAX_ATTESTATIONS_ELECTRA items.
85
+ * Single attestations fill committee members that no picked aggregate covers, see `addSinglesToConsolidation`
73
86
  */
74
- getAttestationsForBlockElectra(fork: ForkName, forkChoice: IForkChoice, shufflingCache: ShufflingCache, state: IBeaconStateView): electra.Attestation[];
87
+ getAttestationsForBlockElectra(fork: ForkName, forkChoice: IForkChoice, shufflingCache: ShufflingCache, state: IBeaconStateView, singleAttestationPool: SingleAttestationPool): electra.Attestation[];
75
88
  /**
76
89
  * Get all attestations optionally filtered by `attestation.data.slot`
77
90
  * Note this function is not fork aware and can potentially return a mix
@@ -136,7 +149,7 @@ export declare function aggregateInto(attestation1: AttestationWithIndex, attest
136
149
  * attestation data from different committee into a single attestation
137
150
  * https://github.com/ethereum/consensus-specs/blob/aba6345776aa876dad368cab27fbbb23fae20455/specs/_features/eip7549/validator.md?plain=1#L39
138
151
  */
139
- export declare function aggregateConsolidation({ byCommittee, attData }: AttestationsConsolidation): electra.Attestation;
152
+ export declare function aggregateConsolidation({ byCommittee, singlesByCommittee, attData, }: AttestationsConsolidation): electra.Attestation;
140
153
  /**
141
154
  * Pre-compute participation from a IBeaconStateView, for use to check if an attestation's committee
142
155
  * has already attested or not.
@@ -1 +1 @@
1
- {"version":3,"file":"aggregatedAttestationPool.d.ts","sourceRoot":"","sources":["../../../src/chain/opPools/aggregatedAttestationPool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"aggregatedAttestationPool.d.ts","sourceRoot":"","sources":["../../../src/chain/opPools/aggregatedAttestationPool.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import { aggregateSignatures } from "@chainsafe/lodestar-z/blst";
2
1
  import { BitArray } from "@chainsafe/ssz";
2
+ import { aggregateSignatures } from "@lodestar/native/blst";
3
3
  import { ForkName, ForkSeq, MAX_ATTESTATIONS_ELECTRA, MAX_COMMITTEES_PER_SLOT, MIN_ATTESTATION_INCLUSION_DELAY, SLOTS_PER_EPOCH, TIMELY_HEAD_FLAG_INDEX, TIMELY_HEAD_WEIGHT, TIMELY_SOURCE_FLAG_INDEX, TIMELY_SOURCE_WEIGHT, TIMELY_TARGET_FLAG_INDEX, TIMELY_TARGET_WEIGHT, isForkPostDeneb, isForkPostElectra, } from "@lodestar/params";
4
- import { RootCache, computeEpochAtSlot, computeSlotsSinceEpochStart, computeStartSlotAtEpoch, getAttestationParticipationStatus, isStatePostAltair, isStatePostGloas, } from "@lodestar/state-transition";
4
+ import { G2_POINT_AT_INFINITY, RootCache, computeEpochAtSlot, computeSlotsSinceEpochStart, computeStartSlotAtEpoch, getAttestationParticipationStatus, isStatePostAltair, isStatePostGloas, } from "@lodestar/state-transition";
5
5
  import { isElectraAttestation, ssz } from "@lodestar/types";
6
- import { MapDef, assert, toRootHex } from "@lodestar/utils";
6
+ import { MapDef, assert, byteArrayEquals, toRootHex } from "@lodestar/utils";
7
7
  import { IntersectResult, intersectUint8Arrays } from "../../util/bitArray.js";
8
8
  import { getShufflingDependentRoot } from "../../util/dependentRoot.js";
9
9
  import { InsertOutcome } from "./types.js";
@@ -43,6 +43,13 @@ const MAX_RETAINED_ATTESTATIONS_PER_GROUP_ELECTRA = 8;
43
43
  * than MAX_RETAINED_ATTESTATIONS_PER_GROUP_ELECTRA or MAX_ATTESTATIONS_ELECTRA.
44
44
  */
45
45
  const MAX_ATTESTATIONS_PER_GROUP_ELECTRA = Math.min(MAX_RETAINED_ATTESTATIONS_PER_GROUP_ELECTRA, MAX_ATTESTATIONS_ELECTRA);
46
+ /**
47
+ * Bounds the single attestation signatures decoded and aggregated synchronously in block production. Without
48
+ * aggregates (e.g. during non-finality) the pool can hold far more uncovered singles than a block needs.
49
+ * The budget is spent in scan order, also by candidates that later miss the top MAX_ATTESTATIONS_ELECTRA
50
+ * As tested on Nov 2026, we never this many not-seen attesters on mainnet.
51
+ */
52
+ const MAX_SINGLE_ATTESTATIONS_PER_BLOCK = 1024;
46
53
  /** Same to https://github.com/ethereum/consensus-specs/blob/v1.5.0/specs/altair/beacon-chain.md#has_flag */
47
54
  const TIMELY_SOURCE = 1 << TIMELY_SOURCE_FLAG_INDEX;
48
55
  const TIMELY_TARGET = 1 << TIMELY_TARGET_FLAG_INDEX;
@@ -125,17 +132,18 @@ export class AggregatedAttestationPool {
125
132
  pruneBySlot(this.attestationGroupByIndexByDataHexBySlot, clockSlot, slotsToRetain);
126
133
  this.lowestPermissibleSlot = Math.max(clockSlot - slotsToRetain, 0);
127
134
  }
128
- getAttestationsForBlock(fork, forkChoice, shufflingCache, state) {
135
+ getAttestationsForBlock(fork, forkChoice, shufflingCache, state, singleAttestationPool) {
129
136
  const forkSeq = ForkSeq[fork];
130
137
  if (forkSeq < ForkSeq.electra) {
131
138
  throw new Error("Does not support producing blocks for pre-electra forks anymore");
132
139
  }
133
- return this.getAttestationsForBlockElectra(fork, forkChoice, shufflingCache, state);
140
+ return this.getAttestationsForBlockElectra(fork, forkChoice, shufflingCache, state, singleAttestationPool);
134
141
  }
135
142
  /**
136
- * Get attestations to be included in an electra block. Returns up to $MAX_ATTESTATIONS_ELECTRA items
143
+ * Get attestations to be included in an electra block. Returns up to $MAX_ATTESTATIONS_ELECTRA items.
144
+ * Single attestations fill committee members that no picked aggregate covers, see `addSinglesToConsolidation`
137
145
  */
138
- getAttestationsForBlockElectra(fork, forkChoice, shufflingCache, state) {
146
+ getAttestationsForBlockElectra(fork, forkChoice, shufflingCache, state, singleAttestationPool) {
139
147
  const stateSlot = state.slot;
140
148
  const stateEpoch = state.epoch;
141
149
  const statePrevEpoch = stateEpoch - 1;
@@ -143,18 +151,23 @@ export class AggregatedAttestationPool {
143
151
  const gloasState = isStatePostGloas(state) ? state : null;
144
152
  const notSeenValidatorsFn = getNotSeenValidatorsFn(this.config, shufflingCache, state);
145
153
  const validateAttestationDataFn = getValidateAttestationDataFn(forkChoice, state);
146
- const slots = Array.from(this.attestationGroupByIndexByDataHexBySlot.keys()).sort((a, b) => b - a);
154
+ const slots = Array.from(new Set([...this.attestationGroupByIndexByDataHexBySlot.keys(), ...singleAttestationPool.getStoredSlots()])).sort((a, b) => b - a);
147
155
  // Track score of each `AttestationsConsolidation`
148
156
  const consolidations = new Map();
157
+ let remainingSingles = MAX_SINGLE_ATTESTATIONS_PER_BLOCK;
149
158
  let scannedSlots = 0;
150
159
  let stopReason = null;
151
160
  const missingShufflingCommitteesByEpoch = new Map();
161
+ // reset so that inclusion distances not scanned for this block do not keep values of a previous block
162
+ this.metrics?.opPool.aggregatedAttestationPool.packedAttestations.returnedAttestations.reset();
163
+ this.metrics?.opPool.aggregatedAttestationPool.packedAttestations.scannedAttestations.reset();
152
164
  slot: for (const slot of slots) {
153
- const attestationGroupByIndexByDataHash = this.attestationGroupByIndexByDataHexBySlot.get(slot);
154
- // should not happen
155
- if (!attestationGroupByIndexByDataHash) {
156
- throw Error(`No aggregated attestation pool for slot=${slot}`);
157
- }
165
+ // a slot may only have single attestations, e.g. votes for a minority head that nobody aggregated
166
+ const attestationGroupByIndexByDataHash = this.attestationGroupByIndexByDataHexBySlot.get(slot) ??
167
+ new Map();
168
+ const singlesDataBySlot = remainingSingles > 0
169
+ ? singleAttestationPool.getDataRoots(slot)
170
+ : new Map();
158
171
  const epoch = computeEpochAtSlot(slot);
159
172
  if (epoch < statePrevEpoch) {
160
173
  // we process slot in desc order, this means next slot is not eligible, we should stop
@@ -177,21 +190,28 @@ export class AggregatedAttestationPool {
177
190
  // Attestations att00 --- att10 --- att20 --- 0 (att 00 10 20)
178
191
  // att01 --- - --- att21 --- 1 (att 01 __ 21)
179
192
  // - --- - --- att22 --- 2 (att __ __ 22)
180
- for (const attestationGroupByIndex of attestationGroupByIndexByDataHash.values()) {
193
+ const dataRootHexes = new Set([...attestationGroupByIndexByDataHash.keys(), ...singlesDataBySlot.keys()]);
194
+ for (const dataRootHex of dataRootHexes) {
195
+ if (remainingSingles === 0 && !attestationGroupByIndexByDataHash.has(dataRootHex)) {
196
+ continue;
197
+ }
198
+ const attestationGroupByIndex = attestationGroupByIndexByDataHash.get(dataRootHex) ?? new Map();
181
199
  // sameAttDataCons could be up to MAX_ATTESTATIONS_PER_GROUP_ELECTRA
182
200
  const sameAttDataCons = [];
183
- const allAttestationGroups = Array.from(attestationGroupByIndex.values());
184
- if (allAttestationGroups.length === 0) {
201
+ const attData = attestationGroupByIndex.values().next().value?.data ?? singlesDataBySlot.get(dataRootHex);
202
+ if (attData === undefined) {
185
203
  this.metrics?.opPool.aggregatedAttestationPool.packedAttestations.emptyAttestationData.inc();
186
204
  continue;
187
205
  }
188
- const invalidAttDataReason = validateAttestationDataFn(allAttestationGroups[0].data);
206
+ const invalidAttDataReason = validateAttestationDataFn(attData);
189
207
  if (invalidAttDataReason !== null) {
190
208
  this.metrics?.opPool.aggregatedAttestationPool.packedAttestations.invalidAttestationData.inc({
191
209
  reason: invalidAttDataReason,
192
210
  });
193
211
  continue;
194
212
  }
213
+ // committee members not on chain and not covered by any picked aggregate, owned by this loop
214
+ const remainingNotSeenByCommittee = new Map();
195
215
  for (const [committeeIndex, attestationGroup] of attestationGroupByIndex.entries()) {
196
216
  const notSeenCommitteeMembers = notSeenValidatorsFn(epoch, slot, committeeIndex);
197
217
  if (notSeenCommitteeMembers === null) {
@@ -216,17 +236,12 @@ export class AggregatedAttestationPool {
216
236
  const attestationsSameGroup = getAttestationGroupResult.result;
217
237
  returnedAttestationsPerSlot += attestationsSameGroup.length;
218
238
  totalAttestationsPerSlot += getAttestationGroupResult.totalAttestations;
239
+ // notSeenCommitteeMembers of the last pick are the ones no pick covers, it's a new Set (not the cached one)
240
+ remainingNotSeenByCommittee.set(committeeIndex, attestationsSameGroup.at(-1)?.notSeenCommitteeMembers ?? notSeenCommitteeMembers);
219
241
  for (const [i, attestationNonParticipation] of attestationsSameGroup.entries()) {
220
242
  // sameAttDataCons shares the same index for different committees so we use index `i` here
221
243
  if (sameAttDataCons[i] === undefined) {
222
- sameAttDataCons[i] = {
223
- byCommittee: new Map(),
224
- attData: attestationNonParticipation.attestation.data,
225
- totalNewSeenEffectiveBalance: 0,
226
- newSeenAttesters: 0,
227
- notSeenAttesters: 0,
228
- totalAttesters: 0,
229
- };
244
+ sameAttDataCons[i] = newConsolidation(attestationNonParticipation.attestation.data);
230
245
  }
231
246
  const sameAttDataCon = sameAttDataCons[i];
232
247
  // committeeIndex was from a map so it should be unique, but just in case
@@ -239,19 +254,38 @@ export class AggregatedAttestationPool {
239
254
  }
240
255
  }
241
256
  } // all committees are processed
257
+ for (const committeeIndex of singleAttestationPool.getCommitteeIndices(slot, dataRootHex)) {
258
+ if (remainingSingles === 0) {
259
+ break;
260
+ }
261
+ // a committee with no aggregate for this data starts from on chain participation (cached set, read only)
262
+ const notSeenCommitteeMembers = remainingNotSeenByCommittee.get(committeeIndex) ?? notSeenValidatorsFn(epoch, slot, committeeIndex);
263
+ if (notSeenCommitteeMembers === null || notSeenCommitteeMembers.size === 0) {
264
+ continue;
265
+ }
266
+ const singles = singleAttestationPool.getUncovered(slot, dataRootHex, committeeIndex, notSeenCommitteeMembers, state.effectiveBalanceIncrements, remainingSingles);
267
+ if (singles !== null) {
268
+ // the first consolidation holds the best aggregate of every committee, adding singles to it costs no
269
+ // extra attestation in the block. It's created if this data has no aggregate at all
270
+ sameAttDataCons[0] ??= newConsolidation(attData);
271
+ addSinglesToConsolidation(sameAttDataCons[0], committeeIndex, singles, notSeenCommitteeMembers.size);
272
+ remainingSingles -= singles.newSeenAttesters;
273
+ }
274
+ }
242
275
  this.metrics?.opPool.aggregatedAttestationPool.packedAttestations.returnedAttestations.set({ inclusionDistance }, returnedAttestationsPerSlot);
243
276
  this.metrics?.opPool.aggregatedAttestationPool.packedAttestations.scannedAttestations.set({ inclusionDistance }, totalAttestationsPerSlot);
244
277
  // after all committees are processed, we have a list of sameAttDataCons
245
278
  for (const consolidation of sameAttDataCons) {
246
279
  // Score attestations by profitability to maximize proposer reward
247
280
  const { flags } = getAttestationParticipationStatus(ForkSeq[fork], consolidation.attData, inclusionDistance, stateEpoch, rootCache, gloasState?.executionPayloadAvailability ?? null, gloasState?.latestBlockHeader.slot ?? null);
248
- const weight = ((flags & TIMELY_SOURCE) === TIMELY_SOURCE ? TIMELY_SOURCE_WEIGHT : 0) +
249
- ((flags & TIMELY_TARGET) === TIMELY_TARGET ? TIMELY_TARGET_WEIGHT : 0) +
250
- ((flags & TIMELY_HEAD) === TIMELY_HEAD ? TIMELY_HEAD_WEIGHT : 0);
251
- const score = consolidation.totalNewSeenEffectiveBalance * weight;
281
+ consolidation.weight =
282
+ ((flags & TIMELY_SOURCE) === TIMELY_SOURCE ? TIMELY_SOURCE_WEIGHT : 0) +
283
+ ((flags & TIMELY_TARGET) === TIMELY_TARGET ? TIMELY_TARGET_WEIGHT : 0) +
284
+ ((flags & TIMELY_HEAD) === TIMELY_HEAD ? TIMELY_HEAD_WEIGHT : 0);
285
+ const score = consolidation.totalNewSeenEffectiveBalance * consolidation.weight;
252
286
  consolidations.set(consolidation, score);
253
- // Stop accumulating attestations there are enough that may have good scoring
254
- if (consolidations.size >= MAX_ATTESTATIONS_ELECTRA * 2) {
287
+ // bound the max consolidation candidates, does not likely happen on mainnet through
288
+ if (consolidations.size >= MAX_ATTESTATIONS_ELECTRA * 4) {
255
289
  stopReason = ScannedSlotsTerminationReason.MaxConsolidationReached;
256
290
  break slot;
257
291
  }
@@ -272,24 +306,95 @@ export class AggregatedAttestationPool {
272
306
  this.metrics?.opPool.aggregatedAttestationPool.packedAttestations.totalConsolidations.set(consolidations.size);
273
307
  const sortedConsolidationsByScore = Array.from(consolidations.entries())
274
308
  .sort((a, b) => b[1] - a[1])
275
- .map(([consolidation, _]) => consolidation)
276
- .slice(0, MAX_ATTESTATIONS_ELECTRA);
309
+ .map(([consolidation, _]) => consolidation);
277
310
  // on chain aggregation is expensive, only do it after all
278
311
  const packedAttestationsMetrics = this.metrics?.opPool.aggregatedAttestationPool.packedAttestations;
279
- const packedAttestations = new Array(sortedConsolidationsByScore.length);
280
- for (const [i, consolidation] of sortedConsolidationsByScore.entries()) {
281
- packedAttestations[i] = aggregateConsolidation(consolidation);
312
+ const packedAttestations = [];
313
+ const packedConsolidations = [];
314
+ // reset so that indexes beyond the packed attestations of this block do not keep values of a previous block
315
+ packedAttestationsMetrics?.committeeCount.reset();
316
+ packedAttestationsMetrics?.totalAttesters.reset();
317
+ packedAttestationsMetrics?.nonParticipation.reset();
318
+ packedAttestationsMetrics?.inclusionDistance.reset();
319
+ packedAttestationsMetrics?.newSeenAttesters.reset();
320
+ packedAttestationsMetrics?.totalEffectiveBalance.reset();
321
+ for (const consolidation of sortedConsolidationsByScore) {
322
+ if (packedAttestations.length >= MAX_ATTESTATIONS_ELECTRA) {
323
+ break;
324
+ }
325
+ const attestation = aggregateConsolidation(consolidation);
326
+ const committeeCount = attestation.committeeBits.getTrueBitIndexes().length;
327
+ // The point at infinity is not a valid aggregate signature, exclude it from the block
328
+ if (byteArrayEquals(attestation.signature, G2_POINT_AT_INFINITY)) {
329
+ this.logger?.debug("Excluding aggregate with infinity signature", {
330
+ slot: stateSlot,
331
+ attestationSlot: attestation.data.slot,
332
+ committees: committeeCount,
333
+ });
334
+ continue;
335
+ }
336
+ const i = packedAttestations.push(attestation) - 1;
337
+ packedConsolidations.push(consolidation);
282
338
  // record metrics of packed attestations
283
- packedAttestationsMetrics?.committeeCount.set({ index: i }, consolidation.byCommittee.size);
339
+ packedAttestationsMetrics?.committeeCount.set({ index: i }, committeeCount);
284
340
  packedAttestationsMetrics?.totalAttesters.set({ index: i }, consolidation.totalAttesters);
285
341
  packedAttestationsMetrics?.nonParticipation.set({ index: i }, consolidation.notSeenAttesters);
286
- packedAttestationsMetrics?.inclusionDistance.set({ index: i }, stateSlot - packedAttestations[i].data.slot);
342
+ packedAttestationsMetrics?.inclusionDistance.set({ index: i }, stateSlot - attestation.data.slot);
287
343
  packedAttestationsMetrics?.newSeenAttesters.set({ index: i }, consolidation.newSeenAttesters);
288
344
  packedAttestationsMetrics?.totalEffectiveBalance.set({ index: i }, consolidation.totalNewSeenEffectiveBalance);
289
345
  }
346
+ // value is proportional to the proposer reward of the attestations, singles are disjoint from aggregates
347
+ // so their part is exactly what they add on top of an aggregates only block
348
+ let totalValue = 0;
349
+ let singlesValue = 0;
350
+ let newSeenAttesters = 0;
351
+ let singlesNewSeenAttesters = 0;
352
+ let singlesNewSeenEffectiveBalance = 0;
353
+ let singlesOnlyConsolidations = 0;
354
+ let singlesCommittees = 0;
355
+ const singlesNewSeenAttestersByInclusionDistance = new Map();
356
+ for (const consolidation of packedConsolidations) {
357
+ totalValue += consolidation.totalNewSeenEffectiveBalance * consolidation.weight;
358
+ singlesValue += consolidation.singlesNewSeenEffectiveBalance * consolidation.weight;
359
+ newSeenAttesters += consolidation.newSeenAttesters;
360
+ singlesNewSeenAttesters += consolidation.singlesNewSeenAttesters;
361
+ if (consolidation.singlesNewSeenAttesters > 0) {
362
+ const inclusionDistance = stateSlot - consolidation.attData.slot;
363
+ singlesNewSeenAttestersByInclusionDistance.set(inclusionDistance, (singlesNewSeenAttestersByInclusionDistance.get(inclusionDistance) ?? 0) +
364
+ consolidation.singlesNewSeenAttesters);
365
+ }
366
+ singlesNewSeenEffectiveBalance += consolidation.singlesNewSeenEffectiveBalance;
367
+ singlesCommittees += consolidation.singlesByCommittee.size;
368
+ if (consolidation.byCommittee.size === 0) {
369
+ singlesOnlyConsolidations++;
370
+ }
371
+ }
372
+ packedAttestationsMetrics?.attestationValue.inc({ source: "aggregate" }, totalValue - singlesValue);
373
+ packedAttestationsMetrics?.attestationValue.inc({ source: "single" }, singlesValue);
374
+ packedAttestationsMetrics?.blockNewSeenAttesters.set(newSeenAttesters);
375
+ packedAttestationsMetrics?.singlesValueRatio.observe(totalValue > 0 ? singlesValue / totalValue : 0);
376
+ packedAttestationsMetrics?.singlesNewSeenAttesters.observe(singlesNewSeenAttesters);
377
+ // reset so that distances of a previous block do not keep stale values, the gauge then sums to the last block
378
+ packedAttestationsMetrics?.singlesNewSeenAttestersByInclusionDistance.reset();
379
+ for (const [inclusionDistance, count] of singlesNewSeenAttestersByInclusionDistance) {
380
+ packedAttestationsMetrics?.singlesNewSeenAttestersByInclusionDistance.set({ inclusionDistance }, count);
381
+ }
382
+ packedAttestationsMetrics?.singlesNewSeenEffectiveBalance.observe(singlesNewSeenEffectiveBalance);
383
+ packedAttestationsMetrics?.singlesOnlyConsolidations.observe(singlesOnlyConsolidations);
384
+ packedAttestationsMetrics?.singlesFoldedCommittees.observe(singlesCommittees);
385
+ this.logger?.debug("Packed single attestations into block", {
386
+ slot: stateSlot,
387
+ singlesNewSeenAttesters,
388
+ singlesNewSeenEffectiveBalance,
389
+ singlesCommittees,
390
+ singlesOnlyConsolidations,
391
+ packedAttestations: packedAttestations.length,
392
+ });
290
393
  if (stopReason === null) {
291
394
  stopReason = ScannedSlotsTerminationReason.ScannedAllSlots;
292
395
  }
396
+ // only one reason per block, reset so that other reasons do not keep values of a previous block
397
+ packedAttestationsMetrics?.scannedSlots.reset();
293
398
  packedAttestationsMetrics?.scannedSlots.set({ reason: stopReason }, scannedSlots);
294
399
  packedAttestationsMetrics?.poolSlots.set(slots.length);
295
400
  return packedAttestations;
@@ -319,7 +424,8 @@ export class AggregatedAttestationPool {
319
424
  attestations.push(...attestationGroup.getAttestations());
320
425
  }
321
426
  }
322
- return attestations;
427
+ // The point at infinity is not a valid aggregate signature, do not serve such an aggregate
428
+ return attestations.filter((attestation) => !byteArrayEquals(attestation.signature, G2_POINT_AT_INFINITY));
323
429
  }
324
430
  onScrapeMetrics(metrics) {
325
431
  const poolMetrics = metrics.opPool.aggregatedAttestationPool;
@@ -514,20 +620,33 @@ export function aggregateInto(attestation1, attestation2) {
514
620
  * attestation data from different committee into a single attestation
515
621
  * https://github.com/ethereum/consensus-specs/blob/aba6345776aa876dad368cab27fbbb23fae20455/specs/_features/eip7549/validator.md?plain=1#L39
516
622
  */
517
- export function aggregateConsolidation({ byCommittee, attData }) {
623
+ export function aggregateConsolidation({ byCommittee, singlesByCommittee, attData, }) {
518
624
  const committeeBits = BitArray.fromBitLen(MAX_COMMITTEES_PER_SLOT);
519
625
  // TODO: can we improve this?
520
626
  let aggregationBits = [];
521
627
  const signatures = [];
522
- const sortedCommittees = Array.from(byCommittee.keys()).sort((a, b) => a - b);
628
+ const sortedCommittees = Array.from(new Set([...byCommittee.keys(), ...singlesByCommittee.keys()])).sort((a, b) => a - b);
523
629
  for (const committeeIndex of sortedCommittees) {
524
- const attestationNonParticipation = byCommittee.get(committeeIndex);
525
- if (attestationNonParticipation !== undefined) {
526
- const { attestation } = attestationNonParticipation;
527
- committeeBits.set(committeeIndex, true);
528
- aggregationBits = [...aggregationBits, ...attestation.aggregationBits.toBoolArray()];
630
+ const attestation = byCommittee.get(committeeIndex)?.attestation;
631
+ const singles = singlesByCommittee.get(committeeIndex);
632
+ let committeeAggregationBits;
633
+ if (attestation !== undefined) {
634
+ committeeAggregationBits = attestation.aggregationBits.toBoolArray();
529
635
  signatures.push(signatureFromBytesNoCheck(attestation.signature));
530
636
  }
637
+ else if (singles !== undefined) {
638
+ committeeAggregationBits = new Array(singles.committeeSize).fill(false);
639
+ }
640
+ else {
641
+ continue;
642
+ }
643
+ // singles are disjoint from the aggregate of the same committee, see addSinglesToConsolidation
644
+ for (const { validatorCommitteeIndex, single } of singles?.singles ?? []) {
645
+ committeeAggregationBits[validatorCommitteeIndex] = true;
646
+ signatures.push(signatureFromBytesNoCheck(single.signature));
647
+ }
648
+ committeeBits.set(committeeIndex, true);
649
+ aggregationBits = [...aggregationBits, ...committeeAggregationBits];
531
650
  }
532
651
  return {
533
652
  aggregationBits: BitArray.fromBoolArray(aggregationBits),
@@ -536,6 +655,40 @@ export function aggregateConsolidation({ byCommittee, attData }) {
536
655
  signature: aggregateSignatures(signatures).toBytes(),
537
656
  };
538
657
  }
658
+ function newConsolidation(attData) {
659
+ return {
660
+ byCommittee: new Map(),
661
+ singlesByCommittee: new Map(),
662
+ attData,
663
+ totalNewSeenEffectiveBalance: 0,
664
+ newSeenAttesters: 0,
665
+ notSeenAttesters: 0,
666
+ totalAttesters: 0,
667
+ singlesNewSeenEffectiveBalance: 0,
668
+ singlesNewSeenAttesters: 0,
669
+ weight: 0,
670
+ };
671
+ }
672
+ /**
673
+ * Add single attestations of committee members that no picked aggregate covers. They are disjoint from every picked
674
+ * aggregate of the same committee, so their signatures can be aggregated with the committee's aggregate.
675
+ * @param notSeenCommitteeMembersCount committee members still not seen before adding these singles
676
+ */
677
+ function addSinglesToConsolidation(consolidation, committeeIndex, singles, notSeenCommitteeMembersCount) {
678
+ consolidation.singlesByCommittee.set(committeeIndex, singles);
679
+ consolidation.totalNewSeenEffectiveBalance += singles.newSeenEffectiveBalance;
680
+ consolidation.newSeenAttesters += singles.newSeenAttesters;
681
+ consolidation.singlesNewSeenEffectiveBalance += singles.newSeenEffectiveBalance;
682
+ consolidation.singlesNewSeenAttesters += singles.newSeenAttesters;
683
+ if (consolidation.byCommittee.has(committeeIndex)) {
684
+ // these members were counted as not seen by the aggregate of this committee
685
+ consolidation.notSeenAttesters -= singles.newSeenAttesters;
686
+ }
687
+ else {
688
+ consolidation.totalAttesters += singles.committeeSize;
689
+ consolidation.notSeenAttesters += notSeenCommitteeMembersCount - singles.newSeenAttesters;
690
+ }
691
+ }
539
692
  /**
540
693
  * Pre-compute participation from a IBeaconStateView, for use to check if an attestation's committee
541
694
  * has already attested or not.