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

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 (165) 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/validator/index.d.ts.map +1 -1
  8. package/lib/api/impl/validator/index.js +66 -1
  9. package/lib/api/impl/validator/index.js.map +1 -1
  10. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  11. package/lib/chain/blocks/importBlock.js +10 -21
  12. package/lib/chain/blocks/importBlock.js.map +1 -1
  13. package/lib/chain/blocks/importExecutionPayload.d.ts +5 -3
  14. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  15. package/lib/chain/blocks/importExecutionPayload.js +23 -10
  16. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  17. package/lib/chain/blocks/index.d.ts.map +1 -1
  18. package/lib/chain/blocks/index.js +7 -5
  19. package/lib/chain/blocks/index.js.map +1 -1
  20. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +1 -0
  21. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -1
  22. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +5 -1
  23. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -1
  24. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +1 -0
  25. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts.map +1 -1
  26. package/lib/chain/blocks/verifyBlock.d.ts +2 -1
  27. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  28. package/lib/chain/blocks/verifyBlock.js +26 -7
  29. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  30. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js +2 -2
  31. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js.map +1 -1
  32. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts.map +1 -1
  33. package/lib/chain/blocks/verifyPayloadsDataAvailability.js +8 -3
  34. package/lib/chain/blocks/verifyPayloadsDataAvailability.js.map +1 -1
  35. package/lib/chain/chain.d.ts +2 -1
  36. package/lib/chain/chain.d.ts.map +1 -1
  37. package/lib/chain/chain.js +5 -1
  38. package/lib/chain/chain.js.map +1 -1
  39. package/lib/chain/emitter.d.ts +0 -11
  40. package/lib/chain/emitter.d.ts.map +1 -1
  41. package/lib/chain/emitter.js +0 -4
  42. package/lib/chain/emitter.js.map +1 -1
  43. package/lib/chain/errors/index.d.ts +1 -0
  44. package/lib/chain/errors/index.d.ts.map +1 -1
  45. package/lib/chain/errors/index.js +1 -0
  46. package/lib/chain/errors/index.js.map +1 -1
  47. package/lib/chain/errors/proposerPreferences.d.ts +33 -0
  48. package/lib/chain/errors/proposerPreferences.d.ts.map +1 -0
  49. package/lib/chain/errors/proposerPreferences.js +13 -0
  50. package/lib/chain/errors/proposerPreferences.js.map +1 -0
  51. package/lib/chain/interface.d.ts +2 -1
  52. package/lib/chain/interface.d.ts.map +1 -1
  53. package/lib/chain/interface.js.map +1 -1
  54. package/lib/chain/opPools/payloadAttestationPool.d.ts +3 -2
  55. package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -1
  56. package/lib/chain/opPools/payloadAttestationPool.js +26 -4
  57. package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
  58. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  59. package/lib/chain/prepareNextSlot.js +15 -17
  60. package/lib/chain/prepareNextSlot.js.map +1 -1
  61. package/lib/chain/produceBlock/produceBlockBody.d.ts +11 -3
  62. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  63. package/lib/chain/produceBlock/produceBlockBody.js +38 -21
  64. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  65. package/lib/chain/regen/interface.d.ts +1 -0
  66. package/lib/chain/regen/interface.d.ts.map +1 -1
  67. package/lib/chain/regen/interface.js +1 -0
  68. package/lib/chain/regen/interface.js.map +1 -1
  69. package/lib/chain/seenCache/index.d.ts +1 -0
  70. package/lib/chain/seenCache/index.d.ts.map +1 -1
  71. package/lib/chain/seenCache/index.js +1 -0
  72. package/lib/chain/seenCache/index.js.map +1 -1
  73. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +8 -2
  74. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -1
  75. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +20 -4
  76. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -1
  77. package/lib/chain/seenCache/seenProposerPreferences.d.ts +15 -0
  78. package/lib/chain/seenCache/seenProposerPreferences.d.ts.map +1 -0
  79. package/lib/chain/seenCache/seenProposerPreferences.js +25 -0
  80. package/lib/chain/seenCache/seenProposerPreferences.js.map +1 -0
  81. package/lib/chain/validation/proposerPreferences.d.ts +8 -0
  82. package/lib/chain/validation/proposerPreferences.d.ts.map +1 -0
  83. package/lib/chain/validation/proposerPreferences.js +69 -0
  84. package/lib/chain/validation/proposerPreferences.js.map +1 -0
  85. package/lib/network/gossip/interface.d.ts +7 -1
  86. package/lib/network/gossip/interface.d.ts.map +1 -1
  87. package/lib/network/gossip/interface.js +1 -0
  88. package/lib/network/gossip/interface.js.map +1 -1
  89. package/lib/network/gossip/scoringParameters.d.ts.map +1 -1
  90. package/lib/network/gossip/scoringParameters.js +12 -1
  91. package/lib/network/gossip/scoringParameters.js.map +1 -1
  92. package/lib/network/gossip/topic.d.ts +27 -766
  93. package/lib/network/gossip/topic.d.ts.map +1 -1
  94. package/lib/network/gossip/topic.js +6 -0
  95. package/lib/network/gossip/topic.js.map +1 -1
  96. package/lib/network/interface.d.ts +1 -0
  97. package/lib/network/interface.d.ts.map +1 -1
  98. package/lib/network/network.d.ts +1 -0
  99. package/lib/network/network.d.ts.map +1 -1
  100. package/lib/network/network.js +5 -0
  101. package/lib/network/network.js.map +1 -1
  102. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  103. package/lib/network/processor/gossipHandlers.js +22 -15
  104. package/lib/network/processor/gossipHandlers.js.map +1 -1
  105. package/lib/network/processor/gossipQueues/index.d.ts.map +1 -1
  106. package/lib/network/processor/gossipQueues/index.js +5 -0
  107. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  108. package/lib/network/processor/index.d.ts.map +1 -1
  109. package/lib/network/processor/index.js +6 -5
  110. package/lib/network/processor/index.js.map +1 -1
  111. package/lib/sync/range/batch.d.ts +11 -0
  112. package/lib/sync/range/batch.d.ts.map +1 -1
  113. package/lib/sync/range/batch.js +29 -4
  114. package/lib/sync/range/batch.js.map +1 -1
  115. package/lib/sync/range/chain.d.ts.map +1 -1
  116. package/lib/sync/range/chain.js +23 -5
  117. package/lib/sync/range/chain.js.map +1 -1
  118. package/lib/sync/unknownBlock.d.ts +0 -2
  119. package/lib/sync/unknownBlock.d.ts.map +1 -1
  120. package/lib/sync/unknownBlock.js +0 -47
  121. package/lib/sync/unknownBlock.js.map +1 -1
  122. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  123. package/lib/sync/utils/downloadByRange.js +21 -15
  124. package/lib/sync/utils/downloadByRange.js.map +1 -1
  125. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  126. package/lib/sync/utils/downloadByRoot.js +10 -0
  127. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  128. package/package.json +15 -15
  129. package/src/api/impl/beacon/blocks/index.ts +16 -3
  130. package/src/api/impl/beacon/pool/index.ts +83 -1
  131. package/src/api/impl/validator/index.ts +80 -0
  132. package/src/chain/blocks/importBlock.ts +9 -36
  133. package/src/chain/blocks/importExecutionPayload.ts +31 -10
  134. package/src/chain/blocks/index.ts +14 -6
  135. package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +6 -1
  136. package/src/chain/blocks/payloadEnvelopeInput/types.ts +1 -0
  137. package/src/chain/blocks/verifyBlock.ts +39 -9
  138. package/src/chain/blocks/verifyExecutionPayloadEnvelope.ts +2 -2
  139. package/src/chain/blocks/verifyPayloadsDataAvailability.ts +7 -4
  140. package/src/chain/chain.ts +5 -0
  141. package/src/chain/emitter.ts +0 -11
  142. package/src/chain/errors/index.ts +1 -0
  143. package/src/chain/errors/proposerPreferences.ts +39 -0
  144. package/src/chain/interface.ts +2 -0
  145. package/src/chain/opPools/payloadAttestationPool.ts +29 -8
  146. package/src/chain/prepareNextSlot.ts +20 -28
  147. package/src/chain/produceBlock/produceBlockBody.ts +48 -26
  148. package/src/chain/regen/interface.ts +1 -0
  149. package/src/chain/seenCache/index.ts +1 -0
  150. package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +25 -5
  151. package/src/chain/seenCache/seenProposerPreferences.ts +29 -0
  152. package/src/chain/validation/proposerPreferences.ts +91 -0
  153. package/src/network/gossip/interface.ts +6 -0
  154. package/src/network/gossip/scoringParameters.ts +14 -1
  155. package/src/network/gossip/topic.ts +6 -0
  156. package/src/network/interface.ts +1 -0
  157. package/src/network/network.ts +11 -0
  158. package/src/network/processor/gossipHandlers.ts +31 -16
  159. package/src/network/processor/gossipQueues/index.ts +5 -0
  160. package/src/network/processor/index.ts +6 -5
  161. package/src/sync/range/batch.ts +54 -5
  162. package/src/sync/range/chain.ts +25 -5
  163. package/src/sync/unknownBlock.ts +0 -50
  164. package/src/sync/utils/downloadByRange.ts +21 -15
  165. package/src/sync/utils/downloadByRoot.ts +12 -0
@@ -185,9 +185,24 @@ export function cacheByRangeResponses({
185
185
  }
186
186
  }
187
187
 
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.
188
+ // Seed seenPayloadEnvelopeInputCache for every gloas block in the batch, regardless of whether
189
+ // the peer returned its envelope. Without this, a block returned without its envelope would be
190
+ // imported with no cache entry, and later payload-by-root sync would throw
191
+ // "Missing PayloadEnvelopeInput for known block" (see issue #9306).
192
+ for (const blockInput of updatedBatchBlocks.values()) {
193
+ if (!blockInput.hasBlock() || !isForkPostGloas(blockInput.forkName)) continue;
194
+ seenPayloadEnvelopeInputCache.add({
195
+ blockRootHex: blockInput.blockRootHex,
196
+ block: blockInput.getBlock() as SignedBeaconBlock<ForkPostGloas>,
197
+ forkName: blockInput.forkName,
198
+ sampledColumns: custodyConfig.sampledColumns,
199
+ custodyColumns: custodyConfig.custodyColumns,
200
+ timeCreatedSec: seenTimestampSec,
201
+ });
202
+ }
203
+
204
+ // Attach envelopes to entries whose envelope was returned by the peer. The returned
205
+ // payloadEnvelopes map only contains entries with envelopes ready for importExecutionPayload.
191
206
  let payloadEnvelopes: Map<Slot, PayloadEnvelopeInput> | null = null;
192
207
  if (downloadedPayloadEnvelopes !== null) {
193
208
  payloadEnvelopes = new Map(existingPayloadEnvelopes ?? []);
@@ -198,20 +213,11 @@ export function cacheByRangeResponses({
198
213
  // No block to pair this envelope with; drop silently
199
214
  continue;
200
215
  }
201
- const {blockRootHex} = blockInput;
202
216
 
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);
217
+ const payloadInput = seenPayloadEnvelopeInputCache.get(blockInput.blockRootHex);
206
218
  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
- });
219
+ // Unreachable given the loop above seeded an entry for every gloas block in the batch.
220
+ continue;
215
221
  }
216
222
 
217
223
  if (!payloadInput.hasPayloadEnvelope()) {
@@ -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) {