From 94725a86e5d88d2f7c47a5293d1977173b6090f8 Mon Sep 17 00:00:00 2001 From: nathanieliov <nathaniel.calderon@iovlabs.org> Date: Mon, 7 Oct 2024 14:59:40 -0400 Subject: [PATCH 1/2] - Update use of RedeemScriptParser interface to support new changes after refactoring. - Update test to use FlyoverRedeemScriptBuilderImpl and get rid of use of the removed FastBridgeRedeemScriptParser --- .../btcreleaseclient/BtcReleaseClient.java | 7 ++-- .../BtcReleaseClientTest.java | 37 +++++++++++-------- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/src/main/java/co/rsk/federate/btcreleaseclient/BtcReleaseClient.java b/src/main/java/co/rsk/federate/btcreleaseclient/BtcReleaseClient.java index 6ca154b38..154cb8b10 100644 --- a/src/main/java/co/rsk/federate/btcreleaseclient/BtcReleaseClient.java +++ b/src/main/java/co/rsk/federate/btcreleaseclient/BtcReleaseClient.java @@ -6,6 +6,7 @@ import co.rsk.bitcoinj.script.RedeemScriptParser; import co.rsk.bitcoinj.script.RedeemScriptParserFactory; import co.rsk.bitcoinj.script.Script; +import co.rsk.bitcoinj.script.ScriptBuilder; import co.rsk.bitcoinj.script.ScriptChunk; import co.rsk.bitcoinj.wallet.RedeemData; import co.rsk.peg.constants.BridgeConstants; @@ -479,8 +480,9 @@ protected void removeSignaturesFromTransaction(BtcTransaction pegoutBtcTx, Feder } protected Script extractStandardRedeemScript(Script redeemScript) { - RedeemScriptParser parser = RedeemScriptParserFactory.get(redeemScript.getChunks()); - return parser.extractStandardRedeemScript(); + RedeemScriptParser redeemScriptParser = RedeemScriptParserFactory.get(redeemScript.getChunks()); + List<ScriptChunk> defaultRedeemScriptChunks = redeemScriptParser.extractStandardRedeemScriptChunks(); + return new ScriptBuilder().addChunks(defaultRedeemScriptChunks).build(); } private Script extractDefaultRedeemScript(Federation federation) { @@ -505,7 +507,6 @@ protected Federation getSpendingFederation(BtcTransaction btcTx) { List<Federation> spendingFedFilter = observedFederations.stream() .filter(f -> (extractDefaultRedeemScript(f)).equals(redeemScript)).collect(Collectors.toList()); - return spendingFedFilter.get(0); } diff --git a/src/test/java/co/rsk/federate/btcreleaseclient/BtcReleaseClientTest.java b/src/test/java/co/rsk/federate/btcreleaseclient/BtcReleaseClientTest.java index 5ecb22ba1..d8d1603a9 100644 --- a/src/test/java/co/rsk/federate/btcreleaseclient/BtcReleaseClientTest.java +++ b/src/test/java/co/rsk/federate/btcreleaseclient/BtcReleaseClientTest.java @@ -29,10 +29,10 @@ import co.rsk.bitcoinj.core.TransactionInput; import co.rsk.bitcoinj.crypto.TransactionSignature; import co.rsk.bitcoinj.params.RegTestParams; -import co.rsk.bitcoinj.script.FastBridgeRedeemScriptParser; import co.rsk.bitcoinj.script.Script; import co.rsk.bitcoinj.script.ScriptBuilder; import co.rsk.bitcoinj.script.ScriptChunk; +import co.rsk.peg.bitcoin.FlyoverRedeemScriptBuilderImpl; import co.rsk.peg.constants.BridgeConstants; import co.rsk.crypto.Keccak256; import co.rsk.federate.FederatorSupport; @@ -820,13 +820,16 @@ void validateTxCanBeSigned_fast_bridge_ok() throws Exception { Federation federation = TestUtils.createFederation(params, 1); // Create fast bridge redeem script - Script fastBridgeRedeemScript = FastBridgeRedeemScriptParser.createMultiSigFastBridgeRedeemScript( - federation.getRedeemScript(), - Sha256Hash.wrap(TestUtils.createHash(1).getBytes()) + + Keccak256 flyoverDerivationHash = createHash(1); + + Script flyoverRedeemScript = FlyoverRedeemScriptBuilderImpl.builder().of( + flyoverDerivationHash, + federation.getRedeemScript() ); // Create a tx from the Fed to a random btc address - BtcTransaction releaseTx = createReleaseTxAndAddInput(federation, fastBridgeRedeemScript); + BtcTransaction releaseTx = createReleaseTxAndAddInput(federation, flyoverRedeemScript); BtcECKey fed1Key = federation.getBtcPublicKeys().get(0); ECPublicKey signerPublicKey = new ECPublicKey(fed1Key.getPubKey()); @@ -1020,13 +1023,14 @@ void getRedeemScriptFromInput_standard_redeem_script() { @Test void extractStandardRedeemScript_fast_bridge_redeem_script() { Federation federation = TestUtils.createFederation(params, 1); - Script fastBridgeRedeemScript = - FastBridgeRedeemScriptParser.createMultiSigFastBridgeRedeemScript( - federation.getRedeemScript(), - Sha256Hash.of(TestUtils.createHash(1).getBytes()) - ); - test_extractStandardRedeemScript(federation.getRedeemScript(), fastBridgeRedeemScript); + Keccak256 flyoverDerivationHash = createHash(1); + Script flyoverRedeemScript = FlyoverRedeemScriptBuilderImpl.builder().of( + flyoverDerivationHash, + federation.getRedeemScript() + ); + + test_extractStandardRedeemScript(federation.getRedeemScript(), flyoverRedeemScript); } @Test @@ -1112,7 +1116,7 @@ private void test_extractStandardRedeemScript( ); } - private void test_getRedeemScriptFromInput(boolean isFastBridgeRedeemScript) { + private void test_getRedeemScriptFromInput(boolean isFlyoverRedeemScript) { BtcReleaseClient client = createBtcClient(); BtcECKey ecKey1 = BtcECKey.fromPrivate(BigInteger.valueOf(100)); @@ -1124,10 +1128,11 @@ private void test_getRedeemScriptFromInput(boolean isFastBridgeRedeemScript) { Script federationRedeemScript = federation.getRedeemScript(); Script inputScript; - if (isFastBridgeRedeemScript) { - federationRedeemScript = FastBridgeRedeemScriptParser.createMultiSigFastBridgeRedeemScript( - federationRedeemScript, - Sha256Hash.of(new byte[]{1}) + if (isFlyoverRedeemScript) { + Keccak256 flyoverDerivationHash = createHash(1); + federationRedeemScript = FlyoverRedeemScriptBuilderImpl.builder().of( + flyoverDerivationHash, + federation.getRedeemScript() ); } inputScript = federation.getP2SHScript().createEmptyInputScript( From 626acf2c96d7ed8090d96bba1dae6c5ddef353cd Mon Sep 17 00:00:00 2001 From: nathanieliov <nathaniel.calderon@iovlabs.org> Date: Mon, 7 Oct 2024 15:03:35 -0400 Subject: [PATCH 2/2] Set bitcoinjThin version to 0.14.4-rsk-16-SNAPSHO --- build.gradle | 2 +- gradle/verification-metadata.xml | 8 -------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/build.gradle b/build.gradle index 1612e5b5d..89efa8f1a 100644 --- a/build.gradle +++ b/build.gradle @@ -62,7 +62,7 @@ tasks.withType(AbstractArchiveTask) { ext { bitcoinjcoreVersion = '0.15.6-rsk-3' - bitcoinjVersion = '0.14.4-rsk-15' + bitcoinjVersion = '0.14.4-rsk-16-SNAPSHOT' commonsLang3Version = '3.12.0' commonsIoVersion = '2.11.0' slf4jVersion = '1.7.36' diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 891438c14..57de64579 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -69,14 +69,6 @@ <sha256 value="c717c468bfc91536f1dbc0d98d6116a8e7c49fbaff643ef8710e7505cc450878" origin="Generated by Gradle"/> </artifact> </component> - <component group="co.rsk.bitcoinj" name="bitcoinj-thin" version="0.14.4-rsk-15"> - <artifact name="bitcoinj-thin-0.14.4-rsk-15.jar"> - <sha256 value="871b008d5b148f066a6e4d46b154a96532e22b7b6faff6e28821fa4e7b078346" origin="Generated by Gradle"/> - </artifact> - <artifact name="bitcoinj-thin-0.14.4-rsk-15.pom"> - <sha256 value="deda61ace1b697c488c8acddbc60fcc55be75df9097c8cd2dad87f8c6afa21f2" origin="Generated by Gradle"/> - </artifact> - </component> <component group="com.fasterxml" name="oss-parent" version="38"> <artifact name="oss-parent-38.pom"> <sha256 value="c83f8f45dfdca8d0b6b3661c60b3f84780f671b12e06f91ad5d1c1a1d1f966e8" origin="Generated by Gradle"/>