Coverage Summary for Class: FastBridgeCompatibleBtcWallet (co.rsk.peg)

Class Class, % Method, % Line, %
FastBridgeCompatibleBtcWallet 0% (0/1) 0% (0/2) 0% (0/25)


1 package co.rsk.peg; 2  3 import co.rsk.bitcoinj.core.Context; 4 import co.rsk.bitcoinj.core.Sha256Hash; 5 import co.rsk.bitcoinj.script.FastBridgeErpRedeemScriptParser; 6 import co.rsk.bitcoinj.script.FastBridgeRedeemScriptParser; 7 import co.rsk.bitcoinj.script.RedeemScriptParser; 8 import co.rsk.bitcoinj.script.RedeemScriptParser.MultiSigType; 9 import co.rsk.bitcoinj.script.RedeemScriptParserFactory; 10 import co.rsk.bitcoinj.script.Script; 11 import co.rsk.bitcoinj.wallet.RedeemData; 12 import co.rsk.peg.fastbridge.FastBridgeFederationInformation; 13 import java.util.List; 14 import java.util.Optional; 15 import javax.annotation.Nullable; 16  17 public abstract class FastBridgeCompatibleBtcWallet extends BridgeBtcWallet { 18  protected FastBridgeCompatibleBtcWallet( 19  Context btcContext, 20  List<Federation> federations 21  ) { 22  super(btcContext, federations); 23  } 24  25  protected abstract Optional<FastBridgeFederationInformation> getFastBridgeFederationInformation(byte[] payToScriptHash); 26  27  @Nullable 28  @Override 29  public RedeemData findRedeemDataFromScriptHash(byte[] payToScriptHash) { 30  Optional<FastBridgeFederationInformation> fastBridgeFederationInformation = 31  this.getFastBridgeFederationInformation(payToScriptHash); 32  33  if (fastBridgeFederationInformation.isPresent()) { 34  FastBridgeFederationInformation fastBridgeFederationInformationInstance = 35  fastBridgeFederationInformation.get(); 36  37  Optional<Federation> destinationFederation = getDestinationFederation( 38  fastBridgeFederationInformationInstance.getFederationScriptHash() 39  ); 40  41  if (!destinationFederation.isPresent()) { 42  return null; 43  } 44  45  Federation destinationFederationInstance = destinationFederation.get(); 46  Script fedRedeemScript = destinationFederationInstance.getRedeemScript(); 47  48  RedeemScriptParser parser = RedeemScriptParserFactory.get(fedRedeemScript.getChunks()); 49  Script fastBridgeRedeemScript; 50  51  if (parser.getMultiSigType() == MultiSigType.ERP_FED) { 52  fastBridgeRedeemScript = FastBridgeErpRedeemScriptParser.createFastBridgeErpRedeemScript( 53  fedRedeemScript, 54  Sha256Hash.wrap(fastBridgeFederationInformationInstance 55  .getDerivationHash() 56  .getBytes() 57  ) 58  ); 59  } else { 60  fastBridgeRedeemScript = FastBridgeRedeemScriptParser 61  .createMultiSigFastBridgeRedeemScript(fedRedeemScript, 62  Sha256Hash.wrap(fastBridgeFederationInformationInstance.getDerivationHash() 63  .getBytes())); 64  } 65  66  return RedeemData.of(destinationFederationInstance.getBtcPublicKeys(), fastBridgeRedeemScript); 67  } 68  69  return super.findRedeemDataFromScriptHash(payToScriptHash); 70  } 71 }