@lodestar/beacon-node 1.42.0-dev.c35b4283f1 → 1.42.0-dev.d32f5153b6

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 (370) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +14 -2
  3. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  4. package/lib/api/impl/beacon/pool/index.js +1 -1
  5. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  6. package/lib/api/impl/beacon/state/index.d.ts.map +1 -1
  7. package/lib/api/impl/beacon/state/index.js +27 -32
  8. package/lib/api/impl/beacon/state/index.js.map +1 -1
  9. package/lib/api/impl/beacon/state/utils.d.ts +4 -4
  10. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
  11. package/lib/api/impl/beacon/state/utils.js +7 -10
  12. package/lib/api/impl/beacon/state/utils.js.map +1 -1
  13. package/lib/api/impl/lodestar/index.d.ts.map +1 -1
  14. package/lib/api/impl/lodestar/index.js +4 -6
  15. package/lib/api/impl/lodestar/index.js.map +1 -1
  16. package/lib/api/impl/proof/index.d.ts.map +1 -1
  17. package/lib/api/impl/proof/index.js +2 -6
  18. package/lib/api/impl/proof/index.js.map +1 -1
  19. package/lib/api/impl/validator/index.d.ts.map +1 -1
  20. package/lib/api/impl/validator/index.js +27 -27
  21. package/lib/api/impl/validator/index.js.map +1 -1
  22. package/lib/api/impl/validator/utils.d.ts +2 -2
  23. package/lib/api/impl/validator/utils.d.ts.map +1 -1
  24. package/lib/api/impl/validator/utils.js +3 -3
  25. package/lib/api/impl/validator/utils.js.map +1 -1
  26. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  27. package/lib/chain/archiveStore/archiveStore.js +1 -0
  28. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  29. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts +3 -7
  30. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +1 -1
  31. package/lib/chain/archiveStore/historicalState/getHistoricalState.js +8 -26
  32. package/lib/chain/archiveStore/historicalState/getHistoricalState.js.map +1 -1
  33. package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts +2 -2
  34. package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts.map +1 -1
  35. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js +1 -0
  36. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js.map +1 -1
  37. package/lib/chain/archiveStore/historicalState/types.d.ts +2 -0
  38. package/lib/chain/archiveStore/historicalState/types.d.ts.map +1 -1
  39. package/lib/chain/archiveStore/historicalState/types.js.map +1 -1
  40. package/lib/chain/archiveStore/historicalState/worker.js +1 -3
  41. package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
  42. package/lib/chain/archiveStore/interface.d.ts +1 -0
  43. package/lib/chain/archiveStore/interface.d.ts.map +1 -1
  44. package/lib/chain/balancesCache.d.ts +2 -2
  45. package/lib/chain/balancesCache.d.ts.map +1 -1
  46. package/lib/chain/balancesCache.js +4 -4
  47. package/lib/chain/balancesCache.js.map +1 -1
  48. package/lib/chain/blocks/blockInput/types.d.ts +1 -0
  49. package/lib/chain/blocks/blockInput/types.d.ts.map +1 -1
  50. package/lib/chain/blocks/blockInput/types.js +1 -0
  51. package/lib/chain/blocks/blockInput/types.js.map +1 -1
  52. package/lib/chain/blocks/importBlock.d.ts +3 -3
  53. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  54. package/lib/chain/blocks/importBlock.js +21 -21
  55. package/lib/chain/blocks/importBlock.js.map +1 -1
  56. package/lib/chain/blocks/importExecutionPayload.d.ts +10 -8
  57. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  58. package/lib/chain/blocks/importExecutionPayload.js +78 -51
  59. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  60. package/lib/chain/blocks/index.d.ts.map +1 -1
  61. package/lib/chain/blocks/index.js +3 -2
  62. package/lib/chain/blocks/index.js.map +1 -1
  63. package/lib/chain/blocks/types.d.ts +21 -15
  64. package/lib/chain/blocks/types.d.ts.map +1 -1
  65. package/lib/chain/blocks/types.js.map +1 -1
  66. package/lib/chain/blocks/utils/checkpoint.d.ts +2 -2
  67. package/lib/chain/blocks/utils/checkpoint.d.ts.map +1 -1
  68. package/lib/chain/blocks/utils/checkpoint.js.map +1 -1
  69. package/lib/chain/blocks/verifyBlock.d.ts +2 -2
  70. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  71. package/lib/chain/blocks/verifyBlock.js +4 -4
  72. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  73. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +5 -5
  74. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  75. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +4 -4
  76. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  77. package/lib/chain/blocks/verifyBlocksSignatures.d.ts +2 -2
  78. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  79. package/lib/chain/blocks/verifyBlocksSignatures.js +1 -1
  80. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  81. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts +3 -3
  82. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +1 -1
  83. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js +3 -3
  84. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js.map +1 -1
  85. package/lib/chain/chain.d.ts +12 -12
  86. package/lib/chain/chain.d.ts.map +1 -1
  87. package/lib/chain/chain.js +47 -39
  88. package/lib/chain/chain.js.map +1 -1
  89. package/lib/chain/emitter.d.ts +2 -2
  90. package/lib/chain/emitter.d.ts.map +1 -1
  91. package/lib/chain/errors/blockError.d.ts +4 -4
  92. package/lib/chain/errors/blockError.d.ts.map +1 -1
  93. package/lib/chain/forkChoice/index.d.ts +4 -4
  94. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  95. package/lib/chain/forkChoice/index.js +27 -23
  96. package/lib/chain/forkChoice/index.js.map +1 -1
  97. package/lib/chain/initState.d.ts +2 -2
  98. package/lib/chain/initState.d.ts.map +1 -1
  99. package/lib/chain/initState.js +1 -1
  100. package/lib/chain/initState.js.map +1 -1
  101. package/lib/chain/interface.d.ts +11 -12
  102. package/lib/chain/interface.d.ts.map +1 -1
  103. package/lib/chain/lightClient/index.d.ts +2 -2
  104. package/lib/chain/lightClient/index.d.ts.map +1 -1
  105. package/lib/chain/lightClient/index.js +4 -4
  106. package/lib/chain/lightClient/index.js.map +1 -1
  107. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +6 -6
  108. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  109. package/lib/chain/opPools/aggregatedAttestationPool.js +10 -13
  110. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  111. package/lib/chain/opPools/opPool.d.ts +3 -3
  112. package/lib/chain/opPools/opPool.d.ts.map +1 -1
  113. package/lib/chain/opPools/opPool.js +7 -7
  114. package/lib/chain/opPools/opPool.js.map +1 -1
  115. package/lib/chain/opPools/utils.d.ts +2 -2
  116. package/lib/chain/opPools/utils.d.ts.map +1 -1
  117. package/lib/chain/opPools/utils.js +1 -1
  118. package/lib/chain/opPools/utils.js.map +1 -1
  119. package/lib/chain/options.d.ts +1 -0
  120. package/lib/chain/options.d.ts.map +1 -1
  121. package/lib/chain/options.js +1 -0
  122. package/lib/chain/options.js.map +1 -1
  123. package/lib/chain/prepareNextSlot.d.ts +2 -2
  124. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  125. package/lib/chain/prepareNextSlot.js +3 -3
  126. package/lib/chain/prepareNextSlot.js.map +1 -1
  127. package/lib/chain/produceBlock/computeNewStateRoot.d.ts +4 -4
  128. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
  129. package/lib/chain/produceBlock/computeNewStateRoot.js +3 -4
  130. package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
  131. package/lib/chain/produceBlock/produceBlockBody.d.ts +5 -5
  132. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  133. package/lib/chain/produceBlock/produceBlockBody.js +12 -16
  134. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  135. package/lib/chain/regen/interface.d.ts +13 -13
  136. package/lib/chain/regen/interface.d.ts.map +1 -1
  137. package/lib/chain/regen/queued.d.ts +14 -14
  138. package/lib/chain/regen/queued.d.ts.map +1 -1
  139. package/lib/chain/regen/queued.js.map +1 -1
  140. package/lib/chain/regen/regen.d.ts +6 -5
  141. package/lib/chain/regen/regen.d.ts.map +1 -1
  142. package/lib/chain/regen/regen.js +6 -6
  143. package/lib/chain/regen/regen.js.map +1 -1
  144. package/lib/chain/serializeState.d.ts +2 -2
  145. package/lib/chain/serializeState.d.ts.map +1 -1
  146. package/lib/chain/serializeState.js +1 -1
  147. package/lib/chain/serializeState.js.map +1 -1
  148. package/lib/chain/shufflingCache.d.ts +2 -2
  149. package/lib/chain/shufflingCache.d.ts.map +1 -1
  150. package/lib/chain/shufflingCache.js +3 -4
  151. package/lib/chain/shufflingCache.js.map +1 -1
  152. package/lib/chain/stateCache/fifoBlockStateCache.d.ts +6 -6
  153. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -1
  154. package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
  155. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +11 -11
  156. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  157. package/lib/chain/stateCache/persistentCheckpointsCache.js +12 -16
  158. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  159. package/lib/chain/stateCache/types.d.ts +14 -14
  160. package/lib/chain/stateCache/types.d.ts.map +1 -1
  161. package/lib/chain/stateCache/types.js.map +1 -1
  162. package/lib/chain/validation/attesterSlashing.js +3 -3
  163. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  164. package/lib/chain/validation/blobSidecar.js +1 -1
  165. package/lib/chain/validation/blobSidecar.js.map +1 -1
  166. package/lib/chain/validation/block.d.ts.map +1 -1
  167. package/lib/chain/validation/block.js +3 -3
  168. package/lib/chain/validation/block.js.map +1 -1
  169. package/lib/chain/validation/blsToExecutionChange.js +2 -2
  170. package/lib/chain/validation/blsToExecutionChange.js.map +1 -1
  171. package/lib/chain/validation/dataColumnSidecar.js +1 -1
  172. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  173. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  174. package/lib/chain/validation/executionPayloadBid.js +4 -4
  175. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  176. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
  177. package/lib/chain/validation/executionPayloadEnvelope.js +2 -3
  178. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  179. package/lib/chain/validation/payloadAttestationMessage.d.ts.map +1 -1
  180. package/lib/chain/validation/payloadAttestationMessage.js +1 -2
  181. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
  182. package/lib/chain/validation/proposerSlashing.js +1 -1
  183. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  184. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts +2 -2
  185. package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -1
  186. package/lib/chain/validation/signatureSets/contributionAndProof.js +1 -1
  187. package/lib/chain/validation/signatureSets/contributionAndProof.js.map +1 -1
  188. package/lib/chain/validation/signatureSets/syncCommittee.d.ts +2 -2
  189. package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -1
  190. package/lib/chain/validation/signatureSets/syncCommittee.js +1 -1
  191. package/lib/chain/validation/signatureSets/syncCommittee.js.map +1 -1
  192. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts +2 -2
  193. package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -1
  194. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js.map +1 -1
  195. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts +2 -2
  196. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -1
  197. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js +1 -1
  198. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js.map +1 -1
  199. package/lib/chain/validation/syncCommittee.d.ts +3 -3
  200. package/lib/chain/validation/syncCommittee.d.ts.map +1 -1
  201. package/lib/chain/validation/syncCommittee.js +1 -1
  202. package/lib/chain/validation/syncCommittee.js.map +1 -1
  203. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -1
  204. package/lib/chain/validation/syncCommitteeContributionAndProof.js +1 -1
  205. package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
  206. package/lib/chain/validation/voluntaryExit.d.ts.map +1 -1
  207. package/lib/chain/validation/voluntaryExit.js +3 -3
  208. package/lib/chain/validation/voluntaryExit.js.map +1 -1
  209. package/lib/chain/validatorMonitor.d.ts +3 -3
  210. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  211. package/lib/chain/validatorMonitor.js +9 -7
  212. package/lib/chain/validatorMonitor.js.map +1 -1
  213. package/lib/metrics/metrics/lodestar.d.ts +12 -4
  214. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  215. package/lib/metrics/metrics/lodestar.js +19 -15
  216. package/lib/metrics/metrics/lodestar.js.map +1 -1
  217. package/lib/network/gossip/topic.d.ts +727 -0
  218. package/lib/network/gossip/topic.d.ts.map +1 -1
  219. package/lib/network/interface.d.ts +4 -2
  220. package/lib/network/interface.d.ts.map +1 -1
  221. package/lib/network/libp2p/index.d.ts.map +1 -1
  222. package/lib/network/libp2p/index.js +22 -11
  223. package/lib/network/libp2p/index.js.map +1 -1
  224. package/lib/network/network.d.ts +4 -2
  225. package/lib/network/network.d.ts.map +1 -1
  226. package/lib/network/network.js +9 -3
  227. package/lib/network/network.js.map +1 -1
  228. package/lib/network/options.d.ts.map +1 -1
  229. package/lib/network/options.js +7 -2
  230. package/lib/network/options.js.map +1 -1
  231. package/lib/network/processor/extractSlotRootFns.d.ts +1 -1
  232. package/lib/network/processor/extractSlotRootFns.js +1 -1
  233. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  234. package/lib/network/processor/gossipHandlers.js +16 -9
  235. package/lib/network/processor/gossipHandlers.js.map +1 -1
  236. package/lib/network/processor/index.d.ts +12 -7
  237. package/lib/network/processor/index.d.ts.map +1 -1
  238. package/lib/network/processor/index.js +99 -78
  239. package/lib/network/processor/index.js.map +1 -1
  240. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -1
  241. package/lib/network/reqresp/ReqRespBeaconNode.js +9 -0
  242. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  243. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts +8 -0
  244. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts.map +1 -0
  245. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js +69 -0
  246. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js.map +1 -0
  247. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.d.ts +6 -0
  248. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.d.ts.map +1 -0
  249. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js +28 -0
  250. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js.map +1 -0
  251. package/lib/network/reqresp/handlers/index.d.ts.map +1 -1
  252. package/lib/network/reqresp/handlers/index.js +11 -1
  253. package/lib/network/reqresp/handlers/index.js.map +1 -1
  254. package/lib/network/reqresp/protocols.d.ts +2 -0
  255. package/lib/network/reqresp/protocols.d.ts.map +1 -1
  256. package/lib/network/reqresp/protocols.js +10 -0
  257. package/lib/network/reqresp/protocols.js.map +1 -1
  258. package/lib/network/reqresp/rateLimit.d.ts.map +1 -1
  259. package/lib/network/reqresp/rateLimit.js +8 -0
  260. package/lib/network/reqresp/rateLimit.js.map +1 -1
  261. package/lib/network/reqresp/score.d.ts.map +1 -1
  262. package/lib/network/reqresp/score.js +2 -0
  263. package/lib/network/reqresp/score.js.map +1 -1
  264. package/lib/network/reqresp/types.d.ts +8 -2
  265. package/lib/network/reqresp/types.d.ts.map +1 -1
  266. package/lib/network/reqresp/types.js +7 -1
  267. package/lib/network/reqresp/types.js.map +1 -1
  268. package/lib/node/nodejs.d.ts +2 -2
  269. package/lib/node/nodejs.d.ts.map +1 -1
  270. package/lib/node/nodejs.js +1 -4
  271. package/lib/node/nodejs.js.map +1 -1
  272. package/lib/node/notifier.d.ts.map +1 -1
  273. package/lib/node/notifier.js +3 -3
  274. package/lib/node/notifier.js.map +1 -1
  275. package/lib/sync/backfill/backfill.d.ts +2 -2
  276. package/lib/sync/backfill/backfill.d.ts.map +1 -1
  277. package/lib/sync/backfill/backfill.js +2 -2
  278. package/lib/sync/backfill/backfill.js.map +1 -1
  279. package/lib/sync/unknownBlock.d.ts +1 -1
  280. package/lib/sync/unknownBlock.js +1 -1
  281. package/lib/util/types.d.ts +2 -0
  282. package/lib/util/types.d.ts.map +1 -1
  283. package/lib/util/types.js +1 -0
  284. package/lib/util/types.js.map +1 -1
  285. package/package.json +16 -16
  286. package/src/api/impl/beacon/blocks/index.ts +16 -2
  287. package/src/api/impl/beacon/pool/index.ts +1 -1
  288. package/src/api/impl/beacon/state/index.ts +29 -41
  289. package/src/api/impl/beacon/state/utils.ts +11 -25
  290. package/src/api/impl/lodestar/index.ts +4 -8
  291. package/src/api/impl/proof/index.ts +2 -9
  292. package/src/api/impl/validator/index.ts +29 -41
  293. package/src/api/impl/validator/utils.ts +4 -7
  294. package/src/chain/archiveStore/archiveStore.ts +1 -0
  295. package/src/chain/archiveStore/historicalState/getHistoricalState.ts +10 -39
  296. package/src/chain/archiveStore/historicalState/historicalStateRegen.ts +2 -1
  297. package/src/chain/archiveStore/historicalState/types.ts +2 -0
  298. package/src/chain/archiveStore/historicalState/worker.ts +1 -4
  299. package/src/chain/archiveStore/interface.ts +1 -0
  300. package/src/chain/balancesCache.ts +5 -11
  301. package/src/chain/blocks/blockInput/types.ts +1 -0
  302. package/src/chain/blocks/importBlock.ts +23 -25
  303. package/src/chain/blocks/importExecutionPayload.ts +89 -63
  304. package/src/chain/blocks/index.ts +3 -2
  305. package/src/chain/blocks/types.ts +26 -15
  306. package/src/chain/blocks/utils/checkpoint.ts +2 -2
  307. package/src/chain/blocks/verifyBlock.ts +5 -10
  308. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +9 -14
  309. package/src/chain/blocks/verifyBlocksSignatures.ts +3 -3
  310. package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +6 -8
  311. package/src/chain/chain.ts +75 -67
  312. package/src/chain/emitter.ts +2 -2
  313. package/src/chain/errors/blockError.ts +4 -4
  314. package/src/chain/forkChoice/index.ts +33 -42
  315. package/src/chain/initState.ts +7 -2
  316. package/src/chain/interface.ts +12 -13
  317. package/src/chain/lightClient/index.ts +9 -22
  318. package/src/chain/opPools/aggregatedAttestationPool.ts +15 -21
  319. package/src/chain/opPools/opPool.ts +13 -14
  320. package/src/chain/opPools/utils.ts +3 -3
  321. package/src/chain/options.ts +2 -0
  322. package/src/chain/prepareNextSlot.ts +6 -8
  323. package/src/chain/produceBlock/computeNewStateRoot.ts +6 -10
  324. package/src/chain/produceBlock/produceBlockBody.ts +22 -49
  325. package/src/chain/regen/interface.ts +13 -17
  326. package/src/chain/regen/queued.ts +16 -20
  327. package/src/chain/regen/regen.ts +16 -17
  328. package/src/chain/serializeState.ts +3 -3
  329. package/src/chain/shufflingCache.ts +5 -7
  330. package/src/chain/stateCache/fifoBlockStateCache.ts +7 -7
  331. package/src/chain/stateCache/persistentCheckpointsCache.ts +27 -42
  332. package/src/chain/stateCache/types.ts +14 -18
  333. package/src/chain/validation/attesterSlashing.ts +3 -3
  334. package/src/chain/validation/blobSidecar.ts +1 -1
  335. package/src/chain/validation/block.ts +2 -4
  336. package/src/chain/validation/blsToExecutionChange.ts +2 -2
  337. package/src/chain/validation/dataColumnSidecar.ts +1 -1
  338. package/src/chain/validation/executionPayloadBid.ts +3 -7
  339. package/src/chain/validation/executionPayloadEnvelope.ts +2 -8
  340. package/src/chain/validation/payloadAttestationMessage.ts +2 -4
  341. package/src/chain/validation/proposerSlashing.ts +1 -1
  342. package/src/chain/validation/signatureSets/contributionAndProof.ts +2 -7
  343. package/src/chain/validation/signatureSets/syncCommittee.ts +2 -7
  344. package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +2 -2
  345. package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +2 -7
  346. package/src/chain/validation/syncCommittee.ts +6 -6
  347. package/src/chain/validation/syncCommitteeContributionAndProof.ts +5 -10
  348. package/src/chain/validation/voluntaryExit.ts +3 -8
  349. package/src/chain/validatorMonitor.ts +12 -11
  350. package/src/metrics/metrics/lodestar.ts +23 -19
  351. package/src/network/interface.ts +15 -2
  352. package/src/network/libp2p/index.ts +24 -13
  353. package/src/network/network.ts +32 -4
  354. package/src/network/options.ts +7 -2
  355. package/src/network/processor/extractSlotRootFns.ts +1 -1
  356. package/src/network/processor/gossipHandlers.ts +17 -9
  357. package/src/network/processor/index.ts +110 -89
  358. package/src/network/reqresp/ReqRespBeaconNode.ts +13 -0
  359. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRange.ts +94 -0
  360. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRoot.ts +43 -0
  361. package/src/network/reqresp/handlers/index.ts +12 -0
  362. package/src/network/reqresp/protocols.ts +12 -0
  363. package/src/network/reqresp/rateLimit.ts +18 -0
  364. package/src/network/reqresp/score.ts +2 -0
  365. package/src/network/reqresp/types.ts +13 -0
  366. package/src/node/nodejs.ts +3 -5
  367. package/src/node/notifier.ts +4 -10
  368. package/src/sync/backfill/backfill.ts +3 -3
  369. package/src/sync/unknownBlock.ts +1 -1
  370. package/src/util/types.ts +6 -0
@@ -1,5 +1,5 @@
1
1
  import {SYNC_COMMITTEE_SUBNET_SIZE} from "@lodestar/params";
2
- import {CachedBeaconStateAltair, isSyncCommitteeAggregator} from "@lodestar/state-transition";
2
+ import {IBeaconStateView, isSyncCommitteeAggregator} from "@lodestar/state-transition";
3
3
  import {ValidatorIndex, altair} from "@lodestar/types";
4
4
  import {GossipAction, SyncCommitteeError, SyncCommitteeErrorCode} from "../errors/index.js";
5
5
  import {IBeaconChain} from "../interface.js";
@@ -53,7 +53,7 @@ export async function validateSyncCommitteeGossipContributionAndProof(
53
53
  }
54
54
 
55
55
  // [REJECT] The contribution has participants -- that is, any(contribution.aggregation_bits)
56
- const syncCommitteeParticipantIndices = getContributionIndices(headState as CachedBeaconStateAltair, contribution);
56
+ const syncCommitteeParticipantIndices = getContributionIndices(headState, contribution);
57
57
  if (syncCommitteeParticipantIndices.length === 0) {
58
58
  throw new SyncCommitteeError(GossipAction.REJECT, {
59
59
  code: SyncCommitteeErrorCode.NO_PARTICIPANT,
@@ -83,12 +83,7 @@ export async function validateSyncCommitteeGossipContributionAndProof(
83
83
 
84
84
  // [REJECT] The aggregate signature is valid for the message beacon_block_root and aggregate pubkey derived from
85
85
  // the participation info in aggregation_bits for the subcommittee specified by the contribution.subcommittee_index.
86
- getSyncCommitteeContributionSignatureSet(
87
- chain.config,
88
- headState as CachedBeaconStateAltair,
89
- contribution,
90
- syncCommitteeParticipantIndices
91
- ),
86
+ getSyncCommitteeContributionSignatureSet(chain.config, headState, contribution, syncCommitteeParticipantIndices),
92
87
  ];
93
88
 
94
89
  if (!(await chain.bls.verifySignatureSets(signatureSets, {batchable: true}))) {
@@ -109,12 +104,12 @@ export async function validateSyncCommitteeGossipContributionAndProof(
109
104
  * - pubkeyCache
110
105
  */
111
106
  function getContributionIndices(
112
- state: CachedBeaconStateAltair,
107
+ state: IBeaconStateView,
113
108
  contribution: altair.SyncCommitteeContribution
114
109
  ): ValidatorIndex[] {
115
110
  const startIndex = contribution.subcommitteeIndex * SYNC_COMMITTEE_SUBNET_SIZE;
116
111
 
117
- const syncCommittee = state.epochCtx.getIndexedSyncCommittee(contribution.slot);
112
+ const syncCommittee = state.getIndexedSyncCommittee(contribution.slot);
118
113
  // The bits in contribution.aggregationBits select validatorIndexes in the subcommittee starting at startIndex
119
114
  const subcommitteeValidatorIndices = syncCommittee.validatorIndices.slice(
120
115
  startIndex,
@@ -1,9 +1,4 @@
1
- import {
2
- BeaconStateView,
3
- VoluntaryExitValidity,
4
- getVoluntaryExitSignatureSet,
5
- getVoluntaryExitValidity,
6
- } from "@lodestar/state-transition";
1
+ import {VoluntaryExitValidity, getVoluntaryExitSignatureSet} from "@lodestar/state-transition";
7
2
  import {phase0} from "@lodestar/types";
8
3
  import {
9
4
  GossipAction,
@@ -53,14 +48,14 @@ async function validateVoluntaryExit(
53
48
 
54
49
  // [REJECT] All of the conditions within process_voluntary_exit pass validation.
55
50
  // verifySignature = false, verified in batch below
56
- const validity = getVoluntaryExitValidity(chain.config.getForkSeq(state.slot), state, voluntaryExit, false);
51
+ const validity = state.getVoluntaryExitValidity(voluntaryExit, false);
57
52
  if (validity !== VoluntaryExitValidity.valid) {
58
53
  throw new VoluntaryExitError(GossipAction.REJECT, {
59
54
  code: voluntaryExitValidityToErrorCode(validity),
60
55
  });
61
56
  }
62
57
 
63
- const signatureSet = getVoluntaryExitSignatureSet(chain.config, new BeaconStateView(state), voluntaryExit);
58
+ const signatureSet = getVoluntaryExitSignatureSet(chain.config, state, voluntaryExit);
64
59
  if (!(await chain.bls.verifySignatureSets([signatureSet], {batchable: true, priority: prioritizeBls}))) {
65
60
  throw new VoluntaryExitError(GossipAction.REJECT, {
66
61
  code: VoluntaryExitErrorCode.INVALID_SIGNATURE,
@@ -1,13 +1,11 @@
1
1
  import {ChainForkConfig} from "@lodestar/config";
2
2
  import {ForkSeq, MIN_ATTESTATION_INCLUSION_DELAY, SLOTS_PER_EPOCH} from "@lodestar/params";
3
3
  import {
4
- CachedBeaconStateAllForks,
5
- CachedBeaconStateAltair,
4
+ IBeaconStateView,
6
5
  ParticipationFlags,
7
6
  computeEpochAtSlot,
8
7
  computeStartSlotAtEpoch,
9
8
  computeTimeAtSlot,
10
- getBlockRootAtSlot,
11
9
  getCurrentSlot,
12
10
  parseAttesterFlags,
13
11
  parseParticipationFlags,
@@ -102,7 +100,7 @@ export type ValidatorMonitor = {
102
100
  syncAggregate: altair.SyncAggregate,
103
101
  syncCommitteeIndices: Uint32Array
104
102
  ): void;
105
- onceEveryEndOfEpoch(state: CachedBeaconStateAllForks): void;
103
+ onceEveryEndOfEpoch(state: IBeaconStateView): void;
106
104
  scrapeMetrics(slotClock: Slot): void;
107
105
  /** Returns the list of validator indices currently being monitored */
108
106
  getMonitoredValidatorIndices(): ValidatorIndex[];
@@ -736,16 +734,19 @@ export function createValidatorMonitor(
736
734
  return;
737
735
  }
738
736
 
737
+ if (validators.size === 0) {
738
+ return;
739
+ }
740
+
739
741
  const rootCache = new RootHexCache(headState);
740
742
 
741
743
  if (config.getForkSeq(headState.slot) >= ForkSeq.altair) {
742
- const {previousEpochParticipation} = headState as CachedBeaconStateAltair;
743
744
  const prevEpochStartSlot = computeStartSlotAtEpoch(prevEpoch);
744
- const prevEpochTargetRoot = toRootHex(getBlockRootAtSlot(headState, prevEpochStartSlot));
745
+ const prevEpochTargetRoot = toRootHex(headState.getBlockRootAtSlot(prevEpochStartSlot));
745
746
 
746
747
  // Check attestation performance
747
748
  for (const [index, validator] of validators.entries()) {
748
- const flags = parseParticipationFlags(previousEpochParticipation.get(index));
749
+ const flags = parseParticipationFlags(headState.getPreviousEpochParticipation(index));
749
750
  const attestationSummary = validator.attestations.get(prevEpoch)?.get(prevEpochTargetRoot);
750
751
  const summary = renderAttestationSummary(config, rootCache, attestationSummary, flags);
751
752
  validatorMonitorMetrics?.prevEpochAttestationSummary.inc({summary});
@@ -757,9 +758,9 @@ export function createValidatorMonitor(
757
758
  }
758
759
  }
759
760
 
760
- if (headState.epochCtx.proposersPrevEpoch !== null) {
761
+ if (headState.previousProposers !== null) {
761
762
  // proposersPrevEpoch is null on the first epoch of `headState` being generated
762
- for (const [slotIndex, validatorIndex] of headState.epochCtx.proposersPrevEpoch.entries()) {
763
+ for (const [slotIndex, validatorIndex] of headState.previousProposers.entries()) {
763
764
  const validator = validators.get(validatorIndex);
764
765
  if (validator) {
765
766
  // If expected proposer is a tracked validator
@@ -1139,12 +1140,12 @@ function renderBlockProposalSummary(
1139
1140
  export class RootHexCache {
1140
1141
  private readonly blockRootSlotCache = new Map<Slot, RootHex>();
1141
1142
 
1142
- constructor(private readonly state: CachedBeaconStateAllForks) {}
1143
+ constructor(private readonly state: IBeaconStateView) {}
1143
1144
 
1144
1145
  getBlockRootAtSlot(slot: Slot): RootHex {
1145
1146
  let root = this.blockRootSlotCache.get(slot);
1146
1147
  if (!root) {
1147
- root = toRootHex(getBlockRootAtSlot(this.state, slot));
1148
+ root = toRootHex(this.state.getBlockRootAtSlot(slot));
1148
1149
  this.blockRootSlotCache.set(slot, root);
1149
1150
  }
1150
1151
  return root;
@@ -1712,33 +1712,37 @@ export function createLodestarMetrics(
1712
1712
  }),
1713
1713
  },
1714
1714
 
1715
- // reprocess gossip attestations
1716
- reprocessGossipAttestations: {
1717
- total: register.gauge({
1718
- name: "lodestar_reprocess_gossip_attestations_total",
1719
- help: "Total number of gossip attestations waiting to reprocess",
1715
+ // some gossip messages need to wait for block to be processed before they can be processed
1716
+ awaitingBlockGossipMessages: {
1717
+ queue: register.gauge<{topic: GossipType}>({
1718
+ name: "lodestar_awaiting_block_gossip_messages_total",
1719
+ help: "Total number of gossip messages waiting for block to be processed",
1720
+ labelNames: ["topic"],
1720
1721
  }),
1721
1722
  countPerSlot: register.gauge({
1722
- name: "lodestar_reprocess_gossip_attestations_per_slot_total",
1723
- help: "Total number of gossip attestations waiting to reprocess pet slot",
1723
+ name: "lodestar_awaiting_block_gossip_messages_per_slot_total",
1724
+ help: "Total number of gossip messages waiting for block to be processed per slot",
1724
1725
  }),
1725
- resolve: register.gauge({
1726
- name: "lodestar_reprocess_gossip_attestations_resolve_total",
1727
- help: "Total number of gossip attestations are reprocessed",
1726
+ resolve: register.gauge<{topic: GossipType}>({
1727
+ name: "lodestar_awaiting_block_gossip_messages_resolve_total",
1728
+ help: "Total number of gossip messages are reprocessed",
1729
+ labelNames: ["topic"],
1728
1730
  }),
1729
- waitSecBeforeResolve: register.gauge({
1730
- name: "lodestar_reprocess_gossip_attestations_wait_time_resolve_seconds",
1731
+ waitSecBeforeResolve: register.gauge<{topic: GossipType}>({
1732
+ name: "lodestar_awaiting_block_gossip_messages_wait_time_resolve_seconds",
1731
1733
  help: "Time to wait for unknown block in seconds",
1734
+ labelNames: ["topic"],
1732
1735
  }),
1733
- reject: register.gauge<{reason: ReprocessRejectReason}>({
1734
- name: "lodestar_reprocess_gossip_attestations_reject_total",
1735
- help: "Total number of attestations are rejected to reprocess",
1736
- labelNames: ["reason"],
1736
+ // having 2 labels here is not great for performance, however it's rarely happening and having the reason label is important for debugging
1737
+ reject: register.gauge<{reason: ReprocessRejectReason; topic: GossipType}>({
1738
+ name: "lodestar_awaiting_block_gossip_messages_reject_total",
1739
+ help: "Total number of gossip messages are rejected to reprocess",
1740
+ labelNames: ["reason", "topic"],
1737
1741
  }),
1738
- waitSecBeforeReject: register.gauge<{reason: ReprocessRejectReason}>({
1739
- name: "lodestar_reprocess_gossip_attestations_wait_time_reject_seconds",
1742
+ waitSecBeforeReject: register.gauge<{reason: ReprocessRejectReason; topic: GossipType}>({
1743
+ name: "lodestar_awaiting_block_gossip_messages_wait_time_reject_seconds",
1740
1744
  help: "Time to wait for unknown block before being rejected",
1741
- labelNames: ["reason"],
1745
+ labelNames: ["reason", "topic"],
1742
1746
  }),
1743
1747
  },
1744
1748
 
@@ -38,7 +38,12 @@ import {
38
38
  import {BlockInputSource} from "../chain/blocks/blockInput/types.js";
39
39
  import {CustodyConfig} from "../util/dataColumns.js";
40
40
  import {PeerIdStr} from "../util/peerId.js";
41
- import {BeaconBlocksByRootRequest, BlobSidecarsByRootRequest, DataColumnSidecarsByRootRequest} from "../util/types.js";
41
+ import {
42
+ BeaconBlocksByRootRequest,
43
+ BlobSidecarsByRootRequest,
44
+ DataColumnSidecarsByRootRequest,
45
+ ExecutionPayloadEnvelopesByRootRequest,
46
+ } from "../util/types.js";
42
47
  import {INetworkCorePublic} from "./core/types.js";
43
48
  import {INetworkEventBus} from "./events.js";
44
49
  import {GossipType} from "./gossip/interface.js";
@@ -68,7 +73,7 @@ export interface INetwork extends INetworkCorePublic {
68
73
  reportPeer(peer: PeerIdStr, action: PeerAction, actionName: string): void;
69
74
  shouldAggregate(subnet: SubnetID, slot: Slot): boolean;
70
75
  reStatusPeers(peers: PeerIdStr[]): Promise<void>;
71
- searchUnknownSlotRoot(slotRoot: SlotRootHex, source: BlockInputSource, peer?: PeerIdStr): void;
76
+ searchUnknownBlock(slotRoot: SlotRootHex, source: BlockInputSource, peer?: PeerIdStr): void;
72
77
  // ReqResp
73
78
  sendBeaconBlocksByRange(peerId: PeerIdStr, request: phase0.BeaconBlocksByRangeRequest): Promise<SignedBeaconBlock[]>;
74
79
  sendBeaconBlocksByRoot(peerId: PeerIdStr, request: BeaconBlocksByRootRequest): Promise<SignedBeaconBlock[]>;
@@ -82,6 +87,14 @@ export interface INetwork extends INetworkCorePublic {
82
87
  peerId: PeerIdStr,
83
88
  request: DataColumnSidecarsByRootRequest
84
89
  ): Promise<fulu.DataColumnSidecar[]>;
90
+ sendExecutionPayloadEnvelopesByRange(
91
+ peerId: PeerIdStr,
92
+ request: gloas.ExecutionPayloadEnvelopesByRangeRequest
93
+ ): Promise<gloas.SignedExecutionPayloadEnvelope[]>;
94
+ sendExecutionPayloadEnvelopesByRoot(
95
+ peerId: PeerIdStr,
96
+ request: ExecutionPayloadEnvelopesByRootRequest
97
+ ): Promise<gloas.SignedExecutionPayloadEnvelope[]>;
85
98
 
86
99
  // Gossip
87
100
  publishBeaconBlock(signedBlock: SignedBeaconBlock): Promise<number>;
@@ -44,6 +44,8 @@ export async function createNodeJsLibp2p(
44
44
  ): Promise<Libp2p> {
45
45
  const localMultiaddrs = networkOpts.localMultiaddrs || defaultNetworkOptions.localMultiaddrs;
46
46
  const disconnectThreshold = networkOpts.disconnectThreshold ?? defaultNetworkOptions.disconnectThreshold;
47
+ const tcpEnabled = networkOpts.tcp ?? defaultNetworkOptions.tcp;
48
+ const quicEnabled = networkOpts.quic ?? defaultNetworkOptions.quic;
47
49
  const {peerStoreDir, disablePeerDiscovery} = nodeJsLibp2pOpts;
48
50
 
49
51
  let datastore: undefined | Eth2PeerDataStore = undefined;
@@ -58,7 +60,7 @@ export async function createNodeJsLibp2p(
58
60
  ...(networkOpts.bootMultiaddrs ?? defaultNetworkOptions.bootMultiaddrs ?? []),
59
61
  // Append discv5.bootEnrs to bootMultiaddrs if requested
60
62
  ...(networkOpts.connectToDiscv5Bootnodes
61
- ? await getDiscv5Multiaddrs(networkOpts.discv5?.bootEnrs ?? [], networkOpts.quic)
63
+ ? await getDiscv5Multiaddrs(networkOpts.discv5?.bootEnrs ?? [], quicEnabled)
62
64
  : []),
63
65
  ];
64
66
 
@@ -71,7 +73,7 @@ export async function createNodeJsLibp2p(
71
73
  }
72
74
  }
73
75
  const transports: Libp2pInit["transports"] = [];
74
- if (networkOpts.tcp ?? true) {
76
+ if (tcpEnabled) {
75
77
  transports.unshift(
76
78
  tcp({
77
79
  // Reject connections when the server's connection count gets high
@@ -87,17 +89,26 @@ export async function createNodeJsLibp2p(
87
89
  })
88
90
  );
89
91
  }
90
- if (networkOpts.quic) {
91
- transports.unshift(
92
- quic({
93
- handshakeTimeout: 5_000,
94
- maxIdleTimeout: 10_000,
95
- keepAliveInterval: 5_000,
96
- maxConcurrentStreamLimit: 256,
97
- maxStreamData: 10_000_000,
98
- maxConnectionData: 15_000_000,
99
- })
100
- );
92
+ if (quicEnabled) {
93
+ const quicMultiaddrs = localMultiaddrs.filter((ma) => ma.includes("/quic-v1"));
94
+ const hasIpv4Quic = quicMultiaddrs.some((ma) => ma.includes("/ip4/"));
95
+ const hasIpv6Quic = quicMultiaddrs.some((ma) => ma.includes("/ip6/"));
96
+ // Only add QUIC transport if at least one QUIC listen address is configured,
97
+ // otherwise the transport constructor will throw
98
+ if (hasIpv4Quic || hasIpv6Quic) {
99
+ transports.unshift(
100
+ quic({
101
+ handshakeTimeout: 5_000,
102
+ maxIdleTimeout: 10_000,
103
+ keepAliveInterval: 5_000,
104
+ maxConcurrentStreamLimit: 256,
105
+ maxStreamData: 10_000_000,
106
+ maxConnectionData: 15_000_000,
107
+ ipv4: hasIpv4Quic,
108
+ ipv6: hasIpv6Quic,
109
+ })
110
+ );
111
+ }
101
112
  }
102
113
 
103
114
  const noiseCrypto = {
@@ -40,7 +40,12 @@ import {IClock} from "../util/clock.js";
40
40
  import {CustodyConfig} from "../util/dataColumns.js";
41
41
  import {PeerIdStr, peerIdToString} from "../util/peerId.js";
42
42
  import {promiseAllMaybeAsync} from "../util/promises.js";
43
- import {BeaconBlocksByRootRequest, BlobSidecarsByRootRequest, DataColumnSidecarsByRootRequest} from "../util/types.js";
43
+ import {
44
+ BeaconBlocksByRootRequest,
45
+ BlobSidecarsByRootRequest,
46
+ DataColumnSidecarsByRootRequest,
47
+ ExecutionPayloadEnvelopesByRootRequest,
48
+ } from "../util/types.js";
44
49
  import {INetworkCore, NetworkCore, WorkerNetworkCore} from "./core/index.js";
45
50
  import {INetworkEventBus, NetworkEvent, NetworkEventBus, NetworkEventData} from "./events.js";
46
51
  import {getActiveForkBoundaries} from "./forks.js";
@@ -161,7 +166,7 @@ export class Network implements INetwork {
161
166
  const events = new NetworkEventBus();
162
167
  const aggregatorTracker = new AggregatorTracker();
163
168
 
164
- const activeValidatorCount = chain.getHeadState().epochCtx.currentShuffling.activeIndices.length;
169
+ const activeValidatorCount = chain.getHeadState().activeValidatorCount;
165
170
  const initialStatus = chain.getStatus();
166
171
  const initialCustodyGroupCount = chain.custodyConfig.targetCustodyGroupCount;
167
172
 
@@ -277,8 +282,8 @@ export class Network implements INetwork {
277
282
  return this.core.reStatusPeers(peers);
278
283
  }
279
284
 
280
- searchUnknownSlotRoot(slotRoot: SlotRootHex, source: BlockInputSource, peer?: PeerIdStr): void {
281
- this.networkProcessor.searchUnknownSlotRoot(slotRoot, source, peer);
285
+ searchUnknownBlock(slotRoot: SlotRootHex, source: BlockInputSource, peer?: PeerIdStr): void {
286
+ this.networkProcessor.searchUnknownBlock(slotRoot, source, peer);
282
287
  }
283
288
 
284
289
  async reportPeer(peer: PeerIdStr, action: PeerAction, actionName: string): Promise<void> {
@@ -636,6 +641,29 @@ export class Network implements INetwork {
636
641
  );
637
642
  }
638
643
 
644
+ async sendExecutionPayloadEnvelopesByRange(
645
+ peerId: PeerIdStr,
646
+ request: gloas.ExecutionPayloadEnvelopesByRangeRequest
647
+ ): Promise<gloas.SignedExecutionPayloadEnvelope[]> {
648
+ return collectMaxResponseTyped(
649
+ this.sendReqRespRequest(peerId, ReqRespMethod.ExecutionPayloadEnvelopesByRange, [Version.V1], request),
650
+ request.count,
651
+ responseSszTypeByMethod[ReqRespMethod.ExecutionPayloadEnvelopesByRange]
652
+ );
653
+ }
654
+
655
+ async sendExecutionPayloadEnvelopesByRoot(
656
+ peerId: PeerIdStr,
657
+ request: ExecutionPayloadEnvelopesByRootRequest
658
+ ): Promise<gloas.SignedExecutionPayloadEnvelope[]> {
659
+ return collectMaxResponseTyped(
660
+ this.sendReqRespRequest(peerId, ReqRespMethod.ExecutionPayloadEnvelopesByRoot, [Version.V1], request),
661
+ request.length,
662
+ responseSszTypeByMethod[ReqRespMethod.ExecutionPayloadEnvelopesByRoot],
663
+ this.chain.serializedCache
664
+ );
665
+ }
666
+
639
667
  private sendReqRespRequest<Req>(
640
668
  peerId: PeerIdStr,
641
669
  method: ReqRespMethod,
@@ -55,7 +55,12 @@ export const defaultNetworkOptions: NetworkOptions = {
55
55
  maxPeers: 210, // Allow some room above targetPeers for new inbound peers
56
56
  targetPeers: 200,
57
57
  // In CLI usage this is typically overridden; when unset it serves as a fallback default (e.g. programmatic usage/tests)
58
- localMultiaddrs: ["/ip4/0.0.0.0/tcp/9000", "/ip6/::/tcp/9000"],
58
+ localMultiaddrs: [
59
+ "/ip4/0.0.0.0/udp/9001/quic-v1",
60
+ "/ip6/::/udp/9001/quic-v1",
61
+ "/ip4/0.0.0.0/tcp/9000",
62
+ "/ip6/::/tcp/9000",
63
+ ],
59
64
  bootMultiaddrs: [],
60
65
  /** disabled by default */
61
66
  discv5: null,
@@ -69,7 +74,7 @@ export const defaultNetworkOptions: NetworkOptions = {
69
74
  slotsToSubscribeBeforeAggregatorDuty: 2,
70
75
  // This will enable the light client server by default
71
76
  disableLightClientServer: false,
72
- quic: false,
77
+ quic: true,
73
78
  tcp: true,
74
79
  // specific option for fulu
75
80
  // - this is the same to TARGET_SUBNET_PEERS
@@ -17,7 +17,7 @@ import {ExtractSlotRootFns} from "./types.js";
17
17
 
18
18
  /**
19
19
  * Extract the slot and block root of a gossip message form serialized data.
20
- * Only applicable for beacon_attestation and beacon_aggregate_and_proof topics.
20
+ * Not applicable for all topics.
21
21
  */
22
22
  export function createExtractBlockSlotRootFns(): ExtractSlotRootFns {
23
23
  return {
@@ -841,16 +841,17 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
841
841
  seenTimestampSec,
842
842
  }: GossipHandlerParamGeneric<GossipType.execution_payload>) => {
843
843
  const {serializedData} = gossipData;
844
- const executionPayloadEnvelope = sszDeserialize(topic, serializedData);
844
+ const signedEnvelope = sszDeserialize(topic, serializedData);
845
+ const envelope = signedEnvelope.message;
845
846
  // TODO GLOAS: handle BLOCK_ROOT_UNKNOWN error to trigger sync
846
- await validateGossipExecutionPayloadEnvelope(chain, executionPayloadEnvelope);
847
+ await validateGossipExecutionPayloadEnvelope(chain, signedEnvelope);
847
848
 
848
- const slot = executionPayloadEnvelope.message.slot;
849
+ const slot = envelope.slot;
849
850
  const delaySec = seenTimestampSec - computeTimeAtSlot(config, slot, chain.genesisTime);
850
851
  metrics?.gossipExecutionPayloadEnvelope.elapsedTimeTillReceived.observe({source: OpSource.gossip}, delaySec);
851
- chain.validatorMonitor?.registerExecutionPayloadEnvelope(OpSource.gossip, delaySec, executionPayloadEnvelope);
852
+ chain.validatorMonitor?.registerExecutionPayloadEnvelope(OpSource.gossip, delaySec, signedEnvelope);
852
853
 
853
- const blockRootHex = toRootHex(executionPayloadEnvelope.message.beaconBlockRoot);
854
+ const blockRootHex = toRootHex(envelope.beaconBlockRoot);
854
855
  const payloadInput = chain.seenPayloadEnvelopeInputCache.get(blockRootHex);
855
856
 
856
857
  if (!payloadInput) {
@@ -861,16 +862,23 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
861
862
  });
862
863
  }
863
864
 
864
- chain.serializedCache.set(executionPayloadEnvelope, serializedData);
865
+ chain.serializedCache.set(signedEnvelope, serializedData);
865
866
 
866
867
  payloadInput.addPayloadEnvelope({
867
- envelope: executionPayloadEnvelope,
868
+ envelope: signedEnvelope,
868
869
  source: PayloadEnvelopeInputSource.gossip,
869
870
  seenTimestampSec,
870
871
  peerIdStr,
871
872
  });
872
873
 
873
- // TODO GLOAS: Emit execution_payload_gossip event for gossip receipt.
874
+ chain.emitter.emit(routes.events.EventType.executionPayloadGossip, {
875
+ slot,
876
+ builderIndex: envelope.builderIndex,
877
+ blockHash: toRootHex(envelope.payload.blockHash),
878
+ blockRoot: blockRootHex,
879
+ stateRoot: toRootHex(envelope.stateRoot),
880
+ });
881
+
874
882
  chain.processExecutionPayload(payloadInput, {validSignature: true}).catch((e) => {
875
883
  chain.logger.debug("Error processing execution payload from gossip", {slot, root: blockRootHex}, e as Error);
876
884
  });
@@ -1044,7 +1052,7 @@ export async function validateGossipFnRetryUnknownRoot<T>(
1044
1052
  if (unknownBlockRootRetries === 0) {
1045
1053
  // Trigger unknown block root search here
1046
1054
  const rootHex = toRootHex(blockRoot);
1047
- network.searchUnknownSlotRoot({slot, root: rootHex}, BlockInputSource.gossip);
1055
+ network.searchUnknownBlock({slot, root: rootHex}, BlockInputSource.gossip);
1048
1056
  }
1049
1057
 
1050
1058
  if (unknownBlockRootRetries++ < MAX_UNKNOWN_BLOCK_ROOT_RETRIES) {