Coverage Summary for Class: BlockUnclesHashValidationRule (co.rsk.validators)
Class |
Class, %
|
Method, %
|
Line, %
|
BlockUnclesHashValidationRule |
100%
(1/1)
|
100%
(3/3)
|
58.3%
(7/12)
|
1 package co.rsk.validators;
2
3 import co.rsk.panic.PanicProcessor;
4 import org.ethereum.core.Block;
5 import org.ethereum.core.BlockHeader;
6 import org.ethereum.crypto.HashUtil;
7 import org.ethereum.util.ByteUtil;
8 import org.slf4j.Logger;
9 import org.slf4j.LoggerFactory;
10
11 public class BlockUnclesHashValidationRule implements BlockValidationRule {
12
13 private static final Logger logger = LoggerFactory.getLogger("blockvalidator");
14 private static final PanicProcessor panicProcessor = new PanicProcessor();
15
16 @Override
17 public boolean isValid(Block block) {
18 byte[] unclesHeader = block.getHeader().getUnclesHash();
19 byte[] unclesBlock = HashUtil.keccak256(BlockHeader.getUnclesEncoded(block.getUncleList()));
20
21 if (!ByteUtil.fastEquals(unclesHeader, unclesBlock)) {
22 String message = String.format("Block's given Uncle Hash doesn't match: %s != %s",
23 ByteUtil.toHexString(unclesHeader), ByteUtil.toHexString(unclesBlock));
24 logger.warn(message);
25 panicProcessor.panic("invaliduncle", message);
26 return false;
27 }
28 return true;
29 }
30 }