Skip to content

Commit d6f1c4f

Browse files
authored
Merge pull request #230 from rsksmart/rebase-federations-new-refactor-integration
Rebase federations new refactor integration
2 parents 2939bc8 + 8afdbe8 commit d6f1c4f

19 files changed

+166
-216
lines changed

src/main/java/co/rsk/federate/BtcToRskClient.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515
import co.rsk.net.NodeBlockProcessor;
1616
import co.rsk.panic.PanicProcessor;
1717
import co.rsk.peg.BridgeUtils;
18-
import co.rsk.peg.Federation;
19-
import co.rsk.peg.FederationMember;
2018
import co.rsk.peg.PegUtilsLegacy;
19+
import co.rsk.peg.federation.Federation;
20+
import co.rsk.peg.federation.FederationMember;
2121
import co.rsk.peg.PeginInformation;
2222
import co.rsk.peg.btcLockSender.BtcLockSender.TxSenderAddressType;
2323
import co.rsk.peg.btcLockSender.BtcLockSenderProvider;

src/main/java/co/rsk/federate/FedNodeRunner.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@
4747
import co.rsk.federate.signing.hsm.message.SignerMessageBuilderFactory;
4848
import co.rsk.federate.signing.hsm.requirements.AncestorBlockUpdater;
4949
import co.rsk.federate.signing.hsm.requirements.ReleaseRequirementsEnforcer;
50-
import co.rsk.peg.Federation;
51-
import co.rsk.peg.FederationMember;
50+
import co.rsk.peg.federation.Federation;
51+
import co.rsk.peg.federation.FederationMember;
5252
import co.rsk.peg.btcLockSender.BtcLockSenderProvider;
5353
import co.rsk.peg.pegininstructions.PeginInstructionsProvider;
5454
import org.bitcoinj.core.Context;

src/main/java/co/rsk/federate/FederationProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
package co.rsk.federate;
2020

2121
import co.rsk.bitcoinj.core.Address;
22-
import co.rsk.peg.Federation;
22+
import co.rsk.peg.federation.Federation;
2323

2424
import java.util.List;
2525
import java.util.Optional;

src/main/java/co/rsk/federate/FederationProviderFromFederatorSupport.java

Lines changed: 27 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,16 @@
2020

2121
import co.rsk.bitcoinj.core.Address;
2222
import co.rsk.bitcoinj.core.BtcECKey;
23+
import co.rsk.bitcoinj.core.NetworkParameters;
2324
import 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;
2927
import org.ethereum.crypto.ECKey;
3028

3129
import java.time.Instant;
3230
import java.util.ArrayList;
3331
import java.util.List;
3432
import java.util.Optional;
35-
3633
import 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

src/main/java/co/rsk/federate/FederationWatcher.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package co.rsk.federate;
22

33
import co.rsk.bitcoinj.core.Address;
4-
import co.rsk.peg.Federation;
4+
import co.rsk.peg.federation.Federation;
55
import org.ethereum.core.TransactionReceipt;
66
import org.ethereum.facade.Ethereum;
77
import org.ethereum.listener.EthereumListenerAdapter;

src/main/java/co/rsk/federate/FederatorSupport.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,13 @@
99
import co.rsk.federate.config.FedNodeSystemProperties;
1010
import co.rsk.federate.signing.ECDSASigner;
1111
import co.rsk.peg.Bridge;
12-
import co.rsk.peg.BridgeMethods;
13-
import co.rsk.peg.FederationMember;
12+
import co.rsk.peg.federation.FederationMember;
1413
import co.rsk.peg.StateForFederator;
1514
import org.bitcoinj.core.PartialMerkleTree;
1615
import org.bitcoinj.core.PeerAddress;
1716
import org.bitcoinj.core.Sha256Hash;
1817
import org.ethereum.config.blockchain.upgrades.ActivationConfig;
1918
import org.ethereum.core.Blockchain;
20-
import org.ethereum.core.CallTransaction;
2119
import org.ethereum.crypto.ECKey;
2220
import org.slf4j.Logger;
2321
import org.slf4j.LoggerFactory;

src/main/java/co/rsk/federate/bitcoin/BitcoinWrapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package co.rsk.federate.bitcoin;
22

3-
import co.rsk.peg.Federation;
3+
import co.rsk.peg.federation.Federation;
44
import org.bitcoinj.core.*;
55
import org.bitcoinj.core.listeners.NewBestBlockListener;
66
import org.bitcoinj.store.BlockStoreException;

src/main/java/co/rsk/federate/bitcoin/BitcoinWrapperImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
import co.rsk.federate.FederatorSupport;
77
import co.rsk.federate.adapter.ThinConverter;
88
import co.rsk.peg.BridgeBtcWallet;
9-
import co.rsk.peg.Federation;
109
import co.rsk.peg.PegUtilsLegacy;
10+
import co.rsk.peg.federation.Federation;
1111
import co.rsk.peg.PeginInformation;
1212
import co.rsk.peg.btcLockSender.BtcLockSenderProvider;
1313
import co.rsk.peg.pegininstructions.PeginInstructionsException;

src/main/java/co/rsk/federate/btcreleaseclient/BtcReleaseClient.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@
3232
import co.rsk.peg.Bridge;
3333
import co.rsk.peg.BridgeEvents;
3434
import co.rsk.peg.BridgeUtils;
35-
import co.rsk.peg.Federation;
36-
import co.rsk.peg.ErpFederation;
35+
import co.rsk.peg.federation.Federation;
36+
import co.rsk.peg.federation.ErpFederation;
3737
import co.rsk.peg.StateForFederator;
3838
import java.util.ArrayList;
3939
import java.util.Arrays;
@@ -352,7 +352,7 @@ protected void validateTxCanBeSigned(BtcTransaction btcTx) throws FederatorAlrea
352352
observedFederations.stream()
353353
.forEach(f -> logger.trace("[validateTxCanBeSigned] federation p2sh redeem script {}", f.getRedeemScript()));
354354
List<Federation> spendingFedFilter = observedFederations.stream()
355-
.filter(f -> (f instanceof ErpFederation ? ((ErpFederation) f).getStandardRedeemScript() : f.getRedeemScript()).equals(standardRedeemScript)).collect(Collectors.toList());
355+
.filter(f -> (extractDefaultRedeemScript(f)).equals(standardRedeemScript)).collect(Collectors.toList());
356356
logger.debug("[validateTxCanBeSigned] spendingFedFilter size {}", spendingFedFilter.size());
357357
if (spendingFedFilter.isEmpty()) {
358358
String message = String.format(
@@ -451,6 +451,13 @@ protected Script extractStandardRedeemScript(Script redeemScript) {
451451
return parser.extractStandardRedeemScript();
452452
}
453453

454+
private Script extractDefaultRedeemScript(Federation federation) {
455+
if (federation instanceof ErpFederation) {
456+
return ((ErpFederation) federation).getDefaultRedeemScript();
457+
}
458+
return federation.getRedeemScript();
459+
}
460+
454461
protected Script getRedeemScriptFromInput(TransactionInput txInput) {
455462
Script inputScript = txInput.getScriptSig();
456463
List<ScriptChunk> chunks = inputScript.getChunks();
@@ -464,7 +471,8 @@ protected Federation getSpendingFederation(BtcTransaction btcTx) {
464471
Script redeemScript = extractStandardRedeemScript(getRedeemScriptFromInput(firstInput));
465472

466473
List<Federation> spendingFedFilter = observedFederations.stream()
467-
.filter(f -> (f instanceof ErpFederation ? ((ErpFederation) f).getStandardRedeemScript() : f.getRedeemScript()).equals(redeemScript)).collect(Collectors.toList());
474+
.filter(f -> (extractDefaultRedeemScript(f)).equals(redeemScript)).collect(Collectors.toList());
475+
468476

469477
return spendingFedFilter.get(0);
470478
}

src/test/java/co/rsk/federate/BtcToRskClientBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import co.rsk.federate.io.BtcToRskClientFileData;
1111
import co.rsk.federate.io.BtcToRskClientFileReadResult;
1212
import co.rsk.federate.io.BtcToRskClientFileStorage;
13-
import co.rsk.peg.Federation;
13+
import co.rsk.peg.federation.Federation;
1414
import co.rsk.peg.btcLockSender.BtcLockSenderProvider;
1515
import co.rsk.peg.pegininstructions.PeginInstructionsException;
1616
import co.rsk.peg.pegininstructions.PeginInstructionsProvider;

0 commit comments

Comments
 (0)