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

Class Class, % Method, % Line, %
PeginInstructionsVersion1 0% (0/1) 0% (0/5) 0% (0/24)


1 package co.rsk.peg.pegininstructions; 2  3 import co.rsk.bitcoinj.core.Address; 4 import co.rsk.bitcoinj.core.NetworkParameters; 5 import java.util.Arrays; 6 import java.util.Optional; 7 import org.ethereum.util.ByteUtil; 8 import org.slf4j.Logger; 9 import org.slf4j.LoggerFactory; 10  11 public class PeginInstructionsVersion1 extends PeginInstructionsBase { 12  private static final Logger logger = LoggerFactory.getLogger(PeginInstructionsVersion1.class); 13  private static final int P2PKH_ADDRESS_TYPE = 1; 14  private static final int P2SH_ADDRESS_TYPE = 2; 15  16  private final NetworkParameters params; 17  private Optional<Address> btcRefundAddress; 18  19  public PeginInstructionsVersion1(NetworkParameters params) { 20  super(1); 21  this.params = params; 22  } 23  24  @Override 25  protected void validateDataLength(byte[] data) throws PeginInstructionsParseException { 26  if (data.length != 25 && data.length != 46) { 27  String message = String.format("[validateDataLength] Invalid data length. Expected 22 or 43 bytes, received %d", data.length); 28  logger.debug(message); 29  throw new PeginInstructionsParseException(message); 30  } 31  } 32  33  @Override 34  protected void parseAdditionalData(byte[] data) throws PeginInstructionsParseException { 35  if (data.length == 25) { 36  this.btcRefundAddress = Optional.empty(); 37  return; 38  } 39  40  byte[] btcRefundAddressTypeBytes = Arrays.copyOfRange(data, 25, 26); 41  int btcRefundAddressType = ByteUtil.byteArrayToInt(btcRefundAddressTypeBytes); 42  byte[] hash = Arrays.copyOfRange(data, 26, data.length); 43  44  Address parsedBtcRefundAddress; 45  46  switch (btcRefundAddressType) { 47  case P2PKH_ADDRESS_TYPE: 48  // Uses pubKeyHash 49  parsedBtcRefundAddress = new Address(this.params, hash); 50  logger.debug("[parseAdditionalData] Obtained P2PKH BTC address: {}",parsedBtcRefundAddress); 51  break; 52  case P2SH_ADDRESS_TYPE: 53  // Uses scriptPubKeyHash 54  parsedBtcRefundAddress = new Address(this.params, this.params.getP2SHHeader(), hash); 55  logger.debug("[parseAdditionalData] Obtained P2SH BTC address: {}",parsedBtcRefundAddress); 56  break; 57  default: 58  String message = String.format("[parseAdditionalData] Invalid btc address type: %d", btcRefundAddressType); 59  logger.debug(message); 60  throw new PeginInstructionsParseException(message); 61  } 62  63  this.btcRefundAddress = Optional.of(parsedBtcRefundAddress); 64  } 65  66  public Optional<Address> getBtcRefundAddress() { 67  return this.btcRefundAddress; 68  } 69 }