@lodestar/beacon-node 1.43.0-dev.a140dd987e → 1.43.0-dev.a6d8600051

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 (228) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +6 -5
  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/lodestar/index.js +1 -1
  8. package/lib/api/impl/lodestar/index.js.map +1 -1
  9. package/lib/api/impl/validator/index.d.ts.map +1 -1
  10. package/lib/api/impl/validator/index.js +66 -1
  11. package/lib/api/impl/validator/index.js.map +1 -1
  12. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  13. package/lib/chain/blocks/importBlock.js +3 -2
  14. package/lib/chain/blocks/importBlock.js.map +1 -1
  15. package/lib/chain/blocks/importExecutionPayload.d.ts +19 -6
  16. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  17. package/lib/chain/blocks/importExecutionPayload.js +43 -19
  18. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  19. package/lib/chain/blocks/index.d.ts +5 -3
  20. package/lib/chain/blocks/index.d.ts.map +1 -1
  21. package/lib/chain/blocks/index.js +31 -10
  22. package/lib/chain/blocks/index.js.map +1 -1
  23. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +1 -0
  24. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -1
  25. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +4 -1
  26. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -1
  27. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +1 -0
  28. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts.map +1 -1
  29. package/lib/chain/blocks/payloadEnvelopeProcessor.js +2 -2
  30. package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -1
  31. package/lib/chain/blocks/types.d.ts +2 -2
  32. package/lib/chain/blocks/types.d.ts.map +1 -1
  33. package/lib/chain/blocks/utils/chainSegment.d.ts +23 -2
  34. package/lib/chain/blocks/utils/chainSegment.d.ts.map +1 -1
  35. package/lib/chain/blocks/utils/chainSegment.js +81 -12
  36. package/lib/chain/blocks/utils/chainSegment.js.map +1 -1
  37. package/lib/chain/blocks/verifyBlock.d.ts +5 -3
  38. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  39. package/lib/chain/blocks/verifyBlock.js +51 -7
  40. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  41. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -1
  42. package/lib/chain/blocks/verifyBlocksSanityChecks.js +15 -4
  43. package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
  44. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js +2 -2
  45. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js.map +1 -1
  46. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts.map +1 -1
  47. package/lib/chain/blocks/verifyPayloadsDataAvailability.js +8 -3
  48. package/lib/chain/blocks/verifyPayloadsDataAvailability.js.map +1 -1
  49. package/lib/chain/chain.d.ts +3 -2
  50. package/lib/chain/chain.d.ts.map +1 -1
  51. package/lib/chain/chain.js +12 -4
  52. package/lib/chain/chain.js.map +1 -1
  53. package/lib/chain/errors/blockError.d.ts +8 -1
  54. package/lib/chain/errors/blockError.d.ts.map +1 -1
  55. package/lib/chain/errors/blockError.js +2 -0
  56. package/lib/chain/errors/blockError.js.map +1 -1
  57. package/lib/chain/errors/index.d.ts +1 -0
  58. package/lib/chain/errors/index.d.ts.map +1 -1
  59. package/lib/chain/errors/index.js +1 -0
  60. package/lib/chain/errors/index.js.map +1 -1
  61. package/lib/chain/errors/proposerPreferences.d.ts +33 -0
  62. package/lib/chain/errors/proposerPreferences.d.ts.map +1 -0
  63. package/lib/chain/errors/proposerPreferences.js +13 -0
  64. package/lib/chain/errors/proposerPreferences.js.map +1 -0
  65. package/lib/chain/interface.d.ts +3 -2
  66. package/lib/chain/interface.d.ts.map +1 -1
  67. package/lib/chain/interface.js.map +1 -1
  68. package/lib/chain/opPools/payloadAttestationPool.d.ts +3 -2
  69. package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -1
  70. package/lib/chain/opPools/payloadAttestationPool.js +26 -4
  71. package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
  72. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  73. package/lib/chain/prepareNextSlot.js +15 -17
  74. package/lib/chain/prepareNextSlot.js.map +1 -1
  75. package/lib/chain/produceBlock/produceBlockBody.d.ts +11 -3
  76. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  77. package/lib/chain/produceBlock/produceBlockBody.js +41 -18
  78. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  79. package/lib/chain/regen/interface.d.ts +1 -0
  80. package/lib/chain/regen/interface.d.ts.map +1 -1
  81. package/lib/chain/regen/interface.js +1 -0
  82. package/lib/chain/regen/interface.js.map +1 -1
  83. package/lib/chain/seenCache/index.d.ts +1 -0
  84. package/lib/chain/seenCache/index.d.ts.map +1 -1
  85. package/lib/chain/seenCache/index.js +1 -0
  86. package/lib/chain/seenCache/index.js.map +1 -1
  87. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +8 -2
  88. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -1
  89. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +8 -2
  90. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -1
  91. package/lib/chain/seenCache/seenProposerPreferences.d.ts +15 -0
  92. package/lib/chain/seenCache/seenProposerPreferences.d.ts.map +1 -0
  93. package/lib/chain/seenCache/seenProposerPreferences.js +25 -0
  94. package/lib/chain/seenCache/seenProposerPreferences.js.map +1 -0
  95. package/lib/chain/validation/block.d.ts.map +1 -1
  96. package/lib/chain/validation/block.js +1 -0
  97. package/lib/chain/validation/block.js.map +1 -1
  98. package/lib/chain/validation/proposerPreferences.d.ts +8 -0
  99. package/lib/chain/validation/proposerPreferences.d.ts.map +1 -0
  100. package/lib/chain/validation/proposerPreferences.js +69 -0
  101. package/lib/chain/validation/proposerPreferences.js.map +1 -0
  102. package/lib/metrics/metrics/lodestar.d.ts +1 -0
  103. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  104. package/lib/metrics/metrics/lodestar.js +4 -0
  105. package/lib/metrics/metrics/lodestar.js.map +1 -1
  106. package/lib/network/gossip/interface.d.ts +7 -1
  107. package/lib/network/gossip/interface.d.ts.map +1 -1
  108. package/lib/network/gossip/interface.js +1 -0
  109. package/lib/network/gossip/interface.js.map +1 -1
  110. package/lib/network/gossip/scoringParameters.d.ts.map +1 -1
  111. package/lib/network/gossip/scoringParameters.js +12 -1
  112. package/lib/network/gossip/scoringParameters.js.map +1 -1
  113. package/lib/network/gossip/topic.d.ts +8 -0
  114. package/lib/network/gossip/topic.d.ts.map +1 -1
  115. package/lib/network/gossip/topic.js +6 -0
  116. package/lib/network/gossip/topic.js.map +1 -1
  117. package/lib/network/interface.d.ts +1 -0
  118. package/lib/network/interface.d.ts.map +1 -1
  119. package/lib/network/network.d.ts +1 -0
  120. package/lib/network/network.d.ts.map +1 -1
  121. package/lib/network/network.js +5 -0
  122. package/lib/network/network.js.map +1 -1
  123. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  124. package/lib/network/processor/gossipHandlers.js +14 -9
  125. package/lib/network/processor/gossipHandlers.js.map +1 -1
  126. package/lib/network/processor/gossipQueues/index.d.ts.map +1 -1
  127. package/lib/network/processor/gossipQueues/index.js +5 -0
  128. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  129. package/lib/network/processor/index.d.ts.map +1 -1
  130. package/lib/network/processor/index.js +1 -0
  131. package/lib/network/processor/index.js.map +1 -1
  132. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -1
  133. package/lib/network/reqresp/handlers/beaconBlocksByRange.js +14 -6
  134. package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
  135. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +1 -1
  136. package/lib/network/reqresp/handlers/blobSidecarsByRange.js +11 -5
  137. package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +1 -1
  138. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -1
  139. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +17 -5
  140. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -1
  141. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts.map +1 -1
  142. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js +7 -4
  143. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js.map +1 -1
  144. package/lib/node/notifier.js +7 -1
  145. package/lib/node/notifier.js.map +1 -1
  146. package/lib/sync/range/batch.d.ts +12 -2
  147. package/lib/sync/range/batch.d.ts.map +1 -1
  148. package/lib/sync/range/batch.js +56 -30
  149. package/lib/sync/range/batch.js.map +1 -1
  150. package/lib/sync/range/chain.d.ts +6 -2
  151. package/lib/sync/range/chain.d.ts.map +1 -1
  152. package/lib/sync/range/chain.js +4 -3
  153. package/lib/sync/range/chain.js.map +1 -1
  154. package/lib/sync/range/range.d.ts.map +1 -1
  155. package/lib/sync/range/range.js +17 -6
  156. package/lib/sync/range/range.js.map +1 -1
  157. package/lib/sync/types.d.ts +34 -0
  158. package/lib/sync/types.d.ts.map +1 -1
  159. package/lib/sync/types.js +34 -0
  160. package/lib/sync/types.js.map +1 -1
  161. package/lib/sync/unknownBlock.d.ts +24 -1
  162. package/lib/sync/unknownBlock.d.ts.map +1 -1
  163. package/lib/sync/unknownBlock.js +649 -53
  164. package/lib/sync/unknownBlock.js.map +1 -1
  165. package/lib/sync/utils/downloadByRange.d.ts +46 -10
  166. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  167. package/lib/sync/utils/downloadByRange.js +147 -24
  168. package/lib/sync/utils/downloadByRange.js.map +1 -1
  169. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  170. package/lib/sync/utils/downloadByRoot.js +6 -2
  171. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  172. package/lib/sync/utils/pendingBlocksTree.d.ts +0 -1
  173. package/lib/sync/utils/pendingBlocksTree.d.ts.map +1 -1
  174. package/lib/sync/utils/pendingBlocksTree.js +0 -9
  175. package/lib/sync/utils/pendingBlocksTree.js.map +1 -1
  176. package/package.json +15 -15
  177. package/src/api/impl/beacon/blocks/index.ts +8 -5
  178. package/src/api/impl/beacon/pool/index.ts +83 -1
  179. package/src/api/impl/lodestar/index.ts +1 -1
  180. package/src/api/impl/validator/index.ts +80 -0
  181. package/src/chain/blocks/importBlock.ts +3 -2
  182. package/src/chain/blocks/importExecutionPayload.ts +57 -21
  183. package/src/chain/blocks/index.ts +54 -14
  184. package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +5 -1
  185. package/src/chain/blocks/payloadEnvelopeInput/types.ts +1 -0
  186. package/src/chain/blocks/payloadEnvelopeProcessor.ts +2 -2
  187. package/src/chain/blocks/types.ts +2 -2
  188. package/src/chain/blocks/utils/chainSegment.ts +106 -17
  189. package/src/chain/blocks/verifyBlock.ts +68 -9
  190. package/src/chain/blocks/verifyBlocksSanityChecks.ts +16 -7
  191. package/src/chain/blocks/verifyExecutionPayloadEnvelope.ts +2 -2
  192. package/src/chain/blocks/verifyPayloadsDataAvailability.ts +7 -4
  193. package/src/chain/chain.ts +16 -3
  194. package/src/chain/errors/blockError.ts +4 -1
  195. package/src/chain/errors/index.ts +1 -0
  196. package/src/chain/errors/proposerPreferences.ts +39 -0
  197. package/src/chain/interface.ts +7 -1
  198. package/src/chain/opPools/payloadAttestationPool.ts +29 -8
  199. package/src/chain/prepareNextSlot.ts +20 -28
  200. package/src/chain/produceBlock/produceBlockBody.ts +51 -23
  201. package/src/chain/regen/interface.ts +1 -0
  202. package/src/chain/seenCache/index.ts +1 -0
  203. package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +13 -3
  204. package/src/chain/seenCache/seenProposerPreferences.ts +29 -0
  205. package/src/chain/validation/block.ts +1 -0
  206. package/src/chain/validation/proposerPreferences.ts +91 -0
  207. package/src/metrics/metrics/lodestar.ts +4 -0
  208. package/src/network/gossip/interface.ts +6 -0
  209. package/src/network/gossip/scoringParameters.ts +14 -1
  210. package/src/network/gossip/topic.ts +6 -0
  211. package/src/network/interface.ts +1 -0
  212. package/src/network/network.ts +11 -0
  213. package/src/network/processor/gossipHandlers.ts +23 -10
  214. package/src/network/processor/gossipQueues/index.ts +5 -0
  215. package/src/network/processor/index.ts +1 -0
  216. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +14 -6
  217. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +11 -5
  218. package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +17 -5
  219. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRange.ts +7 -4
  220. package/src/node/notifier.ts +8 -1
  221. package/src/sync/range/batch.ts +90 -35
  222. package/src/sync/range/chain.ts +13 -5
  223. package/src/sync/range/range.ts +18 -6
  224. package/src/sync/types.ts +72 -0
  225. package/src/sync/unknownBlock.ts +810 -57
  226. package/src/sync/utils/downloadByRange.ts +256 -39
  227. package/src/sync/utils/downloadByRoot.ts +12 -2
  228. package/src/sync/utils/pendingBlocksTree.ts +0 -15
@@ -172,7 +172,7 @@ export class RangeSync extends (EventEmitter as {new (): RangeSyncEmitter}) {
172
172
  }
173
173
 
174
174
  /** Convenience method for `SyncChain` */
175
- private processChainSegment: SyncChainFns["processChainSegment"] = async (blocks, syncType) => {
175
+ private processChainSegment: SyncChainFns["processChainSegment"] = async (blocks, payloadEnvelopes, syncType) => {
176
176
  // Not trusted, verify signatures
177
177
  const flags: ImportBlockOpts = {
178
178
  // Only skip importing attestations for finalized sync. For head sync attestation are valuable.
@@ -192,9 +192,15 @@ export class RangeSync extends (EventEmitter as {new (): RangeSyncEmitter}) {
192
192
 
193
193
  if (this.opts?.disableProcessAsChainSegment) {
194
194
  // Should only be used for debugging or testing
195
- for (const block of blocks) await this.chain.processBlock(block, flags);
195
+ for (const block of blocks) {
196
+ await this.chain.processBlock(block, flags);
197
+ const payloadEnvelope = payloadEnvelopes?.get(block.slot);
198
+ if (payloadEnvelope) {
199
+ await this.chain.processExecutionPayload(payloadEnvelope);
200
+ }
201
+ }
196
202
  } else {
197
- await this.chain.processChainSegment(blocks, flags);
203
+ await this.chain.processChainSegment(blocks, payloadEnvelopes, flags);
198
204
  }
199
205
  };
200
206
 
@@ -209,13 +215,19 @@ export class RangeSync extends (EventEmitter as {new (): RangeSyncEmitter}) {
209
215
  peerDasMetrics: this.chain.metrics?.peerDas,
210
216
  ...batch.getRequestsForPeer(peer),
211
217
  });
212
- const cached = cacheByRangeResponses({
218
+ const {responses, payloadEnvelopes: downloadedPayloadEnvelopes} = result;
219
+ const {blocks, payloadEnvelopes} = cacheByRangeResponses({
213
220
  cache: this.chain.seenBlockInputCache,
221
+ seenPayloadEnvelopeInputCache: this.chain.seenPayloadEnvelopeInputCache,
214
222
  peerIdStr: peer.peerId,
215
- responses: result,
223
+ responses,
216
224
  batchBlocks,
225
+ downloadedPayloadEnvelopes,
226
+ existingPayloadEnvelopes: batch.getPayloadEnvelopes(),
227
+ custodyConfig: this.chain.custodyConfig,
228
+ seenTimestampSec: Date.now() / 1000,
217
229
  });
218
- return {result: cached, warnings};
230
+ return {result: {blocks, payloadEnvelopes}, warnings};
219
231
  };
220
232
 
221
233
  private pruneBlockInputs: SyncChainFns["pruneBlockInputs"] = (blocks: IBlockInput[]) => {
package/src/sync/types.ts CHANGED
@@ -1,5 +1,8 @@
1
1
  import {RootHex, Slot} from "@lodestar/types";
2
+ import {SignedExecutionPayloadEnvelope} from "@lodestar/types/gloas";
3
+ import {toRootHex} from "@lodestar/utils";
2
4
  import {IBlockInput} from "../chain/blocks/blockInput/index.js";
5
+ import {PayloadEnvelopeInput} from "../chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js";
3
6
 
4
7
  export enum PendingBlockType {
5
8
  /**
@@ -26,6 +29,14 @@ export enum PendingBlockInputStatus {
26
29
  processing = "processing",
27
30
  }
28
31
 
32
+ export enum PendingPayloadInputStatus {
33
+ pending = "pending",
34
+ fetching = "fetching",
35
+ waitingForBlock = "waiting_for_block",
36
+ downloaded = "downloaded",
37
+ processing = "processing",
38
+ }
39
+
29
40
  export type PendingBlockInput = {
30
41
  status: PendingBlockInputStatus;
31
42
  blockInput: IBlockInput;
@@ -44,10 +55,47 @@ export type PendingRootHex = {
44
55
 
45
56
  export type BlockInputSyncCacheItem = PendingBlockInput | PendingRootHex;
46
57
 
58
+ export type PendingPayloadInput = {
59
+ status:
60
+ | PendingPayloadInputStatus.pending
61
+ | PendingPayloadInputStatus.fetching
62
+ | PendingPayloadInputStatus.downloaded
63
+ | PendingPayloadInputStatus.processing;
64
+ payloadInput: PayloadEnvelopeInput;
65
+ timeAddedSec: number;
66
+ timeSyncedSec?: number;
67
+ peerIdStrings: Set<string>;
68
+ };
69
+
70
+ export type PendingPayloadRootHex = {
71
+ status: PendingPayloadInputStatus.pending | PendingPayloadInputStatus.fetching;
72
+ rootHex: RootHex;
73
+ timeAddedSec: number;
74
+ timeSyncedSec?: number;
75
+ peerIdStrings: Set<string>;
76
+ };
77
+
78
+ export type PendingPayloadEnvelope = {
79
+ status: PendingPayloadInputStatus.waitingForBlock;
80
+ envelope: SignedExecutionPayloadEnvelope;
81
+ timeAddedSec: number;
82
+ peerIdStrings: Set<string>;
83
+ };
84
+
85
+ export type PayloadSyncCacheItem = PendingPayloadInput | PendingPayloadRootHex | PendingPayloadEnvelope;
86
+
47
87
  export function isPendingBlockInput(pending: BlockInputSyncCacheItem): pending is PendingBlockInput {
48
88
  return "blockInput" in pending;
49
89
  }
50
90
 
91
+ export function isPendingPayloadInput(pending: PayloadSyncCacheItem): pending is PendingPayloadInput {
92
+ return "payloadInput" in pending;
93
+ }
94
+
95
+ export function isPendingPayloadEnvelope(pending: PayloadSyncCacheItem): pending is PendingPayloadEnvelope {
96
+ return "envelope" in pending;
97
+ }
98
+
51
99
  export function getBlockInputSyncCacheItemRootHex(block: BlockInputSyncCacheItem): RootHex {
52
100
  return isPendingBlockInput(block) ? block.blockInput.blockRootHex : block.rootHex;
53
101
  }
@@ -55,3 +103,27 @@ export function getBlockInputSyncCacheItemRootHex(block: BlockInputSyncCacheItem
55
103
  export function getBlockInputSyncCacheItemSlot(block: BlockInputSyncCacheItem): Slot | string {
56
104
  return isPendingBlockInput(block) ? block.blockInput.slot : "unknown";
57
105
  }
106
+
107
+ export function getPayloadSyncCacheItemRootHex(payload: PayloadSyncCacheItem): RootHex {
108
+ if (isPendingPayloadInput(payload)) {
109
+ return payload.payloadInput.blockRootHex;
110
+ }
111
+
112
+ if (isPendingPayloadEnvelope(payload)) {
113
+ return toRootHex(payload.envelope.message.beaconBlockRoot);
114
+ }
115
+
116
+ return payload.rootHex;
117
+ }
118
+
119
+ export function getPayloadSyncCacheItemSlot(payload: PayloadSyncCacheItem): Slot | string {
120
+ if (isPendingPayloadInput(payload)) {
121
+ return payload.payloadInput.slot;
122
+ }
123
+
124
+ if (isPendingPayloadEnvelope(payload)) {
125
+ return payload.envelope.message.payload.slotNumber;
126
+ }
127
+
128
+ return "unknown";
129
+ }