Skip to content

Commit

Permalink
Rename FastBridge to Flyover. Add FAST_BRIDGE type and assign it to f…
Browse files Browse the repository at this point in the history
…lyover parser
  • Loading branch information
julia-zack committed Sep 27, 2023
1 parent a0080b0 commit fb04f42
Show file tree
Hide file tree
Showing 8 changed files with 52 additions and 62 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@

import java.util.List;

public class FastBridgeParser extends StandardRedeemScriptParser {
private static final Logger logger = LoggerFactory.getLogger(FastBridgeParser.class);
public class FlyoverRedeemScriptParser extends StandardRedeemScriptParser {
private static final Logger logger = LoggerFactory.getLogger(FlyoverRedeemScriptParser.class);
protected final byte[] derivationHash;

public FastBridgeParser(
public FlyoverRedeemScriptParser(
ScriptType scriptType,
List<ScriptChunk> redeemScriptChunks,
List<ScriptChunk> rawChunks
Expand All @@ -21,46 +21,29 @@ public FastBridgeParser(
redeemScriptChunks,
rawChunks
);

// the idea of this was to not have to call the extract function and check the type again
// so when we call an instance of FastBridgeParser, the multisigType and the redeemScriptChunks are calculated asap
// and when we call just the extract function from outside, it does the multisig type verification

List<ScriptChunk> subChunks = redeemScriptChunks.subList(2, redeemScriptChunks.size());
if (isFastBridgeMultiSig(redeemScriptChunks)) {
this.multiSigType = MultiSigType.FAST_BRIDGE_MULTISIG;
this.redeemScriptChunks = StandardRedeemScriptParser
.extractStandardRedeemScript(subChunks).getChunks();
}
if (isFastBridgeErpFed(redeemScriptChunks)) {
this.multiSigType = MultiSigType.FAST_BRIDGE_ERP_FED;
this.redeemScriptChunks = ErpFederationRedeemScriptParser.
extractStandardRedeemScript(subChunks).getChunks();
}
if (isFastBridgeP2shErpFed(redeemScriptChunks)) {
this.multiSigType = MultiSigType.FAST_BRIDGE_P2SH_ERP_FED;
this.redeemScriptChunks = P2shErpFederationRedeemScriptParser.
extractStandardRedeemScript(subChunks).getChunks();
}
this.multiSigType = MultiSigType.FAST_BRIDGE;
this.derivationHash = redeemScriptChunks.get(0).data;
}

public byte[] getDerivationHash() {
return derivationHash;
}

public static Script extractStandardRedeemScript(List<ScriptChunk> chunks) {
if (isFastBridgeMultiSig(chunks)) {
public Script extractStandardRedeemScript(List<ScriptChunk> chunks) {

This comment has been minimized.

Copy link
@julia-zack

julia-zack Sep 29, 2023

Author
@Override
public Script extractStandardRedeemScript() {

    List<ScriptChunk> chunksWithoutFlyover = redeemScriptChunks.subList(2, redeemScriptChunks.size());

    RedeemScriptParserFactory.get(chunksWithoutFlyover).extractStandardRedeemScript();

    String message = "Provided redeem script has unknown structure";
    logger.debug("[FastBridgeParser] {}", message);
    throw new VerificationException(message);
}

List<ScriptChunk> chunksWithoutFlyover = chunks.subList(2, chunks.size());

if (isMultiSig(chunksWithoutFlyover)) {
return StandardRedeemScriptParser
.extractStandardRedeemScript(chunks.subList(2, chunks.size()));
.extractStandardRedeemScript();
}
if (isFastBridgeErpFed(chunks)) {
if (isErpFed(chunksWithoutFlyover)) {
return ErpFederationRedeemScriptParser.
extractStandardRedeemScript(chunks.subList(2, chunks.size()));
extractStandardRedeemScript(chunksWithoutFlyover);
}
if (isFastBridgeP2shErpFed(chunks)) {
if (isP2shErpFed(chunksWithoutFlyover)) {
return P2shErpFederationRedeemScriptParser.
extractStandardRedeemScript(chunks.subList(2, chunks.size()));
extractStandardRedeemScript(chunksWithoutFlyover);
}

String message = "Provided redeem script has unknown structure";
Expand Down Expand Up @@ -96,6 +79,16 @@ public static Script createFastBridgeRedeemScript(
.build();
}

public boolean isMultiSig(List<ScriptChunk> chunksWithoutFlyover) {
return RedeemScriptValidator.hasStandardRedeemScriptStructure(chunksWithoutFlyover);
}
public boolean isErpFed(List<ScriptChunk> chunksWithoutFlyover) {
return RedeemScriptValidator.hasErpRedeemScriptStructure(chunksWithoutFlyover);
}
public boolean isP2shErpFed(List<ScriptChunk> chunksWithoutFlyover) {
return RedeemScriptValidator.hasP2shErpRedeemScriptStructure(chunksWithoutFlyover);
}

public static boolean isFastBridgeMultiSig(List<ScriptChunk> chunks) {
return RedeemScriptValidator.hasFastBridgePrefix(chunks) &&
RedeemScriptValidator.hasStandardRedeemScriptStructure(chunks.subList(2, chunks.size()));
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/co/rsk/bitcoinj/script/RedeemScriptParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ enum MultiSigType {
ERP_FED,
FAST_BRIDGE_ERP_FED,
P2SH_ERP_FED,
FAST_BRIDGE_P2SH_ERP_FED
FAST_BRIDGE_P2SH_ERP_FED,
FAST_BRIDGE
}

enum ScriptType {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ public static RedeemScriptParser get(List<ScriptChunk> chunks) {
return new NoRedeemScriptParser();
}

if (FastBridgeParser.isFastBridgeMultiSig(result.internalScript)) {
if (FlyoverRedeemScriptParser.isFastBridgeMultiSig(result.internalScript)) {
logger.debug("[get] Return FastBridgeRedeemScriptParser");
return new FastBridgeParser(
return new FlyoverRedeemScriptParser(
result.scriptType,
result.internalScript,
chunks
Expand All @@ -57,9 +57,9 @@ public static RedeemScriptParser get(List<ScriptChunk> chunks) {
chunks
);
}
if (FastBridgeParser.isFastBridgeP2shErpFed(result.internalScript)) {
if (FlyoverRedeemScriptParser.isFastBridgeP2shErpFed(result.internalScript)) {
logger.debug("[get] Return FastBridgeP2shErpRedeemScriptParser");
return new FastBridgeParser(
return new FlyoverRedeemScriptParser(
result.scriptType,
result.internalScript,
chunks
Expand All @@ -73,9 +73,9 @@ public static RedeemScriptParser get(List<ScriptChunk> chunks) {
chunks
);
}
if (FastBridgeParser.isFastBridgeErpFed(result.internalScript)) {
if (FlyoverRedeemScriptParser.isFastBridgeErpFed(result.internalScript)) {
logger.debug("[get] Return FastBridgeErpRedeemScriptParser");
return new FastBridgeParser(
return new FlyoverRedeemScriptParser(
result.scriptType,
result.internalScript,
chunks
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/co/rsk/bitcoinj/script/Script.java
Original file line number Diff line number Diff line change
Expand Up @@ -460,9 +460,9 @@ public Script createEmptyInputScript(@Nullable BtcECKey key, @Nullable Script re

private boolean isErpType(Script redeemScript) {
List<ScriptChunk> chunks = redeemScript.getChunks();
boolean isFastBridgeErp = FastBridgeParser.isFastBridgeErpFed(chunks);
boolean isFastBridgeErp = FlyoverRedeemScriptParser.isFastBridgeErpFed(chunks.subList(2, chunks.size()));
boolean isErp = RedeemScriptValidator.hasErpRedeemScriptStructure(chunks);
boolean isFastBridgeP2shErp = FastBridgeParser.isFastBridgeP2shErpFed(chunks);
boolean isFastBridgeP2shErp = FlyoverRedeemScriptParser.isFastBridgeP2shErpFed(chunks);
boolean isP2shErp = RedeemScriptValidator.hasP2shErpRedeemScriptStructure(chunks);

return isFastBridgeErp || isErp || isFastBridgeP2shErp || isP2shErp;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,10 +123,6 @@ public Script extractStandardRedeemScript() {
return new Script(redeemScriptChunks);
}

public static Script extractStandardRedeemScript(List<ScriptChunk> redeemScriptChunks) {
return new Script(redeemScriptChunks);
}

public static boolean isStandardMultiSig(List<ScriptChunk> chunks) {
return RedeemScriptValidator.hasStandardRedeemScriptStructure(chunks);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public void extractStandardRedeemScript_fromFastBridgeErpRedeemScript() {
Script standardRedeemScript = RedeemScriptUtils.createStandardRedeemScript(
defaultRedeemScriptKeys);

Script obtainedRedeemScript = FastBridgeParser.extractStandardRedeemScript(
Script obtainedRedeemScript = FlyoverRedeemScriptParser.extractStandardRedeemScript(
fastBridgeErpRedeemScript.getChunks()
);

Expand All @@ -45,7 +45,7 @@ public void extractStandardRedeemScript_fromStandardRedeemScript_fail() {
Script standardRedeemScript = RedeemScriptUtils.createStandardRedeemScript(
defaultRedeemScriptKeys);

FastBridgeParser.extractStandardRedeemScript(standardRedeemScript.getChunks());
FlyoverRedeemScriptParser.extractStandardRedeemScript(standardRedeemScript.getChunks());
}

@Test
Expand All @@ -65,7 +65,7 @@ public void createFastBridgeErpRedeemScript_from_Erp_redeem_script() {
derivationArgumentsHash.getBytes()
);

Script obtainedRedeemScript = FastBridgeParser.createFastBridgeRedeemScript(
Script obtainedRedeemScript = FlyoverRedeemScriptParser.createFastBridgeRedeemScript(
erpRedeemScript,
derivationArgumentsHash
);
Expand All @@ -82,14 +82,14 @@ public void isFastBridgeErpFed() {
Sha256Hash.of(new byte[]{1}).getBytes()
);

Assert.assertTrue(FastBridgeParser.isFastBridgeErpFed(fastBridgeErpRedeemScript.getChunks()));
Assert.assertTrue(FlyoverRedeemScriptParser.isFastBridgeErpFed(fastBridgeErpRedeemScript.getChunks()));
}

@Test
public void isFastBridgeErpFed_falseWithCustomRedeemScript() {
Script customRedeemScript = RedeemScriptUtils.createCustomRedeemScript(
defaultRedeemScriptKeys);

Assert.assertFalse(FastBridgeParser.isFastBridgeErpFed(customRedeemScript.getChunks()));
Assert.assertFalse(FlyoverRedeemScriptParser.isFastBridgeErpFed(customRedeemScript.getChunks()));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public void extractStandardRedeemScript_fromFastBridgeP2shErpRedeemScript() {
defaultRedeemScriptKeys
);

Script obtainedRedeemScript = FastBridgeParser.extractStandardRedeemScript(
Script obtainedRedeemScript = FlyoverRedeemScriptParser.extractStandardRedeemScript(
fastBridgeP2shErpRedeemScript.getChunks()
);

Expand All @@ -56,7 +56,7 @@ public void extractStandardRedeemScript_fromStandardRedeemScript_fail() {
defaultRedeemScriptKeys
);

FastBridgeParser.extractStandardRedeemScript(standardRedeemScript.getChunks());
FlyoverRedeemScriptParser.extractStandardRedeemScript(standardRedeemScript.getChunks());
}

@Test
Expand All @@ -76,7 +76,7 @@ public void createFastBridgeP2shErpRedeemScript_fromP2shErpRedeemScript() {
derivationArgumentsHash.getBytes()
);

Script obtainedRedeemScript = FastBridgeParser.createFastBridgeRedeemScript(
Script obtainedRedeemScript = FlyoverRedeemScriptParser.createFastBridgeRedeemScript(
erpRedeemScript,
derivationArgumentsHash
);
Expand All @@ -93,7 +93,7 @@ public void isFastBridgeP2shErpFed() {
Sha256Hash.of(new byte[]{1}).getBytes()
);

Assert.assertTrue(FastBridgeParser.isFastBridgeP2shErpFed(
Assert.assertTrue(FlyoverRedeemScriptParser.isFastBridgeP2shErpFed(
fastBridgeP2shErpRedeemScript.getChunks())
);
}
Expand All @@ -107,7 +107,7 @@ public void isFastBridgeP2shErpFed_falseWithFastBridgeErpFed() {
Sha256Hash.of(new byte[]{1}).getBytes()
);

Assert.assertFalse(FastBridgeParser.isFastBridgeP2shErpFed(
Assert.assertFalse(FlyoverRedeemScriptParser.isFastBridgeP2shErpFed(
fastBridgeErpRedeemScript.getChunks())
);
}
Expand All @@ -118,7 +118,7 @@ public void isFastBridgeP2shErpFed_falseWithCustomRedeemScript() {
defaultRedeemScriptKeys
);

Assert.assertFalse(FastBridgeParser.isFastBridgeP2shErpFed(
Assert.assertFalse(FlyoverRedeemScriptParser.isFastBridgeP2shErpFed(
customRedeemScript.getChunks())
);
}
Expand All @@ -137,7 +137,7 @@ public void createFastBridgeP2shErpRedeemScript_compareAgainstOtherImplementatio
RawGeneratedRedeemScript[] generatedScripts = new ObjectMapper().readValue(rawRedeemScripts, RawGeneratedRedeemScript[].class);

for (RawGeneratedRedeemScript generatedScript : generatedScripts) {
Script bitcoinjScript = FastBridgeParser.createFastBridgeRedeemScript(
Script bitcoinjScript = FlyoverRedeemScriptParser.createFastBridgeRedeemScript(
generatedScript.powpegScript,
generatedScript.derivationHash
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public void extractRedeemScriptFromMultiSigFastBridgeRedeemScript_fb_redeem_scri

Script standardRedeemScript = RedeemScriptUtils.createStandardRedeemScript(publicKeys);

Script obtainedRedeemScript = FastBridgeParser.extractStandardRedeemScript(
Script obtainedRedeemScript = FlyoverRedeemScriptParser.extractStandardRedeemScript(
fastBridgeRedeemScript.getChunks()
);

Expand All @@ -54,7 +54,7 @@ public void createMultiSigFastBridgeRedeemScript_valid_parameters() {
publicKeys
);

Script obtainedRedeemScript = FastBridgeParser.createFastBridgeRedeemScript(
Script obtainedRedeemScript = FlyoverRedeemScriptParser.createFastBridgeRedeemScript(
redeemScript,
derivationArgumentsHash
);
Expand All @@ -69,19 +69,19 @@ public void createMultiSigFastBridgeRedeemScript_fb_redeem_script() {
publicKeys
);

FastBridgeParser.createFastBridgeRedeemScript(fastBridgeRedeemScript, data);
FlyoverRedeemScriptParser.createFastBridgeRedeemScript(fastBridgeRedeemScript, data);
}

@Test(expected = VerificationException.class)
public void createMultiSigFastBridgeRedeemScript_null_derivation_arguments_hash() {
Script redeemScript = RedeemScriptUtils.createStandardRedeemScript(publicKeys);
FastBridgeParser.createFastBridgeRedeemScript(redeemScript, null);
FlyoverRedeemScriptParser.createFastBridgeRedeemScript(redeemScript, null);
}

@Test(expected = VerificationException.class)
public void createMultiSigFastBridgeRedeemScript_zero_hash_as_derivation_arguments_hash() {
Script redeemScript = RedeemScriptUtils.createStandardRedeemScript(publicKeys);
FastBridgeParser.createFastBridgeRedeemScript(redeemScript, Sha256Hash.ZERO_HASH);
FlyoverRedeemScriptParser.createFastBridgeRedeemScript(redeemScript, Sha256Hash.ZERO_HASH);
}

@Test
Expand All @@ -93,7 +93,7 @@ public void getDerivationArgumentsHash_from_fast_bridge_multiSig() {
);

RedeemScriptParser parser = RedeemScriptParserFactory.get(fastBridgeRedeemScript.getChunks());
FastBridgeParser fastBridgeRedeemScriptParser = (FastBridgeParser) parser;
FlyoverRedeemScriptParser fastBridgeRedeemScriptParser = (FlyoverRedeemScriptParser) parser;

Assert.assertArrayEquals(fastBridgeRedeemScriptParser.getDerivationHash(), data);
}
Expand Down

0 comments on commit fb04f42

Please sign in to comment.