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 }