@arklabs/wallet-sdk
Version:
Bitcoin wallet SDK with Taproot and Ark integration
38 lines (37 loc) • 1.38 kB
JavaScript
import { VtxoScript } from './base.js';
import { CSVMultisigTapscript, MultisigTapscript, } from './tapscript.js';
import { hex } from "@scure/base";
// DefaultVtxo is the default implementation of a VtxoScript.
// it contains 1 forfeit path and 1 exit path.
// forfeit = (Alice + Server)
// exit = (Alice) after csvTimelock
export var DefaultVtxo;
(function (DefaultVtxo) {
class Script extends VtxoScript {
constructor(options) {
const { pubKey, serverPubKey, csvTimelock = Script.DEFAULT_TIMELOCK, } = options;
const forfeitScript = MultisigTapscript.encode({
pubkeys: [pubKey, serverPubKey],
}).script;
const exitScript = CSVMultisigTapscript.encode({
timelock: csvTimelock,
pubkeys: [pubKey],
}).script;
super([forfeitScript, exitScript]);
this.options = options;
this.forfeitScript = hex.encode(forfeitScript);
this.exitScript = hex.encode(exitScript);
}
forfeit() {
return this.findLeaf(this.forfeitScript);
}
exit() {
return this.findLeaf(this.exitScript);
}
}
Script.DEFAULT_TIMELOCK = {
value: 144n,
type: "blocks",
}; // 1 day in blocks
DefaultVtxo.Script = Script;
})(DefaultVtxo || (DefaultVtxo = {}));