@babylonlabs-io/ts-sdk 0.26.0 → 0.26.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/{buildAndBroadcastRefund-Ce5jAu-C.js → buildAndBroadcastRefund-Ccp-2GWW.js} +2 -2
  2. package/dist/{buildAndBroadcastRefund-Ce5jAu-C.js.map → buildAndBroadcastRefund-Ccp-2GWW.js.map} +1 -1
  3. package/dist/{buildAndBroadcastRefund-IQ_2SCic.cjs → buildAndBroadcastRefund-Mr3ck5ek.cjs} +2 -2
  4. package/dist/{buildAndBroadcastRefund-IQ_2SCic.cjs.map → buildAndBroadcastRefund-Mr3ck5ek.cjs.map} +1 -1
  5. package/dist/errors-BBrP8sLT.cjs +2 -0
  6. package/dist/errors-BBrP8sLT.cjs.map +1 -0
  7. package/dist/{errors-Ul7fTCjl.js → errors-CQjAF9QE.js} +483 -579
  8. package/dist/errors-CQjAF9QE.js.map +1 -0
  9. package/dist/{index-BAECy2oz.cjs → index-CIuXb72l.cjs} +2 -2
  10. package/dist/{index-BAECy2oz.cjs.map → index-CIuXb72l.cjs.map} +1 -1
  11. package/dist/{index-DLtpqdlu.js → index-D7s2ilf8.js} +2 -2
  12. package/dist/{index-DLtpqdlu.js.map → index-D7s2ilf8.js.map} +1 -1
  13. package/dist/index.cjs +1 -1
  14. package/dist/index.js +67 -70
  15. package/dist/tbv/core/clients/index.cjs +1 -1
  16. package/dist/tbv/core/clients/index.js +2 -2
  17. package/dist/tbv/core/contracts/abis/BTCVaultRegistry.abi.d.ts +6 -6
  18. package/dist/tbv/core/index.cjs +1 -1
  19. package/dist/tbv/core/index.js +69 -72
  20. package/dist/tbv/core/services/index.cjs +1 -1
  21. package/dist/tbv/core/services/index.js +1 -1
  22. package/dist/tbv/core/wots/blockDerivation.d.ts +10 -0
  23. package/dist/tbv/core/wots/blockDerivation.d.ts.map +1 -1
  24. package/dist/tbv/core/wots/deriveWotsPkHash.d.ts +2 -2
  25. package/dist/tbv/core/wots/deriveWotsPkHash.d.ts.map +1 -1
  26. package/dist/tbv/core/wots/index.d.ts +1 -3
  27. package/dist/tbv/core/wots/index.d.ts.map +1 -1
  28. package/dist/tbv/index.cjs +1 -1
  29. package/dist/tbv/index.js +69 -72
  30. package/dist/tbv/integrations/aave/clients/index.d.ts +1 -1
  31. package/dist/tbv/integrations/aave/clients/index.d.ts.map +1 -1
  32. package/dist/tbv/integrations/aave/clients/query.d.ts +0 -9
  33. package/dist/tbv/integrations/aave/clients/query.d.ts.map +1 -1
  34. package/dist/tbv/integrations/aave/index.cjs +1 -1
  35. package/dist/tbv/integrations/aave/index.cjs.map +1 -1
  36. package/dist/tbv/integrations/aave/index.d.ts +1 -1
  37. package/dist/tbv/integrations/aave/index.d.ts.map +1 -1
  38. package/dist/tbv/integrations/aave/index.js +69 -78
  39. package/dist/tbv/integrations/aave/index.js.map +1 -1
  40. package/dist/{types-DWjaqVfP.js → types-WrGfwlJd.js} +7 -7
  41. package/dist/{types-DWjaqVfP.js.map → types-WrGfwlJd.js.map} +1 -1
  42. package/dist/{types-B-p4dhEH.cjs → types-xU3SBcpH.cjs} +2 -2
  43. package/dist/{types-B-p4dhEH.cjs.map → types-xU3SBcpH.cjs.map} +1 -1
  44. package/package.json +1 -1
  45. package/dist/errors-B3DbZYLe.cjs +0 -2
  46. package/dist/errors-B3DbZYLe.cjs.map +0 -1
  47. package/dist/errors-Ul7fTCjl.js.map +0 -1
  48. package/dist/tbv/core/wots/__tests__/derivation.test.d.ts +0 -2
  49. package/dist/tbv/core/wots/__tests__/derivation.test.d.ts.map +0 -1
  50. package/dist/tbv/core/wots/derivation.d.ts +0 -78
  51. package/dist/tbv/core/wots/derivation.d.ts.map +0 -1
  52. package/dist/tbv/core/wots/types.d.ts +0 -33
  53. package/dist/tbv/core/wots/types.d.ts.map +0 -1
@@ -1,2 +1,2 @@
1
- "use strict";var Lt=Object.defineProperty;var $t=(t,e,r)=>e in t?Lt(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var f=(t,e,r)=>$t(t,typeof e!="symbol"?e+"":e,r);const m=require("./types-B-p4dhEH.cjs"),d=require("./bitcoin-CNnPFU6Y.cjs"),U=require("bitcoinjs-lib"),xt=require("buffer"),N=require("./signing-DHSXjhLM.cjs");require("@babylonlabs-io/babylon-tbv-rust-wasm");const $=require("./payout-RFIh7GLN.cjs");function Ot(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const r in t)if(r!=="default"){const n=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(e,r,n.get?n:{enumerable:!0,get:()=>t[r]})}}return e.default=t,Object.freeze(e)}const Rt=Ot(U);class pt{constructor(e){f(this,"config");this.config=e}async signPayoutTransaction(e){this.validatePayoutOutputs(e.payoutTxHex,e.registeredPayoutScriptPubKey);const r=await this.config.btcWallet.getPublicKeyHex(),{depositorPubkey:n}=d.validateWalletPubkey(r,e.depositorBtcPubkey),o=await $.buildPayoutPsbt({payoutTxHex:e.payoutTxHex,peginTxHex:e.peginTxHex,assertTxHex:e.assertTxHex,depositorBtcPubkey:n,vaultProviderBtcPubkey:e.vaultProviderBtcPubkey,vaultKeeperBtcPubkeys:e.vaultKeeperBtcPubkeys,universalChallengerBtcPubkeys:e.universalChallengerBtcPubkeys,timelockPegin:e.timelockPegin,network:this.config.network}),c=await this.config.btcWallet.signPsbt(o.psbtHex,N.createTaprootScriptPathSignOptions(r,1));return{signature:$.extractPayoutSignature(c,n),depositorBtcPubkey:n}}getNetwork(){return this.config.network}supportsBatchSigning(){return typeof this.config.btcWallet.signPsbts=="function"}async signPayoutTransactionsBatch(e){if(!this.supportsBatchSigning())throw new Error("Wallet does not support batch signing (signPsbts method not available)");const r=await this.config.btcWallet.getPublicKeyHex(),n=[],o=[],c=[];for(const s of e){this.validatePayoutOutputs(s.payoutTxHex,s.registeredPayoutScriptPubKey);const{depositorPubkey:u}=d.validateWalletPubkey(r,s.depositorBtcPubkey);c.push(u);const h=await $.buildPayoutPsbt({payoutTxHex:s.payoutTxHex,peginTxHex:s.peginTxHex,assertTxHex:s.assertTxHex,depositorBtcPubkey:u,vaultProviderBtcPubkey:s.vaultProviderBtcPubkey,vaultKeeperBtcPubkeys:s.vaultKeeperBtcPubkeys,universalChallengerBtcPubkeys:s.universalChallengerBtcPubkeys,timelockPegin:s.timelockPegin,network:this.config.network});n.push(h.psbtHex),o.push(N.createTaprootScriptPathSignOptions(r,1))}const a=await this.config.btcWallet.signPsbts(n,o);if(a.length!==e.length)throw new Error(`Expected ${e.length} signed PSBTs but received ${a.length}`);const i=[];for(let s=0;s<e.length;s++){const u=c[s],h=$.extractPayoutSignature(a[s],u);i.push({payoutSignature:h,depositorBtcPubkey:u})}return i}validatePayoutOutputs(e,r){if(!d.isValidHex(r))throw new Error("Invalid registeredPayoutScriptPubKey: not valid hex");const n=xt.Buffer.from(d.stripHexPrefix(r),"hex"),o=U.Transaction.fromHex(d.stripHexPrefix(e));if(o.outs.length===0)throw new Error("Payout transaction has no outputs");if(!o.outs.reduce((a,i)=>i.value>a.value?i:a).script.equals(n))throw new Error("Payout transaction does not pay to the registered depositor payout address")}}function Dt(t){return t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array"}function Z(t,e=""){if(!Number.isSafeInteger(t)||t<0){const r=e&&`"${e}" `;throw new Error(`${r}expected integer >= 0, got ${t}`)}}function z(t,e,r=""){const n=Dt(t),o=t==null?void 0:t.length,c=e!==void 0;if(!n||c&&o!==e){const a=r&&`"${r}" `,i=c?` of length ${e}`:"",s=n?`length=${o}`:`type=${typeof t}`;throw new Error(a+"expected Uint8Array"+i+", got "+s)}return t}function Nt(t){if(typeof t!="function"||typeof t.create!="function")throw new Error("Hash must wrapped by utils.createHasher");Z(t.outputLen),Z(t.blockLen)}function tt(t,e=!0){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function gt(t,e){z(t,void 0,"digestInto() output");const r=e.outputLen;if(t.length<r)throw new Error('"digestInto() output" expected to be of length >='+r)}function Ut(t){return new Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4))}function D(...t){for(let e=0;e<t.length;e++)t[e].fill(0)}function W(t){return new DataView(t.buffer,t.byteOffset,t.byteLength)}function S(t,e){return t<<32-e|t>>>e}function Vt(t,e){return t<<e|t>>>32-e>>>0}const Kt=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Ft(t){return t<<24&4278190080|t<<8&16711680|t>>>8&65280|t>>>24&255}function Mt(t){for(let e=0;e<t.length;e++)t[e]=Ft(t[e]);return t}const Gt=Kt?t=>t:Mt;function Wt(t){if(typeof t!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(t))}function zt(t,e=""){return typeof t=="string"?Wt(t):z(t,void 0,e)}function Xt(t,e){if(e!==void 0&&{}.toString.call(e)!=="[object Object]")throw new Error("options must be object or undefined");return Object.assign(t,e)}function rt(t,e={}){const r=(o,c)=>t(c).update(o).digest(),n=t(void 0);return r.outputLen=n.outputLen,r.blockLen=n.blockLen,r.create=o=>t(o),Object.assign(r,e),Object.freeze(r)}const yt=t=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,t])});function jt(t,e,r){return t&e^~t&r}function qt(t,e,r){return t&e^t&r^e&r}class nt{constructor(e,r,n,o){f(this,"blockLen");f(this,"outputLen");f(this,"padOffset");f(this,"isLE");f(this,"buffer");f(this,"view");f(this,"finished",!1);f(this,"length",0);f(this,"pos",0);f(this,"destroyed",!1);this.blockLen=e,this.outputLen=r,this.padOffset=n,this.isLE=o,this.buffer=new Uint8Array(e),this.view=W(this.buffer)}update(e){tt(this),z(e);const{view:r,buffer:n,blockLen:o}=this,c=e.length;for(let a=0;a<c;){const i=Math.min(o-this.pos,c-a);if(i===o){const s=W(e);for(;o<=c-a;a+=o)this.process(s,a);continue}n.set(e.subarray(a,a+i),this.pos),this.pos+=i,a+=i,this.pos===o&&(this.process(r,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){tt(this),gt(e,this),this.finished=!0;const{buffer:r,view:n,blockLen:o,isLE:c}=this;let{pos:a}=this;r[a++]=128,D(this.buffer.subarray(a)),this.padOffset>o-a&&(this.process(n,0),a=0);for(let l=a;l<o;l++)r[l]=0;n.setBigUint64(o-8,BigInt(this.length*8),c),this.process(n,0);const i=W(e),s=this.outputLen;if(s%4)throw new Error("_sha2: outputLen must be aligned to 32bit");const u=s/4,h=this.get();if(u>h.length)throw new Error("_sha2: outputLen bigger than state");for(let l=0;l<u;l++)i.setUint32(4*l,h[l],c)}digest(){const{buffer:e,outputLen:r}=this;this.digestInto(e);const n=e.slice(0,r);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());const{blockLen:r,buffer:n,length:o,finished:c,destroyed:a,pos:i}=this;return e.destroyed=a,e.finished=c,e.length=o,e.pos=i,o%r&&e.buffer.set(n),e}clone(){return this._cloneInto()}}const B=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),w=Uint32Array.from([1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209]),F=BigInt(2**32-1),at=BigInt(32);function Yt(t,e=!1){return e?{h:Number(t&F),l:Number(t>>at&F)}:{h:Number(t>>at&F)|0,l:Number(t&F)|0}}function Pt(t,e=!1){const r=t.length;let n=new Uint32Array(r),o=new Uint32Array(r);for(let c=0;c<r;c++){const{h:a,l:i}=Yt(t[c],e);[n[c],o[c]]=[a,i]}return[n,o]}const ct=(t,e,r)=>t>>>r,ut=(t,e,r)=>t<<32-r|e>>>r,O=(t,e,r)=>t>>>r|e<<32-r,R=(t,e,r)=>t<<32-r|e>>>r,M=(t,e,r)=>t<<64-r|e>>>r-32,G=(t,e,r)=>t>>>r-32|e<<64-r,Qt=(t,e,r)=>t<<r|e>>>32-r,Jt=(t,e,r)=>e<<r|t>>>32-r,Zt=(t,e,r)=>e<<r-32|t>>>64-r,te=(t,e,r)=>t<<r-32|e>>>64-r;function v(t,e,r,n){const o=(e>>>0)+(n>>>0);return{h:t+r+(o/2**32|0)|0,l:o|0}}const ee=(t,e,r)=>(t>>>0)+(e>>>0)+(r>>>0),re=(t,e,r,n)=>e+r+n+(t/2**32|0)|0,ne=(t,e,r,n)=>(t>>>0)+(e>>>0)+(r>>>0)+(n>>>0),oe=(t,e,r,n,o)=>e+r+n+o+(t/2**32|0)|0,se=(t,e,r,n,o)=>(t>>>0)+(e>>>0)+(r>>>0)+(n>>>0)+(o>>>0),ie=(t,e,r,n,o,c)=>e+r+n+o+c+(t/2**32|0)|0,ae=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),_=new Uint32Array(64);class ce extends nt{constructor(e){super(64,e,8,!1)}get(){const{A:e,B:r,C:n,D:o,E:c,F:a,G:i,H:s}=this;return[e,r,n,o,c,a,i,s]}set(e,r,n,o,c,a,i,s){this.A=e|0,this.B=r|0,this.C=n|0,this.D=o|0,this.E=c|0,this.F=a|0,this.G=i|0,this.H=s|0}process(e,r){for(let l=0;l<16;l++,r+=4)_[l]=e.getUint32(r,!1);for(let l=16;l<64;l++){const b=_[l-15],p=_[l-2],P=S(b,7)^S(b,18)^b>>>3,g=S(p,17)^S(p,19)^p>>>10;_[l]=g+_[l-7]+P+_[l-16]|0}let{A:n,B:o,C:c,D:a,E:i,F:s,G:u,H:h}=this;for(let l=0;l<64;l++){const b=S(i,6)^S(i,11)^S(i,25),p=h+b+jt(i,s,u)+ae[l]+_[l]|0,g=(S(n,2)^S(n,13)^S(n,22))+qt(n,o,c)|0;h=u,u=s,s=i,i=a+p|0,a=c,c=o,o=n,n=p+g|0}n=n+this.A|0,o=o+this.B|0,c=c+this.C|0,a=a+this.D|0,i=i+this.E|0,s=s+this.F|0,u=u+this.G|0,h=h+this.H|0,this.set(n,o,c,a,i,s,u,h)}roundClean(){D(_)}destroy(){this.set(0,0,0,0,0,0,0,0),D(this.buffer)}}class ue extends ce{constructor(){super(32);f(this,"A",B[0]|0);f(this,"B",B[1]|0);f(this,"C",B[2]|0);f(this,"D",B[3]|0);f(this,"E",B[4]|0);f(this,"F",B[5]|0);f(this,"G",B[6]|0);f(this,"H",B[7]|0)}}const wt=Pt(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(t=>BigInt(t))),le=wt[0],fe=wt[1],I=new Uint32Array(80),C=new Uint32Array(80);class he extends nt{constructor(e){super(128,e,16,!1)}get(){const{Ah:e,Al:r,Bh:n,Bl:o,Ch:c,Cl:a,Dh:i,Dl:s,Eh:u,El:h,Fh:l,Fl:b,Gh:p,Gl:P,Hh:g,Hl:y}=this;return[e,r,n,o,c,a,i,s,u,h,l,b,p,P,g,y]}set(e,r,n,o,c,a,i,s,u,h,l,b,p,P,g,y){this.Ah=e|0,this.Al=r|0,this.Bh=n|0,this.Bl=o|0,this.Ch=c|0,this.Cl=a|0,this.Dh=i|0,this.Dl=s|0,this.Eh=u|0,this.El=h|0,this.Fh=l|0,this.Fl=b|0,this.Gh=p|0,this.Gl=P|0,this.Hh=g|0,this.Hl=y|0}process(e,r){for(let x=0;x<16;x++,r+=4)I[x]=e.getUint32(r),C[x]=e.getUint32(r+=4);for(let x=16;x<80;x++){const H=I[x-15]|0,k=C[x-15]|0,X=O(H,k,1)^O(H,k,8)^ct(H,k,7),j=R(H,k,1)^R(H,k,8)^ut(H,k,7),T=I[x-2]|0,E=C[x-2]|0,V=O(T,E,19)^M(T,E,61)^ct(T,E,6),q=R(T,E,19)^G(T,E,61)^ut(T,E,6),K=ne(j,q,C[x-7],C[x-16]),Y=oe(K,X,V,I[x-7],I[x-16]);I[x]=Y|0,C[x]=K|0}let{Ah:n,Al:o,Bh:c,Bl:a,Ch:i,Cl:s,Dh:u,Dl:h,Eh:l,El:b,Fh:p,Fl:P,Gh:g,Gl:y,Hh:A,Hl:L}=this;for(let x=0;x<80;x++){const H=O(l,b,14)^O(l,b,18)^M(l,b,41),k=R(l,b,14)^R(l,b,18)^G(l,b,41),X=l&p^~l&g,j=b&P^~b&y,T=se(L,k,j,fe[x],C[x]),E=ie(T,A,H,X,le[x],I[x]),V=T|0,q=O(n,o,28)^M(n,o,34)^M(n,o,39),K=R(n,o,28)^G(n,o,34)^G(n,o,39),Y=n&c^n&i^c&i,Ct=o&a^o&s^a&s;A=g|0,L=y|0,g=p|0,y=P|0,p=l|0,P=b|0,{h:l,l:b}=v(u|0,h|0,E|0,V|0),u=i|0,h=s|0,i=c|0,s=a|0,c=n|0,a=o|0;const it=ee(V,K,Ct);n=re(it,E,q,Y),o=it|0}({h:n,l:o}=v(this.Ah|0,this.Al|0,n|0,o|0)),{h:c,l:a}=v(this.Bh|0,this.Bl|0,c|0,a|0),{h:i,l:s}=v(this.Ch|0,this.Cl|0,i|0,s|0),{h:u,l:h}=v(this.Dh|0,this.Dl|0,u|0,h|0),{h:l,l:b}=v(this.Eh|0,this.El|0,l|0,b|0),{h:p,l:P}=v(this.Fh|0,this.Fl|0,p|0,P|0),{h:g,l:y}=v(this.Gh|0,this.Gl|0,g|0,y|0),{h:A,l:L}=v(this.Hh|0,this.Hl|0,A|0,L|0),this.set(n,o,c,a,i,s,u,h,l,b,p,P,g,y,A,L)}roundClean(){D(I,C)}destroy(){D(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}}class de extends he{constructor(){super(64);f(this,"Ah",w[0]|0);f(this,"Al",w[1]|0);f(this,"Bh",w[2]|0);f(this,"Bl",w[3]|0);f(this,"Ch",w[4]|0);f(this,"Cl",w[5]|0);f(this,"Dh",w[6]|0);f(this,"Dl",w[7]|0);f(this,"Eh",w[8]|0);f(this,"El",w[9]|0);f(this,"Fh",w[10]|0);f(this,"Fl",w[11]|0);f(this,"Gh",w[12]|0);f(this,"Gl",w[13]|0);f(this,"Hh",w[14]|0);f(this,"Hl",w[15]|0)}}const mt=rt(()=>new ue,yt(1)),be=rt(()=>new de,yt(3)),lt=66;function St(t){if(!t.startsWith("0x")&&!t.startsWith("0X"))throw new Error("Expected 0x-prefixed hex string");const e=t.slice(2);if(e.length%2!==0)throw new Error(`Hex string has odd length: ${e.length}`);if(!/^[0-9a-fA-F]*$/.test(e))throw new Error("Hex string contains non-hex characters");const r=new Uint8Array(e.length/2);for(let n=0;n<r.length;n++)r[n]=parseInt(e.slice(n*2,n*2+2),16);return r}function xe(t){return`0x${Array.from(t).map(e=>e.toString(16).padStart(2,"0")).join("")}`}function et(t,e){if(t.length!==lt)throw new Error(`${e} must be exactly 32 bytes (${lt} hex chars with 0x prefix), got ${t.length}`)}function Tt(t){et(t,"Secret");const e=St(t),r=mt(e);return xe(r)}function Et(t,e){return et(t,"Secret"),et(e,"Hashlock"),St(e),Tt(t).toLowerCase()===e.toLowerCase()}const pe=/^0x[0-9a-fA-F]{64}$/,ge=/^0x[0-9a-fA-F]{40}$/,ye=/^0x([0-9a-fA-F]{2})*$/;function Q(t,e){if(t.length!==66)throw new Error(`${e} must be 32 bytes (66 hex chars with 0x prefix), got length ${t.length}`);if(!pe.test(t))throw new Error(`${e} must contain only hex characters after the 0x prefix`)}function Pe(t,e){if(!ge.test(t))throw new Error(`${e} must be a 20-byte 0x-prefixed hex address (42 chars)`)}function we(t,e){if(!ye.test(t))throw new Error(`${e} must be a 0x-prefixed hex string with an even number of hex chars`)}async function me(t){const{btcVaultRegistryAddress:e,vaultId:r,hashlock:n,activationMetadata:o,writeContract:c,signal:a}=t;a==null||a.throwIfAborted(),Pe(e,"btcVaultRegistryAddress"),Q(r,"vaultId");const i=d.ensureHexPrefix(t.secret);if(Q(i,"secret"),n!==void 0&&(Q(n,"hashlock"),!Et(i,n)))throw new Error("Invalid secret: SHA256(secret) does not match the provided hashlock");return we(o,"activationMetadata"),c({address:e,abi:m.BTCVaultRegistryABI,functionName:"activateVaultWithSecret",args:[r,i,o]})}const Se=1e4;async function ot(t){const{statusReader:e,peginTxid:r,targetStatuses:n,timeoutMs:o,pollIntervalMs:c=Se,signal:a}=t,i=Date.now();for(;;){if(a!=null&&a.aborted)throw new Error(`Polling aborted for pegin ${r.slice(0,8)}… (target: ${[...n].join(", ")})`);if(Date.now()-i>=o)throw new Error(`Polling timeout after ${o}ms for pegin ${r.slice(0,8)}… (target: ${[...n].join(", ")})`);try{const u=(await e.getPeginStatus({pegin_txid:r},a)).status;if(n.has(u))return u;if(m.VP_TERMINAL_STATUSES.has(u)&&!n.has(u))throw new Error(`Pegin ${r.slice(0,8)}… reached terminal status "${u}" while waiting for ${[...n].join(", ")}`)}catch(s){if(!(s instanceof m.JsonRpcError&&s.code===m.RpcErrorCode.NOT_FOUND||s instanceof Error&&s.message.includes("PegIn not found")))throw s}await new Promise((s,u)=>{const h=()=>{clearTimeout(l),u(new Error(`Polling aborted for pegin ${r.slice(0,8)}… (target: ${[...n].join(", ")})`))},l=setTimeout(()=>{a==null||a.removeEventListener("abort",h),s()},c);a==null||a.addEventListener("abort",h,{once:!0})})}}const Te=300*1e3,Ee=new Set([m.DaemonStatus.PENDING_DEPOSITOR_WOTS_PK,...m.POST_WOTS_STATUSES]);async function ve(t){const{statusReader:e,wotsSubmitter:r,peginTxid:n,depositorPk:o,wotsPublicKeys:c,timeoutMs:a=Te,signal:i}=t;i==null||i.throwIfAborted();const s=await ot({statusReader:e,peginTxid:n,targetStatuses:Ee,timeoutMs:a,signal:i});m.POST_WOTS_STATUSES.has(s)||(i==null||i.throwIfAborted(),await r.submitDepositorWotsKey({pegin_txid:n,depositor_pk:o,wots_public_keys:c},i))}const ft=1;function Ae(t,e,r){const n=U.Psbt.fromBase64(t),o=n.data.getTransaction().toString("hex").toLowerCase(),c=d.stripHexPrefix(e).toLowerCase();if(o!==c)throw new Error(`PSBT integrity check failed for ${r}: unsigned transaction does not match tx_hex`);return n}function He(t){const e=U.Psbt.fromHex(t.toHex());for(const r of e.data.inputs)delete r.tapBip32Derivation,delete r.tapMerkleRoot;return e}function ht(t,e,r){if(!t)throw new Error(`Missing ${r} PSBT`);const n=Ae(t,e,r);return He(n).toHex()}function ke(t,e){const r=[],n=[],o=[],c=ht(t.payout_psbt,t.payout_tx.tx_hex,"depositor payout");r.push(c),n.push(N.createTaprootScriptPathSignOptions(e,ft));for(const a of t.challenger_presign_data){const i=d.stripHexPrefix(a.challenger_pubkey),s=r.length,u=ht(a.nopayout_psbt,a.nopayout_tx.tx_hex,`nopayout (challenger ${i})`);r.push(u),n.push(N.createTaprootScriptPathSignOptions(e,ft)),o.push({challengerPubkey:i,noPayoutIdx:s})}return{psbtHexes:r,signOptions:n,challengerEntries:o}}function Be(t,e,r){const n=$.extractPayoutSignature(t[0],r),o={};for(const c of e)o[c.challengerPubkey]={nopayout_signature:$.extractPayoutSignature(t[c.noPayoutIdx],r)};return{payout_signatures:{payout_signature:n},per_challenger:o}}async function _e(t,e,r){if(typeof t.signPsbts=="function")return t.signPsbts(e,r);const n=[];for(let o=0;o<e.length;o++)n.push(await t.signPsbt(e[o],r==null?void 0:r[o]));return n}async function vt(t){const{depositorGraph:e,depositorBtcPubkey:r,btcWallet:n}=t,o=d.stripHexPrefix(r),c=await n.getPublicKeyHex(),{psbtHexes:a,signOptions:i,challengerEntries:s}=ke(e,c),u=await _e(n,a,i);if(u.length!==a.length)throw new Error(`Wallet returned ${u.length} signed PSBTs, expected ${a.length}`);return Be(u,s,o)}const Ie=1200*1e3,At=new Set([m.DaemonStatus.PENDING_ACKS,m.DaemonStatus.PENDING_ACTIVATION,m.DaemonStatus.ACTIVATED]),Ce=new Set([m.DaemonStatus.PENDING_DEPOSITOR_SIGNATURES,...At]);function Le(t){return t.map(e=>({claimerPubkeyXOnly:d.processPublicKeyToXOnly(e.claimer_pubkey),payoutTxHex:e.payout_tx.tx_hex,assertTxHex:e.assert_tx.tx_hex}))}function $e(t){const{output:e}=Rt.payments.p2tr({internalPubkey:xt.Buffer.from(t,"hex")});if(!e)throw new Error("Failed to derive BIP-86 P2TR scriptPubKey");return e.toString("hex")}function Oe(t,e){const r=d.stripHexPrefix(t).toLowerCase(),n=d.stripHexPrefix(e.vaultProviderBtcPubkey).toLowerCase(),o=d.stripHexPrefix(e.depositorBtcPubkey).toLowerCase();if(r===n||r===o)return e.registeredPayoutScriptPubKey;if(!e.vaultKeeperBtcPubkeys.some(i=>d.stripHexPrefix(i).toLowerCase()===r))throw new Error(`Unknown claimer pubkey ${r}: not VP, depositor, or a registered vault keeper`);return`0x${$e(r)}`}function dt(t,e){return{payoutTxHex:t.payoutTxHex,peginTxHex:e.peginTxHex,assertTxHex:t.assertTxHex,vaultProviderBtcPubkey:e.vaultProviderBtcPubkey,vaultKeeperBtcPubkeys:e.vaultKeeperBtcPubkeys,universalChallengerBtcPubkeys:e.universalChallengerBtcPubkeys,depositorBtcPubkey:e.depositorBtcPubkey,timelockPegin:e.timelockPegin,registeredPayoutScriptPubKey:Oe(t.claimerPubkeyXOnly,e)}}async function Re(t,e,r,n){const o=new pt({network:e.network,btcWallet:t}),c=r.length;n==null||n(0,c);let a;if(o.supportsBatchSigning())a=(await o.signPayoutTransactionsBatch(r.map(u=>dt(u,e)))).map(u=>u.payoutSignature);else{a=[];for(let s=0;s<r.length;s++){n==null||n(s,c);const u=await o.signPayoutTransaction(dt(r[s],e));a.push(u.signature)}}const i={};for(let s=0;s<r.length;s++)i[r[s].claimerPubkeyXOnly]={payout_signature:a[s]};return n==null||n(c,c),i}async function De(t){const{statusReader:e,presignClient:r,btcWallet:n,peginTxid:o,depositorPk:c,signingContext:a,timeoutMs:i=Ie,signal:s,onProgress:u}=t,h=await ot({statusReader:e,peginTxid:o,targetStatuses:Ce,timeoutMs:i,signal:s});if(At.has(h))return;s==null||s.throwIfAborted();const l=await r.requestDepositorPresignTransactions({pegin_txid:o,depositor_pk:c},s);s==null||s.throwIfAborted();const b=d.processPublicKeyToXOnly(c),p=l.txs.filter(L=>d.processPublicKeyToXOnly(L.claimer_pubkey)!==b),P=Le(p),g=await Re(n,a,P,u);s==null||s.throwIfAborted();const y=await vt({depositorGraph:l.depositor_graph,depositorBtcPubkey:c,btcWallet:n});s==null||s.throwIfAborted();const A={...g};A[d.stripHexPrefix(c)]=y.payout_signatures,await r.submitDepositorPresignatures({pegin_txid:o,depositor_pk:c,signatures:A,depositor_claimer_presignatures:y},s)}function Ne(t){return/^[0-9a-fA-F]{64}$/.test(t)}function Ue(t){const{amountSats:e,minDeposit:r,maxDeposit:n,btcBalance:o,estimatedFeeSats:c,depositorClaimValue:a}=t;return!(e<=0n||e<r||n&&n>0n&&e>n||c==null||a==null||e+c+a>o)}function Ve(t,e,r){return t<=0n?{valid:!1,error:"Deposit amount must be greater than zero"}:t<e?{valid:!1,error:`Minimum deposit is ${d.formatSatoshisToBtc(e)} BTC`}:r&&r>0n&&t>r?{valid:!1,error:`Maximum deposit is ${d.formatSatoshisToBtc(r)} BTC`}:{valid:!0}}function Ke(t){const{amount:e,effectiveRemaining:r}=t;return r===null?{valid:!0}:r===0n?{valid:!1,error:"Supply cap reached — deposits temporarily paused"}:e>r?{valid:!1,error:`Vault size exceeds remaining capacity (${d.formatSatoshisToBtc(r)} BTC)`}:{valid:!0}}function Fe(t,e){if(!t||t.length===0)return{valid:!1,error:"At least one vault provider must be selected"};const r=e.map(o=>o.toLowerCase());return t.filter(o=>!r.includes(o.toLowerCase())).length>0?{valid:!1,error:"Invalid vault provider selected"}:{valid:!0}}function Ht(t,e,r){if(!t||t.length===0)return{valid:!1,error:"At least one vault amount required"};for(let n=0;n<t.length;n++){const o=t[n];if(o<=0n)return{valid:!1,error:`Vault ${n+1} amount must be positive`};if(e&&o<e)return{valid:!1,error:`Vault ${n+1} amount ${d.formatSatoshisToBtc(o)} BTC is below minimum deposit ${d.formatSatoshisToBtc(e)} BTC`};if(r&&o>r)return{valid:!1,error:`Vault ${n+1} amount ${d.formatSatoshisToBtc(o)} BTC exceeds maximum deposit ${d.formatSatoshisToBtc(r)} BTC`}}return{valid:!0}}function kt(t){const e=d.stripHexPrefix(t);return Ne(e)?{valid:!0}:{valid:!1,error:"Invalid pubkey format: must be 64 hex characters (32-byte x-only public key, no 0x prefix)"}}function Me(t){if(!t||t.length===0)throw new Error("No vault keepers available. The system requires at least one vault keeper to create a deposit.")}function Ge(t){if(!t||t.length===0)throw new Error("No universal challengers available. The system requires at least one universal challenger to create a deposit.")}function We(t){if(t.length===0)throw new Error("No spendable UTXOs available")}function ze(t){const{vaultAmounts:e,confirmedUTXOs:r,vaultProviderBtcPubkey:n,vaultKeeperBtcPubkeys:o,universalChallengerBtcPubkeys:c,minDeposit:a,maxDeposit:i,htlcSecretHexesLength:s,depositorSecretHashesLength:u}=t,h=e.length;if(s!==h)throw new Error(`htlcSecretHexes length (${s}) must match vaultAmounts length (${h})`);if(u!==h)throw new Error(`depositorSecretHashes length (${u}) must match vaultAmounts length (${h})`);const l=Ht(e,a,i);if(!l.valid)throw new Error(l.error);const b=kt(n);if(!b.valid)throw new Error(b.error);Me(o),Ge(c),We(r)}var st=(t=>(t.CLAIM_EVENT_RECEIVED="ClaimEventReceived",t.CLAIM_BROADCAST="ClaimBroadcast",t.ASSERT_BROADCAST="AssertBroadcast",t.CHALLENGE_ASSERT_OBSERVED="ChallengeAssertObserved",t.WRONGLY_CHALLENGED_BROADCAST="WronglyChallengedBroadcast",t.PAYOUT_BROADCAST="PayoutBroadcast",t.FAILED="Failed",t))(st||{});const Xe=new Set(["PayoutBroadcast","Failed"]);function je(t){return Object.values(st).includes(t)}function qe(t){return!!t&&Xe.has(t)}class Bt extends Error{constructor(r,n){super(`Refund not yet mature (BIP68 not final): ${n.message}`);f(this,"vaultId");f(this,"cause");this.name="BIP68NotMatureError",this.vaultId=r,this.cause=n}}const Ye=/^0x[0-9a-fA-F]{64}$/,Qe=/^(?:0x)?(?:[0-9a-fA-F]{2})+$/,_t=/^(?:0x)?(?:[0-9a-fA-F]{64}|[0-9a-fA-F]{66})$/,Je=160,Ze=1,bt=65535,tr=/non-BIP68-final/i;function It(t,e){if(t.length!==66)throw new Error(`${e} must be 32 bytes (66 hex chars with 0x prefix), got length ${t.length}`);if(!Ye.test(t))throw new Error(`${e} must contain only hex characters after the 0x prefix`)}function J(t,e){if(!Number.isInteger(t)||t<0)throw new Error(`${e} must be a non-negative integer, got ${t}`)}function er(t){if(It(t.hashlock,"hashlock"),!Number.isInteger(t.htlcVout)||t.htlcVout<0||t.htlcVout>bt)throw new Error(`htlcVout must be an integer 0-${bt}, got ${t.htlcVout}`);if(J(t.offchainParamsVersion,"offchainParamsVersion"),J(t.appVaultKeepersVersion,"appVaultKeepersVersion"),J(t.universalChallengersVersion,"universalChallengersVersion"),typeof t.unsignedPrePeginTxHex!="string"||t.unsignedPrePeginTxHex.length===0)throw new Error("unsignedPrePeginTxHex must be a non-empty hex string");if(!Qe.test(t.unsignedPrePeginTxHex))throw new Error("unsignedPrePeginTxHex must be a hex byte string (optional 0x prefix, even length)");if(!t.depositorBtcPubkey||!_t.test(t.depositorBtcPubkey))throw new Error("depositorBtcPubkey must be 32 or 33 bytes of hex (optional 0x prefix)");if(typeof t.amount!="bigint"||t.amount<=0n)throw new Error(`amount must be a positive bigint, got ${t.amount}`)}function rr(t){if(!t.vaultProviderPubkey||!_t.test(t.vaultProviderPubkey))throw new Error("vaultProviderPubkey must be 32 or 33 bytes of hex");if(t.vaultKeeperPubkeys.length===0)throw new Error("vaultKeeperPubkeys must be non-empty");if(t.universalChallengerPubkeys.length===0)throw new Error("universalChallengerPubkeys must be non-empty");if(!Number.isInteger(t.timelockRefund)||t.timelockRefund<=0)throw new Error(`timelockRefund must be a positive integer, got ${t.timelockRefund}`);if(typeof t.feeRate!="bigint"||t.feeRate<=0n)throw new Error(`protocol feeRate must be a positive bigint, got ${t.feeRate}`);if(!Number.isInteger(t.numLocalChallengers)||t.numLocalChallengers<0)throw new Error("numLocalChallengers must be a non-negative integer");if(!Number.isInteger(t.councilQuorum)||!Number.isInteger(t.councilSize)||t.councilQuorum<=0||t.councilSize<=0||t.councilQuorum>t.councilSize)throw new Error(`councilQuorum (${t.councilQuorum}) must be in [1, councilSize=${t.councilSize}]`)}function nr(t){const e=U.Psbt.fromHex(t);try{e.finalizeAllInputs()}catch(r){const n=r instanceof Error?r.message:String(r);if(!n.includes("already finalized"))throw new Error(`Failed to finalize refund PSBT: ${n}`)}return e.extractTransaction().toHex()}async function or(t){const{vaultId:e,readVault:r,readPrePeginContext:n,feeRate:o,signPsbt:c,broadcastTx:a,signal:i}=t;i==null||i.throwIfAborted(),It(e,"vaultId");const s=await r();er(s),i==null||i.throwIfAborted();const u=await n(s);if(rr(u),i==null||i.throwIfAborted(),!Number.isFinite(o)||o<=0)throw new Error(`feeRate must be a positive number, got ${o}`);const h=BigInt(Math.ceil(o*Je));i==null||i.throwIfAborted();const l=d.processPublicKeyToXOnly(s.depositorBtcPubkey),{psbtHex:b}=await $.buildRefundPsbt({prePeginParams:{depositorPubkey:l,vaultProviderPubkey:d.stripHexPrefix(u.vaultProviderPubkey),vaultKeeperPubkeys:u.vaultKeeperPubkeys.map(d.stripHexPrefix),universalChallengerPubkeys:u.universalChallengerPubkeys.map(d.stripHexPrefix),hashlocks:[d.stripHexPrefix(s.hashlock)],timelockRefund:u.timelockRefund,pegInAmounts:[s.amount],feeRate:u.feeRate,numLocalChallengers:u.numLocalChallengers,councilQuorum:u.councilQuorum,councilSize:u.councilSize,network:u.network},fundedPrePeginTxHex:d.stripHexPrefix(s.unsignedPrePeginTxHex),htlcVout:s.htlcVout,refundFee:h,hashlock:d.stripHexPrefix(s.hashlock)});i==null||i.throwIfAborted();const p=N.createTaprootScriptPathSignOptions(s.depositorBtcPubkey,Ze),P=await c(b,p),g=nr(P);i==null||i.throwIfAborted();try{return await a(g)}catch(y){throw y instanceof Error&&tr.test(y.message)?new Bt(e,y):y}}exports.BIP68NotMatureError=Bt;exports.ClaimerPegoutStatusValue=st;exports.HashMD=nt;exports.PayoutManager=pt;exports.abytes=z;exports.activateVault=me;exports.aexists=tt;exports.ahash=Nt;exports.anumber=Z;exports.aoutput=gt;exports.buildAndBroadcastRefund=or;exports.checkOpts=Xt;exports.clean=D;exports.computeHashlock=Tt;exports.createHasher=rt;exports.createView=W;exports.isDepositAmountValid=Ue;exports.isPegoutTerminalStatus=qe;exports.isRecognizedPegoutStatus=je;exports.kdfInputToBytes=zt;exports.pollAndSignPayouts=De;exports.rotl=Vt;exports.rotlBH=Zt;exports.rotlBL=te;exports.rotlSH=Qt;exports.rotlSL=Jt;exports.sha256=mt;exports.sha512=be;exports.signDepositorGraph=vt;exports.split=Pt;exports.submitWotsPublicKey=ve;exports.swap32IfBE=Gt;exports.u32=Ut;exports.validateDepositAmount=Ve;exports.validateMultiVaultDepositInputs=ze;exports.validateProviderSelection=Fe;exports.validateRemainingCapacity=Ke;exports.validateSecretAgainstHashlock=Et;exports.validateVaultAmounts=Ht;exports.validateVaultProviderPubkey=kt;exports.waitForPeginStatus=ot;
2
- //# sourceMappingURL=buildAndBroadcastRefund-IQ_2SCic.cjs.map
1
+ "use strict";var Lt=Object.defineProperty;var $t=(t,e,r)=>e in t?Lt(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var f=(t,e,r)=>$t(t,typeof e!="symbol"?e+"":e,r);const m=require("./types-xU3SBcpH.cjs"),d=require("./bitcoin-CNnPFU6Y.cjs"),U=require("bitcoinjs-lib"),xt=require("buffer"),N=require("./signing-DHSXjhLM.cjs");require("@babylonlabs-io/babylon-tbv-rust-wasm");const $=require("./payout-RFIh7GLN.cjs");function Ot(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const r in t)if(r!=="default"){const n=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(e,r,n.get?n:{enumerable:!0,get:()=>t[r]})}}return e.default=t,Object.freeze(e)}const Rt=Ot(U);class pt{constructor(e){f(this,"config");this.config=e}async signPayoutTransaction(e){this.validatePayoutOutputs(e.payoutTxHex,e.registeredPayoutScriptPubKey);const r=await this.config.btcWallet.getPublicKeyHex(),{depositorPubkey:n}=d.validateWalletPubkey(r,e.depositorBtcPubkey),o=await $.buildPayoutPsbt({payoutTxHex:e.payoutTxHex,peginTxHex:e.peginTxHex,assertTxHex:e.assertTxHex,depositorBtcPubkey:n,vaultProviderBtcPubkey:e.vaultProviderBtcPubkey,vaultKeeperBtcPubkeys:e.vaultKeeperBtcPubkeys,universalChallengerBtcPubkeys:e.universalChallengerBtcPubkeys,timelockPegin:e.timelockPegin,network:this.config.network}),c=await this.config.btcWallet.signPsbt(o.psbtHex,N.createTaprootScriptPathSignOptions(r,1));return{signature:$.extractPayoutSignature(c,n),depositorBtcPubkey:n}}getNetwork(){return this.config.network}supportsBatchSigning(){return typeof this.config.btcWallet.signPsbts=="function"}async signPayoutTransactionsBatch(e){if(!this.supportsBatchSigning())throw new Error("Wallet does not support batch signing (signPsbts method not available)");const r=await this.config.btcWallet.getPublicKeyHex(),n=[],o=[],c=[];for(const s of e){this.validatePayoutOutputs(s.payoutTxHex,s.registeredPayoutScriptPubKey);const{depositorPubkey:u}=d.validateWalletPubkey(r,s.depositorBtcPubkey);c.push(u);const h=await $.buildPayoutPsbt({payoutTxHex:s.payoutTxHex,peginTxHex:s.peginTxHex,assertTxHex:s.assertTxHex,depositorBtcPubkey:u,vaultProviderBtcPubkey:s.vaultProviderBtcPubkey,vaultKeeperBtcPubkeys:s.vaultKeeperBtcPubkeys,universalChallengerBtcPubkeys:s.universalChallengerBtcPubkeys,timelockPegin:s.timelockPegin,network:this.config.network});n.push(h.psbtHex),o.push(N.createTaprootScriptPathSignOptions(r,1))}const a=await this.config.btcWallet.signPsbts(n,o);if(a.length!==e.length)throw new Error(`Expected ${e.length} signed PSBTs but received ${a.length}`);const i=[];for(let s=0;s<e.length;s++){const u=c[s],h=$.extractPayoutSignature(a[s],u);i.push({payoutSignature:h,depositorBtcPubkey:u})}return i}validatePayoutOutputs(e,r){if(!d.isValidHex(r))throw new Error("Invalid registeredPayoutScriptPubKey: not valid hex");const n=xt.Buffer.from(d.stripHexPrefix(r),"hex"),o=U.Transaction.fromHex(d.stripHexPrefix(e));if(o.outs.length===0)throw new Error("Payout transaction has no outputs");if(!o.outs.reduce((a,i)=>i.value>a.value?i:a).script.equals(n))throw new Error("Payout transaction does not pay to the registered depositor payout address")}}function Dt(t){return t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array"}function Z(t,e=""){if(!Number.isSafeInteger(t)||t<0){const r=e&&`"${e}" `;throw new Error(`${r}expected integer >= 0, got ${t}`)}}function z(t,e,r=""){const n=Dt(t),o=t==null?void 0:t.length,c=e!==void 0;if(!n||c&&o!==e){const a=r&&`"${r}" `,i=c?` of length ${e}`:"",s=n?`length=${o}`:`type=${typeof t}`;throw new Error(a+"expected Uint8Array"+i+", got "+s)}return t}function Nt(t){if(typeof t!="function"||typeof t.create!="function")throw new Error("Hash must wrapped by utils.createHasher");Z(t.outputLen),Z(t.blockLen)}function tt(t,e=!0){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function gt(t,e){z(t,void 0,"digestInto() output");const r=e.outputLen;if(t.length<r)throw new Error('"digestInto() output" expected to be of length >='+r)}function Ut(t){return new Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4))}function D(...t){for(let e=0;e<t.length;e++)t[e].fill(0)}function W(t){return new DataView(t.buffer,t.byteOffset,t.byteLength)}function S(t,e){return t<<32-e|t>>>e}function Vt(t,e){return t<<e|t>>>32-e>>>0}const Kt=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Ft(t){return t<<24&4278190080|t<<8&16711680|t>>>8&65280|t>>>24&255}function Mt(t){for(let e=0;e<t.length;e++)t[e]=Ft(t[e]);return t}const Gt=Kt?t=>t:Mt;function Wt(t){if(typeof t!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(t))}function zt(t,e=""){return typeof t=="string"?Wt(t):z(t,void 0,e)}function Xt(t,e){if(e!==void 0&&{}.toString.call(e)!=="[object Object]")throw new Error("options must be object or undefined");return Object.assign(t,e)}function rt(t,e={}){const r=(o,c)=>t(c).update(o).digest(),n=t(void 0);return r.outputLen=n.outputLen,r.blockLen=n.blockLen,r.create=o=>t(o),Object.assign(r,e),Object.freeze(r)}const yt=t=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,t])});function jt(t,e,r){return t&e^~t&r}function qt(t,e,r){return t&e^t&r^e&r}class nt{constructor(e,r,n,o){f(this,"blockLen");f(this,"outputLen");f(this,"padOffset");f(this,"isLE");f(this,"buffer");f(this,"view");f(this,"finished",!1);f(this,"length",0);f(this,"pos",0);f(this,"destroyed",!1);this.blockLen=e,this.outputLen=r,this.padOffset=n,this.isLE=o,this.buffer=new Uint8Array(e),this.view=W(this.buffer)}update(e){tt(this),z(e);const{view:r,buffer:n,blockLen:o}=this,c=e.length;for(let a=0;a<c;){const i=Math.min(o-this.pos,c-a);if(i===o){const s=W(e);for(;o<=c-a;a+=o)this.process(s,a);continue}n.set(e.subarray(a,a+i),this.pos),this.pos+=i,a+=i,this.pos===o&&(this.process(r,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){tt(this),gt(e,this),this.finished=!0;const{buffer:r,view:n,blockLen:o,isLE:c}=this;let{pos:a}=this;r[a++]=128,D(this.buffer.subarray(a)),this.padOffset>o-a&&(this.process(n,0),a=0);for(let l=a;l<o;l++)r[l]=0;n.setBigUint64(o-8,BigInt(this.length*8),c),this.process(n,0);const i=W(e),s=this.outputLen;if(s%4)throw new Error("_sha2: outputLen must be aligned to 32bit");const u=s/4,h=this.get();if(u>h.length)throw new Error("_sha2: outputLen bigger than state");for(let l=0;l<u;l++)i.setUint32(4*l,h[l],c)}digest(){const{buffer:e,outputLen:r}=this;this.digestInto(e);const n=e.slice(0,r);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());const{blockLen:r,buffer:n,length:o,finished:c,destroyed:a,pos:i}=this;return e.destroyed=a,e.finished=c,e.length=o,e.pos=i,o%r&&e.buffer.set(n),e}clone(){return this._cloneInto()}}const B=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),w=Uint32Array.from([1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209]),F=BigInt(2**32-1),at=BigInt(32);function Yt(t,e=!1){return e?{h:Number(t&F),l:Number(t>>at&F)}:{h:Number(t>>at&F)|0,l:Number(t&F)|0}}function Pt(t,e=!1){const r=t.length;let n=new Uint32Array(r),o=new Uint32Array(r);for(let c=0;c<r;c++){const{h:a,l:i}=Yt(t[c],e);[n[c],o[c]]=[a,i]}return[n,o]}const ct=(t,e,r)=>t>>>r,ut=(t,e,r)=>t<<32-r|e>>>r,O=(t,e,r)=>t>>>r|e<<32-r,R=(t,e,r)=>t<<32-r|e>>>r,M=(t,e,r)=>t<<64-r|e>>>r-32,G=(t,e,r)=>t>>>r-32|e<<64-r,Qt=(t,e,r)=>t<<r|e>>>32-r,Jt=(t,e,r)=>e<<r|t>>>32-r,Zt=(t,e,r)=>e<<r-32|t>>>64-r,te=(t,e,r)=>t<<r-32|e>>>64-r;function v(t,e,r,n){const o=(e>>>0)+(n>>>0);return{h:t+r+(o/2**32|0)|0,l:o|0}}const ee=(t,e,r)=>(t>>>0)+(e>>>0)+(r>>>0),re=(t,e,r,n)=>e+r+n+(t/2**32|0)|0,ne=(t,e,r,n)=>(t>>>0)+(e>>>0)+(r>>>0)+(n>>>0),oe=(t,e,r,n,o)=>e+r+n+o+(t/2**32|0)|0,se=(t,e,r,n,o)=>(t>>>0)+(e>>>0)+(r>>>0)+(n>>>0)+(o>>>0),ie=(t,e,r,n,o,c)=>e+r+n+o+c+(t/2**32|0)|0,ae=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),_=new Uint32Array(64);class ce extends nt{constructor(e){super(64,e,8,!1)}get(){const{A:e,B:r,C:n,D:o,E:c,F:a,G:i,H:s}=this;return[e,r,n,o,c,a,i,s]}set(e,r,n,o,c,a,i,s){this.A=e|0,this.B=r|0,this.C=n|0,this.D=o|0,this.E=c|0,this.F=a|0,this.G=i|0,this.H=s|0}process(e,r){for(let l=0;l<16;l++,r+=4)_[l]=e.getUint32(r,!1);for(let l=16;l<64;l++){const b=_[l-15],p=_[l-2],P=S(b,7)^S(b,18)^b>>>3,g=S(p,17)^S(p,19)^p>>>10;_[l]=g+_[l-7]+P+_[l-16]|0}let{A:n,B:o,C:c,D:a,E:i,F:s,G:u,H:h}=this;for(let l=0;l<64;l++){const b=S(i,6)^S(i,11)^S(i,25),p=h+b+jt(i,s,u)+ae[l]+_[l]|0,g=(S(n,2)^S(n,13)^S(n,22))+qt(n,o,c)|0;h=u,u=s,s=i,i=a+p|0,a=c,c=o,o=n,n=p+g|0}n=n+this.A|0,o=o+this.B|0,c=c+this.C|0,a=a+this.D|0,i=i+this.E|0,s=s+this.F|0,u=u+this.G|0,h=h+this.H|0,this.set(n,o,c,a,i,s,u,h)}roundClean(){D(_)}destroy(){this.set(0,0,0,0,0,0,0,0),D(this.buffer)}}class ue extends ce{constructor(){super(32);f(this,"A",B[0]|0);f(this,"B",B[1]|0);f(this,"C",B[2]|0);f(this,"D",B[3]|0);f(this,"E",B[4]|0);f(this,"F",B[5]|0);f(this,"G",B[6]|0);f(this,"H",B[7]|0)}}const wt=Pt(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(t=>BigInt(t))),le=wt[0],fe=wt[1],I=new Uint32Array(80),C=new Uint32Array(80);class he extends nt{constructor(e){super(128,e,16,!1)}get(){const{Ah:e,Al:r,Bh:n,Bl:o,Ch:c,Cl:a,Dh:i,Dl:s,Eh:u,El:h,Fh:l,Fl:b,Gh:p,Gl:P,Hh:g,Hl:y}=this;return[e,r,n,o,c,a,i,s,u,h,l,b,p,P,g,y]}set(e,r,n,o,c,a,i,s,u,h,l,b,p,P,g,y){this.Ah=e|0,this.Al=r|0,this.Bh=n|0,this.Bl=o|0,this.Ch=c|0,this.Cl=a|0,this.Dh=i|0,this.Dl=s|0,this.Eh=u|0,this.El=h|0,this.Fh=l|0,this.Fl=b|0,this.Gh=p|0,this.Gl=P|0,this.Hh=g|0,this.Hl=y|0}process(e,r){for(let x=0;x<16;x++,r+=4)I[x]=e.getUint32(r),C[x]=e.getUint32(r+=4);for(let x=16;x<80;x++){const H=I[x-15]|0,k=C[x-15]|0,X=O(H,k,1)^O(H,k,8)^ct(H,k,7),j=R(H,k,1)^R(H,k,8)^ut(H,k,7),T=I[x-2]|0,E=C[x-2]|0,V=O(T,E,19)^M(T,E,61)^ct(T,E,6),q=R(T,E,19)^G(T,E,61)^ut(T,E,6),K=ne(j,q,C[x-7],C[x-16]),Y=oe(K,X,V,I[x-7],I[x-16]);I[x]=Y|0,C[x]=K|0}let{Ah:n,Al:o,Bh:c,Bl:a,Ch:i,Cl:s,Dh:u,Dl:h,Eh:l,El:b,Fh:p,Fl:P,Gh:g,Gl:y,Hh:A,Hl:L}=this;for(let x=0;x<80;x++){const H=O(l,b,14)^O(l,b,18)^M(l,b,41),k=R(l,b,14)^R(l,b,18)^G(l,b,41),X=l&p^~l&g,j=b&P^~b&y,T=se(L,k,j,fe[x],C[x]),E=ie(T,A,H,X,le[x],I[x]),V=T|0,q=O(n,o,28)^M(n,o,34)^M(n,o,39),K=R(n,o,28)^G(n,o,34)^G(n,o,39),Y=n&c^n&i^c&i,Ct=o&a^o&s^a&s;A=g|0,L=y|0,g=p|0,y=P|0,p=l|0,P=b|0,{h:l,l:b}=v(u|0,h|0,E|0,V|0),u=i|0,h=s|0,i=c|0,s=a|0,c=n|0,a=o|0;const it=ee(V,K,Ct);n=re(it,E,q,Y),o=it|0}({h:n,l:o}=v(this.Ah|0,this.Al|0,n|0,o|0)),{h:c,l:a}=v(this.Bh|0,this.Bl|0,c|0,a|0),{h:i,l:s}=v(this.Ch|0,this.Cl|0,i|0,s|0),{h:u,l:h}=v(this.Dh|0,this.Dl|0,u|0,h|0),{h:l,l:b}=v(this.Eh|0,this.El|0,l|0,b|0),{h:p,l:P}=v(this.Fh|0,this.Fl|0,p|0,P|0),{h:g,l:y}=v(this.Gh|0,this.Gl|0,g|0,y|0),{h:A,l:L}=v(this.Hh|0,this.Hl|0,A|0,L|0),this.set(n,o,c,a,i,s,u,h,l,b,p,P,g,y,A,L)}roundClean(){D(I,C)}destroy(){D(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}}class de extends he{constructor(){super(64);f(this,"Ah",w[0]|0);f(this,"Al",w[1]|0);f(this,"Bh",w[2]|0);f(this,"Bl",w[3]|0);f(this,"Ch",w[4]|0);f(this,"Cl",w[5]|0);f(this,"Dh",w[6]|0);f(this,"Dl",w[7]|0);f(this,"Eh",w[8]|0);f(this,"El",w[9]|0);f(this,"Fh",w[10]|0);f(this,"Fl",w[11]|0);f(this,"Gh",w[12]|0);f(this,"Gl",w[13]|0);f(this,"Hh",w[14]|0);f(this,"Hl",w[15]|0)}}const mt=rt(()=>new ue,yt(1)),be=rt(()=>new de,yt(3)),lt=66;function St(t){if(!t.startsWith("0x")&&!t.startsWith("0X"))throw new Error("Expected 0x-prefixed hex string");const e=t.slice(2);if(e.length%2!==0)throw new Error(`Hex string has odd length: ${e.length}`);if(!/^[0-9a-fA-F]*$/.test(e))throw new Error("Hex string contains non-hex characters");const r=new Uint8Array(e.length/2);for(let n=0;n<r.length;n++)r[n]=parseInt(e.slice(n*2,n*2+2),16);return r}function xe(t){return`0x${Array.from(t).map(e=>e.toString(16).padStart(2,"0")).join("")}`}function et(t,e){if(t.length!==lt)throw new Error(`${e} must be exactly 32 bytes (${lt} hex chars with 0x prefix), got ${t.length}`)}function Tt(t){et(t,"Secret");const e=St(t),r=mt(e);return xe(r)}function Et(t,e){return et(t,"Secret"),et(e,"Hashlock"),St(e),Tt(t).toLowerCase()===e.toLowerCase()}const pe=/^0x[0-9a-fA-F]{64}$/,ge=/^0x[0-9a-fA-F]{40}$/,ye=/^0x([0-9a-fA-F]{2})*$/;function Q(t,e){if(t.length!==66)throw new Error(`${e} must be 32 bytes (66 hex chars with 0x prefix), got length ${t.length}`);if(!pe.test(t))throw new Error(`${e} must contain only hex characters after the 0x prefix`)}function Pe(t,e){if(!ge.test(t))throw new Error(`${e} must be a 20-byte 0x-prefixed hex address (42 chars)`)}function we(t,e){if(!ye.test(t))throw new Error(`${e} must be a 0x-prefixed hex string with an even number of hex chars`)}async function me(t){const{btcVaultRegistryAddress:e,vaultId:r,hashlock:n,activationMetadata:o,writeContract:c,signal:a}=t;a==null||a.throwIfAborted(),Pe(e,"btcVaultRegistryAddress"),Q(r,"vaultId");const i=d.ensureHexPrefix(t.secret);if(Q(i,"secret"),n!==void 0&&(Q(n,"hashlock"),!Et(i,n)))throw new Error("Invalid secret: SHA256(secret) does not match the provided hashlock");return we(o,"activationMetadata"),c({address:e,abi:m.BTCVaultRegistryABI,functionName:"activateVaultWithSecret",args:[r,i,o]})}const Se=1e4;async function ot(t){const{statusReader:e,peginTxid:r,targetStatuses:n,timeoutMs:o,pollIntervalMs:c=Se,signal:a}=t,i=Date.now();for(;;){if(a!=null&&a.aborted)throw new Error(`Polling aborted for pegin ${r.slice(0,8)}… (target: ${[...n].join(", ")})`);if(Date.now()-i>=o)throw new Error(`Polling timeout after ${o}ms for pegin ${r.slice(0,8)}… (target: ${[...n].join(", ")})`);try{const u=(await e.getPeginStatus({pegin_txid:r},a)).status;if(n.has(u))return u;if(m.VP_TERMINAL_STATUSES.has(u)&&!n.has(u))throw new Error(`Pegin ${r.slice(0,8)}… reached terminal status "${u}" while waiting for ${[...n].join(", ")}`)}catch(s){if(!(s instanceof m.JsonRpcError&&s.code===m.RpcErrorCode.NOT_FOUND||s instanceof Error&&s.message.includes("PegIn not found")))throw s}await new Promise((s,u)=>{const h=()=>{clearTimeout(l),u(new Error(`Polling aborted for pegin ${r.slice(0,8)}… (target: ${[...n].join(", ")})`))},l=setTimeout(()=>{a==null||a.removeEventListener("abort",h),s()},c);a==null||a.addEventListener("abort",h,{once:!0})})}}const Te=300*1e3,Ee=new Set([m.DaemonStatus.PENDING_DEPOSITOR_WOTS_PK,...m.POST_WOTS_STATUSES]);async function ve(t){const{statusReader:e,wotsSubmitter:r,peginTxid:n,depositorPk:o,wotsPublicKeys:c,timeoutMs:a=Te,signal:i}=t;i==null||i.throwIfAborted();const s=await ot({statusReader:e,peginTxid:n,targetStatuses:Ee,timeoutMs:a,signal:i});m.POST_WOTS_STATUSES.has(s)||(i==null||i.throwIfAborted(),await r.submitDepositorWotsKey({pegin_txid:n,depositor_pk:o,wots_public_keys:c},i))}const ft=1;function Ae(t,e,r){const n=U.Psbt.fromBase64(t),o=n.data.getTransaction().toString("hex").toLowerCase(),c=d.stripHexPrefix(e).toLowerCase();if(o!==c)throw new Error(`PSBT integrity check failed for ${r}: unsigned transaction does not match tx_hex`);return n}function He(t){const e=U.Psbt.fromHex(t.toHex());for(const r of e.data.inputs)delete r.tapBip32Derivation,delete r.tapMerkleRoot;return e}function ht(t,e,r){if(!t)throw new Error(`Missing ${r} PSBT`);const n=Ae(t,e,r);return He(n).toHex()}function ke(t,e){const r=[],n=[],o=[],c=ht(t.payout_psbt,t.payout_tx.tx_hex,"depositor payout");r.push(c),n.push(N.createTaprootScriptPathSignOptions(e,ft));for(const a of t.challenger_presign_data){const i=d.stripHexPrefix(a.challenger_pubkey),s=r.length,u=ht(a.nopayout_psbt,a.nopayout_tx.tx_hex,`nopayout (challenger ${i})`);r.push(u),n.push(N.createTaprootScriptPathSignOptions(e,ft)),o.push({challengerPubkey:i,noPayoutIdx:s})}return{psbtHexes:r,signOptions:n,challengerEntries:o}}function Be(t,e,r){const n=$.extractPayoutSignature(t[0],r),o={};for(const c of e)o[c.challengerPubkey]={nopayout_signature:$.extractPayoutSignature(t[c.noPayoutIdx],r)};return{payout_signatures:{payout_signature:n},per_challenger:o}}async function _e(t,e,r){if(typeof t.signPsbts=="function")return t.signPsbts(e,r);const n=[];for(let o=0;o<e.length;o++)n.push(await t.signPsbt(e[o],r==null?void 0:r[o]));return n}async function vt(t){const{depositorGraph:e,depositorBtcPubkey:r,btcWallet:n}=t,o=d.stripHexPrefix(r),c=await n.getPublicKeyHex(),{psbtHexes:a,signOptions:i,challengerEntries:s}=ke(e,c),u=await _e(n,a,i);if(u.length!==a.length)throw new Error(`Wallet returned ${u.length} signed PSBTs, expected ${a.length}`);return Be(u,s,o)}const Ie=1200*1e3,At=new Set([m.DaemonStatus.PENDING_ACKS,m.DaemonStatus.PENDING_ACTIVATION,m.DaemonStatus.ACTIVATED]),Ce=new Set([m.DaemonStatus.PENDING_DEPOSITOR_SIGNATURES,...At]);function Le(t){return t.map(e=>({claimerPubkeyXOnly:d.processPublicKeyToXOnly(e.claimer_pubkey),payoutTxHex:e.payout_tx.tx_hex,assertTxHex:e.assert_tx.tx_hex}))}function $e(t){const{output:e}=Rt.payments.p2tr({internalPubkey:xt.Buffer.from(t,"hex")});if(!e)throw new Error("Failed to derive BIP-86 P2TR scriptPubKey");return e.toString("hex")}function Oe(t,e){const r=d.stripHexPrefix(t).toLowerCase(),n=d.stripHexPrefix(e.vaultProviderBtcPubkey).toLowerCase(),o=d.stripHexPrefix(e.depositorBtcPubkey).toLowerCase();if(r===n||r===o)return e.registeredPayoutScriptPubKey;if(!e.vaultKeeperBtcPubkeys.some(i=>d.stripHexPrefix(i).toLowerCase()===r))throw new Error(`Unknown claimer pubkey ${r}: not VP, depositor, or a registered vault keeper`);return`0x${$e(r)}`}function dt(t,e){return{payoutTxHex:t.payoutTxHex,peginTxHex:e.peginTxHex,assertTxHex:t.assertTxHex,vaultProviderBtcPubkey:e.vaultProviderBtcPubkey,vaultKeeperBtcPubkeys:e.vaultKeeperBtcPubkeys,universalChallengerBtcPubkeys:e.universalChallengerBtcPubkeys,depositorBtcPubkey:e.depositorBtcPubkey,timelockPegin:e.timelockPegin,registeredPayoutScriptPubKey:Oe(t.claimerPubkeyXOnly,e)}}async function Re(t,e,r,n){const o=new pt({network:e.network,btcWallet:t}),c=r.length;n==null||n(0,c);let a;if(o.supportsBatchSigning())a=(await o.signPayoutTransactionsBatch(r.map(u=>dt(u,e)))).map(u=>u.payoutSignature);else{a=[];for(let s=0;s<r.length;s++){n==null||n(s,c);const u=await o.signPayoutTransaction(dt(r[s],e));a.push(u.signature)}}const i={};for(let s=0;s<r.length;s++)i[r[s].claimerPubkeyXOnly]={payout_signature:a[s]};return n==null||n(c,c),i}async function De(t){const{statusReader:e,presignClient:r,btcWallet:n,peginTxid:o,depositorPk:c,signingContext:a,timeoutMs:i=Ie,signal:s,onProgress:u}=t,h=await ot({statusReader:e,peginTxid:o,targetStatuses:Ce,timeoutMs:i,signal:s});if(At.has(h))return;s==null||s.throwIfAborted();const l=await r.requestDepositorPresignTransactions({pegin_txid:o,depositor_pk:c},s);s==null||s.throwIfAborted();const b=d.processPublicKeyToXOnly(c),p=l.txs.filter(L=>d.processPublicKeyToXOnly(L.claimer_pubkey)!==b),P=Le(p),g=await Re(n,a,P,u);s==null||s.throwIfAborted();const y=await vt({depositorGraph:l.depositor_graph,depositorBtcPubkey:c,btcWallet:n});s==null||s.throwIfAborted();const A={...g};A[d.stripHexPrefix(c)]=y.payout_signatures,await r.submitDepositorPresignatures({pegin_txid:o,depositor_pk:c,signatures:A,depositor_claimer_presignatures:y},s)}function Ne(t){return/^[0-9a-fA-F]{64}$/.test(t)}function Ue(t){const{amountSats:e,minDeposit:r,maxDeposit:n,btcBalance:o,estimatedFeeSats:c,depositorClaimValue:a}=t;return!(e<=0n||e<r||n&&n>0n&&e>n||c==null||a==null||e+c+a>o)}function Ve(t,e,r){return t<=0n?{valid:!1,error:"Deposit amount must be greater than zero"}:t<e?{valid:!1,error:`Minimum deposit is ${d.formatSatoshisToBtc(e)} BTC`}:r&&r>0n&&t>r?{valid:!1,error:`Maximum deposit is ${d.formatSatoshisToBtc(r)} BTC`}:{valid:!0}}function Ke(t){const{amount:e,effectiveRemaining:r}=t;return r===null?{valid:!0}:r===0n?{valid:!1,error:"Supply cap reached — deposits temporarily paused"}:e>r?{valid:!1,error:`Vault size exceeds remaining capacity (${d.formatSatoshisToBtc(r)} BTC)`}:{valid:!0}}function Fe(t,e){if(!t||t.length===0)return{valid:!1,error:"At least one vault provider must be selected"};const r=e.map(o=>o.toLowerCase());return t.filter(o=>!r.includes(o.toLowerCase())).length>0?{valid:!1,error:"Invalid vault provider selected"}:{valid:!0}}function Ht(t,e,r){if(!t||t.length===0)return{valid:!1,error:"At least one vault amount required"};for(let n=0;n<t.length;n++){const o=t[n];if(o<=0n)return{valid:!1,error:`Vault ${n+1} amount must be positive`};if(e&&o<e)return{valid:!1,error:`Vault ${n+1} amount ${d.formatSatoshisToBtc(o)} BTC is below minimum deposit ${d.formatSatoshisToBtc(e)} BTC`};if(r&&o>r)return{valid:!1,error:`Vault ${n+1} amount ${d.formatSatoshisToBtc(o)} BTC exceeds maximum deposit ${d.formatSatoshisToBtc(r)} BTC`}}return{valid:!0}}function kt(t){const e=d.stripHexPrefix(t);return Ne(e)?{valid:!0}:{valid:!1,error:"Invalid pubkey format: must be 64 hex characters (32-byte x-only public key, no 0x prefix)"}}function Me(t){if(!t||t.length===0)throw new Error("No vault keepers available. The system requires at least one vault keeper to create a deposit.")}function Ge(t){if(!t||t.length===0)throw new Error("No universal challengers available. The system requires at least one universal challenger to create a deposit.")}function We(t){if(t.length===0)throw new Error("No spendable UTXOs available")}function ze(t){const{vaultAmounts:e,confirmedUTXOs:r,vaultProviderBtcPubkey:n,vaultKeeperBtcPubkeys:o,universalChallengerBtcPubkeys:c,minDeposit:a,maxDeposit:i,htlcSecretHexesLength:s,depositorSecretHashesLength:u}=t,h=e.length;if(s!==h)throw new Error(`htlcSecretHexes length (${s}) must match vaultAmounts length (${h})`);if(u!==h)throw new Error(`depositorSecretHashes length (${u}) must match vaultAmounts length (${h})`);const l=Ht(e,a,i);if(!l.valid)throw new Error(l.error);const b=kt(n);if(!b.valid)throw new Error(b.error);Me(o),Ge(c),We(r)}var st=(t=>(t.CLAIM_EVENT_RECEIVED="ClaimEventReceived",t.CLAIM_BROADCAST="ClaimBroadcast",t.ASSERT_BROADCAST="AssertBroadcast",t.CHALLENGE_ASSERT_OBSERVED="ChallengeAssertObserved",t.WRONGLY_CHALLENGED_BROADCAST="WronglyChallengedBroadcast",t.PAYOUT_BROADCAST="PayoutBroadcast",t.FAILED="Failed",t))(st||{});const Xe=new Set(["PayoutBroadcast","Failed"]);function je(t){return Object.values(st).includes(t)}function qe(t){return!!t&&Xe.has(t)}class Bt extends Error{constructor(r,n){super(`Refund not yet mature (BIP68 not final): ${n.message}`);f(this,"vaultId");f(this,"cause");this.name="BIP68NotMatureError",this.vaultId=r,this.cause=n}}const Ye=/^0x[0-9a-fA-F]{64}$/,Qe=/^(?:0x)?(?:[0-9a-fA-F]{2})+$/,_t=/^(?:0x)?(?:[0-9a-fA-F]{64}|[0-9a-fA-F]{66})$/,Je=160,Ze=1,bt=65535,tr=/non-BIP68-final/i;function It(t,e){if(t.length!==66)throw new Error(`${e} must be 32 bytes (66 hex chars with 0x prefix), got length ${t.length}`);if(!Ye.test(t))throw new Error(`${e} must contain only hex characters after the 0x prefix`)}function J(t,e){if(!Number.isInteger(t)||t<0)throw new Error(`${e} must be a non-negative integer, got ${t}`)}function er(t){if(It(t.hashlock,"hashlock"),!Number.isInteger(t.htlcVout)||t.htlcVout<0||t.htlcVout>bt)throw new Error(`htlcVout must be an integer 0-${bt}, got ${t.htlcVout}`);if(J(t.offchainParamsVersion,"offchainParamsVersion"),J(t.appVaultKeepersVersion,"appVaultKeepersVersion"),J(t.universalChallengersVersion,"universalChallengersVersion"),typeof t.unsignedPrePeginTxHex!="string"||t.unsignedPrePeginTxHex.length===0)throw new Error("unsignedPrePeginTxHex must be a non-empty hex string");if(!Qe.test(t.unsignedPrePeginTxHex))throw new Error("unsignedPrePeginTxHex must be a hex byte string (optional 0x prefix, even length)");if(!t.depositorBtcPubkey||!_t.test(t.depositorBtcPubkey))throw new Error("depositorBtcPubkey must be 32 or 33 bytes of hex (optional 0x prefix)");if(typeof t.amount!="bigint"||t.amount<=0n)throw new Error(`amount must be a positive bigint, got ${t.amount}`)}function rr(t){if(!t.vaultProviderPubkey||!_t.test(t.vaultProviderPubkey))throw new Error("vaultProviderPubkey must be 32 or 33 bytes of hex");if(t.vaultKeeperPubkeys.length===0)throw new Error("vaultKeeperPubkeys must be non-empty");if(t.universalChallengerPubkeys.length===0)throw new Error("universalChallengerPubkeys must be non-empty");if(!Number.isInteger(t.timelockRefund)||t.timelockRefund<=0)throw new Error(`timelockRefund must be a positive integer, got ${t.timelockRefund}`);if(typeof t.feeRate!="bigint"||t.feeRate<=0n)throw new Error(`protocol feeRate must be a positive bigint, got ${t.feeRate}`);if(!Number.isInteger(t.numLocalChallengers)||t.numLocalChallengers<0)throw new Error("numLocalChallengers must be a non-negative integer");if(!Number.isInteger(t.councilQuorum)||!Number.isInteger(t.councilSize)||t.councilQuorum<=0||t.councilSize<=0||t.councilQuorum>t.councilSize)throw new Error(`councilQuorum (${t.councilQuorum}) must be in [1, councilSize=${t.councilSize}]`)}function nr(t){const e=U.Psbt.fromHex(t);try{e.finalizeAllInputs()}catch(r){const n=r instanceof Error?r.message:String(r);if(!n.includes("already finalized"))throw new Error(`Failed to finalize refund PSBT: ${n}`)}return e.extractTransaction().toHex()}async function or(t){const{vaultId:e,readVault:r,readPrePeginContext:n,feeRate:o,signPsbt:c,broadcastTx:a,signal:i}=t;i==null||i.throwIfAborted(),It(e,"vaultId");const s=await r();er(s),i==null||i.throwIfAborted();const u=await n(s);if(rr(u),i==null||i.throwIfAborted(),!Number.isFinite(o)||o<=0)throw new Error(`feeRate must be a positive number, got ${o}`);const h=BigInt(Math.ceil(o*Je));i==null||i.throwIfAborted();const l=d.processPublicKeyToXOnly(s.depositorBtcPubkey),{psbtHex:b}=await $.buildRefundPsbt({prePeginParams:{depositorPubkey:l,vaultProviderPubkey:d.stripHexPrefix(u.vaultProviderPubkey),vaultKeeperPubkeys:u.vaultKeeperPubkeys.map(d.stripHexPrefix),universalChallengerPubkeys:u.universalChallengerPubkeys.map(d.stripHexPrefix),hashlocks:[d.stripHexPrefix(s.hashlock)],timelockRefund:u.timelockRefund,pegInAmounts:[s.amount],feeRate:u.feeRate,numLocalChallengers:u.numLocalChallengers,councilQuorum:u.councilQuorum,councilSize:u.councilSize,network:u.network},fundedPrePeginTxHex:d.stripHexPrefix(s.unsignedPrePeginTxHex),htlcVout:s.htlcVout,refundFee:h,hashlock:d.stripHexPrefix(s.hashlock)});i==null||i.throwIfAborted();const p=N.createTaprootScriptPathSignOptions(s.depositorBtcPubkey,Ze),P=await c(b,p),g=nr(P);i==null||i.throwIfAborted();try{return await a(g)}catch(y){throw y instanceof Error&&tr.test(y.message)?new Bt(e,y):y}}exports.BIP68NotMatureError=Bt;exports.ClaimerPegoutStatusValue=st;exports.HashMD=nt;exports.PayoutManager=pt;exports.abytes=z;exports.activateVault=me;exports.aexists=tt;exports.ahash=Nt;exports.anumber=Z;exports.aoutput=gt;exports.buildAndBroadcastRefund=or;exports.checkOpts=Xt;exports.clean=D;exports.computeHashlock=Tt;exports.createHasher=rt;exports.createView=W;exports.isDepositAmountValid=Ue;exports.isPegoutTerminalStatus=qe;exports.isRecognizedPegoutStatus=je;exports.kdfInputToBytes=zt;exports.pollAndSignPayouts=De;exports.rotl=Vt;exports.rotlBH=Zt;exports.rotlBL=te;exports.rotlSH=Qt;exports.rotlSL=Jt;exports.sha256=mt;exports.sha512=be;exports.signDepositorGraph=vt;exports.split=Pt;exports.submitWotsPublicKey=ve;exports.swap32IfBE=Gt;exports.u32=Ut;exports.validateDepositAmount=Ve;exports.validateMultiVaultDepositInputs=ze;exports.validateProviderSelection=Fe;exports.validateRemainingCapacity=Ke;exports.validateSecretAgainstHashlock=Et;exports.validateVaultAmounts=Ht;exports.validateVaultProviderPubkey=kt;exports.waitForPeginStatus=ot;
2
+ //# sourceMappingURL=buildAndBroadcastRefund-Mr3ck5ek.cjs.map