diff --git a/.github/workflows/build-push-docker.yml b/.github/workflows/build-push-docker.yml new file mode 100644 index 000000000..c70094976 --- /dev/null +++ b/.github/workflows/build-push-docker.yml @@ -0,0 +1,64 @@ +name: Docker Image Build and Push +on: + push: + tags: + - '*' + +jobs: + build: + runs-on: ubuntu-22.04 + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Set version + id: vars + run: echo ::set-output name=tag::${GITHUB_REF#refs/*/} + + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: | + atarrio/powpeg-node + ghcr.io/atarrio/powpeg-node + #rsk/powpeg-node + #ghcr.io/rsksmart/powpeg-node + tags: | + type=ref,event=tag + type=edge + # This is used for generating IRIS-3 out of IRIS-3.x.y. + type=match,pattern=(\w+-\d+)\.\d+\.\d+.*,group=1 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + with: + driver: docker + + - name: Build Docker Image + uses: docker/build-push-action@v5 + with: + context: . + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + build-args: RSK_RELEASE=${{ steps.vars.outputs.tag }} + + - name: DockerHub login + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: GitHub container registry login + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Push Images + uses: docker/build-push-action@v5 + with: + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..55310cedc --- /dev/null +++ b/Dockerfile @@ -0,0 +1,37 @@ +FROM openjdk:11-jdk-slim-buster AS build + +ARG RSK_RELEASE +ENV RSK_VERSION $RSK_RELEASE +ARG DEBIAN_FRONTEND=noninteractive + +RUN apt-get update -y && \ + apt-get install -y git curl gnupg + +RUN useradd -ms /bin/bash rsk +USER rsk + +WORKDIR /home/rsk +COPY --chown=rsk:rsk . ./ + +RUN gpg --keyserver https://secchannel.rsk.co/SUPPORT.asc --recv-keys 1DC9157991323D23FD37BAA7A6DBEAC640C5A14B && \ + gpg --verify --output SHA256SUMS SHA256SUMS.asc && \ + sha256sum --check SHA256SUMS && \ + ./configure.sh && \ + ./gradlew --no-daemon clean build -x test && \ + cp "build/libs/federate-node-$RSK_VERSION-all.jar" rsk.jar + +FROM openjdk:11-jre-slim-buster +LABEL org.opencontainers.image.authors="ops@iovlabs.org" + +RUN useradd -ms /sbin/nologin -d /var/lib/rsk rsk +USER rsk + +WORKDIR /var/lib/rsk +COPY --from=build --chown=rsk:rsk /home/rsk/rsk.jar ./ + +ENV DEFAULT_JVM_OPTS="-Xss4M" +ENV RSKJ_SYS_PROPS="-Dlogback.configurationFile='/etc/rsk/logback.xml' -Drsk.conf.file=/etc/rsk/node.conf" +ENV RSKJ_CLASS=co.rsk.federate.FederateRunner +ENV RSKJ_OPTS="" + +ENTRYPOINT ["/bin/sh", "-c", "java $DEFAULT_JVM_OPTS $RSKJ_SYS_PROPS -cp rsk.jar $RSKJ_CLASS $RSKJ_OPTS \"${@}\"", "--"] diff --git a/src/main/java/co/rsk/federate/BtcToRskClient.java b/src/main/java/co/rsk/federate/BtcToRskClient.java index 99edab6af..0653da63a 100644 --- a/src/main/java/co/rsk/federate/BtcToRskClient.java +++ b/src/main/java/co/rsk/federate/BtcToRskClient.java @@ -15,9 +15,9 @@ import co.rsk.net.NodeBlockProcessor; import co.rsk.panic.PanicProcessor; import co.rsk.peg.BridgeUtils; -import co.rsk.peg.Federation; -import co.rsk.peg.FederationMember; import co.rsk.peg.PegUtilsLegacy; +import co.rsk.peg.federation.Federation; +import co.rsk.peg.federation.FederationMember; import co.rsk.peg.PeginInformation; import co.rsk.peg.btcLockSender.BtcLockSender.TxSenderAddressType; import co.rsk.peg.btcLockSender.BtcLockSenderProvider; diff --git a/src/main/java/co/rsk/federate/FedNodeRunner.java b/src/main/java/co/rsk/federate/FedNodeRunner.java index 5fe611889..529d037b7 100644 --- a/src/main/java/co/rsk/federate/FedNodeRunner.java +++ b/src/main/java/co/rsk/federate/FedNodeRunner.java @@ -47,8 +47,8 @@ import co.rsk.federate.signing.hsm.message.SignerMessageBuilderFactory; import co.rsk.federate.signing.hsm.requirements.AncestorBlockUpdater; import co.rsk.federate.signing.hsm.requirements.ReleaseRequirementsEnforcer; -import co.rsk.peg.Federation; -import co.rsk.peg.FederationMember; +import co.rsk.peg.federation.Federation; +import co.rsk.peg.federation.FederationMember; import co.rsk.peg.btcLockSender.BtcLockSenderProvider; import co.rsk.peg.pegininstructions.PeginInstructionsProvider; import org.bitcoinj.core.Context; diff --git a/src/main/java/co/rsk/federate/FederationProvider.java b/src/main/java/co/rsk/federate/FederationProvider.java index f929a5406..244bf2749 100644 --- a/src/main/java/co/rsk/federate/FederationProvider.java +++ b/src/main/java/co/rsk/federate/FederationProvider.java @@ -19,7 +19,7 @@ package co.rsk.federate; import co.rsk.bitcoinj.core.Address; -import co.rsk.peg.Federation; +import co.rsk.peg.federation.Federation; import java.util.List; import java.util.Optional; diff --git a/src/main/java/co/rsk/federate/FederationProviderFromFederatorSupport.java b/src/main/java/co/rsk/federate/FederationProviderFromFederatorSupport.java index 39e399ccb..6492c8a63 100644 --- a/src/main/java/co/rsk/federate/FederationProviderFromFederatorSupport.java +++ b/src/main/java/co/rsk/federate/FederationProviderFromFederatorSupport.java @@ -20,19 +20,16 @@ import co.rsk.bitcoinj.core.Address; import co.rsk.bitcoinj.core.BtcECKey; +import co.rsk.bitcoinj.core.NetworkParameters; import co.rsk.config.BridgeConstants; -import co.rsk.peg.Federation; -import co.rsk.peg.StandardMultisigFederation; -import co.rsk.peg.LegacyErpFederation; -import co.rsk.peg.P2shErpFederation; -import co.rsk.peg.FederationMember; +import co.rsk.peg.federation.*; +import org.ethereum.config.blockchain.upgrades.ActivationConfig; import org.ethereum.crypto.ECKey; import java.time.Instant; import java.util.ArrayList; import java.util.List; import java.util.Optional; - import static org.ethereum.config.blockchain.upgrades.ConsensusRule.RSKIP123; /** @@ -76,13 +73,10 @@ public Federation getActiveFederation() { } Instant creationTime = federatorSupport.getFederationCreationTime(); long creationBlockNumber = federatorSupport.getFederationCreationBlockNumber(); + NetworkParameters btcParams = federatorSupport.getBtcParams(); + FederationArgs federationArgs = new FederationArgs(members, creationTime, creationBlockNumber, btcParams); - Federation initialFederation = new StandardMultisigFederation( - members, - creationTime, - creationBlockNumber, - federatorSupport.getBtcParams() - ); + Federation initialFederation = FederationFactory.buildStandardMultiSigFederation(federationArgs); return getExpectedFederation(initialFederation, getActiveFederationAddress()); } @@ -126,13 +120,10 @@ public Optional getRetiringFederation() { Instant creationTime = federatorSupport.getRetiringFederationCreationTime(); long creationBlockNumber = federatorSupport.getRetiringFederationCreationBlockNumber(); + NetworkParameters btcParams = federatorSupport.getBtcParams(); + FederationArgs federationArgs = new FederationArgs(members, creationTime, creationBlockNumber, btcParams); - Federation initialFederation = new StandardMultisigFederation( - members, - creationTime, - creationBlockNumber, - federatorSupport.getBtcParams() - ); + Federation initialFederation = FederationFactory.buildStandardMultiSigFederation(federationArgs); return Optional.of(getExpectedFederation(initialFederation, retiringFederationAddress)); } @@ -158,32 +149,27 @@ private Federation getExpectedFederation(Federation initialFederation, Address e if (initialFederation.getAddress().equals(expectedFederationAddress)) { return initialFederation; } - - // If addresses do not match build an ERP federation - Federation erpFederation = new LegacyErpFederation( - initialFederation.getMembers(), - initialFederation.getCreationTime(), - initialFederation.getCreationBlockNumber(), - federatorSupport.getBtcParams(), - bridgeConstants.getErpFedPubKeysList(), - bridgeConstants.getErpFedActivationDelay(), - federatorSupport.getConfigForBestBlock() - ); - - if (erpFederation.getAddress().equals(expectedFederationAddress)) { - return erpFederation; + List members = initialFederation.getMembers(); + Instant creationTime = initialFederation.getCreationTime(); + long creationBlockNumber = initialFederation.getCreationBlockNumber(); + NetworkParameters btcParams = federatorSupport.getBtcParams(); + List erpPubKeys = bridgeConstants.getErpFedPubKeysList(); + long activationDelay = bridgeConstants.getErpFedActivationDelay(); + ActivationConfig.ForBlock activations = federatorSupport.getConfigForBestBlock(); + + FederationArgs federationArgs = + new FederationArgs(members, creationTime, creationBlockNumber, btcParams); + + // If addresses match build a Non-Standard ERP federation + ErpFederation nonStandardErpFederation = + FederationFactory.buildNonStandardErpFederation(federationArgs, erpPubKeys, activationDelay, activations); + + if (nonStandardErpFederation.getAddress().equals(expectedFederationAddress)) { + return nonStandardErpFederation; } // Finally, try building a P2SH ERP federation - return new P2shErpFederation( - initialFederation.getMembers(), - initialFederation.getCreationTime(), - initialFederation.getCreationBlockNumber(), - federatorSupport.getBtcParams(), - bridgeConstants.getErpFedPubKeysList(), - bridgeConstants.getErpFedActivationDelay(), - federatorSupport.getConfigForBestBlock() - ); + return FederationFactory.buildP2shErpFederation(federationArgs, erpPubKeys, activationDelay); // TODO: what if no federation built matches the expected address? // It could mean that there is a different type of federation in the Bridge that we are not considering here diff --git a/src/main/java/co/rsk/federate/FederationWatcher.java b/src/main/java/co/rsk/federate/FederationWatcher.java index ffae7b4df..7d47379fa 100644 --- a/src/main/java/co/rsk/federate/FederationWatcher.java +++ b/src/main/java/co/rsk/federate/FederationWatcher.java @@ -1,7 +1,7 @@ package co.rsk.federate; import co.rsk.bitcoinj.core.Address; -import co.rsk.peg.Federation; +import co.rsk.peg.federation.Federation; import org.ethereum.core.TransactionReceipt; import org.ethereum.facade.Ethereum; import org.ethereum.listener.EthereumListenerAdapter; diff --git a/src/main/java/co/rsk/federate/FederatorSupport.java b/src/main/java/co/rsk/federate/FederatorSupport.java index 7b952f3f1..bc275c681 100644 --- a/src/main/java/co/rsk/federate/FederatorSupport.java +++ b/src/main/java/co/rsk/federate/FederatorSupport.java @@ -9,15 +9,13 @@ import co.rsk.federate.config.FedNodeSystemProperties; import co.rsk.federate.signing.ECDSASigner; import co.rsk.peg.Bridge; -import co.rsk.peg.BridgeMethods; -import co.rsk.peg.FederationMember; +import co.rsk.peg.federation.FederationMember; import co.rsk.peg.StateForFederator; import org.bitcoinj.core.PartialMerkleTree; import org.bitcoinj.core.PeerAddress; import org.bitcoinj.core.Sha256Hash; import org.ethereum.config.blockchain.upgrades.ActivationConfig; import org.ethereum.core.Blockchain; -import org.ethereum.core.CallTransaction; import org.ethereum.crypto.ECKey; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/co/rsk/federate/bitcoin/BitcoinWrapper.java b/src/main/java/co/rsk/federate/bitcoin/BitcoinWrapper.java index 8f7ec42d6..845964f0b 100644 --- a/src/main/java/co/rsk/federate/bitcoin/BitcoinWrapper.java +++ b/src/main/java/co/rsk/federate/bitcoin/BitcoinWrapper.java @@ -1,6 +1,6 @@ package co.rsk.federate.bitcoin; -import co.rsk.peg.Federation; +import co.rsk.peg.federation.Federation; import org.bitcoinj.core.*; import org.bitcoinj.core.listeners.NewBestBlockListener; import org.bitcoinj.store.BlockStoreException; diff --git a/src/main/java/co/rsk/federate/bitcoin/BitcoinWrapperImpl.java b/src/main/java/co/rsk/federate/bitcoin/BitcoinWrapperImpl.java index 01f78a7e3..e233694a0 100644 --- a/src/main/java/co/rsk/federate/bitcoin/BitcoinWrapperImpl.java +++ b/src/main/java/co/rsk/federate/bitcoin/BitcoinWrapperImpl.java @@ -6,8 +6,8 @@ import co.rsk.federate.FederatorSupport; import co.rsk.federate.adapter.ThinConverter; import co.rsk.peg.BridgeBtcWallet; -import co.rsk.peg.Federation; import co.rsk.peg.PegUtilsLegacy; +import co.rsk.peg.federation.Federation; import co.rsk.peg.PeginInformation; import co.rsk.peg.btcLockSender.BtcLockSenderProvider; import co.rsk.peg.pegininstructions.PeginInstructionsException; diff --git a/src/main/java/co/rsk/federate/btcreleaseclient/BtcReleaseClient.java b/src/main/java/co/rsk/federate/btcreleaseclient/BtcReleaseClient.java index b6b59d6ce..ae82ab092 100644 --- a/src/main/java/co/rsk/federate/btcreleaseclient/BtcReleaseClient.java +++ b/src/main/java/co/rsk/federate/btcreleaseclient/BtcReleaseClient.java @@ -32,8 +32,8 @@ import co.rsk.peg.Bridge; import co.rsk.peg.BridgeEvents; import co.rsk.peg.BridgeUtils; -import co.rsk.peg.Federation; -import co.rsk.peg.ErpFederation; +import co.rsk.peg.federation.Federation; +import co.rsk.peg.federation.ErpFederation; import co.rsk.peg.StateForFederator; import java.util.ArrayList; import java.util.Arrays; @@ -352,7 +352,7 @@ protected void validateTxCanBeSigned(BtcTransaction btcTx) throws FederatorAlrea observedFederations.stream() .forEach(f -> logger.trace("[validateTxCanBeSigned] federation p2sh redeem script {}", f.getRedeemScript())); List spendingFedFilter = observedFederations.stream() - .filter(f -> (f instanceof ErpFederation ? ((ErpFederation) f).getStandardRedeemScript() : f.getRedeemScript()).equals(standardRedeemScript)).collect(Collectors.toList()); + .filter(f -> (extractDefaultRedeemScript(f)).equals(standardRedeemScript)).collect(Collectors.toList()); logger.debug("[validateTxCanBeSigned] spendingFedFilter size {}", spendingFedFilter.size()); if (spendingFedFilter.isEmpty()) { String message = String.format( @@ -451,6 +451,13 @@ protected Script extractStandardRedeemScript(Script redeemScript) { return parser.extractStandardRedeemScript(); } + private Script extractDefaultRedeemScript(Federation federation) { + if (federation instanceof ErpFederation) { + return ((ErpFederation) federation).getDefaultRedeemScript(); + } + return federation.getRedeemScript(); + } + protected Script getRedeemScriptFromInput(TransactionInput txInput) { Script inputScript = txInput.getScriptSig(); List chunks = inputScript.getChunks(); @@ -464,7 +471,8 @@ protected Federation getSpendingFederation(BtcTransaction btcTx) { Script redeemScript = extractStandardRedeemScript(getRedeemScriptFromInput(firstInput)); List spendingFedFilter = observedFederations.stream() - .filter(f -> (f instanceof ErpFederation ? ((ErpFederation) f).getStandardRedeemScript() : f.getRedeemScript()).equals(redeemScript)).collect(Collectors.toList()); + .filter(f -> (extractDefaultRedeemScript(f)).equals(redeemScript)).collect(Collectors.toList()); + return spendingFedFilter.get(0); } diff --git a/src/test/java/co/rsk/federate/BtcToRskClientBuilder.java b/src/test/java/co/rsk/federate/BtcToRskClientBuilder.java index 95b7824d0..5bfe703e8 100644 --- a/src/test/java/co/rsk/federate/BtcToRskClientBuilder.java +++ b/src/test/java/co/rsk/federate/BtcToRskClientBuilder.java @@ -10,7 +10,7 @@ import co.rsk.federate.io.BtcToRskClientFileData; import co.rsk.federate.io.BtcToRskClientFileReadResult; import co.rsk.federate.io.BtcToRskClientFileStorage; -import co.rsk.peg.Federation; +import co.rsk.peg.federation.Federation; import co.rsk.peg.btcLockSender.BtcLockSenderProvider; import co.rsk.peg.pegininstructions.PeginInstructionsException; import co.rsk.peg.pegininstructions.PeginInstructionsProvider; diff --git a/src/test/java/co/rsk/federate/BtcToRskClientTest.java b/src/test/java/co/rsk/federate/BtcToRskClientTest.java index 8dc6d6238..1821a3553 100644 --- a/src/test/java/co/rsk/federate/BtcToRskClientTest.java +++ b/src/test/java/co/rsk/federate/BtcToRskClientTest.java @@ -38,9 +38,10 @@ import co.rsk.federate.mock.SimpleBtcTransaction; import co.rsk.federate.mock.SimpleFederatorSupport; import co.rsk.net.NodeBlockProcessor; -import co.rsk.peg.Federation; -import co.rsk.peg.FederationMember; +import co.rsk.peg.BridgeUtils; import co.rsk.peg.PegUtilsLegacy; +import co.rsk.peg.federation.Federation; +import co.rsk.peg.federation.FederationMember; import co.rsk.peg.btcLockSender.BtcLockSender; import co.rsk.peg.btcLockSender.BtcLockSender.TxSenderAddressType; import co.rsk.peg.btcLockSender.BtcLockSenderProvider; diff --git a/src/test/java/co/rsk/federate/FederationProviderFromFederatorSupportTest.java b/src/test/java/co/rsk/federate/FederationProviderFromFederatorSupportTest.java index 6f4ebff50..059f76270 100644 --- a/src/test/java/co/rsk/federate/FederationProviderFromFederatorSupportTest.java +++ b/src/test/java/co/rsk/federate/FederationProviderFromFederatorSupportTest.java @@ -15,12 +15,7 @@ import co.rsk.bitcoinj.script.Script; import co.rsk.config.BridgeConstants; import co.rsk.config.BridgeTestNetConstants; -import co.rsk.peg.FederationMember; -import co.rsk.peg.Federation; -import co.rsk.peg.StandardMultisigFederation; -import co.rsk.peg.ErpFederation; -import co.rsk.peg.LegacyErpFederation; -import co.rsk.peg.P2shErpFederation; +import co.rsk.peg.federation.*; import java.math.BigInteger; import java.time.Instant; @@ -41,6 +36,10 @@ class FederationProviderFromFederatorSupportTest { private NetworkParameters testnetParams; private Instant creationTime; + private static final int STANDARD_MULTISIG_FEDERATION_FORMAT_VERSION = FederationFormatVersion.STANDARD_MULTISIG_FEDERATION.getFormatVersion(); + private static final int NON_STANDARD_ERP_FEDERATION_FORMAT_VERSION = FederationFormatVersion.NON_STANDARD_ERP_FEDERATION.getFormatVersion(); + private static final int P2SH_ERP_FEDERATION_FORMAT_VERSION = FederationFormatVersion.P2SH_ERP_FEDERATION.getFormatVersion(); + private static final Address HARDCODED_TESTNET_FED_ADDRESS = Address.fromBase58( NetworkParameters.fromID(NetworkParameters.ID_TESTNET), "2Mw6KM642fbkypTzbgFi6DTgTFPRWZUD4BA" @@ -83,7 +82,7 @@ void getActiveFederation_beforeMultikey() { Federation obtainedFederation = federationProvider.getActiveFederation(); - assertTrue(obtainedFederation instanceof Federation); + assertEquals(STANDARD_MULTISIG_FEDERATION_FORMAT_VERSION, obtainedFederation.getFormatVersion()); assertEquals(expectedFederation, obtainedFederation); assertEquals(expectedFederationAddress, obtainedFederation.getAddress()); } @@ -112,7 +111,7 @@ void getActiveFederation_afterMultikey() { Federation obtainedFederation = federationProvider.getActiveFederation(); - assertTrue(obtainedFederation instanceof Federation); + assertEquals(STANDARD_MULTISIG_FEDERATION_FORMAT_VERSION, obtainedFederation.getFormatVersion()); assertEquals(expectedFederation, obtainedFederation); assertEquals(expectedFederationAddress, obtainedFederation.getAddress()); } @@ -122,7 +121,7 @@ void getActiveFederation_erp_federation() { ActivationConfig.ForBlock configMock = mock(ActivationConfig.ForBlock.class); when(configMock.isActive(RSKIP123)).thenReturn(true); - Federation expectedFederation = createErpFederation( + Federation expectedFederation = createNonStandardErpFederation( getFederationMembersFromPks(1, 1000, 2000, 3000, 4000, 5000), configMock ); @@ -142,7 +141,7 @@ void getActiveFederation_erp_federation() { Federation obtainedFederation = federationProvider.getActiveFederation(); - assertTrue(obtainedFederation instanceof ErpFederation); + assertEquals(NON_STANDARD_ERP_FEDERATION_FORMAT_VERSION, obtainedFederation.getFormatVersion()); assertEquals(expectedFederation, obtainedFederation); assertEquals(expectedFederationAddress, obtainedFederation.getAddress()); } @@ -153,7 +152,7 @@ void getActiveFederation_erp_federation_testnet_hardcoded() { when(configMock.isActive(RSKIP123)).thenReturn(true); when(configMock.isActive(RSKIP284)).thenReturn(false); - Federation expectedFederation = createErpFederation( + Federation expectedFederation = createNonStandardErpFederation( getFederationMembersFromPks(1, 1000, 2000, 3000, 4000, 5000), configMock ); @@ -174,7 +173,7 @@ void getActiveFederation_erp_federation_testnet_hardcoded() { Federation obtainedFederation = federationProvider.getActiveFederation(); - assertTrue(obtainedFederation instanceof ErpFederation); + assertEquals(NON_STANDARD_ERP_FEDERATION_FORMAT_VERSION, obtainedFederation.getFormatVersion()); assertEquals(expectedFederation, obtainedFederation); assertEquals(HARDCODED_TESTNET_FED_ADDRESS, obtainedFederation.getAddress()); assertEquals(HARDCODED_TESTNET_FED_REDEEM_SCRIPT, obtainedFederation.getRedeemScript()); @@ -186,8 +185,7 @@ void getActiveFederation_p2sh_erp_federation() { when(configMock.isActive(RSKIP123)).thenReturn(true); Federation expectedFederation = createP2shErpFederation( - getFederationMembersFromPks(1, 1000, 2000, 3000, 4000, 5000), - configMock + getFederationMembersFromPks(1, 1000, 2000, 3000, 4000, 5000) ); Address expectedFederationAddress = expectedFederation.getAddress(); @@ -205,7 +203,7 @@ void getActiveFederation_p2sh_erp_federation() { Federation obtainedFederation = federationProvider.getActiveFederation(); - assertTrue(obtainedFederation instanceof P2shErpFederation); + assertEquals(P2SH_ERP_FEDERATION_FORMAT_VERSION, obtainedFederation.getFormatVersion()); assertEquals(expectedFederation, obtainedFederation); assertEquals(expectedFederationAddress, obtainedFederation.getAddress()); } @@ -263,7 +261,7 @@ void getRetiringFederation_present_beforeMultikey() { Federation obtainedFederation = obtainedFederationOptional.get(); - assertTrue(obtainedFederation instanceof Federation); + assertEquals(STANDARD_MULTISIG_FEDERATION_FORMAT_VERSION, obtainedFederation.getFormatVersion()); assertEquals(expectedFederation, obtainedFederation); assertEquals(expectedFederationAddress, obtainedFederation.getAddress()); } @@ -295,7 +293,7 @@ void getRetiringFederation_present_afterMultikey() { Federation obtainedFederation = obtainedFederationOptional.get(); - assertTrue(obtainedFederation instanceof Federation); + assertEquals(STANDARD_MULTISIG_FEDERATION_FORMAT_VERSION, obtainedFederation.getFormatVersion()); assertEquals(expectedFederation, obtainedFederation); assertEquals(expectedFederationAddress, obtainedFederation.getAddress()); } @@ -305,7 +303,7 @@ void getRetiringFederation_present_erp_federation() { ActivationConfig.ForBlock configMock = mock(ActivationConfig.ForBlock.class); when(configMock.isActive(RSKIP123)).thenReturn(true); - Federation expectedFederation = createErpFederation( + Federation expectedFederation = createNonStandardErpFederation( getFederationMembersFromPks(1, 1000, 2000, 3000, 4000, 5000), configMock ); @@ -328,7 +326,7 @@ void getRetiringFederation_present_erp_federation() { Federation obtainedFederation = obtainedFederationOptional.get(); - assertTrue(obtainedFederation instanceof ErpFederation); + assertEquals(NON_STANDARD_ERP_FEDERATION_FORMAT_VERSION, obtainedFederation.getFormatVersion()); assertEquals(expectedFederation, obtainedFederation); assertEquals(expectedFederationAddress, obtainedFederation.getAddress()); } @@ -339,8 +337,7 @@ void getRetiringFederation_present_p2sh_erp_federation() { when(configMock.isActive(RSKIP123)).thenReturn(true); Federation expectedFederation = createP2shErpFederation( - getFederationMembersFromPks(1, 1000, 2000, 3000, 4000, 5000), - configMock + getFederationMembersFromPks(1, 1000, 2000, 3000, 4000, 5000) ); Address expectedFederationAddress = expectedFederation.getAddress(); @@ -361,7 +358,7 @@ void getRetiringFederation_present_p2sh_erp_federation() { Federation obtainedFederation = obtainedFederationOptional.get(); - assertTrue(obtainedFederation instanceof P2shErpFederation); + assertEquals(P2SH_ERP_FEDERATION_FORMAT_VERSION, obtainedFederation.getFormatVersion()); assertEquals(expectedFederation, obtainedFederation); assertEquals(expectedFederationAddress, obtainedFederation.getAddress()); } @@ -391,7 +388,7 @@ void getLiveFederations_onlyActive_beforeMultikey() { assertEquals(1, liveFederations.size()); Federation activeFederation = liveFederations.get(0); - assertTrue(activeFederation instanceof Federation); + assertEquals(STANDARD_MULTISIG_FEDERATION_FORMAT_VERSION, activeFederation.getFormatVersion()); assertEquals(expectedActiveFederation, activeFederation); assertEquals(expectedActiveFederationAddress, activeFederation.getAddress()); } @@ -423,7 +420,7 @@ void getLiveFederations_onlyActive_afterMultikey() { assertEquals(1, liveFederations.size()); Federation activeFederation = liveFederations.get(0); - assertTrue(activeFederation instanceof Federation); + assertEquals(STANDARD_MULTISIG_FEDERATION_FORMAT_VERSION, activeFederation.getFormatVersion()); assertEquals(expectedActiveFederation, activeFederation); assertEquals(expectedActiveFederationAddress, activeFederation.getAddress()); } @@ -433,7 +430,7 @@ void getLiveFederations_onlyActive_erp_federation() { ActivationConfig.ForBlock configMock = mock(ActivationConfig.ForBlock.class); when(configMock.isActive(RSKIP123)).thenReturn(true); - Federation expectedActiveFederation = createErpFederation( + Federation expectedActiveFederation = createNonStandardErpFederation( getFederationMembersFromPks(1,1000, 2000, 3000, 4000), configMock ); @@ -456,7 +453,7 @@ void getLiveFederations_onlyActive_erp_federation() { assertEquals(1, liveFederations.size()); Federation activeFederation = liveFederations.get(0); - assertTrue(activeFederation instanceof ErpFederation); + assertEquals(NON_STANDARD_ERP_FEDERATION_FORMAT_VERSION, activeFederation.getFormatVersion()); assertEquals(expectedActiveFederation, activeFederation); assertEquals(expectedActiveFederationAddress, activeFederation.getAddress()); } @@ -467,8 +464,7 @@ void getLiveFederations_onlyActive_p2sh_erp_federation() { when(configMock.isActive(RSKIP123)).thenReturn(true); Federation expectedActiveFederation = createP2shErpFederation( - getFederationMembersFromPks(1,1000, 2000, 3000, 4000), - configMock + getFederationMembersFromPks(1,1000, 2000, 3000, 4000) ); Address expectedActiveFederationAddress = expectedActiveFederation.getAddress(); @@ -489,7 +485,7 @@ void getLiveFederations_onlyActive_p2sh_erp_federation() { assertEquals(1, liveFederations.size()); Federation activeFederation = liveFederations.get(0); - assertTrue(activeFederation instanceof P2shErpFederation); + assertEquals(P2SH_ERP_FEDERATION_FORMAT_VERSION, activeFederation.getFormatVersion()); assertEquals(expectedActiveFederation, activeFederation); assertEquals(expectedActiveFederationAddress, activeFederation.getAddress()); } @@ -532,12 +528,12 @@ void getLiveFederations_both_beforeMultikey() { assertEquals(2, liveFederations.size()); Federation activeFederation = liveFederations.get(0); - assertTrue(activeFederation instanceof Federation); + assertEquals(STANDARD_MULTISIG_FEDERATION_FORMAT_VERSION, activeFederation.getFormatVersion()); assertEquals(expectedActiveFederation, activeFederation); assertEquals(expectedActiveFederationAddress, activeFederation.getAddress()); Federation retiringFederation = liveFederations.get(1); - assertTrue(retiringFederation instanceof Federation); + assertEquals(STANDARD_MULTISIG_FEDERATION_FORMAT_VERSION, retiringFederation.getFormatVersion()); assertEquals(expectedRetiringFederation, retiringFederation); assertEquals(expectedRetiringFederationAddress, retiringFederation.getAddress()); } @@ -584,12 +580,12 @@ void getLiveFederations_both_afterMultikey() { assertEquals(2, liveFederations.size()); Federation activeFederation = liveFederations.get(0); - assertTrue(activeFederation instanceof Federation); + assertEquals(STANDARD_MULTISIG_FEDERATION_FORMAT_VERSION, activeFederation.getFormatVersion()); assertEquals(expectedActiveFederation, activeFederation); assertEquals(expectedActiveFederationAddress, activeFederation.getAddress()); Federation retiringFederation = liveFederations.get(1); - assertTrue(retiringFederation instanceof Federation); + assertEquals(STANDARD_MULTISIG_FEDERATION_FORMAT_VERSION, retiringFederation.getFormatVersion()); assertEquals(expectedRetiringFederation, retiringFederation); assertEquals(expectedRetiringFederationAddress, retiringFederation.getAddress()); } @@ -599,13 +595,13 @@ void getLiveFederations_both_erp_federations() { ActivationConfig.ForBlock configMock = mock(ActivationConfig.ForBlock.class); when(configMock.isActive(RSKIP123)).thenReturn(true); - Federation expectedActiveFederation = createErpFederation( + Federation expectedActiveFederation = createNonStandardErpFederation( getFederationMembersFromPks(1, 1000, 2000, 3000, 4000, 5000), configMock ); Address expectedActiveFederationAddress = expectedActiveFederation.getAddress(); - Federation expectedRetiringFederation = createErpFederation( + Federation expectedRetiringFederation = createNonStandardErpFederation( getFederationMembersFromPks(1,2000, 4000, 6000, 8000, 10000), configMock ); @@ -638,12 +634,12 @@ void getLiveFederations_both_erp_federations() { assertEquals(2, liveFederations.size()); Federation activeFederation = liveFederations.get(0); - assertTrue(activeFederation instanceof ErpFederation); + assertEquals(NON_STANDARD_ERP_FEDERATION_FORMAT_VERSION, activeFederation.getFormatVersion()); assertEquals(expectedActiveFederation, activeFederation); assertEquals(expectedActiveFederationAddress, activeFederation.getAddress()); Federation retiringFederation = liveFederations.get(1); - assertTrue(retiringFederation instanceof ErpFederation); + assertEquals(NON_STANDARD_ERP_FEDERATION_FORMAT_VERSION, retiringFederation.getFormatVersion()); assertEquals(expectedRetiringFederation, retiringFederation); assertEquals(expectedRetiringFederationAddress, retiringFederation.getAddress()); } @@ -653,7 +649,7 @@ void getLiveFederations_retiring_multikey_active_erp() { ActivationConfig.ForBlock configMock = mock(ActivationConfig.ForBlock.class); when(configMock.isActive(RSKIP123)).thenReturn(true); - Federation expectedActiveFederation = createErpFederation( + Federation expectedActiveFederation = createNonStandardErpFederation( getFederationMembersFromPks(1, 1000, 2000, 3000, 4000, 5000), configMock ); @@ -691,12 +687,12 @@ void getLiveFederations_retiring_multikey_active_erp() { assertEquals(2, liveFederations.size()); Federation activeFederation = liveFederations.get(0); - assertTrue(activeFederation instanceof ErpFederation); + assertEquals(NON_STANDARD_ERP_FEDERATION_FORMAT_VERSION, activeFederation.getFormatVersion()); assertEquals(expectedActiveFederation, activeFederation); assertEquals(expectedActiveFederationAddress, activeFederation.getAddress()); Federation retiringFederation = liveFederations.get(1); - assertTrue(retiringFederation instanceof Federation); + assertEquals(STANDARD_MULTISIG_FEDERATION_FORMAT_VERSION, retiringFederation.getFormatVersion()); assertEquals(expectedRetiringFederation, retiringFederation); assertEquals(expectedRetiringFederationAddress, retiringFederation.getAddress()); } @@ -707,12 +703,11 @@ void getLiveFederations_retiring_erp_active_p2sh_erp() { when(configMock.isActive(RSKIP123)).thenReturn(true); Federation expectedActiveFederation = createP2shErpFederation( - getFederationMembersFromPks(1, 1000, 2000, 3000, 4000, 5000), - configMock + getFederationMembersFromPks(1, 1000, 2000, 3000, 4000, 5000) ); Address expectedActiveFederationAddress = expectedActiveFederation.getAddress(); - Federation expectedRetiringFederation = createErpFederation( + Federation expectedRetiringFederation = createNonStandardErpFederation( getFederationMembersFromPks(1,2000, 4000, 6000, 8000, 10000), configMock ); @@ -745,12 +740,12 @@ void getLiveFederations_retiring_erp_active_p2sh_erp() { assertEquals(2, liveFederations.size()); Federation activeFederation = liveFederations.get(0); - assertTrue(activeFederation instanceof P2shErpFederation); + assertEquals(P2SH_ERP_FEDERATION_FORMAT_VERSION, activeFederation.getFormatVersion()); assertEquals(expectedActiveFederation, activeFederation); assertEquals(expectedActiveFederationAddress, activeFederation.getAddress()); Federation retiringFederation = liveFederations.get(1); - assertTrue(retiringFederation instanceof ErpFederation); + assertEquals(NON_STANDARD_ERP_FEDERATION_FORMAT_VERSION, retiringFederation.getFormatVersion()); assertEquals(expectedRetiringFederation, retiringFederation); assertEquals(expectedRetiringFederationAddress, retiringFederation.getAddress()); } @@ -761,14 +756,12 @@ void getLiveFederations_both_p2sh_erp_federations() { when(configMock.isActive(RSKIP123)).thenReturn(true); Federation expectedActiveFederation = createP2shErpFederation( - getFederationMembersFromPks(1, 1000, 2000, 3000, 4000, 5000), - configMock + getFederationMembersFromPks(1, 1000, 2000, 3000, 4000, 5000) ); Address expectedActiveFederationAddress = expectedActiveFederation.getAddress(); Federation expectedRetiringFederation = createP2shErpFederation( - getFederationMembersFromPks(1,2000, 4000, 6000, 8000, 10000), - configMock + getFederationMembersFromPks(1,2000, 4000, 6000, 8000, 10000) ); Address expectedRetiringFederationAddress = expectedRetiringFederation.getAddress(); @@ -799,47 +792,37 @@ void getLiveFederations_both_p2sh_erp_federations() { assertEquals(2, liveFederations.size()); Federation activeFederation = liveFederations.get(0); - assertTrue(activeFederation instanceof P2shErpFederation); + assertEquals(P2SH_ERP_FEDERATION_FORMAT_VERSION, activeFederation.getFormatVersion()); assertEquals(expectedActiveFederation, activeFederation); assertEquals(expectedActiveFederationAddress, activeFederation.getAddress()); Federation retiringFederation = liveFederations.get(1); - assertTrue(retiringFederation instanceof P2shErpFederation); + assertEquals(P2SH_ERP_FEDERATION_FORMAT_VERSION, retiringFederation.getFormatVersion()); assertEquals(expectedRetiringFederation, retiringFederation); assertEquals(expectedRetiringFederationAddress, retiringFederation.getAddress()); } private Federation createFederation(List members) { - return new StandardMultisigFederation( - members, - creationTime, - 0L, - testnetParams - ); + FederationArgs federationArgs = new FederationArgs(members, creationTime, 0L, testnetParams); + return FederationFactory.buildStandardMultiSigFederation(federationArgs); } - private Federation createErpFederation(List members, ActivationConfig.ForBlock activations) { - return new LegacyErpFederation( - members, - creationTime, - 0L, - testnetParams, - bridgeConstants.getErpFedPubKeysList(), - bridgeConstants.getErpFedActivationDelay(), - activations - ); + private ErpFederation createNonStandardErpFederation(List members, ActivationConfig.ForBlock activations) { + List erpPubKeys = bridgeConstants.getErpFedPubKeysList(); + long activationDelay = bridgeConstants.getErpFedActivationDelay(); + FederationArgs federationArgs = + new FederationArgs(members, creationTime, 0L, testnetParams); + + return FederationFactory.buildNonStandardErpFederation(federationArgs, erpPubKeys, activationDelay, activations); } - private Federation createP2shErpFederation(List members, ActivationConfig.ForBlock activations) { - return new P2shErpFederation( - members, - creationTime, - 0L, - testnetParams, - bridgeConstants.getErpFedPubKeysList(), - bridgeConstants.getErpFedActivationDelay(), - activations - ); + private ErpFederation createP2shErpFederation(List members) { + List erpPubKeys = bridgeConstants.getErpFedPubKeysList(); + long activationDelay = bridgeConstants.getErpFedActivationDelay(); + FederationArgs federationArgs = + new FederationArgs(members, creationTime, 0L, testnetParams); + + return FederationFactory.buildP2shErpFederation(federationArgs, erpPubKeys, activationDelay); } private List getFederationMembersFromPks(int offset, Integer... pks) { diff --git a/src/test/java/co/rsk/federate/FederationWatcherTest.java b/src/test/java/co/rsk/federate/FederationWatcherTest.java index 4c3a580cc..7c9119778 100644 --- a/src/test/java/co/rsk/federate/FederationWatcherTest.java +++ b/src/test/java/co/rsk/federate/FederationWatcherTest.java @@ -13,15 +13,16 @@ import co.rsk.bitcoinj.core.BtcECKey; import co.rsk.bitcoinj.core.NetworkParameters; import co.rsk.federate.signing.utils.TestUtils; -import co.rsk.peg.Federation; -import co.rsk.peg.FederationMember; +import co.rsk.peg.federation.Federation; +import co.rsk.peg.federation.FederationArgs; +import co.rsk.peg.federation.FederationFactory; +import co.rsk.peg.federation.FederationMember; import java.math.BigInteger; import java.time.Instant; import java.util.Arrays; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; -import co.rsk.peg.StandardMultisigFederation; import org.ethereum.crypto.ECKey; import org.ethereum.facade.Ethereum; import org.ethereum.listener.EthereumListenerAdapter; @@ -31,26 +32,23 @@ import org.mockito.invocation.InvocationOnMock; class FederationWatcherTest { - private final Federation federation1 = new StandardMultisigFederation( - getFederationMembersFromPksForBtc(1000, 2000, 3000, 4000), - Instant.ofEpochMilli(5005L), - 0L, - NetworkParameters.fromID(NetworkParameters.ID_REGTEST) - ); - - private final Federation federation2 = new StandardMultisigFederation( - getFederationMembersFromPksForBtc(2000, 3000, 4000, 5000, 6000, 7000), - Instant.ofEpochMilli(15300L), - 0L, - NetworkParameters.fromID(NetworkParameters.ID_REGTEST) - ); - - private final Federation federation3 = new StandardMultisigFederation( - getFederationMembersFromPksForBtc(5000, 6000, 7000), - Instant.ofEpochMilli(7400L), - 0L, - NetworkParameters.fromID(NetworkParameters.ID_REGTEST) - ); + List federation1Members = getFederationMembersFromPksForBtc(1000, 2000, 3000, 4000); + Instant federation1CreationTime = Instant.ofEpochMilli(5005L); + long creationBlockNumber = 0L; + NetworkParameters btcParams = NetworkParameters.fromID(NetworkParameters.ID_REGTEST); + + FederationArgs federation1Args = new FederationArgs(federation1Members, federation1CreationTime, creationBlockNumber, btcParams); + private final Federation federation1 = FederationFactory.buildStandardMultiSigFederation(federation1Args); + + List federation2Members = getFederationMembersFromPksForBtc(2000, 3000, 4000, 5000, 6000, 7000); + Instant federation2CreationTime = Instant.ofEpochMilli(15300L); + FederationArgs federation2Args = new FederationArgs(federation2Members, federation2CreationTime, creationBlockNumber, btcParams); + private final Federation federation2 = FederationFactory.buildStandardMultiSigFederation(federation2Args); + + List federation3Members = getFederationMembersFromPksForBtc(5000, 6000, 7000); + Instant federation3CreationTime = Instant.ofEpochMilli(7400L); + FederationArgs federation3Args = new FederationArgs(federation3Members, federation3CreationTime, creationBlockNumber, btcParams); + private final Federation federation3 = FederationFactory.buildStandardMultiSigFederation(federation3Args); private FederationProvider federationProvider; private Ethereum ethereumMock; diff --git a/src/test/java/co/rsk/federate/bitcoin/BitcoinWrapperImplTest.java b/src/test/java/co/rsk/federate/bitcoin/BitcoinWrapperImplTest.java index ad8543643..a3be2f0da 100644 --- a/src/test/java/co/rsk/federate/bitcoin/BitcoinWrapperImplTest.java +++ b/src/test/java/co/rsk/federate/bitcoin/BitcoinWrapperImplTest.java @@ -14,7 +14,7 @@ import co.rsk.config.BridgeRegTestConstants; import co.rsk.federate.FederatorSupport; import co.rsk.federate.adapter.ThinConverter; -import co.rsk.peg.Federation; +import co.rsk.peg.federation.Federation; import co.rsk.peg.btcLockSender.BtcLockSender; import co.rsk.peg.btcLockSender.BtcLockSenderProvider; import co.rsk.peg.pegininstructions.PeginInstructionsException; diff --git a/src/test/java/co/rsk/federate/btcreleaseclient/BtcReleaseClientTest.java b/src/test/java/co/rsk/federate/btcreleaseclient/BtcReleaseClientTest.java index b09687c84..c550a7330 100644 --- a/src/test/java/co/rsk/federate/btcreleaseclient/BtcReleaseClientTest.java +++ b/src/test/java/co/rsk/federate/btcreleaseclient/BtcReleaseClientTest.java @@ -56,11 +56,7 @@ import co.rsk.federate.signing.hsm.requirements.ReleaseRequirementsEnforcerException; import co.rsk.federate.signing.utils.TestUtils; import co.rsk.net.NodeBlockProcessor; -import co.rsk.peg.Federation; -import co.rsk.peg.StandardMultisigFederation; -import co.rsk.peg.ErpFederation; -import co.rsk.peg.LegacyErpFederation; -import co.rsk.peg.FederationMember; +import co.rsk.peg.federation.*; import co.rsk.peg.StateForFederator; import java.math.BigInteger; @@ -74,6 +70,7 @@ import java.util.TreeMap; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; + import org.ethereum.config.Constants; import org.ethereum.config.blockchain.upgrades.ActivationConfig; import org.ethereum.core.Block; @@ -598,23 +595,17 @@ void validateTxCanBeSigned_fast_bridge_ok() throws Exception { @Test void validateTxCanBeSigned_erp_fed_ok() throws Exception { Federation federation = TestUtils.createFederation(params, 3); - ErpFederation erpFederation = new LegacyErpFederation( - federation.getMembers(), - federation.getCreationTime(), - federation.getCreationBlockNumber(), - params, - erpFedKeys, - 5063, - mock(ActivationConfig.ForBlock.class) - ); + FederationArgs federationArgs = federation.getArgs(); + ErpFederation nonStandardErpFederation = + FederationFactory.buildNonStandardErpFederation(federationArgs, erpFedKeys, 5063, mock(ActivationConfig.ForBlock.class)); // Create a tx from the Fed to a random btc address BtcTransaction releaseTx = createReleaseTxAndAddInput(federation); - BtcECKey fed1Key = erpFederation.getBtcPublicKeys().get(0); + BtcECKey fed1Key = nonStandardErpFederation.getBtcPublicKeys().get(0); ECPublicKey signerPublicKey = new ECPublicKey(fed1Key.getPubKey()); - test_validateTxCanBeSigned(erpFederation, releaseTx, signerPublicKey); + test_validateTxCanBeSigned(nonStandardErpFederation, releaseTx, signerPublicKey); } @Test @@ -622,12 +613,10 @@ void validateTxCanBeSigned_federatorAlreadySigned() throws Exception { // Arrange BtcECKey federator1PrivKey = new BtcECKey(); BtcECKey federator2PrivKey = new BtcECKey(); - Federation federation = new StandardMultisigFederation( - FederationMember.getFederationMembersFromKeys(Arrays.asList(federator1PrivKey, federator2PrivKey)), - Instant.now(), - 0, - params - ); + List fedMembers = FederationMember.getFederationMembersFromKeys(Arrays.asList(federator1PrivKey, federator2PrivKey)); + FederationArgs federationArgs = new FederationArgs(fedMembers, Instant.now(), 0, params); + + Federation federation = FederationFactory.buildStandardMultiSigFederation(federationArgs); // Create a tx from the Fed to a random btc address BtcTransaction releaseTx = new BtcTransaction(params); @@ -720,12 +709,10 @@ void removeSignaturesFromTransaction() { // Arrange BtcECKey federator1PrivKey = new BtcECKey(); BtcECKey federator2PrivKey = new BtcECKey(); - Federation federation = new StandardMultisigFederation( - FederationMember.getFederationMembersFromKeys(Arrays.asList(federator1PrivKey, federator2PrivKey)), - Instant.now(), - 0, - params - ); + List fedMembers = FederationMember.getFederationMembersFromKeys(Arrays.asList(federator1PrivKey, federator2PrivKey)); + FederationArgs federationArgs = new FederationArgs(fedMembers, Instant.now(), 0, params); + + Federation federation = FederationFactory.buildStandardMultiSigFederation(federationArgs); // Create a tx from the Fed to a random btc address BtcTransaction releaseTx = new BtcTransaction(params); @@ -797,18 +784,12 @@ void extractStandardRedeemScript_fast_bridge_redeem_script() { @Test void extractStandardRedeemScript_erp_redeem_script() { Federation federation = TestUtils.createFederation(params, 1); + FederationArgs federationArgs = federation.getArgs(); - ErpFederation erpFederation = new LegacyErpFederation( - federation.getMembers(), - federation.getCreationTime(), - federation.getCreationBlockNumber(), - params, - erpFedKeys, - 5063, - mock(ActivationConfig.ForBlock.class) - ); + ErpFederation nonStandardErpFederation = + FederationFactory.buildNonStandardErpFederation(federationArgs, erpFedKeys, 5063, mock(ActivationConfig.ForBlock.class)); - test_extractStandardRedeemScript(federation.getRedeemScript(), erpFederation.getRedeemScript()); + test_extractStandardRedeemScript(federation.getRedeemScript(), nonStandardErpFederation.getRedeemScript()); } @Test @@ -1055,12 +1036,8 @@ private Federation createFederation(List btcECKeyList) { btcECKeyList.forEach(btcECKey -> federationMembers.add( new FederationMember(btcECKey, new ECKey(), new ECKey())) ); + FederationArgs federationArgs = new FederationArgs(federationMembers, Instant.now(), 0L, params); - return new StandardMultisigFederation( - federationMembers, - Instant.now(), - 0L, - params - ); + return FederationFactory.buildStandardMultiSigFederation(federationArgs); } } diff --git a/src/test/java/co/rsk/federate/mock/SimpleBitcoinWrapper.java b/src/test/java/co/rsk/federate/mock/SimpleBitcoinWrapper.java index f8297f8d0..0f342ebcf 100644 --- a/src/test/java/co/rsk/federate/mock/SimpleBitcoinWrapper.java +++ b/src/test/java/co/rsk/federate/mock/SimpleBitcoinWrapper.java @@ -3,7 +3,7 @@ import co.rsk.federate.bitcoin.BitcoinWrapper; import co.rsk.federate.bitcoin.BlockListener; import co.rsk.federate.bitcoin.TransactionListener; -import co.rsk.peg.Federation; +import co.rsk.peg.federation.Federation; import java.util.HashMap; import java.util.HashSet; import java.util.List; diff --git a/src/test/java/co/rsk/federate/signing/hsm/message/PowHSMSignerMessageBuilderTest.java b/src/test/java/co/rsk/federate/signing/hsm/message/PowHSMSignerMessageBuilderTest.java index 1709947ed..fb3d71e21 100644 --- a/src/test/java/co/rsk/federate/signing/hsm/message/PowHSMSignerMessageBuilderTest.java +++ b/src/test/java/co/rsk/federate/signing/hsm/message/PowHSMSignerMessageBuilderTest.java @@ -17,7 +17,7 @@ import co.rsk.config.BridgeRegTestConstants; import co.rsk.core.bc.BlockHashesHelper; import co.rsk.crypto.Keccak256; -import co.rsk.peg.Federation; +import co.rsk.peg.federation.Federation; import co.rsk.trie.Trie; import java.util.Collections; import java.util.List; diff --git a/src/test/java/co/rsk/federate/signing/hsm/message/SignerMessageBuilderV1Test.java b/src/test/java/co/rsk/federate/signing/hsm/message/SignerMessageBuilderV1Test.java index bb6fc68c1..4378a0ba4 100644 --- a/src/test/java/co/rsk/federate/signing/hsm/message/SignerMessageBuilderV1Test.java +++ b/src/test/java/co/rsk/federate/signing/hsm/message/SignerMessageBuilderV1Test.java @@ -10,7 +10,7 @@ import co.rsk.bitcoinj.params.RegTestParams; import co.rsk.bitcoinj.script.Script; import co.rsk.config.BridgeRegTestConstants; -import co.rsk.peg.Federation; +import co.rsk.peg.federation.Federation; import org.junit.jupiter.api.Test; class SignerMessageBuilderV1Test { diff --git a/src/test/java/co/rsk/federate/signing/utils/TestUtils.java b/src/test/java/co/rsk/federate/signing/utils/TestUtils.java index 9b8f660fb..eafc1d70b 100644 --- a/src/test/java/co/rsk/federate/signing/utils/TestUtils.java +++ b/src/test/java/co/rsk/federate/signing/utils/TestUtils.java @@ -15,9 +15,11 @@ import co.rsk.bitcoinj.wallet.RedeemData; import co.rsk.core.BlockDifficulty; import co.rsk.crypto.Keccak256; -import co.rsk.peg.Federation; -import co.rsk.peg.FederationMember; -import co.rsk.peg.StandardMultisigFederation; +import co.rsk.peg.federation.Federation; +import co.rsk.peg.federation.FederationArgs; +import co.rsk.peg.federation.FederationFactory; +import co.rsk.peg.federation.FederationMember; + import java.lang.reflect.Field; import java.math.BigInteger; import java.security.SecureRandom; @@ -86,13 +88,10 @@ public static Block mockBlockWithUncles(long number, Keccak256 hash, long diffic public static Federation createFederation(NetworkParameters params, int amountOfMembers) { List keys = Stream.generate(BtcECKey::new).limit(amountOfMembers).collect(Collectors.toList()); + List members = FederationMember.getFederationMembersFromKeys(keys); + FederationArgs federationArgs = new FederationArgs(members, Instant.now(), 0, params); - return new StandardMultisigFederation( - FederationMember.getFederationMembersFromKeys(keys), - Instant.now(), - 0, - params - ); + return FederationFactory.buildStandardMultiSigFederation(federationArgs); } public static TransactionInput createTransactionInput(