@lodestar/beacon-node 1.51.0-dev.4fa9ea1184 → 1.51.0-dev.5619357e93

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 (405) 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 +29 -34
  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 +104 -9
  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/GetBlobsTracker.d.ts +11 -0
  32. package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
  33. package/lib/chain/GetBlobsTracker.js +85 -27
  34. package/lib/chain/GetBlobsTracker.js.map +1 -1
  35. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  36. package/lib/chain/archiveStore/archiveStore.js +1 -0
  37. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  38. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +4 -0
  39. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -1
  40. package/lib/chain/archiveStore/utils/archiveBlocks.js +61 -97
  41. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  42. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  43. package/lib/chain/blocks/importBlock.js +9 -7
  44. package/lib/chain/blocks/importBlock.js.map +1 -1
  45. package/lib/chain/blocks/importExecutionPayload.d.ts +4 -1
  46. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  47. package/lib/chain/blocks/importExecutionPayload.js +57 -4
  48. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  49. package/lib/chain/blocks/index.js +2 -2
  50. package/lib/chain/blocks/index.js.map +1 -1
  51. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts +5 -5
  52. package/lib/chain/blocks/payloadEnvelopeProcessor.js +7 -7
  53. package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -1
  54. package/lib/chain/blocks/types.d.ts +4 -0
  55. package/lib/chain/blocks/types.d.ts.map +1 -1
  56. package/lib/chain/blocks/types.js +5 -0
  57. package/lib/chain/blocks/types.js.map +1 -1
  58. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  59. package/lib/chain/blocks/verifyBlock.js +1 -1
  60. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  61. package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts.map +1 -1
  62. package/lib/chain/blocks/verifyBlocksDataAvailability.js +8 -1
  63. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  64. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts +3 -3
  65. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts.map +1 -1
  66. package/lib/chain/blocks/verifyPayloadsDataAvailability.js +13 -6
  67. package/lib/chain/blocks/verifyPayloadsDataAvailability.js.map +1 -1
  68. package/lib/chain/bls/multithread/index.js +5 -5
  69. package/lib/chain/bls/multithread/index.js.map +1 -1
  70. package/lib/chain/bls/multithread/types.d.ts +1 -1
  71. package/lib/chain/bls/multithread/types.d.ts.map +1 -1
  72. package/lib/chain/bls/multithread/worker.js +1 -1
  73. package/lib/chain/bls/multithread/worker.js.map +1 -1
  74. package/lib/chain/bls/singleThread.js +1 -1
  75. package/lib/chain/bls/singleThread.js.map +1 -1
  76. package/lib/chain/bls/utils.js +1 -1
  77. package/lib/chain/bls/utils.js.map +1 -1
  78. package/lib/chain/chain.d.ts +3 -2
  79. package/lib/chain/chain.d.ts.map +1 -1
  80. package/lib/chain/chain.js +8 -5
  81. package/lib/chain/chain.js.map +1 -1
  82. package/lib/chain/errors/blockError.d.ts +1 -1
  83. package/lib/chain/errors/blockError.d.ts.map +1 -1
  84. package/lib/chain/errors/blockError.js +1 -1
  85. package/lib/chain/errors/blockError.js.map +1 -1
  86. package/lib/chain/errors/executionPayloadBid.d.ts +11 -1
  87. package/lib/chain/errors/executionPayloadBid.d.ts.map +1 -1
  88. package/lib/chain/errors/executionPayloadBid.js +2 -0
  89. package/lib/chain/errors/executionPayloadBid.js.map +1 -1
  90. package/lib/chain/errors/inclusionList.d.ts +60 -0
  91. package/lib/chain/errors/inclusionList.d.ts.map +1 -0
  92. package/lib/chain/errors/inclusionList.js +19 -0
  93. package/lib/chain/errors/inclusionList.js.map +1 -0
  94. package/lib/chain/errors/index.d.ts +1 -0
  95. package/lib/chain/errors/index.d.ts.map +1 -1
  96. package/lib/chain/errors/index.js +1 -0
  97. package/lib/chain/errors/index.js.map +1 -1
  98. package/lib/chain/interface.d.ts +4 -4
  99. package/lib/chain/interface.d.ts.map +1 -1
  100. package/lib/chain/interface.js.map +1 -1
  101. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  102. package/lib/chain/opPools/aggregatedAttestationPool.js +23 -10
  103. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  104. package/lib/chain/opPools/attestationPool.d.ts +1 -1
  105. package/lib/chain/opPools/attestationPool.d.ts.map +1 -1
  106. package/lib/chain/opPools/attestationPool.js +15 -4
  107. package/lib/chain/opPools/attestationPool.js.map +1 -1
  108. package/lib/chain/opPools/inclusionListStore.d.ts +63 -0
  109. package/lib/chain/opPools/inclusionListStore.d.ts.map +1 -0
  110. package/lib/chain/opPools/inclusionListStore.js +171 -0
  111. package/lib/chain/opPools/inclusionListStore.js.map +1 -0
  112. package/lib/chain/opPools/index.d.ts +1 -0
  113. package/lib/chain/opPools/index.d.ts.map +1 -1
  114. package/lib/chain/opPools/index.js +1 -0
  115. package/lib/chain/opPools/index.js.map +1 -1
  116. package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -1
  117. package/lib/chain/opPools/payloadAttestationPool.js +17 -7
  118. package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
  119. package/lib/chain/opPools/syncCommitteeMessagePool.d.ts.map +1 -1
  120. package/lib/chain/opPools/syncCommitteeMessagePool.js +9 -3
  121. package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
  122. package/lib/chain/opPools/syncContributionAndProofPool.d.ts.map +1 -1
  123. package/lib/chain/opPools/syncContributionAndProofPool.js +11 -3
  124. package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
  125. package/lib/chain/opPools/utils.d.ts +1 -1
  126. package/lib/chain/opPools/utils.d.ts.map +1 -1
  127. package/lib/chain/opPools/utils.js +1 -1
  128. package/lib/chain/opPools/utils.js.map +1 -1
  129. package/lib/chain/options.d.ts +0 -1
  130. package/lib/chain/options.d.ts.map +1 -1
  131. package/lib/chain/options.js +0 -1
  132. package/lib/chain/options.js.map +1 -1
  133. package/lib/chain/produceBlock/produceBlockBody.d.ts +3 -1
  134. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  135. package/lib/chain/produceBlock/produceBlockBody.js +30 -10
  136. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  137. package/lib/chain/regen/interface.d.ts +1 -1
  138. package/lib/chain/regen/interface.d.ts.map +1 -1
  139. package/lib/chain/regen/interface.js +1 -1
  140. package/lib/chain/regen/interface.js.map +1 -1
  141. package/lib/chain/validation/executionPayloadBid.d.ts +0 -15
  142. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  143. package/lib/chain/validation/executionPayloadBid.js +24 -145
  144. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  145. package/lib/chain/validation/inclusionList.d.ts +14 -0
  146. package/lib/chain/validation/inclusionList.d.ts.map +1 -0
  147. package/lib/chain/validation/inclusionList.js +150 -0
  148. package/lib/chain/validation/inclusionList.js.map +1 -0
  149. package/lib/chain/validation/index.d.ts +1 -0
  150. package/lib/chain/validation/index.d.ts.map +1 -1
  151. package/lib/chain/validation/index.js +1 -0
  152. package/lib/chain/validation/index.js.map +1 -1
  153. package/lib/db/beacon.d.ts +7 -0
  154. package/lib/db/beacon.d.ts.map +1 -1
  155. package/lib/db/beacon.js +34 -0
  156. package/lib/db/beacon.js.map +1 -1
  157. package/lib/db/dataColumnStore.d.ts +1 -1
  158. package/lib/db/dataColumnStore.d.ts.map +1 -1
  159. package/lib/db/dataColumnStore.js +1 -4
  160. package/lib/db/dataColumnStore.js.map +1 -1
  161. package/lib/db/interface.d.ts +1 -0
  162. package/lib/db/interface.d.ts.map +1 -1
  163. package/lib/db/repositories/dataColumnSidecarArchive.d.ts +6 -0
  164. package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +1 -1
  165. package/lib/db/repositories/dataColumnSidecarArchive.js +19 -0
  166. package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
  167. package/lib/execution/builder/validateBid.d.ts.map +1 -1
  168. package/lib/execution/builder/validateBid.js +14 -1
  169. package/lib/execution/builder/validateBid.js.map +1 -1
  170. package/lib/execution/engine/blobVersionedHashes.d.ts +1 -1
  171. package/lib/execution/engine/blobVersionedHashes.d.ts.map +1 -1
  172. package/lib/execution/engine/blobVersionedHashes.js.map +1 -1
  173. package/lib/execution/engine/disabled.d.ts +1 -0
  174. package/lib/execution/engine/disabled.d.ts.map +1 -1
  175. package/lib/execution/engine/disabled.js +3 -0
  176. package/lib/execution/engine/disabled.js.map +1 -1
  177. package/lib/execution/engine/http.d.ts +8 -2
  178. package/lib/execution/engine/http.d.ts.map +1 -1
  179. package/lib/execution/engine/http.js +27 -4
  180. package/lib/execution/engine/http.js.map +1 -1
  181. package/lib/execution/engine/index.d.ts +1 -1
  182. package/lib/execution/engine/index.d.ts.map +1 -1
  183. package/lib/execution/engine/index.js +1 -1
  184. package/lib/execution/engine/index.js.map +1 -1
  185. package/lib/execution/engine/interface.d.ts +12 -3
  186. package/lib/execution/engine/interface.d.ts.map +1 -1
  187. package/lib/execution/engine/interface.js.map +1 -1
  188. package/lib/execution/engine/jsonRpcTransport.d.ts +3 -2
  189. package/lib/execution/engine/jsonRpcTransport.d.ts.map +1 -1
  190. package/lib/execution/engine/jsonRpcTransport.js +33 -9
  191. package/lib/execution/engine/jsonRpcTransport.js.map +1 -1
  192. package/lib/execution/engine/mock.d.ts +1 -0
  193. package/lib/execution/engine/mock.d.ts.map +1 -1
  194. package/lib/execution/engine/mock.js +31 -7
  195. package/lib/execution/engine/mock.js.map +1 -1
  196. package/lib/execution/engine/payloadIdCache.d.ts +5 -3
  197. package/lib/execution/engine/payloadIdCache.d.ts.map +1 -1
  198. package/lib/execution/engine/payloadIdCache.js +15 -4
  199. package/lib/execution/engine/payloadIdCache.js.map +1 -1
  200. package/lib/execution/engine/restTransport.d.ts +2 -1
  201. package/lib/execution/engine/restTransport.d.ts.map +1 -1
  202. package/lib/execution/engine/restTransport.js +3 -0
  203. package/lib/execution/engine/restTransport.js.map +1 -1
  204. package/lib/execution/engine/sszTypes.d.ts +38 -38
  205. package/lib/execution/engine/transport.d.ts +5 -2
  206. package/lib/execution/engine/transport.d.ts.map +1 -1
  207. package/lib/execution/engine/types.d.ts +25 -1
  208. package/lib/execution/engine/types.d.ts.map +1 -1
  209. package/lib/execution/engine/types.js +19 -6
  210. package/lib/execution/engine/types.js.map +1 -1
  211. package/lib/index.d.ts +1 -0
  212. package/lib/index.d.ts.map +1 -1
  213. package/lib/index.js +2 -0
  214. package/lib/index.js.map +1 -1
  215. package/lib/metrics/metrics/beacon.d.ts +16 -0
  216. package/lib/metrics/metrics/beacon.d.ts.map +1 -1
  217. package/lib/metrics/metrics/beacon.js +35 -0
  218. package/lib/metrics/metrics/beacon.js.map +1 -1
  219. package/lib/metrics/metrics/lodestar.d.ts +15 -0
  220. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  221. package/lib/metrics/metrics/lodestar.js +30 -0
  222. package/lib/metrics/metrics/lodestar.js.map +1 -1
  223. package/lib/monitoring/service.js +1 -1
  224. package/lib/monitoring/service.js.map +1 -1
  225. package/lib/network/core/networkCore.d.ts +2 -0
  226. package/lib/network/core/networkCore.d.ts.map +1 -1
  227. package/lib/network/core/networkCore.js +3 -0
  228. package/lib/network/core/networkCore.js.map +1 -1
  229. package/lib/network/core/networkCoreWorker.js +1 -0
  230. package/lib/network/core/networkCoreWorker.js.map +1 -1
  231. package/lib/network/core/networkCoreWorkerHandler.d.ts +2 -0
  232. package/lib/network/core/networkCoreWorkerHandler.d.ts.map +1 -1
  233. package/lib/network/core/networkCoreWorkerHandler.js +3 -0
  234. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  235. package/lib/network/core/types.d.ts +2 -0
  236. package/lib/network/core/types.d.ts.map +1 -1
  237. package/lib/network/gossip/interface.d.ts +8 -2
  238. package/lib/network/gossip/interface.d.ts.map +1 -1
  239. package/lib/network/gossip/interface.js +1 -0
  240. package/lib/network/gossip/interface.js.map +1 -1
  241. package/lib/network/gossip/topic.d.ts +13 -5
  242. package/lib/network/gossip/topic.d.ts.map +1 -1
  243. package/lib/network/gossip/topic.js +13 -1
  244. package/lib/network/gossip/topic.js.map +1 -1
  245. package/lib/network/interface.d.ts +4 -1
  246. package/lib/network/interface.d.ts.map +1 -1
  247. package/lib/network/network.d.ts +4 -1
  248. package/lib/network/network.d.ts.map +1 -1
  249. package/lib/network/network.js +11 -1
  250. package/lib/network/network.js.map +1 -1
  251. package/lib/network/peers/peerManager.d.ts +2 -1
  252. package/lib/network/peers/peerManager.d.ts.map +1 -1
  253. package/lib/network/peers/peerManager.js.map +1 -1
  254. package/lib/network/peers/utils/assertPeerRelevance.d.ts +9 -1
  255. package/lib/network/peers/utils/assertPeerRelevance.d.ts.map +1 -1
  256. package/lib/network/peers/utils/assertPeerRelevance.js +32 -21
  257. package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
  258. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  259. package/lib/network/processor/gossipHandlers.js +73 -24
  260. package/lib/network/processor/gossipHandlers.js.map +1 -1
  261. package/lib/network/processor/gossipQueues/index.d.ts.map +1 -1
  262. package/lib/network/processor/gossipQueues/index.js +6 -0
  263. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  264. package/lib/network/processor/gossipValidatorFn.d.ts.map +1 -1
  265. package/lib/network/processor/gossipValidatorFn.js +5 -1
  266. package/lib/network/processor/gossipValidatorFn.js.map +1 -1
  267. package/lib/network/processor/index.d.ts.map +1 -1
  268. package/lib/network/processor/index.js +27 -25
  269. package/lib/network/processor/index.js.map +1 -1
  270. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -1
  271. package/lib/network/reqresp/ReqRespBeaconNode.js +6 -0
  272. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  273. package/lib/network/reqresp/handlers/inclusionListsByIndices.d.ts +10 -0
  274. package/lib/network/reqresp/handlers/inclusionListsByIndices.d.ts.map +1 -0
  275. package/lib/network/reqresp/handlers/inclusionListsByIndices.js +30 -0
  276. package/lib/network/reqresp/handlers/inclusionListsByIndices.js.map +1 -0
  277. package/lib/network/reqresp/handlers/index.d.ts.map +1 -1
  278. package/lib/network/reqresp/handlers/index.js +5 -0
  279. package/lib/network/reqresp/handlers/index.js.map +1 -1
  280. package/lib/network/reqresp/protocols.d.ts +1 -0
  281. package/lib/network/reqresp/protocols.d.ts.map +1 -1
  282. package/lib/network/reqresp/protocols.js +5 -0
  283. package/lib/network/reqresp/protocols.js.map +1 -1
  284. package/lib/network/reqresp/rateLimit.d.ts.map +1 -1
  285. package/lib/network/reqresp/rateLimit.js +4 -0
  286. package/lib/network/reqresp/rateLimit.js.map +1 -1
  287. package/lib/network/reqresp/types.d.ts +5 -2
  288. package/lib/network/reqresp/types.d.ts.map +1 -1
  289. package/lib/network/reqresp/types.js +3 -0
  290. package/lib/network/reqresp/types.js.map +1 -1
  291. package/lib/node/nodejs.d.ts +1 -1
  292. package/lib/node/nodejs.d.ts.map +1 -1
  293. package/lib/node/nodejs.js +10 -2
  294. package/lib/node/nodejs.js.map +1 -1
  295. package/lib/node/options.d.ts +1 -1
  296. package/lib/node/options.d.ts.map +1 -1
  297. package/lib/node/options.js +1 -1
  298. package/lib/node/options.js.map +1 -1
  299. package/lib/sync/interface.d.ts.map +1 -1
  300. package/lib/sync/interface.js.map +1 -1
  301. package/lib/sync/sync.d.ts +7 -0
  302. package/lib/sync/sync.d.ts.map +1 -1
  303. package/lib/sync/sync.js +61 -3
  304. package/lib/sync/sync.js.map +1 -1
  305. package/lib/sync/unknownBlock.d.ts.map +1 -1
  306. package/lib/sync/unknownBlock.js +42 -18
  307. package/lib/sync/unknownBlock.js.map +1 -1
  308. package/lib/util/queue/itemQueue.js +1 -1
  309. package/lib/util/queue/itemQueue.js.map +1 -1
  310. package/lib/util/sszBytes.js +2 -2
  311. package/lib/util/sszBytes.js.map +1 -1
  312. package/package.json +31 -31
  313. package/src/api/impl/api.ts +1 -1
  314. package/src/api/impl/beacon/blocks/index.ts +57 -62
  315. package/src/api/impl/beacon/index.ts +3 -1
  316. package/src/api/impl/beacon/pool/index.ts +5 -1
  317. package/src/api/impl/beacon/state/index.ts +10 -1
  318. package/src/api/impl/beacon/state/utils.ts +20 -10
  319. package/src/api/impl/debug/index.ts +4 -0
  320. package/src/api/impl/validator/index.ts +134 -9
  321. package/src/api/options.ts +3 -0
  322. package/src/chain/GetBlobsTracker.ts +97 -38
  323. package/src/chain/archiveStore/archiveStore.ts +1 -0
  324. package/src/chain/archiveStore/utils/archiveBlocks.ts +76 -130
  325. package/src/chain/blocks/importBlock.ts +11 -14
  326. package/src/chain/blocks/importExecutionPayload.ts +80 -4
  327. package/src/chain/blocks/index.ts +6 -2
  328. package/src/chain/blocks/payloadEnvelopeProcessor.ts +7 -7
  329. package/src/chain/blocks/types.ts +5 -0
  330. package/src/chain/blocks/verifyBlock.ts +1 -0
  331. package/src/chain/blocks/verifyBlocksDataAvailability.ts +10 -1
  332. package/src/chain/blocks/verifyPayloadsDataAvailability.ts +16 -6
  333. package/src/chain/bls/multithread/index.ts +5 -5
  334. package/src/chain/bls/multithread/types.ts +1 -1
  335. package/src/chain/bls/multithread/worker.ts +1 -5
  336. package/src/chain/bls/singleThread.ts +1 -1
  337. package/src/chain/bls/utils.ts +1 -1
  338. package/src/chain/chain.ts +9 -5
  339. package/src/chain/errors/blockError.ts +1 -1
  340. package/src/chain/errors/executionPayloadBid.ts +12 -0
  341. package/src/chain/errors/inclusionList.ts +38 -0
  342. package/src/chain/errors/index.ts +1 -0
  343. package/src/chain/interface.ts +4 -3
  344. package/src/chain/opPools/aggregatedAttestationPool.ts +25 -9
  345. package/src/chain/opPools/attestationPool.ts +16 -4
  346. package/src/chain/opPools/inclusionListStore.ts +208 -0
  347. package/src/chain/opPools/index.ts +1 -0
  348. package/src/chain/opPools/payloadAttestationPool.ts +18 -7
  349. package/src/chain/opPools/syncCommitteeMessagePool.ts +10 -3
  350. package/src/chain/opPools/syncContributionAndProofPool.ts +13 -3
  351. package/src/chain/opPools/utils.ts +1 -1
  352. package/src/chain/options.ts +0 -2
  353. package/src/chain/produceBlock/produceBlockBody.ts +60 -19
  354. package/src/chain/regen/interface.ts +1 -1
  355. package/src/chain/validation/executionPayloadBid.ts +40 -170
  356. package/src/chain/validation/inclusionList.ts +192 -0
  357. package/src/chain/validation/index.ts +1 -0
  358. package/src/db/beacon.ts +44 -0
  359. package/src/db/dataColumnStore.ts +2 -4
  360. package/src/db/interface.ts +2 -0
  361. package/src/db/repositories/dataColumnSidecarArchive.ts +20 -0
  362. package/src/execution/builder/validateBid.ts +23 -2
  363. package/src/execution/engine/blobVersionedHashes.ts +1 -1
  364. package/src/execution/engine/disabled.ts +4 -0
  365. package/src/execution/engine/http.ts +40 -5
  366. package/src/execution/engine/index.ts +1 -1
  367. package/src/execution/engine/interface.ts +28 -4
  368. package/src/execution/engine/jsonRpcTransport.ts +46 -9
  369. package/src/execution/engine/mock.ts +32 -7
  370. package/src/execution/engine/payloadIdCache.ts +24 -6
  371. package/src/execution/engine/restTransport.ts +15 -1
  372. package/src/execution/engine/transport.ts +7 -2
  373. package/src/execution/engine/types.ts +44 -7
  374. package/src/index.ts +2 -0
  375. package/src/metrics/metrics/beacon.ts +37 -0
  376. package/src/metrics/metrics/lodestar.ts +31 -0
  377. package/src/monitoring/service.ts +1 -1
  378. package/src/network/core/networkCore.ts +5 -0
  379. package/src/network/core/networkCoreWorker.ts +1 -0
  380. package/src/network/core/networkCoreWorkerHandler.ts +4 -0
  381. package/src/network/core/types.ts +2 -0
  382. package/src/network/gossip/interface.ts +5 -0
  383. package/src/network/gossip/topic.ts +14 -0
  384. package/src/network/interface.ts +4 -0
  385. package/src/network/network.ts +19 -1
  386. package/src/network/peers/peerManager.ts +1 -1
  387. package/src/network/peers/utils/assertPeerRelevance.ts +39 -23
  388. package/src/network/processor/gossipHandlers.ts +93 -26
  389. package/src/network/processor/gossipQueues/index.ts +6 -0
  390. package/src/network/processor/gossipValidatorFn.ts +5 -0
  391. package/src/network/processor/index.ts +23 -23
  392. package/src/network/processor/types.ts +1 -1
  393. package/src/network/reqresp/ReqRespBeaconNode.ts +7 -0
  394. package/src/network/reqresp/handlers/inclusionListsByIndices.ts +44 -0
  395. package/src/network/reqresp/handlers/index.ts +5 -0
  396. package/src/network/reqresp/protocols.ts +6 -0
  397. package/src/network/reqresp/rateLimit.ts +4 -0
  398. package/src/network/reqresp/types.ts +6 -0
  399. package/src/node/nodejs.ts +24 -7
  400. package/src/node/options.ts +4 -5
  401. package/src/sync/interface.ts +1 -0
  402. package/src/sync/sync.ts +65 -4
  403. package/src/sync/unknownBlock.ts +47 -28
  404. package/src/util/queue/itemQueue.ts +1 -1
  405. package/src/util/sszBytes.ts +2 -2
@@ -1,4 +1,4 @@
1
- import {Type} from "@chainsafe/ssz";
1
+ import {SerializedList, Type} from "@chainsafe/ssz";
2
2
  import {
3
3
  BUILDER_DEPOSIT_REQUEST_TYPE,
4
4
  BUILDER_EXIT_REQUEST_TYPE,
@@ -9,6 +9,7 @@ import {
9
9
  DEPOSIT_REQUEST_TYPE,
10
10
  FIELD_ELEMENTS_PER_BLOB,
11
11
  ForkName,
12
+ ForkPostElectra,
12
13
  ForkSeq,
13
14
  WITHDRAWAL_REQUEST_TYPE,
14
15
  } from "@lodestar/params";
@@ -23,6 +24,7 @@ import {
23
24
  deneb,
24
25
  gloas,
25
26
  ssz,
27
+ sszTypesFor,
26
28
  } from "@lodestar/types";
27
29
  import {BlobAndProof} from "@lodestar/types/deneb";
28
30
  import {BlobAndProofV2} from "@lodestar/types/fulu";
@@ -54,6 +56,7 @@ export type EngineApiRpcParamTypes = {
54
56
  engine_newPayloadV3: [ExecutionPayloadRpc, VersionedHashesRpc, DATA];
55
57
  engine_newPayloadV4: [ExecutionPayloadRpc, VersionedHashesRpc, DATA, ExecutionRequestsRpc];
56
58
  engine_newPayloadV5: [ExecutionPayloadRpc, VersionedHashesRpc, DATA, ExecutionRequestsRpc];
59
+ engine_newPayloadV6: [ExecutionPayloadRpc, VersionedHashesRpc, DATA, ExecutionRequestsRpc, InclusionListRpc];
57
60
  /**
58
61
  * 1. Object - Payload validity status with respect to the consensus rules:
59
62
  * - blockHash: DATA, 32 Bytes - block hash value of the payload
@@ -75,6 +78,10 @@ export type EngineApiRpcParamTypes = {
75
78
  forkChoiceData: {headBlockHash: DATA; safeBlockHash: DATA; finalizedBlockHash: DATA},
76
79
  payloadAttributes?: PayloadAttributesRpc,
77
80
  ];
81
+ engine_forkchoiceUpdatedV5: [
82
+ forkChoiceData: {headBlockHash: DATA; safeBlockHash: DATA; finalizedBlockHash: DATA},
83
+ payloadAttributes?: PayloadAttributesRpc,
84
+ ];
78
85
  /**
79
86
  * 1. payloadId: QUANTITY, 64 Bits - Identifier of the payload building process
80
87
  */
@@ -97,12 +104,16 @@ export type EngineApiRpcParamTypes = {
97
104
 
98
105
  engine_getBlobsV1: [DATA[]];
99
106
  engine_getBlobsV2: [DATA[]];
107
+
108
+ engine_getInclusionListV1: [];
100
109
  };
101
110
 
102
111
  export type PayloadStatus = {
103
112
  status: ExecutionPayloadStatus;
104
113
  latestValidHash: DATA | null;
105
114
  validationError: string | null;
115
+ /** PayloadStatusV2: whether a VALID payload satisfied the inclusion list constraints, null otherwise */
116
+ inclusionListSatisfied?: boolean | null;
106
117
  };
107
118
 
108
119
  export type EngineApiRpcReturnTypes = {
@@ -115,6 +126,7 @@ export type EngineApiRpcReturnTypes = {
115
126
  engine_newPayloadV3: PayloadStatus;
116
127
  engine_newPayloadV4: PayloadStatus;
117
128
  engine_newPayloadV5: PayloadStatus;
129
+ engine_newPayloadV6: PayloadStatus;
118
130
  engine_forkchoiceUpdatedV1: {
119
131
  payloadStatus: PayloadStatus;
120
132
  payloadId: QUANTITY | null;
@@ -131,6 +143,10 @@ export type EngineApiRpcReturnTypes = {
131
143
  payloadStatus: PayloadStatus;
132
144
  payloadId: QUANTITY | null;
133
145
  };
146
+ engine_forkchoiceUpdatedV5: {
147
+ payloadStatus: PayloadStatus;
148
+ payloadId: QUANTITY | null;
149
+ };
134
150
  /**
135
151
  * payloadId | Error: QUANTITY, 64 Bits - Identifier of the payload building process
136
152
  */
@@ -147,6 +163,8 @@ export type EngineApiRpcReturnTypes = {
147
163
 
148
164
  engine_getBlobsV1: (BlobAndProofRpc | null)[];
149
165
  engine_getBlobsV2: BlobAndProofV2Rpc[] | null;
166
+
167
+ engine_getInclusionListV1: InclusionListRpc;
150
168
  };
151
169
 
152
170
  type ExecutionPayloadRpcWithValue = {
@@ -165,7 +183,7 @@ export type ExecutionPayloadBodyRpc = {
165
183
  };
166
184
 
167
185
  export type ExecutionPayloadBody = {
168
- transactions: bellatrix.Transaction[];
186
+ transactions: bellatrix.Transactions;
169
187
  withdrawals: capella.Withdrawals | null;
170
188
  };
171
189
 
@@ -261,8 +279,13 @@ export type PayloadAttributesRpc = {
261
279
  slotNumber?: QUANTITY;
262
280
  /** QUANTITY, 64 Bits - target value for the gasLimit field of the new payload (GLOAS, execution-apis#796) */
263
281
  targetGasLimit?: QUANTITY;
282
+ /** Array of DATA - transactions that the built payload must include (PayloadAttributesV5, HEZE) */
283
+ inclusionListTransactions?: InclusionListRpc;
264
284
  };
265
285
 
286
+ /** Array of DATA - array of transaction objects */
287
+ export type InclusionListRpc = DATA[];
288
+
266
289
  export type ClientVersionRpc = {
267
290
  /** ClientCode */
268
291
  code: string;
@@ -295,7 +318,7 @@ export function serializeExecutionPayload(fork: ForkName, data: ExecutionPayload
295
318
  extraData: bytesToData(data.extraData),
296
319
  baseFeePerGas: numToQuantity(data.baseFeePerGas),
297
320
  blockHash: bytesToData(data.blockHash),
298
- transactions: data.transactions.map((tran) => bytesToData(tran)),
321
+ transactions: Array.from(data.transactions, (tran) => bytesToData(tran)),
299
322
  };
300
323
 
301
324
  // Capella adds withdrawals to the ExecutionPayload
@@ -379,7 +402,7 @@ export function parseExecutionPayload(
379
402
  extraData: dataToBytes(data.extraData, null),
380
403
  baseFeePerGas: quantityToBigint(data.baseFeePerGas),
381
404
  blockHash: dataToBytes(data.blockHash, 32),
382
- transactions: data.transactions.map((tran) => dataToBytes(tran, null)),
405
+ transactions: SerializedList.fromArray(data.transactions.map((tran) => dataToBytes(tran, null))),
383
406
  };
384
407
 
385
408
  if (ForkSeq[fork] >= ForkSeq.capella) {
@@ -442,6 +465,9 @@ export function serializePayloadAttributes(data: PayloadAttributes): PayloadAttr
442
465
  parentBeaconBlockRoot: data.parentBeaconBlockRoot ? bytesToData(data.parentBeaconBlockRoot) : undefined,
443
466
  slotNumber: data.slotNumber !== undefined ? numToQuantity(data.slotNumber) : undefined,
444
467
  targetGasLimit: data.targetGasLimit !== undefined ? numToQuantity(data.targetGasLimit) : undefined,
468
+ inclusionListTransactions: data.inclusionListTransactions
469
+ ? serializeInclusionList(data.inclusionListTransactions)
470
+ : undefined,
445
471
  };
446
472
  }
447
473
 
@@ -449,6 +475,14 @@ export function serializeBeaconBlockRoot(data: Root): DATA {
449
475
  return bytesToData(data);
450
476
  }
451
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
+
452
486
  export function deserializePayloadAttributes(data: PayloadAttributesRpc): PayloadAttributes {
453
487
  return {
454
488
  timestamp: quantityToNum(data.timestamp),
@@ -460,6 +494,9 @@ export function deserializePayloadAttributes(data: PayloadAttributesRpc): Payloa
460
494
  parentBeaconBlockRoot: data.parentBeaconBlockRoot ? dataToBytes(data.parentBeaconBlockRoot, 32) : undefined,
461
495
  slotNumber: data.slotNumber !== undefined ? quantityToNum(data.slotNumber) : undefined,
462
496
  targetGasLimit: data.targetGasLimit !== undefined ? quantityToBigint(data.targetGasLimit) : undefined,
497
+ inclusionListTransactions: data.inclusionListTransactions
498
+ ? deserializeInclusionList(data.inclusionListTransactions)
499
+ : undefined,
463
500
  };
464
501
  }
465
502
 
@@ -593,7 +630,7 @@ export function deserializeExecutionRequestsFromBytes(fork: ForkName, serialized
593
630
 
594
631
  switch (currentRequestType) {
595
632
  case DEPOSIT_REQUEST_TYPE: {
596
- result.deposits = ssz.electra.DepositRequests.deserialize(requests);
633
+ result.deposits = sszTypesFor(fork as ForkPostElectra).DepositRequests.deserialize(requests);
597
634
  break;
598
635
  }
599
636
  case WITHDRAWAL_REQUEST_TYPE: {
@@ -635,7 +672,7 @@ export function deserializeExecutionRequests(fork: ForkName, serialized: Executi
635
672
  export function deserializeExecutionPayloadBody(data: ExecutionPayloadBodyRpc | null): ExecutionPayloadBody | null {
636
673
  return data
637
674
  ? {
638
- transactions: data.transactions.map((tran) => dataToBytes(tran, null)),
675
+ transactions: SerializedList.fromArray(data.transactions.map((tran) => dataToBytes(tran, null))),
639
676
  withdrawals: data.withdrawals ? data.withdrawals.map(deserializeWithdrawal) : null,
640
677
  }
641
678
  : null;
@@ -658,7 +695,7 @@ export function serializeExecutionPayloadBodyV2(data: ExecutionPayloadBodyV2 | n
658
695
  export function serializeExecutionPayloadBody(data: ExecutionPayloadBody | null): ExecutionPayloadBodyRpc | null {
659
696
  return data
660
697
  ? {
661
- transactions: data.transactions.map((tran) => bytesToData(tran)),
698
+ transactions: Array.from(data.transactions, (tran) => bytesToData(tran)),
662
699
  withdrawals: data.withdrawals ? data.withdrawals.map(serializeWithdrawal) : null,
663
700
  }
664
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";
@@ -644,6 +645,11 @@ export function createLodestarMetrics(
644
645
  help: "Count of peers by sync type [FullySynced, Advanced, Behind]",
645
646
  labelNames: ["syncType"],
646
647
  }),
648
+ syncPeerFinalizedCheckpointMismatch: register.counter<{reason: string}>({
649
+ name: "lodestar_sync_peer_finalized_checkpoint_mismatch_total",
650
+ help: "Total behind peers whose Status finalized checkpoint is not in our chain, by reason",
651
+ labelNames: ["reason"],
652
+ }),
647
653
  syncSwitchGossipSubscriptions: register.gauge<{action: string}>({
648
654
  name: "lodestar_sync_switch_gossip_subscriptions",
649
655
  help: "Sync switched gossip subscriptions on/off",
@@ -1202,11 +1208,31 @@ export function createLodestarMetrics(
1202
1208
  help: "The total result of calling notifyForkchoiceUpdate execution engine api",
1203
1209
  labelNames: ["result"],
1204
1210
  }),
1211
+ getInclusionListV1Requests: register.counter({
1212
+ name: "lodestar_execution_engine_get_inclusion_list_v1_requests_total",
1213
+ help: "Total number of engine_getInclusionListV1 requests",
1214
+ }),
1215
+ getInclusionListV1RequestsDuration: register.histogram({
1216
+ name: "lodestar_execution_engine_get_inclusion_list_v1_duration_seconds",
1217
+ help: "Duration of engine_getInclusionListV1 requests",
1218
+ buckets: [0.05, 0.1, 0.25, 0.5, 1],
1219
+ }),
1205
1220
  engineApiRequests: register.counter<{transport: string}>({
1206
1221
  name: "lodestar_execution_engine_api_requests_total",
1207
1222
  help: "Total engine API requests by transport",
1208
1223
  labelNames: ["transport"],
1209
1224
  }),
1225
+ inclusionListStore: {
1226
+ size: register.gauge({
1227
+ name: "lodestar_inclusion_list_store_size",
1228
+ help: "Current number of inclusion lists retained in the InclusionListStore",
1229
+ }),
1230
+ insertOutcome: register.counter<{insertOutcome: InclusionListInsertOutcome}>({
1231
+ name: "lodestar_inclusion_list_store_insert_outcome_total",
1232
+ help: "Total number of InclusionListStore insertions by outcome",
1233
+ labelNames: ["insertOutcome"],
1234
+ }),
1235
+ },
1210
1236
  opPool: {
1211
1237
  aggregatedAttestationPool: {
1212
1238
  size: register.gauge({
@@ -1453,6 +1479,11 @@ export function createLodestarMetrics(
1453
1479
  help: "Total number of InsertOutcome as a result of adding an execution payload bid from gossip to the pool",
1454
1480
  labelNames: ["insertOutcome"],
1455
1481
  }),
1482
+ apiInsertOutcome: register.counter<{insertOutcome: InsertOutcome}>({
1483
+ name: "lodestar_oppool_execution_payload_bid_pool_api_insert_outcome_total",
1484
+ help: "Total number of InsertOutcome as a result of adding an execution payload bid from api to the pool",
1485
+ labelNames: ["insertOutcome"],
1486
+ }),
1456
1487
  apiValidationTime: register.histogram({
1457
1488
  name: "lodestar_api_execution_payload_bid_validation_time_seconds",
1458
1489
  help: "Time elapsed for signed execution payload bid validation - api path",
@@ -101,7 +101,7 @@ export class MonitoringService {
101
101
  if (this.monitoringInterval) {
102
102
  clearTimeout(this.monitoringInterval);
103
103
  }
104
- if (this.pendingRequest) {
104
+ if (this.pendingRequest !== undefined) {
105
105
  this.fetchAbortController?.abort(FetchAbortReason.Close);
106
106
  await this.pendingRequest;
107
107
  }
@@ -10,6 +10,7 @@ import {isForkPostFulu} from "@lodestar/params";
10
10
  import {ResponseIncoming} from "@lodestar/reqresp";
11
11
  import {Epoch, Status, fulu, sszTypesFor} from "@lodestar/types";
12
12
  import {formatNodePeer} from "../../api/impl/node/utils.js";
13
+ import {GoodByeReasonCode} from "../../constants/index.js";
13
14
  import {RegistryMetricCreator} from "../../metrics/index.js";
14
15
  import {ClockEvent, IClock} from "../../util/clock.js";
15
16
  import {CustodyConfig} from "../../util/dataColumns.js";
@@ -332,6 +333,10 @@ export class NetworkCore implements INetworkCore {
332
333
  this.peerManager.reStatusPeers(peers);
333
334
  }
334
335
 
336
+ async goodbyeAndDisconnect(peer: PeerIdStr, reason: GoodByeReasonCode): Promise<void> {
337
+ await this.peerManager.goodbyeAndDisconnect(peerIdFromString(peer), reason);
338
+ }
339
+
335
340
  /**
336
341
  * Request att subnets up `toSlot`. Network will ensure to mantain some peers for each
337
342
  */
@@ -138,6 +138,7 @@ const libp2pWorkerApi: NetworkWorkerApi = {
138
138
  prepareSyncCommitteeSubnets: (subscriptions) => core.prepareSyncCommitteeSubnets(subscriptions),
139
139
  reportPeer: (peer, action, actionName) => core.reportPeer(peer, action, actionName),
140
140
  reStatusPeers: (peers) => core.reStatusPeers(peers),
141
+ goodbyeAndDisconnect: (peer, reason) => core.goodbyeAndDisconnect(peer, reason),
141
142
  subscribeGossipCoreTopics: () => core.subscribeGossipCoreTopics(),
142
143
  unsubscribeGossipCoreTopics: () => core.unsubscribeGossipCoreTopics(),
143
144
 
@@ -11,6 +11,7 @@ import type {LoggerNode} from "@lodestar/logger/node";
11
11
  import {ResponseIncoming, ResponseOutgoing} from "@lodestar/reqresp";
12
12
  import {Status} from "@lodestar/types";
13
13
  import {withTimeout} from "@lodestar/utils";
14
+ import {GoodByeReasonCode} from "../../constants/index.js";
14
15
  import {Metrics} from "../../metrics/index.js";
15
16
  import {AsyncIterableBridgeCaller, AsyncIterableBridgeHandler} from "../../util/asyncIterableToEvents.js";
16
17
  import {PeerIdStr, peerIdFromString} from "../../util/peerId.js";
@@ -205,6 +206,9 @@ export class WorkerNetworkCore implements INetworkCore {
205
206
  reStatusPeers(peers: PeerIdStr[]): Promise<void> {
206
207
  return this.getApi().reStatusPeers(peers);
207
208
  }
209
+ goodbyeAndDisconnect(peer: PeerIdStr, reason: GoodByeReasonCode): Promise<void> {
210
+ return this.getApi().goodbyeAndDisconnect(peer, reason);
211
+ }
208
212
  reportPeer(peer: PeerIdStr, action: PeerAction, actionName: string): Promise<void> {
209
213
  return this.getApi().reportPeer(peer, action, actionName);
210
214
  }
@@ -5,6 +5,7 @@ import {SpecJson} from "@lodestar/config";
5
5
  import {LoggerNodeOpts} from "@lodestar/logger/node";
6
6
  import {ResponseIncoming} from "@lodestar/reqresp";
7
7
  import {Status} from "@lodestar/types";
8
+ import {GoodByeReasonCode} from "../../constants/index.js";
8
9
  import {PeerIdStr} from "../../util/peerId.js";
9
10
  import {NetworkOptions} from "../options.js";
10
11
  import {PeerAction, PeerScoreStats} from "../peers/index.js";
@@ -53,6 +54,7 @@ export interface INetworkCore extends INetworkCorePublic {
53
54
  // Sync method
54
55
  reportPeer(peer: PeerIdStr, action: PeerAction, actionName: string): void;
55
56
  reStatusPeers(peers: PeerIdStr[]): Promise<void>;
57
+ goodbyeAndDisconnect(peer: PeerIdStr, reason: GoodByeReasonCode): Promise<void>;
56
58
 
57
59
  // TODO: Duplicated methods with INetwork interface
58
60
  getConnectedPeers(): Promise<PeerIdStr[]>;
@@ -16,6 +16,7 @@ import {
16
16
  capella,
17
17
  deneb,
18
18
  gloas,
19
+ heze,
19
20
  phase0,
20
21
  } from "@lodestar/types";
21
22
  import {Logger} from "@lodestar/utils";
@@ -42,6 +43,7 @@ export enum GossipType {
42
43
  payload_attestation_message = "payload_attestation_message",
43
44
  execution_payload_bid = "execution_payload_bid",
44
45
  proposer_preferences = "proposer_preferences",
46
+ inclusion_list = "inclusion_list",
45
47
  }
46
48
 
47
49
  export type SequentialGossipType = Exclude<GossipType, GossipType.beacon_attestation>;
@@ -80,6 +82,7 @@ export type GossipTopicTypeMap = {
80
82
  [GossipType.payload_attestation_message]: {type: GossipType.payload_attestation_message};
81
83
  [GossipType.execution_payload_bid]: {type: GossipType.execution_payload_bid};
82
84
  [GossipType.proposer_preferences]: {type: GossipType.proposer_preferences};
85
+ [GossipType.inclusion_list]: {type: GossipType.inclusion_list};
83
86
  };
84
87
 
85
88
  export type GossipTopicMap = {
@@ -113,6 +116,7 @@ export type GossipTypeMap = {
113
116
  [GossipType.payload_attestation_message]: gloas.PayloadAttestationMessage;
114
117
  [GossipType.execution_payload_bid]: gloas.SignedExecutionPayloadBid;
115
118
  [GossipType.proposer_preferences]: gloas.SignedProposerPreferences;
119
+ [GossipType.inclusion_list]: heze.SignedInclusionList;
116
120
  };
117
121
 
118
122
  export type GossipFnByType = {
@@ -147,6 +151,7 @@ export type GossipFnByType = {
147
151
  [GossipType.proposer_preferences]: (
148
152
  signedProposerPreferences: gloas.SignedProposerPreferences
149
153
  ) => Promise<void> | void;
154
+ [GossipType.inclusion_list]: (signedInclusionList: heze.SignedInclusionList) => Promise<void> | void;
150
155
  };
151
156
 
152
157
  export type GossipFn = GossipFnByType[keyof GossipFnByType];
@@ -4,6 +4,7 @@ import {
4
4
  ATTESTATION_SUBNET_COUNT,
5
5
  ForkName,
6
6
  ForkSeq,
7
+ MAX_SIGNED_INCLUSION_LIST_SIZE,
7
8
  SYNC_COMMITTEE_SUBNET_COUNT,
8
9
  isForkPostAltair,
9
10
  isForkPostElectra,
@@ -91,6 +92,7 @@ function stringifyGossipTopicType(topic: GossipTopic): string {
91
92
  case GossipType.payload_attestation_message:
92
93
  case GossipType.execution_payload_bid:
93
94
  case GossipType.proposer_preferences:
95
+ case GossipType.inclusion_list:
94
96
  return topic.type;
95
97
  case GossipType.beacon_attestation:
96
98
  case GossipType.sync_committee:
@@ -144,6 +146,8 @@ export function getGossipSSZType(topic: GossipTopic) {
144
146
  return isForkPostGloas(fork) ? sszTypesFor(fork).SignedExecutionPayloadBid : ssz.gloas.SignedExecutionPayloadBid;
145
147
  case GossipType.proposer_preferences:
146
148
  return ssz.gloas.SignedProposerPreferences;
149
+ case GossipType.inclusion_list:
150
+ return ssz.heze.SignedInclusionList;
147
151
  }
148
152
  }
149
153
 
@@ -152,6 +156,9 @@ export function getGossipSSZType(topic: GossipTopic) {
152
156
  */
153
157
  export function getGossipSSZMaxSize(topic: GossipTopic, config: ChainForkConfig, sszType: CompositeTypeAny): number {
154
158
  const maxSize = Math.min(sszType.maxSize, config.MAX_PAYLOAD_SIZE);
159
+ if (topic.type === GossipType.inclusion_list) {
160
+ return Math.min(maxSize, MAX_SIGNED_INCLUSION_LIST_SIZE);
161
+ }
155
162
  if (isForkPostGloas(topic.boundary.fork) && topic.type === GossipType.data_column_sidecar) {
156
163
  return Math.min(maxSize, computeMaxGloasDataColumnSidecarSize(config));
157
164
  }
@@ -235,6 +242,7 @@ export function parseGossipTopic(forkDigestContext: ForkDigestContext, topicStr:
235
242
  case GossipType.payload_attestation_message:
236
243
  case GossipType.execution_payload_bid:
237
244
  case GossipType.proposer_preferences:
245
+ case GossipType.inclusion_list:
238
246
  return {type: gossipTypeStr, boundary, encoding};
239
247
  }
240
248
 
@@ -292,6 +300,10 @@ export function getCoreTopicsAtFork(
292
300
  topics.push({type: GossipType.proposer_preferences});
293
301
  }
294
302
 
303
+ if (ForkSeq[fork] >= ForkSeq.heze) {
304
+ topics.push({type: GossipType.inclusion_list});
305
+ }
306
+
295
307
  // After fulu also track data_column_sidecar_{index}
296
308
  if (ForkSeq[fork] >= ForkSeq.fulu) {
297
309
  topics.push(...getDataColumnSidecarTopics(networkConfig, opts.subscribeAllColumnSubnets));
@@ -409,6 +421,7 @@ export const gossipTopicIgnoreDuplicatePublishError: Record<GossipType, boolean>
409
421
  [GossipType.payload_attestation_message]: true,
410
422
  [GossipType.execution_payload_bid]: true,
411
423
  [GossipType.proposer_preferences]: true,
424
+ [GossipType.inclusion_list]: true,
412
425
  };
413
426
 
414
427
  /**
@@ -447,4 +460,5 @@ export const gossipTopicAllowPublishToZeroPeers: Record<GossipType, boolean> = {
447
460
  [GossipType.payload_attestation_message]: false,
448
461
  [GossipType.execution_payload_bid]: false,
449
462
  [GossipType.proposer_preferences]: false,
463
+ [GossipType.inclusion_list]: false,
450
464
  };
@@ -33,9 +33,11 @@ import {
33
33
  deneb,
34
34
  fulu,
35
35
  gloas,
36
+ heze,
36
37
  phase0,
37
38
  } from "@lodestar/types";
38
39
  import {BlockInputSource} from "../chain/blocks/blockInput/types.js";
40
+ import {GoodByeReasonCode} from "../constants/index.js";
39
41
  import {CustodyConfig} from "../util/dataColumns.js";
40
42
  import {PeerIdStr} from "../util/peerId.js";
41
43
  import {
@@ -73,6 +75,7 @@ export interface INetwork extends INetworkCorePublic {
73
75
  reportPeer(peer: PeerIdStr, action: PeerAction, actionName: string): void;
74
76
  shouldAggregate(subnet: SubnetID, slot: Slot): boolean;
75
77
  reStatusPeers(peers: PeerIdStr[]): Promise<void>;
78
+ goodbyeAndDisconnect(peer: PeerIdStr, reason: GoodByeReasonCode): Promise<void>;
76
79
  searchUnknownBlock(slotRoot: SlotRootHex, source: BlockInputSource, peer?: PeerIdStr): void;
77
80
  searchUnknownEnvelope(slotRoot: SlotRootHex, source: BlockInputSource, peer?: PeerIdStr): void;
78
81
  // ReqResp
@@ -118,6 +121,7 @@ export interface INetwork extends INetworkCorePublic {
118
121
  publishSignedExecutionPayloadBid(signedBid: gloas.SignedExecutionPayloadBid): Promise<number>;
119
122
  publishPayloadAttestationMessage(payloadAttestationMessage: gloas.PayloadAttestationMessage): Promise<number>;
120
123
  publishProposerPreferences(signedProposerPreferences: gloas.SignedProposerPreferences): Promise<number>;
124
+ publishInclusionList(signedInclusionList: heze.SignedInclusionList): Promise<number>;
121
125
 
122
126
  // Debug
123
127
  dumpGossipQueue(gossipType: GossipType): Promise<PendingGossipsubMessage[]>;
@@ -26,6 +26,7 @@ import {
26
26
  deneb,
27
27
  fulu,
28
28
  gloas,
29
+ heze,
29
30
  isGloasDataColumnSidecar,
30
31
  phase0,
31
32
  } from "@lodestar/types";
@@ -33,6 +34,7 @@ import {prettyPrintIndices, sleep} from "@lodestar/utils";
33
34
  import {BlockInputSource} from "../chain/blocks/blockInput/types.js";
34
35
  import {ChainEvent, IBeaconChain} from "../chain/index.js";
35
36
  import {computeSubnetForDataColumnSidecar} from "../chain/validation/dataColumnSidecar.js";
37
+ import {GoodByeReasonCode} from "../constants/index.js";
36
38
  import {IBeaconDb} from "../db/interface.js";
37
39
  import {Metrics, RegistryMetricCreator} from "../metrics/index.js";
38
40
  import {IClock} from "../util/clock.js";
@@ -288,6 +290,10 @@ export class Network implements INetwork {
288
290
  return this.core.reStatusPeers(peers);
289
291
  }
290
292
 
293
+ async goodbyeAndDisconnect(peer: PeerIdStr, reason: GoodByeReasonCode): Promise<void> {
294
+ return this.core.goodbyeAndDisconnect(peer, reason);
295
+ }
296
+
291
297
  searchUnknownBlock(slotRoot: SlotRootHex, source: BlockInputSource, peer?: PeerIdStr): void {
292
298
  this.networkProcessor.searchUnknownBlock(slotRoot, source, peer);
293
299
  }
@@ -531,6 +537,16 @@ export class Network implements INetwork {
531
537
  );
532
538
  }
533
539
 
540
+ async publishInclusionList(signedInclusionList: heze.SignedInclusionList): Promise<number> {
541
+ const epoch = computeEpochAtSlot(signedInclusionList.message.slot);
542
+ const boundary = this.config.getForkBoundaryAtEpoch(epoch);
543
+
544
+ return this.publishGossip<GossipType.inclusion_list>(
545
+ {type: GossipType.inclusion_list, boundary},
546
+ signedInclusionList
547
+ );
548
+ }
549
+
534
550
  async publishProposerPreferences(signedProposerPreferences: gloas.SignedProposerPreferences): Promise<number> {
535
551
  const epoch = computeEpochAtSlot(signedProposerPreferences.message.proposalSlot);
536
552
  const boundary = this.config.getForkBoundaryAtEpoch(epoch);
@@ -844,7 +860,9 @@ export class Network implements INetwork {
844
860
  };
845
861
 
846
862
  private onTargetGroupCountUpdated = (count: number): void => {
847
- this.core.setTargetGroupCount(count);
863
+ this.core.setTargetGroupCount(count).catch((e) => {
864
+ this.logger.debug("Error setting target custody group count", {count}, e as Error);
865
+ });
848
866
  };
849
867
 
850
868
  private onPublishDataColumns = async (sidecars: DataColumnSidecar[]): Promise<void> => {
@@ -893,7 +893,7 @@ export class PeerManager {
893
893
  }
894
894
  }
895
895
 
896
- private async goodbyeAndDisconnect(peer: PeerId, goodbye: GoodByeReasonCode): Promise<void> {
896
+ async goodbyeAndDisconnect(peer: PeerId, goodbye: GoodByeReasonCode): Promise<void> {
897
897
  const reason = GOODBYE_KNOWN_CODES[goodbye.toString()] || "";
898
898
  const peerIdStr = peer.toString();
899
899
  try {