@arkade-os/sdk 0.4.67 → 0.4.68

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 (78) hide show
  1. package/README.md +5 -0
  2. package/dist/adapters/expo.cjs +5 -5
  3. package/dist/adapters/expo.d.cts +2 -2
  4. package/dist/adapters/expo.d.ts +2 -2
  5. package/dist/adapters/expo.js +3 -3
  6. package/dist/adapters/indexedDB.cjs +5 -5
  7. package/dist/adapters/indexedDB.js +4 -4
  8. package/dist/{asyncStorageTaskQueue-LTpeXYaD.d.cts → asyncStorageTaskQueue-B2CcXIHU.d.cts} +2 -2
  9. package/dist/{asyncStorageTaskQueue-Za-e_zMk.d.ts → asyncStorageTaskQueue-DaZlVTbM.d.ts} +2 -2
  10. package/dist/{chunk-X3VEMUVV.js → chunk-33Q2RFET.js} +3 -3
  11. package/dist/{chunk-X3VEMUVV.js.map → chunk-33Q2RFET.js.map} +1 -1
  12. package/dist/{chunk-6TAQF6EV.js → chunk-45FKMOJH.js} +72 -120
  13. package/dist/chunk-45FKMOJH.js.map +1 -0
  14. package/dist/{chunk-3WIWNE4P.js → chunk-4CMXV5SF.js} +16 -4
  15. package/dist/chunk-4CMXV5SF.js.map +1 -0
  16. package/dist/{chunk-YDRZDZPP.cjs → chunk-4KCVS4ZN.cjs} +10 -10
  17. package/dist/{chunk-YDRZDZPP.cjs.map → chunk-4KCVS4ZN.cjs.map} +1 -1
  18. package/dist/{chunk-OIZ2V2VD.cjs → chunk-6YUACVX4.cjs} +118 -166
  19. package/dist/chunk-6YUACVX4.cjs.map +1 -0
  20. package/dist/{chunk-2JV4VQ7C.cjs → chunk-EJOFL5WH.cjs} +17 -3
  21. package/dist/chunk-EJOFL5WH.cjs.map +1 -0
  22. package/dist/{chunk-MZFUZUTQ.js → chunk-G4I6PU5H.js} +4 -4
  23. package/dist/{chunk-MZFUZUTQ.js.map → chunk-G4I6PU5H.js.map} +1 -1
  24. package/dist/{chunk-EALWOVHK.js → chunk-GQ4NMQGR.js} +4 -4
  25. package/dist/{chunk-EALWOVHK.js.map → chunk-GQ4NMQGR.js.map} +1 -1
  26. package/dist/{chunk-R2YAMONM.cjs → chunk-JGMSZIE4.cjs} +17 -17
  27. package/dist/{chunk-R2YAMONM.cjs.map → chunk-JGMSZIE4.cjs.map} +1 -1
  28. package/dist/{chunk-CO3KKSWM.cjs → chunk-PJR63FTK.cjs} +17 -17
  29. package/dist/{chunk-CO3KKSWM.cjs.map → chunk-PJR63FTK.cjs.map} +1 -1
  30. package/dist/{chunk-AEWJU6NZ.js → chunk-VBHXBI7F.js} +59 -23
  31. package/dist/chunk-VBHXBI7F.js.map +1 -0
  32. package/dist/{chunk-MJUTO3PY.cjs → chunk-WCJVKFAP.cjs} +480 -444
  33. package/dist/chunk-WCJVKFAP.cjs.map +1 -0
  34. package/dist/contracts/handlers/index.cjs +9 -9
  35. package/dist/contracts/handlers/index.d.cts +3 -3
  36. package/dist/contracts/handlers/index.d.ts +3 -3
  37. package/dist/contracts/handlers/index.js +2 -2
  38. package/dist/{delegate-cdmzb2f9.d.ts → delegate-AomVWxO_.d.ts} +1 -1
  39. package/dist/{delegate-Bz2e2zXY.d.cts → delegate-Bffc5f54.d.cts} +1 -1
  40. package/dist/{hdWalletCapable-BSjuUYOO.d.cts → hdWalletCapable-B5nRs3RH.d.cts} +2 -2
  41. package/dist/{hdWalletCapable-Hi12xjCJ.d.ts → hdWalletCapable-DZdIVa23.d.ts} +2 -2
  42. package/dist/{index-DU5o_hz7.d.cts → index-C7RZCfoY.d.cts} +17 -1
  43. package/dist/{index-DU5o_hz7.d.ts → index-C7RZCfoY.d.ts} +17 -1
  44. package/dist/{index-BiACuWaf.d.ts → index-jouvy8FD.d.ts} +96 -119
  45. package/dist/{index-D2GjZxBr.d.cts → index-nfyQM33h.d.cts} +96 -119
  46. package/dist/index.cjs +293 -289
  47. package/dist/index.d.cts +12 -8
  48. package/dist/index.d.ts +12 -8
  49. package/dist/index.js +4 -4
  50. package/dist/repositories/realm/index.cjs +19 -19
  51. package/dist/repositories/realm/index.d.cts +2 -2
  52. package/dist/repositories/realm/index.d.ts +2 -2
  53. package/dist/repositories/realm/index.js +5 -5
  54. package/dist/repositories/sqlite/index.cjs +18 -18
  55. package/dist/repositories/sqlite/index.d.cts +2 -2
  56. package/dist/repositories/sqlite/index.d.ts +2 -2
  57. package/dist/repositories/sqlite/index.js +5 -5
  58. package/dist/{taskRunner-BZJMLQ6g.d.cts → taskRunner-D2vnpPBT.d.cts} +2 -2
  59. package/dist/{taskRunner-DATaRQus.d.ts → taskRunner-DuwK9t8O.d.ts} +2 -2
  60. package/dist/wallet/expo/background.cjs +14 -14
  61. package/dist/wallet/expo/background.d.cts +3 -3
  62. package/dist/wallet/expo/background.d.ts +3 -3
  63. package/dist/wallet/expo/background.js +6 -6
  64. package/dist/wallet/expo/index.cjs +14 -14
  65. package/dist/wallet/expo/index.d.cts +4 -4
  66. package/dist/wallet/expo/index.d.ts +4 -4
  67. package/dist/wallet/expo/index.js +5 -5
  68. package/dist/worker/expo/index.cjs +9 -9
  69. package/dist/worker/expo/index.d.cts +4 -4
  70. package/dist/worker/expo/index.d.ts +4 -4
  71. package/dist/worker/expo/index.js +5 -5
  72. package/package.json +1 -1
  73. package/dist/chunk-2JV4VQ7C.cjs.map +0 -1
  74. package/dist/chunk-3WIWNE4P.js.map +0 -1
  75. package/dist/chunk-6TAQF6EV.js.map +0 -1
  76. package/dist/chunk-AEWJU6NZ.js.map +0 -1
  77. package/dist/chunk-MJUTO3PY.cjs.map +0 -1
  78. package/dist/chunk-OIZ2V2VD.cjs.map +0 -1
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunkCO3KKSWM_cjs = require('./chunk-CO3KKSWM.cjs');
4
- var chunkOIZ2V2VD_cjs = require('./chunk-OIZ2V2VD.cjs');
5
- var chunk2JV4VQ7C_cjs = require('./chunk-2JV4VQ7C.cjs');
3
+ var chunkPJR63FTK_cjs = require('./chunk-PJR63FTK.cjs');
4
+ var chunk6YUACVX4_cjs = require('./chunk-6YUACVX4.cjs');
5
+ var chunkEJOFL5WH_cjs = require('./chunk-EJOFL5WH.cjs');
6
6
  var chunk5BLDMQED_cjs = require('./chunk-5BLDMQED.cjs');
7
7
  var utils_js = require('@scure/btc-signer/utils.js');
8
8
  var btcSigner = require('@scure/btc-signer');
@@ -188,7 +188,7 @@ var TreeSignerSession = class _TreeSignerSession {
188
188
  noncesByPubkey.set(base.hex.encode(myPublicKey.subarray(1)), myNonce);
189
189
  const tx = this.graph.find(txid);
190
190
  if (!tx) throw new Error(`missing tx for txid ${txid}`);
191
- const cosigners = chunk2JV4VQ7C_cjs.getArkPsbtFields(tx.root, 0, chunk2JV4VQ7C_cjs.CosignerPublicKey).map(
191
+ const cosigners = chunkEJOFL5WH_cjs.getArkPsbtFields(tx.root, 0, chunkEJOFL5WH_cjs.CosignerPublicKey).map(
192
192
  (c) => base.hex.encode(c.key.subarray(1))
193
193
  // xonly pubkey
194
194
  );
@@ -240,7 +240,7 @@ var TreeSignerSession = class _TreeSignerSession {
240
240
  if (!aggNonce) throw new Error("missing aggregate nonce");
241
241
  const prevoutAmounts = [];
242
242
  const prevoutScripts = [];
243
- const cosigners = chunk2JV4VQ7C_cjs.getArkPsbtFields(g.root, 0, chunk2JV4VQ7C_cjs.CosignerPublicKey).map((c) => c.key);
243
+ const cosigners = chunkEJOFL5WH_cjs.getArkPsbtFields(g.root, 0, chunkEJOFL5WH_cjs.CosignerPublicKey).map((c) => c.key);
244
244
  const { finalKey } = aggregateKeys(cosigners, true, {
245
245
  taprootTweak: this.scriptRoot
246
246
  });
@@ -294,7 +294,7 @@ function getPrevOutput(finalKey, graph, sharedOutputAmount, tx) {
294
294
  script: pkScript
295
295
  };
296
296
  }
297
- var ALL_SIGHASH = Object.values(btcSigner.SigHash).filter((x) => typeof x === "number");
297
+ var ALLOWED_SIGHASH = [btcSigner.SigHash.DEFAULT, btcSigner.SigHash.ALL, btcSigner.SigHash.ALL_ANYONECANPAY];
298
298
  var SingleKey = class _SingleKey {
299
299
  key;
300
300
  constructor(key) {
@@ -323,8 +323,9 @@ var SingleKey = class _SingleKey {
323
323
  async sign(tx, inputIndexes) {
324
324
  const txCpy = tx.clone();
325
325
  if (!inputIndexes) {
326
+ chunkEJOFL5WH_cjs.assertAllowedSighashTypes(txCpy, ALLOWED_SIGHASH);
326
327
  try {
327
- if (!txCpy.sign(this.key, ALL_SIGHASH)) {
328
+ if (!txCpy.sign(this.key, ALLOWED_SIGHASH)) {
328
329
  throw new Error("Failed to sign transaction");
329
330
  }
330
331
  } catch (e) {
@@ -335,7 +336,7 @@ var SingleKey = class _SingleKey {
335
336
  return txCpy;
336
337
  }
337
338
  for (const inputIndex of inputIndexes) {
338
- if (!txCpy.signIdx(this.key, inputIndex, ALL_SIGHASH)) {
339
+ if (!txCpy.signIdx(this.key, inputIndex, ALLOWED_SIGHASH)) {
339
340
  throw new Error(`Failed to sign input #${inputIndex}`);
340
341
  }
341
342
  }
@@ -400,7 +401,7 @@ var ReadonlySingleKey = class _ReadonlySingleKey {
400
401
  return Promise.resolve(this.publicKey);
401
402
  }
402
403
  };
403
- var ALL_SIGHASH2 = Object.values(btcSigner.SigHash).filter((x) => typeof x === "number");
404
+ var ALLOWED_SIGHASH2 = [btcSigner.SigHash.DEFAULT, btcSigner.SigHash.ALL, btcSigner.SigHash.ALL_ANYONECANPAY];
404
405
  var seedBytes = /* @__PURE__ */ new WeakMap();
405
406
  var mnemonicMeta = /* @__PURE__ */ new WeakMap();
406
407
  var SeedIdentity = class _SeedIdentity {
@@ -431,7 +432,7 @@ var SeedIdentity = class _SeedIdentity {
431
432
  let network;
432
433
  if ("descriptor" in opts && typeof opts.descriptor === "string") {
433
434
  descriptor = opts.descriptor;
434
- network = chunkOIZ2V2VD_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
435
+ network = chunk6YUACVX4_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
435
436
  } else {
436
437
  network = opts.isMainnet ?? true ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
437
438
  descriptor = descriptorsScure.scriptExpressions.trBIP32({
@@ -529,7 +530,7 @@ var SeedIdentity = class _SeedIdentity {
529
530
  * `StaticDescriptorProvider` for legacy single-key wallets.
530
531
  */
531
532
  isOurs(descriptor) {
532
- return chunkOIZ2V2VD_cjs.descriptorIsOurs(descriptor, this.descriptor, utils_js.pubSchnorr(this.derivedKey));
533
+ return chunk6YUACVX4_cjs.descriptorIsOurs(descriptor, this.descriptor, utils_js.pubSchnorr(this.derivedKey));
533
534
  }
534
535
  /**
535
536
  * Signs each request with the key derived from its descriptor.
@@ -578,7 +579,7 @@ var SeedIdentity = class _SeedIdentity {
578
579
  }
579
580
  // ── internal helpers ─────────────────────────────────────────────
580
581
  derivePrivateKeyForDescriptor(descriptor) {
581
- const network = chunkOIZ2V2VD_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
582
+ const network = chunk6YUACVX4_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
582
583
  const expansion = descriptorsScure.expand({ descriptor, network });
583
584
  if (expansion.isRanged) {
584
585
  throw new Error(
@@ -603,8 +604,9 @@ var SeedIdentity = class _SeedIdentity {
603
604
  signTxWithKey(tx, key, inputIndexes) {
604
605
  const txCpy = tx.clone();
605
606
  if (!inputIndexes) {
607
+ chunkEJOFL5WH_cjs.assertAllowedSighashTypes(txCpy, ALLOWED_SIGHASH2);
606
608
  try {
607
- if (!txCpy.sign(key, ALL_SIGHASH2)) {
609
+ if (!txCpy.sign(key, ALLOWED_SIGHASH2)) {
608
610
  throw new Error("Failed to sign transaction");
609
611
  }
610
612
  } catch (e) {
@@ -614,7 +616,7 @@ var SeedIdentity = class _SeedIdentity {
614
616
  }
615
617
  } else {
616
618
  for (const idx of inputIndexes) {
617
- if (!txCpy.signIdx(key, idx, ALL_SIGHASH2)) {
619
+ if (!txCpy.signIdx(key, idx, ALLOWED_SIGHASH2)) {
618
620
  throw new Error(`Failed to sign input #${idx}`);
619
621
  }
620
622
  }
@@ -664,7 +666,7 @@ var ReadonlyDescriptorIdentity = class _ReadonlyDescriptorIdentity {
664
666
  */
665
667
  descriptor;
666
668
  constructor(descriptor) {
667
- const network = chunkOIZ2V2VD_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
669
+ const network = chunk6YUACVX4_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
668
670
  let expansion;
669
671
  try {
670
672
  expansion = descriptorsScure.expand({ descriptor, network, index: 0 });
@@ -714,7 +716,7 @@ var ReadonlyDescriptorIdentity = class _ReadonlyDescriptorIdentity {
714
716
  * `StaticDescriptorProvider` for legacy single-key wallets.
715
717
  */
716
718
  isOurs(descriptor) {
717
- return chunkOIZ2V2VD_cjs.descriptorIsOurs(descriptor, this.descriptor, this.indexZero.pubkey);
719
+ return chunk6YUACVX4_cjs.descriptorIsOurs(descriptor, this.descriptor, this.indexZero.pubkey);
718
720
  }
719
721
  };
720
722
  function serializeSeedOwnedSigningIdentity(identity) {
@@ -876,10 +878,10 @@ var DescriptorIdentity = class {
876
878
  this.base = base;
877
879
  }
878
880
  async xOnlyPublicKey() {
879
- return chunkOIZ2V2VD_cjs.deriveDescriptorLeafPubKey(this.descriptor);
881
+ return chunk6YUACVX4_cjs.deriveDescriptorLeafPubKey(this.descriptor);
880
882
  }
881
883
  async compressedPublicKey() {
882
- return chunkOIZ2V2VD_cjs.deriveDescriptorLeafCompressedPubKey(this.descriptor);
884
+ return chunk6YUACVX4_cjs.deriveDescriptorLeafCompressedPubKey(this.descriptor);
883
885
  }
884
886
  async sign(tx, inputIndexes) {
885
887
  const [signed] = await this.signer.signWithDescriptor([
@@ -947,12 +949,12 @@ var WalletCannotAllocateAddressError = class extends Error {
947
949
  };
948
950
  async function resolveDescriptorSigner(descriptor, identity, provider) {
949
951
  const owner = provider?.isOurs(descriptor) ? provider : isHDCapableIdentity(identity) && identity.isOurs(descriptor) ? identity : void 0;
950
- if (owner && chunkOIZ2V2VD_cjs.parseHDDescriptor(descriptor)) {
952
+ if (owner && chunk6YUACVX4_cjs.parseHDDescriptor(descriptor)) {
951
953
  return new DescriptorIdentity({ descriptor, signer: owner, base: identity });
952
954
  }
953
955
  let key;
954
956
  try {
955
- key = chunkOIZ2V2VD_cjs.deriveDescriptorLeafPubKey(descriptor);
957
+ key = chunk6YUACVX4_cjs.deriveDescriptorLeafPubKey(descriptor);
956
958
  } catch {
957
959
  throw new ForeignDescriptorError(descriptor);
958
960
  }
@@ -1327,14 +1329,14 @@ function buildSaltedPreimageMessage(xonly, salt) {
1327
1329
  }
1328
1330
  var PREIMAGE_INDEX = 0;
1329
1331
  function isPerArtifactDescriptor(descriptor) {
1330
- return chunkOIZ2V2VD_cjs.parseHDDescriptor(descriptor) !== null;
1332
+ return chunk6YUACVX4_cjs.parseHDDescriptor(descriptor) !== null;
1331
1333
  }
1332
1334
  async function provisionDescriptor(wallet) {
1333
1335
  const allocated = isHDAllocationCapable(wallet) ? await wallet.getNextSigningDescriptor() : void 0;
1334
- return allocated ?? await chunkOIZ2V2VD_cjs.identityDescriptor(wallet.identity);
1336
+ return allocated ?? await chunk6YUACVX4_cjs.identityDescriptor(wallet.identity);
1335
1337
  }
1336
1338
  async function provisionRefundKey(wallet) {
1337
- const descriptor = await chunkOIZ2V2VD_cjs.identityDescriptor(wallet.identity);
1339
+ const descriptor = await chunk6YUACVX4_cjs.identityDescriptor(wallet.identity);
1338
1340
  const signer = await contractSigner(wallet, descriptor);
1339
1341
  const pubkey = await signer.xOnlyPublicKey();
1340
1342
  const identityPubkey = await wallet.identity.xOnlyPublicKey();
@@ -1344,7 +1346,7 @@ async function provisionRefundKey(wallet) {
1344
1346
  );
1345
1347
  }
1346
1348
  const address = await wallet.getAddress();
1347
- const { pkScript } = chunk2JV4VQ7C_cjs.ArkAddress.decode(address);
1349
+ const { pkScript } = chunkEJOFL5WH_cjs.ArkAddress.decode(address);
1348
1350
  return { descriptor, pubkey, pkScript, address };
1349
1351
  }
1350
1352
  async function provisionClaimSecret(wallet, opts = {}) {
@@ -1390,7 +1392,7 @@ async function contractSigner(wallet, descriptor) {
1390
1392
  const signer = isHDWalletCapable(wallet) ? await wallet.signerForDescriptor(descriptor) : wallet.identity;
1391
1393
  let expected;
1392
1394
  try {
1393
- expected = chunkOIZ2V2VD_cjs.deriveDescriptorLeafPubKey(descriptor);
1395
+ expected = chunk6YUACVX4_cjs.deriveDescriptorLeafPubKey(descriptor);
1394
1396
  } catch (cause) {
1395
1397
  throw new ForeignDescriptorError(descriptor, { cause });
1396
1398
  }
@@ -1609,14 +1611,14 @@ var RestDelegateProvider = class {
1609
1611
  */
1610
1612
  async delegate(intent, forfeitTxs, options) {
1611
1613
  const url = `${this.url}/v1/delegate`;
1612
- const response = await chunk2JV4VQ7C_cjs.baseFetch(url, {
1614
+ const response = await chunkEJOFL5WH_cjs.baseFetch(url, {
1613
1615
  method: "POST",
1614
1616
  headers: {
1615
1617
  "Content-Type": "application/json"
1616
1618
  },
1617
1619
  body: JSON.stringify({
1618
1620
  intent: {
1619
- message: chunk2JV4VQ7C_cjs.Intent.encodeMessage(intent.message),
1621
+ message: chunkEJOFL5WH_cjs.Intent.encodeMessage(intent.message),
1620
1622
  proof: intent.proof
1621
1623
  },
1622
1624
  forfeit_txs: forfeitTxs,
@@ -1636,7 +1638,7 @@ var RestDelegateProvider = class {
1636
1638
  */
1637
1639
  async getDelegateInfo() {
1638
1640
  const url = `${this.url}/v1/delegator/info`;
1639
- const response = await chunk2JV4VQ7C_cjs.rateGate.runHttp(url, () => chunk2JV4VQ7C_cjs.baseFetch(url));
1641
+ const response = await chunkEJOFL5WH_cjs.rateGate.runHttp(url, () => chunkEJOFL5WH_cjs.baseFetch(url));
1640
1642
  if (!response.ok) {
1641
1643
  const errorText2 = await response.text();
1642
1644
  throw new Error(`Failed to get delegate info: ${errorText2}`);
@@ -1661,7 +1663,7 @@ var ESPLORA_URL = {
1661
1663
  regtest: "http://localhost:3000/api"
1662
1664
  };
1663
1665
  var EsploraProvider = class {
1664
- constructor(baseUrl = ESPLORA_URL[chunk2JV4VQ7C_cjs.DEFAULT_NETWORK_NAME], opts) {
1666
+ constructor(baseUrl = ESPLORA_URL[chunkEJOFL5WH_cjs.DEFAULT_NETWORK_NAME], opts) {
1665
1667
  this.baseUrl = baseUrl;
1666
1668
  this.pollingInterval = opts?.pollingInterval ?? 15e3;
1667
1669
  this.forcePolling = opts?.forcePolling ?? false;
@@ -1670,14 +1672,14 @@ var EsploraProvider = class {
1670
1672
  pollingInterval;
1671
1673
  forcePolling;
1672
1674
  async getCoins(address) {
1673
- const response = await chunk2JV4VQ7C_cjs.baseFetch(`${this.baseUrl}/address/${address}/utxo`);
1675
+ const response = await chunkEJOFL5WH_cjs.baseFetch(`${this.baseUrl}/address/${address}/utxo`);
1674
1676
  if (!response.ok) {
1675
1677
  throw new Error(`Failed to fetch UTXOs: ${response.statusText}`);
1676
1678
  }
1677
1679
  return response.json();
1678
1680
  }
1679
1681
  async getFeeRate() {
1680
- const response = await chunk2JV4VQ7C_cjs.baseFetch(`${this.baseUrl}/fee-estimates`);
1682
+ const response = await chunkEJOFL5WH_cjs.baseFetch(`${this.baseUrl}/fee-estimates`);
1681
1683
  if (response.status === 404) {
1682
1684
  return void 0;
1683
1685
  }
@@ -1698,7 +1700,7 @@ var EsploraProvider = class {
1698
1700
  }
1699
1701
  }
1700
1702
  async getTxOutspends(txid) {
1701
- const response = await chunk2JV4VQ7C_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/outspends`);
1703
+ const response = await chunkEJOFL5WH_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/outspends`);
1702
1704
  if (!response.ok) {
1703
1705
  const error = await response.text();
1704
1706
  throw new Error(`Failed to get transaction outspends: ${error}`);
@@ -1706,7 +1708,7 @@ var EsploraProvider = class {
1706
1708
  return response.json();
1707
1709
  }
1708
1710
  async getTransactions(address) {
1709
- const response = await chunk2JV4VQ7C_cjs.baseFetch(`${this.baseUrl}/address/${address}/txs`);
1711
+ const response = await chunkEJOFL5WH_cjs.baseFetch(`${this.baseUrl}/address/${address}/txs`);
1710
1712
  if (!response.ok) {
1711
1713
  const error = await response.text();
1712
1714
  throw new Error(`Failed to get transactions: ${error}`);
@@ -1714,7 +1716,7 @@ var EsploraProvider = class {
1714
1716
  return response.json();
1715
1717
  }
1716
1718
  async getRawTransaction(txid) {
1717
- const response = await chunk2JV4VQ7C_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/hex`);
1719
+ const response = await chunkEJOFL5WH_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/hex`);
1718
1720
  if (!response.ok) {
1719
1721
  const error = await response.text();
1720
1722
  throw new Error(`Failed to get raw transaction ${txid}: ${error}`);
@@ -1722,7 +1724,7 @@ var EsploraProvider = class {
1722
1724
  return base.hex.decode((await response.text()).trim());
1723
1725
  }
1724
1726
  async getTxStatus(txid) {
1725
- const txresponse = await chunk2JV4VQ7C_cjs.baseFetch(`${this.baseUrl}/tx/${txid}`);
1727
+ const txresponse = await chunkEJOFL5WH_cjs.baseFetch(`${this.baseUrl}/tx/${txid}`);
1726
1728
  if (!txresponse.ok) {
1727
1729
  throw new Error(txresponse.statusText);
1728
1730
  }
@@ -1730,7 +1732,7 @@ var EsploraProvider = class {
1730
1732
  if (!tx.status.confirmed) {
1731
1733
  return { confirmed: false };
1732
1734
  }
1733
- const response = await chunk2JV4VQ7C_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/status`);
1735
+ const response = await chunkEJOFL5WH_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/status`);
1734
1736
  if (!response.ok) {
1735
1737
  throw new Error(`Failed to get transaction status: ${response.statusText}`);
1736
1738
  }
@@ -1814,7 +1816,7 @@ var EsploraProvider = class {
1814
1816
  return stopFunc;
1815
1817
  }
1816
1818
  async getChainTip() {
1817
- const tipBlocks = await chunk2JV4VQ7C_cjs.baseFetch(`${this.baseUrl}/blocks`);
1819
+ const tipBlocks = await chunkEJOFL5WH_cjs.baseFetch(`${this.baseUrl}/blocks`);
1818
1820
  if (!tipBlocks.ok) {
1819
1821
  throw new Error(`Failed to get chain tip: ${tipBlocks.statusText}`);
1820
1822
  }
@@ -1833,7 +1835,7 @@ var EsploraProvider = class {
1833
1835
  };
1834
1836
  }
1835
1837
  async broadcastPackage(parent, child) {
1836
- const response = await chunk2JV4VQ7C_cjs.baseFetch(`${this.baseUrl}/txs/package`, {
1838
+ const response = await chunkEJOFL5WH_cjs.baseFetch(`${this.baseUrl}/txs/package`, {
1837
1839
  method: "POST",
1838
1840
  headers: {
1839
1841
  "Content-Type": "application/json"
@@ -1849,7 +1851,7 @@ var EsploraProvider = class {
1849
1851
  return result;
1850
1852
  }
1851
1853
  async broadcastTx(tx) {
1852
- const response = await chunk2JV4VQ7C_cjs.baseFetch(`${this.baseUrl}/tx`, {
1854
+ const response = await chunkEJOFL5WH_cjs.baseFetch(`${this.baseUrl}/tx`, {
1853
1855
  method: "POST",
1854
1856
  headers: {
1855
1857
  "Content-Type": "text/plain"
@@ -2029,7 +2031,7 @@ function findP2AOutput(tx) {
2029
2031
  var CHILD_DUST_AMOUNT = 546;
2030
2032
  function buildAnchorChild(params) {
2031
2033
  const { parent, feeRate, fundingCoins, changeAddress, tapInternalKey, network } = params;
2032
- const child = new chunk2JV4VQ7C_cjs.Transaction({ version: 3, allowLegacyWitnessUtxo: true });
2034
+ const child = new chunkEJOFL5WH_cjs.Transaction({ version: 3, allowLegacyWitnessUtxo: true });
2033
2035
  child.addInput(findP2AOutput(parent));
2034
2036
  const estimator = TxWeightEstimator.create().addP2AInput();
2035
2037
  for (const _ of fundingCoins) {
@@ -2077,7 +2079,7 @@ function buildForfeitTx(inputs, forfeitPkScript, txLocktime) {
2077
2079
  );
2078
2080
  }
2079
2081
  function buildForfeitTxWithOutput(inputs, output, txLocktime) {
2080
- const tx = new chunk2JV4VQ7C_cjs.Transaction({
2082
+ const tx = new chunkEJOFL5WH_cjs.Transaction({
2081
2083
  version: 3,
2082
2084
  lockTime: txLocktime
2083
2085
  });
@@ -2153,7 +2155,7 @@ function validateVtxoTxGraph(graph, roundTransaction, sweepTapTreeRoot) {
2153
2155
  if (previousScriptKey.length !== 32) {
2154
2156
  throw new Error(`parent output ${childIndex} has invalid script`);
2155
2157
  }
2156
- const cosigners = chunk2JV4VQ7C_cjs.getArkPsbtFields(child.root, 0, chunk2JV4VQ7C_cjs.CosignerPublicKey);
2158
+ const cosigners = chunkEJOFL5WH_cjs.getArkPsbtFields(child.root, 0, chunkEJOFL5WH_cjs.CosignerPublicKey);
2157
2159
  if (cosigners.length === 0) {
2158
2160
  throw ErrMissingCosignersPublicKeys;
2159
2161
  }
@@ -2211,7 +2213,7 @@ var EmulatorPacket = class _EmulatorPacket {
2211
2213
  return new _EmulatorPacket(entries);
2212
2214
  }
2213
2215
  static fromBytes(data) {
2214
- const reader = new chunkCO3KKSWM_cjs.BufferReader(data);
2216
+ const reader = new chunkPJR63FTK_cjs.BufferReader(data);
2215
2217
  const entryCount = reader.readCompactSize();
2216
2218
  const entries = [];
2217
2219
  for (let i = 0; i < entryCount; i++) {
@@ -2229,7 +2231,7 @@ var EmulatorPacket = class _EmulatorPacket {
2229
2231
  return _EmulatorPacket.PACKET_TYPE;
2230
2232
  }
2231
2233
  serialize() {
2232
- const writer = new chunkCO3KKSWM_cjs.BufferWriter();
2234
+ const writer = new chunkPJR63FTK_cjs.BufferWriter();
2233
2235
  writer.writeCompactSize(this.entries.length);
2234
2236
  for (const entry of this.entries) {
2235
2237
  writer.writeUint16LE(entry.vin);
@@ -2316,7 +2318,7 @@ var Extension = class _Extension {
2316
2318
  `expected magic prefix ${base.hex.encode(ARKADE_MAGIC)}, got ${base.hex.encode(payload.slice(0, Math.min(payload.length, ARKADE_MAGIC.length)))}`
2317
2319
  );
2318
2320
  }
2319
- const reader = new chunkCO3KKSWM_cjs.BufferReader(payload.slice(ARKADE_MAGIC.length));
2321
+ const reader = new chunkPJR63FTK_cjs.BufferReader(payload.slice(ARKADE_MAGIC.length));
2320
2322
  const packets = [];
2321
2323
  while (reader.remaining() > 0) {
2322
2324
  const packetType = reader.readByte();
@@ -2390,7 +2392,7 @@ var Extension = class _Extension {
2390
2392
  */
2391
2393
  getAssetPacket() {
2392
2394
  for (const p of this.packets) {
2393
- if (p instanceof chunkCO3KKSWM_cjs.Packet) {
2395
+ if (p instanceof chunkPJR63FTK_cjs.Packet) {
2394
2396
  return p;
2395
2397
  }
2396
2398
  }
@@ -2428,8 +2430,8 @@ var Extension = class _Extension {
2428
2430
  };
2429
2431
  function parsePacket(packetType, data) {
2430
2432
  switch (packetType) {
2431
- case chunkCO3KKSWM_cjs.Packet.PACKET_TYPE:
2432
- return chunkCO3KKSWM_cjs.Packet.fromBytes(data);
2433
+ case chunkPJR63FTK_cjs.Packet.PACKET_TYPE:
2434
+ return chunkPJR63FTK_cjs.Packet.fromBytes(data);
2433
2435
  case EmulatorPacket.PACKET_TYPE:
2434
2436
  return EmulatorPacket.fromBytes(data);
2435
2437
  default:
@@ -2476,16 +2478,16 @@ function buildOpReturnScript(data) {
2476
2478
  }
2477
2479
  return script;
2478
2480
  }
2479
- var ErrOffchainOutputNotFound = (address) => new chunk2JV4VQ7C_cjs.ServerResponseMismatchError(`offchain send output not found: ${address}`);
2480
- var ErrInvalidAssetOutputAmount = (got, want, assetId) => new chunk2JV4VQ7C_cjs.ServerResponseMismatchError(
2481
+ var ErrOffchainOutputNotFound = (address) => new chunkEJOFL5WH_cjs.ServerResponseMismatchError(`offchain send output not found: ${address}`);
2482
+ var ErrInvalidAssetOutputAmount = (got, want, assetId) => new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
2481
2483
  `invalid asset output amount for ${assetId}: got ${got}, want ${want}`
2482
2484
  );
2483
- var ErrAssetGroupNotFound = (assetId) => new chunk2JV4VQ7C_cjs.ServerResponseMismatchError(`asset group not found in batch leaf: ${assetId}`);
2484
- var ErrAssetOutputNotFound = (assetId, outputIndex) => new chunk2JV4VQ7C_cjs.ServerResponseMismatchError(
2485
+ var ErrAssetGroupNotFound = (assetId) => new chunkEJOFL5WH_cjs.ServerResponseMismatchError(`asset group not found in batch leaf: ${assetId}`);
2486
+ var ErrAssetOutputNotFound = (assetId, outputIndex) => new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
2485
2487
  `asset output not found in asset group ${assetId} at index ${outputIndex}`
2486
2488
  );
2487
- var ErrOnchainOutputNotFound = (address) => new chunk2JV4VQ7C_cjs.ServerResponseMismatchError(`onchain output not found: ${address}`);
2488
- var ErrUnvalidatedOffchainOutput = (address) => new chunk2JV4VQ7C_cjs.ServerResponseMismatchError(
2489
+ var ErrOnchainOutputNotFound = (address) => new chunkEJOFL5WH_cjs.ServerResponseMismatchError(`onchain output not found: ${address}`);
2490
+ var ErrUnvalidatedOffchainOutput = (address) => new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
2489
2491
  `offchain output ${address} cannot be validated: virtual output tree signing did not run`
2490
2492
  );
2491
2493
  var ErrInvalidOnchainOutputAmount = (address) => new Error(`invalid onchain output amount: ${address}`);
@@ -2494,7 +2496,7 @@ var ErrInvalidOffchainOutputAmount = (address) => new Error(`invalid offchain ou
2494
2496
  function assertFinalCommitmentMatchesValidated(finalCommitmentTx, validatedCommitmentTxid, context) {
2495
2497
  if (!validatedCommitmentTxid) return;
2496
2498
  if (finalCommitmentTx.id === validatedCommitmentTxid) return;
2497
- throw new chunk2JV4VQ7C_cjs.ServerResponseMismatchError(
2499
+ throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
2498
2500
  `${context}: finalization commitment tx ${finalCommitmentTx.id} differs from the validated commitment tx ${validatedCommitmentTxid}`
2499
2501
  );
2500
2502
  }
@@ -2504,7 +2506,7 @@ function validateBatchRecipients(commitmentTx, vtxoTreeLeaves, recipients, netwo
2504
2506
  for (const recipient of recipients) {
2505
2507
  let arkAddress;
2506
2508
  try {
2507
- arkAddress = chunk2JV4VQ7C_cjs.ArkAddress.decode(recipient.address);
2509
+ arkAddress = chunkEJOFL5WH_cjs.ArkAddress.decode(recipient.address);
2508
2510
  } catch {
2509
2511
  validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
2510
2512
  continue;
@@ -2516,7 +2518,7 @@ function validateBatchRecipientsWithoutTree(commitmentTx, recipients, network) {
2516
2518
  const usedOnchainOutputs = /* @__PURE__ */ new Set();
2517
2519
  for (const recipient of recipients) {
2518
2520
  try {
2519
- chunk2JV4VQ7C_cjs.ArkAddress.decode(recipient.address);
2521
+ chunkEJOFL5WH_cjs.ArkAddress.decode(recipient.address);
2520
2522
  } catch {
2521
2523
  validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
2522
2524
  continue;
@@ -2749,7 +2751,7 @@ function assetMintResolver() {
2749
2751
  if (!tx.assets?.length || !tx.key.arkTxid) return void 0;
2750
2752
  const minted = tx.assets.filter((a) => {
2751
2753
  try {
2752
- return base.hex.encode(chunkCO3KKSWM_cjs.AssetId.fromString(a.assetId).txid) === tx.key.arkTxid;
2754
+ return base.hex.encode(chunkPJR63FTK_cjs.AssetId.fromString(a.assetId).txid) === tx.key.arkTxid;
2753
2755
  } catch {
2754
2756
  return false;
2755
2757
  }
@@ -2792,7 +2794,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
2792
2794
  const existing = inputsByAssetId.get(asset.assetId);
2793
2795
  inputsByAssetId.set(asset.assetId, [
2794
2796
  ...existing ?? [],
2795
- chunkCO3KKSWM_cjs.AssetInput.create(inputIndex, asset.amount)
2797
+ chunkPJR63FTK_cjs.AssetInput.create(inputIndex, asset.amount)
2796
2798
  ]);
2797
2799
  }
2798
2800
  }
@@ -2804,7 +2806,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
2804
2806
  const existing = outputsByAssetId.get(asset.assetId);
2805
2807
  outputsByAssetId.set(asset.assetId, [
2806
2808
  ...existing ?? [],
2807
- chunkCO3KKSWM_cjs.AssetOutput.create(outputIndex, asset.amount)
2809
+ chunkPJR63FTK_cjs.AssetOutput.create(outputIndex, asset.amount)
2808
2810
  ]);
2809
2811
  }
2810
2812
  }
@@ -2815,7 +2817,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
2815
2817
  const existing = outputsByAssetId.get(asset.assetId);
2816
2818
  outputsByAssetId.set(asset.assetId, [
2817
2819
  ...existing ?? [],
2818
- chunkCO3KKSWM_cjs.AssetOutput.create(outputIndex, asset.amount)
2820
+ chunkPJR63FTK_cjs.AssetOutput.create(outputIndex, asset.amount)
2819
2821
  ]);
2820
2822
  }
2821
2823
  }
@@ -2824,11 +2826,11 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
2824
2826
  for (const assetIdStr of allAssetIds) {
2825
2827
  const inputs = inputsByAssetId.get(assetIdStr);
2826
2828
  const outputs = outputsByAssetId.get(assetIdStr);
2827
- const assetId = chunkCO3KKSWM_cjs.AssetId.fromString(assetIdStr);
2828
- const group = chunkCO3KKSWM_cjs.AssetGroup.create(assetId, null, inputs ?? [], outputs ?? [], []);
2829
+ const assetId = chunkPJR63FTK_cjs.AssetId.fromString(assetIdStr);
2830
+ const group = chunkPJR63FTK_cjs.AssetGroup.create(assetId, null, inputs ?? [], outputs ?? [], []);
2829
2831
  groups.push(group);
2830
2832
  }
2831
- return chunkCO3KKSWM_cjs.Packet.create(groups);
2833
+ return chunkPJR63FTK_cjs.Packet.create(groups);
2832
2834
  }
2833
2835
  function selectCoinsWithAsset(coins, assetId, requiredAmount) {
2834
2836
  const coinsWithAsset = coins.filter((coin) => coin.assets?.some((a) => a.assetId === assetId));
@@ -2865,7 +2867,7 @@ function selectedCoinsToAssetInputs(selectedCoins) {
2865
2867
  }
2866
2868
  function toXOnlySignerHex(pubkeyHex) {
2867
2869
  const bytes = base.hex.decode(pubkeyHex);
2868
- if (bytes.length === 32 || bytes.length === 33) return base.hex.encode(chunkOIZ2V2VD_cjs.toXOnly(bytes, "signer key"));
2870
+ if (bytes.length === 32 || bytes.length === 33) return base.hex.encode(chunk6YUACVX4_cjs.toXOnly(bytes, "signer key"));
2869
2871
  throw new Error(`invalid signer pubkey length: expected 32 or 33 bytes, got ${bytes.length}`);
2870
2872
  }
2871
2873
  function signerSetFromInfo(info) {
@@ -2912,13 +2914,13 @@ var toTimelock = (value) => ({
2912
2914
  var toSeconds = (t) => t.type === "seconds" ? t.value : t.value * NOMINAL_BLOCK_SECONDS;
2913
2915
  function assertTimelockInPolicy(timelock, policy, label, overrideOption) {
2914
2916
  if (policy.requireSeconds && timelock.type === "blocks") {
2915
- throw new chunk2JV4VQ7C_cjs.ServerResponseMismatchError(
2917
+ throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
2916
2918
  `${label} rejected: block-typed timelocks are not accepted (got ${timelock.value})`
2917
2919
  );
2918
2920
  }
2919
2921
  const seconds = toSeconds(timelock);
2920
2922
  if (seconds < policy.minSeconds) {
2921
- throw new chunk2JV4VQ7C_cjs.ServerResponseMismatchError(
2923
+ throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
2922
2924
  `${label} rejected: ${timelock.value} ${timelock.type} is below the ${policy.minSeconds}s floor; pass ${overrideOption}: ${seconds}n to Wallet.create to lower it`
2923
2925
  );
2924
2926
  }
@@ -2939,7 +2941,7 @@ function resolveBatchExpiryPolicy(network, overrides) {
2939
2941
  }
2940
2942
  function assertValidBatchExpiry(batchExpiry, policy) {
2941
2943
  if (policy.advertisedVtxoTreeExpiry !== void 0 && batchExpiry !== policy.advertisedVtxoTreeExpiry) {
2942
- throw new chunk2JV4VQ7C_cjs.ServerResponseMismatchError(
2944
+ throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
2943
2945
  `batch expiry rejected: ${batchExpiry} does not match the advertised vtxoTreeExpiry ${policy.advertisedVtxoTreeExpiry}`
2944
2946
  );
2945
2947
  }
@@ -2969,21 +2971,21 @@ function resolveCheckpointExitDelayPolicy(network, overrides) {
2969
2971
  function assertValidServerUnrollScript(checkpointTapscript, policy) {
2970
2972
  let script;
2971
2973
  try {
2972
- script = chunk2JV4VQ7C_cjs.CSVMultisigTapscript.decode(base.hex.decode(checkpointTapscript));
2974
+ script = chunkEJOFL5WH_cjs.CSVMultisigTapscript.decode(base.hex.decode(checkpointTapscript));
2973
2975
  } catch (e) {
2974
- throw new chunk2JV4VQ7C_cjs.ServerResponseMismatchError(
2976
+ throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
2975
2977
  `checkpoint exit delay rejected: invalid checkpointTapscript from server (${e instanceof Error ? e.message : String(e)})`
2976
2978
  );
2977
2979
  }
2978
2980
  if (policy.advertisedForfeitPubkey !== void 0) {
2979
2981
  const { pubkeys } = script.params;
2980
2982
  if (pubkeys.length !== 1) {
2981
- throw new chunk2JV4VQ7C_cjs.ServerResponseMismatchError(
2983
+ throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
2982
2984
  `checkpoint exit delay rejected: checkpointTapscript must commit to exactly one pubkey, got ${pubkeys.length} [${pubkeys.map(base.hex.encode).join(", ")}]`
2983
2985
  );
2984
2986
  }
2985
2987
  if (!utils_js.equalBytes(pubkeys[0], policy.advertisedForfeitPubkey)) {
2986
- throw new chunk2JV4VQ7C_cjs.ServerResponseMismatchError(
2988
+ throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
2987
2989
  `checkpoint exit delay rejected: checkpointTapscript pubkey ${base.hex.encode(pubkeys[0])} does not match the advertised forfeitPubkey ${base.hex.encode(policy.advertisedForfeitPubkey)}`
2988
2990
  );
2989
2991
  }
@@ -3027,8 +3029,8 @@ function buildOffchainTx(inputs, outputs, serverUnrollScript) {
3027
3029
  function buildVirtualTx(inputs, outputs) {
3028
3030
  let lockTime = 0n;
3029
3031
  for (const input of inputs) {
3030
- const tapscript = chunk2JV4VQ7C_cjs.decodeTapscript(chunk2JV4VQ7C_cjs.scriptFromTapLeafScript(input.tapLeafScript));
3031
- if (chunk2JV4VQ7C_cjs.CLTVMultisigTapscript.is(tapscript)) {
3032
+ const tapscript = chunkEJOFL5WH_cjs.decodeTapscript(chunkEJOFL5WH_cjs.scriptFromTapLeafScript(input.tapLeafScript));
3033
+ if (chunkEJOFL5WH_cjs.CLTVMultisigTapscript.is(tapscript)) {
3032
3034
  if (lockTime !== 0n) {
3033
3035
  if (isSeconds(lockTime) !== isSeconds(tapscript.params.absoluteTimelock)) {
3034
3036
  throw new Error("cannot mix seconds and blocks locktime");
@@ -3039,7 +3041,7 @@ function buildVirtualTx(inputs, outputs) {
3039
3041
  }
3040
3042
  }
3041
3043
  }
3042
- const tx = new chunk2JV4VQ7C_cjs.Transaction({
3044
+ const tx = new chunkEJOFL5WH_cjs.Transaction({
3043
3045
  version: 3,
3044
3046
  lockTime: Number(lockTime)
3045
3047
  });
@@ -3049,12 +3051,12 @@ function buildVirtualTx(inputs, outputs) {
3049
3051
  index: input.vout,
3050
3052
  sequence: lockTime ? btcSigner.DEFAULT_SEQUENCE - 1 : void 0,
3051
3053
  witnessUtxo: {
3052
- script: chunk2JV4VQ7C_cjs.VtxoScript.decode(input.tapTree).pkScript,
3054
+ script: chunkEJOFL5WH_cjs.VtxoScript.decode(input.tapTree).pkScript,
3053
3055
  amount: BigInt(input.value)
3054
3056
  },
3055
3057
  tapLeafScript: [input.tapLeafScript]
3056
3058
  });
3057
- chunk2JV4VQ7C_cjs.setArkPsbtField(tx, i, chunk2JV4VQ7C_cjs.VtxoTaprootTree, input.tapTree);
3059
+ chunkEJOFL5WH_cjs.setArkPsbtField(tx, i, chunkEJOFL5WH_cjs.VtxoTaprootTree, input.tapTree);
3058
3060
  }
3059
3061
  for (const output of outputs) {
3060
3062
  tx.addOutput(output);
@@ -3063,8 +3065,8 @@ function buildVirtualTx(inputs, outputs) {
3063
3065
  return tx;
3064
3066
  }
3065
3067
  function buildCheckpointTx(vtxo, serverUnrollScript) {
3066
- const collaborativeClosure = chunk2JV4VQ7C_cjs.decodeTapscript(chunk2JV4VQ7C_cjs.scriptFromTapLeafScript(vtxo.tapLeafScript));
3067
- const checkpointVtxoScript = new chunk2JV4VQ7C_cjs.VtxoScript([
3068
+ const collaborativeClosure = chunkEJOFL5WH_cjs.decodeTapscript(chunkEJOFL5WH_cjs.scriptFromTapLeafScript(vtxo.tapLeafScript));
3069
+ const checkpointVtxoScript = new chunkEJOFL5WH_cjs.VtxoScript([
3068
3070
  serverUnrollScript.script,
3069
3071
  collaborativeClosure.script
3070
3072
  ]);
@@ -3107,9 +3109,6 @@ function hasBoardingTxExpired(coin, boardingTimelock, chainTipHeight) {
3107
3109
  const blockTime = BigInt(Math.floor(coin.status.block_time));
3108
3110
  return blockTime + boardingTimelock.value <= now;
3109
3111
  }
3110
- function formatSighash(type) {
3111
- return `0x${type.toString(16).padStart(2, "0")}`;
3112
- }
3113
3112
  function verifyTapscriptSignatures(tx, inputIndex, requiredSigners, excludePubkeys = [], allowedSighashTypes = [btcSigner.SigHash.DEFAULT], expectedLeafHash) {
3114
3113
  const input = tx.getInput(inputIndex);
3115
3114
  const prevoutScripts = [];
@@ -3143,7 +3142,7 @@ function verifyTapscriptSignatures(tx, inputIndex, requiredSigners, excludePubke
3143
3142
  const sighashType = signature.length === 65 ? signature[64] : btcSigner.SigHash.DEFAULT;
3144
3143
  const sig = signature.subarray(0, 64);
3145
3144
  if (!allowedSighashTypes.includes(sighashType)) {
3146
- const sighashName = formatSighash(sighashType);
3145
+ const sighashName = chunkEJOFL5WH_cjs.formatSighash(sighashType);
3147
3146
  throw new Error(
3148
3147
  `Unallowed sighash type ${sighashName} for input ${inputIndex}, pubkey ${pubKeyHex}.`
3149
3148
  );
@@ -3217,7 +3216,7 @@ function combineTapscriptSigs(signedTx, originalTx) {
3217
3216
  }
3218
3217
  function isValidArkAddress(address) {
3219
3218
  try {
3220
- chunk2JV4VQ7C_cjs.ArkAddress.decode(address);
3219
+ chunkEJOFL5WH_cjs.ArkAddress.decode(address);
3221
3220
  return true;
3222
3221
  } catch (e) {
3223
3222
  return false;
@@ -3225,16 +3224,16 @@ function isValidArkAddress(address) {
3225
3224
  }
3226
3225
  function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, context) {
3227
3226
  if (serverCheckpointTxs.length !== expectedCheckpoints.length) {
3228
- throw new chunk2JV4VQ7C_cjs.ServerResponseMismatchError(
3227
+ throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3229
3228
  `${context} returned ${serverCheckpointTxs.length} checkpoints, expected ${expectedCheckpoints.length}`
3230
3229
  );
3231
3230
  }
3232
3231
  const byTxid = new Map(expectedCheckpoints.map((c) => [c.id, c]));
3233
3232
  return serverCheckpointTxs.map((encoded, index) => {
3234
- const server = chunk2JV4VQ7C_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
3233
+ const server = chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
3235
3234
  const local = byTxid.get(server.id);
3236
3235
  if (!local) {
3237
- throw new chunk2JV4VQ7C_cjs.ServerResponseMismatchError(
3236
+ throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3238
3237
  `${context} checkpoint ${index} txid ${server.id} does not match any submitted checkpoint`
3239
3238
  );
3240
3239
  }
@@ -3244,14 +3243,14 @@ function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, contex
3244
3243
  }
3245
3244
  function assertSubmittedArkTxid(response, signedArkTx, context) {
3246
3245
  if (response.arkTxid !== signedArkTx.id) {
3247
- throw new chunk2JV4VQ7C_cjs.ServerResponseMismatchError(
3246
+ throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3248
3247
  `${context} returned ark txid ${response.arkTxid}, expected ${signedArkTx.id}`
3249
3248
  );
3250
3249
  }
3251
3250
  if (response.finalArkTx === void 0) return;
3252
- const finalTxid = chunk2JV4VQ7C_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx)).id;
3251
+ const finalTxid = chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx)).id;
3253
3252
  if (finalTxid !== signedArkTx.id) {
3254
- throw new chunk2JV4VQ7C_cjs.ServerResponseMismatchError(
3253
+ throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3255
3254
  `${context} returned final ark tx ${finalTxid}, expected ${signedArkTx.id}`
3256
3255
  );
3257
3256
  }
@@ -3270,10 +3269,10 @@ function assertServerSignedLeaf(serverTx, localTx, inputIndex, serverPubkeyHex,
3270
3269
  [serverPubkeyHex],
3271
3270
  void 0,
3272
3271
  void 0,
3273
- payment_js.tapLeafHash(chunk2JV4VQ7C_cjs.scriptFromTapLeafScript(leaf))
3272
+ payment_js.tapLeafHash(chunkEJOFL5WH_cjs.scriptFromTapLeafScript(leaf))
3274
3273
  );
3275
3274
  } catch (error) {
3276
- throw new chunk2JV4VQ7C_cjs.ServerResponseMismatchError(
3275
+ throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3277
3276
  `${context}: input ${inputIndex} is not signed by the server on the leaf being spent (${error instanceof Error ? error.message : String(error)})`
3278
3277
  );
3279
3278
  }
@@ -3282,20 +3281,20 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
3282
3281
  const byOutpoint = new Map(inputs.map((input) => [`${input.txid}:${input.vout}`, input]));
3283
3282
  for (const [index, checkpoint] of checkpoints.entries()) {
3284
3283
  if (checkpoint.inputsLength !== 1) {
3285
- throw new chunk2JV4VQ7C_cjs.ServerResponseMismatchError(
3284
+ throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3286
3285
  `${context}: checkpoint ${index} spends ${checkpoint.inputsLength} inputs, expected 1`
3287
3286
  );
3288
3287
  }
3289
3288
  const spent = checkpoint.getInput(0);
3290
3289
  if (!spent.txid || spent.index === void 0) {
3291
- throw new chunk2JV4VQ7C_cjs.ServerResponseMismatchError(
3290
+ throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3292
3291
  `${context}: checkpoint ${index} has no input outpoint`
3293
3292
  );
3294
3293
  }
3295
3294
  const outpoint = `${base.hex.encode(spent.txid)}:${spent.index}`;
3296
3295
  const input = byOutpoint.get(outpoint);
3297
3296
  if (!input) {
3298
- throw new chunk2JV4VQ7C_cjs.ServerResponseMismatchError(
3297
+ throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3299
3298
  `${context}: checkpoint ${index} spends ${outpoint}, which is not one of the requested virtual outputs`
3300
3299
  );
3301
3300
  }
@@ -3303,7 +3302,7 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
3303
3302
  (unroll) => buildCheckpointTx(input, unroll).tx.id === checkpoint.id
3304
3303
  );
3305
3304
  if (!rebuilt) {
3306
- throw new chunk2JV4VQ7C_cjs.ServerResponseMismatchError(
3305
+ throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3307
3306
  `${context}: checkpoint ${index} txid ${checkpoint.id} differs from the checkpoint built locally for ${outpoint}`
3308
3307
  );
3309
3308
  }
@@ -3327,15 +3326,24 @@ async function submitOffchainTx(provider, offchainTx, signer, hooks, options) {
3327
3326
  assertSubmittedArkTxid(response, signedArkTx, "submitTx");
3328
3327
  const { arkTxid, signedCheckpointTxs } = response;
3329
3328
  const matched = matchServerCheckpoints(signedCheckpointTxs, offchainTx.checkpoints, "submitTx");
3329
+ matched.forEach(({ server }, index) => {
3330
+ try {
3331
+ chunkEJOFL5WH_cjs.assertAllowedSighashTypes(server);
3332
+ } catch (error) {
3333
+ throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3334
+ `submitTx checkpoint ${index}: ${error instanceof Error ? error.message : String(error)}`
3335
+ );
3336
+ }
3337
+ });
3330
3338
  const verify = options?.verifyServerSignatures;
3331
3339
  if (verify) {
3332
3340
  if (response.finalArkTx === void 0) {
3333
- throw new chunk2JV4VQ7C_cjs.ServerResponseMismatchError(
3341
+ throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3334
3342
  "submitTx: server returned no final ark tx to verify its signatures against"
3335
3343
  );
3336
3344
  }
3337
- const finalArkTx = chunk2JV4VQ7C_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx));
3338
- const serverPubkeyHex = base.hex.encode(chunkOIZ2V2VD_cjs.toXOnly(verify.serverPubkey, "server key"));
3345
+ const finalArkTx = chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx));
3346
+ const serverPubkeyHex = base.hex.encode(chunk6YUACVX4_cjs.toXOnly(verify.serverPubkey, "server key"));
3339
3347
  for (let i = 0; i < offchainTx.arkTx.inputsLength; i++) {
3340
3348
  assertServerSignedLeaf(
3341
3349
  finalArkTx,
@@ -3391,12 +3399,12 @@ function claimWithPreimageIdentity(identity, preimage) {
3391
3399
  return {
3392
3400
  ...identity,
3393
3401
  sign: async (tx, inputIndexes) => {
3394
- const signed = chunk2JV4VQ7C_cjs.Transaction.fromPSBT(
3402
+ const signed = chunkEJOFL5WH_cjs.Transaction.fromPSBT(
3395
3403
  (await identity.sign(tx.clone(), inputIndexes)).toPSBT()
3396
3404
  );
3397
3405
  const indexes = inputIndexes ?? Array.from({ length: signed.inputsLength }, (_, i) => i);
3398
3406
  for (const index of indexes) {
3399
- chunk2JV4VQ7C_cjs.setArkPsbtField(signed, index, chunk2JV4VQ7C_cjs.ConditionWitness, [preimage]);
3407
+ chunkEJOFL5WH_cjs.setArkPsbtField(signed, index, chunkEJOFL5WH_cjs.ConditionWitness, [preimage]);
3400
3408
  }
3401
3409
  return signed;
3402
3410
  }
@@ -3588,7 +3596,7 @@ function extendCoinWithTapscript(boardingTapscript, utxo) {
3588
3596
  };
3589
3597
  }
3590
3598
  function deriveContractTapscripts(contract) {
3591
- const handler = chunkOIZ2V2VD_cjs.contractHandlers.get(contract.type);
3599
+ const handler = chunk6YUACVX4_cjs.contractHandlers.get(contract.type);
3592
3600
  if (!handler) {
3593
3601
  throw new Error(`No handler for contract type '${contract.type}'`);
3594
3602
  }
@@ -3659,7 +3667,7 @@ function getRandomId() {
3659
3667
  }
3660
3668
  function isValidArkAddress2(address) {
3661
3669
  try {
3662
- chunk2JV4VQ7C_cjs.ArkAddress.decode(address);
3670
+ chunkEJOFL5WH_cjs.ArkAddress.decode(address);
3663
3671
  return true;
3664
3672
  } catch (e) {
3665
3673
  return false;
@@ -3687,7 +3695,7 @@ function assertRecipientArkAddress(encoded, address, context) {
3687
3695
  function assertTapTreeDerivesAddress(encoded, tapTree, address) {
3688
3696
  let derived;
3689
3697
  try {
3690
- derived = chunk2JV4VQ7C_cjs.VtxoScript.decode(tapTree).pkScript;
3698
+ derived = chunkEJOFL5WH_cjs.VtxoScript.decode(tapTree).pkScript;
3691
3699
  } catch (e) {
3692
3700
  throw new Error(
3693
3701
  `Invalid tapTree for ${encoded}: ${e instanceof Error ? e.message : String(e)}`
@@ -3704,7 +3712,7 @@ function validateRecipients(recipients, dustAmount, context) {
3704
3712
  for (const recipient of recipients) {
3705
3713
  let address;
3706
3714
  try {
3707
- address = chunk2JV4VQ7C_cjs.ArkAddress.decode(recipient.address);
3715
+ address = chunkEJOFL5WH_cjs.ArkAddress.decode(recipient.address);
3708
3716
  } catch (e) {
3709
3717
  throw new Error(`Invalid Arkade address: ${recipient.address}`);
3710
3718
  }
@@ -3729,7 +3737,7 @@ function validateRecipients(recipients, dustAmount, context) {
3729
3737
 
3730
3738
  // src/contracts/spendability.ts
3731
3739
  function isContractGenericallySpendable(contract) {
3732
- return chunkOIZ2V2VD_cjs.contractHandlers.get(contract.type)?.isGenericallySpendable?.(contract) === true;
3740
+ return chunk6YUACVX4_cjs.contractHandlers.get(contract.type)?.isGenericallySpendable?.(contract) === true;
3733
3741
  }
3734
3742
  function gatedContracts(contracts) {
3735
3743
  const gated = /* @__PURE__ */ new Map();
@@ -3742,7 +3750,7 @@ function gateExclusion(gated) {
3742
3750
  return (vtxo) => {
3743
3751
  const type = vtxo.script === void 0 ? void 0 : gated.get(vtxo.script);
3744
3752
  if (type === void 0) return void 0;
3745
- if (!chunkOIZ2V2VD_cjs.contractHandlers.has(type)) {
3753
+ if (!chunk6YUACVX4_cjs.contractHandlers.has(type)) {
3746
3754
  return `at ${vtxo.script} (contract type '${type}') has no handler registered in this build`;
3747
3755
  }
3748
3756
  return `at ${vtxo.script} (contract type '${type}') is not generically spendable`;
@@ -3778,7 +3786,7 @@ function selectPendingRecoveryOutpoints(contractsWithVtxos, signerSet, nowSecond
3778
3786
  continue;
3779
3787
  }
3780
3788
  for (const v of vtxos) {
3781
- if (!chunk2JV4VQ7C_cjs.hasTerminalSpend(v) && !v.isSwept && !v.isUnrolled) {
3789
+ if (!chunkEJOFL5WH_cjs.hasTerminalSpend(v) && !v.isSwept && !v.isUnrolled) {
3782
3790
  out.add(`${v.txid}:${v.vout}`);
3783
3791
  }
3784
3792
  }
@@ -3813,10 +3821,10 @@ function byValueDescending(vtxos) {
3813
3821
  return [...vtxos].sort((a, b) => b.value - a.value);
3814
3822
  }
3815
3823
  async function fetchTimeHeight(wallet) {
3816
- return chunk2JV4VQ7C_cjs.resolveTimeHeight(wallet.onchainProvider);
3824
+ return chunkEJOFL5WH_cjs.resolveTimeHeight(wallet.onchainProvider);
3817
3825
  }
3818
3826
  function canMigrateBySend(vtxo, now) {
3819
- if (!chunk2JV4VQ7C_cjs.canSpendOffchain(vtxo, now)) return false;
3827
+ if (!chunkEJOFL5WH_cjs.canSpendOffchain(vtxo, now)) return false;
3820
3828
  return vtxo.expiresAt !== void 0 || vtxo.expiresAtHeight !== void 0;
3821
3829
  }
3822
3830
  function byExpiryAscending(vtxos, now) {
@@ -3824,7 +3832,7 @@ function byExpiryAscending(vtxos, now) {
3824
3832
  if (vtxo.isSwept) return -Infinity;
3825
3833
  if (vtxo.expiresAt !== void 0) return vtxo.expiresAt.getTime();
3826
3834
  if (vtxo.expiresAtHeight !== void 0) {
3827
- return chunk2JV4VQ7C_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
3835
+ return chunkEJOFL5WH_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
3828
3836
  }
3829
3837
  return Infinity;
3830
3838
  };
@@ -3851,7 +3859,7 @@ function priceSettlementInputs(vtxos, estimator) {
3851
3859
  const payable = [];
3852
3860
  const net = /* @__PURE__ */ new Map();
3853
3861
  for (const vtxo of vtxos) {
3854
- const inputFee = estimator.evalOffchainInput(chunk2JV4VQ7C_cjs.toOffchainInputFeeParams(vtxo));
3862
+ const inputFee = estimator.evalOffchainInput(chunkEJOFL5WH_cjs.toOffchainInputFeeParams(vtxo));
3855
3863
  if (inputFee.satoshis >= vtxo.value) {
3856
3864
  continue;
3857
3865
  }
@@ -3877,7 +3885,7 @@ function deductOffchainOutputFee(subtotal, estimator, arkAddress) {
3877
3885
  }
3878
3886
  const outputFee = estimator.evalOffchainOutput({
3879
3887
  amount: subtotal,
3880
- script: base.hex.encode(chunk2JV4VQ7C_cjs.ArkAddress.decode(arkAddress).pkScript)
3888
+ script: base.hex.encode(chunkEJOFL5WH_cjs.ArkAddress.decode(arkAddress).pkScript)
3881
3889
  });
3882
3890
  return subtotal - BigInt(outputFee.satoshis);
3883
3891
  }
@@ -3895,10 +3903,10 @@ var DEFAULT_SETTLEMENT_CONFIG = {
3895
3903
  };
3896
3904
  function getRecoverableVtxos(vtxos, dustAmount, now) {
3897
3905
  return vtxos.filter((vtxo) => {
3898
- if (chunk2JV4VQ7C_cjs.canRecoverOnchain(vtxo, now)) {
3906
+ if (chunkEJOFL5WH_cjs.canRecoverOnchain(vtxo, now)) {
3899
3907
  return true;
3900
3908
  }
3901
- if (chunk2JV4VQ7C_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
3909
+ if (chunkEJOFL5WH_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
3902
3910
  return true;
3903
3911
  }
3904
3912
  return false;
@@ -3928,8 +3936,9 @@ function getRecoverableWithSubdust(vtxos, dustAmount, now) {
3928
3936
  };
3929
3937
  }
3930
3938
  function isVtxoExpiringSoon(vtxo, thresholdMs) {
3939
+ if (vtxo.isUnrolled) return false;
3931
3940
  const realThresholdMs = thresholdMs <= 100 ? DEFAULT_THRESHOLD_MS : thresholdMs;
3932
- const expiresAt = chunk2JV4VQ7C_cjs.normalizeVtxo(vtxo).expiresAt;
3941
+ const expiresAt = chunkEJOFL5WH_cjs.normalizeVtxo(vtxo).expiresAt;
3933
3942
  if (expiresAt === void 0) return false;
3934
3943
  const now = Date.now();
3935
3944
  const batchExpiry = expiresAt.getTime();
@@ -3938,7 +3947,9 @@ function isVtxoExpiringSoon(vtxo, thresholdMs) {
3938
3947
  }
3939
3948
  function getExpiringAndRecoverableVtxos(vtxos, thresholdMs, dustAmount, now) {
3940
3949
  return vtxos.filter(
3941
- (vtxo) => isVtxoExpiringSoon(vtxo, thresholdMs) || chunk2JV4VQ7C_cjs.canRecoverOnchain(vtxo, now) || isSubdust(vtxo, dustAmount)
3950
+ // The leading exclusion covers the `isSubdust` arm too, which is a value
3951
+ // property and would otherwise re-admit an exited coin on its own.
3952
+ (vtxo) => !vtxo.isUnrolled && (isVtxoExpiringSoon(vtxo, thresholdMs) || chunkEJOFL5WH_cjs.canRecoverOnchain(vtxo, now) || isSubdust(vtxo, dustAmount))
3942
3953
  );
3943
3954
  }
3944
3955
  function isMigrationCapable(wallet) {
@@ -4537,11 +4548,11 @@ var VtxoManager = class _VtxoManager {
4537
4548
  `Sweep not economical: output ${outputAmount} sats after ${fee} sats fee is below dust (${dustAmount} sats)`
4538
4549
  );
4539
4550
  }
4540
- const tx = new chunk2JV4VQ7C_cjs.Transaction();
4551
+ const tx = new chunkEJOFL5WH_cjs.Transaction();
4541
4552
  for (const utxo of expiredUtxos) {
4542
- const utxoScript = chunk2JV4VQ7C_cjs.VtxoScript.decode(utxo.tapTree);
4553
+ const utxoScript = chunkEJOFL5WH_cjs.VtxoScript.decode(utxo.tapTree);
4543
4554
  const utxoExitLeaf = utxoScript.leaves.find(
4544
- (leaf) => chunk2JV4VQ7C_cjs.CSVMultisigTapscript.isScriptValid(chunk2JV4VQ7C_cjs.scriptFromTapLeafScript(leaf)) === true
4555
+ (leaf) => chunkEJOFL5WH_cjs.CSVMultisigTapscript.isScriptValid(chunkEJOFL5WH_cjs.scriptFromTapLeafScript(leaf)) === true
4545
4556
  );
4546
4557
  if (!utxoExitLeaf) {
4547
4558
  throw new Error(
@@ -4556,7 +4567,7 @@ var VtxoManager = class _VtxoManager {
4556
4567
  amount: BigInt(utxo.value)
4557
4568
  },
4558
4569
  tapLeafScript: [utxoExitLeaf],
4559
- sequence: chunk2JV4VQ7C_cjs.getSequence(utxoExitLeaf)
4570
+ sequence: chunkEJOFL5WH_cjs.getSequence(utxoExitLeaf)
4560
4571
  });
4561
4572
  }
4562
4573
  tx.addOutputAddress(boardingAddress, outputAmount, this.getNetwork());
@@ -4799,8 +4810,8 @@ var VtxoManager = class _VtxoManager {
4799
4810
  const cls = classifyAgainstSignerSet(serverPubKey, signerSet, nowSeconds);
4800
4811
  if (cls.status === "CURRENT") continue;
4801
4812
  const live = vtxos.filter((v) => !v.isUnrolled);
4802
- const recoverable = live.filter((v) => v.isSwept && !chunk2JV4VQ7C_cjs.hasTerminalSpend(v));
4803
- const spendable = live.filter((v) => !chunk2JV4VQ7C_cjs.hasTerminalSpend(v) && !v.isSwept);
4813
+ const recoverable = live.filter((v) => v.isSwept && !chunkEJOFL5WH_cjs.hasTerminalSpend(v));
4814
+ const spendable = live.filter((v) => !chunkEJOFL5WH_cjs.hasTerminalSpend(v) && !v.isSwept);
4804
4815
  const value = spendable.reduce((sum, v) => sum + v.value, 0);
4805
4816
  let recoverableCount = 0;
4806
4817
  let recoverableValue = 0;
@@ -4813,7 +4824,7 @@ var VtxoManager = class _VtxoManager {
4813
4824
  awaitingSweepCount = spendable.length;
4814
4825
  awaitingSweepValue = value;
4815
4826
  for (const v of spendable) {
4816
- const exp = chunk2JV4VQ7C_cjs.toBatchExpiry(v);
4827
+ const exp = chunkEJOFL5WH_cjs.toBatchExpiry(v);
4817
4828
  if (exp !== void 0 && (nextSweepEta === void 0 || exp < nextSweepEta)) {
4818
4829
  nextSweepEta = exp;
4819
4830
  }
@@ -5074,7 +5085,7 @@ var VtxoManager = class _VtxoManager {
5074
5085
  /** Decodes the boarding tapscript exit path to extract the CSV timelock. */
5075
5086
  getBoardingTimelock() {
5076
5087
  const wallet = this.getSweepWallet();
5077
- const exitScript = chunk2JV4VQ7C_cjs.CSVMultisigTapscript.decode(
5088
+ const exitScript = chunkEJOFL5WH_cjs.CSVMultisigTapscript.decode(
5078
5089
  base.hex.decode(wallet.boardingTapscript.exitScript)
5079
5090
  );
5080
5091
  return exitScript.params.timelock;
@@ -5205,8 +5216,8 @@ var VtxoManager = class _VtxoManager {
5205
5216
  * or doesn't carry the metadata.
5206
5217
  */
5207
5218
  extractSpentOutpoint(error) {
5208
- const ark = chunk2JV4VQ7C_cjs.maybeArkError(error);
5209
- if (!chunk2JV4VQ7C_cjs.isArkError(ark, chunk2JV4VQ7C_cjs.ArkErrorName.VTXO_ALREADY_SPENT)) return void 0;
5219
+ const ark = chunkEJOFL5WH_cjs.maybeArkError(error);
5220
+ if (!chunkEJOFL5WH_cjs.isArkError(ark, chunkEJOFL5WH_cjs.ArkErrorName.VTXO_ALREADY_SPENT)) return void 0;
5210
5221
  const raw = ark.metadata?.vtxo_outpoint;
5211
5222
  if (typeof raw !== "string") return void 0;
5212
5223
  const [txid, voutStr] = raw.split(":");
@@ -5396,7 +5407,7 @@ var VtxoManager = class _VtxoManager {
5396
5407
  if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
5397
5408
  break;
5398
5409
  }
5399
- const inputFee = estimator.evalOffchainInput(chunk2JV4VQ7C_cjs.toOffchainInputFeeParams(v));
5410
+ const inputFee = estimator.evalOffchainInput(chunkEJOFL5WH_cjs.toOffchainInputFeeParams(v));
5400
5411
  if (inputFee.satoshis >= v.value) {
5401
5412
  continue;
5402
5413
  }
@@ -5416,7 +5427,7 @@ var VtxoManager = class _VtxoManager {
5416
5427
  const arkAddress = await this.wallet.getAddress();
5417
5428
  const outputFee = estimator.evalOffchainOutput({
5418
5429
  amount: totalAmount,
5419
- script: base.hex.encode(chunk2JV4VQ7C_cjs.ArkAddress.decode(arkAddress).pkScript)
5430
+ script: base.hex.encode(chunkEJOFL5WH_cjs.ArkAddress.decode(arkAddress).pkScript)
5420
5431
  });
5421
5432
  totalAmount -= BigInt(outputFee.satoshis);
5422
5433
  if (totalAmount < dustAmount) return;
@@ -5496,7 +5507,7 @@ var ArkNote = class _ArkNote {
5496
5507
  this.value = value;
5497
5508
  this.HRP = HRP;
5498
5509
  const preimageHash = utils_js.sha256(this.preimage);
5499
- this.vtxoScript = new chunk2JV4VQ7C_cjs.VtxoScript([noteTapscript(preimageHash)]);
5510
+ this.vtxoScript = new chunkEJOFL5WH_cjs.VtxoScript([noteTapscript(preimageHash)]);
5500
5511
  const leaf = this.vtxoScript.leaves[0];
5501
5512
  this.txid = base.hex.encode(new Uint8Array(preimageHash).reverse());
5502
5513
  this.tapTree = this.vtxoScript.encode();
@@ -5663,7 +5674,7 @@ var ArkadeCash = class _ArkadeCash {
5663
5674
  const privateKey = data.slice(1, 33);
5664
5675
  const serverPubKey = data.slice(33, 65);
5665
5676
  const sequence = new DataView(data.buffer, data.byteOffset + 65, 4).getUint32(0, false);
5666
- const csvTimelock = chunk2JV4VQ7C_cjs.sequenceToTimelock(sequence);
5677
+ const csvTimelock = chunkEJOFL5WH_cjs.sequenceToTimelock(sequence);
5667
5678
  return new _ArkadeCash(privateKey, serverPubKey, csvTimelock, decoded.prefix);
5668
5679
  }
5669
5680
  toString() {
@@ -5671,7 +5682,7 @@ var ArkadeCash = class _ArkadeCash {
5671
5682
  data[0] = _ArkadeCash.Version;
5672
5683
  data.set(this._privateKey, 1);
5673
5684
  data.set(this._serverPubKey, 33);
5674
- const sequence = chunk2JV4VQ7C_cjs.timelockToSequence(this.csvTimelock);
5685
+ const sequence = chunkEJOFL5WH_cjs.timelockToSequence(this.csvTimelock);
5675
5686
  new DataView(data.buffer, data.byteOffset + 65, 4).setUint32(0, sequence, false);
5676
5687
  const words = base.bech32m.toWords(data);
5677
5688
  return base.bech32m.encode(this.hrp, words, 1023);
@@ -5680,7 +5691,7 @@ var ArkadeCash = class _ArkadeCash {
5680
5691
  return SingleKey.fromPrivateKey(this._privateKey);
5681
5692
  }
5682
5693
  get vtxoScript() {
5683
- return new chunkOIZ2V2VD_cjs.DefaultVtxo.Script({
5694
+ return new chunk6YUACVX4_cjs.DefaultVtxo.Script({
5684
5695
  pubKey: this._publicKey,
5685
5696
  serverPubKey: this._serverPubKey,
5686
5697
  csvTimelock: this.csvTimelock
@@ -5941,7 +5952,7 @@ async function captureExitBranch(params) {
5941
5952
  const nonCommitment = ordered.filter((c) => chainTxTypeToChainedExit(c.type) !== 1 /* Commitment */).map((c) => c.txid);
5942
5953
  if (nonCommitment.length > 0) {
5943
5954
  for (const psbt of await resolver.getVirtualTxs(nonCommitment)) {
5944
- psbtByTxid.set(chunk2JV4VQ7C_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
5955
+ psbtByTxid.set(chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
5945
5956
  }
5946
5957
  }
5947
5958
  }
@@ -5984,10 +5995,10 @@ var IndexerExitDataSource = class {
5984
5995
  while (hasMore) {
5985
5996
  const { chain: page, page: meta } = await this.indexer.getVtxoChain(
5986
5997
  { txid: vtxo.txid, vout: vtxo.vout },
5987
- { pageIndex, pageSize: chunk2JV4VQ7C_cjs.DEFAULT_PAGE_SIZE }
5998
+ { pageIndex, pageSize: chunkEJOFL5WH_cjs.DEFAULT_PAGE_SIZE }
5988
5999
  );
5989
6000
  chain.push(...page);
5990
- hasMore = meta ? page.length === chunk2JV4VQ7C_cjs.DEFAULT_PAGE_SIZE : false;
6001
+ hasMore = meta ? page.length === chunkEJOFL5WH_cjs.DEFAULT_PAGE_SIZE : false;
5991
6002
  pageIndex++;
5992
6003
  }
5993
6004
  return chain;
@@ -5999,12 +6010,12 @@ var IndexerExitDataSource = class {
5999
6010
  while (hasMore) {
6000
6011
  const { txs, page } = await this.indexer.getVirtualTxs(txids, {
6001
6012
  pageIndex,
6002
- pageSize: chunk2JV4VQ7C_cjs.DEFAULT_PAGE_SIZE
6013
+ pageSize: chunkEJOFL5WH_cjs.DEFAULT_PAGE_SIZE
6003
6014
  });
6004
6015
  for (const psbt of txs) {
6005
- out.set(chunk2JV4VQ7C_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
6016
+ out.set(chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
6006
6017
  }
6007
- hasMore = page ? txs.length === chunk2JV4VQ7C_cjs.DEFAULT_PAGE_SIZE : false;
6018
+ hasMore = page ? txs.length === chunkEJOFL5WH_cjs.DEFAULT_PAGE_SIZE : false;
6008
6019
  pageIndex++;
6009
6020
  }
6010
6021
  return out;
@@ -6025,7 +6036,7 @@ function chainedTxTypeToChainTxType(t) {
6025
6036
  }
6026
6037
  }
6027
6038
  function psbtInputTxids(psbtBase64) {
6028
- const tx = chunk2JV4VQ7C_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
6039
+ const tx = chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
6029
6040
  const ids = [];
6030
6041
  for (let i = 0; i < tx.inputsLength; i++) {
6031
6042
  const txid = tx.getInput(i).txid;
@@ -6384,10 +6395,10 @@ async function resolveArkInfo(arkProvider, walletRepository) {
6384
6395
  try {
6385
6396
  info = await arkProvider.getInfo();
6386
6397
  } catch (err) {
6387
- if (!chunk2JV4VQ7C_cjs.isRetryableProviderError(err)) throw err;
6398
+ if (!chunkEJOFL5WH_cjs.isRetryableProviderError(err)) throw err;
6388
6399
  const snapshot = await loadArkInfoSnapshot(walletRepository);
6389
6400
  if (!snapshot) {
6390
- throw new chunk2JV4VQ7C_cjs.ProviderUnavailableError(
6401
+ throw new chunkEJOFL5WH_cjs.ProviderUnavailableError(
6391
6402
  "Arkade server info is unavailable and no cached snapshot exists",
6392
6403
  { cause: err }
6393
6404
  );
@@ -6470,6 +6481,13 @@ var TxTree = class {
6470
6481
  if (nbOfInputs !== 1) {
6471
6482
  throw new Error(`unexpected number of inputs: ${nbOfInputs}, expected 1`);
6472
6483
  }
6484
+ if (this.root.lockTime !== 0) {
6485
+ throw new Error(`unexpected locktime: ${this.root.lockTime}, expected 0`);
6486
+ }
6487
+ const sequence = this.root.getInput(0).sequence;
6488
+ if (sequence !== void 0 && sequence !== btcSigner.DEFAULT_SEQUENCE) {
6489
+ throw new Error(`unexpected sequence: ${sequence}, expected ${btcSigner.DEFAULT_SEQUENCE}`);
6490
+ }
6473
6491
  if (this.children.size > nbOfOutputs - 1) {
6474
6492
  throw new Error(
6475
6493
  `unexpected number of children: ${this.children.size}, expected maximum ${nbOfOutputs - 1}`
@@ -6770,7 +6788,7 @@ function collectArkTxidsNeedingCreatedAt(vtxos) {
6770
6788
  return [...txids];
6771
6789
  }
6772
6790
  async function buildTransactionHistory(vtxos, allBoardingTxs, commitmentsToIgnore, resolveTxCreatedAt) {
6773
- const fromOldestVtxo = vtxos.map(chunk2JV4VQ7C_cjs.normalizeVtxo).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
6791
+ const fromOldestVtxo = vtxos.map(chunkEJOFL5WH_cjs.normalizeVtxo).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
6774
6792
  const txidsNeedingCreatedAt = resolveTxCreatedAt ? collectArkTxidsNeedingCreatedAt(fromOldestVtxo) : [];
6775
6793
  const resolvedCreatedAt = resolveTxCreatedAt && txidsNeedingCreatedAt.length > 0 ? await resolveTxCreatedAt(txidsNeedingCreatedAt) : /* @__PURE__ */ new Map();
6776
6794
  const unmatchedSettledBoardingTxs = allBoardingTxs.filter(isSettledBoardingReceive).sort((a, b) => a.createdAt - b.createdAt);
@@ -6934,7 +6952,7 @@ var AssetManager = class extends ReadonlyAssetManager {
6934
6952
  const virtualCoins = await this.wallet.getSpendableVtxos({
6935
6953
  withRecoverable: false
6936
6954
  });
6937
- const controlAssetRef = params.controlAssetId ? chunkCO3KKSWM_cjs.AssetRef.fromId(chunkCO3KKSWM_cjs.AssetId.fromString(params.controlAssetId)) : null;
6955
+ const controlAssetRef = params.controlAssetId ? chunkPJR63FTK_cjs.AssetRef.fromId(chunkPJR63FTK_cjs.AssetId.fromString(params.controlAssetId)) : null;
6938
6956
  const coinSelection = selectVirtualCoins(virtualCoins, Number(this.wallet.dustAmount));
6939
6957
  let totalBtcSelected = 0n;
6940
6958
  const assetChanges = /* @__PURE__ */ new Map();
@@ -6947,8 +6965,8 @@ var AssetManager = class extends ReadonlyAssetManager {
6947
6965
  }
6948
6966
  }
6949
6967
  const groups = [];
6950
- const issuedAssetOutput = chunkCO3KKSWM_cjs.AssetOutput.create(0, params.amount);
6951
- const issuedAssetGroup = chunkCO3KKSWM_cjs.AssetGroup.create(
6968
+ const issuedAssetOutput = chunkPJR63FTK_cjs.AssetOutput.create(0, params.amount);
6969
+ const issuedAssetGroup = chunkPJR63FTK_cjs.AssetGroup.create(
6952
6970
  null,
6953
6971
  controlAssetRef,
6954
6972
  [],
@@ -6963,28 +6981,28 @@ var AssetManager = class extends ReadonlyAssetManager {
6963
6981
  for (const [inputIndex, assets] of assetInputs) {
6964
6982
  for (const asset of assets) {
6965
6983
  if (asset.assetId !== assetId) continue;
6966
- changeInputs.push(chunkCO3KKSWM_cjs.AssetInput.create(inputIndex, asset.amount));
6984
+ changeInputs.push(chunkPJR63FTK_cjs.AssetInput.create(inputIndex, asset.amount));
6967
6985
  }
6968
6986
  }
6969
6987
  groups.push(
6970
- chunkCO3KKSWM_cjs.AssetGroup.create(
6971
- chunkCO3KKSWM_cjs.AssetId.fromString(assetId),
6988
+ chunkPJR63FTK_cjs.AssetGroup.create(
6989
+ chunkPJR63FTK_cjs.AssetId.fromString(assetId),
6972
6990
  null,
6973
6991
  changeInputs,
6974
- [chunkCO3KKSWM_cjs.AssetOutput.create(0, amount)],
6992
+ [chunkPJR63FTK_cjs.AssetOutput.create(0, amount)],
6975
6993
  []
6976
6994
  )
6977
6995
  );
6978
6996
  }
6979
6997
  }
6980
6998
  const address = await this.wallet.getAddress();
6981
- const outputAddress = chunk2JV4VQ7C_cjs.ArkAddress.decode(address);
6999
+ const outputAddress = chunkEJOFL5WH_cjs.ArkAddress.decode(address);
6982
7000
  const outputs = [
6983
7001
  {
6984
7002
  script: outputAddress.pkScript,
6985
7003
  amount: BigInt(totalBtcSelected)
6986
7004
  },
6987
- Extension.create([chunkCO3KKSWM_cjs.Packet.create(groups)]).txOut()
7005
+ Extension.create([chunkPJR63FTK_cjs.Packet.create(groups)]).txOut()
6988
7006
  ];
6989
7007
  const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(
6990
7008
  coinSelection.inputs,
@@ -6992,7 +7010,7 @@ var AssetManager = class extends ReadonlyAssetManager {
6992
7010
  );
6993
7011
  return {
6994
7012
  arkTxId: arkTxid,
6995
- assetId: chunkCO3KKSWM_cjs.AssetId.create(arkTxid, 0).toString()
7013
+ assetId: chunkPJR63FTK_cjs.AssetId.create(arkTxid, 0).toString()
6996
7014
  };
6997
7015
  }
6998
7016
  /**
@@ -7064,16 +7082,16 @@ var AssetManager = class extends ReadonlyAssetManager {
7064
7082
  for (const [inputIndex, assets] of assetInputs) {
7065
7083
  for (const asset of assets) {
7066
7084
  if (asset.assetId !== params.assetId) continue;
7067
- reissueInputs.push(chunkCO3KKSWM_cjs.AssetInput.create(inputIndex, asset.amount));
7085
+ reissueInputs.push(chunkPJR63FTK_cjs.AssetInput.create(inputIndex, asset.amount));
7068
7086
  }
7069
7087
  }
7070
7088
  const totalAssetAmount = assetToReissueAmount + params.amount;
7071
- const reissueAssetIdObj = chunkCO3KKSWM_cjs.AssetId.fromString(params.assetId);
7072
- const reissueAssetGroup = chunkCO3KKSWM_cjs.AssetGroup.create(
7089
+ const reissueAssetIdObj = chunkPJR63FTK_cjs.AssetId.fromString(params.assetId);
7090
+ const reissueAssetGroup = chunkPJR63FTK_cjs.AssetGroup.create(
7073
7091
  reissueAssetIdObj,
7074
7092
  null,
7075
7093
  reissueInputs,
7076
- [chunkCO3KKSWM_cjs.AssetOutput.create(0, totalAssetAmount)],
7094
+ [chunkPJR63FTK_cjs.AssetOutput.create(0, totalAssetAmount)],
7077
7095
  []
7078
7096
  );
7079
7097
  const groups = [reissueAssetGroup];
@@ -7082,27 +7100,27 @@ var AssetManager = class extends ReadonlyAssetManager {
7082
7100
  for (const [inputIndex, assets] of assetInputs) {
7083
7101
  for (const asset of assets) {
7084
7102
  if (asset.assetId !== assetId) continue;
7085
- changeInputs.push(chunkCO3KKSWM_cjs.AssetInput.create(inputIndex, asset.amount));
7103
+ changeInputs.push(chunkPJR63FTK_cjs.AssetInput.create(inputIndex, asset.amount));
7086
7104
  }
7087
7105
  }
7088
7106
  groups.push(
7089
- chunkCO3KKSWM_cjs.AssetGroup.create(
7090
- chunkCO3KKSWM_cjs.AssetId.fromString(assetId),
7107
+ chunkPJR63FTK_cjs.AssetGroup.create(
7108
+ chunkPJR63FTK_cjs.AssetId.fromString(assetId),
7091
7109
  null,
7092
7110
  changeInputs,
7093
- [chunkCO3KKSWM_cjs.AssetOutput.create(0, amount)],
7111
+ [chunkPJR63FTK_cjs.AssetOutput.create(0, amount)],
7094
7112
  []
7095
7113
  )
7096
7114
  );
7097
7115
  }
7098
7116
  const address = await this.wallet.getAddress();
7099
- const outputAddress = chunk2JV4VQ7C_cjs.ArkAddress.decode(address);
7117
+ const outputAddress = chunkEJOFL5WH_cjs.ArkAddress.decode(address);
7100
7118
  const outputs = [
7101
7119
  {
7102
7120
  script: outputAddress.pkScript,
7103
7121
  amount: BigInt(totalBtcSelected)
7104
7122
  },
7105
- Extension.create([chunkCO3KKSWM_cjs.Packet.create(groups)]).txOut()
7123
+ Extension.create([chunkPJR63FTK_cjs.Packet.create(groups)]).txOut()
7106
7124
  ];
7107
7125
  const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
7108
7126
  return arkTxid;
@@ -7169,27 +7187,27 @@ var AssetManager = class extends ReadonlyAssetManager {
7169
7187
  for (const [inputIndex, assets] of assetInputs) {
7170
7188
  for (const asset of assets) {
7171
7189
  if (asset.assetId !== assetId) continue;
7172
- changeInputs.push(chunkCO3KKSWM_cjs.AssetInput.create(inputIndex, asset.amount));
7190
+ changeInputs.push(chunkPJR63FTK_cjs.AssetInput.create(inputIndex, asset.amount));
7173
7191
  }
7174
7192
  }
7175
7193
  groups.push(
7176
- chunkCO3KKSWM_cjs.AssetGroup.create(
7177
- chunkCO3KKSWM_cjs.AssetId.fromString(assetId),
7194
+ chunkPJR63FTK_cjs.AssetGroup.create(
7195
+ chunkPJR63FTK_cjs.AssetId.fromString(assetId),
7178
7196
  null,
7179
7197
  changeInputs,
7180
- amount > 0n ? [chunkCO3KKSWM_cjs.AssetOutput.create(0, amount)] : [],
7198
+ amount > 0n ? [chunkPJR63FTK_cjs.AssetOutput.create(0, amount)] : [],
7181
7199
  []
7182
7200
  )
7183
7201
  );
7184
7202
  }
7185
7203
  const address = await this.wallet.getAddress();
7186
- const outputAddress = chunk2JV4VQ7C_cjs.ArkAddress.decode(address);
7204
+ const outputAddress = chunkEJOFL5WH_cjs.ArkAddress.decode(address);
7187
7205
  const outputs = [
7188
7206
  {
7189
7207
  script: outputAddress.pkScript,
7190
7208
  amount: BigInt(totalBtcSelected)
7191
7209
  },
7192
- Extension.create([chunkCO3KKSWM_cjs.Packet.create(groups)]).txOut()
7210
+ Extension.create([chunkPJR63FTK_cjs.Packet.create(groups)]).txOut()
7193
7211
  ];
7194
7212
  const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
7195
7213
  return arkTxid;
@@ -7214,7 +7232,7 @@ function castMetadata(metadata) {
7214
7232
  } else {
7215
7233
  throw new Error("Invalid metadata value type");
7216
7234
  }
7217
- md.push(chunkCO3KKSWM_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
7235
+ md.push(chunkPJR63FTK_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
7218
7236
  }
7219
7237
  return md;
7220
7238
  }
@@ -7235,10 +7253,10 @@ var DelegateManagerImpl = class {
7235
7253
  if (vtxos.length === 0) {
7236
7254
  return { delegated: [], failed: [] };
7237
7255
  }
7238
- const destinationScript = chunk2JV4VQ7C_cjs.ArkAddress.decode(destination).pkScript;
7256
+ const destinationScript = chunkEJOFL5WH_cjs.ArkAddress.decode(destination).pkScript;
7239
7257
  const arkInfo = await this.arkInfoProvider.getInfo();
7240
7258
  const delegateInfo = await this.delegateProvider.getDelegateInfo();
7241
- const eligible = vtxos.map(chunk2JV4VQ7C_cjs.normalizeVtxo).filter(
7259
+ const eligible = vtxos.map(chunkEJOFL5WH_cjs.normalizeVtxo).filter(
7242
7260
  (v) => isAnnotated(v) && findDelegateTapLeaf(v, delegateInfo.pubkey) !== void 0
7243
7261
  );
7244
7262
  if (eligible.length === 0) {
@@ -7267,11 +7285,11 @@ var DelegateManagerImpl = class {
7267
7285
  const groupByExpiry = /* @__PURE__ */ new Map();
7268
7286
  let recoverableVtxos = [];
7269
7287
  for (const vtxo of eligible) {
7270
- if (chunk2JV4VQ7C_cjs.canRecoverOnchain(vtxo, now)) {
7288
+ if (chunkEJOFL5WH_cjs.canRecoverOnchain(vtxo, now)) {
7271
7289
  recoverableVtxos.push(vtxo);
7272
7290
  continue;
7273
7291
  }
7274
- const expiry = chunk2JV4VQ7C_cjs.toBatchExpiry(vtxo);
7292
+ const expiry = chunkEJOFL5WH_cjs.toBatchExpiry(vtxo);
7275
7293
  if (!expiry) continue;
7276
7294
  const dayKey = getDayTimestamp(expiry);
7277
7295
  groupByExpiry.set(dayKey, [...groupByExpiry.get(dayKey) ?? [], vtxo]);
@@ -7336,7 +7354,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
7336
7354
  }
7337
7355
  if (!delegateAt) {
7338
7356
  const now = { timestamp: /* @__PURE__ */ new Date() };
7339
- const expiryTimestamp = vtxos.filter((coin) => !chunk2JV4VQ7C_cjs.canRecoverOnchain(coin, now) && chunk2JV4VQ7C_cjs.toBatchExpiry(coin)).reduce((min, coin) => Math.min(min, chunk2JV4VQ7C_cjs.toBatchExpiry(coin)), Number.MAX_SAFE_INTEGER);
7357
+ const expiryTimestamp = vtxos.filter((coin) => !chunkEJOFL5WH_cjs.canRecoverOnchain(coin, now) && chunkEJOFL5WH_cjs.toBatchExpiry(coin)).reduce((min, coin) => Math.min(min, chunkEJOFL5WH_cjs.toBatchExpiry(coin)), Number.MAX_SAFE_INTEGER);
7340
7358
  if (!expiryTimestamp || expiryTimestamp === Number.MAX_SAFE_INTEGER) {
7341
7359
  delegateAt = new Date(Date.now() + 1 * 60 * 1e3);
7342
7360
  } else {
@@ -7365,7 +7383,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
7365
7383
  let amount = 0n;
7366
7384
  for (const coin of vtxos) {
7367
7385
  const inputFee = estimator.evalOffchainInput({
7368
- ...chunk2JV4VQ7C_cjs.toOffchainInputFeeParams(coin),
7386
+ ...chunkEJOFL5WH_cjs.toOffchainInputFeeParams(coin),
7369
7387
  type: "vtxo"
7370
7388
  });
7371
7389
  if (inputFee.value >= coin.value) {
@@ -7379,7 +7397,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
7379
7397
  const delegateFee = BigInt(Number(fee));
7380
7398
  if (delegateFee > 0n) {
7381
7399
  outputs.push({
7382
- script: chunk2JV4VQ7C_cjs.ArkAddress.decode(delegateAddress).pkScript,
7400
+ script: chunkEJOFL5WH_cjs.ArkAddress.decode(delegateAddress).pkScript,
7383
7401
  amount: delegateFee
7384
7402
  });
7385
7403
  }
@@ -7412,10 +7430,10 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
7412
7430
  destinationScript
7413
7431
  );
7414
7432
  const forfeitOutputScript = btcSigner.OutScript.encode(
7415
- btcSigner.Address(chunk2JV4VQ7C_cjs.getNetwork(network)).decode(forfeitAddress)
7433
+ btcSigner.Address(chunkEJOFL5WH_cjs.getNetwork(network)).decode(forfeitAddress)
7416
7434
  );
7417
7435
  const forfeits = await Promise.all(
7418
- vtxos.filter((v) => !chunk2JV4VQ7C_cjs.canRecoverOnchain(v, { timestamp: /* @__PURE__ */ new Date() })).map(async (coin) => {
7436
+ vtxos.filter((v) => !chunkEJOFL5WH_cjs.canRecoverOnchain(v, { timestamp: /* @__PURE__ */ new Date() })).map(async (coin) => {
7419
7437
  const forfeit = await makeDelegateForfeitTx(
7420
7438
  coin,
7421
7439
  dust,
@@ -7440,7 +7458,7 @@ async function makeDelegateForfeitTx(input, connectorAmount, delegatePubkey, for
7440
7458
  index: input.vout,
7441
7459
  witnessUtxo: {
7442
7460
  amount: BigInt(input.value),
7443
- script: chunk2JV4VQ7C_cjs.VtxoScript.decode(input.tapTree).pkScript
7461
+ script: chunkEJOFL5WH_cjs.VtxoScript.decode(input.tapTree).pkScript
7444
7462
  },
7445
7463
  sighashType: btcSigner.SigHash.ALL_ANYONECANPAY,
7446
7464
  tapLeafScript: [delegateTapLeaf]
@@ -7498,7 +7516,7 @@ async function makeSignedDelegateIntent(identity, coins, outputs, onchainOutputs
7498
7516
  expire_at: 0,
7499
7517
  cosigners_public_keys: cosignerPubKeys
7500
7518
  };
7501
- const proof = chunk2JV4VQ7C_cjs.Intent.create(message, coins, outputs);
7519
+ const proof = chunkEJOFL5WH_cjs.Intent.create(message, coins, outputs);
7502
7520
  const signedProof = await identity.sign(proof);
7503
7521
  return {
7504
7522
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -7516,10 +7534,10 @@ function getDayTimestamp(timestamp) {
7516
7534
  function findDelegateTapLeaf(vtxo, delegatePubkey) {
7517
7535
  if (!vtxo.tapTree) return void 0;
7518
7536
  const pk = delegatePubkey.length === 66 ? delegatePubkey.slice(2) : delegatePubkey;
7519
- const vtxoScript = chunk2JV4VQ7C_cjs.VtxoScript.decode(vtxo.tapTree);
7537
+ const vtxoScript = chunkEJOFL5WH_cjs.VtxoScript.decode(vtxo.tapTree);
7520
7538
  return vtxoScript.leaves.find((tapLeaf) => {
7521
- const arkTapscript = chunk2JV4VQ7C_cjs.decodeTapscript(chunk2JV4VQ7C_cjs.scriptFromTapLeafScript(tapLeaf));
7522
- if (!chunk2JV4VQ7C_cjs.MultisigTapscript.is(arkTapscript)) return false;
7539
+ const arkTapscript = chunkEJOFL5WH_cjs.decodeTapscript(chunkEJOFL5WH_cjs.scriptFromTapLeafScript(tapLeaf));
7540
+ if (!chunkEJOFL5WH_cjs.MultisigTapscript.is(arkTapscript)) return false;
7523
7541
  return arkTapscript.params.pubkeys.map(base.hex.encode).includes(pk);
7524
7542
  });
7525
7543
  }
@@ -7800,7 +7818,7 @@ function createManagedConnection(dbName, version, initDatabase2) {
7800
7818
  };
7801
7819
  }
7802
7820
  function scriptFromArkAddress(address) {
7803
- return base.hex.encode(chunk2JV4VQ7C_cjs.ArkAddress.decode(address).pkScript);
7821
+ return base.hex.encode(chunkEJOFL5WH_cjs.ArkAddress.decode(address).pkScript);
7804
7822
  }
7805
7823
 
7806
7824
  // src/repositories/indexedDB/schema.ts
@@ -8295,7 +8313,7 @@ function validateVtxosForScript(vtxos, script, context) {
8295
8313
  }
8296
8314
  async function getVtxosForContract(repo, contract) {
8297
8315
  const vtxos = repo.getVtxosForScript ? await repo.getVtxosForScript(contract.script) : filterVtxosForScript(await repo.getVtxos(contract.address), contract.script);
8298
- return vtxos.map(chunk2JV4VQ7C_cjs.normalizeVtxo);
8316
+ return vtxos.map(chunkEJOFL5WH_cjs.normalizeVtxo);
8299
8317
  }
8300
8318
  async function saveVtxosForContract(repo, contract, vtxos) {
8301
8319
  if (repo.saveVtxosForScript) {
@@ -8437,7 +8455,7 @@ function decodeArkContract(encoded) {
8437
8455
  }
8438
8456
  function contractFromArkContract(encoded, options = {}) {
8439
8457
  const parsed = decodeArkContract(encoded);
8440
- const handler = chunkOIZ2V2VD_cjs.contractHandlers.get(parsed.type);
8458
+ const handler = chunk6YUACVX4_cjs.contractHandlers.get(parsed.type);
8441
8459
  if (!handler) {
8442
8460
  throw new Error(`No handler registered for contract type '${parsed.type}'`);
8443
8461
  }
@@ -8451,9 +8469,9 @@ function contractFromArkContract(encoded, options = {}) {
8451
8469
  metadata: options.metadata
8452
8470
  };
8453
8471
  }
8454
- function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunk2JV4VQ7C_cjs.DEFAULT_NETWORK.hrp, options = {}) {
8472
+ function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunkEJOFL5WH_cjs.DEFAULT_NETWORK.hrp, options = {}) {
8455
8473
  const parsed = decodeArkContract(encoded);
8456
- const handler = chunkOIZ2V2VD_cjs.contractHandlers.getOrThrow(parsed.type);
8474
+ const handler = chunk6YUACVX4_cjs.contractHandlers.getOrThrow(parsed.type);
8457
8475
  const params = parsed.data;
8458
8476
  const vtxoScript = handler.createScript(params);
8459
8477
  return {
@@ -8707,9 +8725,9 @@ var ContractWatcher = class {
8707
8725
  this.connectionState = "connected";
8708
8726
  this.reconnectAttempts = 0;
8709
8727
  this.listenLoop().catch((e) => {
8710
- if (chunk2JV4VQ7C_cjs.isEventSourceError(e)) {
8728
+ if (chunkEJOFL5WH_cjs.isEventSourceError(e)) {
8711
8729
  console.debug("ContractWatcher subscription disconnected; reconnecting");
8712
- } else if (!chunk2JV4VQ7C_cjs.isEventSourceUnavailableError(e)) {
8730
+ } else if (!chunkEJOFL5WH_cjs.isEventSourceUnavailableError(e)) {
8713
8731
  console.error(e);
8714
8732
  }
8715
8733
  this.connectionState = "disconnected";
@@ -8721,7 +8739,7 @@ var ContractWatcher = class {
8721
8739
  this.scheduleReconnect();
8722
8740
  });
8723
8741
  } catch (error) {
8724
- if (!chunk2JV4VQ7C_cjs.isEventSourceUnavailableError(error)) {
8742
+ if (!chunkEJOFL5WH_cjs.isEventSourceUnavailableError(error)) {
8725
8743
  console.error("ContractWatcher connection failed:", error);
8726
8744
  }
8727
8745
  this.connectionState = "disconnected";
@@ -8747,7 +8765,7 @@ var ContractWatcher = class {
8747
8765
  * slower; what it loses is push latency.
8748
8766
  */
8749
8767
  reportEventSourceUnavailable(error) {
8750
- if (!chunk2JV4VQ7C_cjs.isEventSourceUnavailableError(error)) return false;
8768
+ if (!chunkEJOFL5WH_cjs.isEventSourceUnavailableError(error)) return false;
8751
8769
  if (!this.eventSourceReported) {
8752
8770
  this.eventSourceReported = true;
8753
8771
  console.warn(
@@ -8963,14 +8981,14 @@ var ContractWatcher = class {
8963
8981
  const timestamp = Date.now();
8964
8982
  if (update.newVtxos?.length) {
8965
8983
  this.processSubscriptionVtxos(
8966
- update.newVtxos.map(chunk2JV4VQ7C_cjs.normalizeVtxo),
8984
+ update.newVtxos.map(chunkEJOFL5WH_cjs.normalizeVtxo),
8967
8985
  "vtxo_received",
8968
8986
  timestamp
8969
8987
  );
8970
8988
  }
8971
8989
  if (update.spentVtxos?.length) {
8972
8990
  this.processSubscriptionVtxos(
8973
- update.spentVtxos.map(chunk2JV4VQ7C_cjs.normalizeVtxo),
8991
+ update.spentVtxos.map(chunkEJOFL5WH_cjs.normalizeVtxo),
8974
8992
  "vtxo_spent",
8975
8993
  timestamp
8976
8994
  );
@@ -9065,7 +9083,7 @@ var NON_TERMINAL_INTENT_STATES = ALL_INTENT_STATES.filter(
9065
9083
  (s) => !isTerminalIntentState(s)
9066
9084
  );
9067
9085
  function isConsumed(vtxo) {
9068
- return vtxo !== void 0 && chunk2JV4VQ7C_cjs.hasTerminalSpend(vtxo);
9086
+ return vtxo !== void 0 && chunkEJOFL5WH_cjs.hasTerminalSpend(vtxo);
9069
9087
  }
9070
9088
  async function classifyIntent(intent, vtxosByOutpoint, now) {
9071
9089
  if (isTerminalIntentState(intent.state)) return void 0;
@@ -9108,7 +9126,7 @@ async function reconcileIntents(deps) {
9108
9126
  let vtxosByOutpoint = /* @__PURE__ */ new Map();
9109
9127
  if (outpoints.length > 0) {
9110
9128
  try {
9111
- const { vtxos } = await chunk2JV4VQ7C_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
9129
+ const { vtxos } = await chunkEJOFL5WH_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
9112
9130
  vtxosByOutpoint = new Map(vtxos.map((v) => [outpointKey(v), v]));
9113
9131
  } catch (e) {
9114
9132
  console.error("reconcileIntents: failed to fetch input VTXO state", e);
@@ -9282,7 +9300,7 @@ var ContractManager = class _ContractManager {
9282
9300
  await this.reconcileWatched();
9283
9301
  this.markSyncOnline();
9284
9302
  } catch (err) {
9285
- if (!chunk2JV4VQ7C_cjs.isRetryableProviderError(err)) throw err;
9303
+ if (!chunkEJOFL5WH_cjs.isRetryableProviderError(err)) throw err;
9286
9304
  this.markSyncDegraded(err);
9287
9305
  }
9288
9306
  this.initialized = true;
@@ -9414,7 +9432,7 @@ var ContractManager = class _ContractManager {
9414
9432
  const from = Math.max(0, watermark - lookAhead.size);
9415
9433
  const to = watermark + lookAhead.size;
9416
9434
  const deps = lookAhead.candidateDeps();
9417
- const handlers = chunkOIZ2V2VD_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkOIZ2V2VD_cjs.contractHandlers.get(t)).filter(hasCandidates);
9435
+ const handlers = chunk6YUACVX4_cjs.contractHandlers.getRegisteredTypes().map((t) => chunk6YUACVX4_cjs.contractHandlers.get(t)).filter(hasCandidates);
9418
9436
  const band = /* @__PURE__ */ new Map();
9419
9437
  for (let index = from; index <= to; index++) {
9420
9438
  const descriptor = lookAhead.materialize(index);
@@ -9425,7 +9443,7 @@ var ContractManager = class _ContractManager {
9425
9443
  index,
9426
9444
  params: {
9427
9445
  ...candidate,
9428
- ...chunkOIZ2V2VD_cjs.speculativeReceiveMetadata(descriptor)
9446
+ ...chunk6YUACVX4_cjs.speculativeReceiveMetadata(descriptor)
9429
9447
  }
9430
9448
  });
9431
9449
  }
@@ -9487,7 +9505,7 @@ var ContractManager = class _ContractManager {
9487
9505
  });
9488
9506
  for (const entry of pending) entry.catchUpPending = false;
9489
9507
  } catch (err) {
9490
- if (!chunk2JV4VQ7C_cjs.isRetryableProviderError(err)) throw err;
9508
+ if (!chunkEJOFL5WH_cjs.isRetryableProviderError(err)) throw err;
9491
9509
  this.markSyncDegraded(err);
9492
9510
  }
9493
9511
  }
@@ -9537,7 +9555,7 @@ var ContractManager = class _ContractManager {
9537
9555
  await this.fetchContractVxosFromIndexer([contract]);
9538
9556
  this.markSyncOnline();
9539
9557
  } catch (err) {
9540
- if (!chunk2JV4VQ7C_cjs.isRetryableProviderError(err)) throw err;
9558
+ if (!chunkEJOFL5WH_cjs.isRetryableProviderError(err)) throw err;
9541
9559
  this.markSyncDegraded(err);
9542
9560
  }
9543
9561
  await this.watcher.addContract(contract);
@@ -9574,7 +9592,7 @@ var ContractManager = class _ContractManager {
9574
9592
  return result;
9575
9593
  }
9576
9594
  async upsertContractRow(params) {
9577
- const handler = chunkOIZ2V2VD_cjs.contractHandlers.get(params.type);
9595
+ const handler = chunk6YUACVX4_cjs.contractHandlers.get(params.type);
9578
9596
  if (!handler) {
9579
9597
  throw new Error(`No handler registered for contract type '${params.type}'`);
9580
9598
  }
@@ -9674,7 +9692,7 @@ var ContractManager = class _ContractManager {
9674
9692
  `scanContracts: batchSize must be a positive integer (got ${String(opts.batchSize)})`
9675
9693
  );
9676
9694
  }
9677
- const registered = chunkOIZ2V2VD_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkOIZ2V2VD_cjs.contractHandlers.get(t)).filter(isDiscoverable);
9695
+ const registered = chunk6YUACVX4_cjs.contractHandlers.getRegisteredTypes().map((t) => chunk6YUACVX4_cjs.contractHandlers.get(t)).filter(isDiscoverable);
9678
9696
  const discoverables = [
9679
9697
  ...registered.filter((h) => h.type === "boarding"),
9680
9698
  ...registered.filter((h) => h.type !== "boarding")
@@ -9809,7 +9827,7 @@ var ContractManager = class _ContractManager {
9809
9827
  await this.syncContracts({ contracts, pageSize });
9810
9828
  this.markSyncOnline();
9811
9829
  } catch (err) {
9812
- if (!chunk2JV4VQ7C_cjs.isRetryableProviderError(err)) throw err;
9830
+ if (!chunkEJOFL5WH_cjs.isRetryableProviderError(err)) throw err;
9813
9831
  this.markSyncDegraded(err);
9814
9832
  }
9815
9833
  const vtxos = await this.getVtxosForContracts(contracts);
@@ -9830,7 +9848,7 @@ var ContractManager = class _ContractManager {
9830
9848
  }
9831
9849
  const tapscriptCache = tapscripts ?? /* @__PURE__ */ new Map();
9832
9850
  return vtxos.map(
9833
- (vtxo) => extendVirtualCoinForContract(chunk2JV4VQ7C_cjs.normalizeVtxo(vtxo), byScript, tapscriptCache)
9851
+ (vtxo) => extendVirtualCoinForContract(chunkEJOFL5WH_cjs.normalizeVtxo(vtxo), byScript, tapscriptCache)
9834
9852
  );
9835
9853
  }
9836
9854
  /** @inheritdoc */
@@ -9874,14 +9892,14 @@ var ContractManager = class _ContractManager {
9874
9892
  const byScript = new Map(contracts.map((contract) => [contract.script, contract]));
9875
9893
  const asking = vtxos.filter((vtxo) => {
9876
9894
  const contract = byScript.get(vtxo.script);
9877
- return contract !== void 0 && chunkOIZ2V2VD_cjs.contractHandlers.get(contract.type)?.assertSpendableNow !== void 0;
9895
+ return contract !== void 0 && chunk6YUACVX4_cjs.contractHandlers.get(contract.type)?.assertSpendableNow !== void 0;
9878
9896
  });
9879
9897
  if (asking.length === 0) return refused;
9880
9898
  const tip = await this.currentChainTip();
9881
9899
  const walletKey = await walletPubKey?.();
9882
9900
  for (const vtxo of asking) {
9883
9901
  const contract = byScript.get(vtxo.script);
9884
- const handler = chunkOIZ2V2VD_cjs.contractHandlers.get(contract.type);
9902
+ const handler = chunk6YUACVX4_cjs.contractHandlers.get(contract.type);
9885
9903
  if (!handler?.assertSpendableNow) continue;
9886
9904
  const context = {
9887
9905
  collaborative: true,
@@ -9896,7 +9914,7 @@ var ContractManager = class _ContractManager {
9896
9914
  // the next handler to answer a CSV question would meet a
9897
9915
  // TypeError instead of a `false`. Carry the coin only when it
9898
9916
  // really is one.
9899
- vtxo: chunk2JV4VQ7C_cjs.isVirtualCoin(vtxo) && "status" in vtxo ? vtxo : void 0
9917
+ vtxo: chunkEJOFL5WH_cjs.isVirtualCoin(vtxo) && "status" in vtxo ? vtxo : void 0
9900
9918
  };
9901
9919
  try {
9902
9920
  await handler.assertSpendableNow(
@@ -10052,7 +10070,7 @@ var ContractManager = class _ContractManager {
10052
10070
  const { contractScript, collaborative = true, walletPubKey, vtxo } = options;
10053
10071
  const [contract] = await this.getContracts({ script: contractScript });
10054
10072
  if (!contract) return [];
10055
- const handler = chunkOIZ2V2VD_cjs.contractHandlers.get(contract.type);
10073
+ const handler = chunk6YUACVX4_cjs.contractHandlers.get(contract.type);
10056
10074
  if (!handler) return [];
10057
10075
  const script = handler.createScript(contract.params);
10058
10076
  const tip = await this.currentChainTip();
@@ -10080,7 +10098,7 @@ var ContractManager = class _ContractManager {
10080
10098
  const { contractScript, collaborative = true, walletPubKey } = options;
10081
10099
  const [contract] = await this.getContracts({ script: contractScript });
10082
10100
  if (!contract) return [];
10083
- const handler = chunkOIZ2V2VD_cjs.contractHandlers.get(contract.type);
10101
+ const handler = chunk6YUACVX4_cjs.contractHandlers.get(contract.type);
10084
10102
  if (!handler) return [];
10085
10103
  const script = handler.createScript(contract.params);
10086
10104
  const context = {
@@ -10136,7 +10154,7 @@ var ContractManager = class _ContractManager {
10136
10154
  }
10137
10155
  async refreshOutpoints(outpoints) {
10138
10156
  if (outpoints.length === 0) return;
10139
- const { vtxos } = await chunk2JV4VQ7C_cjs.getNormalizedVtxos(this.config.indexerProvider, {
10157
+ const { vtxos } = await chunkEJOFL5WH_cjs.getNormalizedVtxos(this.config.indexerProvider, {
10140
10158
  outpoints
10141
10159
  });
10142
10160
  if (vtxos.length === 0) return;
@@ -10215,7 +10233,7 @@ var ContractManager = class _ContractManager {
10215
10233
  break;
10216
10234
  }
10217
10235
  } catch (err) {
10218
- if (!chunk2JV4VQ7C_cjs.isRetryableProviderError(err)) throw err;
10236
+ if (!chunkEJOFL5WH_cjs.isRetryableProviderError(err)) throw err;
10219
10237
  this.markSyncDegraded(err);
10220
10238
  }
10221
10239
  this.emitEvent(event);
@@ -10294,7 +10312,7 @@ var ContractManager = class _ContractManager {
10294
10312
  */
10295
10313
  async reconcilePendingFrontier(contracts) {
10296
10314
  const scriptToContract = new Map(contracts.map((c) => [c.script, c]));
10297
- const vtxos = await chunk2JV4VQ7C_cjs.getAllNormalizedVtxos(
10315
+ const vtxos = await chunkEJOFL5WH_cjs.getAllNormalizedVtxos(
10298
10316
  this.config.indexerProvider,
10299
10317
  contracts.map((c) => c.script),
10300
10318
  { pendingOnly: true }
@@ -10377,7 +10395,7 @@ var ContractManager = class _ContractManager {
10377
10395
  }
10378
10396
  return result;
10379
10397
  }
10380
- async fetchContractVtxosBulk(contracts, pageSize = chunk2JV4VQ7C_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
10398
+ async fetchContractVtxosBulk(contracts, pageSize = chunkEJOFL5WH_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
10381
10399
  if (contracts.length === 0) {
10382
10400
  return { vtxosByScript: /* @__PURE__ */ new Map(), promoted: /* @__PURE__ */ new Map() };
10383
10401
  }
@@ -10393,7 +10411,7 @@ var ContractManager = class _ContractManager {
10393
10411
  before: syncWindow.before
10394
10412
  }
10395
10413
  } : {};
10396
- const vtxos = await chunk2JV4VQ7C_cjs.getAllNormalizedVtxos(
10414
+ const vtxos = await chunkEJOFL5WH_cjs.getAllNormalizedVtxos(
10397
10415
  this.config.indexerProvider,
10398
10416
  contracts.map((c) => c.script),
10399
10417
  { ...windowOpts, pageSize }
@@ -10538,7 +10556,7 @@ var deserializeTapLeaf = (t) => {
10538
10556
  const s = base.hex.decode(t.s);
10539
10557
  return [cb, s];
10540
10558
  };
10541
- var deserializeVtxo = (o) => chunk2JV4VQ7C_cjs.normalizeVtxo({
10559
+ var deserializeVtxo = (o) => chunkEJOFL5WH_cjs.normalizeVtxo({
10542
10560
  ...o,
10543
10561
  createdAt: new Date(o.createdAt),
10544
10562
  tapTree: base.hex.decode(o.tapTree),
@@ -11361,7 +11379,7 @@ var HDDescriptorProvider = class _HDDescriptorProvider {
11361
11379
  */
11362
11380
  materializeDescriptorAt(index) {
11363
11381
  const descriptor = this.identity.descriptor;
11364
- const network = chunkOIZ2V2VD_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
11382
+ const network = chunk6YUACVX4_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
11365
11383
  const expansion = descriptorsScure.expand({ descriptor, network, index });
11366
11384
  const keyInfo = expansion.expansionMap?.["@0"];
11367
11385
  if (!keyInfo?.keyExpression) {
@@ -11509,7 +11527,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
11509
11527
  const provider = await resolveDescriptorProvider(config, setup.walletRepository);
11510
11528
  if (!provider) return void 0;
11511
11529
  const allowSilentFallback = (config.walletMode ?? "auto") === "auto";
11512
- const expectedContractType = setup.offchainTapscript instanceof chunkOIZ2V2VD_cjs.DelegateVtxo.Script ? "delegate" : "default";
11530
+ const expectedContractType = setup.offchainTapscript instanceof chunk6YUACVX4_cjs.DelegateVtxo.Script ? "delegate" : "default";
11513
11531
  const factoryOpts = {
11514
11532
  walletRepository: setup.walletRepository,
11515
11533
  contractRepository: setup.contractRepository,
@@ -11710,7 +11728,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
11710
11728
  };
11711
11729
  function deriveLeafPubkey(descriptor) {
11712
11730
  try {
11713
- return chunkOIZ2V2VD_cjs.deriveDescriptorLeafPubKey(descriptor);
11731
+ return chunk6YUACVX4_cjs.deriveDescriptorLeafPubKey(descriptor);
11714
11732
  } catch (e) {
11715
11733
  throw new NonRangeableDescriptorError(
11716
11734
  "Cannot derive leaf pubkey: descriptor is not a materialized, parsable tr(...) shape.",
@@ -11722,7 +11740,7 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
11722
11740
  const pubKey = deriveLeafPubkey(descriptor);
11723
11741
  const tapscript = rebuildTapscript(current, pubKey);
11724
11742
  const serverPubKey = tapscript.options.serverPubKey;
11725
- const csvTimelock = chunk2JV4VQ7C_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
11743
+ const csvTimelock = chunkEJOFL5WH_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
11726
11744
  const base$1 = {
11727
11745
  script: base.hex.encode(tapscript.pkScript),
11728
11746
  address: tapscript.address(hrp, serverPubKey).encode(),
@@ -11733,11 +11751,11 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
11733
11751
  // index-0 key. Without it, spends produce unsigned PSBTs that the
11734
11752
  // server rejects with `INVALID_PSBT_INPUT (5): missing tapscript spend sig`.
11735
11753
  metadata: {
11736
- ...tagSource && { source: chunkOIZ2V2VD_cjs.WALLET_RECEIVE_SOURCE },
11754
+ ...tagSource && { source: chunk6YUACVX4_cjs.WALLET_RECEIVE_SOURCE },
11737
11755
  signingDescriptor: descriptor
11738
11756
  }
11739
11757
  };
11740
- const params = tapscript instanceof chunkOIZ2V2VD_cjs.DelegateVtxo.Script ? {
11758
+ const params = tapscript instanceof chunk6YUACVX4_cjs.DelegateVtxo.Script ? {
11741
11759
  ...base$1,
11742
11760
  type: "delegate",
11743
11761
  params: {
@@ -11758,10 +11776,10 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
11758
11776
  return { tapscript, params };
11759
11777
  }
11760
11778
  function rebuildTapscript(current, pubKey) {
11761
- if (current instanceof chunkOIZ2V2VD_cjs.DelegateVtxo.Script) {
11762
- return new chunkOIZ2V2VD_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
11779
+ if (current instanceof chunk6YUACVX4_cjs.DelegateVtxo.Script) {
11780
+ return new chunk6YUACVX4_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
11763
11781
  }
11764
- return new chunkOIZ2V2VD_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
11782
+ return new chunk6YUACVX4_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
11765
11783
  }
11766
11784
  async function pickActiveReceive(contractRepository, serverPubKey, expectedType) {
11767
11785
  const candidates = await contractRepository.getContracts({
@@ -11770,7 +11788,7 @@ async function pickActiveReceive(contractRepository, serverPubKey, expectedType)
11770
11788
  });
11771
11789
  const serverPubKeyHex = base.hex.encode(serverPubKey);
11772
11790
  const matching = candidates.filter(
11773
- (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkOIZ2V2VD_cjs.WALLET_RECEIVE_SOURCE
11791
+ (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunk6YUACVX4_cjs.WALLET_RECEIVE_SOURCE
11774
11792
  ).sort((a, b) => {
11775
11793
  if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
11776
11794
  return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
@@ -11826,7 +11844,7 @@ function computeOffchainBalance(vtxos, caps) {
11826
11844
  }
11827
11845
  };
11828
11846
  for (const vtxo of vtxos) {
11829
- if (chunk2JV4VQ7C_cjs.hasTerminalSpend(vtxo)) continue;
11847
+ if (chunkEJOFL5WH_cjs.hasTerminalSpend(vtxo)) continue;
11830
11848
  addAssets(owned, vtxo);
11831
11849
  if (vtxo.isUnrolled) {
11832
11850
  unrolled += vtxo.value;
@@ -11836,11 +11854,11 @@ function computeOffchainBalance(vtxos, caps) {
11836
11854
  pendingRecovery += vtxo.value;
11837
11855
  continue;
11838
11856
  }
11839
- if (chunk2JV4VQ7C_cjs.canRecoverOnchain(vtxo, now)) {
11857
+ if (chunkEJOFL5WH_cjs.canRecoverOnchain(vtxo, now)) {
11840
11858
  recoverable += vtxo.value;
11841
11859
  continue;
11842
11860
  }
11843
- if (!chunk2JV4VQ7C_cjs.canSpendOffchain(vtxo, now)) continue;
11861
+ if (!chunkEJOFL5WH_cjs.canSpendOffchain(vtxo, now)) continue;
11844
11862
  if (vtxo.isPreconfirmed) {
11845
11863
  preconfirmed += vtxo.value;
11846
11864
  } else {
@@ -12010,12 +12028,12 @@ var InputSignerRouter = class {
12010
12028
  };
12011
12029
 
12012
12030
  // src/wallet/wallet.ts
12013
- var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl || chunk2JV4VQ7C_cjs.DEFAULT_ARKADE_SERVER_URL;
12031
+ var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl || chunkEJOFL5WH_cjs.DEFAULT_ARKADE_SERVER_URL;
12014
12032
  function intentProofJobs(coins) {
12015
12033
  if (coins.length === 0) return [];
12016
12034
  const coinJobs = coins.map((coin, i) => ({
12017
12035
  index: i + 1,
12018
- lookupScript: chunk2JV4VQ7C_cjs.VtxoScript.decode(coin.tapTree).pkScript
12036
+ lookupScript: chunkEJOFL5WH_cjs.VtxoScript.decode(coin.tapTree).pkScript
12019
12037
  }));
12020
12038
  return [{ index: 0, lookupScript: coinJobs[0].lookupScript }, ...coinJobs];
12021
12039
  }
@@ -12047,7 +12065,7 @@ function dedupeTimelocks(timelocks) {
12047
12065
  const seen = /* @__PURE__ */ new Set();
12048
12066
  const deduped = [];
12049
12067
  for (const timelock of timelocks) {
12050
- const sequence = chunk2JV4VQ7C_cjs.timelockToSequence(timelock).toString();
12068
+ const sequence = chunkEJOFL5WH_cjs.timelockToSequence(timelock).toString();
12051
12069
  if (seen.has(sequence)) continue;
12052
12070
  seen.add(sequence);
12053
12071
  deduped.push(timelock);
@@ -12064,7 +12082,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
12064
12082
  state: "active"
12065
12083
  });
12066
12084
  const newest = candidates.filter(
12067
- (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkOIZ2V2VD_cjs.WALLET_RECEIVE_SOURCE
12085
+ (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunk6YUACVX4_cjs.WALLET_RECEIVE_SOURCE
12068
12086
  ).sort((a, b) => {
12069
12087
  if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
12070
12088
  return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
@@ -12072,7 +12090,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
12072
12090
  if (!newest?.params.pubKey) return baseline;
12073
12091
  try {
12074
12092
  const pubKey = base.hex.decode(newest.params.pubKey);
12075
- return new chunkOIZ2V2VD_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
12093
+ return new chunk6YUACVX4_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
12076
12094
  } catch (e) {
12077
12095
  console.warn("Skipping malformed boarding contract at boot", newest.script, e);
12078
12096
  return baseline;
@@ -12091,16 +12109,17 @@ function filterSnapshotVtxos(snapshot, filter, pendingSpendOutpoints) {
12091
12109
  if (vtxo.isUnrolled) {
12092
12110
  return !!f.withUnrolled;
12093
12111
  }
12094
- if (chunk2JV4VQ7C_cjs.hasTerminalSpend(vtxo)) {
12112
+ if (chunkEJOFL5WH_cjs.hasTerminalSpend(vtxo)) {
12095
12113
  return false;
12096
12114
  }
12097
- if (!f.withRecoverable && chunk2JV4VQ7C_cjs.canRecoverOnchain(vtxo, now)) {
12115
+ if (!f.withRecoverable && chunkEJOFL5WH_cjs.canRecoverOnchain(vtxo, now)) {
12098
12116
  return false;
12099
12117
  }
12100
12118
  return true;
12101
12119
  });
12102
12120
  }
12103
12121
  var PENDING_RECOVERY_REASON = "is past its operator signer's rotation cutoff \u2014 the operator will not co-sign it until it recovers";
12122
+ var UNROLLED_REASON = "was unilaterally exited and lives onchain \u2014 `Unroll.completeUnroll` is the only spend that reaches it";
12104
12123
  function omittedOutpoints(before, after) {
12105
12124
  if (before.length === after.length) return /* @__PURE__ */ new Set();
12106
12125
  const kept = new Set(after.map((vtxo) => `${vtxo.txid}:${vtxo.vout}`));
@@ -12433,7 +12452,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12433
12452
  */
12434
12453
  static async setupWalletConfig(config, pubKey) {
12435
12454
  const arkadeServerUrl = getArkadeServerUrl(config);
12436
- const arkProvider = config.arkProvider || new chunk2JV4VQ7C_cjs.RestArkProvider(arkadeServerUrl);
12455
+ const arkProvider = config.arkProvider || new chunkEJOFL5WH_cjs.RestArkProvider(arkadeServerUrl);
12437
12456
  let indexerProvider = config.indexerProvider;
12438
12457
  if (!indexerProvider) {
12439
12458
  let indexerUrl = config.indexerUrl;
@@ -12450,7 +12469,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12450
12469
  indexerUrl = arkadeServerUrl;
12451
12470
  }
12452
12471
  }
12453
- indexerProvider = new chunkCO3KKSWM_cjs.RestIndexerProvider(indexerUrl);
12472
+ indexerProvider = new chunkPJR63FTK_cjs.RestIndexerProvider(indexerUrl);
12454
12473
  }
12455
12474
  const walletRepository = config.storage?.walletRepository ?? new IndexedDBWalletRepository();
12456
12475
  const contractRepository = config.storage?.contractRepository ?? new IndexedDBContractRepository();
@@ -12459,7 +12478,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12459
12478
  source: serverInfoSource,
12460
12479
  lastOnlineAt: serverInfoLastOnlineAt
12461
12480
  } = await resolveArkInfo(arkProvider, walletRepository);
12462
- const network = chunk2JV4VQ7C_cjs.getNetwork(info.network);
12481
+ const network = chunkEJOFL5WH_cjs.getNetwork(info.network);
12463
12482
  if ("descriptor" in config.identity) {
12464
12483
  const descriptor = config.identity.descriptor;
12465
12484
  const identityIsMainnet = !descriptor.includes("tpub");
@@ -12499,18 +12518,18 @@ var ReadonlyWallet = class _ReadonlyWallet {
12499
12518
  value: info.boardingExitDelay,
12500
12519
  type: info.boardingExitDelay < 512n ? "blocks" : "seconds"
12501
12520
  };
12502
- const serverPubKey = chunkOIZ2V2VD_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
12503
- const delegatePubKey = config.delegateProvider ? await config.delegateProvider.getDelegateInfo().then((info2) => chunkOIZ2V2VD_cjs.toXOnly(base.hex.decode(info2.pubkey), "delegate key")).catch(() => void 0) : config.delegatorProvider ? await config.delegatorProvider.getDelegateInfo().then((info2) => chunkOIZ2V2VD_cjs.toXOnly(base.hex.decode(info2.pubkey), "delegate key")).catch(() => void 0) : void 0;
12521
+ const serverPubKey = chunk6YUACVX4_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
12522
+ const delegatePubKey = config.delegateProvider ? await config.delegateProvider.getDelegateInfo().then((info2) => chunk6YUACVX4_cjs.toXOnly(base.hex.decode(info2.pubkey), "delegate key")).catch(() => void 0) : config.delegatorProvider ? await config.delegatorProvider.getDelegateInfo().then((info2) => chunk6YUACVX4_cjs.toXOnly(base.hex.decode(info2.pubkey), "delegate key")).catch(() => void 0) : void 0;
12504
12523
  const offchainOptions = {
12505
12524
  pubKey,
12506
12525
  serverPubKey,
12507
12526
  csvTimelock: exitTimelock
12508
12527
  };
12509
- const offchainTapscript = !delegatePubKey ? new chunkOIZ2V2VD_cjs.DefaultVtxo.Script(offchainOptions) : new chunkOIZ2V2VD_cjs.DelegateVtxo.Script({ ...offchainOptions, delegatePubKey });
12510
- const boardingTapscript = chunkOIZ2V2VD_cjs.BoardingContractHandler.createScript({
12528
+ const offchainTapscript = !delegatePubKey ? new chunk6YUACVX4_cjs.DefaultVtxo.Script(offchainOptions) : new chunk6YUACVX4_cjs.DelegateVtxo.Script({ ...offchainOptions, delegatePubKey });
12529
+ const boardingTapscript = chunk6YUACVX4_cjs.BoardingContractHandler.createScript({
12511
12530
  pubKey: base.hex.encode(pubKey),
12512
12531
  serverPubKey: base.hex.encode(serverPubKey),
12513
- csvTimelock: chunk2JV4VQ7C_cjs.timelockToSequence(boardingTimelock).toString()
12532
+ csvTimelock: chunkEJOFL5WH_cjs.timelockToSequence(boardingTimelock).toString()
12514
12533
  });
12515
12534
  return {
12516
12535
  arkProvider,
@@ -12673,6 +12692,13 @@ var ReadonlyWallet = class _ReadonlyWallet {
12673
12692
  "is locked by an in-flight settlement intent"
12674
12693
  )
12675
12694
  ]);
12695
+ if (!filter?.withUnrolled) {
12696
+ logExcludedVtxos(
12697
+ "getSpendableVtxos",
12698
+ snapshot.flatMap((contract) => contract.vtxos).filter((vtxo) => vtxo.isUnrolled && !chunkEJOFL5WH_cjs.hasTerminalSpend(vtxo)),
12699
+ [() => UNROLLED_REASON]
12700
+ );
12701
+ }
12676
12702
  return unlocked;
12677
12703
  }
12678
12704
  /**
@@ -12812,7 +12838,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12812
12838
  const response = await contractManager.getContractsWithVtxos();
12813
12839
  const allVtxos = response.flatMap((_) => _.vtxos);
12814
12840
  const { boardingTxs, commitmentsToIgnore } = await this.getBoardingTxs();
12815
- const resolveTxCreatedAt = (txids) => chunk2JV4VQ7C_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
12841
+ const resolveTxCreatedAt = (txids) => chunkEJOFL5WH_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
12816
12842
  return buildTransactionHistory(
12817
12843
  allVtxos,
12818
12844
  boardingTxs,
@@ -12906,7 +12932,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12906
12932
  },
12907
12933
  isUnrolled: true,
12908
12934
  ...boardingFacts,
12909
- virtualStatus: chunk2JV4VQ7C_cjs.toVirtualStatus(boardingFacts),
12935
+ virtualStatus: chunkEJOFL5WH_cjs.toVirtualStatus(boardingFacts),
12910
12936
  spentBy: "",
12911
12937
  createdAt: tx.status.confirmed ? new Date(tx.status.block_time * 1e3) : /* @__PURE__ */ new Date(0),
12912
12938
  script: scriptHex
@@ -12962,9 +12988,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
12962
12988
  async getBoardingTapscripts(allowedSigners) {
12963
12989
  const byScript = /* @__PURE__ */ new Map();
12964
12990
  const add = (s) => byScript.set(base.hex.encode(s.pkScript), s);
12965
- const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunkOIZ2V2VD_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
12991
+ const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunk6YUACVX4_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
12966
12992
  add(
12967
- new chunkOIZ2V2VD_cjs.DefaultVtxo.Script({
12993
+ new chunk6YUACVX4_cjs.DefaultVtxo.Script({
12968
12994
  pubKey: await this.identity.xOnlyPublicKey(),
12969
12995
  serverPubKey: this.boardingTapscript.options.serverPubKey,
12970
12996
  csvTimelock: boardingCsv
@@ -12979,7 +13005,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12979
13005
  for (const c of boardingContracts) {
12980
13006
  if (!allowed.has(toXOnlySignerHex(c.params.serverPubKey))) continue;
12981
13007
  try {
12982
- add(chunkOIZ2V2VD_cjs.BoardingContractHandler.createScript(c.params));
13008
+ add(chunk6YUACVX4_cjs.BoardingContractHandler.createScript(c.params));
12983
13009
  } catch (e) {
12984
13010
  console.warn("Skipping malformed boarding contract", c.script, e);
12985
13011
  }
@@ -13017,7 +13043,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13017
13043
  // Per-row CSV delay decoded from THIS tapscript's exit leaf —
13018
13044
  // not the wallet's current boarding timelock, which a signer
13019
13045
  // rotation may have changed.
13020
- csvTimelock: chunk2JV4VQ7C_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
13046
+ csvTimelock: chunkEJOFL5WH_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
13021
13047
  coins: utxos
13022
13048
  });
13023
13049
  }
@@ -13150,7 +13176,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13150
13176
  /** Fetch Arkade transaction ids that are still pending final settlement. */
13151
13177
  async fetchPendingTxs() {
13152
13178
  const scripts = await this.getWalletScripts();
13153
- const vtxos = await chunk2JV4VQ7C_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
13179
+ const vtxos = await chunkEJOFL5WH_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
13154
13180
  return vtxos.filter(
13155
13181
  (vtxo) => (vtxo.isSpent || vtxo.isPreconfirmed && !vtxo.isSwept) && vtxo.arkTxId !== void 0
13156
13182
  ).map((_) => _.arkTxId);
@@ -13181,7 +13207,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13181
13207
  });
13182
13208
  for (const contract of contracts) {
13183
13209
  if (map.has(contract.script)) continue;
13184
- const handler = chunkOIZ2V2VD_cjs.contractHandlers.get(contract.type);
13210
+ const handler = chunk6YUACVX4_cjs.contractHandlers.get(contract.type);
13185
13211
  if (handler) {
13186
13212
  const script = handler.createScript(contract.params);
13187
13213
  map.set(contract.script, script);
@@ -13293,7 +13319,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13293
13319
  }
13294
13320
  });
13295
13321
  const baselinePubkey = await this.identity.xOnlyPublicKey();
13296
- const delegatePubKey = this.offchainTapscript instanceof chunkOIZ2V2VD_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
13322
+ const delegatePubKey = this.offchainTapscript instanceof chunk6YUACVX4_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
13297
13323
  const baselineSigners = [
13298
13324
  this.offchainTapscript.options.serverPubKey,
13299
13325
  ...[...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h))
@@ -13301,8 +13327,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
13301
13327
  const seenBaselineScripts = /* @__PURE__ */ new Set();
13302
13328
  for (const serverPubKey of baselineSigners) {
13303
13329
  for (const csvTimelock of this.walletContractTimelocks) {
13304
- const csvTimelockStr = chunk2JV4VQ7C_cjs.timelockToSequence(csvTimelock).toString();
13305
- const defaultScript = new chunkOIZ2V2VD_cjs.DefaultVtxo.Script({
13330
+ const csvTimelockStr = chunkEJOFL5WH_cjs.timelockToSequence(csvTimelock).toString();
13331
+ const defaultScript = new chunk6YUACVX4_cjs.DefaultVtxo.Script({
13306
13332
  pubKey: baselinePubkey,
13307
13333
  serverPubKey,
13308
13334
  csvTimelock
@@ -13323,7 +13349,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13323
13349
  });
13324
13350
  }
13325
13351
  if (delegatePubKey) {
13326
- const delegateScript = new chunkOIZ2V2VD_cjs.DelegateVtxo.Script({
13352
+ const delegateScript = new chunk6YUACVX4_cjs.DelegateVtxo.Script({
13327
13353
  pubKey: baselinePubkey,
13328
13354
  serverPubKey,
13329
13355
  delegatePubKey,
@@ -13347,9 +13373,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
13347
13373
  }
13348
13374
  }
13349
13375
  }
13350
- const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunkOIZ2V2VD_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13376
+ const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunk6YUACVX4_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13351
13377
  for (const serverPubKey of baselineSigners) {
13352
- const baselineBoarding = new chunkOIZ2V2VD_cjs.DefaultVtxo.Script({
13378
+ const baselineBoarding = new chunk6YUACVX4_cjs.DefaultVtxo.Script({
13353
13379
  pubKey: baselinePubkey,
13354
13380
  serverPubKey,
13355
13381
  csvTimelock: boardingCsvTimelock
@@ -13362,7 +13388,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13362
13388
  params: {
13363
13389
  pubKey: base.hex.encode(baselineBoarding.options.pubKey),
13364
13390
  serverPubKey: base.hex.encode(serverPubKey),
13365
- csvTimelock: chunk2JV4VQ7C_cjs.timelockToSequence(boardingCsvTimelock).toString()
13391
+ csvTimelock: chunkEJOFL5WH_cjs.timelockToSequence(boardingCsvTimelock).toString()
13366
13392
  },
13367
13393
  script: boardingScriptHex,
13368
13394
  address: baselineBoarding.address(this.network.hrp, serverPubKey).encode(),
@@ -13562,7 +13588,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13562
13588
  serverPubKey: this.offchainTapscript.options.serverPubKey,
13563
13589
  deprecatedSignerPubKeys: [...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h)),
13564
13590
  csvTimelocks: this.walletContractTimelocks,
13565
- delegatePubKey: this.offchainTapscript instanceof chunkOIZ2V2VD_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
13591
+ delegatePubKey: this.offchainTapscript instanceof chunk6YUACVX4_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
13566
13592
  };
13567
13593
  }
13568
13594
  _signerRouter;
@@ -13807,7 +13833,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13807
13833
  const [row] = await manager.getContracts({ script: base.hex.encode(display.pkScript) });
13808
13834
  const persisted = row?.metadata?.signingDescriptor;
13809
13835
  if (typeof persisted === "string") return persisted;
13810
- return chunkOIZ2V2VD_cjs.identityDescriptor(this.identity);
13836
+ return chunk6YUACVX4_cjs.identityDescriptor(this.identity);
13811
13837
  }
13812
13838
  /**
13813
13839
  * Build, persist and shape one address of `type` owned by `descriptor` —
@@ -13823,7 +13849,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13823
13849
  async mintAddress(manager, type, descriptor, tagSource, allocated) {
13824
13850
  if (type === "boarding") {
13825
13851
  const built2 = this.buildBoardingContract(
13826
- chunkOIZ2V2VD_cjs.deriveDescriptorLeafPubKey(descriptor),
13852
+ chunk6YUACVX4_cjs.deriveDescriptorLeafPubKey(descriptor),
13827
13853
  descriptor,
13828
13854
  tagSource
13829
13855
  );
@@ -13868,11 +13894,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13868
13894
  * {@link buildReceiveContract}.
13869
13895
  */
13870
13896
  buildBoardingContract(pubKey, descriptor, tagSource) {
13871
- const tapscript = new chunkOIZ2V2VD_cjs.DefaultVtxo.Script({
13897
+ const tapscript = new chunk6YUACVX4_cjs.DefaultVtxo.Script({
13872
13898
  ...this._boardingTapscript.options,
13873
13899
  pubKey
13874
13900
  });
13875
- const csvTimelock = tapscript.options.csvTimelock ?? chunkOIZ2V2VD_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13901
+ const csvTimelock = tapscript.options.csvTimelock ?? chunk6YUACVX4_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13876
13902
  return {
13877
13903
  tapscript,
13878
13904
  params: {
@@ -13880,13 +13906,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13880
13906
  params: {
13881
13907
  pubKey: base.hex.encode(pubKey),
13882
13908
  serverPubKey: base.hex.encode(tapscript.options.serverPubKey),
13883
- csvTimelock: chunk2JV4VQ7C_cjs.timelockToSequence(csvTimelock).toString()
13909
+ csvTimelock: chunkEJOFL5WH_cjs.timelockToSequence(csvTimelock).toString()
13884
13910
  },
13885
13911
  script: base.hex.encode(tapscript.pkScript),
13886
13912
  address: tapscript.address(this.network.hrp, this.arkServerPublicKey).encode(),
13887
13913
  state: "active",
13888
13914
  metadata: {
13889
- ...tagSource && { source: chunkOIZ2V2VD_cjs.WALLET_RECEIVE_SOURCE },
13915
+ ...tagSource && { source: chunk6YUACVX4_cjs.WALLET_RECEIVE_SOURCE },
13890
13916
  signingDescriptor: descriptor
13891
13917
  }
13892
13918
  }
@@ -13915,7 +13941,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13915
13941
  if (this._descriptorProvider instanceof HDDescriptorProvider) {
13916
13942
  return (await this.getContractManager()).getNextSigningDescriptor();
13917
13943
  }
13918
- return chunkOIZ2V2VD_cjs.identityDescriptor(this.identity);
13944
+ return chunk6YUACVX4_cjs.identityDescriptor(this.identity);
13919
13945
  }
13920
13946
  /**
13921
13947
  * @see HDAllocationCapable.advanceSigningDescriptorWatermark
@@ -14011,7 +14037,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14011
14037
  * the stable public API.
14012
14038
  */
14013
14039
  async rotateServerSigner(newServerPubKey, checkpointTapscript) {
14014
- const xonly = chunkOIZ2V2VD_cjs.toXOnly(newServerPubKey, "ark signer key");
14040
+ const xonly = chunk6YUACVX4_cjs.toXOnly(newServerPubKey, "ark signer key");
14015
14041
  const newServerUnrollScript = assertValidServerUnrollScript(
14016
14042
  checkpointTapscript,
14017
14043
  resolveCheckpointExitDelayPolicy(this.network, this.checkpointExitDelayPolicy)
@@ -14040,21 +14066,21 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14040
14066
  const [currentBoardingRow] = await manager.getContracts({
14041
14067
  script: currentBoardingScript
14042
14068
  });
14043
- const newOffchain = this.offchainTapscript instanceof chunkOIZ2V2VD_cjs.DelegateVtxo.Script ? new chunkOIZ2V2VD_cjs.DelegateVtxo.Script({
14069
+ const newOffchain = this.offchainTapscript instanceof chunk6YUACVX4_cjs.DelegateVtxo.Script ? new chunk6YUACVX4_cjs.DelegateVtxo.Script({
14044
14070
  ...this.offchainTapscript.options,
14045
14071
  serverPubKey: xonly
14046
- }) : new chunkOIZ2V2VD_cjs.DefaultVtxo.Script({
14072
+ }) : new chunk6YUACVX4_cjs.DefaultVtxo.Script({
14047
14073
  ...this.offchainTapscript.options,
14048
14074
  serverPubKey: xonly
14049
14075
  });
14050
- const newBoarding = new chunkOIZ2V2VD_cjs.DefaultVtxo.Script({
14076
+ const newBoarding = new chunk6YUACVX4_cjs.DefaultVtxo.Script({
14051
14077
  ...this._boardingTapscript.options,
14052
14078
  serverPubKey: xonly
14053
14079
  });
14054
- const offchainCsv = chunk2JV4VQ7C_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
14080
+ const offchainCsv = chunkEJOFL5WH_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
14055
14081
  const newOffchainScript = base.hex.encode(newOffchain.pkScript);
14056
14082
  const newOffchainAddress = newOffchain.address(this.network.hrp, xonly).encode();
14057
- if (newOffchain instanceof chunkOIZ2V2VD_cjs.DelegateVtxo.Script) {
14083
+ if (newOffchain instanceof chunk6YUACVX4_cjs.DelegateVtxo.Script) {
14058
14084
  await manager.createContract({
14059
14085
  type: "delegate",
14060
14086
  params: {
@@ -14082,13 +14108,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14082
14108
  metadata: currentOffchainRow?.metadata
14083
14109
  });
14084
14110
  }
14085
- const boardingCsv = newBoarding.options.csvTimelock ?? chunkOIZ2V2VD_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
14111
+ const boardingCsv = newBoarding.options.csvTimelock ?? chunk6YUACVX4_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
14086
14112
  await manager.createContract({
14087
14113
  type: "boarding",
14088
14114
  params: {
14089
14115
  pubKey: base.hex.encode(newBoarding.options.pubKey),
14090
14116
  serverPubKey: base.hex.encode(xonly),
14091
- csvTimelock: chunk2JV4VQ7C_cjs.timelockToSequence(boardingCsv).toString()
14117
+ csvTimelock: chunkEJOFL5WH_cjs.timelockToSequence(boardingCsv).toString()
14092
14118
  },
14093
14119
  script: base.hex.encode(newBoarding.pkScript),
14094
14120
  address: newBoarding.address(this.network.hrp, xonly).encode(),
@@ -14121,14 +14147,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14121
14147
  _restoreInFlight;
14122
14148
  _addPendingSpends(inputs) {
14123
14149
  for (const input of inputs) {
14124
- if (chunk2JV4VQ7C_cjs.isVirtualCoin(input)) {
14150
+ if (chunkEJOFL5WH_cjs.isVirtualCoin(input)) {
14125
14151
  this._pendingSpendOutpoints.add(`${input.txid}:${input.vout}`);
14126
14152
  }
14127
14153
  }
14128
14154
  }
14129
14155
  _removePendingSpends(inputs) {
14130
14156
  for (const input of inputs) {
14131
- if (chunk2JV4VQ7C_cjs.isVirtualCoin(input)) {
14157
+ if (chunkEJOFL5WH_cjs.isVirtualCoin(input)) {
14132
14158
  this._pendingSpendOutpoints.delete(`${input.txid}:${input.vout}`);
14133
14159
  }
14134
14160
  }
@@ -14186,13 +14212,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14186
14212
  const manager = await this.getContractManager();
14187
14213
  const provider = this._descriptorProvider;
14188
14214
  const hd = provider instanceof HDDescriptorProvider;
14189
- const staticDescriptor = hd ? void 0 : await chunkOIZ2V2VD_cjs.identityDescriptor(this.identity);
14215
+ const staticDescriptor = hd ? void 0 : await chunk6YUACVX4_cjs.identityDescriptor(this.identity);
14190
14216
  const materialize = (index) => hd ? provider.materializeDescriptorAt(index) : staticDescriptor;
14191
- const delegatePubKey = this.offchainTapscript instanceof chunkOIZ2V2VD_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
14217
+ const delegatePubKey = this.offchainTapscript instanceof chunk6YUACVX4_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
14192
14218
  const arkInfo = await this.arkProvider.getInfo();
14193
- const currentSignerPubKey = chunkOIZ2V2VD_cjs.toXOnly(base.hex.decode(arkInfo.signerPubkey), "ark signer key");
14219
+ const currentSignerPubKey = chunk6YUACVX4_cjs.toXOnly(base.hex.decode(arkInfo.signerPubkey), "ark signer key");
14194
14220
  const deprecatedSignerPubKeys = arkInfo.deprecatedSigners.map(
14195
- (s) => chunkOIZ2V2VD_cjs.toXOnly(base.hex.decode(s.pubkey), "deprecated signer key")
14221
+ (s) => chunk6YUACVX4_cjs.toXOnly(base.hex.decode(s.pubkey), "deprecated signer key")
14196
14222
  );
14197
14223
  const deps = {
14198
14224
  indexerProvider: this.indexerProvider,
@@ -14207,7 +14233,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14207
14233
  csvTimelocks: this.walletContractTimelocks,
14208
14234
  // Boarding-exit CSV so the boarding handler can build its
14209
14235
  // candidate script (distinct from the unilateral-exit matrix).
14210
- boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunkOIZ2V2VD_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
14236
+ boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunk6YUACVX4_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
14211
14237
  delegatePubKey
14212
14238
  };
14213
14239
  const result = await manager.scanContracts({
@@ -14321,7 +14347,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14321
14347
  throw new Error("Invalid configured public key");
14322
14348
  }
14323
14349
  const setup = await ReadonlyWallet.setupWalletConfig(config, pubkey);
14324
- const forfeitPubkey = chunkOIZ2V2VD_cjs.toXOnly(base.hex.decode(setup.info.forfeitPubkey), "forfeit key");
14350
+ const forfeitPubkey = chunk6YUACVX4_cjs.toXOnly(base.hex.decode(setup.info.forfeitPubkey), "forfeit key");
14325
14351
  const forfeitAddress = btcSigner.Address(setup.network).decode(setup.info.forfeitAddress);
14326
14352
  const forfeitOutputScript = btcSigner.OutScript.encode(forfeitAddress);
14327
14353
  const checkpointExitDelayOverrides = {
@@ -14470,7 +14496,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14470
14496
  inputs: params.selectedVtxos,
14471
14497
  changeAmount: BigInt(changeAmount)
14472
14498
  };
14473
- const outputAddress = chunk2JV4VQ7C_cjs.ArkAddress.decode(params.address);
14499
+ const outputAddress = chunkEJOFL5WH_cjs.ArkAddress.decode(params.address);
14474
14500
  assertRecipientArkAddress(
14475
14501
  params.address,
14476
14502
  outputAddress,
@@ -14536,13 +14562,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14536
14562
  void this.logUngatedInputs("settle({ inputs })", params.inputs);
14537
14563
  }
14538
14564
  const offchainAddress = await this.getAddress();
14539
- const offchainPkScript = chunk2JV4VQ7C_cjs.ArkAddress.decode(offchainAddress).pkScript;
14565
+ const offchainPkScript = chunkEJOFL5WH_cjs.ArkAddress.decode(offchainAddress).pkScript;
14540
14566
  const offchainOutputScript = base.hex.encode(offchainPkScript);
14541
14567
  if (!params) {
14542
14568
  const { fees, vtxoMaxAmount } = await this.arkProvider.getInfo();
14543
14569
  const estimator = new Estimator(fees.intentFee);
14544
14570
  let amount = 0;
14545
- const exitScript = chunk2JV4VQ7C_cjs.CSVMultisigTapscript.decode(
14571
+ const exitScript = chunkEJOFL5WH_cjs.CSVMultisigTapscript.decode(
14546
14572
  base.hex.decode(this.boardingTapscript.exitScript)
14547
14573
  );
14548
14574
  const boardingTimelock = exitScript.params.timelock;
@@ -14571,7 +14597,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14571
14597
  if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
14572
14598
  break;
14573
14599
  }
14574
- const inputFee = estimator.evalOffchainInput(chunk2JV4VQ7C_cjs.toOffchainInputFeeParams(vtxo));
14600
+ const inputFee = estimator.evalOffchainInput(chunkEJOFL5WH_cjs.toOffchainInputFeeParams(vtxo));
14575
14601
  if (inputFee.satoshis >= vtxo.value) {
14576
14602
  continue;
14577
14603
  }
@@ -14618,7 +14644,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14618
14644
  let script;
14619
14645
  let arkAddress;
14620
14646
  try {
14621
- arkAddress = chunk2JV4VQ7C_cjs.ArkAddress.decode(output.address);
14647
+ arkAddress = chunkEJOFL5WH_cjs.ArkAddress.decode(output.address);
14622
14648
  } catch {
14623
14649
  arkAddress = void 0;
14624
14650
  }
@@ -14708,7 +14734,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14708
14734
  const abortController = new AbortController();
14709
14735
  let stream;
14710
14736
  let committedTxid;
14711
- const settleInputVtxos = params.inputs.filter(chunk2JV4VQ7C_cjs.isVirtualCoin);
14737
+ const settleInputVtxos = params.inputs.filter(chunkEJOFL5WH_cjs.isVirtualCoin);
14712
14738
  const contractManager = await this.getContractManager();
14713
14739
  await contractManager.assertAnnotatable(settleInputVtxos);
14714
14740
  await contractManager.assertSpendableNow?.(
@@ -14820,7 +14846,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14820
14846
  async maybeRotateBoardingAfterBoard(inputs) {
14821
14847
  if (!this._descriptorProvider) return;
14822
14848
  const consumedBoarding = inputs.some(
14823
- (input) => typeof input !== "string" && !chunk2JV4VQ7C_cjs.isVirtualCoin(input)
14849
+ (input) => typeof input !== "string" && !chunkEJOFL5WH_cjs.isVirtualCoin(input)
14824
14850
  );
14825
14851
  if (!consumedBoarding) return;
14826
14852
  try {
@@ -14844,7 +14870,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14844
14870
  let connectorIndex = 0;
14845
14871
  const connectorsLeaves = connectorsGraph?.leaves() || [];
14846
14872
  for (const input of inputs) {
14847
- if (!chunk2JV4VQ7C_cjs.isVirtualCoin(input)) {
14873
+ if (!chunkEJOFL5WH_cjs.isVirtualCoin(input)) {
14848
14874
  for (let i = 0; i < settlementPsbt.inputsLength; i++) {
14849
14875
  const settlementInput = settlementPsbt.getInput(i);
14850
14876
  if (!settlementInput.txid || settlementInput.index === void 0) {
@@ -14875,7 +14901,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14875
14901
  }
14876
14902
  continue;
14877
14903
  }
14878
- if (chunk2JV4VQ7C_cjs.canRecoverOnchain(input, { timestamp: /* @__PURE__ */ new Date() }) || isSubdust({ value: input.value }, this.dustAmount)) {
14904
+ if (chunkEJOFL5WH_cjs.canRecoverOnchain(input, { timestamp: /* @__PURE__ */ new Date() }) || isSubdust({ value: input.value }, this.dustAmount)) {
14879
14905
  continue;
14880
14906
  }
14881
14907
  if (connectorsLeaves.length === 0) {
@@ -14903,7 +14929,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14903
14929
  index: input.vout,
14904
14930
  witnessUtxo: {
14905
14931
  amount: BigInt(input.value),
14906
- script: chunk2JV4VQ7C_cjs.VtxoScript.decode(input.tapTree).pkScript
14932
+ script: chunkEJOFL5WH_cjs.VtxoScript.decode(input.tapTree).pkScript
14907
14933
  },
14908
14934
  sighashType: btcSigner.SigHash.DEFAULT,
14909
14935
  tapLeafScript: [input.forfeitTapLeafScript]
@@ -14922,7 +14948,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14922
14948
  forfeitTx = await this._signerRouter.sign(forfeitTx, [
14923
14949
  {
14924
14950
  index: 0,
14925
- lookupScript: chunk2JV4VQ7C_cjs.VtxoScript.decode(input.tapTree).pkScript
14951
+ lookupScript: chunkEJOFL5WH_cjs.VtxoScript.decode(input.tapTree).pkScript
14926
14952
  }
14927
14953
  ]);
14928
14954
  signedForfeits.push(base.base64.encode(forfeitTx.toPSBT()));
@@ -14980,7 +15006,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14980
15006
  resolveBatchExpiryPolicy(this.network, this.batchExpiryPolicy)
14981
15007
  );
14982
15008
  await this.arkProvider.confirmRegistration(intentId);
14983
- const sweepTapscript = chunk2JV4VQ7C_cjs.CSVMultisigTapscript.encode({
15009
+ const sweepTapscript = chunkEJOFL5WH_cjs.CSVMultisigTapscript.encode({
14984
15010
  timelock,
14985
15011
  pubkeys: [this.forfeitPubkey]
14986
15012
  }).script;
@@ -14995,10 +15021,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14995
15021
  throw new Error("Sweep tap tree root not set");
14996
15022
  }
14997
15023
  const xOnlyPublicKeys = event.cosignersPublicKeys.map(
14998
- (k) => base.hex.encode(chunkOIZ2V2VD_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
15024
+ (k) => base.hex.encode(chunk6YUACVX4_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
14999
15025
  );
15000
15026
  const signerPublicKey = await session.getPublicKey();
15001
- const xonlySignerPublicKey = chunkOIZ2V2VD_cjs.toXOnly(signerPublicKey, "signer key");
15027
+ const xonlySignerPublicKey = chunk6YUACVX4_cjs.toXOnly(signerPublicKey, "signer key");
15002
15028
  if (!xOnlyPublicKeys.includes(base.hex.encode(xonlySignerPublicKey))) {
15003
15029
  return { skip: true };
15004
15030
  }
@@ -15088,9 +15114,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15088
15114
  ...existing ?? {},
15089
15115
  intentTxId,
15090
15116
  registerProof: intent.proof,
15091
- registerProofMessage: chunk2JV4VQ7C_cjs.Intent.encodeMessage(intent.message),
15117
+ registerProofMessage: chunkEJOFL5WH_cjs.Intent.encodeMessage(intent.message),
15092
15118
  deleteProof: deleteIntent.proof,
15093
- deleteProofMessage: chunk2JV4VQ7C_cjs.Intent.encodeMessage(deleteIntent.message),
15119
+ deleteProofMessage: chunkEJOFL5WH_cjs.Intent.encodeMessage(deleteIntent.message),
15094
15120
  intentVtxos: inputs.map((i) => ({
15095
15121
  txid: i.txid,
15096
15122
  vout: i.vout
@@ -15122,7 +15148,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15122
15148
  try {
15123
15149
  return await this.arkProvider.registerIntent(intent);
15124
15150
  } catch (error) {
15125
- if (error instanceof chunk2JV4VQ7C_cjs.ArkError && error.code === 0 && error.message.includes("duplicated input")) {
15151
+ if (error instanceof chunkEJOFL5WH_cjs.ArkError && error.code === 0 && error.message.includes("duplicated input")) {
15126
15152
  const deleteIntent = await this.makeDeleteIntentSignature(inputs);
15127
15153
  await this.arkProvider.deleteIntent(deleteIntent);
15128
15154
  return this.arkProvider.registerIntent(intent);
@@ -15138,7 +15164,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15138
15164
  expire_at: 0,
15139
15165
  cosigners_public_keys: cosignerPubKeys
15140
15166
  };
15141
- const proof = chunk2JV4VQ7C_cjs.Intent.create(message, coins, outputs);
15167
+ const proof = chunkEJOFL5WH_cjs.Intent.create(message, coins, outputs);
15142
15168
  const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
15143
15169
  return {
15144
15170
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -15150,7 +15176,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15150
15176
  type: "delete",
15151
15177
  expire_at: 0
15152
15178
  };
15153
- const proof = chunk2JV4VQ7C_cjs.Intent.create(message, coins, []);
15179
+ const proof = chunkEJOFL5WH_cjs.Intent.create(message, coins, []);
15154
15180
  const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
15155
15181
  return {
15156
15182
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -15162,7 +15188,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15162
15188
  type: "get-pending-tx",
15163
15189
  expire_at: 0
15164
15190
  };
15165
- const proof = chunk2JV4VQ7C_cjs.Intent.create(message, coins, []);
15191
+ const proof = chunkEJOFL5WH_cjs.Intent.create(message, coins, []);
15166
15192
  const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
15167
15193
  return {
15168
15194
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -15183,7 +15209,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15183
15209
  if (!vtxos || vtxos.length === 0) {
15184
15210
  const scriptMap = await this.getScriptMap();
15185
15211
  const allExtended = [];
15186
- const fetchedVtxos = await chunk2JV4VQ7C_cjs.getAllNormalizedVtxos(this.indexerProvider, [
15212
+ const fetchedVtxos = await chunkEJOFL5WH_cjs.getAllNormalizedVtxos(this.indexerProvider, [
15187
15213
  ...scriptMap.keys()
15188
15214
  ]);
15189
15215
  for (const vtxo of fetchedVtxos) {
@@ -15225,9 +15251,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15225
15251
  seen.add(pendingTx.arkTxid);
15226
15252
  batchPending.push(pendingTx.arkTxid);
15227
15253
  try {
15228
- const checkpointTxs = pendingTx.signedCheckpointTxs.map(
15229
- (c) => btcSigner.Transaction.fromPSBT(base.base64.decode(c))
15230
- );
15254
+ const checkpointTxs = pendingTx.signedCheckpointTxs.map((c) => {
15255
+ const tx = btcSigner.Transaction.fromPSBT(base.base64.decode(c));
15256
+ chunkEJOFL5WH_cjs.assertAllowedSighashTypes(tx);
15257
+ return tx;
15258
+ });
15231
15259
  assertCheckpointsMatchInputs(
15232
15260
  checkpointTxs,
15233
15261
  checkpointInputs,
@@ -15297,11 +15325,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15297
15325
  * against the current key alone would leave it pending forever.
15298
15326
  */
15299
15327
  checkpointUnrollCandidates(info) {
15300
- const current = chunk2JV4VQ7C_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
15328
+ const current = chunkEJOFL5WH_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
15301
15329
  const candidates = [this._serverUnrollScript, current];
15302
15330
  for (const deprecated of signerSetFromInfo(info).deprecated.keys()) {
15303
15331
  candidates.push(
15304
- chunk2JV4VQ7C_cjs.CSVMultisigTapscript.encode({
15332
+ chunkEJOFL5WH_cjs.CSVMultisigTapscript.encode({
15305
15333
  ...current.params,
15306
15334
  pubkeys: [base.hex.decode(deprecated)]
15307
15335
  })
@@ -15392,10 +15420,12 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15392
15420
  if (vtxos.length === 0) {
15393
15421
  throw new Error("No VTXOs found for this arkadeCash");
15394
15422
  }
15395
- const myPkScript = chunk2JV4VQ7C_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
15423
+ const myPkScript = chunkEJOFL5WH_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
15396
15424
  let { spendable, unclaimed } = this.classifyCashVtxos(vtxos);
15397
15425
  let swept = 0;
15398
- const drainable = vtxos.filter((vtxo) => !isSubdust(vtxo, this.dustAmount));
15426
+ const drainable = vtxos.filter(
15427
+ (vtxo) => !isSubdust(vtxo, this.dustAmount) && !vtxo.isUnrolled
15428
+ );
15399
15429
  if (drainable.length > 0) {
15400
15430
  let drained = { count: 0, swept: 0, claimed: /* @__PURE__ */ new Set() };
15401
15431
  try {
@@ -15466,7 +15496,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15466
15496
  const spendable = [];
15467
15497
  const unclaimed = [];
15468
15498
  for (const vtxo of vtxos) {
15469
- if (chunk2JV4VQ7C_cjs.hasTerminalSpend(vtxo)) {
15499
+ if (chunkEJOFL5WH_cjs.hasTerminalSpend(vtxo)) {
15470
15500
  unclaimed.push(cashReport(vtxo, "already-spent"));
15471
15501
  } else if (vtxo.isUnrolled) {
15472
15502
  unclaimed.push(cashReport(vtxo, "exited"));
@@ -15488,7 +15518,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15488
15518
  const all = [];
15489
15519
  const seen = /* @__PURE__ */ new Set();
15490
15520
  for (let pageIndex = 0; ; pageIndex++) {
15491
- const { vtxos, page } = await chunk2JV4VQ7C_cjs.getNormalizedVtxos(this.indexerProvider, {
15521
+ const { vtxos, page } = await chunkEJOFL5WH_cjs.getNormalizedVtxos(this.indexerProvider, {
15492
15522
  scripts,
15493
15523
  pageIndex,
15494
15524
  pageSize
@@ -15535,7 +15565,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15535
15565
  for (let i = 0; i < inputs.length; i += MAX_INPUTS_PER_INTENT) {
15536
15566
  const batch = inputs.slice(i, i + MAX_INPUTS_PER_INTENT);
15537
15567
  const message = { type: "get-pending-tx", expire_at: 0 };
15538
- const proof = chunk2JV4VQ7C_cjs.Intent.create(message, batch, []);
15568
+ const proof = chunkEJOFL5WH_cjs.Intent.create(message, batch, []);
15539
15569
  const signedProof = await identity.sign(
15540
15570
  proof,
15541
15571
  Array.from({ length: batch.length + 1 }, (_, j) => j)
@@ -15555,9 +15585,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15555
15585
  const unrollCandidates = this.checkpointUnrollCandidates(await this.arkProvider.getInfo());
15556
15586
  for (const pendingTx of pendingTxs) {
15557
15587
  try {
15558
- const checkpointTxs = pendingTx.signedCheckpointTxs.map(
15559
- (checkpoint) => btcSigner.Transaction.fromPSBT(base.base64.decode(checkpoint))
15560
- );
15588
+ const checkpointTxs = pendingTx.signedCheckpointTxs.map((checkpoint) => {
15589
+ const tx = btcSigner.Transaction.fromPSBT(base.base64.decode(checkpoint));
15590
+ chunkEJOFL5WH_cjs.assertAllowedSighashTypes(tx);
15591
+ return tx;
15592
+ });
15561
15593
  assertCheckpointsMatchInputs(
15562
15594
  checkpointTxs,
15563
15595
  inputs.map((input) => ({
@@ -15754,7 +15786,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15754
15786
  script: recipient.script,
15755
15787
  amount: BigInt(recipient.amount),
15756
15788
  // Already checked against the recipient address in `validateRecipients`.
15757
- ...recipient.tapTree ? { tapTree: chunk2JV4VQ7C_cjs.TapTreeCoder.decode(recipient.tapTree) } : {}
15789
+ ...recipient.tapTree ? { tapTree: chunkEJOFL5WH_cjs.TapTreeCoder.decode(recipient.tapTree) } : {}
15758
15790
  }));
15759
15791
  const totalBtcOutput = outputs.reduce((sum, o) => sum + Number(o.amount), 0);
15760
15792
  let changeAmount = totalBtcSelected - totalBtcOutput;
@@ -15898,10 +15930,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15898
15930
  const serverPubKey = this.arkServerPublicKey;
15899
15931
  const serverUnrollScript = this.serverUnrollScript;
15900
15932
  const arkAddress = offchainTapscript.address(this.network.hrp, serverPubKey);
15901
- const normalizedInputs = inputs.map(chunk2JV4VQ7C_cjs.normalizeVtxo);
15902
- const at = now ?? await chunk2JV4VQ7C_cjs.resolveTimeHeight(this.onchainProvider);
15933
+ const normalizedInputs = inputs.map(chunkEJOFL5WH_cjs.normalizeVtxo);
15934
+ const at = now ?? await chunkEJOFL5WH_cjs.resolveTimeHeight(this.onchainProvider);
15903
15935
  for (const input of normalizedInputs) {
15904
- if (!chunk2JV4VQ7C_cjs.canSpendOffchain(input, at)) {
15936
+ if (!chunkEJOFL5WH_cjs.canSpendOffchain(input, at)) {
15905
15937
  throw new Error(
15906
15938
  `sendSelectedVtxosToSelf: input ${input.txid}:${input.vout} is not cooperatively spendable`
15907
15939
  );
@@ -15971,7 +16003,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15971
16003
  );
15972
16004
  const arkTxJobs = inputs.map((input, index) => ({
15973
16005
  index,
15974
- lookupScript: chunk2JV4VQ7C_cjs.VtxoScript.decode(input.tapTree).pkScript
16006
+ lookupScript: chunkEJOFL5WH_cjs.VtxoScript.decode(input.tapTree).pkScript
15975
16007
  }));
15976
16008
  const identity = this.identity;
15977
16009
  const signer = {
@@ -16057,14 +16089,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16057
16089
  const spentBy = checkpointIdByOutpoint.get(`${vtxo.txid}:${vtxo.vout}`);
16058
16090
  spentVtxos.push({
16059
16091
  ...spentFacts,
16060
- virtualStatus: chunk2JV4VQ7C_cjs.toVirtualStatus(spentFacts),
16092
+ virtualStatus: chunkEJOFL5WH_cjs.toVirtualStatus(spentFacts),
16061
16093
  ...spentBy ? { spentBy } : {},
16062
16094
  arkTxId: arkTxid
16063
16095
  });
16064
16096
  for (const id of vtxo.commitmentTxIds) {
16065
16097
  commitmentTxIds.add(id);
16066
16098
  }
16067
- const vtxoExpiry = chunk2JV4VQ7C_cjs.toBatchExpiry(vtxo);
16099
+ const vtxoExpiry = chunkEJOFL5WH_cjs.toBatchExpiry(vtxo);
16068
16100
  if (vtxoExpiry) {
16069
16101
  batchExpiry = Math.min(batchExpiry, vtxoExpiry);
16070
16102
  }
@@ -16077,7 +16109,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16077
16109
  isSwept: false,
16078
16110
  isPreconfirmed: true,
16079
16111
  commitmentTxIds: Array.from(commitmentTxIds),
16080
- ...chunk2JV4VQ7C_cjs.parseLegacyExpiry(batchExpiry)
16112
+ ...chunkEJOFL5WH_cjs.parseLegacyExpiry(batchExpiry)
16081
16113
  };
16082
16114
  changeVtxo = {
16083
16115
  txid: arkTxid,
@@ -16089,7 +16121,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16089
16121
  tapTree: offchainTapscript.encode(),
16090
16122
  value: Number(changeAmount),
16091
16123
  ...changeFacts,
16092
- virtualStatus: chunk2JV4VQ7C_cjs.toVirtualStatus(changeFacts),
16124
+ virtualStatus: chunkEJOFL5WH_cjs.toVirtualStatus(changeFacts),
16093
16125
  spentBy: "",
16094
16126
  status: {
16095
16127
  confirmed: false
@@ -16158,12 +16190,12 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16158
16190
  const spentVtxos = [];
16159
16191
  const inputArkTxIds = /* @__PURE__ */ new Set();
16160
16192
  const boardingRemovalsByAddress = /* @__PURE__ */ new Map();
16161
- const vtxoInputs = inputs.filter(chunk2JV4VQ7C_cjs.isVirtualCoin);
16193
+ const vtxoInputs = inputs.filter(chunkEJOFL5WH_cjs.isVirtualCoin);
16162
16194
  const cm = await this.getContractManager();
16163
16195
  const annotatedVtxos = await cm.annotateVtxos(vtxoInputs);
16164
16196
  const annotatedByKey = new Map(annotatedVtxos.map((v) => [`${v.txid}:${v.vout}`, v]));
16165
16197
  for (const input of inputs) {
16166
- if (chunk2JV4VQ7C_cjs.isVirtualCoin(input)) {
16198
+ if (chunkEJOFL5WH_cjs.isVirtualCoin(input)) {
16167
16199
  const outpoint = `${input.txid}:${input.vout}`;
16168
16200
  const vtxo = annotatedByKey.get(outpoint);
16169
16201
  if (!vtxo) {
@@ -16175,13 +16207,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16175
16207
  const settledFacts = { ...vtxo, isSpent: true };
16176
16208
  spentVtxos.push({
16177
16209
  ...settledFacts,
16178
- virtualStatus: chunk2JV4VQ7C_cjs.toVirtualStatus(settledFacts),
16210
+ virtualStatus: chunkEJOFL5WH_cjs.toVirtualStatus(settledFacts),
16179
16211
  settledBy: commitmentTxid
16180
16212
  });
16181
16213
  } else {
16182
16214
  let sourceAddress;
16183
16215
  try {
16184
- sourceAddress = chunk2JV4VQ7C_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
16216
+ sourceAddress = chunkEJOFL5WH_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
16185
16217
  this.network
16186
16218
  );
16187
16219
  } catch {
@@ -16239,9 +16271,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16239
16271
  }
16240
16272
  };
16241
16273
  function selectVirtualCoins(coins, targetAmount) {
16242
- const sortedCoins = coins.map(chunk2JV4VQ7C_cjs.normalizeVtxo).sort((a, b) => {
16243
- const expiryA = chunk2JV4VQ7C_cjs.toBatchExpiry(a) || Number.MAX_SAFE_INTEGER;
16244
- const expiryB = chunk2JV4VQ7C_cjs.toBatchExpiry(b) || Number.MAX_SAFE_INTEGER;
16274
+ const sortedCoins = coins.map(chunkEJOFL5WH_cjs.normalizeVtxo).sort((a, b) => {
16275
+ const expiryA = chunkEJOFL5WH_cjs.toBatchExpiry(a) || Number.MAX_SAFE_INTEGER;
16276
+ const expiryB = chunkEJOFL5WH_cjs.toBatchExpiry(b) || Number.MAX_SAFE_INTEGER;
16245
16277
  if (expiryA !== expiryB) {
16246
16278
  return expiryA - expiryB;
16247
16279
  }
@@ -16576,7 +16608,7 @@ var MessageBus = class {
16576
16608
  this.initialized = true;
16577
16609
  }
16578
16610
  async buildServices(config) {
16579
- const arkProvider = new chunk2JV4VQ7C_cjs.RestArkProvider(config.arkServer.url);
16611
+ const arkProvider = new chunkEJOFL5WH_cjs.RestArkProvider(config.arkServer.url);
16580
16612
  const storage = {
16581
16613
  walletRepository: this.walletRepository,
16582
16614
  contractRepository: this.contractRepository,
@@ -16918,7 +16950,7 @@ var offboardNetworkNames = [
16918
16950
  function offboardDestinationScript(destinationAddress) {
16919
16951
  for (const networkName of offboardNetworkNames) {
16920
16952
  try {
16921
- const network = chunk2JV4VQ7C_cjs.networks[networkName];
16953
+ const network = chunkEJOFL5WH_cjs.networks[networkName];
16922
16954
  const addr = btcSigner.Address(network).decode(destinationAddress);
16923
16955
  return btcSigner.OutScript.encode(addr);
16924
16956
  } catch {
@@ -16982,7 +17014,7 @@ var Ramps = class {
16982
17014
  }
16983
17015
  amount = amount ?? totalAmount;
16984
17016
  const offchainAddress = await this.wallet.getAddress();
16985
- const offchainAddr = chunk2JV4VQ7C_cjs.ArkAddress.decode(offchainAddress);
17017
+ const offchainAddr = chunkEJOFL5WH_cjs.ArkAddress.decode(offchainAddress);
16986
17018
  const offchainScript = base.hex.encode(offchainAddr.pkScript);
16987
17019
  const outputFee = estimator.evalOffchainOutput({
16988
17020
  amount,
@@ -17042,7 +17074,7 @@ var Ramps = class {
17042
17074
  const filteredVtxos = [];
17043
17075
  let totalAmount = 0n;
17044
17076
  for (const vtxo of vtxos) {
17045
- const inputFee = estimator.evalOffchainInput(chunk2JV4VQ7C_cjs.toOffchainInputFeeParams(vtxo));
17077
+ const inputFee = estimator.evalOffchainInput(chunkEJOFL5WH_cjs.toOffchainInputFeeParams(vtxo));
17046
17078
  if (inputFee.satoshis >= vtxo.value) {
17047
17079
  continue;
17048
17080
  }
@@ -17878,7 +17910,7 @@ var WalletMessageHandler = class {
17878
17910
  // Wallet methods
17879
17911
  async handleInitWallet({ payload }) {
17880
17912
  const { arkServerUrl } = payload;
17881
- this.indexerProvider = new chunkCO3KKSWM_cjs.RestIndexerProvider(arkServerUrl);
17913
+ this.indexerProvider = new chunkPJR63FTK_cjs.RestIndexerProvider(arkServerUrl);
17882
17914
  await this.onWalletInitialized();
17883
17915
  }
17884
17916
  /**
@@ -18167,7 +18199,7 @@ var WalletMessageHandler = class {
18167
18199
  if (v.isUnrolled) {
18168
18200
  return withUnrolled;
18169
18201
  }
18170
- if (chunk2JV4VQ7C_cjs.hasTerminalSpend(v)) {
18202
+ if (chunkEJOFL5WH_cjs.hasTerminalSpend(v)) {
18171
18203
  return false;
18172
18204
  }
18173
18205
  if (includeRecoverable) {
@@ -18176,10 +18208,10 @@ var WalletMessageHandler = class {
18176
18208
  if (dustAmount != null && isSubdust(v, dustAmount)) {
18177
18209
  return false;
18178
18210
  }
18179
- if (chunk2JV4VQ7C_cjs.isRecoverable(v)) {
18211
+ if (chunkEJOFL5WH_cjs.isRecoverable(v)) {
18180
18212
  return false;
18181
18213
  }
18182
- if (chunk2JV4VQ7C_cjs.isExpired(v)) {
18214
+ if (chunkEJOFL5WH_cjs.isExpired(v)) {
18183
18215
  return false;
18184
18216
  }
18185
18217
  return true;
@@ -18277,7 +18309,7 @@ var WalletMessageHandler = class {
18277
18309
  if (!this.readonlyWallet) return null;
18278
18310
  const { boardingTxs, commitmentsToIgnore } = await this.readonlyWallet.getBoardingTxs();
18279
18311
  const indexerProvider = this.indexerProvider;
18280
- const resolveTxCreatedAt = indexerProvider ? (txids) => chunk2JV4VQ7C_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
18312
+ const resolveTxCreatedAt = indexerProvider ? (txids) => chunkEJOFL5WH_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
18281
18313
  return buildTransactionHistory(vtxos, boardingTxs, commitmentsToIgnore, resolveTxCreatedAt);
18282
18314
  }
18283
18315
  async ensureContractEventBroadcasting() {
@@ -18973,7 +19005,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
18973
19005
  };
18974
19006
  try {
18975
19007
  const response = await this.sendMessage(message);
18976
- return response.payload.vtxos.map(chunk2JV4VQ7C_cjs.normalizeVtxo);
19008
+ return response.payload.vtxos.map(chunkEJOFL5WH_cjs.normalizeVtxo);
18977
19009
  } catch (error) {
18978
19010
  throw new Error(`Failed to get vtxos: ${error}`);
18979
19011
  }
@@ -18998,7 +19030,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
18998
19030
  };
18999
19031
  try {
19000
19032
  const response = await this.sendMessage(message);
19001
- return response.payload.vtxos.map(chunk2JV4VQ7C_cjs.normalizeVtxo);
19033
+ return response.payload.vtxos.map(chunkEJOFL5WH_cjs.normalizeVtxo);
19002
19034
  } catch (error) {
19003
19035
  throw new Error(`Failed to get spendable vtxos: ${error}`);
19004
19036
  }
@@ -19129,7 +19161,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
19129
19161
  };
19130
19162
  try {
19131
19163
  const response = await sendContractMessage(message);
19132
- return response.payload.vtxos.map(chunk2JV4VQ7C_cjs.normalizeVtxo);
19164
+ return response.payload.vtxos.map(chunkEJOFL5WH_cjs.normalizeVtxo);
19133
19165
  } catch (e) {
19134
19166
  throw new Error("Failed to annotate vtxos");
19135
19167
  }
@@ -19730,7 +19762,7 @@ var ServiceWorkerWallet = class _ServiceWorkerWallet extends ServiceWorkerReadon
19730
19762
  };
19731
19763
  try {
19732
19764
  const response = await wallet.sendMessage(message);
19733
- return response.payload.vtxos.map(chunk2JV4VQ7C_cjs.normalizeVtxo);
19765
+ return response.payload.vtxos.map(chunkEJOFL5WH_cjs.normalizeVtxo);
19734
19766
  } catch (e) {
19735
19767
  throw new Error(`Failed to get expiring vtxos: ${e}`);
19736
19768
  }
@@ -19842,12 +19874,12 @@ var OnchainWallet = class _OnchainWallet {
19842
19874
  * @returns Configured onchain wallet
19843
19875
  * @throws Error if the configured identity cannot produce a valid x-only public key
19844
19876
  */
19845
- static async create(identity, networkName = chunk2JV4VQ7C_cjs.DEFAULT_NETWORK_NAME, provider) {
19877
+ static async create(identity, networkName = chunkEJOFL5WH_cjs.DEFAULT_NETWORK_NAME, provider) {
19846
19878
  const pubkey = await identity.xOnlyPublicKey();
19847
19879
  if (!pubkey) {
19848
19880
  throw new Error("Invalid configured public key");
19849
19881
  }
19850
- const network = chunk2JV4VQ7C_cjs.getNetwork(networkName);
19882
+ const network = chunkEJOFL5WH_cjs.getNetwork(networkName);
19851
19883
  const onchainProvider = provider || new EsploraProvider(ESPLORA_URL[networkName]);
19852
19884
  const onchainP2TR = btcSigner.p2tr(pubkey, void 0, network);
19853
19885
  return new _OnchainWallet(identity, network, onchainP2TR, onchainProvider);
@@ -19953,7 +19985,7 @@ var OnchainWallet = class _OnchainWallet {
19953
19985
  if (!inputs) {
19954
19986
  throw new Error("Fee estimation failed");
19955
19987
  }
19956
- let tx = new chunk2JV4VQ7C_cjs.Transaction();
19988
+ let tx = new chunkEJOFL5WH_cjs.Transaction();
19957
19989
  for (const input of inputs) {
19958
19990
  tx.addInput({
19959
19991
  txid: input.txid,
@@ -20011,7 +20043,7 @@ var OnchainWallet = class _OnchainWallet {
20011
20043
  * @throws If the parent has no anchor, or funding cannot be selected/signed
20012
20044
  */
20013
20045
  async bumpAnchor(parentHex, feeRate) {
20014
- const parent = chunk2JV4VQ7C_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
20046
+ const parent = chunkEJOFL5WH_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
20015
20047
  const coins = (await this.getCoins()).filter((c) => c.status.confirmed);
20016
20048
  const child = await this.buildBumpPackage(parent, feeRate, coins);
20017
20049
  return [parent.hex, child.hex];
@@ -20872,7 +20904,7 @@ async function resolvePrevTxs(txids, source, onchain) {
20872
20904
  try {
20873
20905
  const { txs } = await source.getVirtualTxs(wanted);
20874
20906
  for (const psbt of txs) {
20875
- const tx = chunk2JV4VQ7C_cjs.Transaction.fromPSBT(base.base64.decode(psbt));
20907
+ const tx = chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(psbt));
20876
20908
  resolved.set(tx.id, tx.toBytes());
20877
20909
  }
20878
20910
  } catch (err) {
@@ -20905,7 +20937,7 @@ async function resolvePrevTxs(txids, source, onchain) {
20905
20937
  async function attachPrevArkTxs(tx, txids, source, onchain) {
20906
20938
  const pending = [];
20907
20939
  for (let i = 0; i < tx.inputsLength; i++) {
20908
- if (chunk2JV4VQ7C_cjs.getArkPsbtFields(tx, i, chunk2JV4VQ7C_cjs.PrevArkTxField).length === 0) pending.push(i);
20940
+ if (chunkEJOFL5WH_cjs.getArkPsbtFields(tx, i, chunkEJOFL5WH_cjs.PrevArkTxField).length === 0) pending.push(i);
20909
20941
  }
20910
20942
  if (pending.length === 0) return;
20911
20943
  const resolved = await resolvePrevTxs(
@@ -20914,13 +20946,13 @@ async function attachPrevArkTxs(tx, txids, source, onchain) {
20914
20946
  onchain
20915
20947
  );
20916
20948
  for (const i of pending) {
20917
- chunk2JV4VQ7C_cjs.setArkPsbtField(tx, i, chunk2JV4VQ7C_cjs.PrevArkTxField, resolved.get(txidAt(txids, i)));
20949
+ chunkEJOFL5WH_cjs.setArkPsbtField(tx, i, chunkEJOFL5WH_cjs.PrevArkTxField, resolved.get(txidAt(txids, i)));
20918
20950
  }
20919
20951
  }
20920
20952
  async function attachPrevoutTxs(tx, source) {
20921
20953
  const pending = [];
20922
20954
  for (let i = 0; i < tx.inputsLength; i++) {
20923
- if (chunk2JV4VQ7C_cjs.getArkPsbtFields(tx, i, chunk2JV4VQ7C_cjs.PrevoutTxField).length > 0) continue;
20955
+ if (chunkEJOFL5WH_cjs.getArkPsbtFields(tx, i, chunkEJOFL5WH_cjs.PrevoutTxField).length > 0) continue;
20924
20956
  const input = tx.getInput(i);
20925
20957
  if (!input?.txid) throw new PrevTxUnavailableError(`input ${i} has no outpoint`);
20926
20958
  pending.push({ index: i, txid: base.hex.encode(input.txid) });
@@ -20931,7 +20963,7 @@ async function attachPrevoutTxs(tx, source) {
20931
20963
  resolved.set(txid, await source.getRawTransaction(txid));
20932
20964
  }
20933
20965
  for (const { index, txid } of pending) {
20934
- chunk2JV4VQ7C_cjs.setArkPsbtField(tx, index, chunk2JV4VQ7C_cjs.PrevoutTxField, resolved.get(txid));
20966
+ chunkEJOFL5WH_cjs.setArkPsbtField(tx, index, chunkEJOFL5WH_cjs.PrevoutTxField, resolved.get(txid));
20935
20967
  }
20936
20968
  }
20937
20969
  async function withPrevTxs(coins, source, onchain) {
@@ -20957,7 +20989,7 @@ exports.BIP322 = void 0;
20957
20989
  async function sign2(message, identity, network) {
20958
20990
  const xOnlyPubKey = await identity.xOnlyPublicKey();
20959
20991
  const payment = btcSigner.p2tr(xOnlyPubKey, void 0, network);
20960
- const toSpend = chunk2JV4VQ7C_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
20992
+ const toSpend = chunkEJOFL5WH_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
20961
20993
  const toSign = craftBIP322ToSignP2TR(toSpend, payment.script, xOnlyPubKey);
20962
20994
  const signed = await identity.sign(toSign, [0]);
20963
20995
  signed.finalizeIdx(0);
@@ -21015,7 +21047,7 @@ function verifyP2TR(message, witnessItems, pkScript, pubkey) {
21015
21047
  if (sighashType !== btcSigner.SigHash.DEFAULT && sighashType !== btcSigner.SigHash.ALL) {
21016
21048
  return false;
21017
21049
  }
21018
- const toSpend = chunk2JV4VQ7C_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
21050
+ const toSpend = chunkEJOFL5WH_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
21019
21051
  const toSign = craftBIP322ToSignP2TR(toSpend, pkScript, pubkey);
21020
21052
  const sighash = toSign.preimageWitnessV1(0, [pkScript], sighashType, [0n]);
21021
21053
  const rawSig = sig.length === 65 ? sig.subarray(0, 64) : sig;
@@ -21036,7 +21068,7 @@ function verifyP2WPKH(message, witnessItems, pkScript, addressHash) {
21036
21068
  }
21037
21069
  const sighashType = sigWithHash[sigWithHash.length - 1];
21038
21070
  const derSig = sigWithHash.subarray(0, sigWithHash.length - 1);
21039
- const toSpend = chunk2JV4VQ7C_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
21071
+ const toSpend = chunkEJOFL5WH_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
21040
21072
  const toSign = craftBIP322ToSignSimple(toSpend, pkScript);
21041
21073
  const scriptCode = btcSigner.OutScript.encode({ type: "pkh", hash: addressHash });
21042
21074
  const sighash = toSign.preimageWitnessV0(0, scriptCode, sighashType, 0n);
@@ -21089,7 +21121,7 @@ function encodeCompactSize(n) {
21089
21121
  return buf;
21090
21122
  }
21091
21123
  function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
21092
- const tx = new chunk2JV4VQ7C_cjs.Transaction({ version: 0 });
21124
+ const tx = new chunkEJOFL5WH_cjs.Transaction({ version: 0 });
21093
21125
  tx.addInput({
21094
21126
  txid: toSpend.id,
21095
21127
  index: 0,
@@ -21103,12 +21135,12 @@ function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
21103
21135
  });
21104
21136
  tx.addOutput({
21105
21137
  amount: 0n,
21106
- script: chunk2JV4VQ7C_cjs.OP_RETURN_EMPTY_PKSCRIPT
21138
+ script: chunkEJOFL5WH_cjs.OP_RETURN_EMPTY_PKSCRIPT
21107
21139
  });
21108
21140
  return tx;
21109
21141
  }
21110
21142
  function craftBIP322ToSignSimple(toSpend, pkScript) {
21111
- const tx = new chunk2JV4VQ7C_cjs.Transaction({ version: 0 });
21143
+ const tx = new chunkEJOFL5WH_cjs.Transaction({ version: 0 });
21112
21144
  tx.addInput({
21113
21145
  txid: toSpend.id,
21114
21146
  index: 0,
@@ -21120,7 +21152,7 @@ function craftBIP322ToSignSimple(toSpend, pkScript) {
21120
21152
  });
21121
21153
  tx.addOutput({
21122
21154
  amount: 0n,
21123
- script: chunk2JV4VQ7C_cjs.OP_RETURN_EMPTY_PKSCRIPT
21155
+ script: chunkEJOFL5WH_cjs.OP_RETURN_EMPTY_PKSCRIPT
21124
21156
  });
21125
21157
  return tx;
21126
21158
  }
@@ -21251,7 +21283,7 @@ var RestEmulatorProvider = class {
21251
21283
  }
21252
21284
  };
21253
21285
  function finalizeVirtualTx(type, psbtBase64) {
21254
- const tx = chunk2JV4VQ7C_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
21286
+ const tx = chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
21255
21287
  if (type === "INDEXER_CHAINED_TX_TYPE_TREE" /* TREE */) {
21256
21288
  const input = tx.getInput(0);
21257
21289
  if (!input) {
@@ -21278,14 +21310,14 @@ var ExitPathError = class extends Error {
21278
21310
  reason;
21279
21311
  };
21280
21312
  function delayWeight(sequence) {
21281
- const t = chunk2JV4VQ7C_cjs.sequenceToTimelock(sequence);
21313
+ const t = chunkEJOFL5WH_cjs.sequenceToTimelock(sequence);
21282
21314
  return t.type === "blocks" ? Number(t.value) : Number(t.value) / 600;
21283
21315
  }
21284
21316
  async function resolveUnilateralPath(params) {
21285
21317
  const { vtxo, scriptHex, contractRepository } = params;
21286
21318
  const contract = contractRepository ? (await contractRepository.getContracts({ script: scriptHex }))[0] : void 0;
21287
21319
  if (contract) {
21288
- const handler = chunkOIZ2V2VD_cjs.contractHandlers.get(contract.type);
21320
+ const handler = chunk6YUACVX4_cjs.contractHandlers.get(contract.type);
21289
21321
  if (!handler) {
21290
21322
  throw new ExitPathError(
21291
21323
  "no-handler",
@@ -21308,12 +21340,12 @@ async function resolveUnilateralPath(params) {
21308
21340
  paths.sort((a, b) => delayWeight(a.sequence) - delayWeight(b.sequence));
21309
21341
  return { selection: paths[0], label: `${contract.type}:unilateral` };
21310
21342
  }
21311
- const decoded = chunk2JV4VQ7C_cjs.VtxoScript.decode(vtxo.tapTree);
21343
+ const decoded = chunkEJOFL5WH_cjs.VtxoScript.decode(vtxo.tapTree);
21312
21344
  let best;
21313
21345
  for (const exit of decoded.exitPaths()) {
21314
21346
  const leaf = decoded.findLeaf(base.hex.encode(exit.script));
21315
21347
  if (!leaf) continue;
21316
- const sequence = chunk2JV4VQ7C_cjs.timelockToSequence(exit.params.timelock);
21348
+ const sequence = chunkEJOFL5WH_cjs.timelockToSequence(exit.params.timelock);
21317
21349
  const weight = delayWeight(sequence);
21318
21350
  if (!best || weight < best.weight) {
21319
21351
  best = { selection: { leaf, sequence }, weight };
@@ -21533,7 +21565,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
21533
21565
  let totalAmount = 0n;
21534
21566
  const txWeightEstimator = TxWeightEstimator.create();
21535
21567
  for (const vtxo of vtxos) {
21536
- if (!chunk2JV4VQ7C_cjs.canSweepOnchain(vtxo)) {
21568
+ if (!chunkEJOFL5WH_cjs.canSweepOnchain(vtxo)) {
21537
21569
  throw new Error(
21538
21570
  `Vtxo ${vtxo.txid}:${vtxo.vout} cannot be swept onchain: it is not fully unrolled (use unroll first), or its exit output was already spent`
21539
21571
  );
@@ -21544,14 +21576,14 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
21544
21576
  }
21545
21577
  const resolved = await resolveUnilateralPath({
21546
21578
  vtxo,
21547
- scriptHex: base.hex.encode(chunk2JV4VQ7C_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
21579
+ scriptHex: base.hex.encode(chunkEJOFL5WH_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
21548
21580
  contractRepository: wallet.contractRepository,
21549
21581
  walletPubKeyHex: base.hex.encode(await wallet.identity.xOnlyPublicKey()),
21550
21582
  currentTime: Date.now()
21551
21583
  });
21552
21584
  const spendingLeaf = resolved.selection.leaf;
21553
21585
  const sequence = resolved.selection.sequence;
21554
- const timelock = chunk2JV4VQ7C_cjs.sequenceToTimelock(sequence);
21586
+ const timelock = chunkEJOFL5WH_cjs.sequenceToTimelock(sequence);
21555
21587
  const elapsed = timelock.type === "blocks" ? chainTip.height >= txStatus.blockHeight + Number(timelock.value) : chainTip.time >= txStatus.blockTime + Number(timelock.value);
21556
21588
  if (!elapsed) {
21557
21589
  throw new Error(`no available exit path found for vtxo ${vtxo.txid}:${vtxo.vout}`);
@@ -21564,7 +21596,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
21564
21596
  sequence,
21565
21597
  witnessUtxo: {
21566
21598
  amount: BigInt(vtxo.value),
21567
- script: chunk2JV4VQ7C_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
21599
+ script: chunkEJOFL5WH_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
21568
21600
  },
21569
21601
  sighashType: btcSigner.SigHash.DEFAULT
21570
21602
  });
@@ -21574,7 +21606,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
21574
21606
  btcSigner.TaprootControlBlock.encode(spendingLeaf[0]).length
21575
21607
  );
21576
21608
  }
21577
- const tx = new chunk2JV4VQ7C_cjs.Transaction({ version: 2 });
21609
+ const tx = new chunkEJOFL5WH_cjs.Transaction({ version: 2 });
21578
21610
  for (const input of inputs) {
21579
21611
  tx.addInput(input);
21580
21612
  }
@@ -21657,7 +21689,7 @@ async function buildSignedSweep(params) {
21657
21689
  `uneconomic vtxo ${vtxo.txid}:${vtxo.vout}: value ${vtxo.value} - fee ${fee} < dust`
21658
21690
  );
21659
21691
  }
21660
- const tx = new chunk2JV4VQ7C_cjs.Transaction({ version: 2 });
21692
+ const tx = new chunkEJOFL5WH_cjs.Transaction({ version: 2 });
21661
21693
  tx.addInput({
21662
21694
  txid: vtxo.txid,
21663
21695
  index: vtxo.vout,
@@ -21682,7 +21714,7 @@ async function buildSignedSweep(params) {
21682
21714
  finalScriptWitness: [
21683
21715
  tapScriptSig[0][1],
21684
21716
  ...path.extraWitness,
21685
- chunk2JV4VQ7C_cjs.scriptFromTapLeafScript(path.leaf),
21717
+ chunkEJOFL5WH_cjs.scriptFromTapLeafScript(path.leaf),
21686
21718
  btcSigner.TaprootControlBlock.encode(controlBlock)
21687
21719
  ]
21688
21720
  });
@@ -21712,7 +21744,7 @@ async function resolveFeeRate(opts) {
21712
21744
  }
21713
21745
  async function selectExitVtxos(opts) {
21714
21746
  if (!opts.vtxos) return opts.wallet.getVtxos();
21715
- const res = await chunk2JV4VQ7C_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
21747
+ const res = await chunkEJOFL5WH_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
21716
21748
  const tapTrees = /* @__PURE__ */ new Map();
21717
21749
  const out = [];
21718
21750
  for (const vtxo of res.vtxos) {
@@ -21727,7 +21759,7 @@ async function selectExitVtxos(opts) {
21727
21759
  `no contract registered for vtxo script ${vtxo.script} \u2014 register the contract before exiting`
21728
21760
  );
21729
21761
  }
21730
- const handler = chunkOIZ2V2VD_cjs.contractHandlers.get(contract.type);
21762
+ const handler = chunk6YUACVX4_cjs.contractHandlers.get(contract.type);
21731
21763
  if (!handler) {
21732
21764
  throw new Error(`no contract handler registered for type '${contract.type}'`);
21733
21765
  }
@@ -21757,7 +21789,7 @@ async function computeExitLayout(opts, feeRate) {
21757
21789
  if (pendingNodes.length > 0) {
21758
21790
  const txs = await resolver.getVirtualTxs(pendingNodes.map((n) => n.txid));
21759
21791
  for (const psbt of txs) {
21760
- psbts.set(chunk2JV4VQ7C_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
21792
+ psbts.set(chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
21761
21793
  }
21762
21794
  }
21763
21795
  const childVsize = Number(
@@ -21793,7 +21825,7 @@ async function computeExitLayout(opts, feeRate) {
21793
21825
  try {
21794
21826
  const resolved = await resolveUnilateralPath({
21795
21827
  vtxo,
21796
- scriptHex: base.hex.encode(chunk2JV4VQ7C_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
21828
+ scriptHex: base.hex.encode(chunkEJOFL5WH_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
21797
21829
  contractRepository: wallet.contractRepository,
21798
21830
  walletPubKeyHex,
21799
21831
  currentTime: Date.now()
@@ -21812,7 +21844,7 @@ async function computeExitLayout(opts, feeRate) {
21812
21844
  });
21813
21845
  continue;
21814
21846
  }
21815
- const t = chunk2JV4VQ7C_cjs.sequenceToTimelock(resolved.selection.sequence);
21847
+ const t = chunkEJOFL5WH_cjs.sequenceToTimelock(resolved.selection.sequence);
21816
21848
  const delay = { type: t.type, value: Number(t.value) };
21817
21849
  infos.push({ outpoint, value: vtxo.value, sweepFee, path: resolved.label, delay });
21818
21850
  sweeps.push({ vtxo, resolved, sweepFee, delay });
@@ -22213,7 +22245,7 @@ async function prepare(opts) {
22213
22245
  txid: sweep.vtxo.txid,
22214
22246
  vout: sweep.vtxo.vout,
22215
22247
  value: sweep.vtxo.value,
22216
- pkScript: chunk2JV4VQ7C_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
22248
+ pkScript: chunkEJOFL5WH_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
22217
22249
  },
22218
22250
  path: sweep.resolved.selection,
22219
22251
  outputAddress: opts.sweepAddress,
@@ -22301,7 +22333,7 @@ async function prepare(opts) {
22301
22333
  if (newFee <= splitterFee) break;
22302
22334
  splitterFee = newFee;
22303
22335
  }
22304
- const splitter = new chunk2JV4VQ7C_cjs.Transaction({ version: 2 });
22336
+ const splitter = new chunkEJOFL5WH_cjs.Transaction({ version: 2 });
22305
22337
  for (const coin of selected.inputs) {
22306
22338
  splitter.addInput({
22307
22339
  txid: coin.txid,
@@ -22445,41 +22477,41 @@ var UnilateralExit = {
22445
22477
  // src/arkade/index.ts
22446
22478
  var arkade_exports = {};
22447
22479
  chunk5BLDMQED_cjs.__export(arkade_exports, {
22448
- ARKADE_OP: () => chunkOIZ2V2VD_cjs.ARKADE_OP,
22449
- ARKADE_OPCODES: () => chunkOIZ2V2VD_cjs.ARKADE_OPCODES,
22450
- ARKADE_OPCODE_NAMES: () => chunkOIZ2V2VD_cjs.ARKADE_OPCODE_NAMES,
22451
- ARKADE_OPCODE_VALUES: () => chunkOIZ2V2VD_cjs.ARKADE_OPCODE_VALUES,
22452
- ARKADE_OPS: () => chunkOIZ2V2VD_cjs.ARKADE_OPS,
22480
+ ARKADE_OP: () => chunk6YUACVX4_cjs.ARKADE_OP,
22481
+ ARKADE_OPCODES: () => chunk6YUACVX4_cjs.ARKADE_OPCODES,
22482
+ ARKADE_OPCODE_NAMES: () => chunk6YUACVX4_cjs.ARKADE_OPCODE_NAMES,
22483
+ ARKADE_OPCODE_VALUES: () => chunk6YUACVX4_cjs.ARKADE_OPCODE_VALUES,
22484
+ ARKADE_OPS: () => chunk6YUACVX4_cjs.ARKADE_OPS,
22453
22485
  Arkade: () => Arkade,
22454
22486
  ArkadeContract: () => ArkadeContract,
22455
- ArkadeProgramScript: () => chunkOIZ2V2VD_cjs.ArkadeProgramScript,
22456
- ArkadeScript: () => chunkOIZ2V2VD_cjs.ArkadeScript,
22487
+ ArkadeProgramScript: () => chunk6YUACVX4_cjs.ArkadeProgramScript,
22488
+ ArkadeScript: () => chunk6YUACVX4_cjs.ArkadeScript,
22457
22489
  ArkadeTransactionBuilder: () => ArkadeTransactionBuilder,
22458
- BigNum: () => chunkOIZ2V2VD_cjs.bignum_exports,
22490
+ BigNum: () => chunk6YUACVX4_cjs.bignum_exports,
22459
22491
  OP: () => btcSigner.OP,
22460
- OPCODE_NAMES: () => chunkOIZ2V2VD_cjs.OPCODE_NAMES,
22461
- OPCODE_VALUES: () => chunkOIZ2V2VD_cjs.OPCODE_VALUES,
22462
- SUPPORTED_PROGRAM_VERSION: () => chunkOIZ2V2VD_cjs.SUPPORTED_PROGRAM_VERSION,
22492
+ OPCODE_NAMES: () => chunk6YUACVX4_cjs.OPCODE_NAMES,
22493
+ OPCODE_VALUES: () => chunk6YUACVX4_cjs.OPCODE_VALUES,
22494
+ SUPPORTED_PROGRAM_VERSION: () => chunk6YUACVX4_cjs.SUPPORTED_PROGRAM_VERSION,
22463
22495
  Script: () => btcSigner.Script,
22464
- arkadeScriptHash: () => chunkOIZ2V2VD_cjs.arkadeScriptHash,
22465
- arkadeWitnessHash: () => chunkOIZ2V2VD_cjs.arkadeWitnessHash,
22466
- asmToBytes: () => chunkOIZ2V2VD_cjs.asmToBytes,
22467
- bytesToASM: () => chunkOIZ2V2VD_cjs.bytesToASM,
22468
- computeArkadeScriptPublicKey: () => chunkOIZ2V2VD_cjs.computeArkadeScriptPublicKey,
22496
+ arkadeScriptHash: () => chunk6YUACVX4_cjs.arkadeScriptHash,
22497
+ arkadeWitnessHash: () => chunk6YUACVX4_cjs.arkadeWitnessHash,
22498
+ asmToBytes: () => chunk6YUACVX4_cjs.asmToBytes,
22499
+ bytesToASM: () => chunk6YUACVX4_cjs.bytesToASM,
22500
+ computeArkadeScriptPublicKey: () => chunk6YUACVX4_cjs.computeArkadeScriptPublicKey,
22469
22501
  createArkadeBatchHandler: () => createArkadeBatchHandler,
22470
- deserializeArkadeContractParams: () => chunkOIZ2V2VD_cjs.deserializeArkadeContractParams,
22471
- fromASM: () => chunkOIZ2V2VD_cjs.fromASM,
22472
- getOpcodeName: () => chunkOIZ2V2VD_cjs.getOpcodeName,
22473
- getOpcodeValue: () => chunkOIZ2V2VD_cjs.getOpcodeValue,
22474
- parseArtifact: () => chunkOIZ2V2VD_cjs.parseArtifact,
22475
- resolveAsm: () => chunkOIZ2V2VD_cjs.resolveAsm,
22476
- serializeArkadeContractParams: () => chunkOIZ2V2VD_cjs.serializeArkadeContractParams,
22477
- stringifyArtifact: () => chunkOIZ2V2VD_cjs.stringifyArtifact,
22478
- toASM: () => chunkOIZ2V2VD_cjs.toASM,
22479
- validateProgram: () => chunkOIZ2V2VD_cjs.validateProgram,
22480
- witnessRefToBytes: () => chunkOIZ2V2VD_cjs.witnessRefToBytes
22502
+ deserializeArkadeContractParams: () => chunk6YUACVX4_cjs.deserializeArkadeContractParams,
22503
+ fromASM: () => chunk6YUACVX4_cjs.fromASM,
22504
+ getOpcodeName: () => chunk6YUACVX4_cjs.getOpcodeName,
22505
+ getOpcodeValue: () => chunk6YUACVX4_cjs.getOpcodeValue,
22506
+ parseArtifact: () => chunk6YUACVX4_cjs.parseArtifact,
22507
+ resolveAsm: () => chunk6YUACVX4_cjs.resolveAsm,
22508
+ serializeArkadeContractParams: () => chunk6YUACVX4_cjs.serializeArkadeContractParams,
22509
+ stringifyArtifact: () => chunk6YUACVX4_cjs.stringifyArtifact,
22510
+ toASM: () => chunk6YUACVX4_cjs.toASM,
22511
+ validateProgram: () => chunk6YUACVX4_cjs.validateProgram,
22512
+ witnessRefToBytes: () => chunk6YUACVX4_cjs.witnessRefToBytes
22481
22513
  });
22482
- var isVtxoCoin = (input) => chunk2JV4VQ7C_cjs.isVirtualCoin(input);
22514
+ var isVtxoCoin = (input) => chunkEJOFL5WH_cjs.isVirtualCoin(input);
22483
22515
  function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message, session, arkProvider, emulator, network, recipients, batchExpiryPolicy) {
22484
22516
  let batchId;
22485
22517
  let sweepTapTreeRoot;
@@ -22500,23 +22532,23 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
22500
22532
  );
22501
22533
  await arkProvider.confirmRegistration(intentId);
22502
22534
  batchId = event.id;
22503
- const sweepTapscript = chunk2JV4VQ7C_cjs.CSVMultisigTapscript.encode({
22535
+ const sweepTapscript = chunkEJOFL5WH_cjs.CSVMultisigTapscript.encode({
22504
22536
  timelock,
22505
- pubkeys: [chunkOIZ2V2VD_cjs.toXOnly(base.hex.decode(info.forfeitPubkey), "forfeit key")]
22537
+ pubkeys: [chunk6YUACVX4_cjs.toXOnly(base.hex.decode(info.forfeitPubkey), "forfeit key")]
22506
22538
  }).script;
22507
22539
  sweepTapTreeRoot = payment_js.tapLeafHash(sweepTapscript);
22508
22540
  return { skip: false };
22509
22541
  },
22510
22542
  onTreeSigningStarted: async (event, vtxoTree) => {
22511
22543
  const signerPubKey = await session.getPublicKey();
22512
- const xonlySignerPubKey = chunkOIZ2V2VD_cjs.toXOnly(signerPubKey, "signer key");
22544
+ const xonlySignerPubKey = chunk6YUACVX4_cjs.toXOnly(signerPubKey, "signer key");
22513
22545
  const xOnlyPubkeys = event.cosignersPublicKeys.map(
22514
- (k) => base.hex.encode(chunkOIZ2V2VD_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
22546
+ (k) => base.hex.encode(chunk6YUACVX4_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
22515
22547
  );
22516
22548
  if (!xOnlyPubkeys.includes(base.hex.encode(xonlySignerPubKey))) {
22517
22549
  return { skip: true };
22518
22550
  }
22519
- const commitmentTx = chunk2JV4VQ7C_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
22551
+ const commitmentTx = chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
22520
22552
  validateVtxoTxGraph(vtxoTree, commitmentTx, sweepTapTreeRoot);
22521
22553
  if (recipients && recipients.length > 0) {
22522
22554
  validateBatchRecipients(commitmentTx, vtxoTree.leaves(), recipients, network);
@@ -22548,7 +22580,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
22548
22580
  if (connectorTree) {
22549
22581
  validateConnectorsTxGraph(event.commitmentTx, connectorTree);
22550
22582
  }
22551
- let commitmentPsbt = chunk2JV4VQ7C_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
22583
+ let commitmentPsbt = chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
22552
22584
  assertFinalCommitmentMatchesValidated(
22553
22585
  commitmentPsbt,
22554
22586
  validatedCommitmentTxid,
@@ -22583,7 +22615,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
22583
22615
  boardingIndices.push(boardingIdx);
22584
22616
  continue;
22585
22617
  }
22586
- if (chunk2JV4VQ7C_cjs.isRecoverable(input) || isSubdust(input, info.dust)) {
22618
+ if (chunkEJOFL5WH_cjs.isRecoverable(input) || isSubdust(input, info.dust)) {
22587
22619
  continue;
22588
22620
  }
22589
22621
  if (connectorIndex >= connectorLeaves.length) {
@@ -22604,7 +22636,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
22604
22636
  index: input.vout,
22605
22637
  witnessUtxo: {
22606
22638
  amount: BigInt(input.value),
22607
- script: chunk2JV4VQ7C_cjs.VtxoScript.decode(input.tapTree).pkScript
22639
+ script: chunkEJOFL5WH_cjs.VtxoScript.decode(input.tapTree).pkScript
22608
22640
  },
22609
22641
  sighashType: btcSigner.SigHash.DEFAULT,
22610
22642
  tapLeafScript: [input.forfeitTapLeafScript]
@@ -22695,16 +22727,16 @@ var Arkade = class _Arkade {
22695
22727
  /** Connect and resolve the server key, checkpoint closure and (if present) the co-signer key. */
22696
22728
  static async connect(opts) {
22697
22729
  const info = await opts.arkade.getInfo();
22698
- const serverKey = chunkOIZ2V2VD_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
22699
- const checkpoint = chunk2JV4VQ7C_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
22700
- const network = opts.network ?? chunk2JV4VQ7C_cjs.DEFAULT_NETWORK;
22730
+ const serverKey = chunk6YUACVX4_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
22731
+ const checkpoint = chunkEJOFL5WH_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
22732
+ const network = opts.network ?? chunkEJOFL5WH_cjs.DEFAULT_NETWORK;
22701
22733
  let emulatorKey;
22702
22734
  if (opts.emulator) {
22703
- emulatorKey = base.hex.decode(chunk2JV4VQ7C_cjs.resolveEmulatorPubkey(network, opts.emulatorPubkey));
22735
+ emulatorKey = base.hex.decode(chunkEJOFL5WH_cjs.resolveEmulatorPubkey(network, opts.emulatorPubkey));
22704
22736
  }
22705
22737
  let userKey;
22706
22738
  if (opts.identity) {
22707
- userKey = chunkOIZ2V2VD_cjs.toXOnly(await opts.identity.xOnlyPublicKey(), "identity key");
22739
+ userKey = chunk6YUACVX4_cjs.toXOnly(await opts.identity.xOnlyPublicKey(), "identity key");
22708
22740
  }
22709
22741
  return new _Arkade({
22710
22742
  arkProvider: opts.arkade,
@@ -22730,7 +22762,7 @@ var Arkade = class _Arkade {
22730
22762
  * key respectively; explicit args always win.
22731
22763
  */
22732
22764
  contract(program, args = {}) {
22733
- const declared = (program.params ?? []).map(chunkOIZ2V2VD_cjs.inputName);
22765
+ const declared = (program.params ?? []).map(chunk6YUACVX4_cjs.inputName);
22734
22766
  if (declared.includes("server") && args.server === void 0) {
22735
22767
  args = { ...args, server: this.serverKey };
22736
22768
  }
@@ -22750,7 +22782,7 @@ var ArkadeContract = class _ArkadeContract {
22750
22782
  userKey: client.userKey,
22751
22783
  emulatorKey: client.emulatorKey
22752
22784
  };
22753
- this.vtxoScript = new chunkOIZ2V2VD_cjs.ArkadeProgramScript(program, args, this.keys);
22785
+ this.vtxoScript = new chunk6YUACVX4_cjs.ArkadeProgramScript(program, args, this.keys);
22754
22786
  this.tapTree = this.vtxoScript.encode();
22755
22787
  this.compiled = this.vtxoScript.compiled;
22756
22788
  }
@@ -22778,7 +22810,7 @@ var ArkadeContract = class _ArkadeContract {
22778
22810
  `ArkadeContract.fromContract: expected contract type 'arkade', got '${contract.type}'`
22779
22811
  );
22780
22812
  }
22781
- const typed = chunkOIZ2V2VD_cjs.deserializeArkadeContractParams(contract.params);
22813
+ const typed = chunk6YUACVX4_cjs.deserializeArkadeContractParams(contract.params);
22782
22814
  return new _ArkadeContract(client, typed.program, typed.args, {
22783
22815
  serverKey: typed.serverKey,
22784
22816
  userKey: typed.userKey,
@@ -22819,7 +22851,7 @@ var ArkadeContract = class _ArkadeContract {
22819
22851
  toContractParams() {
22820
22852
  return {
22821
22853
  type: "arkade",
22822
- params: chunkOIZ2V2VD_cjs.serializeArkadeContractParams({
22854
+ params: chunk6YUACVX4_cjs.serializeArkadeContractParams({
22823
22855
  program: this.program,
22824
22856
  args: this.args,
22825
22857
  serverKey: this.keys.serverKey,
@@ -22856,6 +22888,10 @@ var ArkadeContract = class _ArkadeContract {
22856
22888
  * When a `contractManager` is configured and this contract is registered,
22857
22889
  * reads the repository-backed state (offline-first, kept fresh by the
22858
22890
  * contract watcher). Otherwise falls back to a direct indexer query.
22891
+ *
22892
+ * Both branches refuse a spent or unilaterally exited output. They are not
22893
+ * otherwise interchangeable: the fallback asks `spendableOnly`, which also
22894
+ * drops swept coins — the manager branch keeps those.
22859
22895
  */
22860
22896
  async getUtxos() {
22861
22897
  const manager = this.client.contractManager;
@@ -22865,18 +22901,18 @@ var ArkadeContract = class _ArkadeContract {
22865
22901
  if (registered) {
22866
22902
  const [withVtxos] = await manager.getContractsWithVtxos({ script: scriptHex });
22867
22903
  return (withVtxos?.vtxos ?? []).filter(
22868
- (v) => !chunk2JV4VQ7C_cjs.hasTerminalSpend(v) && !v.isUnrolled
22904
+ (v) => !chunkEJOFL5WH_cjs.hasTerminalSpend(v) && !v.isUnrolled
22869
22905
  );
22870
22906
  }
22871
22907
  }
22872
22908
  if (!this.client.indexer) {
22873
22909
  throw new Error("ArkadeContract.getUtxos: an indexer is required");
22874
22910
  }
22875
- const { vtxos } = await chunk2JV4VQ7C_cjs.getNormalizedVtxos(this.client.indexer, {
22911
+ const { vtxos } = await chunkEJOFL5WH_cjs.getNormalizedVtxos(this.client.indexer, {
22876
22912
  scripts: [scriptHex],
22877
22913
  spendableOnly: true
22878
22914
  });
22879
- return vtxos;
22915
+ return vtxos.filter((v) => !chunkEJOFL5WH_cjs.hasTerminalSpend(v) && !v.isUnrolled);
22880
22916
  }
22881
22917
  /** Total spendable balance (requires an indexer). */
22882
22918
  async getBalance() {
@@ -22974,7 +23010,7 @@ var ArkadeTransactionBuilder = class {
22974
23010
  this.contract.client.checkpoint
22975
23011
  );
22976
23012
  if (coin.sourceTx) {
22977
- chunk2JV4VQ7C_cjs.setArkPsbtField(arkTx, 0, chunk2JV4VQ7C_cjs.PrevArkTxField, coin.sourceTx);
23013
+ chunkEJOFL5WH_cjs.setArkPsbtField(arkTx, 0, chunkEJOFL5WH_cjs.PrevArkTxField, coin.sourceTx);
22978
23014
  }
22979
23015
  if (this.fn.arkadeScript) {
22980
23016
  const indexer = this.contract.client.indexer;
@@ -22991,8 +23027,8 @@ var ArkadeTransactionBuilder = class {
22991
23027
  }
22992
23028
  const condition = (def.tapscript.witness ?? []).map((w) => this.witnessBytes(w));
22993
23029
  if (condition.length > 0) {
22994
- chunk2JV4VQ7C_cjs.setArkPsbtField(arkTx, 0, chunk2JV4VQ7C_cjs.ConditionWitness, condition);
22995
- chunk2JV4VQ7C_cjs.setArkPsbtField(checkpoints[0], 0, chunk2JV4VQ7C_cjs.ConditionWitness, condition);
23030
+ chunkEJOFL5WH_cjs.setArkPsbtField(arkTx, 0, chunkEJOFL5WH_cjs.ConditionWitness, condition);
23031
+ chunkEJOFL5WH_cjs.setArkPsbtField(checkpoints[0], 0, chunkEJOFL5WH_cjs.ConditionWitness, condition);
22996
23032
  }
22997
23033
  const packets = [];
22998
23034
  if (this.assetSpecs.length > 0) {
@@ -23031,7 +23067,7 @@ var ArkadeTransactionBuilder = class {
23031
23067
  base.base64.encode(signedArk2.toPSBT()),
23032
23068
  signedCps.map((c) => base.base64.encode(c.toPSBT()))
23033
23069
  );
23034
- const txid = chunk2JV4VQ7C_cjs.Transaction.fromPSBT(base.base64.decode(res2.signedArkTx)).id;
23070
+ const txid = chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(res2.signedArkTx)).id;
23035
23071
  return {
23036
23072
  txid,
23037
23073
  signedArkTx: res2.signedArkTx,
@@ -23090,23 +23126,23 @@ var ArkadeTransactionBuilder = class {
23090
23126
  }
23091
23127
  buildAssetPacket() {
23092
23128
  const groups = this.assetSpecs.map((s) => {
23093
- const id = typeof s.assetId === "string" ? chunkCO3KKSWM_cjs.AssetId.fromString(s.assetId) : chunkCO3KKSWM_cjs.AssetId.fromBytes(s.assetId);
23094
- return chunkCO3KKSWM_cjs.AssetGroup.create(
23129
+ const id = typeof s.assetId === "string" ? chunkPJR63FTK_cjs.AssetId.fromString(s.assetId) : chunkPJR63FTK_cjs.AssetId.fromBytes(s.assetId);
23130
+ return chunkPJR63FTK_cjs.AssetGroup.create(
23095
23131
  id,
23096
23132
  null,
23097
- s.inputs.map((i) => chunkCO3KKSWM_cjs.AssetInput.create(i.vin, i.amount)),
23098
- s.outputs.map((o) => chunkCO3KKSWM_cjs.AssetOutput.create(o.vout, o.amount)),
23099
- (s.metadata ?? []).map((m) => chunkCO3KKSWM_cjs.Metadata.create(m.key, m.value))
23133
+ s.inputs.map((i) => chunkPJR63FTK_cjs.AssetInput.create(i.vin, i.amount)),
23134
+ s.outputs.map((o) => chunkPJR63FTK_cjs.AssetOutput.create(o.vout, o.amount)),
23135
+ (s.metadata ?? []).map((m) => chunkPJR63FTK_cjs.Metadata.create(m.key, m.value))
23100
23136
  );
23101
23137
  });
23102
- return chunkCO3KKSWM_cjs.Packet.create(groups);
23138
+ return chunkPJR63FTK_cjs.Packet.create(groups);
23103
23139
  }
23104
23140
  witnessBytes(ref) {
23105
- return chunkOIZ2V2VD_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
23141
+ return chunk6YUACVX4_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
23106
23142
  }
23107
23143
  };
23108
23144
  function bindInputs(fn, callArgs) {
23109
- const names = (fn.def.inputs ?? []).map(chunkOIZ2V2VD_cjs.inputName);
23145
+ const names = (fn.def.inputs ?? []).map(chunk6YUACVX4_cjs.inputName);
23110
23146
  if (callArgs.length !== names.length) {
23111
23147
  throw new Error(`${fn.name}: expected ${names.length} argument(s), got ${callArgs.length}`);
23112
23148
  }
@@ -23711,5 +23747,5 @@ exports.verifyTapscriptSignatures = verifyTapscriptSignatures;
23711
23747
  exports.waitForIncomingFunds = waitForIncomingFunds;
23712
23748
  exports.warnAndFilterVtxosForScript = warnAndFilterVtxosForScript;
23713
23749
  exports.withPrevTxs = withPrevTxs;
23714
- //# sourceMappingURL=chunk-MJUTO3PY.cjs.map
23715
- //# sourceMappingURL=chunk-MJUTO3PY.cjs.map
23750
+ //# sourceMappingURL=chunk-WCJVKFAP.cjs.map
23751
+ //# sourceMappingURL=chunk-WCJVKFAP.cjs.map