@arkade-os/sdk 0.4.64 → 0.4.66
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/dist/adapters/expo.cjs +5 -5
- package/dist/adapters/expo.d.cts +3 -6
- package/dist/adapters/expo.d.ts +3 -6
- package/dist/adapters/expo.js +3 -3
- package/dist/adapters/indexedDB.cjs +5 -5
- package/dist/adapters/indexedDB.js +4 -4
- package/dist/{asyncStorageTaskQueue-Dq_UcvDx.d.ts → asyncStorageTaskQueue-B6SijMi3.d.ts} +1 -1
- package/dist/{asyncStorageTaskQueue-Chwe60Ce.d.cts → asyncStorageTaskQueue-BZcIN7sA.d.cts} +1 -1
- package/dist/{chunk-HQ2DDMQN.js → chunk-2JZGPXU4.js} +170 -6
- package/dist/chunk-2JZGPXU4.js.map +1 -0
- package/dist/{chunk-RXITDAV4.cjs → chunk-3S3JZUEN.cjs} +184 -19
- package/dist/chunk-3S3JZUEN.cjs.map +1 -0
- package/dist/{chunk-USXWE2EJ.js → chunk-55ZZ6RBL.js} +4 -4
- package/dist/{chunk-USXWE2EJ.js.map → chunk-55ZZ6RBL.js.map} +1 -1
- package/dist/{chunk-LPEE2H2M.cjs → chunk-5E6IZNRG.cjs} +656 -774
- package/dist/chunk-5E6IZNRG.cjs.map +1 -0
- package/dist/{chunk-LN2VZP63.js → chunk-CYOI4PEA.js} +162 -15
- package/dist/chunk-CYOI4PEA.js.map +1 -0
- package/dist/{chunk-WJN2BLEI.js → chunk-DSC3G6QZ.js} +253 -379
- package/dist/chunk-DSC3G6QZ.js.map +1 -0
- package/dist/{chunk-4N45WCSJ.cjs → chunk-IM6IKNSL.cjs} +17 -17
- package/dist/{chunk-4N45WCSJ.cjs.map → chunk-IM6IKNSL.cjs.map} +1 -1
- package/dist/{chunk-XJCBV4AA.js → chunk-J33ZEM3A.js} +26 -18
- package/dist/chunk-J33ZEM3A.js.map +1 -0
- package/dist/{chunk-35YIP6OA.cjs → chunk-LL47QIHD.cjs} +10 -10
- package/dist/{chunk-35YIP6OA.cjs.map → chunk-LL47QIHD.cjs.map} +1 -1
- package/dist/{chunk-WXCVS6PD.cjs → chunk-PXPPZF5K.cjs} +207 -59
- package/dist/chunk-PXPPZF5K.cjs.map +1 -0
- package/dist/{chunk-ZUEGFM3T.js → chunk-R5POS3RS.js} +4 -4
- package/dist/{chunk-ZUEGFM3T.js.map → chunk-R5POS3RS.js.map} +1 -1
- package/dist/{chunk-FZFSGOTZ.cjs → chunk-ZIRFXBKL.cjs} +26 -18
- package/dist/chunk-ZIRFXBKL.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-Dv_9OVHv.d.ts → delegate-T-vgxMYZ.d.ts} +1 -1
- package/dist/{delegate-BBQW61ym.d.cts → delegate-YXupcWWJ.d.cts} +1 -1
- package/dist/{index-Bxe9kBFs.d.ts → index-D_FgwLH9.d.ts} +111 -2
- package/dist/{index-aZycGEsQ.d.cts → index-e7LYXk1d.d.cts} +111 -2
- package/dist/{index-CFOMyVMt.d.cts → index-uUE_uQPn.d.cts} +70 -33
- package/dist/{index-CFOMyVMt.d.ts → index-uUE_uQPn.d.ts} +70 -33
- package/dist/index.cjs +308 -268
- package/dist/index.d.cts +214 -19
- package/dist/index.d.ts +214 -19
- 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-CIKOS2OO.d.cts → taskRunner-BOVcIH1N.d.cts} +1 -1
- package/dist/{taskRunner-BDzWbpct.d.ts → taskRunner-DNyD1kXG.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/{wallet-C2NvHjWB.d.cts → wallet-CNibc3yJ.d.ts} +3 -3
- package/dist/{wallet-DJUnN939.d.ts → wallet-DJN1QgFt.d.cts} +3 -3
- 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 +1 -1
- package/dist/chunk-FZFSGOTZ.cjs.map +0 -1
- package/dist/chunk-HQ2DDMQN.js.map +0 -1
- package/dist/chunk-LN2VZP63.js.map +0 -1
- package/dist/chunk-LPEE2H2M.cjs.map +0 -1
- package/dist/chunk-RXITDAV4.cjs.map +0 -1
- package/dist/chunk-WJN2BLEI.js.map +0 -1
- package/dist/chunk-WXCVS6PD.cjs.map +0 -1
- package/dist/chunk-XJCBV4AA.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunk3S3JZUEN_cjs = require('./chunk-3S3JZUEN.cjs');
|
|
4
|
+
var chunkPXPPZF5K_cjs = require('./chunk-PXPPZF5K.cjs');
|
|
5
|
+
var chunkZIRFXBKL_cjs = require('./chunk-ZIRFXBKL.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 = chunkZIRFXBKL_cjs.getArkPsbtFields(tx.root, 0, chunkZIRFXBKL_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 = chunkZIRFXBKL_cjs.getArkPsbtFields(g.root, 0, chunkZIRFXBKL_cjs.CosignerPublicKey).map((c) => c.key);
|
|
244
244
|
const { finalKey } = aggregateKeys(cosigners, true, {
|
|
245
245
|
taprootTweak: this.scriptRoot
|
|
246
246
|
});
|
|
@@ -431,7 +431,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
431
431
|
let network;
|
|
432
432
|
if ("descriptor" in opts && typeof opts.descriptor === "string") {
|
|
433
433
|
descriptor = opts.descriptor;
|
|
434
|
-
network =
|
|
434
|
+
network = chunkPXPPZF5K_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
435
435
|
} else {
|
|
436
436
|
network = opts.isMainnet ?? true ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
437
437
|
descriptor = descriptorsScure.scriptExpressions.trBIP32({
|
|
@@ -529,7 +529,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
529
529
|
* `StaticDescriptorProvider` for legacy single-key wallets.
|
|
530
530
|
*/
|
|
531
531
|
isOurs(descriptor) {
|
|
532
|
-
return
|
|
532
|
+
return chunkPXPPZF5K_cjs.descriptorIsOurs(descriptor, this.descriptor, utils_js.pubSchnorr(this.derivedKey));
|
|
533
533
|
}
|
|
534
534
|
/**
|
|
535
535
|
* Signs each request with the key derived from its descriptor.
|
|
@@ -578,7 +578,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
578
578
|
}
|
|
579
579
|
// ── internal helpers ─────────────────────────────────────────────
|
|
580
580
|
derivePrivateKeyForDescriptor(descriptor) {
|
|
581
|
-
const network =
|
|
581
|
+
const network = chunkPXPPZF5K_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
582
582
|
const expansion = descriptorsScure.expand({ descriptor, network });
|
|
583
583
|
if (expansion.isRanged) {
|
|
584
584
|
throw new Error(
|
|
@@ -664,7 +664,7 @@ var ReadonlyDescriptorIdentity = class _ReadonlyDescriptorIdentity {
|
|
|
664
664
|
*/
|
|
665
665
|
descriptor;
|
|
666
666
|
constructor(descriptor) {
|
|
667
|
-
const network =
|
|
667
|
+
const network = chunkPXPPZF5K_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
668
668
|
let expansion;
|
|
669
669
|
try {
|
|
670
670
|
expansion = descriptorsScure.expand({ descriptor, network, index: 0 });
|
|
@@ -714,7 +714,7 @@ var ReadonlyDescriptorIdentity = class _ReadonlyDescriptorIdentity {
|
|
|
714
714
|
* `StaticDescriptorProvider` for legacy single-key wallets.
|
|
715
715
|
*/
|
|
716
716
|
isOurs(descriptor) {
|
|
717
|
-
return
|
|
717
|
+
return chunkPXPPZF5K_cjs.descriptorIsOurs(descriptor, this.descriptor, this.indexZero.pubkey);
|
|
718
718
|
}
|
|
719
719
|
};
|
|
720
720
|
function serializeSeedOwnedSigningIdentity(identity) {
|
|
@@ -876,10 +876,10 @@ var DescriptorIdentity = class {
|
|
|
876
876
|
this.base = base;
|
|
877
877
|
}
|
|
878
878
|
async xOnlyPublicKey() {
|
|
879
|
-
return
|
|
879
|
+
return chunkPXPPZF5K_cjs.deriveDescriptorLeafPubKey(this.descriptor);
|
|
880
880
|
}
|
|
881
881
|
async compressedPublicKey() {
|
|
882
|
-
return
|
|
882
|
+
return chunkPXPPZF5K_cjs.deriveDescriptorLeafCompressedPubKey(this.descriptor);
|
|
883
883
|
}
|
|
884
884
|
async sign(tx, inputIndexes) {
|
|
885
885
|
const [signed] = await this.signer.signWithDescriptor([
|
|
@@ -941,12 +941,12 @@ var ForeignDescriptorError = class extends Error {
|
|
|
941
941
|
};
|
|
942
942
|
async function resolveDescriptorSigner(descriptor, identity, provider) {
|
|
943
943
|
const owner = provider?.isOurs(descriptor) ? provider : isHDCapableIdentity(identity) && identity.isOurs(descriptor) ? identity : void 0;
|
|
944
|
-
if (owner &&
|
|
944
|
+
if (owner && chunkPXPPZF5K_cjs.parseHDDescriptor(descriptor)) {
|
|
945
945
|
return new DescriptorIdentity({ descriptor, signer: owner, base: identity });
|
|
946
946
|
}
|
|
947
947
|
let key;
|
|
948
948
|
try {
|
|
949
|
-
key =
|
|
949
|
+
key = chunkPXPPZF5K_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
950
950
|
} catch {
|
|
951
951
|
throw new ForeignDescriptorError(descriptor);
|
|
952
952
|
}
|
|
@@ -1317,11 +1317,11 @@ function buildSaltedPreimageMessage(xonly, salt) {
|
|
|
1317
1317
|
}
|
|
1318
1318
|
var PREIMAGE_INDEX = 0;
|
|
1319
1319
|
function isPerArtifactDescriptor(descriptor) {
|
|
1320
|
-
return
|
|
1320
|
+
return chunkPXPPZF5K_cjs.parseHDDescriptor(descriptor) !== null;
|
|
1321
1321
|
}
|
|
1322
1322
|
async function provisionDescriptor(wallet) {
|
|
1323
1323
|
const allocated = isHDAllocationCapable(wallet) ? await wallet.getNextSigningDescriptor() : void 0;
|
|
1324
|
-
return allocated ?? await
|
|
1324
|
+
return allocated ?? await chunkPXPPZF5K_cjs.identityDescriptor(wallet.identity);
|
|
1325
1325
|
}
|
|
1326
1326
|
async function provisionRefundKey(wallet) {
|
|
1327
1327
|
const descriptor = await provisionDescriptor(wallet);
|
|
@@ -1369,7 +1369,7 @@ async function contractSigner(wallet, descriptor) {
|
|
|
1369
1369
|
const signer = isHDWalletCapable(wallet) ? await wallet.signerForDescriptor(descriptor) : wallet.identity;
|
|
1370
1370
|
let expected;
|
|
1371
1371
|
try {
|
|
1372
|
-
expected =
|
|
1372
|
+
expected = chunkPXPPZF5K_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
1373
1373
|
} catch (cause) {
|
|
1374
1374
|
throw new ForeignDescriptorError(descriptor, { cause });
|
|
1375
1375
|
}
|
|
@@ -1588,14 +1588,14 @@ var RestDelegateProvider = class {
|
|
|
1588
1588
|
*/
|
|
1589
1589
|
async delegate(intent, forfeitTxs, options) {
|
|
1590
1590
|
const url = `${this.url}/v1/delegate`;
|
|
1591
|
-
const response = await
|
|
1591
|
+
const response = await chunkZIRFXBKL_cjs.baseFetch(url, {
|
|
1592
1592
|
method: "POST",
|
|
1593
1593
|
headers: {
|
|
1594
1594
|
"Content-Type": "application/json"
|
|
1595
1595
|
},
|
|
1596
1596
|
body: JSON.stringify({
|
|
1597
1597
|
intent: {
|
|
1598
|
-
message:
|
|
1598
|
+
message: chunkZIRFXBKL_cjs.Intent.encodeMessage(intent.message),
|
|
1599
1599
|
proof: intent.proof
|
|
1600
1600
|
},
|
|
1601
1601
|
forfeit_txs: forfeitTxs,
|
|
@@ -1615,7 +1615,7 @@ var RestDelegateProvider = class {
|
|
|
1615
1615
|
*/
|
|
1616
1616
|
async getDelegateInfo() {
|
|
1617
1617
|
const url = `${this.url}/v1/delegator/info`;
|
|
1618
|
-
const response = await
|
|
1618
|
+
const response = await chunkZIRFXBKL_cjs.rateGate.runHttp(url, () => chunkZIRFXBKL_cjs.baseFetch(url));
|
|
1619
1619
|
if (!response.ok) {
|
|
1620
1620
|
const errorText2 = await response.text();
|
|
1621
1621
|
throw new Error(`Failed to get delegate info: ${errorText2}`);
|
|
@@ -1642,7 +1642,7 @@ var ESPLORA_URL = {
|
|
|
1642
1642
|
regtest: "http://localhost:3000/api"
|
|
1643
1643
|
};
|
|
1644
1644
|
var EsploraProvider = class {
|
|
1645
|
-
constructor(baseUrl = ESPLORA_URL[
|
|
1645
|
+
constructor(baseUrl = ESPLORA_URL[chunkZIRFXBKL_cjs.DEFAULT_NETWORK_NAME], opts) {
|
|
1646
1646
|
this.baseUrl = baseUrl;
|
|
1647
1647
|
this.pollingInterval = opts?.pollingInterval ?? 15e3;
|
|
1648
1648
|
this.forcePolling = opts?.forcePolling ?? false;
|
|
@@ -1651,14 +1651,14 @@ var EsploraProvider = class {
|
|
|
1651
1651
|
pollingInterval;
|
|
1652
1652
|
forcePolling;
|
|
1653
1653
|
async getCoins(address) {
|
|
1654
|
-
const response = await
|
|
1654
|
+
const response = await chunkZIRFXBKL_cjs.baseFetch(`${this.baseUrl}/address/${address}/utxo`);
|
|
1655
1655
|
if (!response.ok) {
|
|
1656
1656
|
throw new Error(`Failed to fetch UTXOs: ${response.statusText}`);
|
|
1657
1657
|
}
|
|
1658
1658
|
return response.json();
|
|
1659
1659
|
}
|
|
1660
1660
|
async getFeeRate() {
|
|
1661
|
-
const response = await
|
|
1661
|
+
const response = await chunkZIRFXBKL_cjs.baseFetch(`${this.baseUrl}/fee-estimates`);
|
|
1662
1662
|
if (response.status === 404) {
|
|
1663
1663
|
return void 0;
|
|
1664
1664
|
}
|
|
@@ -1679,7 +1679,7 @@ var EsploraProvider = class {
|
|
|
1679
1679
|
}
|
|
1680
1680
|
}
|
|
1681
1681
|
async getTxOutspends(txid) {
|
|
1682
|
-
const response = await
|
|
1682
|
+
const response = await chunkZIRFXBKL_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/outspends`);
|
|
1683
1683
|
if (!response.ok) {
|
|
1684
1684
|
const error = await response.text();
|
|
1685
1685
|
throw new Error(`Failed to get transaction outspends: ${error}`);
|
|
@@ -1687,7 +1687,7 @@ var EsploraProvider = class {
|
|
|
1687
1687
|
return response.json();
|
|
1688
1688
|
}
|
|
1689
1689
|
async getTransactions(address) {
|
|
1690
|
-
const response = await
|
|
1690
|
+
const response = await chunkZIRFXBKL_cjs.baseFetch(`${this.baseUrl}/address/${address}/txs`);
|
|
1691
1691
|
if (!response.ok) {
|
|
1692
1692
|
const error = await response.text();
|
|
1693
1693
|
throw new Error(`Failed to get transactions: ${error}`);
|
|
@@ -1695,7 +1695,7 @@ var EsploraProvider = class {
|
|
|
1695
1695
|
return response.json();
|
|
1696
1696
|
}
|
|
1697
1697
|
async getTxStatus(txid) {
|
|
1698
|
-
const txresponse = await
|
|
1698
|
+
const txresponse = await chunkZIRFXBKL_cjs.baseFetch(`${this.baseUrl}/tx/${txid}`);
|
|
1699
1699
|
if (!txresponse.ok) {
|
|
1700
1700
|
throw new Error(txresponse.statusText);
|
|
1701
1701
|
}
|
|
@@ -1703,7 +1703,7 @@ var EsploraProvider = class {
|
|
|
1703
1703
|
if (!tx.status.confirmed) {
|
|
1704
1704
|
return { confirmed: false };
|
|
1705
1705
|
}
|
|
1706
|
-
const response = await
|
|
1706
|
+
const response = await chunkZIRFXBKL_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/status`);
|
|
1707
1707
|
if (!response.ok) {
|
|
1708
1708
|
throw new Error(`Failed to get transaction status: ${response.statusText}`);
|
|
1709
1709
|
}
|
|
@@ -1787,7 +1787,7 @@ var EsploraProvider = class {
|
|
|
1787
1787
|
return stopFunc;
|
|
1788
1788
|
}
|
|
1789
1789
|
async getChainTip() {
|
|
1790
|
-
const tipBlocks = await
|
|
1790
|
+
const tipBlocks = await chunkZIRFXBKL_cjs.baseFetch(`${this.baseUrl}/blocks`);
|
|
1791
1791
|
if (!tipBlocks.ok) {
|
|
1792
1792
|
throw new Error(`Failed to get chain tip: ${tipBlocks.statusText}`);
|
|
1793
1793
|
}
|
|
@@ -1806,7 +1806,7 @@ var EsploraProvider = class {
|
|
|
1806
1806
|
};
|
|
1807
1807
|
}
|
|
1808
1808
|
async broadcastPackage(parent, child) {
|
|
1809
|
-
const response = await
|
|
1809
|
+
const response = await chunkZIRFXBKL_cjs.baseFetch(`${this.baseUrl}/txs/package`, {
|
|
1810
1810
|
method: "POST",
|
|
1811
1811
|
headers: {
|
|
1812
1812
|
"Content-Type": "application/json"
|
|
@@ -1820,7 +1820,7 @@ var EsploraProvider = class {
|
|
|
1820
1820
|
return response.json();
|
|
1821
1821
|
}
|
|
1822
1822
|
async broadcastTx(tx) {
|
|
1823
|
-
const response = await
|
|
1823
|
+
const response = await chunkZIRFXBKL_cjs.baseFetch(`${this.baseUrl}/tx`, {
|
|
1824
1824
|
method: "POST",
|
|
1825
1825
|
headers: {
|
|
1826
1826
|
"Content-Type": "text/plain"
|
|
@@ -1982,7 +1982,7 @@ function findP2AOutput(tx) {
|
|
|
1982
1982
|
var CHILD_DUST_AMOUNT = 546;
|
|
1983
1983
|
function buildAnchorChild(params) {
|
|
1984
1984
|
const { parent, feeRate, fundingCoins, changeAddress, tapInternalKey, network } = params;
|
|
1985
|
-
const child = new
|
|
1985
|
+
const child = new chunkZIRFXBKL_cjs.Transaction({ version: 3, allowLegacyWitnessUtxo: true });
|
|
1986
1986
|
child.addInput(findP2AOutput(parent));
|
|
1987
1987
|
const estimator = TxWeightEstimator.create().addP2AInput();
|
|
1988
1988
|
for (const _ of fundingCoins) {
|
|
@@ -2030,7 +2030,7 @@ function buildForfeitTx(inputs, forfeitPkScript, txLocktime) {
|
|
|
2030
2030
|
);
|
|
2031
2031
|
}
|
|
2032
2032
|
function buildForfeitTxWithOutput(inputs, output, txLocktime) {
|
|
2033
|
-
const tx = new
|
|
2033
|
+
const tx = new chunkZIRFXBKL_cjs.Transaction({
|
|
2034
2034
|
version: 3,
|
|
2035
2035
|
lockTime: txLocktime
|
|
2036
2036
|
});
|
|
@@ -2106,7 +2106,7 @@ function validateVtxoTxGraph(graph, roundTransaction, sweepTapTreeRoot) {
|
|
|
2106
2106
|
if (previousScriptKey.length !== 32) {
|
|
2107
2107
|
throw new Error(`parent output ${childIndex} has invalid script`);
|
|
2108
2108
|
}
|
|
2109
|
-
const cosigners =
|
|
2109
|
+
const cosigners = chunkZIRFXBKL_cjs.getArkPsbtFields(child.root, 0, chunkZIRFXBKL_cjs.CosignerPublicKey);
|
|
2110
2110
|
if (cosigners.length === 0) {
|
|
2111
2111
|
throw ErrMissingCosignersPublicKeys;
|
|
2112
2112
|
}
|
|
@@ -2164,7 +2164,7 @@ var EmulatorPacket = class _EmulatorPacket {
|
|
|
2164
2164
|
return new _EmulatorPacket(entries);
|
|
2165
2165
|
}
|
|
2166
2166
|
static fromBytes(data) {
|
|
2167
|
-
const reader = new
|
|
2167
|
+
const reader = new chunk3S3JZUEN_cjs.BufferReader(data);
|
|
2168
2168
|
const entryCount = reader.readCompactSize();
|
|
2169
2169
|
const entries = [];
|
|
2170
2170
|
for (let i = 0; i < entryCount; i++) {
|
|
@@ -2182,7 +2182,7 @@ var EmulatorPacket = class _EmulatorPacket {
|
|
|
2182
2182
|
return _EmulatorPacket.PACKET_TYPE;
|
|
2183
2183
|
}
|
|
2184
2184
|
serialize() {
|
|
2185
|
-
const writer = new
|
|
2185
|
+
const writer = new chunk3S3JZUEN_cjs.BufferWriter();
|
|
2186
2186
|
writer.writeCompactSize(this.entries.length);
|
|
2187
2187
|
for (const entry of this.entries) {
|
|
2188
2188
|
writer.writeUint16LE(entry.vin);
|
|
@@ -2269,7 +2269,7 @@ var Extension = class _Extension {
|
|
|
2269
2269
|
`expected magic prefix ${base.hex.encode(ARKADE_MAGIC)}, got ${base.hex.encode(payload.slice(0, Math.min(payload.length, ARKADE_MAGIC.length)))}`
|
|
2270
2270
|
);
|
|
2271
2271
|
}
|
|
2272
|
-
const reader = new
|
|
2272
|
+
const reader = new chunk3S3JZUEN_cjs.BufferReader(payload.slice(ARKADE_MAGIC.length));
|
|
2273
2273
|
const packets = [];
|
|
2274
2274
|
while (reader.remaining() > 0) {
|
|
2275
2275
|
const packetType = reader.readByte();
|
|
@@ -2343,7 +2343,7 @@ var Extension = class _Extension {
|
|
|
2343
2343
|
*/
|
|
2344
2344
|
getAssetPacket() {
|
|
2345
2345
|
for (const p of this.packets) {
|
|
2346
|
-
if (p instanceof
|
|
2346
|
+
if (p instanceof chunk3S3JZUEN_cjs.Packet) {
|
|
2347
2347
|
return p;
|
|
2348
2348
|
}
|
|
2349
2349
|
}
|
|
@@ -2381,8 +2381,8 @@ var Extension = class _Extension {
|
|
|
2381
2381
|
};
|
|
2382
2382
|
function parsePacket(packetType, data) {
|
|
2383
2383
|
switch (packetType) {
|
|
2384
|
-
case
|
|
2385
|
-
return
|
|
2384
|
+
case chunk3S3JZUEN_cjs.Packet.PACKET_TYPE:
|
|
2385
|
+
return chunk3S3JZUEN_cjs.Packet.fromBytes(data);
|
|
2386
2386
|
case EmulatorPacket.PACKET_TYPE:
|
|
2387
2387
|
return EmulatorPacket.fromBytes(data);
|
|
2388
2388
|
default:
|
|
@@ -2429,16 +2429,16 @@ function buildOpReturnScript(data) {
|
|
|
2429
2429
|
}
|
|
2430
2430
|
return script;
|
|
2431
2431
|
}
|
|
2432
|
-
var ErrOffchainOutputNotFound = (address) => new
|
|
2433
|
-
var ErrInvalidAssetOutputAmount = (got, want, assetId) => new
|
|
2432
|
+
var ErrOffchainOutputNotFound = (address) => new chunkZIRFXBKL_cjs.ServerResponseMismatchError(`offchain send output not found: ${address}`);
|
|
2433
|
+
var ErrInvalidAssetOutputAmount = (got, want, assetId) => new chunkZIRFXBKL_cjs.ServerResponseMismatchError(
|
|
2434
2434
|
`invalid asset output amount for ${assetId}: got ${got}, want ${want}`
|
|
2435
2435
|
);
|
|
2436
|
-
var ErrAssetGroupNotFound = (assetId) => new
|
|
2437
|
-
var ErrAssetOutputNotFound = (assetId, outputIndex) => new
|
|
2436
|
+
var ErrAssetGroupNotFound = (assetId) => new chunkZIRFXBKL_cjs.ServerResponseMismatchError(`asset group not found in batch leaf: ${assetId}`);
|
|
2437
|
+
var ErrAssetOutputNotFound = (assetId, outputIndex) => new chunkZIRFXBKL_cjs.ServerResponseMismatchError(
|
|
2438
2438
|
`asset output not found in asset group ${assetId} at index ${outputIndex}`
|
|
2439
2439
|
);
|
|
2440
|
-
var ErrOnchainOutputNotFound = (address) => new
|
|
2441
|
-
var ErrUnvalidatedOffchainOutput = (address) => new
|
|
2440
|
+
var ErrOnchainOutputNotFound = (address) => new chunkZIRFXBKL_cjs.ServerResponseMismatchError(`onchain output not found: ${address}`);
|
|
2441
|
+
var ErrUnvalidatedOffchainOutput = (address) => new chunkZIRFXBKL_cjs.ServerResponseMismatchError(
|
|
2442
2442
|
`offchain output ${address} cannot be validated: virtual output tree signing did not run`
|
|
2443
2443
|
);
|
|
2444
2444
|
var ErrInvalidOnchainOutputAmount = (address) => new Error(`invalid onchain output amount: ${address}`);
|
|
@@ -2447,7 +2447,7 @@ var ErrInvalidOffchainOutputAmount = (address) => new Error(`invalid offchain ou
|
|
|
2447
2447
|
function assertFinalCommitmentMatchesValidated(finalCommitmentTx, validatedCommitmentTxid, context) {
|
|
2448
2448
|
if (!validatedCommitmentTxid) return;
|
|
2449
2449
|
if (finalCommitmentTx.id === validatedCommitmentTxid) return;
|
|
2450
|
-
throw new
|
|
2450
|
+
throw new chunkZIRFXBKL_cjs.ServerResponseMismatchError(
|
|
2451
2451
|
`${context}: finalization commitment tx ${finalCommitmentTx.id} differs from the validated commitment tx ${validatedCommitmentTxid}`
|
|
2452
2452
|
);
|
|
2453
2453
|
}
|
|
@@ -2457,7 +2457,7 @@ function validateBatchRecipients(commitmentTx, vtxoTreeLeaves, recipients, netwo
|
|
|
2457
2457
|
for (const recipient of recipients) {
|
|
2458
2458
|
let arkAddress;
|
|
2459
2459
|
try {
|
|
2460
|
-
arkAddress =
|
|
2460
|
+
arkAddress = chunkZIRFXBKL_cjs.ArkAddress.decode(recipient.address);
|
|
2461
2461
|
} catch {
|
|
2462
2462
|
validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
|
|
2463
2463
|
continue;
|
|
@@ -2469,7 +2469,7 @@ function validateBatchRecipientsWithoutTree(commitmentTx, recipients, network) {
|
|
|
2469
2469
|
const usedOnchainOutputs = /* @__PURE__ */ new Set();
|
|
2470
2470
|
for (const recipient of recipients) {
|
|
2471
2471
|
try {
|
|
2472
|
-
|
|
2472
|
+
chunkZIRFXBKL_cjs.ArkAddress.decode(recipient.address);
|
|
2473
2473
|
} catch {
|
|
2474
2474
|
validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
|
|
2475
2475
|
continue;
|
|
@@ -2702,7 +2702,7 @@ function assetMintResolver() {
|
|
|
2702
2702
|
if (!tx.assets?.length || !tx.key.arkTxid) return void 0;
|
|
2703
2703
|
const minted = tx.assets.filter((a) => {
|
|
2704
2704
|
try {
|
|
2705
|
-
return base.hex.encode(
|
|
2705
|
+
return base.hex.encode(chunk3S3JZUEN_cjs.AssetId.fromString(a.assetId).txid) === tx.key.arkTxid;
|
|
2706
2706
|
} catch {
|
|
2707
2707
|
return false;
|
|
2708
2708
|
}
|
|
@@ -2745,7 +2745,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
2745
2745
|
const existing = inputsByAssetId.get(asset.assetId);
|
|
2746
2746
|
inputsByAssetId.set(asset.assetId, [
|
|
2747
2747
|
...existing ?? [],
|
|
2748
|
-
|
|
2748
|
+
chunk3S3JZUEN_cjs.AssetInput.create(inputIndex, asset.amount)
|
|
2749
2749
|
]);
|
|
2750
2750
|
}
|
|
2751
2751
|
}
|
|
@@ -2757,7 +2757,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
2757
2757
|
const existing = outputsByAssetId.get(asset.assetId);
|
|
2758
2758
|
outputsByAssetId.set(asset.assetId, [
|
|
2759
2759
|
...existing ?? [],
|
|
2760
|
-
|
|
2760
|
+
chunk3S3JZUEN_cjs.AssetOutput.create(outputIndex, asset.amount)
|
|
2761
2761
|
]);
|
|
2762
2762
|
}
|
|
2763
2763
|
}
|
|
@@ -2768,7 +2768,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
2768
2768
|
const existing = outputsByAssetId.get(asset.assetId);
|
|
2769
2769
|
outputsByAssetId.set(asset.assetId, [
|
|
2770
2770
|
...existing ?? [],
|
|
2771
|
-
|
|
2771
|
+
chunk3S3JZUEN_cjs.AssetOutput.create(outputIndex, asset.amount)
|
|
2772
2772
|
]);
|
|
2773
2773
|
}
|
|
2774
2774
|
}
|
|
@@ -2777,11 +2777,11 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
2777
2777
|
for (const assetIdStr of allAssetIds) {
|
|
2778
2778
|
const inputs = inputsByAssetId.get(assetIdStr);
|
|
2779
2779
|
const outputs = outputsByAssetId.get(assetIdStr);
|
|
2780
|
-
const assetId =
|
|
2781
|
-
const group =
|
|
2780
|
+
const assetId = chunk3S3JZUEN_cjs.AssetId.fromString(assetIdStr);
|
|
2781
|
+
const group = chunk3S3JZUEN_cjs.AssetGroup.create(assetId, null, inputs ?? [], outputs ?? [], []);
|
|
2782
2782
|
groups.push(group);
|
|
2783
2783
|
}
|
|
2784
|
-
return
|
|
2784
|
+
return chunk3S3JZUEN_cjs.Packet.create(groups);
|
|
2785
2785
|
}
|
|
2786
2786
|
function selectCoinsWithAsset(coins, assetId, requiredAmount) {
|
|
2787
2787
|
const coinsWithAsset = coins.filter((coin) => coin.assets?.some((a) => a.assetId === assetId));
|
|
@@ -2818,8 +2818,7 @@ function selectedCoinsToAssetInputs(selectedCoins) {
|
|
|
2818
2818
|
}
|
|
2819
2819
|
function toXOnlySignerHex(pubkeyHex) {
|
|
2820
2820
|
const bytes = base.hex.decode(pubkeyHex);
|
|
2821
|
-
if (bytes.length === 33) return base.hex.encode(
|
|
2822
|
-
if (bytes.length === 32) return base.hex.encode(bytes);
|
|
2821
|
+
if (bytes.length === 32 || bytes.length === 33) return base.hex.encode(chunkPXPPZF5K_cjs.toXOnly(bytes, "signer key"));
|
|
2823
2822
|
throw new Error(`invalid signer pubkey length: expected 32 or 33 bytes, got ${bytes.length}`);
|
|
2824
2823
|
}
|
|
2825
2824
|
function signerSetFromInfo(info) {
|
|
@@ -2866,13 +2865,13 @@ var toTimelock = (value) => ({
|
|
|
2866
2865
|
var toSeconds = (t) => t.type === "seconds" ? t.value : t.value * NOMINAL_BLOCK_SECONDS;
|
|
2867
2866
|
function assertTimelockInPolicy(timelock, policy, label, overrideOption) {
|
|
2868
2867
|
if (policy.requireSeconds && timelock.type === "blocks") {
|
|
2869
|
-
throw new
|
|
2868
|
+
throw new chunkZIRFXBKL_cjs.ServerResponseMismatchError(
|
|
2870
2869
|
`${label} rejected: block-typed timelocks are not accepted (got ${timelock.value})`
|
|
2871
2870
|
);
|
|
2872
2871
|
}
|
|
2873
2872
|
const seconds = toSeconds(timelock);
|
|
2874
2873
|
if (seconds < policy.minSeconds) {
|
|
2875
|
-
throw new
|
|
2874
|
+
throw new chunkZIRFXBKL_cjs.ServerResponseMismatchError(
|
|
2876
2875
|
`${label} rejected: ${timelock.value} ${timelock.type} is below the ${policy.minSeconds}s floor; pass ${overrideOption}: ${seconds}n to Wallet.create to lower it`
|
|
2877
2876
|
);
|
|
2878
2877
|
}
|
|
@@ -2893,7 +2892,7 @@ function resolveBatchExpiryPolicy(network, overrides) {
|
|
|
2893
2892
|
}
|
|
2894
2893
|
function assertValidBatchExpiry(batchExpiry, policy) {
|
|
2895
2894
|
if (policy.advertisedVtxoTreeExpiry !== void 0 && batchExpiry !== policy.advertisedVtxoTreeExpiry) {
|
|
2896
|
-
throw new
|
|
2895
|
+
throw new chunkZIRFXBKL_cjs.ServerResponseMismatchError(
|
|
2897
2896
|
`batch expiry rejected: ${batchExpiry} does not match the advertised vtxoTreeExpiry ${policy.advertisedVtxoTreeExpiry}`
|
|
2898
2897
|
);
|
|
2899
2898
|
}
|
|
@@ -2923,21 +2922,21 @@ function resolveCheckpointExitDelayPolicy(network, overrides) {
|
|
|
2923
2922
|
function assertValidServerUnrollScript(checkpointTapscript, policy) {
|
|
2924
2923
|
let script;
|
|
2925
2924
|
try {
|
|
2926
|
-
script =
|
|
2925
|
+
script = chunkZIRFXBKL_cjs.CSVMultisigTapscript.decode(base.hex.decode(checkpointTapscript));
|
|
2927
2926
|
} catch (e) {
|
|
2928
|
-
throw new
|
|
2927
|
+
throw new chunkZIRFXBKL_cjs.ServerResponseMismatchError(
|
|
2929
2928
|
`checkpoint exit delay rejected: invalid checkpointTapscript from server (${e instanceof Error ? e.message : String(e)})`
|
|
2930
2929
|
);
|
|
2931
2930
|
}
|
|
2932
2931
|
if (policy.advertisedForfeitPubkey !== void 0) {
|
|
2933
2932
|
const { pubkeys } = script.params;
|
|
2934
2933
|
if (pubkeys.length !== 1) {
|
|
2935
|
-
throw new
|
|
2934
|
+
throw new chunkZIRFXBKL_cjs.ServerResponseMismatchError(
|
|
2936
2935
|
`checkpoint exit delay rejected: checkpointTapscript must commit to exactly one pubkey, got ${pubkeys.length} [${pubkeys.map(base.hex.encode).join(", ")}]`
|
|
2937
2936
|
);
|
|
2938
2937
|
}
|
|
2939
2938
|
if (!utils_js.equalBytes(pubkeys[0], policy.advertisedForfeitPubkey)) {
|
|
2940
|
-
throw new
|
|
2939
|
+
throw new chunkZIRFXBKL_cjs.ServerResponseMismatchError(
|
|
2941
2940
|
`checkpoint exit delay rejected: checkpointTapscript pubkey ${base.hex.encode(pubkeys[0])} does not match the advertised forfeitPubkey ${base.hex.encode(policy.advertisedForfeitPubkey)}`
|
|
2942
2941
|
);
|
|
2943
2942
|
}
|
|
@@ -2981,8 +2980,8 @@ function buildOffchainTx(inputs, outputs, serverUnrollScript) {
|
|
|
2981
2980
|
function buildVirtualTx(inputs, outputs) {
|
|
2982
2981
|
let lockTime = 0n;
|
|
2983
2982
|
for (const input of inputs) {
|
|
2984
|
-
const tapscript =
|
|
2985
|
-
if (
|
|
2983
|
+
const tapscript = chunkZIRFXBKL_cjs.decodeTapscript(chunkZIRFXBKL_cjs.scriptFromTapLeafScript(input.tapLeafScript));
|
|
2984
|
+
if (chunkZIRFXBKL_cjs.CLTVMultisigTapscript.is(tapscript)) {
|
|
2986
2985
|
if (lockTime !== 0n) {
|
|
2987
2986
|
if (isSeconds(lockTime) !== isSeconds(tapscript.params.absoluteTimelock)) {
|
|
2988
2987
|
throw new Error("cannot mix seconds and blocks locktime");
|
|
@@ -2993,7 +2992,7 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
2993
2992
|
}
|
|
2994
2993
|
}
|
|
2995
2994
|
}
|
|
2996
|
-
const tx = new
|
|
2995
|
+
const tx = new chunkZIRFXBKL_cjs.Transaction({
|
|
2997
2996
|
version: 3,
|
|
2998
2997
|
lockTime: Number(lockTime)
|
|
2999
2998
|
});
|
|
@@ -3003,12 +3002,12 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
3003
3002
|
index: input.vout,
|
|
3004
3003
|
sequence: lockTime ? btcSigner.DEFAULT_SEQUENCE - 1 : void 0,
|
|
3005
3004
|
witnessUtxo: {
|
|
3006
|
-
script:
|
|
3005
|
+
script: chunkZIRFXBKL_cjs.VtxoScript.decode(input.tapTree).pkScript,
|
|
3007
3006
|
amount: BigInt(input.value)
|
|
3008
3007
|
},
|
|
3009
3008
|
tapLeafScript: [input.tapLeafScript]
|
|
3010
3009
|
});
|
|
3011
|
-
|
|
3010
|
+
chunkZIRFXBKL_cjs.setArkPsbtField(tx, i, chunkZIRFXBKL_cjs.VtxoTaprootTree, input.tapTree);
|
|
3012
3011
|
}
|
|
3013
3012
|
for (const output of outputs) {
|
|
3014
3013
|
tx.addOutput(output);
|
|
@@ -3017,8 +3016,8 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
3017
3016
|
return tx;
|
|
3018
3017
|
}
|
|
3019
3018
|
function buildCheckpointTx(vtxo, serverUnrollScript) {
|
|
3020
|
-
const collaborativeClosure =
|
|
3021
|
-
const checkpointVtxoScript = new
|
|
3019
|
+
const collaborativeClosure = chunkZIRFXBKL_cjs.decodeTapscript(chunkZIRFXBKL_cjs.scriptFromTapLeafScript(vtxo.tapLeafScript));
|
|
3020
|
+
const checkpointVtxoScript = new chunkZIRFXBKL_cjs.VtxoScript([
|
|
3022
3021
|
serverUnrollScript.script,
|
|
3023
3022
|
collaborativeClosure.script
|
|
3024
3023
|
]);
|
|
@@ -3171,7 +3170,7 @@ function combineTapscriptSigs(signedTx, originalTx) {
|
|
|
3171
3170
|
}
|
|
3172
3171
|
function isValidArkAddress(address) {
|
|
3173
3172
|
try {
|
|
3174
|
-
|
|
3173
|
+
chunkZIRFXBKL_cjs.ArkAddress.decode(address);
|
|
3175
3174
|
return true;
|
|
3176
3175
|
} catch (e) {
|
|
3177
3176
|
return false;
|
|
@@ -3179,16 +3178,16 @@ function isValidArkAddress(address) {
|
|
|
3179
3178
|
}
|
|
3180
3179
|
function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, context) {
|
|
3181
3180
|
if (serverCheckpointTxs.length !== expectedCheckpoints.length) {
|
|
3182
|
-
throw new
|
|
3181
|
+
throw new chunkZIRFXBKL_cjs.ServerResponseMismatchError(
|
|
3183
3182
|
`${context} returned ${serverCheckpointTxs.length} checkpoints, expected ${expectedCheckpoints.length}`
|
|
3184
3183
|
);
|
|
3185
3184
|
}
|
|
3186
3185
|
const byTxid = new Map(expectedCheckpoints.map((c) => [c.id, c]));
|
|
3187
3186
|
return serverCheckpointTxs.map((encoded, index) => {
|
|
3188
|
-
const server =
|
|
3187
|
+
const server = chunkZIRFXBKL_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
|
|
3189
3188
|
const local = byTxid.get(server.id);
|
|
3190
3189
|
if (!local) {
|
|
3191
|
-
throw new
|
|
3190
|
+
throw new chunkZIRFXBKL_cjs.ServerResponseMismatchError(
|
|
3192
3191
|
`${context} checkpoint ${index} txid ${server.id} does not match any submitted checkpoint`
|
|
3193
3192
|
);
|
|
3194
3193
|
}
|
|
@@ -3198,14 +3197,14 @@ function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, contex
|
|
|
3198
3197
|
}
|
|
3199
3198
|
function assertSubmittedArkTxid(response, signedArkTx, context) {
|
|
3200
3199
|
if (response.arkTxid !== signedArkTx.id) {
|
|
3201
|
-
throw new
|
|
3200
|
+
throw new chunkZIRFXBKL_cjs.ServerResponseMismatchError(
|
|
3202
3201
|
`${context} returned ark txid ${response.arkTxid}, expected ${signedArkTx.id}`
|
|
3203
3202
|
);
|
|
3204
3203
|
}
|
|
3205
3204
|
if (response.finalArkTx === void 0) return;
|
|
3206
|
-
const finalTxid =
|
|
3205
|
+
const finalTxid = chunkZIRFXBKL_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx)).id;
|
|
3207
3206
|
if (finalTxid !== signedArkTx.id) {
|
|
3208
|
-
throw new
|
|
3207
|
+
throw new chunkZIRFXBKL_cjs.ServerResponseMismatchError(
|
|
3209
3208
|
`${context} returned final ark tx ${finalTxid}, expected ${signedArkTx.id}`
|
|
3210
3209
|
);
|
|
3211
3210
|
}
|
|
@@ -3224,10 +3223,10 @@ function assertServerSignedLeaf(serverTx, localTx, inputIndex, serverPubkeyHex,
|
|
|
3224
3223
|
[serverPubkeyHex],
|
|
3225
3224
|
void 0,
|
|
3226
3225
|
void 0,
|
|
3227
|
-
payment_js.tapLeafHash(
|
|
3226
|
+
payment_js.tapLeafHash(chunkZIRFXBKL_cjs.scriptFromTapLeafScript(leaf))
|
|
3228
3227
|
);
|
|
3229
3228
|
} catch (error) {
|
|
3230
|
-
throw new
|
|
3229
|
+
throw new chunkZIRFXBKL_cjs.ServerResponseMismatchError(
|
|
3231
3230
|
`${context}: input ${inputIndex} is not signed by the server on the leaf being spent (${error instanceof Error ? error.message : String(error)})`
|
|
3232
3231
|
);
|
|
3233
3232
|
}
|
|
@@ -3236,20 +3235,20 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
|
|
|
3236
3235
|
const byOutpoint = new Map(inputs.map((input) => [`${input.txid}:${input.vout}`, input]));
|
|
3237
3236
|
for (const [index, checkpoint] of checkpoints.entries()) {
|
|
3238
3237
|
if (checkpoint.inputsLength !== 1) {
|
|
3239
|
-
throw new
|
|
3238
|
+
throw new chunkZIRFXBKL_cjs.ServerResponseMismatchError(
|
|
3240
3239
|
`${context}: checkpoint ${index} spends ${checkpoint.inputsLength} inputs, expected 1`
|
|
3241
3240
|
);
|
|
3242
3241
|
}
|
|
3243
3242
|
const spent = checkpoint.getInput(0);
|
|
3244
3243
|
if (!spent.txid || spent.index === void 0) {
|
|
3245
|
-
throw new
|
|
3244
|
+
throw new chunkZIRFXBKL_cjs.ServerResponseMismatchError(
|
|
3246
3245
|
`${context}: checkpoint ${index} has no input outpoint`
|
|
3247
3246
|
);
|
|
3248
3247
|
}
|
|
3249
3248
|
const outpoint = `${base.hex.encode(spent.txid)}:${spent.index}`;
|
|
3250
3249
|
const input = byOutpoint.get(outpoint);
|
|
3251
3250
|
if (!input) {
|
|
3252
|
-
throw new
|
|
3251
|
+
throw new chunkZIRFXBKL_cjs.ServerResponseMismatchError(
|
|
3253
3252
|
`${context}: checkpoint ${index} spends ${outpoint}, which is not one of the requested virtual outputs`
|
|
3254
3253
|
);
|
|
3255
3254
|
}
|
|
@@ -3257,7 +3256,7 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
|
|
|
3257
3256
|
(unroll) => buildCheckpointTx(input, unroll).tx.id === checkpoint.id
|
|
3258
3257
|
);
|
|
3259
3258
|
if (!rebuilt) {
|
|
3260
|
-
throw new
|
|
3259
|
+
throw new chunkZIRFXBKL_cjs.ServerResponseMismatchError(
|
|
3261
3260
|
`${context}: checkpoint ${index} txid ${checkpoint.id} differs from the checkpoint built locally for ${outpoint}`
|
|
3262
3261
|
);
|
|
3263
3262
|
}
|
|
@@ -3284,14 +3283,12 @@ async function submitOffchainTx(provider, offchainTx, signer, hooks, options) {
|
|
|
3284
3283
|
const verify = options?.verifyServerSignatures;
|
|
3285
3284
|
if (verify) {
|
|
3286
3285
|
if (response.finalArkTx === void 0) {
|
|
3287
|
-
throw new
|
|
3286
|
+
throw new chunkZIRFXBKL_cjs.ServerResponseMismatchError(
|
|
3288
3287
|
"submitTx: server returned no final ark tx to verify its signatures against"
|
|
3289
3288
|
);
|
|
3290
3289
|
}
|
|
3291
|
-
const finalArkTx =
|
|
3292
|
-
const serverPubkeyHex = base.hex.encode(
|
|
3293
|
-
verify.serverPubkey.length === 33 ? verify.serverPubkey.subarray(1) : verify.serverPubkey
|
|
3294
|
-
);
|
|
3290
|
+
const finalArkTx = chunkZIRFXBKL_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx));
|
|
3291
|
+
const serverPubkeyHex = base.hex.encode(chunkPXPPZF5K_cjs.toXOnly(verify.serverPubkey, "server key"));
|
|
3295
3292
|
for (let i = 0; i < offchainTx.arkTx.inputsLength; i++) {
|
|
3296
3293
|
assertServerSignedLeaf(
|
|
3297
3294
|
finalArkTx,
|
|
@@ -3347,12 +3344,12 @@ function claimWithPreimageIdentity(identity, preimage) {
|
|
|
3347
3344
|
return {
|
|
3348
3345
|
...identity,
|
|
3349
3346
|
sign: async (tx, inputIndexes) => {
|
|
3350
|
-
const signed =
|
|
3347
|
+
const signed = chunkZIRFXBKL_cjs.Transaction.fromPSBT(
|
|
3351
3348
|
(await identity.sign(tx.clone(), inputIndexes)).toPSBT()
|
|
3352
3349
|
);
|
|
3353
3350
|
const indexes = inputIndexes ?? Array.from({ length: signed.inputsLength }, (_, i) => i);
|
|
3354
3351
|
for (const index of indexes) {
|
|
3355
|
-
|
|
3352
|
+
chunkZIRFXBKL_cjs.setArkPsbtField(signed, index, chunkZIRFXBKL_cjs.ConditionWitness, [preimage]);
|
|
3356
3353
|
}
|
|
3357
3354
|
return signed;
|
|
3358
3355
|
}
|
|
@@ -3544,7 +3541,7 @@ function extendCoinWithTapscript(boardingTapscript, utxo) {
|
|
|
3544
3541
|
};
|
|
3545
3542
|
}
|
|
3546
3543
|
function deriveContractTapscripts(contract) {
|
|
3547
|
-
const handler =
|
|
3544
|
+
const handler = chunkPXPPZF5K_cjs.contractHandlers.get(contract.type);
|
|
3548
3545
|
if (!handler) {
|
|
3549
3546
|
throw new Error(`No handler for contract type '${contract.type}'`);
|
|
3550
3547
|
}
|
|
@@ -3615,7 +3612,7 @@ function getRandomId() {
|
|
|
3615
3612
|
}
|
|
3616
3613
|
function isValidArkAddress2(address) {
|
|
3617
3614
|
try {
|
|
3618
|
-
|
|
3615
|
+
chunkZIRFXBKL_cjs.ArkAddress.decode(address);
|
|
3619
3616
|
return true;
|
|
3620
3617
|
} catch (e) {
|
|
3621
3618
|
return false;
|
|
@@ -3643,7 +3640,7 @@ function assertRecipientArkAddress(encoded, address, context) {
|
|
|
3643
3640
|
function assertTapTreeDerivesAddress(encoded, tapTree, address) {
|
|
3644
3641
|
let derived;
|
|
3645
3642
|
try {
|
|
3646
|
-
derived =
|
|
3643
|
+
derived = chunkZIRFXBKL_cjs.VtxoScript.decode(tapTree).pkScript;
|
|
3647
3644
|
} catch (e) {
|
|
3648
3645
|
throw new Error(
|
|
3649
3646
|
`Invalid tapTree for ${encoded}: ${e instanceof Error ? e.message : String(e)}`
|
|
@@ -3660,7 +3657,7 @@ function validateRecipients(recipients, dustAmount, context) {
|
|
|
3660
3657
|
for (const recipient of recipients) {
|
|
3661
3658
|
let address;
|
|
3662
3659
|
try {
|
|
3663
|
-
address =
|
|
3660
|
+
address = chunkZIRFXBKL_cjs.ArkAddress.decode(recipient.address);
|
|
3664
3661
|
} catch (e) {
|
|
3665
3662
|
throw new Error(`Invalid Arkade address: ${recipient.address}`);
|
|
3666
3663
|
}
|
|
@@ -3685,7 +3682,7 @@ function validateRecipients(recipients, dustAmount, context) {
|
|
|
3685
3682
|
|
|
3686
3683
|
// src/contracts/spendability.ts
|
|
3687
3684
|
function isContractGenericallySpendable(contract) {
|
|
3688
|
-
return
|
|
3685
|
+
return chunkPXPPZF5K_cjs.contractHandlers.get(contract.type)?.isGenericallySpendable?.(contract) === true;
|
|
3689
3686
|
}
|
|
3690
3687
|
function gatedContracts(contracts) {
|
|
3691
3688
|
const gated = /* @__PURE__ */ new Map();
|
|
@@ -3698,7 +3695,7 @@ function gateExclusion(gated) {
|
|
|
3698
3695
|
return (vtxo) => {
|
|
3699
3696
|
const type = vtxo.script === void 0 ? void 0 : gated.get(vtxo.script);
|
|
3700
3697
|
if (type === void 0) return void 0;
|
|
3701
|
-
if (!
|
|
3698
|
+
if (!chunkPXPPZF5K_cjs.contractHandlers.has(type)) {
|
|
3702
3699
|
return `at ${vtxo.script} (contract type '${type}') has no handler registered in this build`;
|
|
3703
3700
|
}
|
|
3704
3701
|
return `at ${vtxo.script} (contract type '${type}') is not generically spendable`;
|
|
@@ -3734,7 +3731,7 @@ function selectPendingRecoveryOutpoints(contractsWithVtxos, signerSet, nowSecond
|
|
|
3734
3731
|
continue;
|
|
3735
3732
|
}
|
|
3736
3733
|
for (const v of vtxos) {
|
|
3737
|
-
if (!
|
|
3734
|
+
if (!chunkZIRFXBKL_cjs.hasTerminalSpend(v) && !v.isSwept) out.add(`${v.txid}:${v.vout}`);
|
|
3738
3735
|
}
|
|
3739
3736
|
}
|
|
3740
3737
|
return out;
|
|
@@ -3767,10 +3764,10 @@ function byValueDescending(vtxos) {
|
|
|
3767
3764
|
return [...vtxos].sort((a, b) => b.value - a.value);
|
|
3768
3765
|
}
|
|
3769
3766
|
async function fetchTimeHeight(wallet) {
|
|
3770
|
-
return
|
|
3767
|
+
return chunkZIRFXBKL_cjs.resolveTimeHeight(wallet.onchainProvider);
|
|
3771
3768
|
}
|
|
3772
3769
|
function canMigrateBySend(vtxo, now) {
|
|
3773
|
-
if (!
|
|
3770
|
+
if (!chunkZIRFXBKL_cjs.canSpendOffchain(vtxo, now)) return false;
|
|
3774
3771
|
return vtxo.expiresAt !== void 0 || vtxo.expiresAtHeight !== void 0;
|
|
3775
3772
|
}
|
|
3776
3773
|
function byExpiryAscending(vtxos, now) {
|
|
@@ -3778,7 +3775,7 @@ function byExpiryAscending(vtxos, now) {
|
|
|
3778
3775
|
if (vtxo.isSwept) return -Infinity;
|
|
3779
3776
|
if (vtxo.expiresAt !== void 0) return vtxo.expiresAt.getTime();
|
|
3780
3777
|
if (vtxo.expiresAtHeight !== void 0) {
|
|
3781
|
-
return
|
|
3778
|
+
return chunkZIRFXBKL_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
|
|
3782
3779
|
}
|
|
3783
3780
|
return Infinity;
|
|
3784
3781
|
};
|
|
@@ -3805,7 +3802,7 @@ function priceSettlementInputs(vtxos, estimator) {
|
|
|
3805
3802
|
const payable = [];
|
|
3806
3803
|
const net = /* @__PURE__ */ new Map();
|
|
3807
3804
|
for (const vtxo of vtxos) {
|
|
3808
|
-
const inputFee = estimator.evalOffchainInput(
|
|
3805
|
+
const inputFee = estimator.evalOffchainInput(chunkZIRFXBKL_cjs.toOffchainInputFeeParams(vtxo));
|
|
3809
3806
|
if (inputFee.satoshis >= vtxo.value) {
|
|
3810
3807
|
continue;
|
|
3811
3808
|
}
|
|
@@ -3831,7 +3828,7 @@ function deductOffchainOutputFee(subtotal, estimator, arkAddress) {
|
|
|
3831
3828
|
}
|
|
3832
3829
|
const outputFee = estimator.evalOffchainOutput({
|
|
3833
3830
|
amount: subtotal,
|
|
3834
|
-
script: base.hex.encode(
|
|
3831
|
+
script: base.hex.encode(chunkZIRFXBKL_cjs.ArkAddress.decode(arkAddress).pkScript)
|
|
3835
3832
|
});
|
|
3836
3833
|
return subtotal - BigInt(outputFee.satoshis);
|
|
3837
3834
|
}
|
|
@@ -3849,10 +3846,10 @@ var DEFAULT_SETTLEMENT_CONFIG = {
|
|
|
3849
3846
|
};
|
|
3850
3847
|
function getRecoverableVtxos(vtxos, dustAmount, now) {
|
|
3851
3848
|
return vtxos.filter((vtxo) => {
|
|
3852
|
-
if (
|
|
3849
|
+
if (chunkZIRFXBKL_cjs.canRecoverOnchain(vtxo, now)) {
|
|
3853
3850
|
return true;
|
|
3854
3851
|
}
|
|
3855
|
-
if (
|
|
3852
|
+
if (chunkZIRFXBKL_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
|
|
3856
3853
|
return true;
|
|
3857
3854
|
}
|
|
3858
3855
|
return false;
|
|
@@ -3883,7 +3880,7 @@ function getRecoverableWithSubdust(vtxos, dustAmount, now) {
|
|
|
3883
3880
|
}
|
|
3884
3881
|
function isVtxoExpiringSoon(vtxo, thresholdMs) {
|
|
3885
3882
|
const realThresholdMs = thresholdMs <= 100 ? DEFAULT_THRESHOLD_MS : thresholdMs;
|
|
3886
|
-
const expiresAt =
|
|
3883
|
+
const expiresAt = chunkZIRFXBKL_cjs.normalizeVtxo(vtxo).expiresAt;
|
|
3887
3884
|
if (expiresAt === void 0) return false;
|
|
3888
3885
|
const now = Date.now();
|
|
3889
3886
|
const batchExpiry = expiresAt.getTime();
|
|
@@ -3892,7 +3889,7 @@ function isVtxoExpiringSoon(vtxo, thresholdMs) {
|
|
|
3892
3889
|
}
|
|
3893
3890
|
function getExpiringAndRecoverableVtxos(vtxos, thresholdMs, dustAmount, now) {
|
|
3894
3891
|
return vtxos.filter(
|
|
3895
|
-
(vtxo) => isVtxoExpiringSoon(vtxo, thresholdMs) ||
|
|
3892
|
+
(vtxo) => isVtxoExpiringSoon(vtxo, thresholdMs) || chunkZIRFXBKL_cjs.canRecoverOnchain(vtxo, now) || isSubdust(vtxo, dustAmount)
|
|
3896
3893
|
);
|
|
3897
3894
|
}
|
|
3898
3895
|
function isMigrationCapable(wallet) {
|
|
@@ -4491,11 +4488,11 @@ var VtxoManager = class _VtxoManager {
|
|
|
4491
4488
|
`Sweep not economical: output ${outputAmount} sats after ${fee} sats fee is below dust (${dustAmount} sats)`
|
|
4492
4489
|
);
|
|
4493
4490
|
}
|
|
4494
|
-
const tx = new
|
|
4491
|
+
const tx = new chunkZIRFXBKL_cjs.Transaction();
|
|
4495
4492
|
for (const utxo of expiredUtxos) {
|
|
4496
|
-
const utxoScript =
|
|
4493
|
+
const utxoScript = chunkZIRFXBKL_cjs.VtxoScript.decode(utxo.tapTree);
|
|
4497
4494
|
const utxoExitLeaf = utxoScript.leaves.find(
|
|
4498
|
-
(leaf) =>
|
|
4495
|
+
(leaf) => chunkZIRFXBKL_cjs.CSVMultisigTapscript.isScriptValid(chunkZIRFXBKL_cjs.scriptFromTapLeafScript(leaf)) === true
|
|
4499
4496
|
);
|
|
4500
4497
|
if (!utxoExitLeaf) {
|
|
4501
4498
|
throw new Error(
|
|
@@ -4510,7 +4507,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4510
4507
|
amount: BigInt(utxo.value)
|
|
4511
4508
|
},
|
|
4512
4509
|
tapLeafScript: [utxoExitLeaf],
|
|
4513
|
-
sequence:
|
|
4510
|
+
sequence: chunkZIRFXBKL_cjs.getSequence(utxoExitLeaf)
|
|
4514
4511
|
});
|
|
4515
4512
|
}
|
|
4516
4513
|
tx.addOutputAddress(boardingAddress, outputAmount, this.getNetwork());
|
|
@@ -4744,8 +4741,8 @@ var VtxoManager = class _VtxoManager {
|
|
|
4744
4741
|
if (!serverPubKey) continue;
|
|
4745
4742
|
const cls = classifyAgainstSignerSet(serverPubKey, signerSet, nowSeconds);
|
|
4746
4743
|
if (cls.status === "CURRENT") continue;
|
|
4747
|
-
const recoverable = vtxos.filter((v) => v.isSwept && !
|
|
4748
|
-
const spendable = vtxos.filter((v) => !
|
|
4744
|
+
const recoverable = vtxos.filter((v) => v.isSwept && !chunkZIRFXBKL_cjs.hasTerminalSpend(v));
|
|
4745
|
+
const spendable = vtxos.filter((v) => !chunkZIRFXBKL_cjs.hasTerminalSpend(v) && !v.isSwept);
|
|
4749
4746
|
const value = spendable.reduce((sum, v) => sum + v.value, 0);
|
|
4750
4747
|
let recoverableCount = 0;
|
|
4751
4748
|
let recoverableValue = 0;
|
|
@@ -4758,7 +4755,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4758
4755
|
awaitingSweepCount = spendable.length;
|
|
4759
4756
|
awaitingSweepValue = value;
|
|
4760
4757
|
for (const v of spendable) {
|
|
4761
|
-
const exp =
|
|
4758
|
+
const exp = chunkZIRFXBKL_cjs.toBatchExpiry(v);
|
|
4762
4759
|
if (exp !== void 0 && (nextSweepEta === void 0 || exp < nextSweepEta)) {
|
|
4763
4760
|
nextSweepEta = exp;
|
|
4764
4761
|
}
|
|
@@ -5019,7 +5016,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5019
5016
|
/** Decodes the boarding tapscript exit path to extract the CSV timelock. */
|
|
5020
5017
|
getBoardingTimelock() {
|
|
5021
5018
|
const wallet = this.getSweepWallet();
|
|
5022
|
-
const exitScript =
|
|
5019
|
+
const exitScript = chunkZIRFXBKL_cjs.CSVMultisigTapscript.decode(
|
|
5023
5020
|
base.hex.decode(wallet.boardingTapscript.exitScript)
|
|
5024
5021
|
);
|
|
5025
5022
|
return exitScript.params.timelock;
|
|
@@ -5150,8 +5147,8 @@ var VtxoManager = class _VtxoManager {
|
|
|
5150
5147
|
* or doesn't carry the metadata.
|
|
5151
5148
|
*/
|
|
5152
5149
|
extractSpentOutpoint(error) {
|
|
5153
|
-
const ark =
|
|
5154
|
-
if (!
|
|
5150
|
+
const ark = chunkZIRFXBKL_cjs.maybeArkError(error);
|
|
5151
|
+
if (!chunkZIRFXBKL_cjs.isArkError(ark, chunkZIRFXBKL_cjs.ArkErrorName.VTXO_ALREADY_SPENT)) return void 0;
|
|
5155
5152
|
const raw = ark.metadata?.vtxo_outpoint;
|
|
5156
5153
|
if (typeof raw !== "string") return void 0;
|
|
5157
5154
|
const [txid, voutStr] = raw.split(":");
|
|
@@ -5341,7 +5338,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5341
5338
|
if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
|
|
5342
5339
|
break;
|
|
5343
5340
|
}
|
|
5344
|
-
const inputFee = estimator.evalOffchainInput(
|
|
5341
|
+
const inputFee = estimator.evalOffchainInput(chunkZIRFXBKL_cjs.toOffchainInputFeeParams(v));
|
|
5345
5342
|
if (inputFee.satoshis >= v.value) {
|
|
5346
5343
|
continue;
|
|
5347
5344
|
}
|
|
@@ -5361,7 +5358,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5361
5358
|
const arkAddress = await this.wallet.getAddress();
|
|
5362
5359
|
const outputFee = estimator.evalOffchainOutput({
|
|
5363
5360
|
amount: totalAmount,
|
|
5364
|
-
script: base.hex.encode(
|
|
5361
|
+
script: base.hex.encode(chunkZIRFXBKL_cjs.ArkAddress.decode(arkAddress).pkScript)
|
|
5365
5362
|
});
|
|
5366
5363
|
totalAmount -= BigInt(outputFee.satoshis);
|
|
5367
5364
|
if (totalAmount < dustAmount) return;
|
|
@@ -5441,7 +5438,7 @@ var ArkNote = class _ArkNote {
|
|
|
5441
5438
|
this.value = value;
|
|
5442
5439
|
this.HRP = HRP;
|
|
5443
5440
|
const preimageHash = utils_js.sha256(this.preimage);
|
|
5444
|
-
this.vtxoScript = new
|
|
5441
|
+
this.vtxoScript = new chunkZIRFXBKL_cjs.VtxoScript([noteTapscript(preimageHash)]);
|
|
5445
5442
|
const leaf = this.vtxoScript.leaves[0];
|
|
5446
5443
|
this.txid = base.hex.encode(new Uint8Array(preimageHash).reverse());
|
|
5447
5444
|
this.tapTree = this.vtxoScript.encode();
|
|
@@ -5608,7 +5605,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
5608
5605
|
const privateKey = data.slice(1, 33);
|
|
5609
5606
|
const serverPubKey = data.slice(33, 65);
|
|
5610
5607
|
const sequence = new DataView(data.buffer, data.byteOffset + 65, 4).getUint32(0, false);
|
|
5611
|
-
const csvTimelock =
|
|
5608
|
+
const csvTimelock = chunkZIRFXBKL_cjs.sequenceToTimelock(sequence);
|
|
5612
5609
|
return new _ArkadeCash(privateKey, serverPubKey, csvTimelock, decoded.prefix);
|
|
5613
5610
|
}
|
|
5614
5611
|
toString() {
|
|
@@ -5616,7 +5613,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
5616
5613
|
data[0] = _ArkadeCash.Version;
|
|
5617
5614
|
data.set(this._privateKey, 1);
|
|
5618
5615
|
data.set(this._serverPubKey, 33);
|
|
5619
|
-
const sequence =
|
|
5616
|
+
const sequence = chunkZIRFXBKL_cjs.timelockToSequence(this.csvTimelock);
|
|
5620
5617
|
new DataView(data.buffer, data.byteOffset + 65, 4).setUint32(0, sequence, false);
|
|
5621
5618
|
const words = base.bech32m.toWords(data);
|
|
5622
5619
|
return base.bech32m.encode(this.hrp, words, 1023);
|
|
@@ -5625,7 +5622,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
5625
5622
|
return SingleKey.fromPrivateKey(this._privateKey);
|
|
5626
5623
|
}
|
|
5627
5624
|
get vtxoScript() {
|
|
5628
|
-
return new
|
|
5625
|
+
return new chunkPXPPZF5K_cjs.DefaultVtxo.Script({
|
|
5629
5626
|
pubKey: this._publicKey,
|
|
5630
5627
|
serverPubKey: this._serverPubKey,
|
|
5631
5628
|
csvTimelock: this.csvTimelock
|
|
@@ -5886,7 +5883,7 @@ async function captureExitBranch(params) {
|
|
|
5886
5883
|
const nonCommitment = ordered.filter((c) => chainTxTypeToChainedExit(c.type) !== 1 /* Commitment */).map((c) => c.txid);
|
|
5887
5884
|
if (nonCommitment.length > 0) {
|
|
5888
5885
|
for (const psbt of await resolver.getVirtualTxs(nonCommitment)) {
|
|
5889
|
-
psbtByTxid.set(
|
|
5886
|
+
psbtByTxid.set(chunkZIRFXBKL_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
5890
5887
|
}
|
|
5891
5888
|
}
|
|
5892
5889
|
}
|
|
@@ -5929,10 +5926,10 @@ var IndexerExitDataSource = class {
|
|
|
5929
5926
|
while (hasMore) {
|
|
5930
5927
|
const { chain: page, page: meta } = await this.indexer.getVtxoChain(
|
|
5931
5928
|
{ txid: vtxo.txid, vout: vtxo.vout },
|
|
5932
|
-
{ pageIndex, pageSize:
|
|
5929
|
+
{ pageIndex, pageSize: chunkZIRFXBKL_cjs.DEFAULT_PAGE_SIZE }
|
|
5933
5930
|
);
|
|
5934
5931
|
chain.push(...page);
|
|
5935
|
-
hasMore = meta ? page.length ===
|
|
5932
|
+
hasMore = meta ? page.length === chunkZIRFXBKL_cjs.DEFAULT_PAGE_SIZE : false;
|
|
5936
5933
|
pageIndex++;
|
|
5937
5934
|
}
|
|
5938
5935
|
return chain;
|
|
@@ -5944,12 +5941,12 @@ var IndexerExitDataSource = class {
|
|
|
5944
5941
|
while (hasMore) {
|
|
5945
5942
|
const { txs, page } = await this.indexer.getVirtualTxs(txids, {
|
|
5946
5943
|
pageIndex,
|
|
5947
|
-
pageSize:
|
|
5944
|
+
pageSize: chunkZIRFXBKL_cjs.DEFAULT_PAGE_SIZE
|
|
5948
5945
|
});
|
|
5949
5946
|
for (const psbt of txs) {
|
|
5950
|
-
out.set(
|
|
5947
|
+
out.set(chunkZIRFXBKL_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
5951
5948
|
}
|
|
5952
|
-
hasMore = page ? txs.length ===
|
|
5949
|
+
hasMore = page ? txs.length === chunkZIRFXBKL_cjs.DEFAULT_PAGE_SIZE : false;
|
|
5953
5950
|
pageIndex++;
|
|
5954
5951
|
}
|
|
5955
5952
|
return out;
|
|
@@ -5970,7 +5967,7 @@ function chainedTxTypeToChainTxType(t) {
|
|
|
5970
5967
|
}
|
|
5971
5968
|
}
|
|
5972
5969
|
function psbtInputTxids(psbtBase64) {
|
|
5973
|
-
const tx =
|
|
5970
|
+
const tx = chunkZIRFXBKL_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
|
|
5974
5971
|
const ids = [];
|
|
5975
5972
|
for (let i = 0; i < tx.inputsLength; i++) {
|
|
5976
5973
|
const txid = tx.getInput(i).txid;
|
|
@@ -6151,6 +6148,8 @@ function serializeArkInfoSnapshot(info, savedAt) {
|
|
|
6151
6148
|
unilateralExitDelay: info.unilateralExitDelay.toString(),
|
|
6152
6149
|
boardingExitDelay: info.boardingExitDelay.toString(),
|
|
6153
6150
|
vtxoTreeExpiry: info.vtxoTreeExpiry?.toString(),
|
|
6151
|
+
maxTxWeight: info.maxTxWeight?.toString(),
|
|
6152
|
+
maxOpReturnOutputs: info.maxOpReturnOutputs?.toString(),
|
|
6154
6153
|
sessionDuration: info.sessionDuration.toString(),
|
|
6155
6154
|
dust: info.dust.toString(),
|
|
6156
6155
|
fees: info.fees,
|
|
@@ -6201,6 +6200,8 @@ function hydrateArkInfo(snapshot) {
|
|
|
6201
6200
|
signerPubkey: a.signerPubkey,
|
|
6202
6201
|
unilateralExitDelay: BigInt(a.unilateralExitDelay),
|
|
6203
6202
|
vtxoTreeExpiry: a.vtxoTreeExpiry !== void 0 ? BigInt(a.vtxoTreeExpiry) : void 0,
|
|
6203
|
+
maxTxWeight: a.maxTxWeight !== void 0 ? BigInt(a.maxTxWeight) : void 0,
|
|
6204
|
+
maxOpReturnOutputs: a.maxOpReturnOutputs !== void 0 ? BigInt(a.maxOpReturnOutputs) : void 0,
|
|
6204
6205
|
utxoMaxAmount: BigInt(a.utxoMaxAmount),
|
|
6205
6206
|
utxoMinAmount: BigInt(a.utxoMinAmount),
|
|
6206
6207
|
version: a.version,
|
|
@@ -6273,8 +6274,10 @@ function parseStoredArkInfoSnapshot(raw) {
|
|
|
6273
6274
|
]) {
|
|
6274
6275
|
assertDecimalString(a[field], `arkInfo.${field}`);
|
|
6275
6276
|
}
|
|
6276
|
-
|
|
6277
|
-
|
|
6277
|
+
for (const field of ["vtxoTreeExpiry", "maxTxWeight", "maxOpReturnOutputs"]) {
|
|
6278
|
+
if (a[field] !== void 0) {
|
|
6279
|
+
assertDecimalString(a[field], `arkInfo.${field}`);
|
|
6280
|
+
}
|
|
6278
6281
|
}
|
|
6279
6282
|
assertFeeInfo(a.fees, "arkInfo.fees");
|
|
6280
6283
|
if (!Array.isArray(a.deprecatedSigners)) {
|
|
@@ -6323,10 +6326,10 @@ async function resolveArkInfo(arkProvider, walletRepository) {
|
|
|
6323
6326
|
try {
|
|
6324
6327
|
info = await arkProvider.getInfo();
|
|
6325
6328
|
} catch (err) {
|
|
6326
|
-
if (!
|
|
6329
|
+
if (!chunkZIRFXBKL_cjs.isRetryableProviderError(err)) throw err;
|
|
6327
6330
|
const snapshot = await loadArkInfoSnapshot(walletRepository);
|
|
6328
6331
|
if (!snapshot) {
|
|
6329
|
-
throw new
|
|
6332
|
+
throw new chunkZIRFXBKL_cjs.ProviderUnavailableError(
|
|
6330
6333
|
"Arkade server info is unavailable and no cached snapshot exists",
|
|
6331
6334
|
{ cause: err }
|
|
6332
6335
|
);
|
|
@@ -6709,7 +6712,7 @@ function collectArkTxidsNeedingCreatedAt(vtxos) {
|
|
|
6709
6712
|
return [...txids];
|
|
6710
6713
|
}
|
|
6711
6714
|
async function buildTransactionHistory(vtxos, allBoardingTxs, commitmentsToIgnore, resolveTxCreatedAt) {
|
|
6712
|
-
const fromOldestVtxo = vtxos.map(
|
|
6715
|
+
const fromOldestVtxo = vtxos.map(chunkZIRFXBKL_cjs.normalizeVtxo).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
|
|
6713
6716
|
const txidsNeedingCreatedAt = resolveTxCreatedAt ? collectArkTxidsNeedingCreatedAt(fromOldestVtxo) : [];
|
|
6714
6717
|
const resolvedCreatedAt = resolveTxCreatedAt && txidsNeedingCreatedAt.length > 0 ? await resolveTxCreatedAt(txidsNeedingCreatedAt) : /* @__PURE__ */ new Map();
|
|
6715
6718
|
const unmatchedSettledBoardingTxs = allBoardingTxs.filter(isSettledBoardingReceive).sort((a, b) => a.createdAt - b.createdAt);
|
|
@@ -6873,7 +6876,7 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6873
6876
|
const virtualCoins = await this.wallet.getSpendableVtxos({
|
|
6874
6877
|
withRecoverable: false
|
|
6875
6878
|
});
|
|
6876
|
-
const controlAssetRef = params.controlAssetId ?
|
|
6879
|
+
const controlAssetRef = params.controlAssetId ? chunk3S3JZUEN_cjs.AssetRef.fromId(chunk3S3JZUEN_cjs.AssetId.fromString(params.controlAssetId)) : null;
|
|
6877
6880
|
const coinSelection = selectVirtualCoins(virtualCoins, Number(this.wallet.dustAmount));
|
|
6878
6881
|
let totalBtcSelected = 0n;
|
|
6879
6882
|
const assetChanges = /* @__PURE__ */ new Map();
|
|
@@ -6886,8 +6889,8 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6886
6889
|
}
|
|
6887
6890
|
}
|
|
6888
6891
|
const groups = [];
|
|
6889
|
-
const issuedAssetOutput =
|
|
6890
|
-
const issuedAssetGroup =
|
|
6892
|
+
const issuedAssetOutput = chunk3S3JZUEN_cjs.AssetOutput.create(0, params.amount);
|
|
6893
|
+
const issuedAssetGroup = chunk3S3JZUEN_cjs.AssetGroup.create(
|
|
6891
6894
|
null,
|
|
6892
6895
|
controlAssetRef,
|
|
6893
6896
|
[],
|
|
@@ -6902,28 +6905,28 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6902
6905
|
for (const [inputIndex, assets] of assetInputs) {
|
|
6903
6906
|
for (const asset of assets) {
|
|
6904
6907
|
if (asset.assetId !== assetId) continue;
|
|
6905
|
-
changeInputs.push(
|
|
6908
|
+
changeInputs.push(chunk3S3JZUEN_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
6906
6909
|
}
|
|
6907
6910
|
}
|
|
6908
6911
|
groups.push(
|
|
6909
|
-
|
|
6910
|
-
|
|
6912
|
+
chunk3S3JZUEN_cjs.AssetGroup.create(
|
|
6913
|
+
chunk3S3JZUEN_cjs.AssetId.fromString(assetId),
|
|
6911
6914
|
null,
|
|
6912
6915
|
changeInputs,
|
|
6913
|
-
[
|
|
6916
|
+
[chunk3S3JZUEN_cjs.AssetOutput.create(0, amount)],
|
|
6914
6917
|
[]
|
|
6915
6918
|
)
|
|
6916
6919
|
);
|
|
6917
6920
|
}
|
|
6918
6921
|
}
|
|
6919
6922
|
const address = await this.wallet.getAddress();
|
|
6920
|
-
const outputAddress =
|
|
6923
|
+
const outputAddress = chunkZIRFXBKL_cjs.ArkAddress.decode(address);
|
|
6921
6924
|
const outputs = [
|
|
6922
6925
|
{
|
|
6923
6926
|
script: outputAddress.pkScript,
|
|
6924
6927
|
amount: BigInt(totalBtcSelected)
|
|
6925
6928
|
},
|
|
6926
|
-
Extension.create([
|
|
6929
|
+
Extension.create([chunk3S3JZUEN_cjs.Packet.create(groups)]).txOut()
|
|
6927
6930
|
];
|
|
6928
6931
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(
|
|
6929
6932
|
coinSelection.inputs,
|
|
@@ -6931,7 +6934,7 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6931
6934
|
);
|
|
6932
6935
|
return {
|
|
6933
6936
|
arkTxId: arkTxid,
|
|
6934
|
-
assetId:
|
|
6937
|
+
assetId: chunk3S3JZUEN_cjs.AssetId.create(arkTxid, 0).toString()
|
|
6935
6938
|
};
|
|
6936
6939
|
}
|
|
6937
6940
|
/**
|
|
@@ -7003,16 +7006,16 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7003
7006
|
for (const [inputIndex, assets] of assetInputs) {
|
|
7004
7007
|
for (const asset of assets) {
|
|
7005
7008
|
if (asset.assetId !== params.assetId) continue;
|
|
7006
|
-
reissueInputs.push(
|
|
7009
|
+
reissueInputs.push(chunk3S3JZUEN_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
7007
7010
|
}
|
|
7008
7011
|
}
|
|
7009
7012
|
const totalAssetAmount = assetToReissueAmount + params.amount;
|
|
7010
|
-
const reissueAssetIdObj =
|
|
7011
|
-
const reissueAssetGroup =
|
|
7013
|
+
const reissueAssetIdObj = chunk3S3JZUEN_cjs.AssetId.fromString(params.assetId);
|
|
7014
|
+
const reissueAssetGroup = chunk3S3JZUEN_cjs.AssetGroup.create(
|
|
7012
7015
|
reissueAssetIdObj,
|
|
7013
7016
|
null,
|
|
7014
7017
|
reissueInputs,
|
|
7015
|
-
[
|
|
7018
|
+
[chunk3S3JZUEN_cjs.AssetOutput.create(0, totalAssetAmount)],
|
|
7016
7019
|
[]
|
|
7017
7020
|
);
|
|
7018
7021
|
const groups = [reissueAssetGroup];
|
|
@@ -7021,27 +7024,27 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7021
7024
|
for (const [inputIndex, assets] of assetInputs) {
|
|
7022
7025
|
for (const asset of assets) {
|
|
7023
7026
|
if (asset.assetId !== assetId) continue;
|
|
7024
|
-
changeInputs.push(
|
|
7027
|
+
changeInputs.push(chunk3S3JZUEN_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
7025
7028
|
}
|
|
7026
7029
|
}
|
|
7027
7030
|
groups.push(
|
|
7028
|
-
|
|
7029
|
-
|
|
7031
|
+
chunk3S3JZUEN_cjs.AssetGroup.create(
|
|
7032
|
+
chunk3S3JZUEN_cjs.AssetId.fromString(assetId),
|
|
7030
7033
|
null,
|
|
7031
7034
|
changeInputs,
|
|
7032
|
-
[
|
|
7035
|
+
[chunk3S3JZUEN_cjs.AssetOutput.create(0, amount)],
|
|
7033
7036
|
[]
|
|
7034
7037
|
)
|
|
7035
7038
|
);
|
|
7036
7039
|
}
|
|
7037
7040
|
const address = await this.wallet.getAddress();
|
|
7038
|
-
const outputAddress =
|
|
7041
|
+
const outputAddress = chunkZIRFXBKL_cjs.ArkAddress.decode(address);
|
|
7039
7042
|
const outputs = [
|
|
7040
7043
|
{
|
|
7041
7044
|
script: outputAddress.pkScript,
|
|
7042
7045
|
amount: BigInt(totalBtcSelected)
|
|
7043
7046
|
},
|
|
7044
|
-
Extension.create([
|
|
7047
|
+
Extension.create([chunk3S3JZUEN_cjs.Packet.create(groups)]).txOut()
|
|
7045
7048
|
];
|
|
7046
7049
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
|
|
7047
7050
|
return arkTxid;
|
|
@@ -7108,27 +7111,27 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7108
7111
|
for (const [inputIndex, assets] of assetInputs) {
|
|
7109
7112
|
for (const asset of assets) {
|
|
7110
7113
|
if (asset.assetId !== assetId) continue;
|
|
7111
|
-
changeInputs.push(
|
|
7114
|
+
changeInputs.push(chunk3S3JZUEN_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
7112
7115
|
}
|
|
7113
7116
|
}
|
|
7114
7117
|
groups.push(
|
|
7115
|
-
|
|
7116
|
-
|
|
7118
|
+
chunk3S3JZUEN_cjs.AssetGroup.create(
|
|
7119
|
+
chunk3S3JZUEN_cjs.AssetId.fromString(assetId),
|
|
7117
7120
|
null,
|
|
7118
7121
|
changeInputs,
|
|
7119
|
-
amount > 0n ? [
|
|
7122
|
+
amount > 0n ? [chunk3S3JZUEN_cjs.AssetOutput.create(0, amount)] : [],
|
|
7120
7123
|
[]
|
|
7121
7124
|
)
|
|
7122
7125
|
);
|
|
7123
7126
|
}
|
|
7124
7127
|
const address = await this.wallet.getAddress();
|
|
7125
|
-
const outputAddress =
|
|
7128
|
+
const outputAddress = chunkZIRFXBKL_cjs.ArkAddress.decode(address);
|
|
7126
7129
|
const outputs = [
|
|
7127
7130
|
{
|
|
7128
7131
|
script: outputAddress.pkScript,
|
|
7129
7132
|
amount: BigInt(totalBtcSelected)
|
|
7130
7133
|
},
|
|
7131
|
-
Extension.create([
|
|
7134
|
+
Extension.create([chunk3S3JZUEN_cjs.Packet.create(groups)]).txOut()
|
|
7132
7135
|
];
|
|
7133
7136
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
|
|
7134
7137
|
return arkTxid;
|
|
@@ -7153,7 +7156,7 @@ function castMetadata(metadata) {
|
|
|
7153
7156
|
} else {
|
|
7154
7157
|
throw new Error("Invalid metadata value type");
|
|
7155
7158
|
}
|
|
7156
|
-
md.push(
|
|
7159
|
+
md.push(chunk3S3JZUEN_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
|
|
7157
7160
|
}
|
|
7158
7161
|
return md;
|
|
7159
7162
|
}
|
|
@@ -7174,10 +7177,10 @@ var DelegateManagerImpl = class {
|
|
|
7174
7177
|
if (vtxos.length === 0) {
|
|
7175
7178
|
return { delegated: [], failed: [] };
|
|
7176
7179
|
}
|
|
7177
|
-
const destinationScript =
|
|
7180
|
+
const destinationScript = chunkZIRFXBKL_cjs.ArkAddress.decode(destination).pkScript;
|
|
7178
7181
|
const arkInfo = await this.arkInfoProvider.getInfo();
|
|
7179
7182
|
const delegateInfo = await this.delegateProvider.getDelegateInfo();
|
|
7180
|
-
const eligible = vtxos.map(
|
|
7183
|
+
const eligible = vtxos.map(chunkZIRFXBKL_cjs.normalizeVtxo).filter(
|
|
7181
7184
|
(v) => isAnnotated(v) && findDelegateTapLeaf(v, delegateInfo.pubkey) !== void 0
|
|
7182
7185
|
);
|
|
7183
7186
|
if (eligible.length === 0) {
|
|
@@ -7206,11 +7209,11 @@ var DelegateManagerImpl = class {
|
|
|
7206
7209
|
const groupByExpiry = /* @__PURE__ */ new Map();
|
|
7207
7210
|
let recoverableVtxos = [];
|
|
7208
7211
|
for (const vtxo of eligible) {
|
|
7209
|
-
if (
|
|
7212
|
+
if (chunkZIRFXBKL_cjs.canRecoverOnchain(vtxo, now)) {
|
|
7210
7213
|
recoverableVtxos.push(vtxo);
|
|
7211
7214
|
continue;
|
|
7212
7215
|
}
|
|
7213
|
-
const expiry =
|
|
7216
|
+
const expiry = chunkZIRFXBKL_cjs.toBatchExpiry(vtxo);
|
|
7214
7217
|
if (!expiry) continue;
|
|
7215
7218
|
const dayKey = getDayTimestamp(expiry);
|
|
7216
7219
|
groupByExpiry.set(dayKey, [...groupByExpiry.get(dayKey) ?? [], vtxo]);
|
|
@@ -7275,7 +7278,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7275
7278
|
}
|
|
7276
7279
|
if (!delegateAt) {
|
|
7277
7280
|
const now = { timestamp: /* @__PURE__ */ new Date() };
|
|
7278
|
-
const expiryTimestamp = vtxos.filter((coin) => !
|
|
7281
|
+
const expiryTimestamp = vtxos.filter((coin) => !chunkZIRFXBKL_cjs.canRecoverOnchain(coin, now) && chunkZIRFXBKL_cjs.toBatchExpiry(coin)).reduce((min, coin) => Math.min(min, chunkZIRFXBKL_cjs.toBatchExpiry(coin)), Number.MAX_SAFE_INTEGER);
|
|
7279
7282
|
if (!expiryTimestamp || expiryTimestamp === Number.MAX_SAFE_INTEGER) {
|
|
7280
7283
|
delegateAt = new Date(Date.now() + 1 * 60 * 1e3);
|
|
7281
7284
|
} else {
|
|
@@ -7304,7 +7307,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7304
7307
|
let amount = 0n;
|
|
7305
7308
|
for (const coin of vtxos) {
|
|
7306
7309
|
const inputFee = estimator.evalOffchainInput({
|
|
7307
|
-
...
|
|
7310
|
+
...chunkZIRFXBKL_cjs.toOffchainInputFeeParams(coin),
|
|
7308
7311
|
type: "vtxo"
|
|
7309
7312
|
});
|
|
7310
7313
|
if (inputFee.value >= coin.value) {
|
|
@@ -7318,7 +7321,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7318
7321
|
const delegateFee = BigInt(Number(fee));
|
|
7319
7322
|
if (delegateFee > 0n) {
|
|
7320
7323
|
outputs.push({
|
|
7321
|
-
script:
|
|
7324
|
+
script: chunkZIRFXBKL_cjs.ArkAddress.decode(delegateAddress).pkScript,
|
|
7322
7325
|
amount: delegateFee
|
|
7323
7326
|
});
|
|
7324
7327
|
}
|
|
@@ -7351,10 +7354,10 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7351
7354
|
destinationScript
|
|
7352
7355
|
);
|
|
7353
7356
|
const forfeitOutputScript = btcSigner.OutScript.encode(
|
|
7354
|
-
btcSigner.Address(
|
|
7357
|
+
btcSigner.Address(chunkZIRFXBKL_cjs.getNetwork(network)).decode(forfeitAddress)
|
|
7355
7358
|
);
|
|
7356
7359
|
const forfeits = await Promise.all(
|
|
7357
|
-
vtxos.filter((v) => !
|
|
7360
|
+
vtxos.filter((v) => !chunkZIRFXBKL_cjs.canRecoverOnchain(v, { timestamp: /* @__PURE__ */ new Date() })).map(async (coin) => {
|
|
7358
7361
|
const forfeit = await makeDelegateForfeitTx(
|
|
7359
7362
|
coin,
|
|
7360
7363
|
dust,
|
|
@@ -7379,7 +7382,7 @@ async function makeDelegateForfeitTx(input, connectorAmount, delegatePubkey, for
|
|
|
7379
7382
|
index: input.vout,
|
|
7380
7383
|
witnessUtxo: {
|
|
7381
7384
|
amount: BigInt(input.value),
|
|
7382
|
-
script:
|
|
7385
|
+
script: chunkZIRFXBKL_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
7383
7386
|
},
|
|
7384
7387
|
sighashType: btcSigner.SigHash.ALL_ANYONECANPAY,
|
|
7385
7388
|
tapLeafScript: [delegateTapLeaf]
|
|
@@ -7437,7 +7440,7 @@ async function makeSignedDelegateIntent(identity, coins, outputs, onchainOutputs
|
|
|
7437
7440
|
expire_at: 0,
|
|
7438
7441
|
cosigners_public_keys: cosignerPubKeys
|
|
7439
7442
|
};
|
|
7440
|
-
const proof =
|
|
7443
|
+
const proof = chunkZIRFXBKL_cjs.Intent.create(message, coins, outputs);
|
|
7441
7444
|
const signedProof = await identity.sign(proof);
|
|
7442
7445
|
return {
|
|
7443
7446
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -7455,10 +7458,10 @@ function getDayTimestamp(timestamp) {
|
|
|
7455
7458
|
function findDelegateTapLeaf(vtxo, delegatePubkey) {
|
|
7456
7459
|
if (!vtxo.tapTree) return void 0;
|
|
7457
7460
|
const pk = delegatePubkey.length === 66 ? delegatePubkey.slice(2) : delegatePubkey;
|
|
7458
|
-
const vtxoScript =
|
|
7461
|
+
const vtxoScript = chunkZIRFXBKL_cjs.VtxoScript.decode(vtxo.tapTree);
|
|
7459
7462
|
return vtxoScript.leaves.find((tapLeaf) => {
|
|
7460
|
-
const arkTapscript =
|
|
7461
|
-
if (!
|
|
7463
|
+
const arkTapscript = chunkZIRFXBKL_cjs.decodeTapscript(chunkZIRFXBKL_cjs.scriptFromTapLeafScript(tapLeaf));
|
|
7464
|
+
if (!chunkZIRFXBKL_cjs.MultisigTapscript.is(arkTapscript)) return false;
|
|
7462
7465
|
return arkTapscript.params.pubkeys.map(base.hex.encode).includes(pk);
|
|
7463
7466
|
});
|
|
7464
7467
|
}
|
|
@@ -7569,6 +7572,22 @@ var awaitTransaction = (transaction) => new Promise((resolve, reject) => {
|
|
|
7569
7572
|
transaction.onerror = () => reject(transaction.error);
|
|
7570
7573
|
transaction.onabort = () => reject(transaction.error ?? new Error("transaction aborted"));
|
|
7571
7574
|
});
|
|
7575
|
+
var deleteByIndex = (store, indexName, value) => {
|
|
7576
|
+
const request = store.index(indexName).openCursor(IDBKeyRange.only(value));
|
|
7577
|
+
request.onsuccess = () => {
|
|
7578
|
+
const cursor = request.result;
|
|
7579
|
+
if (!cursor) return;
|
|
7580
|
+
cursor.delete();
|
|
7581
|
+
cursor.continue();
|
|
7582
|
+
};
|
|
7583
|
+
};
|
|
7584
|
+
var getAllByIndexValues = (store, indexName, values) => {
|
|
7585
|
+
if (values.length === 0) return Promise.resolve([]);
|
|
7586
|
+
const index = store.index(indexName);
|
|
7587
|
+
return Promise.all(values.map((value) => promisifyRequest(index.getAll(value)))).then(
|
|
7588
|
+
(results) => results.flat()
|
|
7589
|
+
);
|
|
7590
|
+
};
|
|
7572
7591
|
|
|
7573
7592
|
// src/repositories/indexedDB/manager.ts
|
|
7574
7593
|
function getGlobalObject() {
|
|
@@ -7583,8 +7602,24 @@ function getGlobalObject() {
|
|
|
7583
7602
|
}
|
|
7584
7603
|
throw new Error("Global object not found");
|
|
7585
7604
|
}
|
|
7605
|
+
var BLOCKED_UPGRADE_TIMEOUT_MS = 1e4;
|
|
7606
|
+
var DatabaseUpgradeBlockedError = class extends Error {
|
|
7607
|
+
constructor(dbName) {
|
|
7608
|
+
super(
|
|
7609
|
+
`database "${dbName}" upgrade blocked by another connection for ${BLOCKED_UPGRADE_TIMEOUT_MS}ms; close other tabs and retry`
|
|
7610
|
+
);
|
|
7611
|
+
this.dbName = dbName;
|
|
7612
|
+
}
|
|
7613
|
+
dbName;
|
|
7614
|
+
name = "DatabaseUpgradeBlockedError";
|
|
7615
|
+
};
|
|
7586
7616
|
var dbCache = /* @__PURE__ */ new Map();
|
|
7587
7617
|
var refCounts = /* @__PURE__ */ new Map();
|
|
7618
|
+
function forget(dbName, promise) {
|
|
7619
|
+
if (dbCache.get(dbName)?.promise !== promise) return;
|
|
7620
|
+
dbCache.delete(dbName);
|
|
7621
|
+
refCounts.delete(dbName);
|
|
7622
|
+
}
|
|
7588
7623
|
async function openDatabase(dbName, dbVersion, initDatabase2) {
|
|
7589
7624
|
const { globalObject } = getGlobalObject();
|
|
7590
7625
|
if (!globalObject.indexedDB) {
|
|
@@ -7602,26 +7637,47 @@ async function openDatabase(dbName, dbVersion, initDatabase2) {
|
|
|
7602
7637
|
}
|
|
7603
7638
|
const dbPromise = new Promise((resolve, reject) => {
|
|
7604
7639
|
const request = globalObject.indexedDB.open(dbName, dbVersion);
|
|
7640
|
+
let settled = false;
|
|
7641
|
+
let blockedTimer;
|
|
7642
|
+
const clearBlockedTimer = () => {
|
|
7643
|
+
if (blockedTimer !== void 0) clearTimeout(blockedTimer);
|
|
7644
|
+
blockedTimer = void 0;
|
|
7645
|
+
};
|
|
7605
7646
|
request.onerror = () => {
|
|
7606
|
-
|
|
7607
|
-
|
|
7647
|
+
clearBlockedTimer();
|
|
7648
|
+
if (settled) return;
|
|
7649
|
+
settled = true;
|
|
7650
|
+
forget(dbName, dbPromise);
|
|
7608
7651
|
reject(request.error);
|
|
7609
7652
|
};
|
|
7610
7653
|
request.onsuccess = () => {
|
|
7654
|
+
clearBlockedTimer();
|
|
7611
7655
|
const db = request.result;
|
|
7656
|
+
if (settled) {
|
|
7657
|
+
db.close();
|
|
7658
|
+
return;
|
|
7659
|
+
}
|
|
7660
|
+
settled = true;
|
|
7612
7661
|
db.onversionchange = () => {
|
|
7613
7662
|
db.close();
|
|
7614
|
-
|
|
7615
|
-
refCounts.delete(dbName);
|
|
7663
|
+
forget(dbName, dbPromise);
|
|
7616
7664
|
};
|
|
7665
|
+
db.addEventListener("close", () => forget(dbName, dbPromise));
|
|
7617
7666
|
resolve(db);
|
|
7618
7667
|
};
|
|
7619
7668
|
request.onupgradeneeded = (event) => {
|
|
7669
|
+
clearBlockedTimer();
|
|
7620
7670
|
const db = request.result;
|
|
7621
7671
|
initDatabase2(db, event.oldVersion, request.transaction);
|
|
7622
7672
|
};
|
|
7623
7673
|
request.onblocked = () => {
|
|
7624
7674
|
console.warn("Database upgrade blocked - close other tabs/connections");
|
|
7675
|
+
blockedTimer = setTimeout(() => {
|
|
7676
|
+
if (settled) return;
|
|
7677
|
+
settled = true;
|
|
7678
|
+
forget(dbName, dbPromise);
|
|
7679
|
+
reject(new DatabaseUpgradeBlockedError(dbName));
|
|
7680
|
+
}, BLOCKED_UPGRADE_TIMEOUT_MS);
|
|
7625
7681
|
};
|
|
7626
7682
|
});
|
|
7627
7683
|
dbCache.set(dbName, { version: dbVersion, promise: dbPromise });
|
|
@@ -7645,8 +7701,48 @@ async function closeDatabase(dbName) {
|
|
|
7645
7701
|
}
|
|
7646
7702
|
return true;
|
|
7647
7703
|
}
|
|
7704
|
+
|
|
7705
|
+
// src/repositories/indexedDB/managedConnection.ts
|
|
7706
|
+
var ConnectionDisposedError = class extends Error {
|
|
7707
|
+
constructor(dbName) {
|
|
7708
|
+
super(`connection to database "${dbName}" was disposed`);
|
|
7709
|
+
this.dbName = dbName;
|
|
7710
|
+
}
|
|
7711
|
+
dbName;
|
|
7712
|
+
name = "ConnectionDisposedError";
|
|
7713
|
+
};
|
|
7714
|
+
function createManagedConnection(dbName, version, initDatabase2) {
|
|
7715
|
+
let current = null;
|
|
7716
|
+
let disposed = false;
|
|
7717
|
+
return {
|
|
7718
|
+
get() {
|
|
7719
|
+
if (disposed) return Promise.reject(new ConnectionDisposedError(dbName));
|
|
7720
|
+
if (current) return current;
|
|
7721
|
+
const opening = openDatabase(dbName, version, initDatabase2).then((db) => {
|
|
7722
|
+
const forget2 = () => {
|
|
7723
|
+
if (current === opening) current = null;
|
|
7724
|
+
};
|
|
7725
|
+
db.addEventListener("versionchange", forget2);
|
|
7726
|
+
db.addEventListener("close", forget2);
|
|
7727
|
+
return db;
|
|
7728
|
+
}).catch((err) => {
|
|
7729
|
+
if (current === opening) current = null;
|
|
7730
|
+
throw err;
|
|
7731
|
+
});
|
|
7732
|
+
current = opening;
|
|
7733
|
+
return opening;
|
|
7734
|
+
},
|
|
7735
|
+
async [Symbol.asyncDispose]() {
|
|
7736
|
+
if (disposed) return;
|
|
7737
|
+
disposed = true;
|
|
7738
|
+
if (!current) return;
|
|
7739
|
+
current = null;
|
|
7740
|
+
await closeDatabase(dbName);
|
|
7741
|
+
}
|
|
7742
|
+
};
|
|
7743
|
+
}
|
|
7648
7744
|
function scriptFromArkAddress(address) {
|
|
7649
|
-
return base.hex.encode(
|
|
7745
|
+
return base.hex.encode(chunkZIRFXBKL_cjs.ArkAddress.decode(address).pkScript);
|
|
7650
7746
|
}
|
|
7651
7747
|
|
|
7652
7748
|
// src/repositories/indexedDB/schema.ts
|
|
@@ -7928,16 +8024,17 @@ async function setupServiceWorker(pathOrOptions) {
|
|
|
7928
8024
|
|
|
7929
8025
|
// src/repositories/indexedDB/virtualTxRepository.ts
|
|
7930
8026
|
var IndexedDBVirtualTxRepository = class {
|
|
8027
|
+
version = 1;
|
|
8028
|
+
connection;
|
|
7931
8029
|
constructor(dbName = DEFAULT_DB_NAME) {
|
|
7932
|
-
this.
|
|
8030
|
+
this.connection = createManagedConnection(
|
|
8031
|
+
dbName,
|
|
8032
|
+
INTENT_DB_VERSION,
|
|
8033
|
+
initDatabaseWithIntents
|
|
8034
|
+
);
|
|
7933
8035
|
}
|
|
7934
|
-
|
|
7935
|
-
|
|
7936
|
-
db = null;
|
|
7937
|
-
async getDB() {
|
|
7938
|
-
if (!this.db)
|
|
7939
|
-
this.db = await openDatabase(this.dbName, INTENT_DB_VERSION, initDatabaseWithIntents);
|
|
7940
|
-
return this.db;
|
|
8036
|
+
getDB() {
|
|
8037
|
+
return this.connection.get();
|
|
7941
8038
|
}
|
|
7942
8039
|
async clear() {
|
|
7943
8040
|
const db = await this.getDB();
|
|
@@ -8050,24 +8147,23 @@ var IndexedDBVirtualTxRepository = class {
|
|
|
8050
8147
|
await awaitTransaction(transaction);
|
|
8051
8148
|
}
|
|
8052
8149
|
async [Symbol.asyncDispose]() {
|
|
8053
|
-
|
|
8054
|
-
await closeDatabase(this.dbName);
|
|
8055
|
-
this.db = null;
|
|
8150
|
+
await this.connection[Symbol.asyncDispose]();
|
|
8056
8151
|
}
|
|
8057
8152
|
};
|
|
8058
8153
|
|
|
8059
8154
|
// src/repositories/indexedDB/intentRepository.ts
|
|
8060
8155
|
var IndexedDBIntentRepository = class {
|
|
8156
|
+
version = 1;
|
|
8157
|
+
connection;
|
|
8061
8158
|
constructor(dbName = DEFAULT_DB_NAME) {
|
|
8062
|
-
this.
|
|
8159
|
+
this.connection = createManagedConnection(
|
|
8160
|
+
dbName,
|
|
8161
|
+
INTENT_DB_VERSION,
|
|
8162
|
+
initDatabaseWithIntents
|
|
8163
|
+
);
|
|
8063
8164
|
}
|
|
8064
|
-
|
|
8065
|
-
|
|
8066
|
-
db = null;
|
|
8067
|
-
async getDB() {
|
|
8068
|
-
if (!this.db)
|
|
8069
|
-
this.db = await openDatabase(this.dbName, INTENT_DB_VERSION, initDatabaseWithIntents);
|
|
8070
|
-
return this.db;
|
|
8165
|
+
getDB() {
|
|
8166
|
+
return this.connection.get();
|
|
8071
8167
|
}
|
|
8072
8168
|
async clear() {
|
|
8073
8169
|
const db = await this.getDB();
|
|
@@ -8100,9 +8196,7 @@ var IndexedDBIntentRepository = class {
|
|
|
8100
8196
|
return out;
|
|
8101
8197
|
}
|
|
8102
8198
|
async [Symbol.asyncDispose]() {
|
|
8103
|
-
|
|
8104
|
-
await closeDatabase(this.dbName);
|
|
8105
|
-
this.db = null;
|
|
8199
|
+
await this.connection[Symbol.asyncDispose]();
|
|
8106
8200
|
}
|
|
8107
8201
|
};
|
|
8108
8202
|
|
|
@@ -8143,7 +8237,7 @@ function validateVtxosForScript(vtxos, script, context) {
|
|
|
8143
8237
|
}
|
|
8144
8238
|
async function getVtxosForContract(repo, contract) {
|
|
8145
8239
|
const vtxos = repo.getVtxosForScript ? await repo.getVtxosForScript(contract.script) : filterVtxosForScript(await repo.getVtxos(contract.address), contract.script);
|
|
8146
|
-
return vtxos.map(
|
|
8240
|
+
return vtxos.map(chunkZIRFXBKL_cjs.normalizeVtxo);
|
|
8147
8241
|
}
|
|
8148
8242
|
async function saveVtxosForContract(repo, contract, vtxos) {
|
|
8149
8243
|
if (repo.saveVtxosForScript) {
|
|
@@ -8285,7 +8379,7 @@ function decodeArkContract(encoded) {
|
|
|
8285
8379
|
}
|
|
8286
8380
|
function contractFromArkContract(encoded, options = {}) {
|
|
8287
8381
|
const parsed = decodeArkContract(encoded);
|
|
8288
|
-
const handler =
|
|
8382
|
+
const handler = chunkPXPPZF5K_cjs.contractHandlers.get(parsed.type);
|
|
8289
8383
|
if (!handler) {
|
|
8290
8384
|
throw new Error(`No handler registered for contract type '${parsed.type}'`);
|
|
8291
8385
|
}
|
|
@@ -8299,9 +8393,9 @@ function contractFromArkContract(encoded, options = {}) {
|
|
|
8299
8393
|
metadata: options.metadata
|
|
8300
8394
|
};
|
|
8301
8395
|
}
|
|
8302
|
-
function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix =
|
|
8396
|
+
function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunkZIRFXBKL_cjs.DEFAULT_NETWORK.hrp, options = {}) {
|
|
8303
8397
|
const parsed = decodeArkContract(encoded);
|
|
8304
|
-
const handler =
|
|
8398
|
+
const handler = chunkPXPPZF5K_cjs.contractHandlers.getOrThrow(parsed.type);
|
|
8305
8399
|
const params = parsed.data;
|
|
8306
8400
|
const vtxoScript = handler.createScript(params);
|
|
8307
8401
|
return {
|
|
@@ -8555,9 +8649,9 @@ var ContractWatcher = class {
|
|
|
8555
8649
|
this.connectionState = "connected";
|
|
8556
8650
|
this.reconnectAttempts = 0;
|
|
8557
8651
|
this.listenLoop().catch((e) => {
|
|
8558
|
-
if (
|
|
8652
|
+
if (chunkZIRFXBKL_cjs.isEventSourceError(e)) {
|
|
8559
8653
|
console.debug("ContractWatcher subscription disconnected; reconnecting");
|
|
8560
|
-
} else if (!
|
|
8654
|
+
} else if (!chunkZIRFXBKL_cjs.isEventSourceUnavailableError(e)) {
|
|
8561
8655
|
console.error(e);
|
|
8562
8656
|
}
|
|
8563
8657
|
this.connectionState = "disconnected";
|
|
@@ -8569,7 +8663,7 @@ var ContractWatcher = class {
|
|
|
8569
8663
|
this.scheduleReconnect();
|
|
8570
8664
|
});
|
|
8571
8665
|
} catch (error) {
|
|
8572
|
-
if (!
|
|
8666
|
+
if (!chunkZIRFXBKL_cjs.isEventSourceUnavailableError(error)) {
|
|
8573
8667
|
console.error("ContractWatcher connection failed:", error);
|
|
8574
8668
|
}
|
|
8575
8669
|
this.connectionState = "disconnected";
|
|
@@ -8595,7 +8689,7 @@ var ContractWatcher = class {
|
|
|
8595
8689
|
* slower; what it loses is push latency.
|
|
8596
8690
|
*/
|
|
8597
8691
|
reportEventSourceUnavailable(error) {
|
|
8598
|
-
if (!
|
|
8692
|
+
if (!chunkZIRFXBKL_cjs.isEventSourceUnavailableError(error)) return false;
|
|
8599
8693
|
if (!this.eventSourceReported) {
|
|
8600
8694
|
this.eventSourceReported = true;
|
|
8601
8695
|
console.warn(
|
|
@@ -8811,14 +8905,14 @@ var ContractWatcher = class {
|
|
|
8811
8905
|
const timestamp = Date.now();
|
|
8812
8906
|
if (update.newVtxos?.length) {
|
|
8813
8907
|
this.processSubscriptionVtxos(
|
|
8814
|
-
update.newVtxos.map(
|
|
8908
|
+
update.newVtxos.map(chunkZIRFXBKL_cjs.normalizeVtxo),
|
|
8815
8909
|
"vtxo_received",
|
|
8816
8910
|
timestamp
|
|
8817
8911
|
);
|
|
8818
8912
|
}
|
|
8819
8913
|
if (update.spentVtxos?.length) {
|
|
8820
8914
|
this.processSubscriptionVtxos(
|
|
8821
|
-
update.spentVtxos.map(
|
|
8915
|
+
update.spentVtxos.map(chunkZIRFXBKL_cjs.normalizeVtxo),
|
|
8822
8916
|
"vtxo_spent",
|
|
8823
8917
|
timestamp
|
|
8824
8918
|
);
|
|
@@ -8951,7 +9045,7 @@ async function reconcileIntents(deps) {
|
|
|
8951
9045
|
let vtxosByOutpoint = /* @__PURE__ */ new Map();
|
|
8952
9046
|
if (outpoints.length > 0) {
|
|
8953
9047
|
try {
|
|
8954
|
-
const { vtxos } = await
|
|
9048
|
+
const { vtxos } = await chunkZIRFXBKL_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
|
|
8955
9049
|
vtxosByOutpoint = new Map(vtxos.map((v) => [outpointKey(v), v]));
|
|
8956
9050
|
} catch (e) {
|
|
8957
9051
|
console.error("reconcileIntents: failed to fetch input VTXO state", e);
|
|
@@ -9125,7 +9219,7 @@ var ContractManager = class _ContractManager {
|
|
|
9125
9219
|
await this.reconcileWatched();
|
|
9126
9220
|
this.markSyncOnline();
|
|
9127
9221
|
} catch (err) {
|
|
9128
|
-
if (!
|
|
9222
|
+
if (!chunkZIRFXBKL_cjs.isRetryableProviderError(err)) throw err;
|
|
9129
9223
|
this.markSyncDegraded(err);
|
|
9130
9224
|
}
|
|
9131
9225
|
this.initialized = true;
|
|
@@ -9257,7 +9351,7 @@ var ContractManager = class _ContractManager {
|
|
|
9257
9351
|
const from = Math.max(0, watermark - lookAhead.size);
|
|
9258
9352
|
const to = watermark + lookAhead.size;
|
|
9259
9353
|
const deps = lookAhead.candidateDeps();
|
|
9260
|
-
const handlers =
|
|
9354
|
+
const handlers = chunkPXPPZF5K_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkPXPPZF5K_cjs.contractHandlers.get(t)).filter(hasCandidates);
|
|
9261
9355
|
const band = /* @__PURE__ */ new Map();
|
|
9262
9356
|
for (let index = from; index <= to; index++) {
|
|
9263
9357
|
const descriptor = lookAhead.materialize(index);
|
|
@@ -9268,7 +9362,7 @@ var ContractManager = class _ContractManager {
|
|
|
9268
9362
|
index,
|
|
9269
9363
|
params: {
|
|
9270
9364
|
...candidate,
|
|
9271
|
-
...
|
|
9365
|
+
...chunkPXPPZF5K_cjs.speculativeReceiveMetadata(descriptor)
|
|
9272
9366
|
}
|
|
9273
9367
|
});
|
|
9274
9368
|
}
|
|
@@ -9330,7 +9424,7 @@ var ContractManager = class _ContractManager {
|
|
|
9330
9424
|
});
|
|
9331
9425
|
for (const entry of pending) entry.catchUpPending = false;
|
|
9332
9426
|
} catch (err) {
|
|
9333
|
-
if (!
|
|
9427
|
+
if (!chunkZIRFXBKL_cjs.isRetryableProviderError(err)) throw err;
|
|
9334
9428
|
this.markSyncDegraded(err);
|
|
9335
9429
|
}
|
|
9336
9430
|
}
|
|
@@ -9380,7 +9474,7 @@ var ContractManager = class _ContractManager {
|
|
|
9380
9474
|
await this.fetchContractVxosFromIndexer([contract]);
|
|
9381
9475
|
this.markSyncOnline();
|
|
9382
9476
|
} catch (err) {
|
|
9383
|
-
if (!
|
|
9477
|
+
if (!chunkZIRFXBKL_cjs.isRetryableProviderError(err)) throw err;
|
|
9384
9478
|
this.markSyncDegraded(err);
|
|
9385
9479
|
}
|
|
9386
9480
|
await this.watcher.addContract(contract);
|
|
@@ -9417,7 +9511,7 @@ var ContractManager = class _ContractManager {
|
|
|
9417
9511
|
return result;
|
|
9418
9512
|
}
|
|
9419
9513
|
async upsertContractRow(params) {
|
|
9420
|
-
const handler =
|
|
9514
|
+
const handler = chunkPXPPZF5K_cjs.contractHandlers.get(params.type);
|
|
9421
9515
|
if (!handler) {
|
|
9422
9516
|
throw new Error(`No handler registered for contract type '${params.type}'`);
|
|
9423
9517
|
}
|
|
@@ -9517,7 +9611,7 @@ var ContractManager = class _ContractManager {
|
|
|
9517
9611
|
`scanContracts: batchSize must be a positive integer (got ${String(opts.batchSize)})`
|
|
9518
9612
|
);
|
|
9519
9613
|
}
|
|
9520
|
-
const registered =
|
|
9614
|
+
const registered = chunkPXPPZF5K_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkPXPPZF5K_cjs.contractHandlers.get(t)).filter(isDiscoverable);
|
|
9521
9615
|
const discoverables = [
|
|
9522
9616
|
...registered.filter((h) => h.type === "boarding"),
|
|
9523
9617
|
...registered.filter((h) => h.type !== "boarding")
|
|
@@ -9652,7 +9746,7 @@ var ContractManager = class _ContractManager {
|
|
|
9652
9746
|
await this.syncContracts({ contracts, pageSize });
|
|
9653
9747
|
this.markSyncOnline();
|
|
9654
9748
|
} catch (err) {
|
|
9655
|
-
if (!
|
|
9749
|
+
if (!chunkZIRFXBKL_cjs.isRetryableProviderError(err)) throw err;
|
|
9656
9750
|
this.markSyncDegraded(err);
|
|
9657
9751
|
}
|
|
9658
9752
|
const vtxos = await this.getVtxosForContracts(contracts);
|
|
@@ -9673,7 +9767,7 @@ var ContractManager = class _ContractManager {
|
|
|
9673
9767
|
}
|
|
9674
9768
|
const tapscriptCache = tapscripts ?? /* @__PURE__ */ new Map();
|
|
9675
9769
|
return vtxos.map(
|
|
9676
|
-
(vtxo) => extendVirtualCoinForContract(
|
|
9770
|
+
(vtxo) => extendVirtualCoinForContract(chunkZIRFXBKL_cjs.normalizeVtxo(vtxo), byScript, tapscriptCache)
|
|
9677
9771
|
);
|
|
9678
9772
|
}
|
|
9679
9773
|
/** @inheritdoc */
|
|
@@ -9717,14 +9811,14 @@ var ContractManager = class _ContractManager {
|
|
|
9717
9811
|
const byScript = new Map(contracts.map((contract) => [contract.script, contract]));
|
|
9718
9812
|
const asking = vtxos.filter((vtxo) => {
|
|
9719
9813
|
const contract = byScript.get(vtxo.script);
|
|
9720
|
-
return contract !== void 0 &&
|
|
9814
|
+
return contract !== void 0 && chunkPXPPZF5K_cjs.contractHandlers.get(contract.type)?.assertSpendableNow !== void 0;
|
|
9721
9815
|
});
|
|
9722
9816
|
if (asking.length === 0) return refused;
|
|
9723
9817
|
const tip = await this.currentChainTip();
|
|
9724
9818
|
const walletKey = await walletPubKey?.();
|
|
9725
9819
|
for (const vtxo of asking) {
|
|
9726
9820
|
const contract = byScript.get(vtxo.script);
|
|
9727
|
-
const handler =
|
|
9821
|
+
const handler = chunkPXPPZF5K_cjs.contractHandlers.get(contract.type);
|
|
9728
9822
|
if (!handler?.assertSpendableNow) continue;
|
|
9729
9823
|
const context = {
|
|
9730
9824
|
collaborative: true,
|
|
@@ -9739,7 +9833,7 @@ var ContractManager = class _ContractManager {
|
|
|
9739
9833
|
// the next handler to answer a CSV question would meet a
|
|
9740
9834
|
// TypeError instead of a `false`. Carry the coin only when it
|
|
9741
9835
|
// really is one.
|
|
9742
|
-
vtxo:
|
|
9836
|
+
vtxo: chunkZIRFXBKL_cjs.isVirtualCoin(vtxo) && "status" in vtxo ? vtxo : void 0
|
|
9743
9837
|
};
|
|
9744
9838
|
try {
|
|
9745
9839
|
await handler.assertSpendableNow(
|
|
@@ -9895,7 +9989,7 @@ var ContractManager = class _ContractManager {
|
|
|
9895
9989
|
const { contractScript, collaborative = true, walletPubKey, vtxo } = options;
|
|
9896
9990
|
const [contract] = await this.getContracts({ script: contractScript });
|
|
9897
9991
|
if (!contract) return [];
|
|
9898
|
-
const handler =
|
|
9992
|
+
const handler = chunkPXPPZF5K_cjs.contractHandlers.get(contract.type);
|
|
9899
9993
|
if (!handler) return [];
|
|
9900
9994
|
const script = handler.createScript(contract.params);
|
|
9901
9995
|
const tip = await this.currentChainTip();
|
|
@@ -9923,7 +10017,7 @@ var ContractManager = class _ContractManager {
|
|
|
9923
10017
|
const { contractScript, collaborative = true, walletPubKey } = options;
|
|
9924
10018
|
const [contract] = await this.getContracts({ script: contractScript });
|
|
9925
10019
|
if (!contract) return [];
|
|
9926
|
-
const handler =
|
|
10020
|
+
const handler = chunkPXPPZF5K_cjs.contractHandlers.get(contract.type);
|
|
9927
10021
|
if (!handler) return [];
|
|
9928
10022
|
const script = handler.createScript(contract.params);
|
|
9929
10023
|
const context = {
|
|
@@ -9979,7 +10073,7 @@ var ContractManager = class _ContractManager {
|
|
|
9979
10073
|
}
|
|
9980
10074
|
async refreshOutpoints(outpoints) {
|
|
9981
10075
|
if (outpoints.length === 0) return;
|
|
9982
|
-
const { vtxos } = await
|
|
10076
|
+
const { vtxos } = await chunkZIRFXBKL_cjs.getNormalizedVtxos(this.config.indexerProvider, {
|
|
9983
10077
|
outpoints
|
|
9984
10078
|
});
|
|
9985
10079
|
if (vtxos.length === 0) return;
|
|
@@ -10058,7 +10152,7 @@ var ContractManager = class _ContractManager {
|
|
|
10058
10152
|
break;
|
|
10059
10153
|
}
|
|
10060
10154
|
} catch (err) {
|
|
10061
|
-
if (!
|
|
10155
|
+
if (!chunkZIRFXBKL_cjs.isRetryableProviderError(err)) throw err;
|
|
10062
10156
|
this.markSyncDegraded(err);
|
|
10063
10157
|
}
|
|
10064
10158
|
this.emitEvent(event);
|
|
@@ -10137,7 +10231,7 @@ var ContractManager = class _ContractManager {
|
|
|
10137
10231
|
*/
|
|
10138
10232
|
async reconcilePendingFrontier(contracts) {
|
|
10139
10233
|
const scriptToContract = new Map(contracts.map((c) => [c.script, c]));
|
|
10140
|
-
const vtxos = await
|
|
10234
|
+
const vtxos = await chunkZIRFXBKL_cjs.getAllNormalizedVtxos(
|
|
10141
10235
|
this.config.indexerProvider,
|
|
10142
10236
|
contracts.map((c) => c.script),
|
|
10143
10237
|
{ pendingOnly: true }
|
|
@@ -10220,7 +10314,7 @@ var ContractManager = class _ContractManager {
|
|
|
10220
10314
|
}
|
|
10221
10315
|
return result;
|
|
10222
10316
|
}
|
|
10223
|
-
async fetchContractVtxosBulk(contracts, pageSize =
|
|
10317
|
+
async fetchContractVtxosBulk(contracts, pageSize = chunkZIRFXBKL_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
|
|
10224
10318
|
if (contracts.length === 0) {
|
|
10225
10319
|
return { vtxosByScript: /* @__PURE__ */ new Map(), promoted: /* @__PURE__ */ new Map() };
|
|
10226
10320
|
}
|
|
@@ -10236,7 +10330,7 @@ var ContractManager = class _ContractManager {
|
|
|
10236
10330
|
before: syncWindow.before
|
|
10237
10331
|
}
|
|
10238
10332
|
} : {};
|
|
10239
|
-
const vtxos = await
|
|
10333
|
+
const vtxos = await chunkZIRFXBKL_cjs.getAllNormalizedVtxos(
|
|
10240
10334
|
this.config.indexerProvider,
|
|
10241
10335
|
contracts.map((c) => c.script),
|
|
10242
10336
|
{ ...windowOpts, pageSize }
|
|
@@ -10381,7 +10475,7 @@ var deserializeTapLeaf = (t) => {
|
|
|
10381
10475
|
const s = base.hex.decode(t.s);
|
|
10382
10476
|
return [cb, s];
|
|
10383
10477
|
};
|
|
10384
|
-
var deserializeVtxo = (o) =>
|
|
10478
|
+
var deserializeVtxo = (o) => chunkZIRFXBKL_cjs.normalizeVtxo({
|
|
10385
10479
|
...o,
|
|
10386
10480
|
createdAt: new Date(o.createdAt),
|
|
10387
10481
|
tapTree: base.hex.decode(o.tapTree),
|
|
@@ -10404,33 +10498,17 @@ var deserializeTransaction = (o) => ({
|
|
|
10404
10498
|
|
|
10405
10499
|
// src/repositories/indexedDB/contractRepository.ts
|
|
10406
10500
|
var IndexedDBContractRepository = class {
|
|
10501
|
+
version = 2;
|
|
10502
|
+
connection;
|
|
10407
10503
|
constructor(dbName = DEFAULT_DB_NAME) {
|
|
10408
|
-
this.
|
|
10504
|
+
this.connection = createManagedConnection(dbName, DB_VERSION, initDatabase);
|
|
10409
10505
|
}
|
|
10410
|
-
dbName;
|
|
10411
|
-
version = 2;
|
|
10412
|
-
db = null;
|
|
10413
10506
|
async clear() {
|
|
10414
10507
|
try {
|
|
10415
10508
|
const db = await this.getDB();
|
|
10416
|
-
|
|
10417
|
-
|
|
10418
|
-
|
|
10419
|
-
const contractsStore = transaction.objectStore(STORE_CONTRACTS);
|
|
10420
|
-
const contractDataRequest = contractDataStore.clear();
|
|
10421
|
-
const contractsRequest = contractsStore.clear();
|
|
10422
|
-
let completed = 0;
|
|
10423
|
-
const checkComplete = () => {
|
|
10424
|
-
completed++;
|
|
10425
|
-
if (completed === 2) {
|
|
10426
|
-
resolve();
|
|
10427
|
-
}
|
|
10428
|
-
};
|
|
10429
|
-
contractDataRequest.onsuccess = checkComplete;
|
|
10430
|
-
contractsRequest.onsuccess = checkComplete;
|
|
10431
|
-
contractDataRequest.onerror = () => reject(contractDataRequest.error);
|
|
10432
|
-
contractsRequest.onerror = () => reject(contractsRequest.error);
|
|
10433
|
-
});
|
|
10509
|
+
const transaction = db.transaction([STORE_CONTRACTS], "readwrite");
|
|
10510
|
+
transaction.objectStore(STORE_CONTRACTS).clear();
|
|
10511
|
+
await awaitTransaction(transaction);
|
|
10434
10512
|
} catch (error) {
|
|
10435
10513
|
console.error("Failed to clear contract data:", error);
|
|
10436
10514
|
throw error;
|
|
@@ -10441,28 +10519,20 @@ var IndexedDBContractRepository = class {
|
|
|
10441
10519
|
const db = await this.getDB();
|
|
10442
10520
|
const store = db.transaction([STORE_CONTRACTS], "readonly").objectStore(STORE_CONTRACTS);
|
|
10443
10521
|
if (!filter || Object.keys(filter).length === 0) {
|
|
10444
|
-
return
|
|
10445
|
-
const request = store.getAll();
|
|
10446
|
-
request.onerror = () => reject(request.error);
|
|
10447
|
-
request.onsuccess = () => resolve(request.result ?? []);
|
|
10448
|
-
});
|
|
10522
|
+
return await promisifyRequest(store.getAll()) ?? [];
|
|
10449
10523
|
}
|
|
10450
10524
|
const normalizedFilter = normalizeFilter(filter);
|
|
10451
10525
|
if (normalizedFilter.has("script")) {
|
|
10452
10526
|
const scripts = normalizedFilter.get("script");
|
|
10453
10527
|
const contracts = await Promise.all(
|
|
10454
10528
|
scripts.map(
|
|
10455
|
-
(script) =>
|
|
10456
|
-
const req = store.get(script);
|
|
10457
|
-
req.onerror = () => reject(req.error);
|
|
10458
|
-
req.onsuccess = () => resolve(req.result);
|
|
10459
|
-
})
|
|
10529
|
+
(script) => promisifyRequest(store.get(script))
|
|
10460
10530
|
)
|
|
10461
10531
|
);
|
|
10462
10532
|
return this.applyContractFilter(contracts, normalizedFilter);
|
|
10463
10533
|
}
|
|
10464
10534
|
if (normalizedFilter.has("state")) {
|
|
10465
|
-
const contracts = await
|
|
10535
|
+
const contracts = await getAllByIndexValues(
|
|
10466
10536
|
store,
|
|
10467
10537
|
"state",
|
|
10468
10538
|
normalizedFilter.get("state")
|
|
@@ -10470,18 +10540,14 @@ var IndexedDBContractRepository = class {
|
|
|
10470
10540
|
return this.applyContractFilter(contracts, normalizedFilter);
|
|
10471
10541
|
}
|
|
10472
10542
|
if (normalizedFilter.has("type")) {
|
|
10473
|
-
const contracts = await
|
|
10543
|
+
const contracts = await getAllByIndexValues(
|
|
10474
10544
|
store,
|
|
10475
10545
|
"type",
|
|
10476
10546
|
normalizedFilter.get("type")
|
|
10477
10547
|
);
|
|
10478
10548
|
return this.applyContractFilter(contracts, normalizedFilter);
|
|
10479
10549
|
}
|
|
10480
|
-
const allContracts = await
|
|
10481
|
-
const request = store.getAll();
|
|
10482
|
-
request.onerror = () => reject(request.error);
|
|
10483
|
-
request.onsuccess = () => resolve(request.result ?? []);
|
|
10484
|
-
});
|
|
10550
|
+
const allContracts = await promisifyRequest(store.getAll()) ?? [];
|
|
10485
10551
|
return this.applyContractFilter(allContracts, normalizedFilter);
|
|
10486
10552
|
} catch (error) {
|
|
10487
10553
|
console.error("Failed to get contracts:", error);
|
|
@@ -10491,13 +10557,9 @@ var IndexedDBContractRepository = class {
|
|
|
10491
10557
|
async saveContract(contract) {
|
|
10492
10558
|
try {
|
|
10493
10559
|
const db = await this.getDB();
|
|
10494
|
-
|
|
10495
|
-
|
|
10496
|
-
|
|
10497
|
-
const request = store.put(contract);
|
|
10498
|
-
request.onerror = () => reject(request.error);
|
|
10499
|
-
request.onsuccess = () => resolve();
|
|
10500
|
-
});
|
|
10560
|
+
const transaction = db.transaction([STORE_CONTRACTS], "readwrite");
|
|
10561
|
+
transaction.objectStore(STORE_CONTRACTS).put(contract);
|
|
10562
|
+
await awaitTransaction(transaction);
|
|
10501
10563
|
} catch (error) {
|
|
10502
10564
|
console.error("Failed to save contract:", error);
|
|
10503
10565
|
throw error;
|
|
@@ -10506,34 +10568,14 @@ var IndexedDBContractRepository = class {
|
|
|
10506
10568
|
async deleteContract(script) {
|
|
10507
10569
|
try {
|
|
10508
10570
|
const db = await this.getDB();
|
|
10509
|
-
|
|
10510
|
-
|
|
10511
|
-
|
|
10512
|
-
const getRequest = store.get(script);
|
|
10513
|
-
getRequest.onerror = () => reject(getRequest.error);
|
|
10514
|
-
getRequest.onsuccess = () => {
|
|
10515
|
-
const request = store.delete(script);
|
|
10516
|
-
request.onerror = () => reject(request.error);
|
|
10517
|
-
request.onsuccess = () => resolve();
|
|
10518
|
-
};
|
|
10519
|
-
});
|
|
10571
|
+
const transaction = db.transaction([STORE_CONTRACTS], "readwrite");
|
|
10572
|
+
transaction.objectStore(STORE_CONTRACTS).delete(script);
|
|
10573
|
+
await awaitTransaction(transaction);
|
|
10520
10574
|
} catch (error) {
|
|
10521
10575
|
console.error(`Failed to delete contract ${script}:`, error);
|
|
10522
10576
|
throw error;
|
|
10523
10577
|
}
|
|
10524
10578
|
}
|
|
10525
|
-
getContractsByIndexValues(store, indexName, values) {
|
|
10526
|
-
if (values.length === 0) return Promise.resolve([]);
|
|
10527
|
-
const index = store.index(indexName);
|
|
10528
|
-
const requests = values.map(
|
|
10529
|
-
(value) => new Promise((resolve, reject) => {
|
|
10530
|
-
const request = index.getAll(value);
|
|
10531
|
-
request.onerror = () => reject(request.error);
|
|
10532
|
-
request.onsuccess = () => resolve(request.result ?? []);
|
|
10533
|
-
})
|
|
10534
|
-
);
|
|
10535
|
-
return Promise.all(requests).then((results) => results.flatMap((result) => result));
|
|
10536
|
-
}
|
|
10537
10579
|
applyContractFilter(contracts, filter) {
|
|
10538
10580
|
return contracts.filter((contract) => {
|
|
10539
10581
|
if (contract === void 0) return false;
|
|
@@ -10546,15 +10588,11 @@ var IndexedDBContractRepository = class {
|
|
|
10546
10588
|
return true;
|
|
10547
10589
|
});
|
|
10548
10590
|
}
|
|
10549
|
-
|
|
10550
|
-
|
|
10551
|
-
this.db = await openDatabase(this.dbName, DB_VERSION, initDatabase);
|
|
10552
|
-
return this.db;
|
|
10591
|
+
getDB() {
|
|
10592
|
+
return this.connection.get();
|
|
10553
10593
|
}
|
|
10554
10594
|
async [Symbol.asyncDispose]() {
|
|
10555
|
-
|
|
10556
|
-
await closeDatabase(this.dbName);
|
|
10557
|
-
this.db = null;
|
|
10595
|
+
await this.connection[Symbol.asyncDispose]();
|
|
10558
10596
|
}
|
|
10559
10597
|
};
|
|
10560
10598
|
var FILTER_FIELDS = ["script", "state", "type", "watch"];
|
|
@@ -10573,70 +10611,34 @@ function normalizeFilter(filter) {
|
|
|
10573
10611
|
|
|
10574
10612
|
// src/repositories/indexedDB/walletRepository.ts
|
|
10575
10613
|
var IndexedDBWalletRepository = class {
|
|
10614
|
+
version = 1;
|
|
10615
|
+
connection;
|
|
10576
10616
|
constructor(dbName = DEFAULT_DB_NAME) {
|
|
10577
|
-
this.
|
|
10617
|
+
this.connection = createManagedConnection(dbName, DB_VERSION, initDatabase);
|
|
10578
10618
|
}
|
|
10579
|
-
dbName;
|
|
10580
|
-
version = 1;
|
|
10581
|
-
db = null;
|
|
10582
10619
|
async clear() {
|
|
10583
10620
|
try {
|
|
10584
10621
|
const db = await this.getDB();
|
|
10585
|
-
|
|
10586
|
-
|
|
10587
|
-
|
|
10588
|
-
|
|
10589
|
-
);
|
|
10590
|
-
const vtxosStore = transaction.objectStore(STORE_VTXOS);
|
|
10591
|
-
const utxosStore = transaction.objectStore(STORE_UTXOS);
|
|
10592
|
-
const transactionsStore = transaction.objectStore(STORE_TRANSACTIONS);
|
|
10593
|
-
const walletStateStore = transaction.objectStore(STORE_WALLET_STATE);
|
|
10594
|
-
const requests = [
|
|
10595
|
-
vtxosStore.clear(),
|
|
10596
|
-
utxosStore.clear(),
|
|
10597
|
-
transactionsStore.clear(),
|
|
10598
|
-
walletStateStore.clear()
|
|
10599
|
-
];
|
|
10600
|
-
let completed = 0;
|
|
10601
|
-
const checkComplete = () => {
|
|
10602
|
-
completed++;
|
|
10603
|
-
if (completed === requests.length) {
|
|
10604
|
-
resolve();
|
|
10605
|
-
}
|
|
10606
|
-
};
|
|
10607
|
-
requests.forEach((request) => {
|
|
10608
|
-
request.onsuccess = checkComplete;
|
|
10609
|
-
request.onerror = () => reject(request.error);
|
|
10610
|
-
});
|
|
10611
|
-
});
|
|
10622
|
+
const stores = [STORE_VTXOS, STORE_UTXOS, STORE_TRANSACTIONS, STORE_WALLET_STATE];
|
|
10623
|
+
const transaction = db.transaction(stores, "readwrite");
|
|
10624
|
+
for (const name of stores) transaction.objectStore(name).clear();
|
|
10625
|
+
await awaitTransaction(transaction);
|
|
10612
10626
|
} catch (error) {
|
|
10613
10627
|
console.error("Failed to clear wallet data:", error);
|
|
10614
10628
|
throw error;
|
|
10615
10629
|
}
|
|
10616
10630
|
}
|
|
10617
10631
|
async [Symbol.asyncDispose]() {
|
|
10618
|
-
|
|
10619
|
-
await closeDatabase(this.dbName);
|
|
10620
|
-
this.db = null;
|
|
10632
|
+
await this.connection[Symbol.asyncDispose]();
|
|
10621
10633
|
}
|
|
10622
10634
|
async getVtxos(address) {
|
|
10623
10635
|
try {
|
|
10624
10636
|
const db = await this.getDB();
|
|
10625
|
-
|
|
10626
|
-
|
|
10627
|
-
|
|
10628
|
-
|
|
10629
|
-
|
|
10630
|
-
request.onerror = () => reject(request.error);
|
|
10631
|
-
request.onsuccess = () => {
|
|
10632
|
-
const results = request.result || [];
|
|
10633
|
-
try {
|
|
10634
|
-
resolve(results.map(deserializeVtxoWithBackfill));
|
|
10635
|
-
} catch (err) {
|
|
10636
|
-
reject(err);
|
|
10637
|
-
}
|
|
10638
|
-
};
|
|
10639
|
-
});
|
|
10637
|
+
const store = db.transaction([STORE_VTXOS], "readonly").objectStore(STORE_VTXOS);
|
|
10638
|
+
const results = await promisifyRequest(
|
|
10639
|
+
store.index("address").getAll(address)
|
|
10640
|
+
);
|
|
10641
|
+
return (results || []).map(deserializeVtxoWithBackfill);
|
|
10640
10642
|
} catch (error) {
|
|
10641
10643
|
console.error(`Failed to get VTXOs for address ${address}:`, error);
|
|
10642
10644
|
return [];
|
|
@@ -10645,24 +10647,13 @@ var IndexedDBWalletRepository = class {
|
|
|
10645
10647
|
async saveVtxos(address, vtxos) {
|
|
10646
10648
|
try {
|
|
10647
10649
|
const db = await this.getDB();
|
|
10648
|
-
|
|
10649
|
-
|
|
10650
|
-
|
|
10651
|
-
const
|
|
10652
|
-
|
|
10653
|
-
|
|
10654
|
-
|
|
10655
|
-
address,
|
|
10656
|
-
...serialized
|
|
10657
|
-
};
|
|
10658
|
-
const request = store.put(item);
|
|
10659
|
-
request.onerror = () => rejectItem(request.error);
|
|
10660
|
-
request.onsuccess = () => resolveItem();
|
|
10661
|
-
});
|
|
10662
|
-
});
|
|
10663
|
-
Promise.all(promises).then(() => resolve()).catch(reject);
|
|
10664
|
-
transaction.onerror = () => reject(transaction.error);
|
|
10665
|
-
});
|
|
10650
|
+
const transaction = db.transaction([STORE_VTXOS], "readwrite");
|
|
10651
|
+
const store = transaction.objectStore(STORE_VTXOS);
|
|
10652
|
+
for (const vtxo of vtxos) {
|
|
10653
|
+
const serialized = serializeVtxo(vtxo);
|
|
10654
|
+
store.put({ address, ...serialized });
|
|
10655
|
+
}
|
|
10656
|
+
await awaitTransaction(transaction);
|
|
10666
10657
|
} catch (error) {
|
|
10667
10658
|
console.error(`Failed to save VTXOs for address ${address}:`, error);
|
|
10668
10659
|
throw error;
|
|
@@ -10671,22 +10662,9 @@ var IndexedDBWalletRepository = class {
|
|
|
10671
10662
|
async deleteVtxos(address) {
|
|
10672
10663
|
try {
|
|
10673
10664
|
const db = await this.getDB();
|
|
10674
|
-
|
|
10675
|
-
|
|
10676
|
-
|
|
10677
|
-
const index = store.index("address");
|
|
10678
|
-
const request = index.openCursor(IDBKeyRange.only(address));
|
|
10679
|
-
request.onerror = () => reject(request.error);
|
|
10680
|
-
request.onsuccess = () => {
|
|
10681
|
-
const cursor = request.result;
|
|
10682
|
-
if (cursor) {
|
|
10683
|
-
cursor.delete();
|
|
10684
|
-
cursor.continue();
|
|
10685
|
-
} else {
|
|
10686
|
-
resolve();
|
|
10687
|
-
}
|
|
10688
|
-
};
|
|
10689
|
-
});
|
|
10665
|
+
const transaction = db.transaction([STORE_VTXOS], "readwrite");
|
|
10666
|
+
deleteByIndex(transaction.objectStore(STORE_VTXOS), "address", address);
|
|
10667
|
+
await awaitTransaction(transaction);
|
|
10690
10668
|
} catch (error) {
|
|
10691
10669
|
console.error(`Failed to clear VTXOs for address ${address}:`, error);
|
|
10692
10670
|
throw error;
|
|
@@ -10695,34 +10673,24 @@ var IndexedDBWalletRepository = class {
|
|
|
10695
10673
|
async getVtxosForScript(script) {
|
|
10696
10674
|
try {
|
|
10697
10675
|
const db = await this.getDB();
|
|
10698
|
-
|
|
10699
|
-
|
|
10700
|
-
|
|
10701
|
-
|
|
10702
|
-
|
|
10703
|
-
|
|
10704
|
-
|
|
10705
|
-
|
|
10706
|
-
|
|
10707
|
-
|
|
10708
|
-
|
|
10709
|
-
|
|
10710
|
-
|
|
10711
|
-
|
|
10712
|
-
|
|
10713
|
-
|
|
10714
|
-
|
|
10715
|
-
|
|
10716
|
-
if (shouldReplaceVtxo(existing, row)) {
|
|
10717
|
-
byOutpoint.set(outpoint, row);
|
|
10718
|
-
}
|
|
10719
|
-
}
|
|
10720
|
-
resolve(Array.from(byOutpoint.values()).map(deserializeVtxoWithBackfill));
|
|
10721
|
-
} catch (err) {
|
|
10722
|
-
reject(err);
|
|
10723
|
-
}
|
|
10724
|
-
};
|
|
10725
|
-
});
|
|
10676
|
+
const store = db.transaction([STORE_VTXOS], "readonly").objectStore(STORE_VTXOS);
|
|
10677
|
+
const results = await promisifyRequest(
|
|
10678
|
+
store.index("script").getAll(script)
|
|
10679
|
+
);
|
|
10680
|
+
const matching = (results || []).filter((r) => r.script === script);
|
|
10681
|
+
const byOutpoint = /* @__PURE__ */ new Map();
|
|
10682
|
+
for (const row of matching) {
|
|
10683
|
+
const outpoint = `${row.txid}:${row.vout}`;
|
|
10684
|
+
const existing = byOutpoint.get(outpoint);
|
|
10685
|
+
if (!existing) {
|
|
10686
|
+
byOutpoint.set(outpoint, row);
|
|
10687
|
+
continue;
|
|
10688
|
+
}
|
|
10689
|
+
if (shouldReplaceVtxo(existing, row)) {
|
|
10690
|
+
byOutpoint.set(outpoint, row);
|
|
10691
|
+
}
|
|
10692
|
+
}
|
|
10693
|
+
return Array.from(byOutpoint.values()).map(deserializeVtxoWithBackfill);
|
|
10726
10694
|
} catch (error) {
|
|
10727
10695
|
console.error(`Failed to get VTXOs for script ${script}:`, error);
|
|
10728
10696
|
throw error;
|
|
@@ -10744,22 +10712,9 @@ var IndexedDBWalletRepository = class {
|
|
|
10744
10712
|
async deleteVtxosForScript(script) {
|
|
10745
10713
|
try {
|
|
10746
10714
|
const db = await this.getDB();
|
|
10747
|
-
|
|
10748
|
-
|
|
10749
|
-
|
|
10750
|
-
const index = store.index("script");
|
|
10751
|
-
const request = index.openCursor(IDBKeyRange.only(script));
|
|
10752
|
-
request.onerror = () => reject(request.error);
|
|
10753
|
-
request.onsuccess = () => {
|
|
10754
|
-
const cursor = request.result;
|
|
10755
|
-
if (cursor) {
|
|
10756
|
-
cursor.delete();
|
|
10757
|
-
cursor.continue();
|
|
10758
|
-
} else {
|
|
10759
|
-
resolve();
|
|
10760
|
-
}
|
|
10761
|
-
};
|
|
10762
|
-
});
|
|
10715
|
+
const transaction = db.transaction([STORE_VTXOS], "readwrite");
|
|
10716
|
+
deleteByIndex(transaction.objectStore(STORE_VTXOS), "script", script);
|
|
10717
|
+
await awaitTransaction(transaction);
|
|
10763
10718
|
} catch (error) {
|
|
10764
10719
|
console.error(`Failed to clear VTXOs for script ${script}:`, error);
|
|
10765
10720
|
throw error;
|
|
@@ -10768,18 +10723,9 @@ var IndexedDBWalletRepository = class {
|
|
|
10768
10723
|
async getUtxos(address) {
|
|
10769
10724
|
try {
|
|
10770
10725
|
const db = await this.getDB();
|
|
10771
|
-
|
|
10772
|
-
|
|
10773
|
-
|
|
10774
|
-
const index = store.index("address");
|
|
10775
|
-
const request = index.getAll(address);
|
|
10776
|
-
request.onerror = () => reject(request.error);
|
|
10777
|
-
request.onsuccess = () => {
|
|
10778
|
-
const results = request.result || [];
|
|
10779
|
-
const utxos = results.map(deserializeUtxo);
|
|
10780
|
-
resolve(utxos);
|
|
10781
|
-
};
|
|
10782
|
-
});
|
|
10726
|
+
const store = db.transaction([STORE_UTXOS], "readonly").objectStore(STORE_UTXOS);
|
|
10727
|
+
const results = await promisifyRequest(store.index("address").getAll(address));
|
|
10728
|
+
return (results || []).map(deserializeUtxo);
|
|
10783
10729
|
} catch (error) {
|
|
10784
10730
|
console.error(`Failed to get UTXOs for address ${address}:`, error);
|
|
10785
10731
|
return [];
|
|
@@ -10788,24 +10734,10 @@ var IndexedDBWalletRepository = class {
|
|
|
10788
10734
|
async saveUtxos(address, utxos) {
|
|
10789
10735
|
try {
|
|
10790
10736
|
const db = await this.getDB();
|
|
10791
|
-
|
|
10792
|
-
|
|
10793
|
-
|
|
10794
|
-
|
|
10795
|
-
return new Promise((resolveItem, rejectItem) => {
|
|
10796
|
-
const serialized = serializeUtxo(utxo);
|
|
10797
|
-
const item = {
|
|
10798
|
-
address,
|
|
10799
|
-
...serialized
|
|
10800
|
-
};
|
|
10801
|
-
const request = store.put(item);
|
|
10802
|
-
request.onerror = () => rejectItem(request.error);
|
|
10803
|
-
request.onsuccess = () => resolveItem();
|
|
10804
|
-
});
|
|
10805
|
-
});
|
|
10806
|
-
Promise.all(promises).then(() => resolve()).catch(reject);
|
|
10807
|
-
transaction.onerror = () => reject(transaction.error);
|
|
10808
|
-
});
|
|
10737
|
+
const transaction = db.transaction([STORE_UTXOS], "readwrite");
|
|
10738
|
+
const store = transaction.objectStore(STORE_UTXOS);
|
|
10739
|
+
for (const utxo of utxos) store.put({ address, ...serializeUtxo(utxo) });
|
|
10740
|
+
await awaitTransaction(transaction);
|
|
10809
10741
|
} catch (error) {
|
|
10810
10742
|
console.error(`Failed to save UTXOs for address ${address}:`, error);
|
|
10811
10743
|
throw error;
|
|
@@ -10814,22 +10746,9 @@ var IndexedDBWalletRepository = class {
|
|
|
10814
10746
|
async deleteUtxos(address) {
|
|
10815
10747
|
try {
|
|
10816
10748
|
const db = await this.getDB();
|
|
10817
|
-
|
|
10818
|
-
|
|
10819
|
-
|
|
10820
|
-
const index = store.index("address");
|
|
10821
|
-
const request = index.openCursor(IDBKeyRange.only(address));
|
|
10822
|
-
request.onerror = () => reject(request.error);
|
|
10823
|
-
request.onsuccess = () => {
|
|
10824
|
-
const cursor = request.result;
|
|
10825
|
-
if (cursor) {
|
|
10826
|
-
cursor.delete();
|
|
10827
|
-
cursor.continue();
|
|
10828
|
-
} else {
|
|
10829
|
-
resolve();
|
|
10830
|
-
}
|
|
10831
|
-
};
|
|
10832
|
-
});
|
|
10749
|
+
const transaction = db.transaction([STORE_UTXOS], "readwrite");
|
|
10750
|
+
deleteByIndex(transaction.objectStore(STORE_UTXOS), "address", address);
|
|
10751
|
+
await awaitTransaction(transaction);
|
|
10833
10752
|
} catch (error) {
|
|
10834
10753
|
console.error(`Failed to clear UTXOs for address ${address}:`, error);
|
|
10835
10754
|
throw error;
|
|
@@ -10838,17 +10757,11 @@ var IndexedDBWalletRepository = class {
|
|
|
10838
10757
|
async getTransactionHistory(address) {
|
|
10839
10758
|
try {
|
|
10840
10759
|
const db = await this.getDB();
|
|
10841
|
-
|
|
10842
|
-
|
|
10843
|
-
|
|
10844
|
-
|
|
10845
|
-
|
|
10846
|
-
request.onerror = () => reject(request.error);
|
|
10847
|
-
request.onsuccess = () => {
|
|
10848
|
-
const results = request.result || [];
|
|
10849
|
-
resolve(results.sort((a, b) => a.createdAt - b.createdAt));
|
|
10850
|
-
};
|
|
10851
|
-
});
|
|
10760
|
+
const store = db.transaction([STORE_TRANSACTIONS], "readonly").objectStore(STORE_TRANSACTIONS);
|
|
10761
|
+
const results = await promisifyRequest(
|
|
10762
|
+
store.index("address").getAll(address)
|
|
10763
|
+
);
|
|
10764
|
+
return (results || []).sort((a, b) => a.createdAt - b.createdAt);
|
|
10852
10765
|
} catch (error) {
|
|
10853
10766
|
console.error(`Failed to get transaction history for address ${address}:`, error);
|
|
10854
10767
|
return [];
|
|
@@ -10857,23 +10770,18 @@ var IndexedDBWalletRepository = class {
|
|
|
10857
10770
|
async saveTransactions(address, txs) {
|
|
10858
10771
|
try {
|
|
10859
10772
|
const db = await this.getDB();
|
|
10860
|
-
|
|
10861
|
-
|
|
10862
|
-
|
|
10863
|
-
|
|
10864
|
-
|
|
10865
|
-
|
|
10866
|
-
|
|
10867
|
-
|
|
10868
|
-
|
|
10869
|
-
keyArkTxid: tx.key.arkTxid
|
|
10870
|
-
};
|
|
10871
|
-
store.put(item);
|
|
10773
|
+
const transaction = db.transaction([STORE_TRANSACTIONS], "readwrite");
|
|
10774
|
+
const store = transaction.objectStore(STORE_TRANSACTIONS);
|
|
10775
|
+
for (const tx of txs) {
|
|
10776
|
+
store.put({
|
|
10777
|
+
address,
|
|
10778
|
+
...tx,
|
|
10779
|
+
keyBoardingTxid: tx.key.boardingTxid,
|
|
10780
|
+
keyCommitmentTxid: tx.key.commitmentTxid,
|
|
10781
|
+
keyArkTxid: tx.key.arkTxid
|
|
10872
10782
|
});
|
|
10873
|
-
|
|
10874
|
-
|
|
10875
|
-
transaction.onabort = () => reject(new Error("Transaction aborted"));
|
|
10876
|
-
});
|
|
10783
|
+
}
|
|
10784
|
+
await awaitTransaction(transaction);
|
|
10877
10785
|
} catch (error) {
|
|
10878
10786
|
console.error(`Failed to save transactions for address ${address}:`, error);
|
|
10879
10787
|
throw error;
|
|
@@ -10882,22 +10790,9 @@ var IndexedDBWalletRepository = class {
|
|
|
10882
10790
|
async deleteTransactions(address) {
|
|
10883
10791
|
try {
|
|
10884
10792
|
const db = await this.getDB();
|
|
10885
|
-
|
|
10886
|
-
|
|
10887
|
-
|
|
10888
|
-
const index = store.index("address");
|
|
10889
|
-
const request = index.openCursor(IDBKeyRange.only(address));
|
|
10890
|
-
request.onerror = () => reject(request.error);
|
|
10891
|
-
request.onsuccess = () => {
|
|
10892
|
-
const cursor = request.result;
|
|
10893
|
-
if (cursor) {
|
|
10894
|
-
cursor.delete();
|
|
10895
|
-
cursor.continue();
|
|
10896
|
-
} else {
|
|
10897
|
-
resolve();
|
|
10898
|
-
}
|
|
10899
|
-
};
|
|
10900
|
-
});
|
|
10793
|
+
const transaction = db.transaction([STORE_TRANSACTIONS], "readwrite");
|
|
10794
|
+
deleteByIndex(transaction.objectStore(STORE_TRANSACTIONS), "address", address);
|
|
10795
|
+
await awaitTransaction(transaction);
|
|
10901
10796
|
} catch (error) {
|
|
10902
10797
|
console.error(`Failed to clear transactions for address ${address}:`, error);
|
|
10903
10798
|
throw error;
|
|
@@ -10906,20 +10801,11 @@ var IndexedDBWalletRepository = class {
|
|
|
10906
10801
|
async getWalletState() {
|
|
10907
10802
|
try {
|
|
10908
10803
|
const db = await this.getDB();
|
|
10909
|
-
|
|
10910
|
-
|
|
10911
|
-
|
|
10912
|
-
|
|
10913
|
-
|
|
10914
|
-
request.onsuccess = () => {
|
|
10915
|
-
const result = request.result;
|
|
10916
|
-
if (result && result.data) {
|
|
10917
|
-
resolve(result.data);
|
|
10918
|
-
} else {
|
|
10919
|
-
resolve(null);
|
|
10920
|
-
}
|
|
10921
|
-
};
|
|
10922
|
-
});
|
|
10804
|
+
const store = db.transaction([STORE_WALLET_STATE], "readonly").objectStore(STORE_WALLET_STATE);
|
|
10805
|
+
const result = await promisifyRequest(
|
|
10806
|
+
store.get("state")
|
|
10807
|
+
);
|
|
10808
|
+
return result?.data ?? null;
|
|
10923
10809
|
} catch (error) {
|
|
10924
10810
|
console.error("Failed to get wallet state:", error);
|
|
10925
10811
|
return null;
|
|
@@ -10928,26 +10814,16 @@ var IndexedDBWalletRepository = class {
|
|
|
10928
10814
|
async saveWalletState(state) {
|
|
10929
10815
|
try {
|
|
10930
10816
|
const db = await this.getDB();
|
|
10931
|
-
|
|
10932
|
-
|
|
10933
|
-
|
|
10934
|
-
const item = {
|
|
10935
|
-
key: "state",
|
|
10936
|
-
data: state
|
|
10937
|
-
};
|
|
10938
|
-
const request = store.put(item);
|
|
10939
|
-
request.onerror = () => reject(request.error);
|
|
10940
|
-
request.onsuccess = () => resolve();
|
|
10941
|
-
});
|
|
10817
|
+
const transaction = db.transaction([STORE_WALLET_STATE], "readwrite");
|
|
10818
|
+
transaction.objectStore(STORE_WALLET_STATE).put({ key: "state", data: state });
|
|
10819
|
+
await awaitTransaction(transaction);
|
|
10942
10820
|
} catch (error) {
|
|
10943
10821
|
console.error("Failed to save wallet state:", error);
|
|
10944
10822
|
throw error;
|
|
10945
10823
|
}
|
|
10946
10824
|
}
|
|
10947
|
-
|
|
10948
|
-
|
|
10949
|
-
this.db = await openDatabase(this.dbName, DB_VERSION, initDatabase);
|
|
10950
|
-
return this.db;
|
|
10825
|
+
getDB() {
|
|
10826
|
+
return this.connection.get();
|
|
10951
10827
|
}
|
|
10952
10828
|
};
|
|
10953
10829
|
function deserializeVtxoWithBackfill(o) {
|
|
@@ -11422,7 +11298,7 @@ var HDDescriptorProvider = class _HDDescriptorProvider {
|
|
|
11422
11298
|
*/
|
|
11423
11299
|
materializeDescriptorAt(index) {
|
|
11424
11300
|
const descriptor = this.identity.descriptor;
|
|
11425
|
-
const network =
|
|
11301
|
+
const network = chunkPXPPZF5K_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
11426
11302
|
const expansion = descriptorsScure.expand({ descriptor, network, index });
|
|
11427
11303
|
const keyInfo = expansion.expansionMap?.["@0"];
|
|
11428
11304
|
if (!keyInfo?.keyExpression) {
|
|
@@ -11570,7 +11446,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
|
|
|
11570
11446
|
const provider = await resolveDescriptorProvider(config, setup.walletRepository);
|
|
11571
11447
|
if (!provider) return void 0;
|
|
11572
11448
|
const allowSilentFallback = (config.walletMode ?? "auto") === "auto";
|
|
11573
|
-
const expectedContractType = setup.offchainTapscript instanceof
|
|
11449
|
+
const expectedContractType = setup.offchainTapscript instanceof chunkPXPPZF5K_cjs.DelegateVtxo.Script ? "delegate" : "default";
|
|
11574
11450
|
const factoryOpts = {
|
|
11575
11451
|
walletRepository: setup.walletRepository,
|
|
11576
11452
|
contractRepository: setup.contractRepository,
|
|
@@ -11769,7 +11645,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
|
|
|
11769
11645
|
};
|
|
11770
11646
|
function deriveLeafPubkey(descriptor) {
|
|
11771
11647
|
try {
|
|
11772
|
-
return
|
|
11648
|
+
return chunkPXPPZF5K_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
11773
11649
|
} catch (e) {
|
|
11774
11650
|
throw new NonRangeableDescriptorError(
|
|
11775
11651
|
"Cannot derive leaf pubkey: descriptor is not a materialized, parsable tr(...) shape.",
|
|
@@ -11781,7 +11657,7 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
11781
11657
|
const pubKey = deriveLeafPubkey(descriptor);
|
|
11782
11658
|
const tapscript = rebuildTapscript(current, pubKey);
|
|
11783
11659
|
const serverPubKey = tapscript.options.serverPubKey;
|
|
11784
|
-
const csvTimelock =
|
|
11660
|
+
const csvTimelock = chunkZIRFXBKL_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
|
|
11785
11661
|
const base$1 = {
|
|
11786
11662
|
script: base.hex.encode(tapscript.pkScript),
|
|
11787
11663
|
address: tapscript.address(hrp, serverPubKey).encode(),
|
|
@@ -11792,11 +11668,11 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
11792
11668
|
// index-0 key. Without it, spends produce unsigned PSBTs that the
|
|
11793
11669
|
// server rejects with `INVALID_PSBT_INPUT (5): missing tapscript spend sig`.
|
|
11794
11670
|
metadata: {
|
|
11795
|
-
...{ source:
|
|
11671
|
+
...{ source: chunkPXPPZF5K_cjs.WALLET_RECEIVE_SOURCE },
|
|
11796
11672
|
signingDescriptor: descriptor
|
|
11797
11673
|
}
|
|
11798
11674
|
};
|
|
11799
|
-
const params = tapscript instanceof
|
|
11675
|
+
const params = tapscript instanceof chunkPXPPZF5K_cjs.DelegateVtxo.Script ? {
|
|
11800
11676
|
...base$1,
|
|
11801
11677
|
type: "delegate",
|
|
11802
11678
|
params: {
|
|
@@ -11817,10 +11693,10 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
11817
11693
|
return { tapscript, params };
|
|
11818
11694
|
}
|
|
11819
11695
|
function rebuildTapscript(current, pubKey) {
|
|
11820
|
-
if (current instanceof
|
|
11821
|
-
return new
|
|
11696
|
+
if (current instanceof chunkPXPPZF5K_cjs.DelegateVtxo.Script) {
|
|
11697
|
+
return new chunkPXPPZF5K_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
|
|
11822
11698
|
}
|
|
11823
|
-
return new
|
|
11699
|
+
return new chunkPXPPZF5K_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
|
|
11824
11700
|
}
|
|
11825
11701
|
async function pickActiveReceive(contractRepository, serverPubKey, expectedType) {
|
|
11826
11702
|
const candidates = await contractRepository.getContracts({
|
|
@@ -11829,7 +11705,7 @@ async function pickActiveReceive(contractRepository, serverPubKey, expectedType)
|
|
|
11829
11705
|
});
|
|
11830
11706
|
const serverPubKeyHex = base.hex.encode(serverPubKey);
|
|
11831
11707
|
const matching = candidates.filter(
|
|
11832
|
-
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source ===
|
|
11708
|
+
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkPXPPZF5K_cjs.WALLET_RECEIVE_SOURCE
|
|
11833
11709
|
).sort((a, b) => {
|
|
11834
11710
|
if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
|
|
11835
11711
|
return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
|
|
@@ -11884,17 +11760,17 @@ function computeOffchainBalance(vtxos, caps) {
|
|
|
11884
11760
|
}
|
|
11885
11761
|
};
|
|
11886
11762
|
for (const vtxo of vtxos) {
|
|
11887
|
-
if (
|
|
11763
|
+
if (chunkZIRFXBKL_cjs.hasTerminalSpend(vtxo)) continue;
|
|
11888
11764
|
addAssets(owned, vtxo);
|
|
11889
11765
|
if (isPendingRecovery(vtxo)) {
|
|
11890
11766
|
pendingRecovery += vtxo.value;
|
|
11891
11767
|
continue;
|
|
11892
11768
|
}
|
|
11893
|
-
if (
|
|
11769
|
+
if (chunkZIRFXBKL_cjs.canRecoverOnchain(vtxo, now)) {
|
|
11894
11770
|
recoverable += vtxo.value;
|
|
11895
11771
|
continue;
|
|
11896
11772
|
}
|
|
11897
|
-
if (!
|
|
11773
|
+
if (!chunkZIRFXBKL_cjs.canSpendOffchain(vtxo, now)) continue;
|
|
11898
11774
|
if (vtxo.isPreconfirmed) {
|
|
11899
11775
|
preconfirmed += vtxo.value;
|
|
11900
11776
|
} else {
|
|
@@ -12063,12 +11939,12 @@ var InputSignerRouter = class {
|
|
|
12063
11939
|
};
|
|
12064
11940
|
|
|
12065
11941
|
// src/wallet/wallet.ts
|
|
12066
|
-
var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl ||
|
|
11942
|
+
var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl || chunkZIRFXBKL_cjs.DEFAULT_ARKADE_SERVER_URL;
|
|
12067
11943
|
function intentProofJobs(coins) {
|
|
12068
11944
|
if (coins.length === 0) return [];
|
|
12069
11945
|
const coinJobs = coins.map((coin, i) => ({
|
|
12070
11946
|
index: i + 1,
|
|
12071
|
-
lookupScript:
|
|
11947
|
+
lookupScript: chunkZIRFXBKL_cjs.VtxoScript.decode(coin.tapTree).pkScript
|
|
12072
11948
|
}));
|
|
12073
11949
|
return [{ index: 0, lookupScript: coinJobs[0].lookupScript }, ...coinJobs];
|
|
12074
11950
|
}
|
|
@@ -12090,11 +11966,6 @@ function extractArkProviderUrl(provider) {
|
|
|
12090
11966
|
var DEFAULT_LOOK_AHEAD_WINDOW = 20;
|
|
12091
11967
|
var MAX_USED_SIGNING_DESCRIPTORS_LOOK_AHEAD = 1e3;
|
|
12092
11968
|
var MAINNET_UNILATERAL_EXIT_DELAY = 605184n;
|
|
12093
|
-
function toXOnlyPubKey(pubkey) {
|
|
12094
|
-
if (pubkey.length === 33) return pubkey.slice(1);
|
|
12095
|
-
if (pubkey.length === 32) return pubkey;
|
|
12096
|
-
throw new Error(`invalid signer pubkey length: expected 32 or 33, got ${pubkey.length}`);
|
|
12097
|
-
}
|
|
12098
11969
|
function delayToTimelock(delay) {
|
|
12099
11970
|
return {
|
|
12100
11971
|
value: delay,
|
|
@@ -12105,7 +11976,7 @@ function dedupeTimelocks(timelocks) {
|
|
|
12105
11976
|
const seen = /* @__PURE__ */ new Set();
|
|
12106
11977
|
const deduped = [];
|
|
12107
11978
|
for (const timelock of timelocks) {
|
|
12108
|
-
const sequence =
|
|
11979
|
+
const sequence = chunkZIRFXBKL_cjs.timelockToSequence(timelock).toString();
|
|
12109
11980
|
if (seen.has(sequence)) continue;
|
|
12110
11981
|
seen.add(sequence);
|
|
12111
11982
|
deduped.push(timelock);
|
|
@@ -12122,7 +11993,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
|
|
|
12122
11993
|
state: "active"
|
|
12123
11994
|
});
|
|
12124
11995
|
const newest = candidates.filter(
|
|
12125
|
-
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source ===
|
|
11996
|
+
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkPXPPZF5K_cjs.WALLET_RECEIVE_SOURCE
|
|
12126
11997
|
).sort((a, b) => {
|
|
12127
11998
|
if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
|
|
12128
11999
|
return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
|
|
@@ -12130,7 +12001,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
|
|
|
12130
12001
|
if (!newest?.params.pubKey) return baseline;
|
|
12131
12002
|
try {
|
|
12132
12003
|
const pubKey = base.hex.decode(newest.params.pubKey);
|
|
12133
|
-
return new
|
|
12004
|
+
return new chunkPXPPZF5K_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
|
|
12134
12005
|
} catch (e) {
|
|
12135
12006
|
console.warn("Skipping malformed boarding contract at boot", newest.script, e);
|
|
12136
12007
|
return baseline;
|
|
@@ -12146,8 +12017,8 @@ function filterSnapshotVtxos(snapshot, filter, pendingSpendOutpoints) {
|
|
|
12146
12017
|
if (pendingSpendOutpoints.has(`${vtxo.txid}:${vtxo.vout}`)) {
|
|
12147
12018
|
return false;
|
|
12148
12019
|
}
|
|
12149
|
-
if (!
|
|
12150
|
-
if (!f.withRecoverable &&
|
|
12020
|
+
if (!chunkZIRFXBKL_cjs.hasTerminalSpend(vtxo)) {
|
|
12021
|
+
if (!f.withRecoverable && chunkZIRFXBKL_cjs.canRecoverOnchain(vtxo, now)) {
|
|
12151
12022
|
return false;
|
|
12152
12023
|
}
|
|
12153
12024
|
return true;
|
|
@@ -12488,7 +12359,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12488
12359
|
*/
|
|
12489
12360
|
static async setupWalletConfig(config, pubKey) {
|
|
12490
12361
|
const arkadeServerUrl = getArkadeServerUrl(config);
|
|
12491
|
-
const arkProvider = config.arkProvider || new
|
|
12362
|
+
const arkProvider = config.arkProvider || new chunkZIRFXBKL_cjs.RestArkProvider(arkadeServerUrl);
|
|
12492
12363
|
let indexerProvider = config.indexerProvider;
|
|
12493
12364
|
if (!indexerProvider) {
|
|
12494
12365
|
let indexerUrl = config.indexerUrl;
|
|
@@ -12505,7 +12376,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12505
12376
|
indexerUrl = arkadeServerUrl;
|
|
12506
12377
|
}
|
|
12507
12378
|
}
|
|
12508
|
-
indexerProvider = new
|
|
12379
|
+
indexerProvider = new chunk3S3JZUEN_cjs.RestIndexerProvider(indexerUrl);
|
|
12509
12380
|
}
|
|
12510
12381
|
const walletRepository = config.storage?.walletRepository ?? new IndexedDBWalletRepository();
|
|
12511
12382
|
const contractRepository = config.storage?.contractRepository ?? new IndexedDBContractRepository();
|
|
@@ -12514,7 +12385,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12514
12385
|
source: serverInfoSource,
|
|
12515
12386
|
lastOnlineAt: serverInfoLastOnlineAt
|
|
12516
12387
|
} = await resolveArkInfo(arkProvider, walletRepository);
|
|
12517
|
-
const network =
|
|
12388
|
+
const network = chunkZIRFXBKL_cjs.getNetwork(info.network);
|
|
12518
12389
|
if ("descriptor" in config.identity) {
|
|
12519
12390
|
const descriptor = config.identity.descriptor;
|
|
12520
12391
|
const identityIsMainnet = !descriptor.includes("tpub");
|
|
@@ -12554,18 +12425,18 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12554
12425
|
value: info.boardingExitDelay,
|
|
12555
12426
|
type: info.boardingExitDelay < 512n ? "blocks" : "seconds"
|
|
12556
12427
|
};
|
|
12557
|
-
const serverPubKey = base.hex.decode(info.signerPubkey)
|
|
12558
|
-
const delegatePubKey = config.delegateProvider ? await config.delegateProvider.getDelegateInfo().then((info2) => base.hex.decode(info2.pubkey)
|
|
12428
|
+
const serverPubKey = chunkPXPPZF5K_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
|
|
12429
|
+
const delegatePubKey = config.delegateProvider ? await config.delegateProvider.getDelegateInfo().then((info2) => chunkPXPPZF5K_cjs.toXOnly(base.hex.decode(info2.pubkey), "delegate key")).catch(() => void 0) : config.delegatorProvider ? await config.delegatorProvider.getDelegateInfo().then((info2) => chunkPXPPZF5K_cjs.toXOnly(base.hex.decode(info2.pubkey), "delegate key")).catch(() => void 0) : void 0;
|
|
12559
12430
|
const offchainOptions = {
|
|
12560
12431
|
pubKey,
|
|
12561
12432
|
serverPubKey,
|
|
12562
12433
|
csvTimelock: exitTimelock
|
|
12563
12434
|
};
|
|
12564
|
-
const offchainTapscript = !delegatePubKey ? new
|
|
12565
|
-
const boardingTapscript =
|
|
12435
|
+
const offchainTapscript = !delegatePubKey ? new chunkPXPPZF5K_cjs.DefaultVtxo.Script(offchainOptions) : new chunkPXPPZF5K_cjs.DelegateVtxo.Script({ ...offchainOptions, delegatePubKey });
|
|
12436
|
+
const boardingTapscript = chunkPXPPZF5K_cjs.BoardingContractHandler.createScript({
|
|
12566
12437
|
pubKey: base.hex.encode(pubKey),
|
|
12567
12438
|
serverPubKey: base.hex.encode(serverPubKey),
|
|
12568
|
-
csvTimelock:
|
|
12439
|
+
csvTimelock: chunkZIRFXBKL_cjs.timelockToSequence(boardingTimelock).toString()
|
|
12569
12440
|
});
|
|
12570
12441
|
return {
|
|
12571
12442
|
arkProvider,
|
|
@@ -12862,7 +12733,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12862
12733
|
const response = await contractManager.getContractsWithVtxos();
|
|
12863
12734
|
const allVtxos = response.flatMap((_) => _.vtxos);
|
|
12864
12735
|
const { boardingTxs, commitmentsToIgnore } = await this.getBoardingTxs();
|
|
12865
|
-
const resolveTxCreatedAt = (txids) =>
|
|
12736
|
+
const resolveTxCreatedAt = (txids) => chunkZIRFXBKL_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
|
|
12866
12737
|
return buildTransactionHistory(
|
|
12867
12738
|
allVtxos,
|
|
12868
12739
|
boardingTxs,
|
|
@@ -12956,7 +12827,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12956
12827
|
},
|
|
12957
12828
|
isUnrolled: true,
|
|
12958
12829
|
...boardingFacts,
|
|
12959
|
-
virtualStatus:
|
|
12830
|
+
virtualStatus: chunkZIRFXBKL_cjs.toVirtualStatus(boardingFacts),
|
|
12960
12831
|
spentBy: "",
|
|
12961
12832
|
createdAt: tx.status.confirmed ? new Date(tx.status.block_time * 1e3) : /* @__PURE__ */ new Date(0),
|
|
12962
12833
|
script: scriptHex
|
|
@@ -13012,9 +12883,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13012
12883
|
async getBoardingTapscripts(allowedSigners) {
|
|
13013
12884
|
const byScript = /* @__PURE__ */ new Map();
|
|
13014
12885
|
const add = (s) => byScript.set(base.hex.encode(s.pkScript), s);
|
|
13015
|
-
const boardingCsv = this.boardingTapscript.options.csvTimelock ??
|
|
12886
|
+
const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunkPXPPZF5K_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
13016
12887
|
add(
|
|
13017
|
-
new
|
|
12888
|
+
new chunkPXPPZF5K_cjs.DefaultVtxo.Script({
|
|
13018
12889
|
pubKey: await this.identity.xOnlyPublicKey(),
|
|
13019
12890
|
serverPubKey: this.boardingTapscript.options.serverPubKey,
|
|
13020
12891
|
csvTimelock: boardingCsv
|
|
@@ -13029,7 +12900,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13029
12900
|
for (const c of boardingContracts) {
|
|
13030
12901
|
if (!allowed.has(toXOnlySignerHex(c.params.serverPubKey))) continue;
|
|
13031
12902
|
try {
|
|
13032
|
-
add(
|
|
12903
|
+
add(chunkPXPPZF5K_cjs.BoardingContractHandler.createScript(c.params));
|
|
13033
12904
|
} catch (e) {
|
|
13034
12905
|
console.warn("Skipping malformed boarding contract", c.script, e);
|
|
13035
12906
|
}
|
|
@@ -13067,7 +12938,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13067
12938
|
// Per-row CSV delay decoded from THIS tapscript's exit leaf —
|
|
13068
12939
|
// not the wallet's current boarding timelock, which a signer
|
|
13069
12940
|
// rotation may have changed.
|
|
13070
|
-
csvTimelock:
|
|
12941
|
+
csvTimelock: chunkZIRFXBKL_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
|
|
13071
12942
|
coins: utxos
|
|
13072
12943
|
});
|
|
13073
12944
|
}
|
|
@@ -13200,7 +13071,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13200
13071
|
/** Fetch Arkade transaction ids that are still pending final settlement. */
|
|
13201
13072
|
async fetchPendingTxs() {
|
|
13202
13073
|
const scripts = await this.getWalletScripts();
|
|
13203
|
-
const vtxos = await
|
|
13074
|
+
const vtxos = await chunkZIRFXBKL_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
|
|
13204
13075
|
return vtxos.filter(
|
|
13205
13076
|
(vtxo) => (vtxo.isSpent || vtxo.isPreconfirmed && !vtxo.isSwept) && vtxo.arkTxId !== void 0
|
|
13206
13077
|
).map((_) => _.arkTxId);
|
|
@@ -13231,7 +13102,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13231
13102
|
});
|
|
13232
13103
|
for (const contract of contracts) {
|
|
13233
13104
|
if (map.has(contract.script)) continue;
|
|
13234
|
-
const handler =
|
|
13105
|
+
const handler = chunkPXPPZF5K_cjs.contractHandlers.get(contract.type);
|
|
13235
13106
|
if (handler) {
|
|
13236
13107
|
const script = handler.createScript(contract.params);
|
|
13237
13108
|
map.set(contract.script, script);
|
|
@@ -13343,7 +13214,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13343
13214
|
}
|
|
13344
13215
|
});
|
|
13345
13216
|
const baselinePubkey = await this.identity.xOnlyPublicKey();
|
|
13346
|
-
const delegatePubKey = this.offchainTapscript instanceof
|
|
13217
|
+
const delegatePubKey = this.offchainTapscript instanceof chunkPXPPZF5K_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
|
|
13347
13218
|
const baselineSigners = [
|
|
13348
13219
|
this.offchainTapscript.options.serverPubKey,
|
|
13349
13220
|
...[...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h))
|
|
@@ -13351,8 +13222,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13351
13222
|
const seenBaselineScripts = /* @__PURE__ */ new Set();
|
|
13352
13223
|
for (const serverPubKey of baselineSigners) {
|
|
13353
13224
|
for (const csvTimelock of this.walletContractTimelocks) {
|
|
13354
|
-
const csvTimelockStr =
|
|
13355
|
-
const defaultScript = new
|
|
13225
|
+
const csvTimelockStr = chunkZIRFXBKL_cjs.timelockToSequence(csvTimelock).toString();
|
|
13226
|
+
const defaultScript = new chunkPXPPZF5K_cjs.DefaultVtxo.Script({
|
|
13356
13227
|
pubKey: baselinePubkey,
|
|
13357
13228
|
serverPubKey,
|
|
13358
13229
|
csvTimelock
|
|
@@ -13373,7 +13244,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13373
13244
|
});
|
|
13374
13245
|
}
|
|
13375
13246
|
if (delegatePubKey) {
|
|
13376
|
-
const delegateScript = new
|
|
13247
|
+
const delegateScript = new chunkPXPPZF5K_cjs.DelegateVtxo.Script({
|
|
13377
13248
|
pubKey: baselinePubkey,
|
|
13378
13249
|
serverPubKey,
|
|
13379
13250
|
delegatePubKey,
|
|
@@ -13397,9 +13268,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13397
13268
|
}
|
|
13398
13269
|
}
|
|
13399
13270
|
}
|
|
13400
|
-
const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ??
|
|
13271
|
+
const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunkPXPPZF5K_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
13401
13272
|
for (const serverPubKey of baselineSigners) {
|
|
13402
|
-
const baselineBoarding = new
|
|
13273
|
+
const baselineBoarding = new chunkPXPPZF5K_cjs.DefaultVtxo.Script({
|
|
13403
13274
|
pubKey: baselinePubkey,
|
|
13404
13275
|
serverPubKey,
|
|
13405
13276
|
csvTimelock: boardingCsvTimelock
|
|
@@ -13412,7 +13283,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13412
13283
|
params: {
|
|
13413
13284
|
pubKey: base.hex.encode(baselineBoarding.options.pubKey),
|
|
13414
13285
|
serverPubKey: base.hex.encode(serverPubKey),
|
|
13415
|
-
csvTimelock:
|
|
13286
|
+
csvTimelock: chunkZIRFXBKL_cjs.timelockToSequence(boardingCsvTimelock).toString()
|
|
13416
13287
|
},
|
|
13417
13288
|
script: boardingScriptHex,
|
|
13418
13289
|
address: baselineBoarding.address(this.network.hrp, serverPubKey).encode(),
|
|
@@ -13591,7 +13462,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13591
13462
|
serverPubKey: this.offchainTapscript.options.serverPubKey,
|
|
13592
13463
|
deprecatedSignerPubKeys: [...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h)),
|
|
13593
13464
|
csvTimelocks: this.walletContractTimelocks,
|
|
13594
|
-
delegatePubKey: this.offchainTapscript instanceof
|
|
13465
|
+
delegatePubKey: this.offchainTapscript instanceof chunkPXPPZF5K_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
|
|
13595
13466
|
};
|
|
13596
13467
|
}
|
|
13597
13468
|
_signerRouter;
|
|
@@ -13685,24 +13556,24 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13685
13556
|
const manager = await this.getContractManager();
|
|
13686
13557
|
const descriptor = await manager.getNextSigningDescriptor();
|
|
13687
13558
|
if (!descriptor) return this.getBoardingAddress();
|
|
13688
|
-
const pubKey =
|
|
13689
|
-
const newBoarding = new
|
|
13559
|
+
const pubKey = chunkPXPPZF5K_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
13560
|
+
const newBoarding = new chunkPXPPZF5K_cjs.DefaultVtxo.Script({
|
|
13690
13561
|
...this._boardingTapscript.options,
|
|
13691
13562
|
pubKey
|
|
13692
13563
|
});
|
|
13693
|
-
const csvTimelock = newBoarding.options.csvTimelock ??
|
|
13564
|
+
const csvTimelock = newBoarding.options.csvTimelock ?? chunkPXPPZF5K_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
13694
13565
|
await manager.createContract({
|
|
13695
13566
|
type: "boarding",
|
|
13696
13567
|
params: {
|
|
13697
13568
|
pubKey: base.hex.encode(pubKey),
|
|
13698
13569
|
serverPubKey: base.hex.encode(newBoarding.options.serverPubKey),
|
|
13699
|
-
csvTimelock:
|
|
13570
|
+
csvTimelock: chunkZIRFXBKL_cjs.timelockToSequence(csvTimelock).toString()
|
|
13700
13571
|
},
|
|
13701
13572
|
script: base.hex.encode(newBoarding.pkScript),
|
|
13702
13573
|
address: newBoarding.address(this.network.hrp, this.arkServerPublicKey).encode(),
|
|
13703
13574
|
state: "active",
|
|
13704
13575
|
metadata: {
|
|
13705
|
-
source:
|
|
13576
|
+
source: chunkPXPPZF5K_cjs.WALLET_RECEIVE_SOURCE,
|
|
13706
13577
|
signingDescriptor: descriptor
|
|
13707
13578
|
}
|
|
13708
13579
|
});
|
|
@@ -13737,7 +13608,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13737
13608
|
if (this._descriptorProvider instanceof HDDescriptorProvider) {
|
|
13738
13609
|
return (await this.getContractManager()).getNextSigningDescriptor();
|
|
13739
13610
|
}
|
|
13740
|
-
return
|
|
13611
|
+
return chunkPXPPZF5K_cjs.identityDescriptor(this.identity);
|
|
13741
13612
|
}
|
|
13742
13613
|
/**
|
|
13743
13614
|
* @see HDAllocationCapable.advanceSigningDescriptorWatermark
|
|
@@ -13833,7 +13704,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13833
13704
|
* the stable public API.
|
|
13834
13705
|
*/
|
|
13835
13706
|
async rotateServerSigner(newServerPubKey, checkpointTapscript) {
|
|
13836
|
-
const xonly =
|
|
13707
|
+
const xonly = chunkPXPPZF5K_cjs.toXOnly(newServerPubKey, "ark signer key");
|
|
13837
13708
|
const newServerUnrollScript = assertValidServerUnrollScript(
|
|
13838
13709
|
checkpointTapscript,
|
|
13839
13710
|
resolveCheckpointExitDelayPolicy(this.network, this.checkpointExitDelayPolicy)
|
|
@@ -13862,21 +13733,21 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13862
13733
|
const [currentBoardingRow] = await manager.getContracts({
|
|
13863
13734
|
script: currentBoardingScript
|
|
13864
13735
|
});
|
|
13865
|
-
const newOffchain = this.offchainTapscript instanceof
|
|
13736
|
+
const newOffchain = this.offchainTapscript instanceof chunkPXPPZF5K_cjs.DelegateVtxo.Script ? new chunkPXPPZF5K_cjs.DelegateVtxo.Script({
|
|
13866
13737
|
...this.offchainTapscript.options,
|
|
13867
13738
|
serverPubKey: xonly
|
|
13868
|
-
}) : new
|
|
13739
|
+
}) : new chunkPXPPZF5K_cjs.DefaultVtxo.Script({
|
|
13869
13740
|
...this.offchainTapscript.options,
|
|
13870
13741
|
serverPubKey: xonly
|
|
13871
13742
|
});
|
|
13872
|
-
const newBoarding = new
|
|
13743
|
+
const newBoarding = new chunkPXPPZF5K_cjs.DefaultVtxo.Script({
|
|
13873
13744
|
...this._boardingTapscript.options,
|
|
13874
13745
|
serverPubKey: xonly
|
|
13875
13746
|
});
|
|
13876
|
-
const offchainCsv =
|
|
13747
|
+
const offchainCsv = chunkZIRFXBKL_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
|
|
13877
13748
|
const newOffchainScript = base.hex.encode(newOffchain.pkScript);
|
|
13878
13749
|
const newOffchainAddress = newOffchain.address(this.network.hrp, xonly).encode();
|
|
13879
|
-
if (newOffchain instanceof
|
|
13750
|
+
if (newOffchain instanceof chunkPXPPZF5K_cjs.DelegateVtxo.Script) {
|
|
13880
13751
|
await manager.createContract({
|
|
13881
13752
|
type: "delegate",
|
|
13882
13753
|
params: {
|
|
@@ -13904,13 +13775,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13904
13775
|
metadata: currentOffchainRow?.metadata
|
|
13905
13776
|
});
|
|
13906
13777
|
}
|
|
13907
|
-
const boardingCsv = newBoarding.options.csvTimelock ??
|
|
13778
|
+
const boardingCsv = newBoarding.options.csvTimelock ?? chunkPXPPZF5K_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
13908
13779
|
await manager.createContract({
|
|
13909
13780
|
type: "boarding",
|
|
13910
13781
|
params: {
|
|
13911
13782
|
pubKey: base.hex.encode(newBoarding.options.pubKey),
|
|
13912
13783
|
serverPubKey: base.hex.encode(xonly),
|
|
13913
|
-
csvTimelock:
|
|
13784
|
+
csvTimelock: chunkZIRFXBKL_cjs.timelockToSequence(boardingCsv).toString()
|
|
13914
13785
|
},
|
|
13915
13786
|
script: base.hex.encode(newBoarding.pkScript),
|
|
13916
13787
|
address: newBoarding.address(this.network.hrp, xonly).encode(),
|
|
@@ -13943,14 +13814,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13943
13814
|
_restoreInFlight;
|
|
13944
13815
|
_addPendingSpends(inputs) {
|
|
13945
13816
|
for (const input of inputs) {
|
|
13946
|
-
if (
|
|
13817
|
+
if (chunkZIRFXBKL_cjs.isVirtualCoin(input)) {
|
|
13947
13818
|
this._pendingSpendOutpoints.add(`${input.txid}:${input.vout}`);
|
|
13948
13819
|
}
|
|
13949
13820
|
}
|
|
13950
13821
|
}
|
|
13951
13822
|
_removePendingSpends(inputs) {
|
|
13952
13823
|
for (const input of inputs) {
|
|
13953
|
-
if (
|
|
13824
|
+
if (chunkZIRFXBKL_cjs.isVirtualCoin(input)) {
|
|
13954
13825
|
this._pendingSpendOutpoints.delete(`${input.txid}:${input.vout}`);
|
|
13955
13826
|
}
|
|
13956
13827
|
}
|
|
@@ -14008,13 +13879,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14008
13879
|
const manager = await this.getContractManager();
|
|
14009
13880
|
const provider = this._descriptorProvider;
|
|
14010
13881
|
const hd = provider instanceof HDDescriptorProvider;
|
|
14011
|
-
const staticDescriptor = hd ? void 0 : await
|
|
13882
|
+
const staticDescriptor = hd ? void 0 : await chunkPXPPZF5K_cjs.identityDescriptor(this.identity);
|
|
14012
13883
|
const materialize = (index) => hd ? provider.materializeDescriptorAt(index) : staticDescriptor;
|
|
14013
|
-
const delegatePubKey = this.offchainTapscript instanceof
|
|
13884
|
+
const delegatePubKey = this.offchainTapscript instanceof chunkPXPPZF5K_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
|
|
14014
13885
|
const arkInfo = await this.arkProvider.getInfo();
|
|
14015
|
-
const currentSignerPubKey =
|
|
13886
|
+
const currentSignerPubKey = chunkPXPPZF5K_cjs.toXOnly(base.hex.decode(arkInfo.signerPubkey), "ark signer key");
|
|
14016
13887
|
const deprecatedSignerPubKeys = arkInfo.deprecatedSigners.map(
|
|
14017
|
-
(s) =>
|
|
13888
|
+
(s) => chunkPXPPZF5K_cjs.toXOnly(base.hex.decode(s.pubkey), "deprecated signer key")
|
|
14018
13889
|
);
|
|
14019
13890
|
const deps = {
|
|
14020
13891
|
indexerProvider: this.indexerProvider,
|
|
@@ -14029,7 +13900,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14029
13900
|
csvTimelocks: this.walletContractTimelocks,
|
|
14030
13901
|
// Boarding-exit CSV so the boarding handler can build its
|
|
14031
13902
|
// candidate script (distinct from the unilateral-exit matrix).
|
|
14032
|
-
boardingTimelock: this.boardingTapscript.options.csvTimelock ??
|
|
13903
|
+
boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunkPXPPZF5K_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
|
|
14033
13904
|
delegatePubKey
|
|
14034
13905
|
};
|
|
14035
13906
|
const result = await manager.scanContracts({
|
|
@@ -14143,7 +14014,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14143
14014
|
throw new Error("Invalid configured public key");
|
|
14144
14015
|
}
|
|
14145
14016
|
const setup = await ReadonlyWallet.setupWalletConfig(config, pubkey);
|
|
14146
|
-
const forfeitPubkey = base.hex.decode(setup.info.forfeitPubkey)
|
|
14017
|
+
const forfeitPubkey = chunkPXPPZF5K_cjs.toXOnly(base.hex.decode(setup.info.forfeitPubkey), "forfeit key");
|
|
14147
14018
|
const forfeitAddress = btcSigner.Address(setup.network).decode(setup.info.forfeitAddress);
|
|
14148
14019
|
const forfeitOutputScript = btcSigner.OutScript.encode(forfeitAddress);
|
|
14149
14020
|
const checkpointExitDelayOverrides = {
|
|
@@ -14292,7 +14163,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14292
14163
|
inputs: params.selectedVtxos,
|
|
14293
14164
|
changeAmount: BigInt(changeAmount)
|
|
14294
14165
|
};
|
|
14295
|
-
const outputAddress =
|
|
14166
|
+
const outputAddress = chunkZIRFXBKL_cjs.ArkAddress.decode(params.address);
|
|
14296
14167
|
assertRecipientArkAddress(
|
|
14297
14168
|
params.address,
|
|
14298
14169
|
outputAddress,
|
|
@@ -14358,13 +14229,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14358
14229
|
void this.logUngatedInputs("settle({ inputs })", params.inputs);
|
|
14359
14230
|
}
|
|
14360
14231
|
const offchainAddress = await this.getAddress();
|
|
14361
|
-
const offchainPkScript =
|
|
14232
|
+
const offchainPkScript = chunkZIRFXBKL_cjs.ArkAddress.decode(offchainAddress).pkScript;
|
|
14362
14233
|
const offchainOutputScript = base.hex.encode(offchainPkScript);
|
|
14363
14234
|
if (!params) {
|
|
14364
14235
|
const { fees, vtxoMaxAmount } = await this.arkProvider.getInfo();
|
|
14365
14236
|
const estimator = new Estimator(fees.intentFee);
|
|
14366
14237
|
let amount = 0;
|
|
14367
|
-
const exitScript =
|
|
14238
|
+
const exitScript = chunkZIRFXBKL_cjs.CSVMultisigTapscript.decode(
|
|
14368
14239
|
base.hex.decode(this.boardingTapscript.exitScript)
|
|
14369
14240
|
);
|
|
14370
14241
|
const boardingTimelock = exitScript.params.timelock;
|
|
@@ -14393,7 +14264,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14393
14264
|
if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
|
|
14394
14265
|
break;
|
|
14395
14266
|
}
|
|
14396
|
-
const inputFee = estimator.evalOffchainInput(
|
|
14267
|
+
const inputFee = estimator.evalOffchainInput(chunkZIRFXBKL_cjs.toOffchainInputFeeParams(vtxo));
|
|
14397
14268
|
if (inputFee.satoshis >= vtxo.value) {
|
|
14398
14269
|
continue;
|
|
14399
14270
|
}
|
|
@@ -14440,7 +14311,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14440
14311
|
let script;
|
|
14441
14312
|
let arkAddress;
|
|
14442
14313
|
try {
|
|
14443
|
-
arkAddress =
|
|
14314
|
+
arkAddress = chunkZIRFXBKL_cjs.ArkAddress.decode(output.address);
|
|
14444
14315
|
} catch {
|
|
14445
14316
|
arkAddress = void 0;
|
|
14446
14317
|
}
|
|
@@ -14530,7 +14401,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14530
14401
|
const abortController = new AbortController();
|
|
14531
14402
|
let stream;
|
|
14532
14403
|
let committedTxid;
|
|
14533
|
-
const settleInputVtxos = params.inputs.filter(
|
|
14404
|
+
const settleInputVtxos = params.inputs.filter(chunkZIRFXBKL_cjs.isVirtualCoin);
|
|
14534
14405
|
const contractManager = await this.getContractManager();
|
|
14535
14406
|
await contractManager.assertAnnotatable(settleInputVtxos);
|
|
14536
14407
|
await contractManager.assertSpendableNow?.(
|
|
@@ -14639,7 +14510,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14639
14510
|
async maybeRotateBoardingAfterBoard(inputs) {
|
|
14640
14511
|
if (!this._descriptorProvider) return;
|
|
14641
14512
|
const consumedBoarding = inputs.some(
|
|
14642
|
-
(input) => typeof input !== "string" && !
|
|
14513
|
+
(input) => typeof input !== "string" && !chunkZIRFXBKL_cjs.isVirtualCoin(input)
|
|
14643
14514
|
);
|
|
14644
14515
|
if (!consumedBoarding) return;
|
|
14645
14516
|
try {
|
|
@@ -14663,7 +14534,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14663
14534
|
let connectorIndex = 0;
|
|
14664
14535
|
const connectorsLeaves = connectorsGraph?.leaves() || [];
|
|
14665
14536
|
for (const input of inputs) {
|
|
14666
|
-
if (!
|
|
14537
|
+
if (!chunkZIRFXBKL_cjs.isVirtualCoin(input)) {
|
|
14667
14538
|
for (let i = 0; i < settlementPsbt.inputsLength; i++) {
|
|
14668
14539
|
const settlementInput = settlementPsbt.getInput(i);
|
|
14669
14540
|
if (!settlementInput.txid || settlementInput.index === void 0) {
|
|
@@ -14694,7 +14565,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14694
14565
|
}
|
|
14695
14566
|
continue;
|
|
14696
14567
|
}
|
|
14697
|
-
if (
|
|
14568
|
+
if (chunkZIRFXBKL_cjs.canRecoverOnchain(input, { timestamp: /* @__PURE__ */ new Date() }) || isSubdust({ value: input.value }, this.dustAmount)) {
|
|
14698
14569
|
continue;
|
|
14699
14570
|
}
|
|
14700
14571
|
if (connectorsLeaves.length === 0) {
|
|
@@ -14722,7 +14593,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14722
14593
|
index: input.vout,
|
|
14723
14594
|
witnessUtxo: {
|
|
14724
14595
|
amount: BigInt(input.value),
|
|
14725
|
-
script:
|
|
14596
|
+
script: chunkZIRFXBKL_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
14726
14597
|
},
|
|
14727
14598
|
sighashType: btcSigner.SigHash.DEFAULT,
|
|
14728
14599
|
tapLeafScript: [input.forfeitTapLeafScript]
|
|
@@ -14741,7 +14612,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14741
14612
|
forfeitTx = await this._signerRouter.sign(forfeitTx, [
|
|
14742
14613
|
{
|
|
14743
14614
|
index: 0,
|
|
14744
|
-
lookupScript:
|
|
14615
|
+
lookupScript: chunkZIRFXBKL_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
14745
14616
|
}
|
|
14746
14617
|
]);
|
|
14747
14618
|
signedForfeits.push(base.base64.encode(forfeitTx.toPSBT()));
|
|
@@ -14799,7 +14670,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14799
14670
|
resolveBatchExpiryPolicy(this.network, this.batchExpiryPolicy)
|
|
14800
14671
|
);
|
|
14801
14672
|
await this.arkProvider.confirmRegistration(intentId);
|
|
14802
|
-
const sweepTapscript =
|
|
14673
|
+
const sweepTapscript = chunkZIRFXBKL_cjs.CSVMultisigTapscript.encode({
|
|
14803
14674
|
timelock,
|
|
14804
14675
|
pubkeys: [this.forfeitPubkey]
|
|
14805
14676
|
}).script;
|
|
@@ -14813,9 +14684,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14813
14684
|
if (!sweepTapTreeRoot) {
|
|
14814
14685
|
throw new Error("Sweep tap tree root not set");
|
|
14815
14686
|
}
|
|
14816
|
-
const xOnlyPublicKeys = event.cosignersPublicKeys.map(
|
|
14687
|
+
const xOnlyPublicKeys = event.cosignersPublicKeys.map(
|
|
14688
|
+
(k) => base.hex.encode(chunkPXPPZF5K_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
|
|
14689
|
+
);
|
|
14817
14690
|
const signerPublicKey = await session.getPublicKey();
|
|
14818
|
-
const xonlySignerPublicKey =
|
|
14691
|
+
const xonlySignerPublicKey = chunkPXPPZF5K_cjs.toXOnly(signerPublicKey, "signer key");
|
|
14819
14692
|
if (!xOnlyPublicKeys.includes(base.hex.encode(xonlySignerPublicKey))) {
|
|
14820
14693
|
return { skip: true };
|
|
14821
14694
|
}
|
|
@@ -14905,9 +14778,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14905
14778
|
...existing ?? {},
|
|
14906
14779
|
intentTxId,
|
|
14907
14780
|
registerProof: intent.proof,
|
|
14908
|
-
registerProofMessage:
|
|
14781
|
+
registerProofMessage: chunkZIRFXBKL_cjs.Intent.encodeMessage(intent.message),
|
|
14909
14782
|
deleteProof: deleteIntent.proof,
|
|
14910
|
-
deleteProofMessage:
|
|
14783
|
+
deleteProofMessage: chunkZIRFXBKL_cjs.Intent.encodeMessage(deleteIntent.message),
|
|
14911
14784
|
intentVtxos: inputs.map((i) => ({
|
|
14912
14785
|
txid: i.txid,
|
|
14913
14786
|
vout: i.vout
|
|
@@ -14939,7 +14812,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14939
14812
|
try {
|
|
14940
14813
|
return await this.arkProvider.registerIntent(intent);
|
|
14941
14814
|
} catch (error) {
|
|
14942
|
-
if (error instanceof
|
|
14815
|
+
if (error instanceof chunkZIRFXBKL_cjs.ArkError && error.code === 0 && error.message.includes("duplicated input")) {
|
|
14943
14816
|
const deleteIntent = await this.makeDeleteIntentSignature(inputs);
|
|
14944
14817
|
await this.arkProvider.deleteIntent(deleteIntent);
|
|
14945
14818
|
return this.arkProvider.registerIntent(intent);
|
|
@@ -14955,7 +14828,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14955
14828
|
expire_at: 0,
|
|
14956
14829
|
cosigners_public_keys: cosignerPubKeys
|
|
14957
14830
|
};
|
|
14958
|
-
const proof =
|
|
14831
|
+
const proof = chunkZIRFXBKL_cjs.Intent.create(message, coins, outputs);
|
|
14959
14832
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
14960
14833
|
return {
|
|
14961
14834
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -14967,7 +14840,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14967
14840
|
type: "delete",
|
|
14968
14841
|
expire_at: 0
|
|
14969
14842
|
};
|
|
14970
|
-
const proof =
|
|
14843
|
+
const proof = chunkZIRFXBKL_cjs.Intent.create(message, coins, []);
|
|
14971
14844
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
14972
14845
|
return {
|
|
14973
14846
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -14979,7 +14852,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14979
14852
|
type: "get-pending-tx",
|
|
14980
14853
|
expire_at: 0
|
|
14981
14854
|
};
|
|
14982
|
-
const proof =
|
|
14855
|
+
const proof = chunkZIRFXBKL_cjs.Intent.create(message, coins, []);
|
|
14983
14856
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
14984
14857
|
return {
|
|
14985
14858
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -15000,7 +14873,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15000
14873
|
if (!vtxos || vtxos.length === 0) {
|
|
15001
14874
|
const scriptMap = await this.getScriptMap();
|
|
15002
14875
|
const allExtended = [];
|
|
15003
|
-
const fetchedVtxos = await
|
|
14876
|
+
const fetchedVtxos = await chunkZIRFXBKL_cjs.getAllNormalizedVtxos(this.indexerProvider, [
|
|
15004
14877
|
...scriptMap.keys()
|
|
15005
14878
|
]);
|
|
15006
14879
|
for (const vtxo of fetchedVtxos) {
|
|
@@ -15114,11 +14987,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15114
14987
|
* against the current key alone would leave it pending forever.
|
|
15115
14988
|
*/
|
|
15116
14989
|
checkpointUnrollCandidates(info) {
|
|
15117
|
-
const current =
|
|
14990
|
+
const current = chunkZIRFXBKL_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
|
|
15118
14991
|
const candidates = [this._serverUnrollScript, current];
|
|
15119
14992
|
for (const deprecated of signerSetFromInfo(info).deprecated.keys()) {
|
|
15120
14993
|
candidates.push(
|
|
15121
|
-
|
|
14994
|
+
chunkZIRFXBKL_cjs.CSVMultisigTapscript.encode({
|
|
15122
14995
|
...current.params,
|
|
15123
14996
|
pubkeys: [base.hex.decode(deprecated)]
|
|
15124
14997
|
})
|
|
@@ -15209,7 +15082,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15209
15082
|
if (vtxos.length === 0) {
|
|
15210
15083
|
throw new Error("No VTXOs found for this arkadeCash");
|
|
15211
15084
|
}
|
|
15212
|
-
const myPkScript =
|
|
15085
|
+
const myPkScript = chunkZIRFXBKL_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
|
|
15213
15086
|
let { spendable, unclaimed } = this.classifyCashVtxos(vtxos);
|
|
15214
15087
|
let swept = 0;
|
|
15215
15088
|
const drainable = vtxos.filter((vtxo) => !isSubdust(vtxo, this.dustAmount));
|
|
@@ -15283,7 +15156,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15283
15156
|
const spendable = [];
|
|
15284
15157
|
const unclaimed = [];
|
|
15285
15158
|
for (const vtxo of vtxos) {
|
|
15286
|
-
if (
|
|
15159
|
+
if (chunkZIRFXBKL_cjs.hasTerminalSpend(vtxo)) {
|
|
15287
15160
|
unclaimed.push(cashReport(vtxo, "already-spent"));
|
|
15288
15161
|
} else if (isSubdust(vtxo, this.dustAmount)) {
|
|
15289
15162
|
unclaimed.push(cashReport(vtxo, "subdust"));
|
|
@@ -15303,7 +15176,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15303
15176
|
const all = [];
|
|
15304
15177
|
const seen = /* @__PURE__ */ new Set();
|
|
15305
15178
|
for (let pageIndex = 0; ; pageIndex++) {
|
|
15306
|
-
const { vtxos, page } = await
|
|
15179
|
+
const { vtxos, page } = await chunkZIRFXBKL_cjs.getNormalizedVtxos(this.indexerProvider, {
|
|
15307
15180
|
scripts,
|
|
15308
15181
|
pageIndex,
|
|
15309
15182
|
pageSize
|
|
@@ -15350,7 +15223,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15350
15223
|
for (let i = 0; i < inputs.length; i += MAX_INPUTS_PER_INTENT) {
|
|
15351
15224
|
const batch = inputs.slice(i, i + MAX_INPUTS_PER_INTENT);
|
|
15352
15225
|
const message = { type: "get-pending-tx", expire_at: 0 };
|
|
15353
|
-
const proof =
|
|
15226
|
+
const proof = chunkZIRFXBKL_cjs.Intent.create(message, batch, []);
|
|
15354
15227
|
const signedProof = await identity.sign(
|
|
15355
15228
|
proof,
|
|
15356
15229
|
Array.from({ length: batch.length + 1 }, (_, j) => j)
|
|
@@ -15569,7 +15442,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15569
15442
|
script: recipient.script,
|
|
15570
15443
|
amount: BigInt(recipient.amount),
|
|
15571
15444
|
// Already checked against the recipient address in `validateRecipients`.
|
|
15572
|
-
...recipient.tapTree ? { tapTree:
|
|
15445
|
+
...recipient.tapTree ? { tapTree: chunkZIRFXBKL_cjs.TapTreeCoder.decode(recipient.tapTree) } : {}
|
|
15573
15446
|
}));
|
|
15574
15447
|
const totalBtcOutput = outputs.reduce((sum, o) => sum + Number(o.amount), 0);
|
|
15575
15448
|
let changeAmount = totalBtcSelected - totalBtcOutput;
|
|
@@ -15713,10 +15586,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15713
15586
|
const serverPubKey = this.arkServerPublicKey;
|
|
15714
15587
|
const serverUnrollScript = this.serverUnrollScript;
|
|
15715
15588
|
const arkAddress = offchainTapscript.address(this.network.hrp, serverPubKey);
|
|
15716
|
-
const normalizedInputs = inputs.map(
|
|
15717
|
-
const at = now ?? await
|
|
15589
|
+
const normalizedInputs = inputs.map(chunkZIRFXBKL_cjs.normalizeVtxo);
|
|
15590
|
+
const at = now ?? await chunkZIRFXBKL_cjs.resolveTimeHeight(this.onchainProvider);
|
|
15718
15591
|
for (const input of normalizedInputs) {
|
|
15719
|
-
if (!
|
|
15592
|
+
if (!chunkZIRFXBKL_cjs.canSpendOffchain(input, at)) {
|
|
15720
15593
|
throw new Error(
|
|
15721
15594
|
`sendSelectedVtxosToSelf: input ${input.txid}:${input.vout} is not cooperatively spendable`
|
|
15722
15595
|
);
|
|
@@ -15786,7 +15659,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15786
15659
|
);
|
|
15787
15660
|
const arkTxJobs = inputs.map((input, index) => ({
|
|
15788
15661
|
index,
|
|
15789
|
-
lookupScript:
|
|
15662
|
+
lookupScript: chunkZIRFXBKL_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
15790
15663
|
}));
|
|
15791
15664
|
const identity = this.identity;
|
|
15792
15665
|
const signer = {
|
|
@@ -15872,14 +15745,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15872
15745
|
const spentBy = checkpointIdByOutpoint.get(`${vtxo.txid}:${vtxo.vout}`);
|
|
15873
15746
|
spentVtxos.push({
|
|
15874
15747
|
...spentFacts,
|
|
15875
|
-
virtualStatus:
|
|
15748
|
+
virtualStatus: chunkZIRFXBKL_cjs.toVirtualStatus(spentFacts),
|
|
15876
15749
|
...spentBy ? { spentBy } : {},
|
|
15877
15750
|
arkTxId: arkTxid
|
|
15878
15751
|
});
|
|
15879
15752
|
for (const id of vtxo.commitmentTxIds) {
|
|
15880
15753
|
commitmentTxIds.add(id);
|
|
15881
15754
|
}
|
|
15882
|
-
const vtxoExpiry =
|
|
15755
|
+
const vtxoExpiry = chunkZIRFXBKL_cjs.toBatchExpiry(vtxo);
|
|
15883
15756
|
if (vtxoExpiry) {
|
|
15884
15757
|
batchExpiry = Math.min(batchExpiry, vtxoExpiry);
|
|
15885
15758
|
}
|
|
@@ -15892,7 +15765,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15892
15765
|
isSwept: false,
|
|
15893
15766
|
isPreconfirmed: true,
|
|
15894
15767
|
commitmentTxIds: Array.from(commitmentTxIds),
|
|
15895
|
-
...
|
|
15768
|
+
...chunkZIRFXBKL_cjs.parseLegacyExpiry(batchExpiry)
|
|
15896
15769
|
};
|
|
15897
15770
|
changeVtxo = {
|
|
15898
15771
|
txid: arkTxid,
|
|
@@ -15904,7 +15777,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15904
15777
|
tapTree: offchainTapscript.encode(),
|
|
15905
15778
|
value: Number(changeAmount),
|
|
15906
15779
|
...changeFacts,
|
|
15907
|
-
virtualStatus:
|
|
15780
|
+
virtualStatus: chunkZIRFXBKL_cjs.toVirtualStatus(changeFacts),
|
|
15908
15781
|
spentBy: "",
|
|
15909
15782
|
status: {
|
|
15910
15783
|
confirmed: false
|
|
@@ -15973,12 +15846,12 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15973
15846
|
const spentVtxos = [];
|
|
15974
15847
|
const inputArkTxIds = /* @__PURE__ */ new Set();
|
|
15975
15848
|
const boardingRemovalsByAddress = /* @__PURE__ */ new Map();
|
|
15976
|
-
const vtxoInputs = inputs.filter(
|
|
15849
|
+
const vtxoInputs = inputs.filter(chunkZIRFXBKL_cjs.isVirtualCoin);
|
|
15977
15850
|
const cm = await this.getContractManager();
|
|
15978
15851
|
const annotatedVtxos = await cm.annotateVtxos(vtxoInputs);
|
|
15979
15852
|
const annotatedByKey = new Map(annotatedVtxos.map((v) => [`${v.txid}:${v.vout}`, v]));
|
|
15980
15853
|
for (const input of inputs) {
|
|
15981
|
-
if (
|
|
15854
|
+
if (chunkZIRFXBKL_cjs.isVirtualCoin(input)) {
|
|
15982
15855
|
const outpoint = `${input.txid}:${input.vout}`;
|
|
15983
15856
|
const vtxo = annotatedByKey.get(outpoint);
|
|
15984
15857
|
if (!vtxo) {
|
|
@@ -15990,13 +15863,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15990
15863
|
const settledFacts = { ...vtxo, isSpent: true };
|
|
15991
15864
|
spentVtxos.push({
|
|
15992
15865
|
...settledFacts,
|
|
15993
|
-
virtualStatus:
|
|
15866
|
+
virtualStatus: chunkZIRFXBKL_cjs.toVirtualStatus(settledFacts),
|
|
15994
15867
|
settledBy: commitmentTxid
|
|
15995
15868
|
});
|
|
15996
15869
|
} else {
|
|
15997
15870
|
let sourceAddress;
|
|
15998
15871
|
try {
|
|
15999
|
-
sourceAddress =
|
|
15872
|
+
sourceAddress = chunkZIRFXBKL_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
|
|
16000
15873
|
this.network
|
|
16001
15874
|
);
|
|
16002
15875
|
} catch {
|
|
@@ -16054,9 +15927,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16054
15927
|
}
|
|
16055
15928
|
};
|
|
16056
15929
|
function selectVirtualCoins(coins, targetAmount) {
|
|
16057
|
-
const sortedCoins = coins.map(
|
|
16058
|
-
const expiryA =
|
|
16059
|
-
const expiryB =
|
|
15930
|
+
const sortedCoins = coins.map(chunkZIRFXBKL_cjs.normalizeVtxo).sort((a, b) => {
|
|
15931
|
+
const expiryA = chunkZIRFXBKL_cjs.toBatchExpiry(a) || Number.MAX_SAFE_INTEGER;
|
|
15932
|
+
const expiryB = chunkZIRFXBKL_cjs.toBatchExpiry(b) || Number.MAX_SAFE_INTEGER;
|
|
16060
15933
|
if (expiryA !== expiryB) {
|
|
16061
15934
|
return expiryA - expiryB;
|
|
16062
15935
|
}
|
|
@@ -16316,7 +16189,7 @@ var MessageBus = class {
|
|
|
16316
16189
|
this.initialized = true;
|
|
16317
16190
|
}
|
|
16318
16191
|
async buildServices(config) {
|
|
16319
|
-
const arkProvider = new
|
|
16192
|
+
const arkProvider = new chunkZIRFXBKL_cjs.RestArkProvider(config.arkServer.url);
|
|
16320
16193
|
const storage = {
|
|
16321
16194
|
walletRepository: this.walletRepository,
|
|
16322
16195
|
contractRepository: this.contractRepository,
|
|
@@ -16658,7 +16531,7 @@ var offboardNetworkNames = [
|
|
|
16658
16531
|
function offboardDestinationScript(destinationAddress) {
|
|
16659
16532
|
for (const networkName of offboardNetworkNames) {
|
|
16660
16533
|
try {
|
|
16661
|
-
const network =
|
|
16534
|
+
const network = chunkZIRFXBKL_cjs.networks[networkName];
|
|
16662
16535
|
const addr = btcSigner.Address(network).decode(destinationAddress);
|
|
16663
16536
|
return btcSigner.OutScript.encode(addr);
|
|
16664
16537
|
} catch {
|
|
@@ -16722,7 +16595,7 @@ var Ramps = class {
|
|
|
16722
16595
|
}
|
|
16723
16596
|
amount = amount ?? totalAmount;
|
|
16724
16597
|
const offchainAddress = await this.wallet.getAddress();
|
|
16725
|
-
const offchainAddr =
|
|
16598
|
+
const offchainAddr = chunkZIRFXBKL_cjs.ArkAddress.decode(offchainAddress);
|
|
16726
16599
|
const offchainScript = base.hex.encode(offchainAddr.pkScript);
|
|
16727
16600
|
const outputFee = estimator.evalOffchainOutput({
|
|
16728
16601
|
amount,
|
|
@@ -16782,7 +16655,7 @@ var Ramps = class {
|
|
|
16782
16655
|
const filteredVtxos = [];
|
|
16783
16656
|
let totalAmount = 0n;
|
|
16784
16657
|
for (const vtxo of vtxos) {
|
|
16785
|
-
const inputFee = estimator.evalOffchainInput(
|
|
16658
|
+
const inputFee = estimator.evalOffchainInput(chunkZIRFXBKL_cjs.toOffchainInputFeeParams(vtxo));
|
|
16786
16659
|
if (inputFee.satoshis >= vtxo.value) {
|
|
16787
16660
|
continue;
|
|
16788
16661
|
}
|
|
@@ -17549,7 +17422,7 @@ var WalletMessageHandler = class {
|
|
|
17549
17422
|
// Wallet methods
|
|
17550
17423
|
async handleInitWallet({ payload }) {
|
|
17551
17424
|
const { arkServerUrl } = payload;
|
|
17552
|
-
this.indexerProvider = new
|
|
17425
|
+
this.indexerProvider = new chunk3S3JZUEN_cjs.RestIndexerProvider(arkServerUrl);
|
|
17553
17426
|
await this.onWalletInitialized();
|
|
17554
17427
|
}
|
|
17555
17428
|
/**
|
|
@@ -17816,17 +17689,17 @@ var WalletMessageHandler = class {
|
|
|
17816
17689
|
throw new WalletNotInitializedError();
|
|
17817
17690
|
}
|
|
17818
17691
|
const allVtxos = await this.getVtxosFromRepo();
|
|
17819
|
-
const vtxos = allVtxos.filter((v) => !
|
|
17692
|
+
const vtxos = allVtxos.filter((v) => !chunkZIRFXBKL_cjs.hasTerminalSpend(v));
|
|
17820
17693
|
const dustAmount = this.readonlyWallet.dustAmount;
|
|
17821
17694
|
const includeRecoverable = message.payload.filter?.withRecoverable ?? false;
|
|
17822
17695
|
const filteredVtxos = includeRecoverable ? vtxos : vtxos.filter((v) => {
|
|
17823
17696
|
if (dustAmount != null && isSubdust(v, dustAmount)) {
|
|
17824
17697
|
return false;
|
|
17825
17698
|
}
|
|
17826
|
-
if (
|
|
17699
|
+
if (chunkZIRFXBKL_cjs.isRecoverable(v)) {
|
|
17827
17700
|
return false;
|
|
17828
17701
|
}
|
|
17829
|
-
if (
|
|
17702
|
+
if (chunkZIRFXBKL_cjs.isExpired(v)) {
|
|
17830
17703
|
return false;
|
|
17831
17704
|
}
|
|
17832
17705
|
return true;
|
|
@@ -17834,7 +17707,7 @@ var WalletMessageHandler = class {
|
|
|
17834
17707
|
if (!message.payload.filter?.withUnrolled) {
|
|
17835
17708
|
return filteredVtxos;
|
|
17836
17709
|
}
|
|
17837
|
-
return filteredVtxos.concat(allVtxos.filter((v) =>
|
|
17710
|
+
return filteredVtxos.concat(allVtxos.filter((v) => chunkZIRFXBKL_cjs.hasTerminalSpend(v) && v.isUnrolled));
|
|
17838
17711
|
}
|
|
17839
17712
|
/** Tear down handler subscriptions, then delegate the full wipe to the wallet. */
|
|
17840
17713
|
async clear() {
|
|
@@ -17924,7 +17797,7 @@ var WalletMessageHandler = class {
|
|
|
17924
17797
|
if (!this.readonlyWallet) return null;
|
|
17925
17798
|
const { boardingTxs, commitmentsToIgnore } = await this.readonlyWallet.getBoardingTxs();
|
|
17926
17799
|
const indexerProvider = this.indexerProvider;
|
|
17927
|
-
const resolveTxCreatedAt = indexerProvider ? (txids) =>
|
|
17800
|
+
const resolveTxCreatedAt = indexerProvider ? (txids) => chunkZIRFXBKL_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
|
|
17928
17801
|
return buildTransactionHistory(vtxos, boardingTxs, commitmentsToIgnore, resolveTxCreatedAt);
|
|
17929
17802
|
}
|
|
17930
17803
|
async ensureContractEventBroadcasting() {
|
|
@@ -18613,7 +18486,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
18613
18486
|
};
|
|
18614
18487
|
try {
|
|
18615
18488
|
const response = await this.sendMessage(message);
|
|
18616
|
-
return response.payload.vtxos.map(
|
|
18489
|
+
return response.payload.vtxos.map(chunkZIRFXBKL_cjs.normalizeVtxo);
|
|
18617
18490
|
} catch (error) {
|
|
18618
18491
|
throw new Error(`Failed to get vtxos: ${error}`);
|
|
18619
18492
|
}
|
|
@@ -18638,7 +18511,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
18638
18511
|
};
|
|
18639
18512
|
try {
|
|
18640
18513
|
const response = await this.sendMessage(message);
|
|
18641
|
-
return response.payload.vtxos.map(
|
|
18514
|
+
return response.payload.vtxos.map(chunkZIRFXBKL_cjs.normalizeVtxo);
|
|
18642
18515
|
} catch (error) {
|
|
18643
18516
|
throw new Error(`Failed to get spendable vtxos: ${error}`);
|
|
18644
18517
|
}
|
|
@@ -18769,7 +18642,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
18769
18642
|
};
|
|
18770
18643
|
try {
|
|
18771
18644
|
const response = await sendContractMessage(message);
|
|
18772
|
-
return response.payload.vtxos.map(
|
|
18645
|
+
return response.payload.vtxos.map(chunkZIRFXBKL_cjs.normalizeVtxo);
|
|
18773
18646
|
} catch (e) {
|
|
18774
18647
|
throw new Error("Failed to annotate vtxos");
|
|
18775
18648
|
}
|
|
@@ -19341,7 +19214,7 @@ var ServiceWorkerWallet = class _ServiceWorkerWallet extends ServiceWorkerReadon
|
|
|
19341
19214
|
};
|
|
19342
19215
|
try {
|
|
19343
19216
|
const response = await wallet.sendMessage(message);
|
|
19344
|
-
return response.payload.vtxos.map(
|
|
19217
|
+
return response.payload.vtxos.map(chunkZIRFXBKL_cjs.normalizeVtxo);
|
|
19345
19218
|
} catch (e) {
|
|
19346
19219
|
throw new Error(`Failed to get expiring vtxos: ${e}`);
|
|
19347
19220
|
}
|
|
@@ -19453,12 +19326,12 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
19453
19326
|
* @returns Configured onchain wallet
|
|
19454
19327
|
* @throws Error if the configured identity cannot produce a valid x-only public key
|
|
19455
19328
|
*/
|
|
19456
|
-
static async create(identity, networkName =
|
|
19329
|
+
static async create(identity, networkName = chunkZIRFXBKL_cjs.DEFAULT_NETWORK_NAME, provider) {
|
|
19457
19330
|
const pubkey = await identity.xOnlyPublicKey();
|
|
19458
19331
|
if (!pubkey) {
|
|
19459
19332
|
throw new Error("Invalid configured public key");
|
|
19460
19333
|
}
|
|
19461
|
-
const network =
|
|
19334
|
+
const network = chunkZIRFXBKL_cjs.getNetwork(networkName);
|
|
19462
19335
|
const onchainProvider = provider || new EsploraProvider(ESPLORA_URL[networkName]);
|
|
19463
19336
|
const onchainP2TR = btcSigner.p2tr(pubkey, void 0, network);
|
|
19464
19337
|
return new _OnchainWallet(identity, network, onchainP2TR, onchainProvider);
|
|
@@ -19564,7 +19437,7 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
19564
19437
|
if (!inputs) {
|
|
19565
19438
|
throw new Error("Fee estimation failed");
|
|
19566
19439
|
}
|
|
19567
|
-
let tx = new
|
|
19440
|
+
let tx = new chunkZIRFXBKL_cjs.Transaction();
|
|
19568
19441
|
for (const input of inputs) {
|
|
19569
19442
|
tx.addInput({
|
|
19570
19443
|
txid: input.txid,
|
|
@@ -19622,7 +19495,7 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
19622
19495
|
* @throws If the parent has no anchor, or funding cannot be selected/signed
|
|
19623
19496
|
*/
|
|
19624
19497
|
async bumpAnchor(parentHex, feeRate) {
|
|
19625
|
-
const parent =
|
|
19498
|
+
const parent = chunkZIRFXBKL_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
|
|
19626
19499
|
const coins = (await this.getCoins()).filter((c) => c.status.confirmed);
|
|
19627
19500
|
const child = await this.buildBumpPackage(parent, feeRate, coins);
|
|
19628
19501
|
return [parent.hex, child.hex];
|
|
@@ -20387,7 +20260,7 @@ exports.BIP322 = void 0;
|
|
|
20387
20260
|
async function sign2(message, identity, network) {
|
|
20388
20261
|
const xOnlyPubKey = await identity.xOnlyPublicKey();
|
|
20389
20262
|
const payment = btcSigner.p2tr(xOnlyPubKey, void 0, network);
|
|
20390
|
-
const toSpend =
|
|
20263
|
+
const toSpend = chunkZIRFXBKL_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
|
|
20391
20264
|
const toSign = craftBIP322ToSignP2TR(toSpend, payment.script, xOnlyPubKey);
|
|
20392
20265
|
const signed = await identity.sign(toSign, [0]);
|
|
20393
20266
|
signed.finalizeIdx(0);
|
|
@@ -20445,7 +20318,7 @@ function verifyP2TR(message, witnessItems, pkScript, pubkey) {
|
|
|
20445
20318
|
if (sighashType !== btcSigner.SigHash.DEFAULT && sighashType !== btcSigner.SigHash.ALL) {
|
|
20446
20319
|
return false;
|
|
20447
20320
|
}
|
|
20448
|
-
const toSpend =
|
|
20321
|
+
const toSpend = chunkZIRFXBKL_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
|
|
20449
20322
|
const toSign = craftBIP322ToSignP2TR(toSpend, pkScript, pubkey);
|
|
20450
20323
|
const sighash = toSign.preimageWitnessV1(0, [pkScript], sighashType, [0n]);
|
|
20451
20324
|
const rawSig = sig.length === 65 ? sig.subarray(0, 64) : sig;
|
|
@@ -20466,7 +20339,7 @@ function verifyP2WPKH(message, witnessItems, pkScript, addressHash) {
|
|
|
20466
20339
|
}
|
|
20467
20340
|
const sighashType = sigWithHash[sigWithHash.length - 1];
|
|
20468
20341
|
const derSig = sigWithHash.subarray(0, sigWithHash.length - 1);
|
|
20469
|
-
const toSpend =
|
|
20342
|
+
const toSpend = chunkZIRFXBKL_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
|
|
20470
20343
|
const toSign = craftBIP322ToSignSimple(toSpend, pkScript);
|
|
20471
20344
|
const scriptCode = btcSigner.OutScript.encode({ type: "pkh", hash: addressHash });
|
|
20472
20345
|
const sighash = toSign.preimageWitnessV0(0, scriptCode, sighashType, 0n);
|
|
@@ -20519,7 +20392,7 @@ function encodeCompactSize(n) {
|
|
|
20519
20392
|
return buf;
|
|
20520
20393
|
}
|
|
20521
20394
|
function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
|
|
20522
|
-
const tx = new
|
|
20395
|
+
const tx = new chunkZIRFXBKL_cjs.Transaction({ version: 0 });
|
|
20523
20396
|
tx.addInput({
|
|
20524
20397
|
txid: toSpend.id,
|
|
20525
20398
|
index: 0,
|
|
@@ -20533,12 +20406,12 @@ function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
|
|
|
20533
20406
|
});
|
|
20534
20407
|
tx.addOutput({
|
|
20535
20408
|
amount: 0n,
|
|
20536
|
-
script:
|
|
20409
|
+
script: chunkZIRFXBKL_cjs.OP_RETURN_EMPTY_PKSCRIPT
|
|
20537
20410
|
});
|
|
20538
20411
|
return tx;
|
|
20539
20412
|
}
|
|
20540
20413
|
function craftBIP322ToSignSimple(toSpend, pkScript) {
|
|
20541
|
-
const tx = new
|
|
20414
|
+
const tx = new chunkZIRFXBKL_cjs.Transaction({ version: 0 });
|
|
20542
20415
|
tx.addInput({
|
|
20543
20416
|
txid: toSpend.id,
|
|
20544
20417
|
index: 0,
|
|
@@ -20550,7 +20423,7 @@ function craftBIP322ToSignSimple(toSpend, pkScript) {
|
|
|
20550
20423
|
});
|
|
20551
20424
|
tx.addOutput({
|
|
20552
20425
|
amount: 0n,
|
|
20553
|
-
script:
|
|
20426
|
+
script: chunkZIRFXBKL_cjs.OP_RETURN_EMPTY_PKSCRIPT
|
|
20554
20427
|
});
|
|
20555
20428
|
return tx;
|
|
20556
20429
|
}
|
|
@@ -20681,7 +20554,7 @@ var RestEmulatorProvider = class {
|
|
|
20681
20554
|
}
|
|
20682
20555
|
};
|
|
20683
20556
|
function finalizeVirtualTx(type, psbtBase64) {
|
|
20684
|
-
const tx =
|
|
20557
|
+
const tx = chunkZIRFXBKL_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
|
|
20685
20558
|
if (type === "INDEXER_CHAINED_TX_TYPE_TREE" /* TREE */) {
|
|
20686
20559
|
const input = tx.getInput(0);
|
|
20687
20560
|
if (!input) {
|
|
@@ -20708,14 +20581,14 @@ var ExitPathError = class extends Error {
|
|
|
20708
20581
|
reason;
|
|
20709
20582
|
};
|
|
20710
20583
|
function delayWeight(sequence) {
|
|
20711
|
-
const t =
|
|
20584
|
+
const t = chunkZIRFXBKL_cjs.sequenceToTimelock(sequence);
|
|
20712
20585
|
return t.type === "blocks" ? Number(t.value) : Number(t.value) / 600;
|
|
20713
20586
|
}
|
|
20714
20587
|
async function resolveUnilateralPath(params) {
|
|
20715
20588
|
const { vtxo, scriptHex, contractRepository } = params;
|
|
20716
20589
|
const contract = contractRepository ? (await contractRepository.getContracts({ script: scriptHex }))[0] : void 0;
|
|
20717
20590
|
if (contract) {
|
|
20718
|
-
const handler =
|
|
20591
|
+
const handler = chunkPXPPZF5K_cjs.contractHandlers.get(contract.type);
|
|
20719
20592
|
if (!handler) {
|
|
20720
20593
|
throw new ExitPathError(
|
|
20721
20594
|
"no-handler",
|
|
@@ -20738,12 +20611,12 @@ async function resolveUnilateralPath(params) {
|
|
|
20738
20611
|
paths.sort((a, b) => delayWeight(a.sequence) - delayWeight(b.sequence));
|
|
20739
20612
|
return { selection: paths[0], label: `${contract.type}:unilateral` };
|
|
20740
20613
|
}
|
|
20741
|
-
const decoded =
|
|
20614
|
+
const decoded = chunkZIRFXBKL_cjs.VtxoScript.decode(vtxo.tapTree);
|
|
20742
20615
|
let best;
|
|
20743
20616
|
for (const exit of decoded.exitPaths()) {
|
|
20744
20617
|
const leaf = decoded.findLeaf(base.hex.encode(exit.script));
|
|
20745
20618
|
if (!leaf) continue;
|
|
20746
|
-
const sequence =
|
|
20619
|
+
const sequence = chunkZIRFXBKL_cjs.timelockToSequence(exit.params.timelock);
|
|
20747
20620
|
const weight = delayWeight(sequence);
|
|
20748
20621
|
if (!best || weight < best.weight) {
|
|
20749
20622
|
best = { selection: { leaf, sequence }, weight };
|
|
@@ -20929,14 +20802,14 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
20929
20802
|
}
|
|
20930
20803
|
const resolved = await resolveUnilateralPath({
|
|
20931
20804
|
vtxo,
|
|
20932
|
-
scriptHex: base.hex.encode(
|
|
20805
|
+
scriptHex: base.hex.encode(chunkZIRFXBKL_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
|
|
20933
20806
|
contractRepository: wallet.contractRepository,
|
|
20934
20807
|
walletPubKeyHex: base.hex.encode(await wallet.identity.xOnlyPublicKey()),
|
|
20935
20808
|
currentTime: Date.now()
|
|
20936
20809
|
});
|
|
20937
20810
|
const spendingLeaf = resolved.selection.leaf;
|
|
20938
20811
|
const sequence = resolved.selection.sequence;
|
|
20939
|
-
const timelock =
|
|
20812
|
+
const timelock = chunkZIRFXBKL_cjs.sequenceToTimelock(sequence);
|
|
20940
20813
|
const elapsed = timelock.type === "blocks" ? chainTip.height >= txStatus.blockHeight + Number(timelock.value) : chainTip.time >= txStatus.blockTime + Number(timelock.value);
|
|
20941
20814
|
if (!elapsed) {
|
|
20942
20815
|
throw new Error(`no available exit path found for vtxo ${vtxo.txid}:${vtxo.vout}`);
|
|
@@ -20949,7 +20822,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
20949
20822
|
sequence,
|
|
20950
20823
|
witnessUtxo: {
|
|
20951
20824
|
amount: BigInt(vtxo.value),
|
|
20952
|
-
script:
|
|
20825
|
+
script: chunkZIRFXBKL_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
|
|
20953
20826
|
},
|
|
20954
20827
|
sighashType: btcSigner.SigHash.DEFAULT
|
|
20955
20828
|
});
|
|
@@ -20959,7 +20832,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
20959
20832
|
btcSigner.TaprootControlBlock.encode(spendingLeaf[0]).length
|
|
20960
20833
|
);
|
|
20961
20834
|
}
|
|
20962
|
-
const tx = new
|
|
20835
|
+
const tx = new chunkZIRFXBKL_cjs.Transaction({ version: 2 });
|
|
20963
20836
|
for (const input of inputs) {
|
|
20964
20837
|
tx.addInput(input);
|
|
20965
20838
|
}
|
|
@@ -21026,7 +20899,7 @@ async function buildSignedSweep(params) {
|
|
|
21026
20899
|
`uneconomic vtxo ${vtxo.txid}:${vtxo.vout}: value ${vtxo.value} - fee ${fee} < dust`
|
|
21027
20900
|
);
|
|
21028
20901
|
}
|
|
21029
|
-
const tx = new
|
|
20902
|
+
const tx = new chunkZIRFXBKL_cjs.Transaction({ version: 2 });
|
|
21030
20903
|
tx.addInput({
|
|
21031
20904
|
txid: vtxo.txid,
|
|
21032
20905
|
index: vtxo.vout,
|
|
@@ -21051,7 +20924,7 @@ async function buildSignedSweep(params) {
|
|
|
21051
20924
|
finalScriptWitness: [
|
|
21052
20925
|
tapScriptSig[0][1],
|
|
21053
20926
|
...path.extraWitness,
|
|
21054
|
-
|
|
20927
|
+
chunkZIRFXBKL_cjs.scriptFromTapLeafScript(path.leaf),
|
|
21055
20928
|
btcSigner.TaprootControlBlock.encode(controlBlock)
|
|
21056
20929
|
]
|
|
21057
20930
|
});
|
|
@@ -21081,7 +20954,7 @@ async function resolveFeeRate(opts) {
|
|
|
21081
20954
|
}
|
|
21082
20955
|
async function selectExitVtxos(opts) {
|
|
21083
20956
|
if (!opts.vtxos) return opts.wallet.getVtxos();
|
|
21084
|
-
const res = await
|
|
20957
|
+
const res = await chunkZIRFXBKL_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
|
|
21085
20958
|
const tapTrees = /* @__PURE__ */ new Map();
|
|
21086
20959
|
const out = [];
|
|
21087
20960
|
for (const vtxo of res.vtxos) {
|
|
@@ -21096,7 +20969,7 @@ async function selectExitVtxos(opts) {
|
|
|
21096
20969
|
`no contract registered for vtxo script ${vtxo.script} \u2014 register the contract before exiting`
|
|
21097
20970
|
);
|
|
21098
20971
|
}
|
|
21099
|
-
const handler =
|
|
20972
|
+
const handler = chunkPXPPZF5K_cjs.contractHandlers.get(contract.type);
|
|
21100
20973
|
if (!handler) {
|
|
21101
20974
|
throw new Error(`no contract handler registered for type '${contract.type}'`);
|
|
21102
20975
|
}
|
|
@@ -21126,7 +20999,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
21126
20999
|
if (pendingNodes.length > 0) {
|
|
21127
21000
|
const txs = await resolver.getVirtualTxs(pendingNodes.map((n) => n.txid));
|
|
21128
21001
|
for (const psbt of txs) {
|
|
21129
|
-
psbts.set(
|
|
21002
|
+
psbts.set(chunkZIRFXBKL_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
21130
21003
|
}
|
|
21131
21004
|
}
|
|
21132
21005
|
const childVsize = Number(
|
|
@@ -21162,7 +21035,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
21162
21035
|
try {
|
|
21163
21036
|
const resolved = await resolveUnilateralPath({
|
|
21164
21037
|
vtxo,
|
|
21165
|
-
scriptHex: base.hex.encode(
|
|
21038
|
+
scriptHex: base.hex.encode(chunkZIRFXBKL_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
|
|
21166
21039
|
contractRepository: wallet.contractRepository,
|
|
21167
21040
|
walletPubKeyHex,
|
|
21168
21041
|
currentTime: Date.now()
|
|
@@ -21181,7 +21054,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
21181
21054
|
});
|
|
21182
21055
|
continue;
|
|
21183
21056
|
}
|
|
21184
|
-
const t =
|
|
21057
|
+
const t = chunkZIRFXBKL_cjs.sequenceToTimelock(resolved.selection.sequence);
|
|
21185
21058
|
const delay = { type: t.type, value: Number(t.value) };
|
|
21186
21059
|
infos.push({ outpoint, value: vtxo.value, sweepFee, path: resolved.label, delay });
|
|
21187
21060
|
sweeps.push({ vtxo, resolved, sweepFee, delay });
|
|
@@ -21520,7 +21393,7 @@ async function prepare(opts) {
|
|
|
21520
21393
|
txid: sweep.vtxo.txid,
|
|
21521
21394
|
vout: sweep.vtxo.vout,
|
|
21522
21395
|
value: sweep.vtxo.value,
|
|
21523
|
-
pkScript:
|
|
21396
|
+
pkScript: chunkZIRFXBKL_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
|
|
21524
21397
|
},
|
|
21525
21398
|
path: sweep.resolved.selection,
|
|
21526
21399
|
outputAddress: opts.sweepAddress,
|
|
@@ -21605,7 +21478,7 @@ async function prepare(opts) {
|
|
|
21605
21478
|
if (newFee <= splitterFee) break;
|
|
21606
21479
|
splitterFee = newFee;
|
|
21607
21480
|
}
|
|
21608
|
-
const splitter = new
|
|
21481
|
+
const splitter = new chunkZIRFXBKL_cjs.Transaction({ version: 2 });
|
|
21609
21482
|
for (const coin of selected.inputs) {
|
|
21610
21483
|
splitter.addInput({
|
|
21611
21484
|
txid: coin.txid,
|
|
@@ -21748,41 +21621,41 @@ var UnilateralExit = {
|
|
|
21748
21621
|
// src/arkade/index.ts
|
|
21749
21622
|
var arkade_exports = {};
|
|
21750
21623
|
chunk5BLDMQED_cjs.__export(arkade_exports, {
|
|
21751
|
-
ARKADE_OP: () =>
|
|
21752
|
-
ARKADE_OPCODES: () =>
|
|
21753
|
-
ARKADE_OPCODE_NAMES: () =>
|
|
21754
|
-
ARKADE_OPCODE_VALUES: () =>
|
|
21755
|
-
ARKADE_OPS: () =>
|
|
21624
|
+
ARKADE_OP: () => chunkPXPPZF5K_cjs.ARKADE_OP,
|
|
21625
|
+
ARKADE_OPCODES: () => chunkPXPPZF5K_cjs.ARKADE_OPCODES,
|
|
21626
|
+
ARKADE_OPCODE_NAMES: () => chunkPXPPZF5K_cjs.ARKADE_OPCODE_NAMES,
|
|
21627
|
+
ARKADE_OPCODE_VALUES: () => chunkPXPPZF5K_cjs.ARKADE_OPCODE_VALUES,
|
|
21628
|
+
ARKADE_OPS: () => chunkPXPPZF5K_cjs.ARKADE_OPS,
|
|
21756
21629
|
Arkade: () => Arkade,
|
|
21757
21630
|
ArkadeContract: () => ArkadeContract,
|
|
21758
|
-
ArkadeProgramScript: () =>
|
|
21759
|
-
ArkadeScript: () =>
|
|
21631
|
+
ArkadeProgramScript: () => chunkPXPPZF5K_cjs.ArkadeProgramScript,
|
|
21632
|
+
ArkadeScript: () => chunkPXPPZF5K_cjs.ArkadeScript,
|
|
21760
21633
|
ArkadeTransactionBuilder: () => ArkadeTransactionBuilder,
|
|
21761
|
-
BigNum: () =>
|
|
21634
|
+
BigNum: () => chunkPXPPZF5K_cjs.bignum_exports,
|
|
21762
21635
|
OP: () => btcSigner.OP,
|
|
21763
|
-
OPCODE_NAMES: () =>
|
|
21764
|
-
OPCODE_VALUES: () =>
|
|
21765
|
-
SUPPORTED_PROGRAM_VERSION: () =>
|
|
21636
|
+
OPCODE_NAMES: () => chunkPXPPZF5K_cjs.OPCODE_NAMES,
|
|
21637
|
+
OPCODE_VALUES: () => chunkPXPPZF5K_cjs.OPCODE_VALUES,
|
|
21638
|
+
SUPPORTED_PROGRAM_VERSION: () => chunkPXPPZF5K_cjs.SUPPORTED_PROGRAM_VERSION,
|
|
21766
21639
|
Script: () => btcSigner.Script,
|
|
21767
|
-
arkadeScriptHash: () =>
|
|
21768
|
-
arkadeWitnessHash: () =>
|
|
21769
|
-
asmToBytes: () =>
|
|
21770
|
-
bytesToASM: () =>
|
|
21771
|
-
computeArkadeScriptPublicKey: () =>
|
|
21640
|
+
arkadeScriptHash: () => chunkPXPPZF5K_cjs.arkadeScriptHash,
|
|
21641
|
+
arkadeWitnessHash: () => chunkPXPPZF5K_cjs.arkadeWitnessHash,
|
|
21642
|
+
asmToBytes: () => chunkPXPPZF5K_cjs.asmToBytes,
|
|
21643
|
+
bytesToASM: () => chunkPXPPZF5K_cjs.bytesToASM,
|
|
21644
|
+
computeArkadeScriptPublicKey: () => chunkPXPPZF5K_cjs.computeArkadeScriptPublicKey,
|
|
21772
21645
|
createArkadeBatchHandler: () => createArkadeBatchHandler,
|
|
21773
|
-
deserializeArkadeContractParams: () =>
|
|
21774
|
-
fromASM: () =>
|
|
21775
|
-
getOpcodeName: () =>
|
|
21776
|
-
getOpcodeValue: () =>
|
|
21777
|
-
parseArtifact: () =>
|
|
21778
|
-
resolveAsm: () =>
|
|
21779
|
-
serializeArkadeContractParams: () =>
|
|
21780
|
-
stringifyArtifact: () =>
|
|
21781
|
-
toASM: () =>
|
|
21782
|
-
validateProgram: () =>
|
|
21783
|
-
witnessRefToBytes: () =>
|
|
21646
|
+
deserializeArkadeContractParams: () => chunkPXPPZF5K_cjs.deserializeArkadeContractParams,
|
|
21647
|
+
fromASM: () => chunkPXPPZF5K_cjs.fromASM,
|
|
21648
|
+
getOpcodeName: () => chunkPXPPZF5K_cjs.getOpcodeName,
|
|
21649
|
+
getOpcodeValue: () => chunkPXPPZF5K_cjs.getOpcodeValue,
|
|
21650
|
+
parseArtifact: () => chunkPXPPZF5K_cjs.parseArtifact,
|
|
21651
|
+
resolveAsm: () => chunkPXPPZF5K_cjs.resolveAsm,
|
|
21652
|
+
serializeArkadeContractParams: () => chunkPXPPZF5K_cjs.serializeArkadeContractParams,
|
|
21653
|
+
stringifyArtifact: () => chunkPXPPZF5K_cjs.stringifyArtifact,
|
|
21654
|
+
toASM: () => chunkPXPPZF5K_cjs.toASM,
|
|
21655
|
+
validateProgram: () => chunkPXPPZF5K_cjs.validateProgram,
|
|
21656
|
+
witnessRefToBytes: () => chunkPXPPZF5K_cjs.witnessRefToBytes
|
|
21784
21657
|
});
|
|
21785
|
-
var isVtxoCoin = (input) =>
|
|
21658
|
+
var isVtxoCoin = (input) => chunkZIRFXBKL_cjs.isVirtualCoin(input);
|
|
21786
21659
|
function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message, session, arkProvider, emulator, network, recipients, batchExpiryPolicy) {
|
|
21787
21660
|
let batchId;
|
|
21788
21661
|
let sweepTapTreeRoot;
|
|
@@ -21803,21 +21676,23 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
21803
21676
|
);
|
|
21804
21677
|
await arkProvider.confirmRegistration(intentId);
|
|
21805
21678
|
batchId = event.id;
|
|
21806
|
-
const sweepTapscript =
|
|
21679
|
+
const sweepTapscript = chunkZIRFXBKL_cjs.CSVMultisigTapscript.encode({
|
|
21807
21680
|
timelock,
|
|
21808
|
-
pubkeys: [base.hex.decode(info.forfeitPubkey)
|
|
21681
|
+
pubkeys: [chunkPXPPZF5K_cjs.toXOnly(base.hex.decode(info.forfeitPubkey), "forfeit key")]
|
|
21809
21682
|
}).script;
|
|
21810
21683
|
sweepTapTreeRoot = payment_js.tapLeafHash(sweepTapscript);
|
|
21811
21684
|
return { skip: false };
|
|
21812
21685
|
},
|
|
21813
21686
|
onTreeSigningStarted: async (event, vtxoTree) => {
|
|
21814
21687
|
const signerPubKey = await session.getPublicKey();
|
|
21815
|
-
const xonlySignerPubKey =
|
|
21816
|
-
const xOnlyPubkeys = event.cosignersPublicKeys.map(
|
|
21688
|
+
const xonlySignerPubKey = chunkPXPPZF5K_cjs.toXOnly(signerPubKey, "signer key");
|
|
21689
|
+
const xOnlyPubkeys = event.cosignersPublicKeys.map(
|
|
21690
|
+
(k) => base.hex.encode(chunkPXPPZF5K_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
|
|
21691
|
+
);
|
|
21817
21692
|
if (!xOnlyPubkeys.includes(base.hex.encode(xonlySignerPubKey))) {
|
|
21818
21693
|
return { skip: true };
|
|
21819
21694
|
}
|
|
21820
|
-
const commitmentTx =
|
|
21695
|
+
const commitmentTx = chunkZIRFXBKL_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
|
|
21821
21696
|
validateVtxoTxGraph(vtxoTree, commitmentTx, sweepTapTreeRoot);
|
|
21822
21697
|
if (recipients && recipients.length > 0) {
|
|
21823
21698
|
validateBatchRecipients(commitmentTx, vtxoTree.leaves(), recipients, network);
|
|
@@ -21849,7 +21724,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
21849
21724
|
if (connectorTree) {
|
|
21850
21725
|
validateConnectorsTxGraph(event.commitmentTx, connectorTree);
|
|
21851
21726
|
}
|
|
21852
|
-
let commitmentPsbt =
|
|
21727
|
+
let commitmentPsbt = chunkZIRFXBKL_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
|
|
21853
21728
|
assertFinalCommitmentMatchesValidated(
|
|
21854
21729
|
commitmentPsbt,
|
|
21855
21730
|
validatedCommitmentTxid,
|
|
@@ -21884,7 +21759,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
21884
21759
|
boardingIndices.push(boardingIdx);
|
|
21885
21760
|
continue;
|
|
21886
21761
|
}
|
|
21887
|
-
if (
|
|
21762
|
+
if (chunkZIRFXBKL_cjs.isRecoverable(input) || isSubdust(input, info.dust)) {
|
|
21888
21763
|
continue;
|
|
21889
21764
|
}
|
|
21890
21765
|
if (connectorIndex >= connectorLeaves.length) {
|
|
@@ -21905,7 +21780,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
21905
21780
|
index: input.vout,
|
|
21906
21781
|
witnessUtxo: {
|
|
21907
21782
|
amount: BigInt(input.value),
|
|
21908
|
-
script:
|
|
21783
|
+
script: chunkZIRFXBKL_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
21909
21784
|
},
|
|
21910
21785
|
sighashType: btcSigner.SigHash.DEFAULT,
|
|
21911
21786
|
tapLeafScript: [input.forfeitTapLeafScript]
|
|
@@ -21996,17 +21871,16 @@ var Arkade = class _Arkade {
|
|
|
21996
21871
|
/** Connect and resolve the server key, checkpoint closure and (if present) the co-signer key. */
|
|
21997
21872
|
static async connect(opts) {
|
|
21998
21873
|
const info = await opts.arkade.getInfo();
|
|
21999
|
-
const serverKey = base.hex.decode(info.signerPubkey)
|
|
22000
|
-
const checkpoint =
|
|
22001
|
-
const network = opts.network ??
|
|
21874
|
+
const serverKey = chunkPXPPZF5K_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
|
|
21875
|
+
const checkpoint = chunkZIRFXBKL_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
|
|
21876
|
+
const network = opts.network ?? chunkZIRFXBKL_cjs.DEFAULT_NETWORK;
|
|
22002
21877
|
let emulatorKey;
|
|
22003
21878
|
if (opts.emulator) {
|
|
22004
|
-
emulatorKey = base.hex.decode(
|
|
21879
|
+
emulatorKey = base.hex.decode(chunkZIRFXBKL_cjs.resolveEmulatorPubkey(network, opts.emulatorPubkey));
|
|
22005
21880
|
}
|
|
22006
21881
|
let userKey;
|
|
22007
21882
|
if (opts.identity) {
|
|
22008
|
-
|
|
22009
|
-
userKey = pub.length === 33 ? pub.slice(1) : pub;
|
|
21883
|
+
userKey = chunkPXPPZF5K_cjs.toXOnly(await opts.identity.xOnlyPublicKey(), "identity key");
|
|
22010
21884
|
}
|
|
22011
21885
|
return new _Arkade({
|
|
22012
21886
|
arkProvider: opts.arkade,
|
|
@@ -22032,7 +21906,7 @@ var Arkade = class _Arkade {
|
|
|
22032
21906
|
* key respectively; explicit args always win.
|
|
22033
21907
|
*/
|
|
22034
21908
|
contract(program, args = {}) {
|
|
22035
|
-
const declared = (program.params ?? []).map(
|
|
21909
|
+
const declared = (program.params ?? []).map(chunkPXPPZF5K_cjs.inputName);
|
|
22036
21910
|
if (declared.includes("server") && args.server === void 0) {
|
|
22037
21911
|
args = { ...args, server: this.serverKey };
|
|
22038
21912
|
}
|
|
@@ -22052,7 +21926,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
22052
21926
|
userKey: client.userKey,
|
|
22053
21927
|
emulatorKey: client.emulatorKey
|
|
22054
21928
|
};
|
|
22055
|
-
this.vtxoScript = new
|
|
21929
|
+
this.vtxoScript = new chunkPXPPZF5K_cjs.ArkadeProgramScript(program, args, this.keys);
|
|
22056
21930
|
this.tapTree = this.vtxoScript.encode();
|
|
22057
21931
|
this.compiled = this.vtxoScript.compiled;
|
|
22058
21932
|
}
|
|
@@ -22080,7 +21954,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
22080
21954
|
`ArkadeContract.fromContract: expected contract type 'arkade', got '${contract.type}'`
|
|
22081
21955
|
);
|
|
22082
21956
|
}
|
|
22083
|
-
const typed =
|
|
21957
|
+
const typed = chunkPXPPZF5K_cjs.deserializeArkadeContractParams(contract.params);
|
|
22084
21958
|
return new _ArkadeContract(client, typed.program, typed.args, {
|
|
22085
21959
|
serverKey: typed.serverKey,
|
|
22086
21960
|
userKey: typed.userKey,
|
|
@@ -22121,7 +21995,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
22121
21995
|
toContractParams() {
|
|
22122
21996
|
return {
|
|
22123
21997
|
type: "arkade",
|
|
22124
|
-
params:
|
|
21998
|
+
params: chunkPXPPZF5K_cjs.serializeArkadeContractParams({
|
|
22125
21999
|
program: this.program,
|
|
22126
22000
|
args: this.args,
|
|
22127
22001
|
serverKey: this.keys.serverKey,
|
|
@@ -22166,13 +22040,13 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
22166
22040
|
const [registered] = await manager.getContracts({ script: scriptHex });
|
|
22167
22041
|
if (registered) {
|
|
22168
22042
|
const [withVtxos] = await manager.getContractsWithVtxos({ script: scriptHex });
|
|
22169
|
-
return (withVtxos?.vtxos ?? []).filter((v) => !
|
|
22043
|
+
return (withVtxos?.vtxos ?? []).filter((v) => !chunkZIRFXBKL_cjs.hasTerminalSpend(v));
|
|
22170
22044
|
}
|
|
22171
22045
|
}
|
|
22172
22046
|
if (!this.client.indexer) {
|
|
22173
22047
|
throw new Error("ArkadeContract.getUtxos: an indexer is required");
|
|
22174
22048
|
}
|
|
22175
|
-
const { vtxos } = await
|
|
22049
|
+
const { vtxos } = await chunkZIRFXBKL_cjs.getNormalizedVtxos(this.client.indexer, {
|
|
22176
22050
|
scripts: [scriptHex],
|
|
22177
22051
|
spendableOnly: true
|
|
22178
22052
|
});
|
|
@@ -22274,12 +22148,12 @@ var ArkadeTransactionBuilder = class {
|
|
|
22274
22148
|
this.contract.client.checkpoint
|
|
22275
22149
|
);
|
|
22276
22150
|
if (coin.sourceTx) {
|
|
22277
|
-
|
|
22151
|
+
chunkZIRFXBKL_cjs.setArkPsbtField(arkTx, 0, chunkZIRFXBKL_cjs.PrevArkTxField, coin.sourceTx);
|
|
22278
22152
|
}
|
|
22279
22153
|
const condition = (def.tapscript.witness ?? []).map((w) => this.witnessBytes(w));
|
|
22280
22154
|
if (condition.length > 0) {
|
|
22281
|
-
|
|
22282
|
-
|
|
22155
|
+
chunkZIRFXBKL_cjs.setArkPsbtField(arkTx, 0, chunkZIRFXBKL_cjs.ConditionWitness, condition);
|
|
22156
|
+
chunkZIRFXBKL_cjs.setArkPsbtField(checkpoints[0], 0, chunkZIRFXBKL_cjs.ConditionWitness, condition);
|
|
22283
22157
|
}
|
|
22284
22158
|
const packets = [];
|
|
22285
22159
|
if (this.assetSpecs.length > 0) {
|
|
@@ -22318,7 +22192,7 @@ var ArkadeTransactionBuilder = class {
|
|
|
22318
22192
|
base.base64.encode(signedArk2.toPSBT()),
|
|
22319
22193
|
signedCps.map((c) => base.base64.encode(c.toPSBT()))
|
|
22320
22194
|
);
|
|
22321
|
-
const txid =
|
|
22195
|
+
const txid = chunkZIRFXBKL_cjs.Transaction.fromPSBT(base.base64.decode(res2.signedArkTx)).id;
|
|
22322
22196
|
return {
|
|
22323
22197
|
txid,
|
|
22324
22198
|
signedArkTx: res2.signedArkTx,
|
|
@@ -22377,23 +22251,23 @@ var ArkadeTransactionBuilder = class {
|
|
|
22377
22251
|
}
|
|
22378
22252
|
buildAssetPacket() {
|
|
22379
22253
|
const groups = this.assetSpecs.map((s) => {
|
|
22380
|
-
const id = typeof s.assetId === "string" ?
|
|
22381
|
-
return
|
|
22254
|
+
const id = typeof s.assetId === "string" ? chunk3S3JZUEN_cjs.AssetId.fromString(s.assetId) : chunk3S3JZUEN_cjs.AssetId.fromBytes(s.assetId);
|
|
22255
|
+
return chunk3S3JZUEN_cjs.AssetGroup.create(
|
|
22382
22256
|
id,
|
|
22383
22257
|
null,
|
|
22384
|
-
s.inputs.map((i) =>
|
|
22385
|
-
s.outputs.map((o) =>
|
|
22386
|
-
(s.metadata ?? []).map((m) =>
|
|
22258
|
+
s.inputs.map((i) => chunk3S3JZUEN_cjs.AssetInput.create(i.vin, i.amount)),
|
|
22259
|
+
s.outputs.map((o) => chunk3S3JZUEN_cjs.AssetOutput.create(o.vout, o.amount)),
|
|
22260
|
+
(s.metadata ?? []).map((m) => chunk3S3JZUEN_cjs.Metadata.create(m.key, m.value))
|
|
22387
22261
|
);
|
|
22388
22262
|
});
|
|
22389
|
-
return
|
|
22263
|
+
return chunk3S3JZUEN_cjs.Packet.create(groups);
|
|
22390
22264
|
}
|
|
22391
22265
|
witnessBytes(ref) {
|
|
22392
|
-
return
|
|
22266
|
+
return chunkPXPPZF5K_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
|
|
22393
22267
|
}
|
|
22394
22268
|
};
|
|
22395
22269
|
function bindInputs(fn, callArgs) {
|
|
22396
|
-
const names = (fn.def.inputs ?? []).map(
|
|
22270
|
+
const names = (fn.def.inputs ?? []).map(chunkPXPPZF5K_cjs.inputName);
|
|
22397
22271
|
if (callArgs.length !== names.length) {
|
|
22398
22272
|
throw new Error(`${fn.name}: expected ${names.length} argument(s), got ${callArgs.length}`);
|
|
22399
22273
|
}
|
|
@@ -22792,7 +22666,9 @@ exports.ArkadeCashCreateError = ArkadeCashCreateError;
|
|
|
22792
22666
|
exports.AssetManager = AssetManager;
|
|
22793
22667
|
exports.BIP21 = BIP21;
|
|
22794
22668
|
exports.BIP21Error = BIP21Error;
|
|
22669
|
+
exports.BLOCKED_UPGRADE_TIMEOUT_MS = BLOCKED_UPGRADE_TIMEOUT_MS;
|
|
22795
22670
|
exports.ChainedTxType = ChainedTxType;
|
|
22671
|
+
exports.ConnectionDisposedError = ConnectionDisposedError;
|
|
22796
22672
|
exports.ContractManager = ContractManager;
|
|
22797
22673
|
exports.ContractRepositoryImpl = ContractRepositoryImpl;
|
|
22798
22674
|
exports.ContractWatcher = ContractWatcher;
|
|
@@ -22800,6 +22676,7 @@ exports.DB_VERSION = DB_VERSION;
|
|
|
22800
22676
|
exports.DEFAULT_MESSAGE_TIMEOUTS = DEFAULT_MESSAGE_TIMEOUTS;
|
|
22801
22677
|
exports.DEFAULT_MIN_BATCH_EXPIRY_SECONDS = DEFAULT_MIN_BATCH_EXPIRY_SECONDS;
|
|
22802
22678
|
exports.DEFAULT_MIN_CHECKPOINT_EXIT_DELAY_SECONDS = DEFAULT_MIN_CHECKPOINT_EXIT_DELAY_SECONDS;
|
|
22679
|
+
exports.DatabaseUpgradeBlockedError = DatabaseUpgradeBlockedError;
|
|
22803
22680
|
exports.DelegateManagerImpl = DelegateManagerImpl;
|
|
22804
22681
|
exports.DelegateNotConfiguredError = DelegateNotConfiguredError;
|
|
22805
22682
|
exports.DelegatorManagerImpl = DelegatorManagerImpl;
|
|
@@ -22881,6 +22758,7 @@ exports.assertSubmittedArkTxid = assertSubmittedArkTxid;
|
|
|
22881
22758
|
exports.assertValidBatchExpiry = assertValidBatchExpiry;
|
|
22882
22759
|
exports.assertValidServerUnrollScript = assertValidServerUnrollScript;
|
|
22883
22760
|
exports.assetMintResolver = assetMintResolver;
|
|
22761
|
+
exports.awaitTransaction = awaitTransaction;
|
|
22884
22762
|
exports.boardingResolver = boardingResolver;
|
|
22885
22763
|
exports.btcTarget = btcTarget;
|
|
22886
22764
|
exports.buildForfeitTx = buildForfeitTx;
|
|
@@ -22901,9 +22779,11 @@ exports.createAssetPacket = createAssetPacket;
|
|
|
22901
22779
|
exports.createDefaultActivityRegistry = createDefaultActivityRegistry;
|
|
22902
22780
|
exports.createDefaultPaymentRouter = createDefaultPaymentRouter;
|
|
22903
22781
|
exports.createExitChainResolver = createExitChainResolver;
|
|
22782
|
+
exports.createManagedConnection = createManagedConnection;
|
|
22904
22783
|
exports.decodeArkContract = decodeArkContract;
|
|
22905
22784
|
exports.defaultBatchExpiryPolicy = defaultBatchExpiryPolicy;
|
|
22906
22785
|
exports.defaultCheckpointExitDelayPolicy = defaultCheckpointExitDelayPolicy;
|
|
22786
|
+
exports.deleteByIndex = deleteByIndex;
|
|
22907
22787
|
exports.deserializeAssets = deserializeAssets;
|
|
22908
22788
|
exports.deserializeExitPackage = deserializeExitPackage;
|
|
22909
22789
|
exports.deserializeUtxo = deserializeUtxo;
|
|
@@ -22912,6 +22792,7 @@ exports.encodeArkContract = encodeArkContract;
|
|
|
22912
22792
|
exports.extendVirtualCoinForContract = extendVirtualCoinForContract;
|
|
22913
22793
|
exports.gateExclusion = gateExclusion;
|
|
22914
22794
|
exports.gatedContracts = gatedContracts;
|
|
22795
|
+
exports.getAllByIndexValues = getAllByIndexValues;
|
|
22915
22796
|
exports.getMigrationStatus = getMigrationStatus;
|
|
22916
22797
|
exports.getRandomId = getRandomId;
|
|
22917
22798
|
exports.hasBoardingTxExpired = hasBoardingTxExpired;
|
|
@@ -22950,6 +22831,7 @@ exports.onchainRail = onchainRail;
|
|
|
22950
22831
|
exports.openDatabase = openDatabase;
|
|
22951
22832
|
exports.outpointExclusion = outpointExclusion;
|
|
22952
22833
|
exports.outpointReasons = outpointReasons;
|
|
22834
|
+
exports.promisifyRequest = promisifyRequest;
|
|
22953
22835
|
exports.provisionClaimSecret = provisionClaimSecret;
|
|
22954
22836
|
exports.provisionRefundKey = provisionRefundKey;
|
|
22955
22837
|
exports.requiresMigration = requiresMigration;
|
|
@@ -22979,5 +22861,5 @@ exports.validateVtxoTxGraph = validateVtxoTxGraph;
|
|
|
22979
22861
|
exports.verifyTapscriptSignatures = verifyTapscriptSignatures;
|
|
22980
22862
|
exports.waitForIncomingFunds = waitForIncomingFunds;
|
|
22981
22863
|
exports.warnAndFilterVtxosForScript = warnAndFilterVtxosForScript;
|
|
22982
|
-
//# sourceMappingURL=chunk-
|
|
22983
|
-
//# sourceMappingURL=chunk-
|
|
22864
|
+
//# sourceMappingURL=chunk-5E6IZNRG.cjs.map
|
|
22865
|
+
//# sourceMappingURL=chunk-5E6IZNRG.cjs.map
|