2020
2121import co .rsk .bitcoinj .core .Address ;
2222import co .rsk .bitcoinj .core .BtcECKey ;
23+ import co .rsk .bitcoinj .core .NetworkParameters ;
2324import co .rsk .config .BridgeConstants ;
24- import co .rsk .peg .Federation ;
25- import co .rsk .peg .StandardMultisigFederation ;
26- import co .rsk .peg .LegacyErpFederation ;
27- import co .rsk .peg .P2shErpFederation ;
28- import co .rsk .peg .FederationMember ;
25+ import co .rsk .peg .federation .*;
26+ import org .ethereum .config .blockchain .upgrades .ActivationConfig ;
2927import org .ethereum .crypto .ECKey ;
3028
3129import java .time .Instant ;
3230import java .util .ArrayList ;
3331import java .util .List ;
3432import java .util .Optional ;
35-
3633import static org .ethereum .config .blockchain .upgrades .ConsensusRule .RSKIP123 ;
3734
3835/**
@@ -76,13 +73,10 @@ public Federation getActiveFederation() {
7673 }
7774 Instant creationTime = federatorSupport .getFederationCreationTime ();
7875 long creationBlockNumber = federatorSupport .getFederationCreationBlockNumber ();
76+ NetworkParameters btcParams = federatorSupport .getBtcParams ();
77+ FederationArgs federationArgs = new FederationArgs (members , creationTime , creationBlockNumber , btcParams );
7978
80- Federation initialFederation = new StandardMultisigFederation (
81- members ,
82- creationTime ,
83- creationBlockNumber ,
84- federatorSupport .getBtcParams ()
85- );
79+ Federation initialFederation = FederationFactory .buildStandardMultiSigFederation (federationArgs );
8680
8781 return getExpectedFederation (initialFederation , getActiveFederationAddress ());
8882 }
@@ -126,13 +120,10 @@ public Optional<Federation> getRetiringFederation() {
126120
127121 Instant creationTime = federatorSupport .getRetiringFederationCreationTime ();
128122 long creationBlockNumber = federatorSupport .getRetiringFederationCreationBlockNumber ();
123+ NetworkParameters btcParams = federatorSupport .getBtcParams ();
124+ FederationArgs federationArgs = new FederationArgs (members , creationTime , creationBlockNumber , btcParams );
129125
130- Federation initialFederation = new StandardMultisigFederation (
131- members ,
132- creationTime ,
133- creationBlockNumber ,
134- federatorSupport .getBtcParams ()
135- );
126+ Federation initialFederation = FederationFactory .buildStandardMultiSigFederation (federationArgs );
136127
137128 return Optional .of (getExpectedFederation (initialFederation , retiringFederationAddress ));
138129 }
@@ -158,32 +149,27 @@ private Federation getExpectedFederation(Federation initialFederation, Address e
158149 if (initialFederation .getAddress ().equals (expectedFederationAddress )) {
159150 return initialFederation ;
160151 }
161-
162- // If addresses do not match build an ERP federation
163- Federation erpFederation = new LegacyErpFederation (
164- initialFederation .getMembers (),
165- initialFederation .getCreationTime (),
166- initialFederation .getCreationBlockNumber (),
167- federatorSupport .getBtcParams (),
168- bridgeConstants .getErpFedPubKeysList (),
169- bridgeConstants .getErpFedActivationDelay (),
170- federatorSupport .getConfigForBestBlock ()
171- );
172-
173- if (erpFederation .getAddress ().equals (expectedFederationAddress )) {
174- return erpFederation ;
152+ List <FederationMember > members = initialFederation .getMembers ();
153+ Instant creationTime = initialFederation .getCreationTime ();
154+ long creationBlockNumber = initialFederation .getCreationBlockNumber ();
155+ NetworkParameters btcParams = federatorSupport .getBtcParams ();
156+ List <BtcECKey > erpPubKeys = bridgeConstants .getErpFedPubKeysList ();
157+ long activationDelay = bridgeConstants .getErpFedActivationDelay ();
158+ ActivationConfig .ForBlock activations = federatorSupport .getConfigForBestBlock ();
159+
160+ FederationArgs federationArgs =
161+ new FederationArgs (members , creationTime , creationBlockNumber , btcParams );
162+
163+ // If addresses match build a Non-Standard ERP federation
164+ ErpFederation nonStandardErpFederation =
165+ FederationFactory .buildNonStandardErpFederation (federationArgs , erpPubKeys , activationDelay , activations );
166+
167+ if (nonStandardErpFederation .getAddress ().equals (expectedFederationAddress )) {
168+ return nonStandardErpFederation ;
175169 }
176170
177171 // Finally, try building a P2SH ERP federation
178- return new P2shErpFederation (
179- initialFederation .getMembers (),
180- initialFederation .getCreationTime (),
181- initialFederation .getCreationBlockNumber (),
182- federatorSupport .getBtcParams (),
183- bridgeConstants .getErpFedPubKeysList (),
184- bridgeConstants .getErpFedActivationDelay (),
185- federatorSupport .getConfigForBestBlock ()
186- );
172+ return FederationFactory .buildP2shErpFederation (federationArgs , erpPubKeys , activationDelay );
187173
188174 // TODO: what if no federation built matches the expected address?
189175 // It could mean that there is a different type of federation in the Bridge that we are not considering here
0 commit comments