@lodestar/beacon-node 1.51.0-dev.bdcac30ee0 → 1.51.0-dev.be91fc5558

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 (313) hide show
  1. package/lib/api/impl/api.js +1 -1
  2. package/lib/api/impl/api.js.map +1 -1
  3. package/lib/api/impl/beacon/blocks/index.d.ts +2 -1
  4. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  5. package/lib/api/impl/beacon/blocks/index.js +29 -34
  6. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  7. package/lib/api/impl/beacon/index.d.ts +2 -1
  8. package/lib/api/impl/beacon/index.d.ts.map +1 -1
  9. package/lib/api/impl/beacon/index.js +2 -2
  10. package/lib/api/impl/beacon/index.js.map +1 -1
  11. package/lib/api/impl/beacon/pool/index.d.ts.map +1 -1
  12. package/lib/api/impl/beacon/pool/index.js +5 -2
  13. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  14. package/lib/api/impl/beacon/state/utils.d.ts +1 -1
  15. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
  16. package/lib/api/impl/validator/index.d.ts +6 -0
  17. package/lib/api/impl/validator/index.d.ts.map +1 -1
  18. package/lib/api/impl/validator/index.js +42 -26
  19. package/lib/api/impl/validator/index.js.map +1 -1
  20. package/lib/api/options.d.ts +2 -0
  21. package/lib/api/options.d.ts.map +1 -1
  22. package/lib/api/options.js +1 -0
  23. package/lib/api/options.js.map +1 -1
  24. package/lib/chain/GetBlobsTracker.d.ts +11 -0
  25. package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
  26. package/lib/chain/GetBlobsTracker.js +85 -27
  27. package/lib/chain/GetBlobsTracker.js.map +1 -1
  28. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  29. package/lib/chain/archiveStore/archiveStore.js +1 -0
  30. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  31. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +4 -0
  32. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -1
  33. package/lib/chain/archiveStore/utils/archiveBlocks.js +61 -97
  34. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  35. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  36. package/lib/chain/blocks/importBlock.js +6 -5
  37. package/lib/chain/blocks/importBlock.js.map +1 -1
  38. package/lib/chain/blocks/importExecutionPayload.d.ts +6 -11
  39. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  40. package/lib/chain/blocks/importExecutionPayload.js +8 -15
  41. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  42. package/lib/chain/blocks/index.js +2 -2
  43. package/lib/chain/blocks/index.js.map +1 -1
  44. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts +12 -9
  45. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts.map +1 -1
  46. package/lib/chain/blocks/payloadEnvelopeProcessor.js +24 -19
  47. package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -1
  48. package/lib/chain/blocks/types.d.ts +4 -1
  49. package/lib/chain/blocks/types.d.ts.map +1 -1
  50. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  51. package/lib/chain/blocks/verifyBlock.js +18 -7
  52. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  53. package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts.map +1 -1
  54. package/lib/chain/blocks/verifyBlocksDataAvailability.js +8 -1
  55. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  56. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  57. package/lib/chain/blocks/verifyBlocksSignatures.js +7 -5
  58. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  59. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts +3 -3
  60. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts.map +1 -1
  61. package/lib/chain/blocks/verifyPayloadsDataAvailability.js +11 -6
  62. package/lib/chain/blocks/verifyPayloadsDataAvailability.js.map +1 -1
  63. package/lib/chain/bls/interface.d.ts +2 -0
  64. package/lib/chain/bls/interface.d.ts.map +1 -1
  65. package/lib/chain/bls/multithread/index.d.ts.map +1 -1
  66. package/lib/chain/bls/multithread/index.js +13 -11
  67. package/lib/chain/bls/multithread/index.js.map +1 -1
  68. package/lib/chain/bls/multithread/types.d.ts +1 -1
  69. package/lib/chain/bls/multithread/types.d.ts.map +1 -1
  70. package/lib/chain/bls/multithread/worker.js +1 -1
  71. package/lib/chain/bls/multithread/worker.js.map +1 -1
  72. package/lib/chain/bls/singleThread.js +1 -1
  73. package/lib/chain/bls/singleThread.js.map +1 -1
  74. package/lib/chain/bls/utils.js +1 -1
  75. package/lib/chain/bls/utils.js.map +1 -1
  76. package/lib/chain/chain.d.ts +1 -1
  77. package/lib/chain/chain.d.ts.map +1 -1
  78. package/lib/chain/chain.js +4 -4
  79. package/lib/chain/chain.js.map +1 -1
  80. package/lib/chain/errors/blockError.d.ts +1 -1
  81. package/lib/chain/errors/blockError.d.ts.map +1 -1
  82. package/lib/chain/errors/blockError.js +1 -1
  83. package/lib/chain/errors/blockError.js.map +1 -1
  84. package/lib/chain/errors/executionPayloadEnvelope.d.ts +7 -0
  85. package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
  86. package/lib/chain/errors/executionPayloadEnvelope.js +1 -0
  87. package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
  88. package/lib/chain/interface.d.ts +2 -3
  89. package/lib/chain/interface.d.ts.map +1 -1
  90. package/lib/chain/interface.js.map +1 -1
  91. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  92. package/lib/chain/opPools/aggregatedAttestationPool.js +23 -10
  93. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  94. package/lib/chain/opPools/attestationPool.d.ts +1 -1
  95. package/lib/chain/opPools/attestationPool.d.ts.map +1 -1
  96. package/lib/chain/opPools/attestationPool.js +15 -4
  97. package/lib/chain/opPools/attestationPool.js.map +1 -1
  98. package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -1
  99. package/lib/chain/opPools/payloadAttestationPool.js +17 -7
  100. package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
  101. package/lib/chain/opPools/syncCommitteeMessagePool.d.ts.map +1 -1
  102. package/lib/chain/opPools/syncCommitteeMessagePool.js +9 -3
  103. package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
  104. package/lib/chain/opPools/syncContributionAndProofPool.d.ts.map +1 -1
  105. package/lib/chain/opPools/syncContributionAndProofPool.js +11 -3
  106. package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
  107. package/lib/chain/opPools/utils.d.ts +1 -1
  108. package/lib/chain/opPools/utils.d.ts.map +1 -1
  109. package/lib/chain/opPools/utils.js +1 -1
  110. package/lib/chain/opPools/utils.js.map +1 -1
  111. package/lib/chain/options.d.ts +0 -1
  112. package/lib/chain/options.d.ts.map +1 -1
  113. package/lib/chain/options.js +0 -1
  114. package/lib/chain/options.js.map +1 -1
  115. package/lib/chain/regen/interface.d.ts +0 -1
  116. package/lib/chain/regen/interface.d.ts.map +1 -1
  117. package/lib/chain/regen/interface.js +0 -1
  118. package/lib/chain/regen/interface.js.map +1 -1
  119. package/lib/chain/validation/executionPayloadBid.d.ts +0 -15
  120. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  121. package/lib/chain/validation/executionPayloadBid.js +13 -166
  122. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  123. package/lib/chain/validation/executionPayloadEnvelope.d.ts +6 -0
  124. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
  125. package/lib/chain/validation/executionPayloadEnvelope.js +53 -0
  126. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  127. package/lib/db/beacon.d.ts +7 -0
  128. package/lib/db/beacon.d.ts.map +1 -1
  129. package/lib/db/beacon.js +34 -0
  130. package/lib/db/beacon.js.map +1 -1
  131. package/lib/db/dataColumnStore.d.ts +1 -1
  132. package/lib/db/dataColumnStore.d.ts.map +1 -1
  133. package/lib/db/dataColumnStore.js +1 -4
  134. package/lib/db/dataColumnStore.js.map +1 -1
  135. package/lib/db/flatFileStore/flatFileStore.js +5 -5
  136. package/lib/db/flatFileStore/flatFileStore.js.map +1 -1
  137. package/lib/db/flatFileStore/slotIndex.d.ts.map +1 -1
  138. package/lib/db/flatFileStore/slotIndex.js +2 -2
  139. package/lib/db/flatFileStore/slotIndex.js.map +1 -1
  140. package/lib/db/interface.d.ts +1 -0
  141. package/lib/db/interface.d.ts.map +1 -1
  142. package/lib/db/repositories/dataColumnSidecarArchive.d.ts +6 -0
  143. package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +1 -1
  144. package/lib/db/repositories/dataColumnSidecarArchive.js +19 -0
  145. package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
  146. package/lib/execution/builder/apiClient.d.ts +14 -8
  147. package/lib/execution/builder/apiClient.d.ts.map +1 -1
  148. package/lib/execution/builder/apiClient.js +12 -10
  149. package/lib/execution/builder/apiClient.js.map +1 -1
  150. package/lib/execution/builder/http.d.ts +2 -0
  151. package/lib/execution/builder/http.d.ts.map +1 -1
  152. package/lib/execution/builder/http.js +2 -0
  153. package/lib/execution/builder/http.js.map +1 -1
  154. package/lib/execution/engine/index.d.ts +1 -1
  155. package/lib/execution/engine/index.d.ts.map +1 -1
  156. package/lib/execution/engine/index.js +1 -1
  157. package/lib/execution/engine/index.js.map +1 -1
  158. package/lib/execution/engine/interface.d.ts +1 -1
  159. package/lib/execution/engine/interface.d.ts.map +1 -1
  160. package/lib/execution/engine/interface.js.map +1 -1
  161. package/lib/execution/engine/types.d.ts.map +1 -1
  162. package/lib/execution/engine/types.js +2 -2
  163. package/lib/execution/engine/types.js.map +1 -1
  164. package/lib/execution/engine/utils.d.ts.map +1 -1
  165. package/lib/execution/engine/utils.js +3 -2
  166. package/lib/execution/engine/utils.js.map +1 -1
  167. package/lib/index.d.ts +1 -0
  168. package/lib/index.d.ts.map +1 -1
  169. package/lib/index.js +2 -0
  170. package/lib/index.js.map +1 -1
  171. package/lib/metrics/metrics/lodestar.d.ts +7 -0
  172. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  173. package/lib/metrics/metrics/lodestar.js +15 -0
  174. package/lib/metrics/metrics/lodestar.js.map +1 -1
  175. package/lib/metrics/server/http.js +5 -5
  176. package/lib/metrics/server/http.js.map +1 -1
  177. package/lib/monitoring/service.js +1 -1
  178. package/lib/monitoring/service.js.map +1 -1
  179. package/lib/network/core/networkCore.d.ts +2 -0
  180. package/lib/network/core/networkCore.d.ts.map +1 -1
  181. package/lib/network/core/networkCore.js +3 -0
  182. package/lib/network/core/networkCore.js.map +1 -1
  183. package/lib/network/core/networkCoreWorker.js +1 -0
  184. package/lib/network/core/networkCoreWorker.js.map +1 -1
  185. package/lib/network/core/networkCoreWorkerHandler.d.ts +2 -0
  186. package/lib/network/core/networkCoreWorkerHandler.d.ts.map +1 -1
  187. package/lib/network/core/networkCoreWorkerHandler.js +3 -0
  188. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  189. package/lib/network/core/types.d.ts +2 -0
  190. package/lib/network/core/types.d.ts.map +1 -1
  191. package/lib/network/interface.d.ts +2 -0
  192. package/lib/network/interface.d.ts.map +1 -1
  193. package/lib/network/libp2p/index.d.ts.map +1 -1
  194. package/lib/network/libp2p/index.js +5 -1
  195. package/lib/network/libp2p/index.js.map +1 -1
  196. package/lib/network/network.d.ts +2 -0
  197. package/lib/network/network.d.ts.map +1 -1
  198. package/lib/network/network.js +6 -1
  199. package/lib/network/network.js.map +1 -1
  200. package/lib/network/options.d.ts +2 -0
  201. package/lib/network/options.d.ts.map +1 -1
  202. package/lib/network/options.js.map +1 -1
  203. package/lib/network/peers/peerManager.d.ts +2 -1
  204. package/lib/network/peers/peerManager.d.ts.map +1 -1
  205. package/lib/network/peers/peerManager.js.map +1 -1
  206. package/lib/network/peers/utils/assertPeerRelevance.d.ts +9 -1
  207. package/lib/network/peers/utils/assertPeerRelevance.d.ts.map +1 -1
  208. package/lib/network/peers/utils/assertPeerRelevance.js +32 -21
  209. package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
  210. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  211. package/lib/network/processor/gossipHandlers.js +57 -37
  212. package/lib/network/processor/gossipHandlers.js.map +1 -1
  213. package/lib/node/nodejs.d.ts +3 -1
  214. package/lib/node/nodejs.d.ts.map +1 -1
  215. package/lib/node/nodejs.js +47 -21
  216. package/lib/node/nodejs.js.map +1 -1
  217. package/lib/node/options.d.ts +3 -1
  218. package/lib/node/options.d.ts.map +1 -1
  219. package/lib/node/options.js +4 -2
  220. package/lib/node/options.js.map +1 -1
  221. package/lib/sync/interface.d.ts.map +1 -1
  222. package/lib/sync/interface.js.map +1 -1
  223. package/lib/sync/sync.d.ts +7 -0
  224. package/lib/sync/sync.d.ts.map +1 -1
  225. package/lib/sync/sync.js +61 -3
  226. package/lib/sync/sync.js.map +1 -1
  227. package/lib/sync/unknownBlock.d.ts.map +1 -1
  228. package/lib/sync/unknownBlock.js +42 -18
  229. package/lib/sync/unknownBlock.js.map +1 -1
  230. package/lib/util/file.d.ts.map +1 -1
  231. package/lib/util/file.js +8 -9
  232. package/lib/util/file.js.map +1 -1
  233. package/lib/util/queue/itemQueue.js +1 -1
  234. package/lib/util/queue/itemQueue.js.map +1 -1
  235. package/lib/util/sszBytes.d.ts +5 -0
  236. package/lib/util/sszBytes.d.ts.map +1 -1
  237. package/lib/util/sszBytes.js +35 -2
  238. package/lib/util/sszBytes.js.map +1 -1
  239. package/package.json +16 -17
  240. package/src/api/impl/api.ts +1 -1
  241. package/src/api/impl/beacon/blocks/index.ts +57 -62
  242. package/src/api/impl/beacon/index.ts +3 -1
  243. package/src/api/impl/beacon/pool/index.ts +5 -1
  244. package/src/api/impl/beacon/state/utils.ts +1 -1
  245. package/src/api/impl/validator/index.ts +47 -30
  246. package/src/api/options.ts +3 -0
  247. package/src/chain/GetBlobsTracker.ts +97 -38
  248. package/src/chain/archiveStore/archiveStore.ts +1 -0
  249. package/src/chain/archiveStore/utils/archiveBlocks.ts +76 -130
  250. package/src/chain/blocks/importBlock.ts +8 -7
  251. package/src/chain/blocks/importExecutionPayload.ts +13 -21
  252. package/src/chain/blocks/index.ts +6 -2
  253. package/src/chain/blocks/payloadEnvelopeProcessor.ts +35 -24
  254. package/src/chain/blocks/types.ts +4 -1
  255. package/src/chain/blocks/verifyBlock.ts +31 -16
  256. package/src/chain/blocks/verifyBlocksDataAvailability.ts +10 -1
  257. package/src/chain/blocks/verifyBlocksSignatures.ts +7 -5
  258. package/src/chain/blocks/verifyPayloadsDataAvailability.ts +14 -6
  259. package/src/chain/bls/interface.ts +2 -0
  260. package/src/chain/bls/multithread/index.ts +14 -10
  261. package/src/chain/bls/multithread/types.ts +1 -1
  262. package/src/chain/bls/multithread/worker.ts +1 -5
  263. package/src/chain/bls/singleThread.ts +1 -1
  264. package/src/chain/bls/utils.ts +1 -1
  265. package/src/chain/chain.ts +5 -5
  266. package/src/chain/errors/blockError.ts +1 -1
  267. package/src/chain/errors/executionPayloadEnvelope.ts +8 -0
  268. package/src/chain/interface.ts +2 -3
  269. package/src/chain/opPools/aggregatedAttestationPool.ts +25 -9
  270. package/src/chain/opPools/attestationPool.ts +16 -4
  271. package/src/chain/opPools/payloadAttestationPool.ts +18 -7
  272. package/src/chain/opPools/syncCommitteeMessagePool.ts +10 -3
  273. package/src/chain/opPools/syncContributionAndProofPool.ts +13 -3
  274. package/src/chain/opPools/utils.ts +1 -1
  275. package/src/chain/options.ts +0 -2
  276. package/src/chain/regen/interface.ts +0 -1
  277. package/src/chain/validation/executionPayloadBid.ts +14 -193
  278. package/src/chain/validation/executionPayloadEnvelope.ts +68 -1
  279. package/src/db/beacon.ts +44 -0
  280. package/src/db/dataColumnStore.ts +2 -4
  281. package/src/db/flatFileStore/flatFileStore.ts +7 -7
  282. package/src/db/flatFileStore/slotIndex.ts +4 -3
  283. package/src/db/interface.ts +2 -0
  284. package/src/db/repositories/dataColumnSidecarArchive.ts +20 -0
  285. package/src/execution/builder/apiClient.ts +16 -13
  286. package/src/execution/builder/http.ts +4 -0
  287. package/src/execution/engine/index.ts +1 -1
  288. package/src/execution/engine/interface.ts +1 -1
  289. package/src/execution/engine/types.ts +3 -1
  290. package/src/execution/engine/utils.ts +4 -2
  291. package/src/index.ts +2 -0
  292. package/src/metrics/metrics/lodestar.ts +15 -0
  293. package/src/metrics/server/http.ts +5 -5
  294. package/src/monitoring/service.ts +1 -1
  295. package/src/network/core/networkCore.ts +5 -0
  296. package/src/network/core/networkCoreWorker.ts +1 -0
  297. package/src/network/core/networkCoreWorkerHandler.ts +4 -0
  298. package/src/network/core/types.ts +2 -0
  299. package/src/network/interface.ts +2 -0
  300. package/src/network/libp2p/index.ts +5 -1
  301. package/src/network/network.ts +8 -1
  302. package/src/network/options.ts +2 -0
  303. package/src/network/peers/peerManager.ts +1 -1
  304. package/src/network/peers/utils/assertPeerRelevance.ts +39 -23
  305. package/src/network/processor/gossipHandlers.ts +69 -40
  306. package/src/node/nodejs.ts +58 -22
  307. package/src/node/options.ts +9 -6
  308. package/src/sync/interface.ts +1 -0
  309. package/src/sync/sync.ts +65 -4
  310. package/src/sync/unknownBlock.ts +47 -28
  311. package/src/util/file.ts +8 -9
  312. package/src/util/queue/itemQueue.ts +1 -1
  313. package/src/util/sszBytes.ts +42 -2
package/src/util/file.ts CHANGED
@@ -1,25 +1,24 @@
1
- import fs from "node:fs";
2
- import {promisify} from "node:util";
1
+ import {readFile as fsReadFile, mkdir, readdir, stat, unlink, writeFile} from "node:fs/promises";
3
2
 
4
3
  /** Ensure a directory exists */
5
4
  export async function ensureDir(path: string): Promise<void> {
6
5
  try {
7
- await promisify(fs.stat)(path);
6
+ await stat(path);
8
7
  } catch (_) {
9
8
  // not exists
10
- await promisify(fs.mkdir)(path, {recursive: true});
9
+ await mkdir(path, {recursive: true});
11
10
  }
12
11
  }
13
12
 
14
13
  /** Write data to a file if it does not exist */
15
14
  export async function writeIfNotExist(filepath: string, bytes: Uint8Array): Promise<boolean> {
16
15
  try {
17
- await promisify(fs.stat)(filepath);
16
+ await stat(filepath);
18
17
  return false;
19
18
  // file exists, do nothing
20
19
  } catch (_) {
21
20
  // not exists
22
- await promisify(fs.writeFile)(filepath, bytes);
21
+ await writeFile(filepath, bytes);
23
22
  return true;
24
23
  }
25
24
  }
@@ -27,7 +26,7 @@ export async function writeIfNotExist(filepath: string, bytes: Uint8Array): Prom
27
26
  /** Remove a file if it exists */
28
27
  export async function removeFile(path: string): Promise<boolean> {
29
28
  try {
30
- await promisify(fs.unlink)(path);
29
+ await unlink(path);
31
30
  return true;
32
31
  } catch (_) {
33
32
  // may not exists
@@ -37,7 +36,7 @@ export async function removeFile(path: string): Promise<boolean> {
37
36
 
38
37
  export async function readFile(path: string): Promise<Uint8Array | null> {
39
38
  try {
40
- return await fs.promises.readFile(path);
39
+ return await fsReadFile(path);
41
40
  } catch (_) {
42
41
  return null;
43
42
  }
@@ -45,7 +44,7 @@ export async function readFile(path: string): Promise<Uint8Array | null> {
45
44
 
46
45
  export async function readFileNames(folderPath: string): Promise<string[]> {
47
46
  try {
48
- return await fs.promises.readdir(folderPath);
47
+ return await readdir(folderPath);
49
48
  } catch (_) {
50
49
  return [];
51
50
  }
@@ -69,7 +69,7 @@ export class JobItemQueue<Args extends any[], R> {
69
69
  if (this.jobs.length === 1 && this.opts.noYieldIfOneItem) {
70
70
  void this.runJob();
71
71
  } else if (this.runningJobs < this.opts.maxConcurrency) {
72
- callInNextEventLoop(this.runJob);
72
+ callInNextEventLoop(() => void this.runJob());
73
73
  }
74
74
  });
75
75
  }
@@ -652,6 +652,46 @@ export function getBeaconBlockRootFromExecutionPayloadEnvelopeSerialized(data: U
652
652
  return "0x" + blockRootBuf.toString("hex");
653
653
  }
654
654
 
655
+ // transactions offset within ExecutionPayload fixed portion, see SLOT_NUMBER_OFFSET_IN_EXECUTION_PAYLOAD:
656
+ // everything up to and including blockHash(32) = 504, followed by withdrawals_offset(4)
657
+ const PAYLOAD_START_IN_SIGNED_EXECUTION_PAYLOAD_ENVELOPE =
658
+ ENVELOPE_START_IN_SIGNED + EXECUTION_PAYLOAD_ENVELOPE_FIXED_SIZE; // 180
659
+ const TRANSACTIONS_OFFSET_POSITION_IN_SIGNED_EXECUTION_PAYLOAD_ENVELOPE =
660
+ PAYLOAD_START_IN_SIGNED_EXECUTION_PAYLOAD_ENVELOPE + 504; // 684
661
+ const WITHDRAWALS_OFFSET_POSITION_IN_SIGNED_EXECUTION_PAYLOAD_ENVELOPE =
662
+ TRANSACTIONS_OFFSET_POSITION_IN_SIGNED_EXECUTION_PAYLOAD_ENVELOPE + 4; // 688
663
+
664
+ /**
665
+ * Transaction count of the payload, read from the SSZ offsets without deserializing the envelope.
666
+ * Returns null on malformed offsets, deserialization reports the exact error.
667
+ */
668
+ export function getTransactionCountFromExecutionPayloadEnvelopeSerialized(data: Uint8Array): number | null {
669
+ if (data.length < WITHDRAWALS_OFFSET_POSITION_IN_SIGNED_EXECUTION_PAYLOAD_ENVELOPE + 4) {
670
+ return null;
671
+ }
672
+
673
+ const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
674
+ const transactionsOffset = view.getUint32(TRANSACTIONS_OFFSET_POSITION_IN_SIGNED_EXECUTION_PAYLOAD_ENVELOPE, true);
675
+ const withdrawalsOffset = view.getUint32(WITHDRAWALS_OFFSET_POSITION_IN_SIGNED_EXECUTION_PAYLOAD_ENVELOPE, true);
676
+ if (transactionsOffset > withdrawalsOffset) {
677
+ return null;
678
+ }
679
+ if (transactionsOffset === withdrawalsOffset) {
680
+ return 0;
681
+ }
682
+
683
+ const transactionsStart = PAYLOAD_START_IN_SIGNED_EXECUTION_PAYLOAD_ENVELOPE + transactionsOffset;
684
+ if (transactionsStart + 4 > data.length) {
685
+ return null;
686
+ }
687
+ // first offset of a non-empty list is the size of its offset table, 4 bytes per element
688
+ const firstTransactionOffset = view.getUint32(transactionsStart, true);
689
+ if (firstTransactionOffset % 4 !== 0 || firstTransactionOffset > withdrawalsOffset - transactionsOffset) {
690
+ return null;
691
+ }
692
+ return firstTransactionOffset / 4;
693
+ }
694
+
655
695
  /**
656
696
  * BeaconState of all forks (up until Electra, check with new forks)
657
697
  * class BeaconState(Container):
@@ -854,7 +894,7 @@ export function getBlobKzgCommitmentsCountFromSignedBeaconBlockSerialized(
854
894
 
855
895
  const start = bidMsgStart + commitmentsRange.start;
856
896
  const end = bidMsgStart + commitmentsRange.end;
857
- return Math.round(((end > blockBytes.byteLength ? blockBytes.byteLength : end) - start) / commitmentSize);
897
+ return Math.round((Math.min(end, blockBytes.byteLength) - start) / commitmentSize);
858
898
  }
859
899
 
860
900
  const {SignedBeaconBlock, BeaconBlock, BeaconBlockBody, KZGCommitment} = ssz[forkName as ForkPostDeneb];
@@ -880,5 +920,5 @@ export function getBlobKzgCommitmentsCountFromSignedBeaconBlockSerialized(
880
920
  const end = messageRange.end + bodyRange.end + kzgCommitmentsRange.end;
881
921
  const start = messageRange.start + bodyRange.start + kzgCommitmentsRange.start;
882
922
 
883
- return Math.round(((end > blockBytes.byteLength ? blockBytes.byteLength : end) - start) / commitmentSize);
923
+ return Math.round((Math.min(end, blockBytes.byteLength) - start) / commitmentSize);
884
924
  }