@lodestar/beacon-node 1.50.1 → 1.51.0-dev.09763aa8d2

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 (461) hide show
  1. package/lib/api/impl/api.js +1 -1
  2. package/lib/api/impl/api.js.map +1 -1
  3. package/lib/api/impl/beacon/blocks/index.d.ts +2 -1
  4. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  5. package/lib/api/impl/beacon/blocks/index.js +36 -36
  6. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  7. package/lib/api/impl/beacon/index.d.ts +2 -1
  8. package/lib/api/impl/beacon/index.d.ts.map +1 -1
  9. package/lib/api/impl/beacon/index.js +2 -2
  10. package/lib/api/impl/beacon/index.js.map +1 -1
  11. package/lib/api/impl/beacon/pool/index.d.ts.map +1 -1
  12. package/lib/api/impl/beacon/pool/index.js +5 -2
  13. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  14. package/lib/api/impl/beacon/state/index.d.ts.map +1 -1
  15. package/lib/api/impl/beacon/state/index.js +8 -2
  16. package/lib/api/impl/beacon/state/index.js.map +1 -1
  17. package/lib/api/impl/beacon/state/utils.d.ts +3 -2
  18. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
  19. package/lib/api/impl/beacon/state/utils.js +17 -9
  20. package/lib/api/impl/beacon/state/utils.js.map +1 -1
  21. package/lib/api/impl/debug/index.d.ts.map +1 -1
  22. package/lib/api/impl/debug/index.js +3 -0
  23. package/lib/api/impl/debug/index.js.map +1 -1
  24. package/lib/api/impl/validator/index.d.ts.map +1 -1
  25. package/lib/api/impl/validator/index.js +136 -27
  26. package/lib/api/impl/validator/index.js.map +1 -1
  27. package/lib/api/options.d.ts +2 -0
  28. package/lib/api/options.d.ts.map +1 -1
  29. package/lib/api/options.js +1 -0
  30. package/lib/api/options.js.map +1 -1
  31. package/lib/chain/ColumnReconstructionTracker.d.ts +11 -13
  32. package/lib/chain/ColumnReconstructionTracker.d.ts.map +1 -1
  33. package/lib/chain/ColumnReconstructionTracker.js +49 -44
  34. package/lib/chain/ColumnReconstructionTracker.js.map +1 -1
  35. package/lib/chain/GetBlobsTracker.d.ts +11 -0
  36. package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
  37. package/lib/chain/GetBlobsTracker.js +85 -27
  38. package/lib/chain/GetBlobsTracker.js.map +1 -1
  39. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  40. package/lib/chain/archiveStore/archiveStore.js +1 -0
  41. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  42. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +4 -0
  43. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -1
  44. package/lib/chain/archiveStore/utils/archiveBlocks.js +63 -100
  45. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  46. package/lib/chain/blocks/blockInput/blockInput.d.ts +1 -1
  47. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
  48. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  49. package/lib/chain/blocks/blockInput/utils.js +2 -2
  50. package/lib/chain/blocks/blockInput/utils.js.map +1 -1
  51. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  52. package/lib/chain/blocks/importBlock.js +16 -11
  53. package/lib/chain/blocks/importBlock.js.map +1 -1
  54. package/lib/chain/blocks/importExecutionPayload.d.ts +4 -1
  55. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  56. package/lib/chain/blocks/importExecutionPayload.js +57 -4
  57. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  58. package/lib/chain/blocks/index.js +2 -2
  59. package/lib/chain/blocks/index.js.map +1 -1
  60. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts +5 -5
  61. package/lib/chain/blocks/payloadEnvelopeProcessor.js +7 -7
  62. package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -1
  63. package/lib/chain/blocks/types.d.ts +4 -0
  64. package/lib/chain/blocks/types.d.ts.map +1 -1
  65. package/lib/chain/blocks/types.js +5 -0
  66. package/lib/chain/blocks/types.js.map +1 -1
  67. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  68. package/lib/chain/blocks/verifyBlock.js +1 -1
  69. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  70. package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts.map +1 -1
  71. package/lib/chain/blocks/verifyBlocksDataAvailability.js +8 -1
  72. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  73. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts +3 -3
  74. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts.map +1 -1
  75. package/lib/chain/blocks/verifyPayloadsDataAvailability.js +13 -6
  76. package/lib/chain/blocks/verifyPayloadsDataAvailability.js.map +1 -1
  77. package/lib/chain/bls/multithread/index.js +5 -5
  78. package/lib/chain/bls/multithread/index.js.map +1 -1
  79. package/lib/chain/bls/multithread/types.d.ts +1 -1
  80. package/lib/chain/bls/multithread/types.d.ts.map +1 -1
  81. package/lib/chain/bls/multithread/worker.js +1 -1
  82. package/lib/chain/bls/multithread/worker.js.map +1 -1
  83. package/lib/chain/bls/singleThread.js +1 -1
  84. package/lib/chain/bls/singleThread.js.map +1 -1
  85. package/lib/chain/bls/utils.js +1 -1
  86. package/lib/chain/bls/utils.js.map +1 -1
  87. package/lib/chain/chain.d.ts +3 -2
  88. package/lib/chain/chain.d.ts.map +1 -1
  89. package/lib/chain/chain.js +12 -7
  90. package/lib/chain/chain.js.map +1 -1
  91. package/lib/chain/errors/blockError.d.ts +1 -1
  92. package/lib/chain/errors/blockError.d.ts.map +1 -1
  93. package/lib/chain/errors/blockError.js +1 -1
  94. package/lib/chain/errors/blockError.js.map +1 -1
  95. package/lib/chain/errors/executionPayloadBid.d.ts +11 -1
  96. package/lib/chain/errors/executionPayloadBid.d.ts.map +1 -1
  97. package/lib/chain/errors/executionPayloadBid.js +2 -0
  98. package/lib/chain/errors/executionPayloadBid.js.map +1 -1
  99. package/lib/chain/errors/inclusionList.d.ts +60 -0
  100. package/lib/chain/errors/inclusionList.d.ts.map +1 -0
  101. package/lib/chain/errors/inclusionList.js +19 -0
  102. package/lib/chain/errors/inclusionList.js.map +1 -0
  103. package/lib/chain/errors/index.d.ts +1 -0
  104. package/lib/chain/errors/index.d.ts.map +1 -1
  105. package/lib/chain/errors/index.js +1 -0
  106. package/lib/chain/errors/index.js.map +1 -1
  107. package/lib/chain/interface.d.ts +5 -5
  108. package/lib/chain/interface.d.ts.map +1 -1
  109. package/lib/chain/interface.js.map +1 -1
  110. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  111. package/lib/chain/opPools/aggregatedAttestationPool.js +1 -1
  112. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  113. package/lib/chain/opPools/attestationPool.d.ts +1 -1
  114. package/lib/chain/opPools/attestationPool.d.ts.map +1 -1
  115. package/lib/chain/opPools/attestationPool.js +1 -1
  116. package/lib/chain/opPools/attestationPool.js.map +1 -1
  117. package/lib/chain/opPools/inclusionListStore.d.ts +63 -0
  118. package/lib/chain/opPools/inclusionListStore.d.ts.map +1 -0
  119. package/lib/chain/opPools/inclusionListStore.js +171 -0
  120. package/lib/chain/opPools/inclusionListStore.js.map +1 -0
  121. package/lib/chain/opPools/index.d.ts +1 -0
  122. package/lib/chain/opPools/index.d.ts.map +1 -1
  123. package/lib/chain/opPools/index.js +1 -0
  124. package/lib/chain/opPools/index.js.map +1 -1
  125. package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -1
  126. package/lib/chain/opPools/payloadAttestationPool.js +1 -1
  127. package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
  128. package/lib/chain/opPools/syncCommitteeMessagePool.d.ts.map +1 -1
  129. package/lib/chain/opPools/syncCommitteeMessagePool.js +1 -1
  130. package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
  131. package/lib/chain/opPools/syncContributionAndProofPool.d.ts.map +1 -1
  132. package/lib/chain/opPools/syncContributionAndProofPool.js +1 -1
  133. package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
  134. package/lib/chain/opPools/utils.d.ts +1 -1
  135. package/lib/chain/opPools/utils.d.ts.map +1 -1
  136. package/lib/chain/opPools/utils.js +1 -1
  137. package/lib/chain/opPools/utils.js.map +1 -1
  138. package/lib/chain/options.d.ts +0 -1
  139. package/lib/chain/options.d.ts.map +1 -1
  140. package/lib/chain/options.js +0 -1
  141. package/lib/chain/options.js.map +1 -1
  142. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  143. package/lib/chain/prepareNextSlot.js +4 -3
  144. package/lib/chain/prepareNextSlot.js.map +1 -1
  145. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
  146. package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
  147. package/lib/chain/produceBlock/produceBlockBody.d.ts +3 -1
  148. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  149. package/lib/chain/produceBlock/produceBlockBody.js +37 -15
  150. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  151. package/lib/chain/regen/interface.d.ts +1 -1
  152. package/lib/chain/regen/interface.d.ts.map +1 -1
  153. package/lib/chain/regen/interface.js +1 -1
  154. package/lib/chain/regen/interface.js.map +1 -1
  155. package/lib/chain/reprocess.d.ts +2 -1
  156. package/lib/chain/reprocess.d.ts.map +1 -1
  157. package/lib/chain/reprocess.js +2 -1
  158. package/lib/chain/reprocess.js.map +1 -1
  159. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
  160. package/lib/chain/seenCache/seenGossipBlockInput.js +1 -1
  161. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  162. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  163. package/lib/chain/stateCache/persistentCheckpointsCache.js +1 -1
  164. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  165. package/lib/chain/validation/executionPayloadBid.d.ts +0 -15
  166. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  167. package/lib/chain/validation/executionPayloadBid.js +24 -145
  168. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  169. package/lib/chain/validation/inclusionList.d.ts +14 -0
  170. package/lib/chain/validation/inclusionList.d.ts.map +1 -0
  171. package/lib/chain/validation/inclusionList.js +150 -0
  172. package/lib/chain/validation/inclusionList.js.map +1 -0
  173. package/lib/chain/validation/index.d.ts +1 -0
  174. package/lib/chain/validation/index.d.ts.map +1 -1
  175. package/lib/chain/validation/index.js +1 -0
  176. package/lib/chain/validation/index.js.map +1 -1
  177. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  178. package/lib/chain/validatorMonitor.js +6 -4
  179. package/lib/chain/validatorMonitor.js.map +1 -1
  180. package/lib/constants/constants.d.ts +1 -0
  181. package/lib/constants/constants.d.ts.map +1 -1
  182. package/lib/constants/constants.js +1 -0
  183. package/lib/constants/constants.js.map +1 -1
  184. package/lib/db/beacon.d.ts +7 -0
  185. package/lib/db/beacon.d.ts.map +1 -1
  186. package/lib/db/beacon.js +34 -0
  187. package/lib/db/beacon.js.map +1 -1
  188. package/lib/db/dataColumnStore.d.ts +1 -1
  189. package/lib/db/dataColumnStore.d.ts.map +1 -1
  190. package/lib/db/dataColumnStore.js +1 -4
  191. package/lib/db/dataColumnStore.js.map +1 -1
  192. package/lib/db/interface.d.ts +1 -0
  193. package/lib/db/interface.d.ts.map +1 -1
  194. package/lib/db/repositories/blockArchive.js +2 -2
  195. package/lib/db/repositories/blockArchive.js.map +1 -1
  196. package/lib/db/repositories/blockArchiveIndex.d.ts +1 -1
  197. package/lib/db/repositories/blockArchiveIndex.d.ts.map +1 -1
  198. package/lib/db/repositories/blockArchiveIndex.js +1 -2
  199. package/lib/db/repositories/blockArchiveIndex.js.map +1 -1
  200. package/lib/db/repositories/dataColumnSidecarArchive.d.ts +6 -0
  201. package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +1 -1
  202. package/lib/db/repositories/dataColumnSidecarArchive.js +19 -0
  203. package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
  204. package/lib/execution/builder/validateBid.d.ts.map +1 -1
  205. package/lib/execution/builder/validateBid.js +14 -1
  206. package/lib/execution/builder/validateBid.js.map +1 -1
  207. package/lib/execution/engine/blobVersionedHashes.d.ts +1 -1
  208. package/lib/execution/engine/blobVersionedHashes.d.ts.map +1 -1
  209. package/lib/execution/engine/blobVersionedHashes.js.map +1 -1
  210. package/lib/execution/engine/disabled.d.ts +1 -0
  211. package/lib/execution/engine/disabled.d.ts.map +1 -1
  212. package/lib/execution/engine/disabled.js +3 -0
  213. package/lib/execution/engine/disabled.js.map +1 -1
  214. package/lib/execution/engine/http.d.ts +8 -2
  215. package/lib/execution/engine/http.d.ts.map +1 -1
  216. package/lib/execution/engine/http.js +27 -4
  217. package/lib/execution/engine/http.js.map +1 -1
  218. package/lib/execution/engine/index.d.ts +1 -1
  219. package/lib/execution/engine/index.d.ts.map +1 -1
  220. package/lib/execution/engine/index.js +2 -2
  221. package/lib/execution/engine/index.js.map +1 -1
  222. package/lib/execution/engine/interface.d.ts +12 -3
  223. package/lib/execution/engine/interface.d.ts.map +1 -1
  224. package/lib/execution/engine/interface.js.map +1 -1
  225. package/lib/execution/engine/jsonRpcHttpClient.d.ts.map +1 -1
  226. package/lib/execution/engine/jsonRpcHttpClient.js +14 -4
  227. package/lib/execution/engine/jsonRpcHttpClient.js.map +1 -1
  228. package/lib/execution/engine/jsonRpcTransport.d.ts +3 -2
  229. package/lib/execution/engine/jsonRpcTransport.d.ts.map +1 -1
  230. package/lib/execution/engine/jsonRpcTransport.js +33 -9
  231. package/lib/execution/engine/jsonRpcTransport.js.map +1 -1
  232. package/lib/execution/engine/mock.d.ts +1 -0
  233. package/lib/execution/engine/mock.d.ts.map +1 -1
  234. package/lib/execution/engine/mock.js +31 -7
  235. package/lib/execution/engine/mock.js.map +1 -1
  236. package/lib/execution/engine/payloadIdCache.d.ts +5 -3
  237. package/lib/execution/engine/payloadIdCache.d.ts.map +1 -1
  238. package/lib/execution/engine/payloadIdCache.js +15 -4
  239. package/lib/execution/engine/payloadIdCache.js.map +1 -1
  240. package/lib/execution/engine/restTransport.d.ts +5 -2
  241. package/lib/execution/engine/restTransport.d.ts.map +1 -1
  242. package/lib/execution/engine/restTransport.js +36 -21
  243. package/lib/execution/engine/restTransport.js.map +1 -1
  244. package/lib/execution/engine/sszTypes.d.ts +38 -38
  245. package/lib/execution/engine/transport.d.ts +5 -2
  246. package/lib/execution/engine/transport.d.ts.map +1 -1
  247. package/lib/execution/engine/transportMetrics.d.ts +5 -1
  248. package/lib/execution/engine/transportMetrics.d.ts.map +1 -1
  249. package/lib/execution/engine/types.d.ts +25 -1
  250. package/lib/execution/engine/types.d.ts.map +1 -1
  251. package/lib/execution/engine/types.js +31 -17
  252. package/lib/execution/engine/types.js.map +1 -1
  253. package/lib/index.d.ts +1 -0
  254. package/lib/index.d.ts.map +1 -1
  255. package/lib/index.js +2 -0
  256. package/lib/index.js.map +1 -1
  257. package/lib/metrics/metrics/beacon.d.ts +16 -0
  258. package/lib/metrics/metrics/beacon.d.ts.map +1 -1
  259. package/lib/metrics/metrics/beacon.js +35 -0
  260. package/lib/metrics/metrics/beacon.js.map +1 -1
  261. package/lib/metrics/metrics/lodestar.d.ts +23 -0
  262. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  263. package/lib/metrics/metrics/lodestar.js +56 -1
  264. package/lib/metrics/metrics/lodestar.js.map +1 -1
  265. package/lib/monitoring/service.js +1 -1
  266. package/lib/monitoring/service.js.map +1 -1
  267. package/lib/network/gossip/gossipsub.d.ts.map +1 -1
  268. package/lib/network/gossip/gossipsub.js +3 -1
  269. package/lib/network/gossip/gossipsub.js.map +1 -1
  270. package/lib/network/gossip/interface.d.ts +8 -2
  271. package/lib/network/gossip/interface.d.ts.map +1 -1
  272. package/lib/network/gossip/interface.js +1 -0
  273. package/lib/network/gossip/interface.js.map +1 -1
  274. package/lib/network/gossip/topic.d.ts +13 -19
  275. package/lib/network/gossip/topic.d.ts.map +1 -1
  276. package/lib/network/gossip/topic.js +13 -1
  277. package/lib/network/gossip/topic.js.map +1 -1
  278. package/lib/network/interface.d.ts +2 -1
  279. package/lib/network/interface.d.ts.map +1 -1
  280. package/lib/network/network.d.ts +2 -1
  281. package/lib/network/network.d.ts.map +1 -1
  282. package/lib/network/network.js +8 -1
  283. package/lib/network/network.js.map +1 -1
  284. package/lib/network/peers/utils/enrSubnetsDeserialize.d.ts.map +1 -1
  285. package/lib/network/peers/utils/enrSubnetsDeserialize.js +5 -2
  286. package/lib/network/peers/utils/enrSubnetsDeserialize.js.map +1 -1
  287. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  288. package/lib/network/processor/gossipHandlers.js +73 -24
  289. package/lib/network/processor/gossipHandlers.js.map +1 -1
  290. package/lib/network/processor/gossipQueues/index.d.ts.map +1 -1
  291. package/lib/network/processor/gossipQueues/index.js +6 -0
  292. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  293. package/lib/network/processor/gossipValidatorFn.d.ts.map +1 -1
  294. package/lib/network/processor/gossipValidatorFn.js +5 -1
  295. package/lib/network/processor/gossipValidatorFn.js.map +1 -1
  296. package/lib/network/processor/index.d.ts +5 -0
  297. package/lib/network/processor/index.d.ts.map +1 -1
  298. package/lib/network/processor/index.js +40 -29
  299. package/lib/network/processor/index.js.map +1 -1
  300. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -1
  301. package/lib/network/reqresp/ReqRespBeaconNode.js +6 -0
  302. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  303. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -1
  304. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +4 -4
  305. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -1
  306. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js +3 -3
  307. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -1
  308. package/lib/network/reqresp/handlers/inclusionListsByIndices.d.ts +10 -0
  309. package/lib/network/reqresp/handlers/inclusionListsByIndices.d.ts.map +1 -0
  310. package/lib/network/reqresp/handlers/inclusionListsByIndices.js +30 -0
  311. package/lib/network/reqresp/handlers/inclusionListsByIndices.js.map +1 -0
  312. package/lib/network/reqresp/handlers/index.d.ts.map +1 -1
  313. package/lib/network/reqresp/handlers/index.js +5 -0
  314. package/lib/network/reqresp/handlers/index.js.map +1 -1
  315. package/lib/network/reqresp/protocols.d.ts +1 -0
  316. package/lib/network/reqresp/protocols.d.ts.map +1 -1
  317. package/lib/network/reqresp/protocols.js +5 -0
  318. package/lib/network/reqresp/protocols.js.map +1 -1
  319. package/lib/network/reqresp/rateLimit.d.ts.map +1 -1
  320. package/lib/network/reqresp/rateLimit.js +6 -2
  321. package/lib/network/reqresp/rateLimit.js.map +1 -1
  322. package/lib/network/reqresp/types.d.ts +5 -2
  323. package/lib/network/reqresp/types.d.ts.map +1 -1
  324. package/lib/network/reqresp/types.js +3 -0
  325. package/lib/network/reqresp/types.js.map +1 -1
  326. package/lib/network/subnets/attnetsService.d.ts.map +1 -1
  327. package/lib/network/subnets/attnetsService.js +3 -1
  328. package/lib/network/subnets/attnetsService.js.map +1 -1
  329. package/lib/node/nodejs.d.ts +1 -1
  330. package/lib/node/nodejs.d.ts.map +1 -1
  331. package/lib/node/nodejs.js +10 -2
  332. package/lib/node/nodejs.js.map +1 -1
  333. package/lib/node/notifier.d.ts.map +1 -1
  334. package/lib/node/notifier.js +12 -13
  335. package/lib/node/notifier.js.map +1 -1
  336. package/lib/node/options.d.ts +1 -1
  337. package/lib/node/options.d.ts.map +1 -1
  338. package/lib/node/options.js +1 -1
  339. package/lib/node/options.js.map +1 -1
  340. package/lib/sync/interface.d.ts.map +1 -1
  341. package/lib/sync/interface.js.map +1 -1
  342. package/lib/sync/unknownBlock.d.ts.map +1 -1
  343. package/lib/sync/unknownBlock.js +45 -20
  344. package/lib/sync/unknownBlock.js.map +1 -1
  345. package/lib/util/clock.d.ts.map +1 -1
  346. package/lib/util/clock.js +3 -4
  347. package/lib/util/clock.js.map +1 -1
  348. package/lib/util/queue/itemQueue.js +1 -1
  349. package/lib/util/queue/itemQueue.js.map +1 -1
  350. package/lib/util/sszBytes.d.ts +2 -2
  351. package/lib/util/sszBytes.d.ts.map +1 -1
  352. package/lib/util/sszBytes.js +24 -16
  353. package/lib/util/sszBytes.js.map +1 -1
  354. package/package.json +31 -31
  355. package/src/api/impl/api.ts +1 -1
  356. package/src/api/impl/beacon/blocks/index.ts +67 -65
  357. package/src/api/impl/beacon/index.ts +3 -1
  358. package/src/api/impl/beacon/pool/index.ts +5 -1
  359. package/src/api/impl/beacon/state/index.ts +10 -1
  360. package/src/api/impl/beacon/state/utils.ts +20 -10
  361. package/src/api/impl/debug/index.ts +4 -0
  362. package/src/api/impl/validator/index.ts +176 -29
  363. package/src/api/options.ts +3 -0
  364. package/src/chain/ColumnReconstructionTracker.ts +63 -46
  365. package/src/chain/GetBlobsTracker.ts +97 -38
  366. package/src/chain/archiveStore/archiveStore.ts +1 -0
  367. package/src/chain/archiveStore/utils/archiveBlocks.ts +78 -133
  368. package/src/chain/blocks/blockInput/blockInput.ts +1 -1
  369. package/src/chain/blocks/blockInput/utils.ts +2 -2
  370. package/src/chain/blocks/importBlock.ts +19 -18
  371. package/src/chain/blocks/importExecutionPayload.ts +80 -4
  372. package/src/chain/blocks/index.ts +6 -2
  373. package/src/chain/blocks/payloadEnvelopeProcessor.ts +7 -7
  374. package/src/chain/blocks/types.ts +5 -0
  375. package/src/chain/blocks/verifyBlock.ts +1 -0
  376. package/src/chain/blocks/verifyBlocksDataAvailability.ts +10 -1
  377. package/src/chain/blocks/verifyPayloadsDataAvailability.ts +16 -6
  378. package/src/chain/bls/multithread/index.ts +5 -5
  379. package/src/chain/bls/multithread/types.ts +1 -1
  380. package/src/chain/bls/multithread/worker.ts +1 -5
  381. package/src/chain/bls/singleThread.ts +1 -1
  382. package/src/chain/bls/utils.ts +1 -1
  383. package/src/chain/chain.ts +13 -7
  384. package/src/chain/errors/blockError.ts +1 -1
  385. package/src/chain/errors/executionPayloadBid.ts +12 -0
  386. package/src/chain/errors/inclusionList.ts +38 -0
  387. package/src/chain/errors/index.ts +1 -0
  388. package/src/chain/interface.ts +6 -4
  389. package/src/chain/opPools/aggregatedAttestationPool.ts +1 -1
  390. package/src/chain/opPools/attestationPool.ts +1 -1
  391. package/src/chain/opPools/inclusionListStore.ts +208 -0
  392. package/src/chain/opPools/index.ts +1 -0
  393. package/src/chain/opPools/payloadAttestationPool.ts +1 -1
  394. package/src/chain/opPools/syncCommitteeMessagePool.ts +1 -1
  395. package/src/chain/opPools/syncContributionAndProofPool.ts +1 -1
  396. package/src/chain/opPools/utils.ts +1 -1
  397. package/src/chain/options.ts +0 -2
  398. package/src/chain/prepareNextSlot.ts +7 -3
  399. package/src/chain/produceBlock/computeNewStateRoot.ts +9 -2
  400. package/src/chain/produceBlock/produceBlockBody.ts +70 -24
  401. package/src/chain/regen/interface.ts +1 -1
  402. package/src/chain/reprocess.ts +2 -1
  403. package/src/chain/seenCache/seenGossipBlockInput.ts +2 -1
  404. package/src/chain/stateCache/persistentCheckpointsCache.ts +4 -1
  405. package/src/chain/validation/executionPayloadBid.ts +40 -170
  406. package/src/chain/validation/inclusionList.ts +192 -0
  407. package/src/chain/validation/index.ts +1 -0
  408. package/src/chain/validatorMonitor.ts +7 -4
  409. package/src/constants/constants.ts +1 -0
  410. package/src/db/beacon.ts +44 -0
  411. package/src/db/dataColumnStore.ts +2 -4
  412. package/src/db/interface.ts +2 -0
  413. package/src/db/repositories/blockArchive.ts +2 -2
  414. package/src/db/repositories/blockArchiveIndex.ts +2 -3
  415. package/src/db/repositories/dataColumnSidecarArchive.ts +20 -0
  416. package/src/execution/builder/validateBid.ts +23 -2
  417. package/src/execution/engine/blobVersionedHashes.ts +1 -1
  418. package/src/execution/engine/disabled.ts +4 -0
  419. package/src/execution/engine/http.ts +40 -5
  420. package/src/execution/engine/index.ts +3 -2
  421. package/src/execution/engine/interface.ts +28 -4
  422. package/src/execution/engine/jsonRpcHttpClient.ts +12 -5
  423. package/src/execution/engine/jsonRpcTransport.ts +46 -9
  424. package/src/execution/engine/mock.ts +32 -7
  425. package/src/execution/engine/payloadIdCache.ts +24 -6
  426. package/src/execution/engine/restTransport.ts +68 -23
  427. package/src/execution/engine/transport.ts +7 -2
  428. package/src/execution/engine/transportMetrics.ts +2 -1
  429. package/src/execution/engine/types.ts +56 -17
  430. package/src/index.ts +2 -0
  431. package/src/metrics/metrics/beacon.ts +37 -0
  432. package/src/metrics/metrics/lodestar.ts +58 -1
  433. package/src/monitoring/service.ts +1 -1
  434. package/src/network/gossip/gossipsub.ts +3 -1
  435. package/src/network/gossip/interface.ts +5 -0
  436. package/src/network/gossip/topic.ts +14 -0
  437. package/src/network/interface.ts +2 -0
  438. package/src/network/network.ts +14 -1
  439. package/src/network/peers/utils/enrSubnetsDeserialize.ts +5 -2
  440. package/src/network/processor/gossipHandlers.ts +93 -26
  441. package/src/network/processor/gossipQueues/index.ts +6 -0
  442. package/src/network/processor/gossipValidatorFn.ts +5 -0
  443. package/src/network/processor/index.ts +36 -27
  444. package/src/network/processor/types.ts +1 -1
  445. package/src/network/reqresp/ReqRespBeaconNode.ts +7 -0
  446. package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +4 -10
  447. package/src/network/reqresp/handlers/dataColumnSidecarsByRoot.ts +3 -3
  448. package/src/network/reqresp/handlers/inclusionListsByIndices.ts +44 -0
  449. package/src/network/reqresp/handlers/index.ts +5 -0
  450. package/src/network/reqresp/protocols.ts +6 -0
  451. package/src/network/reqresp/rateLimit.ts +6 -2
  452. package/src/network/reqresp/types.ts +6 -0
  453. package/src/network/subnets/attnetsService.ts +8 -3
  454. package/src/node/nodejs.ts +24 -7
  455. package/src/node/notifier.ts +14 -13
  456. package/src/node/options.ts +4 -5
  457. package/src/sync/interface.ts +1 -0
  458. package/src/sync/unknownBlock.ts +50 -30
  459. package/src/util/clock.ts +3 -4
  460. package/src/util/queue/itemQueue.ts +1 -1
  461. package/src/util/sszBytes.ts +27 -14
@@ -1,9 +1,19 @@
1
1
  import {Type} from "@chainsafe/ssz";
2
2
  import {CELLS_PER_EXT_BLOB, ForkName, ForkSeq, isForkPostBellatrix} from "@lodestar/params";
3
- import {ExecutionPayload, ExecutionRequests, Root, RootHex, capella, deneb, electra, gloas} from "@lodestar/types";
3
+ import {
4
+ ExecutionPayload,
5
+ ExecutionRequests,
6
+ Root,
7
+ RootHex,
8
+ bellatrix,
9
+ capella,
10
+ deneb,
11
+ electra,
12
+ gloas,
13
+ } from "@lodestar/types";
4
14
  import {BlobAndProof} from "@lodestar/types/deneb";
5
15
  import {BlobAndProofV2} from "@lodestar/types/fulu";
6
- import {LodestarError, fromHex, strip0xPrefix, toHex, toRootHex} from "@lodestar/utils";
16
+ import {EndTimer, LodestarError, fromHex, strip0xPrefix, toHex, toRootHex} from "@lodestar/utils";
7
17
  import {isValidBlobVersionedHashes} from "./blobVersionedHashes.js";
8
18
  import {
9
19
  ClientCode,
@@ -48,6 +58,7 @@ import {
48
58
  executionForkName,
49
59
  } from "./sszTypes.js";
50
60
  import {ForkchoiceUpdatedResult, GetPayloadResult, IEngineTransport, PayloadStatusResult} from "./transport.js";
61
+ import {EngineTransportMetrics} from "./transportMetrics.js";
51
62
  import {
52
63
  ExecutionPayloadBodyV2,
53
64
  assertReqSizeLimit,
@@ -102,7 +113,10 @@ export function formatClientVersionHeader(clientVersion: ClientVersion): string
102
113
  export class RestEngineTransport implements IEngineTransport {
103
114
  private limits = DEFAULT_LIMITS;
104
115
 
105
- constructor(private readonly client: EngineRestHttpClient) {}
116
+ constructor(
117
+ private readonly client: EngineRestHttpClient,
118
+ private readonly metrics?: EngineTransportMetrics | null
119
+ ) {}
106
120
 
107
121
  get emitter(): JsonRpcHttpClientEventEmitter {
108
122
  return this.client.emitter;
@@ -114,7 +128,7 @@ export class RestEngineTransport implements IEngineTransport {
114
128
  {method: "GET", path: "/capabilities", responseType: "json"},
115
129
  getCapabilitiesOpts
116
130
  );
117
- const capabilities = parseJson(body, "getCapabilities");
131
+ const capabilities = parseJson(body, "getCapabilities", this.metrics);
118
132
  if (
119
133
  !isRecord(capabilities) ||
120
134
  !Array.isArray(capabilities.supported_forks) ||
@@ -220,7 +234,7 @@ export class RestEngineTransport implements IEngineTransport {
220
234
  {method: "POST", path: "/payloads", executionFork: toExecutionForkName(fork), body, responseType: "ssz"},
221
235
  notifyNewPayloadOpts
222
236
  );
223
- return toPayloadStatusResult(deserializeResponse(PayloadStatus, res.body, "notifyNewPayload"));
237
+ return toPayloadStatusResult(deserializeResponse(PayloadStatus, res.body, "notifyNewPayload", this.metrics));
224
238
  }
225
239
 
226
240
  async forkchoiceUpdated(
@@ -268,7 +282,12 @@ export class RestEngineTransport implements IEngineTransport {
268
282
  {method: "POST", path: "/forkchoice", executionFork: toExecutionForkName(fork), body, responseType: "ssz"},
269
283
  fcUReqOpts
270
284
  );
271
- const {payloadStatus, payloadId} = deserializeResponse(ForkchoiceUpdateResponse, res.body, "forkchoiceUpdated");
285
+ const {payloadStatus, payloadId} = deserializeResponse(
286
+ ForkchoiceUpdateResponse,
287
+ res.body,
288
+ "forkchoiceUpdated",
289
+ this.metrics
290
+ );
272
291
  return {
273
292
  payloadStatus: toPayloadStatusResult(payloadStatus),
274
293
  payloadId: payloadId.length > 0 ? toHex(payloadId[0]) : null,
@@ -289,7 +308,8 @@ export class RestEngineTransport implements IEngineTransport {
289
308
  const {payload, blockValue, blobsBundle, executionRequests, shouldOverrideBuilder} = deserializeResponse(
290
309
  BuiltPayloadGloas,
291
310
  res.body,
292
- "getPayload"
311
+ "getPayload",
312
+ this.metrics
293
313
  );
294
314
  return {
295
315
  executionPayload: payload,
@@ -303,7 +323,8 @@ export class RestEngineTransport implements IEngineTransport {
303
323
  const {payload, blockValue, blobsBundle, executionRequests, shouldOverrideBuilder} = deserializeResponse(
304
324
  BuiltPayloadFulu,
305
325
  res.body,
306
- "getPayload"
326
+ "getPayload",
327
+ this.metrics
307
328
  );
308
329
  return {
309
330
  executionPayload: payload,
@@ -317,7 +338,8 @@ export class RestEngineTransport implements IEngineTransport {
317
338
  const {payload, blockValue, blobsBundle, executionRequests, shouldOverrideBuilder} = deserializeResponse(
318
339
  BuiltPayloadElectra,
319
340
  res.body,
320
- "getPayload"
341
+ "getPayload",
342
+ this.metrics
321
343
  );
322
344
  return {
323
345
  executionPayload: payload,
@@ -331,15 +353,16 @@ export class RestEngineTransport implements IEngineTransport {
331
353
  const {payload, blockValue, blobsBundle, shouldOverrideBuilder} = deserializeResponse(
332
354
  BuiltPayloadDeneb,
333
355
  res.body,
334
- "getPayload"
356
+ "getPayload",
357
+ this.metrics
335
358
  );
336
359
  return {executionPayload: payload, executionPayloadValue: blockValue, blobsBundle, shouldOverrideBuilder};
337
360
  }
338
361
  if (ForkSeq[fork] >= ForkSeq.capella) {
339
- const {payload, blockValue} = deserializeResponse(BuiltPayloadCapella, res.body, "getPayload");
362
+ const {payload, blockValue} = deserializeResponse(BuiltPayloadCapella, res.body, "getPayload", this.metrics);
340
363
  return {executionPayload: payload, executionPayloadValue: blockValue, shouldOverrideBuilder: false};
341
364
  }
342
- const {payload, blockValue} = deserializeResponse(BuiltPayloadBellatrix, res.body, "getPayload");
365
+ const {payload, blockValue} = deserializeResponse(BuiltPayloadBellatrix, res.body, "getPayload", this.metrics);
343
366
  return {executionPayload: payload, executionPayloadValue: blockValue, shouldOverrideBuilder: false};
344
367
  }
345
368
 
@@ -356,7 +379,7 @@ export class RestEngineTransport implements IEngineTransport {
356
379
  },
357
380
  getPayloadBodiesByHashOpts
358
381
  );
359
- const bodies = deserializeBodiesResponse(ForkName.gloas, res.body);
382
+ const bodies = deserializeBodiesResponse(ForkName.gloas, res.body, this.metrics);
360
383
  if (bodies.length !== blockHashes.length) {
361
384
  throw Error(`Invalid bodies response length=${bodies.length} blockHashes=${blockHashes.length}`);
362
385
  }
@@ -374,7 +397,7 @@ export class RestEngineTransport implements IEngineTransport {
374
397
  return versionedHashes.map(() => null);
375
398
  }
376
399
 
377
- const {entries} = deserializeResponse(BlobsV1Response, res.body, "getBlobsV1");
400
+ const {entries} = deserializeResponse(BlobsV1Response, res.body, "getBlobsV1", this.metrics);
378
401
  if (entries.length !== versionedHashes.length) {
379
402
  throw Error(`Invalid blobs/v1 response length=${entries.length} versionedHashes=${versionedHashes.length}`);
380
403
  }
@@ -397,7 +420,7 @@ export class RestEngineTransport implements IEngineTransport {
397
420
  return null;
398
421
  }
399
422
 
400
- const {entries} = deserializeResponse(BlobsV2Response, res.body, "getBlobsV2", {reuseBytes: true});
423
+ const {entries} = deserializeResponse(BlobsV2Response, res.body, "getBlobsV2", this.metrics, {reuseBytes: true});
401
424
  if (entries.length !== versionedHashes.length) {
402
425
  throw Error(`Invalid blobs/v2 response length=${entries.length} versionedHashes=${versionedHashes.length}`);
403
426
  }
@@ -418,7 +441,7 @@ export class RestEngineTransport implements IEngineTransport {
418
441
  {method: "GET", path: "/identity", responseType: "json"},
419
442
  getClientVersionOpts
420
443
  );
421
- const versions = parseJson(body, "getClientVersion");
444
+ const versions = parseJson(body, "getClientVersion", this.metrics);
422
445
  if (!Array.isArray(versions)) {
423
446
  throw new EngineRestResponseError("getClientVersion", "Expected an array of client versions");
424
447
  }
@@ -441,6 +464,10 @@ export class RestEngineTransport implements IEngineTransport {
441
464
  };
442
465
  });
443
466
  }
467
+
468
+ getInclusionList(): Promise<bellatrix.Transactions> {
469
+ throw Error("engine_getInclusionListV1 is not available over the REST engine API");
470
+ }
444
471
  }
445
472
 
446
473
  function toPayloadAttributesBellatrix(attributes: PayloadAttributes) {
@@ -502,36 +529,54 @@ function toPayloadStatusResult(payloadStatus: PayloadStatusSsz): PayloadStatusRe
502
529
  }
503
530
  }
504
531
 
505
- function deserializeBodiesResponse(fork: ForkName, data: Uint8Array): (ExecutionPayloadBodyV2 | null)[] {
532
+ function deserializeBodiesResponse(
533
+ fork: ForkName,
534
+ data: Uint8Array,
535
+ metrics?: EngineTransportMetrics | null
536
+ ): (ExecutionPayloadBodyV2 | null)[] {
506
537
  if (ForkSeq[fork] >= ForkSeq.gloas) {
507
- return deserializeResponse(BodiesResponseGloas, data, "getPayloadBodiesByHash").entries.map((entry) =>
538
+ return deserializeResponse(BodiesResponseGloas, data, "getPayloadBodiesByHash", metrics).entries.map((entry) =>
508
539
  entry.available ? entry.body : null
509
540
  );
510
541
  }
511
542
  if (ForkSeq[fork] >= ForkSeq.capella) {
512
- return deserializeResponse(BodiesResponseCapella, data, "getPayloadBodiesByHash").entries.map((entry) =>
543
+ return deserializeResponse(BodiesResponseCapella, data, "getPayloadBodiesByHash", metrics).entries.map((entry) =>
513
544
  entry.available ? {...entry.body, blockAccessList: null} : null
514
545
  );
515
546
  }
516
- return deserializeResponse(BodiesResponseBellatrix, data, "getPayloadBodiesByHash").entries.map((entry) =>
547
+ return deserializeResponse(BodiesResponseBellatrix, data, "getPayloadBodiesByHash", metrics).entries.map((entry) =>
517
548
  entry.available ? {transactions: entry.body.transactions, withdrawals: null, blockAccessList: null} : null
518
549
  );
519
550
  }
520
551
 
521
552
  /** A 2xx response that does not decode is an execution client error, not an unreachable client */
522
- function deserializeResponse<T>(type: Type<T>, body: Uint8Array, routeId: string, opts?: {reuseBytes?: boolean}): T {
553
+ function deserializeResponse<T>(
554
+ type: Type<T>,
555
+ body: Uint8Array,
556
+ routeId: string,
557
+ metrics?: EngineTransportMetrics | null,
558
+ opts?: {reuseBytes?: boolean}
559
+ ): T {
560
+ const timer = metrics?.responseParseTime.startTimer({routeId, encoding: "ssz"});
523
561
  try {
524
562
  return type.deserialize(body, opts);
525
563
  } catch (e) {
526
564
  throw new EngineRestResponseError(routeId, `Invalid SSZ: ${(e as Error).message}`);
565
+ } finally {
566
+ timer?.();
527
567
  }
528
568
  }
529
569
 
530
- function parseJson(body: Uint8Array, routeId: string): unknown {
570
+ function parseJson(body: Uint8Array, routeId: string, metrics?: EngineTransportMetrics | null): unknown {
571
+ let timer: EndTimer | undefined;
531
572
  try {
532
- return JSON.parse(textDecoder.decode(body));
573
+ const text = textDecoder.decode(body);
574
+ timer = metrics?.responseParseTime.startTimer({routeId, encoding: "json"});
575
+ return JSON.parse(text);
533
576
  } catch (e) {
534
577
  throw new EngineRestResponseError(routeId, `Invalid JSON: ${(e as Error).message}`);
578
+ } finally {
579
+ timer?.();
535
580
  }
536
581
  }
537
582
 
@@ -1,5 +1,5 @@
1
1
  import {ForkName} from "@lodestar/params";
2
- import {BlobsBundle, ExecutionPayload, ExecutionRequests, Root, RootHex, Wei} from "@lodestar/types";
2
+ import {BlobsBundle, ExecutionPayload, ExecutionRequests, Root, RootHex, Wei, bellatrix} from "@lodestar/types";
3
3
  import {BlobAndProof} from "@lodestar/types/deneb";
4
4
  import {BlobAndProofV2} from "@lodestar/types/fulu";
5
5
  import {ClientVersion, ExecutionPayloadStatus, PayloadAttributes, PayloadId, VersionedHashes} from "./interface.js";
@@ -10,6 +10,8 @@ export type PayloadStatusResult = {
10
10
  status: ExecutionPayloadStatus;
11
11
  latestValidHash: RootHex | null;
12
12
  validationError: string | null;
13
+ /** PayloadStatusV2: whether a VALID payload satisfied the inclusion list constraints, null otherwise */
14
+ inclusionListSatisfied?: boolean | null;
13
15
  };
14
16
 
15
17
  export type ForkchoiceUpdatedResult = {
@@ -38,7 +40,8 @@ export interface IEngineTransport {
38
40
  executionPayload: ExecutionPayload,
39
41
  versionedHashes?: VersionedHashes,
40
42
  parentBeaconBlockRoot?: Root,
41
- executionRequests?: ExecutionRequests
43
+ executionRequests?: ExecutionRequests,
44
+ inclusionListTransactions?: bellatrix.Transactions
42
45
  ): Promise<PayloadStatusResult>;
43
46
 
44
47
  forkchoiceUpdated(
@@ -58,4 +61,6 @@ export interface IEngineTransport {
58
61
  getBlobsV2(versionedHashes: VersionedHashes, buffers?: Uint8Array[]): Promise<BlobAndProofV2[] | null>;
59
62
 
60
63
  getClientVersion(clientVersion: ClientVersion): Promise<ClientVersion[]>;
64
+
65
+ getInclusionList(): Promise<bellatrix.Transactions>;
61
66
  }
@@ -1,4 +1,4 @@
1
- import {Counter} from "@lodestar/utils";
1
+ import {Counter, Histogram} from "@lodestar/utils";
2
2
 
3
3
  /**
4
4
  * Common metrics type for both json rpc and ssz transport.
@@ -6,4 +6,5 @@ import {Counter} from "@lodestar/utils";
6
6
  export type EngineTransportMetrics = {
7
7
  requestBytes: Counter<{routeId: string}>;
8
8
  responseBytes: Counter<{routeId: string}>;
9
+ responseParseTime: Histogram<{routeId: string; encoding: "json" | "ssz"}>;
9
10
  };
@@ -1,3 +1,4 @@
1
+ import {SerializedList, Type} from "@chainsafe/ssz";
1
2
  import {
2
3
  BUILDER_DEPOSIT_REQUEST_TYPE,
3
4
  BUILDER_EXIT_REQUEST_TYPE,
@@ -8,6 +9,7 @@ import {
8
9
  DEPOSIT_REQUEST_TYPE,
9
10
  FIELD_ELEMENTS_PER_BLOB,
10
11
  ForkName,
12
+ ForkPostElectra,
11
13
  ForkSeq,
12
14
  WITHDRAWAL_REQUEST_TYPE,
13
15
  } from "@lodestar/params";
@@ -22,6 +24,7 @@ import {
22
24
  deneb,
23
25
  gloas,
24
26
  ssz,
27
+ sszTypesFor,
25
28
  } from "@lodestar/types";
26
29
  import {BlobAndProof} from "@lodestar/types/deneb";
27
30
  import {BlobAndProofV2} from "@lodestar/types/fulu";
@@ -53,6 +56,7 @@ export type EngineApiRpcParamTypes = {
53
56
  engine_newPayloadV3: [ExecutionPayloadRpc, VersionedHashesRpc, DATA];
54
57
  engine_newPayloadV4: [ExecutionPayloadRpc, VersionedHashesRpc, DATA, ExecutionRequestsRpc];
55
58
  engine_newPayloadV5: [ExecutionPayloadRpc, VersionedHashesRpc, DATA, ExecutionRequestsRpc];
59
+ engine_newPayloadV6: [ExecutionPayloadRpc, VersionedHashesRpc, DATA, ExecutionRequestsRpc, InclusionListRpc];
56
60
  /**
57
61
  * 1. Object - Payload validity status with respect to the consensus rules:
58
62
  * - blockHash: DATA, 32 Bytes - block hash value of the payload
@@ -74,6 +78,10 @@ export type EngineApiRpcParamTypes = {
74
78
  forkChoiceData: {headBlockHash: DATA; safeBlockHash: DATA; finalizedBlockHash: DATA},
75
79
  payloadAttributes?: PayloadAttributesRpc,
76
80
  ];
81
+ engine_forkchoiceUpdatedV5: [
82
+ forkChoiceData: {headBlockHash: DATA; safeBlockHash: DATA; finalizedBlockHash: DATA},
83
+ payloadAttributes?: PayloadAttributesRpc,
84
+ ];
77
85
  /**
78
86
  * 1. payloadId: QUANTITY, 64 Bits - Identifier of the payload building process
79
87
  */
@@ -96,12 +104,16 @@ export type EngineApiRpcParamTypes = {
96
104
 
97
105
  engine_getBlobsV1: [DATA[]];
98
106
  engine_getBlobsV2: [DATA[]];
107
+
108
+ engine_getInclusionListV1: [];
99
109
  };
100
110
 
101
111
  export type PayloadStatus = {
102
112
  status: ExecutionPayloadStatus;
103
113
  latestValidHash: DATA | null;
104
114
  validationError: string | null;
115
+ /** PayloadStatusV2: whether a VALID payload satisfied the inclusion list constraints, null otherwise */
116
+ inclusionListSatisfied?: boolean | null;
105
117
  };
106
118
 
107
119
  export type EngineApiRpcReturnTypes = {
@@ -114,6 +126,7 @@ export type EngineApiRpcReturnTypes = {
114
126
  engine_newPayloadV3: PayloadStatus;
115
127
  engine_newPayloadV4: PayloadStatus;
116
128
  engine_newPayloadV5: PayloadStatus;
129
+ engine_newPayloadV6: PayloadStatus;
117
130
  engine_forkchoiceUpdatedV1: {
118
131
  payloadStatus: PayloadStatus;
119
132
  payloadId: QUANTITY | null;
@@ -130,6 +143,10 @@ export type EngineApiRpcReturnTypes = {
130
143
  payloadStatus: PayloadStatus;
131
144
  payloadId: QUANTITY | null;
132
145
  };
146
+ engine_forkchoiceUpdatedV5: {
147
+ payloadStatus: PayloadStatus;
148
+ payloadId: QUANTITY | null;
149
+ };
133
150
  /**
134
151
  * payloadId | Error: QUANTITY, 64 Bits - Identifier of the payload building process
135
152
  */
@@ -146,6 +163,8 @@ export type EngineApiRpcReturnTypes = {
146
163
 
147
164
  engine_getBlobsV1: (BlobAndProofRpc | null)[];
148
165
  engine_getBlobsV2: BlobAndProofV2Rpc[] | null;
166
+
167
+ engine_getInclusionListV1: InclusionListRpc;
149
168
  };
150
169
 
151
170
  type ExecutionPayloadRpcWithValue = {
@@ -164,7 +183,7 @@ export type ExecutionPayloadBodyRpc = {
164
183
  };
165
184
 
166
185
  export type ExecutionPayloadBody = {
167
- transactions: bellatrix.Transaction[];
186
+ transactions: bellatrix.Transactions;
168
187
  withdrawals: capella.Withdrawals | null;
169
188
  };
170
189
 
@@ -260,8 +279,13 @@ export type PayloadAttributesRpc = {
260
279
  slotNumber?: QUANTITY;
261
280
  /** QUANTITY, 64 Bits - target value for the gasLimit field of the new payload (GLOAS, execution-apis#796) */
262
281
  targetGasLimit?: QUANTITY;
282
+ /** Array of DATA - transactions that the built payload must include (PayloadAttributesV5, HEZE) */
283
+ inclusionListTransactions?: InclusionListRpc;
263
284
  };
264
285
 
286
+ /** Array of DATA - array of transaction objects */
287
+ export type InclusionListRpc = DATA[];
288
+
265
289
  export type ClientVersionRpc = {
266
290
  /** ClientCode */
267
291
  code: string;
@@ -294,7 +318,7 @@ export function serializeExecutionPayload(fork: ForkName, data: ExecutionPayload
294
318
  extraData: bytesToData(data.extraData),
295
319
  baseFeePerGas: numToQuantity(data.baseFeePerGas),
296
320
  blockHash: bytesToData(data.blockHash),
297
- transactions: data.transactions.map((tran) => bytesToData(tran)),
321
+ transactions: Array.from(data.transactions, (tran) => bytesToData(tran)),
298
322
  };
299
323
 
300
324
  // Capella adds withdrawals to the ExecutionPayload
@@ -378,7 +402,7 @@ export function parseExecutionPayload(
378
402
  extraData: dataToBytes(data.extraData, null),
379
403
  baseFeePerGas: quantityToBigint(data.baseFeePerGas),
380
404
  blockHash: dataToBytes(data.blockHash, 32),
381
- transactions: data.transactions.map((tran) => dataToBytes(tran, null)),
405
+ transactions: SerializedList.fromArray(data.transactions.map((tran) => dataToBytes(tran, null))),
382
406
  };
383
407
 
384
408
  if (ForkSeq[fork] >= ForkSeq.capella) {
@@ -441,6 +465,9 @@ export function serializePayloadAttributes(data: PayloadAttributes): PayloadAttr
441
465
  parentBeaconBlockRoot: data.parentBeaconBlockRoot ? bytesToData(data.parentBeaconBlockRoot) : undefined,
442
466
  slotNumber: data.slotNumber !== undefined ? numToQuantity(data.slotNumber) : undefined,
443
467
  targetGasLimit: data.targetGasLimit !== undefined ? numToQuantity(data.targetGasLimit) : undefined,
468
+ inclusionListTransactions: data.inclusionListTransactions
469
+ ? serializeInclusionList(data.inclusionListTransactions)
470
+ : undefined,
444
471
  };
445
472
  }
446
473
 
@@ -448,6 +475,14 @@ export function serializeBeaconBlockRoot(data: Root): DATA {
448
475
  return bytesToData(data);
449
476
  }
450
477
 
478
+ export function serializeInclusionList(data: bellatrix.Transactions): InclusionListRpc {
479
+ return Array.from(data, (transaction) => bytesToData(transaction));
480
+ }
481
+
482
+ export function deserializeInclusionList(data: InclusionListRpc): bellatrix.Transactions {
483
+ return SerializedList.fromArray(data.map((transaction) => dataToBytes(transaction, null)));
484
+ }
485
+
451
486
  export function deserializePayloadAttributes(data: PayloadAttributesRpc): PayloadAttributes {
452
487
  return {
453
488
  timestamp: quantityToNum(data.timestamp),
@@ -459,6 +494,9 @@ export function deserializePayloadAttributes(data: PayloadAttributesRpc): Payloa
459
494
  parentBeaconBlockRoot: data.parentBeaconBlockRoot ? dataToBytes(data.parentBeaconBlockRoot, 32) : undefined,
460
495
  slotNumber: data.slotNumber !== undefined ? quantityToNum(data.slotNumber) : undefined,
461
496
  targetGasLimit: data.targetGasLimit !== undefined ? quantityToBigint(data.targetGasLimit) : undefined,
497
+ inclusionListTransactions: data.inclusionListTransactions
498
+ ? deserializeInclusionList(data.inclusionListTransactions)
499
+ : undefined,
462
500
  };
463
501
  }
464
502
 
@@ -500,14 +538,15 @@ export function deserializeWithdrawal(serialized: WithdrawalRpc): capella.Withdr
500
538
  }
501
539
 
502
540
  /**
503
- * Prepend a single-byte requestType to requestsBytes
541
+ * Serialize requests prefixed with a single-byte requestType in one allocation
504
542
  */
505
- function prefixRequests(requestsBytes: Uint8Array, requestType: ExecutionRequestType): Uint8Array {
506
- const prefixedRequests = new Uint8Array(1 + requestsBytes.length);
507
- prefixedRequests[0] = requestType;
508
- prefixedRequests.set(requestsBytes, 1);
543
+ function serializePrefixedRequests<T>(type: Type<T>, requests: T, requestType: ExecutionRequestType): Uint8Array {
544
+ const uint8Array = new Uint8Array(1 + type.value_serializedSize(requests));
545
+ const dataView = new DataView(uint8Array.buffer, uint8Array.byteOffset, uint8Array.byteLength);
546
+ uint8Array[0] = requestType;
547
+ type.value_serializeToBytes({uint8Array, dataView}, 1, requests);
509
548
 
510
- return prefixedRequests;
549
+ return uint8Array;
511
550
  }
512
551
 
513
552
  /**
@@ -522,16 +561,16 @@ export function serializeExecutionRequestsToBytes(fork: ForkName, executionReque
522
561
  const result: Uint8Array[] = [];
523
562
 
524
563
  if (deposits.length !== 0) {
525
- result.push(prefixRequests(ssz.electra.DepositRequests.serialize(deposits), DEPOSIT_REQUEST_TYPE));
564
+ result.push(serializePrefixedRequests(ssz.electra.DepositRequests, deposits, DEPOSIT_REQUEST_TYPE));
526
565
  }
527
566
 
528
567
  if (withdrawals.length !== 0) {
529
- result.push(prefixRequests(ssz.electra.WithdrawalRequests.serialize(withdrawals), WITHDRAWAL_REQUEST_TYPE));
568
+ result.push(serializePrefixedRequests(ssz.electra.WithdrawalRequests, withdrawals, WITHDRAWAL_REQUEST_TYPE));
530
569
  }
531
570
 
532
571
  if (consolidations.length !== 0) {
533
572
  result.push(
534
- prefixRequests(ssz.electra.ConsolidationRequests.serialize(consolidations), CONSOLIDATION_REQUEST_TYPE)
573
+ serializePrefixedRequests(ssz.electra.ConsolidationRequests, consolidations, CONSOLIDATION_REQUEST_TYPE)
535
574
  );
536
575
  }
537
576
 
@@ -540,12 +579,12 @@ export function serializeExecutionRequestsToBytes(fork: ForkName, executionReque
540
579
 
541
580
  if (builderDeposits.length !== 0) {
542
581
  result.push(
543
- prefixRequests(ssz.gloas.BuilderDepositRequests.serialize(builderDeposits), BUILDER_DEPOSIT_REQUEST_TYPE)
582
+ serializePrefixedRequests(ssz.gloas.BuilderDepositRequests, builderDeposits, BUILDER_DEPOSIT_REQUEST_TYPE)
544
583
  );
545
584
  }
546
585
 
547
586
  if (builderExits.length !== 0) {
548
- result.push(prefixRequests(ssz.gloas.BuilderExitRequests.serialize(builderExits), BUILDER_EXIT_REQUEST_TYPE));
587
+ result.push(serializePrefixedRequests(ssz.gloas.BuilderExitRequests, builderExits, BUILDER_EXIT_REQUEST_TYPE));
549
588
  }
550
589
  }
551
590
 
@@ -591,7 +630,7 @@ export function deserializeExecutionRequestsFromBytes(fork: ForkName, serialized
591
630
 
592
631
  switch (currentRequestType) {
593
632
  case DEPOSIT_REQUEST_TYPE: {
594
- result.deposits = ssz.electra.DepositRequests.deserialize(requests);
633
+ result.deposits = sszTypesFor(fork as ForkPostElectra).DepositRequests.deserialize(requests);
595
634
  break;
596
635
  }
597
636
  case WITHDRAWAL_REQUEST_TYPE: {
@@ -633,7 +672,7 @@ export function deserializeExecutionRequests(fork: ForkName, serialized: Executi
633
672
  export function deserializeExecutionPayloadBody(data: ExecutionPayloadBodyRpc | null): ExecutionPayloadBody | null {
634
673
  return data
635
674
  ? {
636
- transactions: data.transactions.map((tran) => dataToBytes(tran, null)),
675
+ transactions: SerializedList.fromArray(data.transactions.map((tran) => dataToBytes(tran, null))),
637
676
  withdrawals: data.withdrawals ? data.withdrawals.map(deserializeWithdrawal) : null,
638
677
  }
639
678
  : null;
@@ -656,7 +695,7 @@ export function serializeExecutionPayloadBodyV2(data: ExecutionPayloadBodyV2 | n
656
695
  export function serializeExecutionPayloadBody(data: ExecutionPayloadBody | null): ExecutionPayloadBodyRpc | null {
657
696
  return data
658
697
  ? {
659
- transactions: data.transactions.map((tran) => bytesToData(tran)),
698
+ transactions: Array.from(data.transactions, (tran) => bytesToData(tran)),
660
699
  withdrawals: data.withdrawals ? data.withdrawals.map(serializeWithdrawal) : null,
661
700
  }
662
701
  : null;
package/src/index.ts CHANGED
@@ -6,6 +6,8 @@ export {persistAnchorState} from "./chain/index.js";
6
6
  export {DbCPStateDatastore} from "./chain/stateCache/datastore/db.js";
7
7
  export {FileCPStateDatastore} from "./chain/stateCache/datastore/file.js";
8
8
  export {BeaconDb, type IBeaconDb} from "./db/index.js";
9
+ // Export execution engine to make it usable by builder
10
+ export {initializeExecutionEngine} from "./execution/index.js";
9
11
  // Export metrics utilities to de-duplicate validator metrics
10
12
  export {
11
13
  type HttpMetricsServer,
@@ -1,5 +1,6 @@
1
1
  import {ProducedBlockSource} from "@lodestar/types";
2
2
  import {BlockSelectionResult} from "../../api/impl/validator/index.js";
3
+ import {InclusionListSource} from "../../chain/blocks/types.js";
3
4
  import {BlockProductionStep, PayloadPreparationType} from "../../chain/produceBlock/index.js";
4
5
  import {RegistryMetricCreator} from "../utils/registryMetricCreator.js";
5
6
 
@@ -432,5 +433,41 @@ export function createBeaconMetrics(register: RegistryMetricCreator) {
432
433
  name: "beacon_weak_head_detected_total",
433
434
  help: "Detected current head block is weak. May reorg it out when proposing next slot. See proposer boost reorg for more",
434
435
  }),
436
+
437
+ // HEZE:EIP-7805
438
+ inclusionListsReceived: register.counter<{source: InclusionListSource}>({
439
+ name: "beacon_inclusion_lists_received_total",
440
+ help: "Total number of received inclusion lists",
441
+ labelNames: ["source"],
442
+ }),
443
+ inclusionListsValid: register.counter<{source: InclusionListSource}>({
444
+ name: "beacon_inclusion_lists_valid_total",
445
+ help: "Total number of valid inclusion lists",
446
+ labelNames: ["source"],
447
+ }),
448
+ inclusionListsValidSize: register.counter({
449
+ name: "beacon_inclusion_lists_valid_size_bytes_total",
450
+ help: "Total size of valid inclusion lists in bytes",
451
+ }),
452
+ inclusionListTransactionsReceived: register.counter<{source: InclusionListSource}>({
453
+ name: "beacon_inclusion_list_transactions_received_total",
454
+ help: "Total number of transactions in received inclusion lists",
455
+ labelNames: ["source"],
456
+ }),
457
+ inclusionListsPublished: register.counter({
458
+ name: "beacon_inclusion_lists_published_total",
459
+ help: "Total number of published inclusion lists",
460
+ }),
461
+ inclusionListsValidationTime: register.histogram<{source: InclusionListSource}>({
462
+ name: "beacon_inclusion_lists_validation_time_seconds",
463
+ help: "Time taken to validate inclusion lists",
464
+ buckets: [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5],
465
+ labelNames: ["source"],
466
+ }),
467
+ inclusionListArrivalTime: register.histogram({
468
+ name: "beacon_inclusion_lists_arrival_time_seconds",
469
+ help: "Inclusion list arrival time since the beginning of slot",
470
+ buckets: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
471
+ }),
435
472
  };
436
473
  }
@@ -16,6 +16,7 @@ import {
16
16
  type InvalidAttestationData,
17
17
  ScannedSlotsTerminationReason,
18
18
  } from "../../chain/opPools/aggregatedAttestationPool.js";
19
+ import {InclusionListInsertOutcome} from "../../chain/opPools/inclusionListStore.js";
19
20
  import {InsertOutcome} from "../../chain/opPools/types.js";
20
21
  import {RegenCaller, RegenFnName} from "../../chain/regen/interface.js";
21
22
  import {ReprocessStatus} from "../../chain/reprocess.js";
@@ -330,6 +331,31 @@ export function createLodestarMetrics(
330
331
  }),
331
332
  },
332
333
 
334
+ columnReconstructionQueue: {
335
+ length: register.gauge({
336
+ name: "lodestar_column_reconstruction_queue_length",
337
+ help: "Count of total column reconstruction queue length",
338
+ }),
339
+ droppedJobs: register.gauge({
340
+ name: "lodestar_column_reconstruction_queue_dropped_jobs_total",
341
+ help: "Count of total column reconstruction queue dropped jobs",
342
+ }),
343
+ jobTime: register.histogram({
344
+ name: "lodestar_column_reconstruction_queue_job_time_seconds",
345
+ help: "Time to process column reconstruction queue job in seconds",
346
+ buckets: [0.01, 0.1, 1, 4, 12],
347
+ }),
348
+ jobWaitTime: register.histogram({
349
+ name: "lodestar_column_reconstruction_queue_job_wait_time_seconds",
350
+ help: "Time from job added to the column reconstruction queue to starting in seconds",
351
+ buckets: [0.01, 0.1, 1, 4, 12],
352
+ }),
353
+ concurrency: register.gauge({
354
+ name: "lodestar_column_reconstruction_queue_concurrency",
355
+ help: "Current concurrency of column reconstruction queue",
356
+ }),
357
+ },
358
+
333
359
  engineHttpProcessorQueue: {
334
360
  length: register.gauge({
335
361
  name: "lodestar_engine_http_processor_queue_length",
@@ -1177,11 +1203,31 @@ export function createLodestarMetrics(
1177
1203
  help: "The total result of calling notifyForkchoiceUpdate execution engine api",
1178
1204
  labelNames: ["result"],
1179
1205
  }),
1206
+ getInclusionListV1Requests: register.counter({
1207
+ name: "lodestar_execution_engine_get_inclusion_list_v1_requests_total",
1208
+ help: "Total number of engine_getInclusionListV1 requests",
1209
+ }),
1210
+ getInclusionListV1RequestsDuration: register.histogram({
1211
+ name: "lodestar_execution_engine_get_inclusion_list_v1_duration_seconds",
1212
+ help: "Duration of engine_getInclusionListV1 requests",
1213
+ buckets: [0.05, 0.1, 0.25, 0.5, 1],
1214
+ }),
1180
1215
  engineApiRequests: register.counter<{transport: string}>({
1181
1216
  name: "lodestar_execution_engine_api_requests_total",
1182
1217
  help: "Total engine API requests by transport",
1183
1218
  labelNames: ["transport"],
1184
1219
  }),
1220
+ inclusionListStore: {
1221
+ size: register.gauge({
1222
+ name: "lodestar_inclusion_list_store_size",
1223
+ help: "Current number of inclusion lists retained in the InclusionListStore",
1224
+ }),
1225
+ insertOutcome: register.counter<{insertOutcome: InclusionListInsertOutcome}>({
1226
+ name: "lodestar_inclusion_list_store_insert_outcome_total",
1227
+ help: "Total number of InclusionListStore insertions by outcome",
1228
+ labelNames: ["insertOutcome"],
1229
+ }),
1230
+ },
1185
1231
  opPool: {
1186
1232
  aggregatedAttestationPool: {
1187
1233
  size: register.gauge({
@@ -1428,6 +1474,11 @@ export function createLodestarMetrics(
1428
1474
  help: "Total number of InsertOutcome as a result of adding an execution payload bid from gossip to the pool",
1429
1475
  labelNames: ["insertOutcome"],
1430
1476
  }),
1477
+ apiInsertOutcome: register.counter<{insertOutcome: InsertOutcome}>({
1478
+ name: "lodestar_oppool_execution_payload_bid_pool_api_insert_outcome_total",
1479
+ help: "Total number of InsertOutcome as a result of adding an execution payload bid from api to the pool",
1480
+ labelNames: ["insertOutcome"],
1481
+ }),
1431
1482
  apiValidationTime: register.histogram({
1432
1483
  name: "lodestar_api_execution_payload_bid_validation_time_seconds",
1433
1484
  help: "Time elapsed for signed execution payload bid validation - api path",
@@ -2061,11 +2112,17 @@ export function createLodestarMetrics(
2061
2112
  }),
2062
2113
  streamTime: register.histogram<{routeId: string}>({
2063
2114
  name: "lodestar_execution_engine_http_client_stream_time_seconds",
2064
- help: "ExecutionEngineHttp client - streaming time by routeId",
2115
+ help: "ExecutionEngineHttp client - response body consumption time, including failures and excluding parsing",
2065
2116
  labelNames: ["routeId"],
2066
2117
  // Provide max resolution on problematic values around 1 second
2067
2118
  buckets: [0.1, 0.5, 1, 2, 5, 15],
2068
2119
  }),
2120
+ responseParseTime: register.histogram<{routeId: string; encoding: "json" | "ssz"}>({
2121
+ name: "lodestar_execution_engine_http_client_response_parse_time_seconds",
2122
+ help: "ExecutionEngineHttp client - JSON.parse or SSZ deserialize time, including failures, excluding body reads and subsequent value conversion",
2123
+ labelNames: ["routeId", "encoding"],
2124
+ buckets: [0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1],
2125
+ }),
2069
2126
  requestErrors: register.gauge<{routeId: string}>({
2070
2127
  name: "lodestar_execution_engine_http_client_request_errors_total",
2071
2128
  help: "ExecutionEngineHttp client - total count of request errors",