@lodestar/beacon-node 1.41.0-dev.983b1a457b → 1.41.0-dev.9939b12b53

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 (891) hide show
  1. package/lib/api/impl/api.js.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.d.ts +1 -1
  3. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  4. package/lib/api/impl/beacon/blocks/index.js +132 -4
  5. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  6. package/lib/api/impl/beacon/blocks/utils.js.map +1 -1
  7. package/lib/api/impl/beacon/index.js.map +1 -1
  8. package/lib/api/impl/beacon/pool/index.d.ts +1 -1
  9. package/lib/api/impl/beacon/pool/index.d.ts.map +1 -1
  10. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  11. package/lib/api/impl/beacon/rewards/index.d.ts +1 -1
  12. package/lib/api/impl/beacon/rewards/index.d.ts.map +1 -1
  13. package/lib/api/impl/beacon/rewards/index.js.map +1 -1
  14. package/lib/api/impl/beacon/state/index.d.ts +1 -1
  15. package/lib/api/impl/beacon/state/index.d.ts.map +1 -1
  16. package/lib/api/impl/beacon/state/index.js +8 -8
  17. package/lib/api/impl/beacon/state/index.js.map +1 -1
  18. package/lib/api/impl/beacon/state/utils.d.ts +3 -4
  19. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
  20. package/lib/api/impl/beacon/state/utils.js +5 -24
  21. package/lib/api/impl/beacon/state/utils.js.map +1 -1
  22. package/lib/api/impl/config/constants.js.map +1 -1
  23. package/lib/api/impl/config/index.js.map +1 -1
  24. package/lib/api/impl/debug/index.d.ts +1 -1
  25. package/lib/api/impl/debug/index.d.ts.map +1 -1
  26. package/lib/api/impl/debug/index.js +6 -2
  27. package/lib/api/impl/debug/index.js.map +1 -1
  28. package/lib/api/impl/errors.d.ts.map +1 -1
  29. package/lib/api/impl/errors.js.map +1 -1
  30. package/lib/api/impl/events/index.d.ts +1 -1
  31. package/lib/api/impl/events/index.d.ts.map +1 -1
  32. package/lib/api/impl/events/index.js.map +1 -1
  33. package/lib/api/impl/lightclient/index.d.ts +1 -1
  34. package/lib/api/impl/lightclient/index.d.ts.map +1 -1
  35. package/lib/api/impl/lightclient/index.js.map +1 -1
  36. package/lib/api/impl/lodestar/index.d.ts +1 -1
  37. package/lib/api/impl/lodestar/index.d.ts.map +1 -1
  38. package/lib/api/impl/lodestar/index.js.map +1 -1
  39. package/lib/api/impl/node/index.js.map +1 -1
  40. package/lib/api/impl/node/utils.d.ts +1 -1
  41. package/lib/api/impl/node/utils.d.ts.map +1 -1
  42. package/lib/api/impl/node/utils.js.map +1 -1
  43. package/lib/api/impl/proof/index.js.map +1 -1
  44. package/lib/api/impl/utils.js.map +1 -1
  45. package/lib/api/impl/validator/index.d.ts.map +1 -1
  46. package/lib/api/impl/validator/index.js +134 -18
  47. package/lib/api/impl/validator/index.js.map +1 -1
  48. package/lib/api/impl/validator/utils.d.ts +1 -1
  49. package/lib/api/impl/validator/utils.d.ts.map +1 -1
  50. package/lib/api/impl/validator/utils.js.map +1 -1
  51. package/lib/api/rest/activeSockets.d.ts.map +1 -1
  52. package/lib/api/rest/activeSockets.js.map +1 -1
  53. package/lib/api/rest/base.d.ts.map +1 -1
  54. package/lib/api/rest/base.js.map +1 -1
  55. package/lib/api/rest/index.d.ts.map +1 -1
  56. package/lib/api/rest/index.js.map +1 -1
  57. package/lib/api/rest/swaggerUI.js.map +1 -1
  58. package/lib/bun-wrappers/prometheus-gc-stats.js.map +1 -1
  59. package/lib/chain/ColumnReconstructionTracker.d.ts.map +1 -1
  60. package/lib/chain/ColumnReconstructionTracker.js.map +1 -1
  61. package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
  62. package/lib/chain/GetBlobsTracker.js.map +1 -1
  63. package/lib/chain/archiveStore/archiveStore.d.ts +1 -0
  64. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  65. package/lib/chain/archiveStore/archiveStore.js +11 -1
  66. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  67. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts +5 -6
  68. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +1 -1
  69. package/lib/chain/archiveStore/historicalState/getHistoricalState.js +9 -10
  70. package/lib/chain/archiveStore/historicalState/getHistoricalState.js.map +1 -1
  71. package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts.map +1 -1
  72. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js.map +1 -1
  73. package/lib/chain/archiveStore/historicalState/metrics.js.map +1 -1
  74. package/lib/chain/archiveStore/historicalState/types.js +2 -1
  75. package/lib/chain/archiveStore/historicalState/types.js.map +1 -1
  76. package/lib/chain/archiveStore/historicalState/worker.js +3 -3
  77. package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
  78. package/lib/chain/archiveStore/interface.js +2 -1
  79. package/lib/chain/archiveStore/interface.js.map +1 -1
  80. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts +1 -1
  81. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.d.ts.map +1 -1
  82. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js +2 -1
  83. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js.map +1 -1
  84. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +3 -8
  85. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -1
  86. package/lib/chain/archiveStore/utils/archiveBlocks.js +1 -1
  87. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  88. package/lib/chain/archiveStore/utils/archivePayloads.d.ts +7 -0
  89. package/lib/chain/archiveStore/utils/archivePayloads.d.ts.map +1 -0
  90. package/lib/chain/archiveStore/utils/archivePayloads.js +10 -0
  91. package/lib/chain/archiveStore/utils/archivePayloads.js.map +1 -0
  92. package/lib/chain/archiveStore/utils/pruneHistory.js.map +1 -1
  93. package/lib/chain/archiveStore/utils/updateBackfillRange.js +1 -1
  94. package/lib/chain/archiveStore/utils/updateBackfillRange.js.map +1 -1
  95. package/lib/chain/balancesCache.d.ts.map +1 -1
  96. package/lib/chain/balancesCache.js.map +1 -1
  97. package/lib/chain/beaconProposerCache.d.ts.map +1 -1
  98. package/lib/chain/beaconProposerCache.js.map +1 -1
  99. package/lib/chain/blocks/blockInput/blockInput.d.ts +25 -2
  100. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
  101. package/lib/chain/blocks/blockInput/blockInput.js +71 -0
  102. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  103. package/lib/chain/blocks/blockInput/errors.js +2 -1
  104. package/lib/chain/blocks/blockInput/errors.js.map +1 -1
  105. package/lib/chain/blocks/blockInput/types.d.ts +18 -1
  106. package/lib/chain/blocks/blockInput/types.d.ts.map +1 -1
  107. package/lib/chain/blocks/blockInput/types.js +5 -2
  108. package/lib/chain/blocks/blockInput/types.js.map +1 -1
  109. package/lib/chain/blocks/blockInput/utils.js.map +1 -1
  110. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  111. package/lib/chain/blocks/importBlock.js +28 -5
  112. package/lib/chain/blocks/importBlock.js.map +1 -1
  113. package/lib/chain/blocks/index.d.ts.map +1 -1
  114. package/lib/chain/blocks/index.js.map +1 -1
  115. package/lib/chain/blocks/types.js +6 -3
  116. package/lib/chain/blocks/types.js.map +1 -1
  117. package/lib/chain/blocks/utils/chainSegment.js.map +1 -1
  118. package/lib/chain/blocks/utils/checkpoint.js.map +1 -1
  119. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  120. package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts.map +1 -1
  121. package/lib/chain/blocks/verifyBlocksDataAvailability.js +3 -0
  122. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  123. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +4 -0
  124. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  125. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +5 -1
  126. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  127. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -1
  128. package/lib/chain/blocks/verifyBlocksSanityChecks.js +4 -1
  129. package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
  130. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  131. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js.map +1 -1
  132. package/lib/chain/blocks/writeBlockInputToDb.d.ts +12 -3
  133. package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +1 -1
  134. package/lib/chain/blocks/writeBlockInputToDb.js +92 -98
  135. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  136. package/lib/chain/bls/maybeBatch.js.map +1 -1
  137. package/lib/chain/bls/multithread/index.d.ts +3 -3
  138. package/lib/chain/bls/multithread/index.d.ts.map +1 -1
  139. package/lib/chain/bls/multithread/index.js +5 -5
  140. package/lib/chain/bls/multithread/index.js.map +1 -1
  141. package/lib/chain/bls/multithread/jobItem.d.ts +2 -2
  142. package/lib/chain/bls/multithread/jobItem.d.ts.map +1 -1
  143. package/lib/chain/bls/multithread/jobItem.js +4 -3
  144. package/lib/chain/bls/multithread/jobItem.js.map +1 -1
  145. package/lib/chain/bls/multithread/types.js +2 -1
  146. package/lib/chain/bls/multithread/types.js.map +1 -1
  147. package/lib/chain/bls/multithread/utils.js.map +1 -1
  148. package/lib/chain/bls/multithread/worker.js.map +1 -1
  149. package/lib/chain/bls/singleThread.d.ts +4 -4
  150. package/lib/chain/bls/singleThread.d.ts.map +1 -1
  151. package/lib/chain/bls/singleThread.js +4 -4
  152. package/lib/chain/bls/singleThread.js.map +1 -1
  153. package/lib/chain/bls/utils.d.ts +2 -2
  154. package/lib/chain/bls/utils.d.ts.map +1 -1
  155. package/lib/chain/bls/utils.js +7 -4
  156. package/lib/chain/bls/utils.js.map +1 -1
  157. package/lib/chain/chain.d.ts +9 -12
  158. package/lib/chain/chain.d.ts.map +1 -1
  159. package/lib/chain/chain.js +49 -30
  160. package/lib/chain/chain.js.map +1 -1
  161. package/lib/chain/emitter.d.ts +6 -8
  162. package/lib/chain/emitter.d.ts.map +1 -1
  163. package/lib/chain/emitter.js +2 -1
  164. package/lib/chain/emitter.js.map +1 -1
  165. package/lib/chain/errors/attestationError.d.ts.map +1 -1
  166. package/lib/chain/errors/attestationError.js +2 -1
  167. package/lib/chain/errors/attestationError.js.map +1 -1
  168. package/lib/chain/errors/attesterSlashingError.js +2 -1
  169. package/lib/chain/errors/attesterSlashingError.js.map +1 -1
  170. package/lib/chain/errors/blobSidecarError.js +2 -1
  171. package/lib/chain/errors/blobSidecarError.js.map +1 -1
  172. package/lib/chain/errors/blockError.d.ts.map +1 -1
  173. package/lib/chain/errors/blockError.js +2 -1
  174. package/lib/chain/errors/blockError.js.map +1 -1
  175. package/lib/chain/errors/blsToExecutionChangeError.js +2 -1
  176. package/lib/chain/errors/blsToExecutionChangeError.js.map +1 -1
  177. package/lib/chain/errors/dataColumnSidecarError.js +2 -1
  178. package/lib/chain/errors/dataColumnSidecarError.js.map +1 -1
  179. package/lib/chain/errors/executionPayloadBid.d.ts +1 -1
  180. package/lib/chain/errors/executionPayloadBid.js +2 -1
  181. package/lib/chain/errors/executionPayloadBid.js.map +1 -1
  182. package/lib/chain/errors/executionPayloadEnvelope.d.ts +2 -2
  183. package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
  184. package/lib/chain/errors/executionPayloadEnvelope.js +2 -1
  185. package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
  186. package/lib/chain/errors/gossipValidation.d.ts.map +1 -1
  187. package/lib/chain/errors/gossipValidation.js +4 -2
  188. package/lib/chain/errors/gossipValidation.js.map +1 -1
  189. package/lib/chain/errors/lightClientError.js +4 -2
  190. package/lib/chain/errors/lightClientError.js.map +1 -1
  191. package/lib/chain/errors/payloadAttestation.d.ts +1 -1
  192. package/lib/chain/errors/payloadAttestation.js +2 -1
  193. package/lib/chain/errors/payloadAttestation.js.map +1 -1
  194. package/lib/chain/errors/proposerSlashingError.js +2 -1
  195. package/lib/chain/errors/proposerSlashingError.js.map +1 -1
  196. package/lib/chain/errors/syncCommitteeError.js +2 -1
  197. package/lib/chain/errors/syncCommitteeError.js.map +1 -1
  198. package/lib/chain/errors/voluntaryExitError.js +2 -1
  199. package/lib/chain/errors/voluntaryExitError.js.map +1 -1
  200. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  201. package/lib/chain/forkChoice/index.js +32 -25
  202. package/lib/chain/forkChoice/index.js.map +1 -1
  203. package/lib/chain/initState.d.ts +1 -1
  204. package/lib/chain/initState.d.ts.map +1 -1
  205. package/lib/chain/initState.js.map +1 -1
  206. package/lib/chain/interface.d.ts +4 -6
  207. package/lib/chain/interface.d.ts.map +1 -1
  208. package/lib/chain/interface.js +2 -1
  209. package/lib/chain/interface.js.map +1 -1
  210. package/lib/chain/lightClient/index.d.ts +0 -29
  211. package/lib/chain/lightClient/index.d.ts.map +1 -1
  212. package/lib/chain/lightClient/index.js.map +1 -1
  213. package/lib/chain/lightClient/proofs.js.map +1 -1
  214. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  215. package/lib/chain/opPools/aggregatedAttestationPool.js +5 -3
  216. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  217. package/lib/chain/opPools/attestationPool.d.ts.map +1 -1
  218. package/lib/chain/opPools/attestationPool.js.map +1 -1
  219. package/lib/chain/opPools/executionPayloadBidPool.d.ts.map +1 -1
  220. package/lib/chain/opPools/executionPayloadBidPool.js.map +1 -1
  221. package/lib/chain/opPools/opPool.d.ts.map +1 -1
  222. package/lib/chain/opPools/opPool.js.map +1 -1
  223. package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -1
  224. package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
  225. package/lib/chain/opPools/syncCommitteeMessagePool.d.ts.map +1 -1
  226. package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
  227. package/lib/chain/opPools/syncContributionAndProofPool.d.ts.map +1 -1
  228. package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
  229. package/lib/chain/opPools/types.js +4 -2
  230. package/lib/chain/opPools/types.js.map +1 -1
  231. package/lib/chain/opPools/utils.js.map +1 -1
  232. package/lib/chain/options.d.ts.map +1 -1
  233. package/lib/chain/options.js.map +1 -1
  234. package/lib/chain/prepareNextSlot.d.ts +1 -2
  235. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  236. package/lib/chain/prepareNextSlot.js +3 -3
  237. package/lib/chain/prepareNextSlot.js.map +1 -1
  238. package/lib/chain/produceBlock/computeNewStateRoot.d.ts +9 -2
  239. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
  240. package/lib/chain/produceBlock/computeNewStateRoot.js +25 -2
  241. package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
  242. package/lib/chain/produceBlock/produceBlockBody.d.ts +23 -8
  243. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  244. package/lib/chain/produceBlock/produceBlockBody.js +124 -14
  245. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  246. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js.map +1 -1
  247. package/lib/chain/regen/errors.d.ts.map +1 -1
  248. package/lib/chain/regen/errors.js +2 -1
  249. package/lib/chain/regen/errors.js.map +1 -1
  250. package/lib/chain/regen/interface.js +4 -2
  251. package/lib/chain/regen/interface.js.map +1 -1
  252. package/lib/chain/regen/queued.d.ts.map +1 -1
  253. package/lib/chain/regen/queued.js +4 -1
  254. package/lib/chain/regen/queued.js.map +1 -1
  255. package/lib/chain/regen/regen.d.ts.map +1 -1
  256. package/lib/chain/regen/regen.js +6 -2
  257. package/lib/chain/regen/regen.js.map +1 -1
  258. package/lib/chain/reprocess.d.ts.map +1 -1
  259. package/lib/chain/reprocess.js +2 -1
  260. package/lib/chain/reprocess.js.map +1 -1
  261. package/lib/chain/seenCache/seenAggregateAndProof.d.ts.map +1 -1
  262. package/lib/chain/seenCache/seenAggregateAndProof.js.map +1 -1
  263. package/lib/chain/seenCache/seenAttestationData.d.ts.map +1 -1
  264. package/lib/chain/seenCache/seenAttestationData.js +2 -1
  265. package/lib/chain/seenCache/seenAttestationData.js.map +1 -1
  266. package/lib/chain/seenCache/seenAttesters.d.ts.map +1 -1
  267. package/lib/chain/seenCache/seenAttesters.js.map +1 -1
  268. package/lib/chain/seenCache/seenBlockAttesters.d.ts.map +1 -1
  269. package/lib/chain/seenCache/seenBlockAttesters.js.map +1 -1
  270. package/lib/chain/seenCache/seenBlockProposers.d.ts.map +1 -1
  271. package/lib/chain/seenCache/seenBlockProposers.js.map +1 -1
  272. package/lib/chain/seenCache/seenCommittee.d.ts.map +1 -1
  273. package/lib/chain/seenCache/seenCommittee.js.map +1 -1
  274. package/lib/chain/seenCache/seenCommitteeContribution.d.ts.map +1 -1
  275. package/lib/chain/seenCache/seenCommitteeContribution.js.map +1 -1
  276. package/lib/chain/seenCache/seenExecutionPayloadBids.d.ts.map +1 -1
  277. package/lib/chain/seenCache/seenExecutionPayloadBids.js.map +1 -1
  278. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.d.ts.map +1 -1
  279. package/lib/chain/seenCache/seenExecutionPayloadEnvelope.js.map +1 -1
  280. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +7 -3
  281. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
  282. package/lib/chain/seenCache/seenGossipBlockInput.js +38 -16
  283. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  284. package/lib/chain/serializeState.js +1 -0
  285. package/lib/chain/serializeState.js.map +1 -1
  286. package/lib/chain/shufflingCache.d.ts.map +1 -1
  287. package/lib/chain/shufflingCache.js +2 -1
  288. package/lib/chain/shufflingCache.js.map +1 -1
  289. package/lib/chain/stateCache/datastore/db.d.ts.map +1 -1
  290. package/lib/chain/stateCache/datastore/db.js.map +1 -1
  291. package/lib/chain/stateCache/datastore/file.d.ts.map +1 -1
  292. package/lib/chain/stateCache/datastore/file.js.map +1 -1
  293. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -1
  294. package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
  295. package/lib/chain/stateCache/mapMetrics.d.ts.map +1 -1
  296. package/lib/chain/stateCache/mapMetrics.js.map +1 -1
  297. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +1 -41
  298. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  299. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  300. package/lib/chain/stateCache/types.js +2 -1
  301. package/lib/chain/stateCache/types.js.map +1 -1
  302. package/lib/chain/validation/aggregateAndProof.js +1 -1
  303. package/lib/chain/validation/aggregateAndProof.js.map +1 -1
  304. package/lib/chain/validation/attestation.d.ts.map +1 -1
  305. package/lib/chain/validation/attestation.js +14 -7
  306. package/lib/chain/validation/attestation.js.map +1 -1
  307. package/lib/chain/validation/attesterSlashing.d.ts.map +1 -1
  308. package/lib/chain/validation/attesterSlashing.js +9 -2
  309. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  310. package/lib/chain/validation/blobSidecar.js +2 -2
  311. package/lib/chain/validation/blobSidecar.js.map +1 -1
  312. package/lib/chain/validation/block.d.ts.map +1 -1
  313. package/lib/chain/validation/block.js +6 -3
  314. package/lib/chain/validation/block.js.map +1 -1
  315. package/lib/chain/validation/blsToExecutionChange.js.map +1 -1
  316. package/lib/chain/validation/dataColumnSidecar.d.ts +4 -3
  317. package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -1
  318. package/lib/chain/validation/dataColumnSidecar.js +125 -108
  319. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  320. package/lib/chain/validation/executionPayloadBid.js +1 -2
  321. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  322. package/lib/chain/validation/executionPayloadEnvelope.js +4 -4
  323. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  324. package/lib/chain/validation/lightClientFinalityUpdate.js.map +1 -1
  325. package/lib/chain/validation/lightClientOptimisticUpdate.js.map +1 -1
  326. package/lib/chain/validation/payloadAttestationMessage.js +9 -3
  327. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
  328. package/lib/chain/validation/proposerSlashing.js +1 -1
  329. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  330. package/lib/chain/validation/signatureSets/aggregateAndProof.js.map +1 -1
  331. package/lib/chain/validation/signatureSets/contributionAndProof.js.map +1 -1
  332. package/lib/chain/validation/signatureSets/selectionProof.js.map +1 -1
  333. package/lib/chain/validation/signatureSets/syncCommittee.js.map +1 -1
  334. package/lib/chain/validation/signatureSets/syncCommitteeContribution.js.map +1 -1
  335. package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js.map +1 -1
  336. package/lib/chain/validation/syncCommittee.js.map +1 -1
  337. package/lib/chain/validation/syncCommitteeContributionAndProof.js +1 -1
  338. package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
  339. package/lib/chain/validation/voluntaryExit.js.map +1 -1
  340. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  341. package/lib/chain/validatorMonitor.js +2 -1
  342. package/lib/chain/validatorMonitor.js.map +1 -1
  343. package/lib/constants/network.js +4 -2
  344. package/lib/constants/network.js.map +1 -1
  345. package/lib/db/beacon.d.ts +3 -1
  346. package/lib/db/beacon.d.ts.map +1 -1
  347. package/lib/db/beacon.js +5 -1
  348. package/lib/db/beacon.js.map +1 -1
  349. package/lib/db/buckets.d.ts +24 -22
  350. package/lib/db/buckets.d.ts.map +1 -1
  351. package/lib/db/buckets.js +4 -1
  352. package/lib/db/buckets.js.map +1 -1
  353. package/lib/db/index.d.ts +1 -0
  354. package/lib/db/index.d.ts.map +1 -1
  355. package/lib/db/index.js +1 -0
  356. package/lib/db/index.js.map +1 -1
  357. package/lib/db/interface.d.ts +3 -1
  358. package/lib/db/interface.d.ts.map +1 -1
  359. package/lib/db/repositories/attesterSlashing.d.ts.map +1 -1
  360. package/lib/db/repositories/attesterSlashing.js.map +1 -1
  361. package/lib/db/repositories/backfilledRanges.d.ts.map +1 -1
  362. package/lib/db/repositories/backfilledRanges.js.map +1 -1
  363. package/lib/db/repositories/blobSidecars.d.ts.map +1 -1
  364. package/lib/db/repositories/blobSidecars.js.map +1 -1
  365. package/lib/db/repositories/blobSidecarsArchive.d.ts.map +1 -1
  366. package/lib/db/repositories/blobSidecarsArchive.js.map +1 -1
  367. package/lib/db/repositories/block.d.ts.map +1 -1
  368. package/lib/db/repositories/block.js.map +1 -1
  369. package/lib/db/repositories/blockArchive.d.ts.map +1 -1
  370. package/lib/db/repositories/blockArchive.js +1 -2
  371. package/lib/db/repositories/blockArchive.js.map +1 -1
  372. package/lib/db/repositories/blockArchiveIndex.d.ts +2 -2
  373. package/lib/db/repositories/blockArchiveIndex.d.ts.map +1 -1
  374. package/lib/db/repositories/blockArchiveIndex.js.map +1 -1
  375. package/lib/db/repositories/blsToExecutionChange.d.ts.map +1 -1
  376. package/lib/db/repositories/blsToExecutionChange.js.map +1 -1
  377. package/lib/db/repositories/checkpointState.d.ts.map +1 -1
  378. package/lib/db/repositories/checkpointState.js.map +1 -1
  379. package/lib/db/repositories/dataColumnSidecar.d.ts +5 -3
  380. package/lib/db/repositories/dataColumnSidecar.d.ts.map +1 -1
  381. package/lib/db/repositories/dataColumnSidecar.js +14 -1
  382. package/lib/db/repositories/dataColumnSidecar.js.map +1 -1
  383. package/lib/db/repositories/dataColumnSidecarArchive.d.ts +5 -3
  384. package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +1 -1
  385. package/lib/db/repositories/dataColumnSidecarArchive.js +14 -1
  386. package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
  387. package/lib/db/repositories/executionPayloadEnvelope.d.ts +19 -0
  388. package/lib/db/repositories/executionPayloadEnvelope.d.ts.map +1 -0
  389. package/lib/db/repositories/executionPayloadEnvelope.js +22 -0
  390. package/lib/db/repositories/executionPayloadEnvelope.js.map +1 -0
  391. package/lib/db/repositories/executionPayloadEnvelopeArchive.d.ts +18 -0
  392. package/lib/db/repositories/executionPayloadEnvelopeArchive.d.ts.map +1 -0
  393. package/lib/db/repositories/executionPayloadEnvelopeArchive.js +28 -0
  394. package/lib/db/repositories/executionPayloadEnvelopeArchive.js.map +1 -0
  395. package/lib/db/repositories/index.d.ts +2 -0
  396. package/lib/db/repositories/index.d.ts.map +1 -1
  397. package/lib/db/repositories/index.js +2 -0
  398. package/lib/db/repositories/index.js.map +1 -1
  399. package/lib/db/repositories/lightclientBestUpdate.d.ts.map +1 -1
  400. package/lib/db/repositories/lightclientBestUpdate.js.map +1 -1
  401. package/lib/db/repositories/lightclientCheckpointHeader.d.ts.map +1 -1
  402. package/lib/db/repositories/lightclientCheckpointHeader.js.map +1 -1
  403. package/lib/db/repositories/lightclientSyncCommittee.d.ts.map +1 -1
  404. package/lib/db/repositories/lightclientSyncCommittee.js.map +1 -1
  405. package/lib/db/repositories/lightclientSyncCommitteeWitness.d.ts.map +1 -1
  406. package/lib/db/repositories/lightclientSyncCommitteeWitness.js.map +1 -1
  407. package/lib/db/repositories/proposerSlashing.d.ts.map +1 -1
  408. package/lib/db/repositories/proposerSlashing.js.map +1 -1
  409. package/lib/db/repositories/stateArchive.d.ts.map +1 -1
  410. package/lib/db/repositories/stateArchive.js.map +1 -1
  411. package/lib/db/repositories/stateArchiveIndex.js.map +1 -1
  412. package/lib/db/repositories/voluntaryExit.d.ts.map +1 -1
  413. package/lib/db/repositories/voluntaryExit.js.map +1 -1
  414. package/lib/execution/builder/cache.d.ts.map +1 -1
  415. package/lib/execution/builder/cache.js.map +1 -1
  416. package/lib/execution/builder/http.d.ts.map +1 -1
  417. package/lib/execution/builder/http.js +2 -1
  418. package/lib/execution/builder/http.js.map +1 -1
  419. package/lib/execution/builder/index.js.map +1 -1
  420. package/lib/execution/builder/utils.js.map +1 -1
  421. package/lib/execution/engine/disabled.d.ts.map +1 -1
  422. package/lib/execution/engine/disabled.js.map +1 -1
  423. package/lib/execution/engine/http.d.ts +1 -0
  424. package/lib/execution/engine/http.d.ts.map +1 -1
  425. package/lib/execution/engine/http.js +3 -0
  426. package/lib/execution/engine/http.js.map +1 -1
  427. package/lib/execution/engine/index.js.map +1 -1
  428. package/lib/execution/engine/interface.js +4 -2
  429. package/lib/execution/engine/interface.js.map +1 -1
  430. package/lib/execution/engine/jsonRpcHttpClient.d.ts +10 -15
  431. package/lib/execution/engine/jsonRpcHttpClient.d.ts.map +1 -1
  432. package/lib/execution/engine/jsonRpcHttpClient.js +2 -1
  433. package/lib/execution/engine/jsonRpcHttpClient.js.map +1 -1
  434. package/lib/execution/engine/jwt.js.map +1 -1
  435. package/lib/execution/engine/mock.d.ts.map +1 -1
  436. package/lib/execution/engine/mock.js.map +1 -1
  437. package/lib/execution/engine/payloadIdCache.d.ts.map +1 -1
  438. package/lib/execution/engine/payloadIdCache.js.map +1 -1
  439. package/lib/execution/engine/types.js.map +1 -1
  440. package/lib/execution/engine/utils.d.ts +1 -1
  441. package/lib/execution/engine/utils.d.ts.map +1 -1
  442. package/lib/execution/engine/utils.js.map +1 -1
  443. package/lib/metrics/metrics/beacon.d.ts +3 -1
  444. package/lib/metrics/metrics/beacon.d.ts.map +1 -1
  445. package/lib/metrics/metrics/beacon.js +14 -3
  446. package/lib/metrics/metrics/beacon.js.map +1 -1
  447. package/lib/metrics/metrics/lodestar.d.ts +21 -11
  448. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  449. package/lib/metrics/metrics/lodestar.js +48 -24
  450. package/lib/metrics/metrics/lodestar.js.map +1 -1
  451. package/lib/metrics/metrics.js.map +1 -1
  452. package/lib/metrics/nodeJsMetrics.js.map +1 -1
  453. package/lib/metrics/server/http.d.ts +1 -1
  454. package/lib/metrics/server/http.d.ts.map +1 -1
  455. package/lib/metrics/server/http.js.map +1 -1
  456. package/lib/metrics/utils/avgMinMax.d.ts.map +1 -1
  457. package/lib/metrics/utils/avgMinMax.js.map +1 -1
  458. package/lib/metrics/utils/gauge.d.ts.map +1 -1
  459. package/lib/metrics/utils/gauge.js.map +1 -1
  460. package/lib/metrics/utils/registryMetricCreator.d.ts.map +1 -1
  461. package/lib/metrics/utils/registryMetricCreator.js.map +1 -1
  462. package/lib/monitoring/clientStats.js.map +1 -1
  463. package/lib/monitoring/properties.d.ts.map +1 -1
  464. package/lib/monitoring/properties.js.map +1 -1
  465. package/lib/monitoring/service.d.ts +2 -2
  466. package/lib/monitoring/service.d.ts.map +1 -1
  467. package/lib/monitoring/service.js +3 -2
  468. package/lib/monitoring/service.js.map +1 -1
  469. package/lib/monitoring/system.d.ts.map +1 -1
  470. package/lib/monitoring/system.js.map +1 -1
  471. package/lib/monitoring/types.js +4 -2
  472. package/lib/monitoring/types.js.map +1 -1
  473. package/lib/network/core/events.d.ts +1 -3
  474. package/lib/network/core/events.d.ts.map +1 -1
  475. package/lib/network/core/events.js +4 -2
  476. package/lib/network/core/events.js.map +1 -1
  477. package/lib/network/core/metrics.d.ts +6 -7
  478. package/lib/network/core/metrics.d.ts.map +1 -1
  479. package/lib/network/core/metrics.js.map +1 -1
  480. package/lib/network/core/networkCore.d.ts +4 -4
  481. package/lib/network/core/networkCore.d.ts.map +1 -1
  482. package/lib/network/core/networkCore.js.map +1 -1
  483. package/lib/network/core/networkCoreWorker.js.map +1 -1
  484. package/lib/network/core/networkCoreWorkerHandler.d.ts +3 -3
  485. package/lib/network/core/networkCoreWorkerHandler.d.ts.map +1 -1
  486. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  487. package/lib/network/core/types.d.ts +2 -2
  488. package/lib/network/core/types.d.ts.map +1 -1
  489. package/lib/network/discv5/index.d.ts +1 -3
  490. package/lib/network/discv5/index.d.ts.map +1 -1
  491. package/lib/network/discv5/index.js.map +1 -1
  492. package/lib/network/discv5/utils.d.ts +1 -1
  493. package/lib/network/discv5/utils.d.ts.map +1 -1
  494. package/lib/network/discv5/utils.js +7 -5
  495. package/lib/network/discv5/utils.js.map +1 -1
  496. package/lib/network/discv5/worker.js.map +1 -1
  497. package/lib/network/events.d.ts +3 -4
  498. package/lib/network/events.d.ts.map +1 -1
  499. package/lib/network/events.js +4 -2
  500. package/lib/network/events.js.map +1 -1
  501. package/lib/network/forks.js.map +1 -1
  502. package/lib/network/gossip/encoding.d.ts +3 -3
  503. package/lib/network/gossip/encoding.d.ts.map +1 -1
  504. package/lib/network/gossip/encoding.js.map +1 -1
  505. package/lib/network/gossip/errors.d.ts.map +1 -1
  506. package/lib/network/gossip/errors.js.map +1 -1
  507. package/lib/network/gossip/gossipsub.d.ts +13 -4
  508. package/lib/network/gossip/gossipsub.d.ts.map +1 -1
  509. package/lib/network/gossip/gossipsub.js +56 -26
  510. package/lib/network/gossip/gossipsub.js.map +1 -1
  511. package/lib/network/gossip/interface.d.ts +6 -6
  512. package/lib/network/gossip/interface.d.ts.map +1 -1
  513. package/lib/network/gossip/interface.js +4 -2
  514. package/lib/network/gossip/interface.js.map +1 -1
  515. package/lib/network/gossip/metrics.d.ts +12 -14
  516. package/lib/network/gossip/metrics.d.ts.map +1 -1
  517. package/lib/network/gossip/metrics.js.map +1 -1
  518. package/lib/network/gossip/scoringParameters.d.ts +2 -2
  519. package/lib/network/gossip/scoringParameters.d.ts.map +1 -1
  520. package/lib/network/gossip/scoringParameters.js +1 -1
  521. package/lib/network/gossip/scoringParameters.js.map +1 -1
  522. package/lib/network/gossip/topic.d.ts +3166 -3169
  523. package/lib/network/gossip/topic.d.ts.map +1 -1
  524. package/lib/network/gossip/topic.js +2 -2
  525. package/lib/network/gossip/topic.js.map +1 -1
  526. package/lib/network/interface.d.ts +6 -5
  527. package/lib/network/interface.d.ts.map +1 -1
  528. package/lib/network/libp2p/error.js +2 -1
  529. package/lib/network/libp2p/error.js.map +1 -1
  530. package/lib/network/libp2p/index.d.ts +2 -2
  531. package/lib/network/libp2p/index.d.ts.map +1 -1
  532. package/lib/network/libp2p/index.js +42 -19
  533. package/lib/network/libp2p/index.js.map +1 -1
  534. package/lib/network/metadata.d.ts +1 -0
  535. package/lib/network/metadata.d.ts.map +1 -1
  536. package/lib/network/metadata.js +5 -2
  537. package/lib/network/metadata.js.map +1 -1
  538. package/lib/network/network.d.ts +6 -5
  539. package/lib/network/network.d.ts.map +1 -1
  540. package/lib/network/network.js +11 -2
  541. package/lib/network/network.js.map +1 -1
  542. package/lib/network/options.d.ts +2 -0
  543. package/lib/network/options.d.ts.map +1 -1
  544. package/lib/network/options.js +6 -0
  545. package/lib/network/options.js.map +1 -1
  546. package/lib/network/peers/client.js +2 -1
  547. package/lib/network/peers/client.js.map +1 -1
  548. package/lib/network/peers/datastore.d.ts +7 -8
  549. package/lib/network/peers/datastore.d.ts.map +1 -1
  550. package/lib/network/peers/datastore.js +10 -10
  551. package/lib/network/peers/datastore.js.map +1 -1
  552. package/lib/network/peers/discover.d.ts +2 -7
  553. package/lib/network/peers/discover.d.ts.map +1 -1
  554. package/lib/network/peers/discover.js +45 -12
  555. package/lib/network/peers/discover.js.map +1 -1
  556. package/lib/network/peers/peerManager.d.ts +3 -1
  557. package/lib/network/peers/peerManager.d.ts.map +1 -1
  558. package/lib/network/peers/peerManager.js +103 -53
  559. package/lib/network/peers/peerManager.js.map +1 -1
  560. package/lib/network/peers/peersData.d.ts.map +1 -1
  561. package/lib/network/peers/peersData.js +2 -1
  562. package/lib/network/peers/peersData.js.map +1 -1
  563. package/lib/network/peers/score/interface.js +4 -2
  564. package/lib/network/peers/score/interface.js.map +1 -1
  565. package/lib/network/peers/score/score.d.ts.map +1 -1
  566. package/lib/network/peers/score/score.js.map +1 -1
  567. package/lib/network/peers/score/store.d.ts.map +1 -1
  568. package/lib/network/peers/score/store.js.map +1 -1
  569. package/lib/network/peers/score/utils.js.map +1 -1
  570. package/lib/network/peers/utils/assertPeerRelevance.js +2 -1
  571. package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
  572. package/lib/network/peers/utils/enrSubnetsDeserialize.js.map +1 -1
  573. package/lib/network/peers/utils/getConnectedPeerIds.js.map +1 -1
  574. package/lib/network/peers/utils/prioritizePeers.d.ts +3 -3
  575. package/lib/network/peers/utils/prioritizePeers.d.ts.map +1 -1
  576. package/lib/network/peers/utils/prioritizePeers.js +2 -1
  577. package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
  578. package/lib/network/peers/utils/subnetMap.d.ts.map +1 -1
  579. package/lib/network/peers/utils/subnetMap.js.map +1 -1
  580. package/lib/network/processor/aggregatorTracker.d.ts.map +1 -1
  581. package/lib/network/processor/aggregatorTracker.js.map +1 -1
  582. package/lib/network/processor/extractSlotRootFns.js.map +1 -1
  583. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  584. package/lib/network/processor/gossipHandlers.js +9 -2
  585. package/lib/network/processor/gossipHandlers.js.map +1 -1
  586. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  587. package/lib/network/processor/gossipQueues/indexed.d.ts.map +1 -1
  588. package/lib/network/processor/gossipQueues/indexed.js.map +1 -1
  589. package/lib/network/processor/gossipQueues/linear.d.ts.map +1 -1
  590. package/lib/network/processor/gossipQueues/linear.js.map +1 -1
  591. package/lib/network/processor/gossipQueues/types.js +4 -2
  592. package/lib/network/processor/gossipQueues/types.js.map +1 -1
  593. package/lib/network/processor/gossipValidatorFn.js +1 -1
  594. package/lib/network/processor/gossipValidatorFn.js.map +1 -1
  595. package/lib/network/processor/index.d.ts.map +1 -1
  596. package/lib/network/processor/index.js +4 -2
  597. package/lib/network/processor/index.js.map +1 -1
  598. package/lib/network/processor/types.d.ts +1 -1
  599. package/lib/network/processor/types.d.ts.map +1 -1
  600. package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -1
  601. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  602. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -1
  603. package/lib/network/reqresp/handlers/beaconBlocksByRange.js +3 -2
  604. package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
  605. package/lib/network/reqresp/handlers/beaconBlocksByRoot.js.map +1 -1
  606. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +1 -1
  607. package/lib/network/reqresp/handlers/blobSidecarsByRange.js +3 -2
  608. package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +1 -1
  609. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js +1 -1
  610. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js.map +1 -1
  611. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -1
  612. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +3 -2
  613. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -1
  614. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js +1 -1
  615. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -1
  616. package/lib/network/reqresp/handlers/index.js.map +1 -1
  617. package/lib/network/reqresp/handlers/lightClientBootstrap.js.map +1 -1
  618. package/lib/network/reqresp/handlers/lightClientFinalityUpdate.js.map +1 -1
  619. package/lib/network/reqresp/handlers/lightClientOptimisticUpdate.js.map +1 -1
  620. package/lib/network/reqresp/handlers/lightClientUpdatesByRange.js.map +1 -1
  621. package/lib/network/reqresp/interface.js +2 -1
  622. package/lib/network/reqresp/interface.js.map +1 -1
  623. package/lib/network/reqresp/protocols.d.ts.map +1 -1
  624. package/lib/network/reqresp/protocols.js.map +1 -1
  625. package/lib/network/reqresp/rateLimit.js.map +1 -1
  626. package/lib/network/reqresp/score.d.ts.map +1 -1
  627. package/lib/network/reqresp/score.js +0 -1
  628. package/lib/network/reqresp/score.js.map +1 -1
  629. package/lib/network/reqresp/types.js +4 -2
  630. package/lib/network/reqresp/types.js.map +1 -1
  631. package/lib/network/reqresp/utils/collect.d.ts +1 -1
  632. package/lib/network/reqresp/utils/collect.js.map +1 -1
  633. package/lib/network/reqresp/utils/collectSequentialBlocksInRange.d.ts +1 -1
  634. package/lib/network/reqresp/utils/collectSequentialBlocksInRange.js +2 -1
  635. package/lib/network/reqresp/utils/collectSequentialBlocksInRange.js.map +1 -1
  636. package/lib/network/reqresp/utils/dataColumnResponseValidation.d.ts +1 -1
  637. package/lib/network/reqresp/utils/dataColumnResponseValidation.d.ts.map +1 -1
  638. package/lib/network/reqresp/utils/dataColumnResponseValidation.js.map +1 -1
  639. package/lib/network/statusCache.d.ts.map +1 -1
  640. package/lib/network/statusCache.js.map +1 -1
  641. package/lib/network/subnets/attnetsService.d.ts.map +1 -1
  642. package/lib/network/subnets/attnetsService.js +2 -1
  643. package/lib/network/subnets/attnetsService.js.map +1 -1
  644. package/lib/network/subnets/interface.js.map +1 -1
  645. package/lib/network/subnets/syncnetsService.d.ts.map +1 -1
  646. package/lib/network/subnets/syncnetsService.js.map +1 -1
  647. package/lib/network/subnets/util.js.map +1 -1
  648. package/lib/network/util.js +2 -2
  649. package/lib/network/util.js.map +1 -1
  650. package/lib/node/nodejs.d.ts +4 -6
  651. package/lib/node/nodejs.d.ts.map +1 -1
  652. package/lib/node/nodejs.js +8 -5
  653. package/lib/node/nodejs.js.map +1 -1
  654. package/lib/node/notifier.js.map +1 -1
  655. package/lib/node/utils/interop/deposits.js.map +1 -1
  656. package/lib/node/utils/interop/state.d.ts +1 -1
  657. package/lib/node/utils/interop/state.d.ts.map +1 -1
  658. package/lib/node/utils/interop/state.js.map +1 -1
  659. package/lib/node/utils/lightclient.js.map +1 -1
  660. package/lib/node/utils/state.js.map +1 -1
  661. package/lib/sync/backfill/backfill.d.ts +1 -10
  662. package/lib/sync/backfill/backfill.d.ts.map +1 -1
  663. package/lib/sync/backfill/backfill.js +6 -3
  664. package/lib/sync/backfill/backfill.js.map +1 -1
  665. package/lib/sync/backfill/errors.js +2 -1
  666. package/lib/sync/backfill/errors.js.map +1 -1
  667. package/lib/sync/backfill/verify.js.map +1 -1
  668. package/lib/sync/interface.js +2 -1
  669. package/lib/sync/interface.js.map +1 -1
  670. package/lib/sync/range/batch.d.ts.map +1 -1
  671. package/lib/sync/range/batch.js +4 -2
  672. package/lib/sync/range/batch.js.map +1 -1
  673. package/lib/sync/range/chain.d.ts +0 -10
  674. package/lib/sync/range/chain.d.ts.map +1 -1
  675. package/lib/sync/range/chain.js +2 -1
  676. package/lib/sync/range/chain.js.map +1 -1
  677. package/lib/sync/range/range.d.ts +1 -3
  678. package/lib/sync/range/range.d.ts.map +1 -1
  679. package/lib/sync/range/range.js +5 -2
  680. package/lib/sync/range/range.js.map +1 -1
  681. package/lib/sync/range/utils/batches.js.map +1 -1
  682. package/lib/sync/range/utils/chainTarget.js.map +1 -1
  683. package/lib/sync/range/utils/hashBlocks.js.map +1 -1
  684. package/lib/sync/range/utils/peerBalancer.d.ts.map +1 -1
  685. package/lib/sync/range/utils/peerBalancer.js.map +1 -1
  686. package/lib/sync/range/utils/updateChains.js.map +1 -1
  687. package/lib/sync/sync.d.ts.map +1 -1
  688. package/lib/sync/sync.js.map +1 -1
  689. package/lib/sync/types.js +4 -2
  690. package/lib/sync/types.js.map +1 -1
  691. package/lib/sync/unknownBlock.d.ts +0 -14
  692. package/lib/sync/unknownBlock.d.ts.map +1 -1
  693. package/lib/sync/unknownBlock.js.map +1 -1
  694. package/lib/sync/utils/downloadByRange.d.ts +8 -5
  695. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  696. package/lib/sync/utils/downloadByRange.js +8 -6
  697. package/lib/sync/utils/downloadByRange.js.map +1 -1
  698. package/lib/sync/utils/downloadByRoot.d.ts +8 -8
  699. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  700. package/lib/sync/utils/downloadByRoot.js +3 -2
  701. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  702. package/lib/sync/utils/pendingBlocksTree.js.map +1 -1
  703. package/lib/sync/utils/remoteSyncType.d.ts +1 -1
  704. package/lib/sync/utils/remoteSyncType.d.ts.map +1 -1
  705. package/lib/sync/utils/remoteSyncType.js +4 -2
  706. package/lib/sync/utils/remoteSyncType.js.map +1 -1
  707. package/lib/util/address.js.map +1 -1
  708. package/lib/util/array.d.ts.map +1 -1
  709. package/lib/util/array.js.map +1 -1
  710. package/lib/util/asyncIterableToEvents.d.ts.map +1 -1
  711. package/lib/util/asyncIterableToEvents.js +2 -1
  712. package/lib/util/asyncIterableToEvents.js.map +1 -1
  713. package/lib/util/binarySearch.d.ts.map +1 -1
  714. package/lib/util/binarySearch.js.map +1 -1
  715. package/lib/util/bitArray.js +2 -1
  716. package/lib/util/bitArray.js.map +1 -1
  717. package/lib/util/blobs.d.ts +2 -2
  718. package/lib/util/blobs.d.ts.map +1 -1
  719. package/lib/util/blobs.js.map +1 -1
  720. package/lib/util/bufferPool.d.ts.map +1 -1
  721. package/lib/util/bufferPool.js +2 -1
  722. package/lib/util/bufferPool.js.map +1 -1
  723. package/lib/util/chunkify.js.map +1 -1
  724. package/lib/util/clock.d.ts +6 -0
  725. package/lib/util/clock.d.ts.map +1 -1
  726. package/lib/util/clock.js +11 -4
  727. package/lib/util/clock.js.map +1 -1
  728. package/lib/util/dataColumns.d.ts +11 -3
  729. package/lib/util/dataColumns.d.ts.map +1 -1
  730. package/lib/util/dataColumns.js +36 -3
  731. package/lib/util/dataColumns.js.map +1 -1
  732. package/lib/util/dependentRoot.js.map +1 -1
  733. package/lib/util/enum.js.map +1 -1
  734. package/lib/util/error.js.map +1 -1
  735. package/lib/util/eventLoop.js.map +1 -1
  736. package/lib/util/execution.d.ts.map +1 -1
  737. package/lib/util/execution.js +19 -9
  738. package/lib/util/execution.js.map +1 -1
  739. package/lib/util/file.js.map +1 -1
  740. package/lib/util/forkChoice.js.map +1 -1
  741. package/lib/util/forkName.js.map +1 -1
  742. package/lib/util/graffiti.js.map +1 -1
  743. package/lib/util/hex.js.map +1 -1
  744. package/lib/util/ip.js.map +1 -1
  745. package/lib/util/itTrigger.d.ts.map +1 -1
  746. package/lib/util/itTrigger.js.map +1 -1
  747. package/lib/util/map.d.ts.map +1 -1
  748. package/lib/util/map.js.map +1 -1
  749. package/lib/util/metadata.js.map +1 -1
  750. package/lib/util/multifork.d.ts +8 -0
  751. package/lib/util/multifork.d.ts.map +1 -1
  752. package/lib/util/multifork.js +37 -0
  753. package/lib/util/multifork.js.map +1 -1
  754. package/lib/util/numpy.js.map +1 -1
  755. package/lib/util/peerId.js.map +1 -1
  756. package/lib/util/profile.js +2 -1
  757. package/lib/util/profile.js.map +1 -1
  758. package/lib/util/promises.js.map +1 -1
  759. package/lib/util/queue/errors.js +2 -1
  760. package/lib/util/queue/errors.js.map +1 -1
  761. package/lib/util/queue/fnQueue.d.ts.map +1 -1
  762. package/lib/util/queue/fnQueue.js.map +1 -1
  763. package/lib/util/queue/itemQueue.d.ts.map +1 -1
  764. package/lib/util/queue/itemQueue.js.map +1 -1
  765. package/lib/util/queue/options.js +2 -1
  766. package/lib/util/queue/options.js.map +1 -1
  767. package/lib/util/serializedCache.d.ts +4 -4
  768. package/lib/util/serializedCache.d.ts.map +1 -1
  769. package/lib/util/serializedCache.js +6 -4
  770. package/lib/util/serializedCache.js.map +1 -1
  771. package/lib/util/set.d.ts.map +1 -1
  772. package/lib/util/set.js.map +1 -1
  773. package/lib/util/shuffle.js.map +1 -1
  774. package/lib/util/sortBy.js.map +1 -1
  775. package/lib/util/sszBytes.js.map +1 -1
  776. package/lib/util/time.js.map +1 -1
  777. package/lib/util/timeSeries.d.ts.map +1 -1
  778. package/lib/util/timeSeries.js.map +1 -1
  779. package/lib/util/types.d.ts.map +1 -1
  780. package/lib/util/workerEvents.d.ts +1 -1
  781. package/lib/util/workerEvents.d.ts.map +1 -1
  782. package/lib/util/workerEvents.js.map +1 -1
  783. package/lib/util/wrapError.js.map +1 -1
  784. package/package.json +42 -44
  785. package/src/api/impl/beacon/blocks/index.ts +158 -3
  786. package/src/api/impl/beacon/state/index.ts +8 -8
  787. package/src/api/impl/beacon/state/utils.ts +15 -29
  788. package/src/api/impl/debug/index.ts +9 -5
  789. package/src/api/impl/node/utils.ts +3 -3
  790. package/src/api/impl/validator/index.ts +153 -17
  791. package/src/chain/archiveStore/archiveStore.ts +15 -5
  792. package/src/chain/archiveStore/historicalState/getHistoricalState.ts +10 -11
  793. package/src/chain/archiveStore/historicalState/worker.ts +3 -3
  794. package/src/chain/archiveStore/utils/archiveBlocks.ts +4 -5
  795. package/src/chain/archiveStore/utils/archivePayloads.ts +15 -0
  796. package/src/chain/archiveStore/utils/updateBackfillRange.ts +1 -1
  797. package/src/chain/blocks/blockInput/blockInput.ts +103 -3
  798. package/src/chain/blocks/blockInput/types.ts +18 -0
  799. package/src/chain/blocks/importBlock.ts +36 -5
  800. package/src/chain/blocks/verifyBlocksDataAvailability.ts +3 -0
  801. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +9 -2
  802. package/src/chain/blocks/verifyBlocksSanityChecks.ts +7 -2
  803. package/src/chain/blocks/writeBlockInputToDb.ts +105 -104
  804. package/src/chain/bls/multithread/index.ts +7 -7
  805. package/src/chain/bls/multithread/jobItem.ts +3 -3
  806. package/src/chain/bls/singleThread.ts +5 -5
  807. package/src/chain/bls/utils.ts +8 -5
  808. package/src/chain/chain.ts +86 -47
  809. package/src/chain/emitter.ts +5 -5
  810. package/src/chain/errors/executionPayloadBid.ts +1 -1
  811. package/src/chain/errors/executionPayloadEnvelope.ts +6 -2
  812. package/src/chain/errors/payloadAttestation.ts +1 -1
  813. package/src/chain/forkChoice/index.ts +39 -21
  814. package/src/chain/interface.ts +4 -11
  815. package/src/chain/opPools/aggregatedAttestationPool.ts +1 -1
  816. package/src/chain/options.ts +1 -0
  817. package/src/chain/prepareNextSlot.ts +5 -5
  818. package/src/chain/produceBlock/computeNewStateRoot.ts +36 -3
  819. package/src/chain/produceBlock/produceBlockBody.ts +170 -14
  820. package/src/chain/regen/queued.ts +7 -2
  821. package/src/chain/regen/regen.ts +9 -3
  822. package/src/chain/seenCache/seenGossipBlockInput.ts +56 -18
  823. package/src/chain/validation/aggregateAndProof.ts +1 -1
  824. package/src/chain/validation/attestation.ts +14 -7
  825. package/src/chain/validation/attesterSlashing.ts +10 -1
  826. package/src/chain/validation/blobSidecar.ts +2 -2
  827. package/src/chain/validation/block.ts +9 -4
  828. package/src/chain/validation/dataColumnSidecar.ts +149 -132
  829. package/src/chain/validation/executionPayloadBid.ts +1 -2
  830. package/src/chain/validation/executionPayloadEnvelope.ts +4 -4
  831. package/src/chain/validation/payloadAttestationMessage.ts +10 -3
  832. package/src/chain/validation/proposerSlashing.ts +1 -1
  833. package/src/chain/validation/syncCommitteeContributionAndProof.ts +1 -1
  834. package/src/db/beacon.ts +8 -0
  835. package/src/db/buckets.ts +3 -0
  836. package/src/db/index.ts +1 -0
  837. package/src/db/interface.ts +5 -0
  838. package/src/db/repositories/blockArchive.ts +1 -2
  839. package/src/db/repositories/dataColumnSidecar.ts +18 -3
  840. package/src/db/repositories/dataColumnSidecarArchive.ts +18 -3
  841. package/src/db/repositories/executionPayloadEnvelope.ts +26 -0
  842. package/src/db/repositories/executionPayloadEnvelopeArchive.ts +32 -0
  843. package/src/db/repositories/index.ts +2 -0
  844. package/src/execution/engine/http.ts +3 -0
  845. package/src/metrics/metrics/beacon.ts +14 -3
  846. package/src/metrics/metrics/lodestar.ts +48 -24
  847. package/src/monitoring/service.ts +3 -2
  848. package/src/network/core/networkCore.ts +3 -3
  849. package/src/network/core/networkCoreWorkerHandler.ts +3 -3
  850. package/src/network/core/types.ts +2 -2
  851. package/src/network/discv5/utils.ts +5 -4
  852. package/src/network/events.ts +2 -1
  853. package/src/network/gossip/encoding.ts +3 -3
  854. package/src/network/gossip/gossipsub.ts +98 -32
  855. package/src/network/gossip/interface.ts +6 -6
  856. package/src/network/gossip/scoringParameters.ts +4 -4
  857. package/src/network/gossip/topic.ts +2 -1
  858. package/src/network/interface.ts +7 -4
  859. package/src/network/libp2p/index.ts +48 -21
  860. package/src/network/metadata.ts +1 -0
  861. package/src/network/network.ts +26 -7
  862. package/src/network/options.ts +8 -1
  863. package/src/network/peers/datastore.ts +13 -10
  864. package/src/network/peers/discover.ts +46 -11
  865. package/src/network/peers/peerManager.ts +118 -54
  866. package/src/network/peers/utils/prioritizePeers.ts +3 -3
  867. package/src/network/processor/gossipHandlers.ts +19 -4
  868. package/src/network/processor/gossipValidatorFn.ts +2 -2
  869. package/src/network/processor/types.ts +1 -1
  870. package/src/network/reqresp/ReqRespBeaconNode.ts +1 -1
  871. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +4 -3
  872. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +3 -2
  873. package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +1 -1
  874. package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +4 -3
  875. package/src/network/reqresp/handlers/dataColumnSidecarsByRoot.ts +2 -2
  876. package/src/network/reqresp/score.ts +0 -1
  877. package/src/network/reqresp/utils/collect.ts +1 -1
  878. package/src/network/reqresp/utils/collectSequentialBlocksInRange.ts +1 -1
  879. package/src/network/util.ts +2 -2
  880. package/src/node/nodejs.ts +8 -9
  881. package/src/sync/range/range.ts +1 -0
  882. package/src/sync/utils/downloadByRange.ts +12 -3
  883. package/src/sync/utils/downloadByRoot.ts +2 -2
  884. package/src/sync/utils/remoteSyncType.ts +1 -1
  885. package/src/util/blobs.ts +3 -3
  886. package/src/util/clock.ts +9 -4
  887. package/src/util/dataColumns.ts +43 -3
  888. package/src/util/execution.ts +23 -12
  889. package/src/util/multifork.ts +45 -0
  890. package/src/util/serializedCache.ts +7 -5
  891. package/src/util/workerEvents.ts +1 -1
@@ -1,10 +1,18 @@
1
+ import {
2
+ type GossipSub,
3
+ type GossipSubEvents,
4
+ type PublishResult,
5
+ StrictNoSign,
6
+ type TopicValidatorResult,
7
+ gossipsub,
8
+ } from "@libp2p/gossipsub";
9
+ import type {MetricsRegister, TopicLabel, TopicStrToLabel} from "@libp2p/gossipsub/metrics";
10
+ import type {PeerScoreParams, PeerScoreStatsDump} from "@libp2p/gossipsub/score";
11
+ import type {AddrInfo, PublishOpts, TopicStr} from "@libp2p/gossipsub/types";
12
+ import type {PeerId} from "@libp2p/interface";
1
13
  import {peerIdFromString} from "@libp2p/peer-id";
2
- import {multiaddr} from "@multiformats/multiaddr";
14
+ import {type Multiaddr, multiaddr} from "@multiformats/multiaddr";
3
15
  import {ENR} from "@chainsafe/enr";
4
- import {GossipSub, GossipsubEvents} from "@chainsafe/libp2p-gossipsub";
5
- import {MetricsRegister, TopicLabel, TopicStrToLabel} from "@chainsafe/libp2p-gossipsub/metrics";
6
- import {PeerScoreParams} from "@chainsafe/libp2p-gossipsub/score";
7
- import {AddrInfo, SignaturePolicy, TopicStr} from "@chainsafe/libp2p-gossipsub/types";
8
16
  import {routes} from "@lodestar/api";
9
17
  import {BeaconConfig, ForkBoundary} from "@lodestar/config";
10
18
  import {ATTESTATION_SUBNET_COUNT, SLOTS_PER_EPOCH, SYNC_COMMITTEE_SUBNET_COUNT} from "@lodestar/params";
@@ -69,6 +77,24 @@ export type Eth2GossipsubOpts = {
69
77
 
70
78
  export type ForkBoundaryLabel = string;
71
79
 
80
+ // Many of the internal properties we need are not available on the public interface,
81
+ // so we create an extended type here to avoid excessive type assertions throughout the codebase.
82
+ // Mind that any updates to the gossipsub package may require updates to this type.
83
+ type GossipSubInternal = GossipSub & {
84
+ mesh: Map<string, Set<string>>;
85
+ peers: Map<string, PeerId>;
86
+ score: {score: (peerIdStr: string) => number};
87
+ direct: Set<string>;
88
+ topics: Map<string, Set<string>>;
89
+ start: () => Promise<void>;
90
+ stop: () => Promise<void>;
91
+ publish: (topic: TopicStr, data: Uint8Array, opts?: PublishOpts) => Promise<PublishResult>;
92
+ getMeshPeers: (topic: TopicStr) => string[];
93
+ dumpPeerScoreStats: () => PeerScoreStatsDump;
94
+ getScore: (peerIdStr: string) => number;
95
+ reportMessageValidationResult: (msgId: string, propagationSource: string, acceptance: TopicValidatorResult) => void;
96
+ };
97
+
72
98
  /**
73
99
  * Wrapper around js-libp2p-gossipsub with the following extensions:
74
100
  * - Eth2 message id
@@ -82,13 +108,14 @@ export type ForkBoundaryLabel = string;
82
108
  *
83
109
  * See https://github.com/ethereum/consensus-specs/blob/v1.1.10/specs/phase0/p2p-interface.md#the-gossip-domain-gossipsub
84
110
  */
85
- export class Eth2Gossipsub extends GossipSub {
111
+ export class Eth2Gossipsub {
86
112
  readonly scoreParams: Partial<PeerScoreParams>;
87
113
  private readonly config: BeaconConfig;
88
114
  private readonly logger: Logger;
89
115
  private readonly peersData: PeersData;
90
116
  private readonly events: NetworkEventBus;
91
117
  private readonly libp2p: Libp2p;
118
+ private readonly gossipsub: GossipSubInternal;
92
119
 
93
120
  // Internal caches
94
121
  private readonly gossipTopicCache: GossipTopicCache;
@@ -103,9 +130,6 @@ export class Eth2Gossipsub extends GossipSub {
103
130
  let metrics: Eth2GossipsubMetrics | null = null;
104
131
  if (metricsRegister) {
105
132
  metrics = createEth2GossipsubMetrics(metricsRegister);
106
- metrics.gossipMesh.peersByType.addCollect(() =>
107
- this.onScrapeLodestarMetrics(metrics as Eth2GossipsubMetrics, networkConfig)
108
- );
109
133
  }
110
134
 
111
135
  // Parse direct peers from multiaddr strings to AddrInfo objects
@@ -113,8 +137,8 @@ export class Eth2Gossipsub extends GossipSub {
113
137
 
114
138
  // Gossipsub parameters defined here:
115
139
  // https://github.com/ethereum/consensus-specs/blob/v1.1.10/specs/phase0/p2p-interface.md#the-gossip-domain-gossipsub
116
- super(modules.libp2p.services.components, {
117
- globalSignaturePolicy: SignaturePolicy.StrictNoSign,
140
+ const gossipsubInstance = gossipsub({
141
+ globalSignaturePolicy: StrictNoSign,
118
142
  allowPublishToZeroTopicPeers: allowPublishToZeroPeers,
119
143
  D: gossipsubD ?? GOSSIP_D,
120
144
  Dlo: gossipsubDLow ?? GOSSIP_D_LOW,
@@ -155,7 +179,12 @@ export class Eth2Gossipsub extends GossipSub {
155
179
  // This should be large enough to not send IDONTWANT for "small" messages
156
180
  // See https://github.com/ChainSafe/lodestar/pull/7077#issuecomment-2383679472
157
181
  idontwantMinDataSize: 16829,
158
- });
182
+ })(modules.libp2p.services.components) as GossipSubInternal;
183
+
184
+ if (metrics) {
185
+ metrics.gossipMesh.peersByType.addCollect(() => this.onScrapeLodestarMetrics(metrics, networkConfig));
186
+ }
187
+ this.gossipsub = gossipsubInstance;
159
188
  this.scoreParams = scoreParams;
160
189
  this.config = config;
161
190
  this.logger = logger;
@@ -164,7 +193,7 @@ export class Eth2Gossipsub extends GossipSub {
164
193
  this.libp2p = modules.libp2p;
165
194
  this.gossipTopicCache = gossipTopicCache;
166
195
 
167
- this.addEventListener("gossipsub:message", this.onGossipsubMessage.bind(this));
196
+ this.gossipsub.addEventListener("gossipsub:message", this.onGossipsubMessage.bind(this));
168
197
  this.events.on(NetworkEvent.gossipMessageValidationResult, this.onValidationResult.bind(this));
169
198
 
170
199
  // Having access to this data is CRUCIAL for debugging. While this is a massive log, it must not be deleted.
@@ -174,6 +203,38 @@ export class Eth2Gossipsub extends GossipSub {
174
203
  }
175
204
  }
176
205
 
206
+ async start(): Promise<void> {
207
+ await this.gossipsub.start();
208
+ }
209
+
210
+ async stop(): Promise<void> {
211
+ await this.gossipsub.stop();
212
+ }
213
+
214
+ get mesh(): Map<string, Set<string>> {
215
+ return this.gossipsub.mesh;
216
+ }
217
+
218
+ getTopics(): TopicStr[] {
219
+ return this.gossipsub.getTopics();
220
+ }
221
+
222
+ getMeshPeers(topic: TopicStr): string[] {
223
+ return this.gossipsub.getMeshPeers(topic);
224
+ }
225
+
226
+ publish(topic: TopicStr, data: Uint8Array, opts?: PublishOpts): Promise<PublishResult> {
227
+ return this.gossipsub.publish(topic, data, opts);
228
+ }
229
+
230
+ dumpPeerScoreStats(): PeerScoreStatsDump {
231
+ return this.gossipsub.dumpPeerScoreStats();
232
+ }
233
+
234
+ getScore(peerIdStr: string): number {
235
+ return this.gossipsub.getScore(peerIdStr);
236
+ }
237
+
177
238
  /**
178
239
  * Subscribe to a `GossipTopic`
179
240
  */
@@ -183,7 +244,7 @@ export class Eth2Gossipsub extends GossipSub {
183
244
  this.gossipTopicCache.setTopic(topicStr, topic);
184
245
 
185
246
  this.logger.verbose("Subscribe to gossipsub topic", {topic: topicStr});
186
- this.subscribe(topicStr);
247
+ this.gossipsub.subscribe(topicStr);
187
248
  }
188
249
 
189
250
  /**
@@ -192,15 +253,14 @@ export class Eth2Gossipsub extends GossipSub {
192
253
  unsubscribeTopic(topic: GossipTopic): void {
193
254
  const topicStr = stringifyGossipTopic(this.config, topic);
194
255
  this.logger.verbose("Unsubscribe to gossipsub topic", {topic: topicStr});
195
- this.unsubscribe(topicStr);
256
+ this.gossipsub.unsubscribe(topicStr);
196
257
  }
197
258
 
198
259
  private onScrapeLodestarMetrics(metrics: Eth2GossipsubMetrics, networkConfig: NetworkConfig): void {
199
- const mesh = this.mesh;
200
- // biome-ignore lint/complexity/useLiteralKeys: `topics` is a private attribute
201
- const topics = this["topics"] as Map<string, Set<string>>;
202
- const peers = this.peers;
203
- const score = this.score;
260
+ const mesh = this.gossipsub.mesh;
261
+ const topics = this.gossipsub.topics;
262
+ const peers = this.gossipsub.peers;
263
+ const score = this.gossipsub.score;
204
264
  const meshPeersByClient = new Map<string, number>();
205
265
  const meshPeerIdStrs = new Set<string>();
206
266
 
@@ -305,7 +365,7 @@ export class Eth2Gossipsub extends GossipSub {
305
365
  metrics.gossipPeer.score.set(gossipScores);
306
366
  }
307
367
 
308
- private onGossipsubMessage(event: GossipsubEvents["gossipsub:message"]): void {
368
+ private onGossipsubMessage(event: GossipSubEvents["gossipsub:message"]): void {
309
369
  const {propagationSource, msgId, msg} = event.detail;
310
370
 
311
371
  // Also validates that the topicStr is known
@@ -341,7 +401,7 @@ export class Eth2Gossipsub extends GossipSub {
341
401
  // Without this we'll have huge event loop lag
342
402
  // See https://github.com/ChainSafe/lodestar/issues/5604
343
403
  callInNextEventLoop(() => {
344
- this.reportMessageValidationResult(data.msgId, data.propagationSource, data.acceptance);
404
+ this.gossipsub.reportMessageValidationResult(data.msgId, data.propagationSource, data.acceptance);
345
405
  });
346
406
  }
347
407
 
@@ -379,7 +439,7 @@ export class Eth2Gossipsub extends GossipSub {
379
439
  }
380
440
 
381
441
  // Add to direct peers set only after addresses are stored
382
- this.direct.add(peerIdStr);
442
+ this.gossipsub.direct.add(peerIdStr);
383
443
 
384
444
  this.logger.info("Added direct peer via API", {peerId: peerIdStr});
385
445
  return peerIdStr;
@@ -389,7 +449,7 @@ export class Eth2Gossipsub extends GossipSub {
389
449
  * Remove a peer from direct peers.
390
450
  */
391
451
  removeDirectPeer(peerIdStr: string): boolean {
392
- const removed = this.direct.delete(peerIdStr);
452
+ const removed = this.gossipsub.direct.delete(peerIdStr);
393
453
  if (removed) {
394
454
  this.logger.info("Removed direct peer via API", {peerId: peerIdStr});
395
455
  }
@@ -400,7 +460,7 @@ export class Eth2Gossipsub extends GossipSub {
400
460
  * Get list of current direct peer IDs.
401
461
  */
402
462
  getDirectPeers(): string[] {
403
- return Array.from(this.direct);
463
+ return Array.from(this.gossipsub.direct);
404
464
  }
405
465
  }
406
466
 
@@ -477,19 +537,24 @@ export function parseDirectPeers(directPeerStrs: routes.lodestar.DirectPeer[], l
477
537
  const enr = ENR.decodeTxt(peerStr);
478
538
  const peerId = enr.peerId;
479
539
 
480
- // Get TCP multiaddr from ENR
481
- const multiaddrTCP = enr.getLocationMultiaddr("tcp");
482
- if (!multiaddrTCP) {
483
- logger.warn("ENR does not contain TCP multiaddr", {enr: peerStr});
540
+ // Get all available transport multiaddrs from ENR
541
+ const addrs = [enr.getLocationMultiaddr("quic"), enr.getLocationMultiaddr("tcp")].filter(
542
+ (a): a is Multiaddr => a != null
543
+ );
544
+ if (addrs.length === 0) {
545
+ logger.warn("ENR does not contain any transport multiaddr", {enr: peerStr});
484
546
  continue;
485
547
  }
486
548
 
487
549
  directPeers.push({
488
550
  id: peerId,
489
- addrs: [multiaddrTCP],
551
+ addrs,
490
552
  });
491
553
 
492
- logger.info("Added direct peer from ENR", {peerId: peerId.toString(), addr: multiaddrTCP.toString()});
554
+ logger.info("Added direct peer from ENR", {
555
+ peerId: peerId.toString(),
556
+ addrs: addrs.map((a) => a.toString()).join(", "),
557
+ });
493
558
  } catch (e) {
494
559
  logger.warn("Failed to parse direct peer ENR", {enr: peerStr}, e as Error);
495
560
  }
@@ -498,7 +563,8 @@ export function parseDirectPeers(directPeerStrs: routes.lodestar.DirectPeer[], l
498
563
  try {
499
564
  const ma = multiaddr(peerStr);
500
565
 
501
- const peerIdStr = ma.getPeerId();
566
+ const peerIdComponent = ma.getComponents().findLast((component) => component.name === "p2p");
567
+ const peerIdStr = peerIdComponent?.value;
502
568
  if (!peerIdStr) {
503
569
  logger.warn("Direct peer multiaddr must contain /p2p/ component with peer ID", {multiaddr: peerStr});
504
570
  continue;
@@ -1,9 +1,10 @@
1
- import {Message, TopicValidatorResult} from "@libp2p/interface";
2
- import {Libp2p} from "libp2p";
3
- import {PeerIdStr} from "@chainsafe/libp2p-gossipsub/types";
1
+ import type {Message, TopicValidatorResult} from "@libp2p/gossipsub";
2
+ import type {PeerIdStr} from "@libp2p/gossipsub/types";
3
+ import type {Libp2p} from "libp2p";
4
4
  import {BeaconConfig, ForkBoundary} from "@lodestar/config";
5
5
  import {
6
6
  AttesterSlashing,
7
+ DataColumnSidecar,
7
8
  LightClientFinalityUpdate,
8
9
  LightClientOptimisticUpdate,
9
10
  SignedAggregateAndProof,
@@ -14,7 +15,6 @@ import {
14
15
  altair,
15
16
  capella,
16
17
  deneb,
17
- fulu,
18
18
  gloas,
19
19
  phase0,
20
20
  } from "@lodestar/types";
@@ -98,7 +98,7 @@ export type GossipTypeMap = {
98
98
  [GossipType.blob_sidecar]: deneb.BlobSidecar;
99
99
  [GossipType.beacon_aggregate_and_proof]: SignedAggregateAndProof;
100
100
  [GossipType.beacon_attestation]: SingleAttestation;
101
- [GossipType.data_column_sidecar]: fulu.DataColumnSidecar;
101
+ [GossipType.data_column_sidecar]: DataColumnSidecar;
102
102
  [GossipType.voluntary_exit]: phase0.SignedVoluntaryExit;
103
103
  [GossipType.proposer_slashing]: phase0.ProposerSlashing;
104
104
  [GossipType.attester_slashing]: AttesterSlashing;
@@ -117,7 +117,7 @@ export type GossipFnByType = {
117
117
  [GossipType.blob_sidecar]: (blobSidecar: deneb.BlobSidecar) => Promise<void> | void;
118
118
  [GossipType.beacon_aggregate_and_proof]: (aggregateAndProof: SignedAggregateAndProof) => Promise<void> | void;
119
119
  [GossipType.beacon_attestation]: (attestation: SingleAttestation) => Promise<void> | void;
120
- [GossipType.data_column_sidecar]: (dataColumnSidecar: fulu.DataColumnSidecar) => Promise<void> | void;
120
+ [GossipType.data_column_sidecar]: (dataColumnSidecar: DataColumnSidecar) => Promise<void> | void;
121
121
  [GossipType.voluntary_exit]: (voluntaryExit: phase0.SignedVoluntaryExit) => Promise<void> | void;
122
122
  [GossipType.proposer_slashing]: (proposerSlashing: phase0.ProposerSlashing) => Promise<void> | void;
123
123
  [GossipType.attester_slashing]: (attesterSlashing: AttesterSlashing) => Promise<void> | void;
@@ -1,9 +1,9 @@
1
1
  import {
2
- PeerScoreParams,
3
- PeerScoreThresholds,
4
- TopicScoreParams,
2
+ type PeerScoreParams,
3
+ type PeerScoreThresholds,
4
+ type TopicScoreParams,
5
5
  defaultTopicScoreParams,
6
- } from "@chainsafe/libp2p-gossipsub/score";
6
+ } from "@libp2p/gossipsub/score";
7
7
  import {BeaconConfig} from "@lodestar/config";
8
8
  import {ATTESTATION_SUBNET_COUNT, PTC_SIZE, SLOTS_PER_EPOCH, TARGET_AGGREGATORS_PER_COMMITTEE} from "@lodestar/params";
9
9
  import {computeCommitteeCount} from "@lodestar/state-transition";
@@ -6,6 +6,7 @@ import {
6
6
  SYNC_COMMITTEE_SUBNET_COUNT,
7
7
  isForkPostAltair,
8
8
  isForkPostElectra,
9
+ isForkPostFulu,
9
10
  } from "@lodestar/params";
10
11
  import {Attestation, SingleAttestation, ssz, sszTypesFor} from "@lodestar/types";
11
12
  import {GossipAction, GossipActionError, GossipErrorCode} from "../../chain/errors/gossipValidation.js";
@@ -92,7 +93,7 @@ export function getGossipSSZType(topic: GossipTopic) {
92
93
  case GossipType.blob_sidecar:
93
94
  return ssz.deneb.BlobSidecar;
94
95
  case GossipType.data_column_sidecar:
95
- return ssz.fulu.DataColumnSidecar;
96
+ return isForkPostFulu(fork) ? sszTypesFor(fork).DataColumnSidecar : ssz.fulu.DataColumnSidecar;
96
97
  case GossipType.beacon_aggregate_and_proof:
97
98
  return sszTypesFor(fork).SignedAggregateAndProof;
98
99
  case GossipType.beacon_attestation:
@@ -1,5 +1,5 @@
1
- import {Identify} from "@libp2p/identify";
2
- import {
1
+ import type {Identify} from "@libp2p/identify";
2
+ import type {
3
3
  ComponentLogger,
4
4
  ConnectionGater,
5
5
  ConnectionProtector,
@@ -16,9 +16,10 @@ import {
16
16
  } from "@libp2p/interface";
17
17
  import type {AddressManager, ConnectionManager, Registrar, TransportManager} from "@libp2p/interface-internal";
18
18
  import type {Datastore} from "interface-datastore";
19
- import {Libp2p as ILibp2p} from "libp2p";
19
+ import type {Libp2p as ILibp2p} from "libp2p";
20
20
  import {
21
21
  AttesterSlashing,
22
+ DataColumnSidecar,
22
23
  LightClientFinalityUpdate,
23
24
  LightClientOptimisticUpdate,
24
25
  SignedAggregateAndProof,
@@ -31,6 +32,7 @@ import {
31
32
  capella,
32
33
  deneb,
33
34
  fulu,
35
+ gloas,
34
36
  phase0,
35
37
  } from "@lodestar/types";
36
38
  import {BlockInputSource} from "../chain/blocks/blockInput/types.js";
@@ -86,7 +88,7 @@ export interface INetwork extends INetworkCorePublic {
86
88
  publishBlobSidecar(blobSidecar: deneb.BlobSidecar): Promise<number>;
87
89
  publishBeaconAggregateAndProof(aggregateAndProof: SignedAggregateAndProof): Promise<number>;
88
90
  publishBeaconAttestation(attestation: SingleAttestation, subnet: SubnetID): Promise<number>;
89
- publishDataColumnSidecar(dataColumnSideCar: fulu.DataColumnSidecar): Promise<number>;
91
+ publishDataColumnSidecar(dataColumnSideCar: DataColumnSidecar): Promise<number>;
90
92
  publishVoluntaryExit(voluntaryExit: phase0.SignedVoluntaryExit): Promise<number>;
91
93
  publishBlsToExecutionChange(blsToExecutionChange: capella.SignedBLSToExecutionChange): Promise<number>;
92
94
  publishProposerSlashing(proposerSlashing: phase0.ProposerSlashing): Promise<number>;
@@ -95,6 +97,7 @@ export interface INetwork extends INetworkCorePublic {
95
97
  publishContributionAndProof(contributionAndProof: altair.SignedContributionAndProof): Promise<number>;
96
98
  publishLightClientFinalityUpdate(update: LightClientFinalityUpdate): Promise<number>;
97
99
  publishLightClientOptimisticUpdate(update: LightClientOptimisticUpdate): Promise<number>;
100
+ publishSignedExecutionPayloadEnvelope(signedEnvelope: gloas.SignedExecutionPayloadEnvelope): Promise<number>;
98
101
 
99
102
  // Debug
100
103
  dumpGossipQueue(gossipType: GossipType): Promise<PendingGossipsubMessage[]>;
@@ -1,15 +1,16 @@
1
1
  import {bootstrap} from "@libp2p/bootstrap";
2
2
  import {identify} from "@libp2p/identify";
3
- import {PrivateKey} from "@libp2p/interface";
3
+ import type {PrivateKey} from "@libp2p/interface";
4
4
  import {mdns} from "@libp2p/mdns";
5
5
  import {mplex} from "@libp2p/mplex";
6
6
  import {prometheusMetrics} from "@libp2p/prometheus-metrics";
7
7
  import {tcp} from "@libp2p/tcp";
8
- import {createLibp2p} from "libp2p";
8
+ import {Libp2pInit, createLibp2p} from "libp2p";
9
9
  import {Registry} from "prom-client";
10
10
  import {ENR} from "@chainsafe/enr";
11
11
  import {noise} from "@chainsafe/libp2p-noise";
12
12
  import {asCrypto, defaultCrypto} from "@chainsafe/libp2p-noise/crypto";
13
+ import {quic} from "@chainsafe/libp2p-quic";
13
14
  import {Libp2p, LodestarComponents} from "../interface.js";
14
15
  import {NetworkOptions, defaultNetworkOptions} from "../options.js";
15
16
  import {Eth2PeerDataStore} from "../peers/datastore.js";
@@ -21,11 +22,14 @@ export type NodeJsLibp2pOpts = {
21
22
  metricsRegistry?: Registry;
22
23
  };
23
24
 
24
- export async function getDiscv5Multiaddrs(bootEnrs: string[]): Promise<string[]> {
25
+ export async function getDiscv5Multiaddrs(bootEnrs: string[], quicEnabled?: boolean): Promise<string[]> {
25
26
  const bootMultiaddrs = [];
26
27
  for (const enrStr of bootEnrs) {
27
28
  const enr = ENR.decodeTxt(enrStr);
28
- const multiaddrWithPeerId = (await enr.getFullMultiaddr("tcp"))?.toString();
29
+ // Prefer QUIC over TCP when available
30
+ const quicMultiaddr = quicEnabled ? (await enr.getFullMultiaddr("quic"))?.toString() : undefined;
31
+ const tcpMultiaddr = (await enr.getFullMultiaddr("tcp"))?.toString();
32
+ const multiaddrWithPeerId = quicMultiaddr ?? tcpMultiaddr;
29
33
  if (multiaddrWithPeerId) {
30
34
  bootMultiaddrs.push(multiaddrWithPeerId);
31
35
  }
@@ -39,6 +43,7 @@ export async function createNodeJsLibp2p(
39
43
  nodeJsLibp2pOpts: NodeJsLibp2pOpts = {}
40
44
  ): Promise<Libp2p> {
41
45
  const localMultiaddrs = networkOpts.localMultiaddrs || defaultNetworkOptions.localMultiaddrs;
46
+ const disconnectThreshold = networkOpts.disconnectThreshold ?? defaultNetworkOptions.disconnectThreshold;
42
47
  const {peerStoreDir, disablePeerDiscovery} = nodeJsLibp2pOpts;
43
48
 
44
49
  let datastore: undefined | Eth2PeerDataStore = undefined;
@@ -52,7 +57,9 @@ export async function createNodeJsLibp2p(
52
57
  const bootMultiaddrs = [
53
58
  ...(networkOpts.bootMultiaddrs ?? defaultNetworkOptions.bootMultiaddrs ?? []),
54
59
  // Append discv5.bootEnrs to bootMultiaddrs if requested
55
- ...(networkOpts.connectToDiscv5Bootnodes ? await getDiscv5Multiaddrs(networkOpts.discv5?.bootEnrs ?? []) : []),
60
+ ...(networkOpts.connectToDiscv5Bootnodes
61
+ ? await getDiscv5Multiaddrs(networkOpts.discv5?.bootEnrs ?? [], networkOpts.quic)
62
+ : []),
56
63
  ];
57
64
 
58
65
  if ((bootMultiaddrs.length ?? 0) > 0) {
@@ -63,6 +70,35 @@ export async function createNodeJsLibp2p(
63
70
  peerDiscovery.push(mdns());
64
71
  }
65
72
  }
73
+ const transports: Libp2pInit["transports"] = [];
74
+ if (networkOpts.tcp ?? true) {
75
+ transports.unshift(
76
+ tcp({
77
+ // Reject connections when the server's connection count gets high
78
+ maxConnections: networkOpts.maxPeers,
79
+ // socket option: the maximum length of the queue of pending connections
80
+ // https://nodejs.org/dist/latest-v18.x/docs/api/net.html#serverlisten
81
+ // it's not safe if we increase this number
82
+ backlog: 5,
83
+ closeServerOnMaxConnections: {
84
+ closeAbove: networkOpts.maxPeers ?? Infinity,
85
+ listenBelow: networkOpts.maxPeers ?? Infinity,
86
+ },
87
+ })
88
+ );
89
+ }
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
+ );
101
+ }
66
102
 
67
103
  const noiseCrypto = {
68
104
  ...defaultCrypto,
@@ -74,26 +110,18 @@ export async function createNodeJsLibp2p(
74
110
 
75
111
  return createLibp2p({
76
112
  privateKey,
113
+ nodeInfo: {
114
+ name: "lodestar",
115
+ version: networkOpts.version ?? "unknown",
116
+ userAgent: networkOpts.private ? "" : networkOpts.version ? `lodestar/${networkOpts.version}` : "lodestar",
117
+ },
77
118
  addresses: {
78
119
  listen: localMultiaddrs,
79
120
  announce: [],
80
121
  },
81
122
  connectionEncrypters: [noise({crypto: noiseCrypto})],
82
- // Reject connections when the server's connection count gets high
83
- transports: [
84
- tcp({
85
- maxConnections: networkOpts.maxPeers,
86
- // socket option: the maximum length of the queue of pending connections
87
- // https://nodejs.org/dist/latest-v18.x/docs/api/net.html#serverlisten
88
- // it's not safe if we increase this number
89
- backlog: 5,
90
- closeServerOnMaxConnections: {
91
- closeAbove: networkOpts.maxPeers ?? Infinity,
92
- listenBelow: networkOpts.maxPeers ?? Infinity,
93
- },
94
- }),
95
- ],
96
- streamMuxers: [mplex({maxInboundStreams: 256, disconnectThreshold: networkOpts.disconnectThreshold})],
123
+ transports,
124
+ streamMuxers: [mplex({disconnectThreshold})],
97
125
  peerDiscovery,
98
126
  metrics: nodeJsLibp2pOpts.metrics
99
127
  ? prometheusMetrics({
@@ -124,7 +152,6 @@ export async function createNodeJsLibp2p(
124
152
  datastore,
125
153
  services: {
126
154
  identify: identify({
127
- agentVersion: networkOpts.private ? "" : networkOpts.version ? `lodestar/${networkOpts.version}` : "lodestar",
128
155
  runOnConnectionOpen: false,
129
156
  }),
130
157
  // individual components are specified because the components object is a Proxy
@@ -11,6 +11,7 @@ import {NetworkConfig} from "./networkConfig.js";
11
11
 
12
12
  export enum ENRKey {
13
13
  tcp = "tcp",
14
+ quic = "quic",
14
15
  eth2 = "eth2",
15
16
  attnets = "attnets",
16
17
  syncnets = "syncnets",
@@ -1,7 +1,7 @@
1
- import {PeerId, PrivateKey} from "@libp2p/interface";
1
+ import type {PeerScoreStatsDump} from "@libp2p/gossipsub/score";
2
+ import type {PublishOpts} from "@libp2p/gossipsub/types";
3
+ import type {PeerId, PrivateKey} from "@libp2p/interface";
2
4
  import {peerIdFromPrivateKey} from "@libp2p/peer-id";
3
- import {PeerScoreStatsDump} from "@chainsafe/libp2p-gossipsub/score";
4
- import {PublishOpts} from "@chainsafe/libp2p-gossipsub/types";
5
5
  import {routes} from "@lodestar/api";
6
6
  import {BeaconConfig} from "@lodestar/config";
7
7
  import {LoggerNode} from "@lodestar/logger/node";
@@ -10,6 +10,8 @@ import {ResponseIncoming} from "@lodestar/reqresp";
10
10
  import {computeEpochAtSlot} from "@lodestar/state-transition";
11
11
  import {
12
12
  AttesterSlashing,
13
+ DataColumnSidecar,
14
+ DataColumnSidecars,
13
15
  LightClientBootstrap,
14
16
  LightClientFinalityUpdate,
15
17
  LightClientOptimisticUpdate,
@@ -24,6 +26,8 @@ import {
24
26
  capella,
25
27
  deneb,
26
28
  fulu,
29
+ gloas,
30
+ isGloasDataColumnSidecar,
27
31
  phase0,
28
32
  } from "@lodestar/types";
29
33
  import {prettyPrintIndices, sleep} from "@lodestar/utils";
@@ -354,8 +358,11 @@ export class Network implements INetwork {
354
358
  });
355
359
  }
356
360
 
357
- async publishDataColumnSidecar(dataColumnSidecar: fulu.DataColumnSidecar): Promise<number> {
358
- const epoch = computeEpochAtSlot(dataColumnSidecar.signedBlockHeader.message.slot);
361
+ async publishDataColumnSidecar(dataColumnSidecar: DataColumnSidecar): Promise<number> {
362
+ const slot = isGloasDataColumnSidecar(dataColumnSidecar)
363
+ ? dataColumnSidecar.slot
364
+ : dataColumnSidecar.signedBlockHeader.message.slot;
365
+ const epoch = computeEpochAtSlot(slot);
359
366
  const boundary = this.config.getForkBoundaryAtEpoch(epoch);
360
367
 
361
368
  const subnet = computeSubnetForDataColumnSidecar(this.config, dataColumnSidecar);
@@ -489,6 +496,17 @@ export class Network implements INetwork {
489
496
  );
490
497
  }
491
498
 
499
+ async publishSignedExecutionPayloadEnvelope(signedEnvelope: gloas.SignedExecutionPayloadEnvelope): Promise<number> {
500
+ const epoch = computeEpochAtSlot(signedEnvelope.message.slot);
501
+ const boundary = this.config.getForkBoundaryAtEpoch(epoch);
502
+
503
+ return this.publishGossip<GossipType.execution_payload>(
504
+ {type: GossipType.execution_payload, boundary},
505
+ signedEnvelope,
506
+ {ignoreDuplicatePublishError: true}
507
+ );
508
+ }
509
+
492
510
  private async publishGossip<K extends GossipType>(
493
511
  topic: GossipTopicMap[K],
494
512
  object: GossipTypeMap[K],
@@ -521,7 +539,8 @@ export class Network implements INetwork {
521
539
  this.config.getForkSeq(this.clock.currentSlot) >= ForkSeq.altair ? [Version.V2] : [Version.V2, Version.V1],
522
540
  request
523
541
  ),
524
- request
542
+ request,
543
+ this.chain.serializedCache
525
544
  );
526
545
  }
527
546
 
@@ -765,7 +784,7 @@ export class Network implements INetwork {
765
784
  this.core.setTargetGroupCount(count);
766
785
  };
767
786
 
768
- private onPublishDataColumns = (sidecars: fulu.DataColumnSidecar[]): Promise<number[]> => {
787
+ private onPublishDataColumns = (sidecars: DataColumnSidecars): Promise<number[]> => {
769
788
  return promiseAllMaybeAsync(sidecars.map((sidecar) => () => this.publishDataColumnSidecar(sidecar)));
770
789
  };
771
790
 
@@ -29,7 +29,6 @@ export interface NetworkOptions
29
29
  useWorker?: boolean;
30
30
  maxYoungGenerationSizeMb?: number;
31
31
  disableLightClientServer?: boolean;
32
-
33
32
  /**
34
33
  * During E2E tests observe a lot of following `missing stream`:
35
34
  *
@@ -48,11 +47,14 @@ export interface NetworkOptions
48
47
  * We need to increase this only for the testing purpose
49
48
  */
50
49
  disconnectThreshold?: number;
50
+ quic?: boolean;
51
+ tcp?: boolean;
51
52
  }
52
53
 
53
54
  export const defaultNetworkOptions: NetworkOptions = {
54
55
  maxPeers: 210, // Allow some room above targetPeers for new inbound peers
55
56
  targetPeers: 200,
57
+ // In CLI usage this is typically overridden; when unset it serves as a fallback default (e.g. programmatic usage/tests)
56
58
  localMultiaddrs: ["/ip4/0.0.0.0/tcp/9000", "/ip6/::/tcp/9000"],
57
59
  bootMultiaddrs: [],
58
60
  /** disabled by default */
@@ -67,9 +69,14 @@ export const defaultNetworkOptions: NetworkOptions = {
67
69
  slotsToSubscribeBeforeAggregatorDuty: 2,
68
70
  // This will enable the light client server by default
69
71
  disableLightClientServer: false,
72
+ quic: false,
73
+ tcp: true,
70
74
  // specific option for fulu
71
75
  // - this is the same to TARGET_SUBNET_PEERS
72
76
  // - for fusaka-devnets, we have 25-30 peers per subnet
73
77
  // - for public testnets or mainnet, average number of peers per group is SAMPLES_PER_SLOT * targetPeers / NUMBER_OF_CUSTODY_GROUPS = 6.25 so this should not be an issue
74
78
  targetGroupPeers: 6,
79
+ // Keep this high enough for normal req/resp bursts on stable connections.
80
+ // libp2p-mplex default (5) is too low and can cause frequent connection resets.
81
+ disconnectThreshold: 50,
75
82
  };