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 }