|
1 | 1 | package io.iohk.ethereum.blockchain.sync.fast |
2 | 2 |
|
| 3 | +import akka.actor.ActorLogging |
3 | 4 | import akka.util.ByteString |
4 | 5 | import io.iohk.ethereum.consensus.validators.{BlockHeaderError, BlockHeaderValid, Validators} |
5 | 6 | import io.iohk.ethereum.consensus.validators.std.StdBlockValidator |
6 | 7 | import io.iohk.ethereum.consensus.validators.std.StdBlockValidator.BlockValid |
7 | 8 | import io.iohk.ethereum.domain.{BlockBody, BlockHeader, Blockchain} |
8 | 9 |
|
9 | | -trait SyncBlocksValidator { |
| 10 | +trait SyncBlocksValidator { this: ActorLogging => |
10 | 11 |
|
11 | 12 | import SyncBlocksValidator._ |
12 | 13 | import BlockBodyValidationResult._ |
13 | 14 |
|
14 | 15 | def blockchain: Blockchain |
15 | 16 | def validators: Validators |
16 | 17 |
|
17 | | - def validateBlocks(requestedHashes: Seq[ByteString], blockBodies: Seq[BlockBody]): BlockBodyValidationResult = { |
18 | | - var result: BlockBodyValidationResult = Valid |
| 18 | + def validateBlocks(requestedHashes: Seq[ByteString], blockBodies: Seq[BlockBody]): BlockBodyValidationResult = |
19 | 19 | (requestedHashes zip blockBodies) |
20 | 20 | .map { case (hash, body) => (blockchain.getBlockHeaderByHash(hash), body) } |
21 | | - .forall { |
22 | | - case (Some(header), body) => |
23 | | - val validationResult: Either[StdBlockValidator.BlockError, BlockValid] = |
24 | | - validators.blockValidator.validateHeaderAndBody(header, body) |
25 | | - result = validationResult.fold(_ => Invalid, _ => Valid) |
26 | | - validationResult.isRight |
27 | | - case _ => |
28 | | - result = DbError |
29 | | - false |
| 21 | + .foldLeft[BlockBodyValidationResult](Valid) { |
| 22 | + case (Valid, (Some(header), body)) => |
| 23 | + validators.blockValidator |
| 24 | + .validateHeaderAndBody(header, body) |
| 25 | + .fold( |
| 26 | + { error => |
| 27 | + log.error(s"Block body validation failed with error $error") |
| 28 | + Invalid |
| 29 | + }, |
| 30 | + _ => Valid |
| 31 | + ) |
| 32 | + case (Valid, _) => DbError |
| 33 | + case (invalid, _) => invalid |
30 | 34 | } |
31 | | - result |
32 | | - } |
33 | 35 |
|
34 | 36 | def validateHeaderOnly(blockHeader: BlockHeader): Either[BlockHeaderError, BlockHeaderValid] = |
35 | 37 | validators.blockHeaderValidator.validateHeaderOnly(blockHeader) |
|
0 commit comments