-
Notifications
You must be signed in to change notification settings - Fork 269
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #2727 from rsksmart/flyover-rs-parser
Create a flyover redeem script builder
- Loading branch information
Showing
16 changed files
with
578 additions
and
263 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
8 changes: 8 additions & 0 deletions
8
rskj-core/src/main/java/co/rsk/peg/bitcoin/FlyoverRedeemScriptBuilder.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
package co.rsk.peg.bitcoin; | ||
|
||
import co.rsk.bitcoinj.script.Script; | ||
import co.rsk.crypto.Keccak256; | ||
|
||
public interface FlyoverRedeemScriptBuilder { | ||
Script of(Keccak256 flyoverDerivationHash, Script redeemScript); | ||
} |
43 changes: 43 additions & 0 deletions
43
rskj-core/src/main/java/co/rsk/peg/bitcoin/FlyoverRedeemScriptBuilderImpl.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
package co.rsk.peg.bitcoin; | ||
|
||
import static co.rsk.peg.bitcoin.RedeemScriptCreationException.Reason.INVALID_FLYOVER_DERIVATION_HASH; | ||
import static java.util.Objects.isNull; | ||
|
||
import co.rsk.bitcoinj.script.Script; | ||
import co.rsk.bitcoinj.script.ScriptBuilder; | ||
import co.rsk.bitcoinj.script.ScriptOpCodes; | ||
import co.rsk.crypto.Keccak256; | ||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
|
||
public class FlyoverRedeemScriptBuilderImpl implements FlyoverRedeemScriptBuilder { | ||
private static final Logger logger = LoggerFactory.getLogger(FlyoverRedeemScriptBuilderImpl.class); | ||
|
||
private FlyoverRedeemScriptBuilderImpl() {} | ||
|
||
public static FlyoverRedeemScriptBuilderImpl builder() { | ||
return new FlyoverRedeemScriptBuilderImpl(); | ||
} | ||
|
||
@Override | ||
public Script of(Keccak256 flyoverDerivationHash, Script redeemScript) { | ||
validateFlyoverDerivationHash(flyoverDerivationHash); | ||
|
||
ScriptBuilder scriptBuilder = new ScriptBuilder(); | ||
byte[] flyoverDerivationHashSerialized = flyoverDerivationHash.getBytes(); | ||
|
||
return scriptBuilder | ||
.data(flyoverDerivationHashSerialized) | ||
.op(ScriptOpCodes.OP_DROP) | ||
.addChunks(redeemScript.getChunks()) | ||
.build(); | ||
} | ||
|
||
private void validateFlyoverDerivationHash(Keccak256 flyoverDerivationHash) { | ||
if (isNull(flyoverDerivationHash) || flyoverDerivationHash.equals(Keccak256.ZERO_HASH)) { | ||
String message = String.format("Provided flyover derivation hash %s is invalid.", flyoverDerivationHash); | ||
logger.warn("[validateFlyoverDerivationHash] {}", message); | ||
throw new RedeemScriptCreationException(message, INVALID_FLYOVER_DERIVATION_HASH); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.