@@ -198,16 +198,7 @@ trait FastSync {
198
198
downloadedNodesCount += num
199
199
200
200
case BlockBodiesReceived (peer, requestedHashes, blockBodies) =>
201
- validateBlocks(requestedHashes, blockBodies) match {
202
- case Valid =>
203
- insertBlocks(requestedHashes, blockBodies)
204
- case Invalid =>
205
- blacklist(peer.id, blacklistDuration, s " responded with block bodies not matching block headers, blacklisting for $blacklistDuration" )
206
- self ! FastSync .EnqueueBlockBodies (requestedHashes)
207
- case DbError =>
208
- log.debug(" missing block header for known hash" )
209
- self ! ProcessSyncing
210
- }
201
+ handleBlockBodies(peer, requestedHashes, blockBodies)
211
202
212
203
case BlockHeadersReceived (_, headers) =>
213
204
insertHeaders(headers)
@@ -231,6 +222,22 @@ trait FastSync {
231
222
persistSyncState()
232
223
}
233
224
225
+ private def handleBlockBodies (peer : Peer , requestedHashes : Seq [ByteString ], blockBodies : Seq [BlockBody ]) = {
226
+ validateBlocks(requestedHashes, blockBodies) match {
227
+ case Valid =>
228
+ insertBlocks(requestedHashes, blockBodies)
229
+ case Invalid =>
230
+ blacklist(peer.id, blacklistDuration, s " responded with block bodies not matching block headers, blacklisting for $blacklistDuration" )
231
+ self ! FastSync .EnqueueBlockBodies (requestedHashes)
232
+ case DbError =>
233
+ blockBodiesQueue = Seq .empty
234
+ receiptsQueue = Seq .empty
235
+ bestBlockHeaderNumber = bestBlockHeaderNumber - 2 * blockHeadersPerRequest
236
+ log.debug(" missing block header for known hash" )
237
+ self ! ProcessSyncing
238
+ }
239
+ }
240
+
234
241
private def handleActorTerminate (ref : ActorRef ) = {
235
242
context unwatch ref
236
243
assignedHandlers -= ref
@@ -281,8 +288,8 @@ trait FastSync {
281
288
requestedReceipts = requestedReceipts - handler
282
289
}
283
290
284
- private def validateBlocks (requestedHashes : Seq [ByteString ], blockBodies : Seq [BlockBody ]): ValidationResult = {
285
- var result : ValidationResult = Valid
291
+ private def validateBlocks (requestedHashes : Seq [ByteString ], blockBodies : Seq [BlockBody ]): BlockBodyValidationResult = {
292
+ var result : BlockBodyValidationResult = Valid
286
293
(requestedHashes zip blockBodies)
287
294
.map { case (hash, body) => (blockchain.getBlockHeaderByHash(hash), body) }
288
295
.forall {
@@ -291,9 +298,6 @@ trait FastSync {
291
298
result = validationResult.fold(_ => Invalid , _ => Valid )
292
299
validationResult.isRight
293
300
case _ =>
294
- blockBodiesQueue = Seq .empty
295
- receiptsQueue = Seq .empty
296
- bestBlockHeaderNumber = bestBlockHeaderNumber - 2 * blockHeadersPerRequest
297
301
result = DbError
298
302
false
299
303
}
@@ -488,10 +492,10 @@ object FastSync {
488
492
private case object PersistSyncState
489
493
case class MarkPeerBlockchainOnly (peer : Peer )
490
494
491
- private sealed trait ValidationResult
492
- private case object Valid extends ValidationResult
493
- private case object Invalid extends ValidationResult
494
- private case object DbError extends ValidationResult
495
+ private sealed trait BlockBodyValidationResult
496
+ private case object Valid extends BlockBodyValidationResult
497
+ private case object Invalid extends BlockBodyValidationResult
498
+ private case object DbError extends BlockBodyValidationResult
495
499
496
500
case class SyncState (
497
501
targetBlock : BlockHeader ,
0 commit comments