@lodestar/beacon-node 1.41.0-dev.702f7932c2 → 1.41.0-dev.96f78af84b

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 (335) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +121 -3
  3. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  4. package/lib/api/impl/beacon/state/index.js +8 -8
  5. package/lib/api/impl/beacon/state/index.js.map +1 -1
  6. package/lib/api/impl/beacon/state/utils.d.ts +3 -4
  7. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
  8. package/lib/api/impl/beacon/state/utils.js +5 -24
  9. package/lib/api/impl/beacon/state/utils.js.map +1 -1
  10. package/lib/api/impl/debug/index.d.ts.map +1 -1
  11. package/lib/api/impl/debug/index.js +5 -2
  12. package/lib/api/impl/debug/index.js.map +1 -1
  13. package/lib/api/impl/lightclient/index.d.ts.map +1 -1
  14. package/lib/api/impl/lightclient/index.js +19 -2
  15. package/lib/api/impl/lightclient/index.js.map +1 -1
  16. package/lib/api/impl/node/utils.d.ts +1 -1
  17. package/lib/api/impl/node/utils.d.ts.map +1 -1
  18. package/lib/api/impl/node/utils.js.map +1 -1
  19. package/lib/api/impl/validator/index.d.ts.map +1 -1
  20. package/lib/api/impl/validator/index.js +104 -6
  21. package/lib/api/impl/validator/index.js.map +1 -1
  22. package/lib/chain/archiveStore/archiveStore.d.ts +1 -0
  23. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  24. package/lib/chain/archiveStore/archiveStore.js +9 -0
  25. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  26. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts +5 -6
  27. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +1 -1
  28. package/lib/chain/archiveStore/historicalState/getHistoricalState.js +9 -10
  29. package/lib/chain/archiveStore/historicalState/getHistoricalState.js.map +1 -1
  30. package/lib/chain/archiveStore/historicalState/worker.js +3 -3
  31. package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
  32. package/lib/chain/archiveStore/utils/archivePayloads.d.ts +7 -0
  33. package/lib/chain/archiveStore/utils/archivePayloads.d.ts.map +1 -0
  34. package/lib/chain/archiveStore/utils/archivePayloads.js +10 -0
  35. package/lib/chain/archiveStore/utils/archivePayloads.js.map +1 -0
  36. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  37. package/lib/chain/blocks/importBlock.js +0 -2
  38. package/lib/chain/blocks/importBlock.js.map +1 -1
  39. package/lib/chain/blocks/index.d.ts.map +1 -1
  40. package/lib/chain/blocks/index.js +2 -1
  41. package/lib/chain/blocks/index.js.map +1 -1
  42. package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +1 -1
  43. package/lib/chain/blocks/writeBlockInputToDb.js +3 -0
  44. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  45. package/lib/chain/bls/multithread/index.d.ts +3 -3
  46. package/lib/chain/bls/multithread/index.d.ts.map +1 -1
  47. package/lib/chain/bls/multithread/index.js +5 -5
  48. package/lib/chain/bls/multithread/index.js.map +1 -1
  49. package/lib/chain/bls/multithread/jobItem.d.ts +2 -2
  50. package/lib/chain/bls/multithread/jobItem.d.ts.map +1 -1
  51. package/lib/chain/bls/multithread/jobItem.js +2 -2
  52. package/lib/chain/bls/multithread/jobItem.js.map +1 -1
  53. package/lib/chain/bls/singleThread.d.ts +4 -4
  54. package/lib/chain/bls/singleThread.d.ts.map +1 -1
  55. package/lib/chain/bls/singleThread.js +4 -4
  56. package/lib/chain/bls/singleThread.js.map +1 -1
  57. package/lib/chain/bls/utils.d.ts +2 -2
  58. package/lib/chain/bls/utils.d.ts.map +1 -1
  59. package/lib/chain/bls/utils.js +7 -4
  60. package/lib/chain/bls/utils.js.map +1 -1
  61. package/lib/chain/chain.d.ts +6 -9
  62. package/lib/chain/chain.d.ts.map +1 -1
  63. package/lib/chain/chain.js +32 -16
  64. package/lib/chain/chain.js.map +1 -1
  65. package/lib/chain/emitter.d.ts +2 -2
  66. package/lib/chain/emitter.d.ts.map +1 -1
  67. package/lib/chain/errors/blockError.d.ts +7 -1
  68. package/lib/chain/errors/blockError.d.ts.map +1 -1
  69. package/lib/chain/errors/blockError.js +2 -0
  70. package/lib/chain/errors/blockError.js.map +1 -1
  71. package/lib/chain/interface.d.ts +4 -6
  72. package/lib/chain/interface.d.ts.map +1 -1
  73. package/lib/chain/interface.js.map +1 -1
  74. package/lib/chain/lightClient/index.d.ts.map +1 -1
  75. package/lib/chain/lightClient/index.js +1 -1
  76. package/lib/chain/lightClient/index.js.map +1 -1
  77. package/lib/chain/options.d.ts.map +1 -1
  78. package/lib/chain/options.js.map +1 -1
  79. package/lib/chain/prepareNextSlot.js +3 -3
  80. package/lib/chain/prepareNextSlot.js.map +1 -1
  81. package/lib/chain/produceBlock/computeNewStateRoot.d.ts +10 -2
  82. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
  83. package/lib/chain/produceBlock/computeNewStateRoot.js +24 -2
  84. package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
  85. package/lib/chain/produceBlock/produceBlockBody.d.ts +22 -7
  86. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  87. package/lib/chain/produceBlock/produceBlockBody.js +110 -10
  88. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  89. package/lib/chain/validation/attestation.d.ts.map +1 -1
  90. package/lib/chain/validation/attestation.js +4 -1
  91. package/lib/chain/validation/attestation.js.map +1 -1
  92. package/lib/chain/validation/attesterSlashing.js +1 -1
  93. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  94. package/lib/chain/validation/block.d.ts.map +1 -1
  95. package/lib/chain/validation/block.js +27 -3
  96. package/lib/chain/validation/block.js.map +1 -1
  97. package/lib/chain/validation/dataColumnSidecar.d.ts +2 -2
  98. package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -1
  99. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  100. package/lib/chain/validation/executionPayloadEnvelope.js +2 -1
  101. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  102. package/lib/chain/validation/payloadAttestationMessage.js +8 -1
  103. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
  104. package/lib/chain/validation/proposerSlashing.js +1 -1
  105. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  106. package/lib/chain/validation/syncCommitteeContributionAndProof.js +1 -1
  107. package/lib/constants/network.d.ts +2 -1
  108. package/lib/constants/network.d.ts.map +1 -1
  109. package/lib/constants/network.js +1 -0
  110. package/lib/constants/network.js.map +1 -1
  111. package/lib/db/beacon.d.ts +3 -1
  112. package/lib/db/beacon.d.ts.map +1 -1
  113. package/lib/db/beacon.js +5 -1
  114. package/lib/db/beacon.js.map +1 -1
  115. package/lib/db/buckets.d.ts +3 -1
  116. package/lib/db/buckets.d.ts.map +1 -1
  117. package/lib/db/buckets.js +2 -0
  118. package/lib/db/buckets.js.map +1 -1
  119. package/lib/db/interface.d.ts +3 -1
  120. package/lib/db/interface.d.ts.map +1 -1
  121. package/lib/db/repositories/blockArchive.d.ts.map +1 -1
  122. package/lib/db/repositories/blockArchive.js +1 -2
  123. package/lib/db/repositories/blockArchive.js.map +1 -1
  124. package/lib/db/repositories/blockArchiveIndex.d.ts +2 -2
  125. package/lib/db/repositories/blockArchiveIndex.d.ts.map +1 -1
  126. package/lib/db/repositories/dataColumnSidecar.d.ts +5 -3
  127. package/lib/db/repositories/dataColumnSidecar.d.ts.map +1 -1
  128. package/lib/db/repositories/dataColumnSidecar.js +14 -1
  129. package/lib/db/repositories/dataColumnSidecar.js.map +1 -1
  130. package/lib/db/repositories/dataColumnSidecarArchive.d.ts +5 -3
  131. package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +1 -1
  132. package/lib/db/repositories/dataColumnSidecarArchive.js +14 -1
  133. package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
  134. package/lib/db/repositories/executionPayloadEnvelope.d.ts +19 -0
  135. package/lib/db/repositories/executionPayloadEnvelope.d.ts.map +1 -0
  136. package/lib/db/repositories/executionPayloadEnvelope.js +22 -0
  137. package/lib/db/repositories/executionPayloadEnvelope.js.map +1 -0
  138. package/lib/db/repositories/executionPayloadEnvelopeArchive.d.ts +18 -0
  139. package/lib/db/repositories/executionPayloadEnvelopeArchive.d.ts.map +1 -0
  140. package/lib/db/repositories/executionPayloadEnvelopeArchive.js +28 -0
  141. package/lib/db/repositories/executionPayloadEnvelopeArchive.js.map +1 -0
  142. package/lib/db/repositories/index.d.ts +2 -0
  143. package/lib/db/repositories/index.d.ts.map +1 -1
  144. package/lib/db/repositories/index.js +2 -0
  145. package/lib/db/repositories/index.js.map +1 -1
  146. package/lib/execution/engine/http.d.ts +1 -0
  147. package/lib/execution/engine/http.d.ts.map +1 -1
  148. package/lib/execution/engine/http.js +3 -0
  149. package/lib/execution/engine/http.js.map +1 -1
  150. package/lib/metrics/metrics/beacon.d.ts +1 -0
  151. package/lib/metrics/metrics/beacon.d.ts.map +1 -1
  152. package/lib/metrics/metrics/beacon.js +5 -0
  153. package/lib/metrics/metrics/beacon.js.map +1 -1
  154. package/lib/metrics/metrics/lodestar.d.ts +8 -0
  155. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  156. package/lib/metrics/metrics/lodestar.js +14 -0
  157. package/lib/metrics/metrics/lodestar.js.map +1 -1
  158. package/lib/metrics/metrics.d.ts.map +1 -1
  159. package/lib/metrics/metrics.js +8 -3
  160. package/lib/metrics/metrics.js.map +1 -1
  161. package/lib/monitoring/service.d.ts +2 -2
  162. package/lib/monitoring/service.d.ts.map +1 -1
  163. package/lib/monitoring/service.js +3 -2
  164. package/lib/monitoring/service.js.map +1 -1
  165. package/lib/network/core/networkCore.d.ts +3 -3
  166. package/lib/network/core/networkCore.d.ts.map +1 -1
  167. package/lib/network/core/networkCore.js.map +1 -1
  168. package/lib/network/core/networkCoreWorkerHandler.d.ts +3 -3
  169. package/lib/network/core/networkCoreWorkerHandler.d.ts.map +1 -1
  170. package/lib/network/core/types.d.ts +2 -2
  171. package/lib/network/core/types.d.ts.map +1 -1
  172. package/lib/network/events.d.ts +2 -1
  173. package/lib/network/events.d.ts.map +1 -1
  174. package/lib/network/events.js.map +1 -1
  175. package/lib/network/gossip/encoding.d.ts +3 -3
  176. package/lib/network/gossip/encoding.d.ts.map +1 -1
  177. package/lib/network/gossip/encoding.js.map +1 -1
  178. package/lib/network/gossip/gossipsub.d.ts +13 -4
  179. package/lib/network/gossip/gossipsub.d.ts.map +1 -1
  180. package/lib/network/gossip/gossipsub.js +47 -20
  181. package/lib/network/gossip/gossipsub.js.map +1 -1
  182. package/lib/network/gossip/interface.d.ts +6 -6
  183. package/lib/network/gossip/interface.d.ts.map +1 -1
  184. package/lib/network/gossip/scoringParameters.d.ts +1 -1
  185. package/lib/network/gossip/scoringParameters.d.ts.map +1 -1
  186. package/lib/network/gossip/scoringParameters.js +1 -1
  187. package/lib/network/gossip/scoringParameters.js.map +1 -1
  188. package/lib/network/gossip/topic.d.ts +114 -65
  189. package/lib/network/gossip/topic.d.ts.map +1 -1
  190. package/lib/network/gossip/topic.js +2 -2
  191. package/lib/network/gossip/topic.js.map +1 -1
  192. package/lib/network/interface.d.ts +6 -5
  193. package/lib/network/interface.d.ts.map +1 -1
  194. package/lib/network/libp2p/index.d.ts +1 -1
  195. package/lib/network/libp2p/index.d.ts.map +1 -1
  196. package/lib/network/libp2p/index.js +7 -2
  197. package/lib/network/libp2p/index.js.map +1 -1
  198. package/lib/network/network.d.ts +5 -4
  199. package/lib/network/network.d.ts.map +1 -1
  200. package/lib/network/network.js +10 -1
  201. package/lib/network/network.js.map +1 -1
  202. package/lib/network/options.d.ts.map +1 -1
  203. package/lib/network/options.js +3 -0
  204. package/lib/network/options.js.map +1 -1
  205. package/lib/network/peers/datastore.d.ts +7 -5
  206. package/lib/network/peers/datastore.d.ts.map +1 -1
  207. package/lib/network/peers/datastore.js +10 -10
  208. package/lib/network/peers/datastore.js.map +1 -1
  209. package/lib/network/peers/peerManager.d.ts +11 -0
  210. package/lib/network/peers/peerManager.d.ts.map +1 -1
  211. package/lib/network/peers/peerManager.js +148 -53
  212. package/lib/network/peers/peerManager.js.map +1 -1
  213. package/lib/network/peers/utils/prioritizePeers.d.ts +3 -3
  214. package/lib/network/peers/utils/prioritizePeers.d.ts.map +1 -1
  215. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  216. package/lib/network/processor/gossipHandlers.js +5 -1
  217. package/lib/network/processor/gossipHandlers.js.map +1 -1
  218. package/lib/network/processor/gossipValidatorFn.js +1 -1
  219. package/lib/network/processor/types.d.ts +1 -1
  220. package/lib/network/processor/types.d.ts.map +1 -1
  221. package/lib/network/reqresp/handlers/lightClientUpdatesByRange.d.ts.map +1 -1
  222. package/lib/network/reqresp/handlers/lightClientUpdatesByRange.js +7 -1
  223. package/lib/network/reqresp/handlers/lightClientUpdatesByRange.js.map +1 -1
  224. package/lib/network/reqresp/score.d.ts.map +1 -1
  225. package/lib/network/reqresp/score.js +0 -1
  226. package/lib/network/reqresp/score.js.map +1 -1
  227. package/lib/network/util.js +2 -2
  228. package/lib/network/util.js.map +1 -1
  229. package/lib/node/nodejs.d.ts +3 -5
  230. package/lib/node/nodejs.d.ts.map +1 -1
  231. package/lib/node/nodejs.js +6 -4
  232. package/lib/node/nodejs.js.map +1 -1
  233. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  234. package/lib/sync/utils/downloadByRange.js +3 -9
  235. package/lib/sync/utils/downloadByRange.js.map +1 -1
  236. package/lib/sync/utils/downloadByRoot.d.ts +1 -1
  237. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  238. package/lib/sync/utils/downloadByRoot.js +4 -4
  239. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  240. package/lib/util/blobs.d.ts +2 -2
  241. package/lib/util/blobs.d.ts.map +1 -1
  242. package/lib/util/blobs.js.map +1 -1
  243. package/lib/util/dataColumns.d.ts +15 -2
  244. package/lib/util/dataColumns.d.ts.map +1 -1
  245. package/lib/util/dataColumns.js +40 -5
  246. package/lib/util/dataColumns.js.map +1 -1
  247. package/lib/util/multifork.d.ts +8 -0
  248. package/lib/util/multifork.d.ts.map +1 -1
  249. package/lib/util/multifork.js +37 -0
  250. package/lib/util/multifork.js.map +1 -1
  251. package/lib/util/serializedCache.d.ts +5 -0
  252. package/lib/util/serializedCache.d.ts.map +1 -1
  253. package/lib/util/serializedCache.js +5 -0
  254. package/lib/util/serializedCache.js.map +1 -1
  255. package/package.json +38 -41
  256. package/src/api/impl/beacon/blocks/index.ts +145 -2
  257. package/src/api/impl/beacon/state/index.ts +8 -8
  258. package/src/api/impl/beacon/state/utils.ts +15 -29
  259. package/src/api/impl/debug/index.ts +8 -5
  260. package/src/api/impl/lightclient/index.ts +19 -2
  261. package/src/api/impl/node/utils.ts +3 -3
  262. package/src/api/impl/validator/index.ts +127 -5
  263. package/src/chain/archiveStore/archiveStore.ts +10 -0
  264. package/src/chain/archiveStore/historicalState/getHistoricalState.ts +10 -11
  265. package/src/chain/archiveStore/historicalState/worker.ts +3 -3
  266. package/src/chain/archiveStore/utils/archivePayloads.ts +15 -0
  267. package/src/chain/blocks/importBlock.ts +0 -3
  268. package/src/chain/blocks/index.ts +2 -1
  269. package/src/chain/blocks/writeBlockInputToDb.ts +3 -0
  270. package/src/chain/bls/multithread/index.ts +7 -7
  271. package/src/chain/bls/multithread/jobItem.ts +3 -3
  272. package/src/chain/bls/singleThread.ts +5 -5
  273. package/src/chain/bls/utils.ts +8 -5
  274. package/src/chain/chain.ts +51 -26
  275. package/src/chain/emitter.ts +2 -2
  276. package/src/chain/errors/blockError.ts +4 -1
  277. package/src/chain/interface.ts +4 -11
  278. package/src/chain/lightClient/index.ts +4 -1
  279. package/src/chain/options.ts +1 -0
  280. package/src/chain/prepareNextSlot.ts +5 -5
  281. package/src/chain/produceBlock/computeNewStateRoot.ts +35 -3
  282. package/src/chain/produceBlock/produceBlockBody.ts +163 -13
  283. package/src/chain/validation/attestation.ts +4 -1
  284. package/src/chain/validation/attesterSlashing.ts +1 -1
  285. package/src/chain/validation/block.ts +32 -4
  286. package/src/chain/validation/dataColumnSidecar.ts +2 -5
  287. package/src/chain/validation/executionPayloadEnvelope.ts +2 -1
  288. package/src/chain/validation/payloadAttestationMessage.ts +10 -2
  289. package/src/chain/validation/proposerSlashing.ts +1 -1
  290. package/src/chain/validation/syncCommitteeContributionAndProof.ts +1 -1
  291. package/src/constants/network.ts +1 -0
  292. package/src/db/beacon.ts +8 -0
  293. package/src/db/buckets.ts +3 -0
  294. package/src/db/interface.ts +5 -0
  295. package/src/db/repositories/blockArchive.ts +1 -2
  296. package/src/db/repositories/dataColumnSidecar.ts +18 -3
  297. package/src/db/repositories/dataColumnSidecarArchive.ts +18 -3
  298. package/src/db/repositories/executionPayloadEnvelope.ts +26 -0
  299. package/src/db/repositories/executionPayloadEnvelopeArchive.ts +32 -0
  300. package/src/db/repositories/index.ts +2 -0
  301. package/src/execution/engine/http.ts +3 -0
  302. package/src/metrics/metrics/beacon.ts +5 -0
  303. package/src/metrics/metrics/lodestar.ts +14 -0
  304. package/src/metrics/metrics.ts +8 -3
  305. package/src/monitoring/service.ts +3 -2
  306. package/src/network/core/networkCore.ts +3 -3
  307. package/src/network/core/networkCoreWorkerHandler.ts +3 -3
  308. package/src/network/core/types.ts +2 -2
  309. package/src/network/events.ts +2 -1
  310. package/src/network/gossip/encoding.ts +3 -3
  311. package/src/network/gossip/gossipsub.ts +86 -25
  312. package/src/network/gossip/interface.ts +6 -6
  313. package/src/network/gossip/scoringParameters.ts +4 -4
  314. package/src/network/gossip/topic.ts +2 -1
  315. package/src/network/interface.ts +7 -4
  316. package/src/network/libp2p/index.ts +8 -3
  317. package/src/network/network.ts +24 -6
  318. package/src/network/options.ts +3 -0
  319. package/src/network/peers/datastore.ts +13 -10
  320. package/src/network/peers/peerManager.ts +175 -54
  321. package/src/network/peers/utils/prioritizePeers.ts +3 -3
  322. package/src/network/processor/gossipHandlers.ts +7 -1
  323. package/src/network/processor/gossipValidatorFn.ts +1 -1
  324. package/src/network/processor/types.ts +1 -1
  325. package/src/network/reqresp/handlers/lightClientUpdatesByRange.ts +6 -1
  326. package/src/network/reqresp/score.ts +0 -1
  327. package/src/network/util.ts +2 -2
  328. package/src/node/nodejs.ts +8 -9
  329. package/src/sync/utils/downloadByRange.ts +3 -15
  330. package/src/sync/utils/downloadByRoot.ts +5 -11
  331. package/src/util/blobs.ts +3 -3
  332. package/src/util/dataColumns.ts +54 -5
  333. package/src/util/multifork.ts +45 -0
  334. package/src/util/serializedCache.ts +5 -0
  335. package/src/util/workerEvents.ts +1 -1
package/src/util/blobs.ts CHANGED
@@ -13,7 +13,7 @@ import {
13
13
  VERSIONED_HASH_VERSION_KZG,
14
14
  } from "@lodestar/params";
15
15
  import {signedBlockToSignedHeader} from "@lodestar/state-transition";
16
- import {BeaconBlockBody, SSZTypesFor, SignedBeaconBlock, deneb, fulu, ssz} from "@lodestar/types";
16
+ import {BeaconBlockBody, DataColumnSidecars, SSZTypesFor, SignedBeaconBlock, deneb, fulu, ssz} from "@lodestar/types";
17
17
  import {kzg} from "./kzg.js";
18
18
 
19
19
  type VersionHash = Uint8Array;
@@ -149,7 +149,7 @@ export async function dataColumnMatrixRecovery(
149
149
  * Reconstruct blobs from a set of data columns, at least 50%+ of all the columns
150
150
  * must be provided to allow to reconstruct the full data matrix
151
151
  */
152
- export async function reconstructBlobs(sidecars: fulu.DataColumnSidecars, indices?: number[]): Promise<deneb.Blobs> {
152
+ export async function reconstructBlobs(sidecars: DataColumnSidecars, indices?: number[]): Promise<deneb.Blobs> {
153
153
  if (sidecars.length < NUMBER_OF_COLUMNS / 2) {
154
154
  throw Error(
155
155
  `Expected at least ${NUMBER_OF_COLUMNS / 2} data columns to reconstruct blobs, received ${sidecars.length}`
@@ -188,7 +188,7 @@ export async function reconstructBlobs(sidecars: fulu.DataColumnSidecars, indice
188
188
  * Recover cells for specific blob indices from a set of data columns
189
189
  */
190
190
  async function recoverBlobCells(
191
- partialSidecars: fulu.DataColumnSidecar[],
191
+ partialSidecars: DataColumnSidecars,
192
192
  blobIndices: number[]
193
193
  ): Promise<Map<number, fulu.Cell[]> | null> {
194
194
  const columnCount = partialSidecars.length;
@@ -4,21 +4,26 @@ import {ChainForkConfig} from "@lodestar/config";
4
4
  import {
5
5
  ForkAll,
6
6
  ForkName,
7
+ ForkPostDeneb,
7
8
  ForkPostFulu,
8
9
  ForkPreGloas,
9
10
  KZG_COMMITMENTS_GINDEX,
10
11
  NUMBER_OF_COLUMNS,
12
+ isForkPostGloas,
11
13
  } from "@lodestar/params";
12
14
  import {signedBlockToSignedHeader} from "@lodestar/state-transition";
13
15
  import {
14
16
  BeaconBlockBody,
15
17
  ColumnIndex,
16
18
  CustodyIndex,
19
+ Root,
17
20
  SSZTypesFor,
18
21
  SignedBeaconBlock,
19
22
  SignedBeaconBlockHeader,
23
+ Slot,
20
24
  deneb,
21
25
  fulu,
26
+ gloas,
22
27
  ssz,
23
28
  } from "@lodestar/types";
24
29
  import {bytesToBigInt} from "@lodestar/utils";
@@ -261,6 +266,20 @@ export async function getCellsAndProofs(
261
266
  return blobsAndProofs;
262
267
  }
263
268
 
269
+ /**
270
+ * Get blob KZG commitments from a signed block, handling the different locations
271
+ * in pre-Gloas (directly in block body) vs post-Gloas (in execution payload bid).
272
+ */
273
+ export function getBlobKzgCommitments(
274
+ fork: ForkName,
275
+ signedBlock: SignedBeaconBlock<ForkPostDeneb>
276
+ ): deneb.KZGCommitment[] {
277
+ if (isForkPostGloas(fork)) {
278
+ return (signedBlock as gloas.SignedBeaconBlock).message.body.signedExecutionPayloadBid.message.blobKzgCommitments;
279
+ }
280
+ return (signedBlock.message.body as BeaconBlockBody<ForkPostFulu & ForkPreGloas>).blobKzgCommitments;
281
+ }
282
+
264
283
  /**
265
284
  * Given a signed block header and the commitments, inclusion proof, cells/proofs associated with
266
285
  * each blob in the block, assemble the sidecars which can be distributed to peers.
@@ -310,16 +329,13 @@ export function getDataColumnSidecarsFromBlock(
310
329
  signedBlock: SignedBeaconBlock<ForkPostFulu>,
311
330
  cellsAndKzgProofs: {cells: Uint8Array[]; proofs: Uint8Array[]}[]
312
331
  ): fulu.DataColumnSidecars {
313
- // TODO GLOAS: Need to get blobKzgCommitments from somewhere else
314
- const blobKzgCommitments = (signedBlock.message.body as BeaconBlockBody<ForkPostFulu & ForkPreGloas>)
315
- .blobKzgCommitments;
332
+ const fork = config.getForkName(signedBlock.message.slot);
333
+ const blobKzgCommitments = getBlobKzgCommitments(fork, signedBlock);
316
334
 
317
335
  // No need to create data column sidecars if there are no blobs
318
336
  if (blobKzgCommitments.length === 0) {
319
337
  return [];
320
338
  }
321
-
322
- const fork = config.getForkName(signedBlock.message.slot);
323
339
  const signedBlockHeader = signedBlockToSignedHeader(config, signedBlock);
324
340
 
325
341
  const kzgCommitmentsInclusionProof = computePostFuluKzgCommitmentsInclusionProof(fork, signedBlock.message.body);
@@ -346,6 +362,39 @@ export function getDataColumnSidecarsFromColumnSidecar(
346
362
  );
347
363
  }
348
364
 
365
+ /**
366
+ * In Gloas, data column sidecars have a simplified structure with `slot` and `beaconBlockRoot`
367
+ * instead of `signedBlockHeader`, `kzgCommitments`, and `kzgCommitmentsInclusionProof`.
368
+ */
369
+ export function getDataColumnSidecarsForGloas(
370
+ slot: Slot,
371
+ beaconBlockRoot: Root,
372
+ cellsAndKzgProofs: {cells: Uint8Array[]; proofs: Uint8Array[]}[]
373
+ ): gloas.DataColumnSidecars {
374
+ // No need to create data column sidecars if there are no blobs
375
+ if (cellsAndKzgProofs.length === 0) {
376
+ return [];
377
+ }
378
+
379
+ const sidecars: gloas.DataColumnSidecars = [];
380
+ for (let columnIndex = 0; columnIndex < NUMBER_OF_COLUMNS; columnIndex++) {
381
+ const column: Uint8Array[] = [];
382
+ const kzgProofs: Uint8Array[] = [];
383
+ for (const {cells, proofs} of cellsAndKzgProofs) {
384
+ column.push(cells[columnIndex]);
385
+ kzgProofs.push(proofs[columnIndex]);
386
+ }
387
+ sidecars.push({
388
+ index: columnIndex,
389
+ column,
390
+ kzgProofs,
391
+ slot,
392
+ beaconBlockRoot,
393
+ });
394
+ }
395
+ return sidecars;
396
+ }
397
+
349
398
  /**
350
399
  * If we receive more than half of NUMBER_OF_COLUMNS (64) we should recover all remaining columns
351
400
  */
@@ -9,6 +9,11 @@ import {getSlotFromSignedBeaconBlockSerialized} from "./sszBytes.js";
9
9
  */
10
10
  const SLOT_BYTE_COUNT = 8;
11
11
 
12
+ /**
13
+ * SSZ offset uint32
14
+ */
15
+ const OFFSET_BYTE_COUNT = 4;
16
+
12
17
  /**
13
18
  * 8 + 32 = 40
14
19
  * ```
@@ -67,3 +72,43 @@ export function getLightClientHeaderTypeFromBytes(
67
72
  );
68
73
  return config.getPostAltairForkTypes(slot).LightClientHeader;
69
74
  }
75
+
76
+ /**
77
+ * Position of first offset in DataColumnSidecar (after index field)
78
+ *
79
+ * Fulu DataColumnSidecar (6 fields):
80
+ * index: uint64 [fixed - 8 bytes]
81
+ * column: List [variable - 4-byte offset]
82
+ * kzgCommitments: List [variable - 4-byte offset]
83
+ * kzgProofs: List [variable - 4-byte offset]
84
+ * signedBlockHeader: Container [fixed - 208 bytes]
85
+ * kzgCommitmentsInclusionProof: Vector[Bytes32, 4] [fixed - 128 bytes]
86
+ * => First offset value = 8 + 4 + 4 + 4 + 208 + 128 = 356
87
+ *
88
+ * Gloas DataColumnSidecar (5 fields):
89
+ * index: uint64 [fixed - 8 bytes]
90
+ * column: List [variable - 4-byte offset]
91
+ * kzgProofs: List [variable - 4-byte offset]
92
+ * slot: uint64 [fixed - 8 bytes]
93
+ * beaconBlockRoot: Bytes32 [fixed - 32 bytes]
94
+ * => First offset value = 8 + 4 + 4 + 8 + 32 = 56
95
+ */
96
+ const FIRST_OFFSET_POSITION_IN_DATA_COLUMN_SIDECAR = 8;
97
+ const GLOAS_DATA_COLUMN_SIDECAR_FIRST_OFFSET = 56;
98
+
99
+ /**
100
+ * Determines if DataColumnSidecar bytes are from Gloas fork by checking the SSZ offset structure.
101
+ *
102
+ * The first offset (bytes 8-12) indicates where variable-size data begins:
103
+ * - Gloas: 56 (small fixed section)
104
+ * - Fulu: 356
105
+ */
106
+ export function isGloasDataColumnSidecarBytes(bytes: Uint8Array): boolean {
107
+ const firstOffset = bytesToInt(
108
+ bytes.subarray(
109
+ FIRST_OFFSET_POSITION_IN_DATA_COLUMN_SIDECAR,
110
+ FIRST_OFFSET_POSITION_IN_DATA_COLUMN_SIDECAR + OFFSET_BYTE_COUNT
111
+ )
112
+ );
113
+ return firstOffset === GLOAS_DATA_COLUMN_SIDECAR_FIRST_OFFSET;
114
+ }
@@ -14,6 +14,11 @@ export class SerializedCache {
14
14
  this.map.set(obj, serialized);
15
15
  }
16
16
 
17
+ /**
18
+ * Replace the internal WeakMap to force GC of all cached entries.
19
+ * Must only be called after all DB writes that may read from this cache have completed,
20
+ * otherwise cached serialized bytes will be unavailable and data will be re-serialized unnecessarily.
21
+ */
17
22
  clear(): void {
18
23
  this.map = new WeakMap();
19
24
  }
@@ -1,5 +1,5 @@
1
1
  import {MessagePort, Worker} from "node:worker_threads";
2
- import {Message} from "@libp2p/interface";
2
+ import type {Message} from "@libp2p/gossipsub";
3
3
  import {Thread} from "@chainsafe/threads";
4
4
  import {Logger} from "@lodestar/logger";
5
5
  import {sleep} from "@lodestar/utils";