Coverage Summary for Class: ErpFederation (co.rsk.peg)
Class |
Class, %
|
Method, %
|
Line, %
|
ErpFederation |
0%
(0/1)
|
0%
(0/9)
|
0%
(0/37)
|
1 package co.rsk.peg;
2
3 import co.rsk.bitcoinj.core.Address;
4 import co.rsk.bitcoinj.core.BtcECKey;
5 import co.rsk.bitcoinj.core.NetworkParameters;
6 import co.rsk.bitcoinj.script.ErpFederationRedeemScriptParser;
7 import co.rsk.bitcoinj.script.Script;
8 import co.rsk.bitcoinj.script.ScriptBuilder;
9 import co.rsk.peg.utils.EcKeyUtils;
10 import java.time.Instant;
11 import java.util.Collections;
12 import java.util.List;
13 import java.util.Objects;
14
15 public class ErpFederation extends Federation {
16 private final List<BtcECKey> erpPubKeys;
17 private final long activationDelay;
18
19 public ErpFederation(
20 List<FederationMember> members,
21 Instant creationTime,
22 long creationBlockNumber,
23 NetworkParameters btcParams,
24 List<BtcECKey> erpPubKeys,
25 long activationDelay
26 ) {
27 super(members, creationTime, creationBlockNumber, btcParams);
28 this.erpPubKeys = EcKeyUtils.getCompressedPubKeysList(erpPubKeys);
29 this.activationDelay = activationDelay;
30 }
31
32 public List<BtcECKey> getErpPubKeys() {
33 return Collections.unmodifiableList(erpPubKeys);
34 }
35
36 public long getActivationDelay() {
37 return activationDelay;
38 }
39
40 @Override
41 public Script getRedeemScript() {
42 if (redeemScript == null) {
43 redeemScript = ErpFederationRedeemScriptParser.createErpRedeemScript(
44 ScriptBuilder.createRedeemScript(getNumberOfSignaturesRequired(), getBtcPublicKeys()),
45 ScriptBuilder.createRedeemScript(erpPubKeys.size() / 2 + 1, erpPubKeys),
46 activationDelay
47 );
48 }
49
50 return redeemScript;
51 }
52
53 @Override
54 public Script getStandardRedeemScript() {
55 return ErpFederationRedeemScriptParser.extractStandardRedeemScript(
56 getRedeemScript().getChunks()
57 );
58 }
59
60 @Override
61 public Script getP2SHScript() {
62 if (p2shScript == null) {
63 p2shScript = ScriptBuilder.createP2SHOutputScript(getRedeemScript());
64 }
65
66 return p2shScript;
67 }
68
69 @Override
70 public Address getAddress() {
71 if (address == null) {
72 address = Address.fromP2SHScript(btcParams, getP2SHScript());
73 }
74
75 return address;
76 }
77
78 @Override
79 public boolean equals(Object other) {
80 if (this == other) {
81 return true;
82 }
83
84 if (other == null || this.getClass() != other.getClass()) {
85 return false;
86 }
87
88 ErpFederation otherErpFederation = (ErpFederation) other;
89
90 return this.getNumberOfSignaturesRequired() == otherErpFederation.getNumberOfSignaturesRequired() &&
91 this.getSize() == otherErpFederation.getSize() &&
92 this.getCreationTime().equals(otherErpFederation.getCreationTime()) &&
93 this.creationBlockNumber == otherErpFederation.creationBlockNumber &&
94 this.btcParams.equals(otherErpFederation.btcParams) &&
95 this.members.equals(otherErpFederation.members) &&
96 this.erpPubKeys.equals(otherErpFederation.erpPubKeys) &&
97 this.activationDelay == otherErpFederation.activationDelay;
98 }
99
100 @Override
101 public int hashCode() {
102 // Can use java.util.Objects.hash since all of Instant, int and List<BtcECKey> have
103 // well-defined hashCode()s
104 return Objects.hash(
105 getCreationTime(),
106 this.creationBlockNumber,
107 getNumberOfSignaturesRequired(),
108 getBtcPublicKeys(),
109 getErpPubKeys(),
110 getActivationDelay()
111 );
112 }
113 }