@lodestar/beacon-node 1.50.0-dev.55c1d0c0d1 → 1.50.0-dev.56f65bd6e9

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 (286) 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 -1
  3. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  4. package/lib/api/impl/beacon/index.d.ts.map +1 -1
  5. package/lib/api/impl/beacon/index.js +13 -0
  6. package/lib/api/impl/beacon/index.js.map +1 -1
  7. package/lib/api/impl/beacon/pool/index.js +4 -4
  8. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  9. package/lib/api/impl/beacon/state/index.d.ts.map +1 -1
  10. package/lib/api/impl/beacon/state/index.js +23 -3
  11. package/lib/api/impl/beacon/state/index.js.map +1 -1
  12. package/lib/api/impl/debug/index.d.ts.map +1 -1
  13. package/lib/api/impl/debug/index.js +26 -18
  14. package/lib/api/impl/debug/index.js.map +1 -1
  15. package/lib/api/impl/validator/index.d.ts +1 -0
  16. package/lib/api/impl/validator/index.d.ts.map +1 -1
  17. package/lib/api/impl/validator/index.js +23 -1
  18. package/lib/api/impl/validator/index.js.map +1 -1
  19. package/lib/chain/archiveStore/archiveStore.d.ts +6 -0
  20. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  21. package/lib/chain/archiveStore/archiveStore.js +18 -24
  22. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  23. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts +2 -2
  24. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +1 -1
  25. package/lib/chain/archiveStore/historicalState/getHistoricalState.js +5 -7
  26. package/lib/chain/archiveStore/historicalState/getHistoricalState.js.map +1 -1
  27. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js +1 -1
  28. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js.map +1 -1
  29. package/lib/chain/archiveStore/historicalState/types.d.ts +2 -2
  30. package/lib/chain/archiveStore/historicalState/types.d.ts.map +1 -1
  31. package/lib/chain/archiveStore/historicalState/worker.js +1 -1
  32. package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
  33. package/lib/chain/archiveStore/interface.d.ts +1 -1
  34. package/lib/chain/archiveStore/interface.d.ts.map +1 -1
  35. package/lib/chain/archiveStore/utils/pruneHistory.d.ts +4 -1
  36. package/lib/chain/archiveStore/utils/pruneHistory.d.ts.map +1 -1
  37. package/lib/chain/archiveStore/utils/pruneHistory.js +5 -3
  38. package/lib/chain/archiveStore/utils/pruneHistory.js.map +1 -1
  39. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  40. package/lib/chain/blocks/importBlock.js +11 -3
  41. package/lib/chain/blocks/importBlock.js.map +1 -1
  42. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +2 -1
  43. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts.map +1 -1
  44. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  45. package/lib/chain/blocks/verifyBlock.js +1 -1
  46. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  47. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts +2 -1
  48. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +1 -1
  49. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js +5 -4
  50. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js.map +1 -1
  51. package/lib/chain/chain.d.ts +9 -5
  52. package/lib/chain/chain.d.ts.map +1 -1
  53. package/lib/chain/chain.js +56 -21
  54. package/lib/chain/chain.js.map +1 -1
  55. package/lib/chain/emitter.d.ts +7 -1
  56. package/lib/chain/emitter.d.ts.map +1 -1
  57. package/lib/chain/emitter.js +5 -0
  58. package/lib/chain/emitter.js.map +1 -1
  59. package/lib/chain/errors/envelopeReconstructionError.d.ts +5 -0
  60. package/lib/chain/errors/envelopeReconstructionError.d.ts.map +1 -1
  61. package/lib/chain/errors/envelopeReconstructionError.js +2 -0
  62. package/lib/chain/errors/envelopeReconstructionError.js.map +1 -1
  63. package/lib/chain/errors/gossipValidation.d.ts +3 -1
  64. package/lib/chain/errors/gossipValidation.d.ts.map +1 -1
  65. package/lib/chain/errors/gossipValidation.js +2 -0
  66. package/lib/chain/errors/gossipValidation.js.map +1 -1
  67. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  68. package/lib/chain/forkChoice/index.js +2 -0
  69. package/lib/chain/forkChoice/index.js.map +1 -1
  70. package/lib/chain/initState.d.ts +2 -9
  71. package/lib/chain/initState.d.ts.map +1 -1
  72. package/lib/chain/initState.js +5 -38
  73. package/lib/chain/initState.js.map +1 -1
  74. package/lib/chain/interface.d.ts +3 -2
  75. package/lib/chain/interface.d.ts.map +1 -1
  76. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +4 -2
  77. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  78. package/lib/chain/opPools/aggregatedAttestationPool.js +30 -8
  79. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  80. package/lib/chain/opPools/opPool.d.ts +5 -4
  81. package/lib/chain/opPools/opPool.d.ts.map +1 -1
  82. package/lib/chain/opPools/opPool.js +62 -18
  83. package/lib/chain/opPools/opPool.js.map +1 -1
  84. package/lib/chain/opPools/proposerPreferencesPool.d.ts +4 -4
  85. package/lib/chain/opPools/proposerPreferencesPool.d.ts.map +1 -1
  86. package/lib/chain/opPools/proposerPreferencesPool.js +14 -11
  87. package/lib/chain/opPools/proposerPreferencesPool.js.map +1 -1
  88. package/lib/chain/opPools/utils.d.ts +4 -1
  89. package/lib/chain/opPools/utils.d.ts.map +1 -1
  90. package/lib/chain/opPools/utils.js +11 -1
  91. package/lib/chain/opPools/utils.js.map +1 -1
  92. package/lib/chain/options.d.ts +2 -1
  93. package/lib/chain/options.d.ts.map +1 -1
  94. package/lib/chain/options.js +1 -1
  95. package/lib/chain/options.js.map +1 -1
  96. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  97. package/lib/chain/prepareNextSlot.js +5 -2
  98. package/lib/chain/prepareNextSlot.js.map +1 -1
  99. package/lib/chain/produceBlock/computeNewStateRoot.js +1 -1
  100. package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
  101. package/lib/chain/produceBlock/produceBlockBody.d.ts +3 -1
  102. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  103. package/lib/chain/produceBlock/produceBlockBody.js +6 -2
  104. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  105. package/lib/chain/regen/regen.d.ts +2 -0
  106. package/lib/chain/regen/regen.d.ts.map +1 -1
  107. package/lib/chain/regen/regen.js +10 -4
  108. package/lib/chain/regen/regen.js.map +1 -1
  109. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +7 -0
  110. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
  111. package/lib/chain/seenCache/seenGossipBlockInput.js +21 -0
  112. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  113. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +9 -2
  114. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -1
  115. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +23 -13
  116. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -1
  117. package/lib/chain/shufflingCache.d.ts +1 -0
  118. package/lib/chain/shufflingCache.d.ts.map +1 -1
  119. package/lib/chain/shufflingCache.js +4 -0
  120. package/lib/chain/shufflingCache.js.map +1 -1
  121. package/lib/chain/validation/attesterSlashing.d.ts +4 -4
  122. package/lib/chain/validation/attesterSlashing.d.ts.map +1 -1
  123. package/lib/chain/validation/attesterSlashing.js +3 -0
  124. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  125. package/lib/chain/validation/proposerSlashing.d.ts +3 -3
  126. package/lib/chain/validation/proposerSlashing.d.ts.map +1 -1
  127. package/lib/chain/validation/proposerSlashing.js +3 -0
  128. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  129. package/lib/chain/validatorMonitor.d.ts +5 -1
  130. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  131. package/lib/chain/validatorMonitor.js +64 -54
  132. package/lib/chain/validatorMonitor.js.map +1 -1
  133. package/lib/db/beacon.d.ts +2 -0
  134. package/lib/db/beacon.d.ts.map +1 -1
  135. package/lib/db/beacon.js +5 -0
  136. package/lib/db/beacon.js.map +1 -1
  137. package/lib/db/buckets.d.ts +2 -1
  138. package/lib/db/buckets.d.ts.map +1 -1
  139. package/lib/db/buckets.js +1 -0
  140. package/lib/db/buckets.js.map +1 -1
  141. package/lib/db/interface.d.ts +2 -0
  142. package/lib/db/interface.d.ts.map +1 -1
  143. package/lib/db/repositories/blockArchiveIndex.d.ts +2 -2
  144. package/lib/db/repositories/blockArchiveIndex.d.ts.map +1 -1
  145. package/lib/db/repositories/earliestAvailableSlot.d.ts +11 -0
  146. package/lib/db/repositories/earliestAvailableSlot.d.ts.map +1 -0
  147. package/lib/db/repositories/earliestAvailableSlot.js +19 -0
  148. package/lib/db/repositories/earliestAvailableSlot.js.map +1 -0
  149. package/lib/db/repositories/proposerSlashing.d.ts +1 -0
  150. package/lib/db/repositories/proposerSlashing.d.ts.map +1 -1
  151. package/lib/db/repositories/proposerSlashing.js +5 -1
  152. package/lib/db/repositories/proposerSlashing.js.map +1 -1
  153. package/lib/execution/engine/disabled.d.ts +0 -2
  154. package/lib/execution/engine/disabled.d.ts.map +1 -1
  155. package/lib/execution/engine/disabled.js +0 -6
  156. package/lib/execution/engine/disabled.js.map +1 -1
  157. package/lib/execution/engine/http.d.ts +1 -3
  158. package/lib/execution/engine/http.d.ts.map +1 -1
  159. package/lib/execution/engine/http.js +2 -17
  160. package/lib/execution/engine/http.js.map +1 -1
  161. package/lib/execution/engine/interface.d.ts +2 -4
  162. package/lib/execution/engine/interface.d.ts.map +1 -1
  163. package/lib/execution/engine/mock.d.ts +0 -2
  164. package/lib/execution/engine/mock.d.ts.map +1 -1
  165. package/lib/execution/engine/mock.js +0 -8
  166. package/lib/execution/engine/mock.js.map +1 -1
  167. package/lib/execution/engine/types.d.ts +0 -8
  168. package/lib/execution/engine/types.d.ts.map +1 -1
  169. package/lib/execution/engine/types.js.map +1 -1
  170. package/lib/index.d.ts +1 -1
  171. package/lib/index.d.ts.map +1 -1
  172. package/lib/index.js +1 -1
  173. package/lib/index.js.map +1 -1
  174. package/lib/metrics/metrics/lodestar.d.ts +1 -0
  175. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  176. package/lib/metrics/metrics/lodestar.js +4 -0
  177. package/lib/metrics/metrics/lodestar.js.map +1 -1
  178. package/lib/metrics/metrics.d.ts +7 -3
  179. package/lib/metrics/metrics.d.ts.map +1 -1
  180. package/lib/metrics/metrics.js +4 -4
  181. package/lib/metrics/metrics.js.map +1 -1
  182. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  183. package/lib/network/processor/gossipHandlers.js +66 -67
  184. package/lib/network/processor/gossipHandlers.js.map +1 -1
  185. package/lib/network/processor/gossipValidatorFn.d.ts +7 -3
  186. package/lib/network/processor/gossipValidatorFn.d.ts.map +1 -1
  187. package/lib/network/processor/gossipValidatorFn.js +7 -3
  188. package/lib/network/processor/gossipValidatorFn.js.map +1 -1
  189. package/lib/network/processor/index.d.ts +9 -0
  190. package/lib/network/processor/index.d.ts.map +1 -1
  191. package/lib/network/processor/index.js +77 -10
  192. package/lib/network/processor/index.js.map +1 -1
  193. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.d.ts.map +1 -1
  194. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js +41 -26
  195. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js.map +1 -1
  196. package/lib/node/nodejs.d.ts +3 -1
  197. package/lib/node/nodejs.d.ts.map +1 -1
  198. package/lib/node/nodejs.js +27 -4
  199. package/lib/node/nodejs.js.map +1 -1
  200. package/lib/sync/range/batch.d.ts +11 -5
  201. package/lib/sync/range/batch.d.ts.map +1 -1
  202. package/lib/sync/range/batch.js +21 -17
  203. package/lib/sync/range/batch.js.map +1 -1
  204. package/lib/sync/range/chain.d.ts +4 -4
  205. package/lib/sync/range/chain.d.ts.map +1 -1
  206. package/lib/sync/range/chain.js +12 -6
  207. package/lib/sync/range/chain.js.map +1 -1
  208. package/lib/sync/range/range.d.ts.map +1 -1
  209. package/lib/sync/range/range.js +75 -29
  210. package/lib/sync/range/range.js.map +1 -1
  211. package/lib/sync/unknownBlock.d.ts +14 -7
  212. package/lib/sync/unknownBlock.d.ts.map +1 -1
  213. package/lib/sync/unknownBlock.js +132 -66
  214. package/lib/sync/unknownBlock.js.map +1 -1
  215. package/lib/sync/utils/downloadByRange.d.ts +38 -14
  216. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  217. package/lib/sync/utils/downloadByRange.js +84 -39
  218. package/lib/sync/utils/downloadByRange.js.map +1 -1
  219. package/lib/util/execution.d.ts +11 -11
  220. package/lib/util/execution.d.ts.map +1 -1
  221. package/lib/util/execution.js +6 -2
  222. package/lib/util/execution.js.map +1 -1
  223. package/package.json +17 -17
  224. package/src/api/impl/beacon/blocks/index.ts +7 -4
  225. package/src/api/impl/beacon/index.ts +15 -0
  226. package/src/api/impl/beacon/pool/index.ts +4 -4
  227. package/src/api/impl/beacon/state/index.ts +31 -3
  228. package/src/api/impl/debug/index.ts +28 -19
  229. package/src/api/impl/validator/index.ts +24 -2
  230. package/src/chain/archiveStore/archiveStore.ts +26 -26
  231. package/src/chain/archiveStore/historicalState/getHistoricalState.ts +5 -7
  232. package/src/chain/archiveStore/historicalState/historicalStateRegen.ts +1 -1
  233. package/src/chain/archiveStore/historicalState/types.ts +2 -2
  234. package/src/chain/archiveStore/historicalState/worker.ts +1 -2
  235. package/src/chain/archiveStore/interface.ts +1 -1
  236. package/src/chain/archiveStore/utils/pruneHistory.ts +9 -4
  237. package/src/chain/blocks/importBlock.ts +13 -3
  238. package/src/chain/blocks/payloadEnvelopeInput/types.ts +2 -1
  239. package/src/chain/blocks/verifyBlock.ts +1 -0
  240. package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +6 -3
  241. package/src/chain/chain.ts +76 -23
  242. package/src/chain/emitter.ts +7 -1
  243. package/src/chain/errors/envelopeReconstructionError.ts +3 -0
  244. package/src/chain/errors/gossipValidation.ts +2 -0
  245. package/src/chain/forkChoice/index.ts +2 -0
  246. package/src/chain/initState.ts +8 -60
  247. package/src/chain/interface.ts +3 -2
  248. package/src/chain/opPools/aggregatedAttestationPool.ts +34 -10
  249. package/src/chain/opPools/opPool.ts +91 -18
  250. package/src/chain/opPools/proposerPreferencesPool.ts +14 -10
  251. package/src/chain/opPools/utils.ts +31 -3
  252. package/src/chain/options.ts +3 -3
  253. package/src/chain/prepareNextSlot.ts +6 -3
  254. package/src/chain/produceBlock/computeNewStateRoot.ts +1 -1
  255. package/src/chain/produceBlock/produceBlockBody.ts +8 -1
  256. package/src/chain/regen/regen.ts +12 -4
  257. package/src/chain/seenCache/seenGossipBlockInput.ts +23 -0
  258. package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +31 -13
  259. package/src/chain/shufflingCache.ts +5 -0
  260. package/src/chain/validation/attesterSlashing.ts +7 -4
  261. package/src/chain/validation/proposerSlashing.ts +7 -4
  262. package/src/chain/validatorMonitor.ts +75 -57
  263. package/src/db/beacon.ts +5 -0
  264. package/src/db/buckets.ts +1 -0
  265. package/src/db/interface.ts +2 -0
  266. package/src/db/repositories/earliestAvailableSlot.ts +19 -0
  267. package/src/db/repositories/proposerSlashing.ts +6 -1
  268. package/src/execution/engine/disabled.ts +0 -8
  269. package/src/execution/engine/http.ts +1 -30
  270. package/src/execution/engine/interface.ts +2 -6
  271. package/src/execution/engine/mock.ts +1 -19
  272. package/src/execution/engine/types.ts +0 -10
  273. package/src/index.ts +1 -1
  274. package/src/metrics/metrics/lodestar.ts +4 -0
  275. package/src/metrics/metrics.ts +21 -6
  276. package/src/network/processor/gossipHandlers.ts +97 -80
  277. package/src/network/processor/gossipValidatorFn.ts +13 -3
  278. package/src/network/processor/index.ts +89 -10
  279. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRoot.ts +42 -28
  280. package/src/node/nodejs.ts +35 -3
  281. package/src/sync/range/batch.ts +25 -19
  282. package/src/sync/range/chain.ts +15 -8
  283. package/src/sync/range/range.ts +76 -30
  284. package/src/sync/unknownBlock.ts +156 -71
  285. package/src/sync/utils/downloadByRange.ts +123 -58
  286. package/src/util/execution.ts +17 -9
@@ -1 +1 @@
1
- {"version":3,"file":"range.js","sourceRoot":"","sources":["../../../src/sync/range/range.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"range.js","sourceRoot":"","sources":["../../../src/sync/range/range.ts"],"names":[],"mappings":"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"}
@@ -112,6 +112,9 @@ export declare class BlockInputSync {
112
112
  * Gather tip parent blocks with unknown parent and do a search for all of them
113
113
  */
114
114
  private triggerUnknownBlockSearch;
115
+ /**
116
+ * Returns false if there is no backoff left to wait for, in which case no retry is scheduled.
117
+ */
115
118
  private scheduleRateLimitBackoffRetry;
116
119
  private clearRateLimitBackoffTimer;
117
120
  /**
@@ -156,14 +159,18 @@ export declare class BlockInputSync {
156
159
  * Also verifies the received block root + returns the peer that provided the block for future downscoring.
157
160
  */
158
161
  private fetchBlockInput;
162
+ private removePendingPayloadAndDescendants;
159
163
  /**
160
- * Gets all descendant blocks of `block` recursively from `pendingBlocks`.
161
- * Assumes that if a parent block does not exist or is not processable, all descendant blocks are bad too.
162
- * Downscore all peers that have referenced any of this bad blocks. May report peers multiple times if they have
163
- * referenced more than one bad block.
164
+ * Same as `removeAndBanAllDescendants`, and downscores every peer that referenced or served a banned item, once per
165
+ * peer. Only call for consensus-layer invalidity, never for an INVALID execution payload:
166
+ * https://github.com/ethereum/consensus-specs/blob/master/specs/bellatrix/p2p-interface.md#the-reqresp-domain
164
167
  */
165
168
  private removeAndDownScoreAllDescendants;
166
- private removePendingPayloadAndDescendants;
169
+ /**
170
+ * Removes `block` and all its pending descendants and bans their roots in `knownBadBlocks`. Only call when the chain
171
+ * is provably bad: a banned root is never searched for again. Returns the banned items.
172
+ */
173
+ private removeAndBanAllDescendants;
167
174
  private removeAllDescendants;
168
175
  private getMaxDownloadAttempts;
169
176
  }
@@ -181,7 +188,7 @@ export declare class UnknownBlockPeerBalancer {
181
188
  /** Reset all tracked peer state, e.g. when BlockInputSync unsubscribes from the network. */
182
189
  clear(): void;
183
190
  onRateLimited(peerId: PeerIdStr, rateLimitedUntilMs: number): void;
184
- getNextRateLimitRetryAt(pendingColumns?: Set<number>, excludedPeers?: Set<PeerIdStr>): number | null;
191
+ getNextRateLimitRetryAt(pendingColumns?: Set<number>, excludedPeers?: Set<PeerIdStr>, now?: number): number | null;
185
192
  /**
186
193
  * called from fetchBlockInput()/fetchPayloadInput() with a block/payload root.
187
194
  * excludedPeers are the peers that we requested already so we don't want to try again
@@ -189,7 +196,7 @@ export declare class UnknownBlockPeerBalancer {
189
196
  * preferredPeers are the peers NetworkProcessor told us gossiped this root (from
190
197
  * pendingBlock/cacheItem.peerIdStrings). They are preferred but not required.
191
198
  */
192
- bestPeerForPendingColumns(pendingColumns: Set<number>, excludedPeers: Set<PeerIdStr>, preferredPeers?: Set<PeerIdStr>): PeerSyncMeta | null;
199
+ bestPeerForPendingColumns(pendingColumns: Set<number>, excludedPeers: Set<PeerIdStr>, preferredPeers?: Set<PeerIdStr>, now?: number): PeerSyncMeta | null;
193
200
  /**
194
201
  * Consumers don't need to call this method directly, it is called internally by bestPeer*() methods
195
202
  * make this public for testing
@@ -1 +1 @@
1
- {"version":3,"file":"unknownBlock.d.ts","sourceRoot":"","sources":["../../src/sync/unknownBlock.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"unknownBlock.d.ts","sourceRoot":"","sources":["../../src/sync/unknownBlock.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@ import { BlockError, BlockErrorCode } from "../chain/errors/index.js";
11
11
  import { ChainEvent } from "../chain/index.js";
12
12
  import { validateGloasBlockDataColumnSidecars } from "../chain/validation/dataColumnSidecar.js";
13
13
  import { validateGossipExecutionPayloadEnvelope } from "../chain/validation/executionPayloadEnvelope.js";
14
- import { NetworkEvent, prettyPrintPeerIdStr } from "../network/index.js";
14
+ import { NetworkEvent, PeerAction, prettyPrintPeerIdStr } from "../network/index.js";
15
15
  import { MAX_PEERS_PER_ROOT } from "../network/processor/constants.js";
16
16
  import { ClockEvent } from "../util/clock.js";
17
17
  import { shuffle } from "../util/shuffle.js";
@@ -34,8 +34,12 @@ const PRUNE_UNRESOLVED_SLOT_EPOCHS = 2;
34
34
  */
35
35
  export const PAYLOAD_POLL_INTERVAL_MS = 1_000;
36
36
  class UnknownBlockRateLimitedError extends Error {
37
- constructor(message) {
37
+ retryAt;
38
+ constructor(message,
39
+ /** Earliest backoff expiry seen when the download was deferred, it is retried once that has passed */
40
+ retryAt) {
38
41
  super(message);
42
+ this.retryAt = retryAt;
39
43
  this.name = "UnknownBlockRateLimitedError";
40
44
  }
41
45
  }
@@ -378,6 +382,10 @@ export class BlockInputSync {
378
382
  });
379
383
  };
380
384
  addByRootHex = (rootHex, peerIdStr) => {
385
+ if (this.knownBadBlocks.has(rootHex)) {
386
+ this.logger.debug("Ignoring known bad block root", { root: rootHex, peerIdStr: peerIdStr ?? "unknown peer" });
387
+ return false;
388
+ }
381
389
  let pendingBlock = this.pendingBlocks.get(rootHex);
382
390
  let added = false;
383
391
  if (!pendingBlock) {
@@ -409,6 +417,10 @@ export class BlockInputSync {
409
417
  return added;
410
418
  };
411
419
  addByBlockInput = (blockInput, peerIdStr) => {
420
+ if (this.knownBadBlocks.has(blockInput.blockRootHex)) {
421
+ this.logger.debug("Ignoring known bad block", { slot: blockInput.slot, root: blockInput.blockRootHex, peerIdStr });
422
+ return;
423
+ }
412
424
  let pendingBlock = this.pendingBlocks.get(blockInput.blockRootHex);
413
425
  // if entry is missing or was added via rootHex and now we have more complete information overwrite
414
426
  // the existing information with the more complete cache entry
@@ -441,6 +453,14 @@ export class BlockInputSync {
441
453
  }
442
454
  };
443
455
  addByPayloadRootHex = (rootHex, peerIdStr, slot) => {
456
+ if (this.knownBadBlocks.has(rootHex)) {
457
+ this.logger.debug("Ignoring payload for known bad block root", {
458
+ slot: slot ?? "unknown",
459
+ root: rootHex,
460
+ peerIdStr,
461
+ });
462
+ return false;
463
+ }
444
464
  let pendingPayload = this.pendingPayloads.get(rootHex);
445
465
  let added = false;
446
466
  if (!pendingPayload) {
@@ -499,6 +519,14 @@ export class BlockInputSync {
499
519
  return this.chain.seenPayloadEnvelopeInputCache.get(rootHex)?.slot;
500
520
  }
501
521
  addByPayloadInput = (payloadInput, peerIdStr, envelope) => {
522
+ if (this.knownBadBlocks.has(payloadInput.blockRootHex)) {
523
+ this.logger.debug("Ignoring payload input for known bad block root", {
524
+ slot: payloadInput.slot,
525
+ root: payloadInput.blockRootHex,
526
+ peerIdStr,
527
+ });
528
+ return;
529
+ }
502
530
  const pendingPayload = this.toPendingPayloadInput(payloadInput, this.pendingPayloads.get(payloadInput.blockRootHex), envelope);
503
531
  if (peerIdStr && pendingPayload.peerIdStrings.size < MAX_PEERS_PER_ROOT) {
504
532
  pendingPayload.peerIdStrings.add(peerIdStr);
@@ -552,6 +580,7 @@ export class BlockInputSync {
552
580
  if (this.chain.forkChoice.getBlockHexAndBlockHash(parentRootHex, parentBlockHashHex) !== null) {
553
581
  return { kind: "ready" };
554
582
  }
583
+ // The parent's payload is known but does not match `parentBlockHashHex`
555
584
  if (this.chain.forkChoice.hasPayloadHexUnsafe(parentRootHex)) {
556
585
  return { kind: "invalidParentPayload", parentRootHex, parentBlockHashHex };
557
586
  }
@@ -693,21 +722,25 @@ export class BlockInputSync {
693
722
  this.triggerUnknownBlockSearch();
694
723
  }
695
724
  };
725
+ /**
726
+ * Returns false if there is no backoff left to wait for, in which case no retry is scheduled.
727
+ */
696
728
  scheduleRateLimitBackoffRetry() {
697
729
  this.clearRateLimitBackoffTimer();
698
730
  if (!this.subscribedToNetworkEvents || (this.pendingBlocks.size === 0 && this.pendingPayloads.size === 0)) {
699
- return;
731
+ return false;
700
732
  }
701
733
  const now = Date.now();
702
734
  const retryAt = this.peerBalancer.getNextRateLimitRetryAt();
703
735
  if (retryAt === null) {
704
- return;
736
+ return false;
705
737
  }
706
738
  this.rateLimitBackoffTimeout = setTimeout(() => {
707
739
  this.rateLimitBackoffTimeout = undefined;
708
740
  this.triggerUnknownBlockSearch();
709
741
  this.scheduleRateLimitBackoffRetry();
710
742
  }, Math.max(0, retryAt - now));
743
+ return true;
711
744
  }
712
745
  clearRateLimitBackoffTimer() {
713
746
  if (this.rateLimitBackoffTimeout !== undefined) {
@@ -882,7 +915,8 @@ export class BlockInputSync {
882
915
  }
883
916
  else if (blockSlot <= finalizedSlot) {
884
917
  // the common ancestor of the downloading chain and canonical chain should be at least the finalized slot and
885
- // we should found it through forkchoice. If not, we should penalize all peers sending us this block chain
918
+ // we should found it through forkchoice. If not, drop the chain without penalizing peers because pending entries are
919
+ // block retained on failed download, so finalization can pass the block while it is still pending
886
920
  // 0 - 1 - ... - n - finalizedSlot
887
921
  // \
888
922
  // parent 1 - parent 2 - ... - unknownParent block
@@ -890,7 +924,7 @@ export class BlockInputSync {
890
924
  ...logCtx2,
891
925
  finalizedSlot,
892
926
  });
893
- this.removeAndDownScoreAllDescendants(block, DroppedItemReason.belowFinalized);
927
+ this.removeAllDescendants(block, DroppedItemReason.belowFinalized);
894
928
  }
895
929
  else {
896
930
  this.onUnknownBlockRoot({ rootHex: pending.blockInput.parentRootHex, source: BlockInputSource.byRoot });
@@ -903,7 +937,11 @@ export class BlockInputSync {
903
937
  pendingBlock.status = PendingBlockInputStatus.pending;
904
938
  }
905
939
  this.logger.debug("Deferring unknown block download due to peer rate limit", logCtx, res.err);
906
- this.scheduleRateLimitBackoffRetry();
940
+ if (!this.scheduleRateLimitBackoffRetry() || res.err.retryAt <= Date.now()) {
941
+ // The backoff this download waited for expired in the meantime, a timer is only armed if another
942
+ // peer is still in backoff and would retry it later than needed
943
+ this.triggerUnknownBlockSearch();
944
+ }
907
945
  return;
908
946
  }
909
947
  this.metrics?.blockInputSync.downloadedBlocksError.inc();
@@ -1009,14 +1047,17 @@ export class BlockInputSync {
1009
1047
  this.removeAllDescendants(pendingBlock, DroppedItemReason.elError, DroppedItemReason.elError);
1010
1048
  break;
1011
1049
  case BlockErrorCode.EXECUTION_ENGINE_INVALID:
1012
- // the peer served a bad block
1050
+ // Ban but do not downscore: optimistic-sync peers may forward and serve blocks whose payload is later
1051
+ // rejected by the execution engine. Per the spec, an INVALID execution payload SHOULD NOT cause a peer
1052
+ // to be down-scored or disconnected, only consensus-layer invalidity MAY.
1053
+ // https://github.com/ethereum/consensus-specs/blob/master/specs/bellatrix/p2p-interface.md#the-reqresp-domain
1013
1054
  this.logger.debug("Execution engine rejected block from unknown parent sync", errorData, res.err);
1014
- this.removeAndDownScoreAllDescendants(pendingBlock, DroppedItemReason.elInvalid);
1055
+ this.removeAndBanAllDescendants(pendingBlock, DroppedItemReason.elInvalid);
1015
1056
  break;
1016
1057
  default:
1017
1058
  // Block is not correct with respect to our chain. Log error loudly
1018
1059
  this.logger.debug("Error processing block from unknown parent sync", errorData, res.err);
1019
- this.removeAndDownScoreAllDescendants(pendingBlock, DroppedItemReason.invalidBlock);
1060
+ this.removeAllDescendants(pendingBlock, DroppedItemReason.invalidBlock);
1020
1061
  }
1021
1062
  }
1022
1063
  // Probably a queue error or something unwanted happened, mark as pending to try again latter
@@ -1138,6 +1179,12 @@ export class BlockInputSync {
1138
1179
  if (!isPendingPayloadEnvelope(payload)) {
1139
1180
  payload.status = PendingPayloadInputStatus.pending;
1140
1181
  }
1182
+ if (res.err instanceof UnknownBlockRateLimitedError &&
1183
+ (!this.scheduleRateLimitBackoffRetry() || res.err.retryAt <= Date.now())) {
1184
+ // The backoff this download waited for expired in the meantime, a timer is only armed if another
1185
+ // peer is still in backoff and would retry it later than needed
1186
+ this.triggerUnknownBlockSearch();
1187
+ }
1141
1188
  }
1142
1189
  async processPayload(pendingPayload) {
1143
1190
  const rootHex = pendingPayload.payloadInput.blockRootHex;
@@ -1191,18 +1238,21 @@ export class BlockInputSync {
1191
1238
  this.logger.debug("Execution engine error while processing payload from unknown sync", logCtx, res.err);
1192
1239
  pendingPayload.status = PendingPayloadInputStatus.downloaded;
1193
1240
  break;
1241
+ // The invalid envelope is evicted from the seen cache in the cases below, otherwise the next
1242
+ // attempt would reuse it instead of fetching another envelope from peers
1194
1243
  case PayloadErrorCode.EXECUTION_ENGINE_INVALID:
1195
1244
  this.logger.debug("Error processing payload from unknown sync", logCtx, res.err);
1245
+ this.chain.seenPayloadEnvelopeInputCache.removeInvalid(pendingPayload.payloadInput);
1196
1246
  this.removePendingPayloadAndDescendants(rootHex, DroppedItemReason.elInvalid);
1197
1247
  break;
1198
1248
  case PayloadErrorCode.ENVELOPE_VERIFICATION_ERROR:
1199
1249
  this.logger.debug("Error processing payload from unknown sync", logCtx, res.err);
1250
+ this.chain.seenPayloadEnvelopeInputCache.removeInvalid(pendingPayload.payloadInput);
1200
1251
  this.removePendingPayloadAndDescendants(rootHex, DroppedItemReason.invalidEnvelope);
1201
1252
  break;
1202
1253
  case PayloadErrorCode.INVALID_SIGNATURE:
1203
- // TODO GLOAS: Decide how invalid payload inputs should eventually leave memory without
1204
- // reintroducing envelope replacement / recreation flows.
1205
1254
  this.logger.debug("Error processing payload from unknown sync", logCtx, res.err);
1255
+ this.chain.seenPayloadEnvelopeInputCache.removeInvalid(pendingPayload.payloadInput);
1206
1256
  this.removePendingPayloadAndDescendants(rootHex, DroppedItemReason.invalidSignature);
1207
1257
  break;
1208
1258
  default:
@@ -1240,11 +1290,14 @@ export class BlockInputSync {
1240
1290
  const pendingColumns = payloadInput?.hasAllData()
1241
1291
  ? new Set()
1242
1292
  : new Set(payloadInput?.getMissingSampledColumnMeta().missing ?? []);
1293
+ // Same `now` for both calls, a backoff expiring in between would be reported as no peer available
1294
+ const now = Date.now();
1243
1295
  // prefer peers that gossiped this payload root to us (#9923)
1244
- const peerMeta = this.peerBalancer.bestPeerForPendingColumns(pendingColumns, excludedPeers, cacheItem.peerIdStrings);
1296
+ const peerMeta = this.peerBalancer.bestPeerForPendingColumns(pendingColumns, excludedPeers, cacheItem.peerIdStrings, now);
1245
1297
  if (peerMeta === null) {
1246
- if (this.peerBalancer.getNextRateLimitRetryAt(pendingColumns, excludedPeers) !== null) {
1247
- throw new UnknownBlockRateLimitedError(`Error fetching payload by root slot=${slot} root=${rootHex} after ${i}: peers with needed columns are rate-limited`);
1298
+ const retryAt = this.peerBalancer.getNextRateLimitRetryAt(pendingColumns, excludedPeers, now);
1299
+ if (retryAt !== null) {
1300
+ throw new UnknownBlockRateLimitedError(`Error fetching payload by root slot=${slot} root=${rootHex} after ${i}: peers with needed columns are rate-limited`, retryAt);
1248
1301
  }
1249
1302
  const reason = pendingColumns.size > 0
1250
1303
  ? `cannot find peer with needed columns=${prettyPrintIndices(Array.from(pendingColumns))}`
@@ -1254,10 +1307,10 @@ export class BlockInputSync {
1254
1307
  throw Error(`Error fetching payload by root slot=${slot} root=${rootHex} after ${i}: ${reason}`);
1255
1308
  }
1256
1309
  const { peerId, client: peerClient } = peerMeta;
1257
- cacheItem.peerIdStrings.add(peerId);
1258
1310
  try {
1259
1311
  if (!envelope) {
1260
1312
  envelope = await this.fetchExecutionPayloadEnvelope(peerId, blockRoot, rootHex);
1313
+ cacheItem.peerIdStrings.add(peerId);
1261
1314
  const slotWasUnknown = typeof slot !== "number";
1262
1315
  slot = envelope.message.payload.slotNumber;
1263
1316
  if (slotWasUnknown) {
@@ -1292,6 +1345,8 @@ export class BlockInputSync {
1292
1345
  const missing = pendingPayload.payloadInput.getMissingSampledColumnMeta().missing;
1293
1346
  if (missing.length > 0) {
1294
1347
  const columnSidecars = await this.fetchPayloadColumns(peerMeta, pendingPayload.payloadInput, missing);
1348
+ // toPendingPayloadInput copied cacheItem's set, so add to the object that is carried forward
1349
+ pendingPayload.peerIdStrings.add(peerId);
1295
1350
  const seenTimestampSec = Date.now() / 1000;
1296
1351
  for (const columnSidecar of columnSidecars) {
1297
1352
  if (pendingPayload.payloadInput.hasColumn(columnSidecar.index)) {
@@ -1356,8 +1411,9 @@ export class BlockInputSync {
1356
1411
  }
1357
1412
  this.metrics?.blockInputSync.payloadFetchTime.observe({ result: FetchResult.FailureMaxAttempts }, Date.now() / 1000 - fetchStartSec);
1358
1413
  this.metrics?.blockInputSync.payloadFetchPeers.set({ result: FetchResult.FailureMaxAttempts }, i - 1);
1359
- if (deferredByRateLimit && this.peerBalancer.getNextRateLimitRetryAt() !== null) {
1360
- throw new UnknownBlockRateLimitedError(`Error fetching payload with slot=${slot} root=${rootHex} after ${i - 1} attempts: peers are rate-limited`);
1414
+ const retryAt = deferredByRateLimit ? this.peerBalancer.getNextRateLimitRetryAt() : null;
1415
+ if (retryAt !== null) {
1416
+ throw new UnknownBlockRateLimitedError(`Error fetching payload with slot=${slot} root=${rootHex} after ${i - 1} attempts: peers are rate-limited`, retryAt);
1361
1417
  }
1362
1418
  throw Error(`Error fetching payload with slot=${slot} root=${rootHex} after ${i - 1} attempts.`);
1363
1419
  }
@@ -1420,11 +1476,14 @@ export class BlockInputSync {
1420
1476
  const pendingColumns = isPendingBlockInput(cacheItem) && isBlockInputColumns(cacheItem.blockInput)
1421
1477
  ? new Set(cacheItem.blockInput.getMissingSampledColumnMeta().missing)
1422
1478
  : defaultPendingColumns;
1479
+ // Same `now` for both calls, a backoff expiring in between would be reported as no peer available
1480
+ const now = Date.now();
1423
1481
  // prefer peers that gossiped this block root to us (#9923)
1424
- const peerMeta = this.peerBalancer.bestPeerForPendingColumns(pendingColumns, excludedPeers, cacheItem.peerIdStrings);
1482
+ const peerMeta = this.peerBalancer.bestPeerForPendingColumns(pendingColumns, excludedPeers, cacheItem.peerIdStrings, now);
1425
1483
  if (peerMeta === null) {
1426
- if (this.peerBalancer.getNextRateLimitRetryAt(pendingColumns, excludedPeers) !== null) {
1427
- throw new UnknownBlockRateLimitedError(`Error fetching UnknownBlockRoot slot=${slot} root=${rootHex} after ${i}: peers with needed columns are rate-limited`);
1484
+ const retryAt = this.peerBalancer.getNextRateLimitRetryAt(pendingColumns, excludedPeers, now);
1485
+ if (retryAt !== null) {
1486
+ throw new UnknownBlockRateLimitedError(`Error fetching UnknownBlockRoot slot=${slot} root=${rootHex} after ${i}: peers with needed columns are rate-limited`, retryAt);
1428
1487
  }
1429
1488
  // no more peer with needed columns to try, throw error
1430
1489
  const message = `Error fetching UnknownBlockRoot slot=${slot} root=${rootHex} after ${i}: cannot find peer with needed columns=${prettyPrintIndices(Array.from(pendingColumns))}`;
@@ -1433,7 +1492,6 @@ export class BlockInputSync {
1433
1492
  throw Error(message);
1434
1493
  }
1435
1494
  const { peerId, client: peerClient } = peerMeta;
1436
- cacheItem.peerIdStrings.add(peerId);
1437
1495
  try {
1438
1496
  const downloadResult = await downloadByRoot({
1439
1497
  config: this.config,
@@ -1444,6 +1502,7 @@ export class BlockInputSync {
1444
1502
  cacheItem,
1445
1503
  });
1446
1504
  cacheItem = downloadResult.result;
1505
+ cacheItem.peerIdStrings.add(peerId);
1447
1506
  if (slot === undefined) {
1448
1507
  slot = cacheItem.blockInput.slot;
1449
1508
  // we were not able to observe the time into slot when starting the fetch, do it now
@@ -1520,8 +1579,9 @@ export class BlockInputSync {
1520
1579
  }
1521
1580
  } // end while loop over peers
1522
1581
  const message = `Error fetching BlockInput with slot=${slot} root=${rootHex} after ${i - 1} attempts.`;
1523
- if (deferredByRateLimit && this.peerBalancer.getNextRateLimitRetryAt() !== null) {
1524
- throw new UnknownBlockRateLimitedError(`${message} Peers are rate-limited.`);
1582
+ const retryAt = deferredByRateLimit ? this.peerBalancer.getNextRateLimitRetryAt() : null;
1583
+ if (retryAt !== null) {
1584
+ throw new UnknownBlockRateLimitedError(`${message} Peers are rate-limited.`, retryAt);
1525
1585
  }
1526
1586
  if (!isPendingBlockInput(cacheItem)) {
1527
1587
  throw Error(`${message} No block and no data was found.`);
@@ -1545,41 +1605,8 @@ export class BlockInputSync {
1545
1605
  this.metrics?.blockInputSync.fetchPeers.set({ result: FetchResult.FailureMaxAttempts }, i - 1);
1546
1606
  throw Error(message);
1547
1607
  }
1548
- /**
1549
- * Gets all descendant blocks of `block` recursively from `pendingBlocks`.
1550
- * Assumes that if a parent block does not exist or is not processable, all descendant blocks are bad too.
1551
- * Downscore all peers that have referenced any of this bad blocks. May report peers multiple times if they have
1552
- * referenced more than one bad block.
1553
- */
1554
- removeAndDownScoreAllDescendants(block, headReason) {
1555
- // Get all blocks that are a descendant of this one
1556
- const badPendingBlocks = this.removeAllDescendants(block, headReason, DroppedItemReason.invalidParent);
1557
- // just console log and do not penalize on pending/bad blocks for debugging
1558
- // console.log("removeAndDownscoreAllDescendants", {block});
1559
- for (const block of badPendingBlocks) {
1560
- //
1561
- // TODO(fulu): why is this commented out here?
1562
- //
1563
- // this.knownBadBlocks.add(block.blockRootHex);
1564
- // for (const peerIdStr of block.peerIdStrings) {
1565
- // // TODO: Refactor peerRpcScores to work with peerIdStr only
1566
- // this.network.reportPeer(peerIdStr, PeerAction.LowToleranceError, "BadBlockByRoot");
1567
- // }
1568
- this.logger.debug("ignored Banning unknown block", {
1569
- slot: getBlockInputSyncCacheItemSlot(block),
1570
- root: getBlockInputSyncCacheItemRootHex(block),
1571
- peerIdStrings: Array.from(block.peerIdStrings)
1572
- .map((id) => prettyPrintPeerIdStr(id))
1573
- .join(","),
1574
- });
1575
- }
1576
- // Prune knownBadBlocks
1577
- pruneSetToMax(this.knownBadBlocks, MAX_KNOWN_BAD_BLOCKS);
1578
- }
1579
1608
  // Once a parent payload is invalid, every descendant waiting on that payload lineage becomes unrecoverable too.
1580
1609
  removePendingPayloadAndDescendants(rootHex, headReason) {
1581
- // Keep PayloadEnvelopeInput resident in the seen cache. importBlock() owns that object and
1582
- // later validation/finalization logic decides when it can leave memory.
1583
1610
  if (this.pendingPayloads.delete(rootHex)) {
1584
1611
  this.metrics?.blockInputSync.removedPayloads.inc({ reason: headReason }, 1);
1585
1612
  }
@@ -1600,9 +1627,50 @@ export class BlockInputSync {
1600
1627
  });
1601
1628
  }
1602
1629
  }
1630
+ /**
1631
+ * Same as `removeAndBanAllDescendants`, and downscores every peer that referenced or served a banned item, once per
1632
+ * peer. Only call for consensus-layer invalidity, never for an INVALID execution payload:
1633
+ * https://github.com/ethereum/consensus-specs/blob/master/specs/bellatrix/p2p-interface.md#the-reqresp-domain
1634
+ */
1635
+ removeAndDownScoreAllDescendants(block, headReason) {
1636
+ const peersToReport = new Set();
1637
+ for (const bannedBlock of this.removeAndBanAllDescendants(block, headReason)) {
1638
+ for (const peerIdStr of bannedBlock.peerIdStrings) {
1639
+ peersToReport.add(peerIdStr);
1640
+ }
1641
+ }
1642
+ for (const peerIdStr of peersToReport) {
1643
+ this.network.reportPeer(peerIdStr, PeerAction.LowToleranceError, headReason);
1644
+ }
1645
+ }
1646
+ /**
1647
+ * Removes `block` and all its pending descendants and bans their roots in `knownBadBlocks`. Only call when the chain
1648
+ * is provably bad: a banned root is never searched for again. Returns the banned items.
1649
+ */
1650
+ removeAndBanAllDescendants(block, headReason) {
1651
+ const bannedBlocks = [];
1652
+ for (const badBlock of this.removeAllDescendants(block, headReason, DroppedItemReason.invalidParent)) {
1653
+ const rootHex = getBlockInputSyncCacheItemRootHex(badBlock);
1654
+ // a gossip import may race a failing sync path, never ban a root fork choice has imported
1655
+ if (this.chain.forkChoice.hasBlockHex(rootHex)) {
1656
+ continue;
1657
+ }
1658
+ this.knownBadBlocks.add(rootHex);
1659
+ bannedBlocks.push(badBlock);
1660
+ this.logger.debug("Banning unknown block", {
1661
+ slot: getBlockInputSyncCacheItemSlot(badBlock),
1662
+ root: rootHex,
1663
+ reason: headReason,
1664
+ peerIdStrings: Array.from(badBlock.peerIdStrings)
1665
+ .map((id) => prettyPrintPeerIdStr(id))
1666
+ .join(","),
1667
+ });
1668
+ }
1669
+ pruneSetToMax(this.knownBadBlocks, MAX_KNOWN_BAD_BLOCKS);
1670
+ return bannedBlocks;
1671
+ }
1603
1672
  removeAllDescendants(block, headReason, descendantReason = DroppedItemReason.invalidParent) {
1604
1673
  const rootHex = getBlockInputSyncCacheItemRootHex(block);
1605
- const slot = getBlockInputSyncCacheItemSlot(block);
1606
1674
  // Get all blocks that are a descendant of this one (index 0 is the head item itself)
1607
1675
  const badPendingBlocks = [block, ...getAllDescendantBlocks(rootHex, this.pendingBlocks)];
1608
1676
  for (const [i, block] of badPendingBlocks.entries()) {
@@ -1618,8 +1686,8 @@ export class BlockInputSync {
1618
1686
  // Keep PayloadEnvelopeInput resident in the seen cache for consistency with the
1619
1687
  // importBlock()-owned lifecycle.
1620
1688
  this.logger.debug("Removing bad/unknown/incomplete BlockInputSyncCacheItem", {
1621
- slot,
1622
- blockRoot: rootHex,
1689
+ slot: getBlockInputSyncCacheItemSlot(block),
1690
+ root: rootHex,
1623
1691
  });
1624
1692
  }
1625
1693
  return badPendingBlocks;
@@ -1666,8 +1734,7 @@ export class UnknownBlockPeerBalancer {
1666
1734
  onRateLimited(peerId, rateLimitedUntilMs) {
1667
1735
  this.rateLimitedUntilByPeer.set(peerId, rateLimitedUntilMs);
1668
1736
  }
1669
- getNextRateLimitRetryAt(pendingColumns, excludedPeers) {
1670
- const now = Date.now();
1737
+ getNextRateLimitRetryAt(pendingColumns, excludedPeers, now = Date.now()) {
1671
1738
  let retryAt = null;
1672
1739
  for (const [peerId, rateLimitedUntil] of this.rateLimitedUntilByPeer.entries()) {
1673
1740
  if (rateLimitedUntil <= now) {
@@ -1696,8 +1763,8 @@ export class UnknownBlockPeerBalancer {
1696
1763
  * preferredPeers are the peers NetworkProcessor told us gossiped this root (from
1697
1764
  * pendingBlock/cacheItem.peerIdStrings). They are preferred but not required.
1698
1765
  */
1699
- bestPeerForPendingColumns(pendingColumns, excludedPeers, preferredPeers) {
1700
- const eligiblePeers = this.filterPeers(pendingColumns, excludedPeers);
1766
+ bestPeerForPendingColumns(pendingColumns, excludedPeers, preferredPeers, now = Date.now()) {
1767
+ const eligiblePeers = this.filterPeers(pendingColumns, excludedPeers, now);
1701
1768
  if (eligiblePeers.length === 0) {
1702
1769
  return null;
1703
1770
  }
@@ -1730,8 +1797,7 @@ export class UnknownBlockPeerBalancer {
1730
1797
  }
1731
1798
  return totalActiveRequests;
1732
1799
  }
1733
- filterPeers(pendingDataColumns, excludedPeers) {
1734
- const now = Date.now();
1800
+ filterPeers(pendingDataColumns, excludedPeers, now) {
1735
1801
  let maxColumnCount = 0;
1736
1802
  const considerPeers = [];
1737
1803
  for (const [peerId, syncMeta] of this.peersMeta.entries()) {