UNPKG

@arklabs/wallet-sdk

Version:

Bitcoin wallet SDK with Taproot and Ark integration

85 lines (84 loc) 3.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.VHTLC = void 0; const btc_signer_1 = require("@scure/btc-signer"); const tapscript_1 = require("./tapscript"); const base_1 = require("@scure/base"); const base_2 = require("./base"); // VHTLC is an Hashed Timelock Contract VtxoScript implementation // - claim (preimage + receiver) // - refund (sender + receiver + server) // - refundWithoutReceiver (at refundLocktime, sender + receiver + server) // - unilateralClaim (preimage + receiver after unilateralClaimDelay) // - unilateralRefund (sender + receiver after unilateralRefundDelay) // - unilateralRefundWithoutReceiver (sender after unilateralRefundWithoutReceiverDelay) var VHTLC; (function (VHTLC) { class Script extends base_2.VtxoScript { constructor(options) { const { sender, receiver, server, preimageHash, refundLocktime, unilateralClaimDelay, unilateralRefundDelay, unilateralRefundWithoutReceiverDelay, } = options; const conditionScript = preimageConditionScript(preimageHash); const claimScript = tapscript_1.ConditionMultisigTapscript.encode({ conditionScript, pubkeys: [receiver, server], }).script; const refundScript = tapscript_1.MultisigTapscript.encode({ pubkeys: [sender, receiver, server], }).script; const refundWithoutReceiverScript = tapscript_1.CLTVMultisigTapscript.encode({ absoluteTimelock: refundLocktime, pubkeys: [sender, server], }).script; const unilateralClaimScript = tapscript_1.ConditionCSVMultisigTapscript.encode({ conditionScript, timelock: unilateralClaimDelay, pubkeys: [receiver], }).script; const unilateralRefundScript = tapscript_1.CSVMultisigTapscript.encode({ timelock: unilateralRefundDelay, pubkeys: [sender, receiver], }).script; const unilateralRefundWithoutReceiverScript = tapscript_1.CSVMultisigTapscript.encode({ timelock: unilateralRefundWithoutReceiverDelay, pubkeys: [sender], }).script; super([ claimScript, refundScript, refundWithoutReceiverScript, unilateralClaimScript, unilateralRefundScript, unilateralRefundWithoutReceiverScript, ]); this.options = options; this.claimScript = base_1.hex.encode(claimScript); this.refundScript = base_1.hex.encode(refundScript); this.refundWithoutReceiverScript = base_1.hex.encode(refundWithoutReceiverScript); this.unilateralClaimScript = base_1.hex.encode(unilateralClaimScript); this.unilateralRefundScript = base_1.hex.encode(unilateralRefundScript); this.unilateralRefundWithoutReceiverScript = base_1.hex.encode(unilateralRefundWithoutReceiverScript); } claim() { return this.findLeaf(this.claimScript); } refund() { return this.findLeaf(this.refundScript); } refundWithoutReceiver() { return this.findLeaf(this.refundWithoutReceiverScript); } unilateralClaim() { return this.findLeaf(this.unilateralClaimScript); } unilateralRefund() { return this.findLeaf(this.unilateralRefundScript); } unilateralRefundWithoutReceiver() { return this.findLeaf(this.unilateralRefundWithoutReceiverScript); } } VHTLC.Script = Script; })(VHTLC || (exports.VHTLC = VHTLC = {})); function preimageConditionScript(preimageHash) { return btc_signer_1.Script.encode(["HASH160", preimageHash, "EQUAL"]); }