Coverage Summary for Class: PeginInstructionsBase (co.rsk.peg.pegininstructions)

Class Class, % Method, % Line, %
PeginInstructionsBase 0% (0/1) 0% (0/7) 0% (0/19)


1 package co.rsk.peg.pegininstructions; 2  3 import co.rsk.core.RskAddress; 4 import java.util.Arrays; 5 import org.ethereum.util.ByteUtil; 6 import org.slf4j.Logger; 7 import org.slf4j.LoggerFactory; 8  9 public abstract class PeginInstructionsBase implements PeginInstructions { 10  11  private static final Logger logger = LoggerFactory.getLogger(PeginInstructionsBase.class); 12  private final int protocolVersion; 13  protected RskAddress rskDestinationAddress; 14  15  protected PeginInstructionsBase(int protocolVersion) { 16  this.protocolVersion = protocolVersion; 17  } 18  19  private RskAddress getRskDestinationAddressFromData(byte[] data) { 20  byte[] rskDestinationAddressBytes = Arrays.copyOfRange(data, 5, 25); 21  return new RskAddress(rskDestinationAddressBytes); 22  } 23  24  protected abstract void validateDataLength(byte[] data) throws PeginInstructionsParseException; 25  26  protected abstract void parseAdditionalData(byte[] data) throws PeginInstructionsParseException; 27  28  public static int extractProtocolVersion(byte[] data) throws PeginInstructionsParseException { 29  if (data == null || data.length < 5) { 30  String message; 31  32  if (data == null) { 33  message = "Provided data is null"; 34  } else { 35  message = String.format("Invalid data given. Expected at least 5 bytes, " + 36  "received %d", data.length); 37  } 38  39  logger.debug("[extractProtocolVersion] {}", message); 40  throw new PeginInstructionsParseException(message); 41  } 42  43  byte[] protocolVersionBytes = Arrays.copyOfRange(data, 4, 5); 44  return ByteUtil.byteArrayToInt(protocolVersionBytes); 45  } 46  47  @Override 48  public RskAddress getRskDestinationAddress() { 49  return this.rskDestinationAddress; 50  } 51  52  @Override 53  public int getProtocolVersion() { 54  return this.protocolVersion; 55  } 56  57  public void parse(byte[] data) throws PeginInstructionsParseException { 58  validateDataLength(data); 59  this.rskDestinationAddress = getRskDestinationAddressFromData(data); 60  parseAdditionalData(data); 61  } 62 }