@lodestar/beacon-node 1.34.0-dev.8cfc843bd3 → 1.34.0-dev.91df6658d5

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 (245) hide show
  1. package/lib/api/impl/beacon/blocks/index.js +162 -55
  2. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  3. package/lib/api/impl/beacon/state/index.js +6 -12
  4. package/lib/api/impl/beacon/state/index.js.map +1 -1
  5. package/lib/api/impl/debug/index.d.ts +1 -1
  6. package/lib/api/impl/debug/index.js +24 -1
  7. package/lib/api/impl/debug/index.js.map +1 -1
  8. package/lib/api/impl/validator/index.js +41 -24
  9. package/lib/api/impl/validator/index.js.map +1 -1
  10. package/lib/chain/archiveStore/archiveStore.d.ts +1 -1
  11. package/lib/chain/archiveStore/archiveStore.js +2 -2
  12. package/lib/chain/archiveStore/interface.d.ts +1 -1
  13. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +1 -1
  14. package/lib/chain/archiveStore/utils/archiveBlocks.js +89 -22
  15. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  16. package/lib/chain/beaconProposerCache.d.ts +1 -0
  17. package/lib/chain/beaconProposerCache.js +3 -0
  18. package/lib/chain/beaconProposerCache.js.map +1 -1
  19. package/lib/chain/blocks/importBlock.js +3 -2
  20. package/lib/chain/blocks/importBlock.js.map +1 -1
  21. package/lib/chain/blocks/types.d.ts +66 -23
  22. package/lib/chain/blocks/types.js +39 -5
  23. package/lib/chain/blocks/types.js.map +1 -1
  24. package/lib/chain/blocks/verifyBlocksDataAvailability.js +21 -10
  25. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  26. package/lib/chain/blocks/writeBlockInputToDb.js +63 -16
  27. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  28. package/lib/chain/chain.d.ts +18 -101
  29. package/lib/chain/chain.js +91 -67
  30. package/lib/chain/chain.js.map +1 -1
  31. package/lib/chain/emitter.d.ts +18 -2
  32. package/lib/chain/emitter.js +13 -0
  33. package/lib/chain/emitter.js.map +1 -1
  34. package/lib/chain/errors/dataColumnSidecarError.d.ts +69 -0
  35. package/lib/chain/errors/dataColumnSidecarError.js +21 -0
  36. package/lib/chain/errors/dataColumnSidecarError.js.map +1 -0
  37. package/lib/chain/errors/index.d.ts +1 -0
  38. package/lib/chain/errors/index.js +1 -0
  39. package/lib/chain/errors/index.js.map +1 -1
  40. package/lib/chain/interface.d.ts +6 -7
  41. package/lib/chain/interface.js.map +1 -1
  42. package/lib/chain/options.d.ts +4 -1
  43. package/lib/chain/options.js +1 -0
  44. package/lib/chain/options.js.map +1 -1
  45. package/lib/chain/prepareNextSlot.js +2 -1
  46. package/lib/chain/prepareNextSlot.js.map +1 -1
  47. package/lib/chain/produceBlock/produceBlockBody.d.ts +30 -16
  48. package/lib/chain/produceBlock/produceBlockBody.js +28 -28
  49. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  50. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.d.ts +6 -3
  51. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js +28 -4
  52. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js.map +1 -1
  53. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +64 -18
  54. package/lib/chain/seenCache/seenGossipBlockInput.js +321 -53
  55. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  56. package/lib/chain/validation/dataColumnSidecar.d.ts +29 -0
  57. package/lib/chain/validation/dataColumnSidecar.js +248 -0
  58. package/lib/chain/validation/dataColumnSidecar.js.map +1 -0
  59. package/lib/db/beacon.d.ts +3 -1
  60. package/lib/db/beacon.js +3 -1
  61. package/lib/db/beacon.js.map +1 -1
  62. package/lib/db/buckets.d.ts +3 -1
  63. package/lib/db/buckets.js +2 -0
  64. package/lib/db/buckets.js.map +1 -1
  65. package/lib/db/interface.d.ts +3 -1
  66. package/lib/db/repositories/dataColumnSidecar.d.ts +26 -0
  67. package/lib/db/repositories/dataColumnSidecar.js +39 -0
  68. package/lib/db/repositories/dataColumnSidecar.js.map +1 -0
  69. package/lib/db/repositories/dataColumnSidecarArchive.d.ts +24 -0
  70. package/lib/db/repositories/dataColumnSidecarArchive.js +39 -0
  71. package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -0
  72. package/lib/db/repositories/index.d.ts +2 -0
  73. package/lib/db/repositories/index.js +2 -0
  74. package/lib/db/repositories/index.js.map +1 -1
  75. package/lib/execution/builder/http.d.ts +20 -4
  76. package/lib/execution/builder/http.js +30 -11
  77. package/lib/execution/builder/http.js.map +1 -1
  78. package/lib/execution/builder/interface.d.ts +5 -4
  79. package/lib/execution/engine/http.d.ts +8 -5
  80. package/lib/execution/engine/http.js +56 -42
  81. package/lib/execution/engine/http.js.map +1 -1
  82. package/lib/execution/engine/interface.d.ts +6 -13
  83. package/lib/execution/engine/interface.js +1 -1
  84. package/lib/execution/engine/interface.js.map +1 -1
  85. package/lib/execution/engine/mock.d.ts +1 -0
  86. package/lib/execution/engine/mock.js +5 -0
  87. package/lib/execution/engine/mock.js.map +1 -1
  88. package/lib/execution/engine/types.d.ts +12 -2
  89. package/lib/execution/engine/types.js +8 -2
  90. package/lib/execution/engine/types.js.map +1 -1
  91. package/lib/metrics/metrics/beacon.d.ts +15 -5
  92. package/lib/metrics/metrics/beacon.js +61 -14
  93. package/lib/metrics/metrics/beacon.js.map +1 -1
  94. package/lib/metrics/metrics/lodestar.d.ts +29 -1
  95. package/lib/metrics/metrics/lodestar.js +59 -0
  96. package/lib/metrics/metrics/lodestar.js.map +1 -1
  97. package/lib/network/core/metrics.d.ts +10 -3
  98. package/lib/network/core/metrics.js +22 -4
  99. package/lib/network/core/metrics.js.map +1 -1
  100. package/lib/network/core/networkCore.d.ts +15 -4
  101. package/lib/network/core/networkCore.js +73 -23
  102. package/lib/network/core/networkCore.js.map +1 -1
  103. package/lib/network/core/networkCoreWorker.js +2 -0
  104. package/lib/network/core/networkCoreWorker.js.map +1 -1
  105. package/lib/network/core/networkCoreWorkerHandler.d.ts +5 -3
  106. package/lib/network/core/networkCoreWorkerHandler.js +6 -1
  107. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  108. package/lib/network/core/types.d.ts +7 -4
  109. package/lib/network/events.d.ts +4 -2
  110. package/lib/network/events.js.map +1 -1
  111. package/lib/network/gossip/gossipsub.d.ts +2 -2
  112. package/lib/network/gossip/gossipsub.js +8 -6
  113. package/lib/network/gossip/gossipsub.js.map +1 -1
  114. package/lib/network/gossip/interface.d.ts +8 -1
  115. package/lib/network/gossip/interface.js +1 -0
  116. package/lib/network/gossip/interface.js.map +1 -1
  117. package/lib/network/gossip/scoringParameters.d.ts +6 -2
  118. package/lib/network/gossip/scoringParameters.js.map +1 -1
  119. package/lib/network/gossip/topic.d.ts +2033 -1484
  120. package/lib/network/gossip/topic.js +29 -1
  121. package/lib/network/gossip/topic.js.map +1 -1
  122. package/lib/network/interface.d.ts +9 -1
  123. package/lib/network/metadata.d.ts +9 -5
  124. package/lib/network/metadata.js +26 -5
  125. package/lib/network/metadata.js.map +1 -1
  126. package/lib/network/network.d.ts +12 -2
  127. package/lib/network/network.js +73 -11
  128. package/lib/network/network.js.map +1 -1
  129. package/lib/network/networkConfig.d.ts +12 -0
  130. package/lib/network/networkConfig.js +2 -0
  131. package/lib/network/networkConfig.js.map +1 -0
  132. package/lib/network/options.d.ts +1 -0
  133. package/lib/network/options.js +5 -0
  134. package/lib/network/options.js.map +1 -1
  135. package/lib/network/peers/discover.d.ts +8 -3
  136. package/lib/network/peers/discover.js +99 -14
  137. package/lib/network/peers/discover.js.map +1 -1
  138. package/lib/network/peers/peerManager.d.ts +10 -4
  139. package/lib/network/peers/peerManager.js +105 -19
  140. package/lib/network/peers/peerManager.js.map +1 -1
  141. package/lib/network/peers/peersData.d.ts +17 -3
  142. package/lib/network/peers/peersData.js.map +1 -1
  143. package/lib/network/peers/score/interface.d.ts +1 -1
  144. package/lib/network/peers/score/score.d.ts +2 -2
  145. package/lib/network/peers/score/score.js +4 -1
  146. package/lib/network/peers/score/score.js.map +1 -1
  147. package/lib/network/peers/score/store.d.ts +3 -1
  148. package/lib/network/peers/score/store.js +6 -2
  149. package/lib/network/peers/score/store.js.map +1 -1
  150. package/lib/network/peers/utils/assertPeerRelevance.d.ts +7 -3
  151. package/lib/network/peers/utils/assertPeerRelevance.js +10 -1
  152. package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
  153. package/lib/network/peers/utils/prioritizePeers.d.ts +19 -7
  154. package/lib/network/peers/utils/prioritizePeers.js +42 -6
  155. package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
  156. package/lib/network/processor/extractSlotRootFns.js +8 -1
  157. package/lib/network/processor/extractSlotRootFns.js.map +1 -1
  158. package/lib/network/processor/gossipHandlers.js +165 -16
  159. package/lib/network/processor/gossipHandlers.js.map +1 -1
  160. package/lib/network/processor/gossipQueues/index.js +5 -0
  161. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  162. package/lib/network/processor/index.js +1 -0
  163. package/lib/network/processor/index.js.map +1 -1
  164. package/lib/network/reqresp/ReqRespBeaconNode.d.ts +2 -2
  165. package/lib/network/reqresp/ReqRespBeaconNode.js +36 -14
  166. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  167. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.d.ts +24 -4
  168. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js +259 -20
  169. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js.map +1 -1
  170. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.d.ts +36 -6
  171. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js +283 -28
  172. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js.map +1 -1
  173. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts +1 -1
  174. package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
  175. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts +7 -0
  176. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +73 -0
  177. package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -0
  178. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.d.ts +6 -0
  179. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js +36 -0
  180. package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -0
  181. package/lib/network/reqresp/handlers/index.js +10 -0
  182. package/lib/network/reqresp/handlers/index.js.map +1 -1
  183. package/lib/network/reqresp/protocols.d.ts +4 -0
  184. package/lib/network/reqresp/protocols.js +20 -0
  185. package/lib/network/reqresp/protocols.js.map +1 -1
  186. package/lib/network/reqresp/rateLimit.js +10 -0
  187. package/lib/network/reqresp/rateLimit.js.map +1 -1
  188. package/lib/network/reqresp/score.js +3 -0
  189. package/lib/network/reqresp/score.js.map +1 -1
  190. package/lib/network/reqresp/types.d.ts +11 -4
  191. package/lib/network/reqresp/types.js +12 -3
  192. package/lib/network/reqresp/types.js.map +1 -1
  193. package/lib/network/statusCache.d.ts +5 -5
  194. package/lib/network/statusCache.js.map +1 -1
  195. package/lib/network/subnets/interface.d.ts +3 -0
  196. package/lib/network/subnets/interface.js +14 -1
  197. package/lib/network/subnets/interface.js.map +1 -1
  198. package/lib/network/subnets/syncnetsService.js +4 -5
  199. package/lib/network/subnets/syncnetsService.js.map +1 -1
  200. package/lib/node/nodejs.js +1 -0
  201. package/lib/node/nodejs.js.map +1 -1
  202. package/lib/sync/constants.d.ts +18 -3
  203. package/lib/sync/constants.js +21 -3
  204. package/lib/sync/constants.js.map +1 -1
  205. package/lib/sync/interface.d.ts +2 -2
  206. package/lib/sync/interface.js +1 -1
  207. package/lib/sync/interface.js.map +1 -1
  208. package/lib/sync/range/batch.d.ts +17 -2
  209. package/lib/sync/range/batch.js +39 -7
  210. package/lib/sync/range/batch.js.map +1 -1
  211. package/lib/sync/range/chain.d.ts +15 -1
  212. package/lib/sync/range/chain.js +124 -33
  213. package/lib/sync/range/chain.js.map +1 -1
  214. package/lib/sync/range/range.d.ts +3 -2
  215. package/lib/sync/range/range.js +9 -3
  216. package/lib/sync/range/range.js.map +1 -1
  217. package/lib/sync/range/utils/chainTarget.d.ts +5 -1
  218. package/lib/sync/range/utils/chainTarget.js +26 -1
  219. package/lib/sync/range/utils/chainTarget.js.map +1 -1
  220. package/lib/sync/range/utils/peerBalancer.d.ts +19 -5
  221. package/lib/sync/range/utils/peerBalancer.js +104 -10
  222. package/lib/sync/range/utils/peerBalancer.js.map +1 -1
  223. package/lib/sync/sync.js +1 -1
  224. package/lib/sync/sync.js.map +1 -1
  225. package/lib/sync/unknownBlock.d.ts +54 -5
  226. package/lib/sync/unknownBlock.js +324 -61
  227. package/lib/sync/unknownBlock.js.map +1 -1
  228. package/lib/sync/utils/remoteSyncType.d.ts +4 -4
  229. package/lib/sync/utils/remoteSyncType.js.map +1 -1
  230. package/lib/util/blobs.d.ts +16 -4
  231. package/lib/util/blobs.js +122 -5
  232. package/lib/util/blobs.js.map +1 -1
  233. package/lib/util/dataColumns.d.ts +137 -0
  234. package/lib/util/dataColumns.js +358 -0
  235. package/lib/util/dataColumns.js.map +1 -0
  236. package/lib/util/metadata.d.ts +5 -0
  237. package/lib/util/metadata.js +10 -0
  238. package/lib/util/metadata.js.map +1 -1
  239. package/lib/util/sszBytes.d.ts +1 -0
  240. package/lib/util/sszBytes.js +17 -0
  241. package/lib/util/sszBytes.js.map +1 -1
  242. package/package.json +16 -16
  243. package/lib/network/reqresp/handlers/status.d.ts +0 -4
  244. package/lib/network/reqresp/handlers/status.js +0 -11
  245. package/lib/network/reqresp/handlers/status.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/sync/interface.ts"],"names":[],"mappings":"AAuBA,MAAM,CAAN,IAAY,SASX;AATD,WAAY,SAAS;IACnB,oCAAoC;IACpC,gCAAmB,CAAA;IACnB,sEAAsE;IACtE,kDAAqC,CAAA;IACrC,gEAAgE;IAChE,wCAA2B,CAAA;IAC3B,kDAAkD;IAClD,8BAAiB,CAAA;AACnB,CAAC,EATW,SAAS,KAAT,SAAS,QASpB;AAED,6DAA6D;AAC7D,MAAM,CAAC,MAAM,eAAe,GAA+B;IACzD,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;IACtB,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,CAAC;IAC/B,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;IAC1B,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;CACtB,CAAC;AAuDF,MAAM,CAAN,IAAY,kBAKX;AALD,WAAY,kBAAkB;IAC5B,yCAAmB,CAAA;IACnB,2CAAqB,CAAA;IACrB,+CAAyB,CAAA;IACzB,+CAAyB,CAAA;AAC3B,CAAC,EALW,kBAAkB,KAAlB,kBAAkB,QAK7B;AAED,MAAM,CAAN,IAAY,gBAYX;AAZD,WAAY,gBAAgB;IAC1B;;OAEG;IACH,mDAA+B,CAAA;IAC/B;;OAEG;IACH,qDAAiC,CAAA;IAEjC,6DAAyC,CAAA;IACzC,mDAA+B,CAAA;AACjC,CAAC,EAZW,gBAAgB,KAAhB,gBAAgB,QAY3B"}
1
+ {"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/sync/interface.ts"],"names":[],"mappings":"AAuBA,MAAM,CAAN,IAAY,SASX;AATD,WAAY,SAAS;IACnB,oCAAoC;IACpC,gCAAmB,CAAA;IACnB,sEAAsE;IACtE,kDAAqC,CAAA;IACrC,gEAAgE;IAChE,wCAA2B,CAAA;IAC3B,kDAAkD;IAClD,8BAAiB,CAAA;AACnB,CAAC,EATW,SAAS,KAAT,SAAS,QASpB;AAED,6DAA6D;AAC7D,MAAM,CAAC,MAAM,eAAe,GAA+B;IACzD,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;IACtB,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,CAAC;IAC/B,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;IAC1B,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;CACtB,CAAC;AAuDF,MAAM,CAAN,IAAY,kBAKX;AALD,WAAY,kBAAkB;IAC5B,yCAAmB,CAAA;IACnB,2CAAqB,CAAA;IACrB,+CAAyB,CAAA;IACzB,+CAAyB,CAAA;AAC3B,CAAC,EALW,kBAAkB,KAAlB,kBAAkB,QAK7B;AAED,MAAM,CAAN,IAAY,gBAYX;AAZD,WAAY,gBAAgB;IAC1B;;OAEG;IACH,mDAA+B,CAAA;IAC/B;;OAEG;IACH,qDAAiC,CAAA;IAEjC,6DAAyC,CAAA;IACzC,iDAA6B,CAAA;AAC/B,CAAC,EAZW,gBAAgB,KAAhB,gBAAgB,QAY3B"}
@@ -2,6 +2,7 @@ import { ChainForkConfig } from "@lodestar/config";
2
2
  import { Epoch, RootHex, phase0 } from "@lodestar/types";
3
3
  import { LodestarError } from "@lodestar/utils";
4
4
  import { BlockInput } from "../../chain/blocks/types.js";
5
+ import { PartialDownload } from "../../network/reqresp/beaconBlocksMaybeBlobsByRange.js";
5
6
  import { PeerIdStr } from "../../util/peerId.js";
6
7
  /**
7
8
  * Current state of a batch
@@ -32,9 +33,11 @@ export type Attempt = {
32
33
  };
33
34
  export type BatchState = {
34
35
  status: BatchStatus.AwaitingDownload;
36
+ partialDownload: PartialDownload;
35
37
  } | {
36
38
  status: BatchStatus.Downloading;
37
39
  peer: PeerIdStr;
40
+ partialDownload: PartialDownload;
38
41
  } | {
39
42
  status: BatchStatus.AwaitingProcessing;
40
43
  peer: PeerIdStr;
@@ -50,6 +53,13 @@ export type BatchMetadata = {
50
53
  startEpoch: Epoch;
51
54
  status: BatchStatus;
52
55
  };
56
+ export type DownloadSuccessOutput = {
57
+ status: BatchStatus.AwaitingProcessing;
58
+ blocks: BlockInput[];
59
+ } | {
60
+ status: BatchStatus.AwaitingDownload;
61
+ pendingDataColumns: number[];
62
+ };
53
63
  /**
54
64
  * Batches are downloaded at the first block of the epoch.
55
65
  *
@@ -83,11 +93,15 @@ export declare class Batch {
83
93
  /**
84
94
  * AwaitingDownload -> Downloading
85
95
  */
86
- startDownloading(peer: PeerIdStr): void;
96
+ startDownloading(peer: PeerIdStr): PartialDownload;
87
97
  /**
88
98
  * Downloading -> AwaitingProcessing
99
+ * pendingDataColumns is null when a complete download is done, otherwise it contains the columns that are still pending
89
100
  */
90
- downloadingSuccess(blocks: BlockInput[]): void;
101
+ downloadingSuccess(downloadResult: {
102
+ blocks: BlockInput[];
103
+ pendingDataColumns: null | number[];
104
+ }): DownloadSuccessOutput;
91
105
  /**
92
106
  * Downloading -> AwaitingDownload
93
107
  */
@@ -112,6 +126,7 @@ export declare class Batch {
112
126
  * AwaitingValidation -> Done
113
127
  */
114
128
  validationSuccess(): Attempt;
129
+ isPostFulu(): boolean;
115
130
  private onExecutionEngineError;
116
131
  private onProcessingError;
117
132
  /** Helper to construct typed BatchError. Stack traces are correct as the error is thrown above */
@@ -1,3 +1,4 @@
1
+ import { ForkSeq } from "@lodestar/params";
1
2
  import { LodestarError } from "@lodestar/utils";
2
3
  import { BlockError, BlockErrorCode } from "../../chain/errors/index.js";
3
4
  import { MAX_BATCH_DOWNLOAD_ATTEMPTS, MAX_BATCH_PROCESSING_ATTEMPTS } from "../constants.js";
@@ -38,7 +39,7 @@ export var BatchStatus;
38
39
  export class Batch {
39
40
  constructor(startEpoch, config) {
40
41
  /** State of the batch. */
41
- this.state = { status: BatchStatus.AwaitingDownload };
42
+ this.state = { status: BatchStatus.AwaitingDownload, partialDownload: null };
42
43
  /** The `Attempts` that have been made and failed to send us this batch. */
43
44
  this.failedProcessingAttempts = [];
44
45
  /** The `Attempts` that have been made and failed because of execution malfunction. */
@@ -70,16 +71,43 @@ export class Batch {
70
71
  if (this.state.status !== BatchStatus.AwaitingDownload) {
71
72
  throw new BatchError(this.wrongStatusErrorType(BatchStatus.AwaitingDownload));
72
73
  }
73
- this.state = { status: BatchStatus.Downloading, peer };
74
+ const { partialDownload } = this.state;
75
+ this.state = { status: BatchStatus.Downloading, peer, partialDownload };
76
+ return partialDownload;
74
77
  }
75
78
  /**
76
79
  * Downloading -> AwaitingProcessing
80
+ * pendingDataColumns is null when a complete download is done, otherwise it contains the columns that are still pending
77
81
  */
78
- downloadingSuccess(blocks) {
82
+ downloadingSuccess(downloadResult) {
79
83
  if (this.state.status !== BatchStatus.Downloading) {
80
84
  throw new BatchError(this.wrongStatusErrorType(BatchStatus.Downloading));
81
85
  }
82
- this.state = { status: BatchStatus.AwaitingProcessing, peer: this.state.peer, blocks };
86
+ let updatedPendingDataColumns = this.state.partialDownload?.pendingDataColumns ?? null;
87
+ const { blocks, pendingDataColumns } = downloadResult;
88
+ if (updatedPendingDataColumns == null) {
89
+ // state pendingDataColumns is null as initial value, just update it to pendingDataColumns in this case
90
+ updatedPendingDataColumns = pendingDataColumns;
91
+ }
92
+ else {
93
+ updatedPendingDataColumns =
94
+ // pendingDataColumns = null means a complete download
95
+ pendingDataColumns == null
96
+ ? null
97
+ : // if not state pendingDataColumns should be reduced over time, see see https://github.com/ChainSafe/lodestar/issues/8036
98
+ updatedPendingDataColumns.filter((column) => pendingDataColumns.includes(column));
99
+ }
100
+ if (updatedPendingDataColumns === null) {
101
+ // complete download
102
+ this.state = { status: BatchStatus.AwaitingProcessing, peer: this.state.peer, blocks };
103
+ return { status: BatchStatus.AwaitingProcessing, blocks };
104
+ }
105
+ // partial download, track updatedPendingDataColumns in state
106
+ this.state = {
107
+ status: BatchStatus.AwaitingDownload,
108
+ partialDownload: blocks.length === 0 ? null : { blocks, pendingDataColumns: updatedPendingDataColumns },
109
+ };
110
+ return { status: BatchStatus.AwaitingDownload, pendingDataColumns: updatedPendingDataColumns };
83
111
  }
84
112
  /**
85
113
  * Downloading -> AwaitingDownload
@@ -92,7 +120,8 @@ export class Batch {
92
120
  if (this.failedDownloadAttempts.length > MAX_BATCH_DOWNLOAD_ATTEMPTS) {
93
121
  throw new BatchError(this.errorType({ code: BatchErrorCode.MAX_DOWNLOAD_ATTEMPTS }));
94
122
  }
95
- this.state = { status: BatchStatus.AwaitingDownload };
123
+ const { partialDownload } = this.state;
124
+ this.state = { status: BatchStatus.AwaitingDownload, partialDownload };
96
125
  }
97
126
  /**
98
127
  * AwaitingProcessing -> Processing
@@ -152,19 +181,22 @@ export class Batch {
152
181
  }
153
182
  return this.state.attempt;
154
183
  }
184
+ isPostFulu() {
185
+ return this.config.getForkSeq(this.request.startSlot) >= ForkSeq.fulu;
186
+ }
155
187
  onExecutionEngineError(attempt) {
156
188
  this.executionErrorAttempts.push(attempt);
157
189
  if (this.executionErrorAttempts.length > MAX_BATCH_PROCESSING_ATTEMPTS) {
158
190
  throw new BatchError(this.errorType({ code: BatchErrorCode.MAX_EXECUTION_ENGINE_ERROR_ATTEMPTS }));
159
191
  }
160
- this.state = { status: BatchStatus.AwaitingDownload };
192
+ this.state = { status: BatchStatus.AwaitingDownload, partialDownload: null };
161
193
  }
162
194
  onProcessingError(attempt) {
163
195
  this.failedProcessingAttempts.push(attempt);
164
196
  if (this.failedProcessingAttempts.length > MAX_BATCH_PROCESSING_ATTEMPTS) {
165
197
  throw new BatchError(this.errorType({ code: BatchErrorCode.MAX_PROCESSING_ATTEMPTS }));
166
198
  }
167
- this.state = { status: BatchStatus.AwaitingDownload };
199
+ this.state = { status: BatchStatus.AwaitingDownload, partialDownload: null };
168
200
  }
169
201
  /** Helper to construct typed BatchError. Stack traces are correct as the error is thrown above */
170
202
  errorType(type) {
@@ -1 +1 @@
1
- {"version":3,"file":"batch.js","sourceRoot":"","sources":["../../../src/sync/range/batch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"batch.js","sourceRoot":"","sources":["../../../src/sync/range/batch.ts"],"names":[],"mappings":"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"}
@@ -2,13 +2,19 @@ import { ChainForkConfig } from "@lodestar/config";
2
2
  import { Epoch, Root, Slot, phase0 } from "@lodestar/types";
3
3
  import { Logger } from "@lodestar/utils";
4
4
  import { BlockInput } from "../../chain/blocks/types.js";
5
+ import { Metrics } from "../../metrics/metrics.js";
5
6
  import { PeerAction } from "../../network/index.js";
7
+ import { PeerSyncMeta } from "../../network/peers/peersData.js";
8
+ import { PartialDownload } from "../../network/reqresp/beaconBlocksMaybeBlobsByRange.js";
9
+ import { CustodyConfig } from "../../util/dataColumns.js";
6
10
  import { PeerIdStr } from "../../util/peerId.js";
7
11
  import { RangeSyncType } from "../utils/remoteSyncType.js";
8
12
  import { BatchErrorCode, BatchMetadata } from "./batch.js";
9
13
  export type SyncChainModules = {
10
14
  config: ChainForkConfig;
15
+ custodyConfig: CustodyConfig;
11
16
  logger: Logger;
17
+ metrics: Metrics | null;
12
18
  };
13
19
  export type SyncChainFns = {
14
20
  /**
@@ -17,9 +23,14 @@ export type SyncChainFns = {
17
23
  */
18
24
  processChainSegment: (blocks: BlockInput[], syncType: RangeSyncType) => Promise<void>;
19
25
  /** Must download blocks, and validate their range */
20
- downloadBeaconBlocksByRange: (peer: PeerIdStr, request: phase0.BeaconBlocksByRangeRequest) => Promise<BlockInput[]>;
26
+ downloadBeaconBlocksByRange: (peer: PeerSyncMeta, request: phase0.BeaconBlocksByRangeRequest, partialDownload: PartialDownload, syncType: RangeSyncType) => Promise<{
27
+ blocks: BlockInput[];
28
+ pendingDataColumns: null | number[];
29
+ }>;
21
30
  /** Report peer for negative actions. Decouples from the full network instance */
22
31
  reportPeer: (peer: PeerIdStr, action: PeerAction, actionName: string) => void;
32
+ /** Gets current peer custodyColumns and earliestAvailableSlot */
33
+ getConnectedPeerSyncMeta: (peerId: string) => PeerSyncMeta;
23
34
  /** Hook called when Chain state completes */
24
35
  onEnd: (err: Error | null, target: ChainTarget | null) => void;
25
36
  };
@@ -77,6 +88,7 @@ export declare class SyncChain {
77
88
  private readonly processChainSegment;
78
89
  private readonly downloadBeaconBlocksByRange;
79
90
  private readonly reportPeer;
91
+ private readonly getConnectedPeerSyncMeta;
80
92
  /** AsyncIterable that guarantees processChainSegment is run only at once at anytime */
81
93
  private readonly batchProcessor;
82
94
  /** Sorted map of batches undergoing some kind of processing. */
@@ -84,6 +96,7 @@ export declare class SyncChain {
84
96
  private readonly peerset;
85
97
  private readonly logger;
86
98
  private readonly config;
99
+ private readonly custodyConfig;
87
100
  constructor(initialBatchEpoch: Epoch, initialTarget: ChainTarget, syncType: RangeSyncType, fns: SyncChainFns, modules: SyncChainModules);
88
101
  /**
89
102
  * Start syncing a new chain or an old one with an existing peer list
@@ -154,6 +167,7 @@ export declare class SyncChain {
154
167
  * Drops any batches previous to `newLatestValidatedEpoch` and updates the chain boundaries
155
168
  */
156
169
  private advanceChain;
170
+ private scrapeMetrics;
157
171
  }
158
172
  /**
159
173
  * Enforces that a report peer action is defined for all BatchErrorCode exhaustively.
@@ -1,11 +1,13 @@
1
+ import { ForkName, isForkPostFulu } from "@lodestar/params";
1
2
  import { ErrorAborted, toRootHex } from "@lodestar/utils";
2
3
  import { BlockInputType } from "../../chain/blocks/types.js";
3
4
  import { PeerAction, prettyPrintPeerIdStr } from "../../network/index.js";
4
5
  import { ItTrigger } from "../../util/itTrigger.js";
5
6
  import { wrapError } from "../../util/wrapError.js";
6
- import { BATCH_BUFFER_SIZE, EPOCHS_PER_BATCH } from "../constants.js";
7
+ import { BATCH_BUFFER_SIZE, EPOCHS_PER_BATCH, MAX_LOOK_AHEAD_EPOCHS } from "../constants.js";
8
+ import { RangeSyncType } from "../utils/remoteSyncType.js";
7
9
  import { Batch, BatchError, BatchErrorCode, BatchStatus } from "./batch.js";
8
- import { ChainPeersBalancer, batchStartEpochIsAfterSlot, computeMostCommonTarget, getBatchSlotRange, getNextBatchToProcess, isSyncChainDone, toArr, toBeDownloadedStartEpoch, validateBatchesStatus, } from "./utils/index.js";
10
+ import { ChainPeersBalancer, batchStartEpochIsAfterSlot, computeHighestTarget, getBatchSlotRange, getNextBatchToProcess, isSyncChainDone, toArr, toBeDownloadedStartEpoch, validateBatchesStatus, } from "./utils/index.js";
9
11
  export class SyncChainStartError extends Error {
10
12
  }
11
13
  export var SyncChainStatus;
@@ -15,6 +17,9 @@ export var SyncChainStatus;
15
17
  SyncChainStatus["Done"] = "Done";
16
18
  SyncChainStatus["Error"] = "Error";
17
19
  })(SyncChainStatus || (SyncChainStatus = {}));
20
+ // this global chain id is used to identify the chain over time, increase it every time a new chain is created
21
+ // a chain type could be Finalized or Head, so it should be appended with this id to make the log unique
22
+ let nextChainId = 0;
18
23
  /**
19
24
  * Dynamic target sync chain. Peers with multiple targets but with the same syncType are added
20
25
  * through the `addPeer()` hook.
@@ -32,6 +37,7 @@ export class SyncChain {
32
37
  /** Sorted map of batches undergoing some kind of processing. */
33
38
  this.batches = new Map();
34
39
  this.peerset = new Map();
40
+ const { config, custodyConfig, logger, metrics } = modules;
35
41
  this.firstBatchEpoch = initialBatchEpoch;
36
42
  this.lastEpochWithProcessBlocks = initialBatchEpoch;
37
43
  this.target = initialTarget;
@@ -39,9 +45,14 @@ export class SyncChain {
39
45
  this.processChainSegment = fns.processChainSegment;
40
46
  this.downloadBeaconBlocksByRange = fns.downloadBeaconBlocksByRange;
41
47
  this.reportPeer = fns.reportPeer;
42
- this.config = modules.config;
43
- this.logger = modules.logger;
44
- this.logId = `${syncType}`;
48
+ this.getConnectedPeerSyncMeta = fns.getConnectedPeerSyncMeta;
49
+ this.config = config;
50
+ this.custodyConfig = custodyConfig;
51
+ this.logger = logger;
52
+ this.logId = `${syncType}-${nextChainId++}`;
53
+ if (metrics) {
54
+ metrics.syncRange.headSyncPeers.addCollect(() => this.scrapeMetrics(metrics));
55
+ }
45
56
  // Trigger event on parent class
46
57
  this.sync().then(() => fns.onEnd(null, this.target), (e) => fns.onEnd(e, null));
47
58
  }
@@ -140,7 +151,7 @@ export class SyncChain {
140
151
  computeTarget() {
141
152
  if (this.peerset.size > 0) {
142
153
  const targets = Array.from(this.peerset.values());
143
- this.target = computeMostCommonTarget(targets);
154
+ this.target = computeHighestTarget(targets);
144
155
  }
145
156
  }
146
157
  /**
@@ -199,7 +210,7 @@ export class SyncChain {
199
210
  */
200
211
  triggerBatchDownloader() {
201
212
  try {
202
- this.requestBatches(Array.from(this.peerset.keys()));
213
+ this.requestBatches();
203
214
  }
204
215
  catch (e) {
205
216
  // bubble the error up to the main async iterable loop
@@ -210,11 +221,20 @@ export class SyncChain {
210
221
  * Attempts to request the next required batches from the peer pool if the chain is syncing.
211
222
  * It will exhaust the peer pool and left over batches until the batch buffer is reached.
212
223
  */
213
- requestBatches(peers) {
224
+ requestBatches() {
214
225
  if (this.status !== SyncChainStatus.Syncing) {
215
226
  return;
216
227
  }
217
- const peerBalancer = new ChainPeersBalancer(peers, toArr(this.batches));
228
+ const peersSyncInfo = [];
229
+ for (const [peerId, target] of this.peerset.entries()) {
230
+ try {
231
+ peersSyncInfo.push({ ...this.getConnectedPeerSyncMeta(peerId), target });
232
+ }
233
+ catch (e) {
234
+ this.logger.debug("Failed to get peer sync meta", { peerId }, e);
235
+ }
236
+ }
237
+ const peerBalancer = new ChainPeersBalancer(peersSyncInfo, toArr(this.batches), this.custodyConfig, this.syncType);
218
238
  // Retry download of existing batches
219
239
  for (const batch of this.batches.values()) {
220
240
  if (batch.state.status !== BatchStatus.AwaitingDownload) {
@@ -226,12 +246,15 @@ export class SyncChain {
226
246
  }
227
247
  }
228
248
  // find the next pending batch and request it from the peer
229
- for (const peer of peerBalancer.idlePeers()) {
230
- const batch = this.includeNextBatch();
231
- if (!batch) {
249
+ let batch = this.includeNextBatch();
250
+ while (batch != null) {
251
+ const peer = peerBalancer.idlePeerForBatch(batch);
252
+ if (!peer) {
253
+ // if there is no peer available, we stop requesting batches because next batches will have greater startEpoch with the same sampling groups
232
254
  break;
233
255
  }
234
256
  void this.sendBatch(batch, peer);
257
+ batch = this.includeNextBatch();
235
258
  }
236
259
  }
237
260
  /**
@@ -248,6 +271,13 @@ export class SyncChain {
248
271
  if (batchesInBuffer.length > BATCH_BUFFER_SIZE) {
249
272
  return null;
250
273
  }
274
+ // if last processed epoch is n, we don't want to request batches with epoch > n + MAX_LOOK_AHEAD_EPOCHS
275
+ // we should have enough batches to process in the buffer: n + 1, ..., n + MAX_LOOK_AHEAD_EPOCHS
276
+ // let's focus on redownloading these batches first because it may have to reach different peers to get enough sampled columns
277
+ if (batches.length > 0 &&
278
+ Math.max(...batches.map((b) => b.startEpoch)) >= this.lastEpochWithProcessBlocks + MAX_LOOK_AHEAD_EPOCHS) {
279
+ return null;
280
+ }
251
281
  // This line decides the starting epoch of the next batch. MUST ensure no duplicate batch for the same startEpoch
252
282
  const startEpoch = toBeDownloadedStartEpoch(batches, this.lastEpochWithProcessBlocks);
253
283
  // Don't request batches beyond the target head slot. The to-be-downloaded batch must be strictly after target.slot
@@ -266,33 +296,64 @@ export class SyncChain {
266
296
  * Requests the batch assigned to the given id from a given peer.
267
297
  */
268
298
  async sendBatch(batch, peer) {
299
+ this.logger.verbose("Downloading batch", {
300
+ id: this.logId,
301
+ ...batch.getMetadata(),
302
+ peer: prettyPrintPeerIdStr(peer.peerId),
303
+ });
269
304
  try {
270
- batch.startDownloading(peer);
305
+ const partialDownload = batch.startDownloading(peer.peerId);
271
306
  // wrapError ensures to never call both batch success() and batch error()
272
- const res = await wrapError(this.downloadBeaconBlocksByRange(peer, batch.request));
307
+ const res = await wrapError(this.downloadBeaconBlocksByRange(peer, batch.request, partialDownload, this.syncType));
273
308
  if (!res.err) {
274
- batch.downloadingSuccess(res.result);
275
- let hasPostDenebBlocks = false;
276
- const blobs = res.result.reduce((acc, blockInput) => {
277
- hasPostDenebBlocks ||= blockInput.type === BlockInputType.availableData;
278
- return hasPostDenebBlocks
279
- ? acc + (blockInput.type === BlockInputType.availableData ? blockInput.blockData.blobs.length : 0)
280
- : 0;
281
- }, 0);
282
- const downloadInfo = { blocks: res.result.length };
283
- if (hasPostDenebBlocks) {
284
- Object.assign(downloadInfo, { blobs });
309
+ const downloadSuccessOutput = batch.downloadingSuccess(res.result);
310
+ if (downloadSuccessOutput.status === BatchStatus.AwaitingProcessing) {
311
+ const blocks = downloadSuccessOutput.blocks;
312
+ let hasPostDenebBlocks = false;
313
+ const blobs = blocks.reduce((acc, blockInput) => {
314
+ hasPostDenebBlocks ||= blockInput.type === BlockInputType.availableData;
315
+ return hasPostDenebBlocks
316
+ ? acc +
317
+ (blockInput.type === BlockInputType.availableData &&
318
+ (blockInput.blockData.fork === ForkName.deneb || blockInput.blockData.fork === ForkName.electra)
319
+ ? blockInput.blockData.blobs.length
320
+ : 0)
321
+ : 0;
322
+ }, 0);
323
+ const dataColumns = blocks.reduce((acc, blockInput) => {
324
+ hasPostDenebBlocks ||= blockInput.type === BlockInputType.availableData;
325
+ return hasPostDenebBlocks
326
+ ? acc +
327
+ (blockInput.type === BlockInputType.availableData && isForkPostFulu(blockInput.blockData.fork)
328
+ ? blockInput.blockData.dataColumns.length
329
+ : 0)
330
+ : 0;
331
+ }, 0);
332
+ const downloadInfo = { blocks: blocks.length };
333
+ if (hasPostDenebBlocks) {
334
+ Object.assign(downloadInfo, { blobs, dataColumns });
335
+ }
336
+ this.logger.debug("Downloaded batch", {
337
+ id: this.logId,
338
+ ...batch.getMetadata(),
339
+ ...downloadInfo,
340
+ peer: prettyPrintPeerIdStr(peer.peerId),
341
+ });
342
+ this.triggerBatchProcessor();
343
+ }
344
+ else {
345
+ const pendingDataColumns = downloadSuccessOutput.pendingDataColumns.join(",");
346
+ this.logger.debug("Partially downloaded batch", {
347
+ id: this.logId,
348
+ ...batch.getMetadata(),
349
+ pendingDataColumns,
350
+ peer: peer.peerId,
351
+ });
352
+ // the flow will continue to call triggerBatchDownloader() below
285
353
  }
286
- this.logger.debug("Downloaded batch", {
287
- id: this.logId,
288
- ...batch.getMetadata(),
289
- ...downloadInfo,
290
- peer: prettyPrintPeerIdStr(peer),
291
- });
292
- this.triggerBatchProcessor();
293
354
  }
294
355
  else {
295
- this.logger.verbose("Batch download error", { id: this.logId, ...batch.getMetadata(), peer: prettyPrintPeerIdStr(peer) }, res.err);
356
+ this.logger.verbose("Batch download error", { id: this.logId, ...batch.getMetadata(), peer: prettyPrintPeerIdStr(peer.peerId) }, res.err);
296
357
  batch.downloadingError(); // Throws after MAX_DOWNLOAD_ATTEMPTS
297
358
  }
298
359
  // Preemptively request more blocks from peers whilst we process current blocks
@@ -372,6 +433,36 @@ export class SyncChain {
372
433
  }
373
434
  }
374
435
  this.lastEpochWithProcessBlocks = newLastEpochWithProcessBlocks;
436
+ this.logger.verbose("Advanced chain", {
437
+ id: this.logId,
438
+ lastEpochWithProcessBlocks: this.lastEpochWithProcessBlocks,
439
+ });
440
+ }
441
+ scrapeMetrics(metrics) {
442
+ const syncPeersMetric = this.syncType === RangeSyncType.Finalized
443
+ ? metrics.syncRange.finalizedSyncPeers
444
+ : metrics.syncRange.headSyncPeers;
445
+ const peersSyncMeta = new Map();
446
+ for (const peerId of this.peerset.keys()) {
447
+ try {
448
+ peersSyncMeta.set(peerId, this.getConnectedPeerSyncMeta(peerId));
449
+ }
450
+ catch (_) {
451
+ // ignore for metric as peer could be disconnected
452
+ }
453
+ }
454
+ const peersByColumnIndex = new Map();
455
+ for (const [columnIndex, column] of this.custodyConfig.sampledColumns.entries()) {
456
+ for (const { custodyGroups } of peersSyncMeta.values()) {
457
+ if (custodyGroups.includes(column)) {
458
+ peersByColumnIndex.set(columnIndex, (peersByColumnIndex.get(columnIndex) ?? 0) + 1);
459
+ }
460
+ }
461
+ }
462
+ for (let columnIndex = 0; columnIndex < this.custodyConfig.sampledColumns.length; columnIndex++) {
463
+ const peerCount = peersByColumnIndex.get(columnIndex) ?? 0;
464
+ syncPeersMetric.set({ columnIndex }, peerCount);
465
+ }
375
466
  }
376
467
  }
377
468
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"chain.js","sourceRoot":"","sources":["../../../src/sync/range/chain.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chain.js","sourceRoot":"","sources":["../../../src/sync/range/chain.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { EventEmitter } from "node:events";
2
2
  import { BeaconConfig } from "@lodestar/config";
3
- import { phase0 } from "@lodestar/types";
3
+ import { Status } from "@lodestar/types";
4
4
  import { Logger } from "@lodestar/utils";
5
5
  import { StrictEventEmitter } from "strict-event-emitter-types";
6
6
  import { IBeaconChain } from "../../chain/index.js";
@@ -85,7 +85,7 @@ export declare class RangeSync extends RangeSync_base {
85
85
  * A peer with a relevant STATUS message has been found, which also is advanced from us.
86
86
  * Add this peer to an existing chain or create a new one. The update the chains status.
87
87
  */
88
- addPeer(peerId: PeerIdStr, localStatus: phase0.Status, peerStatus: phase0.Status): void;
88
+ addPeer(peerId: PeerIdStr, localStatus: Status, peerStatus: Status): void;
89
89
  /**
90
90
  * Remove this peer from all head and finalized chains. A chain may become peer-empty and be dropped
91
91
  */
@@ -102,6 +102,7 @@ export declare class RangeSync extends RangeSync_base {
102
102
  private downloadBeaconBlocksByRange;
103
103
  /** Convenience method for `SyncChain` */
104
104
  private reportPeer;
105
+ private getConnectedPeerSyncMeta;
105
106
  /** Convenience method for `SyncChain` */
106
107
  private onSyncChainEnd;
107
108
  private addPeerOrCreateChain;
@@ -79,13 +79,16 @@ export class RangeSync extends EventEmitter {
79
79
  }
80
80
  };
81
81
  /** Convenience method for `SyncChain` */
82
- this.downloadBeaconBlocksByRange = async (peerId, request) => {
83
- return beaconBlocksMaybeBlobsByRange(this.config, this.network, peerId, request, this.chain.clock.currentEpoch);
82
+ this.downloadBeaconBlocksByRange = async (peer, request, partialDownload, syncType) => {
83
+ return beaconBlocksMaybeBlobsByRange(this.config, this.network, peer, request, this.chain.clock.currentEpoch, partialDownload, syncType, this.metrics, this.logger);
84
84
  };
85
85
  /** Convenience method for `SyncChain` */
86
86
  this.reportPeer = (peer, action, actionName) => {
87
87
  this.network.reportPeer(peer, action, actionName);
88
88
  };
89
+ this.getConnectedPeerSyncMeta = (peerId) => {
90
+ return this.network.getConnectedPeerSyncMeta(peerId);
91
+ };
89
92
  /** Convenience method for `SyncChain` */
90
93
  this.onSyncChainEnd = (err, target) => {
91
94
  this.update(this.chain.forkChoice.getFinalizedCheckpoint().epoch);
@@ -124,6 +127,7 @@ export class RangeSync extends EventEmitter {
124
127
  startEpoch,
125
128
  targetSlot: target.slot,
126
129
  targetRoot: toRootHex(target.root),
130
+ earliestAvailableSlot: peerStatus.earliestAvailableSlot ?? Infinity,
127
131
  });
128
132
  // If the peer existed in any other chain, remove it.
129
133
  // re-status'd peers can exist in multiple finalized chains, only one sync at a time
@@ -172,8 +176,9 @@ export class RangeSync extends EventEmitter {
172
176
  processChainSegment: this.processChainSegment,
173
177
  downloadBeaconBlocksByRange: this.downloadBeaconBlocksByRange,
174
178
  reportPeer: this.reportPeer,
179
+ getConnectedPeerSyncMeta: this.getConnectedPeerSyncMeta,
175
180
  onEnd: this.onSyncChainEnd,
176
- }, { config: this.config, logger: this.logger });
181
+ }, { config: this.config, logger: this.logger, custodyConfig: this.chain.custodyConfig, metrics: this.metrics });
177
182
  this.chains.set(syncType, syncChain);
178
183
  this.metrics?.syncRange.syncChainsEvents.inc({ syncType: syncChain.syncType, event: "add" });
179
184
  this.logger.debug("SyncChain added", {
@@ -181,6 +186,7 @@ export class RangeSync extends EventEmitter {
181
186
  firstEpoch: syncChain.firstBatchEpoch,
182
187
  targetSlot: syncChain.target.slot,
183
188
  targetRoot: toRootHex(syncChain.target.root),
189
+ peer,
184
190
  });
185
191
  }
186
192
  syncChain.addPeer(peer, target);