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 }