@lodestar/beacon-node 1.43.0-dev.a142c56215 → 1.43.0-dev.a691e9b4dd

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 (214) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +13 -3
  3. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  4. package/lib/api/impl/beacon/pool/index.d.ts.map +1 -1
  5. package/lib/api/impl/beacon/pool/index.js +45 -2
  6. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  7. package/lib/api/impl/debug/index.d.ts.map +1 -1
  8. package/lib/api/impl/debug/index.js +0 -1
  9. package/lib/api/impl/debug/index.js.map +1 -1
  10. package/lib/api/impl/validator/index.d.ts.map +1 -1
  11. package/lib/api/impl/validator/index.js +68 -2
  12. package/lib/api/impl/validator/index.js.map +1 -1
  13. package/lib/chain/blocks/blockInput/blockInput.d.ts +3 -0
  14. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
  15. package/lib/chain/blocks/blockInput/blockInput.js +4 -1
  16. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  17. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  18. package/lib/chain/blocks/importBlock.js +23 -22
  19. package/lib/chain/blocks/importBlock.js.map +1 -1
  20. package/lib/chain/blocks/importExecutionPayload.d.ts +5 -3
  21. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  22. package/lib/chain/blocks/importExecutionPayload.js +25 -14
  23. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  24. package/lib/chain/blocks/index.d.ts.map +1 -1
  25. package/lib/chain/blocks/index.js +36 -21
  26. package/lib/chain/blocks/index.js.map +1 -1
  27. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +4 -0
  28. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -1
  29. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +9 -2
  30. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -1
  31. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +1 -0
  32. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts.map +1 -1
  33. package/lib/chain/blocks/types.d.ts +2 -1
  34. package/lib/chain/blocks/types.d.ts.map +1 -1
  35. package/lib/chain/blocks/utils/chainSegment.d.ts.map +1 -1
  36. package/lib/chain/blocks/utils/chainSegment.js +8 -0
  37. package/lib/chain/blocks/utils/chainSegment.js.map +1 -1
  38. package/lib/chain/blocks/verifyBlock.d.ts +2 -1
  39. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  40. package/lib/chain/blocks/verifyBlock.js +30 -12
  41. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  42. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +0 -4
  43. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  44. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +5 -2
  45. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  46. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts +2 -1
  47. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -1
  48. package/lib/chain/blocks/verifyBlocksSanityChecks.js +16 -7
  49. package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
  50. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts +2 -2
  51. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts.map +1 -1
  52. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js +7 -4
  53. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js.map +1 -1
  54. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts.map +1 -1
  55. package/lib/chain/blocks/verifyPayloadsDataAvailability.js +8 -3
  56. package/lib/chain/blocks/verifyPayloadsDataAvailability.js.map +1 -1
  57. package/lib/chain/chain.d.ts +2 -1
  58. package/lib/chain/chain.d.ts.map +1 -1
  59. package/lib/chain/chain.js +5 -1
  60. package/lib/chain/chain.js.map +1 -1
  61. package/lib/chain/emitter.d.ts +0 -11
  62. package/lib/chain/emitter.d.ts.map +1 -1
  63. package/lib/chain/emitter.js +0 -4
  64. package/lib/chain/emitter.js.map +1 -1
  65. package/lib/chain/errors/index.d.ts +1 -0
  66. package/lib/chain/errors/index.d.ts.map +1 -1
  67. package/lib/chain/errors/index.js +1 -0
  68. package/lib/chain/errors/index.js.map +1 -1
  69. package/lib/chain/errors/proposerPreferences.d.ts +40 -0
  70. package/lib/chain/errors/proposerPreferences.d.ts.map +1 -0
  71. package/lib/chain/errors/proposerPreferences.js +14 -0
  72. package/lib/chain/errors/proposerPreferences.js.map +1 -0
  73. package/lib/chain/interface.d.ts +2 -1
  74. package/lib/chain/interface.d.ts.map +1 -1
  75. package/lib/chain/interface.js.map +1 -1
  76. package/lib/chain/opPools/payloadAttestationPool.d.ts +3 -2
  77. package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -1
  78. package/lib/chain/opPools/payloadAttestationPool.js +26 -4
  79. package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
  80. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  81. package/lib/chain/prepareNextSlot.js +15 -17
  82. package/lib/chain/prepareNextSlot.js.map +1 -1
  83. package/lib/chain/produceBlock/produceBlockBody.d.ts +12 -3
  84. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  85. package/lib/chain/produceBlock/produceBlockBody.js +34 -22
  86. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  87. package/lib/chain/regen/interface.d.ts +1 -0
  88. package/lib/chain/regen/interface.d.ts.map +1 -1
  89. package/lib/chain/regen/interface.js +1 -0
  90. package/lib/chain/regen/interface.js.map +1 -1
  91. package/lib/chain/regen/queued.d.ts.map +1 -1
  92. package/lib/chain/regen/queued.js +1 -4
  93. package/lib/chain/regen/queued.js.map +1 -1
  94. package/lib/chain/regen/regen.d.ts.map +1 -1
  95. package/lib/chain/regen/regen.js +1 -4
  96. package/lib/chain/regen/regen.js.map +1 -1
  97. package/lib/chain/seenCache/index.d.ts +1 -0
  98. package/lib/chain/seenCache/index.d.ts.map +1 -1
  99. package/lib/chain/seenCache/index.js +1 -0
  100. package/lib/chain/seenCache/index.js.map +1 -1
  101. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +8 -2
  102. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -1
  103. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +20 -4
  104. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -1
  105. package/lib/chain/seenCache/seenProposerPreferences.d.ts +16 -0
  106. package/lib/chain/seenCache/seenProposerPreferences.d.ts.map +1 -0
  107. package/lib/chain/seenCache/seenProposerPreferences.js +31 -0
  108. package/lib/chain/seenCache/seenProposerPreferences.js.map +1 -0
  109. package/lib/chain/validation/executionPayloadBid.js +11 -8
  110. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  111. package/lib/chain/validation/proposerPreferences.d.ts +8 -0
  112. package/lib/chain/validation/proposerPreferences.d.ts.map +1 -0
  113. package/lib/chain/validation/proposerPreferences.js +91 -0
  114. package/lib/chain/validation/proposerPreferences.js.map +1 -0
  115. package/lib/network/gossip/interface.d.ts +7 -1
  116. package/lib/network/gossip/interface.d.ts.map +1 -1
  117. package/lib/network/gossip/interface.js +1 -0
  118. package/lib/network/gossip/interface.js.map +1 -1
  119. package/lib/network/gossip/scoringParameters.d.ts.map +1 -1
  120. package/lib/network/gossip/scoringParameters.js +12 -1
  121. package/lib/network/gossip/scoringParameters.js.map +1 -1
  122. package/lib/network/gossip/topic.d.ts +29 -766
  123. package/lib/network/gossip/topic.d.ts.map +1 -1
  124. package/lib/network/gossip/topic.js +6 -0
  125. package/lib/network/gossip/topic.js.map +1 -1
  126. package/lib/network/interface.d.ts +1 -0
  127. package/lib/network/interface.d.ts.map +1 -1
  128. package/lib/network/network.d.ts +1 -0
  129. package/lib/network/network.d.ts.map +1 -1
  130. package/lib/network/network.js +5 -0
  131. package/lib/network/network.js.map +1 -1
  132. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  133. package/lib/network/processor/gossipHandlers.js +22 -15
  134. package/lib/network/processor/gossipHandlers.js.map +1 -1
  135. package/lib/network/processor/gossipQueues/index.d.ts.map +1 -1
  136. package/lib/network/processor/gossipQueues/index.js +5 -0
  137. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  138. package/lib/network/processor/index.d.ts.map +1 -1
  139. package/lib/network/processor/index.js +6 -5
  140. package/lib/network/processor/index.js.map +1 -1
  141. package/lib/node/nodejs.js +2 -2
  142. package/lib/node/nodejs.js.map +1 -1
  143. package/lib/node/notifier.js +1 -7
  144. package/lib/node/notifier.js.map +1 -1
  145. package/lib/sync/range/batch.d.ts +11 -0
  146. package/lib/sync/range/batch.d.ts.map +1 -1
  147. package/lib/sync/range/batch.js +83 -21
  148. package/lib/sync/range/batch.js.map +1 -1
  149. package/lib/sync/range/chain.d.ts.map +1 -1
  150. package/lib/sync/range/chain.js +23 -5
  151. package/lib/sync/range/chain.js.map +1 -1
  152. package/lib/sync/unknownBlock.d.ts +0 -2
  153. package/lib/sync/unknownBlock.d.ts.map +1 -1
  154. package/lib/sync/unknownBlock.js +0 -47
  155. package/lib/sync/unknownBlock.js.map +1 -1
  156. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  157. package/lib/sync/utils/downloadByRange.js +36 -21
  158. package/lib/sync/utils/downloadByRange.js.map +1 -1
  159. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  160. package/lib/sync/utils/downloadByRoot.js +10 -0
  161. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  162. package/lib/util/sszBytes.d.ts.map +1 -1
  163. package/lib/util/sszBytes.js +8 -6
  164. package/lib/util/sszBytes.js.map +1 -1
  165. package/package.json +15 -15
  166. package/src/api/impl/beacon/blocks/index.ts +16 -3
  167. package/src/api/impl/beacon/pool/index.ts +83 -1
  168. package/src/api/impl/debug/index.ts +0 -1
  169. package/src/api/impl/validator/index.ts +82 -1
  170. package/src/chain/blocks/blockInput/blockInput.ts +4 -1
  171. package/src/chain/blocks/importBlock.ts +23 -39
  172. package/src/chain/blocks/importExecutionPayload.ts +33 -14
  173. package/src/chain/blocks/index.ts +34 -15
  174. package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +10 -2
  175. package/src/chain/blocks/payloadEnvelopeInput/types.ts +1 -0
  176. package/src/chain/blocks/types.ts +2 -1
  177. package/src/chain/blocks/utils/chainSegment.ts +8 -0
  178. package/src/chain/blocks/verifyBlock.ts +45 -13
  179. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +6 -4
  180. package/src/chain/blocks/verifyBlocksSanityChecks.ts +16 -6
  181. package/src/chain/blocks/verifyExecutionPayloadEnvelope.ts +9 -4
  182. package/src/chain/blocks/verifyPayloadsDataAvailability.ts +7 -4
  183. package/src/chain/chain.ts +5 -0
  184. package/src/chain/emitter.ts +0 -11
  185. package/src/chain/errors/index.ts +1 -0
  186. package/src/chain/errors/proposerPreferences.ts +47 -0
  187. package/src/chain/interface.ts +2 -0
  188. package/src/chain/opPools/payloadAttestationPool.ts +29 -8
  189. package/src/chain/prepareNextSlot.ts +20 -28
  190. package/src/chain/produceBlock/produceBlockBody.ts +45 -27
  191. package/src/chain/regen/interface.ts +1 -0
  192. package/src/chain/regen/queued.ts +2 -7
  193. package/src/chain/regen/regen.ts +2 -7
  194. package/src/chain/seenCache/index.ts +1 -0
  195. package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +25 -5
  196. package/src/chain/seenCache/seenProposerPreferences.ts +37 -0
  197. package/src/chain/validation/executionPayloadBid.ts +11 -8
  198. package/src/chain/validation/proposerPreferences.ts +110 -0
  199. package/src/network/gossip/interface.ts +6 -0
  200. package/src/network/gossip/scoringParameters.ts +14 -1
  201. package/src/network/gossip/topic.ts +6 -0
  202. package/src/network/interface.ts +1 -0
  203. package/src/network/network.ts +11 -0
  204. package/src/network/processor/gossipHandlers.ts +31 -16
  205. package/src/network/processor/gossipQueues/index.ts +5 -0
  206. package/src/network/processor/index.ts +6 -5
  207. package/src/node/nodejs.ts +2 -2
  208. package/src/node/notifier.ts +1 -8
  209. package/src/sync/range/batch.ts +108 -24
  210. package/src/sync/range/chain.ts +25 -5
  211. package/src/sync/unknownBlock.ts +0 -50
  212. package/src/sync/utils/downloadByRange.ts +37 -21
  213. package/src/sync/utils/downloadByRoot.ts +12 -0
  214. package/src/util/sszBytes.ts +8 -6
@@ -14,6 +14,7 @@ import {
14
14
  deneb,
15
15
  fulu,
16
16
  gloas,
17
+ isGloasBeaconBlock,
17
18
  isGloasDataColumnSidecar,
18
19
  phase0,
19
20
  } from "@lodestar/types";
@@ -185,33 +186,37 @@ export function cacheByRangeResponses({
185
186
  }
186
187
  }
187
188
 
188
- // Build payloadEnvelopes map for gloas: start from existing (partial download) state.
189
- // The entries are wrappers around (block + envelope + sampled columns) and also seeded into
190
- // seenPayloadEnvelopeInputCache so importBlock can find them without creating a duplicate.
191
- let payloadEnvelopes: Map<Slot, PayloadEnvelopeInput> | null = null;
192
- if (downloadedPayloadEnvelopes !== null) {
193
- payloadEnvelopes = new Map(existingPayloadEnvelopes ?? []);
189
+ // Seed seenPayloadEnvelopeInputCache for every gloas block in the batch, regardless of whether
190
+ // the peer returned its envelope. Without this, a block returned without its envelope would be
191
+ // imported with no cache entry, and later payload-by-root sync would throw
192
+ // "Missing PayloadEnvelopeInput for known block" (see issue #9306).
193
+ for (const blockInput of updatedBatchBlocks.values()) {
194
+ if (!blockInput.hasBlock() || !isForkPostGloas(blockInput.forkName)) continue;
195
+ seenPayloadEnvelopeInputCache.add({
196
+ blockRootHex: blockInput.blockRootHex,
197
+ block: blockInput.getBlock() as SignedBeaconBlock<ForkPostGloas>,
198
+ forkName: blockInput.forkName,
199
+ sampledColumns: custodyConfig.sampledColumns,
200
+ custodyColumns: custodyConfig.custodyColumns,
201
+ timeCreatedSec: seenTimestampSec,
202
+ });
203
+ }
194
204
 
205
+ let payloadEnvelopes: Map<Slot, PayloadEnvelopeInput> | null =
206
+ existingPayloadEnvelopes !== null ? new Map(existingPayloadEnvelopes) : null;
207
+ if (downloadedPayloadEnvelopes !== null) {
208
+ payloadEnvelopes ??= new Map();
195
209
  for (const [slot, envelope] of downloadedPayloadEnvelopes) {
196
210
  const blockInput = updatedBatchBlocks.get(slot);
197
211
  if (!blockInput?.hasBlock() || !isForkPostGloas(blockInput.forkName)) {
198
212
  // No block to pair this envelope with; drop silently
199
213
  continue;
200
214
  }
201
- const {blockRootHex} = blockInput;
202
215
 
203
- // Reuse any existing PayloadEnvelopeInput (e.g. gossip arrived first) to avoid
204
- // duplicate cache entries. If missing, create a fresh one from the block's bid.
205
- let payloadInput = seenPayloadEnvelopeInputCache.get(blockRootHex);
216
+ const payloadInput = seenPayloadEnvelopeInputCache.get(blockInput.blockRootHex);
206
217
  if (payloadInput === undefined) {
207
- payloadInput = seenPayloadEnvelopeInputCache.add({
208
- blockRootHex,
209
- block: blockInput.getBlock() as SignedBeaconBlock<ForkPostGloas>,
210
- forkName: blockInput.forkName,
211
- sampledColumns: custodyConfig.sampledColumns,
212
- custodyColumns: custodyConfig.custodyColumns,
213
- timeCreatedSec: seenTimestampSec,
214
- });
218
+ // Unreachable given the loop above seeded an entry for every gloas block in the batch.
219
+ continue;
215
220
  }
216
221
 
217
222
  if (!payloadInput.hasPayloadEnvelope()) {
@@ -355,7 +360,7 @@ export async function requestByRange({
355
360
  let blocks: undefined | SignedBeaconBlock[];
356
361
  let blobSidecars: undefined | deneb.BlobSidecars;
357
362
  let columnSidecars: undefined | DataColumnSidecar[];
358
- let payloadEnvelopes: undefined | gloas.SignedExecutionPayloadEnvelope[];
363
+ const payloadEnvelopes: gloas.SignedExecutionPayloadEnvelope[] = [];
359
364
 
360
365
  const requests: Promise<unknown>[] = [];
361
366
 
@@ -363,6 +368,17 @@ export async function requestByRange({
363
368
  requests.push(
364
369
  network.sendBeaconBlocksByRange(peerIdStr, blocksRequest).then((blockResponse) => {
365
370
  blocks = blockResponse;
371
+ const firstBlock = blockResponse.at(0);
372
+ if (firstBlock && isGloasBeaconBlock(firstBlock.message)) {
373
+ return network
374
+ .sendExecutionPayloadEnvelopesByRoot(peerIdStr, [
375
+ firstBlock.message.body.signedExecutionPayloadBid.message.parentBlockRoot,
376
+ ])
377
+ .then((envelopeResponse) => {
378
+ payloadEnvelopes?.unshift(...envelopeResponse);
379
+ });
380
+ }
381
+ return undefined;
366
382
  })
367
383
  );
368
384
  }
@@ -386,7 +402,7 @@ export async function requestByRange({
386
402
  if (envelopesRequest) {
387
403
  requests.push(
388
404
  network.sendExecutionPayloadEnvelopesByRange(peerIdStr, envelopesRequest).then((envelopeResponse) => {
389
- payloadEnvelopes = envelopeResponse;
405
+ payloadEnvelopes?.push(...envelopeResponse);
390
406
  })
391
407
  );
392
408
  }
@@ -1173,7 +1189,7 @@ export function validateEnvelopesByRangeResponse(
1173
1189
  const slot = payloadEnvelope.message.payload.slotNumber;
1174
1190
  const batchBlockRoot = batchBlockRoots.get(slot);
1175
1191
 
1176
- // Envelopes for slots not in the batch are silently ignored (orphaned payloads)
1192
+ // Envelopes for slots not in the batch are silently ignored (orphaned payloads or a parent payload)
1177
1193
  if (batchBlockRoot === undefined) {
1178
1194
  continue;
1179
1195
  }
@@ -3,6 +3,7 @@ import {ChainForkConfig} from "@lodestar/config";
3
3
  import {
4
4
  ForkPostDeneb,
5
5
  ForkPostFulu,
6
+ ForkPostGloas,
6
7
  ForkPreFulu,
7
8
  isForkPostDeneb,
8
9
  isForkPostFulu,
@@ -114,6 +115,17 @@ export async function downloadByRoot({
114
115
  });
115
116
  }
116
117
 
118
+ if (isForkPostGloas(blockInput.forkName)) {
119
+ chain.seenPayloadEnvelopeInputCache.add({
120
+ blockRootHex: rootHex,
121
+ block: blockInput.getBlock() as SignedBeaconBlock<ForkPostGloas>,
122
+ forkName: blockInput.forkName,
123
+ sampledColumns: chain.custodyConfig.sampledColumns,
124
+ custodyColumns: chain.custodyConfig.custodyColumns,
125
+ timeCreatedSec: Date.now() / 1000,
126
+ });
127
+ }
128
+
117
129
  const hasAllDataPreDownload = blockInput.hasBlockAndAllData();
118
130
 
119
131
  if (isBlockInputBlobs(blockInput) && !hasAllDataPreDownload) {
@@ -558,9 +558,10 @@ export function getBeaconBlockRootFromDataColumnSidecarSerialized(data: Uint8Arr
558
558
  * └─ ExecutionPayloadEnvelope (starts at byte 100):
559
559
  * ├─ 4 bytes: payload offset
560
560
  * ├─ 4 bytes: executionRequests offset
561
- * ├─ 8 bytes: builderIndex (offset 108-115)
562
- * ├─ 32 bytes: beaconBlockRoot (offset 116-147)
563
- * └─ variable: payload data (starts at envelope + 48)
561
+ * ├─ 8 bytes: builderIndex (offset 108-115)
562
+ * ├─ 32 bytes: beaconBlockRoot (offset 116-147)
563
+ * ├─ 32 bytes: parentBeaconBlockRoot (offset 148-179) new in Gloas alpha.6 (consensus-specs#5152)
564
+ * └─ variable: payload data (starts at envelope + 80)
564
565
  * └─ ExecutionPayload fixed portion includes slotNumber at offset 532
565
566
  */
566
567
  const SIGNED_EXECUTION_PAYLOAD_ENVELOPE_MESSAGE_OFFSET = 4;
@@ -576,12 +577,13 @@ const BEACON_BLOCK_ROOT_OFFSET_IN_SIGNED_EXECUTION_PAYLOAD_ENVELOPE =
576
577
  EXECUTION_PAYLOAD_ENVELOPE_REQUESTS_OFFSET +
577
578
  EXECUTION_PAYLOAD_ENVELOPE_BUILDER_INDEX_SIZE; // 116
578
579
 
579
- // Envelope fixed portion (without slot): payload_offset(4) + requests_offset(4) + builderIndex(8) + beaconBlockRoot(32) = 48
580
+ // Envelope fixed portion: payload_offset(4) + requests_offset(4) + builderIndex(8) + beaconBlockRoot(32) + parentBeaconBlockRoot(32) = 80
580
581
  const EXECUTION_PAYLOAD_ENVELOPE_FIXED_SIZE =
581
582
  EXECUTION_PAYLOAD_ENVELOPE_PAYLOAD_OFFSET +
582
583
  EXECUTION_PAYLOAD_ENVELOPE_REQUESTS_OFFSET +
583
584
  EXECUTION_PAYLOAD_ENVELOPE_BUILDER_INDEX_SIZE +
584
- ROOT_SIZE; // 48
585
+ ROOT_SIZE +
586
+ ROOT_SIZE; // 80
585
587
 
586
588
  // slotNumber offset within ExecutionPayload fixed portion:
587
589
  // parentHash(32) + feeRecipient(20) + stateRoot(32) + receiptsRoot(32) + logsBloom(256) +
@@ -595,7 +597,7 @@ const ENVELOPE_START_IN_SIGNED =
595
597
  SIGNED_EXECUTION_PAYLOAD_ENVELOPE_MESSAGE_OFFSET + SIGNED_EXECUTION_PAYLOAD_ENVELOPE_SIGNATURE_SIZE; // 100
596
598
 
597
599
  const SLOT_OFFSET_IN_SIGNED_EXECUTION_PAYLOAD_ENVELOPE =
598
- ENVELOPE_START_IN_SIGNED + EXECUTION_PAYLOAD_ENVELOPE_FIXED_SIZE + SLOT_NUMBER_OFFSET_IN_EXECUTION_PAYLOAD; // 100 + 48 + 532 = 680
600
+ ENVELOPE_START_IN_SIGNED + EXECUTION_PAYLOAD_ENVELOPE_FIXED_SIZE + SLOT_NUMBER_OFFSET_IN_EXECUTION_PAYLOAD; // 100 + 80 + 532 = 712
599
601
 
600
602
  export function getSlotFromExecutionPayloadEnvelopeSerialized(data: Uint8Array): Slot | null {
601
603
  if (data.length < SLOT_OFFSET_IN_SIGNED_EXECUTION_PAYLOAD_ENVELOPE + SLOT_SIZE) {