@arkade-os/sdk 0.4.68 → 0.4.70
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.
- package/README.md +33 -0
- package/dist/adapters/expo.cjs +5 -5
- package/dist/adapters/expo.d.cts +2 -2
- package/dist/adapters/expo.d.ts +2 -2
- package/dist/adapters/expo.js +3 -3
- package/dist/adapters/indexedDB.cjs +5 -5
- package/dist/adapters/indexedDB.js +4 -4
- package/dist/{asyncStorageTaskQueue-DaZlVTbM.d.ts → asyncStorageTaskQueue-BgUJN-3X.d.ts} +1 -1
- package/dist/{asyncStorageTaskQueue-B2CcXIHU.d.cts → asyncStorageTaskQueue-Cstx6hS7.d.cts} +1 -1
- package/dist/{chunk-PJR63FTK.cjs → chunk-3KW4TWP2.cjs} +17 -17
- package/dist/{chunk-PJR63FTK.cjs.map → chunk-3KW4TWP2.cjs.map} +1 -1
- package/dist/{chunk-6YUACVX4.cjs → chunk-3OKEUDHU.cjs} +49 -49
- package/dist/{chunk-6YUACVX4.cjs.map → chunk-3OKEUDHU.cjs.map} +1 -1
- package/dist/{chunk-EJOFL5WH.cjs → chunk-57636V35.cjs} +3 -3
- package/dist/{chunk-EJOFL5WH.cjs.map → chunk-57636V35.cjs.map} +1 -1
- package/dist/{chunk-45FKMOJH.js → chunk-6UM55KPZ.js} +3 -3
- package/dist/{chunk-45FKMOJH.js.map → chunk-6UM55KPZ.js.map} +1 -1
- package/dist/{chunk-4KCVS4ZN.cjs → chunk-B73Q75IL.cjs} +10 -10
- package/dist/{chunk-4KCVS4ZN.cjs.map → chunk-B73Q75IL.cjs.map} +1 -1
- package/dist/{chunk-33Q2RFET.js → chunk-F5E7LI6G.js} +3 -3
- package/dist/{chunk-33Q2RFET.js.map → chunk-F5E7LI6G.js.map} +1 -1
- package/dist/{chunk-GQ4NMQGR.js → chunk-IUFTICRY.js} +4 -4
- package/dist/{chunk-GQ4NMQGR.js.map → chunk-IUFTICRY.js.map} +1 -1
- package/dist/{chunk-JGMSZIE4.cjs → chunk-JJ7AXR4O.cjs} +17 -17
- package/dist/{chunk-JGMSZIE4.cjs.map → chunk-JJ7AXR4O.cjs.map} +1 -1
- package/dist/{chunk-VBHXBI7F.js → chunk-JVHO6XHG.js} +435 -55
- package/dist/chunk-JVHO6XHG.js.map +1 -0
- package/dist/{chunk-4CMXV5SF.js → chunk-TXSF2DKX.js} +3 -3
- package/dist/{chunk-4CMXV5SF.js.map → chunk-TXSF2DKX.js.map} +1 -1
- package/dist/{chunk-G4I6PU5H.js → chunk-UG3EZDLF.js} +4 -4
- package/dist/{chunk-G4I6PU5H.js.map → chunk-UG3EZDLF.js.map} +1 -1
- package/dist/{chunk-WCJVKFAP.cjs → chunk-XTCOSZ34.cjs} +870 -483
- package/dist/chunk-XTCOSZ34.cjs.map +1 -0
- package/dist/contracts/handlers/index.cjs +9 -9
- package/dist/contracts/handlers/index.d.cts +3 -3
- package/dist/contracts/handlers/index.d.ts +3 -3
- package/dist/contracts/handlers/index.js +2 -2
- package/dist/{delegate-AomVWxO_.d.ts → delegate-BPdzTbwN.d.ts} +1 -1
- package/dist/{delegate-Bffc5f54.d.cts → delegate-DrwIar11.d.cts} +1 -1
- package/dist/{hdWalletCapable-DZdIVa23.d.ts → hdWalletCapable-D4WH35z0.d.cts} +49 -5
- package/dist/{hdWalletCapable-B5nRs3RH.d.cts → hdWalletCapable-DyxCiNVE.d.ts} +49 -5
- package/dist/{index-nfyQM33h.d.cts → index-BqhpAqqj.d.cts} +2 -2
- package/dist/{index-jouvy8FD.d.ts → index-TZJvbIaA.d.ts} +2 -2
- package/dist/{index-C7RZCfoY.d.cts → index-dWRqYSdS.d.cts} +53 -1
- package/dist/{index-C7RZCfoY.d.ts → index-dWRqYSdS.d.ts} +53 -1
- package/dist/index.cjs +318 -290
- package/dist/index.d.cts +97 -21
- package/dist/index.d.ts +97 -21
- package/dist/index.js +4 -4
- package/dist/repositories/realm/index.cjs +19 -19
- package/dist/repositories/realm/index.d.cts +2 -2
- package/dist/repositories/realm/index.d.ts +2 -2
- package/dist/repositories/realm/index.js +5 -5
- package/dist/repositories/sqlite/index.cjs +18 -18
- package/dist/repositories/sqlite/index.d.cts +2 -2
- package/dist/repositories/sqlite/index.d.ts +2 -2
- package/dist/repositories/sqlite/index.js +5 -5
- package/dist/{taskRunner-D2vnpPBT.d.cts → taskRunner-CzYKyJ9c.d.cts} +1 -1
- package/dist/{taskRunner-DuwK9t8O.d.ts → taskRunner-D2fnbqYw.d.ts} +1 -1
- package/dist/wallet/expo/background.cjs +14 -14
- package/dist/wallet/expo/background.d.cts +3 -3
- package/dist/wallet/expo/background.d.ts +3 -3
- package/dist/wallet/expo/background.js +6 -6
- package/dist/wallet/expo/index.cjs +14 -14
- package/dist/wallet/expo/index.d.cts +4 -4
- package/dist/wallet/expo/index.d.ts +4 -4
- package/dist/wallet/expo/index.js +5 -5
- package/dist/worker/expo/index.cjs +9 -9
- package/dist/worker/expo/index.d.cts +4 -4
- package/dist/worker/expo/index.d.ts +4 -4
- package/dist/worker/expo/index.js +5 -5
- package/package.json +2 -1
- package/dist/chunk-VBHXBI7F.js.map +0 -1
- package/dist/chunk-WCJVKFAP.cjs.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunk3KW4TWP2_cjs = require('./chunk-3KW4TWP2.cjs');
|
|
4
|
+
var chunk3OKEUDHU_cjs = require('./chunk-3OKEUDHU.cjs');
|
|
5
|
+
var chunk57636V35_cjs = require('./chunk-57636V35.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 =
|
|
191
|
+
const cosigners = chunk57636V35_cjs.getArkPsbtFields(tx.root, 0, chunk57636V35_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 =
|
|
243
|
+
const cosigners = chunk57636V35_cjs.getArkPsbtFields(g.root, 0, chunk57636V35_cjs.CosignerPublicKey).map((c) => c.key);
|
|
244
244
|
const { finalKey } = aggregateKeys(cosigners, true, {
|
|
245
245
|
taprootTweak: this.scriptRoot
|
|
246
246
|
});
|
|
@@ -323,7 +323,7 @@ var SingleKey = class _SingleKey {
|
|
|
323
323
|
async sign(tx, inputIndexes) {
|
|
324
324
|
const txCpy = tx.clone();
|
|
325
325
|
if (!inputIndexes) {
|
|
326
|
-
|
|
326
|
+
chunk57636V35_cjs.assertAllowedSighashTypes(txCpy, ALLOWED_SIGHASH);
|
|
327
327
|
try {
|
|
328
328
|
if (!txCpy.sign(this.key, ALLOWED_SIGHASH)) {
|
|
329
329
|
throw new Error("Failed to sign transaction");
|
|
@@ -432,7 +432,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
432
432
|
let network;
|
|
433
433
|
if ("descriptor" in opts && typeof opts.descriptor === "string") {
|
|
434
434
|
descriptor = opts.descriptor;
|
|
435
|
-
network =
|
|
435
|
+
network = chunk3OKEUDHU_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
436
436
|
} else {
|
|
437
437
|
network = opts.isMainnet ?? true ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
438
438
|
descriptor = descriptorsScure.scriptExpressions.trBIP32({
|
|
@@ -530,7 +530,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
530
530
|
* `StaticDescriptorProvider` for legacy single-key wallets.
|
|
531
531
|
*/
|
|
532
532
|
isOurs(descriptor) {
|
|
533
|
-
return
|
|
533
|
+
return chunk3OKEUDHU_cjs.descriptorIsOurs(descriptor, this.descriptor, utils_js.pubSchnorr(this.derivedKey));
|
|
534
534
|
}
|
|
535
535
|
/**
|
|
536
536
|
* Signs each request with the key derived from its descriptor.
|
|
@@ -579,7 +579,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
579
579
|
}
|
|
580
580
|
// ── internal helpers ─────────────────────────────────────────────
|
|
581
581
|
derivePrivateKeyForDescriptor(descriptor) {
|
|
582
|
-
const network =
|
|
582
|
+
const network = chunk3OKEUDHU_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
583
583
|
const expansion = descriptorsScure.expand({ descriptor, network });
|
|
584
584
|
if (expansion.isRanged) {
|
|
585
585
|
throw new Error(
|
|
@@ -604,7 +604,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
604
604
|
signTxWithKey(tx, key, inputIndexes) {
|
|
605
605
|
const txCpy = tx.clone();
|
|
606
606
|
if (!inputIndexes) {
|
|
607
|
-
|
|
607
|
+
chunk57636V35_cjs.assertAllowedSighashTypes(txCpy, ALLOWED_SIGHASH2);
|
|
608
608
|
try {
|
|
609
609
|
if (!txCpy.sign(key, ALLOWED_SIGHASH2)) {
|
|
610
610
|
throw new Error("Failed to sign transaction");
|
|
@@ -666,7 +666,7 @@ var ReadonlyDescriptorIdentity = class _ReadonlyDescriptorIdentity {
|
|
|
666
666
|
*/
|
|
667
667
|
descriptor;
|
|
668
668
|
constructor(descriptor) {
|
|
669
|
-
const network =
|
|
669
|
+
const network = chunk3OKEUDHU_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
670
670
|
let expansion;
|
|
671
671
|
try {
|
|
672
672
|
expansion = descriptorsScure.expand({ descriptor, network, index: 0 });
|
|
@@ -716,7 +716,7 @@ var ReadonlyDescriptorIdentity = class _ReadonlyDescriptorIdentity {
|
|
|
716
716
|
* `StaticDescriptorProvider` for legacy single-key wallets.
|
|
717
717
|
*/
|
|
718
718
|
isOurs(descriptor) {
|
|
719
|
-
return
|
|
719
|
+
return chunk3OKEUDHU_cjs.descriptorIsOurs(descriptor, this.descriptor, this.indexZero.pubkey);
|
|
720
720
|
}
|
|
721
721
|
};
|
|
722
722
|
function serializeSeedOwnedSigningIdentity(identity) {
|
|
@@ -878,10 +878,10 @@ var DescriptorIdentity = class {
|
|
|
878
878
|
this.base = base;
|
|
879
879
|
}
|
|
880
880
|
async xOnlyPublicKey() {
|
|
881
|
-
return
|
|
881
|
+
return chunk3OKEUDHU_cjs.deriveDescriptorLeafPubKey(this.descriptor);
|
|
882
882
|
}
|
|
883
883
|
async compressedPublicKey() {
|
|
884
|
-
return
|
|
884
|
+
return chunk3OKEUDHU_cjs.deriveDescriptorLeafCompressedPubKey(this.descriptor);
|
|
885
885
|
}
|
|
886
886
|
async sign(tx, inputIndexes) {
|
|
887
887
|
const [signed] = await this.signer.signWithDescriptor([
|
|
@@ -949,12 +949,12 @@ var WalletCannotAllocateAddressError = class extends Error {
|
|
|
949
949
|
};
|
|
950
950
|
async function resolveDescriptorSigner(descriptor, identity, provider) {
|
|
951
951
|
const owner = provider?.isOurs(descriptor) ? provider : isHDCapableIdentity(identity) && identity.isOurs(descriptor) ? identity : void 0;
|
|
952
|
-
if (owner &&
|
|
952
|
+
if (owner && chunk3OKEUDHU_cjs.parseHDDescriptor(descriptor)) {
|
|
953
953
|
return new DescriptorIdentity({ descriptor, signer: owner, base: identity });
|
|
954
954
|
}
|
|
955
955
|
let key;
|
|
956
956
|
try {
|
|
957
|
-
key =
|
|
957
|
+
key = chunk3OKEUDHU_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
958
958
|
} catch {
|
|
959
959
|
throw new ForeignDescriptorError(descriptor);
|
|
960
960
|
}
|
|
@@ -1329,14 +1329,14 @@ function buildSaltedPreimageMessage(xonly, salt) {
|
|
|
1329
1329
|
}
|
|
1330
1330
|
var PREIMAGE_INDEX = 0;
|
|
1331
1331
|
function isPerArtifactDescriptor(descriptor) {
|
|
1332
|
-
return
|
|
1332
|
+
return chunk3OKEUDHU_cjs.parseHDDescriptor(descriptor) !== null;
|
|
1333
1333
|
}
|
|
1334
1334
|
async function provisionDescriptor(wallet) {
|
|
1335
1335
|
const allocated = isHDAllocationCapable(wallet) ? await wallet.getNextSigningDescriptor() : void 0;
|
|
1336
|
-
return allocated ?? await
|
|
1336
|
+
return allocated ?? await chunk3OKEUDHU_cjs.identityDescriptor(wallet.identity);
|
|
1337
1337
|
}
|
|
1338
1338
|
async function provisionRefundKey(wallet) {
|
|
1339
|
-
const descriptor = await
|
|
1339
|
+
const descriptor = await chunk3OKEUDHU_cjs.identityDescriptor(wallet.identity);
|
|
1340
1340
|
const signer = await contractSigner(wallet, descriptor);
|
|
1341
1341
|
const pubkey = await signer.xOnlyPublicKey();
|
|
1342
1342
|
const identityPubkey = await wallet.identity.xOnlyPublicKey();
|
|
@@ -1346,7 +1346,7 @@ async function provisionRefundKey(wallet) {
|
|
|
1346
1346
|
);
|
|
1347
1347
|
}
|
|
1348
1348
|
const address = await wallet.getAddress();
|
|
1349
|
-
const { pkScript } =
|
|
1349
|
+
const { pkScript } = chunk57636V35_cjs.ArkAddress.decode(address);
|
|
1350
1350
|
return { descriptor, pubkey, pkScript, address };
|
|
1351
1351
|
}
|
|
1352
1352
|
async function provisionClaimSecret(wallet, opts = {}) {
|
|
@@ -1392,7 +1392,7 @@ async function contractSigner(wallet, descriptor) {
|
|
|
1392
1392
|
const signer = isHDWalletCapable(wallet) ? await wallet.signerForDescriptor(descriptor) : wallet.identity;
|
|
1393
1393
|
let expected;
|
|
1394
1394
|
try {
|
|
1395
|
-
expected =
|
|
1395
|
+
expected = chunk3OKEUDHU_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
1396
1396
|
} catch (cause) {
|
|
1397
1397
|
throw new ForeignDescriptorError(descriptor, { cause });
|
|
1398
1398
|
}
|
|
@@ -1611,14 +1611,14 @@ var RestDelegateProvider = class {
|
|
|
1611
1611
|
*/
|
|
1612
1612
|
async delegate(intent, forfeitTxs, options) {
|
|
1613
1613
|
const url = `${this.url}/v1/delegate`;
|
|
1614
|
-
const response = await
|
|
1614
|
+
const response = await chunk57636V35_cjs.baseFetch(url, {
|
|
1615
1615
|
method: "POST",
|
|
1616
1616
|
headers: {
|
|
1617
1617
|
"Content-Type": "application/json"
|
|
1618
1618
|
},
|
|
1619
1619
|
body: JSON.stringify({
|
|
1620
1620
|
intent: {
|
|
1621
|
-
message:
|
|
1621
|
+
message: chunk57636V35_cjs.Intent.encodeMessage(intent.message),
|
|
1622
1622
|
proof: intent.proof
|
|
1623
1623
|
},
|
|
1624
1624
|
forfeit_txs: forfeitTxs,
|
|
@@ -1638,7 +1638,7 @@ var RestDelegateProvider = class {
|
|
|
1638
1638
|
*/
|
|
1639
1639
|
async getDelegateInfo() {
|
|
1640
1640
|
const url = `${this.url}/v1/delegator/info`;
|
|
1641
|
-
const response = await
|
|
1641
|
+
const response = await chunk57636V35_cjs.rateGate.runHttp(url, () => chunk57636V35_cjs.baseFetch(url));
|
|
1642
1642
|
if (!response.ok) {
|
|
1643
1643
|
const errorText2 = await response.text();
|
|
1644
1644
|
throw new Error(`Failed to get delegate info: ${errorText2}`);
|
|
@@ -1663,7 +1663,7 @@ var ESPLORA_URL = {
|
|
|
1663
1663
|
regtest: "http://localhost:3000/api"
|
|
1664
1664
|
};
|
|
1665
1665
|
var EsploraProvider = class {
|
|
1666
|
-
constructor(baseUrl = ESPLORA_URL[
|
|
1666
|
+
constructor(baseUrl = ESPLORA_URL[chunk57636V35_cjs.DEFAULT_NETWORK_NAME], opts) {
|
|
1667
1667
|
this.baseUrl = baseUrl;
|
|
1668
1668
|
this.pollingInterval = opts?.pollingInterval ?? 15e3;
|
|
1669
1669
|
this.forcePolling = opts?.forcePolling ?? false;
|
|
@@ -1671,15 +1671,25 @@ var EsploraProvider = class {
|
|
|
1671
1671
|
baseUrl;
|
|
1672
1672
|
pollingInterval;
|
|
1673
1673
|
forcePolling;
|
|
1674
|
+
/**
|
|
1675
|
+
* Live {@link watchAddresses} subscriptions, keyed by their address set.
|
|
1676
|
+
*
|
|
1677
|
+
* Concurrent watchers over the same addresses share one transport, so a
|
|
1678
|
+
* caller that opens watchers in a loop — or leaks them by abandoning
|
|
1679
|
+
* {@link waitForIncomingFunds} — costs one entry in a `Set` rather than
|
|
1680
|
+
* another WebSocket plus another full-history polling loop. Entries are
|
|
1681
|
+
* dropped once their last subscriber stops.
|
|
1682
|
+
*/
|
|
1683
|
+
addressWatches = /* @__PURE__ */ new Map();
|
|
1674
1684
|
async getCoins(address) {
|
|
1675
|
-
const response = await
|
|
1685
|
+
const response = await chunk57636V35_cjs.baseFetch(`${this.baseUrl}/address/${address}/utxo`);
|
|
1676
1686
|
if (!response.ok) {
|
|
1677
1687
|
throw new Error(`Failed to fetch UTXOs: ${response.statusText}`);
|
|
1678
1688
|
}
|
|
1679
1689
|
return response.json();
|
|
1680
1690
|
}
|
|
1681
1691
|
async getFeeRate() {
|
|
1682
|
-
const response = await
|
|
1692
|
+
const response = await chunk57636V35_cjs.baseFetch(`${this.baseUrl}/fee-estimates`);
|
|
1683
1693
|
if (response.status === 404) {
|
|
1684
1694
|
return void 0;
|
|
1685
1695
|
}
|
|
@@ -1700,7 +1710,7 @@ var EsploraProvider = class {
|
|
|
1700
1710
|
}
|
|
1701
1711
|
}
|
|
1702
1712
|
async getTxOutspends(txid) {
|
|
1703
|
-
const response = await
|
|
1713
|
+
const response = await chunk57636V35_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/outspends`);
|
|
1704
1714
|
if (!response.ok) {
|
|
1705
1715
|
const error = await response.text();
|
|
1706
1716
|
throw new Error(`Failed to get transaction outspends: ${error}`);
|
|
@@ -1708,15 +1718,27 @@ var EsploraProvider = class {
|
|
|
1708
1718
|
return response.json();
|
|
1709
1719
|
}
|
|
1710
1720
|
async getTransactions(address) {
|
|
1711
|
-
const response = await
|
|
1721
|
+
const response = await chunk57636V35_cjs.baseFetch(`${this.baseUrl}/address/${address}/txs`);
|
|
1712
1722
|
if (!response.ok) {
|
|
1713
1723
|
const error = await response.text();
|
|
1714
1724
|
throw new Error(`Failed to get transactions: ${error}`);
|
|
1715
1725
|
}
|
|
1716
1726
|
return response.json();
|
|
1717
1727
|
}
|
|
1728
|
+
/**
|
|
1729
|
+
* Activity counts for an address, without its transactions — orders of
|
|
1730
|
+
* magnitude smaller than `/address/{addr}/txs`, which is what makes it
|
|
1731
|
+
* usable as a change probe for the polling fallback.
|
|
1732
|
+
*/
|
|
1733
|
+
async getAddressStats(address) {
|
|
1734
|
+
const response = await chunk57636V35_cjs.baseFetch(`${this.baseUrl}/address/${address}`);
|
|
1735
|
+
if (!response.ok) {
|
|
1736
|
+
throw new Error(`Failed to get address stats: ${response.statusText}`);
|
|
1737
|
+
}
|
|
1738
|
+
return response.json();
|
|
1739
|
+
}
|
|
1718
1740
|
async getRawTransaction(txid) {
|
|
1719
|
-
const response = await
|
|
1741
|
+
const response = await chunk57636V35_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/hex`);
|
|
1720
1742
|
if (!response.ok) {
|
|
1721
1743
|
const error = await response.text();
|
|
1722
1744
|
throw new Error(`Failed to get raw transaction ${txid}: ${error}`);
|
|
@@ -1724,7 +1746,7 @@ var EsploraProvider = class {
|
|
|
1724
1746
|
return base.hex.decode((await response.text()).trim());
|
|
1725
1747
|
}
|
|
1726
1748
|
async getTxStatus(txid) {
|
|
1727
|
-
const txresponse = await
|
|
1749
|
+
const txresponse = await chunk57636V35_cjs.baseFetch(`${this.baseUrl}/tx/${txid}`);
|
|
1728
1750
|
if (!txresponse.ok) {
|
|
1729
1751
|
throw new Error(txresponse.statusText);
|
|
1730
1752
|
}
|
|
@@ -1732,7 +1754,7 @@ var EsploraProvider = class {
|
|
|
1732
1754
|
if (!tx.status.confirmed) {
|
|
1733
1755
|
return { confirmed: false };
|
|
1734
1756
|
}
|
|
1735
|
-
const response = await
|
|
1757
|
+
const response = await chunk57636V35_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/status`);
|
|
1736
1758
|
if (!response.ok) {
|
|
1737
1759
|
throw new Error(`Failed to get transaction status: ${response.statusText}`);
|
|
1738
1760
|
}
|
|
@@ -1746,50 +1768,227 @@ var EsploraProvider = class {
|
|
|
1746
1768
|
blockHeight: data.block_height
|
|
1747
1769
|
};
|
|
1748
1770
|
}
|
|
1771
|
+
/**
|
|
1772
|
+
* Watch a set of addresses over the explorer's WebSocket, degrading to HTTP
|
|
1773
|
+
* polling whenever the socket is unavailable and returning to the socket as
|
|
1774
|
+
* soon as it can be re-established.
|
|
1775
|
+
*
|
|
1776
|
+
* Concurrent calls covering the same address set share one transport. The
|
|
1777
|
+
* returned function releases **this** subscription only; the transport is
|
|
1778
|
+
* torn down when the last subscriber releases it. Calling it more than once
|
|
1779
|
+
* is a no-op.
|
|
1780
|
+
*
|
|
1781
|
+
* @param addresses - Addresses to monitor; order is not significant
|
|
1782
|
+
* @param callback - Invoked with transactions seen after the watch started
|
|
1783
|
+
* @returns A function releasing this subscription
|
|
1784
|
+
* @remarks
|
|
1785
|
+
* The HTTP fallback fetches full address history per address per cycle,
|
|
1786
|
+
* which is dramatically more expensive than the socket — so callers should
|
|
1787
|
+
* release watches they no longer need rather than relying on sharing.
|
|
1788
|
+
* @see {@link waitForIncomingFunds} for the cancellation-aware wallet-level helper
|
|
1789
|
+
*/
|
|
1749
1790
|
async watchAddresses(addresses, callback) {
|
|
1750
|
-
|
|
1791
|
+
const key = [...addresses].sort().join("\0");
|
|
1792
|
+
let watch = this.addressWatches.get(key);
|
|
1793
|
+
if (!watch) {
|
|
1794
|
+
watch = this.createAddressWatch(addresses, () => this.addressWatches.delete(key));
|
|
1795
|
+
this.addressWatches.set(key, watch);
|
|
1796
|
+
}
|
|
1797
|
+
const subscriber = { callback };
|
|
1798
|
+
watch.subscribers.add(subscriber);
|
|
1799
|
+
const shared = watch;
|
|
1800
|
+
await shared.started;
|
|
1801
|
+
let released = false;
|
|
1802
|
+
return () => {
|
|
1803
|
+
if (released) return;
|
|
1804
|
+
released = true;
|
|
1805
|
+
shared.subscribers.delete(subscriber);
|
|
1806
|
+
if (shared.subscribers.size === 0) shared.teardown();
|
|
1807
|
+
};
|
|
1808
|
+
}
|
|
1809
|
+
/**
|
|
1810
|
+
* Bring up one shared address watch: a WebSocket subscription where the
|
|
1811
|
+
* explorer supports it, degrading to HTTP polling when it doesn't.
|
|
1812
|
+
*
|
|
1813
|
+
* @param addresses - Addresses this watch covers
|
|
1814
|
+
* @param onTeardown - Invoked when the watch retires, to drop the registry entry
|
|
1815
|
+
*/
|
|
1816
|
+
createAddressWatch(addresses, onTeardown) {
|
|
1817
|
+
const subscribers = /* @__PURE__ */ new Set();
|
|
1751
1818
|
const wsUrl = this.baseUrl.replace(/^http(s)?:/, "ws$1:") + "/v1/ws";
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1819
|
+
let stopped = false;
|
|
1820
|
+
let timer = null;
|
|
1821
|
+
let pollStarted = false;
|
|
1822
|
+
let ws = null;
|
|
1823
|
+
let reconnectTimer = null;
|
|
1824
|
+
let reconnectFailures = 0;
|
|
1825
|
+
let pollSession = 0;
|
|
1826
|
+
const emit = (txs) => {
|
|
1827
|
+
if (stopped || txs.length === 0) return;
|
|
1828
|
+
for (const subscriber of [...subscribers]) {
|
|
1829
|
+
try {
|
|
1830
|
+
subscriber.callback(txs);
|
|
1831
|
+
} catch (error) {
|
|
1832
|
+
console.error("Address watch subscriber threw:", error);
|
|
1833
|
+
}
|
|
1834
|
+
}
|
|
1835
|
+
};
|
|
1836
|
+
const txKey2 = (tx) => `${tx.txid}_${tx.status.block_time}`;
|
|
1837
|
+
const getAllTxs = async () => {
|
|
1838
|
+
const txArrays = await Promise.all(
|
|
1839
|
+
addresses.map((address) => this.getTransactions(address))
|
|
1840
|
+
);
|
|
1841
|
+
return txArrays.flat();
|
|
1842
|
+
};
|
|
1843
|
+
const seen = /* @__PURE__ */ new Set();
|
|
1844
|
+
let baselined = false;
|
|
1845
|
+
let anchorHeight;
|
|
1846
|
+
const baseline = (async () => {
|
|
1847
|
+
const [history, tip] = await Promise.allSettled([getAllTxs(), this.getChainTip()]);
|
|
1848
|
+
if (history.status === "fulfilled") {
|
|
1849
|
+
for (const tx of history.value) seen.add(txKey2(tx));
|
|
1850
|
+
baselined = true;
|
|
1851
|
+
return;
|
|
1852
|
+
}
|
|
1853
|
+
console.warn(
|
|
1854
|
+
"Could not baseline watched addresses; the first poll pass will establish it instead:",
|
|
1855
|
+
history.reason
|
|
1856
|
+
);
|
|
1857
|
+
if (tip.status === "fulfilled") anchorHeight = tip.value.height;
|
|
1858
|
+
})();
|
|
1859
|
+
const report = (txs) => {
|
|
1860
|
+
const fresh = [];
|
|
1861
|
+
for (const tx of txs) {
|
|
1862
|
+
const key = txKey2(tx);
|
|
1863
|
+
if (seen.has(key)) continue;
|
|
1864
|
+
seen.add(key);
|
|
1865
|
+
fresh.push(tx);
|
|
1866
|
+
}
|
|
1867
|
+
if (fresh.length === 0) return;
|
|
1868
|
+
emit(fresh);
|
|
1869
|
+
};
|
|
1870
|
+
const startPolling = async () => {
|
|
1871
|
+
if (stopped || pollStarted) return;
|
|
1872
|
+
pollStarted = true;
|
|
1873
|
+
console.warn(
|
|
1874
|
+
`Esplora websocket unavailable (${wsUrl}); falling back to HTTP polling every ${this.pollingInterval}ms for ${addresses.length} address(es) while retrying the socket`
|
|
1875
|
+
);
|
|
1876
|
+
let failures = 0;
|
|
1877
|
+
const activityFingerprint = async () => {
|
|
1878
|
+
try {
|
|
1879
|
+
const stats = await Promise.all(
|
|
1880
|
+
addresses.map((address) => this.getAddressStats(address))
|
|
1881
|
+
);
|
|
1882
|
+
const counted = (activity) => typeof activity?.tx_count === "number" && typeof activity.funded_txo_count === "number" && typeof activity.spent_txo_count === "number";
|
|
1883
|
+
const usable = stats.every(
|
|
1884
|
+
(s) => counted(s?.chain_stats) && counted(s?.mempool_stats)
|
|
1885
|
+
);
|
|
1886
|
+
if (!usable) return void 0;
|
|
1887
|
+
if (stats.some((s) => s.mempool_stats.tx_count > 0)) return void 0;
|
|
1888
|
+
return stats.map(
|
|
1889
|
+
({ chain_stats: chain }) => `${chain.tx_count}:${chain.funded_txo_count}:${chain.spent_txo_count}`
|
|
1890
|
+
).join(",");
|
|
1891
|
+
} catch {
|
|
1892
|
+
return void 0;
|
|
1893
|
+
}
|
|
1894
|
+
};
|
|
1895
|
+
let lastFingerprint;
|
|
1896
|
+
const session = pollSession;
|
|
1897
|
+
const isCurrentLoop = () => !stopped && session === pollSession;
|
|
1898
|
+
const schedule = () => {
|
|
1899
|
+
if (!isCurrentLoop()) return;
|
|
1900
|
+
timer = setTimeout(tick, this.pollingInterval * 2 ** failures);
|
|
1758
1901
|
};
|
|
1759
|
-
const
|
|
1760
|
-
const txKey2 = (tx) => `${tx.txid}_${tx.status.block_time}`;
|
|
1761
|
-
const existingTxs = new Set(initialTxs.map(txKey2));
|
|
1762
|
-
intervalId = setInterval(async () => {
|
|
1902
|
+
const tick = async () => {
|
|
1763
1903
|
try {
|
|
1904
|
+
const fingerprint = await activityFingerprint();
|
|
1905
|
+
if (!isCurrentLoop()) return;
|
|
1906
|
+
if (fingerprint !== void 0 && fingerprint === lastFingerprint) {
|
|
1907
|
+
failures = 0;
|
|
1908
|
+
schedule();
|
|
1909
|
+
return;
|
|
1910
|
+
}
|
|
1764
1911
|
const currentTxs = await getAllTxs();
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
|
|
1912
|
+
if (!isCurrentLoop()) return;
|
|
1913
|
+
lastFingerprint = fingerprint;
|
|
1914
|
+
if (baselined) {
|
|
1915
|
+
report(currentTxs);
|
|
1916
|
+
} else if (anchorHeight !== void 0) {
|
|
1917
|
+
const arrivedAfterStart = (tx) => !tx.status.confirmed || tx.status.block_height === void 0 || tx.status.block_height > anchorHeight;
|
|
1918
|
+
for (const tx of currentTxs) {
|
|
1919
|
+
if (!arrivedAfterStart(tx)) seen.add(txKey2(tx));
|
|
1920
|
+
}
|
|
1921
|
+
baselined = true;
|
|
1922
|
+
report(currentTxs);
|
|
1923
|
+
} else {
|
|
1924
|
+
console.warn(
|
|
1925
|
+
`Esplora address watch established its baseline late for ${addresses.length} address(es); deposits arriving before now may not have been reported`
|
|
1926
|
+
);
|
|
1927
|
+
for (const tx of currentTxs) seen.add(txKey2(tx));
|
|
1928
|
+
baselined = true;
|
|
1769
1929
|
}
|
|
1930
|
+
failures = 0;
|
|
1770
1931
|
} catch (error) {
|
|
1771
|
-
|
|
1932
|
+
failures = Math.min(failures + 1, MAX_POLL_BACKOFF_EXPONENT);
|
|
1933
|
+
console.error("Error polling watched addresses:", error);
|
|
1772
1934
|
}
|
|
1773
|
-
|
|
1935
|
+
schedule();
|
|
1936
|
+
};
|
|
1937
|
+
await baseline;
|
|
1938
|
+
if (!isCurrentLoop()) return;
|
|
1939
|
+
await tick();
|
|
1774
1940
|
};
|
|
1775
|
-
|
|
1776
|
-
|
|
1777
|
-
if (
|
|
1778
|
-
|
|
1941
|
+
const stopPolling = () => {
|
|
1942
|
+
pollSession++;
|
|
1943
|
+
if (timer) {
|
|
1944
|
+
clearTimeout(timer);
|
|
1945
|
+
timer = null;
|
|
1946
|
+
}
|
|
1947
|
+
pollStarted = false;
|
|
1779
1948
|
};
|
|
1780
|
-
|
|
1781
|
-
|
|
1782
|
-
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
|
|
1786
|
-
|
|
1949
|
+
const handleSocketFailure = () => {
|
|
1950
|
+
if (stopped) return Promise.resolve();
|
|
1951
|
+
scheduleReconnect();
|
|
1952
|
+
return startPolling();
|
|
1953
|
+
};
|
|
1954
|
+
const scheduleReconnect = () => {
|
|
1955
|
+
if (stopped || reconnectTimer !== null) return;
|
|
1956
|
+
const delay = RECONNECT_BASE_DELAY_MS * 2 ** Math.min(reconnectFailures, MAX_RECONNECT_BACKOFF_EXPONENT);
|
|
1957
|
+
reconnectFailures++;
|
|
1958
|
+
reconnectTimer = setTimeout(() => {
|
|
1959
|
+
reconnectTimer = null;
|
|
1960
|
+
connect();
|
|
1961
|
+
}, delay);
|
|
1962
|
+
};
|
|
1963
|
+
const connect = () => {
|
|
1964
|
+
if (stopped) return Promise.resolve();
|
|
1965
|
+
const previous = ws;
|
|
1966
|
+
ws = null;
|
|
1967
|
+
if (previous) {
|
|
1968
|
+
try {
|
|
1969
|
+
previous.close();
|
|
1970
|
+
} catch {
|
|
1971
|
+
}
|
|
1972
|
+
}
|
|
1973
|
+
let socket;
|
|
1974
|
+
try {
|
|
1975
|
+
socket = new WebSocket(wsUrl);
|
|
1976
|
+
} catch {
|
|
1977
|
+
return handleSocketFailure();
|
|
1978
|
+
}
|
|
1979
|
+
ws = socket;
|
|
1980
|
+
const isCurrent = () => !stopped && ws === socket;
|
|
1981
|
+
socket.addEventListener("open", () => {
|
|
1982
|
+
if (!isCurrent()) return;
|
|
1983
|
+
reconnectFailures = 0;
|
|
1787
1984
|
const subscribeMsg = {
|
|
1788
1985
|
"track-addresses": addresses
|
|
1789
1986
|
};
|
|
1790
|
-
|
|
1987
|
+
socket.send(JSON.stringify(subscribeMsg));
|
|
1988
|
+
stopPolling();
|
|
1791
1989
|
});
|
|
1792
|
-
|
|
1990
|
+
socket.addEventListener("message", (event) => {
|
|
1991
|
+
if (!isCurrent()) return;
|
|
1793
1992
|
try {
|
|
1794
1993
|
const newTxs = [];
|
|
1795
1994
|
const message = JSON.parse(event.data.toString());
|
|
@@ -1801,22 +2000,48 @@ var EsploraProvider = class {
|
|
|
1801
2000
|
newTxs.push(...aux[address][type].filter(isExplorerTransaction));
|
|
1802
2001
|
}
|
|
1803
2002
|
}
|
|
1804
|
-
|
|
2003
|
+
report(newTxs);
|
|
1805
2004
|
} catch (error) {
|
|
1806
2005
|
console.error("Failed to process WebSocket message:", error);
|
|
1807
2006
|
}
|
|
1808
2007
|
});
|
|
1809
|
-
|
|
1810
|
-
|
|
2008
|
+
socket.addEventListener("error", () => {
|
|
2009
|
+
if (isCurrent()) void handleSocketFailure();
|
|
1811
2010
|
});
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1816
|
-
|
|
2011
|
+
socket.addEventListener("close", () => {
|
|
2012
|
+
if (isCurrent()) void handleSocketFailure();
|
|
2013
|
+
});
|
|
2014
|
+
return Promise.resolve();
|
|
2015
|
+
};
|
|
2016
|
+
const teardown = () => {
|
|
2017
|
+
if (stopped) return;
|
|
2018
|
+
stopped = true;
|
|
2019
|
+
onTeardown();
|
|
2020
|
+
if (timer) {
|
|
2021
|
+
clearTimeout(timer);
|
|
2022
|
+
timer = null;
|
|
2023
|
+
}
|
|
2024
|
+
if (reconnectTimer !== null) {
|
|
2025
|
+
clearTimeout(reconnectTimer);
|
|
2026
|
+
reconnectTimer = null;
|
|
2027
|
+
}
|
|
2028
|
+
if (ws) {
|
|
2029
|
+
try {
|
|
2030
|
+
ws.close();
|
|
2031
|
+
} catch {
|
|
2032
|
+
}
|
|
2033
|
+
ws = null;
|
|
2034
|
+
}
|
|
2035
|
+
subscribers.clear();
|
|
2036
|
+
};
|
|
2037
|
+
const started = this.forcePolling ? startPolling() : connect().then(() => baseline);
|
|
2038
|
+
return { subscribers, teardown, started };
|
|
1817
2039
|
}
|
|
1818
2040
|
async getChainTip() {
|
|
1819
|
-
|
|
2041
|
+
let tipBlocks = await chunk57636V35_cjs.baseFetch(`${this.baseUrl}/blocks`);
|
|
2042
|
+
if (tipBlocks.status === 404) {
|
|
2043
|
+
tipBlocks = await chunk57636V35_cjs.baseFetch(`${this.baseUrl}/v1/blocks`);
|
|
2044
|
+
}
|
|
1820
2045
|
if (!tipBlocks.ok) {
|
|
1821
2046
|
throw new Error(`Failed to get chain tip: ${tipBlocks.statusText}`);
|
|
1822
2047
|
}
|
|
@@ -1830,12 +2055,14 @@ var EsploraProvider = class {
|
|
|
1830
2055
|
const hash = tip[0].id;
|
|
1831
2056
|
return {
|
|
1832
2057
|
height: tip[0].height,
|
|
2058
|
+
// `mediantime`, never `timestamp`: the latter is the header's own
|
|
2059
|
+
// `nTime`, and this field is specified as MTP.
|
|
1833
2060
|
time: tip[0].mediantime,
|
|
1834
2061
|
hash
|
|
1835
2062
|
};
|
|
1836
2063
|
}
|
|
1837
2064
|
async broadcastPackage(parent, child) {
|
|
1838
|
-
const response = await
|
|
2065
|
+
const response = await chunk57636V35_cjs.baseFetch(`${this.baseUrl}/txs/package`, {
|
|
1839
2066
|
method: "POST",
|
|
1840
2067
|
headers: {
|
|
1841
2068
|
"Content-Type": "application/json"
|
|
@@ -1851,7 +2078,7 @@ var EsploraProvider = class {
|
|
|
1851
2078
|
return result;
|
|
1852
2079
|
}
|
|
1853
2080
|
async broadcastTx(tx) {
|
|
1854
|
-
const response = await
|
|
2081
|
+
const response = await chunk57636V35_cjs.baseFetch(`${this.baseUrl}/tx`, {
|
|
1855
2082
|
method: "POST",
|
|
1856
2083
|
headers: {
|
|
1857
2084
|
"Content-Type": "text/plain"
|
|
@@ -1895,6 +2122,9 @@ var isExplorerTransaction = (tx) => {
|
|
|
1895
2122
|
(vout) => typeof vout.scriptpubkey_address === "string" && typeof vout.value === "number"
|
|
1896
2123
|
) && typeof tx.status === "object" && typeof tx.status.confirmed === "boolean";
|
|
1897
2124
|
};
|
|
2125
|
+
var MAX_POLL_BACKOFF_EXPONENT = 4;
|
|
2126
|
+
var RECONNECT_BASE_DELAY_MS = 1e3;
|
|
2127
|
+
var MAX_RECONNECT_BACKOFF_EXPONENT = 5;
|
|
1898
2128
|
var getVarIntSize = (n) => {
|
|
1899
2129
|
if (n < 253) return 1;
|
|
1900
2130
|
if (n <= 65535) return 3;
|
|
@@ -2031,7 +2261,7 @@ function findP2AOutput(tx) {
|
|
|
2031
2261
|
var CHILD_DUST_AMOUNT = 546;
|
|
2032
2262
|
function buildAnchorChild(params) {
|
|
2033
2263
|
const { parent, feeRate, fundingCoins, changeAddress, tapInternalKey, network } = params;
|
|
2034
|
-
const child = new
|
|
2264
|
+
const child = new chunk57636V35_cjs.Transaction({ version: 3, allowLegacyWitnessUtxo: true });
|
|
2035
2265
|
child.addInput(findP2AOutput(parent));
|
|
2036
2266
|
const estimator = TxWeightEstimator.create().addP2AInput();
|
|
2037
2267
|
for (const _ of fundingCoins) {
|
|
@@ -2079,7 +2309,7 @@ function buildForfeitTx(inputs, forfeitPkScript, txLocktime) {
|
|
|
2079
2309
|
);
|
|
2080
2310
|
}
|
|
2081
2311
|
function buildForfeitTxWithOutput(inputs, output, txLocktime) {
|
|
2082
|
-
const tx = new
|
|
2312
|
+
const tx = new chunk57636V35_cjs.Transaction({
|
|
2083
2313
|
version: 3,
|
|
2084
2314
|
lockTime: txLocktime
|
|
2085
2315
|
});
|
|
@@ -2155,7 +2385,7 @@ function validateVtxoTxGraph(graph, roundTransaction, sweepTapTreeRoot) {
|
|
|
2155
2385
|
if (previousScriptKey.length !== 32) {
|
|
2156
2386
|
throw new Error(`parent output ${childIndex} has invalid script`);
|
|
2157
2387
|
}
|
|
2158
|
-
const cosigners =
|
|
2388
|
+
const cosigners = chunk57636V35_cjs.getArkPsbtFields(child.root, 0, chunk57636V35_cjs.CosignerPublicKey);
|
|
2159
2389
|
if (cosigners.length === 0) {
|
|
2160
2390
|
throw ErrMissingCosignersPublicKeys;
|
|
2161
2391
|
}
|
|
@@ -2213,7 +2443,7 @@ var EmulatorPacket = class _EmulatorPacket {
|
|
|
2213
2443
|
return new _EmulatorPacket(entries);
|
|
2214
2444
|
}
|
|
2215
2445
|
static fromBytes(data) {
|
|
2216
|
-
const reader = new
|
|
2446
|
+
const reader = new chunk3KW4TWP2_cjs.BufferReader(data);
|
|
2217
2447
|
const entryCount = reader.readCompactSize();
|
|
2218
2448
|
const entries = [];
|
|
2219
2449
|
for (let i = 0; i < entryCount; i++) {
|
|
@@ -2231,7 +2461,7 @@ var EmulatorPacket = class _EmulatorPacket {
|
|
|
2231
2461
|
return _EmulatorPacket.PACKET_TYPE;
|
|
2232
2462
|
}
|
|
2233
2463
|
serialize() {
|
|
2234
|
-
const writer = new
|
|
2464
|
+
const writer = new chunk3KW4TWP2_cjs.BufferWriter();
|
|
2235
2465
|
writer.writeCompactSize(this.entries.length);
|
|
2236
2466
|
for (const entry of this.entries) {
|
|
2237
2467
|
writer.writeUint16LE(entry.vin);
|
|
@@ -2318,7 +2548,7 @@ var Extension = class _Extension {
|
|
|
2318
2548
|
`expected magic prefix ${base.hex.encode(ARKADE_MAGIC)}, got ${base.hex.encode(payload.slice(0, Math.min(payload.length, ARKADE_MAGIC.length)))}`
|
|
2319
2549
|
);
|
|
2320
2550
|
}
|
|
2321
|
-
const reader = new
|
|
2551
|
+
const reader = new chunk3KW4TWP2_cjs.BufferReader(payload.slice(ARKADE_MAGIC.length));
|
|
2322
2552
|
const packets = [];
|
|
2323
2553
|
while (reader.remaining() > 0) {
|
|
2324
2554
|
const packetType = reader.readByte();
|
|
@@ -2392,7 +2622,7 @@ var Extension = class _Extension {
|
|
|
2392
2622
|
*/
|
|
2393
2623
|
getAssetPacket() {
|
|
2394
2624
|
for (const p of this.packets) {
|
|
2395
|
-
if (p instanceof
|
|
2625
|
+
if (p instanceof chunk3KW4TWP2_cjs.Packet) {
|
|
2396
2626
|
return p;
|
|
2397
2627
|
}
|
|
2398
2628
|
}
|
|
@@ -2430,8 +2660,8 @@ var Extension = class _Extension {
|
|
|
2430
2660
|
};
|
|
2431
2661
|
function parsePacket(packetType, data) {
|
|
2432
2662
|
switch (packetType) {
|
|
2433
|
-
case
|
|
2434
|
-
return
|
|
2663
|
+
case chunk3KW4TWP2_cjs.Packet.PACKET_TYPE:
|
|
2664
|
+
return chunk3KW4TWP2_cjs.Packet.fromBytes(data);
|
|
2435
2665
|
case EmulatorPacket.PACKET_TYPE:
|
|
2436
2666
|
return EmulatorPacket.fromBytes(data);
|
|
2437
2667
|
default:
|
|
@@ -2478,16 +2708,16 @@ function buildOpReturnScript(data) {
|
|
|
2478
2708
|
}
|
|
2479
2709
|
return script;
|
|
2480
2710
|
}
|
|
2481
|
-
var ErrOffchainOutputNotFound = (address) => new
|
|
2482
|
-
var ErrInvalidAssetOutputAmount = (got, want, assetId) => new
|
|
2711
|
+
var ErrOffchainOutputNotFound = (address) => new chunk57636V35_cjs.ServerResponseMismatchError(`offchain send output not found: ${address}`);
|
|
2712
|
+
var ErrInvalidAssetOutputAmount = (got, want, assetId) => new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
2483
2713
|
`invalid asset output amount for ${assetId}: got ${got}, want ${want}`
|
|
2484
2714
|
);
|
|
2485
|
-
var ErrAssetGroupNotFound = (assetId) => new
|
|
2486
|
-
var ErrAssetOutputNotFound = (assetId, outputIndex) => new
|
|
2715
|
+
var ErrAssetGroupNotFound = (assetId) => new chunk57636V35_cjs.ServerResponseMismatchError(`asset group not found in batch leaf: ${assetId}`);
|
|
2716
|
+
var ErrAssetOutputNotFound = (assetId, outputIndex) => new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
2487
2717
|
`asset output not found in asset group ${assetId} at index ${outputIndex}`
|
|
2488
2718
|
);
|
|
2489
|
-
var ErrOnchainOutputNotFound = (address) => new
|
|
2490
|
-
var ErrUnvalidatedOffchainOutput = (address) => new
|
|
2719
|
+
var ErrOnchainOutputNotFound = (address) => new chunk57636V35_cjs.ServerResponseMismatchError(`onchain output not found: ${address}`);
|
|
2720
|
+
var ErrUnvalidatedOffchainOutput = (address) => new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
2491
2721
|
`offchain output ${address} cannot be validated: virtual output tree signing did not run`
|
|
2492
2722
|
);
|
|
2493
2723
|
var ErrInvalidOnchainOutputAmount = (address) => new Error(`invalid onchain output amount: ${address}`);
|
|
@@ -2496,7 +2726,7 @@ var ErrInvalidOffchainOutputAmount = (address) => new Error(`invalid offchain ou
|
|
|
2496
2726
|
function assertFinalCommitmentMatchesValidated(finalCommitmentTx, validatedCommitmentTxid, context) {
|
|
2497
2727
|
if (!validatedCommitmentTxid) return;
|
|
2498
2728
|
if (finalCommitmentTx.id === validatedCommitmentTxid) return;
|
|
2499
|
-
throw new
|
|
2729
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
2500
2730
|
`${context}: finalization commitment tx ${finalCommitmentTx.id} differs from the validated commitment tx ${validatedCommitmentTxid}`
|
|
2501
2731
|
);
|
|
2502
2732
|
}
|
|
@@ -2506,7 +2736,7 @@ function validateBatchRecipients(commitmentTx, vtxoTreeLeaves, recipients, netwo
|
|
|
2506
2736
|
for (const recipient of recipients) {
|
|
2507
2737
|
let arkAddress;
|
|
2508
2738
|
try {
|
|
2509
|
-
arkAddress =
|
|
2739
|
+
arkAddress = chunk57636V35_cjs.ArkAddress.decode(recipient.address);
|
|
2510
2740
|
} catch {
|
|
2511
2741
|
validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
|
|
2512
2742
|
continue;
|
|
@@ -2518,7 +2748,7 @@ function validateBatchRecipientsWithoutTree(commitmentTx, recipients, network) {
|
|
|
2518
2748
|
const usedOnchainOutputs = /* @__PURE__ */ new Set();
|
|
2519
2749
|
for (const recipient of recipients) {
|
|
2520
2750
|
try {
|
|
2521
|
-
|
|
2751
|
+
chunk57636V35_cjs.ArkAddress.decode(recipient.address);
|
|
2522
2752
|
} catch {
|
|
2523
2753
|
validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
|
|
2524
2754
|
continue;
|
|
@@ -2751,7 +2981,7 @@ function assetMintResolver() {
|
|
|
2751
2981
|
if (!tx.assets?.length || !tx.key.arkTxid) return void 0;
|
|
2752
2982
|
const minted = tx.assets.filter((a) => {
|
|
2753
2983
|
try {
|
|
2754
|
-
return base.hex.encode(
|
|
2984
|
+
return base.hex.encode(chunk3KW4TWP2_cjs.AssetId.fromString(a.assetId).txid) === tx.key.arkTxid;
|
|
2755
2985
|
} catch {
|
|
2756
2986
|
return false;
|
|
2757
2987
|
}
|
|
@@ -2794,7 +3024,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
2794
3024
|
const existing = inputsByAssetId.get(asset.assetId);
|
|
2795
3025
|
inputsByAssetId.set(asset.assetId, [
|
|
2796
3026
|
...existing ?? [],
|
|
2797
|
-
|
|
3027
|
+
chunk3KW4TWP2_cjs.AssetInput.create(inputIndex, asset.amount)
|
|
2798
3028
|
]);
|
|
2799
3029
|
}
|
|
2800
3030
|
}
|
|
@@ -2806,7 +3036,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
2806
3036
|
const existing = outputsByAssetId.get(asset.assetId);
|
|
2807
3037
|
outputsByAssetId.set(asset.assetId, [
|
|
2808
3038
|
...existing ?? [],
|
|
2809
|
-
|
|
3039
|
+
chunk3KW4TWP2_cjs.AssetOutput.create(outputIndex, asset.amount)
|
|
2810
3040
|
]);
|
|
2811
3041
|
}
|
|
2812
3042
|
}
|
|
@@ -2817,7 +3047,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
2817
3047
|
const existing = outputsByAssetId.get(asset.assetId);
|
|
2818
3048
|
outputsByAssetId.set(asset.assetId, [
|
|
2819
3049
|
...existing ?? [],
|
|
2820
|
-
|
|
3050
|
+
chunk3KW4TWP2_cjs.AssetOutput.create(outputIndex, asset.amount)
|
|
2821
3051
|
]);
|
|
2822
3052
|
}
|
|
2823
3053
|
}
|
|
@@ -2826,11 +3056,11 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
2826
3056
|
for (const assetIdStr of allAssetIds) {
|
|
2827
3057
|
const inputs = inputsByAssetId.get(assetIdStr);
|
|
2828
3058
|
const outputs = outputsByAssetId.get(assetIdStr);
|
|
2829
|
-
const assetId =
|
|
2830
|
-
const group =
|
|
3059
|
+
const assetId = chunk3KW4TWP2_cjs.AssetId.fromString(assetIdStr);
|
|
3060
|
+
const group = chunk3KW4TWP2_cjs.AssetGroup.create(assetId, null, inputs ?? [], outputs ?? [], []);
|
|
2831
3061
|
groups.push(group);
|
|
2832
3062
|
}
|
|
2833
|
-
return
|
|
3063
|
+
return chunk3KW4TWP2_cjs.Packet.create(groups);
|
|
2834
3064
|
}
|
|
2835
3065
|
function selectCoinsWithAsset(coins, assetId, requiredAmount) {
|
|
2836
3066
|
const coinsWithAsset = coins.filter((coin) => coin.assets?.some((a) => a.assetId === assetId));
|
|
@@ -2867,7 +3097,7 @@ function selectedCoinsToAssetInputs(selectedCoins) {
|
|
|
2867
3097
|
}
|
|
2868
3098
|
function toXOnlySignerHex(pubkeyHex) {
|
|
2869
3099
|
const bytes = base.hex.decode(pubkeyHex);
|
|
2870
|
-
if (bytes.length === 32 || bytes.length === 33) return base.hex.encode(
|
|
3100
|
+
if (bytes.length === 32 || bytes.length === 33) return base.hex.encode(chunk3OKEUDHU_cjs.toXOnly(bytes, "signer key"));
|
|
2871
3101
|
throw new Error(`invalid signer pubkey length: expected 32 or 33 bytes, got ${bytes.length}`);
|
|
2872
3102
|
}
|
|
2873
3103
|
function signerSetFromInfo(info) {
|
|
@@ -2914,13 +3144,13 @@ var toTimelock = (value) => ({
|
|
|
2914
3144
|
var toSeconds = (t) => t.type === "seconds" ? t.value : t.value * NOMINAL_BLOCK_SECONDS;
|
|
2915
3145
|
function assertTimelockInPolicy(timelock, policy, label, overrideOption) {
|
|
2916
3146
|
if (policy.requireSeconds && timelock.type === "blocks") {
|
|
2917
|
-
throw new
|
|
3147
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
2918
3148
|
`${label} rejected: block-typed timelocks are not accepted (got ${timelock.value})`
|
|
2919
3149
|
);
|
|
2920
3150
|
}
|
|
2921
3151
|
const seconds = toSeconds(timelock);
|
|
2922
3152
|
if (seconds < policy.minSeconds) {
|
|
2923
|
-
throw new
|
|
3153
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
2924
3154
|
`${label} rejected: ${timelock.value} ${timelock.type} is below the ${policy.minSeconds}s floor; pass ${overrideOption}: ${seconds}n to Wallet.create to lower it`
|
|
2925
3155
|
);
|
|
2926
3156
|
}
|
|
@@ -2941,7 +3171,7 @@ function resolveBatchExpiryPolicy(network, overrides) {
|
|
|
2941
3171
|
}
|
|
2942
3172
|
function assertValidBatchExpiry(batchExpiry, policy) {
|
|
2943
3173
|
if (policy.advertisedVtxoTreeExpiry !== void 0 && batchExpiry !== policy.advertisedVtxoTreeExpiry) {
|
|
2944
|
-
throw new
|
|
3174
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
2945
3175
|
`batch expiry rejected: ${batchExpiry} does not match the advertised vtxoTreeExpiry ${policy.advertisedVtxoTreeExpiry}`
|
|
2946
3176
|
);
|
|
2947
3177
|
}
|
|
@@ -2971,21 +3201,21 @@ function resolveCheckpointExitDelayPolicy(network, overrides) {
|
|
|
2971
3201
|
function assertValidServerUnrollScript(checkpointTapscript, policy) {
|
|
2972
3202
|
let script;
|
|
2973
3203
|
try {
|
|
2974
|
-
script =
|
|
3204
|
+
script = chunk57636V35_cjs.CSVMultisigTapscript.decode(base.hex.decode(checkpointTapscript));
|
|
2975
3205
|
} catch (e) {
|
|
2976
|
-
throw new
|
|
3206
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
2977
3207
|
`checkpoint exit delay rejected: invalid checkpointTapscript from server (${e instanceof Error ? e.message : String(e)})`
|
|
2978
3208
|
);
|
|
2979
3209
|
}
|
|
2980
3210
|
if (policy.advertisedForfeitPubkey !== void 0) {
|
|
2981
3211
|
const { pubkeys } = script.params;
|
|
2982
3212
|
if (pubkeys.length !== 1) {
|
|
2983
|
-
throw new
|
|
3213
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
2984
3214
|
`checkpoint exit delay rejected: checkpointTapscript must commit to exactly one pubkey, got ${pubkeys.length} [${pubkeys.map(base.hex.encode).join(", ")}]`
|
|
2985
3215
|
);
|
|
2986
3216
|
}
|
|
2987
3217
|
if (!utils_js.equalBytes(pubkeys[0], policy.advertisedForfeitPubkey)) {
|
|
2988
|
-
throw new
|
|
3218
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
2989
3219
|
`checkpoint exit delay rejected: checkpointTapscript pubkey ${base.hex.encode(pubkeys[0])} does not match the advertised forfeitPubkey ${base.hex.encode(policy.advertisedForfeitPubkey)}`
|
|
2990
3220
|
);
|
|
2991
3221
|
}
|
|
@@ -3029,8 +3259,8 @@ function buildOffchainTx(inputs, outputs, serverUnrollScript) {
|
|
|
3029
3259
|
function buildVirtualTx(inputs, outputs) {
|
|
3030
3260
|
let lockTime = 0n;
|
|
3031
3261
|
for (const input of inputs) {
|
|
3032
|
-
const tapscript =
|
|
3033
|
-
if (
|
|
3262
|
+
const tapscript = chunk57636V35_cjs.decodeTapscript(chunk57636V35_cjs.scriptFromTapLeafScript(input.tapLeafScript));
|
|
3263
|
+
if (chunk57636V35_cjs.CLTVMultisigTapscript.is(tapscript)) {
|
|
3034
3264
|
if (lockTime !== 0n) {
|
|
3035
3265
|
if (isSeconds(lockTime) !== isSeconds(tapscript.params.absoluteTimelock)) {
|
|
3036
3266
|
throw new Error("cannot mix seconds and blocks locktime");
|
|
@@ -3041,7 +3271,7 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
3041
3271
|
}
|
|
3042
3272
|
}
|
|
3043
3273
|
}
|
|
3044
|
-
const tx = new
|
|
3274
|
+
const tx = new chunk57636V35_cjs.Transaction({
|
|
3045
3275
|
version: 3,
|
|
3046
3276
|
lockTime: Number(lockTime)
|
|
3047
3277
|
});
|
|
@@ -3051,12 +3281,12 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
3051
3281
|
index: input.vout,
|
|
3052
3282
|
sequence: lockTime ? btcSigner.DEFAULT_SEQUENCE - 1 : void 0,
|
|
3053
3283
|
witnessUtxo: {
|
|
3054
|
-
script:
|
|
3284
|
+
script: chunk57636V35_cjs.VtxoScript.decode(input.tapTree).pkScript,
|
|
3055
3285
|
amount: BigInt(input.value)
|
|
3056
3286
|
},
|
|
3057
3287
|
tapLeafScript: [input.tapLeafScript]
|
|
3058
3288
|
});
|
|
3059
|
-
|
|
3289
|
+
chunk57636V35_cjs.setArkPsbtField(tx, i, chunk57636V35_cjs.VtxoTaprootTree, input.tapTree);
|
|
3060
3290
|
}
|
|
3061
3291
|
for (const output of outputs) {
|
|
3062
3292
|
tx.addOutput(output);
|
|
@@ -3065,8 +3295,8 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
3065
3295
|
return tx;
|
|
3066
3296
|
}
|
|
3067
3297
|
function buildCheckpointTx(vtxo, serverUnrollScript) {
|
|
3068
|
-
const collaborativeClosure =
|
|
3069
|
-
const checkpointVtxoScript = new
|
|
3298
|
+
const collaborativeClosure = chunk57636V35_cjs.decodeTapscript(chunk57636V35_cjs.scriptFromTapLeafScript(vtxo.tapLeafScript));
|
|
3299
|
+
const checkpointVtxoScript = new chunk57636V35_cjs.VtxoScript([
|
|
3070
3300
|
serverUnrollScript.script,
|
|
3071
3301
|
collaborativeClosure.script
|
|
3072
3302
|
]);
|
|
@@ -3142,7 +3372,7 @@ function verifyTapscriptSignatures(tx, inputIndex, requiredSigners, excludePubke
|
|
|
3142
3372
|
const sighashType = signature.length === 65 ? signature[64] : btcSigner.SigHash.DEFAULT;
|
|
3143
3373
|
const sig = signature.subarray(0, 64);
|
|
3144
3374
|
if (!allowedSighashTypes.includes(sighashType)) {
|
|
3145
|
-
const sighashName =
|
|
3375
|
+
const sighashName = chunk57636V35_cjs.formatSighash(sighashType);
|
|
3146
3376
|
throw new Error(
|
|
3147
3377
|
`Unallowed sighash type ${sighashName} for input ${inputIndex}, pubkey ${pubKeyHex}.`
|
|
3148
3378
|
);
|
|
@@ -3216,7 +3446,7 @@ function combineTapscriptSigs(signedTx, originalTx) {
|
|
|
3216
3446
|
}
|
|
3217
3447
|
function isValidArkAddress(address) {
|
|
3218
3448
|
try {
|
|
3219
|
-
|
|
3449
|
+
chunk57636V35_cjs.ArkAddress.decode(address);
|
|
3220
3450
|
return true;
|
|
3221
3451
|
} catch (e) {
|
|
3222
3452
|
return false;
|
|
@@ -3224,16 +3454,16 @@ function isValidArkAddress(address) {
|
|
|
3224
3454
|
}
|
|
3225
3455
|
function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, context) {
|
|
3226
3456
|
if (serverCheckpointTxs.length !== expectedCheckpoints.length) {
|
|
3227
|
-
throw new
|
|
3457
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
3228
3458
|
`${context} returned ${serverCheckpointTxs.length} checkpoints, expected ${expectedCheckpoints.length}`
|
|
3229
3459
|
);
|
|
3230
3460
|
}
|
|
3231
3461
|
const byTxid = new Map(expectedCheckpoints.map((c) => [c.id, c]));
|
|
3232
3462
|
return serverCheckpointTxs.map((encoded, index) => {
|
|
3233
|
-
const server =
|
|
3463
|
+
const server = chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
|
|
3234
3464
|
const local = byTxid.get(server.id);
|
|
3235
3465
|
if (!local) {
|
|
3236
|
-
throw new
|
|
3466
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
3237
3467
|
`${context} checkpoint ${index} txid ${server.id} does not match any submitted checkpoint`
|
|
3238
3468
|
);
|
|
3239
3469
|
}
|
|
@@ -3243,14 +3473,14 @@ function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, contex
|
|
|
3243
3473
|
}
|
|
3244
3474
|
function assertSubmittedArkTxid(response, signedArkTx, context) {
|
|
3245
3475
|
if (response.arkTxid !== signedArkTx.id) {
|
|
3246
|
-
throw new
|
|
3476
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
3247
3477
|
`${context} returned ark txid ${response.arkTxid}, expected ${signedArkTx.id}`
|
|
3248
3478
|
);
|
|
3249
3479
|
}
|
|
3250
3480
|
if (response.finalArkTx === void 0) return;
|
|
3251
|
-
const finalTxid =
|
|
3481
|
+
const finalTxid = chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx)).id;
|
|
3252
3482
|
if (finalTxid !== signedArkTx.id) {
|
|
3253
|
-
throw new
|
|
3483
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
3254
3484
|
`${context} returned final ark tx ${finalTxid}, expected ${signedArkTx.id}`
|
|
3255
3485
|
);
|
|
3256
3486
|
}
|
|
@@ -3269,10 +3499,10 @@ function assertServerSignedLeaf(serverTx, localTx, inputIndex, serverPubkeyHex,
|
|
|
3269
3499
|
[serverPubkeyHex],
|
|
3270
3500
|
void 0,
|
|
3271
3501
|
void 0,
|
|
3272
|
-
payment_js.tapLeafHash(
|
|
3502
|
+
payment_js.tapLeafHash(chunk57636V35_cjs.scriptFromTapLeafScript(leaf))
|
|
3273
3503
|
);
|
|
3274
3504
|
} catch (error) {
|
|
3275
|
-
throw new
|
|
3505
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
3276
3506
|
`${context}: input ${inputIndex} is not signed by the server on the leaf being spent (${error instanceof Error ? error.message : String(error)})`
|
|
3277
3507
|
);
|
|
3278
3508
|
}
|
|
@@ -3281,20 +3511,20 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
|
|
|
3281
3511
|
const byOutpoint = new Map(inputs.map((input) => [`${input.txid}:${input.vout}`, input]));
|
|
3282
3512
|
for (const [index, checkpoint] of checkpoints.entries()) {
|
|
3283
3513
|
if (checkpoint.inputsLength !== 1) {
|
|
3284
|
-
throw new
|
|
3514
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
3285
3515
|
`${context}: checkpoint ${index} spends ${checkpoint.inputsLength} inputs, expected 1`
|
|
3286
3516
|
);
|
|
3287
3517
|
}
|
|
3288
3518
|
const spent = checkpoint.getInput(0);
|
|
3289
3519
|
if (!spent.txid || spent.index === void 0) {
|
|
3290
|
-
throw new
|
|
3520
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
3291
3521
|
`${context}: checkpoint ${index} has no input outpoint`
|
|
3292
3522
|
);
|
|
3293
3523
|
}
|
|
3294
3524
|
const outpoint = `${base.hex.encode(spent.txid)}:${spent.index}`;
|
|
3295
3525
|
const input = byOutpoint.get(outpoint);
|
|
3296
3526
|
if (!input) {
|
|
3297
|
-
throw new
|
|
3527
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
3298
3528
|
`${context}: checkpoint ${index} spends ${outpoint}, which is not one of the requested virtual outputs`
|
|
3299
3529
|
);
|
|
3300
3530
|
}
|
|
@@ -3302,7 +3532,7 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
|
|
|
3302
3532
|
(unroll) => buildCheckpointTx(input, unroll).tx.id === checkpoint.id
|
|
3303
3533
|
);
|
|
3304
3534
|
if (!rebuilt) {
|
|
3305
|
-
throw new
|
|
3535
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
3306
3536
|
`${context}: checkpoint ${index} txid ${checkpoint.id} differs from the checkpoint built locally for ${outpoint}`
|
|
3307
3537
|
);
|
|
3308
3538
|
}
|
|
@@ -3328,9 +3558,9 @@ async function submitOffchainTx(provider, offchainTx, signer, hooks, options) {
|
|
|
3328
3558
|
const matched = matchServerCheckpoints(signedCheckpointTxs, offchainTx.checkpoints, "submitTx");
|
|
3329
3559
|
matched.forEach(({ server }, index) => {
|
|
3330
3560
|
try {
|
|
3331
|
-
|
|
3561
|
+
chunk57636V35_cjs.assertAllowedSighashTypes(server);
|
|
3332
3562
|
} catch (error) {
|
|
3333
|
-
throw new
|
|
3563
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
3334
3564
|
`submitTx checkpoint ${index}: ${error instanceof Error ? error.message : String(error)}`
|
|
3335
3565
|
);
|
|
3336
3566
|
}
|
|
@@ -3338,12 +3568,12 @@ async function submitOffchainTx(provider, offchainTx, signer, hooks, options) {
|
|
|
3338
3568
|
const verify = options?.verifyServerSignatures;
|
|
3339
3569
|
if (verify) {
|
|
3340
3570
|
if (response.finalArkTx === void 0) {
|
|
3341
|
-
throw new
|
|
3571
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
3342
3572
|
"submitTx: server returned no final ark tx to verify its signatures against"
|
|
3343
3573
|
);
|
|
3344
3574
|
}
|
|
3345
|
-
const finalArkTx =
|
|
3346
|
-
const serverPubkeyHex = base.hex.encode(
|
|
3575
|
+
const finalArkTx = chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx));
|
|
3576
|
+
const serverPubkeyHex = base.hex.encode(chunk3OKEUDHU_cjs.toXOnly(verify.serverPubkey, "server key"));
|
|
3347
3577
|
for (let i = 0; i < offchainTx.arkTx.inputsLength; i++) {
|
|
3348
3578
|
assertServerSignedLeaf(
|
|
3349
3579
|
finalArkTx,
|
|
@@ -3399,12 +3629,12 @@ function claimWithPreimageIdentity(identity, preimage) {
|
|
|
3399
3629
|
return {
|
|
3400
3630
|
...identity,
|
|
3401
3631
|
sign: async (tx, inputIndexes) => {
|
|
3402
|
-
const signed =
|
|
3632
|
+
const signed = chunk57636V35_cjs.Transaction.fromPSBT(
|
|
3403
3633
|
(await identity.sign(tx.clone(), inputIndexes)).toPSBT()
|
|
3404
3634
|
);
|
|
3405
3635
|
const indexes = inputIndexes ?? Array.from({ length: signed.inputsLength }, (_, i) => i);
|
|
3406
3636
|
for (const index of indexes) {
|
|
3407
|
-
|
|
3637
|
+
chunk57636V35_cjs.setArkPsbtField(signed, index, chunk57636V35_cjs.ConditionWitness, [preimage]);
|
|
3408
3638
|
}
|
|
3409
3639
|
return signed;
|
|
3410
3640
|
}
|
|
@@ -3596,7 +3826,7 @@ function extendCoinWithTapscript(boardingTapscript, utxo) {
|
|
|
3596
3826
|
};
|
|
3597
3827
|
}
|
|
3598
3828
|
function deriveContractTapscripts(contract) {
|
|
3599
|
-
const handler =
|
|
3829
|
+
const handler = chunk3OKEUDHU_cjs.contractHandlers.get(contract.type);
|
|
3600
3830
|
if (!handler) {
|
|
3601
3831
|
throw new Error(`No handler for contract type '${contract.type}'`);
|
|
3602
3832
|
}
|
|
@@ -3667,7 +3897,7 @@ function getRandomId() {
|
|
|
3667
3897
|
}
|
|
3668
3898
|
function isValidArkAddress2(address) {
|
|
3669
3899
|
try {
|
|
3670
|
-
|
|
3900
|
+
chunk57636V35_cjs.ArkAddress.decode(address);
|
|
3671
3901
|
return true;
|
|
3672
3902
|
} catch (e) {
|
|
3673
3903
|
return false;
|
|
@@ -3695,7 +3925,7 @@ function assertRecipientArkAddress(encoded, address, context) {
|
|
|
3695
3925
|
function assertTapTreeDerivesAddress(encoded, tapTree, address) {
|
|
3696
3926
|
let derived;
|
|
3697
3927
|
try {
|
|
3698
|
-
derived =
|
|
3928
|
+
derived = chunk57636V35_cjs.VtxoScript.decode(tapTree).pkScript;
|
|
3699
3929
|
} catch (e) {
|
|
3700
3930
|
throw new Error(
|
|
3701
3931
|
`Invalid tapTree for ${encoded}: ${e instanceof Error ? e.message : String(e)}`
|
|
@@ -3712,7 +3942,7 @@ function validateRecipients(recipients, dustAmount, context) {
|
|
|
3712
3942
|
for (const recipient of recipients) {
|
|
3713
3943
|
let address;
|
|
3714
3944
|
try {
|
|
3715
|
-
address =
|
|
3945
|
+
address = chunk57636V35_cjs.ArkAddress.decode(recipient.address);
|
|
3716
3946
|
} catch (e) {
|
|
3717
3947
|
throw new Error(`Invalid Arkade address: ${recipient.address}`);
|
|
3718
3948
|
}
|
|
@@ -3737,7 +3967,7 @@ function validateRecipients(recipients, dustAmount, context) {
|
|
|
3737
3967
|
|
|
3738
3968
|
// src/contracts/spendability.ts
|
|
3739
3969
|
function isContractGenericallySpendable(contract) {
|
|
3740
|
-
return
|
|
3970
|
+
return chunk3OKEUDHU_cjs.contractHandlers.get(contract.type)?.isGenericallySpendable?.(contract) === true;
|
|
3741
3971
|
}
|
|
3742
3972
|
function gatedContracts(contracts) {
|
|
3743
3973
|
const gated = /* @__PURE__ */ new Map();
|
|
@@ -3750,7 +3980,7 @@ function gateExclusion(gated) {
|
|
|
3750
3980
|
return (vtxo) => {
|
|
3751
3981
|
const type = vtxo.script === void 0 ? void 0 : gated.get(vtxo.script);
|
|
3752
3982
|
if (type === void 0) return void 0;
|
|
3753
|
-
if (!
|
|
3983
|
+
if (!chunk3OKEUDHU_cjs.contractHandlers.has(type)) {
|
|
3754
3984
|
return `at ${vtxo.script} (contract type '${type}') has no handler registered in this build`;
|
|
3755
3985
|
}
|
|
3756
3986
|
return `at ${vtxo.script} (contract type '${type}') is not generically spendable`;
|
|
@@ -3786,7 +4016,7 @@ function selectPendingRecoveryOutpoints(contractsWithVtxos, signerSet, nowSecond
|
|
|
3786
4016
|
continue;
|
|
3787
4017
|
}
|
|
3788
4018
|
for (const v of vtxos) {
|
|
3789
|
-
if (!
|
|
4019
|
+
if (!chunk57636V35_cjs.hasTerminalSpend(v) && !v.isSwept && !v.isUnrolled) {
|
|
3790
4020
|
out.add(`${v.txid}:${v.vout}`);
|
|
3791
4021
|
}
|
|
3792
4022
|
}
|
|
@@ -3821,10 +4051,10 @@ function byValueDescending(vtxos) {
|
|
|
3821
4051
|
return [...vtxos].sort((a, b) => b.value - a.value);
|
|
3822
4052
|
}
|
|
3823
4053
|
async function fetchTimeHeight(wallet) {
|
|
3824
|
-
return
|
|
4054
|
+
return chunk57636V35_cjs.resolveTimeHeight(wallet.onchainProvider);
|
|
3825
4055
|
}
|
|
3826
4056
|
function canMigrateBySend(vtxo, now) {
|
|
3827
|
-
if (!
|
|
4057
|
+
if (!chunk57636V35_cjs.canSpendOffchain(vtxo, now)) return false;
|
|
3828
4058
|
return vtxo.expiresAt !== void 0 || vtxo.expiresAtHeight !== void 0;
|
|
3829
4059
|
}
|
|
3830
4060
|
function byExpiryAscending(vtxos, now) {
|
|
@@ -3832,7 +4062,7 @@ function byExpiryAscending(vtxos, now) {
|
|
|
3832
4062
|
if (vtxo.isSwept) return -Infinity;
|
|
3833
4063
|
if (vtxo.expiresAt !== void 0) return vtxo.expiresAt.getTime();
|
|
3834
4064
|
if (vtxo.expiresAtHeight !== void 0) {
|
|
3835
|
-
return
|
|
4065
|
+
return chunk57636V35_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
|
|
3836
4066
|
}
|
|
3837
4067
|
return Infinity;
|
|
3838
4068
|
};
|
|
@@ -3859,7 +4089,7 @@ function priceSettlementInputs(vtxos, estimator) {
|
|
|
3859
4089
|
const payable = [];
|
|
3860
4090
|
const net = /* @__PURE__ */ new Map();
|
|
3861
4091
|
for (const vtxo of vtxos) {
|
|
3862
|
-
const inputFee = estimator.evalOffchainInput(
|
|
4092
|
+
const inputFee = estimator.evalOffchainInput(chunk57636V35_cjs.toOffchainInputFeeParams(vtxo));
|
|
3863
4093
|
if (inputFee.satoshis >= vtxo.value) {
|
|
3864
4094
|
continue;
|
|
3865
4095
|
}
|
|
@@ -3885,7 +4115,7 @@ function deductOffchainOutputFee(subtotal, estimator, arkAddress) {
|
|
|
3885
4115
|
}
|
|
3886
4116
|
const outputFee = estimator.evalOffchainOutput({
|
|
3887
4117
|
amount: subtotal,
|
|
3888
|
-
script: base.hex.encode(
|
|
4118
|
+
script: base.hex.encode(chunk57636V35_cjs.ArkAddress.decode(arkAddress).pkScript)
|
|
3889
4119
|
});
|
|
3890
4120
|
return subtotal - BigInt(outputFee.satoshis);
|
|
3891
4121
|
}
|
|
@@ -3903,10 +4133,10 @@ var DEFAULT_SETTLEMENT_CONFIG = {
|
|
|
3903
4133
|
};
|
|
3904
4134
|
function getRecoverableVtxos(vtxos, dustAmount, now) {
|
|
3905
4135
|
return vtxos.filter((vtxo) => {
|
|
3906
|
-
if (
|
|
4136
|
+
if (chunk57636V35_cjs.canRecoverOnchain(vtxo, now)) {
|
|
3907
4137
|
return true;
|
|
3908
4138
|
}
|
|
3909
|
-
if (
|
|
4139
|
+
if (chunk57636V35_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
|
|
3910
4140
|
return true;
|
|
3911
4141
|
}
|
|
3912
4142
|
return false;
|
|
@@ -3938,7 +4168,7 @@ function getRecoverableWithSubdust(vtxos, dustAmount, now) {
|
|
|
3938
4168
|
function isVtxoExpiringSoon(vtxo, thresholdMs) {
|
|
3939
4169
|
if (vtxo.isUnrolled) return false;
|
|
3940
4170
|
const realThresholdMs = thresholdMs <= 100 ? DEFAULT_THRESHOLD_MS : thresholdMs;
|
|
3941
|
-
const expiresAt =
|
|
4171
|
+
const expiresAt = chunk57636V35_cjs.normalizeVtxo(vtxo).expiresAt;
|
|
3942
4172
|
if (expiresAt === void 0) return false;
|
|
3943
4173
|
const now = Date.now();
|
|
3944
4174
|
const batchExpiry = expiresAt.getTime();
|
|
@@ -3949,7 +4179,7 @@ function getExpiringAndRecoverableVtxos(vtxos, thresholdMs, dustAmount, now) {
|
|
|
3949
4179
|
return vtxos.filter(
|
|
3950
4180
|
// The leading exclusion covers the `isSubdust` arm too, which is a value
|
|
3951
4181
|
// property and would otherwise re-admit an exited coin on its own.
|
|
3952
|
-
(vtxo) => !vtxo.isUnrolled && (isVtxoExpiringSoon(vtxo, thresholdMs) ||
|
|
4182
|
+
(vtxo) => !vtxo.isUnrolled && (isVtxoExpiringSoon(vtxo, thresholdMs) || chunk57636V35_cjs.canRecoverOnchain(vtxo, now) || isSubdust(vtxo, dustAmount))
|
|
3953
4183
|
);
|
|
3954
4184
|
}
|
|
3955
4185
|
function isMigrationCapable(wallet) {
|
|
@@ -4548,11 +4778,11 @@ var VtxoManager = class _VtxoManager {
|
|
|
4548
4778
|
`Sweep not economical: output ${outputAmount} sats after ${fee} sats fee is below dust (${dustAmount} sats)`
|
|
4549
4779
|
);
|
|
4550
4780
|
}
|
|
4551
|
-
const tx = new
|
|
4781
|
+
const tx = new chunk57636V35_cjs.Transaction();
|
|
4552
4782
|
for (const utxo of expiredUtxos) {
|
|
4553
|
-
const utxoScript =
|
|
4783
|
+
const utxoScript = chunk57636V35_cjs.VtxoScript.decode(utxo.tapTree);
|
|
4554
4784
|
const utxoExitLeaf = utxoScript.leaves.find(
|
|
4555
|
-
(leaf) =>
|
|
4785
|
+
(leaf) => chunk57636V35_cjs.CSVMultisigTapscript.isScriptValid(chunk57636V35_cjs.scriptFromTapLeafScript(leaf)) === true
|
|
4556
4786
|
);
|
|
4557
4787
|
if (!utxoExitLeaf) {
|
|
4558
4788
|
throw new Error(
|
|
@@ -4567,7 +4797,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4567
4797
|
amount: BigInt(utxo.value)
|
|
4568
4798
|
},
|
|
4569
4799
|
tapLeafScript: [utxoExitLeaf],
|
|
4570
|
-
sequence:
|
|
4800
|
+
sequence: chunk57636V35_cjs.getSequence(utxoExitLeaf)
|
|
4571
4801
|
});
|
|
4572
4802
|
}
|
|
4573
4803
|
tx.addOutputAddress(boardingAddress, outputAmount, this.getNetwork());
|
|
@@ -4810,8 +5040,8 @@ var VtxoManager = class _VtxoManager {
|
|
|
4810
5040
|
const cls = classifyAgainstSignerSet(serverPubKey, signerSet, nowSeconds);
|
|
4811
5041
|
if (cls.status === "CURRENT") continue;
|
|
4812
5042
|
const live = vtxos.filter((v) => !v.isUnrolled);
|
|
4813
|
-
const recoverable = live.filter((v) => v.isSwept && !
|
|
4814
|
-
const spendable = live.filter((v) => !
|
|
5043
|
+
const recoverable = live.filter((v) => v.isSwept && !chunk57636V35_cjs.hasTerminalSpend(v));
|
|
5044
|
+
const spendable = live.filter((v) => !chunk57636V35_cjs.hasTerminalSpend(v) && !v.isSwept);
|
|
4815
5045
|
const value = spendable.reduce((sum, v) => sum + v.value, 0);
|
|
4816
5046
|
let recoverableCount = 0;
|
|
4817
5047
|
let recoverableValue = 0;
|
|
@@ -4824,7 +5054,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4824
5054
|
awaitingSweepCount = spendable.length;
|
|
4825
5055
|
awaitingSweepValue = value;
|
|
4826
5056
|
for (const v of spendable) {
|
|
4827
|
-
const exp =
|
|
5057
|
+
const exp = chunk57636V35_cjs.toBatchExpiry(v);
|
|
4828
5058
|
if (exp !== void 0 && (nextSweepEta === void 0 || exp < nextSweepEta)) {
|
|
4829
5059
|
nextSweepEta = exp;
|
|
4830
5060
|
}
|
|
@@ -5085,7 +5315,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5085
5315
|
/** Decodes the boarding tapscript exit path to extract the CSV timelock. */
|
|
5086
5316
|
getBoardingTimelock() {
|
|
5087
5317
|
const wallet = this.getSweepWallet();
|
|
5088
|
-
const exitScript =
|
|
5318
|
+
const exitScript = chunk57636V35_cjs.CSVMultisigTapscript.decode(
|
|
5089
5319
|
base.hex.decode(wallet.boardingTapscript.exitScript)
|
|
5090
5320
|
);
|
|
5091
5321
|
return exitScript.params.timelock;
|
|
@@ -5216,8 +5446,8 @@ var VtxoManager = class _VtxoManager {
|
|
|
5216
5446
|
* or doesn't carry the metadata.
|
|
5217
5447
|
*/
|
|
5218
5448
|
extractSpentOutpoint(error) {
|
|
5219
|
-
const ark =
|
|
5220
|
-
if (!
|
|
5449
|
+
const ark = chunk57636V35_cjs.maybeArkError(error);
|
|
5450
|
+
if (!chunk57636V35_cjs.isArkError(ark, chunk57636V35_cjs.ArkErrorName.VTXO_ALREADY_SPENT)) return void 0;
|
|
5221
5451
|
const raw = ark.metadata?.vtxo_outpoint;
|
|
5222
5452
|
if (typeof raw !== "string") return void 0;
|
|
5223
5453
|
const [txid, voutStr] = raw.split(":");
|
|
@@ -5407,7 +5637,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5407
5637
|
if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
|
|
5408
5638
|
break;
|
|
5409
5639
|
}
|
|
5410
|
-
const inputFee = estimator.evalOffchainInput(
|
|
5640
|
+
const inputFee = estimator.evalOffchainInput(chunk57636V35_cjs.toOffchainInputFeeParams(v));
|
|
5411
5641
|
if (inputFee.satoshis >= v.value) {
|
|
5412
5642
|
continue;
|
|
5413
5643
|
}
|
|
@@ -5427,7 +5657,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5427
5657
|
const arkAddress = await this.wallet.getAddress();
|
|
5428
5658
|
const outputFee = estimator.evalOffchainOutput({
|
|
5429
5659
|
amount: totalAmount,
|
|
5430
|
-
script: base.hex.encode(
|
|
5660
|
+
script: base.hex.encode(chunk57636V35_cjs.ArkAddress.decode(arkAddress).pkScript)
|
|
5431
5661
|
});
|
|
5432
5662
|
totalAmount -= BigInt(outputFee.satoshis);
|
|
5433
5663
|
if (totalAmount < dustAmount) return;
|
|
@@ -5507,7 +5737,7 @@ var ArkNote = class _ArkNote {
|
|
|
5507
5737
|
this.value = value;
|
|
5508
5738
|
this.HRP = HRP;
|
|
5509
5739
|
const preimageHash = utils_js.sha256(this.preimage);
|
|
5510
|
-
this.vtxoScript = new
|
|
5740
|
+
this.vtxoScript = new chunk57636V35_cjs.VtxoScript([noteTapscript(preimageHash)]);
|
|
5511
5741
|
const leaf = this.vtxoScript.leaves[0];
|
|
5512
5742
|
this.txid = base.hex.encode(new Uint8Array(preimageHash).reverse());
|
|
5513
5743
|
this.tapTree = this.vtxoScript.encode();
|
|
@@ -5674,7 +5904,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
5674
5904
|
const privateKey = data.slice(1, 33);
|
|
5675
5905
|
const serverPubKey = data.slice(33, 65);
|
|
5676
5906
|
const sequence = new DataView(data.buffer, data.byteOffset + 65, 4).getUint32(0, false);
|
|
5677
|
-
const csvTimelock =
|
|
5907
|
+
const csvTimelock = chunk57636V35_cjs.sequenceToTimelock(sequence);
|
|
5678
5908
|
return new _ArkadeCash(privateKey, serverPubKey, csvTimelock, decoded.prefix);
|
|
5679
5909
|
}
|
|
5680
5910
|
toString() {
|
|
@@ -5682,7 +5912,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
5682
5912
|
data[0] = _ArkadeCash.Version;
|
|
5683
5913
|
data.set(this._privateKey, 1);
|
|
5684
5914
|
data.set(this._serverPubKey, 33);
|
|
5685
|
-
const sequence =
|
|
5915
|
+
const sequence = chunk57636V35_cjs.timelockToSequence(this.csvTimelock);
|
|
5686
5916
|
new DataView(data.buffer, data.byteOffset + 65, 4).setUint32(0, sequence, false);
|
|
5687
5917
|
const words = base.bech32m.toWords(data);
|
|
5688
5918
|
return base.bech32m.encode(this.hrp, words, 1023);
|
|
@@ -5691,7 +5921,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
5691
5921
|
return SingleKey.fromPrivateKey(this._privateKey);
|
|
5692
5922
|
}
|
|
5693
5923
|
get vtxoScript() {
|
|
5694
|
-
return new
|
|
5924
|
+
return new chunk3OKEUDHU_cjs.DefaultVtxo.Script({
|
|
5695
5925
|
pubKey: this._publicKey,
|
|
5696
5926
|
serverPubKey: this._serverPubKey,
|
|
5697
5927
|
csvTimelock: this.csvTimelock
|
|
@@ -5952,7 +6182,7 @@ async function captureExitBranch(params) {
|
|
|
5952
6182
|
const nonCommitment = ordered.filter((c) => chainTxTypeToChainedExit(c.type) !== 1 /* Commitment */).map((c) => c.txid);
|
|
5953
6183
|
if (nonCommitment.length > 0) {
|
|
5954
6184
|
for (const psbt of await resolver.getVirtualTxs(nonCommitment)) {
|
|
5955
|
-
psbtByTxid.set(
|
|
6185
|
+
psbtByTxid.set(chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
5956
6186
|
}
|
|
5957
6187
|
}
|
|
5958
6188
|
}
|
|
@@ -5995,10 +6225,10 @@ var IndexerExitDataSource = class {
|
|
|
5995
6225
|
while (hasMore) {
|
|
5996
6226
|
const { chain: page, page: meta } = await this.indexer.getVtxoChain(
|
|
5997
6227
|
{ txid: vtxo.txid, vout: vtxo.vout },
|
|
5998
|
-
{ pageIndex, pageSize:
|
|
6228
|
+
{ pageIndex, pageSize: chunk57636V35_cjs.DEFAULT_PAGE_SIZE }
|
|
5999
6229
|
);
|
|
6000
6230
|
chain.push(...page);
|
|
6001
|
-
hasMore = meta ? page.length ===
|
|
6231
|
+
hasMore = meta ? page.length === chunk57636V35_cjs.DEFAULT_PAGE_SIZE : false;
|
|
6002
6232
|
pageIndex++;
|
|
6003
6233
|
}
|
|
6004
6234
|
return chain;
|
|
@@ -6010,12 +6240,12 @@ var IndexerExitDataSource = class {
|
|
|
6010
6240
|
while (hasMore) {
|
|
6011
6241
|
const { txs, page } = await this.indexer.getVirtualTxs(txids, {
|
|
6012
6242
|
pageIndex,
|
|
6013
|
-
pageSize:
|
|
6243
|
+
pageSize: chunk57636V35_cjs.DEFAULT_PAGE_SIZE
|
|
6014
6244
|
});
|
|
6015
6245
|
for (const psbt of txs) {
|
|
6016
|
-
out.set(
|
|
6246
|
+
out.set(chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
6017
6247
|
}
|
|
6018
|
-
hasMore = page ? txs.length ===
|
|
6248
|
+
hasMore = page ? txs.length === chunk57636V35_cjs.DEFAULT_PAGE_SIZE : false;
|
|
6019
6249
|
pageIndex++;
|
|
6020
6250
|
}
|
|
6021
6251
|
return out;
|
|
@@ -6036,7 +6266,7 @@ function chainedTxTypeToChainTxType(t) {
|
|
|
6036
6266
|
}
|
|
6037
6267
|
}
|
|
6038
6268
|
function psbtInputTxids(psbtBase64) {
|
|
6039
|
-
const tx =
|
|
6269
|
+
const tx = chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
|
|
6040
6270
|
const ids = [];
|
|
6041
6271
|
for (let i = 0; i < tx.inputsLength; i++) {
|
|
6042
6272
|
const txid = tx.getInput(i).txid;
|
|
@@ -6395,10 +6625,10 @@ async function resolveArkInfo(arkProvider, walletRepository) {
|
|
|
6395
6625
|
try {
|
|
6396
6626
|
info = await arkProvider.getInfo();
|
|
6397
6627
|
} catch (err) {
|
|
6398
|
-
if (!
|
|
6628
|
+
if (!chunk57636V35_cjs.isRetryableProviderError(err)) throw err;
|
|
6399
6629
|
const snapshot = await loadArkInfoSnapshot(walletRepository);
|
|
6400
6630
|
if (!snapshot) {
|
|
6401
|
-
throw new
|
|
6631
|
+
throw new chunk57636V35_cjs.ProviderUnavailableError(
|
|
6402
6632
|
"Arkade server info is unavailable and no cached snapshot exists",
|
|
6403
6633
|
{ cause: err }
|
|
6404
6634
|
);
|
|
@@ -6788,7 +7018,7 @@ function collectArkTxidsNeedingCreatedAt(vtxos) {
|
|
|
6788
7018
|
return [...txids];
|
|
6789
7019
|
}
|
|
6790
7020
|
async function buildTransactionHistory(vtxos, allBoardingTxs, commitmentsToIgnore, resolveTxCreatedAt) {
|
|
6791
|
-
const fromOldestVtxo = vtxos.map(
|
|
7021
|
+
const fromOldestVtxo = vtxos.map(chunk57636V35_cjs.normalizeVtxo).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
|
|
6792
7022
|
const txidsNeedingCreatedAt = resolveTxCreatedAt ? collectArkTxidsNeedingCreatedAt(fromOldestVtxo) : [];
|
|
6793
7023
|
const resolvedCreatedAt = resolveTxCreatedAt && txidsNeedingCreatedAt.length > 0 ? await resolveTxCreatedAt(txidsNeedingCreatedAt) : /* @__PURE__ */ new Map();
|
|
6794
7024
|
const unmatchedSettledBoardingTxs = allBoardingTxs.filter(isSettledBoardingReceive).sort((a, b) => a.createdAt - b.createdAt);
|
|
@@ -6952,7 +7182,7 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6952
7182
|
const virtualCoins = await this.wallet.getSpendableVtxos({
|
|
6953
7183
|
withRecoverable: false
|
|
6954
7184
|
});
|
|
6955
|
-
const controlAssetRef = params.controlAssetId ?
|
|
7185
|
+
const controlAssetRef = params.controlAssetId ? chunk3KW4TWP2_cjs.AssetRef.fromId(chunk3KW4TWP2_cjs.AssetId.fromString(params.controlAssetId)) : null;
|
|
6956
7186
|
const coinSelection = selectVirtualCoins(virtualCoins, Number(this.wallet.dustAmount));
|
|
6957
7187
|
let totalBtcSelected = 0n;
|
|
6958
7188
|
const assetChanges = /* @__PURE__ */ new Map();
|
|
@@ -6965,8 +7195,8 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6965
7195
|
}
|
|
6966
7196
|
}
|
|
6967
7197
|
const groups = [];
|
|
6968
|
-
const issuedAssetOutput =
|
|
6969
|
-
const issuedAssetGroup =
|
|
7198
|
+
const issuedAssetOutput = chunk3KW4TWP2_cjs.AssetOutput.create(0, params.amount);
|
|
7199
|
+
const issuedAssetGroup = chunk3KW4TWP2_cjs.AssetGroup.create(
|
|
6970
7200
|
null,
|
|
6971
7201
|
controlAssetRef,
|
|
6972
7202
|
[],
|
|
@@ -6981,28 +7211,28 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6981
7211
|
for (const [inputIndex, assets] of assetInputs) {
|
|
6982
7212
|
for (const asset of assets) {
|
|
6983
7213
|
if (asset.assetId !== assetId) continue;
|
|
6984
|
-
changeInputs.push(
|
|
7214
|
+
changeInputs.push(chunk3KW4TWP2_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
6985
7215
|
}
|
|
6986
7216
|
}
|
|
6987
7217
|
groups.push(
|
|
6988
|
-
|
|
6989
|
-
|
|
7218
|
+
chunk3KW4TWP2_cjs.AssetGroup.create(
|
|
7219
|
+
chunk3KW4TWP2_cjs.AssetId.fromString(assetId),
|
|
6990
7220
|
null,
|
|
6991
7221
|
changeInputs,
|
|
6992
|
-
[
|
|
7222
|
+
[chunk3KW4TWP2_cjs.AssetOutput.create(0, amount)],
|
|
6993
7223
|
[]
|
|
6994
7224
|
)
|
|
6995
7225
|
);
|
|
6996
7226
|
}
|
|
6997
7227
|
}
|
|
6998
7228
|
const address = await this.wallet.getAddress();
|
|
6999
|
-
const outputAddress =
|
|
7229
|
+
const outputAddress = chunk57636V35_cjs.ArkAddress.decode(address);
|
|
7000
7230
|
const outputs = [
|
|
7001
7231
|
{
|
|
7002
7232
|
script: outputAddress.pkScript,
|
|
7003
7233
|
amount: BigInt(totalBtcSelected)
|
|
7004
7234
|
},
|
|
7005
|
-
Extension.create([
|
|
7235
|
+
Extension.create([chunk3KW4TWP2_cjs.Packet.create(groups)]).txOut()
|
|
7006
7236
|
];
|
|
7007
7237
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(
|
|
7008
7238
|
coinSelection.inputs,
|
|
@@ -7010,7 +7240,7 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7010
7240
|
);
|
|
7011
7241
|
return {
|
|
7012
7242
|
arkTxId: arkTxid,
|
|
7013
|
-
assetId:
|
|
7243
|
+
assetId: chunk3KW4TWP2_cjs.AssetId.create(arkTxid, 0).toString()
|
|
7014
7244
|
};
|
|
7015
7245
|
}
|
|
7016
7246
|
/**
|
|
@@ -7082,16 +7312,16 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7082
7312
|
for (const [inputIndex, assets] of assetInputs) {
|
|
7083
7313
|
for (const asset of assets) {
|
|
7084
7314
|
if (asset.assetId !== params.assetId) continue;
|
|
7085
|
-
reissueInputs.push(
|
|
7315
|
+
reissueInputs.push(chunk3KW4TWP2_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
7086
7316
|
}
|
|
7087
7317
|
}
|
|
7088
7318
|
const totalAssetAmount = assetToReissueAmount + params.amount;
|
|
7089
|
-
const reissueAssetIdObj =
|
|
7090
|
-
const reissueAssetGroup =
|
|
7319
|
+
const reissueAssetIdObj = chunk3KW4TWP2_cjs.AssetId.fromString(params.assetId);
|
|
7320
|
+
const reissueAssetGroup = chunk3KW4TWP2_cjs.AssetGroup.create(
|
|
7091
7321
|
reissueAssetIdObj,
|
|
7092
7322
|
null,
|
|
7093
7323
|
reissueInputs,
|
|
7094
|
-
[
|
|
7324
|
+
[chunk3KW4TWP2_cjs.AssetOutput.create(0, totalAssetAmount)],
|
|
7095
7325
|
[]
|
|
7096
7326
|
);
|
|
7097
7327
|
const groups = [reissueAssetGroup];
|
|
@@ -7100,27 +7330,27 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7100
7330
|
for (const [inputIndex, assets] of assetInputs) {
|
|
7101
7331
|
for (const asset of assets) {
|
|
7102
7332
|
if (asset.assetId !== assetId) continue;
|
|
7103
|
-
changeInputs.push(
|
|
7333
|
+
changeInputs.push(chunk3KW4TWP2_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
7104
7334
|
}
|
|
7105
7335
|
}
|
|
7106
7336
|
groups.push(
|
|
7107
|
-
|
|
7108
|
-
|
|
7337
|
+
chunk3KW4TWP2_cjs.AssetGroup.create(
|
|
7338
|
+
chunk3KW4TWP2_cjs.AssetId.fromString(assetId),
|
|
7109
7339
|
null,
|
|
7110
7340
|
changeInputs,
|
|
7111
|
-
[
|
|
7341
|
+
[chunk3KW4TWP2_cjs.AssetOutput.create(0, amount)],
|
|
7112
7342
|
[]
|
|
7113
7343
|
)
|
|
7114
7344
|
);
|
|
7115
7345
|
}
|
|
7116
7346
|
const address = await this.wallet.getAddress();
|
|
7117
|
-
const outputAddress =
|
|
7347
|
+
const outputAddress = chunk57636V35_cjs.ArkAddress.decode(address);
|
|
7118
7348
|
const outputs = [
|
|
7119
7349
|
{
|
|
7120
7350
|
script: outputAddress.pkScript,
|
|
7121
7351
|
amount: BigInt(totalBtcSelected)
|
|
7122
7352
|
},
|
|
7123
|
-
Extension.create([
|
|
7353
|
+
Extension.create([chunk3KW4TWP2_cjs.Packet.create(groups)]).txOut()
|
|
7124
7354
|
];
|
|
7125
7355
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
|
|
7126
7356
|
return arkTxid;
|
|
@@ -7187,27 +7417,27 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7187
7417
|
for (const [inputIndex, assets] of assetInputs) {
|
|
7188
7418
|
for (const asset of assets) {
|
|
7189
7419
|
if (asset.assetId !== assetId) continue;
|
|
7190
|
-
changeInputs.push(
|
|
7420
|
+
changeInputs.push(chunk3KW4TWP2_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
7191
7421
|
}
|
|
7192
7422
|
}
|
|
7193
7423
|
groups.push(
|
|
7194
|
-
|
|
7195
|
-
|
|
7424
|
+
chunk3KW4TWP2_cjs.AssetGroup.create(
|
|
7425
|
+
chunk3KW4TWP2_cjs.AssetId.fromString(assetId),
|
|
7196
7426
|
null,
|
|
7197
7427
|
changeInputs,
|
|
7198
|
-
amount > 0n ? [
|
|
7428
|
+
amount > 0n ? [chunk3KW4TWP2_cjs.AssetOutput.create(0, amount)] : [],
|
|
7199
7429
|
[]
|
|
7200
7430
|
)
|
|
7201
7431
|
);
|
|
7202
7432
|
}
|
|
7203
7433
|
const address = await this.wallet.getAddress();
|
|
7204
|
-
const outputAddress =
|
|
7434
|
+
const outputAddress = chunk57636V35_cjs.ArkAddress.decode(address);
|
|
7205
7435
|
const outputs = [
|
|
7206
7436
|
{
|
|
7207
7437
|
script: outputAddress.pkScript,
|
|
7208
7438
|
amount: BigInt(totalBtcSelected)
|
|
7209
7439
|
},
|
|
7210
|
-
Extension.create([
|
|
7440
|
+
Extension.create([chunk3KW4TWP2_cjs.Packet.create(groups)]).txOut()
|
|
7211
7441
|
];
|
|
7212
7442
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
|
|
7213
7443
|
return arkTxid;
|
|
@@ -7232,7 +7462,7 @@ function castMetadata(metadata) {
|
|
|
7232
7462
|
} else {
|
|
7233
7463
|
throw new Error("Invalid metadata value type");
|
|
7234
7464
|
}
|
|
7235
|
-
md.push(
|
|
7465
|
+
md.push(chunk3KW4TWP2_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
|
|
7236
7466
|
}
|
|
7237
7467
|
return md;
|
|
7238
7468
|
}
|
|
@@ -7253,10 +7483,10 @@ var DelegateManagerImpl = class {
|
|
|
7253
7483
|
if (vtxos.length === 0) {
|
|
7254
7484
|
return { delegated: [], failed: [] };
|
|
7255
7485
|
}
|
|
7256
|
-
const destinationScript =
|
|
7486
|
+
const destinationScript = chunk57636V35_cjs.ArkAddress.decode(destination).pkScript;
|
|
7257
7487
|
const arkInfo = await this.arkInfoProvider.getInfo();
|
|
7258
7488
|
const delegateInfo = await this.delegateProvider.getDelegateInfo();
|
|
7259
|
-
const eligible = vtxos.map(
|
|
7489
|
+
const eligible = vtxos.map(chunk57636V35_cjs.normalizeVtxo).filter(
|
|
7260
7490
|
(v) => isAnnotated(v) && findDelegateTapLeaf(v, delegateInfo.pubkey) !== void 0
|
|
7261
7491
|
);
|
|
7262
7492
|
if (eligible.length === 0) {
|
|
@@ -7285,11 +7515,11 @@ var DelegateManagerImpl = class {
|
|
|
7285
7515
|
const groupByExpiry = /* @__PURE__ */ new Map();
|
|
7286
7516
|
let recoverableVtxos = [];
|
|
7287
7517
|
for (const vtxo of eligible) {
|
|
7288
|
-
if (
|
|
7518
|
+
if (chunk57636V35_cjs.canRecoverOnchain(vtxo, now)) {
|
|
7289
7519
|
recoverableVtxos.push(vtxo);
|
|
7290
7520
|
continue;
|
|
7291
7521
|
}
|
|
7292
|
-
const expiry =
|
|
7522
|
+
const expiry = chunk57636V35_cjs.toBatchExpiry(vtxo);
|
|
7293
7523
|
if (!expiry) continue;
|
|
7294
7524
|
const dayKey = getDayTimestamp(expiry);
|
|
7295
7525
|
groupByExpiry.set(dayKey, [...groupByExpiry.get(dayKey) ?? [], vtxo]);
|
|
@@ -7354,7 +7584,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7354
7584
|
}
|
|
7355
7585
|
if (!delegateAt) {
|
|
7356
7586
|
const now = { timestamp: /* @__PURE__ */ new Date() };
|
|
7357
|
-
const expiryTimestamp = vtxos.filter((coin) => !
|
|
7587
|
+
const expiryTimestamp = vtxos.filter((coin) => !chunk57636V35_cjs.canRecoverOnchain(coin, now) && chunk57636V35_cjs.toBatchExpiry(coin)).reduce((min, coin) => Math.min(min, chunk57636V35_cjs.toBatchExpiry(coin)), Number.MAX_SAFE_INTEGER);
|
|
7358
7588
|
if (!expiryTimestamp || expiryTimestamp === Number.MAX_SAFE_INTEGER) {
|
|
7359
7589
|
delegateAt = new Date(Date.now() + 1 * 60 * 1e3);
|
|
7360
7590
|
} else {
|
|
@@ -7383,7 +7613,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7383
7613
|
let amount = 0n;
|
|
7384
7614
|
for (const coin of vtxos) {
|
|
7385
7615
|
const inputFee = estimator.evalOffchainInput({
|
|
7386
|
-
...
|
|
7616
|
+
...chunk57636V35_cjs.toOffchainInputFeeParams(coin),
|
|
7387
7617
|
type: "vtxo"
|
|
7388
7618
|
});
|
|
7389
7619
|
if (inputFee.value >= coin.value) {
|
|
@@ -7397,7 +7627,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7397
7627
|
const delegateFee = BigInt(Number(fee));
|
|
7398
7628
|
if (delegateFee > 0n) {
|
|
7399
7629
|
outputs.push({
|
|
7400
|
-
script:
|
|
7630
|
+
script: chunk57636V35_cjs.ArkAddress.decode(delegateAddress).pkScript,
|
|
7401
7631
|
amount: delegateFee
|
|
7402
7632
|
});
|
|
7403
7633
|
}
|
|
@@ -7430,10 +7660,10 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7430
7660
|
destinationScript
|
|
7431
7661
|
);
|
|
7432
7662
|
const forfeitOutputScript = btcSigner.OutScript.encode(
|
|
7433
|
-
btcSigner.Address(
|
|
7663
|
+
btcSigner.Address(chunk57636V35_cjs.getNetwork(network)).decode(forfeitAddress)
|
|
7434
7664
|
);
|
|
7435
7665
|
const forfeits = await Promise.all(
|
|
7436
|
-
vtxos.filter((v) => !
|
|
7666
|
+
vtxos.filter((v) => !chunk57636V35_cjs.canRecoverOnchain(v, { timestamp: /* @__PURE__ */ new Date() })).map(async (coin) => {
|
|
7437
7667
|
const forfeit = await makeDelegateForfeitTx(
|
|
7438
7668
|
coin,
|
|
7439
7669
|
dust,
|
|
@@ -7458,7 +7688,7 @@ async function makeDelegateForfeitTx(input, connectorAmount, delegatePubkey, for
|
|
|
7458
7688
|
index: input.vout,
|
|
7459
7689
|
witnessUtxo: {
|
|
7460
7690
|
amount: BigInt(input.value),
|
|
7461
|
-
script:
|
|
7691
|
+
script: chunk57636V35_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
7462
7692
|
},
|
|
7463
7693
|
sighashType: btcSigner.SigHash.ALL_ANYONECANPAY,
|
|
7464
7694
|
tapLeafScript: [delegateTapLeaf]
|
|
@@ -7516,7 +7746,7 @@ async function makeSignedDelegateIntent(identity, coins, outputs, onchainOutputs
|
|
|
7516
7746
|
expire_at: 0,
|
|
7517
7747
|
cosigners_public_keys: cosignerPubKeys
|
|
7518
7748
|
};
|
|
7519
|
-
const proof =
|
|
7749
|
+
const proof = chunk57636V35_cjs.Intent.create(message, coins, outputs);
|
|
7520
7750
|
const signedProof = await identity.sign(proof);
|
|
7521
7751
|
return {
|
|
7522
7752
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -7534,10 +7764,10 @@ function getDayTimestamp(timestamp) {
|
|
|
7534
7764
|
function findDelegateTapLeaf(vtxo, delegatePubkey) {
|
|
7535
7765
|
if (!vtxo.tapTree) return void 0;
|
|
7536
7766
|
const pk = delegatePubkey.length === 66 ? delegatePubkey.slice(2) : delegatePubkey;
|
|
7537
|
-
const vtxoScript =
|
|
7767
|
+
const vtxoScript = chunk57636V35_cjs.VtxoScript.decode(vtxo.tapTree);
|
|
7538
7768
|
return vtxoScript.leaves.find((tapLeaf) => {
|
|
7539
|
-
const arkTapscript =
|
|
7540
|
-
if (!
|
|
7769
|
+
const arkTapscript = chunk57636V35_cjs.decodeTapscript(chunk57636V35_cjs.scriptFromTapLeafScript(tapLeaf));
|
|
7770
|
+
if (!chunk57636V35_cjs.MultisigTapscript.is(arkTapscript)) return false;
|
|
7541
7771
|
return arkTapscript.params.pubkeys.map(base.hex.encode).includes(pk);
|
|
7542
7772
|
});
|
|
7543
7773
|
}
|
|
@@ -7818,7 +8048,7 @@ function createManagedConnection(dbName, version, initDatabase2) {
|
|
|
7818
8048
|
};
|
|
7819
8049
|
}
|
|
7820
8050
|
function scriptFromArkAddress(address) {
|
|
7821
|
-
return base.hex.encode(
|
|
8051
|
+
return base.hex.encode(chunk57636V35_cjs.ArkAddress.decode(address).pkScript);
|
|
7822
8052
|
}
|
|
7823
8053
|
|
|
7824
8054
|
// src/repositories/indexedDB/schema.ts
|
|
@@ -8313,7 +8543,7 @@ function validateVtxosForScript(vtxos, script, context) {
|
|
|
8313
8543
|
}
|
|
8314
8544
|
async function getVtxosForContract(repo, contract) {
|
|
8315
8545
|
const vtxos = repo.getVtxosForScript ? await repo.getVtxosForScript(contract.script) : filterVtxosForScript(await repo.getVtxos(contract.address), contract.script);
|
|
8316
|
-
return vtxos.map(
|
|
8546
|
+
return vtxos.map(chunk57636V35_cjs.normalizeVtxo);
|
|
8317
8547
|
}
|
|
8318
8548
|
async function saveVtxosForContract(repo, contract, vtxos) {
|
|
8319
8549
|
if (repo.saveVtxosForScript) {
|
|
@@ -8455,7 +8685,7 @@ function decodeArkContract(encoded) {
|
|
|
8455
8685
|
}
|
|
8456
8686
|
function contractFromArkContract(encoded, options = {}) {
|
|
8457
8687
|
const parsed = decodeArkContract(encoded);
|
|
8458
|
-
const handler =
|
|
8688
|
+
const handler = chunk3OKEUDHU_cjs.contractHandlers.get(parsed.type);
|
|
8459
8689
|
if (!handler) {
|
|
8460
8690
|
throw new Error(`No handler registered for contract type '${parsed.type}'`);
|
|
8461
8691
|
}
|
|
@@ -8469,9 +8699,9 @@ function contractFromArkContract(encoded, options = {}) {
|
|
|
8469
8699
|
metadata: options.metadata
|
|
8470
8700
|
};
|
|
8471
8701
|
}
|
|
8472
|
-
function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix =
|
|
8702
|
+
function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunk57636V35_cjs.DEFAULT_NETWORK.hrp, options = {}) {
|
|
8473
8703
|
const parsed = decodeArkContract(encoded);
|
|
8474
|
-
const handler =
|
|
8704
|
+
const handler = chunk3OKEUDHU_cjs.contractHandlers.getOrThrow(parsed.type);
|
|
8475
8705
|
const params = parsed.data;
|
|
8476
8706
|
const vtxoScript = handler.createScript(params);
|
|
8477
8707
|
return {
|
|
@@ -8725,9 +8955,9 @@ var ContractWatcher = class {
|
|
|
8725
8955
|
this.connectionState = "connected";
|
|
8726
8956
|
this.reconnectAttempts = 0;
|
|
8727
8957
|
this.listenLoop().catch((e) => {
|
|
8728
|
-
if (
|
|
8958
|
+
if (chunk57636V35_cjs.isEventSourceError(e)) {
|
|
8729
8959
|
console.debug("ContractWatcher subscription disconnected; reconnecting");
|
|
8730
|
-
} else if (!
|
|
8960
|
+
} else if (!chunk57636V35_cjs.isEventSourceUnavailableError(e)) {
|
|
8731
8961
|
console.error(e);
|
|
8732
8962
|
}
|
|
8733
8963
|
this.connectionState = "disconnected";
|
|
@@ -8739,7 +8969,7 @@ var ContractWatcher = class {
|
|
|
8739
8969
|
this.scheduleReconnect();
|
|
8740
8970
|
});
|
|
8741
8971
|
} catch (error) {
|
|
8742
|
-
if (!
|
|
8972
|
+
if (!chunk57636V35_cjs.isEventSourceUnavailableError(error)) {
|
|
8743
8973
|
console.error("ContractWatcher connection failed:", error);
|
|
8744
8974
|
}
|
|
8745
8975
|
this.connectionState = "disconnected";
|
|
@@ -8765,7 +8995,7 @@ var ContractWatcher = class {
|
|
|
8765
8995
|
* slower; what it loses is push latency.
|
|
8766
8996
|
*/
|
|
8767
8997
|
reportEventSourceUnavailable(error) {
|
|
8768
|
-
if (!
|
|
8998
|
+
if (!chunk57636V35_cjs.isEventSourceUnavailableError(error)) return false;
|
|
8769
8999
|
if (!this.eventSourceReported) {
|
|
8770
9000
|
this.eventSourceReported = true;
|
|
8771
9001
|
console.warn(
|
|
@@ -8981,14 +9211,14 @@ var ContractWatcher = class {
|
|
|
8981
9211
|
const timestamp = Date.now();
|
|
8982
9212
|
if (update.newVtxos?.length) {
|
|
8983
9213
|
this.processSubscriptionVtxos(
|
|
8984
|
-
update.newVtxos.map(
|
|
9214
|
+
update.newVtxos.map(chunk57636V35_cjs.normalizeVtxo),
|
|
8985
9215
|
"vtxo_received",
|
|
8986
9216
|
timestamp
|
|
8987
9217
|
);
|
|
8988
9218
|
}
|
|
8989
9219
|
if (update.spentVtxos?.length) {
|
|
8990
9220
|
this.processSubscriptionVtxos(
|
|
8991
|
-
update.spentVtxos.map(
|
|
9221
|
+
update.spentVtxos.map(chunk57636V35_cjs.normalizeVtxo),
|
|
8992
9222
|
"vtxo_spent",
|
|
8993
9223
|
timestamp
|
|
8994
9224
|
);
|
|
@@ -9083,7 +9313,7 @@ var NON_TERMINAL_INTENT_STATES = ALL_INTENT_STATES.filter(
|
|
|
9083
9313
|
(s) => !isTerminalIntentState(s)
|
|
9084
9314
|
);
|
|
9085
9315
|
function isConsumed(vtxo) {
|
|
9086
|
-
return vtxo !== void 0 &&
|
|
9316
|
+
return vtxo !== void 0 && chunk57636V35_cjs.hasTerminalSpend(vtxo);
|
|
9087
9317
|
}
|
|
9088
9318
|
async function classifyIntent(intent, vtxosByOutpoint, now) {
|
|
9089
9319
|
if (isTerminalIntentState(intent.state)) return void 0;
|
|
@@ -9126,7 +9356,7 @@ async function reconcileIntents(deps) {
|
|
|
9126
9356
|
let vtxosByOutpoint = /* @__PURE__ */ new Map();
|
|
9127
9357
|
if (outpoints.length > 0) {
|
|
9128
9358
|
try {
|
|
9129
|
-
const { vtxos } = await
|
|
9359
|
+
const { vtxos } = await chunk57636V35_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
|
|
9130
9360
|
vtxosByOutpoint = new Map(vtxos.map((v) => [outpointKey(v), v]));
|
|
9131
9361
|
} catch (e) {
|
|
9132
9362
|
console.error("reconcileIntents: failed to fetch input VTXO state", e);
|
|
@@ -9300,7 +9530,7 @@ var ContractManager = class _ContractManager {
|
|
|
9300
9530
|
await this.reconcileWatched();
|
|
9301
9531
|
this.markSyncOnline();
|
|
9302
9532
|
} catch (err) {
|
|
9303
|
-
if (!
|
|
9533
|
+
if (!chunk57636V35_cjs.isRetryableProviderError(err)) throw err;
|
|
9304
9534
|
this.markSyncDegraded(err);
|
|
9305
9535
|
}
|
|
9306
9536
|
this.initialized = true;
|
|
@@ -9432,7 +9662,7 @@ var ContractManager = class _ContractManager {
|
|
|
9432
9662
|
const from = Math.max(0, watermark - lookAhead.size);
|
|
9433
9663
|
const to = watermark + lookAhead.size;
|
|
9434
9664
|
const deps = lookAhead.candidateDeps();
|
|
9435
|
-
const handlers =
|
|
9665
|
+
const handlers = chunk3OKEUDHU_cjs.contractHandlers.getRegisteredTypes().map((t) => chunk3OKEUDHU_cjs.contractHandlers.get(t)).filter(hasCandidates);
|
|
9436
9666
|
const band = /* @__PURE__ */ new Map();
|
|
9437
9667
|
for (let index = from; index <= to; index++) {
|
|
9438
9668
|
const descriptor = lookAhead.materialize(index);
|
|
@@ -9443,7 +9673,7 @@ var ContractManager = class _ContractManager {
|
|
|
9443
9673
|
index,
|
|
9444
9674
|
params: {
|
|
9445
9675
|
...candidate,
|
|
9446
|
-
...
|
|
9676
|
+
...chunk3OKEUDHU_cjs.speculativeReceiveMetadata(descriptor)
|
|
9447
9677
|
}
|
|
9448
9678
|
});
|
|
9449
9679
|
}
|
|
@@ -9505,7 +9735,7 @@ var ContractManager = class _ContractManager {
|
|
|
9505
9735
|
});
|
|
9506
9736
|
for (const entry of pending) entry.catchUpPending = false;
|
|
9507
9737
|
} catch (err) {
|
|
9508
|
-
if (!
|
|
9738
|
+
if (!chunk57636V35_cjs.isRetryableProviderError(err)) throw err;
|
|
9509
9739
|
this.markSyncDegraded(err);
|
|
9510
9740
|
}
|
|
9511
9741
|
}
|
|
@@ -9555,7 +9785,7 @@ var ContractManager = class _ContractManager {
|
|
|
9555
9785
|
await this.fetchContractVxosFromIndexer([contract]);
|
|
9556
9786
|
this.markSyncOnline();
|
|
9557
9787
|
} catch (err) {
|
|
9558
|
-
if (!
|
|
9788
|
+
if (!chunk57636V35_cjs.isRetryableProviderError(err)) throw err;
|
|
9559
9789
|
this.markSyncDegraded(err);
|
|
9560
9790
|
}
|
|
9561
9791
|
await this.watcher.addContract(contract);
|
|
@@ -9592,7 +9822,7 @@ var ContractManager = class _ContractManager {
|
|
|
9592
9822
|
return result;
|
|
9593
9823
|
}
|
|
9594
9824
|
async upsertContractRow(params) {
|
|
9595
|
-
const handler =
|
|
9825
|
+
const handler = chunk3OKEUDHU_cjs.contractHandlers.get(params.type);
|
|
9596
9826
|
if (!handler) {
|
|
9597
9827
|
throw new Error(`No handler registered for contract type '${params.type}'`);
|
|
9598
9828
|
}
|
|
@@ -9692,7 +9922,7 @@ var ContractManager = class _ContractManager {
|
|
|
9692
9922
|
`scanContracts: batchSize must be a positive integer (got ${String(opts.batchSize)})`
|
|
9693
9923
|
);
|
|
9694
9924
|
}
|
|
9695
|
-
const registered =
|
|
9925
|
+
const registered = chunk3OKEUDHU_cjs.contractHandlers.getRegisteredTypes().map((t) => chunk3OKEUDHU_cjs.contractHandlers.get(t)).filter(isDiscoverable);
|
|
9696
9926
|
const discoverables = [
|
|
9697
9927
|
...registered.filter((h) => h.type === "boarding"),
|
|
9698
9928
|
...registered.filter((h) => h.type !== "boarding")
|
|
@@ -9827,7 +10057,7 @@ var ContractManager = class _ContractManager {
|
|
|
9827
10057
|
await this.syncContracts({ contracts, pageSize });
|
|
9828
10058
|
this.markSyncOnline();
|
|
9829
10059
|
} catch (err) {
|
|
9830
|
-
if (!
|
|
10060
|
+
if (!chunk57636V35_cjs.isRetryableProviderError(err)) throw err;
|
|
9831
10061
|
this.markSyncDegraded(err);
|
|
9832
10062
|
}
|
|
9833
10063
|
const vtxos = await this.getVtxosForContracts(contracts);
|
|
@@ -9848,7 +10078,7 @@ var ContractManager = class _ContractManager {
|
|
|
9848
10078
|
}
|
|
9849
10079
|
const tapscriptCache = tapscripts ?? /* @__PURE__ */ new Map();
|
|
9850
10080
|
return vtxos.map(
|
|
9851
|
-
(vtxo) => extendVirtualCoinForContract(
|
|
10081
|
+
(vtxo) => extendVirtualCoinForContract(chunk57636V35_cjs.normalizeVtxo(vtxo), byScript, tapscriptCache)
|
|
9852
10082
|
);
|
|
9853
10083
|
}
|
|
9854
10084
|
/** @inheritdoc */
|
|
@@ -9892,14 +10122,14 @@ var ContractManager = class _ContractManager {
|
|
|
9892
10122
|
const byScript = new Map(contracts.map((contract) => [contract.script, contract]));
|
|
9893
10123
|
const asking = vtxos.filter((vtxo) => {
|
|
9894
10124
|
const contract = byScript.get(vtxo.script);
|
|
9895
|
-
return contract !== void 0 &&
|
|
10125
|
+
return contract !== void 0 && chunk3OKEUDHU_cjs.contractHandlers.get(contract.type)?.assertSpendableNow !== void 0;
|
|
9896
10126
|
});
|
|
9897
10127
|
if (asking.length === 0) return refused;
|
|
9898
10128
|
const tip = await this.currentChainTip();
|
|
9899
10129
|
const walletKey = await walletPubKey?.();
|
|
9900
10130
|
for (const vtxo of asking) {
|
|
9901
10131
|
const contract = byScript.get(vtxo.script);
|
|
9902
|
-
const handler =
|
|
10132
|
+
const handler = chunk3OKEUDHU_cjs.contractHandlers.get(contract.type);
|
|
9903
10133
|
if (!handler?.assertSpendableNow) continue;
|
|
9904
10134
|
const context = {
|
|
9905
10135
|
collaborative: true,
|
|
@@ -9914,7 +10144,7 @@ var ContractManager = class _ContractManager {
|
|
|
9914
10144
|
// the next handler to answer a CSV question would meet a
|
|
9915
10145
|
// TypeError instead of a `false`. Carry the coin only when it
|
|
9916
10146
|
// really is one.
|
|
9917
|
-
vtxo:
|
|
10147
|
+
vtxo: chunk57636V35_cjs.isVirtualCoin(vtxo) && "status" in vtxo ? vtxo : void 0
|
|
9918
10148
|
};
|
|
9919
10149
|
try {
|
|
9920
10150
|
await handler.assertSpendableNow(
|
|
@@ -10070,7 +10300,7 @@ var ContractManager = class _ContractManager {
|
|
|
10070
10300
|
const { contractScript, collaborative = true, walletPubKey, vtxo } = options;
|
|
10071
10301
|
const [contract] = await this.getContracts({ script: contractScript });
|
|
10072
10302
|
if (!contract) return [];
|
|
10073
|
-
const handler =
|
|
10303
|
+
const handler = chunk3OKEUDHU_cjs.contractHandlers.get(contract.type);
|
|
10074
10304
|
if (!handler) return [];
|
|
10075
10305
|
const script = handler.createScript(contract.params);
|
|
10076
10306
|
const tip = await this.currentChainTip();
|
|
@@ -10098,7 +10328,7 @@ var ContractManager = class _ContractManager {
|
|
|
10098
10328
|
const { contractScript, collaborative = true, walletPubKey } = options;
|
|
10099
10329
|
const [contract] = await this.getContracts({ script: contractScript });
|
|
10100
10330
|
if (!contract) return [];
|
|
10101
|
-
const handler =
|
|
10331
|
+
const handler = chunk3OKEUDHU_cjs.contractHandlers.get(contract.type);
|
|
10102
10332
|
if (!handler) return [];
|
|
10103
10333
|
const script = handler.createScript(contract.params);
|
|
10104
10334
|
const context = {
|
|
@@ -10154,7 +10384,7 @@ var ContractManager = class _ContractManager {
|
|
|
10154
10384
|
}
|
|
10155
10385
|
async refreshOutpoints(outpoints) {
|
|
10156
10386
|
if (outpoints.length === 0) return;
|
|
10157
|
-
const { vtxos } = await
|
|
10387
|
+
const { vtxos } = await chunk57636V35_cjs.getNormalizedVtxos(this.config.indexerProvider, {
|
|
10158
10388
|
outpoints
|
|
10159
10389
|
});
|
|
10160
10390
|
if (vtxos.length === 0) return;
|
|
@@ -10233,7 +10463,7 @@ var ContractManager = class _ContractManager {
|
|
|
10233
10463
|
break;
|
|
10234
10464
|
}
|
|
10235
10465
|
} catch (err) {
|
|
10236
|
-
if (!
|
|
10466
|
+
if (!chunk57636V35_cjs.isRetryableProviderError(err)) throw err;
|
|
10237
10467
|
this.markSyncDegraded(err);
|
|
10238
10468
|
}
|
|
10239
10469
|
this.emitEvent(event);
|
|
@@ -10312,7 +10542,7 @@ var ContractManager = class _ContractManager {
|
|
|
10312
10542
|
*/
|
|
10313
10543
|
async reconcilePendingFrontier(contracts) {
|
|
10314
10544
|
const scriptToContract = new Map(contracts.map((c) => [c.script, c]));
|
|
10315
|
-
const vtxos = await
|
|
10545
|
+
const vtxos = await chunk57636V35_cjs.getAllNormalizedVtxos(
|
|
10316
10546
|
this.config.indexerProvider,
|
|
10317
10547
|
contracts.map((c) => c.script),
|
|
10318
10548
|
{ pendingOnly: true }
|
|
@@ -10395,7 +10625,7 @@ var ContractManager = class _ContractManager {
|
|
|
10395
10625
|
}
|
|
10396
10626
|
return result;
|
|
10397
10627
|
}
|
|
10398
|
-
async fetchContractVtxosBulk(contracts, pageSize =
|
|
10628
|
+
async fetchContractVtxosBulk(contracts, pageSize = chunk57636V35_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
|
|
10399
10629
|
if (contracts.length === 0) {
|
|
10400
10630
|
return { vtxosByScript: /* @__PURE__ */ new Map(), promoted: /* @__PURE__ */ new Map() };
|
|
10401
10631
|
}
|
|
@@ -10411,7 +10641,7 @@ var ContractManager = class _ContractManager {
|
|
|
10411
10641
|
before: syncWindow.before
|
|
10412
10642
|
}
|
|
10413
10643
|
} : {};
|
|
10414
|
-
const vtxos = await
|
|
10644
|
+
const vtxos = await chunk57636V35_cjs.getAllNormalizedVtxos(
|
|
10415
10645
|
this.config.indexerProvider,
|
|
10416
10646
|
contracts.map((c) => c.script),
|
|
10417
10647
|
{ ...windowOpts, pageSize }
|
|
@@ -10556,7 +10786,7 @@ var deserializeTapLeaf = (t) => {
|
|
|
10556
10786
|
const s = base.hex.decode(t.s);
|
|
10557
10787
|
return [cb, s];
|
|
10558
10788
|
};
|
|
10559
|
-
var deserializeVtxo = (o) =>
|
|
10789
|
+
var deserializeVtxo = (o) => chunk57636V35_cjs.normalizeVtxo({
|
|
10560
10790
|
...o,
|
|
10561
10791
|
createdAt: new Date(o.createdAt),
|
|
10562
10792
|
tapTree: base.hex.decode(o.tapTree),
|
|
@@ -11379,7 +11609,7 @@ var HDDescriptorProvider = class _HDDescriptorProvider {
|
|
|
11379
11609
|
*/
|
|
11380
11610
|
materializeDescriptorAt(index) {
|
|
11381
11611
|
const descriptor = this.identity.descriptor;
|
|
11382
|
-
const network =
|
|
11612
|
+
const network = chunk3OKEUDHU_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
11383
11613
|
const expansion = descriptorsScure.expand({ descriptor, network, index });
|
|
11384
11614
|
const keyInfo = expansion.expansionMap?.["@0"];
|
|
11385
11615
|
if (!keyInfo?.keyExpression) {
|
|
@@ -11527,7 +11757,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
|
|
|
11527
11757
|
const provider = await resolveDescriptorProvider(config, setup.walletRepository);
|
|
11528
11758
|
if (!provider) return void 0;
|
|
11529
11759
|
const allowSilentFallback = (config.walletMode ?? "auto") === "auto";
|
|
11530
|
-
const expectedContractType = setup.offchainTapscript instanceof
|
|
11760
|
+
const expectedContractType = setup.offchainTapscript instanceof chunk3OKEUDHU_cjs.DelegateVtxo.Script ? "delegate" : "default";
|
|
11531
11761
|
const factoryOpts = {
|
|
11532
11762
|
walletRepository: setup.walletRepository,
|
|
11533
11763
|
contractRepository: setup.contractRepository,
|
|
@@ -11728,7 +11958,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
|
|
|
11728
11958
|
};
|
|
11729
11959
|
function deriveLeafPubkey(descriptor) {
|
|
11730
11960
|
try {
|
|
11731
|
-
return
|
|
11961
|
+
return chunk3OKEUDHU_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
11732
11962
|
} catch (e) {
|
|
11733
11963
|
throw new NonRangeableDescriptorError(
|
|
11734
11964
|
"Cannot derive leaf pubkey: descriptor is not a materialized, parsable tr(...) shape.",
|
|
@@ -11740,7 +11970,7 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
11740
11970
|
const pubKey = deriveLeafPubkey(descriptor);
|
|
11741
11971
|
const tapscript = rebuildTapscript(current, pubKey);
|
|
11742
11972
|
const serverPubKey = tapscript.options.serverPubKey;
|
|
11743
|
-
const csvTimelock =
|
|
11973
|
+
const csvTimelock = chunk57636V35_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
|
|
11744
11974
|
const base$1 = {
|
|
11745
11975
|
script: base.hex.encode(tapscript.pkScript),
|
|
11746
11976
|
address: tapscript.address(hrp, serverPubKey).encode(),
|
|
@@ -11751,11 +11981,11 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
11751
11981
|
// index-0 key. Without it, spends produce unsigned PSBTs that the
|
|
11752
11982
|
// server rejects with `INVALID_PSBT_INPUT (5): missing tapscript spend sig`.
|
|
11753
11983
|
metadata: {
|
|
11754
|
-
...tagSource && { source:
|
|
11984
|
+
...tagSource && { source: chunk3OKEUDHU_cjs.WALLET_RECEIVE_SOURCE },
|
|
11755
11985
|
signingDescriptor: descriptor
|
|
11756
11986
|
}
|
|
11757
11987
|
};
|
|
11758
|
-
const params = tapscript instanceof
|
|
11988
|
+
const params = tapscript instanceof chunk3OKEUDHU_cjs.DelegateVtxo.Script ? {
|
|
11759
11989
|
...base$1,
|
|
11760
11990
|
type: "delegate",
|
|
11761
11991
|
params: {
|
|
@@ -11776,10 +12006,10 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
11776
12006
|
return { tapscript, params };
|
|
11777
12007
|
}
|
|
11778
12008
|
function rebuildTapscript(current, pubKey) {
|
|
11779
|
-
if (current instanceof
|
|
11780
|
-
return new
|
|
12009
|
+
if (current instanceof chunk3OKEUDHU_cjs.DelegateVtxo.Script) {
|
|
12010
|
+
return new chunk3OKEUDHU_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
|
|
11781
12011
|
}
|
|
11782
|
-
return new
|
|
12012
|
+
return new chunk3OKEUDHU_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
|
|
11783
12013
|
}
|
|
11784
12014
|
async function pickActiveReceive(contractRepository, serverPubKey, expectedType) {
|
|
11785
12015
|
const candidates = await contractRepository.getContracts({
|
|
@@ -11788,7 +12018,7 @@ async function pickActiveReceive(contractRepository, serverPubKey, expectedType)
|
|
|
11788
12018
|
});
|
|
11789
12019
|
const serverPubKeyHex = base.hex.encode(serverPubKey);
|
|
11790
12020
|
const matching = candidates.filter(
|
|
11791
|
-
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source ===
|
|
12021
|
+
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunk3OKEUDHU_cjs.WALLET_RECEIVE_SOURCE
|
|
11792
12022
|
).sort((a, b) => {
|
|
11793
12023
|
if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
|
|
11794
12024
|
return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
|
|
@@ -11844,7 +12074,7 @@ function computeOffchainBalance(vtxos, caps) {
|
|
|
11844
12074
|
}
|
|
11845
12075
|
};
|
|
11846
12076
|
for (const vtxo of vtxos) {
|
|
11847
|
-
if (
|
|
12077
|
+
if (chunk57636V35_cjs.hasTerminalSpend(vtxo)) continue;
|
|
11848
12078
|
addAssets(owned, vtxo);
|
|
11849
12079
|
if (vtxo.isUnrolled) {
|
|
11850
12080
|
unrolled += vtxo.value;
|
|
@@ -11854,11 +12084,11 @@ function computeOffchainBalance(vtxos, caps) {
|
|
|
11854
12084
|
pendingRecovery += vtxo.value;
|
|
11855
12085
|
continue;
|
|
11856
12086
|
}
|
|
11857
|
-
if (
|
|
12087
|
+
if (chunk57636V35_cjs.canRecoverOnchain(vtxo, now)) {
|
|
11858
12088
|
recoverable += vtxo.value;
|
|
11859
12089
|
continue;
|
|
11860
12090
|
}
|
|
11861
|
-
if (!
|
|
12091
|
+
if (!chunk57636V35_cjs.canSpendOffchain(vtxo, now)) continue;
|
|
11862
12092
|
if (vtxo.isPreconfirmed) {
|
|
11863
12093
|
preconfirmed += vtxo.value;
|
|
11864
12094
|
} else {
|
|
@@ -12028,12 +12258,12 @@ var InputSignerRouter = class {
|
|
|
12028
12258
|
};
|
|
12029
12259
|
|
|
12030
12260
|
// src/wallet/wallet.ts
|
|
12031
|
-
var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl ||
|
|
12261
|
+
var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl || chunk57636V35_cjs.DEFAULT_ARKADE_SERVER_URL;
|
|
12032
12262
|
function intentProofJobs(coins) {
|
|
12033
12263
|
if (coins.length === 0) return [];
|
|
12034
12264
|
const coinJobs = coins.map((coin, i) => ({
|
|
12035
12265
|
index: i + 1,
|
|
12036
|
-
lookupScript:
|
|
12266
|
+
lookupScript: chunk57636V35_cjs.VtxoScript.decode(coin.tapTree).pkScript
|
|
12037
12267
|
}));
|
|
12038
12268
|
return [{ index: 0, lookupScript: coinJobs[0].lookupScript }, ...coinJobs];
|
|
12039
12269
|
}
|
|
@@ -12065,7 +12295,7 @@ function dedupeTimelocks(timelocks) {
|
|
|
12065
12295
|
const seen = /* @__PURE__ */ new Set();
|
|
12066
12296
|
const deduped = [];
|
|
12067
12297
|
for (const timelock of timelocks) {
|
|
12068
|
-
const sequence =
|
|
12298
|
+
const sequence = chunk57636V35_cjs.timelockToSequence(timelock).toString();
|
|
12069
12299
|
if (seen.has(sequence)) continue;
|
|
12070
12300
|
seen.add(sequence);
|
|
12071
12301
|
deduped.push(timelock);
|
|
@@ -12082,7 +12312,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
|
|
|
12082
12312
|
state: "active"
|
|
12083
12313
|
});
|
|
12084
12314
|
const newest = candidates.filter(
|
|
12085
|
-
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source ===
|
|
12315
|
+
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunk3OKEUDHU_cjs.WALLET_RECEIVE_SOURCE
|
|
12086
12316
|
).sort((a, b) => {
|
|
12087
12317
|
if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
|
|
12088
12318
|
return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
|
|
@@ -12090,7 +12320,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
|
|
|
12090
12320
|
if (!newest?.params.pubKey) return baseline;
|
|
12091
12321
|
try {
|
|
12092
12322
|
const pubKey = base.hex.decode(newest.params.pubKey);
|
|
12093
|
-
return new
|
|
12323
|
+
return new chunk3OKEUDHU_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
|
|
12094
12324
|
} catch (e) {
|
|
12095
12325
|
console.warn("Skipping malformed boarding contract at boot", newest.script, e);
|
|
12096
12326
|
return baseline;
|
|
@@ -12109,10 +12339,10 @@ function filterSnapshotVtxos(snapshot, filter, pendingSpendOutpoints) {
|
|
|
12109
12339
|
if (vtxo.isUnrolled) {
|
|
12110
12340
|
return !!f.withUnrolled;
|
|
12111
12341
|
}
|
|
12112
|
-
if (
|
|
12342
|
+
if (chunk57636V35_cjs.hasTerminalSpend(vtxo)) {
|
|
12113
12343
|
return false;
|
|
12114
12344
|
}
|
|
12115
|
-
if (!f.withRecoverable &&
|
|
12345
|
+
if (!f.withRecoverable && chunk57636V35_cjs.canRecoverOnchain(vtxo, now)) {
|
|
12116
12346
|
return false;
|
|
12117
12347
|
}
|
|
12118
12348
|
return true;
|
|
@@ -12452,7 +12682,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12452
12682
|
*/
|
|
12453
12683
|
static async setupWalletConfig(config, pubKey) {
|
|
12454
12684
|
const arkadeServerUrl = getArkadeServerUrl(config);
|
|
12455
|
-
const arkProvider = config.arkProvider || new
|
|
12685
|
+
const arkProvider = config.arkProvider || new chunk57636V35_cjs.RestArkProvider(arkadeServerUrl);
|
|
12456
12686
|
let indexerProvider = config.indexerProvider;
|
|
12457
12687
|
if (!indexerProvider) {
|
|
12458
12688
|
let indexerUrl = config.indexerUrl;
|
|
@@ -12469,7 +12699,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12469
12699
|
indexerUrl = arkadeServerUrl;
|
|
12470
12700
|
}
|
|
12471
12701
|
}
|
|
12472
|
-
indexerProvider = new
|
|
12702
|
+
indexerProvider = new chunk3KW4TWP2_cjs.RestIndexerProvider(indexerUrl);
|
|
12473
12703
|
}
|
|
12474
12704
|
const walletRepository = config.storage?.walletRepository ?? new IndexedDBWalletRepository();
|
|
12475
12705
|
const contractRepository = config.storage?.contractRepository ?? new IndexedDBContractRepository();
|
|
@@ -12478,7 +12708,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12478
12708
|
source: serverInfoSource,
|
|
12479
12709
|
lastOnlineAt: serverInfoLastOnlineAt
|
|
12480
12710
|
} = await resolveArkInfo(arkProvider, walletRepository);
|
|
12481
|
-
const network =
|
|
12711
|
+
const network = chunk57636V35_cjs.getNetwork(info.network);
|
|
12482
12712
|
if ("descriptor" in config.identity) {
|
|
12483
12713
|
const descriptor = config.identity.descriptor;
|
|
12484
12714
|
const identityIsMainnet = !descriptor.includes("tpub");
|
|
@@ -12518,18 +12748,18 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12518
12748
|
value: info.boardingExitDelay,
|
|
12519
12749
|
type: info.boardingExitDelay < 512n ? "blocks" : "seconds"
|
|
12520
12750
|
};
|
|
12521
|
-
const serverPubKey =
|
|
12522
|
-
const delegatePubKey = config.delegateProvider ? await config.delegateProvider.getDelegateInfo().then((info2) =>
|
|
12751
|
+
const serverPubKey = chunk3OKEUDHU_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
|
|
12752
|
+
const delegatePubKey = config.delegateProvider ? await config.delegateProvider.getDelegateInfo().then((info2) => chunk3OKEUDHU_cjs.toXOnly(base.hex.decode(info2.pubkey), "delegate key")).catch(() => void 0) : config.delegatorProvider ? await config.delegatorProvider.getDelegateInfo().then((info2) => chunk3OKEUDHU_cjs.toXOnly(base.hex.decode(info2.pubkey), "delegate key")).catch(() => void 0) : void 0;
|
|
12523
12753
|
const offchainOptions = {
|
|
12524
12754
|
pubKey,
|
|
12525
12755
|
serverPubKey,
|
|
12526
12756
|
csvTimelock: exitTimelock
|
|
12527
12757
|
};
|
|
12528
|
-
const offchainTapscript = !delegatePubKey ? new
|
|
12529
|
-
const boardingTapscript =
|
|
12758
|
+
const offchainTapscript = !delegatePubKey ? new chunk3OKEUDHU_cjs.DefaultVtxo.Script(offchainOptions) : new chunk3OKEUDHU_cjs.DelegateVtxo.Script({ ...offchainOptions, delegatePubKey });
|
|
12759
|
+
const boardingTapscript = chunk3OKEUDHU_cjs.BoardingContractHandler.createScript({
|
|
12530
12760
|
pubKey: base.hex.encode(pubKey),
|
|
12531
12761
|
serverPubKey: base.hex.encode(serverPubKey),
|
|
12532
|
-
csvTimelock:
|
|
12762
|
+
csvTimelock: chunk57636V35_cjs.timelockToSequence(boardingTimelock).toString()
|
|
12533
12763
|
});
|
|
12534
12764
|
return {
|
|
12535
12765
|
arkProvider,
|
|
@@ -12695,7 +12925,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12695
12925
|
if (!filter?.withUnrolled) {
|
|
12696
12926
|
logExcludedVtxos(
|
|
12697
12927
|
"getSpendableVtxos",
|
|
12698
|
-
snapshot.flatMap((contract) => contract.vtxos).filter((vtxo) => vtxo.isUnrolled && !
|
|
12928
|
+
snapshot.flatMap((contract) => contract.vtxos).filter((vtxo) => vtxo.isUnrolled && !chunk57636V35_cjs.hasTerminalSpend(vtxo)),
|
|
12699
12929
|
[() => UNROLLED_REASON]
|
|
12700
12930
|
);
|
|
12701
12931
|
}
|
|
@@ -12838,7 +13068,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12838
13068
|
const response = await contractManager.getContractsWithVtxos();
|
|
12839
13069
|
const allVtxos = response.flatMap((_) => _.vtxos);
|
|
12840
13070
|
const { boardingTxs, commitmentsToIgnore } = await this.getBoardingTxs();
|
|
12841
|
-
const resolveTxCreatedAt = (txids) =>
|
|
13071
|
+
const resolveTxCreatedAt = (txids) => chunk57636V35_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
|
|
12842
13072
|
return buildTransactionHistory(
|
|
12843
13073
|
allVtxos,
|
|
12844
13074
|
boardingTxs,
|
|
@@ -12932,7 +13162,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12932
13162
|
},
|
|
12933
13163
|
isUnrolled: true,
|
|
12934
13164
|
...boardingFacts,
|
|
12935
|
-
virtualStatus:
|
|
13165
|
+
virtualStatus: chunk57636V35_cjs.toVirtualStatus(boardingFacts),
|
|
12936
13166
|
spentBy: "",
|
|
12937
13167
|
createdAt: tx.status.confirmed ? new Date(tx.status.block_time * 1e3) : /* @__PURE__ */ new Date(0),
|
|
12938
13168
|
script: scriptHex
|
|
@@ -12988,9 +13218,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12988
13218
|
async getBoardingTapscripts(allowedSigners) {
|
|
12989
13219
|
const byScript = /* @__PURE__ */ new Map();
|
|
12990
13220
|
const add = (s) => byScript.set(base.hex.encode(s.pkScript), s);
|
|
12991
|
-
const boardingCsv = this.boardingTapscript.options.csvTimelock ??
|
|
13221
|
+
const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunk3OKEUDHU_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
12992
13222
|
add(
|
|
12993
|
-
new
|
|
13223
|
+
new chunk3OKEUDHU_cjs.DefaultVtxo.Script({
|
|
12994
13224
|
pubKey: await this.identity.xOnlyPublicKey(),
|
|
12995
13225
|
serverPubKey: this.boardingTapscript.options.serverPubKey,
|
|
12996
13226
|
csvTimelock: boardingCsv
|
|
@@ -13005,7 +13235,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13005
13235
|
for (const c of boardingContracts) {
|
|
13006
13236
|
if (!allowed.has(toXOnlySignerHex(c.params.serverPubKey))) continue;
|
|
13007
13237
|
try {
|
|
13008
|
-
add(
|
|
13238
|
+
add(chunk3OKEUDHU_cjs.BoardingContractHandler.createScript(c.params));
|
|
13009
13239
|
} catch (e) {
|
|
13010
13240
|
console.warn("Skipping malformed boarding contract", c.script, e);
|
|
13011
13241
|
}
|
|
@@ -13043,7 +13273,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13043
13273
|
// Per-row CSV delay decoded from THIS tapscript's exit leaf —
|
|
13044
13274
|
// not the wallet's current boarding timelock, which a signer
|
|
13045
13275
|
// rotation may have changed.
|
|
13046
|
-
csvTimelock:
|
|
13276
|
+
csvTimelock: chunk57636V35_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
|
|
13047
13277
|
coins: utxos
|
|
13048
13278
|
});
|
|
13049
13279
|
}
|
|
@@ -13176,7 +13406,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13176
13406
|
/** Fetch Arkade transaction ids that are still pending final settlement. */
|
|
13177
13407
|
async fetchPendingTxs() {
|
|
13178
13408
|
const scripts = await this.getWalletScripts();
|
|
13179
|
-
const vtxos = await
|
|
13409
|
+
const vtxos = await chunk57636V35_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
|
|
13180
13410
|
return vtxos.filter(
|
|
13181
13411
|
(vtxo) => (vtxo.isSpent || vtxo.isPreconfirmed && !vtxo.isSwept) && vtxo.arkTxId !== void 0
|
|
13182
13412
|
).map((_) => _.arkTxId);
|
|
@@ -13207,7 +13437,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13207
13437
|
});
|
|
13208
13438
|
for (const contract of contracts) {
|
|
13209
13439
|
if (map.has(contract.script)) continue;
|
|
13210
|
-
const handler =
|
|
13440
|
+
const handler = chunk3OKEUDHU_cjs.contractHandlers.get(contract.type);
|
|
13211
13441
|
if (handler) {
|
|
13212
13442
|
const script = handler.createScript(contract.params);
|
|
13213
13443
|
map.set(contract.script, script);
|
|
@@ -13319,7 +13549,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13319
13549
|
}
|
|
13320
13550
|
});
|
|
13321
13551
|
const baselinePubkey = await this.identity.xOnlyPublicKey();
|
|
13322
|
-
const delegatePubKey = this.offchainTapscript instanceof
|
|
13552
|
+
const delegatePubKey = this.offchainTapscript instanceof chunk3OKEUDHU_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
|
|
13323
13553
|
const baselineSigners = [
|
|
13324
13554
|
this.offchainTapscript.options.serverPubKey,
|
|
13325
13555
|
...[...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h))
|
|
@@ -13327,8 +13557,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13327
13557
|
const seenBaselineScripts = /* @__PURE__ */ new Set();
|
|
13328
13558
|
for (const serverPubKey of baselineSigners) {
|
|
13329
13559
|
for (const csvTimelock of this.walletContractTimelocks) {
|
|
13330
|
-
const csvTimelockStr =
|
|
13331
|
-
const defaultScript = new
|
|
13560
|
+
const csvTimelockStr = chunk57636V35_cjs.timelockToSequence(csvTimelock).toString();
|
|
13561
|
+
const defaultScript = new chunk3OKEUDHU_cjs.DefaultVtxo.Script({
|
|
13332
13562
|
pubKey: baselinePubkey,
|
|
13333
13563
|
serverPubKey,
|
|
13334
13564
|
csvTimelock
|
|
@@ -13349,7 +13579,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13349
13579
|
});
|
|
13350
13580
|
}
|
|
13351
13581
|
if (delegatePubKey) {
|
|
13352
|
-
const delegateScript = new
|
|
13582
|
+
const delegateScript = new chunk3OKEUDHU_cjs.DelegateVtxo.Script({
|
|
13353
13583
|
pubKey: baselinePubkey,
|
|
13354
13584
|
serverPubKey,
|
|
13355
13585
|
delegatePubKey,
|
|
@@ -13373,9 +13603,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13373
13603
|
}
|
|
13374
13604
|
}
|
|
13375
13605
|
}
|
|
13376
|
-
const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ??
|
|
13606
|
+
const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunk3OKEUDHU_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
13377
13607
|
for (const serverPubKey of baselineSigners) {
|
|
13378
|
-
const baselineBoarding = new
|
|
13608
|
+
const baselineBoarding = new chunk3OKEUDHU_cjs.DefaultVtxo.Script({
|
|
13379
13609
|
pubKey: baselinePubkey,
|
|
13380
13610
|
serverPubKey,
|
|
13381
13611
|
csvTimelock: boardingCsvTimelock
|
|
@@ -13388,7 +13618,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13388
13618
|
params: {
|
|
13389
13619
|
pubKey: base.hex.encode(baselineBoarding.options.pubKey),
|
|
13390
13620
|
serverPubKey: base.hex.encode(serverPubKey),
|
|
13391
|
-
csvTimelock:
|
|
13621
|
+
csvTimelock: chunk57636V35_cjs.timelockToSequence(boardingCsvTimelock).toString()
|
|
13392
13622
|
},
|
|
13393
13623
|
script: boardingScriptHex,
|
|
13394
13624
|
address: baselineBoarding.address(this.network.hrp, serverPubKey).encode(),
|
|
@@ -13588,7 +13818,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13588
13818
|
serverPubKey: this.offchainTapscript.options.serverPubKey,
|
|
13589
13819
|
deprecatedSignerPubKeys: [...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h)),
|
|
13590
13820
|
csvTimelocks: this.walletContractTimelocks,
|
|
13591
|
-
delegatePubKey: this.offchainTapscript instanceof
|
|
13821
|
+
delegatePubKey: this.offchainTapscript instanceof chunk3OKEUDHU_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
|
|
13592
13822
|
};
|
|
13593
13823
|
}
|
|
13594
13824
|
_signerRouter;
|
|
@@ -13833,7 +14063,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13833
14063
|
const [row] = await manager.getContracts({ script: base.hex.encode(display.pkScript) });
|
|
13834
14064
|
const persisted = row?.metadata?.signingDescriptor;
|
|
13835
14065
|
if (typeof persisted === "string") return persisted;
|
|
13836
|
-
return
|
|
14066
|
+
return chunk3OKEUDHU_cjs.identityDescriptor(this.identity);
|
|
13837
14067
|
}
|
|
13838
14068
|
/**
|
|
13839
14069
|
* Build, persist and shape one address of `type` owned by `descriptor` —
|
|
@@ -13849,7 +14079,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13849
14079
|
async mintAddress(manager, type, descriptor, tagSource, allocated) {
|
|
13850
14080
|
if (type === "boarding") {
|
|
13851
14081
|
const built2 = this.buildBoardingContract(
|
|
13852
|
-
|
|
14082
|
+
chunk3OKEUDHU_cjs.deriveDescriptorLeafPubKey(descriptor),
|
|
13853
14083
|
descriptor,
|
|
13854
14084
|
tagSource
|
|
13855
14085
|
);
|
|
@@ -13894,11 +14124,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13894
14124
|
* {@link buildReceiveContract}.
|
|
13895
14125
|
*/
|
|
13896
14126
|
buildBoardingContract(pubKey, descriptor, tagSource) {
|
|
13897
|
-
const tapscript = new
|
|
14127
|
+
const tapscript = new chunk3OKEUDHU_cjs.DefaultVtxo.Script({
|
|
13898
14128
|
...this._boardingTapscript.options,
|
|
13899
14129
|
pubKey
|
|
13900
14130
|
});
|
|
13901
|
-
const csvTimelock = tapscript.options.csvTimelock ??
|
|
14131
|
+
const csvTimelock = tapscript.options.csvTimelock ?? chunk3OKEUDHU_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
13902
14132
|
return {
|
|
13903
14133
|
tapscript,
|
|
13904
14134
|
params: {
|
|
@@ -13906,13 +14136,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13906
14136
|
params: {
|
|
13907
14137
|
pubKey: base.hex.encode(pubKey),
|
|
13908
14138
|
serverPubKey: base.hex.encode(tapscript.options.serverPubKey),
|
|
13909
|
-
csvTimelock:
|
|
14139
|
+
csvTimelock: chunk57636V35_cjs.timelockToSequence(csvTimelock).toString()
|
|
13910
14140
|
},
|
|
13911
14141
|
script: base.hex.encode(tapscript.pkScript),
|
|
13912
14142
|
address: tapscript.address(this.network.hrp, this.arkServerPublicKey).encode(),
|
|
13913
14143
|
state: "active",
|
|
13914
14144
|
metadata: {
|
|
13915
|
-
...tagSource && { source:
|
|
14145
|
+
...tagSource && { source: chunk3OKEUDHU_cjs.WALLET_RECEIVE_SOURCE },
|
|
13916
14146
|
signingDescriptor: descriptor
|
|
13917
14147
|
}
|
|
13918
14148
|
}
|
|
@@ -13941,7 +14171,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13941
14171
|
if (this._descriptorProvider instanceof HDDescriptorProvider) {
|
|
13942
14172
|
return (await this.getContractManager()).getNextSigningDescriptor();
|
|
13943
14173
|
}
|
|
13944
|
-
return
|
|
14174
|
+
return chunk3OKEUDHU_cjs.identityDescriptor(this.identity);
|
|
13945
14175
|
}
|
|
13946
14176
|
/**
|
|
13947
14177
|
* @see HDAllocationCapable.advanceSigningDescriptorWatermark
|
|
@@ -14037,7 +14267,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14037
14267
|
* the stable public API.
|
|
14038
14268
|
*/
|
|
14039
14269
|
async rotateServerSigner(newServerPubKey, checkpointTapscript) {
|
|
14040
|
-
const xonly =
|
|
14270
|
+
const xonly = chunk3OKEUDHU_cjs.toXOnly(newServerPubKey, "ark signer key");
|
|
14041
14271
|
const newServerUnrollScript = assertValidServerUnrollScript(
|
|
14042
14272
|
checkpointTapscript,
|
|
14043
14273
|
resolveCheckpointExitDelayPolicy(this.network, this.checkpointExitDelayPolicy)
|
|
@@ -14066,21 +14296,21 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14066
14296
|
const [currentBoardingRow] = await manager.getContracts({
|
|
14067
14297
|
script: currentBoardingScript
|
|
14068
14298
|
});
|
|
14069
|
-
const newOffchain = this.offchainTapscript instanceof
|
|
14299
|
+
const newOffchain = this.offchainTapscript instanceof chunk3OKEUDHU_cjs.DelegateVtxo.Script ? new chunk3OKEUDHU_cjs.DelegateVtxo.Script({
|
|
14070
14300
|
...this.offchainTapscript.options,
|
|
14071
14301
|
serverPubKey: xonly
|
|
14072
|
-
}) : new
|
|
14302
|
+
}) : new chunk3OKEUDHU_cjs.DefaultVtxo.Script({
|
|
14073
14303
|
...this.offchainTapscript.options,
|
|
14074
14304
|
serverPubKey: xonly
|
|
14075
14305
|
});
|
|
14076
|
-
const newBoarding = new
|
|
14306
|
+
const newBoarding = new chunk3OKEUDHU_cjs.DefaultVtxo.Script({
|
|
14077
14307
|
...this._boardingTapscript.options,
|
|
14078
14308
|
serverPubKey: xonly
|
|
14079
14309
|
});
|
|
14080
|
-
const offchainCsv =
|
|
14310
|
+
const offchainCsv = chunk57636V35_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
|
|
14081
14311
|
const newOffchainScript = base.hex.encode(newOffchain.pkScript);
|
|
14082
14312
|
const newOffchainAddress = newOffchain.address(this.network.hrp, xonly).encode();
|
|
14083
|
-
if (newOffchain instanceof
|
|
14313
|
+
if (newOffchain instanceof chunk3OKEUDHU_cjs.DelegateVtxo.Script) {
|
|
14084
14314
|
await manager.createContract({
|
|
14085
14315
|
type: "delegate",
|
|
14086
14316
|
params: {
|
|
@@ -14108,13 +14338,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14108
14338
|
metadata: currentOffchainRow?.metadata
|
|
14109
14339
|
});
|
|
14110
14340
|
}
|
|
14111
|
-
const boardingCsv = newBoarding.options.csvTimelock ??
|
|
14341
|
+
const boardingCsv = newBoarding.options.csvTimelock ?? chunk3OKEUDHU_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
14112
14342
|
await manager.createContract({
|
|
14113
14343
|
type: "boarding",
|
|
14114
14344
|
params: {
|
|
14115
14345
|
pubKey: base.hex.encode(newBoarding.options.pubKey),
|
|
14116
14346
|
serverPubKey: base.hex.encode(xonly),
|
|
14117
|
-
csvTimelock:
|
|
14347
|
+
csvTimelock: chunk57636V35_cjs.timelockToSequence(boardingCsv).toString()
|
|
14118
14348
|
},
|
|
14119
14349
|
script: base.hex.encode(newBoarding.pkScript),
|
|
14120
14350
|
address: newBoarding.address(this.network.hrp, xonly).encode(),
|
|
@@ -14147,14 +14377,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14147
14377
|
_restoreInFlight;
|
|
14148
14378
|
_addPendingSpends(inputs) {
|
|
14149
14379
|
for (const input of inputs) {
|
|
14150
|
-
if (
|
|
14380
|
+
if (chunk57636V35_cjs.isVirtualCoin(input)) {
|
|
14151
14381
|
this._pendingSpendOutpoints.add(`${input.txid}:${input.vout}`);
|
|
14152
14382
|
}
|
|
14153
14383
|
}
|
|
14154
14384
|
}
|
|
14155
14385
|
_removePendingSpends(inputs) {
|
|
14156
14386
|
for (const input of inputs) {
|
|
14157
|
-
if (
|
|
14387
|
+
if (chunk57636V35_cjs.isVirtualCoin(input)) {
|
|
14158
14388
|
this._pendingSpendOutpoints.delete(`${input.txid}:${input.vout}`);
|
|
14159
14389
|
}
|
|
14160
14390
|
}
|
|
@@ -14212,13 +14442,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14212
14442
|
const manager = await this.getContractManager();
|
|
14213
14443
|
const provider = this._descriptorProvider;
|
|
14214
14444
|
const hd = provider instanceof HDDescriptorProvider;
|
|
14215
|
-
const staticDescriptor = hd ? void 0 : await
|
|
14445
|
+
const staticDescriptor = hd ? void 0 : await chunk3OKEUDHU_cjs.identityDescriptor(this.identity);
|
|
14216
14446
|
const materialize = (index) => hd ? provider.materializeDescriptorAt(index) : staticDescriptor;
|
|
14217
|
-
const delegatePubKey = this.offchainTapscript instanceof
|
|
14447
|
+
const delegatePubKey = this.offchainTapscript instanceof chunk3OKEUDHU_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
|
|
14218
14448
|
const arkInfo = await this.arkProvider.getInfo();
|
|
14219
|
-
const currentSignerPubKey =
|
|
14449
|
+
const currentSignerPubKey = chunk3OKEUDHU_cjs.toXOnly(base.hex.decode(arkInfo.signerPubkey), "ark signer key");
|
|
14220
14450
|
const deprecatedSignerPubKeys = arkInfo.deprecatedSigners.map(
|
|
14221
|
-
(s) =>
|
|
14451
|
+
(s) => chunk3OKEUDHU_cjs.toXOnly(base.hex.decode(s.pubkey), "deprecated signer key")
|
|
14222
14452
|
);
|
|
14223
14453
|
const deps = {
|
|
14224
14454
|
indexerProvider: this.indexerProvider,
|
|
@@ -14233,7 +14463,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14233
14463
|
csvTimelocks: this.walletContractTimelocks,
|
|
14234
14464
|
// Boarding-exit CSV so the boarding handler can build its
|
|
14235
14465
|
// candidate script (distinct from the unilateral-exit matrix).
|
|
14236
|
-
boardingTimelock: this.boardingTapscript.options.csvTimelock ??
|
|
14466
|
+
boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunk3OKEUDHU_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
|
|
14237
14467
|
delegatePubKey
|
|
14238
14468
|
};
|
|
14239
14469
|
const result = await manager.scanContracts({
|
|
@@ -14347,7 +14577,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14347
14577
|
throw new Error("Invalid configured public key");
|
|
14348
14578
|
}
|
|
14349
14579
|
const setup = await ReadonlyWallet.setupWalletConfig(config, pubkey);
|
|
14350
|
-
const forfeitPubkey =
|
|
14580
|
+
const forfeitPubkey = chunk3OKEUDHU_cjs.toXOnly(base.hex.decode(setup.info.forfeitPubkey), "forfeit key");
|
|
14351
14581
|
const forfeitAddress = btcSigner.Address(setup.network).decode(setup.info.forfeitAddress);
|
|
14352
14582
|
const forfeitOutputScript = btcSigner.OutScript.encode(forfeitAddress);
|
|
14353
14583
|
const checkpointExitDelayOverrides = {
|
|
@@ -14496,7 +14726,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14496
14726
|
inputs: params.selectedVtxos,
|
|
14497
14727
|
changeAmount: BigInt(changeAmount)
|
|
14498
14728
|
};
|
|
14499
|
-
const outputAddress =
|
|
14729
|
+
const outputAddress = chunk57636V35_cjs.ArkAddress.decode(params.address);
|
|
14500
14730
|
assertRecipientArkAddress(
|
|
14501
14731
|
params.address,
|
|
14502
14732
|
outputAddress,
|
|
@@ -14562,13 +14792,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14562
14792
|
void this.logUngatedInputs("settle({ inputs })", params.inputs);
|
|
14563
14793
|
}
|
|
14564
14794
|
const offchainAddress = await this.getAddress();
|
|
14565
|
-
const offchainPkScript =
|
|
14795
|
+
const offchainPkScript = chunk57636V35_cjs.ArkAddress.decode(offchainAddress).pkScript;
|
|
14566
14796
|
const offchainOutputScript = base.hex.encode(offchainPkScript);
|
|
14567
14797
|
if (!params) {
|
|
14568
14798
|
const { fees, vtxoMaxAmount } = await this.arkProvider.getInfo();
|
|
14569
14799
|
const estimator = new Estimator(fees.intentFee);
|
|
14570
14800
|
let amount = 0;
|
|
14571
|
-
const exitScript =
|
|
14801
|
+
const exitScript = chunk57636V35_cjs.CSVMultisigTapscript.decode(
|
|
14572
14802
|
base.hex.decode(this.boardingTapscript.exitScript)
|
|
14573
14803
|
);
|
|
14574
14804
|
const boardingTimelock = exitScript.params.timelock;
|
|
@@ -14597,7 +14827,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14597
14827
|
if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
|
|
14598
14828
|
break;
|
|
14599
14829
|
}
|
|
14600
|
-
const inputFee = estimator.evalOffchainInput(
|
|
14830
|
+
const inputFee = estimator.evalOffchainInput(chunk57636V35_cjs.toOffchainInputFeeParams(vtxo));
|
|
14601
14831
|
if (inputFee.satoshis >= vtxo.value) {
|
|
14602
14832
|
continue;
|
|
14603
14833
|
}
|
|
@@ -14644,7 +14874,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14644
14874
|
let script;
|
|
14645
14875
|
let arkAddress;
|
|
14646
14876
|
try {
|
|
14647
|
-
arkAddress =
|
|
14877
|
+
arkAddress = chunk57636V35_cjs.ArkAddress.decode(output.address);
|
|
14648
14878
|
} catch {
|
|
14649
14879
|
arkAddress = void 0;
|
|
14650
14880
|
}
|
|
@@ -14734,7 +14964,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14734
14964
|
const abortController = new AbortController();
|
|
14735
14965
|
let stream;
|
|
14736
14966
|
let committedTxid;
|
|
14737
|
-
const settleInputVtxos = params.inputs.filter(
|
|
14967
|
+
const settleInputVtxos = params.inputs.filter(chunk57636V35_cjs.isVirtualCoin);
|
|
14738
14968
|
const contractManager = await this.getContractManager();
|
|
14739
14969
|
await contractManager.assertAnnotatable(settleInputVtxos);
|
|
14740
14970
|
await contractManager.assertSpendableNow?.(
|
|
@@ -14846,7 +15076,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14846
15076
|
async maybeRotateBoardingAfterBoard(inputs) {
|
|
14847
15077
|
if (!this._descriptorProvider) return;
|
|
14848
15078
|
const consumedBoarding = inputs.some(
|
|
14849
|
-
(input) => typeof input !== "string" && !
|
|
15079
|
+
(input) => typeof input !== "string" && !chunk57636V35_cjs.isVirtualCoin(input)
|
|
14850
15080
|
);
|
|
14851
15081
|
if (!consumedBoarding) return;
|
|
14852
15082
|
try {
|
|
@@ -14870,7 +15100,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14870
15100
|
let connectorIndex = 0;
|
|
14871
15101
|
const connectorsLeaves = connectorsGraph?.leaves() || [];
|
|
14872
15102
|
for (const input of inputs) {
|
|
14873
|
-
if (!
|
|
15103
|
+
if (!chunk57636V35_cjs.isVirtualCoin(input)) {
|
|
14874
15104
|
for (let i = 0; i < settlementPsbt.inputsLength; i++) {
|
|
14875
15105
|
const settlementInput = settlementPsbt.getInput(i);
|
|
14876
15106
|
if (!settlementInput.txid || settlementInput.index === void 0) {
|
|
@@ -14901,7 +15131,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14901
15131
|
}
|
|
14902
15132
|
continue;
|
|
14903
15133
|
}
|
|
14904
|
-
if (
|
|
15134
|
+
if (chunk57636V35_cjs.canRecoverOnchain(input, { timestamp: /* @__PURE__ */ new Date() }) || isSubdust({ value: input.value }, this.dustAmount)) {
|
|
14905
15135
|
continue;
|
|
14906
15136
|
}
|
|
14907
15137
|
if (connectorsLeaves.length === 0) {
|
|
@@ -14929,7 +15159,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14929
15159
|
index: input.vout,
|
|
14930
15160
|
witnessUtxo: {
|
|
14931
15161
|
amount: BigInt(input.value),
|
|
14932
|
-
script:
|
|
15162
|
+
script: chunk57636V35_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
14933
15163
|
},
|
|
14934
15164
|
sighashType: btcSigner.SigHash.DEFAULT,
|
|
14935
15165
|
tapLeafScript: [input.forfeitTapLeafScript]
|
|
@@ -14948,7 +15178,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14948
15178
|
forfeitTx = await this._signerRouter.sign(forfeitTx, [
|
|
14949
15179
|
{
|
|
14950
15180
|
index: 0,
|
|
14951
|
-
lookupScript:
|
|
15181
|
+
lookupScript: chunk57636V35_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
14952
15182
|
}
|
|
14953
15183
|
]);
|
|
14954
15184
|
signedForfeits.push(base.base64.encode(forfeitTx.toPSBT()));
|
|
@@ -15006,7 +15236,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15006
15236
|
resolveBatchExpiryPolicy(this.network, this.batchExpiryPolicy)
|
|
15007
15237
|
);
|
|
15008
15238
|
await this.arkProvider.confirmRegistration(intentId);
|
|
15009
|
-
const sweepTapscript =
|
|
15239
|
+
const sweepTapscript = chunk57636V35_cjs.CSVMultisigTapscript.encode({
|
|
15010
15240
|
timelock,
|
|
15011
15241
|
pubkeys: [this.forfeitPubkey]
|
|
15012
15242
|
}).script;
|
|
@@ -15021,10 +15251,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15021
15251
|
throw new Error("Sweep tap tree root not set");
|
|
15022
15252
|
}
|
|
15023
15253
|
const xOnlyPublicKeys = event.cosignersPublicKeys.map(
|
|
15024
|
-
(k) => base.hex.encode(
|
|
15254
|
+
(k) => base.hex.encode(chunk3OKEUDHU_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
|
|
15025
15255
|
);
|
|
15026
15256
|
const signerPublicKey = await session.getPublicKey();
|
|
15027
|
-
const xonlySignerPublicKey =
|
|
15257
|
+
const xonlySignerPublicKey = chunk3OKEUDHU_cjs.toXOnly(signerPublicKey, "signer key");
|
|
15028
15258
|
if (!xOnlyPublicKeys.includes(base.hex.encode(xonlySignerPublicKey))) {
|
|
15029
15259
|
return { skip: true };
|
|
15030
15260
|
}
|
|
@@ -15114,9 +15344,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15114
15344
|
...existing ?? {},
|
|
15115
15345
|
intentTxId,
|
|
15116
15346
|
registerProof: intent.proof,
|
|
15117
|
-
registerProofMessage:
|
|
15347
|
+
registerProofMessage: chunk57636V35_cjs.Intent.encodeMessage(intent.message),
|
|
15118
15348
|
deleteProof: deleteIntent.proof,
|
|
15119
|
-
deleteProofMessage:
|
|
15349
|
+
deleteProofMessage: chunk57636V35_cjs.Intent.encodeMessage(deleteIntent.message),
|
|
15120
15350
|
intentVtxos: inputs.map((i) => ({
|
|
15121
15351
|
txid: i.txid,
|
|
15122
15352
|
vout: i.vout
|
|
@@ -15148,7 +15378,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15148
15378
|
try {
|
|
15149
15379
|
return await this.arkProvider.registerIntent(intent);
|
|
15150
15380
|
} catch (error) {
|
|
15151
|
-
if (error instanceof
|
|
15381
|
+
if (error instanceof chunk57636V35_cjs.ArkError && error.code === 0 && error.message.includes("duplicated input")) {
|
|
15152
15382
|
const deleteIntent = await this.makeDeleteIntentSignature(inputs);
|
|
15153
15383
|
await this.arkProvider.deleteIntent(deleteIntent);
|
|
15154
15384
|
return this.arkProvider.registerIntent(intent);
|
|
@@ -15164,7 +15394,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15164
15394
|
expire_at: 0,
|
|
15165
15395
|
cosigners_public_keys: cosignerPubKeys
|
|
15166
15396
|
};
|
|
15167
|
-
const proof =
|
|
15397
|
+
const proof = chunk57636V35_cjs.Intent.create(message, coins, outputs);
|
|
15168
15398
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
15169
15399
|
return {
|
|
15170
15400
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -15176,7 +15406,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15176
15406
|
type: "delete",
|
|
15177
15407
|
expire_at: 0
|
|
15178
15408
|
};
|
|
15179
|
-
const proof =
|
|
15409
|
+
const proof = chunk57636V35_cjs.Intent.create(message, coins, []);
|
|
15180
15410
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
15181
15411
|
return {
|
|
15182
15412
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -15188,7 +15418,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15188
15418
|
type: "get-pending-tx",
|
|
15189
15419
|
expire_at: 0
|
|
15190
15420
|
};
|
|
15191
|
-
const proof =
|
|
15421
|
+
const proof = chunk57636V35_cjs.Intent.create(message, coins, []);
|
|
15192
15422
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
15193
15423
|
return {
|
|
15194
15424
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -15209,7 +15439,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15209
15439
|
if (!vtxos || vtxos.length === 0) {
|
|
15210
15440
|
const scriptMap = await this.getScriptMap();
|
|
15211
15441
|
const allExtended = [];
|
|
15212
|
-
const fetchedVtxos = await
|
|
15442
|
+
const fetchedVtxos = await chunk57636V35_cjs.getAllNormalizedVtxos(this.indexerProvider, [
|
|
15213
15443
|
...scriptMap.keys()
|
|
15214
15444
|
]);
|
|
15215
15445
|
for (const vtxo of fetchedVtxos) {
|
|
@@ -15253,7 +15483,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15253
15483
|
try {
|
|
15254
15484
|
const checkpointTxs = pendingTx.signedCheckpointTxs.map((c) => {
|
|
15255
15485
|
const tx = btcSigner.Transaction.fromPSBT(base.base64.decode(c));
|
|
15256
|
-
|
|
15486
|
+
chunk57636V35_cjs.assertAllowedSighashTypes(tx);
|
|
15257
15487
|
return tx;
|
|
15258
15488
|
});
|
|
15259
15489
|
assertCheckpointsMatchInputs(
|
|
@@ -15325,11 +15555,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15325
15555
|
* against the current key alone would leave it pending forever.
|
|
15326
15556
|
*/
|
|
15327
15557
|
checkpointUnrollCandidates(info) {
|
|
15328
|
-
const current =
|
|
15558
|
+
const current = chunk57636V35_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
|
|
15329
15559
|
const candidates = [this._serverUnrollScript, current];
|
|
15330
15560
|
for (const deprecated of signerSetFromInfo(info).deprecated.keys()) {
|
|
15331
15561
|
candidates.push(
|
|
15332
|
-
|
|
15562
|
+
chunk57636V35_cjs.CSVMultisigTapscript.encode({
|
|
15333
15563
|
...current.params,
|
|
15334
15564
|
pubkeys: [base.hex.decode(deprecated)]
|
|
15335
15565
|
})
|
|
@@ -15420,7 +15650,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15420
15650
|
if (vtxos.length === 0) {
|
|
15421
15651
|
throw new Error("No VTXOs found for this arkadeCash");
|
|
15422
15652
|
}
|
|
15423
|
-
const myPkScript =
|
|
15653
|
+
const myPkScript = chunk57636V35_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
|
|
15424
15654
|
let { spendable, unclaimed } = this.classifyCashVtxos(vtxos);
|
|
15425
15655
|
let swept = 0;
|
|
15426
15656
|
const drainable = vtxos.filter(
|
|
@@ -15496,7 +15726,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15496
15726
|
const spendable = [];
|
|
15497
15727
|
const unclaimed = [];
|
|
15498
15728
|
for (const vtxo of vtxos) {
|
|
15499
|
-
if (
|
|
15729
|
+
if (chunk57636V35_cjs.hasTerminalSpend(vtxo)) {
|
|
15500
15730
|
unclaimed.push(cashReport(vtxo, "already-spent"));
|
|
15501
15731
|
} else if (vtxo.isUnrolled) {
|
|
15502
15732
|
unclaimed.push(cashReport(vtxo, "exited"));
|
|
@@ -15518,7 +15748,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15518
15748
|
const all = [];
|
|
15519
15749
|
const seen = /* @__PURE__ */ new Set();
|
|
15520
15750
|
for (let pageIndex = 0; ; pageIndex++) {
|
|
15521
|
-
const { vtxos, page } = await
|
|
15751
|
+
const { vtxos, page } = await chunk57636V35_cjs.getNormalizedVtxos(this.indexerProvider, {
|
|
15522
15752
|
scripts,
|
|
15523
15753
|
pageIndex,
|
|
15524
15754
|
pageSize
|
|
@@ -15565,7 +15795,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15565
15795
|
for (let i = 0; i < inputs.length; i += MAX_INPUTS_PER_INTENT) {
|
|
15566
15796
|
const batch = inputs.slice(i, i + MAX_INPUTS_PER_INTENT);
|
|
15567
15797
|
const message = { type: "get-pending-tx", expire_at: 0 };
|
|
15568
|
-
const proof =
|
|
15798
|
+
const proof = chunk57636V35_cjs.Intent.create(message, batch, []);
|
|
15569
15799
|
const signedProof = await identity.sign(
|
|
15570
15800
|
proof,
|
|
15571
15801
|
Array.from({ length: batch.length + 1 }, (_, j) => j)
|
|
@@ -15587,7 +15817,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15587
15817
|
try {
|
|
15588
15818
|
const checkpointTxs = pendingTx.signedCheckpointTxs.map((checkpoint) => {
|
|
15589
15819
|
const tx = btcSigner.Transaction.fromPSBT(base.base64.decode(checkpoint));
|
|
15590
|
-
|
|
15820
|
+
chunk57636V35_cjs.assertAllowedSighashTypes(tx);
|
|
15591
15821
|
return tx;
|
|
15592
15822
|
});
|
|
15593
15823
|
assertCheckpointsMatchInputs(
|
|
@@ -15786,7 +16016,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15786
16016
|
script: recipient.script,
|
|
15787
16017
|
amount: BigInt(recipient.amount),
|
|
15788
16018
|
// Already checked against the recipient address in `validateRecipients`.
|
|
15789
|
-
...recipient.tapTree ? { tapTree:
|
|
16019
|
+
...recipient.tapTree ? { tapTree: chunk57636V35_cjs.TapTreeCoder.decode(recipient.tapTree) } : {}
|
|
15790
16020
|
}));
|
|
15791
16021
|
const totalBtcOutput = outputs.reduce((sum, o) => sum + Number(o.amount), 0);
|
|
15792
16022
|
let changeAmount = totalBtcSelected - totalBtcOutput;
|
|
@@ -15930,10 +16160,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15930
16160
|
const serverPubKey = this.arkServerPublicKey;
|
|
15931
16161
|
const serverUnrollScript = this.serverUnrollScript;
|
|
15932
16162
|
const arkAddress = offchainTapscript.address(this.network.hrp, serverPubKey);
|
|
15933
|
-
const normalizedInputs = inputs.map(
|
|
15934
|
-
const at = now ?? await
|
|
16163
|
+
const normalizedInputs = inputs.map(chunk57636V35_cjs.normalizeVtxo);
|
|
16164
|
+
const at = now ?? await chunk57636V35_cjs.resolveTimeHeight(this.onchainProvider);
|
|
15935
16165
|
for (const input of normalizedInputs) {
|
|
15936
|
-
if (!
|
|
16166
|
+
if (!chunk57636V35_cjs.canSpendOffchain(input, at)) {
|
|
15937
16167
|
throw new Error(
|
|
15938
16168
|
`sendSelectedVtxosToSelf: input ${input.txid}:${input.vout} is not cooperatively spendable`
|
|
15939
16169
|
);
|
|
@@ -16003,7 +16233,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16003
16233
|
);
|
|
16004
16234
|
const arkTxJobs = inputs.map((input, index) => ({
|
|
16005
16235
|
index,
|
|
16006
|
-
lookupScript:
|
|
16236
|
+
lookupScript: chunk57636V35_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
16007
16237
|
}));
|
|
16008
16238
|
const identity = this.identity;
|
|
16009
16239
|
const signer = {
|
|
@@ -16089,14 +16319,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16089
16319
|
const spentBy = checkpointIdByOutpoint.get(`${vtxo.txid}:${vtxo.vout}`);
|
|
16090
16320
|
spentVtxos.push({
|
|
16091
16321
|
...spentFacts,
|
|
16092
|
-
virtualStatus:
|
|
16322
|
+
virtualStatus: chunk57636V35_cjs.toVirtualStatus(spentFacts),
|
|
16093
16323
|
...spentBy ? { spentBy } : {},
|
|
16094
16324
|
arkTxId: arkTxid
|
|
16095
16325
|
});
|
|
16096
16326
|
for (const id of vtxo.commitmentTxIds) {
|
|
16097
16327
|
commitmentTxIds.add(id);
|
|
16098
16328
|
}
|
|
16099
|
-
const vtxoExpiry =
|
|
16329
|
+
const vtxoExpiry = chunk57636V35_cjs.toBatchExpiry(vtxo);
|
|
16100
16330
|
if (vtxoExpiry) {
|
|
16101
16331
|
batchExpiry = Math.min(batchExpiry, vtxoExpiry);
|
|
16102
16332
|
}
|
|
@@ -16109,7 +16339,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16109
16339
|
isSwept: false,
|
|
16110
16340
|
isPreconfirmed: true,
|
|
16111
16341
|
commitmentTxIds: Array.from(commitmentTxIds),
|
|
16112
|
-
...
|
|
16342
|
+
...chunk57636V35_cjs.parseLegacyExpiry(batchExpiry)
|
|
16113
16343
|
};
|
|
16114
16344
|
changeVtxo = {
|
|
16115
16345
|
txid: arkTxid,
|
|
@@ -16121,7 +16351,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16121
16351
|
tapTree: offchainTapscript.encode(),
|
|
16122
16352
|
value: Number(changeAmount),
|
|
16123
16353
|
...changeFacts,
|
|
16124
|
-
virtualStatus:
|
|
16354
|
+
virtualStatus: chunk57636V35_cjs.toVirtualStatus(changeFacts),
|
|
16125
16355
|
spentBy: "",
|
|
16126
16356
|
status: {
|
|
16127
16357
|
confirmed: false
|
|
@@ -16190,12 +16420,12 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16190
16420
|
const spentVtxos = [];
|
|
16191
16421
|
const inputArkTxIds = /* @__PURE__ */ new Set();
|
|
16192
16422
|
const boardingRemovalsByAddress = /* @__PURE__ */ new Map();
|
|
16193
|
-
const vtxoInputs = inputs.filter(
|
|
16423
|
+
const vtxoInputs = inputs.filter(chunk57636V35_cjs.isVirtualCoin);
|
|
16194
16424
|
const cm = await this.getContractManager();
|
|
16195
16425
|
const annotatedVtxos = await cm.annotateVtxos(vtxoInputs);
|
|
16196
16426
|
const annotatedByKey = new Map(annotatedVtxos.map((v) => [`${v.txid}:${v.vout}`, v]));
|
|
16197
16427
|
for (const input of inputs) {
|
|
16198
|
-
if (
|
|
16428
|
+
if (chunk57636V35_cjs.isVirtualCoin(input)) {
|
|
16199
16429
|
const outpoint = `${input.txid}:${input.vout}`;
|
|
16200
16430
|
const vtxo = annotatedByKey.get(outpoint);
|
|
16201
16431
|
if (!vtxo) {
|
|
@@ -16207,13 +16437,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16207
16437
|
const settledFacts = { ...vtxo, isSpent: true };
|
|
16208
16438
|
spentVtxos.push({
|
|
16209
16439
|
...settledFacts,
|
|
16210
|
-
virtualStatus:
|
|
16440
|
+
virtualStatus: chunk57636V35_cjs.toVirtualStatus(settledFacts),
|
|
16211
16441
|
settledBy: commitmentTxid
|
|
16212
16442
|
});
|
|
16213
16443
|
} else {
|
|
16214
16444
|
let sourceAddress;
|
|
16215
16445
|
try {
|
|
16216
|
-
sourceAddress =
|
|
16446
|
+
sourceAddress = chunk57636V35_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
|
|
16217
16447
|
this.network
|
|
16218
16448
|
);
|
|
16219
16449
|
} catch {
|
|
@@ -16271,9 +16501,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16271
16501
|
}
|
|
16272
16502
|
};
|
|
16273
16503
|
function selectVirtualCoins(coins, targetAmount) {
|
|
16274
|
-
const sortedCoins = coins.map(
|
|
16275
|
-
const expiryA =
|
|
16276
|
-
const expiryB =
|
|
16504
|
+
const sortedCoins = coins.map(chunk57636V35_cjs.normalizeVtxo).sort((a, b) => {
|
|
16505
|
+
const expiryA = chunk57636V35_cjs.toBatchExpiry(a) || Number.MAX_SAFE_INTEGER;
|
|
16506
|
+
const expiryB = chunk57636V35_cjs.toBatchExpiry(b) || Number.MAX_SAFE_INTEGER;
|
|
16277
16507
|
if (expiryA !== expiryB) {
|
|
16278
16508
|
return expiryA - expiryB;
|
|
16279
16509
|
}
|
|
@@ -16300,19 +16530,53 @@ function selectVirtualCoins(coins, targetAmount) {
|
|
|
16300
16530
|
changeAmount
|
|
16301
16531
|
};
|
|
16302
16532
|
}
|
|
16303
|
-
|
|
16533
|
+
var AbortError = class extends Error {
|
|
16534
|
+
constructor(message = "Operation aborted") {
|
|
16535
|
+
super(message);
|
|
16536
|
+
this.name = "AbortError";
|
|
16537
|
+
}
|
|
16538
|
+
};
|
|
16539
|
+
function abortReason(signal) {
|
|
16540
|
+
const { reason } = signal;
|
|
16541
|
+
if (reason instanceof Error) return reason;
|
|
16542
|
+
return new AbortError(typeof reason === "string" ? reason : void 0);
|
|
16543
|
+
}
|
|
16544
|
+
async function waitForIncomingFunds(wallet, options) {
|
|
16545
|
+
const { signal, timeoutMs } = options ?? {};
|
|
16546
|
+
if (signal?.aborted) throw abortReason(signal);
|
|
16304
16547
|
let stopFunc;
|
|
16305
16548
|
let settled = false;
|
|
16306
|
-
|
|
16549
|
+
let timeoutId;
|
|
16550
|
+
let onAbort;
|
|
16551
|
+
return new Promise((resolve, reject) => {
|
|
16552
|
+
const settle = (deliver) => {
|
|
16553
|
+
if (settled) return;
|
|
16554
|
+
settled = true;
|
|
16555
|
+
if (timeoutId !== void 0) clearTimeout(timeoutId);
|
|
16556
|
+
if (onAbort) signal?.removeEventListener("abort", onAbort);
|
|
16557
|
+
stopFunc?.();
|
|
16558
|
+
deliver();
|
|
16559
|
+
};
|
|
16560
|
+
const cancel = (reason) => settle(() => reject(reason));
|
|
16561
|
+
if (signal) {
|
|
16562
|
+
onAbort = () => cancel(abortReason(signal));
|
|
16563
|
+
signal.addEventListener("abort", onAbort);
|
|
16564
|
+
}
|
|
16565
|
+
if (timeoutMs !== void 0) {
|
|
16566
|
+
timeoutId = setTimeout(
|
|
16567
|
+
() => cancel(new AbortError(`waitForIncomingFunds timed out after ${timeoutMs}ms`)),
|
|
16568
|
+
timeoutMs
|
|
16569
|
+
);
|
|
16570
|
+
}
|
|
16307
16571
|
wallet.notifyIncomingFunds((funds) => {
|
|
16308
16572
|
const hasFunds = funds.type === "utxo" ? funds.coins.length > 0 : funds.newVtxos.length > 0;
|
|
16309
16573
|
if (settled || !hasFunds) return;
|
|
16310
|
-
|
|
16311
|
-
resolve(funds);
|
|
16312
|
-
stopFunc?.();
|
|
16574
|
+
settle(() => resolve(funds));
|
|
16313
16575
|
}).then((stop) => {
|
|
16314
16576
|
stopFunc = stop;
|
|
16315
16577
|
if (settled) stop();
|
|
16578
|
+
}).catch((error) => {
|
|
16579
|
+
cancel(error);
|
|
16316
16580
|
});
|
|
16317
16581
|
});
|
|
16318
16582
|
}
|
|
@@ -16608,7 +16872,7 @@ var MessageBus = class {
|
|
|
16608
16872
|
this.initialized = true;
|
|
16609
16873
|
}
|
|
16610
16874
|
async buildServices(config) {
|
|
16611
|
-
const arkProvider = new
|
|
16875
|
+
const arkProvider = new chunk57636V35_cjs.RestArkProvider(config.arkServer.url);
|
|
16612
16876
|
const storage = {
|
|
16613
16877
|
walletRepository: this.walletRepository,
|
|
16614
16878
|
contractRepository: this.contractRepository,
|
|
@@ -16950,7 +17214,7 @@ var offboardNetworkNames = [
|
|
|
16950
17214
|
function offboardDestinationScript(destinationAddress) {
|
|
16951
17215
|
for (const networkName of offboardNetworkNames) {
|
|
16952
17216
|
try {
|
|
16953
|
-
const network =
|
|
17217
|
+
const network = chunk57636V35_cjs.networks[networkName];
|
|
16954
17218
|
const addr = btcSigner.Address(network).decode(destinationAddress);
|
|
16955
17219
|
return btcSigner.OutScript.encode(addr);
|
|
16956
17220
|
} catch {
|
|
@@ -17014,7 +17278,7 @@ var Ramps = class {
|
|
|
17014
17278
|
}
|
|
17015
17279
|
amount = amount ?? totalAmount;
|
|
17016
17280
|
const offchainAddress = await this.wallet.getAddress();
|
|
17017
|
-
const offchainAddr =
|
|
17281
|
+
const offchainAddr = chunk57636V35_cjs.ArkAddress.decode(offchainAddress);
|
|
17018
17282
|
const offchainScript = base.hex.encode(offchainAddr.pkScript);
|
|
17019
17283
|
const outputFee = estimator.evalOffchainOutput({
|
|
17020
17284
|
amount,
|
|
@@ -17074,7 +17338,7 @@ var Ramps = class {
|
|
|
17074
17338
|
const filteredVtxos = [];
|
|
17075
17339
|
let totalAmount = 0n;
|
|
17076
17340
|
for (const vtxo of vtxos) {
|
|
17077
|
-
const inputFee = estimator.evalOffchainInput(
|
|
17341
|
+
const inputFee = estimator.evalOffchainInput(chunk57636V35_cjs.toOffchainInputFeeParams(vtxo));
|
|
17078
17342
|
if (inputFee.satoshis >= vtxo.value) {
|
|
17079
17343
|
continue;
|
|
17080
17344
|
}
|
|
@@ -17910,7 +18174,7 @@ var WalletMessageHandler = class {
|
|
|
17910
18174
|
// Wallet methods
|
|
17911
18175
|
async handleInitWallet({ payload }) {
|
|
17912
18176
|
const { arkServerUrl } = payload;
|
|
17913
|
-
this.indexerProvider = new
|
|
18177
|
+
this.indexerProvider = new chunk3KW4TWP2_cjs.RestIndexerProvider(arkServerUrl);
|
|
17914
18178
|
await this.onWalletInitialized();
|
|
17915
18179
|
}
|
|
17916
18180
|
/**
|
|
@@ -18199,7 +18463,7 @@ var WalletMessageHandler = class {
|
|
|
18199
18463
|
if (v.isUnrolled) {
|
|
18200
18464
|
return withUnrolled;
|
|
18201
18465
|
}
|
|
18202
|
-
if (
|
|
18466
|
+
if (chunk57636V35_cjs.hasTerminalSpend(v)) {
|
|
18203
18467
|
return false;
|
|
18204
18468
|
}
|
|
18205
18469
|
if (includeRecoverable) {
|
|
@@ -18208,10 +18472,10 @@ var WalletMessageHandler = class {
|
|
|
18208
18472
|
if (dustAmount != null && isSubdust(v, dustAmount)) {
|
|
18209
18473
|
return false;
|
|
18210
18474
|
}
|
|
18211
|
-
if (
|
|
18475
|
+
if (chunk57636V35_cjs.isRecoverable(v)) {
|
|
18212
18476
|
return false;
|
|
18213
18477
|
}
|
|
18214
|
-
if (
|
|
18478
|
+
if (chunk57636V35_cjs.isExpired(v)) {
|
|
18215
18479
|
return false;
|
|
18216
18480
|
}
|
|
18217
18481
|
return true;
|
|
@@ -18309,7 +18573,7 @@ var WalletMessageHandler = class {
|
|
|
18309
18573
|
if (!this.readonlyWallet) return null;
|
|
18310
18574
|
const { boardingTxs, commitmentsToIgnore } = await this.readonlyWallet.getBoardingTxs();
|
|
18311
18575
|
const indexerProvider = this.indexerProvider;
|
|
18312
|
-
const resolveTxCreatedAt = indexerProvider ? (txids) =>
|
|
18576
|
+
const resolveTxCreatedAt = indexerProvider ? (txids) => chunk57636V35_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
|
|
18313
18577
|
return buildTransactionHistory(vtxos, boardingTxs, commitmentsToIgnore, resolveTxCreatedAt);
|
|
18314
18578
|
}
|
|
18315
18579
|
async ensureContractEventBroadcasting() {
|
|
@@ -19005,7 +19269,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
19005
19269
|
};
|
|
19006
19270
|
try {
|
|
19007
19271
|
const response = await this.sendMessage(message);
|
|
19008
|
-
return response.payload.vtxos.map(
|
|
19272
|
+
return response.payload.vtxos.map(chunk57636V35_cjs.normalizeVtxo);
|
|
19009
19273
|
} catch (error) {
|
|
19010
19274
|
throw new Error(`Failed to get vtxos: ${error}`);
|
|
19011
19275
|
}
|
|
@@ -19030,7 +19294,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
19030
19294
|
};
|
|
19031
19295
|
try {
|
|
19032
19296
|
const response = await this.sendMessage(message);
|
|
19033
|
-
return response.payload.vtxos.map(
|
|
19297
|
+
return response.payload.vtxos.map(chunk57636V35_cjs.normalizeVtxo);
|
|
19034
19298
|
} catch (error) {
|
|
19035
19299
|
throw new Error(`Failed to get spendable vtxos: ${error}`);
|
|
19036
19300
|
}
|
|
@@ -19161,7 +19425,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
19161
19425
|
};
|
|
19162
19426
|
try {
|
|
19163
19427
|
const response = await sendContractMessage(message);
|
|
19164
|
-
return response.payload.vtxos.map(
|
|
19428
|
+
return response.payload.vtxos.map(chunk57636V35_cjs.normalizeVtxo);
|
|
19165
19429
|
} catch (e) {
|
|
19166
19430
|
throw new Error("Failed to annotate vtxos");
|
|
19167
19431
|
}
|
|
@@ -19762,7 +20026,7 @@ var ServiceWorkerWallet = class _ServiceWorkerWallet extends ServiceWorkerReadon
|
|
|
19762
20026
|
};
|
|
19763
20027
|
try {
|
|
19764
20028
|
const response = await wallet.sendMessage(message);
|
|
19765
|
-
return response.payload.vtxos.map(
|
|
20029
|
+
return response.payload.vtxos.map(chunk57636V35_cjs.normalizeVtxo);
|
|
19766
20030
|
} catch (e) {
|
|
19767
20031
|
throw new Error(`Failed to get expiring vtxos: ${e}`);
|
|
19768
20032
|
}
|
|
@@ -19874,12 +20138,12 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
19874
20138
|
* @returns Configured onchain wallet
|
|
19875
20139
|
* @throws Error if the configured identity cannot produce a valid x-only public key
|
|
19876
20140
|
*/
|
|
19877
|
-
static async create(identity, networkName =
|
|
20141
|
+
static async create(identity, networkName = chunk57636V35_cjs.DEFAULT_NETWORK_NAME, provider) {
|
|
19878
20142
|
const pubkey = await identity.xOnlyPublicKey();
|
|
19879
20143
|
if (!pubkey) {
|
|
19880
20144
|
throw new Error("Invalid configured public key");
|
|
19881
20145
|
}
|
|
19882
|
-
const network =
|
|
20146
|
+
const network = chunk57636V35_cjs.getNetwork(networkName);
|
|
19883
20147
|
const onchainProvider = provider || new EsploraProvider(ESPLORA_URL[networkName]);
|
|
19884
20148
|
const onchainP2TR = btcSigner.p2tr(pubkey, void 0, network);
|
|
19885
20149
|
return new _OnchainWallet(identity, network, onchainP2TR, onchainProvider);
|
|
@@ -19985,7 +20249,7 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
19985
20249
|
if (!inputs) {
|
|
19986
20250
|
throw new Error("Fee estimation failed");
|
|
19987
20251
|
}
|
|
19988
|
-
let tx = new
|
|
20252
|
+
let tx = new chunk57636V35_cjs.Transaction();
|
|
19989
20253
|
for (const input of inputs) {
|
|
19990
20254
|
tx.addInput({
|
|
19991
20255
|
txid: input.txid,
|
|
@@ -20043,7 +20307,7 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
20043
20307
|
* @throws If the parent has no anchor, or funding cannot be selected/signed
|
|
20044
20308
|
*/
|
|
20045
20309
|
async bumpAnchor(parentHex, feeRate) {
|
|
20046
|
-
const parent =
|
|
20310
|
+
const parent = chunk57636V35_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
|
|
20047
20311
|
const coins = (await this.getCoins()).filter((c) => c.status.confirmed);
|
|
20048
20312
|
const child = await this.buildBumpPackage(parent, feeRate, coins);
|
|
20049
20313
|
return [parent.hex, child.hex];
|
|
@@ -20142,6 +20406,7 @@ var ListUnspentMethod = "blockchain.scripthash.listunspent";
|
|
|
20142
20406
|
var MISSING_TRANSACTION = "missingtransaction";
|
|
20143
20407
|
var MAX_FETCH_TRANSACTIONS_ATTEMPTS = 5;
|
|
20144
20408
|
var BLOCK_HEADER_SIZE = 80;
|
|
20409
|
+
var MTP_WINDOW = 11;
|
|
20145
20410
|
function parseBlockHeader(headerHex) {
|
|
20146
20411
|
const headerBytes = base.hex.decode(headerHex);
|
|
20147
20412
|
if (headerBytes.length !== BLOCK_HEADER_SIZE) {
|
|
@@ -20448,6 +20713,8 @@ var ElectrumOnchainProvider = class {
|
|
|
20448
20713
|
ws;
|
|
20449
20714
|
network;
|
|
20450
20715
|
chain;
|
|
20716
|
+
mtpCache;
|
|
20717
|
+
mtpInflight;
|
|
20451
20718
|
async getCoins(address) {
|
|
20452
20719
|
const script = this.encodeAddress(address);
|
|
20453
20720
|
const scriptHash = toScriptHash(script);
|
|
@@ -20703,15 +20970,58 @@ var ElectrumOnchainProvider = class {
|
|
|
20703
20970
|
blockTime
|
|
20704
20971
|
};
|
|
20705
20972
|
}
|
|
20973
|
+
/** `time` is median-time-past, per {@link OnchainProvider.getChainTip};
|
|
20974
|
+
* Electrum serves raw headers and no MTP, so it is computed here. */
|
|
20706
20975
|
async getChainTip() {
|
|
20707
20976
|
const tip = await this.chain.subscribeHeaders();
|
|
20708
20977
|
const { hash, timestamp } = parseBlockHeader(tip.hex);
|
|
20709
20978
|
return {
|
|
20710
20979
|
height: tip.height,
|
|
20711
|
-
time: timestamp,
|
|
20980
|
+
time: await this.medianTimePast(tip.height, timestamp, hash),
|
|
20712
20981
|
hash
|
|
20713
20982
|
};
|
|
20714
20983
|
}
|
|
20984
|
+
/**
|
|
20985
|
+
* Consensus's `GetMedianTimePast`, ending at and including `height`.
|
|
20986
|
+
*
|
|
20987
|
+
* Cached per tip HASH, not height: this runs on every balance read, and
|
|
20988
|
+
* hashing means a reorg at the same height recomputes rather than serving
|
|
20989
|
+
* the orphaned chain's median.
|
|
20990
|
+
*/
|
|
20991
|
+
async medianTimePast(height, tipTime, hash) {
|
|
20992
|
+
if (this.mtpCache?.hash === hash) return this.mtpCache.mtp;
|
|
20993
|
+
if (this.mtpInflight?.hash === hash) return this.mtpInflight.mtp;
|
|
20994
|
+
const mtp = this.readMedianTimePast(height, tipTime, hash).finally(() => {
|
|
20995
|
+
this.mtpInflight = void 0;
|
|
20996
|
+
});
|
|
20997
|
+
this.mtpInflight = { hash, mtp };
|
|
20998
|
+
return mtp;
|
|
20999
|
+
}
|
|
21000
|
+
/** Degrades to the tip's `nTime` rather than throwing — a caller that
|
|
21001
|
+
* cannot read the tip at all is worse off. */
|
|
21002
|
+
async readMedianTimePast(height, tipTime, hash) {
|
|
21003
|
+
const heights = [];
|
|
21004
|
+
for (let h = height - 1; h >= 0 && heights.length < MTP_WINDOW - 1; h--) heights.push(h);
|
|
21005
|
+
if (heights.length === 0) return tipTime;
|
|
21006
|
+
let timestamps;
|
|
21007
|
+
try {
|
|
21008
|
+
const headers = await this.chain.fetchBlockHeaders(heights);
|
|
21009
|
+
timestamps = [
|
|
21010
|
+
tipTime,
|
|
21011
|
+
...headers.map((header) => parseBlockHeader(header.hex).timestamp)
|
|
21012
|
+
];
|
|
21013
|
+
} catch (e) {
|
|
21014
|
+
console.warn(
|
|
21015
|
+
"Failed to fetch the median-time-past window; using the tip's own time",
|
|
21016
|
+
e
|
|
21017
|
+
);
|
|
21018
|
+
return tipTime;
|
|
21019
|
+
}
|
|
21020
|
+
timestamps.sort((a, b) => a - b);
|
|
21021
|
+
const mtp = timestamps[Math.floor(timestamps.length / 2)];
|
|
21022
|
+
this.mtpCache = { hash, mtp };
|
|
21023
|
+
return mtp;
|
|
21024
|
+
}
|
|
20715
21025
|
async watchAddresses(addresses, eventCallback) {
|
|
20716
21026
|
const scripts = addresses.map((addr) => this.encodeAddress(addr));
|
|
20717
21027
|
const scriptHashes = scripts.map(toScriptHash);
|
|
@@ -20904,7 +21214,7 @@ async function resolvePrevTxs(txids, source, onchain) {
|
|
|
20904
21214
|
try {
|
|
20905
21215
|
const { txs } = await source.getVirtualTxs(wanted);
|
|
20906
21216
|
for (const psbt of txs) {
|
|
20907
|
-
const tx =
|
|
21217
|
+
const tx = chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(psbt));
|
|
20908
21218
|
resolved.set(tx.id, tx.toBytes());
|
|
20909
21219
|
}
|
|
20910
21220
|
} catch (err) {
|
|
@@ -20937,7 +21247,7 @@ async function resolvePrevTxs(txids, source, onchain) {
|
|
|
20937
21247
|
async function attachPrevArkTxs(tx, txids, source, onchain) {
|
|
20938
21248
|
const pending = [];
|
|
20939
21249
|
for (let i = 0; i < tx.inputsLength; i++) {
|
|
20940
|
-
if (
|
|
21250
|
+
if (chunk57636V35_cjs.getArkPsbtFields(tx, i, chunk57636V35_cjs.PrevArkTxField).length === 0) pending.push(i);
|
|
20941
21251
|
}
|
|
20942
21252
|
if (pending.length === 0) return;
|
|
20943
21253
|
const resolved = await resolvePrevTxs(
|
|
@@ -20946,13 +21256,13 @@ async function attachPrevArkTxs(tx, txids, source, onchain) {
|
|
|
20946
21256
|
onchain
|
|
20947
21257
|
);
|
|
20948
21258
|
for (const i of pending) {
|
|
20949
|
-
|
|
21259
|
+
chunk57636V35_cjs.setArkPsbtField(tx, i, chunk57636V35_cjs.PrevArkTxField, resolved.get(txidAt(txids, i)));
|
|
20950
21260
|
}
|
|
20951
21261
|
}
|
|
20952
21262
|
async function attachPrevoutTxs(tx, source) {
|
|
20953
21263
|
const pending = [];
|
|
20954
21264
|
for (let i = 0; i < tx.inputsLength; i++) {
|
|
20955
|
-
if (
|
|
21265
|
+
if (chunk57636V35_cjs.getArkPsbtFields(tx, i, chunk57636V35_cjs.PrevoutTxField).length > 0) continue;
|
|
20956
21266
|
const input = tx.getInput(i);
|
|
20957
21267
|
if (!input?.txid) throw new PrevTxUnavailableError(`input ${i} has no outpoint`);
|
|
20958
21268
|
pending.push({ index: i, txid: base.hex.encode(input.txid) });
|
|
@@ -20963,7 +21273,7 @@ async function attachPrevoutTxs(tx, source) {
|
|
|
20963
21273
|
resolved.set(txid, await source.getRawTransaction(txid));
|
|
20964
21274
|
}
|
|
20965
21275
|
for (const { index, txid } of pending) {
|
|
20966
|
-
|
|
21276
|
+
chunk57636V35_cjs.setArkPsbtField(tx, index, chunk57636V35_cjs.PrevoutTxField, resolved.get(txid));
|
|
20967
21277
|
}
|
|
20968
21278
|
}
|
|
20969
21279
|
async function withPrevTxs(coins, source, onchain) {
|
|
@@ -20989,7 +21299,7 @@ exports.BIP322 = void 0;
|
|
|
20989
21299
|
async function sign2(message, identity, network) {
|
|
20990
21300
|
const xOnlyPubKey = await identity.xOnlyPublicKey();
|
|
20991
21301
|
const payment = btcSigner.p2tr(xOnlyPubKey, void 0, network);
|
|
20992
|
-
const toSpend =
|
|
21302
|
+
const toSpend = chunk57636V35_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
|
|
20993
21303
|
const toSign = craftBIP322ToSignP2TR(toSpend, payment.script, xOnlyPubKey);
|
|
20994
21304
|
const signed = await identity.sign(toSign, [0]);
|
|
20995
21305
|
signed.finalizeIdx(0);
|
|
@@ -21047,7 +21357,7 @@ function verifyP2TR(message, witnessItems, pkScript, pubkey) {
|
|
|
21047
21357
|
if (sighashType !== btcSigner.SigHash.DEFAULT && sighashType !== btcSigner.SigHash.ALL) {
|
|
21048
21358
|
return false;
|
|
21049
21359
|
}
|
|
21050
|
-
const toSpend =
|
|
21360
|
+
const toSpend = chunk57636V35_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
|
|
21051
21361
|
const toSign = craftBIP322ToSignP2TR(toSpend, pkScript, pubkey);
|
|
21052
21362
|
const sighash = toSign.preimageWitnessV1(0, [pkScript], sighashType, [0n]);
|
|
21053
21363
|
const rawSig = sig.length === 65 ? sig.subarray(0, 64) : sig;
|
|
@@ -21068,7 +21378,7 @@ function verifyP2WPKH(message, witnessItems, pkScript, addressHash) {
|
|
|
21068
21378
|
}
|
|
21069
21379
|
const sighashType = sigWithHash[sigWithHash.length - 1];
|
|
21070
21380
|
const derSig = sigWithHash.subarray(0, sigWithHash.length - 1);
|
|
21071
|
-
const toSpend =
|
|
21381
|
+
const toSpend = chunk57636V35_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
|
|
21072
21382
|
const toSign = craftBIP322ToSignSimple(toSpend, pkScript);
|
|
21073
21383
|
const scriptCode = btcSigner.OutScript.encode({ type: "pkh", hash: addressHash });
|
|
21074
21384
|
const sighash = toSign.preimageWitnessV0(0, scriptCode, sighashType, 0n);
|
|
@@ -21121,7 +21431,7 @@ function encodeCompactSize(n) {
|
|
|
21121
21431
|
return buf;
|
|
21122
21432
|
}
|
|
21123
21433
|
function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
|
|
21124
|
-
const tx = new
|
|
21434
|
+
const tx = new chunk57636V35_cjs.Transaction({ version: 0 });
|
|
21125
21435
|
tx.addInput({
|
|
21126
21436
|
txid: toSpend.id,
|
|
21127
21437
|
index: 0,
|
|
@@ -21135,12 +21445,12 @@ function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
|
|
|
21135
21445
|
});
|
|
21136
21446
|
tx.addOutput({
|
|
21137
21447
|
amount: 0n,
|
|
21138
|
-
script:
|
|
21448
|
+
script: chunk57636V35_cjs.OP_RETURN_EMPTY_PKSCRIPT
|
|
21139
21449
|
});
|
|
21140
21450
|
return tx;
|
|
21141
21451
|
}
|
|
21142
21452
|
function craftBIP322ToSignSimple(toSpend, pkScript) {
|
|
21143
|
-
const tx = new
|
|
21453
|
+
const tx = new chunk57636V35_cjs.Transaction({ version: 0 });
|
|
21144
21454
|
tx.addInput({
|
|
21145
21455
|
txid: toSpend.id,
|
|
21146
21456
|
index: 0,
|
|
@@ -21152,7 +21462,7 @@ function craftBIP322ToSignSimple(toSpend, pkScript) {
|
|
|
21152
21462
|
});
|
|
21153
21463
|
tx.addOutput({
|
|
21154
21464
|
amount: 0n,
|
|
21155
|
-
script:
|
|
21465
|
+
script: chunk57636V35_cjs.OP_RETURN_EMPTY_PKSCRIPT
|
|
21156
21466
|
});
|
|
21157
21467
|
return tx;
|
|
21158
21468
|
}
|
|
@@ -21283,7 +21593,7 @@ var RestEmulatorProvider = class {
|
|
|
21283
21593
|
}
|
|
21284
21594
|
};
|
|
21285
21595
|
function finalizeVirtualTx(type, psbtBase64) {
|
|
21286
|
-
const tx =
|
|
21596
|
+
const tx = chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
|
|
21287
21597
|
if (type === "INDEXER_CHAINED_TX_TYPE_TREE" /* TREE */) {
|
|
21288
21598
|
const input = tx.getInput(0);
|
|
21289
21599
|
if (!input) {
|
|
@@ -21310,14 +21620,14 @@ var ExitPathError = class extends Error {
|
|
|
21310
21620
|
reason;
|
|
21311
21621
|
};
|
|
21312
21622
|
function delayWeight(sequence) {
|
|
21313
|
-
const t =
|
|
21623
|
+
const t = chunk57636V35_cjs.sequenceToTimelock(sequence);
|
|
21314
21624
|
return t.type === "blocks" ? Number(t.value) : Number(t.value) / 600;
|
|
21315
21625
|
}
|
|
21316
21626
|
async function resolveUnilateralPath(params) {
|
|
21317
21627
|
const { vtxo, scriptHex, contractRepository } = params;
|
|
21318
21628
|
const contract = contractRepository ? (await contractRepository.getContracts({ script: scriptHex }))[0] : void 0;
|
|
21319
21629
|
if (contract) {
|
|
21320
|
-
const handler =
|
|
21630
|
+
const handler = chunk3OKEUDHU_cjs.contractHandlers.get(contract.type);
|
|
21321
21631
|
if (!handler) {
|
|
21322
21632
|
throw new ExitPathError(
|
|
21323
21633
|
"no-handler",
|
|
@@ -21340,12 +21650,12 @@ async function resolveUnilateralPath(params) {
|
|
|
21340
21650
|
paths.sort((a, b) => delayWeight(a.sequence) - delayWeight(b.sequence));
|
|
21341
21651
|
return { selection: paths[0], label: `${contract.type}:unilateral` };
|
|
21342
21652
|
}
|
|
21343
|
-
const decoded =
|
|
21653
|
+
const decoded = chunk57636V35_cjs.VtxoScript.decode(vtxo.tapTree);
|
|
21344
21654
|
let best;
|
|
21345
21655
|
for (const exit of decoded.exitPaths()) {
|
|
21346
21656
|
const leaf = decoded.findLeaf(base.hex.encode(exit.script));
|
|
21347
21657
|
if (!leaf) continue;
|
|
21348
|
-
const sequence =
|
|
21658
|
+
const sequence = chunk57636V35_cjs.timelockToSequence(exit.params.timelock);
|
|
21349
21659
|
const weight = delayWeight(sequence);
|
|
21350
21660
|
if (!best || weight < best.weight) {
|
|
21351
21661
|
best = { selection: { leaf, sequence }, weight };
|
|
@@ -21565,7 +21875,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
21565
21875
|
let totalAmount = 0n;
|
|
21566
21876
|
const txWeightEstimator = TxWeightEstimator.create();
|
|
21567
21877
|
for (const vtxo of vtxos) {
|
|
21568
|
-
if (!
|
|
21878
|
+
if (!chunk57636V35_cjs.canSweepOnchain(vtxo)) {
|
|
21569
21879
|
throw new Error(
|
|
21570
21880
|
`Vtxo ${vtxo.txid}:${vtxo.vout} cannot be swept onchain: it is not fully unrolled (use unroll first), or its exit output was already spent`
|
|
21571
21881
|
);
|
|
@@ -21576,14 +21886,14 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
21576
21886
|
}
|
|
21577
21887
|
const resolved = await resolveUnilateralPath({
|
|
21578
21888
|
vtxo,
|
|
21579
|
-
scriptHex: base.hex.encode(
|
|
21889
|
+
scriptHex: base.hex.encode(chunk57636V35_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
|
|
21580
21890
|
contractRepository: wallet.contractRepository,
|
|
21581
21891
|
walletPubKeyHex: base.hex.encode(await wallet.identity.xOnlyPublicKey()),
|
|
21582
21892
|
currentTime: Date.now()
|
|
21583
21893
|
});
|
|
21584
21894
|
const spendingLeaf = resolved.selection.leaf;
|
|
21585
21895
|
const sequence = resolved.selection.sequence;
|
|
21586
|
-
const timelock =
|
|
21896
|
+
const timelock = chunk57636V35_cjs.sequenceToTimelock(sequence);
|
|
21587
21897
|
const elapsed = timelock.type === "blocks" ? chainTip.height >= txStatus.blockHeight + Number(timelock.value) : chainTip.time >= txStatus.blockTime + Number(timelock.value);
|
|
21588
21898
|
if (!elapsed) {
|
|
21589
21899
|
throw new Error(`no available exit path found for vtxo ${vtxo.txid}:${vtxo.vout}`);
|
|
@@ -21596,7 +21906,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
21596
21906
|
sequence,
|
|
21597
21907
|
witnessUtxo: {
|
|
21598
21908
|
amount: BigInt(vtxo.value),
|
|
21599
|
-
script:
|
|
21909
|
+
script: chunk57636V35_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
|
|
21600
21910
|
},
|
|
21601
21911
|
sighashType: btcSigner.SigHash.DEFAULT
|
|
21602
21912
|
});
|
|
@@ -21606,7 +21916,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
21606
21916
|
btcSigner.TaprootControlBlock.encode(spendingLeaf[0]).length
|
|
21607
21917
|
);
|
|
21608
21918
|
}
|
|
21609
|
-
const tx = new
|
|
21919
|
+
const tx = new chunk57636V35_cjs.Transaction({ version: 2 });
|
|
21610
21920
|
for (const input of inputs) {
|
|
21611
21921
|
tx.addInput(input);
|
|
21612
21922
|
}
|
|
@@ -21689,7 +21999,7 @@ async function buildSignedSweep(params) {
|
|
|
21689
21999
|
`uneconomic vtxo ${vtxo.txid}:${vtxo.vout}: value ${vtxo.value} - fee ${fee} < dust`
|
|
21690
22000
|
);
|
|
21691
22001
|
}
|
|
21692
|
-
const tx = new
|
|
22002
|
+
const tx = new chunk57636V35_cjs.Transaction({ version: 2 });
|
|
21693
22003
|
tx.addInput({
|
|
21694
22004
|
txid: vtxo.txid,
|
|
21695
22005
|
index: vtxo.vout,
|
|
@@ -21714,7 +22024,7 @@ async function buildSignedSweep(params) {
|
|
|
21714
22024
|
finalScriptWitness: [
|
|
21715
22025
|
tapScriptSig[0][1],
|
|
21716
22026
|
...path.extraWitness,
|
|
21717
|
-
|
|
22027
|
+
chunk57636V35_cjs.scriptFromTapLeafScript(path.leaf),
|
|
21718
22028
|
btcSigner.TaprootControlBlock.encode(controlBlock)
|
|
21719
22029
|
]
|
|
21720
22030
|
});
|
|
@@ -21744,7 +22054,7 @@ async function resolveFeeRate(opts) {
|
|
|
21744
22054
|
}
|
|
21745
22055
|
async function selectExitVtxos(opts) {
|
|
21746
22056
|
if (!opts.vtxos) return opts.wallet.getVtxos();
|
|
21747
|
-
const res = await
|
|
22057
|
+
const res = await chunk57636V35_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
|
|
21748
22058
|
const tapTrees = /* @__PURE__ */ new Map();
|
|
21749
22059
|
const out = [];
|
|
21750
22060
|
for (const vtxo of res.vtxos) {
|
|
@@ -21759,7 +22069,7 @@ async function selectExitVtxos(opts) {
|
|
|
21759
22069
|
`no contract registered for vtxo script ${vtxo.script} \u2014 register the contract before exiting`
|
|
21760
22070
|
);
|
|
21761
22071
|
}
|
|
21762
|
-
const handler =
|
|
22072
|
+
const handler = chunk3OKEUDHU_cjs.contractHandlers.get(contract.type);
|
|
21763
22073
|
if (!handler) {
|
|
21764
22074
|
throw new Error(`no contract handler registered for type '${contract.type}'`);
|
|
21765
22075
|
}
|
|
@@ -21789,7 +22099,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
21789
22099
|
if (pendingNodes.length > 0) {
|
|
21790
22100
|
const txs = await resolver.getVirtualTxs(pendingNodes.map((n) => n.txid));
|
|
21791
22101
|
for (const psbt of txs) {
|
|
21792
|
-
psbts.set(
|
|
22102
|
+
psbts.set(chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
21793
22103
|
}
|
|
21794
22104
|
}
|
|
21795
22105
|
const childVsize = Number(
|
|
@@ -21825,7 +22135,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
21825
22135
|
try {
|
|
21826
22136
|
const resolved = await resolveUnilateralPath({
|
|
21827
22137
|
vtxo,
|
|
21828
|
-
scriptHex: base.hex.encode(
|
|
22138
|
+
scriptHex: base.hex.encode(chunk57636V35_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
|
|
21829
22139
|
contractRepository: wallet.contractRepository,
|
|
21830
22140
|
walletPubKeyHex,
|
|
21831
22141
|
currentTime: Date.now()
|
|
@@ -21844,7 +22154,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
21844
22154
|
});
|
|
21845
22155
|
continue;
|
|
21846
22156
|
}
|
|
21847
|
-
const t =
|
|
22157
|
+
const t = chunk57636V35_cjs.sequenceToTimelock(resolved.selection.sequence);
|
|
21848
22158
|
const delay = { type: t.type, value: Number(t.value) };
|
|
21849
22159
|
infos.push({ outpoint, value: vtxo.value, sweepFee, path: resolved.label, delay });
|
|
21850
22160
|
sweeps.push({ vtxo, resolved, sweepFee, delay });
|
|
@@ -22245,7 +22555,7 @@ async function prepare(opts) {
|
|
|
22245
22555
|
txid: sweep.vtxo.txid,
|
|
22246
22556
|
vout: sweep.vtxo.vout,
|
|
22247
22557
|
value: sweep.vtxo.value,
|
|
22248
|
-
pkScript:
|
|
22558
|
+
pkScript: chunk57636V35_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
|
|
22249
22559
|
},
|
|
22250
22560
|
path: sweep.resolved.selection,
|
|
22251
22561
|
outputAddress: opts.sweepAddress,
|
|
@@ -22333,7 +22643,7 @@ async function prepare(opts) {
|
|
|
22333
22643
|
if (newFee <= splitterFee) break;
|
|
22334
22644
|
splitterFee = newFee;
|
|
22335
22645
|
}
|
|
22336
|
-
const splitter = new
|
|
22646
|
+
const splitter = new chunk57636V35_cjs.Transaction({ version: 2 });
|
|
22337
22647
|
for (const coin of selected.inputs) {
|
|
22338
22648
|
splitter.addInput({
|
|
22339
22649
|
txid: coin.txid,
|
|
@@ -22477,41 +22787,41 @@ var UnilateralExit = {
|
|
|
22477
22787
|
// src/arkade/index.ts
|
|
22478
22788
|
var arkade_exports = {};
|
|
22479
22789
|
chunk5BLDMQED_cjs.__export(arkade_exports, {
|
|
22480
|
-
ARKADE_OP: () =>
|
|
22481
|
-
ARKADE_OPCODES: () =>
|
|
22482
|
-
ARKADE_OPCODE_NAMES: () =>
|
|
22483
|
-
ARKADE_OPCODE_VALUES: () =>
|
|
22484
|
-
ARKADE_OPS: () =>
|
|
22790
|
+
ARKADE_OP: () => chunk3OKEUDHU_cjs.ARKADE_OP,
|
|
22791
|
+
ARKADE_OPCODES: () => chunk3OKEUDHU_cjs.ARKADE_OPCODES,
|
|
22792
|
+
ARKADE_OPCODE_NAMES: () => chunk3OKEUDHU_cjs.ARKADE_OPCODE_NAMES,
|
|
22793
|
+
ARKADE_OPCODE_VALUES: () => chunk3OKEUDHU_cjs.ARKADE_OPCODE_VALUES,
|
|
22794
|
+
ARKADE_OPS: () => chunk3OKEUDHU_cjs.ARKADE_OPS,
|
|
22485
22795
|
Arkade: () => Arkade,
|
|
22486
22796
|
ArkadeContract: () => ArkadeContract,
|
|
22487
|
-
ArkadeProgramScript: () =>
|
|
22488
|
-
ArkadeScript: () =>
|
|
22797
|
+
ArkadeProgramScript: () => chunk3OKEUDHU_cjs.ArkadeProgramScript,
|
|
22798
|
+
ArkadeScript: () => chunk3OKEUDHU_cjs.ArkadeScript,
|
|
22489
22799
|
ArkadeTransactionBuilder: () => ArkadeTransactionBuilder,
|
|
22490
|
-
BigNum: () =>
|
|
22800
|
+
BigNum: () => chunk3OKEUDHU_cjs.bignum_exports,
|
|
22491
22801
|
OP: () => btcSigner.OP,
|
|
22492
|
-
OPCODE_NAMES: () =>
|
|
22493
|
-
OPCODE_VALUES: () =>
|
|
22494
|
-
SUPPORTED_PROGRAM_VERSION: () =>
|
|
22802
|
+
OPCODE_NAMES: () => chunk3OKEUDHU_cjs.OPCODE_NAMES,
|
|
22803
|
+
OPCODE_VALUES: () => chunk3OKEUDHU_cjs.OPCODE_VALUES,
|
|
22804
|
+
SUPPORTED_PROGRAM_VERSION: () => chunk3OKEUDHU_cjs.SUPPORTED_PROGRAM_VERSION,
|
|
22495
22805
|
Script: () => btcSigner.Script,
|
|
22496
|
-
arkadeScriptHash: () =>
|
|
22497
|
-
arkadeWitnessHash: () =>
|
|
22498
|
-
asmToBytes: () =>
|
|
22499
|
-
bytesToASM: () =>
|
|
22500
|
-
computeArkadeScriptPublicKey: () =>
|
|
22806
|
+
arkadeScriptHash: () => chunk3OKEUDHU_cjs.arkadeScriptHash,
|
|
22807
|
+
arkadeWitnessHash: () => chunk3OKEUDHU_cjs.arkadeWitnessHash,
|
|
22808
|
+
asmToBytes: () => chunk3OKEUDHU_cjs.asmToBytes,
|
|
22809
|
+
bytesToASM: () => chunk3OKEUDHU_cjs.bytesToASM,
|
|
22810
|
+
computeArkadeScriptPublicKey: () => chunk3OKEUDHU_cjs.computeArkadeScriptPublicKey,
|
|
22501
22811
|
createArkadeBatchHandler: () => createArkadeBatchHandler,
|
|
22502
|
-
deserializeArkadeContractParams: () =>
|
|
22503
|
-
fromASM: () =>
|
|
22504
|
-
getOpcodeName: () =>
|
|
22505
|
-
getOpcodeValue: () =>
|
|
22506
|
-
parseArtifact: () =>
|
|
22507
|
-
resolveAsm: () =>
|
|
22508
|
-
serializeArkadeContractParams: () =>
|
|
22509
|
-
stringifyArtifact: () =>
|
|
22510
|
-
toASM: () =>
|
|
22511
|
-
validateProgram: () =>
|
|
22512
|
-
witnessRefToBytes: () =>
|
|
22812
|
+
deserializeArkadeContractParams: () => chunk3OKEUDHU_cjs.deserializeArkadeContractParams,
|
|
22813
|
+
fromASM: () => chunk3OKEUDHU_cjs.fromASM,
|
|
22814
|
+
getOpcodeName: () => chunk3OKEUDHU_cjs.getOpcodeName,
|
|
22815
|
+
getOpcodeValue: () => chunk3OKEUDHU_cjs.getOpcodeValue,
|
|
22816
|
+
parseArtifact: () => chunk3OKEUDHU_cjs.parseArtifact,
|
|
22817
|
+
resolveAsm: () => chunk3OKEUDHU_cjs.resolveAsm,
|
|
22818
|
+
serializeArkadeContractParams: () => chunk3OKEUDHU_cjs.serializeArkadeContractParams,
|
|
22819
|
+
stringifyArtifact: () => chunk3OKEUDHU_cjs.stringifyArtifact,
|
|
22820
|
+
toASM: () => chunk3OKEUDHU_cjs.toASM,
|
|
22821
|
+
validateProgram: () => chunk3OKEUDHU_cjs.validateProgram,
|
|
22822
|
+
witnessRefToBytes: () => chunk3OKEUDHU_cjs.witnessRefToBytes
|
|
22513
22823
|
});
|
|
22514
|
-
var isVtxoCoin = (input) =>
|
|
22824
|
+
var isVtxoCoin = (input) => chunk57636V35_cjs.isVirtualCoin(input);
|
|
22515
22825
|
function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message, session, arkProvider, emulator, network, recipients, batchExpiryPolicy) {
|
|
22516
22826
|
let batchId;
|
|
22517
22827
|
let sweepTapTreeRoot;
|
|
@@ -22532,23 +22842,23 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
22532
22842
|
);
|
|
22533
22843
|
await arkProvider.confirmRegistration(intentId);
|
|
22534
22844
|
batchId = event.id;
|
|
22535
|
-
const sweepTapscript =
|
|
22845
|
+
const sweepTapscript = chunk57636V35_cjs.CSVMultisigTapscript.encode({
|
|
22536
22846
|
timelock,
|
|
22537
|
-
pubkeys: [
|
|
22847
|
+
pubkeys: [chunk3OKEUDHU_cjs.toXOnly(base.hex.decode(info.forfeitPubkey), "forfeit key")]
|
|
22538
22848
|
}).script;
|
|
22539
22849
|
sweepTapTreeRoot = payment_js.tapLeafHash(sweepTapscript);
|
|
22540
22850
|
return { skip: false };
|
|
22541
22851
|
},
|
|
22542
22852
|
onTreeSigningStarted: async (event, vtxoTree) => {
|
|
22543
22853
|
const signerPubKey = await session.getPublicKey();
|
|
22544
|
-
const xonlySignerPubKey =
|
|
22854
|
+
const xonlySignerPubKey = chunk3OKEUDHU_cjs.toXOnly(signerPubKey, "signer key");
|
|
22545
22855
|
const xOnlyPubkeys = event.cosignersPublicKeys.map(
|
|
22546
|
-
(k) => base.hex.encode(
|
|
22856
|
+
(k) => base.hex.encode(chunk3OKEUDHU_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
|
|
22547
22857
|
);
|
|
22548
22858
|
if (!xOnlyPubkeys.includes(base.hex.encode(xonlySignerPubKey))) {
|
|
22549
22859
|
return { skip: true };
|
|
22550
22860
|
}
|
|
22551
|
-
const commitmentTx =
|
|
22861
|
+
const commitmentTx = chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
|
|
22552
22862
|
validateVtxoTxGraph(vtxoTree, commitmentTx, sweepTapTreeRoot);
|
|
22553
22863
|
if (recipients && recipients.length > 0) {
|
|
22554
22864
|
validateBatchRecipients(commitmentTx, vtxoTree.leaves(), recipients, network);
|
|
@@ -22580,7 +22890,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
22580
22890
|
if (connectorTree) {
|
|
22581
22891
|
validateConnectorsTxGraph(event.commitmentTx, connectorTree);
|
|
22582
22892
|
}
|
|
22583
|
-
let commitmentPsbt =
|
|
22893
|
+
let commitmentPsbt = chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
|
|
22584
22894
|
assertFinalCommitmentMatchesValidated(
|
|
22585
22895
|
commitmentPsbt,
|
|
22586
22896
|
validatedCommitmentTxid,
|
|
@@ -22615,7 +22925,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
22615
22925
|
boardingIndices.push(boardingIdx);
|
|
22616
22926
|
continue;
|
|
22617
22927
|
}
|
|
22618
|
-
if (
|
|
22928
|
+
if (chunk57636V35_cjs.isRecoverable(input) || isSubdust(input, info.dust)) {
|
|
22619
22929
|
continue;
|
|
22620
22930
|
}
|
|
22621
22931
|
if (connectorIndex >= connectorLeaves.length) {
|
|
@@ -22636,7 +22946,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
22636
22946
|
index: input.vout,
|
|
22637
22947
|
witnessUtxo: {
|
|
22638
22948
|
amount: BigInt(input.value),
|
|
22639
|
-
script:
|
|
22949
|
+
script: chunk57636V35_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
22640
22950
|
},
|
|
22641
22951
|
sighashType: btcSigner.SigHash.DEFAULT,
|
|
22642
22952
|
tapLeafScript: [input.forfeitTapLeafScript]
|
|
@@ -22727,16 +23037,16 @@ var Arkade = class _Arkade {
|
|
|
22727
23037
|
/** Connect and resolve the server key, checkpoint closure and (if present) the co-signer key. */
|
|
22728
23038
|
static async connect(opts) {
|
|
22729
23039
|
const info = await opts.arkade.getInfo();
|
|
22730
|
-
const serverKey =
|
|
22731
|
-
const checkpoint =
|
|
22732
|
-
const network = opts.network ??
|
|
23040
|
+
const serverKey = chunk3OKEUDHU_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
|
|
23041
|
+
const checkpoint = chunk57636V35_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
|
|
23042
|
+
const network = opts.network ?? chunk57636V35_cjs.DEFAULT_NETWORK;
|
|
22733
23043
|
let emulatorKey;
|
|
22734
23044
|
if (opts.emulator) {
|
|
22735
|
-
emulatorKey = base.hex.decode(
|
|
23045
|
+
emulatorKey = base.hex.decode(chunk57636V35_cjs.resolveEmulatorPubkey(network, opts.emulatorPubkey));
|
|
22736
23046
|
}
|
|
22737
23047
|
let userKey;
|
|
22738
23048
|
if (opts.identity) {
|
|
22739
|
-
userKey =
|
|
23049
|
+
userKey = chunk3OKEUDHU_cjs.toXOnly(await opts.identity.xOnlyPublicKey(), "identity key");
|
|
22740
23050
|
}
|
|
22741
23051
|
return new _Arkade({
|
|
22742
23052
|
arkProvider: opts.arkade,
|
|
@@ -22762,7 +23072,7 @@ var Arkade = class _Arkade {
|
|
|
22762
23072
|
* key respectively; explicit args always win.
|
|
22763
23073
|
*/
|
|
22764
23074
|
contract(program, args = {}) {
|
|
22765
|
-
const declared = (program.params ?? []).map(
|
|
23075
|
+
const declared = (program.params ?? []).map(chunk3OKEUDHU_cjs.inputName);
|
|
22766
23076
|
if (declared.includes("server") && args.server === void 0) {
|
|
22767
23077
|
args = { ...args, server: this.serverKey };
|
|
22768
23078
|
}
|
|
@@ -22782,7 +23092,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
22782
23092
|
userKey: client.userKey,
|
|
22783
23093
|
emulatorKey: client.emulatorKey
|
|
22784
23094
|
};
|
|
22785
|
-
this.vtxoScript = new
|
|
23095
|
+
this.vtxoScript = new chunk3OKEUDHU_cjs.ArkadeProgramScript(program, args, this.keys);
|
|
22786
23096
|
this.tapTree = this.vtxoScript.encode();
|
|
22787
23097
|
this.compiled = this.vtxoScript.compiled;
|
|
22788
23098
|
}
|
|
@@ -22810,7 +23120,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
22810
23120
|
`ArkadeContract.fromContract: expected contract type 'arkade', got '${contract.type}'`
|
|
22811
23121
|
);
|
|
22812
23122
|
}
|
|
22813
|
-
const typed =
|
|
23123
|
+
const typed = chunk3OKEUDHU_cjs.deserializeArkadeContractParams(contract.params);
|
|
22814
23124
|
return new _ArkadeContract(client, typed.program, typed.args, {
|
|
22815
23125
|
serverKey: typed.serverKey,
|
|
22816
23126
|
userKey: typed.userKey,
|
|
@@ -22851,7 +23161,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
22851
23161
|
toContractParams() {
|
|
22852
23162
|
return {
|
|
22853
23163
|
type: "arkade",
|
|
22854
|
-
params:
|
|
23164
|
+
params: chunk3OKEUDHU_cjs.serializeArkadeContractParams({
|
|
22855
23165
|
program: this.program,
|
|
22856
23166
|
args: this.args,
|
|
22857
23167
|
serverKey: this.keys.serverKey,
|
|
@@ -22901,18 +23211,18 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
22901
23211
|
if (registered) {
|
|
22902
23212
|
const [withVtxos] = await manager.getContractsWithVtxos({ script: scriptHex });
|
|
22903
23213
|
return (withVtxos?.vtxos ?? []).filter(
|
|
22904
|
-
(v) => !
|
|
23214
|
+
(v) => !chunk57636V35_cjs.hasTerminalSpend(v) && !v.isUnrolled
|
|
22905
23215
|
);
|
|
22906
23216
|
}
|
|
22907
23217
|
}
|
|
22908
23218
|
if (!this.client.indexer) {
|
|
22909
23219
|
throw new Error("ArkadeContract.getUtxos: an indexer is required");
|
|
22910
23220
|
}
|
|
22911
|
-
const { vtxos } = await
|
|
23221
|
+
const { vtxos } = await chunk57636V35_cjs.getNormalizedVtxos(this.client.indexer, {
|
|
22912
23222
|
scripts: [scriptHex],
|
|
22913
23223
|
spendableOnly: true
|
|
22914
23224
|
});
|
|
22915
|
-
return vtxos.filter((v) => !
|
|
23225
|
+
return vtxos.filter((v) => !chunk57636V35_cjs.hasTerminalSpend(v) && !v.isUnrolled);
|
|
22916
23226
|
}
|
|
22917
23227
|
/** Total spendable balance (requires an indexer). */
|
|
22918
23228
|
async getBalance() {
|
|
@@ -23010,7 +23320,7 @@ var ArkadeTransactionBuilder = class {
|
|
|
23010
23320
|
this.contract.client.checkpoint
|
|
23011
23321
|
);
|
|
23012
23322
|
if (coin.sourceTx) {
|
|
23013
|
-
|
|
23323
|
+
chunk57636V35_cjs.setArkPsbtField(arkTx, 0, chunk57636V35_cjs.PrevArkTxField, coin.sourceTx);
|
|
23014
23324
|
}
|
|
23015
23325
|
if (this.fn.arkadeScript) {
|
|
23016
23326
|
const indexer = this.contract.client.indexer;
|
|
@@ -23027,8 +23337,8 @@ var ArkadeTransactionBuilder = class {
|
|
|
23027
23337
|
}
|
|
23028
23338
|
const condition = (def.tapscript.witness ?? []).map((w) => this.witnessBytes(w));
|
|
23029
23339
|
if (condition.length > 0) {
|
|
23030
|
-
|
|
23031
|
-
|
|
23340
|
+
chunk57636V35_cjs.setArkPsbtField(arkTx, 0, chunk57636V35_cjs.ConditionWitness, condition);
|
|
23341
|
+
chunk57636V35_cjs.setArkPsbtField(checkpoints[0], 0, chunk57636V35_cjs.ConditionWitness, condition);
|
|
23032
23342
|
}
|
|
23033
23343
|
const packets = [];
|
|
23034
23344
|
if (this.assetSpecs.length > 0) {
|
|
@@ -23067,7 +23377,7 @@ var ArkadeTransactionBuilder = class {
|
|
|
23067
23377
|
base.base64.encode(signedArk2.toPSBT()),
|
|
23068
23378
|
signedCps.map((c) => base.base64.encode(c.toPSBT()))
|
|
23069
23379
|
);
|
|
23070
|
-
const txid =
|
|
23380
|
+
const txid = chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(res2.signedArkTx)).id;
|
|
23071
23381
|
return {
|
|
23072
23382
|
txid,
|
|
23073
23383
|
signedArkTx: res2.signedArkTx,
|
|
@@ -23126,23 +23436,23 @@ var ArkadeTransactionBuilder = class {
|
|
|
23126
23436
|
}
|
|
23127
23437
|
buildAssetPacket() {
|
|
23128
23438
|
const groups = this.assetSpecs.map((s) => {
|
|
23129
|
-
const id = typeof s.assetId === "string" ?
|
|
23130
|
-
return
|
|
23439
|
+
const id = typeof s.assetId === "string" ? chunk3KW4TWP2_cjs.AssetId.fromString(s.assetId) : chunk3KW4TWP2_cjs.AssetId.fromBytes(s.assetId);
|
|
23440
|
+
return chunk3KW4TWP2_cjs.AssetGroup.create(
|
|
23131
23441
|
id,
|
|
23132
23442
|
null,
|
|
23133
|
-
s.inputs.map((i) =>
|
|
23134
|
-
s.outputs.map((o) =>
|
|
23135
|
-
(s.metadata ?? []).map((m) =>
|
|
23443
|
+
s.inputs.map((i) => chunk3KW4TWP2_cjs.AssetInput.create(i.vin, i.amount)),
|
|
23444
|
+
s.outputs.map((o) => chunk3KW4TWP2_cjs.AssetOutput.create(o.vout, o.amount)),
|
|
23445
|
+
(s.metadata ?? []).map((m) => chunk3KW4TWP2_cjs.Metadata.create(m.key, m.value))
|
|
23136
23446
|
);
|
|
23137
23447
|
});
|
|
23138
|
-
return
|
|
23448
|
+
return chunk3KW4TWP2_cjs.Packet.create(groups);
|
|
23139
23449
|
}
|
|
23140
23450
|
witnessBytes(ref) {
|
|
23141
|
-
return
|
|
23451
|
+
return chunk3OKEUDHU_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
|
|
23142
23452
|
}
|
|
23143
23453
|
};
|
|
23144
23454
|
function bindInputs(fn, callArgs) {
|
|
23145
|
-
const names = (fn.def.inputs ?? []).map(
|
|
23455
|
+
const names = (fn.def.inputs ?? []).map(chunk3OKEUDHU_cjs.inputName);
|
|
23146
23456
|
if (callArgs.length !== names.length) {
|
|
23147
23457
|
throw new Error(`${fn.name}: expected ${names.length} argument(s), got ${callArgs.length}`);
|
|
23148
23458
|
}
|
|
@@ -23335,6 +23645,33 @@ function tryResolveSendAmount(raw, amount) {
|
|
|
23335
23645
|
const amt = amount ?? BIP21.amountSats(raw);
|
|
23336
23646
|
return amt !== void 0 && Number.isInteger(amt) && amt > 0 ? amt : void 0;
|
|
23337
23647
|
}
|
|
23648
|
+
function assetsOf(req) {
|
|
23649
|
+
return req.assets ?? [];
|
|
23650
|
+
}
|
|
23651
|
+
function assertNoAssets(railId, req) {
|
|
23652
|
+
const assets = assetsOf(req);
|
|
23653
|
+
if (assets.length > 0) {
|
|
23654
|
+
throw new Error(
|
|
23655
|
+
`${railId}: cannot deliver ${assets.map((a) => a.assetId).join(", ")} \u2014 this rail moves BTC only`
|
|
23656
|
+
);
|
|
23657
|
+
}
|
|
23658
|
+
}
|
|
23659
|
+
function resolveAssetAmount(railId, req) {
|
|
23660
|
+
const assets = assetsOf(req);
|
|
23661
|
+
if (assets.length !== 1) {
|
|
23662
|
+
throw new Error(`${railId}: expected exactly one asset to pay, got ${assets.length}`);
|
|
23663
|
+
}
|
|
23664
|
+
const [asset] = assets;
|
|
23665
|
+
if (typeof asset.amount !== "bigint" || asset.amount <= 0n) {
|
|
23666
|
+
throw new Error(
|
|
23667
|
+
`${railId}: invalid amount ${String(asset.amount)} of ${asset.assetId} (expected a positive bigint of atomic units)`
|
|
23668
|
+
);
|
|
23669
|
+
}
|
|
23670
|
+
if (typeof asset.assetId !== "string" || asset.assetId.length === 0) {
|
|
23671
|
+
throw new Error(`${railId}: an asset amount must name an asset`);
|
|
23672
|
+
}
|
|
23673
|
+
return asset;
|
|
23674
|
+
}
|
|
23338
23675
|
|
|
23339
23676
|
// src/payment/handle.ts
|
|
23340
23677
|
function makeHandle(id, run) {
|
|
@@ -23457,8 +23794,10 @@ function arkRail() {
|
|
|
23457
23794
|
return {
|
|
23458
23795
|
id: "ark",
|
|
23459
23796
|
match: (req) => arkTarget(req.raw) !== void 0,
|
|
23797
|
+
available: (req) => assetsOf(req).length === 0,
|
|
23460
23798
|
quote: async (req, ctx) => {
|
|
23461
23799
|
const address = arkTarget(req.raw);
|
|
23800
|
+
assertNoAssets("ark", req);
|
|
23462
23801
|
const amt = resolveSendAmount("ark", req.raw, req.amount);
|
|
23463
23802
|
return {
|
|
23464
23803
|
railId: "ark",
|
|
@@ -23475,6 +23814,41 @@ function arkRail() {
|
|
|
23475
23814
|
}
|
|
23476
23815
|
};
|
|
23477
23816
|
}
|
|
23817
|
+
|
|
23818
|
+
// src/payment/rails/arkAsset.ts
|
|
23819
|
+
var ASSET_CARRIER_SATS = 330;
|
|
23820
|
+
function arkAssetRail() {
|
|
23821
|
+
return {
|
|
23822
|
+
id: "ark-asset",
|
|
23823
|
+
match: (req) => arkTarget(req.raw) !== void 0,
|
|
23824
|
+
// A malformed asset is `quote()`'s to name, not this rail's to drop.
|
|
23825
|
+
available: (req) => assetsOf(req).length > 0,
|
|
23826
|
+
quote: async (req, ctx) => {
|
|
23827
|
+
const address = arkTarget(req.raw);
|
|
23828
|
+
const asset = resolveAssetAmount("ark-asset", req);
|
|
23829
|
+
if (req.amount !== void 0) assertSendableAmount("ark-asset", req.amount);
|
|
23830
|
+
const carrier = tryResolveSendAmount(req.raw, req.amount) ?? ASSET_CARRIER_SATS;
|
|
23831
|
+
return {
|
|
23832
|
+
railId: "ark-asset",
|
|
23833
|
+
amount: carrier,
|
|
23834
|
+
fee: 0,
|
|
23835
|
+
total: carrier,
|
|
23836
|
+
assets: { delivered: asset, spent: asset },
|
|
23837
|
+
send: async () => makeHandle("ark-asset", async (emit) => {
|
|
23838
|
+
const txid = await ctx.wallet.send({
|
|
23839
|
+
address,
|
|
23840
|
+
amount: carrier,
|
|
23841
|
+
assets: [asset]
|
|
23842
|
+
});
|
|
23843
|
+
const result = { railId: "ark-asset", txid };
|
|
23844
|
+
emit({ status: "settled", result });
|
|
23845
|
+
return result;
|
|
23846
|
+
})
|
|
23847
|
+
};
|
|
23848
|
+
}
|
|
23849
|
+
};
|
|
23850
|
+
}
|
|
23851
|
+
var walletFeeSource = (wallet) => async () => (await wallet.arkProvider.getInfo()).fees;
|
|
23478
23852
|
var GROSS_UP_MAX_ROUNDS = 8;
|
|
23479
23853
|
function grossUpOffboard(net, feeInfo, script) {
|
|
23480
23854
|
const estimator = new Estimator(feeInfo?.intentFee ?? {});
|
|
@@ -23487,14 +23861,20 @@ function grossUpOffboard(net, feeInfo, script) {
|
|
|
23487
23861
|
}
|
|
23488
23862
|
return { gross, fee: gross - net };
|
|
23489
23863
|
}
|
|
23490
|
-
function onchainRail() {
|
|
23864
|
+
function onchainRail(deps) {
|
|
23865
|
+
if (typeof deps?.feeInfo !== "function") {
|
|
23866
|
+
throw new Error("onchain rail: a feeInfo source is required");
|
|
23867
|
+
}
|
|
23491
23868
|
return {
|
|
23492
23869
|
id: "onchain",
|
|
23493
23870
|
match: (req) => btcTarget(req.raw) !== void 0,
|
|
23871
|
+
// BTC only: an Arkade asset has no L1 representation to offboard to.
|
|
23872
|
+
available: (req) => assetsOf(req).length === 0,
|
|
23494
23873
|
quote: async (req, ctx) => {
|
|
23874
|
+
assertNoAssets("onchain", req);
|
|
23495
23875
|
const address = btcTarget(req.raw);
|
|
23496
23876
|
const amt = resolveSendAmount("onchain", req.raw, req.amount);
|
|
23497
|
-
const
|
|
23877
|
+
const fees = await deps.feeInfo();
|
|
23498
23878
|
const script = base.hex.encode(offboardDestinationScript(address));
|
|
23499
23879
|
const { gross, fee } = grossUpOffboard(amt, fees, script);
|
|
23500
23880
|
return {
|
|
@@ -23521,8 +23901,8 @@ function onchainRail() {
|
|
|
23521
23901
|
function createDefaultPaymentRouter(wallet) {
|
|
23522
23902
|
return new PaymentRouter({
|
|
23523
23903
|
wallet,
|
|
23524
|
-
prefs: { priority: ["ark", "lightning", "onchain"] }
|
|
23525
|
-
}).use(arkRail()).use(onchainRail());
|
|
23904
|
+
prefs: { priority: ["ark", "ark-asset", "lightning", "onchain"] }
|
|
23905
|
+
}).use(arkRail()).use(arkAssetRail()).use(onchainRail({ feeInfo: walletFeeSource(wallet) }));
|
|
23526
23906
|
}
|
|
23527
23907
|
/*! Bundled license information:
|
|
23528
23908
|
|
|
@@ -23533,6 +23913,8 @@ function createDefaultPaymentRouter(wallet) {
|
|
|
23533
23913
|
exports.ARKADE_MAGIC = ARKADE_MAGIC;
|
|
23534
23914
|
exports.ARKADE_SALTED_PREIMAGE_TAG = ARKADE_SALTED_PREIMAGE_TAG;
|
|
23535
23915
|
exports.ARKADE_SWAP_PREIMAGE_TAG = ARKADE_SWAP_PREIMAGE_TAG;
|
|
23916
|
+
exports.ASSET_CARRIER_SATS = ASSET_CARRIER_SATS;
|
|
23917
|
+
exports.AbortError = AbortError;
|
|
23536
23918
|
exports.ActivityRegistry = ActivityRegistry;
|
|
23537
23919
|
exports.AmbiguousRouteError = AmbiguousRouteError;
|
|
23538
23920
|
exports.ArkNote = ArkNote;
|
|
@@ -23626,16 +24008,19 @@ exports.WalletNotInitializedError = WalletNotInitializedError;
|
|
|
23626
24008
|
exports.WalletRepositoryImpl = WalletRepositoryImpl;
|
|
23627
24009
|
exports.WsElectrumChainSource = WsElectrumChainSource;
|
|
23628
24010
|
exports.adoptContractDescriptor = adoptContractDescriptor;
|
|
24011
|
+
exports.arkAssetRail = arkAssetRail;
|
|
23629
24012
|
exports.arkRail = arkRail;
|
|
23630
24013
|
exports.arkTarget = arkTarget;
|
|
23631
24014
|
exports.arkade_exports = arkade_exports;
|
|
23632
24015
|
exports.assertFinalCommitmentMatchesValidated = assertFinalCommitmentMatchesValidated;
|
|
23633
24016
|
exports.assertIntentIdUnique = assertIntentIdUnique;
|
|
24017
|
+
exports.assertNoAssets = assertNoAssets;
|
|
23634
24018
|
exports.assertSendableAmount = assertSendableAmount;
|
|
23635
24019
|
exports.assertSubmittedArkTxid = assertSubmittedArkTxid;
|
|
23636
24020
|
exports.assertValidBatchExpiry = assertValidBatchExpiry;
|
|
23637
24021
|
exports.assertValidServerUnrollScript = assertValidServerUnrollScript;
|
|
23638
24022
|
exports.assetMintResolver = assetMintResolver;
|
|
24023
|
+
exports.assetsOf = assetsOf;
|
|
23639
24024
|
exports.attachPrevArkTxs = attachPrevArkTxs;
|
|
23640
24025
|
exports.attachPrevoutTxs = attachPrevoutTxs;
|
|
23641
24026
|
exports.awaitTransaction = awaitTransaction;
|
|
@@ -23719,6 +24104,7 @@ exports.promisifyRequest = promisifyRequest;
|
|
|
23719
24104
|
exports.provisionClaimSecret = provisionClaimSecret;
|
|
23720
24105
|
exports.provisionRefundKey = provisionRefundKey;
|
|
23721
24106
|
exports.requiresMigration = requiresMigration;
|
|
24107
|
+
exports.resolveAssetAmount = resolveAssetAmount;
|
|
23722
24108
|
exports.resolveBatchExpiryPolicy = resolveBatchExpiryPolicy;
|
|
23723
24109
|
exports.resolveCheckpointExitDelayPolicy = resolveCheckpointExitDelayPolicy;
|
|
23724
24110
|
exports.resolveDescriptorSigner = resolveDescriptorSigner;
|
|
@@ -23745,7 +24131,8 @@ exports.validateConnectorsTxGraph = validateConnectorsTxGraph;
|
|
|
23745
24131
|
exports.validateVtxoTxGraph = validateVtxoTxGraph;
|
|
23746
24132
|
exports.verifyTapscriptSignatures = verifyTapscriptSignatures;
|
|
23747
24133
|
exports.waitForIncomingFunds = waitForIncomingFunds;
|
|
24134
|
+
exports.walletFeeSource = walletFeeSource;
|
|
23748
24135
|
exports.warnAndFilterVtxosForScript = warnAndFilterVtxosForScript;
|
|
23749
24136
|
exports.withPrevTxs = withPrevTxs;
|
|
23750
|
-
//# sourceMappingURL=chunk-
|
|
23751
|
-
//# sourceMappingURL=chunk-
|
|
24137
|
+
//# sourceMappingURL=chunk-XTCOSZ34.cjs.map
|
|
24138
|
+
//# sourceMappingURL=chunk-XTCOSZ34.cjs.map
|