@arkade-os/sdk 0.4.69 → 0.5.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -5
- package/dist/adapters/expo.cjs +5 -5
- package/dist/adapters/expo.d.cts +2 -2
- package/dist/adapters/expo.d.ts +2 -2
- package/dist/adapters/expo.js +3 -3
- package/dist/adapters/indexedDB.cjs +5 -5
- package/dist/adapters/indexedDB.js +4 -4
- package/dist/{asyncStorageTaskQueue-BgUJN-3X.d.ts → asyncStorageTaskQueue-DAs_n1xr.d.ts} +2 -2
- package/dist/{asyncStorageTaskQueue-Cstx6hS7.d.cts → asyncStorageTaskQueue-DqGRG66E.d.cts} +2 -2
- package/dist/{chunk-L5SCQYHF.js → chunk-6COJWPBO.js} +19 -9
- package/dist/chunk-6COJWPBO.js.map +1 -0
- package/dist/{chunk-XQPN5YP2.cjs → chunk-KB7OP3FG.cjs} +17 -17
- package/dist/{chunk-XQPN5YP2.cjs.map → chunk-KB7OP3FG.cjs.map} +1 -1
- package/dist/{chunk-XLWDX7QZ.js → chunk-LPK4UBNJ.js} +4 -4
- package/dist/{chunk-XLWDX7QZ.js.map → chunk-LPK4UBNJ.js.map} +1 -1
- package/dist/{chunk-MNMPGEK2.js → chunk-MEJSBJVH.js} +4 -4
- package/dist/{chunk-MNMPGEK2.js.map → chunk-MEJSBJVH.js.map} +1 -1
- package/dist/{chunk-HQ4DMGA4.cjs → chunk-MXY23OPP.cjs} +10 -10
- package/dist/{chunk-HQ4DMGA4.cjs.map → chunk-MXY23OPP.cjs.map} +1 -1
- package/dist/{chunk-WIFL5QYZ.cjs → chunk-Q5WQ4Y2I.cjs} +53 -54
- package/dist/chunk-Q5WQ4Y2I.cjs.map +1 -0
- package/dist/{chunk-5MLC2HU3.cjs → chunk-RZ2NGS6A.cjs} +19 -7
- package/dist/chunk-RZ2NGS6A.cjs.map +1 -0
- package/dist/{chunk-YG7T6LI3.js → chunk-SG4XYCS7.js} +3 -3
- package/dist/{chunk-YG7T6LI3.js.map → chunk-SG4XYCS7.js.map} +1 -1
- package/dist/{chunk-TA7XLEP2.js → chunk-VTE3NYVD.js} +298 -41
- package/dist/chunk-VTE3NYVD.js.map +1 -0
- package/dist/{chunk-GVHUHTRH.cjs → chunk-WQIWUTYS.cjs} +17 -17
- package/dist/{chunk-GVHUHTRH.cjs.map → chunk-WQIWUTYS.cjs.map} +1 -1
- package/dist/{chunk-EBYCTLET.cjs → chunk-YEUXBECG.cjs} +727 -469
- package/dist/chunk-YEUXBECG.cjs.map +1 -0
- package/dist/{chunk-2PPL3O7Z.js → chunk-ZPSUBAWQ.js} +7 -8
- package/dist/chunk-ZPSUBAWQ.js.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-BPdzTbwN.d.ts → delegate-B9Bmrns7.d.ts} +1 -1
- package/dist/{delegate-DrwIar11.d.cts → delegate-CZzIduW4.d.cts} +1 -1
- package/dist/{hdWalletCapable-D4WH35z0.d.cts → hdWalletCapable-BIl3yLVM.d.cts} +103 -28
- package/dist/{hdWalletCapable-DyxCiNVE.d.ts → hdWalletCapable-Cr5nGpK5.d.ts} +103 -28
- package/dist/{index-TZJvbIaA.d.ts → index-Ci5MmNnK.d.cts} +7 -7
- package/dist/{index-BqhpAqqj.d.cts → index-DQ1Hb2w_.d.ts} +7 -7
- package/dist/{index-dWRqYSdS.d.ts → index-DnNIOqHS.d.cts} +168 -19
- package/dist/{index-dWRqYSdS.d.cts → index-DnNIOqHS.d.ts} +168 -19
- package/dist/index.cjs +307 -291
- package/dist/index.d.cts +121 -29
- package/dist/index.d.ts +121 -29
- 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-CzYKyJ9c.d.cts → taskRunner-BDb5Ee2J.d.cts} +2 -2
- package/dist/{taskRunner-D2fnbqYw.d.ts → taskRunner-F7wNJcF3.d.ts} +2 -2
- 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 +23 -14
- package/dist/wallet/expo/index.cjs.map +1 -1
- package/dist/wallet/expo/index.d.cts +7 -4
- package/dist/wallet/expo/index.d.ts +7 -4
- package/dist/wallet/expo/index.js +14 -5
- package/dist/wallet/expo/index.js.map +1 -1
- 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 +3 -2
- package/dist/chunk-2PPL3O7Z.js.map +0 -1
- package/dist/chunk-5MLC2HU3.cjs.map +0 -1
- package/dist/chunk-EBYCTLET.cjs.map +0 -1
- package/dist/chunk-L5SCQYHF.js.map +0 -1
- package/dist/chunk-TA7XLEP2.js.map +0 -1
- package/dist/chunk-WIFL5QYZ.cjs.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunkWQIWUTYS_cjs = require('./chunk-WQIWUTYS.cjs');
|
|
4
|
+
var chunkQ5WQ4Y2I_cjs = require('./chunk-Q5WQ4Y2I.cjs');
|
|
5
|
+
var chunkRZ2NGS6A_cjs = require('./chunk-RZ2NGS6A.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 = chunkRZ2NGS6A_cjs.getArkPsbtFields(tx.root, 0, chunkRZ2NGS6A_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 = chunkRZ2NGS6A_cjs.getArkPsbtFields(g.root, 0, chunkRZ2NGS6A_cjs.CosignerPublicKey).map((c) => c.key);
|
|
244
244
|
const { finalKey } = aggregateKeys(cosigners, true, {
|
|
245
245
|
taprootTweak: this.scriptRoot
|
|
246
246
|
});
|
|
@@ -323,7 +323,7 @@ var SingleKey = class _SingleKey {
|
|
|
323
323
|
async sign(tx, inputIndexes) {
|
|
324
324
|
const txCpy = tx.clone();
|
|
325
325
|
if (!inputIndexes) {
|
|
326
|
-
|
|
326
|
+
chunkRZ2NGS6A_cjs.assertAllowedSighashTypes(txCpy, ALLOWED_SIGHASH);
|
|
327
327
|
try {
|
|
328
328
|
if (!txCpy.sign(this.key, ALLOWED_SIGHASH)) {
|
|
329
329
|
throw new Error("Failed to sign transaction");
|
|
@@ -432,7 +432,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
432
432
|
let network;
|
|
433
433
|
if ("descriptor" in opts && typeof opts.descriptor === "string") {
|
|
434
434
|
descriptor = opts.descriptor;
|
|
435
|
-
network =
|
|
435
|
+
network = chunkQ5WQ4Y2I_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
436
436
|
} else {
|
|
437
437
|
network = opts.isMainnet ?? true ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
438
438
|
descriptor = descriptorsScure.scriptExpressions.trBIP32({
|
|
@@ -530,7 +530,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
530
530
|
* `StaticDescriptorProvider` for legacy single-key wallets.
|
|
531
531
|
*/
|
|
532
532
|
isOurs(descriptor) {
|
|
533
|
-
return
|
|
533
|
+
return chunkQ5WQ4Y2I_cjs.descriptorIsOurs(descriptor, this.descriptor, utils_js.pubSchnorr(this.derivedKey));
|
|
534
534
|
}
|
|
535
535
|
/**
|
|
536
536
|
* Signs each request with the key derived from its descriptor.
|
|
@@ -579,7 +579,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
579
579
|
}
|
|
580
580
|
// ── internal helpers ─────────────────────────────────────────────
|
|
581
581
|
derivePrivateKeyForDescriptor(descriptor) {
|
|
582
|
-
const network =
|
|
582
|
+
const network = chunkQ5WQ4Y2I_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
583
583
|
const expansion = descriptorsScure.expand({ descriptor, network });
|
|
584
584
|
if (expansion.isRanged) {
|
|
585
585
|
throw new Error(
|
|
@@ -604,7 +604,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
604
604
|
signTxWithKey(tx, key, inputIndexes) {
|
|
605
605
|
const txCpy = tx.clone();
|
|
606
606
|
if (!inputIndexes) {
|
|
607
|
-
|
|
607
|
+
chunkRZ2NGS6A_cjs.assertAllowedSighashTypes(txCpy, ALLOWED_SIGHASH2);
|
|
608
608
|
try {
|
|
609
609
|
if (!txCpy.sign(key, ALLOWED_SIGHASH2)) {
|
|
610
610
|
throw new Error("Failed to sign transaction");
|
|
@@ -666,7 +666,7 @@ var ReadonlyDescriptorIdentity = class _ReadonlyDescriptorIdentity {
|
|
|
666
666
|
*/
|
|
667
667
|
descriptor;
|
|
668
668
|
constructor(descriptor) {
|
|
669
|
-
const network =
|
|
669
|
+
const network = chunkQ5WQ4Y2I_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
670
670
|
let expansion;
|
|
671
671
|
try {
|
|
672
672
|
expansion = descriptorsScure.expand({ descriptor, network, index: 0 });
|
|
@@ -716,7 +716,7 @@ var ReadonlyDescriptorIdentity = class _ReadonlyDescriptorIdentity {
|
|
|
716
716
|
* `StaticDescriptorProvider` for legacy single-key wallets.
|
|
717
717
|
*/
|
|
718
718
|
isOurs(descriptor) {
|
|
719
|
-
return
|
|
719
|
+
return chunkQ5WQ4Y2I_cjs.descriptorIsOurs(descriptor, this.descriptor, this.indexZero.pubkey);
|
|
720
720
|
}
|
|
721
721
|
};
|
|
722
722
|
function serializeSeedOwnedSigningIdentity(identity) {
|
|
@@ -878,10 +878,10 @@ var DescriptorIdentity = class {
|
|
|
878
878
|
this.base = base;
|
|
879
879
|
}
|
|
880
880
|
async xOnlyPublicKey() {
|
|
881
|
-
return
|
|
881
|
+
return chunkQ5WQ4Y2I_cjs.deriveDescriptorLeafPubKey(this.descriptor);
|
|
882
882
|
}
|
|
883
883
|
async compressedPublicKey() {
|
|
884
|
-
return
|
|
884
|
+
return chunkQ5WQ4Y2I_cjs.deriveDescriptorLeafCompressedPubKey(this.descriptor);
|
|
885
885
|
}
|
|
886
886
|
async sign(tx, inputIndexes) {
|
|
887
887
|
const [signed] = await this.signer.signWithDescriptor([
|
|
@@ -949,12 +949,12 @@ var WalletCannotAllocateAddressError = class extends Error {
|
|
|
949
949
|
};
|
|
950
950
|
async function resolveDescriptorSigner(descriptor, identity, provider) {
|
|
951
951
|
const owner = provider?.isOurs(descriptor) ? provider : isHDCapableIdentity(identity) && identity.isOurs(descriptor) ? identity : void 0;
|
|
952
|
-
if (owner &&
|
|
952
|
+
if (owner && chunkQ5WQ4Y2I_cjs.parseHDDescriptor(descriptor)) {
|
|
953
953
|
return new DescriptorIdentity({ descriptor, signer: owner, base: identity });
|
|
954
954
|
}
|
|
955
955
|
let key;
|
|
956
956
|
try {
|
|
957
|
-
key =
|
|
957
|
+
key = chunkQ5WQ4Y2I_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
958
958
|
} catch {
|
|
959
959
|
throw new ForeignDescriptorError(descriptor);
|
|
960
960
|
}
|
|
@@ -1329,14 +1329,14 @@ function buildSaltedPreimageMessage(xonly, salt) {
|
|
|
1329
1329
|
}
|
|
1330
1330
|
var PREIMAGE_INDEX = 0;
|
|
1331
1331
|
function isPerArtifactDescriptor(descriptor) {
|
|
1332
|
-
return
|
|
1332
|
+
return chunkQ5WQ4Y2I_cjs.parseHDDescriptor(descriptor) !== null;
|
|
1333
1333
|
}
|
|
1334
1334
|
async function provisionDescriptor(wallet) {
|
|
1335
1335
|
const allocated = isHDAllocationCapable(wallet) ? await wallet.getNextSigningDescriptor() : void 0;
|
|
1336
|
-
return allocated ?? await
|
|
1336
|
+
return allocated ?? await chunkQ5WQ4Y2I_cjs.identityDescriptor(wallet.identity);
|
|
1337
1337
|
}
|
|
1338
1338
|
async function provisionRefundKey(wallet) {
|
|
1339
|
-
const descriptor = await
|
|
1339
|
+
const descriptor = await chunkQ5WQ4Y2I_cjs.identityDescriptor(wallet.identity);
|
|
1340
1340
|
const signer = await contractSigner(wallet, descriptor);
|
|
1341
1341
|
const pubkey = await signer.xOnlyPublicKey();
|
|
1342
1342
|
const identityPubkey = await wallet.identity.xOnlyPublicKey();
|
|
@@ -1346,7 +1346,7 @@ async function provisionRefundKey(wallet) {
|
|
|
1346
1346
|
);
|
|
1347
1347
|
}
|
|
1348
1348
|
const address = await wallet.getAddress();
|
|
1349
|
-
const { pkScript } =
|
|
1349
|
+
const { pkScript } = chunkRZ2NGS6A_cjs.ArkAddress.decode(address);
|
|
1350
1350
|
return { descriptor, pubkey, pkScript, address };
|
|
1351
1351
|
}
|
|
1352
1352
|
async function provisionClaimSecret(wallet, opts = {}) {
|
|
@@ -1392,7 +1392,7 @@ async function contractSigner(wallet, descriptor) {
|
|
|
1392
1392
|
const signer = isHDWalletCapable(wallet) ? await wallet.signerForDescriptor(descriptor) : wallet.identity;
|
|
1393
1393
|
let expected;
|
|
1394
1394
|
try {
|
|
1395
|
-
expected =
|
|
1395
|
+
expected = chunkQ5WQ4Y2I_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
1396
1396
|
} catch (cause) {
|
|
1397
1397
|
throw new ForeignDescriptorError(descriptor, { cause });
|
|
1398
1398
|
}
|
|
@@ -1611,14 +1611,14 @@ var RestDelegateProvider = class {
|
|
|
1611
1611
|
*/
|
|
1612
1612
|
async delegate(intent, forfeitTxs, options) {
|
|
1613
1613
|
const url = `${this.url}/v1/delegate`;
|
|
1614
|
-
const response = await
|
|
1614
|
+
const response = await chunkRZ2NGS6A_cjs.baseFetch(url, {
|
|
1615
1615
|
method: "POST",
|
|
1616
1616
|
headers: {
|
|
1617
1617
|
"Content-Type": "application/json"
|
|
1618
1618
|
},
|
|
1619
1619
|
body: JSON.stringify({
|
|
1620
1620
|
intent: {
|
|
1621
|
-
message:
|
|
1621
|
+
message: chunkRZ2NGS6A_cjs.Intent.encodeMessage(intent.message),
|
|
1622
1622
|
proof: intent.proof
|
|
1623
1623
|
},
|
|
1624
1624
|
forfeit_txs: forfeitTxs,
|
|
@@ -1638,7 +1638,7 @@ var RestDelegateProvider = class {
|
|
|
1638
1638
|
*/
|
|
1639
1639
|
async getDelegateInfo() {
|
|
1640
1640
|
const url = `${this.url}/v1/delegator/info`;
|
|
1641
|
-
const response = await
|
|
1641
|
+
const response = await chunkRZ2NGS6A_cjs.rateGate.runHttp(url, () => chunkRZ2NGS6A_cjs.baseFetch(url));
|
|
1642
1642
|
if (!response.ok) {
|
|
1643
1643
|
const errorText2 = await response.text();
|
|
1644
1644
|
throw new Error(`Failed to get delegate info: ${errorText2}`);
|
|
@@ -1663,7 +1663,7 @@ var ESPLORA_URL = {
|
|
|
1663
1663
|
regtest: "http://localhost:3000/api"
|
|
1664
1664
|
};
|
|
1665
1665
|
var EsploraProvider = class {
|
|
1666
|
-
constructor(baseUrl = ESPLORA_URL[
|
|
1666
|
+
constructor(baseUrl = ESPLORA_URL[chunkRZ2NGS6A_cjs.DEFAULT_NETWORK_NAME], opts) {
|
|
1667
1667
|
this.baseUrl = baseUrl;
|
|
1668
1668
|
this.pollingInterval = opts?.pollingInterval ?? 15e3;
|
|
1669
1669
|
this.forcePolling = opts?.forcePolling ?? false;
|
|
@@ -1682,14 +1682,14 @@ var EsploraProvider = class {
|
|
|
1682
1682
|
*/
|
|
1683
1683
|
addressWatches = /* @__PURE__ */ new Map();
|
|
1684
1684
|
async getCoins(address) {
|
|
1685
|
-
const response = await
|
|
1685
|
+
const response = await chunkRZ2NGS6A_cjs.baseFetch(`${this.baseUrl}/address/${address}/utxo`);
|
|
1686
1686
|
if (!response.ok) {
|
|
1687
1687
|
throw new Error(`Failed to fetch UTXOs: ${response.statusText}`);
|
|
1688
1688
|
}
|
|
1689
1689
|
return response.json();
|
|
1690
1690
|
}
|
|
1691
1691
|
async getFeeRate() {
|
|
1692
|
-
const response = await
|
|
1692
|
+
const response = await chunkRZ2NGS6A_cjs.baseFetch(`${this.baseUrl}/fee-estimates`);
|
|
1693
1693
|
if (response.status === 404) {
|
|
1694
1694
|
return void 0;
|
|
1695
1695
|
}
|
|
@@ -1710,7 +1710,7 @@ var EsploraProvider = class {
|
|
|
1710
1710
|
}
|
|
1711
1711
|
}
|
|
1712
1712
|
async getTxOutspends(txid) {
|
|
1713
|
-
const response = await
|
|
1713
|
+
const response = await chunkRZ2NGS6A_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/outspends`);
|
|
1714
1714
|
if (!response.ok) {
|
|
1715
1715
|
const error = await response.text();
|
|
1716
1716
|
throw new Error(`Failed to get transaction outspends: ${error}`);
|
|
@@ -1718,7 +1718,7 @@ var EsploraProvider = class {
|
|
|
1718
1718
|
return response.json();
|
|
1719
1719
|
}
|
|
1720
1720
|
async getTransactions(address) {
|
|
1721
|
-
const response = await
|
|
1721
|
+
const response = await chunkRZ2NGS6A_cjs.baseFetch(`${this.baseUrl}/address/${address}/txs`);
|
|
1722
1722
|
if (!response.ok) {
|
|
1723
1723
|
const error = await response.text();
|
|
1724
1724
|
throw new Error(`Failed to get transactions: ${error}`);
|
|
@@ -1731,14 +1731,14 @@ var EsploraProvider = class {
|
|
|
1731
1731
|
* usable as a change probe for the polling fallback.
|
|
1732
1732
|
*/
|
|
1733
1733
|
async getAddressStats(address) {
|
|
1734
|
-
const response = await
|
|
1734
|
+
const response = await chunkRZ2NGS6A_cjs.baseFetch(`${this.baseUrl}/address/${address}`);
|
|
1735
1735
|
if (!response.ok) {
|
|
1736
1736
|
throw new Error(`Failed to get address stats: ${response.statusText}`);
|
|
1737
1737
|
}
|
|
1738
1738
|
return response.json();
|
|
1739
1739
|
}
|
|
1740
1740
|
async getRawTransaction(txid) {
|
|
1741
|
-
const response = await
|
|
1741
|
+
const response = await chunkRZ2NGS6A_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/hex`);
|
|
1742
1742
|
if (!response.ok) {
|
|
1743
1743
|
const error = await response.text();
|
|
1744
1744
|
throw new Error(`Failed to get raw transaction ${txid}: ${error}`);
|
|
@@ -1746,7 +1746,7 @@ var EsploraProvider = class {
|
|
|
1746
1746
|
return base.hex.decode((await response.text()).trim());
|
|
1747
1747
|
}
|
|
1748
1748
|
async getTxStatus(txid) {
|
|
1749
|
-
const txresponse = await
|
|
1749
|
+
const txresponse = await chunkRZ2NGS6A_cjs.baseFetch(`${this.baseUrl}/tx/${txid}`);
|
|
1750
1750
|
if (!txresponse.ok) {
|
|
1751
1751
|
throw new Error(txresponse.statusText);
|
|
1752
1752
|
}
|
|
@@ -1754,7 +1754,7 @@ var EsploraProvider = class {
|
|
|
1754
1754
|
if (!tx.status.confirmed) {
|
|
1755
1755
|
return { confirmed: false };
|
|
1756
1756
|
}
|
|
1757
|
-
const response = await
|
|
1757
|
+
const response = await chunkRZ2NGS6A_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/status`);
|
|
1758
1758
|
if (!response.ok) {
|
|
1759
1759
|
throw new Error(`Failed to get transaction status: ${response.statusText}`);
|
|
1760
1760
|
}
|
|
@@ -2038,7 +2038,7 @@ var EsploraProvider = class {
|
|
|
2038
2038
|
return { subscribers, teardown, started };
|
|
2039
2039
|
}
|
|
2040
2040
|
async getChainTip() {
|
|
2041
|
-
const tipBlocks = await
|
|
2041
|
+
const tipBlocks = await chunkRZ2NGS6A_cjs.baseFetch(`${this.baseUrl}/blocks`);
|
|
2042
2042
|
if (!tipBlocks.ok) {
|
|
2043
2043
|
throw new Error(`Failed to get chain tip: ${tipBlocks.statusText}`);
|
|
2044
2044
|
}
|
|
@@ -2059,7 +2059,7 @@ var EsploraProvider = class {
|
|
|
2059
2059
|
};
|
|
2060
2060
|
}
|
|
2061
2061
|
async broadcastPackage(parent, child) {
|
|
2062
|
-
const response = await
|
|
2062
|
+
const response = await chunkRZ2NGS6A_cjs.baseFetch(`${this.baseUrl}/txs/package`, {
|
|
2063
2063
|
method: "POST",
|
|
2064
2064
|
headers: {
|
|
2065
2065
|
"Content-Type": "application/json"
|
|
@@ -2075,7 +2075,7 @@ var EsploraProvider = class {
|
|
|
2075
2075
|
return result;
|
|
2076
2076
|
}
|
|
2077
2077
|
async broadcastTx(tx) {
|
|
2078
|
-
const response = await
|
|
2078
|
+
const response = await chunkRZ2NGS6A_cjs.baseFetch(`${this.baseUrl}/tx`, {
|
|
2079
2079
|
method: "POST",
|
|
2080
2080
|
headers: {
|
|
2081
2081
|
"Content-Type": "text/plain"
|
|
@@ -2258,7 +2258,7 @@ function findP2AOutput(tx) {
|
|
|
2258
2258
|
var CHILD_DUST_AMOUNT = 546;
|
|
2259
2259
|
function buildAnchorChild(params) {
|
|
2260
2260
|
const { parent, feeRate, fundingCoins, changeAddress, tapInternalKey, network } = params;
|
|
2261
|
-
const child = new
|
|
2261
|
+
const child = new chunkRZ2NGS6A_cjs.Transaction({ version: 3, allowLegacyWitnessUtxo: true });
|
|
2262
2262
|
child.addInput(findP2AOutput(parent));
|
|
2263
2263
|
const estimator = TxWeightEstimator.create().addP2AInput();
|
|
2264
2264
|
for (const _ of fundingCoins) {
|
|
@@ -2306,7 +2306,7 @@ function buildForfeitTx(inputs, forfeitPkScript, txLocktime) {
|
|
|
2306
2306
|
);
|
|
2307
2307
|
}
|
|
2308
2308
|
function buildForfeitTxWithOutput(inputs, output, txLocktime) {
|
|
2309
|
-
const tx = new
|
|
2309
|
+
const tx = new chunkRZ2NGS6A_cjs.Transaction({
|
|
2310
2310
|
version: 3,
|
|
2311
2311
|
lockTime: txLocktime
|
|
2312
2312
|
});
|
|
@@ -2382,7 +2382,7 @@ function validateVtxoTxGraph(graph, roundTransaction, sweepTapTreeRoot) {
|
|
|
2382
2382
|
if (previousScriptKey.length !== 32) {
|
|
2383
2383
|
throw new Error(`parent output ${childIndex} has invalid script`);
|
|
2384
2384
|
}
|
|
2385
|
-
const cosigners =
|
|
2385
|
+
const cosigners = chunkRZ2NGS6A_cjs.getArkPsbtFields(child.root, 0, chunkRZ2NGS6A_cjs.CosignerPublicKey);
|
|
2386
2386
|
if (cosigners.length === 0) {
|
|
2387
2387
|
throw ErrMissingCosignersPublicKeys;
|
|
2388
2388
|
}
|
|
@@ -2440,7 +2440,7 @@ var EmulatorPacket = class _EmulatorPacket {
|
|
|
2440
2440
|
return new _EmulatorPacket(entries);
|
|
2441
2441
|
}
|
|
2442
2442
|
static fromBytes(data) {
|
|
2443
|
-
const reader = new
|
|
2443
|
+
const reader = new chunkWQIWUTYS_cjs.BufferReader(data);
|
|
2444
2444
|
const entryCount = reader.readCompactSize();
|
|
2445
2445
|
const entries = [];
|
|
2446
2446
|
for (let i = 0; i < entryCount; i++) {
|
|
@@ -2458,7 +2458,7 @@ var EmulatorPacket = class _EmulatorPacket {
|
|
|
2458
2458
|
return _EmulatorPacket.PACKET_TYPE;
|
|
2459
2459
|
}
|
|
2460
2460
|
serialize() {
|
|
2461
|
-
const writer = new
|
|
2461
|
+
const writer = new chunkWQIWUTYS_cjs.BufferWriter();
|
|
2462
2462
|
writer.writeCompactSize(this.entries.length);
|
|
2463
2463
|
for (const entry of this.entries) {
|
|
2464
2464
|
writer.writeUint16LE(entry.vin);
|
|
@@ -2545,7 +2545,7 @@ var Extension = class _Extension {
|
|
|
2545
2545
|
`expected magic prefix ${base.hex.encode(ARKADE_MAGIC)}, got ${base.hex.encode(payload.slice(0, Math.min(payload.length, ARKADE_MAGIC.length)))}`
|
|
2546
2546
|
);
|
|
2547
2547
|
}
|
|
2548
|
-
const reader = new
|
|
2548
|
+
const reader = new chunkWQIWUTYS_cjs.BufferReader(payload.slice(ARKADE_MAGIC.length));
|
|
2549
2549
|
const packets = [];
|
|
2550
2550
|
while (reader.remaining() > 0) {
|
|
2551
2551
|
const packetType = reader.readByte();
|
|
@@ -2619,7 +2619,7 @@ var Extension = class _Extension {
|
|
|
2619
2619
|
*/
|
|
2620
2620
|
getAssetPacket() {
|
|
2621
2621
|
for (const p of this.packets) {
|
|
2622
|
-
if (p instanceof
|
|
2622
|
+
if (p instanceof chunkWQIWUTYS_cjs.Packet) {
|
|
2623
2623
|
return p;
|
|
2624
2624
|
}
|
|
2625
2625
|
}
|
|
@@ -2657,8 +2657,8 @@ var Extension = class _Extension {
|
|
|
2657
2657
|
};
|
|
2658
2658
|
function parsePacket(packetType, data) {
|
|
2659
2659
|
switch (packetType) {
|
|
2660
|
-
case
|
|
2661
|
-
return
|
|
2660
|
+
case chunkWQIWUTYS_cjs.Packet.PACKET_TYPE:
|
|
2661
|
+
return chunkWQIWUTYS_cjs.Packet.fromBytes(data);
|
|
2662
2662
|
case EmulatorPacket.PACKET_TYPE:
|
|
2663
2663
|
return EmulatorPacket.fromBytes(data);
|
|
2664
2664
|
default:
|
|
@@ -2705,16 +2705,16 @@ function buildOpReturnScript(data) {
|
|
|
2705
2705
|
}
|
|
2706
2706
|
return script;
|
|
2707
2707
|
}
|
|
2708
|
-
var ErrOffchainOutputNotFound = (address) => new
|
|
2709
|
-
var ErrInvalidAssetOutputAmount = (got, want, assetId) => new
|
|
2708
|
+
var ErrOffchainOutputNotFound = (address) => new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(`offchain send output not found: ${address}`);
|
|
2709
|
+
var ErrInvalidAssetOutputAmount = (got, want, assetId) => new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
|
|
2710
2710
|
`invalid asset output amount for ${assetId}: got ${got}, want ${want}`
|
|
2711
2711
|
);
|
|
2712
|
-
var ErrAssetGroupNotFound = (assetId) => new
|
|
2713
|
-
var ErrAssetOutputNotFound = (assetId, outputIndex) => new
|
|
2712
|
+
var ErrAssetGroupNotFound = (assetId) => new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(`asset group not found in batch leaf: ${assetId}`);
|
|
2713
|
+
var ErrAssetOutputNotFound = (assetId, outputIndex) => new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
|
|
2714
2714
|
`asset output not found in asset group ${assetId} at index ${outputIndex}`
|
|
2715
2715
|
);
|
|
2716
|
-
var ErrOnchainOutputNotFound = (address) => new
|
|
2717
|
-
var ErrUnvalidatedOffchainOutput = (address) => new
|
|
2716
|
+
var ErrOnchainOutputNotFound = (address) => new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(`onchain output not found: ${address}`);
|
|
2717
|
+
var ErrUnvalidatedOffchainOutput = (address) => new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
|
|
2718
2718
|
`offchain output ${address} cannot be validated: virtual output tree signing did not run`
|
|
2719
2719
|
);
|
|
2720
2720
|
var ErrInvalidOnchainOutputAmount = (address) => new Error(`invalid onchain output amount: ${address}`);
|
|
@@ -2723,7 +2723,7 @@ var ErrInvalidOffchainOutputAmount = (address) => new Error(`invalid offchain ou
|
|
|
2723
2723
|
function assertFinalCommitmentMatchesValidated(finalCommitmentTx, validatedCommitmentTxid, context) {
|
|
2724
2724
|
if (!validatedCommitmentTxid) return;
|
|
2725
2725
|
if (finalCommitmentTx.id === validatedCommitmentTxid) return;
|
|
2726
|
-
throw new
|
|
2726
|
+
throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
|
|
2727
2727
|
`${context}: finalization commitment tx ${finalCommitmentTx.id} differs from the validated commitment tx ${validatedCommitmentTxid}`
|
|
2728
2728
|
);
|
|
2729
2729
|
}
|
|
@@ -2733,7 +2733,7 @@ function validateBatchRecipients(commitmentTx, vtxoTreeLeaves, recipients, netwo
|
|
|
2733
2733
|
for (const recipient of recipients) {
|
|
2734
2734
|
let arkAddress;
|
|
2735
2735
|
try {
|
|
2736
|
-
arkAddress =
|
|
2736
|
+
arkAddress = chunkRZ2NGS6A_cjs.ArkAddress.decode(recipient.address);
|
|
2737
2737
|
} catch {
|
|
2738
2738
|
validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
|
|
2739
2739
|
continue;
|
|
@@ -2745,7 +2745,7 @@ function validateBatchRecipientsWithoutTree(commitmentTx, recipients, network) {
|
|
|
2745
2745
|
const usedOnchainOutputs = /* @__PURE__ */ new Set();
|
|
2746
2746
|
for (const recipient of recipients) {
|
|
2747
2747
|
try {
|
|
2748
|
-
|
|
2748
|
+
chunkRZ2NGS6A_cjs.ArkAddress.decode(recipient.address);
|
|
2749
2749
|
} catch {
|
|
2750
2750
|
validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
|
|
2751
2751
|
continue;
|
|
@@ -2978,7 +2978,7 @@ function assetMintResolver() {
|
|
|
2978
2978
|
if (!tx.assets?.length || !tx.key.arkTxid) return void 0;
|
|
2979
2979
|
const minted = tx.assets.filter((a) => {
|
|
2980
2980
|
try {
|
|
2981
|
-
return base.hex.encode(
|
|
2981
|
+
return base.hex.encode(chunkWQIWUTYS_cjs.AssetId.fromString(a.assetId).txid) === tx.key.arkTxid;
|
|
2982
2982
|
} catch {
|
|
2983
2983
|
return false;
|
|
2984
2984
|
}
|
|
@@ -3021,7 +3021,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
3021
3021
|
const existing = inputsByAssetId.get(asset.assetId);
|
|
3022
3022
|
inputsByAssetId.set(asset.assetId, [
|
|
3023
3023
|
...existing ?? [],
|
|
3024
|
-
|
|
3024
|
+
chunkWQIWUTYS_cjs.AssetInput.create(inputIndex, asset.amount)
|
|
3025
3025
|
]);
|
|
3026
3026
|
}
|
|
3027
3027
|
}
|
|
@@ -3033,7 +3033,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
3033
3033
|
const existing = outputsByAssetId.get(asset.assetId);
|
|
3034
3034
|
outputsByAssetId.set(asset.assetId, [
|
|
3035
3035
|
...existing ?? [],
|
|
3036
|
-
|
|
3036
|
+
chunkWQIWUTYS_cjs.AssetOutput.create(outputIndex, asset.amount)
|
|
3037
3037
|
]);
|
|
3038
3038
|
}
|
|
3039
3039
|
}
|
|
@@ -3044,7 +3044,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
3044
3044
|
const existing = outputsByAssetId.get(asset.assetId);
|
|
3045
3045
|
outputsByAssetId.set(asset.assetId, [
|
|
3046
3046
|
...existing ?? [],
|
|
3047
|
-
|
|
3047
|
+
chunkWQIWUTYS_cjs.AssetOutput.create(outputIndex, asset.amount)
|
|
3048
3048
|
]);
|
|
3049
3049
|
}
|
|
3050
3050
|
}
|
|
@@ -3053,11 +3053,11 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
3053
3053
|
for (const assetIdStr of allAssetIds) {
|
|
3054
3054
|
const inputs = inputsByAssetId.get(assetIdStr);
|
|
3055
3055
|
const outputs = outputsByAssetId.get(assetIdStr);
|
|
3056
|
-
const assetId =
|
|
3057
|
-
const group =
|
|
3056
|
+
const assetId = chunkWQIWUTYS_cjs.AssetId.fromString(assetIdStr);
|
|
3057
|
+
const group = chunkWQIWUTYS_cjs.AssetGroup.create(assetId, null, inputs ?? [], outputs ?? [], []);
|
|
3058
3058
|
groups.push(group);
|
|
3059
3059
|
}
|
|
3060
|
-
return
|
|
3060
|
+
return chunkWQIWUTYS_cjs.Packet.create(groups);
|
|
3061
3061
|
}
|
|
3062
3062
|
function selectCoinsWithAsset(coins, assetId, requiredAmount) {
|
|
3063
3063
|
const coinsWithAsset = coins.filter((coin) => coin.assets?.some((a) => a.assetId === assetId));
|
|
@@ -3094,7 +3094,7 @@ function selectedCoinsToAssetInputs(selectedCoins) {
|
|
|
3094
3094
|
}
|
|
3095
3095
|
function toXOnlySignerHex(pubkeyHex) {
|
|
3096
3096
|
const bytes = base.hex.decode(pubkeyHex);
|
|
3097
|
-
if (bytes.length === 32 || bytes.length === 33) return base.hex.encode(
|
|
3097
|
+
if (bytes.length === 32 || bytes.length === 33) return base.hex.encode(chunkQ5WQ4Y2I_cjs.toXOnly(bytes, "signer key"));
|
|
3098
3098
|
throw new Error(`invalid signer pubkey length: expected 32 or 33 bytes, got ${bytes.length}`);
|
|
3099
3099
|
}
|
|
3100
3100
|
function signerSetFromInfo(info) {
|
|
@@ -3141,13 +3141,13 @@ var toTimelock = (value) => ({
|
|
|
3141
3141
|
var toSeconds = (t) => t.type === "seconds" ? t.value : t.value * NOMINAL_BLOCK_SECONDS;
|
|
3142
3142
|
function assertTimelockInPolicy(timelock, policy, label, overrideOption) {
|
|
3143
3143
|
if (policy.requireSeconds && timelock.type === "blocks") {
|
|
3144
|
-
throw new
|
|
3144
|
+
throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
|
|
3145
3145
|
`${label} rejected: block-typed timelocks are not accepted (got ${timelock.value})`
|
|
3146
3146
|
);
|
|
3147
3147
|
}
|
|
3148
3148
|
const seconds = toSeconds(timelock);
|
|
3149
3149
|
if (seconds < policy.minSeconds) {
|
|
3150
|
-
throw new
|
|
3150
|
+
throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
|
|
3151
3151
|
`${label} rejected: ${timelock.value} ${timelock.type} is below the ${policy.minSeconds}s floor; pass ${overrideOption}: ${seconds}n to Wallet.create to lower it`
|
|
3152
3152
|
);
|
|
3153
3153
|
}
|
|
@@ -3168,7 +3168,7 @@ function resolveBatchExpiryPolicy(network, overrides) {
|
|
|
3168
3168
|
}
|
|
3169
3169
|
function assertValidBatchExpiry(batchExpiry, policy) {
|
|
3170
3170
|
if (policy.advertisedVtxoTreeExpiry !== void 0 && batchExpiry !== policy.advertisedVtxoTreeExpiry) {
|
|
3171
|
-
throw new
|
|
3171
|
+
throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
|
|
3172
3172
|
`batch expiry rejected: ${batchExpiry} does not match the advertised vtxoTreeExpiry ${policy.advertisedVtxoTreeExpiry}`
|
|
3173
3173
|
);
|
|
3174
3174
|
}
|
|
@@ -3198,21 +3198,21 @@ function resolveCheckpointExitDelayPolicy(network, overrides) {
|
|
|
3198
3198
|
function assertValidServerUnrollScript(checkpointTapscript, policy) {
|
|
3199
3199
|
let script;
|
|
3200
3200
|
try {
|
|
3201
|
-
script =
|
|
3201
|
+
script = chunkRZ2NGS6A_cjs.CSVMultisigTapscript.decode(base.hex.decode(checkpointTapscript));
|
|
3202
3202
|
} catch (e) {
|
|
3203
|
-
throw new
|
|
3203
|
+
throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
|
|
3204
3204
|
`checkpoint exit delay rejected: invalid checkpointTapscript from server (${e instanceof Error ? e.message : String(e)})`
|
|
3205
3205
|
);
|
|
3206
3206
|
}
|
|
3207
3207
|
if (policy.advertisedForfeitPubkey !== void 0) {
|
|
3208
3208
|
const { pubkeys } = script.params;
|
|
3209
3209
|
if (pubkeys.length !== 1) {
|
|
3210
|
-
throw new
|
|
3210
|
+
throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
|
|
3211
3211
|
`checkpoint exit delay rejected: checkpointTapscript must commit to exactly one pubkey, got ${pubkeys.length} [${pubkeys.map(base.hex.encode).join(", ")}]`
|
|
3212
3212
|
);
|
|
3213
3213
|
}
|
|
3214
3214
|
if (!utils_js.equalBytes(pubkeys[0], policy.advertisedForfeitPubkey)) {
|
|
3215
|
-
throw new
|
|
3215
|
+
throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
|
|
3216
3216
|
`checkpoint exit delay rejected: checkpointTapscript pubkey ${base.hex.encode(pubkeys[0])} does not match the advertised forfeitPubkey ${base.hex.encode(policy.advertisedForfeitPubkey)}`
|
|
3217
3217
|
);
|
|
3218
3218
|
}
|
|
@@ -3256,8 +3256,8 @@ function buildOffchainTx(inputs, outputs, serverUnrollScript) {
|
|
|
3256
3256
|
function buildVirtualTx(inputs, outputs) {
|
|
3257
3257
|
let lockTime = 0n;
|
|
3258
3258
|
for (const input of inputs) {
|
|
3259
|
-
const tapscript =
|
|
3260
|
-
if (
|
|
3259
|
+
const tapscript = chunkRZ2NGS6A_cjs.decodeTapscript(chunkRZ2NGS6A_cjs.scriptFromTapLeafScript(input.tapLeafScript));
|
|
3260
|
+
if (chunkRZ2NGS6A_cjs.CLTVMultisigTapscript.is(tapscript)) {
|
|
3261
3261
|
if (lockTime !== 0n) {
|
|
3262
3262
|
if (isSeconds(lockTime) !== isSeconds(tapscript.params.absoluteTimelock)) {
|
|
3263
3263
|
throw new Error("cannot mix seconds and blocks locktime");
|
|
@@ -3268,7 +3268,7 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
3268
3268
|
}
|
|
3269
3269
|
}
|
|
3270
3270
|
}
|
|
3271
|
-
const tx = new
|
|
3271
|
+
const tx = new chunkRZ2NGS6A_cjs.Transaction({
|
|
3272
3272
|
version: 3,
|
|
3273
3273
|
lockTime: Number(lockTime)
|
|
3274
3274
|
});
|
|
@@ -3278,12 +3278,12 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
3278
3278
|
index: input.vout,
|
|
3279
3279
|
sequence: lockTime ? btcSigner.DEFAULT_SEQUENCE - 1 : void 0,
|
|
3280
3280
|
witnessUtxo: {
|
|
3281
|
-
script:
|
|
3281
|
+
script: chunkRZ2NGS6A_cjs.VtxoScript.decode(input.tapTree).pkScript,
|
|
3282
3282
|
amount: BigInt(input.value)
|
|
3283
3283
|
},
|
|
3284
3284
|
tapLeafScript: [input.tapLeafScript]
|
|
3285
3285
|
});
|
|
3286
|
-
|
|
3286
|
+
chunkRZ2NGS6A_cjs.setArkPsbtField(tx, i, chunkRZ2NGS6A_cjs.VtxoTaprootTree, input.tapTree);
|
|
3287
3287
|
}
|
|
3288
3288
|
for (const output of outputs) {
|
|
3289
3289
|
tx.addOutput(output);
|
|
@@ -3292,8 +3292,8 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
3292
3292
|
return tx;
|
|
3293
3293
|
}
|
|
3294
3294
|
function buildCheckpointTx(vtxo, serverUnrollScript) {
|
|
3295
|
-
const collaborativeClosure =
|
|
3296
|
-
const checkpointVtxoScript = new
|
|
3295
|
+
const collaborativeClosure = chunkRZ2NGS6A_cjs.decodeTapscript(chunkRZ2NGS6A_cjs.scriptFromTapLeafScript(vtxo.tapLeafScript));
|
|
3296
|
+
const checkpointVtxoScript = new chunkRZ2NGS6A_cjs.VtxoScript([
|
|
3297
3297
|
serverUnrollScript.script,
|
|
3298
3298
|
collaborativeClosure.script
|
|
3299
3299
|
]);
|
|
@@ -3369,7 +3369,7 @@ function verifyTapscriptSignatures(tx, inputIndex, requiredSigners, excludePubke
|
|
|
3369
3369
|
const sighashType = signature.length === 65 ? signature[64] : btcSigner.SigHash.DEFAULT;
|
|
3370
3370
|
const sig = signature.subarray(0, 64);
|
|
3371
3371
|
if (!allowedSighashTypes.includes(sighashType)) {
|
|
3372
|
-
const sighashName =
|
|
3372
|
+
const sighashName = chunkRZ2NGS6A_cjs.formatSighash(sighashType);
|
|
3373
3373
|
throw new Error(
|
|
3374
3374
|
`Unallowed sighash type ${sighashName} for input ${inputIndex}, pubkey ${pubKeyHex}.`
|
|
3375
3375
|
);
|
|
@@ -3443,7 +3443,7 @@ function combineTapscriptSigs(signedTx, originalTx) {
|
|
|
3443
3443
|
}
|
|
3444
3444
|
function isValidArkAddress(address) {
|
|
3445
3445
|
try {
|
|
3446
|
-
|
|
3446
|
+
chunkRZ2NGS6A_cjs.ArkAddress.decode(address);
|
|
3447
3447
|
return true;
|
|
3448
3448
|
} catch (e) {
|
|
3449
3449
|
return false;
|
|
@@ -3451,16 +3451,16 @@ function isValidArkAddress(address) {
|
|
|
3451
3451
|
}
|
|
3452
3452
|
function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, context) {
|
|
3453
3453
|
if (serverCheckpointTxs.length !== expectedCheckpoints.length) {
|
|
3454
|
-
throw new
|
|
3454
|
+
throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
|
|
3455
3455
|
`${context} returned ${serverCheckpointTxs.length} checkpoints, expected ${expectedCheckpoints.length}`
|
|
3456
3456
|
);
|
|
3457
3457
|
}
|
|
3458
3458
|
const byTxid = new Map(expectedCheckpoints.map((c) => [c.id, c]));
|
|
3459
3459
|
return serverCheckpointTxs.map((encoded, index) => {
|
|
3460
|
-
const server =
|
|
3460
|
+
const server = chunkRZ2NGS6A_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
|
|
3461
3461
|
const local = byTxid.get(server.id);
|
|
3462
3462
|
if (!local) {
|
|
3463
|
-
throw new
|
|
3463
|
+
throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
|
|
3464
3464
|
`${context} checkpoint ${index} txid ${server.id} does not match any submitted checkpoint`
|
|
3465
3465
|
);
|
|
3466
3466
|
}
|
|
@@ -3470,14 +3470,14 @@ function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, contex
|
|
|
3470
3470
|
}
|
|
3471
3471
|
function assertSubmittedArkTxid(response, signedArkTx, context) {
|
|
3472
3472
|
if (response.arkTxid !== signedArkTx.id) {
|
|
3473
|
-
throw new
|
|
3473
|
+
throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
|
|
3474
3474
|
`${context} returned ark txid ${response.arkTxid}, expected ${signedArkTx.id}`
|
|
3475
3475
|
);
|
|
3476
3476
|
}
|
|
3477
3477
|
if (response.finalArkTx === void 0) return;
|
|
3478
|
-
const finalTxid =
|
|
3478
|
+
const finalTxid = chunkRZ2NGS6A_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx)).id;
|
|
3479
3479
|
if (finalTxid !== signedArkTx.id) {
|
|
3480
|
-
throw new
|
|
3480
|
+
throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
|
|
3481
3481
|
`${context} returned final ark tx ${finalTxid}, expected ${signedArkTx.id}`
|
|
3482
3482
|
);
|
|
3483
3483
|
}
|
|
@@ -3496,10 +3496,10 @@ function assertServerSignedLeaf(serverTx, localTx, inputIndex, serverPubkeyHex,
|
|
|
3496
3496
|
[serverPubkeyHex],
|
|
3497
3497
|
void 0,
|
|
3498
3498
|
void 0,
|
|
3499
|
-
payment_js.tapLeafHash(
|
|
3499
|
+
payment_js.tapLeafHash(chunkRZ2NGS6A_cjs.scriptFromTapLeafScript(leaf))
|
|
3500
3500
|
);
|
|
3501
3501
|
} catch (error) {
|
|
3502
|
-
throw new
|
|
3502
|
+
throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
|
|
3503
3503
|
`${context}: input ${inputIndex} is not signed by the server on the leaf being spent (${error instanceof Error ? error.message : String(error)})`
|
|
3504
3504
|
);
|
|
3505
3505
|
}
|
|
@@ -3508,20 +3508,20 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
|
|
|
3508
3508
|
const byOutpoint = new Map(inputs.map((input) => [`${input.txid}:${input.vout}`, input]));
|
|
3509
3509
|
for (const [index, checkpoint] of checkpoints.entries()) {
|
|
3510
3510
|
if (checkpoint.inputsLength !== 1) {
|
|
3511
|
-
throw new
|
|
3511
|
+
throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
|
|
3512
3512
|
`${context}: checkpoint ${index} spends ${checkpoint.inputsLength} inputs, expected 1`
|
|
3513
3513
|
);
|
|
3514
3514
|
}
|
|
3515
3515
|
const spent = checkpoint.getInput(0);
|
|
3516
3516
|
if (!spent.txid || spent.index === void 0) {
|
|
3517
|
-
throw new
|
|
3517
|
+
throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
|
|
3518
3518
|
`${context}: checkpoint ${index} has no input outpoint`
|
|
3519
3519
|
);
|
|
3520
3520
|
}
|
|
3521
3521
|
const outpoint = `${base.hex.encode(spent.txid)}:${spent.index}`;
|
|
3522
3522
|
const input = byOutpoint.get(outpoint);
|
|
3523
3523
|
if (!input) {
|
|
3524
|
-
throw new
|
|
3524
|
+
throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
|
|
3525
3525
|
`${context}: checkpoint ${index} spends ${outpoint}, which is not one of the requested virtual outputs`
|
|
3526
3526
|
);
|
|
3527
3527
|
}
|
|
@@ -3529,7 +3529,7 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
|
|
|
3529
3529
|
(unroll) => buildCheckpointTx(input, unroll).tx.id === checkpoint.id
|
|
3530
3530
|
);
|
|
3531
3531
|
if (!rebuilt) {
|
|
3532
|
-
throw new
|
|
3532
|
+
throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
|
|
3533
3533
|
`${context}: checkpoint ${index} txid ${checkpoint.id} differs from the checkpoint built locally for ${outpoint}`
|
|
3534
3534
|
);
|
|
3535
3535
|
}
|
|
@@ -3555,9 +3555,9 @@ async function submitOffchainTx(provider, offchainTx, signer, hooks, options) {
|
|
|
3555
3555
|
const matched = matchServerCheckpoints(signedCheckpointTxs, offchainTx.checkpoints, "submitTx");
|
|
3556
3556
|
matched.forEach(({ server }, index) => {
|
|
3557
3557
|
try {
|
|
3558
|
-
|
|
3558
|
+
chunkRZ2NGS6A_cjs.assertAllowedSighashTypes(server);
|
|
3559
3559
|
} catch (error) {
|
|
3560
|
-
throw new
|
|
3560
|
+
throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
|
|
3561
3561
|
`submitTx checkpoint ${index}: ${error instanceof Error ? error.message : String(error)}`
|
|
3562
3562
|
);
|
|
3563
3563
|
}
|
|
@@ -3565,12 +3565,12 @@ async function submitOffchainTx(provider, offchainTx, signer, hooks, options) {
|
|
|
3565
3565
|
const verify = options?.verifyServerSignatures;
|
|
3566
3566
|
if (verify) {
|
|
3567
3567
|
if (response.finalArkTx === void 0) {
|
|
3568
|
-
throw new
|
|
3568
|
+
throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
|
|
3569
3569
|
"submitTx: server returned no final ark tx to verify its signatures against"
|
|
3570
3570
|
);
|
|
3571
3571
|
}
|
|
3572
|
-
const finalArkTx =
|
|
3573
|
-
const serverPubkeyHex = base.hex.encode(
|
|
3572
|
+
const finalArkTx = chunkRZ2NGS6A_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx));
|
|
3573
|
+
const serverPubkeyHex = base.hex.encode(chunkQ5WQ4Y2I_cjs.toXOnly(verify.serverPubkey, "server key"));
|
|
3574
3574
|
for (let i = 0; i < offchainTx.arkTx.inputsLength; i++) {
|
|
3575
3575
|
assertServerSignedLeaf(
|
|
3576
3576
|
finalArkTx,
|
|
@@ -3626,12 +3626,12 @@ function claimWithPreimageIdentity(identity, preimage) {
|
|
|
3626
3626
|
return {
|
|
3627
3627
|
...identity,
|
|
3628
3628
|
sign: async (tx, inputIndexes) => {
|
|
3629
|
-
const signed =
|
|
3629
|
+
const signed = chunkRZ2NGS6A_cjs.Transaction.fromPSBT(
|
|
3630
3630
|
(await identity.sign(tx.clone(), inputIndexes)).toPSBT()
|
|
3631
3631
|
);
|
|
3632
3632
|
const indexes = inputIndexes ?? Array.from({ length: signed.inputsLength }, (_, i) => i);
|
|
3633
3633
|
for (const index of indexes) {
|
|
3634
|
-
|
|
3634
|
+
chunkRZ2NGS6A_cjs.setArkPsbtField(signed, index, chunkRZ2NGS6A_cjs.ConditionWitness, [preimage]);
|
|
3635
3635
|
}
|
|
3636
3636
|
return signed;
|
|
3637
3637
|
}
|
|
@@ -3823,7 +3823,7 @@ function extendCoinWithTapscript(boardingTapscript, utxo) {
|
|
|
3823
3823
|
};
|
|
3824
3824
|
}
|
|
3825
3825
|
function deriveContractTapscripts(contract) {
|
|
3826
|
-
const handler =
|
|
3826
|
+
const handler = chunkQ5WQ4Y2I_cjs.contractHandlers.get(contract.type);
|
|
3827
3827
|
if (!handler) {
|
|
3828
3828
|
throw new Error(`No handler for contract type '${contract.type}'`);
|
|
3829
3829
|
}
|
|
@@ -3894,13 +3894,13 @@ function getRandomId() {
|
|
|
3894
3894
|
}
|
|
3895
3895
|
function isValidArkAddress2(address) {
|
|
3896
3896
|
try {
|
|
3897
|
-
|
|
3897
|
+
chunkRZ2NGS6A_cjs.ArkAddress.decode(address);
|
|
3898
3898
|
return true;
|
|
3899
3899
|
} catch (e) {
|
|
3900
3900
|
return false;
|
|
3901
3901
|
}
|
|
3902
3902
|
}
|
|
3903
|
-
function
|
|
3903
|
+
function assertRecipientArkadeAddress(encoded, address, context) {
|
|
3904
3904
|
if (address.hrp !== context.hrp) {
|
|
3905
3905
|
throw new Error(
|
|
3906
3906
|
`Invalid Arkade address ${encoded}: expected prefix "${context.hrp}", got "${address.hrp}"`
|
|
@@ -3922,7 +3922,7 @@ function assertRecipientArkAddress(encoded, address, context) {
|
|
|
3922
3922
|
function assertTapTreeDerivesAddress(encoded, tapTree, address) {
|
|
3923
3923
|
let derived;
|
|
3924
3924
|
try {
|
|
3925
|
-
derived =
|
|
3925
|
+
derived = chunkRZ2NGS6A_cjs.VtxoScript.decode(tapTree).pkScript;
|
|
3926
3926
|
} catch (e) {
|
|
3927
3927
|
throw new Error(
|
|
3928
3928
|
`Invalid tapTree for ${encoded}: ${e instanceof Error ? e.message : String(e)}`
|
|
@@ -3939,11 +3939,11 @@ function validateRecipients(recipients, dustAmount, context) {
|
|
|
3939
3939
|
for (const recipient of recipients) {
|
|
3940
3940
|
let address;
|
|
3941
3941
|
try {
|
|
3942
|
-
address =
|
|
3942
|
+
address = chunkRZ2NGS6A_cjs.ArkAddress.decode(recipient.address);
|
|
3943
3943
|
} catch (e) {
|
|
3944
3944
|
throw new Error(`Invalid Arkade address: ${recipient.address}`);
|
|
3945
3945
|
}
|
|
3946
|
-
|
|
3946
|
+
assertRecipientArkadeAddress(recipient.address, address, context);
|
|
3947
3947
|
const amount = recipient.amount || dustAmount;
|
|
3948
3948
|
if (amount <= 0) {
|
|
3949
3949
|
throw new Error("Amount must be positive");
|
|
@@ -3964,7 +3964,7 @@ function validateRecipients(recipients, dustAmount, context) {
|
|
|
3964
3964
|
|
|
3965
3965
|
// src/contracts/spendability.ts
|
|
3966
3966
|
function isContractGenericallySpendable(contract) {
|
|
3967
|
-
return
|
|
3967
|
+
return chunkQ5WQ4Y2I_cjs.contractHandlers.get(contract.type)?.isGenericallySpendable?.(contract) === true;
|
|
3968
3968
|
}
|
|
3969
3969
|
function gatedContracts(contracts) {
|
|
3970
3970
|
const gated = /* @__PURE__ */ new Map();
|
|
@@ -3977,7 +3977,7 @@ function gateExclusion(gated) {
|
|
|
3977
3977
|
return (vtxo) => {
|
|
3978
3978
|
const type = vtxo.script === void 0 ? void 0 : gated.get(vtxo.script);
|
|
3979
3979
|
if (type === void 0) return void 0;
|
|
3980
|
-
if (!
|
|
3980
|
+
if (!chunkQ5WQ4Y2I_cjs.contractHandlers.has(type)) {
|
|
3981
3981
|
return `at ${vtxo.script} (contract type '${type}') has no handler registered in this build`;
|
|
3982
3982
|
}
|
|
3983
3983
|
return `at ${vtxo.script} (contract type '${type}') is not generically spendable`;
|
|
@@ -4013,7 +4013,7 @@ function selectPendingRecoveryOutpoints(contractsWithVtxos, signerSet, nowSecond
|
|
|
4013
4013
|
continue;
|
|
4014
4014
|
}
|
|
4015
4015
|
for (const v of vtxos) {
|
|
4016
|
-
if (!
|
|
4016
|
+
if (!chunkRZ2NGS6A_cjs.hasTerminalSpend(v) && !v.isSwept && !v.isUnrolled) {
|
|
4017
4017
|
out.add(`${v.txid}:${v.vout}`);
|
|
4018
4018
|
}
|
|
4019
4019
|
}
|
|
@@ -4048,10 +4048,10 @@ function byValueDescending(vtxos) {
|
|
|
4048
4048
|
return [...vtxos].sort((a, b) => b.value - a.value);
|
|
4049
4049
|
}
|
|
4050
4050
|
async function fetchTimeHeight(wallet) {
|
|
4051
|
-
return
|
|
4051
|
+
return chunkRZ2NGS6A_cjs.resolveTimeHeight(wallet.onchainProvider);
|
|
4052
4052
|
}
|
|
4053
4053
|
function canMigrateBySend(vtxo, now) {
|
|
4054
|
-
if (!
|
|
4054
|
+
if (!chunkRZ2NGS6A_cjs.canSpendOffchain(vtxo, now)) return false;
|
|
4055
4055
|
return vtxo.expiresAt !== void 0 || vtxo.expiresAtHeight !== void 0;
|
|
4056
4056
|
}
|
|
4057
4057
|
function byExpiryAscending(vtxos, now) {
|
|
@@ -4059,7 +4059,7 @@ function byExpiryAscending(vtxos, now) {
|
|
|
4059
4059
|
if (vtxo.isSwept) return -Infinity;
|
|
4060
4060
|
if (vtxo.expiresAt !== void 0) return vtxo.expiresAt.getTime();
|
|
4061
4061
|
if (vtxo.expiresAtHeight !== void 0) {
|
|
4062
|
-
return
|
|
4062
|
+
return chunkRZ2NGS6A_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
|
|
4063
4063
|
}
|
|
4064
4064
|
return Infinity;
|
|
4065
4065
|
};
|
|
@@ -4086,7 +4086,7 @@ function priceSettlementInputs(vtxos, estimator) {
|
|
|
4086
4086
|
const payable = [];
|
|
4087
4087
|
const net = /* @__PURE__ */ new Map();
|
|
4088
4088
|
for (const vtxo of vtxos) {
|
|
4089
|
-
const inputFee = estimator.evalOffchainInput(
|
|
4089
|
+
const inputFee = estimator.evalOffchainInput(chunkRZ2NGS6A_cjs.toOffchainInputFeeParams(vtxo));
|
|
4090
4090
|
if (inputFee.satoshis >= vtxo.value) {
|
|
4091
4091
|
continue;
|
|
4092
4092
|
}
|
|
@@ -4112,7 +4112,7 @@ function deductOffchainOutputFee(subtotal, estimator, arkAddress) {
|
|
|
4112
4112
|
}
|
|
4113
4113
|
const outputFee = estimator.evalOffchainOutput({
|
|
4114
4114
|
amount: subtotal,
|
|
4115
|
-
script: base.hex.encode(
|
|
4115
|
+
script: base.hex.encode(chunkRZ2NGS6A_cjs.ArkAddress.decode(arkAddress).pkScript)
|
|
4116
4116
|
});
|
|
4117
4117
|
return subtotal - BigInt(outputFee.satoshis);
|
|
4118
4118
|
}
|
|
@@ -4130,10 +4130,10 @@ var DEFAULT_SETTLEMENT_CONFIG = {
|
|
|
4130
4130
|
};
|
|
4131
4131
|
function getRecoverableVtxos(vtxos, dustAmount, now) {
|
|
4132
4132
|
return vtxos.filter((vtxo) => {
|
|
4133
|
-
if (
|
|
4133
|
+
if (chunkRZ2NGS6A_cjs.canRecoverOnchain(vtxo, now)) {
|
|
4134
4134
|
return true;
|
|
4135
4135
|
}
|
|
4136
|
-
if (
|
|
4136
|
+
if (chunkRZ2NGS6A_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
|
|
4137
4137
|
return true;
|
|
4138
4138
|
}
|
|
4139
4139
|
return false;
|
|
@@ -4165,7 +4165,7 @@ function getRecoverableWithSubdust(vtxos, dustAmount, now) {
|
|
|
4165
4165
|
function isVtxoExpiringSoon(vtxo, thresholdMs) {
|
|
4166
4166
|
if (vtxo.isUnrolled) return false;
|
|
4167
4167
|
const realThresholdMs = thresholdMs <= 100 ? DEFAULT_THRESHOLD_MS : thresholdMs;
|
|
4168
|
-
const expiresAt =
|
|
4168
|
+
const expiresAt = chunkRZ2NGS6A_cjs.normalizeVtxo(vtxo).expiresAt;
|
|
4169
4169
|
if (expiresAt === void 0) return false;
|
|
4170
4170
|
const now = Date.now();
|
|
4171
4171
|
const batchExpiry = expiresAt.getTime();
|
|
@@ -4176,7 +4176,7 @@ function getExpiringAndRecoverableVtxos(vtxos, thresholdMs, dustAmount, now) {
|
|
|
4176
4176
|
return vtxos.filter(
|
|
4177
4177
|
// The leading exclusion covers the `isSubdust` arm too, which is a value
|
|
4178
4178
|
// property and would otherwise re-admit an exited coin on its own.
|
|
4179
|
-
(vtxo) => !vtxo.isUnrolled && (isVtxoExpiringSoon(vtxo, thresholdMs) ||
|
|
4179
|
+
(vtxo) => !vtxo.isUnrolled && (isVtxoExpiringSoon(vtxo, thresholdMs) || chunkRZ2NGS6A_cjs.canRecoverOnchain(vtxo, now) || isSubdust(vtxo, dustAmount))
|
|
4180
4180
|
);
|
|
4181
4181
|
}
|
|
4182
4182
|
function isMigrationCapable(wallet) {
|
|
@@ -4775,11 +4775,11 @@ var VtxoManager = class _VtxoManager {
|
|
|
4775
4775
|
`Sweep not economical: output ${outputAmount} sats after ${fee} sats fee is below dust (${dustAmount} sats)`
|
|
4776
4776
|
);
|
|
4777
4777
|
}
|
|
4778
|
-
const tx = new
|
|
4778
|
+
const tx = new chunkRZ2NGS6A_cjs.Transaction();
|
|
4779
4779
|
for (const utxo of expiredUtxos) {
|
|
4780
|
-
const utxoScript =
|
|
4780
|
+
const utxoScript = chunkRZ2NGS6A_cjs.VtxoScript.decode(utxo.tapTree);
|
|
4781
4781
|
const utxoExitLeaf = utxoScript.leaves.find(
|
|
4782
|
-
(leaf) =>
|
|
4782
|
+
(leaf) => chunkRZ2NGS6A_cjs.CSVMultisigTapscript.isScriptValid(chunkRZ2NGS6A_cjs.scriptFromTapLeafScript(leaf)) === true
|
|
4783
4783
|
);
|
|
4784
4784
|
if (!utxoExitLeaf) {
|
|
4785
4785
|
throw new Error(
|
|
@@ -4794,7 +4794,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4794
4794
|
amount: BigInt(utxo.value)
|
|
4795
4795
|
},
|
|
4796
4796
|
tapLeafScript: [utxoExitLeaf],
|
|
4797
|
-
sequence:
|
|
4797
|
+
sequence: chunkRZ2NGS6A_cjs.getSequence(utxoExitLeaf)
|
|
4798
4798
|
});
|
|
4799
4799
|
}
|
|
4800
4800
|
tx.addOutputAddress(boardingAddress, outputAmount, this.getNetwork());
|
|
@@ -4834,7 +4834,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4834
4834
|
}
|
|
4835
4835
|
/**
|
|
4836
4836
|
* Core migration routine shared by the manual API and the automatic poll
|
|
4837
|
-
* pass. Fetches a fresh {@link
|
|
4837
|
+
* pass. Fetches a fresh {@link ArkadeInfo}, applies a mid-session signer
|
|
4838
4838
|
* rotation when the wallet's own snapshot signer has been deprecated,
|
|
4839
4839
|
* selects spendable VTXOs under deprecated-signer contracts (cutoff-first),
|
|
4840
4840
|
* and settles them to the active-signer Ark address.
|
|
@@ -5037,8 +5037,8 @@ var VtxoManager = class _VtxoManager {
|
|
|
5037
5037
|
const cls = classifyAgainstSignerSet(serverPubKey, signerSet, nowSeconds);
|
|
5038
5038
|
if (cls.status === "CURRENT") continue;
|
|
5039
5039
|
const live = vtxos.filter((v) => !v.isUnrolled);
|
|
5040
|
-
const recoverable = live.filter((v) => v.isSwept && !
|
|
5041
|
-
const spendable = live.filter((v) => !
|
|
5040
|
+
const recoverable = live.filter((v) => v.isSwept && !chunkRZ2NGS6A_cjs.hasTerminalSpend(v));
|
|
5041
|
+
const spendable = live.filter((v) => !chunkRZ2NGS6A_cjs.hasTerminalSpend(v) && !v.isSwept);
|
|
5042
5042
|
const value = spendable.reduce((sum, v) => sum + v.value, 0);
|
|
5043
5043
|
let recoverableCount = 0;
|
|
5044
5044
|
let recoverableValue = 0;
|
|
@@ -5051,7 +5051,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5051
5051
|
awaitingSweepCount = spendable.length;
|
|
5052
5052
|
awaitingSweepValue = value;
|
|
5053
5053
|
for (const v of spendable) {
|
|
5054
|
-
const exp =
|
|
5054
|
+
const exp = chunkRZ2NGS6A_cjs.toBatchExpiry(v);
|
|
5055
5055
|
if (exp !== void 0 && (nextSweepEta === void 0 || exp < nextSweepEta)) {
|
|
5056
5056
|
nextSweepEta = exp;
|
|
5057
5057
|
}
|
|
@@ -5312,7 +5312,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5312
5312
|
/** Decodes the boarding tapscript exit path to extract the CSV timelock. */
|
|
5313
5313
|
getBoardingTimelock() {
|
|
5314
5314
|
const wallet = this.getSweepWallet();
|
|
5315
|
-
const exitScript =
|
|
5315
|
+
const exitScript = chunkRZ2NGS6A_cjs.CSVMultisigTapscript.decode(
|
|
5316
5316
|
base.hex.decode(wallet.boardingTapscript.exitScript)
|
|
5317
5317
|
);
|
|
5318
5318
|
return exitScript.params.timelock;
|
|
@@ -5443,8 +5443,8 @@ var VtxoManager = class _VtxoManager {
|
|
|
5443
5443
|
* or doesn't carry the metadata.
|
|
5444
5444
|
*/
|
|
5445
5445
|
extractSpentOutpoint(error) {
|
|
5446
|
-
const ark =
|
|
5447
|
-
if (!
|
|
5446
|
+
const ark = chunkRZ2NGS6A_cjs.maybeArkError(error);
|
|
5447
|
+
if (!chunkRZ2NGS6A_cjs.isArkError(ark, chunkRZ2NGS6A_cjs.ArkErrorName.VTXO_ALREADY_SPENT)) return void 0;
|
|
5448
5448
|
const raw = ark.metadata?.vtxo_outpoint;
|
|
5449
5449
|
if (typeof raw !== "string") return void 0;
|
|
5450
5450
|
const [txid, voutStr] = raw.split(":");
|
|
@@ -5634,7 +5634,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5634
5634
|
if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
|
|
5635
5635
|
break;
|
|
5636
5636
|
}
|
|
5637
|
-
const inputFee = estimator.evalOffchainInput(
|
|
5637
|
+
const inputFee = estimator.evalOffchainInput(chunkRZ2NGS6A_cjs.toOffchainInputFeeParams(v));
|
|
5638
5638
|
if (inputFee.satoshis >= v.value) {
|
|
5639
5639
|
continue;
|
|
5640
5640
|
}
|
|
@@ -5654,7 +5654,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5654
5654
|
const arkAddress = await this.wallet.getAddress();
|
|
5655
5655
|
const outputFee = estimator.evalOffchainOutput({
|
|
5656
5656
|
amount: totalAmount,
|
|
5657
|
-
script: base.hex.encode(
|
|
5657
|
+
script: base.hex.encode(chunkRZ2NGS6A_cjs.ArkAddress.decode(arkAddress).pkScript)
|
|
5658
5658
|
});
|
|
5659
5659
|
totalAmount -= BigInt(outputFee.satoshis);
|
|
5660
5660
|
if (totalAmount < dustAmount) return;
|
|
@@ -5734,7 +5734,7 @@ var ArkNote = class _ArkNote {
|
|
|
5734
5734
|
this.value = value;
|
|
5735
5735
|
this.HRP = HRP;
|
|
5736
5736
|
const preimageHash = utils_js.sha256(this.preimage);
|
|
5737
|
-
this.vtxoScript = new
|
|
5737
|
+
this.vtxoScript = new chunkRZ2NGS6A_cjs.VtxoScript([noteTapscript(preimageHash)]);
|
|
5738
5738
|
const leaf = this.vtxoScript.leaves[0];
|
|
5739
5739
|
this.txid = base.hex.encode(new Uint8Array(preimageHash).reverse());
|
|
5740
5740
|
this.tapTree = this.vtxoScript.encode();
|
|
@@ -5901,7 +5901,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
5901
5901
|
const privateKey = data.slice(1, 33);
|
|
5902
5902
|
const serverPubKey = data.slice(33, 65);
|
|
5903
5903
|
const sequence = new DataView(data.buffer, data.byteOffset + 65, 4).getUint32(0, false);
|
|
5904
|
-
const csvTimelock =
|
|
5904
|
+
const csvTimelock = chunkRZ2NGS6A_cjs.sequenceToTimelock(sequence);
|
|
5905
5905
|
return new _ArkadeCash(privateKey, serverPubKey, csvTimelock, decoded.prefix);
|
|
5906
5906
|
}
|
|
5907
5907
|
toString() {
|
|
@@ -5909,7 +5909,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
5909
5909
|
data[0] = _ArkadeCash.Version;
|
|
5910
5910
|
data.set(this._privateKey, 1);
|
|
5911
5911
|
data.set(this._serverPubKey, 33);
|
|
5912
|
-
const sequence =
|
|
5912
|
+
const sequence = chunkRZ2NGS6A_cjs.timelockToSequence(this.csvTimelock);
|
|
5913
5913
|
new DataView(data.buffer, data.byteOffset + 65, 4).setUint32(0, sequence, false);
|
|
5914
5914
|
const words = base.bech32m.toWords(data);
|
|
5915
5915
|
return base.bech32m.encode(this.hrp, words, 1023);
|
|
@@ -5918,7 +5918,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
5918
5918
|
return SingleKey.fromPrivateKey(this._privateKey);
|
|
5919
5919
|
}
|
|
5920
5920
|
get vtxoScript() {
|
|
5921
|
-
return new
|
|
5921
|
+
return new chunkQ5WQ4Y2I_cjs.DefaultVtxo.Script({
|
|
5922
5922
|
pubKey: this._publicKey,
|
|
5923
5923
|
serverPubKey: this._serverPubKey,
|
|
5924
5924
|
csvTimelock: this.csvTimelock
|
|
@@ -6179,7 +6179,7 @@ async function captureExitBranch(params) {
|
|
|
6179
6179
|
const nonCommitment = ordered.filter((c) => chainTxTypeToChainedExit(c.type) !== 1 /* Commitment */).map((c) => c.txid);
|
|
6180
6180
|
if (nonCommitment.length > 0) {
|
|
6181
6181
|
for (const psbt of await resolver.getVirtualTxs(nonCommitment)) {
|
|
6182
|
-
psbtByTxid.set(
|
|
6182
|
+
psbtByTxid.set(chunkRZ2NGS6A_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
6183
6183
|
}
|
|
6184
6184
|
}
|
|
6185
6185
|
}
|
|
@@ -6222,10 +6222,10 @@ var IndexerExitDataSource = class {
|
|
|
6222
6222
|
while (hasMore) {
|
|
6223
6223
|
const { chain: page, page: meta } = await this.indexer.getVtxoChain(
|
|
6224
6224
|
{ txid: vtxo.txid, vout: vtxo.vout },
|
|
6225
|
-
{ pageIndex, pageSize:
|
|
6225
|
+
{ pageIndex, pageSize: chunkRZ2NGS6A_cjs.DEFAULT_PAGE_SIZE }
|
|
6226
6226
|
);
|
|
6227
6227
|
chain.push(...page);
|
|
6228
|
-
hasMore = meta ? page.length ===
|
|
6228
|
+
hasMore = meta ? page.length === chunkRZ2NGS6A_cjs.DEFAULT_PAGE_SIZE : false;
|
|
6229
6229
|
pageIndex++;
|
|
6230
6230
|
}
|
|
6231
6231
|
return chain;
|
|
@@ -6237,12 +6237,12 @@ var IndexerExitDataSource = class {
|
|
|
6237
6237
|
while (hasMore) {
|
|
6238
6238
|
const { txs, page } = await this.indexer.getVirtualTxs(txids, {
|
|
6239
6239
|
pageIndex,
|
|
6240
|
-
pageSize:
|
|
6240
|
+
pageSize: chunkRZ2NGS6A_cjs.DEFAULT_PAGE_SIZE
|
|
6241
6241
|
});
|
|
6242
6242
|
for (const psbt of txs) {
|
|
6243
|
-
out.set(
|
|
6243
|
+
out.set(chunkRZ2NGS6A_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
6244
6244
|
}
|
|
6245
|
-
hasMore = page ? txs.length ===
|
|
6245
|
+
hasMore = page ? txs.length === chunkRZ2NGS6A_cjs.DEFAULT_PAGE_SIZE : false;
|
|
6246
6246
|
pageIndex++;
|
|
6247
6247
|
}
|
|
6248
6248
|
return out;
|
|
@@ -6263,7 +6263,7 @@ function chainedTxTypeToChainTxType(t) {
|
|
|
6263
6263
|
}
|
|
6264
6264
|
}
|
|
6265
6265
|
function psbtInputTxids(psbtBase64) {
|
|
6266
|
-
const tx =
|
|
6266
|
+
const tx = chunkRZ2NGS6A_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
|
|
6267
6267
|
const ids = [];
|
|
6268
6268
|
for (let i = 0; i < tx.inputsLength; i++) {
|
|
6269
6269
|
const txid = tx.getInput(i).txid;
|
|
@@ -6617,15 +6617,15 @@ async function saveArkInfoSnapshot(repo, info, savedAt) {
|
|
|
6617
6617
|
}
|
|
6618
6618
|
}));
|
|
6619
6619
|
}
|
|
6620
|
-
async function resolveArkInfo(arkProvider, walletRepository) {
|
|
6620
|
+
async function resolveArkInfo(arkProvider, walletRepository, opts) {
|
|
6621
6621
|
let info;
|
|
6622
6622
|
try {
|
|
6623
6623
|
info = await arkProvider.getInfo();
|
|
6624
6624
|
} catch (err) {
|
|
6625
|
-
if (!
|
|
6625
|
+
if (opts?.requireLive || !chunkRZ2NGS6A_cjs.isRetryableProviderError(err)) throw err;
|
|
6626
6626
|
const snapshot = await loadArkInfoSnapshot(walletRepository);
|
|
6627
6627
|
if (!snapshot) {
|
|
6628
|
-
throw new
|
|
6628
|
+
throw new chunkRZ2NGS6A_cjs.ProviderUnavailableError(
|
|
6629
6629
|
"Arkade server info is unavailable and no cached snapshot exists",
|
|
6630
6630
|
{ cause: err }
|
|
6631
6631
|
);
|
|
@@ -7015,7 +7015,7 @@ function collectArkTxidsNeedingCreatedAt(vtxos) {
|
|
|
7015
7015
|
return [...txids];
|
|
7016
7016
|
}
|
|
7017
7017
|
async function buildTransactionHistory(vtxos, allBoardingTxs, commitmentsToIgnore, resolveTxCreatedAt) {
|
|
7018
|
-
const fromOldestVtxo = vtxos.map(
|
|
7018
|
+
const fromOldestVtxo = vtxos.map(chunkRZ2NGS6A_cjs.normalizeVtxo).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
|
|
7019
7019
|
const txidsNeedingCreatedAt = resolveTxCreatedAt ? collectArkTxidsNeedingCreatedAt(fromOldestVtxo) : [];
|
|
7020
7020
|
const resolvedCreatedAt = resolveTxCreatedAt && txidsNeedingCreatedAt.length > 0 ? await resolveTxCreatedAt(txidsNeedingCreatedAt) : /* @__PURE__ */ new Map();
|
|
7021
7021
|
const unmatchedSettledBoardingTxs = allBoardingTxs.filter(isSettledBoardingReceive).sort((a, b) => a.createdAt - b.createdAt);
|
|
@@ -7179,7 +7179,7 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7179
7179
|
const virtualCoins = await this.wallet.getSpendableVtxos({
|
|
7180
7180
|
withRecoverable: false
|
|
7181
7181
|
});
|
|
7182
|
-
const controlAssetRef = params.controlAssetId ?
|
|
7182
|
+
const controlAssetRef = params.controlAssetId ? chunkWQIWUTYS_cjs.AssetRef.fromId(chunkWQIWUTYS_cjs.AssetId.fromString(params.controlAssetId)) : null;
|
|
7183
7183
|
const coinSelection = selectVirtualCoins(virtualCoins, Number(this.wallet.dustAmount));
|
|
7184
7184
|
let totalBtcSelected = 0n;
|
|
7185
7185
|
const assetChanges = /* @__PURE__ */ new Map();
|
|
@@ -7192,8 +7192,8 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7192
7192
|
}
|
|
7193
7193
|
}
|
|
7194
7194
|
const groups = [];
|
|
7195
|
-
const issuedAssetOutput =
|
|
7196
|
-
const issuedAssetGroup =
|
|
7195
|
+
const issuedAssetOutput = chunkWQIWUTYS_cjs.AssetOutput.create(0, params.amount);
|
|
7196
|
+
const issuedAssetGroup = chunkWQIWUTYS_cjs.AssetGroup.create(
|
|
7197
7197
|
null,
|
|
7198
7198
|
controlAssetRef,
|
|
7199
7199
|
[],
|
|
@@ -7208,28 +7208,28 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7208
7208
|
for (const [inputIndex, assets] of assetInputs) {
|
|
7209
7209
|
for (const asset of assets) {
|
|
7210
7210
|
if (asset.assetId !== assetId) continue;
|
|
7211
|
-
changeInputs.push(
|
|
7211
|
+
changeInputs.push(chunkWQIWUTYS_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
7212
7212
|
}
|
|
7213
7213
|
}
|
|
7214
7214
|
groups.push(
|
|
7215
|
-
|
|
7216
|
-
|
|
7215
|
+
chunkWQIWUTYS_cjs.AssetGroup.create(
|
|
7216
|
+
chunkWQIWUTYS_cjs.AssetId.fromString(assetId),
|
|
7217
7217
|
null,
|
|
7218
7218
|
changeInputs,
|
|
7219
|
-
[
|
|
7219
|
+
[chunkWQIWUTYS_cjs.AssetOutput.create(0, amount)],
|
|
7220
7220
|
[]
|
|
7221
7221
|
)
|
|
7222
7222
|
);
|
|
7223
7223
|
}
|
|
7224
7224
|
}
|
|
7225
7225
|
const address = await this.wallet.getAddress();
|
|
7226
|
-
const outputAddress =
|
|
7226
|
+
const outputAddress = chunkRZ2NGS6A_cjs.ArkAddress.decode(address);
|
|
7227
7227
|
const outputs = [
|
|
7228
7228
|
{
|
|
7229
7229
|
script: outputAddress.pkScript,
|
|
7230
7230
|
amount: BigInt(totalBtcSelected)
|
|
7231
7231
|
},
|
|
7232
|
-
Extension.create([
|
|
7232
|
+
Extension.create([chunkWQIWUTYS_cjs.Packet.create(groups)]).txOut()
|
|
7233
7233
|
];
|
|
7234
7234
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(
|
|
7235
7235
|
coinSelection.inputs,
|
|
@@ -7237,7 +7237,7 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7237
7237
|
);
|
|
7238
7238
|
return {
|
|
7239
7239
|
arkTxId: arkTxid,
|
|
7240
|
-
assetId:
|
|
7240
|
+
assetId: chunkWQIWUTYS_cjs.AssetId.create(arkTxid, 0).toString()
|
|
7241
7241
|
};
|
|
7242
7242
|
}
|
|
7243
7243
|
/**
|
|
@@ -7309,16 +7309,16 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7309
7309
|
for (const [inputIndex, assets] of assetInputs) {
|
|
7310
7310
|
for (const asset of assets) {
|
|
7311
7311
|
if (asset.assetId !== params.assetId) continue;
|
|
7312
|
-
reissueInputs.push(
|
|
7312
|
+
reissueInputs.push(chunkWQIWUTYS_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
7313
7313
|
}
|
|
7314
7314
|
}
|
|
7315
7315
|
const totalAssetAmount = assetToReissueAmount + params.amount;
|
|
7316
|
-
const reissueAssetIdObj =
|
|
7317
|
-
const reissueAssetGroup =
|
|
7316
|
+
const reissueAssetIdObj = chunkWQIWUTYS_cjs.AssetId.fromString(params.assetId);
|
|
7317
|
+
const reissueAssetGroup = chunkWQIWUTYS_cjs.AssetGroup.create(
|
|
7318
7318
|
reissueAssetIdObj,
|
|
7319
7319
|
null,
|
|
7320
7320
|
reissueInputs,
|
|
7321
|
-
[
|
|
7321
|
+
[chunkWQIWUTYS_cjs.AssetOutput.create(0, totalAssetAmount)],
|
|
7322
7322
|
[]
|
|
7323
7323
|
);
|
|
7324
7324
|
const groups = [reissueAssetGroup];
|
|
@@ -7327,27 +7327,27 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7327
7327
|
for (const [inputIndex, assets] of assetInputs) {
|
|
7328
7328
|
for (const asset of assets) {
|
|
7329
7329
|
if (asset.assetId !== assetId) continue;
|
|
7330
|
-
changeInputs.push(
|
|
7330
|
+
changeInputs.push(chunkWQIWUTYS_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
7331
7331
|
}
|
|
7332
7332
|
}
|
|
7333
7333
|
groups.push(
|
|
7334
|
-
|
|
7335
|
-
|
|
7334
|
+
chunkWQIWUTYS_cjs.AssetGroup.create(
|
|
7335
|
+
chunkWQIWUTYS_cjs.AssetId.fromString(assetId),
|
|
7336
7336
|
null,
|
|
7337
7337
|
changeInputs,
|
|
7338
|
-
[
|
|
7338
|
+
[chunkWQIWUTYS_cjs.AssetOutput.create(0, amount)],
|
|
7339
7339
|
[]
|
|
7340
7340
|
)
|
|
7341
7341
|
);
|
|
7342
7342
|
}
|
|
7343
7343
|
const address = await this.wallet.getAddress();
|
|
7344
|
-
const outputAddress =
|
|
7344
|
+
const outputAddress = chunkRZ2NGS6A_cjs.ArkAddress.decode(address);
|
|
7345
7345
|
const outputs = [
|
|
7346
7346
|
{
|
|
7347
7347
|
script: outputAddress.pkScript,
|
|
7348
7348
|
amount: BigInt(totalBtcSelected)
|
|
7349
7349
|
},
|
|
7350
|
-
Extension.create([
|
|
7350
|
+
Extension.create([chunkWQIWUTYS_cjs.Packet.create(groups)]).txOut()
|
|
7351
7351
|
];
|
|
7352
7352
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
|
|
7353
7353
|
return arkTxid;
|
|
@@ -7414,27 +7414,27 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7414
7414
|
for (const [inputIndex, assets] of assetInputs) {
|
|
7415
7415
|
for (const asset of assets) {
|
|
7416
7416
|
if (asset.assetId !== assetId) continue;
|
|
7417
|
-
changeInputs.push(
|
|
7417
|
+
changeInputs.push(chunkWQIWUTYS_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
7418
7418
|
}
|
|
7419
7419
|
}
|
|
7420
7420
|
groups.push(
|
|
7421
|
-
|
|
7422
|
-
|
|
7421
|
+
chunkWQIWUTYS_cjs.AssetGroup.create(
|
|
7422
|
+
chunkWQIWUTYS_cjs.AssetId.fromString(assetId),
|
|
7423
7423
|
null,
|
|
7424
7424
|
changeInputs,
|
|
7425
|
-
amount > 0n ? [
|
|
7425
|
+
amount > 0n ? [chunkWQIWUTYS_cjs.AssetOutput.create(0, amount)] : [],
|
|
7426
7426
|
[]
|
|
7427
7427
|
)
|
|
7428
7428
|
);
|
|
7429
7429
|
}
|
|
7430
7430
|
const address = await this.wallet.getAddress();
|
|
7431
|
-
const outputAddress =
|
|
7431
|
+
const outputAddress = chunkRZ2NGS6A_cjs.ArkAddress.decode(address);
|
|
7432
7432
|
const outputs = [
|
|
7433
7433
|
{
|
|
7434
7434
|
script: outputAddress.pkScript,
|
|
7435
7435
|
amount: BigInt(totalBtcSelected)
|
|
7436
7436
|
},
|
|
7437
|
-
Extension.create([
|
|
7437
|
+
Extension.create([chunkWQIWUTYS_cjs.Packet.create(groups)]).txOut()
|
|
7438
7438
|
];
|
|
7439
7439
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
|
|
7440
7440
|
return arkTxid;
|
|
@@ -7459,7 +7459,7 @@ function castMetadata(metadata) {
|
|
|
7459
7459
|
} else {
|
|
7460
7460
|
throw new Error("Invalid metadata value type");
|
|
7461
7461
|
}
|
|
7462
|
-
md.push(
|
|
7462
|
+
md.push(chunkWQIWUTYS_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
|
|
7463
7463
|
}
|
|
7464
7464
|
return md;
|
|
7465
7465
|
}
|
|
@@ -7480,10 +7480,10 @@ var DelegateManagerImpl = class {
|
|
|
7480
7480
|
if (vtxos.length === 0) {
|
|
7481
7481
|
return { delegated: [], failed: [] };
|
|
7482
7482
|
}
|
|
7483
|
-
const destinationScript =
|
|
7483
|
+
const destinationScript = chunkRZ2NGS6A_cjs.ArkAddress.decode(destination).pkScript;
|
|
7484
7484
|
const arkInfo = await this.arkInfoProvider.getInfo();
|
|
7485
7485
|
const delegateInfo = await this.delegateProvider.getDelegateInfo();
|
|
7486
|
-
const eligible = vtxos.map(
|
|
7486
|
+
const eligible = vtxos.map(chunkRZ2NGS6A_cjs.normalizeVtxo).filter(
|
|
7487
7487
|
(v) => isAnnotated(v) && findDelegateTapLeaf(v, delegateInfo.pubkey) !== void 0
|
|
7488
7488
|
);
|
|
7489
7489
|
if (eligible.length === 0) {
|
|
@@ -7512,11 +7512,11 @@ var DelegateManagerImpl = class {
|
|
|
7512
7512
|
const groupByExpiry = /* @__PURE__ */ new Map();
|
|
7513
7513
|
let recoverableVtxos = [];
|
|
7514
7514
|
for (const vtxo of eligible) {
|
|
7515
|
-
if (
|
|
7515
|
+
if (chunkRZ2NGS6A_cjs.canRecoverOnchain(vtxo, now)) {
|
|
7516
7516
|
recoverableVtxos.push(vtxo);
|
|
7517
7517
|
continue;
|
|
7518
7518
|
}
|
|
7519
|
-
const expiry =
|
|
7519
|
+
const expiry = chunkRZ2NGS6A_cjs.toBatchExpiry(vtxo);
|
|
7520
7520
|
if (!expiry) continue;
|
|
7521
7521
|
const dayKey = getDayTimestamp(expiry);
|
|
7522
7522
|
groupByExpiry.set(dayKey, [...groupByExpiry.get(dayKey) ?? [], vtxo]);
|
|
@@ -7581,7 +7581,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7581
7581
|
}
|
|
7582
7582
|
if (!delegateAt) {
|
|
7583
7583
|
const now = { timestamp: /* @__PURE__ */ new Date() };
|
|
7584
|
-
const expiryTimestamp = vtxos.filter((coin) => !
|
|
7584
|
+
const expiryTimestamp = vtxos.filter((coin) => !chunkRZ2NGS6A_cjs.canRecoverOnchain(coin, now) && chunkRZ2NGS6A_cjs.toBatchExpiry(coin)).reduce((min, coin) => Math.min(min, chunkRZ2NGS6A_cjs.toBatchExpiry(coin)), Number.MAX_SAFE_INTEGER);
|
|
7585
7585
|
if (!expiryTimestamp || expiryTimestamp === Number.MAX_SAFE_INTEGER) {
|
|
7586
7586
|
delegateAt = new Date(Date.now() + 1 * 60 * 1e3);
|
|
7587
7587
|
} else {
|
|
@@ -7610,7 +7610,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7610
7610
|
let amount = 0n;
|
|
7611
7611
|
for (const coin of vtxos) {
|
|
7612
7612
|
const inputFee = estimator.evalOffchainInput({
|
|
7613
|
-
...
|
|
7613
|
+
...chunkRZ2NGS6A_cjs.toOffchainInputFeeParams(coin),
|
|
7614
7614
|
type: "vtxo"
|
|
7615
7615
|
});
|
|
7616
7616
|
if (inputFee.value >= coin.value) {
|
|
@@ -7624,7 +7624,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7624
7624
|
const delegateFee = BigInt(Number(fee));
|
|
7625
7625
|
if (delegateFee > 0n) {
|
|
7626
7626
|
outputs.push({
|
|
7627
|
-
script:
|
|
7627
|
+
script: chunkRZ2NGS6A_cjs.ArkAddress.decode(delegateAddress).pkScript,
|
|
7628
7628
|
amount: delegateFee
|
|
7629
7629
|
});
|
|
7630
7630
|
}
|
|
@@ -7657,10 +7657,10 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7657
7657
|
destinationScript
|
|
7658
7658
|
);
|
|
7659
7659
|
const forfeitOutputScript = btcSigner.OutScript.encode(
|
|
7660
|
-
btcSigner.Address(
|
|
7660
|
+
btcSigner.Address(chunkRZ2NGS6A_cjs.getNetwork(network)).decode(forfeitAddress)
|
|
7661
7661
|
);
|
|
7662
7662
|
const forfeits = await Promise.all(
|
|
7663
|
-
vtxos.filter((v) => !
|
|
7663
|
+
vtxos.filter((v) => !chunkRZ2NGS6A_cjs.canRecoverOnchain(v, { timestamp: /* @__PURE__ */ new Date() })).map(async (coin) => {
|
|
7664
7664
|
const forfeit = await makeDelegateForfeitTx(
|
|
7665
7665
|
coin,
|
|
7666
7666
|
dust,
|
|
@@ -7685,7 +7685,7 @@ async function makeDelegateForfeitTx(input, connectorAmount, delegatePubkey, for
|
|
|
7685
7685
|
index: input.vout,
|
|
7686
7686
|
witnessUtxo: {
|
|
7687
7687
|
amount: BigInt(input.value),
|
|
7688
|
-
script:
|
|
7688
|
+
script: chunkRZ2NGS6A_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
7689
7689
|
},
|
|
7690
7690
|
sighashType: btcSigner.SigHash.ALL_ANYONECANPAY,
|
|
7691
7691
|
tapLeafScript: [delegateTapLeaf]
|
|
@@ -7743,7 +7743,7 @@ async function makeSignedDelegateIntent(identity, coins, outputs, onchainOutputs
|
|
|
7743
7743
|
expire_at: 0,
|
|
7744
7744
|
cosigners_public_keys: cosignerPubKeys
|
|
7745
7745
|
};
|
|
7746
|
-
const proof =
|
|
7746
|
+
const proof = chunkRZ2NGS6A_cjs.Intent.create(message, coins, outputs);
|
|
7747
7747
|
const signedProof = await identity.sign(proof);
|
|
7748
7748
|
return {
|
|
7749
7749
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -7761,10 +7761,10 @@ function getDayTimestamp(timestamp) {
|
|
|
7761
7761
|
function findDelegateTapLeaf(vtxo, delegatePubkey) {
|
|
7762
7762
|
if (!vtxo.tapTree) return void 0;
|
|
7763
7763
|
const pk = delegatePubkey.length === 66 ? delegatePubkey.slice(2) : delegatePubkey;
|
|
7764
|
-
const vtxoScript =
|
|
7764
|
+
const vtxoScript = chunkRZ2NGS6A_cjs.VtxoScript.decode(vtxo.tapTree);
|
|
7765
7765
|
return vtxoScript.leaves.find((tapLeaf) => {
|
|
7766
|
-
const arkTapscript =
|
|
7767
|
-
if (!
|
|
7766
|
+
const arkTapscript = chunkRZ2NGS6A_cjs.decodeTapscript(chunkRZ2NGS6A_cjs.scriptFromTapLeafScript(tapLeaf));
|
|
7767
|
+
if (!chunkRZ2NGS6A_cjs.MultisigTapscript.is(arkTapscript)) return false;
|
|
7768
7768
|
return arkTapscript.params.pubkeys.map(base.hex.encode).includes(pk);
|
|
7769
7769
|
});
|
|
7770
7770
|
}
|
|
@@ -8045,7 +8045,7 @@ function createManagedConnection(dbName, version, initDatabase2) {
|
|
|
8045
8045
|
};
|
|
8046
8046
|
}
|
|
8047
8047
|
function scriptFromArkAddress(address) {
|
|
8048
|
-
return base.hex.encode(
|
|
8048
|
+
return base.hex.encode(chunkRZ2NGS6A_cjs.ArkAddress.decode(address).pkScript);
|
|
8049
8049
|
}
|
|
8050
8050
|
|
|
8051
8051
|
// src/repositories/indexedDB/schema.ts
|
|
@@ -8540,7 +8540,7 @@ function validateVtxosForScript(vtxos, script, context) {
|
|
|
8540
8540
|
}
|
|
8541
8541
|
async function getVtxosForContract(repo, contract) {
|
|
8542
8542
|
const vtxos = repo.getVtxosForScript ? await repo.getVtxosForScript(contract.script) : filterVtxosForScript(await repo.getVtxos(contract.address), contract.script);
|
|
8543
|
-
return vtxos.map(
|
|
8543
|
+
return vtxos.map(chunkRZ2NGS6A_cjs.normalizeVtxo);
|
|
8544
8544
|
}
|
|
8545
8545
|
async function saveVtxosForContract(repo, contract, vtxos) {
|
|
8546
8546
|
if (repo.saveVtxosForScript) {
|
|
@@ -8682,7 +8682,7 @@ function decodeArkContract(encoded) {
|
|
|
8682
8682
|
}
|
|
8683
8683
|
function contractFromArkContract(encoded, options = {}) {
|
|
8684
8684
|
const parsed = decodeArkContract(encoded);
|
|
8685
|
-
const handler =
|
|
8685
|
+
const handler = chunkQ5WQ4Y2I_cjs.contractHandlers.get(parsed.type);
|
|
8686
8686
|
if (!handler) {
|
|
8687
8687
|
throw new Error(`No handler registered for contract type '${parsed.type}'`);
|
|
8688
8688
|
}
|
|
@@ -8696,9 +8696,9 @@ function contractFromArkContract(encoded, options = {}) {
|
|
|
8696
8696
|
metadata: options.metadata
|
|
8697
8697
|
};
|
|
8698
8698
|
}
|
|
8699
|
-
function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix =
|
|
8699
|
+
function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunkRZ2NGS6A_cjs.DEFAULT_NETWORK.hrp, options = {}) {
|
|
8700
8700
|
const parsed = decodeArkContract(encoded);
|
|
8701
|
-
const handler =
|
|
8701
|
+
const handler = chunkQ5WQ4Y2I_cjs.contractHandlers.getOrThrow(parsed.type);
|
|
8702
8702
|
const params = parsed.data;
|
|
8703
8703
|
const vtxoScript = handler.createScript(params);
|
|
8704
8704
|
return {
|
|
@@ -8952,9 +8952,9 @@ var ContractWatcher = class {
|
|
|
8952
8952
|
this.connectionState = "connected";
|
|
8953
8953
|
this.reconnectAttempts = 0;
|
|
8954
8954
|
this.listenLoop().catch((e) => {
|
|
8955
|
-
if (
|
|
8955
|
+
if (chunkRZ2NGS6A_cjs.isEventSourceError(e)) {
|
|
8956
8956
|
console.debug("ContractWatcher subscription disconnected; reconnecting");
|
|
8957
|
-
} else if (!
|
|
8957
|
+
} else if (!chunkRZ2NGS6A_cjs.isEventSourceUnavailableError(e)) {
|
|
8958
8958
|
console.error(e);
|
|
8959
8959
|
}
|
|
8960
8960
|
this.connectionState = "disconnected";
|
|
@@ -8966,7 +8966,7 @@ var ContractWatcher = class {
|
|
|
8966
8966
|
this.scheduleReconnect();
|
|
8967
8967
|
});
|
|
8968
8968
|
} catch (error) {
|
|
8969
|
-
if (!
|
|
8969
|
+
if (!chunkRZ2NGS6A_cjs.isEventSourceUnavailableError(error)) {
|
|
8970
8970
|
console.error("ContractWatcher connection failed:", error);
|
|
8971
8971
|
}
|
|
8972
8972
|
this.connectionState = "disconnected";
|
|
@@ -8992,7 +8992,7 @@ var ContractWatcher = class {
|
|
|
8992
8992
|
* slower; what it loses is push latency.
|
|
8993
8993
|
*/
|
|
8994
8994
|
reportEventSourceUnavailable(error) {
|
|
8995
|
-
if (!
|
|
8995
|
+
if (!chunkRZ2NGS6A_cjs.isEventSourceUnavailableError(error)) return false;
|
|
8996
8996
|
if (!this.eventSourceReported) {
|
|
8997
8997
|
this.eventSourceReported = true;
|
|
8998
8998
|
console.warn(
|
|
@@ -9208,14 +9208,14 @@ var ContractWatcher = class {
|
|
|
9208
9208
|
const timestamp = Date.now();
|
|
9209
9209
|
if (update.newVtxos?.length) {
|
|
9210
9210
|
this.processSubscriptionVtxos(
|
|
9211
|
-
update.newVtxos.map(
|
|
9211
|
+
update.newVtxos.map(chunkRZ2NGS6A_cjs.normalizeVtxo),
|
|
9212
9212
|
"vtxo_received",
|
|
9213
9213
|
timestamp
|
|
9214
9214
|
);
|
|
9215
9215
|
}
|
|
9216
9216
|
if (update.spentVtxos?.length) {
|
|
9217
9217
|
this.processSubscriptionVtxos(
|
|
9218
|
-
update.spentVtxos.map(
|
|
9218
|
+
update.spentVtxos.map(chunkRZ2NGS6A_cjs.normalizeVtxo),
|
|
9219
9219
|
"vtxo_spent",
|
|
9220
9220
|
timestamp
|
|
9221
9221
|
);
|
|
@@ -9310,7 +9310,7 @@ var NON_TERMINAL_INTENT_STATES = ALL_INTENT_STATES.filter(
|
|
|
9310
9310
|
(s) => !isTerminalIntentState(s)
|
|
9311
9311
|
);
|
|
9312
9312
|
function isConsumed(vtxo) {
|
|
9313
|
-
return vtxo !== void 0 &&
|
|
9313
|
+
return vtxo !== void 0 && chunkRZ2NGS6A_cjs.hasTerminalSpend(vtxo);
|
|
9314
9314
|
}
|
|
9315
9315
|
async function classifyIntent(intent, vtxosByOutpoint, now) {
|
|
9316
9316
|
if (isTerminalIntentState(intent.state)) return void 0;
|
|
@@ -9353,7 +9353,7 @@ async function reconcileIntents(deps) {
|
|
|
9353
9353
|
let vtxosByOutpoint = /* @__PURE__ */ new Map();
|
|
9354
9354
|
if (outpoints.length > 0) {
|
|
9355
9355
|
try {
|
|
9356
|
-
const { vtxos } = await
|
|
9356
|
+
const { vtxos } = await chunkRZ2NGS6A_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
|
|
9357
9357
|
vtxosByOutpoint = new Map(vtxos.map((v) => [outpointKey(v), v]));
|
|
9358
9358
|
} catch (e) {
|
|
9359
9359
|
console.error("reconcileIntents: failed to fetch input VTXO state", e);
|
|
@@ -9527,7 +9527,7 @@ var ContractManager = class _ContractManager {
|
|
|
9527
9527
|
await this.reconcileWatched();
|
|
9528
9528
|
this.markSyncOnline();
|
|
9529
9529
|
} catch (err) {
|
|
9530
|
-
if (!
|
|
9530
|
+
if (!chunkRZ2NGS6A_cjs.isRetryableProviderError(err)) throw err;
|
|
9531
9531
|
this.markSyncDegraded(err);
|
|
9532
9532
|
}
|
|
9533
9533
|
this.initialized = true;
|
|
@@ -9659,7 +9659,7 @@ var ContractManager = class _ContractManager {
|
|
|
9659
9659
|
const from = Math.max(0, watermark - lookAhead.size);
|
|
9660
9660
|
const to = watermark + lookAhead.size;
|
|
9661
9661
|
const deps = lookAhead.candidateDeps();
|
|
9662
|
-
const handlers =
|
|
9662
|
+
const handlers = chunkQ5WQ4Y2I_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkQ5WQ4Y2I_cjs.contractHandlers.get(t)).filter(hasCandidates);
|
|
9663
9663
|
const band = /* @__PURE__ */ new Map();
|
|
9664
9664
|
for (let index = from; index <= to; index++) {
|
|
9665
9665
|
const descriptor = lookAhead.materialize(index);
|
|
@@ -9670,7 +9670,7 @@ var ContractManager = class _ContractManager {
|
|
|
9670
9670
|
index,
|
|
9671
9671
|
params: {
|
|
9672
9672
|
...candidate,
|
|
9673
|
-
...
|
|
9673
|
+
...chunkQ5WQ4Y2I_cjs.speculativeReceiveMetadata(descriptor)
|
|
9674
9674
|
}
|
|
9675
9675
|
});
|
|
9676
9676
|
}
|
|
@@ -9732,7 +9732,7 @@ var ContractManager = class _ContractManager {
|
|
|
9732
9732
|
});
|
|
9733
9733
|
for (const entry of pending) entry.catchUpPending = false;
|
|
9734
9734
|
} catch (err) {
|
|
9735
|
-
if (!
|
|
9735
|
+
if (!chunkRZ2NGS6A_cjs.isRetryableProviderError(err)) throw err;
|
|
9736
9736
|
this.markSyncDegraded(err);
|
|
9737
9737
|
}
|
|
9738
9738
|
}
|
|
@@ -9782,7 +9782,7 @@ var ContractManager = class _ContractManager {
|
|
|
9782
9782
|
await this.fetchContractVxosFromIndexer([contract]);
|
|
9783
9783
|
this.markSyncOnline();
|
|
9784
9784
|
} catch (err) {
|
|
9785
|
-
if (!
|
|
9785
|
+
if (!chunkRZ2NGS6A_cjs.isRetryableProviderError(err)) throw err;
|
|
9786
9786
|
this.markSyncDegraded(err);
|
|
9787
9787
|
}
|
|
9788
9788
|
await this.watcher.addContract(contract);
|
|
@@ -9819,7 +9819,7 @@ var ContractManager = class _ContractManager {
|
|
|
9819
9819
|
return result;
|
|
9820
9820
|
}
|
|
9821
9821
|
async upsertContractRow(params) {
|
|
9822
|
-
const handler =
|
|
9822
|
+
const handler = chunkQ5WQ4Y2I_cjs.contractHandlers.get(params.type);
|
|
9823
9823
|
if (!handler) {
|
|
9824
9824
|
throw new Error(`No handler registered for contract type '${params.type}'`);
|
|
9825
9825
|
}
|
|
@@ -9919,7 +9919,7 @@ var ContractManager = class _ContractManager {
|
|
|
9919
9919
|
`scanContracts: batchSize must be a positive integer (got ${String(opts.batchSize)})`
|
|
9920
9920
|
);
|
|
9921
9921
|
}
|
|
9922
|
-
const registered =
|
|
9922
|
+
const registered = chunkQ5WQ4Y2I_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkQ5WQ4Y2I_cjs.contractHandlers.get(t)).filter(isDiscoverable);
|
|
9923
9923
|
const discoverables = [
|
|
9924
9924
|
...registered.filter((h) => h.type === "boarding"),
|
|
9925
9925
|
...registered.filter((h) => h.type !== "boarding")
|
|
@@ -10054,7 +10054,7 @@ var ContractManager = class _ContractManager {
|
|
|
10054
10054
|
await this.syncContracts({ contracts, pageSize });
|
|
10055
10055
|
this.markSyncOnline();
|
|
10056
10056
|
} catch (err) {
|
|
10057
|
-
if (!
|
|
10057
|
+
if (!chunkRZ2NGS6A_cjs.isRetryableProviderError(err)) throw err;
|
|
10058
10058
|
this.markSyncDegraded(err);
|
|
10059
10059
|
}
|
|
10060
10060
|
const vtxos = await this.getVtxosForContracts(contracts);
|
|
@@ -10075,7 +10075,7 @@ var ContractManager = class _ContractManager {
|
|
|
10075
10075
|
}
|
|
10076
10076
|
const tapscriptCache = tapscripts ?? /* @__PURE__ */ new Map();
|
|
10077
10077
|
return vtxos.map(
|
|
10078
|
-
(vtxo) => extendVirtualCoinForContract(
|
|
10078
|
+
(vtxo) => extendVirtualCoinForContract(chunkRZ2NGS6A_cjs.normalizeVtxo(vtxo), byScript, tapscriptCache)
|
|
10079
10079
|
);
|
|
10080
10080
|
}
|
|
10081
10081
|
/** @inheritdoc */
|
|
@@ -10119,14 +10119,14 @@ var ContractManager = class _ContractManager {
|
|
|
10119
10119
|
const byScript = new Map(contracts.map((contract) => [contract.script, contract]));
|
|
10120
10120
|
const asking = vtxos.filter((vtxo) => {
|
|
10121
10121
|
const contract = byScript.get(vtxo.script);
|
|
10122
|
-
return contract !== void 0 &&
|
|
10122
|
+
return contract !== void 0 && chunkQ5WQ4Y2I_cjs.contractHandlers.get(contract.type)?.assertSpendableNow !== void 0;
|
|
10123
10123
|
});
|
|
10124
10124
|
if (asking.length === 0) return refused;
|
|
10125
10125
|
const tip = await this.currentChainTip();
|
|
10126
10126
|
const walletKey = await walletPubKey?.();
|
|
10127
10127
|
for (const vtxo of asking) {
|
|
10128
10128
|
const contract = byScript.get(vtxo.script);
|
|
10129
|
-
const handler =
|
|
10129
|
+
const handler = chunkQ5WQ4Y2I_cjs.contractHandlers.get(contract.type);
|
|
10130
10130
|
if (!handler?.assertSpendableNow) continue;
|
|
10131
10131
|
const context = {
|
|
10132
10132
|
collaborative: true,
|
|
@@ -10141,7 +10141,7 @@ var ContractManager = class _ContractManager {
|
|
|
10141
10141
|
// the next handler to answer a CSV question would meet a
|
|
10142
10142
|
// TypeError instead of a `false`. Carry the coin only when it
|
|
10143
10143
|
// really is one.
|
|
10144
|
-
vtxo:
|
|
10144
|
+
vtxo: chunkRZ2NGS6A_cjs.isVirtualCoin(vtxo) && "status" in vtxo ? vtxo : void 0
|
|
10145
10145
|
};
|
|
10146
10146
|
try {
|
|
10147
10147
|
await handler.assertSpendableNow(
|
|
@@ -10297,7 +10297,7 @@ var ContractManager = class _ContractManager {
|
|
|
10297
10297
|
const { contractScript, collaborative = true, walletPubKey, vtxo } = options;
|
|
10298
10298
|
const [contract] = await this.getContracts({ script: contractScript });
|
|
10299
10299
|
if (!contract) return [];
|
|
10300
|
-
const handler =
|
|
10300
|
+
const handler = chunkQ5WQ4Y2I_cjs.contractHandlers.get(contract.type);
|
|
10301
10301
|
if (!handler) return [];
|
|
10302
10302
|
const script = handler.createScript(contract.params);
|
|
10303
10303
|
const tip = await this.currentChainTip();
|
|
@@ -10325,7 +10325,7 @@ var ContractManager = class _ContractManager {
|
|
|
10325
10325
|
const { contractScript, collaborative = true, walletPubKey } = options;
|
|
10326
10326
|
const [contract] = await this.getContracts({ script: contractScript });
|
|
10327
10327
|
if (!contract) return [];
|
|
10328
|
-
const handler =
|
|
10328
|
+
const handler = chunkQ5WQ4Y2I_cjs.contractHandlers.get(contract.type);
|
|
10329
10329
|
if (!handler) return [];
|
|
10330
10330
|
const script = handler.createScript(contract.params);
|
|
10331
10331
|
const context = {
|
|
@@ -10381,7 +10381,7 @@ var ContractManager = class _ContractManager {
|
|
|
10381
10381
|
}
|
|
10382
10382
|
async refreshOutpoints(outpoints) {
|
|
10383
10383
|
if (outpoints.length === 0) return;
|
|
10384
|
-
const { vtxos } = await
|
|
10384
|
+
const { vtxos } = await chunkRZ2NGS6A_cjs.getNormalizedVtxos(this.config.indexerProvider, {
|
|
10385
10385
|
outpoints
|
|
10386
10386
|
});
|
|
10387
10387
|
if (vtxos.length === 0) return;
|
|
@@ -10460,7 +10460,7 @@ var ContractManager = class _ContractManager {
|
|
|
10460
10460
|
break;
|
|
10461
10461
|
}
|
|
10462
10462
|
} catch (err) {
|
|
10463
|
-
if (!
|
|
10463
|
+
if (!chunkRZ2NGS6A_cjs.isRetryableProviderError(err)) throw err;
|
|
10464
10464
|
this.markSyncDegraded(err);
|
|
10465
10465
|
}
|
|
10466
10466
|
this.emitEvent(event);
|
|
@@ -10539,7 +10539,7 @@ var ContractManager = class _ContractManager {
|
|
|
10539
10539
|
*/
|
|
10540
10540
|
async reconcilePendingFrontier(contracts) {
|
|
10541
10541
|
const scriptToContract = new Map(contracts.map((c) => [c.script, c]));
|
|
10542
|
-
const vtxos = await
|
|
10542
|
+
const vtxos = await chunkRZ2NGS6A_cjs.getAllNormalizedVtxos(
|
|
10543
10543
|
this.config.indexerProvider,
|
|
10544
10544
|
contracts.map((c) => c.script),
|
|
10545
10545
|
{ pendingOnly: true }
|
|
@@ -10622,7 +10622,7 @@ var ContractManager = class _ContractManager {
|
|
|
10622
10622
|
}
|
|
10623
10623
|
return result;
|
|
10624
10624
|
}
|
|
10625
|
-
async fetchContractVtxosBulk(contracts, pageSize =
|
|
10625
|
+
async fetchContractVtxosBulk(contracts, pageSize = chunkRZ2NGS6A_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
|
|
10626
10626
|
if (contracts.length === 0) {
|
|
10627
10627
|
return { vtxosByScript: /* @__PURE__ */ new Map(), promoted: /* @__PURE__ */ new Map() };
|
|
10628
10628
|
}
|
|
@@ -10638,7 +10638,7 @@ var ContractManager = class _ContractManager {
|
|
|
10638
10638
|
before: syncWindow.before
|
|
10639
10639
|
}
|
|
10640
10640
|
} : {};
|
|
10641
|
-
const vtxos = await
|
|
10641
|
+
const vtxos = await chunkRZ2NGS6A_cjs.getAllNormalizedVtxos(
|
|
10642
10642
|
this.config.indexerProvider,
|
|
10643
10643
|
contracts.map((c) => c.script),
|
|
10644
10644
|
{ ...windowOpts, pageSize }
|
|
@@ -10783,7 +10783,7 @@ var deserializeTapLeaf = (t) => {
|
|
|
10783
10783
|
const s = base.hex.decode(t.s);
|
|
10784
10784
|
return [cb, s];
|
|
10785
10785
|
};
|
|
10786
|
-
var deserializeVtxo = (o) =>
|
|
10786
|
+
var deserializeVtxo = (o) => chunkRZ2NGS6A_cjs.normalizeVtxo({
|
|
10787
10787
|
...o,
|
|
10788
10788
|
createdAt: new Date(o.createdAt),
|
|
10789
10789
|
tapTree: base.hex.decode(o.tapTree),
|
|
@@ -11606,7 +11606,7 @@ var HDDescriptorProvider = class _HDDescriptorProvider {
|
|
|
11606
11606
|
*/
|
|
11607
11607
|
materializeDescriptorAt(index) {
|
|
11608
11608
|
const descriptor = this.identity.descriptor;
|
|
11609
|
-
const network =
|
|
11609
|
+
const network = chunkQ5WQ4Y2I_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
11610
11610
|
const expansion = descriptorsScure.expand({ descriptor, network, index });
|
|
11611
11611
|
const keyInfo = expansion.expansionMap?.["@0"];
|
|
11612
11612
|
if (!keyInfo?.keyExpression) {
|
|
@@ -11754,7 +11754,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
|
|
|
11754
11754
|
const provider = await resolveDescriptorProvider(config, setup.walletRepository);
|
|
11755
11755
|
if (!provider) return void 0;
|
|
11756
11756
|
const allowSilentFallback = (config.walletMode ?? "auto") === "auto";
|
|
11757
|
-
const expectedContractType = setup.offchainTapscript instanceof
|
|
11757
|
+
const expectedContractType = setup.offchainTapscript instanceof chunkQ5WQ4Y2I_cjs.DelegateVtxo.Script ? "delegate" : "default";
|
|
11758
11758
|
const factoryOpts = {
|
|
11759
11759
|
walletRepository: setup.walletRepository,
|
|
11760
11760
|
contractRepository: setup.contractRepository,
|
|
@@ -11955,7 +11955,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
|
|
|
11955
11955
|
};
|
|
11956
11956
|
function deriveLeafPubkey(descriptor) {
|
|
11957
11957
|
try {
|
|
11958
|
-
return
|
|
11958
|
+
return chunkQ5WQ4Y2I_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
11959
11959
|
} catch (e) {
|
|
11960
11960
|
throw new NonRangeableDescriptorError(
|
|
11961
11961
|
"Cannot derive leaf pubkey: descriptor is not a materialized, parsable tr(...) shape.",
|
|
@@ -11967,7 +11967,7 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
11967
11967
|
const pubKey = deriveLeafPubkey(descriptor);
|
|
11968
11968
|
const tapscript = rebuildTapscript(current, pubKey);
|
|
11969
11969
|
const serverPubKey = tapscript.options.serverPubKey;
|
|
11970
|
-
const csvTimelock =
|
|
11970
|
+
const csvTimelock = chunkRZ2NGS6A_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
|
|
11971
11971
|
const base$1 = {
|
|
11972
11972
|
script: base.hex.encode(tapscript.pkScript),
|
|
11973
11973
|
address: tapscript.address(hrp, serverPubKey).encode(),
|
|
@@ -11978,11 +11978,11 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
11978
11978
|
// index-0 key. Without it, spends produce unsigned PSBTs that the
|
|
11979
11979
|
// server rejects with `INVALID_PSBT_INPUT (5): missing tapscript spend sig`.
|
|
11980
11980
|
metadata: {
|
|
11981
|
-
...tagSource && { source:
|
|
11981
|
+
...tagSource && { source: chunkQ5WQ4Y2I_cjs.WALLET_RECEIVE_SOURCE },
|
|
11982
11982
|
signingDescriptor: descriptor
|
|
11983
11983
|
}
|
|
11984
11984
|
};
|
|
11985
|
-
const params = tapscript instanceof
|
|
11985
|
+
const params = tapscript instanceof chunkQ5WQ4Y2I_cjs.DelegateVtxo.Script ? {
|
|
11986
11986
|
...base$1,
|
|
11987
11987
|
type: "delegate",
|
|
11988
11988
|
params: {
|
|
@@ -12003,10 +12003,10 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
12003
12003
|
return { tapscript, params };
|
|
12004
12004
|
}
|
|
12005
12005
|
function rebuildTapscript(current, pubKey) {
|
|
12006
|
-
if (current instanceof
|
|
12007
|
-
return new
|
|
12006
|
+
if (current instanceof chunkQ5WQ4Y2I_cjs.DelegateVtxo.Script) {
|
|
12007
|
+
return new chunkQ5WQ4Y2I_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
|
|
12008
12008
|
}
|
|
12009
|
-
return new
|
|
12009
|
+
return new chunkQ5WQ4Y2I_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
|
|
12010
12010
|
}
|
|
12011
12011
|
async function pickActiveReceive(contractRepository, serverPubKey, expectedType) {
|
|
12012
12012
|
const candidates = await contractRepository.getContracts({
|
|
@@ -12015,7 +12015,7 @@ async function pickActiveReceive(contractRepository, serverPubKey, expectedType)
|
|
|
12015
12015
|
});
|
|
12016
12016
|
const serverPubKeyHex = base.hex.encode(serverPubKey);
|
|
12017
12017
|
const matching = candidates.filter(
|
|
12018
|
-
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source ===
|
|
12018
|
+
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkQ5WQ4Y2I_cjs.WALLET_RECEIVE_SOURCE
|
|
12019
12019
|
).sort((a, b) => {
|
|
12020
12020
|
if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
|
|
12021
12021
|
return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
|
|
@@ -12071,7 +12071,7 @@ function computeOffchainBalance(vtxos, caps) {
|
|
|
12071
12071
|
}
|
|
12072
12072
|
};
|
|
12073
12073
|
for (const vtxo of vtxos) {
|
|
12074
|
-
if (
|
|
12074
|
+
if (chunkRZ2NGS6A_cjs.hasTerminalSpend(vtxo)) continue;
|
|
12075
12075
|
addAssets(owned, vtxo);
|
|
12076
12076
|
if (vtxo.isUnrolled) {
|
|
12077
12077
|
unrolled += vtxo.value;
|
|
@@ -12081,11 +12081,11 @@ function computeOffchainBalance(vtxos, caps) {
|
|
|
12081
12081
|
pendingRecovery += vtxo.value;
|
|
12082
12082
|
continue;
|
|
12083
12083
|
}
|
|
12084
|
-
if (
|
|
12084
|
+
if (chunkRZ2NGS6A_cjs.canRecoverOnchain(vtxo, now)) {
|
|
12085
12085
|
recoverable += vtxo.value;
|
|
12086
12086
|
continue;
|
|
12087
12087
|
}
|
|
12088
|
-
if (!
|
|
12088
|
+
if (!chunkRZ2NGS6A_cjs.canSpendOffchain(vtxo, now)) continue;
|
|
12089
12089
|
if (vtxo.isPreconfirmed) {
|
|
12090
12090
|
preconfirmed += vtxo.value;
|
|
12091
12091
|
} else {
|
|
@@ -12255,12 +12255,12 @@ var InputSignerRouter = class {
|
|
|
12255
12255
|
};
|
|
12256
12256
|
|
|
12257
12257
|
// src/wallet/wallet.ts
|
|
12258
|
-
var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl ||
|
|
12258
|
+
var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl || chunkRZ2NGS6A_cjs.DEFAULT_ARKADE_SERVER_URL;
|
|
12259
12259
|
function intentProofJobs(coins) {
|
|
12260
12260
|
if (coins.length === 0) return [];
|
|
12261
12261
|
const coinJobs = coins.map((coin, i) => ({
|
|
12262
12262
|
index: i + 1,
|
|
12263
|
-
lookupScript:
|
|
12263
|
+
lookupScript: chunkRZ2NGS6A_cjs.VtxoScript.decode(coin.tapTree).pkScript
|
|
12264
12264
|
}));
|
|
12265
12265
|
return [{ index: 0, lookupScript: coinJobs[0].lookupScript }, ...coinJobs];
|
|
12266
12266
|
}
|
|
@@ -12292,7 +12292,7 @@ function dedupeTimelocks(timelocks) {
|
|
|
12292
12292
|
const seen = /* @__PURE__ */ new Set();
|
|
12293
12293
|
const deduped = [];
|
|
12294
12294
|
for (const timelock of timelocks) {
|
|
12295
|
-
const sequence =
|
|
12295
|
+
const sequence = chunkRZ2NGS6A_cjs.timelockToSequence(timelock).toString();
|
|
12296
12296
|
if (seen.has(sequence)) continue;
|
|
12297
12297
|
seen.add(sequence);
|
|
12298
12298
|
deduped.push(timelock);
|
|
@@ -12309,7 +12309,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
|
|
|
12309
12309
|
state: "active"
|
|
12310
12310
|
});
|
|
12311
12311
|
const newest = candidates.filter(
|
|
12312
|
-
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source ===
|
|
12312
|
+
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkQ5WQ4Y2I_cjs.WALLET_RECEIVE_SOURCE
|
|
12313
12313
|
).sort((a, b) => {
|
|
12314
12314
|
if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
|
|
12315
12315
|
return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
|
|
@@ -12317,7 +12317,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
|
|
|
12317
12317
|
if (!newest?.params.pubKey) return baseline;
|
|
12318
12318
|
try {
|
|
12319
12319
|
const pubKey = base.hex.decode(newest.params.pubKey);
|
|
12320
|
-
return new
|
|
12320
|
+
return new chunkQ5WQ4Y2I_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
|
|
12321
12321
|
} catch (e) {
|
|
12322
12322
|
console.warn("Skipping malformed boarding contract at boot", newest.script, e);
|
|
12323
12323
|
return baseline;
|
|
@@ -12336,10 +12336,10 @@ function filterSnapshotVtxos(snapshot, filter, pendingSpendOutpoints) {
|
|
|
12336
12336
|
if (vtxo.isUnrolled) {
|
|
12337
12337
|
return !!f.withUnrolled;
|
|
12338
12338
|
}
|
|
12339
|
-
if (
|
|
12339
|
+
if (chunkRZ2NGS6A_cjs.hasTerminalSpend(vtxo)) {
|
|
12340
12340
|
return false;
|
|
12341
12341
|
}
|
|
12342
|
-
if (!f.withRecoverable &&
|
|
12342
|
+
if (!f.withRecoverable && chunkRZ2NGS6A_cjs.canRecoverOnchain(vtxo, now)) {
|
|
12343
12343
|
return false;
|
|
12344
12344
|
}
|
|
12345
12345
|
return true;
|
|
@@ -12389,10 +12389,11 @@ var ArkadeCashCreateError = class extends Error {
|
|
|
12389
12389
|
cause;
|
|
12390
12390
|
};
|
|
12391
12391
|
var ReadonlyWallet = class _ReadonlyWallet {
|
|
12392
|
-
constructor(identity, network, onchainProvider, indexerProvider, arkServerPublicKey, offchainTapscript, boardingTapscript, dustAmount, walletRepository, contractRepository, delegateProvider, watcherConfig, walletContractTimelocks) {
|
|
12392
|
+
constructor(identity, network, onchainProvider, arkProvider, indexerProvider, arkServerPublicKey, offchainTapscript, boardingTapscript, dustAmount, walletRepository, contractRepository, delegateProvider, watcherConfig, walletContractTimelocks) {
|
|
12393
12393
|
this.identity = identity;
|
|
12394
12394
|
this.network = network;
|
|
12395
12395
|
this.onchainProvider = onchainProvider;
|
|
12396
|
+
this.arkProvider = arkProvider;
|
|
12396
12397
|
this.indexerProvider = indexerProvider;
|
|
12397
12398
|
this.dustAmount = dustAmount;
|
|
12398
12399
|
this.walletRepository = walletRepository;
|
|
@@ -12418,6 +12419,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12418
12419
|
identity;
|
|
12419
12420
|
network;
|
|
12420
12421
|
onchainProvider;
|
|
12422
|
+
arkProvider;
|
|
12421
12423
|
indexerProvider;
|
|
12422
12424
|
dustAmount;
|
|
12423
12425
|
walletRepository;
|
|
@@ -12485,14 +12487,19 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12485
12487
|
*/
|
|
12486
12488
|
_arkServerPublicKey;
|
|
12487
12489
|
/**
|
|
12488
|
-
* Whether
|
|
12489
|
-
*
|
|
12490
|
-
* (`"cache"`).
|
|
12490
|
+
* Whether the LATEST server-info resolution answered live (`"live"`) or
|
|
12491
|
+
* from the cached snapshot because the operator was unreachable
|
|
12492
|
+
* (`"cache"`). Seeded at construction and updated by every
|
|
12493
|
+
* {@link getArkadeInfo} read, so a wallet that booted offline and
|
|
12494
|
+
* recovered stops reporting degraded — and one that just fell back stops
|
|
12495
|
+
* claiming online. Freshness signal for
|
|
12496
|
+
* {@link getProviderConnectionState}.
|
|
12491
12497
|
*/
|
|
12492
12498
|
_serverInfoSource = "live";
|
|
12493
12499
|
/**
|
|
12494
|
-
* Epoch-ms of the last known live operator contact:
|
|
12495
|
-
*
|
|
12500
|
+
* Epoch-ms of the last known live operator contact: the most recent live
|
|
12501
|
+
* resolution (construction or a later {@link getArkadeInfo}), or the
|
|
12502
|
+
* cached snapshot's `savedAt` when the latest resolution fell back.
|
|
12496
12503
|
*/
|
|
12497
12504
|
_serverInfoLastOnlineAt;
|
|
12498
12505
|
/** @see {@link _serverInfoSource} */
|
|
@@ -12500,13 +12507,15 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12500
12507
|
return this._serverInfoSource;
|
|
12501
12508
|
}
|
|
12502
12509
|
/**
|
|
12503
|
-
* Composed provider-connection freshness: the
|
|
12504
|
-
* (
|
|
12505
|
-
* manager
|
|
12506
|
-
*
|
|
12507
|
-
*
|
|
12510
|
+
* Composed provider-connection freshness: the LATEST server-info
|
|
12511
|
+
* resolution (boot, or any later {@link getArkadeInfo} read) combined with
|
|
12512
|
+
* the contract-manager's indexer-sync health, if the manager has been
|
|
12513
|
+
* initialized. Reads no live provider state — it never forces a
|
|
12514
|
+
* `ContractManager` to construct — so it is safe for readonly callers
|
|
12515
|
+
* that only use address/balance APIs.
|
|
12508
12516
|
*
|
|
12509
|
-
* -
|
|
12517
|
+
* - Latest resolution fell back to the cached snapshot → degraded on
|
|
12518
|
+
* `arkade` (`cache`).
|
|
12510
12519
|
* - Otherwise, if the contract manager has degraded to repository data →
|
|
12511
12520
|
* degraded on `indexer` (`repository`).
|
|
12512
12521
|
* - Otherwise online.
|
|
@@ -12552,7 +12561,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12552
12561
|
}
|
|
12553
12562
|
/**
|
|
12554
12563
|
* x-only hex of the operator's deprecated signer keys (from
|
|
12555
|
-
* `
|
|
12564
|
+
* `ArkadeInfo.deprecatedSigners`), cached for the OFFLINE read/watch paths.
|
|
12556
12565
|
* The boarding watch/history surfaces ({@link getBoardingAddresses},
|
|
12557
12566
|
* {@link getBoardingTxs}) fan out over {current} ∪ this set so a deposit at
|
|
12558
12567
|
* a boarding address minted under a now-rotated operator signer keeps being
|
|
@@ -12627,6 +12636,64 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12627
12636
|
get arkServerPublicKey() {
|
|
12628
12637
|
return this._arkServerPublicKey;
|
|
12629
12638
|
}
|
|
12639
|
+
/**
|
|
12640
|
+
* Server info for the Arkade server this wallet is connected to, resolved
|
|
12641
|
+
* exactly as construction resolves it: live wins, a retryable failure
|
|
12642
|
+
* falls back to the snapshot persisted at boot, a terminal one propagates.
|
|
12643
|
+
*
|
|
12644
|
+
* Live rather than the pinned boot snapshot because the fields callers
|
|
12645
|
+
* come here for — `signerPubkey`, `checkpointTapscript`, `fees` — are the
|
|
12646
|
+
* ones a mid-session rotation moves, and a covenant built against a
|
|
12647
|
+
* superseded signer is unspendable.
|
|
12648
|
+
*
|
|
12649
|
+
* One rotation caveat: reading does NOT re-pin the wallet —
|
|
12650
|
+
* {@link arkServerPublicKey}, {@link dustAmount} and the tapscripts move
|
|
12651
|
+
* only through `handleServerInfoChanged`/`rotateServerSigner` — so inside
|
|
12652
|
+
* a rotation window this can report epoch N+1 while the wallet still
|
|
12653
|
+
* spends on N. The window closes on its own: a read that observes a moved
|
|
12654
|
+
* digest makes the provider emit `onServerInfoChanged`, which is what
|
|
12655
|
+
* drives that rotation. A caller about to bind the answer into a covenant
|
|
12656
|
+
* passes `{ requireLive: true }` and fails closed instead of receiving
|
|
12657
|
+
* the boot snapshot.
|
|
12658
|
+
*
|
|
12659
|
+
* @returns The Arkade server's info
|
|
12660
|
+
* @see ArkadeInfo
|
|
12661
|
+
*/
|
|
12662
|
+
async getArkadeInfo(opts) {
|
|
12663
|
+
const { info, source, lastOnlineAt } = await resolveArkInfo(
|
|
12664
|
+
this.arkProvider,
|
|
12665
|
+
this.walletRepository,
|
|
12666
|
+
opts
|
|
12667
|
+
);
|
|
12668
|
+
this._serverInfoSource = source;
|
|
12669
|
+
if (source === "live") {
|
|
12670
|
+
this._serverInfoLastOnlineAt = Date.now();
|
|
12671
|
+
} else if (lastOnlineAt !== void 0) {
|
|
12672
|
+
this._serverInfoLastOnlineAt = lastOnlineAt;
|
|
12673
|
+
}
|
|
12674
|
+
return info;
|
|
12675
|
+
}
|
|
12676
|
+
/**
|
|
12677
|
+
* Chain reads against this wallet's server for scripts it does not own.
|
|
12678
|
+
*
|
|
12679
|
+
* Binds the wallet's own `indexerProvider` — which may be an Expo or
|
|
12680
|
+
* injected one that a caller's hand-built `RestIndexerProvider` would
|
|
12681
|
+
* silently bypass. `getVtxos` goes through
|
|
12682
|
+
* {@link getNormalizedVtxos}, which is what makes every VTXO leaving the
|
|
12683
|
+
* seam carry its canonical facts.
|
|
12684
|
+
*
|
|
12685
|
+
* A bound object rather than the provider itself, so an `IReadonlyWallet`
|
|
12686
|
+
* holder gets `getVtxos`/`getVirtualTxs` and nothing else at runtime.
|
|
12687
|
+
* (`indexerProvider` is still public on the concrete classes, unlike
|
|
12688
|
+
* `arkProvider`, so this narrows the interface rather than the field.)
|
|
12689
|
+
*/
|
|
12690
|
+
async getArkadeReader() {
|
|
12691
|
+
const indexer = this.indexerProvider;
|
|
12692
|
+
return {
|
|
12693
|
+
getVtxos: (opts) => chunkRZ2NGS6A_cjs.getNormalizedVtxos(indexer, opts),
|
|
12694
|
+
getVirtualTxs: (txids, opts) => indexer.getVirtualTxs(txids, opts)
|
|
12695
|
+
};
|
|
12696
|
+
}
|
|
12630
12697
|
/**
|
|
12631
12698
|
* The wallet's current boarding tapscript (the on-chain onboarding
|
|
12632
12699
|
* target). Read-only from the outside; mutated only via
|
|
@@ -12679,7 +12746,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12679
12746
|
*/
|
|
12680
12747
|
static async setupWalletConfig(config, pubKey) {
|
|
12681
12748
|
const arkadeServerUrl = getArkadeServerUrl(config);
|
|
12682
|
-
const arkProvider = config.arkProvider || new
|
|
12749
|
+
const arkProvider = config.arkProvider || new chunkRZ2NGS6A_cjs.RestArkProvider(arkadeServerUrl);
|
|
12683
12750
|
let indexerProvider = config.indexerProvider;
|
|
12684
12751
|
if (!indexerProvider) {
|
|
12685
12752
|
let indexerUrl = config.indexerUrl;
|
|
@@ -12696,7 +12763,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12696
12763
|
indexerUrl = arkadeServerUrl;
|
|
12697
12764
|
}
|
|
12698
12765
|
}
|
|
12699
|
-
indexerProvider = new
|
|
12766
|
+
indexerProvider = new chunkWQIWUTYS_cjs.RestIndexerProvider(indexerUrl);
|
|
12700
12767
|
}
|
|
12701
12768
|
const walletRepository = config.storage?.walletRepository ?? new IndexedDBWalletRepository();
|
|
12702
12769
|
const contractRepository = config.storage?.contractRepository ?? new IndexedDBContractRepository();
|
|
@@ -12705,7 +12772,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12705
12772
|
source: serverInfoSource,
|
|
12706
12773
|
lastOnlineAt: serverInfoLastOnlineAt
|
|
12707
12774
|
} = await resolveArkInfo(arkProvider, walletRepository);
|
|
12708
|
-
const network =
|
|
12775
|
+
const network = chunkRZ2NGS6A_cjs.networkFromArkadeInfo(info);
|
|
12709
12776
|
if ("descriptor" in config.identity) {
|
|
12710
12777
|
const descriptor = config.identity.descriptor;
|
|
12711
12778
|
const identityIsMainnet = !descriptor.includes("tpub");
|
|
@@ -12745,18 +12812,18 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12745
12812
|
value: info.boardingExitDelay,
|
|
12746
12813
|
type: info.boardingExitDelay < 512n ? "blocks" : "seconds"
|
|
12747
12814
|
};
|
|
12748
|
-
const serverPubKey =
|
|
12749
|
-
const delegatePubKey = config.delegateProvider ? await config.delegateProvider.getDelegateInfo().then((info2) =>
|
|
12815
|
+
const serverPubKey = chunkQ5WQ4Y2I_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
|
|
12816
|
+
const delegatePubKey = config.delegateProvider ? await config.delegateProvider.getDelegateInfo().then((info2) => chunkQ5WQ4Y2I_cjs.toXOnly(base.hex.decode(info2.pubkey), "delegate key")).catch(() => void 0) : config.delegatorProvider ? await config.delegatorProvider.getDelegateInfo().then((info2) => chunkQ5WQ4Y2I_cjs.toXOnly(base.hex.decode(info2.pubkey), "delegate key")).catch(() => void 0) : void 0;
|
|
12750
12817
|
const offchainOptions = {
|
|
12751
12818
|
pubKey,
|
|
12752
12819
|
serverPubKey,
|
|
12753
12820
|
csvTimelock: exitTimelock
|
|
12754
12821
|
};
|
|
12755
|
-
const offchainTapscript = !delegatePubKey ? new
|
|
12756
|
-
const boardingTapscript =
|
|
12822
|
+
const offchainTapscript = !delegatePubKey ? new chunkQ5WQ4Y2I_cjs.DefaultVtxo.Script(offchainOptions) : new chunkQ5WQ4Y2I_cjs.DelegateVtxo.Script({ ...offchainOptions, delegatePubKey });
|
|
12823
|
+
const boardingTapscript = chunkQ5WQ4Y2I_cjs.BoardingContractHandler.createScript({
|
|
12757
12824
|
pubKey: base.hex.encode(pubKey),
|
|
12758
12825
|
serverPubKey: base.hex.encode(serverPubKey),
|
|
12759
|
-
csvTimelock:
|
|
12826
|
+
csvTimelock: chunkRZ2NGS6A_cjs.timelockToSequence(boardingTimelock).toString()
|
|
12760
12827
|
});
|
|
12761
12828
|
return {
|
|
12762
12829
|
arkProvider,
|
|
@@ -12795,6 +12862,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12795
12862
|
config.identity,
|
|
12796
12863
|
setup.network,
|
|
12797
12864
|
setup.onchainProvider,
|
|
12865
|
+
setup.arkProvider,
|
|
12798
12866
|
setup.indexerProvider,
|
|
12799
12867
|
setup.serverPubKey,
|
|
12800
12868
|
setup.offchainTapscript,
|
|
@@ -12922,7 +12990,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12922
12990
|
if (!filter?.withUnrolled) {
|
|
12923
12991
|
logExcludedVtxos(
|
|
12924
12992
|
"getSpendableVtxos",
|
|
12925
|
-
snapshot.flatMap((contract) => contract.vtxos).filter((vtxo) => vtxo.isUnrolled && !
|
|
12993
|
+
snapshot.flatMap((contract) => contract.vtxos).filter((vtxo) => vtxo.isUnrolled && !chunkRZ2NGS6A_cjs.hasTerminalSpend(vtxo)),
|
|
12926
12994
|
[() => UNROLLED_REASON]
|
|
12927
12995
|
);
|
|
12928
12996
|
}
|
|
@@ -13065,7 +13133,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13065
13133
|
const response = await contractManager.getContractsWithVtxos();
|
|
13066
13134
|
const allVtxos = response.flatMap((_) => _.vtxos);
|
|
13067
13135
|
const { boardingTxs, commitmentsToIgnore } = await this.getBoardingTxs();
|
|
13068
|
-
const resolveTxCreatedAt = (txids) =>
|
|
13136
|
+
const resolveTxCreatedAt = (txids) => chunkRZ2NGS6A_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
|
|
13069
13137
|
return buildTransactionHistory(
|
|
13070
13138
|
allVtxos,
|
|
13071
13139
|
boardingTxs,
|
|
@@ -13159,7 +13227,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13159
13227
|
},
|
|
13160
13228
|
isUnrolled: true,
|
|
13161
13229
|
...boardingFacts,
|
|
13162
|
-
virtualStatus:
|
|
13230
|
+
virtualStatus: chunkRZ2NGS6A_cjs.toVirtualStatus(boardingFacts),
|
|
13163
13231
|
spentBy: "",
|
|
13164
13232
|
createdAt: tx.status.confirmed ? new Date(tx.status.block_time * 1e3) : /* @__PURE__ */ new Date(0),
|
|
13165
13233
|
script: scriptHex
|
|
@@ -13215,9 +13283,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13215
13283
|
async getBoardingTapscripts(allowedSigners) {
|
|
13216
13284
|
const byScript = /* @__PURE__ */ new Map();
|
|
13217
13285
|
const add = (s) => byScript.set(base.hex.encode(s.pkScript), s);
|
|
13218
|
-
const boardingCsv = this.boardingTapscript.options.csvTimelock ??
|
|
13286
|
+
const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunkQ5WQ4Y2I_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
13219
13287
|
add(
|
|
13220
|
-
new
|
|
13288
|
+
new chunkQ5WQ4Y2I_cjs.DefaultVtxo.Script({
|
|
13221
13289
|
pubKey: await this.identity.xOnlyPublicKey(),
|
|
13222
13290
|
serverPubKey: this.boardingTapscript.options.serverPubKey,
|
|
13223
13291
|
csvTimelock: boardingCsv
|
|
@@ -13232,7 +13300,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13232
13300
|
for (const c of boardingContracts) {
|
|
13233
13301
|
if (!allowed.has(toXOnlySignerHex(c.params.serverPubKey))) continue;
|
|
13234
13302
|
try {
|
|
13235
|
-
add(
|
|
13303
|
+
add(chunkQ5WQ4Y2I_cjs.BoardingContractHandler.createScript(c.params));
|
|
13236
13304
|
} catch (e) {
|
|
13237
13305
|
console.warn("Skipping malformed boarding contract", c.script, e);
|
|
13238
13306
|
}
|
|
@@ -13270,7 +13338,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13270
13338
|
// Per-row CSV delay decoded from THIS tapscript's exit leaf —
|
|
13271
13339
|
// not the wallet's current boarding timelock, which a signer
|
|
13272
13340
|
// rotation may have changed.
|
|
13273
|
-
csvTimelock:
|
|
13341
|
+
csvTimelock: chunkRZ2NGS6A_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
|
|
13274
13342
|
coins: utxos
|
|
13275
13343
|
});
|
|
13276
13344
|
}
|
|
@@ -13403,7 +13471,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13403
13471
|
/** Fetch Arkade transaction ids that are still pending final settlement. */
|
|
13404
13472
|
async fetchPendingTxs() {
|
|
13405
13473
|
const scripts = await this.getWalletScripts();
|
|
13406
|
-
const vtxos = await
|
|
13474
|
+
const vtxos = await chunkRZ2NGS6A_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
|
|
13407
13475
|
return vtxos.filter(
|
|
13408
13476
|
(vtxo) => (vtxo.isSpent || vtxo.isPreconfirmed && !vtxo.isSwept) && vtxo.arkTxId !== void 0
|
|
13409
13477
|
).map((_) => _.arkTxId);
|
|
@@ -13434,7 +13502,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13434
13502
|
});
|
|
13435
13503
|
for (const contract of contracts) {
|
|
13436
13504
|
if (map.has(contract.script)) continue;
|
|
13437
|
-
const handler =
|
|
13505
|
+
const handler = chunkQ5WQ4Y2I_cjs.contractHandlers.get(contract.type);
|
|
13438
13506
|
if (handler) {
|
|
13439
13507
|
const script = handler.createScript(contract.params);
|
|
13440
13508
|
map.set(contract.script, script);
|
|
@@ -13546,7 +13614,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13546
13614
|
}
|
|
13547
13615
|
});
|
|
13548
13616
|
const baselinePubkey = await this.identity.xOnlyPublicKey();
|
|
13549
|
-
const delegatePubKey = this.offchainTapscript instanceof
|
|
13617
|
+
const delegatePubKey = this.offchainTapscript instanceof chunkQ5WQ4Y2I_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
|
|
13550
13618
|
const baselineSigners = [
|
|
13551
13619
|
this.offchainTapscript.options.serverPubKey,
|
|
13552
13620
|
...[...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h))
|
|
@@ -13554,8 +13622,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13554
13622
|
const seenBaselineScripts = /* @__PURE__ */ new Set();
|
|
13555
13623
|
for (const serverPubKey of baselineSigners) {
|
|
13556
13624
|
for (const csvTimelock of this.walletContractTimelocks) {
|
|
13557
|
-
const csvTimelockStr =
|
|
13558
|
-
const defaultScript = new
|
|
13625
|
+
const csvTimelockStr = chunkRZ2NGS6A_cjs.timelockToSequence(csvTimelock).toString();
|
|
13626
|
+
const defaultScript = new chunkQ5WQ4Y2I_cjs.DefaultVtxo.Script({
|
|
13559
13627
|
pubKey: baselinePubkey,
|
|
13560
13628
|
serverPubKey,
|
|
13561
13629
|
csvTimelock
|
|
@@ -13576,7 +13644,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13576
13644
|
});
|
|
13577
13645
|
}
|
|
13578
13646
|
if (delegatePubKey) {
|
|
13579
|
-
const delegateScript = new
|
|
13647
|
+
const delegateScript = new chunkQ5WQ4Y2I_cjs.DelegateVtxo.Script({
|
|
13580
13648
|
pubKey: baselinePubkey,
|
|
13581
13649
|
serverPubKey,
|
|
13582
13650
|
delegatePubKey,
|
|
@@ -13600,9 +13668,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13600
13668
|
}
|
|
13601
13669
|
}
|
|
13602
13670
|
}
|
|
13603
|
-
const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ??
|
|
13671
|
+
const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunkQ5WQ4Y2I_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
13604
13672
|
for (const serverPubKey of baselineSigners) {
|
|
13605
|
-
const baselineBoarding = new
|
|
13673
|
+
const baselineBoarding = new chunkQ5WQ4Y2I_cjs.DefaultVtxo.Script({
|
|
13606
13674
|
pubKey: baselinePubkey,
|
|
13607
13675
|
serverPubKey,
|
|
13608
13676
|
csvTimelock: boardingCsvTimelock
|
|
@@ -13615,7 +13683,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13615
13683
|
params: {
|
|
13616
13684
|
pubKey: base.hex.encode(baselineBoarding.options.pubKey),
|
|
13617
13685
|
serverPubKey: base.hex.encode(serverPubKey),
|
|
13618
|
-
csvTimelock:
|
|
13686
|
+
csvTimelock: chunkRZ2NGS6A_cjs.timelockToSequence(boardingCsvTimelock).toString()
|
|
13619
13687
|
},
|
|
13620
13688
|
script: boardingScriptHex,
|
|
13621
13689
|
address: baselineBoarding.address(this.network.hrp, serverPubKey).encode(),
|
|
@@ -13642,6 +13710,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13642
13710
|
identity,
|
|
13643
13711
|
network,
|
|
13644
13712
|
onchainProvider,
|
|
13713
|
+
arkProvider,
|
|
13645
13714
|
indexerProvider,
|
|
13646
13715
|
arkServerPublicKey,
|
|
13647
13716
|
offchainTapscript,
|
|
@@ -13653,7 +13722,6 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13653
13722
|
watcherConfig,
|
|
13654
13723
|
walletContractTimelocks
|
|
13655
13724
|
);
|
|
13656
|
-
this.arkProvider = arkProvider;
|
|
13657
13725
|
this.forfeitOutputScript = forfeitOutputScript;
|
|
13658
13726
|
this.forfeitPubkey = forfeitPubkey;
|
|
13659
13727
|
this.batchExpiryPolicy = batchExpiryPolicy;
|
|
@@ -13687,7 +13755,6 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13687
13755
|
boardingPkScript: boardingTapscript.pkScript
|
|
13688
13756
|
});
|
|
13689
13757
|
}
|
|
13690
|
-
arkProvider;
|
|
13691
13758
|
forfeitOutputScript;
|
|
13692
13759
|
forfeitPubkey;
|
|
13693
13760
|
batchExpiryPolicy;
|
|
@@ -13815,7 +13882,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13815
13882
|
serverPubKey: this.offchainTapscript.options.serverPubKey,
|
|
13816
13883
|
deprecatedSignerPubKeys: [...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h)),
|
|
13817
13884
|
csvTimelocks: this.walletContractTimelocks,
|
|
13818
|
-
delegatePubKey: this.offchainTapscript instanceof
|
|
13885
|
+
delegatePubKey: this.offchainTapscript instanceof chunkQ5WQ4Y2I_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
|
|
13819
13886
|
};
|
|
13820
13887
|
}
|
|
13821
13888
|
_signerRouter;
|
|
@@ -13850,7 +13917,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13850
13917
|
/**
|
|
13851
13918
|
* Output script for checkpoint transactions, decoded from the server's
|
|
13852
13919
|
* `checkpointTapscript`. Server-controlled state: pinned at construction
|
|
13853
|
-
* and re-sourced from a fresh `
|
|
13920
|
+
* and re-sourced from a fresh `ArkadeInfo` on server-signer rotation. Read it
|
|
13854
13921
|
* through {@link serverUnrollScript}; write it only through
|
|
13855
13922
|
* {@link setServerUnrollScriptForRotation}.
|
|
13856
13923
|
*/
|
|
@@ -13861,7 +13928,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13861
13928
|
/**
|
|
13862
13929
|
* @internal Sole write path for `serverUnrollScript` after construction.
|
|
13863
13930
|
* Called by {@link Wallet._doRotateServerSigner} with the checkpoint script
|
|
13864
|
-
* sourced from the fresh `
|
|
13931
|
+
* sourced from the fresh `ArkadeInfo` that triggered the rotation, so the send
|
|
13865
13932
|
* path builds checkpoints against the new server epoch. External code must
|
|
13866
13933
|
* treat `serverUnrollScript` as read-only.
|
|
13867
13934
|
*/
|
|
@@ -14060,7 +14127,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14060
14127
|
const [row] = await manager.getContracts({ script: base.hex.encode(display.pkScript) });
|
|
14061
14128
|
const persisted = row?.metadata?.signingDescriptor;
|
|
14062
14129
|
if (typeof persisted === "string") return persisted;
|
|
14063
|
-
return
|
|
14130
|
+
return chunkQ5WQ4Y2I_cjs.identityDescriptor(this.identity);
|
|
14064
14131
|
}
|
|
14065
14132
|
/**
|
|
14066
14133
|
* Build, persist and shape one address of `type` owned by `descriptor` —
|
|
@@ -14076,7 +14143,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14076
14143
|
async mintAddress(manager, type, descriptor, tagSource, allocated) {
|
|
14077
14144
|
if (type === "boarding") {
|
|
14078
14145
|
const built2 = this.buildBoardingContract(
|
|
14079
|
-
|
|
14146
|
+
chunkQ5WQ4Y2I_cjs.deriveDescriptorLeafPubKey(descriptor),
|
|
14080
14147
|
descriptor,
|
|
14081
14148
|
tagSource
|
|
14082
14149
|
);
|
|
@@ -14121,11 +14188,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14121
14188
|
* {@link buildReceiveContract}.
|
|
14122
14189
|
*/
|
|
14123
14190
|
buildBoardingContract(pubKey, descriptor, tagSource) {
|
|
14124
|
-
const tapscript = new
|
|
14191
|
+
const tapscript = new chunkQ5WQ4Y2I_cjs.DefaultVtxo.Script({
|
|
14125
14192
|
...this._boardingTapscript.options,
|
|
14126
14193
|
pubKey
|
|
14127
14194
|
});
|
|
14128
|
-
const csvTimelock = tapscript.options.csvTimelock ??
|
|
14195
|
+
const csvTimelock = tapscript.options.csvTimelock ?? chunkQ5WQ4Y2I_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
14129
14196
|
return {
|
|
14130
14197
|
tapscript,
|
|
14131
14198
|
params: {
|
|
@@ -14133,13 +14200,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14133
14200
|
params: {
|
|
14134
14201
|
pubKey: base.hex.encode(pubKey),
|
|
14135
14202
|
serverPubKey: base.hex.encode(tapscript.options.serverPubKey),
|
|
14136
|
-
csvTimelock:
|
|
14203
|
+
csvTimelock: chunkRZ2NGS6A_cjs.timelockToSequence(csvTimelock).toString()
|
|
14137
14204
|
},
|
|
14138
14205
|
script: base.hex.encode(tapscript.pkScript),
|
|
14139
14206
|
address: tapscript.address(this.network.hrp, this.arkServerPublicKey).encode(),
|
|
14140
14207
|
state: "active",
|
|
14141
14208
|
metadata: {
|
|
14142
|
-
...tagSource && { source:
|
|
14209
|
+
...tagSource && { source: chunkQ5WQ4Y2I_cjs.WALLET_RECEIVE_SOURCE },
|
|
14143
14210
|
signingDescriptor: descriptor
|
|
14144
14211
|
}
|
|
14145
14212
|
}
|
|
@@ -14168,7 +14235,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14168
14235
|
if (this._descriptorProvider instanceof HDDescriptorProvider) {
|
|
14169
14236
|
return (await this.getContractManager()).getNextSigningDescriptor();
|
|
14170
14237
|
}
|
|
14171
|
-
return
|
|
14238
|
+
return chunkQ5WQ4Y2I_cjs.identityDescriptor(this.identity);
|
|
14172
14239
|
}
|
|
14173
14240
|
/**
|
|
14174
14241
|
* @see HDAllocationCapable.advanceSigningDescriptorWatermark
|
|
@@ -14264,7 +14331,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14264
14331
|
* the stable public API.
|
|
14265
14332
|
*/
|
|
14266
14333
|
async rotateServerSigner(newServerPubKey, checkpointTapscript) {
|
|
14267
|
-
const xonly =
|
|
14334
|
+
const xonly = chunkQ5WQ4Y2I_cjs.toXOnly(newServerPubKey, "ark signer key");
|
|
14268
14335
|
const newServerUnrollScript = assertValidServerUnrollScript(
|
|
14269
14336
|
checkpointTapscript,
|
|
14270
14337
|
resolveCheckpointExitDelayPolicy(this.network, this.checkpointExitDelayPolicy)
|
|
@@ -14293,21 +14360,21 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14293
14360
|
const [currentBoardingRow] = await manager.getContracts({
|
|
14294
14361
|
script: currentBoardingScript
|
|
14295
14362
|
});
|
|
14296
|
-
const newOffchain = this.offchainTapscript instanceof
|
|
14363
|
+
const newOffchain = this.offchainTapscript instanceof chunkQ5WQ4Y2I_cjs.DelegateVtxo.Script ? new chunkQ5WQ4Y2I_cjs.DelegateVtxo.Script({
|
|
14297
14364
|
...this.offchainTapscript.options,
|
|
14298
14365
|
serverPubKey: xonly
|
|
14299
|
-
}) : new
|
|
14366
|
+
}) : new chunkQ5WQ4Y2I_cjs.DefaultVtxo.Script({
|
|
14300
14367
|
...this.offchainTapscript.options,
|
|
14301
14368
|
serverPubKey: xonly
|
|
14302
14369
|
});
|
|
14303
|
-
const newBoarding = new
|
|
14370
|
+
const newBoarding = new chunkQ5WQ4Y2I_cjs.DefaultVtxo.Script({
|
|
14304
14371
|
...this._boardingTapscript.options,
|
|
14305
14372
|
serverPubKey: xonly
|
|
14306
14373
|
});
|
|
14307
|
-
const offchainCsv =
|
|
14374
|
+
const offchainCsv = chunkRZ2NGS6A_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
|
|
14308
14375
|
const newOffchainScript = base.hex.encode(newOffchain.pkScript);
|
|
14309
14376
|
const newOffchainAddress = newOffchain.address(this.network.hrp, xonly).encode();
|
|
14310
|
-
if (newOffchain instanceof
|
|
14377
|
+
if (newOffchain instanceof chunkQ5WQ4Y2I_cjs.DelegateVtxo.Script) {
|
|
14311
14378
|
await manager.createContract({
|
|
14312
14379
|
type: "delegate",
|
|
14313
14380
|
params: {
|
|
@@ -14335,13 +14402,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14335
14402
|
metadata: currentOffchainRow?.metadata
|
|
14336
14403
|
});
|
|
14337
14404
|
}
|
|
14338
|
-
const boardingCsv = newBoarding.options.csvTimelock ??
|
|
14405
|
+
const boardingCsv = newBoarding.options.csvTimelock ?? chunkQ5WQ4Y2I_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
14339
14406
|
await manager.createContract({
|
|
14340
14407
|
type: "boarding",
|
|
14341
14408
|
params: {
|
|
14342
14409
|
pubKey: base.hex.encode(newBoarding.options.pubKey),
|
|
14343
14410
|
serverPubKey: base.hex.encode(xonly),
|
|
14344
|
-
csvTimelock:
|
|
14411
|
+
csvTimelock: chunkRZ2NGS6A_cjs.timelockToSequence(boardingCsv).toString()
|
|
14345
14412
|
},
|
|
14346
14413
|
script: base.hex.encode(newBoarding.pkScript),
|
|
14347
14414
|
address: newBoarding.address(this.network.hrp, xonly).encode(),
|
|
@@ -14374,14 +14441,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14374
14441
|
_restoreInFlight;
|
|
14375
14442
|
_addPendingSpends(inputs) {
|
|
14376
14443
|
for (const input of inputs) {
|
|
14377
|
-
if (
|
|
14444
|
+
if (chunkRZ2NGS6A_cjs.isVirtualCoin(input)) {
|
|
14378
14445
|
this._pendingSpendOutpoints.add(`${input.txid}:${input.vout}`);
|
|
14379
14446
|
}
|
|
14380
14447
|
}
|
|
14381
14448
|
}
|
|
14382
14449
|
_removePendingSpends(inputs) {
|
|
14383
14450
|
for (const input of inputs) {
|
|
14384
|
-
if (
|
|
14451
|
+
if (chunkRZ2NGS6A_cjs.isVirtualCoin(input)) {
|
|
14385
14452
|
this._pendingSpendOutpoints.delete(`${input.txid}:${input.vout}`);
|
|
14386
14453
|
}
|
|
14387
14454
|
}
|
|
@@ -14439,13 +14506,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14439
14506
|
const manager = await this.getContractManager();
|
|
14440
14507
|
const provider = this._descriptorProvider;
|
|
14441
14508
|
const hd = provider instanceof HDDescriptorProvider;
|
|
14442
|
-
const staticDescriptor = hd ? void 0 : await
|
|
14509
|
+
const staticDescriptor = hd ? void 0 : await chunkQ5WQ4Y2I_cjs.identityDescriptor(this.identity);
|
|
14443
14510
|
const materialize = (index) => hd ? provider.materializeDescriptorAt(index) : staticDescriptor;
|
|
14444
|
-
const delegatePubKey = this.offchainTapscript instanceof
|
|
14511
|
+
const delegatePubKey = this.offchainTapscript instanceof chunkQ5WQ4Y2I_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
|
|
14445
14512
|
const arkInfo = await this.arkProvider.getInfo();
|
|
14446
|
-
const currentSignerPubKey =
|
|
14513
|
+
const currentSignerPubKey = chunkQ5WQ4Y2I_cjs.toXOnly(base.hex.decode(arkInfo.signerPubkey), "ark signer key");
|
|
14447
14514
|
const deprecatedSignerPubKeys = arkInfo.deprecatedSigners.map(
|
|
14448
|
-
(s) =>
|
|
14515
|
+
(s) => chunkQ5WQ4Y2I_cjs.toXOnly(base.hex.decode(s.pubkey), "deprecated signer key")
|
|
14449
14516
|
);
|
|
14450
14517
|
const deps = {
|
|
14451
14518
|
indexerProvider: this.indexerProvider,
|
|
@@ -14460,7 +14527,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14460
14527
|
csvTimelocks: this.walletContractTimelocks,
|
|
14461
14528
|
// Boarding-exit CSV so the boarding handler can build its
|
|
14462
14529
|
// candidate script (distinct from the unilateral-exit matrix).
|
|
14463
|
-
boardingTimelock: this.boardingTapscript.options.csvTimelock ??
|
|
14530
|
+
boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunkQ5WQ4Y2I_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
|
|
14464
14531
|
delegatePubKey
|
|
14465
14532
|
};
|
|
14466
14533
|
const result = await manager.scanContracts({
|
|
@@ -14493,6 +14560,21 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14493
14560
|
/** @deprecated Use settlementConfig instead */
|
|
14494
14561
|
renewalConfig;
|
|
14495
14562
|
settlementConfig;
|
|
14563
|
+
/**
|
|
14564
|
+
* Broadcast access bound to this wallet's server, so a plugin needs only
|
|
14565
|
+
* the wallet.
|
|
14566
|
+
*
|
|
14567
|
+
* Defined here and not on {@link ReadonlyWallet} for the same reason
|
|
14568
|
+
* `arkProvider` is protected there: a readonly wallet, and every
|
|
14569
|
+
* `toReadonly()` view, must not be able to submit.
|
|
14570
|
+
*/
|
|
14571
|
+
async getArkadeBroadcaster() {
|
|
14572
|
+
const ark = this.arkProvider;
|
|
14573
|
+
return {
|
|
14574
|
+
submitTx: (signedArkTx, checkpointTxs) => ark.submitTx(signedArkTx, checkpointTxs),
|
|
14575
|
+
finalizeTx: (arkTxid, finalCheckpointTxs) => ark.finalizeTx(arkTxid, finalCheckpointTxs)
|
|
14576
|
+
};
|
|
14577
|
+
}
|
|
14496
14578
|
get assetManager() {
|
|
14497
14579
|
this._walletAssetManager ??= new AssetManager(this);
|
|
14498
14580
|
return this._walletAssetManager;
|
|
@@ -14574,7 +14656,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14574
14656
|
throw new Error("Invalid configured public key");
|
|
14575
14657
|
}
|
|
14576
14658
|
const setup = await ReadonlyWallet.setupWalletConfig(config, pubkey);
|
|
14577
|
-
const forfeitPubkey =
|
|
14659
|
+
const forfeitPubkey = chunkQ5WQ4Y2I_cjs.toXOnly(base.hex.decode(setup.info.forfeitPubkey), "forfeit key");
|
|
14578
14660
|
const forfeitAddress = btcSigner.Address(setup.network).decode(setup.info.forfeitAddress);
|
|
14579
14661
|
const forfeitOutputScript = btcSigner.OutScript.encode(forfeitAddress);
|
|
14580
14662
|
const checkpointExitDelayOverrides = {
|
|
@@ -14672,6 +14754,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14672
14754
|
readonlyIdentity,
|
|
14673
14755
|
this.network,
|
|
14674
14756
|
this.onchainProvider,
|
|
14757
|
+
this.arkProvider,
|
|
14675
14758
|
this.indexerProvider,
|
|
14676
14759
|
this.arkServerPublicKey,
|
|
14677
14760
|
this.offchainTapscript,
|
|
@@ -14723,8 +14806,8 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14723
14806
|
inputs: params.selectedVtxos,
|
|
14724
14807
|
changeAmount: BigInt(changeAmount)
|
|
14725
14808
|
};
|
|
14726
|
-
const outputAddress =
|
|
14727
|
-
|
|
14809
|
+
const outputAddress = chunkRZ2NGS6A_cjs.ArkAddress.decode(params.address);
|
|
14810
|
+
assertRecipientArkadeAddress(
|
|
14728
14811
|
params.address,
|
|
14729
14812
|
outputAddress,
|
|
14730
14813
|
this.recipientAddressContext(serverPubKey)
|
|
@@ -14789,13 +14872,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14789
14872
|
void this.logUngatedInputs("settle({ inputs })", params.inputs);
|
|
14790
14873
|
}
|
|
14791
14874
|
const offchainAddress = await this.getAddress();
|
|
14792
|
-
const offchainPkScript =
|
|
14875
|
+
const offchainPkScript = chunkRZ2NGS6A_cjs.ArkAddress.decode(offchainAddress).pkScript;
|
|
14793
14876
|
const offchainOutputScript = base.hex.encode(offchainPkScript);
|
|
14794
14877
|
if (!params) {
|
|
14795
14878
|
const { fees, vtxoMaxAmount } = await this.arkProvider.getInfo();
|
|
14796
14879
|
const estimator = new Estimator(fees.intentFee);
|
|
14797
14880
|
let amount = 0;
|
|
14798
|
-
const exitScript =
|
|
14881
|
+
const exitScript = chunkRZ2NGS6A_cjs.CSVMultisigTapscript.decode(
|
|
14799
14882
|
base.hex.decode(this.boardingTapscript.exitScript)
|
|
14800
14883
|
);
|
|
14801
14884
|
const boardingTimelock = exitScript.params.timelock;
|
|
@@ -14824,7 +14907,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14824
14907
|
if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
|
|
14825
14908
|
break;
|
|
14826
14909
|
}
|
|
14827
|
-
const inputFee = estimator.evalOffchainInput(
|
|
14910
|
+
const inputFee = estimator.evalOffchainInput(chunkRZ2NGS6A_cjs.toOffchainInputFeeParams(vtxo));
|
|
14828
14911
|
if (inputFee.satoshis >= vtxo.value) {
|
|
14829
14912
|
continue;
|
|
14830
14913
|
}
|
|
@@ -14871,13 +14954,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14871
14954
|
let script;
|
|
14872
14955
|
let arkAddress;
|
|
14873
14956
|
try {
|
|
14874
|
-
arkAddress =
|
|
14957
|
+
arkAddress = chunkRZ2NGS6A_cjs.ArkAddress.decode(output.address);
|
|
14875
14958
|
} catch {
|
|
14876
14959
|
arkAddress = void 0;
|
|
14877
14960
|
}
|
|
14878
14961
|
if (arkAddress) {
|
|
14879
14962
|
recipientContext ??= this.recipientAddressContext();
|
|
14880
|
-
|
|
14963
|
+
assertRecipientArkadeAddress(output.address, arkAddress, recipientContext);
|
|
14881
14964
|
script = arkAddress.pkScript;
|
|
14882
14965
|
hasOffchainOutputs = true;
|
|
14883
14966
|
} else {
|
|
@@ -14961,7 +15044,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14961
15044
|
const abortController = new AbortController();
|
|
14962
15045
|
let stream;
|
|
14963
15046
|
let committedTxid;
|
|
14964
|
-
const settleInputVtxos = params.inputs.filter(
|
|
15047
|
+
const settleInputVtxos = params.inputs.filter(chunkRZ2NGS6A_cjs.isVirtualCoin);
|
|
14965
15048
|
const contractManager = await this.getContractManager();
|
|
14966
15049
|
await contractManager.assertAnnotatable(settleInputVtxos);
|
|
14967
15050
|
await contractManager.assertSpendableNow?.(
|
|
@@ -15073,7 +15156,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15073
15156
|
async maybeRotateBoardingAfterBoard(inputs) {
|
|
15074
15157
|
if (!this._descriptorProvider) return;
|
|
15075
15158
|
const consumedBoarding = inputs.some(
|
|
15076
|
-
(input) => typeof input !== "string" && !
|
|
15159
|
+
(input) => typeof input !== "string" && !chunkRZ2NGS6A_cjs.isVirtualCoin(input)
|
|
15077
15160
|
);
|
|
15078
15161
|
if (!consumedBoarding) return;
|
|
15079
15162
|
try {
|
|
@@ -15097,7 +15180,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15097
15180
|
let connectorIndex = 0;
|
|
15098
15181
|
const connectorsLeaves = connectorsGraph?.leaves() || [];
|
|
15099
15182
|
for (const input of inputs) {
|
|
15100
|
-
if (!
|
|
15183
|
+
if (!chunkRZ2NGS6A_cjs.isVirtualCoin(input)) {
|
|
15101
15184
|
for (let i = 0; i < settlementPsbt.inputsLength; i++) {
|
|
15102
15185
|
const settlementInput = settlementPsbt.getInput(i);
|
|
15103
15186
|
if (!settlementInput.txid || settlementInput.index === void 0) {
|
|
@@ -15128,7 +15211,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15128
15211
|
}
|
|
15129
15212
|
continue;
|
|
15130
15213
|
}
|
|
15131
|
-
if (
|
|
15214
|
+
if (chunkRZ2NGS6A_cjs.canRecoverOnchain(input, { timestamp: /* @__PURE__ */ new Date() }) || isSubdust({ value: input.value }, this.dustAmount)) {
|
|
15132
15215
|
continue;
|
|
15133
15216
|
}
|
|
15134
15217
|
if (connectorsLeaves.length === 0) {
|
|
@@ -15156,7 +15239,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15156
15239
|
index: input.vout,
|
|
15157
15240
|
witnessUtxo: {
|
|
15158
15241
|
amount: BigInt(input.value),
|
|
15159
|
-
script:
|
|
15242
|
+
script: chunkRZ2NGS6A_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
15160
15243
|
},
|
|
15161
15244
|
sighashType: btcSigner.SigHash.DEFAULT,
|
|
15162
15245
|
tapLeafScript: [input.forfeitTapLeafScript]
|
|
@@ -15175,7 +15258,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15175
15258
|
forfeitTx = await this._signerRouter.sign(forfeitTx, [
|
|
15176
15259
|
{
|
|
15177
15260
|
index: 0,
|
|
15178
|
-
lookupScript:
|
|
15261
|
+
lookupScript: chunkRZ2NGS6A_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
15179
15262
|
}
|
|
15180
15263
|
]);
|
|
15181
15264
|
signedForfeits.push(base.base64.encode(forfeitTx.toPSBT()));
|
|
@@ -15233,7 +15316,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15233
15316
|
resolveBatchExpiryPolicy(this.network, this.batchExpiryPolicy)
|
|
15234
15317
|
);
|
|
15235
15318
|
await this.arkProvider.confirmRegistration(intentId);
|
|
15236
|
-
const sweepTapscript =
|
|
15319
|
+
const sweepTapscript = chunkRZ2NGS6A_cjs.CSVMultisigTapscript.encode({
|
|
15237
15320
|
timelock,
|
|
15238
15321
|
pubkeys: [this.forfeitPubkey]
|
|
15239
15322
|
}).script;
|
|
@@ -15248,10 +15331,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15248
15331
|
throw new Error("Sweep tap tree root not set");
|
|
15249
15332
|
}
|
|
15250
15333
|
const xOnlyPublicKeys = event.cosignersPublicKeys.map(
|
|
15251
|
-
(k) => base.hex.encode(
|
|
15334
|
+
(k) => base.hex.encode(chunkQ5WQ4Y2I_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
|
|
15252
15335
|
);
|
|
15253
15336
|
const signerPublicKey = await session.getPublicKey();
|
|
15254
|
-
const xonlySignerPublicKey =
|
|
15337
|
+
const xonlySignerPublicKey = chunkQ5WQ4Y2I_cjs.toXOnly(signerPublicKey, "signer key");
|
|
15255
15338
|
if (!xOnlyPublicKeys.includes(base.hex.encode(xonlySignerPublicKey))) {
|
|
15256
15339
|
return { skip: true };
|
|
15257
15340
|
}
|
|
@@ -15341,9 +15424,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15341
15424
|
...existing ?? {},
|
|
15342
15425
|
intentTxId,
|
|
15343
15426
|
registerProof: intent.proof,
|
|
15344
|
-
registerProofMessage:
|
|
15427
|
+
registerProofMessage: chunkRZ2NGS6A_cjs.Intent.encodeMessage(intent.message),
|
|
15345
15428
|
deleteProof: deleteIntent.proof,
|
|
15346
|
-
deleteProofMessage:
|
|
15429
|
+
deleteProofMessage: chunkRZ2NGS6A_cjs.Intent.encodeMessage(deleteIntent.message),
|
|
15347
15430
|
intentVtxos: inputs.map((i) => ({
|
|
15348
15431
|
txid: i.txid,
|
|
15349
15432
|
vout: i.vout
|
|
@@ -15375,7 +15458,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15375
15458
|
try {
|
|
15376
15459
|
return await this.arkProvider.registerIntent(intent);
|
|
15377
15460
|
} catch (error) {
|
|
15378
|
-
if (error instanceof
|
|
15461
|
+
if (error instanceof chunkRZ2NGS6A_cjs.ArkError && error.code === 0 && error.message.includes("duplicated input")) {
|
|
15379
15462
|
const deleteIntent = await this.makeDeleteIntentSignature(inputs);
|
|
15380
15463
|
await this.arkProvider.deleteIntent(deleteIntent);
|
|
15381
15464
|
return this.arkProvider.registerIntent(intent);
|
|
@@ -15391,7 +15474,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15391
15474
|
expire_at: 0,
|
|
15392
15475
|
cosigners_public_keys: cosignerPubKeys
|
|
15393
15476
|
};
|
|
15394
|
-
const proof =
|
|
15477
|
+
const proof = chunkRZ2NGS6A_cjs.Intent.create(message, coins, outputs);
|
|
15395
15478
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
15396
15479
|
return {
|
|
15397
15480
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -15403,7 +15486,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15403
15486
|
type: "delete",
|
|
15404
15487
|
expire_at: 0
|
|
15405
15488
|
};
|
|
15406
|
-
const proof =
|
|
15489
|
+
const proof = chunkRZ2NGS6A_cjs.Intent.create(message, coins, []);
|
|
15407
15490
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
15408
15491
|
return {
|
|
15409
15492
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -15415,7 +15498,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15415
15498
|
type: "get-pending-tx",
|
|
15416
15499
|
expire_at: 0
|
|
15417
15500
|
};
|
|
15418
|
-
const proof =
|
|
15501
|
+
const proof = chunkRZ2NGS6A_cjs.Intent.create(message, coins, []);
|
|
15419
15502
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
15420
15503
|
return {
|
|
15421
15504
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -15436,7 +15519,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15436
15519
|
if (!vtxos || vtxos.length === 0) {
|
|
15437
15520
|
const scriptMap = await this.getScriptMap();
|
|
15438
15521
|
const allExtended = [];
|
|
15439
|
-
const fetchedVtxos = await
|
|
15522
|
+
const fetchedVtxos = await chunkRZ2NGS6A_cjs.getAllNormalizedVtxos(this.indexerProvider, [
|
|
15440
15523
|
...scriptMap.keys()
|
|
15441
15524
|
]);
|
|
15442
15525
|
for (const vtxo of fetchedVtxos) {
|
|
@@ -15480,7 +15563,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15480
15563
|
try {
|
|
15481
15564
|
const checkpointTxs = pendingTx.signedCheckpointTxs.map((c) => {
|
|
15482
15565
|
const tx = btcSigner.Transaction.fromPSBT(base.base64.decode(c));
|
|
15483
|
-
|
|
15566
|
+
chunkRZ2NGS6A_cjs.assertAllowedSighashTypes(tx);
|
|
15484
15567
|
return tx;
|
|
15485
15568
|
});
|
|
15486
15569
|
assertCheckpointsMatchInputs(
|
|
@@ -15552,11 +15635,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15552
15635
|
* against the current key alone would leave it pending forever.
|
|
15553
15636
|
*/
|
|
15554
15637
|
checkpointUnrollCandidates(info) {
|
|
15555
|
-
const current =
|
|
15638
|
+
const current = chunkRZ2NGS6A_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
|
|
15556
15639
|
const candidates = [this._serverUnrollScript, current];
|
|
15557
15640
|
for (const deprecated of signerSetFromInfo(info).deprecated.keys()) {
|
|
15558
15641
|
candidates.push(
|
|
15559
|
-
|
|
15642
|
+
chunkRZ2NGS6A_cjs.CSVMultisigTapscript.encode({
|
|
15560
15643
|
...current.params,
|
|
15561
15644
|
pubkeys: [base.hex.decode(deprecated)]
|
|
15562
15645
|
})
|
|
@@ -15647,7 +15730,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15647
15730
|
if (vtxos.length === 0) {
|
|
15648
15731
|
throw new Error("No VTXOs found for this arkadeCash");
|
|
15649
15732
|
}
|
|
15650
|
-
const myPkScript =
|
|
15733
|
+
const myPkScript = chunkRZ2NGS6A_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
|
|
15651
15734
|
let { spendable, unclaimed } = this.classifyCashVtxos(vtxos);
|
|
15652
15735
|
let swept = 0;
|
|
15653
15736
|
const drainable = vtxos.filter(
|
|
@@ -15723,7 +15806,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15723
15806
|
const spendable = [];
|
|
15724
15807
|
const unclaimed = [];
|
|
15725
15808
|
for (const vtxo of vtxos) {
|
|
15726
|
-
if (
|
|
15809
|
+
if (chunkRZ2NGS6A_cjs.hasTerminalSpend(vtxo)) {
|
|
15727
15810
|
unclaimed.push(cashReport(vtxo, "already-spent"));
|
|
15728
15811
|
} else if (vtxo.isUnrolled) {
|
|
15729
15812
|
unclaimed.push(cashReport(vtxo, "exited"));
|
|
@@ -15745,7 +15828,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15745
15828
|
const all = [];
|
|
15746
15829
|
const seen = /* @__PURE__ */ new Set();
|
|
15747
15830
|
for (let pageIndex = 0; ; pageIndex++) {
|
|
15748
|
-
const { vtxos, page } = await
|
|
15831
|
+
const { vtxos, page } = await chunkRZ2NGS6A_cjs.getNormalizedVtxos(this.indexerProvider, {
|
|
15749
15832
|
scripts,
|
|
15750
15833
|
pageIndex,
|
|
15751
15834
|
pageSize
|
|
@@ -15792,7 +15875,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15792
15875
|
for (let i = 0; i < inputs.length; i += MAX_INPUTS_PER_INTENT) {
|
|
15793
15876
|
const batch = inputs.slice(i, i + MAX_INPUTS_PER_INTENT);
|
|
15794
15877
|
const message = { type: "get-pending-tx", expire_at: 0 };
|
|
15795
|
-
const proof =
|
|
15878
|
+
const proof = chunkRZ2NGS6A_cjs.Intent.create(message, batch, []);
|
|
15796
15879
|
const signedProof = await identity.sign(
|
|
15797
15880
|
proof,
|
|
15798
15881
|
Array.from({ length: batch.length + 1 }, (_, j) => j)
|
|
@@ -15814,7 +15897,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15814
15897
|
try {
|
|
15815
15898
|
const checkpointTxs = pendingTx.signedCheckpointTxs.map((checkpoint) => {
|
|
15816
15899
|
const tx = btcSigner.Transaction.fromPSBT(base.base64.decode(checkpoint));
|
|
15817
|
-
|
|
15900
|
+
chunkRZ2NGS6A_cjs.assertAllowedSighashTypes(tx);
|
|
15818
15901
|
return tx;
|
|
15819
15902
|
});
|
|
15820
15903
|
assertCheckpointsMatchInputs(
|
|
@@ -16013,7 +16096,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16013
16096
|
script: recipient.script,
|
|
16014
16097
|
amount: BigInt(recipient.amount),
|
|
16015
16098
|
// Already checked against the recipient address in `validateRecipients`.
|
|
16016
|
-
...recipient.tapTree ? { tapTree:
|
|
16099
|
+
...recipient.tapTree ? { tapTree: chunkRZ2NGS6A_cjs.TapTreeCoder.decode(recipient.tapTree) } : {}
|
|
16017
16100
|
}));
|
|
16018
16101
|
const totalBtcOutput = outputs.reduce((sum, o) => sum + Number(o.amount), 0);
|
|
16019
16102
|
let changeAmount = totalBtcSelected - totalBtcOutput;
|
|
@@ -16157,10 +16240,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16157
16240
|
const serverPubKey = this.arkServerPublicKey;
|
|
16158
16241
|
const serverUnrollScript = this.serverUnrollScript;
|
|
16159
16242
|
const arkAddress = offchainTapscript.address(this.network.hrp, serverPubKey);
|
|
16160
|
-
const normalizedInputs = inputs.map(
|
|
16161
|
-
const at = now ?? await
|
|
16243
|
+
const normalizedInputs = inputs.map(chunkRZ2NGS6A_cjs.normalizeVtxo);
|
|
16244
|
+
const at = now ?? await chunkRZ2NGS6A_cjs.resolveTimeHeight(this.onchainProvider);
|
|
16162
16245
|
for (const input of normalizedInputs) {
|
|
16163
|
-
if (!
|
|
16246
|
+
if (!chunkRZ2NGS6A_cjs.canSpendOffchain(input, at)) {
|
|
16164
16247
|
throw new Error(
|
|
16165
16248
|
`sendSelectedVtxosToSelf: input ${input.txid}:${input.vout} is not cooperatively spendable`
|
|
16166
16249
|
);
|
|
@@ -16230,7 +16313,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16230
16313
|
);
|
|
16231
16314
|
const arkTxJobs = inputs.map((input, index) => ({
|
|
16232
16315
|
index,
|
|
16233
|
-
lookupScript:
|
|
16316
|
+
lookupScript: chunkRZ2NGS6A_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
16234
16317
|
}));
|
|
16235
16318
|
const identity = this.identity;
|
|
16236
16319
|
const signer = {
|
|
@@ -16316,14 +16399,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16316
16399
|
const spentBy = checkpointIdByOutpoint.get(`${vtxo.txid}:${vtxo.vout}`);
|
|
16317
16400
|
spentVtxos.push({
|
|
16318
16401
|
...spentFacts,
|
|
16319
|
-
virtualStatus:
|
|
16402
|
+
virtualStatus: chunkRZ2NGS6A_cjs.toVirtualStatus(spentFacts),
|
|
16320
16403
|
...spentBy ? { spentBy } : {},
|
|
16321
16404
|
arkTxId: arkTxid
|
|
16322
16405
|
});
|
|
16323
16406
|
for (const id of vtxo.commitmentTxIds) {
|
|
16324
16407
|
commitmentTxIds.add(id);
|
|
16325
16408
|
}
|
|
16326
|
-
const vtxoExpiry =
|
|
16409
|
+
const vtxoExpiry = chunkRZ2NGS6A_cjs.toBatchExpiry(vtxo);
|
|
16327
16410
|
if (vtxoExpiry) {
|
|
16328
16411
|
batchExpiry = Math.min(batchExpiry, vtxoExpiry);
|
|
16329
16412
|
}
|
|
@@ -16336,7 +16419,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16336
16419
|
isSwept: false,
|
|
16337
16420
|
isPreconfirmed: true,
|
|
16338
16421
|
commitmentTxIds: Array.from(commitmentTxIds),
|
|
16339
|
-
...
|
|
16422
|
+
...chunkRZ2NGS6A_cjs.parseLegacyExpiry(batchExpiry)
|
|
16340
16423
|
};
|
|
16341
16424
|
changeVtxo = {
|
|
16342
16425
|
txid: arkTxid,
|
|
@@ -16348,7 +16431,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16348
16431
|
tapTree: offchainTapscript.encode(),
|
|
16349
16432
|
value: Number(changeAmount),
|
|
16350
16433
|
...changeFacts,
|
|
16351
|
-
virtualStatus:
|
|
16434
|
+
virtualStatus: chunkRZ2NGS6A_cjs.toVirtualStatus(changeFacts),
|
|
16352
16435
|
spentBy: "",
|
|
16353
16436
|
status: {
|
|
16354
16437
|
confirmed: false
|
|
@@ -16417,12 +16500,12 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16417
16500
|
const spentVtxos = [];
|
|
16418
16501
|
const inputArkTxIds = /* @__PURE__ */ new Set();
|
|
16419
16502
|
const boardingRemovalsByAddress = /* @__PURE__ */ new Map();
|
|
16420
|
-
const vtxoInputs = inputs.filter(
|
|
16503
|
+
const vtxoInputs = inputs.filter(chunkRZ2NGS6A_cjs.isVirtualCoin);
|
|
16421
16504
|
const cm = await this.getContractManager();
|
|
16422
16505
|
const annotatedVtxos = await cm.annotateVtxos(vtxoInputs);
|
|
16423
16506
|
const annotatedByKey = new Map(annotatedVtxos.map((v) => [`${v.txid}:${v.vout}`, v]));
|
|
16424
16507
|
for (const input of inputs) {
|
|
16425
|
-
if (
|
|
16508
|
+
if (chunkRZ2NGS6A_cjs.isVirtualCoin(input)) {
|
|
16426
16509
|
const outpoint = `${input.txid}:${input.vout}`;
|
|
16427
16510
|
const vtxo = annotatedByKey.get(outpoint);
|
|
16428
16511
|
if (!vtxo) {
|
|
@@ -16434,13 +16517,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16434
16517
|
const settledFacts = { ...vtxo, isSpent: true };
|
|
16435
16518
|
spentVtxos.push({
|
|
16436
16519
|
...settledFacts,
|
|
16437
|
-
virtualStatus:
|
|
16520
|
+
virtualStatus: chunkRZ2NGS6A_cjs.toVirtualStatus(settledFacts),
|
|
16438
16521
|
settledBy: commitmentTxid
|
|
16439
16522
|
});
|
|
16440
16523
|
} else {
|
|
16441
16524
|
let sourceAddress;
|
|
16442
16525
|
try {
|
|
16443
|
-
sourceAddress =
|
|
16526
|
+
sourceAddress = chunkRZ2NGS6A_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
|
|
16444
16527
|
this.network
|
|
16445
16528
|
);
|
|
16446
16529
|
} catch {
|
|
@@ -16498,9 +16581,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16498
16581
|
}
|
|
16499
16582
|
};
|
|
16500
16583
|
function selectVirtualCoins(coins, targetAmount) {
|
|
16501
|
-
const sortedCoins = coins.map(
|
|
16502
|
-
const expiryA =
|
|
16503
|
-
const expiryB =
|
|
16584
|
+
const sortedCoins = coins.map(chunkRZ2NGS6A_cjs.normalizeVtxo).sort((a, b) => {
|
|
16585
|
+
const expiryA = chunkRZ2NGS6A_cjs.toBatchExpiry(a) || Number.MAX_SAFE_INTEGER;
|
|
16586
|
+
const expiryB = chunkRZ2NGS6A_cjs.toBatchExpiry(b) || Number.MAX_SAFE_INTEGER;
|
|
16504
16587
|
if (expiryA !== expiryB) {
|
|
16505
16588
|
return expiryA - expiryB;
|
|
16506
16589
|
}
|
|
@@ -16869,7 +16952,7 @@ var MessageBus = class {
|
|
|
16869
16952
|
this.initialized = true;
|
|
16870
16953
|
}
|
|
16871
16954
|
async buildServices(config) {
|
|
16872
|
-
const arkProvider = new
|
|
16955
|
+
const arkProvider = new chunkRZ2NGS6A_cjs.RestArkProvider(config.arkServer.url);
|
|
16873
16956
|
const storage = {
|
|
16874
16957
|
walletRepository: this.walletRepository,
|
|
16875
16958
|
contractRepository: this.contractRepository,
|
|
@@ -17115,6 +17198,9 @@ var MessageBus = class {
|
|
|
17115
17198
|
});
|
|
17116
17199
|
return;
|
|
17117
17200
|
}
|
|
17201
|
+
if (response.error instanceof Error && !response.errorName) {
|
|
17202
|
+
response.errorName = response.error.name;
|
|
17203
|
+
}
|
|
17118
17204
|
source.postMessage(response);
|
|
17119
17205
|
}
|
|
17120
17206
|
/**
|
|
@@ -17211,7 +17297,7 @@ var offboardNetworkNames = [
|
|
|
17211
17297
|
function offboardDestinationScript(destinationAddress) {
|
|
17212
17298
|
for (const networkName of offboardNetworkNames) {
|
|
17213
17299
|
try {
|
|
17214
|
-
const network =
|
|
17300
|
+
const network = chunkRZ2NGS6A_cjs.networks[networkName];
|
|
17215
17301
|
const addr = btcSigner.Address(network).decode(destinationAddress);
|
|
17216
17302
|
return btcSigner.OutScript.encode(addr);
|
|
17217
17303
|
} catch {
|
|
@@ -17275,7 +17361,7 @@ var Ramps = class {
|
|
|
17275
17361
|
}
|
|
17276
17362
|
amount = amount ?? totalAmount;
|
|
17277
17363
|
const offchainAddress = await this.wallet.getAddress();
|
|
17278
|
-
const offchainAddr =
|
|
17364
|
+
const offchainAddr = chunkRZ2NGS6A_cjs.ArkAddress.decode(offchainAddress);
|
|
17279
17365
|
const offchainScript = base.hex.encode(offchainAddr.pkScript);
|
|
17280
17366
|
const outputFee = estimator.evalOffchainOutput({
|
|
17281
17367
|
amount,
|
|
@@ -17335,7 +17421,7 @@ var Ramps = class {
|
|
|
17335
17421
|
const filteredVtxos = [];
|
|
17336
17422
|
let totalAmount = 0n;
|
|
17337
17423
|
for (const vtxo of vtxos) {
|
|
17338
|
-
const inputFee = estimator.evalOffchainInput(
|
|
17424
|
+
const inputFee = estimator.evalOffchainInput(chunkRZ2NGS6A_cjs.toOffchainInputFeeParams(vtxo));
|
|
17339
17425
|
if (inputFee.satoshis >= vtxo.value) {
|
|
17340
17426
|
continue;
|
|
17341
17427
|
}
|
|
@@ -17708,6 +17794,49 @@ var WalletMessageHandler = class {
|
|
|
17708
17794
|
payload: { address }
|
|
17709
17795
|
});
|
|
17710
17796
|
}
|
|
17797
|
+
case "GET_ARKADE_INFO": {
|
|
17798
|
+
const { payload } = message;
|
|
17799
|
+
const info = await this.readonlyWallet.getArkadeInfo(payload);
|
|
17800
|
+
return this.tagged({
|
|
17801
|
+
id,
|
|
17802
|
+
type: "ARKADE_INFO",
|
|
17803
|
+
payload: { info }
|
|
17804
|
+
});
|
|
17805
|
+
}
|
|
17806
|
+
case "INDEXER_GET_VTXOS": {
|
|
17807
|
+
const { opts } = message.payload;
|
|
17808
|
+
const reader = await this.readonlyWallet.getArkadeReader();
|
|
17809
|
+
return this.tagged({
|
|
17810
|
+
id,
|
|
17811
|
+
type: "INDEXER_VTXOS",
|
|
17812
|
+
payload: await reader.getVtxos(opts)
|
|
17813
|
+
});
|
|
17814
|
+
}
|
|
17815
|
+
case "INDEXER_GET_VIRTUAL_TXS": {
|
|
17816
|
+
const { txids, opts } = message.payload;
|
|
17817
|
+
const reader = await this.readonlyWallet.getArkadeReader();
|
|
17818
|
+
return this.tagged({
|
|
17819
|
+
id,
|
|
17820
|
+
type: "INDEXER_VIRTUAL_TXS",
|
|
17821
|
+
payload: await reader.getVirtualTxs(txids, opts)
|
|
17822
|
+
});
|
|
17823
|
+
}
|
|
17824
|
+
case "SUBMIT_TX": {
|
|
17825
|
+
const { signedArkTx, checkpointTxs } = message.payload;
|
|
17826
|
+
const broadcaster = await this.requireWallet().getArkadeBroadcaster();
|
|
17827
|
+
const result = await broadcaster.submitTx(signedArkTx, checkpointTxs);
|
|
17828
|
+
return this.tagged({
|
|
17829
|
+
id,
|
|
17830
|
+
type: "SUBMIT_TX_SUCCESS",
|
|
17831
|
+
payload: result
|
|
17832
|
+
});
|
|
17833
|
+
}
|
|
17834
|
+
case "FINALIZE_TX": {
|
|
17835
|
+
const { arkTxid, finalCheckpointTxs } = message.payload;
|
|
17836
|
+
const broadcaster = await this.requireWallet().getArkadeBroadcaster();
|
|
17837
|
+
await broadcaster.finalizeTx(arkTxid, finalCheckpointTxs);
|
|
17838
|
+
return this.tagged({ id, type: "FINALIZE_TX_SUCCESS" });
|
|
17839
|
+
}
|
|
17711
17840
|
case "GET_BALANCE": {
|
|
17712
17841
|
const balance = await this.handleGetBalance();
|
|
17713
17842
|
return this.tagged({
|
|
@@ -18171,7 +18300,7 @@ var WalletMessageHandler = class {
|
|
|
18171
18300
|
// Wallet methods
|
|
18172
18301
|
async handleInitWallet({ payload }) {
|
|
18173
18302
|
const { arkServerUrl } = payload;
|
|
18174
|
-
this.indexerProvider = new
|
|
18303
|
+
this.indexerProvider = new chunkWQIWUTYS_cjs.RestIndexerProvider(arkServerUrl);
|
|
18175
18304
|
await this.onWalletInitialized();
|
|
18176
18305
|
}
|
|
18177
18306
|
/**
|
|
@@ -18460,7 +18589,7 @@ var WalletMessageHandler = class {
|
|
|
18460
18589
|
if (v.isUnrolled) {
|
|
18461
18590
|
return withUnrolled;
|
|
18462
18591
|
}
|
|
18463
|
-
if (
|
|
18592
|
+
if (chunkRZ2NGS6A_cjs.hasTerminalSpend(v)) {
|
|
18464
18593
|
return false;
|
|
18465
18594
|
}
|
|
18466
18595
|
if (includeRecoverable) {
|
|
@@ -18469,10 +18598,10 @@ var WalletMessageHandler = class {
|
|
|
18469
18598
|
if (dustAmount != null && isSubdust(v, dustAmount)) {
|
|
18470
18599
|
return false;
|
|
18471
18600
|
}
|
|
18472
|
-
if (
|
|
18601
|
+
if (chunkRZ2NGS6A_cjs.isRecoverable(v)) {
|
|
18473
18602
|
return false;
|
|
18474
18603
|
}
|
|
18475
|
-
if (
|
|
18604
|
+
if (chunkRZ2NGS6A_cjs.isExpired(v)) {
|
|
18476
18605
|
return false;
|
|
18477
18606
|
}
|
|
18478
18607
|
return true;
|
|
@@ -18570,7 +18699,7 @@ var WalletMessageHandler = class {
|
|
|
18570
18699
|
if (!this.readonlyWallet) return null;
|
|
18571
18700
|
const { boardingTxs, commitmentsToIgnore } = await this.readonlyWallet.getBoardingTxs();
|
|
18572
18701
|
const indexerProvider = this.indexerProvider;
|
|
18573
|
-
const resolveTxCreatedAt = indexerProvider ? (txids) =>
|
|
18702
|
+
const resolveTxCreatedAt = indexerProvider ? (txids) => chunkRZ2NGS6A_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
|
|
18574
18703
|
return buildTransactionHistory(vtxos, boardingTxs, commitmentsToIgnore, resolveTxCreatedAt);
|
|
18575
18704
|
}
|
|
18576
18705
|
async ensureContractEventBroadcasting() {
|
|
@@ -18599,6 +18728,13 @@ var WalletMessageHandler = class {
|
|
|
18599
18728
|
|
|
18600
18729
|
// src/wallet/serviceWorker/wallet.ts
|
|
18601
18730
|
var sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
18731
|
+
var restoreErrorName = (response) => {
|
|
18732
|
+
const error = response.error;
|
|
18733
|
+
if (response.errorName && error instanceof Error && error.name !== response.errorName) {
|
|
18734
|
+
error.name = response.errorName;
|
|
18735
|
+
}
|
|
18736
|
+
return error;
|
|
18737
|
+
};
|
|
18602
18738
|
var INIT_WAIT_BACKOFF_CAP_MS = 2e3;
|
|
18603
18739
|
var MAX_INIT_WAITS = 8;
|
|
18604
18740
|
var initWaitBackoffMs = (attempt) => Math.min(100 * 2 ** attempt, INIT_WAIT_BACKOFF_CAP_MS);
|
|
@@ -18621,6 +18757,14 @@ var DEFAULT_MESSAGE_TIMEOUTS = {
|
|
|
18621
18757
|
GET_USED_SIGNING_DESCRIPTORS: 2e4,
|
|
18622
18758
|
ADVANCE_SIGNING_DESCRIPTOR_WATERMARK: 1e4,
|
|
18623
18759
|
// Medium reads — may involve indexer queries
|
|
18760
|
+
// A live `/v1/info` fetch queued behind the same per-origin rate gate as
|
|
18761
|
+
// the indexer, not a repository read. Derived from the fetch's own abort
|
|
18762
|
+
// budget so the worker's snapshot fallback stays reachable before this
|
|
18763
|
+
// page deadline fires — lowering it below the budget would time the page
|
|
18764
|
+
// out while the worker is still seconds from answering from cache.
|
|
18765
|
+
GET_ARKADE_INFO: chunkRZ2NGS6A_cjs.INFO_FETCH_TIMEOUT_MS + 8e3,
|
|
18766
|
+
INDEXER_GET_VTXOS: 2e4,
|
|
18767
|
+
INDEXER_GET_VIRTUAL_TXS: 2e4,
|
|
18624
18768
|
GET_VTXOS: 2e4,
|
|
18625
18769
|
GET_SPENDABLE_VTXOS: 2e4,
|
|
18626
18770
|
GET_BOARDING_UTXOS: 2e4,
|
|
@@ -18643,6 +18787,10 @@ var DEFAULT_MESSAGE_TIMEOUTS = {
|
|
|
18643
18787
|
SEND_BITCOIN: 5e4,
|
|
18644
18788
|
SEND: 5e4,
|
|
18645
18789
|
SETTLE: 5e4,
|
|
18790
|
+
// Broadcast: the server round-trip a spend ends in, so it belongs
|
|
18791
|
+
// with the writes rather than the reads above.
|
|
18792
|
+
SUBMIT_TX: 5e4,
|
|
18793
|
+
FINALIZE_TX: 5e4,
|
|
18646
18794
|
ISSUE: 5e4,
|
|
18647
18795
|
REISSUE: 5e4,
|
|
18648
18796
|
BURN: 5e4,
|
|
@@ -18669,6 +18817,9 @@ var DEFAULT_MESSAGE_TIMEOUTS = {
|
|
|
18669
18817
|
};
|
|
18670
18818
|
var DEDUPABLE_REQUEST_TYPES = /* @__PURE__ */ new Set([
|
|
18671
18819
|
"GET_ADDRESS",
|
|
18820
|
+
"GET_ARKADE_INFO",
|
|
18821
|
+
"INDEXER_GET_VTXOS",
|
|
18822
|
+
"INDEXER_GET_VIRTUAL_TXS",
|
|
18672
18823
|
"GET_BALANCE",
|
|
18673
18824
|
"GET_BOARDING_ADDRESS",
|
|
18674
18825
|
"GET_BOARDING_UTXOS",
|
|
@@ -18760,7 +18911,7 @@ var initializeMessageBus = (serviceWorker, config, timeoutMs = 2e3) => {
|
|
|
18760
18911
|
if (response?.id !== initCmd.id) return;
|
|
18761
18912
|
cleanup();
|
|
18762
18913
|
if (response.error) {
|
|
18763
|
-
reject(response
|
|
18914
|
+
reject(restoreErrorName(response));
|
|
18764
18915
|
} else {
|
|
18765
18916
|
resolve();
|
|
18766
18917
|
}
|
|
@@ -18932,7 +19083,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
18932
19083
|
}
|
|
18933
19084
|
cleanup();
|
|
18934
19085
|
if (response.error) {
|
|
18935
|
-
reject(response
|
|
19086
|
+
reject(restoreErrorName(response));
|
|
18936
19087
|
} else {
|
|
18937
19088
|
resolve(response);
|
|
18938
19089
|
}
|
|
@@ -18958,7 +19109,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
18958
19109
|
if (request.id !== response.id) return;
|
|
18959
19110
|
if (response.error) {
|
|
18960
19111
|
cleanup();
|
|
18961
|
-
reject(response
|
|
19112
|
+
reject(restoreErrorName(response));
|
|
18962
19113
|
return;
|
|
18963
19114
|
}
|
|
18964
19115
|
if (isComplete(response)) {
|
|
@@ -19184,6 +19335,68 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
19184
19335
|
throw new Error(`Failed to get boarding address: ${error}`);
|
|
19185
19336
|
}
|
|
19186
19337
|
}
|
|
19338
|
+
/**
|
|
19339
|
+
* Delegated to the worker, which holds the wallet that owns the connection.
|
|
19340
|
+
* The payload crosses raw — see {@link ResponseGetArkadeInfo} for why.
|
|
19341
|
+
*/
|
|
19342
|
+
async getArkadeInfo(opts) {
|
|
19343
|
+
const message = {
|
|
19344
|
+
id: getRandomId(),
|
|
19345
|
+
tag: this.messageTag,
|
|
19346
|
+
type: "GET_ARKADE_INFO",
|
|
19347
|
+
// omitted entirely for the default read: wire-shape hygiene
|
|
19348
|
+
// toward workers built before the option existed. (Dedup is
|
|
19349
|
+
// unaffected either way — the key is JSON.stringify, which drops
|
|
19350
|
+
// undefined-valued properties.)
|
|
19351
|
+
...opts?.requireLive ? { payload: { requireLive: true } } : {}
|
|
19352
|
+
};
|
|
19353
|
+
try {
|
|
19354
|
+
const response = await this.sendMessage(message);
|
|
19355
|
+
return response.payload.info;
|
|
19356
|
+
} catch (error) {
|
|
19357
|
+
throw new Error(`Failed to get arkade info: ${error}`, { cause: error });
|
|
19358
|
+
}
|
|
19359
|
+
}
|
|
19360
|
+
/**
|
|
19361
|
+
* An {@link ArkadeReader} that speaks to the worker rather than to the
|
|
19362
|
+
* server. The page holds no provider, so a caller that built its own from a
|
|
19363
|
+
* URL would open a second connection outside the worker's rate gate and
|
|
19364
|
+
* caches — this proxy is what keeps chain reads in one place.
|
|
19365
|
+
*/
|
|
19366
|
+
async getArkadeReader() {
|
|
19367
|
+
return {
|
|
19368
|
+
getVtxos: async (opts) => {
|
|
19369
|
+
const message = {
|
|
19370
|
+
id: getRandomId(),
|
|
19371
|
+
tag: this.messageTag,
|
|
19372
|
+
type: "INDEXER_GET_VTXOS",
|
|
19373
|
+
payload: { opts }
|
|
19374
|
+
};
|
|
19375
|
+
try {
|
|
19376
|
+
const response = await this.sendMessage(message);
|
|
19377
|
+
const { vtxos, page } = response.payload;
|
|
19378
|
+
return { vtxos: vtxos.map(chunkRZ2NGS6A_cjs.normalizeVtxo), page: page && { ...page } };
|
|
19379
|
+
} catch (error) {
|
|
19380
|
+
throw new Error(`Failed to get vtxos: ${error}`, { cause: error });
|
|
19381
|
+
}
|
|
19382
|
+
},
|
|
19383
|
+
getVirtualTxs: async (txids, opts) => {
|
|
19384
|
+
const message = {
|
|
19385
|
+
id: getRandomId(),
|
|
19386
|
+
tag: this.messageTag,
|
|
19387
|
+
type: "INDEXER_GET_VIRTUAL_TXS",
|
|
19388
|
+
payload: { txids, opts }
|
|
19389
|
+
};
|
|
19390
|
+
try {
|
|
19391
|
+
const response = await this.sendMessage(message);
|
|
19392
|
+
const { txs, page } = response.payload;
|
|
19393
|
+
return { txs: [...txs], page: page && { ...page } };
|
|
19394
|
+
} catch (error) {
|
|
19395
|
+
throw new Error(`Failed to get virtual txs: ${error}`, { cause: error });
|
|
19396
|
+
}
|
|
19397
|
+
}
|
|
19398
|
+
};
|
|
19399
|
+
}
|
|
19187
19400
|
async getBalance() {
|
|
19188
19401
|
const message = {
|
|
19189
19402
|
id: getRandomId(),
|
|
@@ -19266,7 +19479,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
19266
19479
|
};
|
|
19267
19480
|
try {
|
|
19268
19481
|
const response = await this.sendMessage(message);
|
|
19269
|
-
return response.payload.vtxos.map(
|
|
19482
|
+
return response.payload.vtxos.map(chunkRZ2NGS6A_cjs.normalizeVtxo);
|
|
19270
19483
|
} catch (error) {
|
|
19271
19484
|
throw new Error(`Failed to get vtxos: ${error}`);
|
|
19272
19485
|
}
|
|
@@ -19291,7 +19504,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
19291
19504
|
};
|
|
19292
19505
|
try {
|
|
19293
19506
|
const response = await this.sendMessage(message);
|
|
19294
|
-
return response.payload.vtxos.map(
|
|
19507
|
+
return response.payload.vtxos.map(chunkRZ2NGS6A_cjs.normalizeVtxo);
|
|
19295
19508
|
} catch (error) {
|
|
19296
19509
|
throw new Error(`Failed to get spendable vtxos: ${error}`);
|
|
19297
19510
|
}
|
|
@@ -19422,7 +19635,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
19422
19635
|
};
|
|
19423
19636
|
try {
|
|
19424
19637
|
const response = await sendContractMessage(message);
|
|
19425
|
-
return response.payload.vtxos.map(
|
|
19638
|
+
return response.payload.vtxos.map(chunkRZ2NGS6A_cjs.normalizeVtxo);
|
|
19426
19639
|
} catch (e) {
|
|
19427
19640
|
throw new Error("Failed to annotate vtxos");
|
|
19428
19641
|
}
|
|
@@ -19840,6 +20053,43 @@ var ServiceWorkerWallet = class _ServiceWorkerWallet extends ServiceWorkerReadon
|
|
|
19840
20053
|
async signerForDescriptor(descriptor) {
|
|
19841
20054
|
return resolveDescriptorSigner(descriptor, this.identity);
|
|
19842
20055
|
}
|
|
20056
|
+
/**
|
|
20057
|
+
* An {@link ArkadeBroadcaster} proxied to the worker, which holds the
|
|
20058
|
+
* provider. Only `ServiceWorkerWallet` offers one: a readonly worker
|
|
20059
|
+
* refuses `SUBMIT_TX`/`FINALIZE_TX` outright, so exposing it on the
|
|
20060
|
+
* readonly class would promise something the boundary rejects.
|
|
20061
|
+
*/
|
|
20062
|
+
async getArkadeBroadcaster() {
|
|
20063
|
+
return {
|
|
20064
|
+
submitTx: async (signedArkTx, checkpointTxs) => {
|
|
20065
|
+
const message = {
|
|
20066
|
+
id: getRandomId(),
|
|
20067
|
+
tag: this.messageTag,
|
|
20068
|
+
type: "SUBMIT_TX",
|
|
20069
|
+
payload: { signedArkTx, checkpointTxs }
|
|
20070
|
+
};
|
|
20071
|
+
try {
|
|
20072
|
+
const response = await this.sendMessage(message);
|
|
20073
|
+
return response.payload;
|
|
20074
|
+
} catch (error) {
|
|
20075
|
+
throw new Error(`Failed to submit tx: ${error}`, { cause: error });
|
|
20076
|
+
}
|
|
20077
|
+
},
|
|
20078
|
+
finalizeTx: async (arkTxid, finalCheckpointTxs) => {
|
|
20079
|
+
const message = {
|
|
20080
|
+
id: getRandomId(),
|
|
20081
|
+
tag: this.messageTag,
|
|
20082
|
+
type: "FINALIZE_TX",
|
|
20083
|
+
payload: { arkTxid, finalCheckpointTxs }
|
|
20084
|
+
};
|
|
20085
|
+
try {
|
|
20086
|
+
await this.sendMessage(message);
|
|
20087
|
+
} catch (error) {
|
|
20088
|
+
throw new Error(`Failed to finalize tx: ${error}`, { cause: error });
|
|
20089
|
+
}
|
|
20090
|
+
}
|
|
20091
|
+
};
|
|
20092
|
+
}
|
|
19843
20093
|
async sendBitcoin(params) {
|
|
19844
20094
|
const message = {
|
|
19845
20095
|
id: getRandomId(),
|
|
@@ -20023,7 +20273,7 @@ var ServiceWorkerWallet = class _ServiceWorkerWallet extends ServiceWorkerReadon
|
|
|
20023
20273
|
};
|
|
20024
20274
|
try {
|
|
20025
20275
|
const response = await wallet.sendMessage(message);
|
|
20026
|
-
return response.payload.vtxos.map(
|
|
20276
|
+
return response.payload.vtxos.map(chunkRZ2NGS6A_cjs.normalizeVtxo);
|
|
20027
20277
|
} catch (e) {
|
|
20028
20278
|
throw new Error(`Failed to get expiring vtxos: ${e}`);
|
|
20029
20279
|
}
|
|
@@ -20135,12 +20385,12 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
20135
20385
|
* @returns Configured onchain wallet
|
|
20136
20386
|
* @throws Error if the configured identity cannot produce a valid x-only public key
|
|
20137
20387
|
*/
|
|
20138
|
-
static async create(identity, networkName =
|
|
20388
|
+
static async create(identity, networkName = chunkRZ2NGS6A_cjs.DEFAULT_NETWORK_NAME, provider) {
|
|
20139
20389
|
const pubkey = await identity.xOnlyPublicKey();
|
|
20140
20390
|
if (!pubkey) {
|
|
20141
20391
|
throw new Error("Invalid configured public key");
|
|
20142
20392
|
}
|
|
20143
|
-
const network =
|
|
20393
|
+
const network = chunkRZ2NGS6A_cjs.getNetwork(networkName);
|
|
20144
20394
|
const onchainProvider = provider || new EsploraProvider(ESPLORA_URL[networkName]);
|
|
20145
20395
|
const onchainP2TR = btcSigner.p2tr(pubkey, void 0, network);
|
|
20146
20396
|
return new _OnchainWallet(identity, network, onchainP2TR, onchainProvider);
|
|
@@ -20246,7 +20496,7 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
20246
20496
|
if (!inputs) {
|
|
20247
20497
|
throw new Error("Fee estimation failed");
|
|
20248
20498
|
}
|
|
20249
|
-
let tx = new
|
|
20499
|
+
let tx = new chunkRZ2NGS6A_cjs.Transaction();
|
|
20250
20500
|
for (const input of inputs) {
|
|
20251
20501
|
tx.addInput({
|
|
20252
20502
|
txid: input.txid,
|
|
@@ -20304,7 +20554,7 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
20304
20554
|
* @throws If the parent has no anchor, or funding cannot be selected/signed
|
|
20305
20555
|
*/
|
|
20306
20556
|
async bumpAnchor(parentHex, feeRate) {
|
|
20307
|
-
const parent =
|
|
20557
|
+
const parent = chunkRZ2NGS6A_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
|
|
20308
20558
|
const coins = (await this.getCoins()).filter((c) => c.status.confirmed);
|
|
20309
20559
|
const child = await this.buildBumpPackage(parent, feeRate, coins);
|
|
20310
20560
|
return [parent.hex, child.hex];
|
|
@@ -21211,7 +21461,7 @@ async function resolvePrevTxs(txids, source, onchain) {
|
|
|
21211
21461
|
try {
|
|
21212
21462
|
const { txs } = await source.getVirtualTxs(wanted);
|
|
21213
21463
|
for (const psbt of txs) {
|
|
21214
|
-
const tx =
|
|
21464
|
+
const tx = chunkRZ2NGS6A_cjs.Transaction.fromPSBT(base.base64.decode(psbt));
|
|
21215
21465
|
resolved.set(tx.id, tx.toBytes());
|
|
21216
21466
|
}
|
|
21217
21467
|
} catch (err) {
|
|
@@ -21244,7 +21494,7 @@ async function resolvePrevTxs(txids, source, onchain) {
|
|
|
21244
21494
|
async function attachPrevArkTxs(tx, txids, source, onchain) {
|
|
21245
21495
|
const pending = [];
|
|
21246
21496
|
for (let i = 0; i < tx.inputsLength; i++) {
|
|
21247
|
-
if (
|
|
21497
|
+
if (chunkRZ2NGS6A_cjs.getArkPsbtFields(tx, i, chunkRZ2NGS6A_cjs.PrevArkTxField).length === 0) pending.push(i);
|
|
21248
21498
|
}
|
|
21249
21499
|
if (pending.length === 0) return;
|
|
21250
21500
|
const resolved = await resolvePrevTxs(
|
|
@@ -21253,13 +21503,13 @@ async function attachPrevArkTxs(tx, txids, source, onchain) {
|
|
|
21253
21503
|
onchain
|
|
21254
21504
|
);
|
|
21255
21505
|
for (const i of pending) {
|
|
21256
|
-
|
|
21506
|
+
chunkRZ2NGS6A_cjs.setArkPsbtField(tx, i, chunkRZ2NGS6A_cjs.PrevArkTxField, resolved.get(txidAt(txids, i)));
|
|
21257
21507
|
}
|
|
21258
21508
|
}
|
|
21259
21509
|
async function attachPrevoutTxs(tx, source) {
|
|
21260
21510
|
const pending = [];
|
|
21261
21511
|
for (let i = 0; i < tx.inputsLength; i++) {
|
|
21262
|
-
if (
|
|
21512
|
+
if (chunkRZ2NGS6A_cjs.getArkPsbtFields(tx, i, chunkRZ2NGS6A_cjs.PrevoutTxField).length > 0) continue;
|
|
21263
21513
|
const input = tx.getInput(i);
|
|
21264
21514
|
if (!input?.txid) throw new PrevTxUnavailableError(`input ${i} has no outpoint`);
|
|
21265
21515
|
pending.push({ index: i, txid: base.hex.encode(input.txid) });
|
|
@@ -21270,7 +21520,7 @@ async function attachPrevoutTxs(tx, source) {
|
|
|
21270
21520
|
resolved.set(txid, await source.getRawTransaction(txid));
|
|
21271
21521
|
}
|
|
21272
21522
|
for (const { index, txid } of pending) {
|
|
21273
|
-
|
|
21523
|
+
chunkRZ2NGS6A_cjs.setArkPsbtField(tx, index, chunkRZ2NGS6A_cjs.PrevoutTxField, resolved.get(txid));
|
|
21274
21524
|
}
|
|
21275
21525
|
}
|
|
21276
21526
|
async function withPrevTxs(coins, source, onchain) {
|
|
@@ -21296,7 +21546,7 @@ exports.BIP322 = void 0;
|
|
|
21296
21546
|
async function sign2(message, identity, network) {
|
|
21297
21547
|
const xOnlyPubKey = await identity.xOnlyPublicKey();
|
|
21298
21548
|
const payment = btcSigner.p2tr(xOnlyPubKey, void 0, network);
|
|
21299
|
-
const toSpend =
|
|
21549
|
+
const toSpend = chunkRZ2NGS6A_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
|
|
21300
21550
|
const toSign = craftBIP322ToSignP2TR(toSpend, payment.script, xOnlyPubKey);
|
|
21301
21551
|
const signed = await identity.sign(toSign, [0]);
|
|
21302
21552
|
signed.finalizeIdx(0);
|
|
@@ -21354,7 +21604,7 @@ function verifyP2TR(message, witnessItems, pkScript, pubkey) {
|
|
|
21354
21604
|
if (sighashType !== btcSigner.SigHash.DEFAULT && sighashType !== btcSigner.SigHash.ALL) {
|
|
21355
21605
|
return false;
|
|
21356
21606
|
}
|
|
21357
|
-
const toSpend =
|
|
21607
|
+
const toSpend = chunkRZ2NGS6A_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
|
|
21358
21608
|
const toSign = craftBIP322ToSignP2TR(toSpend, pkScript, pubkey);
|
|
21359
21609
|
const sighash = toSign.preimageWitnessV1(0, [pkScript], sighashType, [0n]);
|
|
21360
21610
|
const rawSig = sig.length === 65 ? sig.subarray(0, 64) : sig;
|
|
@@ -21375,7 +21625,7 @@ function verifyP2WPKH(message, witnessItems, pkScript, addressHash) {
|
|
|
21375
21625
|
}
|
|
21376
21626
|
const sighashType = sigWithHash[sigWithHash.length - 1];
|
|
21377
21627
|
const derSig = sigWithHash.subarray(0, sigWithHash.length - 1);
|
|
21378
|
-
const toSpend =
|
|
21628
|
+
const toSpend = chunkRZ2NGS6A_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
|
|
21379
21629
|
const toSign = craftBIP322ToSignSimple(toSpend, pkScript);
|
|
21380
21630
|
const scriptCode = btcSigner.OutScript.encode({ type: "pkh", hash: addressHash });
|
|
21381
21631
|
const sighash = toSign.preimageWitnessV0(0, scriptCode, sighashType, 0n);
|
|
@@ -21428,7 +21678,7 @@ function encodeCompactSize(n) {
|
|
|
21428
21678
|
return buf;
|
|
21429
21679
|
}
|
|
21430
21680
|
function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
|
|
21431
|
-
const tx = new
|
|
21681
|
+
const tx = new chunkRZ2NGS6A_cjs.Transaction({ version: 0 });
|
|
21432
21682
|
tx.addInput({
|
|
21433
21683
|
txid: toSpend.id,
|
|
21434
21684
|
index: 0,
|
|
@@ -21442,12 +21692,12 @@ function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
|
|
|
21442
21692
|
});
|
|
21443
21693
|
tx.addOutput({
|
|
21444
21694
|
amount: 0n,
|
|
21445
|
-
script:
|
|
21695
|
+
script: chunkRZ2NGS6A_cjs.OP_RETURN_EMPTY_PKSCRIPT
|
|
21446
21696
|
});
|
|
21447
21697
|
return tx;
|
|
21448
21698
|
}
|
|
21449
21699
|
function craftBIP322ToSignSimple(toSpend, pkScript) {
|
|
21450
|
-
const tx = new
|
|
21700
|
+
const tx = new chunkRZ2NGS6A_cjs.Transaction({ version: 0 });
|
|
21451
21701
|
tx.addInput({
|
|
21452
21702
|
txid: toSpend.id,
|
|
21453
21703
|
index: 0,
|
|
@@ -21459,7 +21709,7 @@ function craftBIP322ToSignSimple(toSpend, pkScript) {
|
|
|
21459
21709
|
});
|
|
21460
21710
|
tx.addOutput({
|
|
21461
21711
|
amount: 0n,
|
|
21462
|
-
script:
|
|
21712
|
+
script: chunkRZ2NGS6A_cjs.OP_RETURN_EMPTY_PKSCRIPT
|
|
21463
21713
|
});
|
|
21464
21714
|
return tx;
|
|
21465
21715
|
}
|
|
@@ -21590,7 +21840,7 @@ var RestEmulatorProvider = class {
|
|
|
21590
21840
|
}
|
|
21591
21841
|
};
|
|
21592
21842
|
function finalizeVirtualTx(type, psbtBase64) {
|
|
21593
|
-
const tx =
|
|
21843
|
+
const tx = chunkRZ2NGS6A_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
|
|
21594
21844
|
if (type === "INDEXER_CHAINED_TX_TYPE_TREE" /* TREE */) {
|
|
21595
21845
|
const input = tx.getInput(0);
|
|
21596
21846
|
if (!input) {
|
|
@@ -21617,14 +21867,14 @@ var ExitPathError = class extends Error {
|
|
|
21617
21867
|
reason;
|
|
21618
21868
|
};
|
|
21619
21869
|
function delayWeight(sequence) {
|
|
21620
|
-
const t =
|
|
21870
|
+
const t = chunkRZ2NGS6A_cjs.sequenceToTimelock(sequence);
|
|
21621
21871
|
return t.type === "blocks" ? Number(t.value) : Number(t.value) / 600;
|
|
21622
21872
|
}
|
|
21623
21873
|
async function resolveUnilateralPath(params) {
|
|
21624
21874
|
const { vtxo, scriptHex, contractRepository } = params;
|
|
21625
21875
|
const contract = contractRepository ? (await contractRepository.getContracts({ script: scriptHex }))[0] : void 0;
|
|
21626
21876
|
if (contract) {
|
|
21627
|
-
const handler =
|
|
21877
|
+
const handler = chunkQ5WQ4Y2I_cjs.contractHandlers.get(contract.type);
|
|
21628
21878
|
if (!handler) {
|
|
21629
21879
|
throw new ExitPathError(
|
|
21630
21880
|
"no-handler",
|
|
@@ -21647,12 +21897,12 @@ async function resolveUnilateralPath(params) {
|
|
|
21647
21897
|
paths.sort((a, b) => delayWeight(a.sequence) - delayWeight(b.sequence));
|
|
21648
21898
|
return { selection: paths[0], label: `${contract.type}:unilateral` };
|
|
21649
21899
|
}
|
|
21650
|
-
const decoded =
|
|
21900
|
+
const decoded = chunkRZ2NGS6A_cjs.VtxoScript.decode(vtxo.tapTree);
|
|
21651
21901
|
let best;
|
|
21652
21902
|
for (const exit of decoded.exitPaths()) {
|
|
21653
21903
|
const leaf = decoded.findLeaf(base.hex.encode(exit.script));
|
|
21654
21904
|
if (!leaf) continue;
|
|
21655
|
-
const sequence =
|
|
21905
|
+
const sequence = chunkRZ2NGS6A_cjs.timelockToSequence(exit.params.timelock);
|
|
21656
21906
|
const weight = delayWeight(sequence);
|
|
21657
21907
|
if (!best || weight < best.weight) {
|
|
21658
21908
|
best = { selection: { leaf, sequence }, weight };
|
|
@@ -21872,7 +22122,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
21872
22122
|
let totalAmount = 0n;
|
|
21873
22123
|
const txWeightEstimator = TxWeightEstimator.create();
|
|
21874
22124
|
for (const vtxo of vtxos) {
|
|
21875
|
-
if (!
|
|
22125
|
+
if (!chunkRZ2NGS6A_cjs.canSweepOnchain(vtxo)) {
|
|
21876
22126
|
throw new Error(
|
|
21877
22127
|
`Vtxo ${vtxo.txid}:${vtxo.vout} cannot be swept onchain: it is not fully unrolled (use unroll first), or its exit output was already spent`
|
|
21878
22128
|
);
|
|
@@ -21883,14 +22133,14 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
21883
22133
|
}
|
|
21884
22134
|
const resolved = await resolveUnilateralPath({
|
|
21885
22135
|
vtxo,
|
|
21886
|
-
scriptHex: base.hex.encode(
|
|
22136
|
+
scriptHex: base.hex.encode(chunkRZ2NGS6A_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
|
|
21887
22137
|
contractRepository: wallet.contractRepository,
|
|
21888
22138
|
walletPubKeyHex: base.hex.encode(await wallet.identity.xOnlyPublicKey()),
|
|
21889
22139
|
currentTime: Date.now()
|
|
21890
22140
|
});
|
|
21891
22141
|
const spendingLeaf = resolved.selection.leaf;
|
|
21892
22142
|
const sequence = resolved.selection.sequence;
|
|
21893
|
-
const timelock =
|
|
22143
|
+
const timelock = chunkRZ2NGS6A_cjs.sequenceToTimelock(sequence);
|
|
21894
22144
|
const elapsed = timelock.type === "blocks" ? chainTip.height >= txStatus.blockHeight + Number(timelock.value) : chainTip.time >= txStatus.blockTime + Number(timelock.value);
|
|
21895
22145
|
if (!elapsed) {
|
|
21896
22146
|
throw new Error(`no available exit path found for vtxo ${vtxo.txid}:${vtxo.vout}`);
|
|
@@ -21903,7 +22153,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
21903
22153
|
sequence,
|
|
21904
22154
|
witnessUtxo: {
|
|
21905
22155
|
amount: BigInt(vtxo.value),
|
|
21906
|
-
script:
|
|
22156
|
+
script: chunkRZ2NGS6A_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
|
|
21907
22157
|
},
|
|
21908
22158
|
sighashType: btcSigner.SigHash.DEFAULT
|
|
21909
22159
|
});
|
|
@@ -21913,7 +22163,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
21913
22163
|
btcSigner.TaprootControlBlock.encode(spendingLeaf[0]).length
|
|
21914
22164
|
);
|
|
21915
22165
|
}
|
|
21916
|
-
const tx = new
|
|
22166
|
+
const tx = new chunkRZ2NGS6A_cjs.Transaction({ version: 2 });
|
|
21917
22167
|
for (const input of inputs) {
|
|
21918
22168
|
tx.addInput(input);
|
|
21919
22169
|
}
|
|
@@ -21996,7 +22246,7 @@ async function buildSignedSweep(params) {
|
|
|
21996
22246
|
`uneconomic vtxo ${vtxo.txid}:${vtxo.vout}: value ${vtxo.value} - fee ${fee} < dust`
|
|
21997
22247
|
);
|
|
21998
22248
|
}
|
|
21999
|
-
const tx = new
|
|
22249
|
+
const tx = new chunkRZ2NGS6A_cjs.Transaction({ version: 2 });
|
|
22000
22250
|
tx.addInput({
|
|
22001
22251
|
txid: vtxo.txid,
|
|
22002
22252
|
index: vtxo.vout,
|
|
@@ -22021,7 +22271,7 @@ async function buildSignedSweep(params) {
|
|
|
22021
22271
|
finalScriptWitness: [
|
|
22022
22272
|
tapScriptSig[0][1],
|
|
22023
22273
|
...path.extraWitness,
|
|
22024
|
-
|
|
22274
|
+
chunkRZ2NGS6A_cjs.scriptFromTapLeafScript(path.leaf),
|
|
22025
22275
|
btcSigner.TaprootControlBlock.encode(controlBlock)
|
|
22026
22276
|
]
|
|
22027
22277
|
});
|
|
@@ -22051,7 +22301,7 @@ async function resolveFeeRate(opts) {
|
|
|
22051
22301
|
}
|
|
22052
22302
|
async function selectExitVtxos(opts) {
|
|
22053
22303
|
if (!opts.vtxos) return opts.wallet.getVtxos();
|
|
22054
|
-
const res = await
|
|
22304
|
+
const res = await chunkRZ2NGS6A_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
|
|
22055
22305
|
const tapTrees = /* @__PURE__ */ new Map();
|
|
22056
22306
|
const out = [];
|
|
22057
22307
|
for (const vtxo of res.vtxos) {
|
|
@@ -22066,7 +22316,7 @@ async function selectExitVtxos(opts) {
|
|
|
22066
22316
|
`no contract registered for vtxo script ${vtxo.script} \u2014 register the contract before exiting`
|
|
22067
22317
|
);
|
|
22068
22318
|
}
|
|
22069
|
-
const handler =
|
|
22319
|
+
const handler = chunkQ5WQ4Y2I_cjs.contractHandlers.get(contract.type);
|
|
22070
22320
|
if (!handler) {
|
|
22071
22321
|
throw new Error(`no contract handler registered for type '${contract.type}'`);
|
|
22072
22322
|
}
|
|
@@ -22096,7 +22346,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
22096
22346
|
if (pendingNodes.length > 0) {
|
|
22097
22347
|
const txs = await resolver.getVirtualTxs(pendingNodes.map((n) => n.txid));
|
|
22098
22348
|
for (const psbt of txs) {
|
|
22099
|
-
psbts.set(
|
|
22349
|
+
psbts.set(chunkRZ2NGS6A_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
22100
22350
|
}
|
|
22101
22351
|
}
|
|
22102
22352
|
const childVsize = Number(
|
|
@@ -22132,7 +22382,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
22132
22382
|
try {
|
|
22133
22383
|
const resolved = await resolveUnilateralPath({
|
|
22134
22384
|
vtxo,
|
|
22135
|
-
scriptHex: base.hex.encode(
|
|
22385
|
+
scriptHex: base.hex.encode(chunkRZ2NGS6A_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
|
|
22136
22386
|
contractRepository: wallet.contractRepository,
|
|
22137
22387
|
walletPubKeyHex,
|
|
22138
22388
|
currentTime: Date.now()
|
|
@@ -22151,7 +22401,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
22151
22401
|
});
|
|
22152
22402
|
continue;
|
|
22153
22403
|
}
|
|
22154
|
-
const t =
|
|
22404
|
+
const t = chunkRZ2NGS6A_cjs.sequenceToTimelock(resolved.selection.sequence);
|
|
22155
22405
|
const delay = { type: t.type, value: Number(t.value) };
|
|
22156
22406
|
infos.push({ outpoint, value: vtxo.value, sweepFee, path: resolved.label, delay });
|
|
22157
22407
|
sweeps.push({ vtxo, resolved, sweepFee, delay });
|
|
@@ -22552,7 +22802,7 @@ async function prepare(opts) {
|
|
|
22552
22802
|
txid: sweep.vtxo.txid,
|
|
22553
22803
|
vout: sweep.vtxo.vout,
|
|
22554
22804
|
value: sweep.vtxo.value,
|
|
22555
|
-
pkScript:
|
|
22805
|
+
pkScript: chunkRZ2NGS6A_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
|
|
22556
22806
|
},
|
|
22557
22807
|
path: sweep.resolved.selection,
|
|
22558
22808
|
outputAddress: opts.sweepAddress,
|
|
@@ -22640,7 +22890,7 @@ async function prepare(opts) {
|
|
|
22640
22890
|
if (newFee <= splitterFee) break;
|
|
22641
22891
|
splitterFee = newFee;
|
|
22642
22892
|
}
|
|
22643
|
-
const splitter = new
|
|
22893
|
+
const splitter = new chunkRZ2NGS6A_cjs.Transaction({ version: 2 });
|
|
22644
22894
|
for (const coin of selected.inputs) {
|
|
22645
22895
|
splitter.addInput({
|
|
22646
22896
|
txid: coin.txid,
|
|
@@ -22784,41 +23034,41 @@ var UnilateralExit = {
|
|
|
22784
23034
|
// src/arkade/index.ts
|
|
22785
23035
|
var arkade_exports = {};
|
|
22786
23036
|
chunk5BLDMQED_cjs.__export(arkade_exports, {
|
|
22787
|
-
ARKADE_OP: () =>
|
|
22788
|
-
ARKADE_OPCODES: () =>
|
|
22789
|
-
ARKADE_OPCODE_NAMES: () =>
|
|
22790
|
-
ARKADE_OPCODE_VALUES: () =>
|
|
22791
|
-
ARKADE_OPS: () =>
|
|
23037
|
+
ARKADE_OP: () => chunkQ5WQ4Y2I_cjs.ARKADE_OP,
|
|
23038
|
+
ARKADE_OPCODES: () => chunkQ5WQ4Y2I_cjs.ARKADE_OPCODES,
|
|
23039
|
+
ARKADE_OPCODE_NAMES: () => chunkQ5WQ4Y2I_cjs.ARKADE_OPCODE_NAMES,
|
|
23040
|
+
ARKADE_OPCODE_VALUES: () => chunkQ5WQ4Y2I_cjs.ARKADE_OPCODE_VALUES,
|
|
23041
|
+
ARKADE_OPS: () => chunkQ5WQ4Y2I_cjs.ARKADE_OPS,
|
|
22792
23042
|
Arkade: () => Arkade,
|
|
22793
23043
|
ArkadeContract: () => ArkadeContract,
|
|
22794
|
-
ArkadeProgramScript: () =>
|
|
22795
|
-
ArkadeScript: () =>
|
|
23044
|
+
ArkadeProgramScript: () => chunkQ5WQ4Y2I_cjs.ArkadeProgramScript,
|
|
23045
|
+
ArkadeScript: () => chunkQ5WQ4Y2I_cjs.ArkadeScript,
|
|
22796
23046
|
ArkadeTransactionBuilder: () => ArkadeTransactionBuilder,
|
|
22797
|
-
BigNum: () =>
|
|
23047
|
+
BigNum: () => chunkQ5WQ4Y2I_cjs.bignum_exports,
|
|
22798
23048
|
OP: () => btcSigner.OP,
|
|
22799
|
-
OPCODE_NAMES: () =>
|
|
22800
|
-
OPCODE_VALUES: () =>
|
|
22801
|
-
SUPPORTED_PROGRAM_VERSION: () =>
|
|
23049
|
+
OPCODE_NAMES: () => chunkQ5WQ4Y2I_cjs.OPCODE_NAMES,
|
|
23050
|
+
OPCODE_VALUES: () => chunkQ5WQ4Y2I_cjs.OPCODE_VALUES,
|
|
23051
|
+
SUPPORTED_PROGRAM_VERSION: () => chunkQ5WQ4Y2I_cjs.SUPPORTED_PROGRAM_VERSION,
|
|
22802
23052
|
Script: () => btcSigner.Script,
|
|
22803
|
-
arkadeScriptHash: () =>
|
|
22804
|
-
arkadeWitnessHash: () =>
|
|
22805
|
-
asmToBytes: () =>
|
|
22806
|
-
bytesToASM: () =>
|
|
22807
|
-
computeArkadeScriptPublicKey: () =>
|
|
23053
|
+
arkadeScriptHash: () => chunkQ5WQ4Y2I_cjs.arkadeScriptHash,
|
|
23054
|
+
arkadeWitnessHash: () => chunkQ5WQ4Y2I_cjs.arkadeWitnessHash,
|
|
23055
|
+
asmToBytes: () => chunkQ5WQ4Y2I_cjs.asmToBytes,
|
|
23056
|
+
bytesToASM: () => chunkQ5WQ4Y2I_cjs.bytesToASM,
|
|
23057
|
+
computeArkadeScriptPublicKey: () => chunkQ5WQ4Y2I_cjs.computeArkadeScriptPublicKey,
|
|
22808
23058
|
createArkadeBatchHandler: () => createArkadeBatchHandler,
|
|
22809
|
-
deserializeArkadeContractParams: () =>
|
|
22810
|
-
fromASM: () =>
|
|
22811
|
-
getOpcodeName: () =>
|
|
22812
|
-
getOpcodeValue: () =>
|
|
22813
|
-
parseArtifact: () =>
|
|
22814
|
-
resolveAsm: () =>
|
|
22815
|
-
serializeArkadeContractParams: () =>
|
|
22816
|
-
stringifyArtifact: () =>
|
|
22817
|
-
toASM: () =>
|
|
22818
|
-
validateProgram: () =>
|
|
22819
|
-
witnessRefToBytes: () =>
|
|
23059
|
+
deserializeArkadeContractParams: () => chunkQ5WQ4Y2I_cjs.deserializeArkadeContractParams,
|
|
23060
|
+
fromASM: () => chunkQ5WQ4Y2I_cjs.fromASM,
|
|
23061
|
+
getOpcodeName: () => chunkQ5WQ4Y2I_cjs.getOpcodeName,
|
|
23062
|
+
getOpcodeValue: () => chunkQ5WQ4Y2I_cjs.getOpcodeValue,
|
|
23063
|
+
parseArtifact: () => chunkQ5WQ4Y2I_cjs.parseArtifact,
|
|
23064
|
+
resolveAsm: () => chunkQ5WQ4Y2I_cjs.resolveAsm,
|
|
23065
|
+
serializeArkadeContractParams: () => chunkQ5WQ4Y2I_cjs.serializeArkadeContractParams,
|
|
23066
|
+
stringifyArtifact: () => chunkQ5WQ4Y2I_cjs.stringifyArtifact,
|
|
23067
|
+
toASM: () => chunkQ5WQ4Y2I_cjs.toASM,
|
|
23068
|
+
validateProgram: () => chunkQ5WQ4Y2I_cjs.validateProgram,
|
|
23069
|
+
witnessRefToBytes: () => chunkQ5WQ4Y2I_cjs.witnessRefToBytes
|
|
22820
23070
|
});
|
|
22821
|
-
var isVtxoCoin = (input) =>
|
|
23071
|
+
var isVtxoCoin = (input) => chunkRZ2NGS6A_cjs.isVirtualCoin(input);
|
|
22822
23072
|
function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message, session, arkProvider, emulator, network, recipients, batchExpiryPolicy) {
|
|
22823
23073
|
let batchId;
|
|
22824
23074
|
let sweepTapTreeRoot;
|
|
@@ -22839,23 +23089,23 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
22839
23089
|
);
|
|
22840
23090
|
await arkProvider.confirmRegistration(intentId);
|
|
22841
23091
|
batchId = event.id;
|
|
22842
|
-
const sweepTapscript =
|
|
23092
|
+
const sweepTapscript = chunkRZ2NGS6A_cjs.CSVMultisigTapscript.encode({
|
|
22843
23093
|
timelock,
|
|
22844
|
-
pubkeys: [
|
|
23094
|
+
pubkeys: [chunkQ5WQ4Y2I_cjs.toXOnly(base.hex.decode(info.forfeitPubkey), "forfeit key")]
|
|
22845
23095
|
}).script;
|
|
22846
23096
|
sweepTapTreeRoot = payment_js.tapLeafHash(sweepTapscript);
|
|
22847
23097
|
return { skip: false };
|
|
22848
23098
|
},
|
|
22849
23099
|
onTreeSigningStarted: async (event, vtxoTree) => {
|
|
22850
23100
|
const signerPubKey = await session.getPublicKey();
|
|
22851
|
-
const xonlySignerPubKey =
|
|
23101
|
+
const xonlySignerPubKey = chunkQ5WQ4Y2I_cjs.toXOnly(signerPubKey, "signer key");
|
|
22852
23102
|
const xOnlyPubkeys = event.cosignersPublicKeys.map(
|
|
22853
|
-
(k) => base.hex.encode(
|
|
23103
|
+
(k) => base.hex.encode(chunkQ5WQ4Y2I_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
|
|
22854
23104
|
);
|
|
22855
23105
|
if (!xOnlyPubkeys.includes(base.hex.encode(xonlySignerPubKey))) {
|
|
22856
23106
|
return { skip: true };
|
|
22857
23107
|
}
|
|
22858
|
-
const commitmentTx =
|
|
23108
|
+
const commitmentTx = chunkRZ2NGS6A_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
|
|
22859
23109
|
validateVtxoTxGraph(vtxoTree, commitmentTx, sweepTapTreeRoot);
|
|
22860
23110
|
if (recipients && recipients.length > 0) {
|
|
22861
23111
|
validateBatchRecipients(commitmentTx, vtxoTree.leaves(), recipients, network);
|
|
@@ -22887,7 +23137,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
22887
23137
|
if (connectorTree) {
|
|
22888
23138
|
validateConnectorsTxGraph(event.commitmentTx, connectorTree);
|
|
22889
23139
|
}
|
|
22890
|
-
let commitmentPsbt =
|
|
23140
|
+
let commitmentPsbt = chunkRZ2NGS6A_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
|
|
22891
23141
|
assertFinalCommitmentMatchesValidated(
|
|
22892
23142
|
commitmentPsbt,
|
|
22893
23143
|
validatedCommitmentTxid,
|
|
@@ -22922,7 +23172,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
22922
23172
|
boardingIndices.push(boardingIdx);
|
|
22923
23173
|
continue;
|
|
22924
23174
|
}
|
|
22925
|
-
if (
|
|
23175
|
+
if (chunkRZ2NGS6A_cjs.isRecoverable(input) || isSubdust(input, info.dust)) {
|
|
22926
23176
|
continue;
|
|
22927
23177
|
}
|
|
22928
23178
|
if (connectorIndex >= connectorLeaves.length) {
|
|
@@ -22943,7 +23193,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
22943
23193
|
index: input.vout,
|
|
22944
23194
|
witnessUtxo: {
|
|
22945
23195
|
amount: BigInt(input.value),
|
|
22946
|
-
script:
|
|
23196
|
+
script: chunkRZ2NGS6A_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
22947
23197
|
},
|
|
22948
23198
|
sighashType: btcSigner.SigHash.DEFAULT,
|
|
22949
23199
|
tapLeafScript: [input.forfeitTapLeafScript]
|
|
@@ -23034,16 +23284,16 @@ var Arkade = class _Arkade {
|
|
|
23034
23284
|
/** Connect and resolve the server key, checkpoint closure and (if present) the co-signer key. */
|
|
23035
23285
|
static async connect(opts) {
|
|
23036
23286
|
const info = await opts.arkade.getInfo();
|
|
23037
|
-
const serverKey =
|
|
23038
|
-
const checkpoint =
|
|
23039
|
-
const network = opts.network ??
|
|
23287
|
+
const serverKey = chunkQ5WQ4Y2I_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
|
|
23288
|
+
const checkpoint = chunkRZ2NGS6A_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
|
|
23289
|
+
const network = opts.network ?? chunkRZ2NGS6A_cjs.DEFAULT_NETWORK;
|
|
23040
23290
|
let emulatorKey;
|
|
23041
23291
|
if (opts.emulator) {
|
|
23042
|
-
emulatorKey = base.hex.decode(
|
|
23292
|
+
emulatorKey = base.hex.decode(chunkRZ2NGS6A_cjs.resolveEmulatorPubkey(network, opts.emulatorPubkey));
|
|
23043
23293
|
}
|
|
23044
23294
|
let userKey;
|
|
23045
23295
|
if (opts.identity) {
|
|
23046
|
-
userKey =
|
|
23296
|
+
userKey = chunkQ5WQ4Y2I_cjs.toXOnly(await opts.identity.xOnlyPublicKey(), "identity key");
|
|
23047
23297
|
}
|
|
23048
23298
|
return new _Arkade({
|
|
23049
23299
|
arkProvider: opts.arkade,
|
|
@@ -23069,7 +23319,7 @@ var Arkade = class _Arkade {
|
|
|
23069
23319
|
* key respectively; explicit args always win.
|
|
23070
23320
|
*/
|
|
23071
23321
|
contract(program, args = {}) {
|
|
23072
|
-
const declared = (program.params ?? []).map(
|
|
23322
|
+
const declared = (program.params ?? []).map(chunkQ5WQ4Y2I_cjs.inputName);
|
|
23073
23323
|
if (declared.includes("server") && args.server === void 0) {
|
|
23074
23324
|
args = { ...args, server: this.serverKey };
|
|
23075
23325
|
}
|
|
@@ -23089,7 +23339,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
23089
23339
|
userKey: client.userKey,
|
|
23090
23340
|
emulatorKey: client.emulatorKey
|
|
23091
23341
|
};
|
|
23092
|
-
this.vtxoScript = new
|
|
23342
|
+
this.vtxoScript = new chunkQ5WQ4Y2I_cjs.ArkadeProgramScript(program, args, this.keys);
|
|
23093
23343
|
this.tapTree = this.vtxoScript.encode();
|
|
23094
23344
|
this.compiled = this.vtxoScript.compiled;
|
|
23095
23345
|
}
|
|
@@ -23117,7 +23367,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
23117
23367
|
`ArkadeContract.fromContract: expected contract type 'arkade', got '${contract.type}'`
|
|
23118
23368
|
);
|
|
23119
23369
|
}
|
|
23120
|
-
const typed =
|
|
23370
|
+
const typed = chunkQ5WQ4Y2I_cjs.deserializeArkadeContractParams(contract.params);
|
|
23121
23371
|
return new _ArkadeContract(client, typed.program, typed.args, {
|
|
23122
23372
|
serverKey: typed.serverKey,
|
|
23123
23373
|
userKey: typed.userKey,
|
|
@@ -23158,7 +23408,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
23158
23408
|
toContractParams() {
|
|
23159
23409
|
return {
|
|
23160
23410
|
type: "arkade",
|
|
23161
|
-
params:
|
|
23411
|
+
params: chunkQ5WQ4Y2I_cjs.serializeArkadeContractParams({
|
|
23162
23412
|
program: this.program,
|
|
23163
23413
|
args: this.args,
|
|
23164
23414
|
serverKey: this.keys.serverKey,
|
|
@@ -23208,18 +23458,18 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
23208
23458
|
if (registered) {
|
|
23209
23459
|
const [withVtxos] = await manager.getContractsWithVtxos({ script: scriptHex });
|
|
23210
23460
|
return (withVtxos?.vtxos ?? []).filter(
|
|
23211
|
-
(v) => !
|
|
23461
|
+
(v) => !chunkRZ2NGS6A_cjs.hasTerminalSpend(v) && !v.isUnrolled
|
|
23212
23462
|
);
|
|
23213
23463
|
}
|
|
23214
23464
|
}
|
|
23215
23465
|
if (!this.client.indexer) {
|
|
23216
23466
|
throw new Error("ArkadeContract.getUtxos: an indexer is required");
|
|
23217
23467
|
}
|
|
23218
|
-
const { vtxos } = await
|
|
23468
|
+
const { vtxos } = await chunkRZ2NGS6A_cjs.getNormalizedVtxos(this.client.indexer, {
|
|
23219
23469
|
scripts: [scriptHex],
|
|
23220
23470
|
spendableOnly: true
|
|
23221
23471
|
});
|
|
23222
|
-
return vtxos.filter((v) => !
|
|
23472
|
+
return vtxos.filter((v) => !chunkRZ2NGS6A_cjs.hasTerminalSpend(v) && !v.isUnrolled);
|
|
23223
23473
|
}
|
|
23224
23474
|
/** Total spendable balance (requires an indexer). */
|
|
23225
23475
|
async getBalance() {
|
|
@@ -23317,7 +23567,7 @@ var ArkadeTransactionBuilder = class {
|
|
|
23317
23567
|
this.contract.client.checkpoint
|
|
23318
23568
|
);
|
|
23319
23569
|
if (coin.sourceTx) {
|
|
23320
|
-
|
|
23570
|
+
chunkRZ2NGS6A_cjs.setArkPsbtField(arkTx, 0, chunkRZ2NGS6A_cjs.PrevArkTxField, coin.sourceTx);
|
|
23321
23571
|
}
|
|
23322
23572
|
if (this.fn.arkadeScript) {
|
|
23323
23573
|
const indexer = this.contract.client.indexer;
|
|
@@ -23334,8 +23584,8 @@ var ArkadeTransactionBuilder = class {
|
|
|
23334
23584
|
}
|
|
23335
23585
|
const condition = (def.tapscript.witness ?? []).map((w) => this.witnessBytes(w));
|
|
23336
23586
|
if (condition.length > 0) {
|
|
23337
|
-
|
|
23338
|
-
|
|
23587
|
+
chunkRZ2NGS6A_cjs.setArkPsbtField(arkTx, 0, chunkRZ2NGS6A_cjs.ConditionWitness, condition);
|
|
23588
|
+
chunkRZ2NGS6A_cjs.setArkPsbtField(checkpoints[0], 0, chunkRZ2NGS6A_cjs.ConditionWitness, condition);
|
|
23339
23589
|
}
|
|
23340
23590
|
const packets = [];
|
|
23341
23591
|
if (this.assetSpecs.length > 0) {
|
|
@@ -23374,7 +23624,7 @@ var ArkadeTransactionBuilder = class {
|
|
|
23374
23624
|
base.base64.encode(signedArk2.toPSBT()),
|
|
23375
23625
|
signedCps.map((c) => base.base64.encode(c.toPSBT()))
|
|
23376
23626
|
);
|
|
23377
|
-
const txid =
|
|
23627
|
+
const txid = chunkRZ2NGS6A_cjs.Transaction.fromPSBT(base.base64.decode(res2.signedArkTx)).id;
|
|
23378
23628
|
return {
|
|
23379
23629
|
txid,
|
|
23380
23630
|
signedArkTx: res2.signedArkTx,
|
|
@@ -23384,8 +23634,14 @@ var ArkadeTransactionBuilder = class {
|
|
|
23384
23634
|
if (!client.identity) {
|
|
23385
23635
|
throw new Error("a signing identity is required for non-covenant spends");
|
|
23386
23636
|
}
|
|
23637
|
+
const ark = client.arkProvider;
|
|
23638
|
+
if (!ark.submitTx || !ark.finalizeTx) {
|
|
23639
|
+
throw new Error(
|
|
23640
|
+
"broadcasting requires an `arkade` provider with `submitTx`/`finalizeTx` on the Arkade client"
|
|
23641
|
+
);
|
|
23642
|
+
}
|
|
23387
23643
|
const signedArk = await this.signArk(arkTx, userInputs);
|
|
23388
|
-
const res = await
|
|
23644
|
+
const res = await ark.submitTx(
|
|
23389
23645
|
base.base64.encode(signedArk.toPSBT()),
|
|
23390
23646
|
checkpoints.map((c) => base.base64.encode(c.toPSBT()))
|
|
23391
23647
|
);
|
|
@@ -23396,7 +23652,7 @@ var ArkadeTransactionBuilder = class {
|
|
|
23396
23652
|
async ({ server }) => base.base64.encode((await client.identity.sign(server, [0])).toPSBT())
|
|
23397
23653
|
)
|
|
23398
23654
|
);
|
|
23399
|
-
await
|
|
23655
|
+
await ark.finalizeTx(res.arkTxid, finalCps);
|
|
23400
23656
|
return {
|
|
23401
23657
|
txid: res.arkTxid,
|
|
23402
23658
|
signedArkTx: res.finalArkTx,
|
|
@@ -23433,23 +23689,23 @@ var ArkadeTransactionBuilder = class {
|
|
|
23433
23689
|
}
|
|
23434
23690
|
buildAssetPacket() {
|
|
23435
23691
|
const groups = this.assetSpecs.map((s) => {
|
|
23436
|
-
const id = typeof s.assetId === "string" ?
|
|
23437
|
-
return
|
|
23692
|
+
const id = typeof s.assetId === "string" ? chunkWQIWUTYS_cjs.AssetId.fromString(s.assetId) : chunkWQIWUTYS_cjs.AssetId.fromBytes(s.assetId);
|
|
23693
|
+
return chunkWQIWUTYS_cjs.AssetGroup.create(
|
|
23438
23694
|
id,
|
|
23439
23695
|
null,
|
|
23440
|
-
s.inputs.map((i) =>
|
|
23441
|
-
s.outputs.map((o) =>
|
|
23442
|
-
(s.metadata ?? []).map((m) =>
|
|
23696
|
+
s.inputs.map((i) => chunkWQIWUTYS_cjs.AssetInput.create(i.vin, i.amount)),
|
|
23697
|
+
s.outputs.map((o) => chunkWQIWUTYS_cjs.AssetOutput.create(o.vout, o.amount)),
|
|
23698
|
+
(s.metadata ?? []).map((m) => chunkWQIWUTYS_cjs.Metadata.create(m.key, m.value))
|
|
23443
23699
|
);
|
|
23444
23700
|
});
|
|
23445
|
-
return
|
|
23701
|
+
return chunkWQIWUTYS_cjs.Packet.create(groups);
|
|
23446
23702
|
}
|
|
23447
23703
|
witnessBytes(ref) {
|
|
23448
|
-
return
|
|
23704
|
+
return chunkQ5WQ4Y2I_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
|
|
23449
23705
|
}
|
|
23450
23706
|
};
|
|
23451
23707
|
function bindInputs(fn, callArgs) {
|
|
23452
|
-
const names = (fn.def.inputs ?? []).map(
|
|
23708
|
+
const names = (fn.def.inputs ?? []).map(chunkQ5WQ4Y2I_cjs.inputName);
|
|
23453
23709
|
if (callArgs.length !== names.length) {
|
|
23454
23710
|
throw new Error(`${fn.name}: expected ${names.length} argument(s), got ${callArgs.length}`);
|
|
23455
23711
|
}
|
|
@@ -23484,6 +23740,7 @@ var BIP21Error = /* @__PURE__ */ ((BIP21Error2) => {
|
|
|
23484
23740
|
BIP21Error2["INVALID_ADDRESS"] = "Invalid address";
|
|
23485
23741
|
return BIP21Error2;
|
|
23486
23742
|
})(BIP21Error || {});
|
|
23743
|
+
var ARK_HRP = /^(?:t?ark|T?ARK)/;
|
|
23487
23744
|
var BIP21 = class _BIP21 {
|
|
23488
23745
|
/**
|
|
23489
23746
|
* Create a BIP21 URI from the provided parameters.
|
|
@@ -23507,7 +23764,7 @@ var BIP21 = class _BIP21 {
|
|
|
23507
23764
|
}
|
|
23508
23765
|
queryParams[key] = value;
|
|
23509
23766
|
} else if (key === "ark") {
|
|
23510
|
-
if (typeof value === "string" &&
|
|
23767
|
+
if (typeof value === "string" && ARK_HRP.test(value)) {
|
|
23511
23768
|
queryParams[key] = value;
|
|
23512
23769
|
} else {
|
|
23513
23770
|
console.warn("Invalid ARK address format");
|
|
@@ -23527,7 +23784,7 @@ var BIP21 = class _BIP21 {
|
|
|
23527
23784
|
Object.entries(queryParams).map(([k, v]) => [k, String(v)])
|
|
23528
23785
|
)
|
|
23529
23786
|
).toString() : "";
|
|
23530
|
-
return `bitcoin:${address
|
|
23787
|
+
return `bitcoin:${address ?? ""}${query}`;
|
|
23531
23788
|
}
|
|
23532
23789
|
/**
|
|
23533
23790
|
* Integer-sats amount encoded in a BIP21 URI (`amount=` is BTC), or
|
|
@@ -23560,7 +23817,7 @@ var BIP21 = class _BIP21 {
|
|
|
23560
23817
|
const [address, query] = withoutPrefix.split("?");
|
|
23561
23818
|
const params = {};
|
|
23562
23819
|
if (address) {
|
|
23563
|
-
params.address = address
|
|
23820
|
+
params.address = address;
|
|
23564
23821
|
}
|
|
23565
23822
|
if (query) {
|
|
23566
23823
|
const queryParams = new URLSearchParams(query);
|
|
@@ -23576,7 +23833,7 @@ var BIP21 = class _BIP21 {
|
|
|
23576
23833
|
}
|
|
23577
23834
|
params[key] = amount;
|
|
23578
23835
|
} else if (key === "ark") {
|
|
23579
|
-
if (
|
|
23836
|
+
if (ARK_HRP.test(value)) {
|
|
23580
23837
|
params[key] = value;
|
|
23581
23838
|
} else {
|
|
23582
23839
|
console.warn("Invalid ARK address format");
|
|
@@ -23828,7 +24085,7 @@ function onchainRail() {
|
|
|
23828
24085
|
function createDefaultPaymentRouter(wallet) {
|
|
23829
24086
|
return new PaymentRouter({
|
|
23830
24087
|
wallet,
|
|
23831
|
-
prefs: { priority: ["ark", "
|
|
24088
|
+
prefs: { priority: ["ark", "onchain"] }
|
|
23832
24089
|
}).use(arkRail()).use(onchainRail());
|
|
23833
24090
|
}
|
|
23834
24091
|
/*! Bundled license information:
|
|
@@ -23939,6 +24196,7 @@ exports.arkTarget = arkTarget;
|
|
|
23939
24196
|
exports.arkade_exports = arkade_exports;
|
|
23940
24197
|
exports.assertFinalCommitmentMatchesValidated = assertFinalCommitmentMatchesValidated;
|
|
23941
24198
|
exports.assertIntentIdUnique = assertIntentIdUnique;
|
|
24199
|
+
exports.assertRecipientArkadeAddress = assertRecipientArkadeAddress;
|
|
23942
24200
|
exports.assertSendableAmount = assertSendableAmount;
|
|
23943
24201
|
exports.assertSubmittedArkTxid = assertSubmittedArkTxid;
|
|
23944
24202
|
exports.assertValidBatchExpiry = assertValidBatchExpiry;
|
|
@@ -24055,5 +24313,5 @@ exports.verifyTapscriptSignatures = verifyTapscriptSignatures;
|
|
|
24055
24313
|
exports.waitForIncomingFunds = waitForIncomingFunds;
|
|
24056
24314
|
exports.warnAndFilterVtxosForScript = warnAndFilterVtxosForScript;
|
|
24057
24315
|
exports.withPrevTxs = withPrevTxs;
|
|
24058
|
-
//# sourceMappingURL=chunk-
|
|
24059
|
-
//# sourceMappingURL=chunk-
|
|
24316
|
+
//# sourceMappingURL=chunk-YEUXBECG.cjs.map
|
|
24317
|
+
//# sourceMappingURL=chunk-YEUXBECG.cjs.map
|