|
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