@arkade-os/sdk 0.4.69 → 0.4.70
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/expo.cjs +5 -5
- package/dist/adapters/expo.js +3 -3
- package/dist/adapters/indexedDB.cjs +5 -5
- package/dist/adapters/indexedDB.js +4 -4
- package/dist/{chunk-GVHUHTRH.cjs → chunk-3KW4TWP2.cjs} +17 -17
- package/dist/{chunk-GVHUHTRH.cjs.map → chunk-3KW4TWP2.cjs.map} +1 -1
- package/dist/{chunk-WIFL5QYZ.cjs → chunk-3OKEUDHU.cjs} +49 -49
- package/dist/{chunk-WIFL5QYZ.cjs.map → chunk-3OKEUDHU.cjs.map} +1 -1
- package/dist/{chunk-5MLC2HU3.cjs → chunk-57636V35.cjs} +3 -3
- package/dist/{chunk-5MLC2HU3.cjs.map → chunk-57636V35.cjs.map} +1 -1
- package/dist/{chunk-2PPL3O7Z.js → chunk-6UM55KPZ.js} +3 -3
- package/dist/{chunk-2PPL3O7Z.js.map → chunk-6UM55KPZ.js.map} +1 -1
- package/dist/{chunk-HQ4DMGA4.cjs → chunk-B73Q75IL.cjs} +10 -10
- package/dist/{chunk-HQ4DMGA4.cjs.map → chunk-B73Q75IL.cjs.map} +1 -1
- package/dist/{chunk-YG7T6LI3.js → chunk-F5E7LI6G.js} +3 -3
- package/dist/{chunk-YG7T6LI3.js.map → chunk-F5E7LI6G.js.map} +1 -1
- package/dist/{chunk-XLWDX7QZ.js → chunk-IUFTICRY.js} +4 -4
- package/dist/{chunk-XLWDX7QZ.js.map → chunk-IUFTICRY.js.map} +1 -1
- package/dist/{chunk-XQPN5YP2.cjs → chunk-JJ7AXR4O.cjs} +17 -17
- package/dist/{chunk-XQPN5YP2.cjs.map → chunk-JJ7AXR4O.cjs.map} +1 -1
- package/dist/{chunk-TA7XLEP2.js → chunk-JVHO6XHG.js} +84 -11
- package/dist/chunk-JVHO6XHG.js.map +1 -0
- package/dist/{chunk-L5SCQYHF.js → chunk-TXSF2DKX.js} +3 -3
- package/dist/{chunk-L5SCQYHF.js.map → chunk-TXSF2DKX.js.map} +1 -1
- package/dist/{chunk-MNMPGEK2.js → chunk-UG3EZDLF.js} +4 -4
- package/dist/{chunk-MNMPGEK2.js.map → chunk-UG3EZDLF.js.map} +1 -1
- package/dist/{chunk-EBYCTLET.cjs → chunk-XTCOSZ34.cjs} +519 -440
- package/dist/chunk-XTCOSZ34.cjs.map +1 -0
- package/dist/contracts/handlers/index.cjs +9 -9
- package/dist/contracts/handlers/index.js +2 -2
- package/dist/index.cjs +315 -291
- package/dist/index.d.cts +72 -13
- package/dist/index.d.ts +72 -13
- package/dist/index.js +4 -4
- package/dist/repositories/realm/index.cjs +19 -19
- package/dist/repositories/realm/index.js +5 -5
- package/dist/repositories/sqlite/index.cjs +18 -18
- package/dist/repositories/sqlite/index.js +5 -5
- package/dist/wallet/expo/background.cjs +14 -14
- package/dist/wallet/expo/background.js +6 -6
- package/dist/wallet/expo/index.cjs +14 -14
- package/dist/wallet/expo/index.js +5 -5
- package/dist/worker/expo/index.cjs +9 -9
- package/dist/worker/expo/index.js +5 -5
- package/package.json +2 -1
- package/dist/chunk-EBYCTLET.cjs.map +0 -1
- package/dist/chunk-TA7XLEP2.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunk3KW4TWP2_cjs = require('./chunk-3KW4TWP2.cjs');
|
|
4
|
+
var chunk3OKEUDHU_cjs = require('./chunk-3OKEUDHU.cjs');
|
|
5
|
+
var chunk57636V35_cjs = require('./chunk-57636V35.cjs');
|
|
6
6
|
var chunk5BLDMQED_cjs = require('./chunk-5BLDMQED.cjs');
|
|
7
7
|
var utils_js = require('@scure/btc-signer/utils.js');
|
|
8
8
|
var btcSigner = require('@scure/btc-signer');
|
|
@@ -188,7 +188,7 @@ var TreeSignerSession = class _TreeSignerSession {
|
|
|
188
188
|
noncesByPubkey.set(base.hex.encode(myPublicKey.subarray(1)), myNonce);
|
|
189
189
|
const tx = this.graph.find(txid);
|
|
190
190
|
if (!tx) throw new Error(`missing tx for txid ${txid}`);
|
|
191
|
-
const cosigners =
|
|
191
|
+
const cosigners = chunk57636V35_cjs.getArkPsbtFields(tx.root, 0, chunk57636V35_cjs.CosignerPublicKey).map(
|
|
192
192
|
(c) => base.hex.encode(c.key.subarray(1))
|
|
193
193
|
// xonly pubkey
|
|
194
194
|
);
|
|
@@ -240,7 +240,7 @@ var TreeSignerSession = class _TreeSignerSession {
|
|
|
240
240
|
if (!aggNonce) throw new Error("missing aggregate nonce");
|
|
241
241
|
const prevoutAmounts = [];
|
|
242
242
|
const prevoutScripts = [];
|
|
243
|
-
const cosigners =
|
|
243
|
+
const cosigners = chunk57636V35_cjs.getArkPsbtFields(g.root, 0, chunk57636V35_cjs.CosignerPublicKey).map((c) => c.key);
|
|
244
244
|
const { finalKey } = aggregateKeys(cosigners, true, {
|
|
245
245
|
taprootTweak: this.scriptRoot
|
|
246
246
|
});
|
|
@@ -323,7 +323,7 @@ var SingleKey = class _SingleKey {
|
|
|
323
323
|
async sign(tx, inputIndexes) {
|
|
324
324
|
const txCpy = tx.clone();
|
|
325
325
|
if (!inputIndexes) {
|
|
326
|
-
|
|
326
|
+
chunk57636V35_cjs.assertAllowedSighashTypes(txCpy, ALLOWED_SIGHASH);
|
|
327
327
|
try {
|
|
328
328
|
if (!txCpy.sign(this.key, ALLOWED_SIGHASH)) {
|
|
329
329
|
throw new Error("Failed to sign transaction");
|
|
@@ -432,7 +432,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
432
432
|
let network;
|
|
433
433
|
if ("descriptor" in opts && typeof opts.descriptor === "string") {
|
|
434
434
|
descriptor = opts.descriptor;
|
|
435
|
-
network =
|
|
435
|
+
network = chunk3OKEUDHU_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
436
436
|
} else {
|
|
437
437
|
network = opts.isMainnet ?? true ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
438
438
|
descriptor = descriptorsScure.scriptExpressions.trBIP32({
|
|
@@ -530,7 +530,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
530
530
|
* `StaticDescriptorProvider` for legacy single-key wallets.
|
|
531
531
|
*/
|
|
532
532
|
isOurs(descriptor) {
|
|
533
|
-
return
|
|
533
|
+
return chunk3OKEUDHU_cjs.descriptorIsOurs(descriptor, this.descriptor, utils_js.pubSchnorr(this.derivedKey));
|
|
534
534
|
}
|
|
535
535
|
/**
|
|
536
536
|
* Signs each request with the key derived from its descriptor.
|
|
@@ -579,7 +579,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
579
579
|
}
|
|
580
580
|
// ── internal helpers ─────────────────────────────────────────────
|
|
581
581
|
derivePrivateKeyForDescriptor(descriptor) {
|
|
582
|
-
const network =
|
|
582
|
+
const network = chunk3OKEUDHU_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
583
583
|
const expansion = descriptorsScure.expand({ descriptor, network });
|
|
584
584
|
if (expansion.isRanged) {
|
|
585
585
|
throw new Error(
|
|
@@ -604,7 +604,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
604
604
|
signTxWithKey(tx, key, inputIndexes) {
|
|
605
605
|
const txCpy = tx.clone();
|
|
606
606
|
if (!inputIndexes) {
|
|
607
|
-
|
|
607
|
+
chunk57636V35_cjs.assertAllowedSighashTypes(txCpy, ALLOWED_SIGHASH2);
|
|
608
608
|
try {
|
|
609
609
|
if (!txCpy.sign(key, ALLOWED_SIGHASH2)) {
|
|
610
610
|
throw new Error("Failed to sign transaction");
|
|
@@ -666,7 +666,7 @@ var ReadonlyDescriptorIdentity = class _ReadonlyDescriptorIdentity {
|
|
|
666
666
|
*/
|
|
667
667
|
descriptor;
|
|
668
668
|
constructor(descriptor) {
|
|
669
|
-
const network =
|
|
669
|
+
const network = chunk3OKEUDHU_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
670
670
|
let expansion;
|
|
671
671
|
try {
|
|
672
672
|
expansion = descriptorsScure.expand({ descriptor, network, index: 0 });
|
|
@@ -716,7 +716,7 @@ var ReadonlyDescriptorIdentity = class _ReadonlyDescriptorIdentity {
|
|
|
716
716
|
* `StaticDescriptorProvider` for legacy single-key wallets.
|
|
717
717
|
*/
|
|
718
718
|
isOurs(descriptor) {
|
|
719
|
-
return
|
|
719
|
+
return chunk3OKEUDHU_cjs.descriptorIsOurs(descriptor, this.descriptor, this.indexZero.pubkey);
|
|
720
720
|
}
|
|
721
721
|
};
|
|
722
722
|
function serializeSeedOwnedSigningIdentity(identity) {
|
|
@@ -878,10 +878,10 @@ var DescriptorIdentity = class {
|
|
|
878
878
|
this.base = base;
|
|
879
879
|
}
|
|
880
880
|
async xOnlyPublicKey() {
|
|
881
|
-
return
|
|
881
|
+
return chunk3OKEUDHU_cjs.deriveDescriptorLeafPubKey(this.descriptor);
|
|
882
882
|
}
|
|
883
883
|
async compressedPublicKey() {
|
|
884
|
-
return
|
|
884
|
+
return chunk3OKEUDHU_cjs.deriveDescriptorLeafCompressedPubKey(this.descriptor);
|
|
885
885
|
}
|
|
886
886
|
async sign(tx, inputIndexes) {
|
|
887
887
|
const [signed] = await this.signer.signWithDescriptor([
|
|
@@ -949,12 +949,12 @@ var WalletCannotAllocateAddressError = class extends Error {
|
|
|
949
949
|
};
|
|
950
950
|
async function resolveDescriptorSigner(descriptor, identity, provider) {
|
|
951
951
|
const owner = provider?.isOurs(descriptor) ? provider : isHDCapableIdentity(identity) && identity.isOurs(descriptor) ? identity : void 0;
|
|
952
|
-
if (owner &&
|
|
952
|
+
if (owner && chunk3OKEUDHU_cjs.parseHDDescriptor(descriptor)) {
|
|
953
953
|
return new DescriptorIdentity({ descriptor, signer: owner, base: identity });
|
|
954
954
|
}
|
|
955
955
|
let key;
|
|
956
956
|
try {
|
|
957
|
-
key =
|
|
957
|
+
key = chunk3OKEUDHU_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
958
958
|
} catch {
|
|
959
959
|
throw new ForeignDescriptorError(descriptor);
|
|
960
960
|
}
|
|
@@ -1329,14 +1329,14 @@ function buildSaltedPreimageMessage(xonly, salt) {
|
|
|
1329
1329
|
}
|
|
1330
1330
|
var PREIMAGE_INDEX = 0;
|
|
1331
1331
|
function isPerArtifactDescriptor(descriptor) {
|
|
1332
|
-
return
|
|
1332
|
+
return chunk3OKEUDHU_cjs.parseHDDescriptor(descriptor) !== null;
|
|
1333
1333
|
}
|
|
1334
1334
|
async function provisionDescriptor(wallet) {
|
|
1335
1335
|
const allocated = isHDAllocationCapable(wallet) ? await wallet.getNextSigningDescriptor() : void 0;
|
|
1336
|
-
return allocated ?? await
|
|
1336
|
+
return allocated ?? await chunk3OKEUDHU_cjs.identityDescriptor(wallet.identity);
|
|
1337
1337
|
}
|
|
1338
1338
|
async function provisionRefundKey(wallet) {
|
|
1339
|
-
const descriptor = await
|
|
1339
|
+
const descriptor = await chunk3OKEUDHU_cjs.identityDescriptor(wallet.identity);
|
|
1340
1340
|
const signer = await contractSigner(wallet, descriptor);
|
|
1341
1341
|
const pubkey = await signer.xOnlyPublicKey();
|
|
1342
1342
|
const identityPubkey = await wallet.identity.xOnlyPublicKey();
|
|
@@ -1346,7 +1346,7 @@ async function provisionRefundKey(wallet) {
|
|
|
1346
1346
|
);
|
|
1347
1347
|
}
|
|
1348
1348
|
const address = await wallet.getAddress();
|
|
1349
|
-
const { pkScript } =
|
|
1349
|
+
const { pkScript } = chunk57636V35_cjs.ArkAddress.decode(address);
|
|
1350
1350
|
return { descriptor, pubkey, pkScript, address };
|
|
1351
1351
|
}
|
|
1352
1352
|
async function provisionClaimSecret(wallet, opts = {}) {
|
|
@@ -1392,7 +1392,7 @@ async function contractSigner(wallet, descriptor) {
|
|
|
1392
1392
|
const signer = isHDWalletCapable(wallet) ? await wallet.signerForDescriptor(descriptor) : wallet.identity;
|
|
1393
1393
|
let expected;
|
|
1394
1394
|
try {
|
|
1395
|
-
expected =
|
|
1395
|
+
expected = chunk3OKEUDHU_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
1396
1396
|
} catch (cause) {
|
|
1397
1397
|
throw new ForeignDescriptorError(descriptor, { cause });
|
|
1398
1398
|
}
|
|
@@ -1611,14 +1611,14 @@ var RestDelegateProvider = class {
|
|
|
1611
1611
|
*/
|
|
1612
1612
|
async delegate(intent, forfeitTxs, options) {
|
|
1613
1613
|
const url = `${this.url}/v1/delegate`;
|
|
1614
|
-
const response = await
|
|
1614
|
+
const response = await chunk57636V35_cjs.baseFetch(url, {
|
|
1615
1615
|
method: "POST",
|
|
1616
1616
|
headers: {
|
|
1617
1617
|
"Content-Type": "application/json"
|
|
1618
1618
|
},
|
|
1619
1619
|
body: JSON.stringify({
|
|
1620
1620
|
intent: {
|
|
1621
|
-
message:
|
|
1621
|
+
message: chunk57636V35_cjs.Intent.encodeMessage(intent.message),
|
|
1622
1622
|
proof: intent.proof
|
|
1623
1623
|
},
|
|
1624
1624
|
forfeit_txs: forfeitTxs,
|
|
@@ -1638,7 +1638,7 @@ var RestDelegateProvider = class {
|
|
|
1638
1638
|
*/
|
|
1639
1639
|
async getDelegateInfo() {
|
|
1640
1640
|
const url = `${this.url}/v1/delegator/info`;
|
|
1641
|
-
const response = await
|
|
1641
|
+
const response = await chunk57636V35_cjs.rateGate.runHttp(url, () => chunk57636V35_cjs.baseFetch(url));
|
|
1642
1642
|
if (!response.ok) {
|
|
1643
1643
|
const errorText2 = await response.text();
|
|
1644
1644
|
throw new Error(`Failed to get delegate info: ${errorText2}`);
|
|
@@ -1663,7 +1663,7 @@ var ESPLORA_URL = {
|
|
|
1663
1663
|
regtest: "http://localhost:3000/api"
|
|
1664
1664
|
};
|
|
1665
1665
|
var EsploraProvider = class {
|
|
1666
|
-
constructor(baseUrl = ESPLORA_URL[
|
|
1666
|
+
constructor(baseUrl = ESPLORA_URL[chunk57636V35_cjs.DEFAULT_NETWORK_NAME], opts) {
|
|
1667
1667
|
this.baseUrl = baseUrl;
|
|
1668
1668
|
this.pollingInterval = opts?.pollingInterval ?? 15e3;
|
|
1669
1669
|
this.forcePolling = opts?.forcePolling ?? false;
|
|
@@ -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 chunk57636V35_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 chunk57636V35_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 chunk57636V35_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 chunk57636V35_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 chunk57636V35_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 chunk57636V35_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 chunk57636V35_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 chunk57636V35_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,10 @@ var EsploraProvider = class {
|
|
|
2038
2038
|
return { subscribers, teardown, started };
|
|
2039
2039
|
}
|
|
2040
2040
|
async getChainTip() {
|
|
2041
|
-
|
|
2041
|
+
let tipBlocks = await chunk57636V35_cjs.baseFetch(`${this.baseUrl}/blocks`);
|
|
2042
|
+
if (tipBlocks.status === 404) {
|
|
2043
|
+
tipBlocks = await chunk57636V35_cjs.baseFetch(`${this.baseUrl}/v1/blocks`);
|
|
2044
|
+
}
|
|
2042
2045
|
if (!tipBlocks.ok) {
|
|
2043
2046
|
throw new Error(`Failed to get chain tip: ${tipBlocks.statusText}`);
|
|
2044
2047
|
}
|
|
@@ -2059,7 +2062,7 @@ var EsploraProvider = class {
|
|
|
2059
2062
|
};
|
|
2060
2063
|
}
|
|
2061
2064
|
async broadcastPackage(parent, child) {
|
|
2062
|
-
const response = await
|
|
2065
|
+
const response = await chunk57636V35_cjs.baseFetch(`${this.baseUrl}/txs/package`, {
|
|
2063
2066
|
method: "POST",
|
|
2064
2067
|
headers: {
|
|
2065
2068
|
"Content-Type": "application/json"
|
|
@@ -2075,7 +2078,7 @@ var EsploraProvider = class {
|
|
|
2075
2078
|
return result;
|
|
2076
2079
|
}
|
|
2077
2080
|
async broadcastTx(tx) {
|
|
2078
|
-
const response = await
|
|
2081
|
+
const response = await chunk57636V35_cjs.baseFetch(`${this.baseUrl}/tx`, {
|
|
2079
2082
|
method: "POST",
|
|
2080
2083
|
headers: {
|
|
2081
2084
|
"Content-Type": "text/plain"
|
|
@@ -2258,7 +2261,7 @@ function findP2AOutput(tx) {
|
|
|
2258
2261
|
var CHILD_DUST_AMOUNT = 546;
|
|
2259
2262
|
function buildAnchorChild(params) {
|
|
2260
2263
|
const { parent, feeRate, fundingCoins, changeAddress, tapInternalKey, network } = params;
|
|
2261
|
-
const child = new
|
|
2264
|
+
const child = new chunk57636V35_cjs.Transaction({ version: 3, allowLegacyWitnessUtxo: true });
|
|
2262
2265
|
child.addInput(findP2AOutput(parent));
|
|
2263
2266
|
const estimator = TxWeightEstimator.create().addP2AInput();
|
|
2264
2267
|
for (const _ of fundingCoins) {
|
|
@@ -2306,7 +2309,7 @@ function buildForfeitTx(inputs, forfeitPkScript, txLocktime) {
|
|
|
2306
2309
|
);
|
|
2307
2310
|
}
|
|
2308
2311
|
function buildForfeitTxWithOutput(inputs, output, txLocktime) {
|
|
2309
|
-
const tx = new
|
|
2312
|
+
const tx = new chunk57636V35_cjs.Transaction({
|
|
2310
2313
|
version: 3,
|
|
2311
2314
|
lockTime: txLocktime
|
|
2312
2315
|
});
|
|
@@ -2382,7 +2385,7 @@ function validateVtxoTxGraph(graph, roundTransaction, sweepTapTreeRoot) {
|
|
|
2382
2385
|
if (previousScriptKey.length !== 32) {
|
|
2383
2386
|
throw new Error(`parent output ${childIndex} has invalid script`);
|
|
2384
2387
|
}
|
|
2385
|
-
const cosigners =
|
|
2388
|
+
const cosigners = chunk57636V35_cjs.getArkPsbtFields(child.root, 0, chunk57636V35_cjs.CosignerPublicKey);
|
|
2386
2389
|
if (cosigners.length === 0) {
|
|
2387
2390
|
throw ErrMissingCosignersPublicKeys;
|
|
2388
2391
|
}
|
|
@@ -2440,7 +2443,7 @@ var EmulatorPacket = class _EmulatorPacket {
|
|
|
2440
2443
|
return new _EmulatorPacket(entries);
|
|
2441
2444
|
}
|
|
2442
2445
|
static fromBytes(data) {
|
|
2443
|
-
const reader = new
|
|
2446
|
+
const reader = new chunk3KW4TWP2_cjs.BufferReader(data);
|
|
2444
2447
|
const entryCount = reader.readCompactSize();
|
|
2445
2448
|
const entries = [];
|
|
2446
2449
|
for (let i = 0; i < entryCount; i++) {
|
|
@@ -2458,7 +2461,7 @@ var EmulatorPacket = class _EmulatorPacket {
|
|
|
2458
2461
|
return _EmulatorPacket.PACKET_TYPE;
|
|
2459
2462
|
}
|
|
2460
2463
|
serialize() {
|
|
2461
|
-
const writer = new
|
|
2464
|
+
const writer = new chunk3KW4TWP2_cjs.BufferWriter();
|
|
2462
2465
|
writer.writeCompactSize(this.entries.length);
|
|
2463
2466
|
for (const entry of this.entries) {
|
|
2464
2467
|
writer.writeUint16LE(entry.vin);
|
|
@@ -2545,7 +2548,7 @@ var Extension = class _Extension {
|
|
|
2545
2548
|
`expected magic prefix ${base.hex.encode(ARKADE_MAGIC)}, got ${base.hex.encode(payload.slice(0, Math.min(payload.length, ARKADE_MAGIC.length)))}`
|
|
2546
2549
|
);
|
|
2547
2550
|
}
|
|
2548
|
-
const reader = new
|
|
2551
|
+
const reader = new chunk3KW4TWP2_cjs.BufferReader(payload.slice(ARKADE_MAGIC.length));
|
|
2549
2552
|
const packets = [];
|
|
2550
2553
|
while (reader.remaining() > 0) {
|
|
2551
2554
|
const packetType = reader.readByte();
|
|
@@ -2619,7 +2622,7 @@ var Extension = class _Extension {
|
|
|
2619
2622
|
*/
|
|
2620
2623
|
getAssetPacket() {
|
|
2621
2624
|
for (const p of this.packets) {
|
|
2622
|
-
if (p instanceof
|
|
2625
|
+
if (p instanceof chunk3KW4TWP2_cjs.Packet) {
|
|
2623
2626
|
return p;
|
|
2624
2627
|
}
|
|
2625
2628
|
}
|
|
@@ -2657,8 +2660,8 @@ var Extension = class _Extension {
|
|
|
2657
2660
|
};
|
|
2658
2661
|
function parsePacket(packetType, data) {
|
|
2659
2662
|
switch (packetType) {
|
|
2660
|
-
case
|
|
2661
|
-
return
|
|
2663
|
+
case chunk3KW4TWP2_cjs.Packet.PACKET_TYPE:
|
|
2664
|
+
return chunk3KW4TWP2_cjs.Packet.fromBytes(data);
|
|
2662
2665
|
case EmulatorPacket.PACKET_TYPE:
|
|
2663
2666
|
return EmulatorPacket.fromBytes(data);
|
|
2664
2667
|
default:
|
|
@@ -2705,16 +2708,16 @@ function buildOpReturnScript(data) {
|
|
|
2705
2708
|
}
|
|
2706
2709
|
return script;
|
|
2707
2710
|
}
|
|
2708
|
-
var ErrOffchainOutputNotFound = (address) => new
|
|
2709
|
-
var ErrInvalidAssetOutputAmount = (got, want, assetId) => new
|
|
2711
|
+
var ErrOffchainOutputNotFound = (address) => new chunk57636V35_cjs.ServerResponseMismatchError(`offchain send output not found: ${address}`);
|
|
2712
|
+
var ErrInvalidAssetOutputAmount = (got, want, assetId) => new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
2710
2713
|
`invalid asset output amount for ${assetId}: got ${got}, want ${want}`
|
|
2711
2714
|
);
|
|
2712
|
-
var ErrAssetGroupNotFound = (assetId) => new
|
|
2713
|
-
var ErrAssetOutputNotFound = (assetId, outputIndex) => new
|
|
2715
|
+
var ErrAssetGroupNotFound = (assetId) => new chunk57636V35_cjs.ServerResponseMismatchError(`asset group not found in batch leaf: ${assetId}`);
|
|
2716
|
+
var ErrAssetOutputNotFound = (assetId, outputIndex) => new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
2714
2717
|
`asset output not found in asset group ${assetId} at index ${outputIndex}`
|
|
2715
2718
|
);
|
|
2716
|
-
var ErrOnchainOutputNotFound = (address) => new
|
|
2717
|
-
var ErrUnvalidatedOffchainOutput = (address) => new
|
|
2719
|
+
var ErrOnchainOutputNotFound = (address) => new chunk57636V35_cjs.ServerResponseMismatchError(`onchain output not found: ${address}`);
|
|
2720
|
+
var ErrUnvalidatedOffchainOutput = (address) => new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
2718
2721
|
`offchain output ${address} cannot be validated: virtual output tree signing did not run`
|
|
2719
2722
|
);
|
|
2720
2723
|
var ErrInvalidOnchainOutputAmount = (address) => new Error(`invalid onchain output amount: ${address}`);
|
|
@@ -2723,7 +2726,7 @@ var ErrInvalidOffchainOutputAmount = (address) => new Error(`invalid offchain ou
|
|
|
2723
2726
|
function assertFinalCommitmentMatchesValidated(finalCommitmentTx, validatedCommitmentTxid, context) {
|
|
2724
2727
|
if (!validatedCommitmentTxid) return;
|
|
2725
2728
|
if (finalCommitmentTx.id === validatedCommitmentTxid) return;
|
|
2726
|
-
throw new
|
|
2729
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
2727
2730
|
`${context}: finalization commitment tx ${finalCommitmentTx.id} differs from the validated commitment tx ${validatedCommitmentTxid}`
|
|
2728
2731
|
);
|
|
2729
2732
|
}
|
|
@@ -2733,7 +2736,7 @@ function validateBatchRecipients(commitmentTx, vtxoTreeLeaves, recipients, netwo
|
|
|
2733
2736
|
for (const recipient of recipients) {
|
|
2734
2737
|
let arkAddress;
|
|
2735
2738
|
try {
|
|
2736
|
-
arkAddress =
|
|
2739
|
+
arkAddress = chunk57636V35_cjs.ArkAddress.decode(recipient.address);
|
|
2737
2740
|
} catch {
|
|
2738
2741
|
validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
|
|
2739
2742
|
continue;
|
|
@@ -2745,7 +2748,7 @@ function validateBatchRecipientsWithoutTree(commitmentTx, recipients, network) {
|
|
|
2745
2748
|
const usedOnchainOutputs = /* @__PURE__ */ new Set();
|
|
2746
2749
|
for (const recipient of recipients) {
|
|
2747
2750
|
try {
|
|
2748
|
-
|
|
2751
|
+
chunk57636V35_cjs.ArkAddress.decode(recipient.address);
|
|
2749
2752
|
} catch {
|
|
2750
2753
|
validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
|
|
2751
2754
|
continue;
|
|
@@ -2978,7 +2981,7 @@ function assetMintResolver() {
|
|
|
2978
2981
|
if (!tx.assets?.length || !tx.key.arkTxid) return void 0;
|
|
2979
2982
|
const minted = tx.assets.filter((a) => {
|
|
2980
2983
|
try {
|
|
2981
|
-
return base.hex.encode(
|
|
2984
|
+
return base.hex.encode(chunk3KW4TWP2_cjs.AssetId.fromString(a.assetId).txid) === tx.key.arkTxid;
|
|
2982
2985
|
} catch {
|
|
2983
2986
|
return false;
|
|
2984
2987
|
}
|
|
@@ -3021,7 +3024,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
3021
3024
|
const existing = inputsByAssetId.get(asset.assetId);
|
|
3022
3025
|
inputsByAssetId.set(asset.assetId, [
|
|
3023
3026
|
...existing ?? [],
|
|
3024
|
-
|
|
3027
|
+
chunk3KW4TWP2_cjs.AssetInput.create(inputIndex, asset.amount)
|
|
3025
3028
|
]);
|
|
3026
3029
|
}
|
|
3027
3030
|
}
|
|
@@ -3033,7 +3036,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
3033
3036
|
const existing = outputsByAssetId.get(asset.assetId);
|
|
3034
3037
|
outputsByAssetId.set(asset.assetId, [
|
|
3035
3038
|
...existing ?? [],
|
|
3036
|
-
|
|
3039
|
+
chunk3KW4TWP2_cjs.AssetOutput.create(outputIndex, asset.amount)
|
|
3037
3040
|
]);
|
|
3038
3041
|
}
|
|
3039
3042
|
}
|
|
@@ -3044,7 +3047,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
3044
3047
|
const existing = outputsByAssetId.get(asset.assetId);
|
|
3045
3048
|
outputsByAssetId.set(asset.assetId, [
|
|
3046
3049
|
...existing ?? [],
|
|
3047
|
-
|
|
3050
|
+
chunk3KW4TWP2_cjs.AssetOutput.create(outputIndex, asset.amount)
|
|
3048
3051
|
]);
|
|
3049
3052
|
}
|
|
3050
3053
|
}
|
|
@@ -3053,11 +3056,11 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
3053
3056
|
for (const assetIdStr of allAssetIds) {
|
|
3054
3057
|
const inputs = inputsByAssetId.get(assetIdStr);
|
|
3055
3058
|
const outputs = outputsByAssetId.get(assetIdStr);
|
|
3056
|
-
const assetId =
|
|
3057
|
-
const group =
|
|
3059
|
+
const assetId = chunk3KW4TWP2_cjs.AssetId.fromString(assetIdStr);
|
|
3060
|
+
const group = chunk3KW4TWP2_cjs.AssetGroup.create(assetId, null, inputs ?? [], outputs ?? [], []);
|
|
3058
3061
|
groups.push(group);
|
|
3059
3062
|
}
|
|
3060
|
-
return
|
|
3063
|
+
return chunk3KW4TWP2_cjs.Packet.create(groups);
|
|
3061
3064
|
}
|
|
3062
3065
|
function selectCoinsWithAsset(coins, assetId, requiredAmount) {
|
|
3063
3066
|
const coinsWithAsset = coins.filter((coin) => coin.assets?.some((a) => a.assetId === assetId));
|
|
@@ -3094,7 +3097,7 @@ function selectedCoinsToAssetInputs(selectedCoins) {
|
|
|
3094
3097
|
}
|
|
3095
3098
|
function toXOnlySignerHex(pubkeyHex) {
|
|
3096
3099
|
const bytes = base.hex.decode(pubkeyHex);
|
|
3097
|
-
if (bytes.length === 32 || bytes.length === 33) return base.hex.encode(
|
|
3100
|
+
if (bytes.length === 32 || bytes.length === 33) return base.hex.encode(chunk3OKEUDHU_cjs.toXOnly(bytes, "signer key"));
|
|
3098
3101
|
throw new Error(`invalid signer pubkey length: expected 32 or 33 bytes, got ${bytes.length}`);
|
|
3099
3102
|
}
|
|
3100
3103
|
function signerSetFromInfo(info) {
|
|
@@ -3141,13 +3144,13 @@ var toTimelock = (value) => ({
|
|
|
3141
3144
|
var toSeconds = (t) => t.type === "seconds" ? t.value : t.value * NOMINAL_BLOCK_SECONDS;
|
|
3142
3145
|
function assertTimelockInPolicy(timelock, policy, label, overrideOption) {
|
|
3143
3146
|
if (policy.requireSeconds && timelock.type === "blocks") {
|
|
3144
|
-
throw new
|
|
3147
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
3145
3148
|
`${label} rejected: block-typed timelocks are not accepted (got ${timelock.value})`
|
|
3146
3149
|
);
|
|
3147
3150
|
}
|
|
3148
3151
|
const seconds = toSeconds(timelock);
|
|
3149
3152
|
if (seconds < policy.minSeconds) {
|
|
3150
|
-
throw new
|
|
3153
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
3151
3154
|
`${label} rejected: ${timelock.value} ${timelock.type} is below the ${policy.minSeconds}s floor; pass ${overrideOption}: ${seconds}n to Wallet.create to lower it`
|
|
3152
3155
|
);
|
|
3153
3156
|
}
|
|
@@ -3168,7 +3171,7 @@ function resolveBatchExpiryPolicy(network, overrides) {
|
|
|
3168
3171
|
}
|
|
3169
3172
|
function assertValidBatchExpiry(batchExpiry, policy) {
|
|
3170
3173
|
if (policy.advertisedVtxoTreeExpiry !== void 0 && batchExpiry !== policy.advertisedVtxoTreeExpiry) {
|
|
3171
|
-
throw new
|
|
3174
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
3172
3175
|
`batch expiry rejected: ${batchExpiry} does not match the advertised vtxoTreeExpiry ${policy.advertisedVtxoTreeExpiry}`
|
|
3173
3176
|
);
|
|
3174
3177
|
}
|
|
@@ -3198,21 +3201,21 @@ function resolveCheckpointExitDelayPolicy(network, overrides) {
|
|
|
3198
3201
|
function assertValidServerUnrollScript(checkpointTapscript, policy) {
|
|
3199
3202
|
let script;
|
|
3200
3203
|
try {
|
|
3201
|
-
script =
|
|
3204
|
+
script = chunk57636V35_cjs.CSVMultisigTapscript.decode(base.hex.decode(checkpointTapscript));
|
|
3202
3205
|
} catch (e) {
|
|
3203
|
-
throw new
|
|
3206
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
3204
3207
|
`checkpoint exit delay rejected: invalid checkpointTapscript from server (${e instanceof Error ? e.message : String(e)})`
|
|
3205
3208
|
);
|
|
3206
3209
|
}
|
|
3207
3210
|
if (policy.advertisedForfeitPubkey !== void 0) {
|
|
3208
3211
|
const { pubkeys } = script.params;
|
|
3209
3212
|
if (pubkeys.length !== 1) {
|
|
3210
|
-
throw new
|
|
3213
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
3211
3214
|
`checkpoint exit delay rejected: checkpointTapscript must commit to exactly one pubkey, got ${pubkeys.length} [${pubkeys.map(base.hex.encode).join(", ")}]`
|
|
3212
3215
|
);
|
|
3213
3216
|
}
|
|
3214
3217
|
if (!utils_js.equalBytes(pubkeys[0], policy.advertisedForfeitPubkey)) {
|
|
3215
|
-
throw new
|
|
3218
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
3216
3219
|
`checkpoint exit delay rejected: checkpointTapscript pubkey ${base.hex.encode(pubkeys[0])} does not match the advertised forfeitPubkey ${base.hex.encode(policy.advertisedForfeitPubkey)}`
|
|
3217
3220
|
);
|
|
3218
3221
|
}
|
|
@@ -3256,8 +3259,8 @@ function buildOffchainTx(inputs, outputs, serverUnrollScript) {
|
|
|
3256
3259
|
function buildVirtualTx(inputs, outputs) {
|
|
3257
3260
|
let lockTime = 0n;
|
|
3258
3261
|
for (const input of inputs) {
|
|
3259
|
-
const tapscript =
|
|
3260
|
-
if (
|
|
3262
|
+
const tapscript = chunk57636V35_cjs.decodeTapscript(chunk57636V35_cjs.scriptFromTapLeafScript(input.tapLeafScript));
|
|
3263
|
+
if (chunk57636V35_cjs.CLTVMultisigTapscript.is(tapscript)) {
|
|
3261
3264
|
if (lockTime !== 0n) {
|
|
3262
3265
|
if (isSeconds(lockTime) !== isSeconds(tapscript.params.absoluteTimelock)) {
|
|
3263
3266
|
throw new Error("cannot mix seconds and blocks locktime");
|
|
@@ -3268,7 +3271,7 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
3268
3271
|
}
|
|
3269
3272
|
}
|
|
3270
3273
|
}
|
|
3271
|
-
const tx = new
|
|
3274
|
+
const tx = new chunk57636V35_cjs.Transaction({
|
|
3272
3275
|
version: 3,
|
|
3273
3276
|
lockTime: Number(lockTime)
|
|
3274
3277
|
});
|
|
@@ -3278,12 +3281,12 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
3278
3281
|
index: input.vout,
|
|
3279
3282
|
sequence: lockTime ? btcSigner.DEFAULT_SEQUENCE - 1 : void 0,
|
|
3280
3283
|
witnessUtxo: {
|
|
3281
|
-
script:
|
|
3284
|
+
script: chunk57636V35_cjs.VtxoScript.decode(input.tapTree).pkScript,
|
|
3282
3285
|
amount: BigInt(input.value)
|
|
3283
3286
|
},
|
|
3284
3287
|
tapLeafScript: [input.tapLeafScript]
|
|
3285
3288
|
});
|
|
3286
|
-
|
|
3289
|
+
chunk57636V35_cjs.setArkPsbtField(tx, i, chunk57636V35_cjs.VtxoTaprootTree, input.tapTree);
|
|
3287
3290
|
}
|
|
3288
3291
|
for (const output of outputs) {
|
|
3289
3292
|
tx.addOutput(output);
|
|
@@ -3292,8 +3295,8 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
3292
3295
|
return tx;
|
|
3293
3296
|
}
|
|
3294
3297
|
function buildCheckpointTx(vtxo, serverUnrollScript) {
|
|
3295
|
-
const collaborativeClosure =
|
|
3296
|
-
const checkpointVtxoScript = new
|
|
3298
|
+
const collaborativeClosure = chunk57636V35_cjs.decodeTapscript(chunk57636V35_cjs.scriptFromTapLeafScript(vtxo.tapLeafScript));
|
|
3299
|
+
const checkpointVtxoScript = new chunk57636V35_cjs.VtxoScript([
|
|
3297
3300
|
serverUnrollScript.script,
|
|
3298
3301
|
collaborativeClosure.script
|
|
3299
3302
|
]);
|
|
@@ -3369,7 +3372,7 @@ function verifyTapscriptSignatures(tx, inputIndex, requiredSigners, excludePubke
|
|
|
3369
3372
|
const sighashType = signature.length === 65 ? signature[64] : btcSigner.SigHash.DEFAULT;
|
|
3370
3373
|
const sig = signature.subarray(0, 64);
|
|
3371
3374
|
if (!allowedSighashTypes.includes(sighashType)) {
|
|
3372
|
-
const sighashName =
|
|
3375
|
+
const sighashName = chunk57636V35_cjs.formatSighash(sighashType);
|
|
3373
3376
|
throw new Error(
|
|
3374
3377
|
`Unallowed sighash type ${sighashName} for input ${inputIndex}, pubkey ${pubKeyHex}.`
|
|
3375
3378
|
);
|
|
@@ -3443,7 +3446,7 @@ function combineTapscriptSigs(signedTx, originalTx) {
|
|
|
3443
3446
|
}
|
|
3444
3447
|
function isValidArkAddress(address) {
|
|
3445
3448
|
try {
|
|
3446
|
-
|
|
3449
|
+
chunk57636V35_cjs.ArkAddress.decode(address);
|
|
3447
3450
|
return true;
|
|
3448
3451
|
} catch (e) {
|
|
3449
3452
|
return false;
|
|
@@ -3451,16 +3454,16 @@ function isValidArkAddress(address) {
|
|
|
3451
3454
|
}
|
|
3452
3455
|
function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, context) {
|
|
3453
3456
|
if (serverCheckpointTxs.length !== expectedCheckpoints.length) {
|
|
3454
|
-
throw new
|
|
3457
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
3455
3458
|
`${context} returned ${serverCheckpointTxs.length} checkpoints, expected ${expectedCheckpoints.length}`
|
|
3456
3459
|
);
|
|
3457
3460
|
}
|
|
3458
3461
|
const byTxid = new Map(expectedCheckpoints.map((c) => [c.id, c]));
|
|
3459
3462
|
return serverCheckpointTxs.map((encoded, index) => {
|
|
3460
|
-
const server =
|
|
3463
|
+
const server = chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
|
|
3461
3464
|
const local = byTxid.get(server.id);
|
|
3462
3465
|
if (!local) {
|
|
3463
|
-
throw new
|
|
3466
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
3464
3467
|
`${context} checkpoint ${index} txid ${server.id} does not match any submitted checkpoint`
|
|
3465
3468
|
);
|
|
3466
3469
|
}
|
|
@@ -3470,14 +3473,14 @@ function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, contex
|
|
|
3470
3473
|
}
|
|
3471
3474
|
function assertSubmittedArkTxid(response, signedArkTx, context) {
|
|
3472
3475
|
if (response.arkTxid !== signedArkTx.id) {
|
|
3473
|
-
throw new
|
|
3476
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
3474
3477
|
`${context} returned ark txid ${response.arkTxid}, expected ${signedArkTx.id}`
|
|
3475
3478
|
);
|
|
3476
3479
|
}
|
|
3477
3480
|
if (response.finalArkTx === void 0) return;
|
|
3478
|
-
const finalTxid =
|
|
3481
|
+
const finalTxid = chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx)).id;
|
|
3479
3482
|
if (finalTxid !== signedArkTx.id) {
|
|
3480
|
-
throw new
|
|
3483
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
3481
3484
|
`${context} returned final ark tx ${finalTxid}, expected ${signedArkTx.id}`
|
|
3482
3485
|
);
|
|
3483
3486
|
}
|
|
@@ -3496,10 +3499,10 @@ function assertServerSignedLeaf(serverTx, localTx, inputIndex, serverPubkeyHex,
|
|
|
3496
3499
|
[serverPubkeyHex],
|
|
3497
3500
|
void 0,
|
|
3498
3501
|
void 0,
|
|
3499
|
-
payment_js.tapLeafHash(
|
|
3502
|
+
payment_js.tapLeafHash(chunk57636V35_cjs.scriptFromTapLeafScript(leaf))
|
|
3500
3503
|
);
|
|
3501
3504
|
} catch (error) {
|
|
3502
|
-
throw new
|
|
3505
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
3503
3506
|
`${context}: input ${inputIndex} is not signed by the server on the leaf being spent (${error instanceof Error ? error.message : String(error)})`
|
|
3504
3507
|
);
|
|
3505
3508
|
}
|
|
@@ -3508,20 +3511,20 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
|
|
|
3508
3511
|
const byOutpoint = new Map(inputs.map((input) => [`${input.txid}:${input.vout}`, input]));
|
|
3509
3512
|
for (const [index, checkpoint] of checkpoints.entries()) {
|
|
3510
3513
|
if (checkpoint.inputsLength !== 1) {
|
|
3511
|
-
throw new
|
|
3514
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
3512
3515
|
`${context}: checkpoint ${index} spends ${checkpoint.inputsLength} inputs, expected 1`
|
|
3513
3516
|
);
|
|
3514
3517
|
}
|
|
3515
3518
|
const spent = checkpoint.getInput(0);
|
|
3516
3519
|
if (!spent.txid || spent.index === void 0) {
|
|
3517
|
-
throw new
|
|
3520
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
3518
3521
|
`${context}: checkpoint ${index} has no input outpoint`
|
|
3519
3522
|
);
|
|
3520
3523
|
}
|
|
3521
3524
|
const outpoint = `${base.hex.encode(spent.txid)}:${spent.index}`;
|
|
3522
3525
|
const input = byOutpoint.get(outpoint);
|
|
3523
3526
|
if (!input) {
|
|
3524
|
-
throw new
|
|
3527
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
3525
3528
|
`${context}: checkpoint ${index} spends ${outpoint}, which is not one of the requested virtual outputs`
|
|
3526
3529
|
);
|
|
3527
3530
|
}
|
|
@@ -3529,7 +3532,7 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
|
|
|
3529
3532
|
(unroll) => buildCheckpointTx(input, unroll).tx.id === checkpoint.id
|
|
3530
3533
|
);
|
|
3531
3534
|
if (!rebuilt) {
|
|
3532
|
-
throw new
|
|
3535
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
3533
3536
|
`${context}: checkpoint ${index} txid ${checkpoint.id} differs from the checkpoint built locally for ${outpoint}`
|
|
3534
3537
|
);
|
|
3535
3538
|
}
|
|
@@ -3555,9 +3558,9 @@ async function submitOffchainTx(provider, offchainTx, signer, hooks, options) {
|
|
|
3555
3558
|
const matched = matchServerCheckpoints(signedCheckpointTxs, offchainTx.checkpoints, "submitTx");
|
|
3556
3559
|
matched.forEach(({ server }, index) => {
|
|
3557
3560
|
try {
|
|
3558
|
-
|
|
3561
|
+
chunk57636V35_cjs.assertAllowedSighashTypes(server);
|
|
3559
3562
|
} catch (error) {
|
|
3560
|
-
throw new
|
|
3563
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
3561
3564
|
`submitTx checkpoint ${index}: ${error instanceof Error ? error.message : String(error)}`
|
|
3562
3565
|
);
|
|
3563
3566
|
}
|
|
@@ -3565,12 +3568,12 @@ async function submitOffchainTx(provider, offchainTx, signer, hooks, options) {
|
|
|
3565
3568
|
const verify = options?.verifyServerSignatures;
|
|
3566
3569
|
if (verify) {
|
|
3567
3570
|
if (response.finalArkTx === void 0) {
|
|
3568
|
-
throw new
|
|
3571
|
+
throw new chunk57636V35_cjs.ServerResponseMismatchError(
|
|
3569
3572
|
"submitTx: server returned no final ark tx to verify its signatures against"
|
|
3570
3573
|
);
|
|
3571
3574
|
}
|
|
3572
|
-
const finalArkTx =
|
|
3573
|
-
const serverPubkeyHex = base.hex.encode(
|
|
3575
|
+
const finalArkTx = chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx));
|
|
3576
|
+
const serverPubkeyHex = base.hex.encode(chunk3OKEUDHU_cjs.toXOnly(verify.serverPubkey, "server key"));
|
|
3574
3577
|
for (let i = 0; i < offchainTx.arkTx.inputsLength; i++) {
|
|
3575
3578
|
assertServerSignedLeaf(
|
|
3576
3579
|
finalArkTx,
|
|
@@ -3626,12 +3629,12 @@ function claimWithPreimageIdentity(identity, preimage) {
|
|
|
3626
3629
|
return {
|
|
3627
3630
|
...identity,
|
|
3628
3631
|
sign: async (tx, inputIndexes) => {
|
|
3629
|
-
const signed =
|
|
3632
|
+
const signed = chunk57636V35_cjs.Transaction.fromPSBT(
|
|
3630
3633
|
(await identity.sign(tx.clone(), inputIndexes)).toPSBT()
|
|
3631
3634
|
);
|
|
3632
3635
|
const indexes = inputIndexes ?? Array.from({ length: signed.inputsLength }, (_, i) => i);
|
|
3633
3636
|
for (const index of indexes) {
|
|
3634
|
-
|
|
3637
|
+
chunk57636V35_cjs.setArkPsbtField(signed, index, chunk57636V35_cjs.ConditionWitness, [preimage]);
|
|
3635
3638
|
}
|
|
3636
3639
|
return signed;
|
|
3637
3640
|
}
|
|
@@ -3823,7 +3826,7 @@ function extendCoinWithTapscript(boardingTapscript, utxo) {
|
|
|
3823
3826
|
};
|
|
3824
3827
|
}
|
|
3825
3828
|
function deriveContractTapscripts(contract) {
|
|
3826
|
-
const handler =
|
|
3829
|
+
const handler = chunk3OKEUDHU_cjs.contractHandlers.get(contract.type);
|
|
3827
3830
|
if (!handler) {
|
|
3828
3831
|
throw new Error(`No handler for contract type '${contract.type}'`);
|
|
3829
3832
|
}
|
|
@@ -3894,7 +3897,7 @@ function getRandomId() {
|
|
|
3894
3897
|
}
|
|
3895
3898
|
function isValidArkAddress2(address) {
|
|
3896
3899
|
try {
|
|
3897
|
-
|
|
3900
|
+
chunk57636V35_cjs.ArkAddress.decode(address);
|
|
3898
3901
|
return true;
|
|
3899
3902
|
} catch (e) {
|
|
3900
3903
|
return false;
|
|
@@ -3922,7 +3925,7 @@ function assertRecipientArkAddress(encoded, address, context) {
|
|
|
3922
3925
|
function assertTapTreeDerivesAddress(encoded, tapTree, address) {
|
|
3923
3926
|
let derived;
|
|
3924
3927
|
try {
|
|
3925
|
-
derived =
|
|
3928
|
+
derived = chunk57636V35_cjs.VtxoScript.decode(tapTree).pkScript;
|
|
3926
3929
|
} catch (e) {
|
|
3927
3930
|
throw new Error(
|
|
3928
3931
|
`Invalid tapTree for ${encoded}: ${e instanceof Error ? e.message : String(e)}`
|
|
@@ -3939,7 +3942,7 @@ function validateRecipients(recipients, dustAmount, context) {
|
|
|
3939
3942
|
for (const recipient of recipients) {
|
|
3940
3943
|
let address;
|
|
3941
3944
|
try {
|
|
3942
|
-
address =
|
|
3945
|
+
address = chunk57636V35_cjs.ArkAddress.decode(recipient.address);
|
|
3943
3946
|
} catch (e) {
|
|
3944
3947
|
throw new Error(`Invalid Arkade address: ${recipient.address}`);
|
|
3945
3948
|
}
|
|
@@ -3964,7 +3967,7 @@ function validateRecipients(recipients, dustAmount, context) {
|
|
|
3964
3967
|
|
|
3965
3968
|
// src/contracts/spendability.ts
|
|
3966
3969
|
function isContractGenericallySpendable(contract) {
|
|
3967
|
-
return
|
|
3970
|
+
return chunk3OKEUDHU_cjs.contractHandlers.get(contract.type)?.isGenericallySpendable?.(contract) === true;
|
|
3968
3971
|
}
|
|
3969
3972
|
function gatedContracts(contracts) {
|
|
3970
3973
|
const gated = /* @__PURE__ */ new Map();
|
|
@@ -3977,7 +3980,7 @@ function gateExclusion(gated) {
|
|
|
3977
3980
|
return (vtxo) => {
|
|
3978
3981
|
const type = vtxo.script === void 0 ? void 0 : gated.get(vtxo.script);
|
|
3979
3982
|
if (type === void 0) return void 0;
|
|
3980
|
-
if (!
|
|
3983
|
+
if (!chunk3OKEUDHU_cjs.contractHandlers.has(type)) {
|
|
3981
3984
|
return `at ${vtxo.script} (contract type '${type}') has no handler registered in this build`;
|
|
3982
3985
|
}
|
|
3983
3986
|
return `at ${vtxo.script} (contract type '${type}') is not generically spendable`;
|
|
@@ -4013,7 +4016,7 @@ function selectPendingRecoveryOutpoints(contractsWithVtxos, signerSet, nowSecond
|
|
|
4013
4016
|
continue;
|
|
4014
4017
|
}
|
|
4015
4018
|
for (const v of vtxos) {
|
|
4016
|
-
if (!
|
|
4019
|
+
if (!chunk57636V35_cjs.hasTerminalSpend(v) && !v.isSwept && !v.isUnrolled) {
|
|
4017
4020
|
out.add(`${v.txid}:${v.vout}`);
|
|
4018
4021
|
}
|
|
4019
4022
|
}
|
|
@@ -4048,10 +4051,10 @@ function byValueDescending(vtxos) {
|
|
|
4048
4051
|
return [...vtxos].sort((a, b) => b.value - a.value);
|
|
4049
4052
|
}
|
|
4050
4053
|
async function fetchTimeHeight(wallet) {
|
|
4051
|
-
return
|
|
4054
|
+
return chunk57636V35_cjs.resolveTimeHeight(wallet.onchainProvider);
|
|
4052
4055
|
}
|
|
4053
4056
|
function canMigrateBySend(vtxo, now) {
|
|
4054
|
-
if (!
|
|
4057
|
+
if (!chunk57636V35_cjs.canSpendOffchain(vtxo, now)) return false;
|
|
4055
4058
|
return vtxo.expiresAt !== void 0 || vtxo.expiresAtHeight !== void 0;
|
|
4056
4059
|
}
|
|
4057
4060
|
function byExpiryAscending(vtxos, now) {
|
|
@@ -4059,7 +4062,7 @@ function byExpiryAscending(vtxos, now) {
|
|
|
4059
4062
|
if (vtxo.isSwept) return -Infinity;
|
|
4060
4063
|
if (vtxo.expiresAt !== void 0) return vtxo.expiresAt.getTime();
|
|
4061
4064
|
if (vtxo.expiresAtHeight !== void 0) {
|
|
4062
|
-
return
|
|
4065
|
+
return chunk57636V35_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
|
|
4063
4066
|
}
|
|
4064
4067
|
return Infinity;
|
|
4065
4068
|
};
|
|
@@ -4086,7 +4089,7 @@ function priceSettlementInputs(vtxos, estimator) {
|
|
|
4086
4089
|
const payable = [];
|
|
4087
4090
|
const net = /* @__PURE__ */ new Map();
|
|
4088
4091
|
for (const vtxo of vtxos) {
|
|
4089
|
-
const inputFee = estimator.evalOffchainInput(
|
|
4092
|
+
const inputFee = estimator.evalOffchainInput(chunk57636V35_cjs.toOffchainInputFeeParams(vtxo));
|
|
4090
4093
|
if (inputFee.satoshis >= vtxo.value) {
|
|
4091
4094
|
continue;
|
|
4092
4095
|
}
|
|
@@ -4112,7 +4115,7 @@ function deductOffchainOutputFee(subtotal, estimator, arkAddress) {
|
|
|
4112
4115
|
}
|
|
4113
4116
|
const outputFee = estimator.evalOffchainOutput({
|
|
4114
4117
|
amount: subtotal,
|
|
4115
|
-
script: base.hex.encode(
|
|
4118
|
+
script: base.hex.encode(chunk57636V35_cjs.ArkAddress.decode(arkAddress).pkScript)
|
|
4116
4119
|
});
|
|
4117
4120
|
return subtotal - BigInt(outputFee.satoshis);
|
|
4118
4121
|
}
|
|
@@ -4130,10 +4133,10 @@ var DEFAULT_SETTLEMENT_CONFIG = {
|
|
|
4130
4133
|
};
|
|
4131
4134
|
function getRecoverableVtxos(vtxos, dustAmount, now) {
|
|
4132
4135
|
return vtxos.filter((vtxo) => {
|
|
4133
|
-
if (
|
|
4136
|
+
if (chunk57636V35_cjs.canRecoverOnchain(vtxo, now)) {
|
|
4134
4137
|
return true;
|
|
4135
4138
|
}
|
|
4136
|
-
if (
|
|
4139
|
+
if (chunk57636V35_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
|
|
4137
4140
|
return true;
|
|
4138
4141
|
}
|
|
4139
4142
|
return false;
|
|
@@ -4165,7 +4168,7 @@ function getRecoverableWithSubdust(vtxos, dustAmount, now) {
|
|
|
4165
4168
|
function isVtxoExpiringSoon(vtxo, thresholdMs) {
|
|
4166
4169
|
if (vtxo.isUnrolled) return false;
|
|
4167
4170
|
const realThresholdMs = thresholdMs <= 100 ? DEFAULT_THRESHOLD_MS : thresholdMs;
|
|
4168
|
-
const expiresAt =
|
|
4171
|
+
const expiresAt = chunk57636V35_cjs.normalizeVtxo(vtxo).expiresAt;
|
|
4169
4172
|
if (expiresAt === void 0) return false;
|
|
4170
4173
|
const now = Date.now();
|
|
4171
4174
|
const batchExpiry = expiresAt.getTime();
|
|
@@ -4176,7 +4179,7 @@ function getExpiringAndRecoverableVtxos(vtxos, thresholdMs, dustAmount, now) {
|
|
|
4176
4179
|
return vtxos.filter(
|
|
4177
4180
|
// The leading exclusion covers the `isSubdust` arm too, which is a value
|
|
4178
4181
|
// property and would otherwise re-admit an exited coin on its own.
|
|
4179
|
-
(vtxo) => !vtxo.isUnrolled && (isVtxoExpiringSoon(vtxo, thresholdMs) ||
|
|
4182
|
+
(vtxo) => !vtxo.isUnrolled && (isVtxoExpiringSoon(vtxo, thresholdMs) || chunk57636V35_cjs.canRecoverOnchain(vtxo, now) || isSubdust(vtxo, dustAmount))
|
|
4180
4183
|
);
|
|
4181
4184
|
}
|
|
4182
4185
|
function isMigrationCapable(wallet) {
|
|
@@ -4775,11 +4778,11 @@ var VtxoManager = class _VtxoManager {
|
|
|
4775
4778
|
`Sweep not economical: output ${outputAmount} sats after ${fee} sats fee is below dust (${dustAmount} sats)`
|
|
4776
4779
|
);
|
|
4777
4780
|
}
|
|
4778
|
-
const tx = new
|
|
4781
|
+
const tx = new chunk57636V35_cjs.Transaction();
|
|
4779
4782
|
for (const utxo of expiredUtxos) {
|
|
4780
|
-
const utxoScript =
|
|
4783
|
+
const utxoScript = chunk57636V35_cjs.VtxoScript.decode(utxo.tapTree);
|
|
4781
4784
|
const utxoExitLeaf = utxoScript.leaves.find(
|
|
4782
|
-
(leaf) =>
|
|
4785
|
+
(leaf) => chunk57636V35_cjs.CSVMultisigTapscript.isScriptValid(chunk57636V35_cjs.scriptFromTapLeafScript(leaf)) === true
|
|
4783
4786
|
);
|
|
4784
4787
|
if (!utxoExitLeaf) {
|
|
4785
4788
|
throw new Error(
|
|
@@ -4794,7 +4797,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4794
4797
|
amount: BigInt(utxo.value)
|
|
4795
4798
|
},
|
|
4796
4799
|
tapLeafScript: [utxoExitLeaf],
|
|
4797
|
-
sequence:
|
|
4800
|
+
sequence: chunk57636V35_cjs.getSequence(utxoExitLeaf)
|
|
4798
4801
|
});
|
|
4799
4802
|
}
|
|
4800
4803
|
tx.addOutputAddress(boardingAddress, outputAmount, this.getNetwork());
|
|
@@ -5037,8 +5040,8 @@ var VtxoManager = class _VtxoManager {
|
|
|
5037
5040
|
const cls = classifyAgainstSignerSet(serverPubKey, signerSet, nowSeconds);
|
|
5038
5041
|
if (cls.status === "CURRENT") continue;
|
|
5039
5042
|
const live = vtxos.filter((v) => !v.isUnrolled);
|
|
5040
|
-
const recoverable = live.filter((v) => v.isSwept && !
|
|
5041
|
-
const spendable = live.filter((v) => !
|
|
5043
|
+
const recoverable = live.filter((v) => v.isSwept && !chunk57636V35_cjs.hasTerminalSpend(v));
|
|
5044
|
+
const spendable = live.filter((v) => !chunk57636V35_cjs.hasTerminalSpend(v) && !v.isSwept);
|
|
5042
5045
|
const value = spendable.reduce((sum, v) => sum + v.value, 0);
|
|
5043
5046
|
let recoverableCount = 0;
|
|
5044
5047
|
let recoverableValue = 0;
|
|
@@ -5051,7 +5054,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5051
5054
|
awaitingSweepCount = spendable.length;
|
|
5052
5055
|
awaitingSweepValue = value;
|
|
5053
5056
|
for (const v of spendable) {
|
|
5054
|
-
const exp =
|
|
5057
|
+
const exp = chunk57636V35_cjs.toBatchExpiry(v);
|
|
5055
5058
|
if (exp !== void 0 && (nextSweepEta === void 0 || exp < nextSweepEta)) {
|
|
5056
5059
|
nextSweepEta = exp;
|
|
5057
5060
|
}
|
|
@@ -5312,7 +5315,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5312
5315
|
/** Decodes the boarding tapscript exit path to extract the CSV timelock. */
|
|
5313
5316
|
getBoardingTimelock() {
|
|
5314
5317
|
const wallet = this.getSweepWallet();
|
|
5315
|
-
const exitScript =
|
|
5318
|
+
const exitScript = chunk57636V35_cjs.CSVMultisigTapscript.decode(
|
|
5316
5319
|
base.hex.decode(wallet.boardingTapscript.exitScript)
|
|
5317
5320
|
);
|
|
5318
5321
|
return exitScript.params.timelock;
|
|
@@ -5443,8 +5446,8 @@ var VtxoManager = class _VtxoManager {
|
|
|
5443
5446
|
* or doesn't carry the metadata.
|
|
5444
5447
|
*/
|
|
5445
5448
|
extractSpentOutpoint(error) {
|
|
5446
|
-
const ark =
|
|
5447
|
-
if (!
|
|
5449
|
+
const ark = chunk57636V35_cjs.maybeArkError(error);
|
|
5450
|
+
if (!chunk57636V35_cjs.isArkError(ark, chunk57636V35_cjs.ArkErrorName.VTXO_ALREADY_SPENT)) return void 0;
|
|
5448
5451
|
const raw = ark.metadata?.vtxo_outpoint;
|
|
5449
5452
|
if (typeof raw !== "string") return void 0;
|
|
5450
5453
|
const [txid, voutStr] = raw.split(":");
|
|
@@ -5634,7 +5637,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5634
5637
|
if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
|
|
5635
5638
|
break;
|
|
5636
5639
|
}
|
|
5637
|
-
const inputFee = estimator.evalOffchainInput(
|
|
5640
|
+
const inputFee = estimator.evalOffchainInput(chunk57636V35_cjs.toOffchainInputFeeParams(v));
|
|
5638
5641
|
if (inputFee.satoshis >= v.value) {
|
|
5639
5642
|
continue;
|
|
5640
5643
|
}
|
|
@@ -5654,7 +5657,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5654
5657
|
const arkAddress = await this.wallet.getAddress();
|
|
5655
5658
|
const outputFee = estimator.evalOffchainOutput({
|
|
5656
5659
|
amount: totalAmount,
|
|
5657
|
-
script: base.hex.encode(
|
|
5660
|
+
script: base.hex.encode(chunk57636V35_cjs.ArkAddress.decode(arkAddress).pkScript)
|
|
5658
5661
|
});
|
|
5659
5662
|
totalAmount -= BigInt(outputFee.satoshis);
|
|
5660
5663
|
if (totalAmount < dustAmount) return;
|
|
@@ -5734,7 +5737,7 @@ var ArkNote = class _ArkNote {
|
|
|
5734
5737
|
this.value = value;
|
|
5735
5738
|
this.HRP = HRP;
|
|
5736
5739
|
const preimageHash = utils_js.sha256(this.preimage);
|
|
5737
|
-
this.vtxoScript = new
|
|
5740
|
+
this.vtxoScript = new chunk57636V35_cjs.VtxoScript([noteTapscript(preimageHash)]);
|
|
5738
5741
|
const leaf = this.vtxoScript.leaves[0];
|
|
5739
5742
|
this.txid = base.hex.encode(new Uint8Array(preimageHash).reverse());
|
|
5740
5743
|
this.tapTree = this.vtxoScript.encode();
|
|
@@ -5901,7 +5904,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
5901
5904
|
const privateKey = data.slice(1, 33);
|
|
5902
5905
|
const serverPubKey = data.slice(33, 65);
|
|
5903
5906
|
const sequence = new DataView(data.buffer, data.byteOffset + 65, 4).getUint32(0, false);
|
|
5904
|
-
const csvTimelock =
|
|
5907
|
+
const csvTimelock = chunk57636V35_cjs.sequenceToTimelock(sequence);
|
|
5905
5908
|
return new _ArkadeCash(privateKey, serverPubKey, csvTimelock, decoded.prefix);
|
|
5906
5909
|
}
|
|
5907
5910
|
toString() {
|
|
@@ -5909,7 +5912,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
5909
5912
|
data[0] = _ArkadeCash.Version;
|
|
5910
5913
|
data.set(this._privateKey, 1);
|
|
5911
5914
|
data.set(this._serverPubKey, 33);
|
|
5912
|
-
const sequence =
|
|
5915
|
+
const sequence = chunk57636V35_cjs.timelockToSequence(this.csvTimelock);
|
|
5913
5916
|
new DataView(data.buffer, data.byteOffset + 65, 4).setUint32(0, sequence, false);
|
|
5914
5917
|
const words = base.bech32m.toWords(data);
|
|
5915
5918
|
return base.bech32m.encode(this.hrp, words, 1023);
|
|
@@ -5918,7 +5921,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
5918
5921
|
return SingleKey.fromPrivateKey(this._privateKey);
|
|
5919
5922
|
}
|
|
5920
5923
|
get vtxoScript() {
|
|
5921
|
-
return new
|
|
5924
|
+
return new chunk3OKEUDHU_cjs.DefaultVtxo.Script({
|
|
5922
5925
|
pubKey: this._publicKey,
|
|
5923
5926
|
serverPubKey: this._serverPubKey,
|
|
5924
5927
|
csvTimelock: this.csvTimelock
|
|
@@ -6179,7 +6182,7 @@ async function captureExitBranch(params) {
|
|
|
6179
6182
|
const nonCommitment = ordered.filter((c) => chainTxTypeToChainedExit(c.type) !== 1 /* Commitment */).map((c) => c.txid);
|
|
6180
6183
|
if (nonCommitment.length > 0) {
|
|
6181
6184
|
for (const psbt of await resolver.getVirtualTxs(nonCommitment)) {
|
|
6182
|
-
psbtByTxid.set(
|
|
6185
|
+
psbtByTxid.set(chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
6183
6186
|
}
|
|
6184
6187
|
}
|
|
6185
6188
|
}
|
|
@@ -6222,10 +6225,10 @@ var IndexerExitDataSource = class {
|
|
|
6222
6225
|
while (hasMore) {
|
|
6223
6226
|
const { chain: page, page: meta } = await this.indexer.getVtxoChain(
|
|
6224
6227
|
{ txid: vtxo.txid, vout: vtxo.vout },
|
|
6225
|
-
{ pageIndex, pageSize:
|
|
6228
|
+
{ pageIndex, pageSize: chunk57636V35_cjs.DEFAULT_PAGE_SIZE }
|
|
6226
6229
|
);
|
|
6227
6230
|
chain.push(...page);
|
|
6228
|
-
hasMore = meta ? page.length ===
|
|
6231
|
+
hasMore = meta ? page.length === chunk57636V35_cjs.DEFAULT_PAGE_SIZE : false;
|
|
6229
6232
|
pageIndex++;
|
|
6230
6233
|
}
|
|
6231
6234
|
return chain;
|
|
@@ -6237,12 +6240,12 @@ var IndexerExitDataSource = class {
|
|
|
6237
6240
|
while (hasMore) {
|
|
6238
6241
|
const { txs, page } = await this.indexer.getVirtualTxs(txids, {
|
|
6239
6242
|
pageIndex,
|
|
6240
|
-
pageSize:
|
|
6243
|
+
pageSize: chunk57636V35_cjs.DEFAULT_PAGE_SIZE
|
|
6241
6244
|
});
|
|
6242
6245
|
for (const psbt of txs) {
|
|
6243
|
-
out.set(
|
|
6246
|
+
out.set(chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
6244
6247
|
}
|
|
6245
|
-
hasMore = page ? txs.length ===
|
|
6248
|
+
hasMore = page ? txs.length === chunk57636V35_cjs.DEFAULT_PAGE_SIZE : false;
|
|
6246
6249
|
pageIndex++;
|
|
6247
6250
|
}
|
|
6248
6251
|
return out;
|
|
@@ -6263,7 +6266,7 @@ function chainedTxTypeToChainTxType(t) {
|
|
|
6263
6266
|
}
|
|
6264
6267
|
}
|
|
6265
6268
|
function psbtInputTxids(psbtBase64) {
|
|
6266
|
-
const tx =
|
|
6269
|
+
const tx = chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
|
|
6267
6270
|
const ids = [];
|
|
6268
6271
|
for (let i = 0; i < tx.inputsLength; i++) {
|
|
6269
6272
|
const txid = tx.getInput(i).txid;
|
|
@@ -6622,10 +6625,10 @@ async function resolveArkInfo(arkProvider, walletRepository) {
|
|
|
6622
6625
|
try {
|
|
6623
6626
|
info = await arkProvider.getInfo();
|
|
6624
6627
|
} catch (err) {
|
|
6625
|
-
if (!
|
|
6628
|
+
if (!chunk57636V35_cjs.isRetryableProviderError(err)) throw err;
|
|
6626
6629
|
const snapshot = await loadArkInfoSnapshot(walletRepository);
|
|
6627
6630
|
if (!snapshot) {
|
|
6628
|
-
throw new
|
|
6631
|
+
throw new chunk57636V35_cjs.ProviderUnavailableError(
|
|
6629
6632
|
"Arkade server info is unavailable and no cached snapshot exists",
|
|
6630
6633
|
{ cause: err }
|
|
6631
6634
|
);
|
|
@@ -7015,7 +7018,7 @@ function collectArkTxidsNeedingCreatedAt(vtxos) {
|
|
|
7015
7018
|
return [...txids];
|
|
7016
7019
|
}
|
|
7017
7020
|
async function buildTransactionHistory(vtxos, allBoardingTxs, commitmentsToIgnore, resolveTxCreatedAt) {
|
|
7018
|
-
const fromOldestVtxo = vtxos.map(
|
|
7021
|
+
const fromOldestVtxo = vtxos.map(chunk57636V35_cjs.normalizeVtxo).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
|
|
7019
7022
|
const txidsNeedingCreatedAt = resolveTxCreatedAt ? collectArkTxidsNeedingCreatedAt(fromOldestVtxo) : [];
|
|
7020
7023
|
const resolvedCreatedAt = resolveTxCreatedAt && txidsNeedingCreatedAt.length > 0 ? await resolveTxCreatedAt(txidsNeedingCreatedAt) : /* @__PURE__ */ new Map();
|
|
7021
7024
|
const unmatchedSettledBoardingTxs = allBoardingTxs.filter(isSettledBoardingReceive).sort((a, b) => a.createdAt - b.createdAt);
|
|
@@ -7179,7 +7182,7 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7179
7182
|
const virtualCoins = await this.wallet.getSpendableVtxos({
|
|
7180
7183
|
withRecoverable: false
|
|
7181
7184
|
});
|
|
7182
|
-
const controlAssetRef = params.controlAssetId ?
|
|
7185
|
+
const controlAssetRef = params.controlAssetId ? chunk3KW4TWP2_cjs.AssetRef.fromId(chunk3KW4TWP2_cjs.AssetId.fromString(params.controlAssetId)) : null;
|
|
7183
7186
|
const coinSelection = selectVirtualCoins(virtualCoins, Number(this.wallet.dustAmount));
|
|
7184
7187
|
let totalBtcSelected = 0n;
|
|
7185
7188
|
const assetChanges = /* @__PURE__ */ new Map();
|
|
@@ -7192,8 +7195,8 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7192
7195
|
}
|
|
7193
7196
|
}
|
|
7194
7197
|
const groups = [];
|
|
7195
|
-
const issuedAssetOutput =
|
|
7196
|
-
const issuedAssetGroup =
|
|
7198
|
+
const issuedAssetOutput = chunk3KW4TWP2_cjs.AssetOutput.create(0, params.amount);
|
|
7199
|
+
const issuedAssetGroup = chunk3KW4TWP2_cjs.AssetGroup.create(
|
|
7197
7200
|
null,
|
|
7198
7201
|
controlAssetRef,
|
|
7199
7202
|
[],
|
|
@@ -7208,28 +7211,28 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7208
7211
|
for (const [inputIndex, assets] of assetInputs) {
|
|
7209
7212
|
for (const asset of assets) {
|
|
7210
7213
|
if (asset.assetId !== assetId) continue;
|
|
7211
|
-
changeInputs.push(
|
|
7214
|
+
changeInputs.push(chunk3KW4TWP2_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
7212
7215
|
}
|
|
7213
7216
|
}
|
|
7214
7217
|
groups.push(
|
|
7215
|
-
|
|
7216
|
-
|
|
7218
|
+
chunk3KW4TWP2_cjs.AssetGroup.create(
|
|
7219
|
+
chunk3KW4TWP2_cjs.AssetId.fromString(assetId),
|
|
7217
7220
|
null,
|
|
7218
7221
|
changeInputs,
|
|
7219
|
-
[
|
|
7222
|
+
[chunk3KW4TWP2_cjs.AssetOutput.create(0, amount)],
|
|
7220
7223
|
[]
|
|
7221
7224
|
)
|
|
7222
7225
|
);
|
|
7223
7226
|
}
|
|
7224
7227
|
}
|
|
7225
7228
|
const address = await this.wallet.getAddress();
|
|
7226
|
-
const outputAddress =
|
|
7229
|
+
const outputAddress = chunk57636V35_cjs.ArkAddress.decode(address);
|
|
7227
7230
|
const outputs = [
|
|
7228
7231
|
{
|
|
7229
7232
|
script: outputAddress.pkScript,
|
|
7230
7233
|
amount: BigInt(totalBtcSelected)
|
|
7231
7234
|
},
|
|
7232
|
-
Extension.create([
|
|
7235
|
+
Extension.create([chunk3KW4TWP2_cjs.Packet.create(groups)]).txOut()
|
|
7233
7236
|
];
|
|
7234
7237
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(
|
|
7235
7238
|
coinSelection.inputs,
|
|
@@ -7237,7 +7240,7 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7237
7240
|
);
|
|
7238
7241
|
return {
|
|
7239
7242
|
arkTxId: arkTxid,
|
|
7240
|
-
assetId:
|
|
7243
|
+
assetId: chunk3KW4TWP2_cjs.AssetId.create(arkTxid, 0).toString()
|
|
7241
7244
|
};
|
|
7242
7245
|
}
|
|
7243
7246
|
/**
|
|
@@ -7309,16 +7312,16 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7309
7312
|
for (const [inputIndex, assets] of assetInputs) {
|
|
7310
7313
|
for (const asset of assets) {
|
|
7311
7314
|
if (asset.assetId !== params.assetId) continue;
|
|
7312
|
-
reissueInputs.push(
|
|
7315
|
+
reissueInputs.push(chunk3KW4TWP2_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
7313
7316
|
}
|
|
7314
7317
|
}
|
|
7315
7318
|
const totalAssetAmount = assetToReissueAmount + params.amount;
|
|
7316
|
-
const reissueAssetIdObj =
|
|
7317
|
-
const reissueAssetGroup =
|
|
7319
|
+
const reissueAssetIdObj = chunk3KW4TWP2_cjs.AssetId.fromString(params.assetId);
|
|
7320
|
+
const reissueAssetGroup = chunk3KW4TWP2_cjs.AssetGroup.create(
|
|
7318
7321
|
reissueAssetIdObj,
|
|
7319
7322
|
null,
|
|
7320
7323
|
reissueInputs,
|
|
7321
|
-
[
|
|
7324
|
+
[chunk3KW4TWP2_cjs.AssetOutput.create(0, totalAssetAmount)],
|
|
7322
7325
|
[]
|
|
7323
7326
|
);
|
|
7324
7327
|
const groups = [reissueAssetGroup];
|
|
@@ -7327,27 +7330,27 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7327
7330
|
for (const [inputIndex, assets] of assetInputs) {
|
|
7328
7331
|
for (const asset of assets) {
|
|
7329
7332
|
if (asset.assetId !== assetId) continue;
|
|
7330
|
-
changeInputs.push(
|
|
7333
|
+
changeInputs.push(chunk3KW4TWP2_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
7331
7334
|
}
|
|
7332
7335
|
}
|
|
7333
7336
|
groups.push(
|
|
7334
|
-
|
|
7335
|
-
|
|
7337
|
+
chunk3KW4TWP2_cjs.AssetGroup.create(
|
|
7338
|
+
chunk3KW4TWP2_cjs.AssetId.fromString(assetId),
|
|
7336
7339
|
null,
|
|
7337
7340
|
changeInputs,
|
|
7338
|
-
[
|
|
7341
|
+
[chunk3KW4TWP2_cjs.AssetOutput.create(0, amount)],
|
|
7339
7342
|
[]
|
|
7340
7343
|
)
|
|
7341
7344
|
);
|
|
7342
7345
|
}
|
|
7343
7346
|
const address = await this.wallet.getAddress();
|
|
7344
|
-
const outputAddress =
|
|
7347
|
+
const outputAddress = chunk57636V35_cjs.ArkAddress.decode(address);
|
|
7345
7348
|
const outputs = [
|
|
7346
7349
|
{
|
|
7347
7350
|
script: outputAddress.pkScript,
|
|
7348
7351
|
amount: BigInt(totalBtcSelected)
|
|
7349
7352
|
},
|
|
7350
|
-
Extension.create([
|
|
7353
|
+
Extension.create([chunk3KW4TWP2_cjs.Packet.create(groups)]).txOut()
|
|
7351
7354
|
];
|
|
7352
7355
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
|
|
7353
7356
|
return arkTxid;
|
|
@@ -7414,27 +7417,27 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7414
7417
|
for (const [inputIndex, assets] of assetInputs) {
|
|
7415
7418
|
for (const asset of assets) {
|
|
7416
7419
|
if (asset.assetId !== assetId) continue;
|
|
7417
|
-
changeInputs.push(
|
|
7420
|
+
changeInputs.push(chunk3KW4TWP2_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
7418
7421
|
}
|
|
7419
7422
|
}
|
|
7420
7423
|
groups.push(
|
|
7421
|
-
|
|
7422
|
-
|
|
7424
|
+
chunk3KW4TWP2_cjs.AssetGroup.create(
|
|
7425
|
+
chunk3KW4TWP2_cjs.AssetId.fromString(assetId),
|
|
7423
7426
|
null,
|
|
7424
7427
|
changeInputs,
|
|
7425
|
-
amount > 0n ? [
|
|
7428
|
+
amount > 0n ? [chunk3KW4TWP2_cjs.AssetOutput.create(0, amount)] : [],
|
|
7426
7429
|
[]
|
|
7427
7430
|
)
|
|
7428
7431
|
);
|
|
7429
7432
|
}
|
|
7430
7433
|
const address = await this.wallet.getAddress();
|
|
7431
|
-
const outputAddress =
|
|
7434
|
+
const outputAddress = chunk57636V35_cjs.ArkAddress.decode(address);
|
|
7432
7435
|
const outputs = [
|
|
7433
7436
|
{
|
|
7434
7437
|
script: outputAddress.pkScript,
|
|
7435
7438
|
amount: BigInt(totalBtcSelected)
|
|
7436
7439
|
},
|
|
7437
|
-
Extension.create([
|
|
7440
|
+
Extension.create([chunk3KW4TWP2_cjs.Packet.create(groups)]).txOut()
|
|
7438
7441
|
];
|
|
7439
7442
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
|
|
7440
7443
|
return arkTxid;
|
|
@@ -7459,7 +7462,7 @@ function castMetadata(metadata) {
|
|
|
7459
7462
|
} else {
|
|
7460
7463
|
throw new Error("Invalid metadata value type");
|
|
7461
7464
|
}
|
|
7462
|
-
md.push(
|
|
7465
|
+
md.push(chunk3KW4TWP2_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
|
|
7463
7466
|
}
|
|
7464
7467
|
return md;
|
|
7465
7468
|
}
|
|
@@ -7480,10 +7483,10 @@ var DelegateManagerImpl = class {
|
|
|
7480
7483
|
if (vtxos.length === 0) {
|
|
7481
7484
|
return { delegated: [], failed: [] };
|
|
7482
7485
|
}
|
|
7483
|
-
const destinationScript =
|
|
7486
|
+
const destinationScript = chunk57636V35_cjs.ArkAddress.decode(destination).pkScript;
|
|
7484
7487
|
const arkInfo = await this.arkInfoProvider.getInfo();
|
|
7485
7488
|
const delegateInfo = await this.delegateProvider.getDelegateInfo();
|
|
7486
|
-
const eligible = vtxos.map(
|
|
7489
|
+
const eligible = vtxos.map(chunk57636V35_cjs.normalizeVtxo).filter(
|
|
7487
7490
|
(v) => isAnnotated(v) && findDelegateTapLeaf(v, delegateInfo.pubkey) !== void 0
|
|
7488
7491
|
);
|
|
7489
7492
|
if (eligible.length === 0) {
|
|
@@ -7512,11 +7515,11 @@ var DelegateManagerImpl = class {
|
|
|
7512
7515
|
const groupByExpiry = /* @__PURE__ */ new Map();
|
|
7513
7516
|
let recoverableVtxos = [];
|
|
7514
7517
|
for (const vtxo of eligible) {
|
|
7515
|
-
if (
|
|
7518
|
+
if (chunk57636V35_cjs.canRecoverOnchain(vtxo, now)) {
|
|
7516
7519
|
recoverableVtxos.push(vtxo);
|
|
7517
7520
|
continue;
|
|
7518
7521
|
}
|
|
7519
|
-
const expiry =
|
|
7522
|
+
const expiry = chunk57636V35_cjs.toBatchExpiry(vtxo);
|
|
7520
7523
|
if (!expiry) continue;
|
|
7521
7524
|
const dayKey = getDayTimestamp(expiry);
|
|
7522
7525
|
groupByExpiry.set(dayKey, [...groupByExpiry.get(dayKey) ?? [], vtxo]);
|
|
@@ -7581,7 +7584,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7581
7584
|
}
|
|
7582
7585
|
if (!delegateAt) {
|
|
7583
7586
|
const now = { timestamp: /* @__PURE__ */ new Date() };
|
|
7584
|
-
const expiryTimestamp = vtxos.filter((coin) => !
|
|
7587
|
+
const expiryTimestamp = vtxos.filter((coin) => !chunk57636V35_cjs.canRecoverOnchain(coin, now) && chunk57636V35_cjs.toBatchExpiry(coin)).reduce((min, coin) => Math.min(min, chunk57636V35_cjs.toBatchExpiry(coin)), Number.MAX_SAFE_INTEGER);
|
|
7585
7588
|
if (!expiryTimestamp || expiryTimestamp === Number.MAX_SAFE_INTEGER) {
|
|
7586
7589
|
delegateAt = new Date(Date.now() + 1 * 60 * 1e3);
|
|
7587
7590
|
} else {
|
|
@@ -7610,7 +7613,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7610
7613
|
let amount = 0n;
|
|
7611
7614
|
for (const coin of vtxos) {
|
|
7612
7615
|
const inputFee = estimator.evalOffchainInput({
|
|
7613
|
-
...
|
|
7616
|
+
...chunk57636V35_cjs.toOffchainInputFeeParams(coin),
|
|
7614
7617
|
type: "vtxo"
|
|
7615
7618
|
});
|
|
7616
7619
|
if (inputFee.value >= coin.value) {
|
|
@@ -7624,7 +7627,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7624
7627
|
const delegateFee = BigInt(Number(fee));
|
|
7625
7628
|
if (delegateFee > 0n) {
|
|
7626
7629
|
outputs.push({
|
|
7627
|
-
script:
|
|
7630
|
+
script: chunk57636V35_cjs.ArkAddress.decode(delegateAddress).pkScript,
|
|
7628
7631
|
amount: delegateFee
|
|
7629
7632
|
});
|
|
7630
7633
|
}
|
|
@@ -7657,10 +7660,10 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7657
7660
|
destinationScript
|
|
7658
7661
|
);
|
|
7659
7662
|
const forfeitOutputScript = btcSigner.OutScript.encode(
|
|
7660
|
-
btcSigner.Address(
|
|
7663
|
+
btcSigner.Address(chunk57636V35_cjs.getNetwork(network)).decode(forfeitAddress)
|
|
7661
7664
|
);
|
|
7662
7665
|
const forfeits = await Promise.all(
|
|
7663
|
-
vtxos.filter((v) => !
|
|
7666
|
+
vtxos.filter((v) => !chunk57636V35_cjs.canRecoverOnchain(v, { timestamp: /* @__PURE__ */ new Date() })).map(async (coin) => {
|
|
7664
7667
|
const forfeit = await makeDelegateForfeitTx(
|
|
7665
7668
|
coin,
|
|
7666
7669
|
dust,
|
|
@@ -7685,7 +7688,7 @@ async function makeDelegateForfeitTx(input, connectorAmount, delegatePubkey, for
|
|
|
7685
7688
|
index: input.vout,
|
|
7686
7689
|
witnessUtxo: {
|
|
7687
7690
|
amount: BigInt(input.value),
|
|
7688
|
-
script:
|
|
7691
|
+
script: chunk57636V35_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
7689
7692
|
},
|
|
7690
7693
|
sighashType: btcSigner.SigHash.ALL_ANYONECANPAY,
|
|
7691
7694
|
tapLeafScript: [delegateTapLeaf]
|
|
@@ -7743,7 +7746,7 @@ async function makeSignedDelegateIntent(identity, coins, outputs, onchainOutputs
|
|
|
7743
7746
|
expire_at: 0,
|
|
7744
7747
|
cosigners_public_keys: cosignerPubKeys
|
|
7745
7748
|
};
|
|
7746
|
-
const proof =
|
|
7749
|
+
const proof = chunk57636V35_cjs.Intent.create(message, coins, outputs);
|
|
7747
7750
|
const signedProof = await identity.sign(proof);
|
|
7748
7751
|
return {
|
|
7749
7752
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -7761,10 +7764,10 @@ function getDayTimestamp(timestamp) {
|
|
|
7761
7764
|
function findDelegateTapLeaf(vtxo, delegatePubkey) {
|
|
7762
7765
|
if (!vtxo.tapTree) return void 0;
|
|
7763
7766
|
const pk = delegatePubkey.length === 66 ? delegatePubkey.slice(2) : delegatePubkey;
|
|
7764
|
-
const vtxoScript =
|
|
7767
|
+
const vtxoScript = chunk57636V35_cjs.VtxoScript.decode(vtxo.tapTree);
|
|
7765
7768
|
return vtxoScript.leaves.find((tapLeaf) => {
|
|
7766
|
-
const arkTapscript =
|
|
7767
|
-
if (!
|
|
7769
|
+
const arkTapscript = chunk57636V35_cjs.decodeTapscript(chunk57636V35_cjs.scriptFromTapLeafScript(tapLeaf));
|
|
7770
|
+
if (!chunk57636V35_cjs.MultisigTapscript.is(arkTapscript)) return false;
|
|
7768
7771
|
return arkTapscript.params.pubkeys.map(base.hex.encode).includes(pk);
|
|
7769
7772
|
});
|
|
7770
7773
|
}
|
|
@@ -8045,7 +8048,7 @@ function createManagedConnection(dbName, version, initDatabase2) {
|
|
|
8045
8048
|
};
|
|
8046
8049
|
}
|
|
8047
8050
|
function scriptFromArkAddress(address) {
|
|
8048
|
-
return base.hex.encode(
|
|
8051
|
+
return base.hex.encode(chunk57636V35_cjs.ArkAddress.decode(address).pkScript);
|
|
8049
8052
|
}
|
|
8050
8053
|
|
|
8051
8054
|
// src/repositories/indexedDB/schema.ts
|
|
@@ -8540,7 +8543,7 @@ function validateVtxosForScript(vtxos, script, context) {
|
|
|
8540
8543
|
}
|
|
8541
8544
|
async function getVtxosForContract(repo, contract) {
|
|
8542
8545
|
const vtxos = repo.getVtxosForScript ? await repo.getVtxosForScript(contract.script) : filterVtxosForScript(await repo.getVtxos(contract.address), contract.script);
|
|
8543
|
-
return vtxos.map(
|
|
8546
|
+
return vtxos.map(chunk57636V35_cjs.normalizeVtxo);
|
|
8544
8547
|
}
|
|
8545
8548
|
async function saveVtxosForContract(repo, contract, vtxos) {
|
|
8546
8549
|
if (repo.saveVtxosForScript) {
|
|
@@ -8682,7 +8685,7 @@ function decodeArkContract(encoded) {
|
|
|
8682
8685
|
}
|
|
8683
8686
|
function contractFromArkContract(encoded, options = {}) {
|
|
8684
8687
|
const parsed = decodeArkContract(encoded);
|
|
8685
|
-
const handler =
|
|
8688
|
+
const handler = chunk3OKEUDHU_cjs.contractHandlers.get(parsed.type);
|
|
8686
8689
|
if (!handler) {
|
|
8687
8690
|
throw new Error(`No handler registered for contract type '${parsed.type}'`);
|
|
8688
8691
|
}
|
|
@@ -8696,9 +8699,9 @@ function contractFromArkContract(encoded, options = {}) {
|
|
|
8696
8699
|
metadata: options.metadata
|
|
8697
8700
|
};
|
|
8698
8701
|
}
|
|
8699
|
-
function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix =
|
|
8702
|
+
function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunk57636V35_cjs.DEFAULT_NETWORK.hrp, options = {}) {
|
|
8700
8703
|
const parsed = decodeArkContract(encoded);
|
|
8701
|
-
const handler =
|
|
8704
|
+
const handler = chunk3OKEUDHU_cjs.contractHandlers.getOrThrow(parsed.type);
|
|
8702
8705
|
const params = parsed.data;
|
|
8703
8706
|
const vtxoScript = handler.createScript(params);
|
|
8704
8707
|
return {
|
|
@@ -8952,9 +8955,9 @@ var ContractWatcher = class {
|
|
|
8952
8955
|
this.connectionState = "connected";
|
|
8953
8956
|
this.reconnectAttempts = 0;
|
|
8954
8957
|
this.listenLoop().catch((e) => {
|
|
8955
|
-
if (
|
|
8958
|
+
if (chunk57636V35_cjs.isEventSourceError(e)) {
|
|
8956
8959
|
console.debug("ContractWatcher subscription disconnected; reconnecting");
|
|
8957
|
-
} else if (!
|
|
8960
|
+
} else if (!chunk57636V35_cjs.isEventSourceUnavailableError(e)) {
|
|
8958
8961
|
console.error(e);
|
|
8959
8962
|
}
|
|
8960
8963
|
this.connectionState = "disconnected";
|
|
@@ -8966,7 +8969,7 @@ var ContractWatcher = class {
|
|
|
8966
8969
|
this.scheduleReconnect();
|
|
8967
8970
|
});
|
|
8968
8971
|
} catch (error) {
|
|
8969
|
-
if (!
|
|
8972
|
+
if (!chunk57636V35_cjs.isEventSourceUnavailableError(error)) {
|
|
8970
8973
|
console.error("ContractWatcher connection failed:", error);
|
|
8971
8974
|
}
|
|
8972
8975
|
this.connectionState = "disconnected";
|
|
@@ -8992,7 +8995,7 @@ var ContractWatcher = class {
|
|
|
8992
8995
|
* slower; what it loses is push latency.
|
|
8993
8996
|
*/
|
|
8994
8997
|
reportEventSourceUnavailable(error) {
|
|
8995
|
-
if (!
|
|
8998
|
+
if (!chunk57636V35_cjs.isEventSourceUnavailableError(error)) return false;
|
|
8996
8999
|
if (!this.eventSourceReported) {
|
|
8997
9000
|
this.eventSourceReported = true;
|
|
8998
9001
|
console.warn(
|
|
@@ -9208,14 +9211,14 @@ var ContractWatcher = class {
|
|
|
9208
9211
|
const timestamp = Date.now();
|
|
9209
9212
|
if (update.newVtxos?.length) {
|
|
9210
9213
|
this.processSubscriptionVtxos(
|
|
9211
|
-
update.newVtxos.map(
|
|
9214
|
+
update.newVtxos.map(chunk57636V35_cjs.normalizeVtxo),
|
|
9212
9215
|
"vtxo_received",
|
|
9213
9216
|
timestamp
|
|
9214
9217
|
);
|
|
9215
9218
|
}
|
|
9216
9219
|
if (update.spentVtxos?.length) {
|
|
9217
9220
|
this.processSubscriptionVtxos(
|
|
9218
|
-
update.spentVtxos.map(
|
|
9221
|
+
update.spentVtxos.map(chunk57636V35_cjs.normalizeVtxo),
|
|
9219
9222
|
"vtxo_spent",
|
|
9220
9223
|
timestamp
|
|
9221
9224
|
);
|
|
@@ -9310,7 +9313,7 @@ var NON_TERMINAL_INTENT_STATES = ALL_INTENT_STATES.filter(
|
|
|
9310
9313
|
(s) => !isTerminalIntentState(s)
|
|
9311
9314
|
);
|
|
9312
9315
|
function isConsumed(vtxo) {
|
|
9313
|
-
return vtxo !== void 0 &&
|
|
9316
|
+
return vtxo !== void 0 && chunk57636V35_cjs.hasTerminalSpend(vtxo);
|
|
9314
9317
|
}
|
|
9315
9318
|
async function classifyIntent(intent, vtxosByOutpoint, now) {
|
|
9316
9319
|
if (isTerminalIntentState(intent.state)) return void 0;
|
|
@@ -9353,7 +9356,7 @@ async function reconcileIntents(deps) {
|
|
|
9353
9356
|
let vtxosByOutpoint = /* @__PURE__ */ new Map();
|
|
9354
9357
|
if (outpoints.length > 0) {
|
|
9355
9358
|
try {
|
|
9356
|
-
const { vtxos } = await
|
|
9359
|
+
const { vtxos } = await chunk57636V35_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
|
|
9357
9360
|
vtxosByOutpoint = new Map(vtxos.map((v) => [outpointKey(v), v]));
|
|
9358
9361
|
} catch (e) {
|
|
9359
9362
|
console.error("reconcileIntents: failed to fetch input VTXO state", e);
|
|
@@ -9527,7 +9530,7 @@ var ContractManager = class _ContractManager {
|
|
|
9527
9530
|
await this.reconcileWatched();
|
|
9528
9531
|
this.markSyncOnline();
|
|
9529
9532
|
} catch (err) {
|
|
9530
|
-
if (!
|
|
9533
|
+
if (!chunk57636V35_cjs.isRetryableProviderError(err)) throw err;
|
|
9531
9534
|
this.markSyncDegraded(err);
|
|
9532
9535
|
}
|
|
9533
9536
|
this.initialized = true;
|
|
@@ -9659,7 +9662,7 @@ var ContractManager = class _ContractManager {
|
|
|
9659
9662
|
const from = Math.max(0, watermark - lookAhead.size);
|
|
9660
9663
|
const to = watermark + lookAhead.size;
|
|
9661
9664
|
const deps = lookAhead.candidateDeps();
|
|
9662
|
-
const handlers =
|
|
9665
|
+
const handlers = chunk3OKEUDHU_cjs.contractHandlers.getRegisteredTypes().map((t) => chunk3OKEUDHU_cjs.contractHandlers.get(t)).filter(hasCandidates);
|
|
9663
9666
|
const band = /* @__PURE__ */ new Map();
|
|
9664
9667
|
for (let index = from; index <= to; index++) {
|
|
9665
9668
|
const descriptor = lookAhead.materialize(index);
|
|
@@ -9670,7 +9673,7 @@ var ContractManager = class _ContractManager {
|
|
|
9670
9673
|
index,
|
|
9671
9674
|
params: {
|
|
9672
9675
|
...candidate,
|
|
9673
|
-
...
|
|
9676
|
+
...chunk3OKEUDHU_cjs.speculativeReceiveMetadata(descriptor)
|
|
9674
9677
|
}
|
|
9675
9678
|
});
|
|
9676
9679
|
}
|
|
@@ -9732,7 +9735,7 @@ var ContractManager = class _ContractManager {
|
|
|
9732
9735
|
});
|
|
9733
9736
|
for (const entry of pending) entry.catchUpPending = false;
|
|
9734
9737
|
} catch (err) {
|
|
9735
|
-
if (!
|
|
9738
|
+
if (!chunk57636V35_cjs.isRetryableProviderError(err)) throw err;
|
|
9736
9739
|
this.markSyncDegraded(err);
|
|
9737
9740
|
}
|
|
9738
9741
|
}
|
|
@@ -9782,7 +9785,7 @@ var ContractManager = class _ContractManager {
|
|
|
9782
9785
|
await this.fetchContractVxosFromIndexer([contract]);
|
|
9783
9786
|
this.markSyncOnline();
|
|
9784
9787
|
} catch (err) {
|
|
9785
|
-
if (!
|
|
9788
|
+
if (!chunk57636V35_cjs.isRetryableProviderError(err)) throw err;
|
|
9786
9789
|
this.markSyncDegraded(err);
|
|
9787
9790
|
}
|
|
9788
9791
|
await this.watcher.addContract(contract);
|
|
@@ -9819,7 +9822,7 @@ var ContractManager = class _ContractManager {
|
|
|
9819
9822
|
return result;
|
|
9820
9823
|
}
|
|
9821
9824
|
async upsertContractRow(params) {
|
|
9822
|
-
const handler =
|
|
9825
|
+
const handler = chunk3OKEUDHU_cjs.contractHandlers.get(params.type);
|
|
9823
9826
|
if (!handler) {
|
|
9824
9827
|
throw new Error(`No handler registered for contract type '${params.type}'`);
|
|
9825
9828
|
}
|
|
@@ -9919,7 +9922,7 @@ var ContractManager = class _ContractManager {
|
|
|
9919
9922
|
`scanContracts: batchSize must be a positive integer (got ${String(opts.batchSize)})`
|
|
9920
9923
|
);
|
|
9921
9924
|
}
|
|
9922
|
-
const registered =
|
|
9925
|
+
const registered = chunk3OKEUDHU_cjs.contractHandlers.getRegisteredTypes().map((t) => chunk3OKEUDHU_cjs.contractHandlers.get(t)).filter(isDiscoverable);
|
|
9923
9926
|
const discoverables = [
|
|
9924
9927
|
...registered.filter((h) => h.type === "boarding"),
|
|
9925
9928
|
...registered.filter((h) => h.type !== "boarding")
|
|
@@ -10054,7 +10057,7 @@ var ContractManager = class _ContractManager {
|
|
|
10054
10057
|
await this.syncContracts({ contracts, pageSize });
|
|
10055
10058
|
this.markSyncOnline();
|
|
10056
10059
|
} catch (err) {
|
|
10057
|
-
if (!
|
|
10060
|
+
if (!chunk57636V35_cjs.isRetryableProviderError(err)) throw err;
|
|
10058
10061
|
this.markSyncDegraded(err);
|
|
10059
10062
|
}
|
|
10060
10063
|
const vtxos = await this.getVtxosForContracts(contracts);
|
|
@@ -10075,7 +10078,7 @@ var ContractManager = class _ContractManager {
|
|
|
10075
10078
|
}
|
|
10076
10079
|
const tapscriptCache = tapscripts ?? /* @__PURE__ */ new Map();
|
|
10077
10080
|
return vtxos.map(
|
|
10078
|
-
(vtxo) => extendVirtualCoinForContract(
|
|
10081
|
+
(vtxo) => extendVirtualCoinForContract(chunk57636V35_cjs.normalizeVtxo(vtxo), byScript, tapscriptCache)
|
|
10079
10082
|
);
|
|
10080
10083
|
}
|
|
10081
10084
|
/** @inheritdoc */
|
|
@@ -10119,14 +10122,14 @@ var ContractManager = class _ContractManager {
|
|
|
10119
10122
|
const byScript = new Map(contracts.map((contract) => [contract.script, contract]));
|
|
10120
10123
|
const asking = vtxos.filter((vtxo) => {
|
|
10121
10124
|
const contract = byScript.get(vtxo.script);
|
|
10122
|
-
return contract !== void 0 &&
|
|
10125
|
+
return contract !== void 0 && chunk3OKEUDHU_cjs.contractHandlers.get(contract.type)?.assertSpendableNow !== void 0;
|
|
10123
10126
|
});
|
|
10124
10127
|
if (asking.length === 0) return refused;
|
|
10125
10128
|
const tip = await this.currentChainTip();
|
|
10126
10129
|
const walletKey = await walletPubKey?.();
|
|
10127
10130
|
for (const vtxo of asking) {
|
|
10128
10131
|
const contract = byScript.get(vtxo.script);
|
|
10129
|
-
const handler =
|
|
10132
|
+
const handler = chunk3OKEUDHU_cjs.contractHandlers.get(contract.type);
|
|
10130
10133
|
if (!handler?.assertSpendableNow) continue;
|
|
10131
10134
|
const context = {
|
|
10132
10135
|
collaborative: true,
|
|
@@ -10141,7 +10144,7 @@ var ContractManager = class _ContractManager {
|
|
|
10141
10144
|
// the next handler to answer a CSV question would meet a
|
|
10142
10145
|
// TypeError instead of a `false`. Carry the coin only when it
|
|
10143
10146
|
// really is one.
|
|
10144
|
-
vtxo:
|
|
10147
|
+
vtxo: chunk57636V35_cjs.isVirtualCoin(vtxo) && "status" in vtxo ? vtxo : void 0
|
|
10145
10148
|
};
|
|
10146
10149
|
try {
|
|
10147
10150
|
await handler.assertSpendableNow(
|
|
@@ -10297,7 +10300,7 @@ var ContractManager = class _ContractManager {
|
|
|
10297
10300
|
const { contractScript, collaborative = true, walletPubKey, vtxo } = options;
|
|
10298
10301
|
const [contract] = await this.getContracts({ script: contractScript });
|
|
10299
10302
|
if (!contract) return [];
|
|
10300
|
-
const handler =
|
|
10303
|
+
const handler = chunk3OKEUDHU_cjs.contractHandlers.get(contract.type);
|
|
10301
10304
|
if (!handler) return [];
|
|
10302
10305
|
const script = handler.createScript(contract.params);
|
|
10303
10306
|
const tip = await this.currentChainTip();
|
|
@@ -10325,7 +10328,7 @@ var ContractManager = class _ContractManager {
|
|
|
10325
10328
|
const { contractScript, collaborative = true, walletPubKey } = options;
|
|
10326
10329
|
const [contract] = await this.getContracts({ script: contractScript });
|
|
10327
10330
|
if (!contract) return [];
|
|
10328
|
-
const handler =
|
|
10331
|
+
const handler = chunk3OKEUDHU_cjs.contractHandlers.get(contract.type);
|
|
10329
10332
|
if (!handler) return [];
|
|
10330
10333
|
const script = handler.createScript(contract.params);
|
|
10331
10334
|
const context = {
|
|
@@ -10381,7 +10384,7 @@ var ContractManager = class _ContractManager {
|
|
|
10381
10384
|
}
|
|
10382
10385
|
async refreshOutpoints(outpoints) {
|
|
10383
10386
|
if (outpoints.length === 0) return;
|
|
10384
|
-
const { vtxos } = await
|
|
10387
|
+
const { vtxos } = await chunk57636V35_cjs.getNormalizedVtxos(this.config.indexerProvider, {
|
|
10385
10388
|
outpoints
|
|
10386
10389
|
});
|
|
10387
10390
|
if (vtxos.length === 0) return;
|
|
@@ -10460,7 +10463,7 @@ var ContractManager = class _ContractManager {
|
|
|
10460
10463
|
break;
|
|
10461
10464
|
}
|
|
10462
10465
|
} catch (err) {
|
|
10463
|
-
if (!
|
|
10466
|
+
if (!chunk57636V35_cjs.isRetryableProviderError(err)) throw err;
|
|
10464
10467
|
this.markSyncDegraded(err);
|
|
10465
10468
|
}
|
|
10466
10469
|
this.emitEvent(event);
|
|
@@ -10539,7 +10542,7 @@ var ContractManager = class _ContractManager {
|
|
|
10539
10542
|
*/
|
|
10540
10543
|
async reconcilePendingFrontier(contracts) {
|
|
10541
10544
|
const scriptToContract = new Map(contracts.map((c) => [c.script, c]));
|
|
10542
|
-
const vtxos = await
|
|
10545
|
+
const vtxos = await chunk57636V35_cjs.getAllNormalizedVtxos(
|
|
10543
10546
|
this.config.indexerProvider,
|
|
10544
10547
|
contracts.map((c) => c.script),
|
|
10545
10548
|
{ pendingOnly: true }
|
|
@@ -10622,7 +10625,7 @@ var ContractManager = class _ContractManager {
|
|
|
10622
10625
|
}
|
|
10623
10626
|
return result;
|
|
10624
10627
|
}
|
|
10625
|
-
async fetchContractVtxosBulk(contracts, pageSize =
|
|
10628
|
+
async fetchContractVtxosBulk(contracts, pageSize = chunk57636V35_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
|
|
10626
10629
|
if (contracts.length === 0) {
|
|
10627
10630
|
return { vtxosByScript: /* @__PURE__ */ new Map(), promoted: /* @__PURE__ */ new Map() };
|
|
10628
10631
|
}
|
|
@@ -10638,7 +10641,7 @@ var ContractManager = class _ContractManager {
|
|
|
10638
10641
|
before: syncWindow.before
|
|
10639
10642
|
}
|
|
10640
10643
|
} : {};
|
|
10641
|
-
const vtxos = await
|
|
10644
|
+
const vtxos = await chunk57636V35_cjs.getAllNormalizedVtxos(
|
|
10642
10645
|
this.config.indexerProvider,
|
|
10643
10646
|
contracts.map((c) => c.script),
|
|
10644
10647
|
{ ...windowOpts, pageSize }
|
|
@@ -10783,7 +10786,7 @@ var deserializeTapLeaf = (t) => {
|
|
|
10783
10786
|
const s = base.hex.decode(t.s);
|
|
10784
10787
|
return [cb, s];
|
|
10785
10788
|
};
|
|
10786
|
-
var deserializeVtxo = (o) =>
|
|
10789
|
+
var deserializeVtxo = (o) => chunk57636V35_cjs.normalizeVtxo({
|
|
10787
10790
|
...o,
|
|
10788
10791
|
createdAt: new Date(o.createdAt),
|
|
10789
10792
|
tapTree: base.hex.decode(o.tapTree),
|
|
@@ -11606,7 +11609,7 @@ var HDDescriptorProvider = class _HDDescriptorProvider {
|
|
|
11606
11609
|
*/
|
|
11607
11610
|
materializeDescriptorAt(index) {
|
|
11608
11611
|
const descriptor = this.identity.descriptor;
|
|
11609
|
-
const network =
|
|
11612
|
+
const network = chunk3OKEUDHU_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
11610
11613
|
const expansion = descriptorsScure.expand({ descriptor, network, index });
|
|
11611
11614
|
const keyInfo = expansion.expansionMap?.["@0"];
|
|
11612
11615
|
if (!keyInfo?.keyExpression) {
|
|
@@ -11754,7 +11757,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
|
|
|
11754
11757
|
const provider = await resolveDescriptorProvider(config, setup.walletRepository);
|
|
11755
11758
|
if (!provider) return void 0;
|
|
11756
11759
|
const allowSilentFallback = (config.walletMode ?? "auto") === "auto";
|
|
11757
|
-
const expectedContractType = setup.offchainTapscript instanceof
|
|
11760
|
+
const expectedContractType = setup.offchainTapscript instanceof chunk3OKEUDHU_cjs.DelegateVtxo.Script ? "delegate" : "default";
|
|
11758
11761
|
const factoryOpts = {
|
|
11759
11762
|
walletRepository: setup.walletRepository,
|
|
11760
11763
|
contractRepository: setup.contractRepository,
|
|
@@ -11955,7 +11958,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
|
|
|
11955
11958
|
};
|
|
11956
11959
|
function deriveLeafPubkey(descriptor) {
|
|
11957
11960
|
try {
|
|
11958
|
-
return
|
|
11961
|
+
return chunk3OKEUDHU_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
11959
11962
|
} catch (e) {
|
|
11960
11963
|
throw new NonRangeableDescriptorError(
|
|
11961
11964
|
"Cannot derive leaf pubkey: descriptor is not a materialized, parsable tr(...) shape.",
|
|
@@ -11967,7 +11970,7 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
11967
11970
|
const pubKey = deriveLeafPubkey(descriptor);
|
|
11968
11971
|
const tapscript = rebuildTapscript(current, pubKey);
|
|
11969
11972
|
const serverPubKey = tapscript.options.serverPubKey;
|
|
11970
|
-
const csvTimelock =
|
|
11973
|
+
const csvTimelock = chunk57636V35_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
|
|
11971
11974
|
const base$1 = {
|
|
11972
11975
|
script: base.hex.encode(tapscript.pkScript),
|
|
11973
11976
|
address: tapscript.address(hrp, serverPubKey).encode(),
|
|
@@ -11978,11 +11981,11 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
11978
11981
|
// index-0 key. Without it, spends produce unsigned PSBTs that the
|
|
11979
11982
|
// server rejects with `INVALID_PSBT_INPUT (5): missing tapscript spend sig`.
|
|
11980
11983
|
metadata: {
|
|
11981
|
-
...tagSource && { source:
|
|
11984
|
+
...tagSource && { source: chunk3OKEUDHU_cjs.WALLET_RECEIVE_SOURCE },
|
|
11982
11985
|
signingDescriptor: descriptor
|
|
11983
11986
|
}
|
|
11984
11987
|
};
|
|
11985
|
-
const params = tapscript instanceof
|
|
11988
|
+
const params = tapscript instanceof chunk3OKEUDHU_cjs.DelegateVtxo.Script ? {
|
|
11986
11989
|
...base$1,
|
|
11987
11990
|
type: "delegate",
|
|
11988
11991
|
params: {
|
|
@@ -12003,10 +12006,10 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
12003
12006
|
return { tapscript, params };
|
|
12004
12007
|
}
|
|
12005
12008
|
function rebuildTapscript(current, pubKey) {
|
|
12006
|
-
if (current instanceof
|
|
12007
|
-
return new
|
|
12009
|
+
if (current instanceof chunk3OKEUDHU_cjs.DelegateVtxo.Script) {
|
|
12010
|
+
return new chunk3OKEUDHU_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
|
|
12008
12011
|
}
|
|
12009
|
-
return new
|
|
12012
|
+
return new chunk3OKEUDHU_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
|
|
12010
12013
|
}
|
|
12011
12014
|
async function pickActiveReceive(contractRepository, serverPubKey, expectedType) {
|
|
12012
12015
|
const candidates = await contractRepository.getContracts({
|
|
@@ -12015,7 +12018,7 @@ async function pickActiveReceive(contractRepository, serverPubKey, expectedType)
|
|
|
12015
12018
|
});
|
|
12016
12019
|
const serverPubKeyHex = base.hex.encode(serverPubKey);
|
|
12017
12020
|
const matching = candidates.filter(
|
|
12018
|
-
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source ===
|
|
12021
|
+
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunk3OKEUDHU_cjs.WALLET_RECEIVE_SOURCE
|
|
12019
12022
|
).sort((a, b) => {
|
|
12020
12023
|
if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
|
|
12021
12024
|
return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
|
|
@@ -12071,7 +12074,7 @@ function computeOffchainBalance(vtxos, caps) {
|
|
|
12071
12074
|
}
|
|
12072
12075
|
};
|
|
12073
12076
|
for (const vtxo of vtxos) {
|
|
12074
|
-
if (
|
|
12077
|
+
if (chunk57636V35_cjs.hasTerminalSpend(vtxo)) continue;
|
|
12075
12078
|
addAssets(owned, vtxo);
|
|
12076
12079
|
if (vtxo.isUnrolled) {
|
|
12077
12080
|
unrolled += vtxo.value;
|
|
@@ -12081,11 +12084,11 @@ function computeOffchainBalance(vtxos, caps) {
|
|
|
12081
12084
|
pendingRecovery += vtxo.value;
|
|
12082
12085
|
continue;
|
|
12083
12086
|
}
|
|
12084
|
-
if (
|
|
12087
|
+
if (chunk57636V35_cjs.canRecoverOnchain(vtxo, now)) {
|
|
12085
12088
|
recoverable += vtxo.value;
|
|
12086
12089
|
continue;
|
|
12087
12090
|
}
|
|
12088
|
-
if (!
|
|
12091
|
+
if (!chunk57636V35_cjs.canSpendOffchain(vtxo, now)) continue;
|
|
12089
12092
|
if (vtxo.isPreconfirmed) {
|
|
12090
12093
|
preconfirmed += vtxo.value;
|
|
12091
12094
|
} else {
|
|
@@ -12255,12 +12258,12 @@ var InputSignerRouter = class {
|
|
|
12255
12258
|
};
|
|
12256
12259
|
|
|
12257
12260
|
// src/wallet/wallet.ts
|
|
12258
|
-
var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl ||
|
|
12261
|
+
var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl || chunk57636V35_cjs.DEFAULT_ARKADE_SERVER_URL;
|
|
12259
12262
|
function intentProofJobs(coins) {
|
|
12260
12263
|
if (coins.length === 0) return [];
|
|
12261
12264
|
const coinJobs = coins.map((coin, i) => ({
|
|
12262
12265
|
index: i + 1,
|
|
12263
|
-
lookupScript:
|
|
12266
|
+
lookupScript: chunk57636V35_cjs.VtxoScript.decode(coin.tapTree).pkScript
|
|
12264
12267
|
}));
|
|
12265
12268
|
return [{ index: 0, lookupScript: coinJobs[0].lookupScript }, ...coinJobs];
|
|
12266
12269
|
}
|
|
@@ -12292,7 +12295,7 @@ function dedupeTimelocks(timelocks) {
|
|
|
12292
12295
|
const seen = /* @__PURE__ */ new Set();
|
|
12293
12296
|
const deduped = [];
|
|
12294
12297
|
for (const timelock of timelocks) {
|
|
12295
|
-
const sequence =
|
|
12298
|
+
const sequence = chunk57636V35_cjs.timelockToSequence(timelock).toString();
|
|
12296
12299
|
if (seen.has(sequence)) continue;
|
|
12297
12300
|
seen.add(sequence);
|
|
12298
12301
|
deduped.push(timelock);
|
|
@@ -12309,7 +12312,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
|
|
|
12309
12312
|
state: "active"
|
|
12310
12313
|
});
|
|
12311
12314
|
const newest = candidates.filter(
|
|
12312
|
-
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source ===
|
|
12315
|
+
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunk3OKEUDHU_cjs.WALLET_RECEIVE_SOURCE
|
|
12313
12316
|
).sort((a, b) => {
|
|
12314
12317
|
if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
|
|
12315
12318
|
return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
|
|
@@ -12317,7 +12320,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
|
|
|
12317
12320
|
if (!newest?.params.pubKey) return baseline;
|
|
12318
12321
|
try {
|
|
12319
12322
|
const pubKey = base.hex.decode(newest.params.pubKey);
|
|
12320
|
-
return new
|
|
12323
|
+
return new chunk3OKEUDHU_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
|
|
12321
12324
|
} catch (e) {
|
|
12322
12325
|
console.warn("Skipping malformed boarding contract at boot", newest.script, e);
|
|
12323
12326
|
return baseline;
|
|
@@ -12336,10 +12339,10 @@ function filterSnapshotVtxos(snapshot, filter, pendingSpendOutpoints) {
|
|
|
12336
12339
|
if (vtxo.isUnrolled) {
|
|
12337
12340
|
return !!f.withUnrolled;
|
|
12338
12341
|
}
|
|
12339
|
-
if (
|
|
12342
|
+
if (chunk57636V35_cjs.hasTerminalSpend(vtxo)) {
|
|
12340
12343
|
return false;
|
|
12341
12344
|
}
|
|
12342
|
-
if (!f.withRecoverable &&
|
|
12345
|
+
if (!f.withRecoverable && chunk57636V35_cjs.canRecoverOnchain(vtxo, now)) {
|
|
12343
12346
|
return false;
|
|
12344
12347
|
}
|
|
12345
12348
|
return true;
|
|
@@ -12679,7 +12682,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12679
12682
|
*/
|
|
12680
12683
|
static async setupWalletConfig(config, pubKey) {
|
|
12681
12684
|
const arkadeServerUrl = getArkadeServerUrl(config);
|
|
12682
|
-
const arkProvider = config.arkProvider || new
|
|
12685
|
+
const arkProvider = config.arkProvider || new chunk57636V35_cjs.RestArkProvider(arkadeServerUrl);
|
|
12683
12686
|
let indexerProvider = config.indexerProvider;
|
|
12684
12687
|
if (!indexerProvider) {
|
|
12685
12688
|
let indexerUrl = config.indexerUrl;
|
|
@@ -12696,7 +12699,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12696
12699
|
indexerUrl = arkadeServerUrl;
|
|
12697
12700
|
}
|
|
12698
12701
|
}
|
|
12699
|
-
indexerProvider = new
|
|
12702
|
+
indexerProvider = new chunk3KW4TWP2_cjs.RestIndexerProvider(indexerUrl);
|
|
12700
12703
|
}
|
|
12701
12704
|
const walletRepository = config.storage?.walletRepository ?? new IndexedDBWalletRepository();
|
|
12702
12705
|
const contractRepository = config.storage?.contractRepository ?? new IndexedDBContractRepository();
|
|
@@ -12705,7 +12708,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12705
12708
|
source: serverInfoSource,
|
|
12706
12709
|
lastOnlineAt: serverInfoLastOnlineAt
|
|
12707
12710
|
} = await resolveArkInfo(arkProvider, walletRepository);
|
|
12708
|
-
const network =
|
|
12711
|
+
const network = chunk57636V35_cjs.getNetwork(info.network);
|
|
12709
12712
|
if ("descriptor" in config.identity) {
|
|
12710
12713
|
const descriptor = config.identity.descriptor;
|
|
12711
12714
|
const identityIsMainnet = !descriptor.includes("tpub");
|
|
@@ -12745,18 +12748,18 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12745
12748
|
value: info.boardingExitDelay,
|
|
12746
12749
|
type: info.boardingExitDelay < 512n ? "blocks" : "seconds"
|
|
12747
12750
|
};
|
|
12748
|
-
const serverPubKey =
|
|
12749
|
-
const delegatePubKey = config.delegateProvider ? await config.delegateProvider.getDelegateInfo().then((info2) =>
|
|
12751
|
+
const serverPubKey = chunk3OKEUDHU_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
|
|
12752
|
+
const delegatePubKey = config.delegateProvider ? await config.delegateProvider.getDelegateInfo().then((info2) => chunk3OKEUDHU_cjs.toXOnly(base.hex.decode(info2.pubkey), "delegate key")).catch(() => void 0) : config.delegatorProvider ? await config.delegatorProvider.getDelegateInfo().then((info2) => chunk3OKEUDHU_cjs.toXOnly(base.hex.decode(info2.pubkey), "delegate key")).catch(() => void 0) : void 0;
|
|
12750
12753
|
const offchainOptions = {
|
|
12751
12754
|
pubKey,
|
|
12752
12755
|
serverPubKey,
|
|
12753
12756
|
csvTimelock: exitTimelock
|
|
12754
12757
|
};
|
|
12755
|
-
const offchainTapscript = !delegatePubKey ? new
|
|
12756
|
-
const boardingTapscript =
|
|
12758
|
+
const offchainTapscript = !delegatePubKey ? new chunk3OKEUDHU_cjs.DefaultVtxo.Script(offchainOptions) : new chunk3OKEUDHU_cjs.DelegateVtxo.Script({ ...offchainOptions, delegatePubKey });
|
|
12759
|
+
const boardingTapscript = chunk3OKEUDHU_cjs.BoardingContractHandler.createScript({
|
|
12757
12760
|
pubKey: base.hex.encode(pubKey),
|
|
12758
12761
|
serverPubKey: base.hex.encode(serverPubKey),
|
|
12759
|
-
csvTimelock:
|
|
12762
|
+
csvTimelock: chunk57636V35_cjs.timelockToSequence(boardingTimelock).toString()
|
|
12760
12763
|
});
|
|
12761
12764
|
return {
|
|
12762
12765
|
arkProvider,
|
|
@@ -12922,7 +12925,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12922
12925
|
if (!filter?.withUnrolled) {
|
|
12923
12926
|
logExcludedVtxos(
|
|
12924
12927
|
"getSpendableVtxos",
|
|
12925
|
-
snapshot.flatMap((contract) => contract.vtxos).filter((vtxo) => vtxo.isUnrolled && !
|
|
12928
|
+
snapshot.flatMap((contract) => contract.vtxos).filter((vtxo) => vtxo.isUnrolled && !chunk57636V35_cjs.hasTerminalSpend(vtxo)),
|
|
12926
12929
|
[() => UNROLLED_REASON]
|
|
12927
12930
|
);
|
|
12928
12931
|
}
|
|
@@ -13065,7 +13068,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13065
13068
|
const response = await contractManager.getContractsWithVtxos();
|
|
13066
13069
|
const allVtxos = response.flatMap((_) => _.vtxos);
|
|
13067
13070
|
const { boardingTxs, commitmentsToIgnore } = await this.getBoardingTxs();
|
|
13068
|
-
const resolveTxCreatedAt = (txids) =>
|
|
13071
|
+
const resolveTxCreatedAt = (txids) => chunk57636V35_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
|
|
13069
13072
|
return buildTransactionHistory(
|
|
13070
13073
|
allVtxos,
|
|
13071
13074
|
boardingTxs,
|
|
@@ -13159,7 +13162,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13159
13162
|
},
|
|
13160
13163
|
isUnrolled: true,
|
|
13161
13164
|
...boardingFacts,
|
|
13162
|
-
virtualStatus:
|
|
13165
|
+
virtualStatus: chunk57636V35_cjs.toVirtualStatus(boardingFacts),
|
|
13163
13166
|
spentBy: "",
|
|
13164
13167
|
createdAt: tx.status.confirmed ? new Date(tx.status.block_time * 1e3) : /* @__PURE__ */ new Date(0),
|
|
13165
13168
|
script: scriptHex
|
|
@@ -13215,9 +13218,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13215
13218
|
async getBoardingTapscripts(allowedSigners) {
|
|
13216
13219
|
const byScript = /* @__PURE__ */ new Map();
|
|
13217
13220
|
const add = (s) => byScript.set(base.hex.encode(s.pkScript), s);
|
|
13218
|
-
const boardingCsv = this.boardingTapscript.options.csvTimelock ??
|
|
13221
|
+
const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunk3OKEUDHU_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
13219
13222
|
add(
|
|
13220
|
-
new
|
|
13223
|
+
new chunk3OKEUDHU_cjs.DefaultVtxo.Script({
|
|
13221
13224
|
pubKey: await this.identity.xOnlyPublicKey(),
|
|
13222
13225
|
serverPubKey: this.boardingTapscript.options.serverPubKey,
|
|
13223
13226
|
csvTimelock: boardingCsv
|
|
@@ -13232,7 +13235,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13232
13235
|
for (const c of boardingContracts) {
|
|
13233
13236
|
if (!allowed.has(toXOnlySignerHex(c.params.serverPubKey))) continue;
|
|
13234
13237
|
try {
|
|
13235
|
-
add(
|
|
13238
|
+
add(chunk3OKEUDHU_cjs.BoardingContractHandler.createScript(c.params));
|
|
13236
13239
|
} catch (e) {
|
|
13237
13240
|
console.warn("Skipping malformed boarding contract", c.script, e);
|
|
13238
13241
|
}
|
|
@@ -13270,7 +13273,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13270
13273
|
// Per-row CSV delay decoded from THIS tapscript's exit leaf —
|
|
13271
13274
|
// not the wallet's current boarding timelock, which a signer
|
|
13272
13275
|
// rotation may have changed.
|
|
13273
|
-
csvTimelock:
|
|
13276
|
+
csvTimelock: chunk57636V35_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
|
|
13274
13277
|
coins: utxos
|
|
13275
13278
|
});
|
|
13276
13279
|
}
|
|
@@ -13403,7 +13406,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13403
13406
|
/** Fetch Arkade transaction ids that are still pending final settlement. */
|
|
13404
13407
|
async fetchPendingTxs() {
|
|
13405
13408
|
const scripts = await this.getWalletScripts();
|
|
13406
|
-
const vtxos = await
|
|
13409
|
+
const vtxos = await chunk57636V35_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
|
|
13407
13410
|
return vtxos.filter(
|
|
13408
13411
|
(vtxo) => (vtxo.isSpent || vtxo.isPreconfirmed && !vtxo.isSwept) && vtxo.arkTxId !== void 0
|
|
13409
13412
|
).map((_) => _.arkTxId);
|
|
@@ -13434,7 +13437,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13434
13437
|
});
|
|
13435
13438
|
for (const contract of contracts) {
|
|
13436
13439
|
if (map.has(contract.script)) continue;
|
|
13437
|
-
const handler =
|
|
13440
|
+
const handler = chunk3OKEUDHU_cjs.contractHandlers.get(contract.type);
|
|
13438
13441
|
if (handler) {
|
|
13439
13442
|
const script = handler.createScript(contract.params);
|
|
13440
13443
|
map.set(contract.script, script);
|
|
@@ -13546,7 +13549,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13546
13549
|
}
|
|
13547
13550
|
});
|
|
13548
13551
|
const baselinePubkey = await this.identity.xOnlyPublicKey();
|
|
13549
|
-
const delegatePubKey = this.offchainTapscript instanceof
|
|
13552
|
+
const delegatePubKey = this.offchainTapscript instanceof chunk3OKEUDHU_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
|
|
13550
13553
|
const baselineSigners = [
|
|
13551
13554
|
this.offchainTapscript.options.serverPubKey,
|
|
13552
13555
|
...[...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h))
|
|
@@ -13554,8 +13557,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13554
13557
|
const seenBaselineScripts = /* @__PURE__ */ new Set();
|
|
13555
13558
|
for (const serverPubKey of baselineSigners) {
|
|
13556
13559
|
for (const csvTimelock of this.walletContractTimelocks) {
|
|
13557
|
-
const csvTimelockStr =
|
|
13558
|
-
const defaultScript = new
|
|
13560
|
+
const csvTimelockStr = chunk57636V35_cjs.timelockToSequence(csvTimelock).toString();
|
|
13561
|
+
const defaultScript = new chunk3OKEUDHU_cjs.DefaultVtxo.Script({
|
|
13559
13562
|
pubKey: baselinePubkey,
|
|
13560
13563
|
serverPubKey,
|
|
13561
13564
|
csvTimelock
|
|
@@ -13576,7 +13579,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13576
13579
|
});
|
|
13577
13580
|
}
|
|
13578
13581
|
if (delegatePubKey) {
|
|
13579
|
-
const delegateScript = new
|
|
13582
|
+
const delegateScript = new chunk3OKEUDHU_cjs.DelegateVtxo.Script({
|
|
13580
13583
|
pubKey: baselinePubkey,
|
|
13581
13584
|
serverPubKey,
|
|
13582
13585
|
delegatePubKey,
|
|
@@ -13600,9 +13603,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13600
13603
|
}
|
|
13601
13604
|
}
|
|
13602
13605
|
}
|
|
13603
|
-
const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ??
|
|
13606
|
+
const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunk3OKEUDHU_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
13604
13607
|
for (const serverPubKey of baselineSigners) {
|
|
13605
|
-
const baselineBoarding = new
|
|
13608
|
+
const baselineBoarding = new chunk3OKEUDHU_cjs.DefaultVtxo.Script({
|
|
13606
13609
|
pubKey: baselinePubkey,
|
|
13607
13610
|
serverPubKey,
|
|
13608
13611
|
csvTimelock: boardingCsvTimelock
|
|
@@ -13615,7 +13618,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13615
13618
|
params: {
|
|
13616
13619
|
pubKey: base.hex.encode(baselineBoarding.options.pubKey),
|
|
13617
13620
|
serverPubKey: base.hex.encode(serverPubKey),
|
|
13618
|
-
csvTimelock:
|
|
13621
|
+
csvTimelock: chunk57636V35_cjs.timelockToSequence(boardingCsvTimelock).toString()
|
|
13619
13622
|
},
|
|
13620
13623
|
script: boardingScriptHex,
|
|
13621
13624
|
address: baselineBoarding.address(this.network.hrp, serverPubKey).encode(),
|
|
@@ -13815,7 +13818,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13815
13818
|
serverPubKey: this.offchainTapscript.options.serverPubKey,
|
|
13816
13819
|
deprecatedSignerPubKeys: [...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h)),
|
|
13817
13820
|
csvTimelocks: this.walletContractTimelocks,
|
|
13818
|
-
delegatePubKey: this.offchainTapscript instanceof
|
|
13821
|
+
delegatePubKey: this.offchainTapscript instanceof chunk3OKEUDHU_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
|
|
13819
13822
|
};
|
|
13820
13823
|
}
|
|
13821
13824
|
_signerRouter;
|
|
@@ -14060,7 +14063,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14060
14063
|
const [row] = await manager.getContracts({ script: base.hex.encode(display.pkScript) });
|
|
14061
14064
|
const persisted = row?.metadata?.signingDescriptor;
|
|
14062
14065
|
if (typeof persisted === "string") return persisted;
|
|
14063
|
-
return
|
|
14066
|
+
return chunk3OKEUDHU_cjs.identityDescriptor(this.identity);
|
|
14064
14067
|
}
|
|
14065
14068
|
/**
|
|
14066
14069
|
* Build, persist and shape one address of `type` owned by `descriptor` —
|
|
@@ -14076,7 +14079,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14076
14079
|
async mintAddress(manager, type, descriptor, tagSource, allocated) {
|
|
14077
14080
|
if (type === "boarding") {
|
|
14078
14081
|
const built2 = this.buildBoardingContract(
|
|
14079
|
-
|
|
14082
|
+
chunk3OKEUDHU_cjs.deriveDescriptorLeafPubKey(descriptor),
|
|
14080
14083
|
descriptor,
|
|
14081
14084
|
tagSource
|
|
14082
14085
|
);
|
|
@@ -14121,11 +14124,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14121
14124
|
* {@link buildReceiveContract}.
|
|
14122
14125
|
*/
|
|
14123
14126
|
buildBoardingContract(pubKey, descriptor, tagSource) {
|
|
14124
|
-
const tapscript = new
|
|
14127
|
+
const tapscript = new chunk3OKEUDHU_cjs.DefaultVtxo.Script({
|
|
14125
14128
|
...this._boardingTapscript.options,
|
|
14126
14129
|
pubKey
|
|
14127
14130
|
});
|
|
14128
|
-
const csvTimelock = tapscript.options.csvTimelock ??
|
|
14131
|
+
const csvTimelock = tapscript.options.csvTimelock ?? chunk3OKEUDHU_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
14129
14132
|
return {
|
|
14130
14133
|
tapscript,
|
|
14131
14134
|
params: {
|
|
@@ -14133,13 +14136,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14133
14136
|
params: {
|
|
14134
14137
|
pubKey: base.hex.encode(pubKey),
|
|
14135
14138
|
serverPubKey: base.hex.encode(tapscript.options.serverPubKey),
|
|
14136
|
-
csvTimelock:
|
|
14139
|
+
csvTimelock: chunk57636V35_cjs.timelockToSequence(csvTimelock).toString()
|
|
14137
14140
|
},
|
|
14138
14141
|
script: base.hex.encode(tapscript.pkScript),
|
|
14139
14142
|
address: tapscript.address(this.network.hrp, this.arkServerPublicKey).encode(),
|
|
14140
14143
|
state: "active",
|
|
14141
14144
|
metadata: {
|
|
14142
|
-
...tagSource && { source:
|
|
14145
|
+
...tagSource && { source: chunk3OKEUDHU_cjs.WALLET_RECEIVE_SOURCE },
|
|
14143
14146
|
signingDescriptor: descriptor
|
|
14144
14147
|
}
|
|
14145
14148
|
}
|
|
@@ -14168,7 +14171,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14168
14171
|
if (this._descriptorProvider instanceof HDDescriptorProvider) {
|
|
14169
14172
|
return (await this.getContractManager()).getNextSigningDescriptor();
|
|
14170
14173
|
}
|
|
14171
|
-
return
|
|
14174
|
+
return chunk3OKEUDHU_cjs.identityDescriptor(this.identity);
|
|
14172
14175
|
}
|
|
14173
14176
|
/**
|
|
14174
14177
|
* @see HDAllocationCapable.advanceSigningDescriptorWatermark
|
|
@@ -14264,7 +14267,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14264
14267
|
* the stable public API.
|
|
14265
14268
|
*/
|
|
14266
14269
|
async rotateServerSigner(newServerPubKey, checkpointTapscript) {
|
|
14267
|
-
const xonly =
|
|
14270
|
+
const xonly = chunk3OKEUDHU_cjs.toXOnly(newServerPubKey, "ark signer key");
|
|
14268
14271
|
const newServerUnrollScript = assertValidServerUnrollScript(
|
|
14269
14272
|
checkpointTapscript,
|
|
14270
14273
|
resolveCheckpointExitDelayPolicy(this.network, this.checkpointExitDelayPolicy)
|
|
@@ -14293,21 +14296,21 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14293
14296
|
const [currentBoardingRow] = await manager.getContracts({
|
|
14294
14297
|
script: currentBoardingScript
|
|
14295
14298
|
});
|
|
14296
|
-
const newOffchain = this.offchainTapscript instanceof
|
|
14299
|
+
const newOffchain = this.offchainTapscript instanceof chunk3OKEUDHU_cjs.DelegateVtxo.Script ? new chunk3OKEUDHU_cjs.DelegateVtxo.Script({
|
|
14297
14300
|
...this.offchainTapscript.options,
|
|
14298
14301
|
serverPubKey: xonly
|
|
14299
|
-
}) : new
|
|
14302
|
+
}) : new chunk3OKEUDHU_cjs.DefaultVtxo.Script({
|
|
14300
14303
|
...this.offchainTapscript.options,
|
|
14301
14304
|
serverPubKey: xonly
|
|
14302
14305
|
});
|
|
14303
|
-
const newBoarding = new
|
|
14306
|
+
const newBoarding = new chunk3OKEUDHU_cjs.DefaultVtxo.Script({
|
|
14304
14307
|
...this._boardingTapscript.options,
|
|
14305
14308
|
serverPubKey: xonly
|
|
14306
14309
|
});
|
|
14307
|
-
const offchainCsv =
|
|
14310
|
+
const offchainCsv = chunk57636V35_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
|
|
14308
14311
|
const newOffchainScript = base.hex.encode(newOffchain.pkScript);
|
|
14309
14312
|
const newOffchainAddress = newOffchain.address(this.network.hrp, xonly).encode();
|
|
14310
|
-
if (newOffchain instanceof
|
|
14313
|
+
if (newOffchain instanceof chunk3OKEUDHU_cjs.DelegateVtxo.Script) {
|
|
14311
14314
|
await manager.createContract({
|
|
14312
14315
|
type: "delegate",
|
|
14313
14316
|
params: {
|
|
@@ -14335,13 +14338,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14335
14338
|
metadata: currentOffchainRow?.metadata
|
|
14336
14339
|
});
|
|
14337
14340
|
}
|
|
14338
|
-
const boardingCsv = newBoarding.options.csvTimelock ??
|
|
14341
|
+
const boardingCsv = newBoarding.options.csvTimelock ?? chunk3OKEUDHU_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
14339
14342
|
await manager.createContract({
|
|
14340
14343
|
type: "boarding",
|
|
14341
14344
|
params: {
|
|
14342
14345
|
pubKey: base.hex.encode(newBoarding.options.pubKey),
|
|
14343
14346
|
serverPubKey: base.hex.encode(xonly),
|
|
14344
|
-
csvTimelock:
|
|
14347
|
+
csvTimelock: chunk57636V35_cjs.timelockToSequence(boardingCsv).toString()
|
|
14345
14348
|
},
|
|
14346
14349
|
script: base.hex.encode(newBoarding.pkScript),
|
|
14347
14350
|
address: newBoarding.address(this.network.hrp, xonly).encode(),
|
|
@@ -14374,14 +14377,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14374
14377
|
_restoreInFlight;
|
|
14375
14378
|
_addPendingSpends(inputs) {
|
|
14376
14379
|
for (const input of inputs) {
|
|
14377
|
-
if (
|
|
14380
|
+
if (chunk57636V35_cjs.isVirtualCoin(input)) {
|
|
14378
14381
|
this._pendingSpendOutpoints.add(`${input.txid}:${input.vout}`);
|
|
14379
14382
|
}
|
|
14380
14383
|
}
|
|
14381
14384
|
}
|
|
14382
14385
|
_removePendingSpends(inputs) {
|
|
14383
14386
|
for (const input of inputs) {
|
|
14384
|
-
if (
|
|
14387
|
+
if (chunk57636V35_cjs.isVirtualCoin(input)) {
|
|
14385
14388
|
this._pendingSpendOutpoints.delete(`${input.txid}:${input.vout}`);
|
|
14386
14389
|
}
|
|
14387
14390
|
}
|
|
@@ -14439,13 +14442,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14439
14442
|
const manager = await this.getContractManager();
|
|
14440
14443
|
const provider = this._descriptorProvider;
|
|
14441
14444
|
const hd = provider instanceof HDDescriptorProvider;
|
|
14442
|
-
const staticDescriptor = hd ? void 0 : await
|
|
14445
|
+
const staticDescriptor = hd ? void 0 : await chunk3OKEUDHU_cjs.identityDescriptor(this.identity);
|
|
14443
14446
|
const materialize = (index) => hd ? provider.materializeDescriptorAt(index) : staticDescriptor;
|
|
14444
|
-
const delegatePubKey = this.offchainTapscript instanceof
|
|
14447
|
+
const delegatePubKey = this.offchainTapscript instanceof chunk3OKEUDHU_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
|
|
14445
14448
|
const arkInfo = await this.arkProvider.getInfo();
|
|
14446
|
-
const currentSignerPubKey =
|
|
14449
|
+
const currentSignerPubKey = chunk3OKEUDHU_cjs.toXOnly(base.hex.decode(arkInfo.signerPubkey), "ark signer key");
|
|
14447
14450
|
const deprecatedSignerPubKeys = arkInfo.deprecatedSigners.map(
|
|
14448
|
-
(s) =>
|
|
14451
|
+
(s) => chunk3OKEUDHU_cjs.toXOnly(base.hex.decode(s.pubkey), "deprecated signer key")
|
|
14449
14452
|
);
|
|
14450
14453
|
const deps = {
|
|
14451
14454
|
indexerProvider: this.indexerProvider,
|
|
@@ -14460,7 +14463,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14460
14463
|
csvTimelocks: this.walletContractTimelocks,
|
|
14461
14464
|
// Boarding-exit CSV so the boarding handler can build its
|
|
14462
14465
|
// candidate script (distinct from the unilateral-exit matrix).
|
|
14463
|
-
boardingTimelock: this.boardingTapscript.options.csvTimelock ??
|
|
14466
|
+
boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunk3OKEUDHU_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
|
|
14464
14467
|
delegatePubKey
|
|
14465
14468
|
};
|
|
14466
14469
|
const result = await manager.scanContracts({
|
|
@@ -14574,7 +14577,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14574
14577
|
throw new Error("Invalid configured public key");
|
|
14575
14578
|
}
|
|
14576
14579
|
const setup = await ReadonlyWallet.setupWalletConfig(config, pubkey);
|
|
14577
|
-
const forfeitPubkey =
|
|
14580
|
+
const forfeitPubkey = chunk3OKEUDHU_cjs.toXOnly(base.hex.decode(setup.info.forfeitPubkey), "forfeit key");
|
|
14578
14581
|
const forfeitAddress = btcSigner.Address(setup.network).decode(setup.info.forfeitAddress);
|
|
14579
14582
|
const forfeitOutputScript = btcSigner.OutScript.encode(forfeitAddress);
|
|
14580
14583
|
const checkpointExitDelayOverrides = {
|
|
@@ -14723,7 +14726,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14723
14726
|
inputs: params.selectedVtxos,
|
|
14724
14727
|
changeAmount: BigInt(changeAmount)
|
|
14725
14728
|
};
|
|
14726
|
-
const outputAddress =
|
|
14729
|
+
const outputAddress = chunk57636V35_cjs.ArkAddress.decode(params.address);
|
|
14727
14730
|
assertRecipientArkAddress(
|
|
14728
14731
|
params.address,
|
|
14729
14732
|
outputAddress,
|
|
@@ -14789,13 +14792,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14789
14792
|
void this.logUngatedInputs("settle({ inputs })", params.inputs);
|
|
14790
14793
|
}
|
|
14791
14794
|
const offchainAddress = await this.getAddress();
|
|
14792
|
-
const offchainPkScript =
|
|
14795
|
+
const offchainPkScript = chunk57636V35_cjs.ArkAddress.decode(offchainAddress).pkScript;
|
|
14793
14796
|
const offchainOutputScript = base.hex.encode(offchainPkScript);
|
|
14794
14797
|
if (!params) {
|
|
14795
14798
|
const { fees, vtxoMaxAmount } = await this.arkProvider.getInfo();
|
|
14796
14799
|
const estimator = new Estimator(fees.intentFee);
|
|
14797
14800
|
let amount = 0;
|
|
14798
|
-
const exitScript =
|
|
14801
|
+
const exitScript = chunk57636V35_cjs.CSVMultisigTapscript.decode(
|
|
14799
14802
|
base.hex.decode(this.boardingTapscript.exitScript)
|
|
14800
14803
|
);
|
|
14801
14804
|
const boardingTimelock = exitScript.params.timelock;
|
|
@@ -14824,7 +14827,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14824
14827
|
if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
|
|
14825
14828
|
break;
|
|
14826
14829
|
}
|
|
14827
|
-
const inputFee = estimator.evalOffchainInput(
|
|
14830
|
+
const inputFee = estimator.evalOffchainInput(chunk57636V35_cjs.toOffchainInputFeeParams(vtxo));
|
|
14828
14831
|
if (inputFee.satoshis >= vtxo.value) {
|
|
14829
14832
|
continue;
|
|
14830
14833
|
}
|
|
@@ -14871,7 +14874,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14871
14874
|
let script;
|
|
14872
14875
|
let arkAddress;
|
|
14873
14876
|
try {
|
|
14874
|
-
arkAddress =
|
|
14877
|
+
arkAddress = chunk57636V35_cjs.ArkAddress.decode(output.address);
|
|
14875
14878
|
} catch {
|
|
14876
14879
|
arkAddress = void 0;
|
|
14877
14880
|
}
|
|
@@ -14961,7 +14964,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14961
14964
|
const abortController = new AbortController();
|
|
14962
14965
|
let stream;
|
|
14963
14966
|
let committedTxid;
|
|
14964
|
-
const settleInputVtxos = params.inputs.filter(
|
|
14967
|
+
const settleInputVtxos = params.inputs.filter(chunk57636V35_cjs.isVirtualCoin);
|
|
14965
14968
|
const contractManager = await this.getContractManager();
|
|
14966
14969
|
await contractManager.assertAnnotatable(settleInputVtxos);
|
|
14967
14970
|
await contractManager.assertSpendableNow?.(
|
|
@@ -15073,7 +15076,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15073
15076
|
async maybeRotateBoardingAfterBoard(inputs) {
|
|
15074
15077
|
if (!this._descriptorProvider) return;
|
|
15075
15078
|
const consumedBoarding = inputs.some(
|
|
15076
|
-
(input) => typeof input !== "string" && !
|
|
15079
|
+
(input) => typeof input !== "string" && !chunk57636V35_cjs.isVirtualCoin(input)
|
|
15077
15080
|
);
|
|
15078
15081
|
if (!consumedBoarding) return;
|
|
15079
15082
|
try {
|
|
@@ -15097,7 +15100,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15097
15100
|
let connectorIndex = 0;
|
|
15098
15101
|
const connectorsLeaves = connectorsGraph?.leaves() || [];
|
|
15099
15102
|
for (const input of inputs) {
|
|
15100
|
-
if (!
|
|
15103
|
+
if (!chunk57636V35_cjs.isVirtualCoin(input)) {
|
|
15101
15104
|
for (let i = 0; i < settlementPsbt.inputsLength; i++) {
|
|
15102
15105
|
const settlementInput = settlementPsbt.getInput(i);
|
|
15103
15106
|
if (!settlementInput.txid || settlementInput.index === void 0) {
|
|
@@ -15128,7 +15131,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15128
15131
|
}
|
|
15129
15132
|
continue;
|
|
15130
15133
|
}
|
|
15131
|
-
if (
|
|
15134
|
+
if (chunk57636V35_cjs.canRecoverOnchain(input, { timestamp: /* @__PURE__ */ new Date() }) || isSubdust({ value: input.value }, this.dustAmount)) {
|
|
15132
15135
|
continue;
|
|
15133
15136
|
}
|
|
15134
15137
|
if (connectorsLeaves.length === 0) {
|
|
@@ -15156,7 +15159,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15156
15159
|
index: input.vout,
|
|
15157
15160
|
witnessUtxo: {
|
|
15158
15161
|
amount: BigInt(input.value),
|
|
15159
|
-
script:
|
|
15162
|
+
script: chunk57636V35_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
15160
15163
|
},
|
|
15161
15164
|
sighashType: btcSigner.SigHash.DEFAULT,
|
|
15162
15165
|
tapLeafScript: [input.forfeitTapLeafScript]
|
|
@@ -15175,7 +15178,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15175
15178
|
forfeitTx = await this._signerRouter.sign(forfeitTx, [
|
|
15176
15179
|
{
|
|
15177
15180
|
index: 0,
|
|
15178
|
-
lookupScript:
|
|
15181
|
+
lookupScript: chunk57636V35_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
15179
15182
|
}
|
|
15180
15183
|
]);
|
|
15181
15184
|
signedForfeits.push(base.base64.encode(forfeitTx.toPSBT()));
|
|
@@ -15233,7 +15236,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15233
15236
|
resolveBatchExpiryPolicy(this.network, this.batchExpiryPolicy)
|
|
15234
15237
|
);
|
|
15235
15238
|
await this.arkProvider.confirmRegistration(intentId);
|
|
15236
|
-
const sweepTapscript =
|
|
15239
|
+
const sweepTapscript = chunk57636V35_cjs.CSVMultisigTapscript.encode({
|
|
15237
15240
|
timelock,
|
|
15238
15241
|
pubkeys: [this.forfeitPubkey]
|
|
15239
15242
|
}).script;
|
|
@@ -15248,10 +15251,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15248
15251
|
throw new Error("Sweep tap tree root not set");
|
|
15249
15252
|
}
|
|
15250
15253
|
const xOnlyPublicKeys = event.cosignersPublicKeys.map(
|
|
15251
|
-
(k) => base.hex.encode(
|
|
15254
|
+
(k) => base.hex.encode(chunk3OKEUDHU_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
|
|
15252
15255
|
);
|
|
15253
15256
|
const signerPublicKey = await session.getPublicKey();
|
|
15254
|
-
const xonlySignerPublicKey =
|
|
15257
|
+
const xonlySignerPublicKey = chunk3OKEUDHU_cjs.toXOnly(signerPublicKey, "signer key");
|
|
15255
15258
|
if (!xOnlyPublicKeys.includes(base.hex.encode(xonlySignerPublicKey))) {
|
|
15256
15259
|
return { skip: true };
|
|
15257
15260
|
}
|
|
@@ -15341,9 +15344,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15341
15344
|
...existing ?? {},
|
|
15342
15345
|
intentTxId,
|
|
15343
15346
|
registerProof: intent.proof,
|
|
15344
|
-
registerProofMessage:
|
|
15347
|
+
registerProofMessage: chunk57636V35_cjs.Intent.encodeMessage(intent.message),
|
|
15345
15348
|
deleteProof: deleteIntent.proof,
|
|
15346
|
-
deleteProofMessage:
|
|
15349
|
+
deleteProofMessage: chunk57636V35_cjs.Intent.encodeMessage(deleteIntent.message),
|
|
15347
15350
|
intentVtxos: inputs.map((i) => ({
|
|
15348
15351
|
txid: i.txid,
|
|
15349
15352
|
vout: i.vout
|
|
@@ -15375,7 +15378,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15375
15378
|
try {
|
|
15376
15379
|
return await this.arkProvider.registerIntent(intent);
|
|
15377
15380
|
} catch (error) {
|
|
15378
|
-
if (error instanceof
|
|
15381
|
+
if (error instanceof chunk57636V35_cjs.ArkError && error.code === 0 && error.message.includes("duplicated input")) {
|
|
15379
15382
|
const deleteIntent = await this.makeDeleteIntentSignature(inputs);
|
|
15380
15383
|
await this.arkProvider.deleteIntent(deleteIntent);
|
|
15381
15384
|
return this.arkProvider.registerIntent(intent);
|
|
@@ -15391,7 +15394,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15391
15394
|
expire_at: 0,
|
|
15392
15395
|
cosigners_public_keys: cosignerPubKeys
|
|
15393
15396
|
};
|
|
15394
|
-
const proof =
|
|
15397
|
+
const proof = chunk57636V35_cjs.Intent.create(message, coins, outputs);
|
|
15395
15398
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
15396
15399
|
return {
|
|
15397
15400
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -15403,7 +15406,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15403
15406
|
type: "delete",
|
|
15404
15407
|
expire_at: 0
|
|
15405
15408
|
};
|
|
15406
|
-
const proof =
|
|
15409
|
+
const proof = chunk57636V35_cjs.Intent.create(message, coins, []);
|
|
15407
15410
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
15408
15411
|
return {
|
|
15409
15412
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -15415,7 +15418,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15415
15418
|
type: "get-pending-tx",
|
|
15416
15419
|
expire_at: 0
|
|
15417
15420
|
};
|
|
15418
|
-
const proof =
|
|
15421
|
+
const proof = chunk57636V35_cjs.Intent.create(message, coins, []);
|
|
15419
15422
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
15420
15423
|
return {
|
|
15421
15424
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -15436,7 +15439,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15436
15439
|
if (!vtxos || vtxos.length === 0) {
|
|
15437
15440
|
const scriptMap = await this.getScriptMap();
|
|
15438
15441
|
const allExtended = [];
|
|
15439
|
-
const fetchedVtxos = await
|
|
15442
|
+
const fetchedVtxos = await chunk57636V35_cjs.getAllNormalizedVtxos(this.indexerProvider, [
|
|
15440
15443
|
...scriptMap.keys()
|
|
15441
15444
|
]);
|
|
15442
15445
|
for (const vtxo of fetchedVtxos) {
|
|
@@ -15480,7 +15483,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15480
15483
|
try {
|
|
15481
15484
|
const checkpointTxs = pendingTx.signedCheckpointTxs.map((c) => {
|
|
15482
15485
|
const tx = btcSigner.Transaction.fromPSBT(base.base64.decode(c));
|
|
15483
|
-
|
|
15486
|
+
chunk57636V35_cjs.assertAllowedSighashTypes(tx);
|
|
15484
15487
|
return tx;
|
|
15485
15488
|
});
|
|
15486
15489
|
assertCheckpointsMatchInputs(
|
|
@@ -15552,11 +15555,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15552
15555
|
* against the current key alone would leave it pending forever.
|
|
15553
15556
|
*/
|
|
15554
15557
|
checkpointUnrollCandidates(info) {
|
|
15555
|
-
const current =
|
|
15558
|
+
const current = chunk57636V35_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
|
|
15556
15559
|
const candidates = [this._serverUnrollScript, current];
|
|
15557
15560
|
for (const deprecated of signerSetFromInfo(info).deprecated.keys()) {
|
|
15558
15561
|
candidates.push(
|
|
15559
|
-
|
|
15562
|
+
chunk57636V35_cjs.CSVMultisigTapscript.encode({
|
|
15560
15563
|
...current.params,
|
|
15561
15564
|
pubkeys: [base.hex.decode(deprecated)]
|
|
15562
15565
|
})
|
|
@@ -15647,7 +15650,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15647
15650
|
if (vtxos.length === 0) {
|
|
15648
15651
|
throw new Error("No VTXOs found for this arkadeCash");
|
|
15649
15652
|
}
|
|
15650
|
-
const myPkScript =
|
|
15653
|
+
const myPkScript = chunk57636V35_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
|
|
15651
15654
|
let { spendable, unclaimed } = this.classifyCashVtxos(vtxos);
|
|
15652
15655
|
let swept = 0;
|
|
15653
15656
|
const drainable = vtxos.filter(
|
|
@@ -15723,7 +15726,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15723
15726
|
const spendable = [];
|
|
15724
15727
|
const unclaimed = [];
|
|
15725
15728
|
for (const vtxo of vtxos) {
|
|
15726
|
-
if (
|
|
15729
|
+
if (chunk57636V35_cjs.hasTerminalSpend(vtxo)) {
|
|
15727
15730
|
unclaimed.push(cashReport(vtxo, "already-spent"));
|
|
15728
15731
|
} else if (vtxo.isUnrolled) {
|
|
15729
15732
|
unclaimed.push(cashReport(vtxo, "exited"));
|
|
@@ -15745,7 +15748,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15745
15748
|
const all = [];
|
|
15746
15749
|
const seen = /* @__PURE__ */ new Set();
|
|
15747
15750
|
for (let pageIndex = 0; ; pageIndex++) {
|
|
15748
|
-
const { vtxos, page } = await
|
|
15751
|
+
const { vtxos, page } = await chunk57636V35_cjs.getNormalizedVtxos(this.indexerProvider, {
|
|
15749
15752
|
scripts,
|
|
15750
15753
|
pageIndex,
|
|
15751
15754
|
pageSize
|
|
@@ -15792,7 +15795,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15792
15795
|
for (let i = 0; i < inputs.length; i += MAX_INPUTS_PER_INTENT) {
|
|
15793
15796
|
const batch = inputs.slice(i, i + MAX_INPUTS_PER_INTENT);
|
|
15794
15797
|
const message = { type: "get-pending-tx", expire_at: 0 };
|
|
15795
|
-
const proof =
|
|
15798
|
+
const proof = chunk57636V35_cjs.Intent.create(message, batch, []);
|
|
15796
15799
|
const signedProof = await identity.sign(
|
|
15797
15800
|
proof,
|
|
15798
15801
|
Array.from({ length: batch.length + 1 }, (_, j) => j)
|
|
@@ -15814,7 +15817,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15814
15817
|
try {
|
|
15815
15818
|
const checkpointTxs = pendingTx.signedCheckpointTxs.map((checkpoint) => {
|
|
15816
15819
|
const tx = btcSigner.Transaction.fromPSBT(base.base64.decode(checkpoint));
|
|
15817
|
-
|
|
15820
|
+
chunk57636V35_cjs.assertAllowedSighashTypes(tx);
|
|
15818
15821
|
return tx;
|
|
15819
15822
|
});
|
|
15820
15823
|
assertCheckpointsMatchInputs(
|
|
@@ -16013,7 +16016,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16013
16016
|
script: recipient.script,
|
|
16014
16017
|
amount: BigInt(recipient.amount),
|
|
16015
16018
|
// Already checked against the recipient address in `validateRecipients`.
|
|
16016
|
-
...recipient.tapTree ? { tapTree:
|
|
16019
|
+
...recipient.tapTree ? { tapTree: chunk57636V35_cjs.TapTreeCoder.decode(recipient.tapTree) } : {}
|
|
16017
16020
|
}));
|
|
16018
16021
|
const totalBtcOutput = outputs.reduce((sum, o) => sum + Number(o.amount), 0);
|
|
16019
16022
|
let changeAmount = totalBtcSelected - totalBtcOutput;
|
|
@@ -16157,10 +16160,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16157
16160
|
const serverPubKey = this.arkServerPublicKey;
|
|
16158
16161
|
const serverUnrollScript = this.serverUnrollScript;
|
|
16159
16162
|
const arkAddress = offchainTapscript.address(this.network.hrp, serverPubKey);
|
|
16160
|
-
const normalizedInputs = inputs.map(
|
|
16161
|
-
const at = now ?? await
|
|
16163
|
+
const normalizedInputs = inputs.map(chunk57636V35_cjs.normalizeVtxo);
|
|
16164
|
+
const at = now ?? await chunk57636V35_cjs.resolveTimeHeight(this.onchainProvider);
|
|
16162
16165
|
for (const input of normalizedInputs) {
|
|
16163
|
-
if (!
|
|
16166
|
+
if (!chunk57636V35_cjs.canSpendOffchain(input, at)) {
|
|
16164
16167
|
throw new Error(
|
|
16165
16168
|
`sendSelectedVtxosToSelf: input ${input.txid}:${input.vout} is not cooperatively spendable`
|
|
16166
16169
|
);
|
|
@@ -16230,7 +16233,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16230
16233
|
);
|
|
16231
16234
|
const arkTxJobs = inputs.map((input, index) => ({
|
|
16232
16235
|
index,
|
|
16233
|
-
lookupScript:
|
|
16236
|
+
lookupScript: chunk57636V35_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
16234
16237
|
}));
|
|
16235
16238
|
const identity = this.identity;
|
|
16236
16239
|
const signer = {
|
|
@@ -16316,14 +16319,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16316
16319
|
const spentBy = checkpointIdByOutpoint.get(`${vtxo.txid}:${vtxo.vout}`);
|
|
16317
16320
|
spentVtxos.push({
|
|
16318
16321
|
...spentFacts,
|
|
16319
|
-
virtualStatus:
|
|
16322
|
+
virtualStatus: chunk57636V35_cjs.toVirtualStatus(spentFacts),
|
|
16320
16323
|
...spentBy ? { spentBy } : {},
|
|
16321
16324
|
arkTxId: arkTxid
|
|
16322
16325
|
});
|
|
16323
16326
|
for (const id of vtxo.commitmentTxIds) {
|
|
16324
16327
|
commitmentTxIds.add(id);
|
|
16325
16328
|
}
|
|
16326
|
-
const vtxoExpiry =
|
|
16329
|
+
const vtxoExpiry = chunk57636V35_cjs.toBatchExpiry(vtxo);
|
|
16327
16330
|
if (vtxoExpiry) {
|
|
16328
16331
|
batchExpiry = Math.min(batchExpiry, vtxoExpiry);
|
|
16329
16332
|
}
|
|
@@ -16336,7 +16339,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16336
16339
|
isSwept: false,
|
|
16337
16340
|
isPreconfirmed: true,
|
|
16338
16341
|
commitmentTxIds: Array.from(commitmentTxIds),
|
|
16339
|
-
...
|
|
16342
|
+
...chunk57636V35_cjs.parseLegacyExpiry(batchExpiry)
|
|
16340
16343
|
};
|
|
16341
16344
|
changeVtxo = {
|
|
16342
16345
|
txid: arkTxid,
|
|
@@ -16348,7 +16351,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16348
16351
|
tapTree: offchainTapscript.encode(),
|
|
16349
16352
|
value: Number(changeAmount),
|
|
16350
16353
|
...changeFacts,
|
|
16351
|
-
virtualStatus:
|
|
16354
|
+
virtualStatus: chunk57636V35_cjs.toVirtualStatus(changeFacts),
|
|
16352
16355
|
spentBy: "",
|
|
16353
16356
|
status: {
|
|
16354
16357
|
confirmed: false
|
|
@@ -16417,12 +16420,12 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16417
16420
|
const spentVtxos = [];
|
|
16418
16421
|
const inputArkTxIds = /* @__PURE__ */ new Set();
|
|
16419
16422
|
const boardingRemovalsByAddress = /* @__PURE__ */ new Map();
|
|
16420
|
-
const vtxoInputs = inputs.filter(
|
|
16423
|
+
const vtxoInputs = inputs.filter(chunk57636V35_cjs.isVirtualCoin);
|
|
16421
16424
|
const cm = await this.getContractManager();
|
|
16422
16425
|
const annotatedVtxos = await cm.annotateVtxos(vtxoInputs);
|
|
16423
16426
|
const annotatedByKey = new Map(annotatedVtxos.map((v) => [`${v.txid}:${v.vout}`, v]));
|
|
16424
16427
|
for (const input of inputs) {
|
|
16425
|
-
if (
|
|
16428
|
+
if (chunk57636V35_cjs.isVirtualCoin(input)) {
|
|
16426
16429
|
const outpoint = `${input.txid}:${input.vout}`;
|
|
16427
16430
|
const vtxo = annotatedByKey.get(outpoint);
|
|
16428
16431
|
if (!vtxo) {
|
|
@@ -16434,13 +16437,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16434
16437
|
const settledFacts = { ...vtxo, isSpent: true };
|
|
16435
16438
|
spentVtxos.push({
|
|
16436
16439
|
...settledFacts,
|
|
16437
|
-
virtualStatus:
|
|
16440
|
+
virtualStatus: chunk57636V35_cjs.toVirtualStatus(settledFacts),
|
|
16438
16441
|
settledBy: commitmentTxid
|
|
16439
16442
|
});
|
|
16440
16443
|
} else {
|
|
16441
16444
|
let sourceAddress;
|
|
16442
16445
|
try {
|
|
16443
|
-
sourceAddress =
|
|
16446
|
+
sourceAddress = chunk57636V35_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
|
|
16444
16447
|
this.network
|
|
16445
16448
|
);
|
|
16446
16449
|
} catch {
|
|
@@ -16498,9 +16501,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16498
16501
|
}
|
|
16499
16502
|
};
|
|
16500
16503
|
function selectVirtualCoins(coins, targetAmount) {
|
|
16501
|
-
const sortedCoins = coins.map(
|
|
16502
|
-
const expiryA =
|
|
16503
|
-
const expiryB =
|
|
16504
|
+
const sortedCoins = coins.map(chunk57636V35_cjs.normalizeVtxo).sort((a, b) => {
|
|
16505
|
+
const expiryA = chunk57636V35_cjs.toBatchExpiry(a) || Number.MAX_SAFE_INTEGER;
|
|
16506
|
+
const expiryB = chunk57636V35_cjs.toBatchExpiry(b) || Number.MAX_SAFE_INTEGER;
|
|
16504
16507
|
if (expiryA !== expiryB) {
|
|
16505
16508
|
return expiryA - expiryB;
|
|
16506
16509
|
}
|
|
@@ -16869,7 +16872,7 @@ var MessageBus = class {
|
|
|
16869
16872
|
this.initialized = true;
|
|
16870
16873
|
}
|
|
16871
16874
|
async buildServices(config) {
|
|
16872
|
-
const arkProvider = new
|
|
16875
|
+
const arkProvider = new chunk57636V35_cjs.RestArkProvider(config.arkServer.url);
|
|
16873
16876
|
const storage = {
|
|
16874
16877
|
walletRepository: this.walletRepository,
|
|
16875
16878
|
contractRepository: this.contractRepository,
|
|
@@ -17211,7 +17214,7 @@ var offboardNetworkNames = [
|
|
|
17211
17214
|
function offboardDestinationScript(destinationAddress) {
|
|
17212
17215
|
for (const networkName of offboardNetworkNames) {
|
|
17213
17216
|
try {
|
|
17214
|
-
const network =
|
|
17217
|
+
const network = chunk57636V35_cjs.networks[networkName];
|
|
17215
17218
|
const addr = btcSigner.Address(network).decode(destinationAddress);
|
|
17216
17219
|
return btcSigner.OutScript.encode(addr);
|
|
17217
17220
|
} catch {
|
|
@@ -17275,7 +17278,7 @@ var Ramps = class {
|
|
|
17275
17278
|
}
|
|
17276
17279
|
amount = amount ?? totalAmount;
|
|
17277
17280
|
const offchainAddress = await this.wallet.getAddress();
|
|
17278
|
-
const offchainAddr =
|
|
17281
|
+
const offchainAddr = chunk57636V35_cjs.ArkAddress.decode(offchainAddress);
|
|
17279
17282
|
const offchainScript = base.hex.encode(offchainAddr.pkScript);
|
|
17280
17283
|
const outputFee = estimator.evalOffchainOutput({
|
|
17281
17284
|
amount,
|
|
@@ -17335,7 +17338,7 @@ var Ramps = class {
|
|
|
17335
17338
|
const filteredVtxos = [];
|
|
17336
17339
|
let totalAmount = 0n;
|
|
17337
17340
|
for (const vtxo of vtxos) {
|
|
17338
|
-
const inputFee = estimator.evalOffchainInput(
|
|
17341
|
+
const inputFee = estimator.evalOffchainInput(chunk57636V35_cjs.toOffchainInputFeeParams(vtxo));
|
|
17339
17342
|
if (inputFee.satoshis >= vtxo.value) {
|
|
17340
17343
|
continue;
|
|
17341
17344
|
}
|
|
@@ -18171,7 +18174,7 @@ var WalletMessageHandler = class {
|
|
|
18171
18174
|
// Wallet methods
|
|
18172
18175
|
async handleInitWallet({ payload }) {
|
|
18173
18176
|
const { arkServerUrl } = payload;
|
|
18174
|
-
this.indexerProvider = new
|
|
18177
|
+
this.indexerProvider = new chunk3KW4TWP2_cjs.RestIndexerProvider(arkServerUrl);
|
|
18175
18178
|
await this.onWalletInitialized();
|
|
18176
18179
|
}
|
|
18177
18180
|
/**
|
|
@@ -18460,7 +18463,7 @@ var WalletMessageHandler = class {
|
|
|
18460
18463
|
if (v.isUnrolled) {
|
|
18461
18464
|
return withUnrolled;
|
|
18462
18465
|
}
|
|
18463
|
-
if (
|
|
18466
|
+
if (chunk57636V35_cjs.hasTerminalSpend(v)) {
|
|
18464
18467
|
return false;
|
|
18465
18468
|
}
|
|
18466
18469
|
if (includeRecoverable) {
|
|
@@ -18469,10 +18472,10 @@ var WalletMessageHandler = class {
|
|
|
18469
18472
|
if (dustAmount != null && isSubdust(v, dustAmount)) {
|
|
18470
18473
|
return false;
|
|
18471
18474
|
}
|
|
18472
|
-
if (
|
|
18475
|
+
if (chunk57636V35_cjs.isRecoverable(v)) {
|
|
18473
18476
|
return false;
|
|
18474
18477
|
}
|
|
18475
|
-
if (
|
|
18478
|
+
if (chunk57636V35_cjs.isExpired(v)) {
|
|
18476
18479
|
return false;
|
|
18477
18480
|
}
|
|
18478
18481
|
return true;
|
|
@@ -18570,7 +18573,7 @@ var WalletMessageHandler = class {
|
|
|
18570
18573
|
if (!this.readonlyWallet) return null;
|
|
18571
18574
|
const { boardingTxs, commitmentsToIgnore } = await this.readonlyWallet.getBoardingTxs();
|
|
18572
18575
|
const indexerProvider = this.indexerProvider;
|
|
18573
|
-
const resolveTxCreatedAt = indexerProvider ? (txids) =>
|
|
18576
|
+
const resolveTxCreatedAt = indexerProvider ? (txids) => chunk57636V35_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
|
|
18574
18577
|
return buildTransactionHistory(vtxos, boardingTxs, commitmentsToIgnore, resolveTxCreatedAt);
|
|
18575
18578
|
}
|
|
18576
18579
|
async ensureContractEventBroadcasting() {
|
|
@@ -19266,7 +19269,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
19266
19269
|
};
|
|
19267
19270
|
try {
|
|
19268
19271
|
const response = await this.sendMessage(message);
|
|
19269
|
-
return response.payload.vtxos.map(
|
|
19272
|
+
return response.payload.vtxos.map(chunk57636V35_cjs.normalizeVtxo);
|
|
19270
19273
|
} catch (error) {
|
|
19271
19274
|
throw new Error(`Failed to get vtxos: ${error}`);
|
|
19272
19275
|
}
|
|
@@ -19291,7 +19294,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
19291
19294
|
};
|
|
19292
19295
|
try {
|
|
19293
19296
|
const response = await this.sendMessage(message);
|
|
19294
|
-
return response.payload.vtxos.map(
|
|
19297
|
+
return response.payload.vtxos.map(chunk57636V35_cjs.normalizeVtxo);
|
|
19295
19298
|
} catch (error) {
|
|
19296
19299
|
throw new Error(`Failed to get spendable vtxos: ${error}`);
|
|
19297
19300
|
}
|
|
@@ -19422,7 +19425,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
19422
19425
|
};
|
|
19423
19426
|
try {
|
|
19424
19427
|
const response = await sendContractMessage(message);
|
|
19425
|
-
return response.payload.vtxos.map(
|
|
19428
|
+
return response.payload.vtxos.map(chunk57636V35_cjs.normalizeVtxo);
|
|
19426
19429
|
} catch (e) {
|
|
19427
19430
|
throw new Error("Failed to annotate vtxos");
|
|
19428
19431
|
}
|
|
@@ -20023,7 +20026,7 @@ var ServiceWorkerWallet = class _ServiceWorkerWallet extends ServiceWorkerReadon
|
|
|
20023
20026
|
};
|
|
20024
20027
|
try {
|
|
20025
20028
|
const response = await wallet.sendMessage(message);
|
|
20026
|
-
return response.payload.vtxos.map(
|
|
20029
|
+
return response.payload.vtxos.map(chunk57636V35_cjs.normalizeVtxo);
|
|
20027
20030
|
} catch (e) {
|
|
20028
20031
|
throw new Error(`Failed to get expiring vtxos: ${e}`);
|
|
20029
20032
|
}
|
|
@@ -20135,12 +20138,12 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
20135
20138
|
* @returns Configured onchain wallet
|
|
20136
20139
|
* @throws Error if the configured identity cannot produce a valid x-only public key
|
|
20137
20140
|
*/
|
|
20138
|
-
static async create(identity, networkName =
|
|
20141
|
+
static async create(identity, networkName = chunk57636V35_cjs.DEFAULT_NETWORK_NAME, provider) {
|
|
20139
20142
|
const pubkey = await identity.xOnlyPublicKey();
|
|
20140
20143
|
if (!pubkey) {
|
|
20141
20144
|
throw new Error("Invalid configured public key");
|
|
20142
20145
|
}
|
|
20143
|
-
const network =
|
|
20146
|
+
const network = chunk57636V35_cjs.getNetwork(networkName);
|
|
20144
20147
|
const onchainProvider = provider || new EsploraProvider(ESPLORA_URL[networkName]);
|
|
20145
20148
|
const onchainP2TR = btcSigner.p2tr(pubkey, void 0, network);
|
|
20146
20149
|
return new _OnchainWallet(identity, network, onchainP2TR, onchainProvider);
|
|
@@ -20246,7 +20249,7 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
20246
20249
|
if (!inputs) {
|
|
20247
20250
|
throw new Error("Fee estimation failed");
|
|
20248
20251
|
}
|
|
20249
|
-
let tx = new
|
|
20252
|
+
let tx = new chunk57636V35_cjs.Transaction();
|
|
20250
20253
|
for (const input of inputs) {
|
|
20251
20254
|
tx.addInput({
|
|
20252
20255
|
txid: input.txid,
|
|
@@ -20304,7 +20307,7 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
20304
20307
|
* @throws If the parent has no anchor, or funding cannot be selected/signed
|
|
20305
20308
|
*/
|
|
20306
20309
|
async bumpAnchor(parentHex, feeRate) {
|
|
20307
|
-
const parent =
|
|
20310
|
+
const parent = chunk57636V35_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
|
|
20308
20311
|
const coins = (await this.getCoins()).filter((c) => c.status.confirmed);
|
|
20309
20312
|
const child = await this.buildBumpPackage(parent, feeRate, coins);
|
|
20310
20313
|
return [parent.hex, child.hex];
|
|
@@ -21211,7 +21214,7 @@ async function resolvePrevTxs(txids, source, onchain) {
|
|
|
21211
21214
|
try {
|
|
21212
21215
|
const { txs } = await source.getVirtualTxs(wanted);
|
|
21213
21216
|
for (const psbt of txs) {
|
|
21214
|
-
const tx =
|
|
21217
|
+
const tx = chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(psbt));
|
|
21215
21218
|
resolved.set(tx.id, tx.toBytes());
|
|
21216
21219
|
}
|
|
21217
21220
|
} catch (err) {
|
|
@@ -21244,7 +21247,7 @@ async function resolvePrevTxs(txids, source, onchain) {
|
|
|
21244
21247
|
async function attachPrevArkTxs(tx, txids, source, onchain) {
|
|
21245
21248
|
const pending = [];
|
|
21246
21249
|
for (let i = 0; i < tx.inputsLength; i++) {
|
|
21247
|
-
if (
|
|
21250
|
+
if (chunk57636V35_cjs.getArkPsbtFields(tx, i, chunk57636V35_cjs.PrevArkTxField).length === 0) pending.push(i);
|
|
21248
21251
|
}
|
|
21249
21252
|
if (pending.length === 0) return;
|
|
21250
21253
|
const resolved = await resolvePrevTxs(
|
|
@@ -21253,13 +21256,13 @@ async function attachPrevArkTxs(tx, txids, source, onchain) {
|
|
|
21253
21256
|
onchain
|
|
21254
21257
|
);
|
|
21255
21258
|
for (const i of pending) {
|
|
21256
|
-
|
|
21259
|
+
chunk57636V35_cjs.setArkPsbtField(tx, i, chunk57636V35_cjs.PrevArkTxField, resolved.get(txidAt(txids, i)));
|
|
21257
21260
|
}
|
|
21258
21261
|
}
|
|
21259
21262
|
async function attachPrevoutTxs(tx, source) {
|
|
21260
21263
|
const pending = [];
|
|
21261
21264
|
for (let i = 0; i < tx.inputsLength; i++) {
|
|
21262
|
-
if (
|
|
21265
|
+
if (chunk57636V35_cjs.getArkPsbtFields(tx, i, chunk57636V35_cjs.PrevoutTxField).length > 0) continue;
|
|
21263
21266
|
const input = tx.getInput(i);
|
|
21264
21267
|
if (!input?.txid) throw new PrevTxUnavailableError(`input ${i} has no outpoint`);
|
|
21265
21268
|
pending.push({ index: i, txid: base.hex.encode(input.txid) });
|
|
@@ -21270,7 +21273,7 @@ async function attachPrevoutTxs(tx, source) {
|
|
|
21270
21273
|
resolved.set(txid, await source.getRawTransaction(txid));
|
|
21271
21274
|
}
|
|
21272
21275
|
for (const { index, txid } of pending) {
|
|
21273
|
-
|
|
21276
|
+
chunk57636V35_cjs.setArkPsbtField(tx, index, chunk57636V35_cjs.PrevoutTxField, resolved.get(txid));
|
|
21274
21277
|
}
|
|
21275
21278
|
}
|
|
21276
21279
|
async function withPrevTxs(coins, source, onchain) {
|
|
@@ -21296,7 +21299,7 @@ exports.BIP322 = void 0;
|
|
|
21296
21299
|
async function sign2(message, identity, network) {
|
|
21297
21300
|
const xOnlyPubKey = await identity.xOnlyPublicKey();
|
|
21298
21301
|
const payment = btcSigner.p2tr(xOnlyPubKey, void 0, network);
|
|
21299
|
-
const toSpend =
|
|
21302
|
+
const toSpend = chunk57636V35_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
|
|
21300
21303
|
const toSign = craftBIP322ToSignP2TR(toSpend, payment.script, xOnlyPubKey);
|
|
21301
21304
|
const signed = await identity.sign(toSign, [0]);
|
|
21302
21305
|
signed.finalizeIdx(0);
|
|
@@ -21354,7 +21357,7 @@ function verifyP2TR(message, witnessItems, pkScript, pubkey) {
|
|
|
21354
21357
|
if (sighashType !== btcSigner.SigHash.DEFAULT && sighashType !== btcSigner.SigHash.ALL) {
|
|
21355
21358
|
return false;
|
|
21356
21359
|
}
|
|
21357
|
-
const toSpend =
|
|
21360
|
+
const toSpend = chunk57636V35_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
|
|
21358
21361
|
const toSign = craftBIP322ToSignP2TR(toSpend, pkScript, pubkey);
|
|
21359
21362
|
const sighash = toSign.preimageWitnessV1(0, [pkScript], sighashType, [0n]);
|
|
21360
21363
|
const rawSig = sig.length === 65 ? sig.subarray(0, 64) : sig;
|
|
@@ -21375,7 +21378,7 @@ function verifyP2WPKH(message, witnessItems, pkScript, addressHash) {
|
|
|
21375
21378
|
}
|
|
21376
21379
|
const sighashType = sigWithHash[sigWithHash.length - 1];
|
|
21377
21380
|
const derSig = sigWithHash.subarray(0, sigWithHash.length - 1);
|
|
21378
|
-
const toSpend =
|
|
21381
|
+
const toSpend = chunk57636V35_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
|
|
21379
21382
|
const toSign = craftBIP322ToSignSimple(toSpend, pkScript);
|
|
21380
21383
|
const scriptCode = btcSigner.OutScript.encode({ type: "pkh", hash: addressHash });
|
|
21381
21384
|
const sighash = toSign.preimageWitnessV0(0, scriptCode, sighashType, 0n);
|
|
@@ -21428,7 +21431,7 @@ function encodeCompactSize(n) {
|
|
|
21428
21431
|
return buf;
|
|
21429
21432
|
}
|
|
21430
21433
|
function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
|
|
21431
|
-
const tx = new
|
|
21434
|
+
const tx = new chunk57636V35_cjs.Transaction({ version: 0 });
|
|
21432
21435
|
tx.addInput({
|
|
21433
21436
|
txid: toSpend.id,
|
|
21434
21437
|
index: 0,
|
|
@@ -21442,12 +21445,12 @@ function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
|
|
|
21442
21445
|
});
|
|
21443
21446
|
tx.addOutput({
|
|
21444
21447
|
amount: 0n,
|
|
21445
|
-
script:
|
|
21448
|
+
script: chunk57636V35_cjs.OP_RETURN_EMPTY_PKSCRIPT
|
|
21446
21449
|
});
|
|
21447
21450
|
return tx;
|
|
21448
21451
|
}
|
|
21449
21452
|
function craftBIP322ToSignSimple(toSpend, pkScript) {
|
|
21450
|
-
const tx = new
|
|
21453
|
+
const tx = new chunk57636V35_cjs.Transaction({ version: 0 });
|
|
21451
21454
|
tx.addInput({
|
|
21452
21455
|
txid: toSpend.id,
|
|
21453
21456
|
index: 0,
|
|
@@ -21459,7 +21462,7 @@ function craftBIP322ToSignSimple(toSpend, pkScript) {
|
|
|
21459
21462
|
});
|
|
21460
21463
|
tx.addOutput({
|
|
21461
21464
|
amount: 0n,
|
|
21462
|
-
script:
|
|
21465
|
+
script: chunk57636V35_cjs.OP_RETURN_EMPTY_PKSCRIPT
|
|
21463
21466
|
});
|
|
21464
21467
|
return tx;
|
|
21465
21468
|
}
|
|
@@ -21590,7 +21593,7 @@ var RestEmulatorProvider = class {
|
|
|
21590
21593
|
}
|
|
21591
21594
|
};
|
|
21592
21595
|
function finalizeVirtualTx(type, psbtBase64) {
|
|
21593
|
-
const tx =
|
|
21596
|
+
const tx = chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
|
|
21594
21597
|
if (type === "INDEXER_CHAINED_TX_TYPE_TREE" /* TREE */) {
|
|
21595
21598
|
const input = tx.getInput(0);
|
|
21596
21599
|
if (!input) {
|
|
@@ -21617,14 +21620,14 @@ var ExitPathError = class extends Error {
|
|
|
21617
21620
|
reason;
|
|
21618
21621
|
};
|
|
21619
21622
|
function delayWeight(sequence) {
|
|
21620
|
-
const t =
|
|
21623
|
+
const t = chunk57636V35_cjs.sequenceToTimelock(sequence);
|
|
21621
21624
|
return t.type === "blocks" ? Number(t.value) : Number(t.value) / 600;
|
|
21622
21625
|
}
|
|
21623
21626
|
async function resolveUnilateralPath(params) {
|
|
21624
21627
|
const { vtxo, scriptHex, contractRepository } = params;
|
|
21625
21628
|
const contract = contractRepository ? (await contractRepository.getContracts({ script: scriptHex }))[0] : void 0;
|
|
21626
21629
|
if (contract) {
|
|
21627
|
-
const handler =
|
|
21630
|
+
const handler = chunk3OKEUDHU_cjs.contractHandlers.get(contract.type);
|
|
21628
21631
|
if (!handler) {
|
|
21629
21632
|
throw new ExitPathError(
|
|
21630
21633
|
"no-handler",
|
|
@@ -21647,12 +21650,12 @@ async function resolveUnilateralPath(params) {
|
|
|
21647
21650
|
paths.sort((a, b) => delayWeight(a.sequence) - delayWeight(b.sequence));
|
|
21648
21651
|
return { selection: paths[0], label: `${contract.type}:unilateral` };
|
|
21649
21652
|
}
|
|
21650
|
-
const decoded =
|
|
21653
|
+
const decoded = chunk57636V35_cjs.VtxoScript.decode(vtxo.tapTree);
|
|
21651
21654
|
let best;
|
|
21652
21655
|
for (const exit of decoded.exitPaths()) {
|
|
21653
21656
|
const leaf = decoded.findLeaf(base.hex.encode(exit.script));
|
|
21654
21657
|
if (!leaf) continue;
|
|
21655
|
-
const sequence =
|
|
21658
|
+
const sequence = chunk57636V35_cjs.timelockToSequence(exit.params.timelock);
|
|
21656
21659
|
const weight = delayWeight(sequence);
|
|
21657
21660
|
if (!best || weight < best.weight) {
|
|
21658
21661
|
best = { selection: { leaf, sequence }, weight };
|
|
@@ -21872,7 +21875,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
21872
21875
|
let totalAmount = 0n;
|
|
21873
21876
|
const txWeightEstimator = TxWeightEstimator.create();
|
|
21874
21877
|
for (const vtxo of vtxos) {
|
|
21875
|
-
if (!
|
|
21878
|
+
if (!chunk57636V35_cjs.canSweepOnchain(vtxo)) {
|
|
21876
21879
|
throw new Error(
|
|
21877
21880
|
`Vtxo ${vtxo.txid}:${vtxo.vout} cannot be swept onchain: it is not fully unrolled (use unroll first), or its exit output was already spent`
|
|
21878
21881
|
);
|
|
@@ -21883,14 +21886,14 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
21883
21886
|
}
|
|
21884
21887
|
const resolved = await resolveUnilateralPath({
|
|
21885
21888
|
vtxo,
|
|
21886
|
-
scriptHex: base.hex.encode(
|
|
21889
|
+
scriptHex: base.hex.encode(chunk57636V35_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
|
|
21887
21890
|
contractRepository: wallet.contractRepository,
|
|
21888
21891
|
walletPubKeyHex: base.hex.encode(await wallet.identity.xOnlyPublicKey()),
|
|
21889
21892
|
currentTime: Date.now()
|
|
21890
21893
|
});
|
|
21891
21894
|
const spendingLeaf = resolved.selection.leaf;
|
|
21892
21895
|
const sequence = resolved.selection.sequence;
|
|
21893
|
-
const timelock =
|
|
21896
|
+
const timelock = chunk57636V35_cjs.sequenceToTimelock(sequence);
|
|
21894
21897
|
const elapsed = timelock.type === "blocks" ? chainTip.height >= txStatus.blockHeight + Number(timelock.value) : chainTip.time >= txStatus.blockTime + Number(timelock.value);
|
|
21895
21898
|
if (!elapsed) {
|
|
21896
21899
|
throw new Error(`no available exit path found for vtxo ${vtxo.txid}:${vtxo.vout}`);
|
|
@@ -21903,7 +21906,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
21903
21906
|
sequence,
|
|
21904
21907
|
witnessUtxo: {
|
|
21905
21908
|
amount: BigInt(vtxo.value),
|
|
21906
|
-
script:
|
|
21909
|
+
script: chunk57636V35_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
|
|
21907
21910
|
},
|
|
21908
21911
|
sighashType: btcSigner.SigHash.DEFAULT
|
|
21909
21912
|
});
|
|
@@ -21913,7 +21916,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
21913
21916
|
btcSigner.TaprootControlBlock.encode(spendingLeaf[0]).length
|
|
21914
21917
|
);
|
|
21915
21918
|
}
|
|
21916
|
-
const tx = new
|
|
21919
|
+
const tx = new chunk57636V35_cjs.Transaction({ version: 2 });
|
|
21917
21920
|
for (const input of inputs) {
|
|
21918
21921
|
tx.addInput(input);
|
|
21919
21922
|
}
|
|
@@ -21996,7 +21999,7 @@ async function buildSignedSweep(params) {
|
|
|
21996
21999
|
`uneconomic vtxo ${vtxo.txid}:${vtxo.vout}: value ${vtxo.value} - fee ${fee} < dust`
|
|
21997
22000
|
);
|
|
21998
22001
|
}
|
|
21999
|
-
const tx = new
|
|
22002
|
+
const tx = new chunk57636V35_cjs.Transaction({ version: 2 });
|
|
22000
22003
|
tx.addInput({
|
|
22001
22004
|
txid: vtxo.txid,
|
|
22002
22005
|
index: vtxo.vout,
|
|
@@ -22021,7 +22024,7 @@ async function buildSignedSweep(params) {
|
|
|
22021
22024
|
finalScriptWitness: [
|
|
22022
22025
|
tapScriptSig[0][1],
|
|
22023
22026
|
...path.extraWitness,
|
|
22024
|
-
|
|
22027
|
+
chunk57636V35_cjs.scriptFromTapLeafScript(path.leaf),
|
|
22025
22028
|
btcSigner.TaprootControlBlock.encode(controlBlock)
|
|
22026
22029
|
]
|
|
22027
22030
|
});
|
|
@@ -22051,7 +22054,7 @@ async function resolveFeeRate(opts) {
|
|
|
22051
22054
|
}
|
|
22052
22055
|
async function selectExitVtxos(opts) {
|
|
22053
22056
|
if (!opts.vtxos) return opts.wallet.getVtxos();
|
|
22054
|
-
const res = await
|
|
22057
|
+
const res = await chunk57636V35_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
|
|
22055
22058
|
const tapTrees = /* @__PURE__ */ new Map();
|
|
22056
22059
|
const out = [];
|
|
22057
22060
|
for (const vtxo of res.vtxos) {
|
|
@@ -22066,7 +22069,7 @@ async function selectExitVtxos(opts) {
|
|
|
22066
22069
|
`no contract registered for vtxo script ${vtxo.script} \u2014 register the contract before exiting`
|
|
22067
22070
|
);
|
|
22068
22071
|
}
|
|
22069
|
-
const handler =
|
|
22072
|
+
const handler = chunk3OKEUDHU_cjs.contractHandlers.get(contract.type);
|
|
22070
22073
|
if (!handler) {
|
|
22071
22074
|
throw new Error(`no contract handler registered for type '${contract.type}'`);
|
|
22072
22075
|
}
|
|
@@ -22096,7 +22099,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
22096
22099
|
if (pendingNodes.length > 0) {
|
|
22097
22100
|
const txs = await resolver.getVirtualTxs(pendingNodes.map((n) => n.txid));
|
|
22098
22101
|
for (const psbt of txs) {
|
|
22099
|
-
psbts.set(
|
|
22102
|
+
psbts.set(chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
22100
22103
|
}
|
|
22101
22104
|
}
|
|
22102
22105
|
const childVsize = Number(
|
|
@@ -22132,7 +22135,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
22132
22135
|
try {
|
|
22133
22136
|
const resolved = await resolveUnilateralPath({
|
|
22134
22137
|
vtxo,
|
|
22135
|
-
scriptHex: base.hex.encode(
|
|
22138
|
+
scriptHex: base.hex.encode(chunk57636V35_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
|
|
22136
22139
|
contractRepository: wallet.contractRepository,
|
|
22137
22140
|
walletPubKeyHex,
|
|
22138
22141
|
currentTime: Date.now()
|
|
@@ -22151,7 +22154,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
22151
22154
|
});
|
|
22152
22155
|
continue;
|
|
22153
22156
|
}
|
|
22154
|
-
const t =
|
|
22157
|
+
const t = chunk57636V35_cjs.sequenceToTimelock(resolved.selection.sequence);
|
|
22155
22158
|
const delay = { type: t.type, value: Number(t.value) };
|
|
22156
22159
|
infos.push({ outpoint, value: vtxo.value, sweepFee, path: resolved.label, delay });
|
|
22157
22160
|
sweeps.push({ vtxo, resolved, sweepFee, delay });
|
|
@@ -22552,7 +22555,7 @@ async function prepare(opts) {
|
|
|
22552
22555
|
txid: sweep.vtxo.txid,
|
|
22553
22556
|
vout: sweep.vtxo.vout,
|
|
22554
22557
|
value: sweep.vtxo.value,
|
|
22555
|
-
pkScript:
|
|
22558
|
+
pkScript: chunk57636V35_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
|
|
22556
22559
|
},
|
|
22557
22560
|
path: sweep.resolved.selection,
|
|
22558
22561
|
outputAddress: opts.sweepAddress,
|
|
@@ -22640,7 +22643,7 @@ async function prepare(opts) {
|
|
|
22640
22643
|
if (newFee <= splitterFee) break;
|
|
22641
22644
|
splitterFee = newFee;
|
|
22642
22645
|
}
|
|
22643
|
-
const splitter = new
|
|
22646
|
+
const splitter = new chunk57636V35_cjs.Transaction({ version: 2 });
|
|
22644
22647
|
for (const coin of selected.inputs) {
|
|
22645
22648
|
splitter.addInput({
|
|
22646
22649
|
txid: coin.txid,
|
|
@@ -22784,41 +22787,41 @@ var UnilateralExit = {
|
|
|
22784
22787
|
// src/arkade/index.ts
|
|
22785
22788
|
var arkade_exports = {};
|
|
22786
22789
|
chunk5BLDMQED_cjs.__export(arkade_exports, {
|
|
22787
|
-
ARKADE_OP: () =>
|
|
22788
|
-
ARKADE_OPCODES: () =>
|
|
22789
|
-
ARKADE_OPCODE_NAMES: () =>
|
|
22790
|
-
ARKADE_OPCODE_VALUES: () =>
|
|
22791
|
-
ARKADE_OPS: () =>
|
|
22790
|
+
ARKADE_OP: () => chunk3OKEUDHU_cjs.ARKADE_OP,
|
|
22791
|
+
ARKADE_OPCODES: () => chunk3OKEUDHU_cjs.ARKADE_OPCODES,
|
|
22792
|
+
ARKADE_OPCODE_NAMES: () => chunk3OKEUDHU_cjs.ARKADE_OPCODE_NAMES,
|
|
22793
|
+
ARKADE_OPCODE_VALUES: () => chunk3OKEUDHU_cjs.ARKADE_OPCODE_VALUES,
|
|
22794
|
+
ARKADE_OPS: () => chunk3OKEUDHU_cjs.ARKADE_OPS,
|
|
22792
22795
|
Arkade: () => Arkade,
|
|
22793
22796
|
ArkadeContract: () => ArkadeContract,
|
|
22794
|
-
ArkadeProgramScript: () =>
|
|
22795
|
-
ArkadeScript: () =>
|
|
22797
|
+
ArkadeProgramScript: () => chunk3OKEUDHU_cjs.ArkadeProgramScript,
|
|
22798
|
+
ArkadeScript: () => chunk3OKEUDHU_cjs.ArkadeScript,
|
|
22796
22799
|
ArkadeTransactionBuilder: () => ArkadeTransactionBuilder,
|
|
22797
|
-
BigNum: () =>
|
|
22800
|
+
BigNum: () => chunk3OKEUDHU_cjs.bignum_exports,
|
|
22798
22801
|
OP: () => btcSigner.OP,
|
|
22799
|
-
OPCODE_NAMES: () =>
|
|
22800
|
-
OPCODE_VALUES: () =>
|
|
22801
|
-
SUPPORTED_PROGRAM_VERSION: () =>
|
|
22802
|
+
OPCODE_NAMES: () => chunk3OKEUDHU_cjs.OPCODE_NAMES,
|
|
22803
|
+
OPCODE_VALUES: () => chunk3OKEUDHU_cjs.OPCODE_VALUES,
|
|
22804
|
+
SUPPORTED_PROGRAM_VERSION: () => chunk3OKEUDHU_cjs.SUPPORTED_PROGRAM_VERSION,
|
|
22802
22805
|
Script: () => btcSigner.Script,
|
|
22803
|
-
arkadeScriptHash: () =>
|
|
22804
|
-
arkadeWitnessHash: () =>
|
|
22805
|
-
asmToBytes: () =>
|
|
22806
|
-
bytesToASM: () =>
|
|
22807
|
-
computeArkadeScriptPublicKey: () =>
|
|
22806
|
+
arkadeScriptHash: () => chunk3OKEUDHU_cjs.arkadeScriptHash,
|
|
22807
|
+
arkadeWitnessHash: () => chunk3OKEUDHU_cjs.arkadeWitnessHash,
|
|
22808
|
+
asmToBytes: () => chunk3OKEUDHU_cjs.asmToBytes,
|
|
22809
|
+
bytesToASM: () => chunk3OKEUDHU_cjs.bytesToASM,
|
|
22810
|
+
computeArkadeScriptPublicKey: () => chunk3OKEUDHU_cjs.computeArkadeScriptPublicKey,
|
|
22808
22811
|
createArkadeBatchHandler: () => createArkadeBatchHandler,
|
|
22809
|
-
deserializeArkadeContractParams: () =>
|
|
22810
|
-
fromASM: () =>
|
|
22811
|
-
getOpcodeName: () =>
|
|
22812
|
-
getOpcodeValue: () =>
|
|
22813
|
-
parseArtifact: () =>
|
|
22814
|
-
resolveAsm: () =>
|
|
22815
|
-
serializeArkadeContractParams: () =>
|
|
22816
|
-
stringifyArtifact: () =>
|
|
22817
|
-
toASM: () =>
|
|
22818
|
-
validateProgram: () =>
|
|
22819
|
-
witnessRefToBytes: () =>
|
|
22812
|
+
deserializeArkadeContractParams: () => chunk3OKEUDHU_cjs.deserializeArkadeContractParams,
|
|
22813
|
+
fromASM: () => chunk3OKEUDHU_cjs.fromASM,
|
|
22814
|
+
getOpcodeName: () => chunk3OKEUDHU_cjs.getOpcodeName,
|
|
22815
|
+
getOpcodeValue: () => chunk3OKEUDHU_cjs.getOpcodeValue,
|
|
22816
|
+
parseArtifact: () => chunk3OKEUDHU_cjs.parseArtifact,
|
|
22817
|
+
resolveAsm: () => chunk3OKEUDHU_cjs.resolveAsm,
|
|
22818
|
+
serializeArkadeContractParams: () => chunk3OKEUDHU_cjs.serializeArkadeContractParams,
|
|
22819
|
+
stringifyArtifact: () => chunk3OKEUDHU_cjs.stringifyArtifact,
|
|
22820
|
+
toASM: () => chunk3OKEUDHU_cjs.toASM,
|
|
22821
|
+
validateProgram: () => chunk3OKEUDHU_cjs.validateProgram,
|
|
22822
|
+
witnessRefToBytes: () => chunk3OKEUDHU_cjs.witnessRefToBytes
|
|
22820
22823
|
});
|
|
22821
|
-
var isVtxoCoin = (input) =>
|
|
22824
|
+
var isVtxoCoin = (input) => chunk57636V35_cjs.isVirtualCoin(input);
|
|
22822
22825
|
function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message, session, arkProvider, emulator, network, recipients, batchExpiryPolicy) {
|
|
22823
22826
|
let batchId;
|
|
22824
22827
|
let sweepTapTreeRoot;
|
|
@@ -22839,23 +22842,23 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
22839
22842
|
);
|
|
22840
22843
|
await arkProvider.confirmRegistration(intentId);
|
|
22841
22844
|
batchId = event.id;
|
|
22842
|
-
const sweepTapscript =
|
|
22845
|
+
const sweepTapscript = chunk57636V35_cjs.CSVMultisigTapscript.encode({
|
|
22843
22846
|
timelock,
|
|
22844
|
-
pubkeys: [
|
|
22847
|
+
pubkeys: [chunk3OKEUDHU_cjs.toXOnly(base.hex.decode(info.forfeitPubkey), "forfeit key")]
|
|
22845
22848
|
}).script;
|
|
22846
22849
|
sweepTapTreeRoot = payment_js.tapLeafHash(sweepTapscript);
|
|
22847
22850
|
return { skip: false };
|
|
22848
22851
|
},
|
|
22849
22852
|
onTreeSigningStarted: async (event, vtxoTree) => {
|
|
22850
22853
|
const signerPubKey = await session.getPublicKey();
|
|
22851
|
-
const xonlySignerPubKey =
|
|
22854
|
+
const xonlySignerPubKey = chunk3OKEUDHU_cjs.toXOnly(signerPubKey, "signer key");
|
|
22852
22855
|
const xOnlyPubkeys = event.cosignersPublicKeys.map(
|
|
22853
|
-
(k) => base.hex.encode(
|
|
22856
|
+
(k) => base.hex.encode(chunk3OKEUDHU_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
|
|
22854
22857
|
);
|
|
22855
22858
|
if (!xOnlyPubkeys.includes(base.hex.encode(xonlySignerPubKey))) {
|
|
22856
22859
|
return { skip: true };
|
|
22857
22860
|
}
|
|
22858
|
-
const commitmentTx =
|
|
22861
|
+
const commitmentTx = chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
|
|
22859
22862
|
validateVtxoTxGraph(vtxoTree, commitmentTx, sweepTapTreeRoot);
|
|
22860
22863
|
if (recipients && recipients.length > 0) {
|
|
22861
22864
|
validateBatchRecipients(commitmentTx, vtxoTree.leaves(), recipients, network);
|
|
@@ -22887,7 +22890,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
22887
22890
|
if (connectorTree) {
|
|
22888
22891
|
validateConnectorsTxGraph(event.commitmentTx, connectorTree);
|
|
22889
22892
|
}
|
|
22890
|
-
let commitmentPsbt =
|
|
22893
|
+
let commitmentPsbt = chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
|
|
22891
22894
|
assertFinalCommitmentMatchesValidated(
|
|
22892
22895
|
commitmentPsbt,
|
|
22893
22896
|
validatedCommitmentTxid,
|
|
@@ -22922,7 +22925,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
22922
22925
|
boardingIndices.push(boardingIdx);
|
|
22923
22926
|
continue;
|
|
22924
22927
|
}
|
|
22925
|
-
if (
|
|
22928
|
+
if (chunk57636V35_cjs.isRecoverable(input) || isSubdust(input, info.dust)) {
|
|
22926
22929
|
continue;
|
|
22927
22930
|
}
|
|
22928
22931
|
if (connectorIndex >= connectorLeaves.length) {
|
|
@@ -22943,7 +22946,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
22943
22946
|
index: input.vout,
|
|
22944
22947
|
witnessUtxo: {
|
|
22945
22948
|
amount: BigInt(input.value),
|
|
22946
|
-
script:
|
|
22949
|
+
script: chunk57636V35_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
22947
22950
|
},
|
|
22948
22951
|
sighashType: btcSigner.SigHash.DEFAULT,
|
|
22949
22952
|
tapLeafScript: [input.forfeitTapLeafScript]
|
|
@@ -23034,16 +23037,16 @@ var Arkade = class _Arkade {
|
|
|
23034
23037
|
/** Connect and resolve the server key, checkpoint closure and (if present) the co-signer key. */
|
|
23035
23038
|
static async connect(opts) {
|
|
23036
23039
|
const info = await opts.arkade.getInfo();
|
|
23037
|
-
const serverKey =
|
|
23038
|
-
const checkpoint =
|
|
23039
|
-
const network = opts.network ??
|
|
23040
|
+
const serverKey = chunk3OKEUDHU_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
|
|
23041
|
+
const checkpoint = chunk57636V35_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
|
|
23042
|
+
const network = opts.network ?? chunk57636V35_cjs.DEFAULT_NETWORK;
|
|
23040
23043
|
let emulatorKey;
|
|
23041
23044
|
if (opts.emulator) {
|
|
23042
|
-
emulatorKey = base.hex.decode(
|
|
23045
|
+
emulatorKey = base.hex.decode(chunk57636V35_cjs.resolveEmulatorPubkey(network, opts.emulatorPubkey));
|
|
23043
23046
|
}
|
|
23044
23047
|
let userKey;
|
|
23045
23048
|
if (opts.identity) {
|
|
23046
|
-
userKey =
|
|
23049
|
+
userKey = chunk3OKEUDHU_cjs.toXOnly(await opts.identity.xOnlyPublicKey(), "identity key");
|
|
23047
23050
|
}
|
|
23048
23051
|
return new _Arkade({
|
|
23049
23052
|
arkProvider: opts.arkade,
|
|
@@ -23069,7 +23072,7 @@ var Arkade = class _Arkade {
|
|
|
23069
23072
|
* key respectively; explicit args always win.
|
|
23070
23073
|
*/
|
|
23071
23074
|
contract(program, args = {}) {
|
|
23072
|
-
const declared = (program.params ?? []).map(
|
|
23075
|
+
const declared = (program.params ?? []).map(chunk3OKEUDHU_cjs.inputName);
|
|
23073
23076
|
if (declared.includes("server") && args.server === void 0) {
|
|
23074
23077
|
args = { ...args, server: this.serverKey };
|
|
23075
23078
|
}
|
|
@@ -23089,7 +23092,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
23089
23092
|
userKey: client.userKey,
|
|
23090
23093
|
emulatorKey: client.emulatorKey
|
|
23091
23094
|
};
|
|
23092
|
-
this.vtxoScript = new
|
|
23095
|
+
this.vtxoScript = new chunk3OKEUDHU_cjs.ArkadeProgramScript(program, args, this.keys);
|
|
23093
23096
|
this.tapTree = this.vtxoScript.encode();
|
|
23094
23097
|
this.compiled = this.vtxoScript.compiled;
|
|
23095
23098
|
}
|
|
@@ -23117,7 +23120,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
23117
23120
|
`ArkadeContract.fromContract: expected contract type 'arkade', got '${contract.type}'`
|
|
23118
23121
|
);
|
|
23119
23122
|
}
|
|
23120
|
-
const typed =
|
|
23123
|
+
const typed = chunk3OKEUDHU_cjs.deserializeArkadeContractParams(contract.params);
|
|
23121
23124
|
return new _ArkadeContract(client, typed.program, typed.args, {
|
|
23122
23125
|
serverKey: typed.serverKey,
|
|
23123
23126
|
userKey: typed.userKey,
|
|
@@ -23158,7 +23161,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
23158
23161
|
toContractParams() {
|
|
23159
23162
|
return {
|
|
23160
23163
|
type: "arkade",
|
|
23161
|
-
params:
|
|
23164
|
+
params: chunk3OKEUDHU_cjs.serializeArkadeContractParams({
|
|
23162
23165
|
program: this.program,
|
|
23163
23166
|
args: this.args,
|
|
23164
23167
|
serverKey: this.keys.serverKey,
|
|
@@ -23208,18 +23211,18 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
23208
23211
|
if (registered) {
|
|
23209
23212
|
const [withVtxos] = await manager.getContractsWithVtxos({ script: scriptHex });
|
|
23210
23213
|
return (withVtxos?.vtxos ?? []).filter(
|
|
23211
|
-
(v) => !
|
|
23214
|
+
(v) => !chunk57636V35_cjs.hasTerminalSpend(v) && !v.isUnrolled
|
|
23212
23215
|
);
|
|
23213
23216
|
}
|
|
23214
23217
|
}
|
|
23215
23218
|
if (!this.client.indexer) {
|
|
23216
23219
|
throw new Error("ArkadeContract.getUtxos: an indexer is required");
|
|
23217
23220
|
}
|
|
23218
|
-
const { vtxos } = await
|
|
23221
|
+
const { vtxos } = await chunk57636V35_cjs.getNormalizedVtxos(this.client.indexer, {
|
|
23219
23222
|
scripts: [scriptHex],
|
|
23220
23223
|
spendableOnly: true
|
|
23221
23224
|
});
|
|
23222
|
-
return vtxos.filter((v) => !
|
|
23225
|
+
return vtxos.filter((v) => !chunk57636V35_cjs.hasTerminalSpend(v) && !v.isUnrolled);
|
|
23223
23226
|
}
|
|
23224
23227
|
/** Total spendable balance (requires an indexer). */
|
|
23225
23228
|
async getBalance() {
|
|
@@ -23317,7 +23320,7 @@ var ArkadeTransactionBuilder = class {
|
|
|
23317
23320
|
this.contract.client.checkpoint
|
|
23318
23321
|
);
|
|
23319
23322
|
if (coin.sourceTx) {
|
|
23320
|
-
|
|
23323
|
+
chunk57636V35_cjs.setArkPsbtField(arkTx, 0, chunk57636V35_cjs.PrevArkTxField, coin.sourceTx);
|
|
23321
23324
|
}
|
|
23322
23325
|
if (this.fn.arkadeScript) {
|
|
23323
23326
|
const indexer = this.contract.client.indexer;
|
|
@@ -23334,8 +23337,8 @@ var ArkadeTransactionBuilder = class {
|
|
|
23334
23337
|
}
|
|
23335
23338
|
const condition = (def.tapscript.witness ?? []).map((w) => this.witnessBytes(w));
|
|
23336
23339
|
if (condition.length > 0) {
|
|
23337
|
-
|
|
23338
|
-
|
|
23340
|
+
chunk57636V35_cjs.setArkPsbtField(arkTx, 0, chunk57636V35_cjs.ConditionWitness, condition);
|
|
23341
|
+
chunk57636V35_cjs.setArkPsbtField(checkpoints[0], 0, chunk57636V35_cjs.ConditionWitness, condition);
|
|
23339
23342
|
}
|
|
23340
23343
|
const packets = [];
|
|
23341
23344
|
if (this.assetSpecs.length > 0) {
|
|
@@ -23374,7 +23377,7 @@ var ArkadeTransactionBuilder = class {
|
|
|
23374
23377
|
base.base64.encode(signedArk2.toPSBT()),
|
|
23375
23378
|
signedCps.map((c) => base.base64.encode(c.toPSBT()))
|
|
23376
23379
|
);
|
|
23377
|
-
const txid =
|
|
23380
|
+
const txid = chunk57636V35_cjs.Transaction.fromPSBT(base.base64.decode(res2.signedArkTx)).id;
|
|
23378
23381
|
return {
|
|
23379
23382
|
txid,
|
|
23380
23383
|
signedArkTx: res2.signedArkTx,
|
|
@@ -23433,23 +23436,23 @@ var ArkadeTransactionBuilder = class {
|
|
|
23433
23436
|
}
|
|
23434
23437
|
buildAssetPacket() {
|
|
23435
23438
|
const groups = this.assetSpecs.map((s) => {
|
|
23436
|
-
const id = typeof s.assetId === "string" ?
|
|
23437
|
-
return
|
|
23439
|
+
const id = typeof s.assetId === "string" ? chunk3KW4TWP2_cjs.AssetId.fromString(s.assetId) : chunk3KW4TWP2_cjs.AssetId.fromBytes(s.assetId);
|
|
23440
|
+
return chunk3KW4TWP2_cjs.AssetGroup.create(
|
|
23438
23441
|
id,
|
|
23439
23442
|
null,
|
|
23440
|
-
s.inputs.map((i) =>
|
|
23441
|
-
s.outputs.map((o) =>
|
|
23442
|
-
(s.metadata ?? []).map((m) =>
|
|
23443
|
+
s.inputs.map((i) => chunk3KW4TWP2_cjs.AssetInput.create(i.vin, i.amount)),
|
|
23444
|
+
s.outputs.map((o) => chunk3KW4TWP2_cjs.AssetOutput.create(o.vout, o.amount)),
|
|
23445
|
+
(s.metadata ?? []).map((m) => chunk3KW4TWP2_cjs.Metadata.create(m.key, m.value))
|
|
23443
23446
|
);
|
|
23444
23447
|
});
|
|
23445
|
-
return
|
|
23448
|
+
return chunk3KW4TWP2_cjs.Packet.create(groups);
|
|
23446
23449
|
}
|
|
23447
23450
|
witnessBytes(ref) {
|
|
23448
|
-
return
|
|
23451
|
+
return chunk3OKEUDHU_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
|
|
23449
23452
|
}
|
|
23450
23453
|
};
|
|
23451
23454
|
function bindInputs(fn, callArgs) {
|
|
23452
|
-
const names = (fn.def.inputs ?? []).map(
|
|
23455
|
+
const names = (fn.def.inputs ?? []).map(chunk3OKEUDHU_cjs.inputName);
|
|
23453
23456
|
if (callArgs.length !== names.length) {
|
|
23454
23457
|
throw new Error(`${fn.name}: expected ${names.length} argument(s), got ${callArgs.length}`);
|
|
23455
23458
|
}
|
|
@@ -23642,6 +23645,33 @@ function tryResolveSendAmount(raw, amount) {
|
|
|
23642
23645
|
const amt = amount ?? BIP21.amountSats(raw);
|
|
23643
23646
|
return amt !== void 0 && Number.isInteger(amt) && amt > 0 ? amt : void 0;
|
|
23644
23647
|
}
|
|
23648
|
+
function assetsOf(req) {
|
|
23649
|
+
return req.assets ?? [];
|
|
23650
|
+
}
|
|
23651
|
+
function assertNoAssets(railId, req) {
|
|
23652
|
+
const assets = assetsOf(req);
|
|
23653
|
+
if (assets.length > 0) {
|
|
23654
|
+
throw new Error(
|
|
23655
|
+
`${railId}: cannot deliver ${assets.map((a) => a.assetId).join(", ")} \u2014 this rail moves BTC only`
|
|
23656
|
+
);
|
|
23657
|
+
}
|
|
23658
|
+
}
|
|
23659
|
+
function resolveAssetAmount(railId, req) {
|
|
23660
|
+
const assets = assetsOf(req);
|
|
23661
|
+
if (assets.length !== 1) {
|
|
23662
|
+
throw new Error(`${railId}: expected exactly one asset to pay, got ${assets.length}`);
|
|
23663
|
+
}
|
|
23664
|
+
const [asset] = assets;
|
|
23665
|
+
if (typeof asset.amount !== "bigint" || asset.amount <= 0n) {
|
|
23666
|
+
throw new Error(
|
|
23667
|
+
`${railId}: invalid amount ${String(asset.amount)} of ${asset.assetId} (expected a positive bigint of atomic units)`
|
|
23668
|
+
);
|
|
23669
|
+
}
|
|
23670
|
+
if (typeof asset.assetId !== "string" || asset.assetId.length === 0) {
|
|
23671
|
+
throw new Error(`${railId}: an asset amount must name an asset`);
|
|
23672
|
+
}
|
|
23673
|
+
return asset;
|
|
23674
|
+
}
|
|
23645
23675
|
|
|
23646
23676
|
// src/payment/handle.ts
|
|
23647
23677
|
function makeHandle(id, run) {
|
|
@@ -23764,8 +23794,10 @@ function arkRail() {
|
|
|
23764
23794
|
return {
|
|
23765
23795
|
id: "ark",
|
|
23766
23796
|
match: (req) => arkTarget(req.raw) !== void 0,
|
|
23797
|
+
available: (req) => assetsOf(req).length === 0,
|
|
23767
23798
|
quote: async (req, ctx) => {
|
|
23768
23799
|
const address = arkTarget(req.raw);
|
|
23800
|
+
assertNoAssets("ark", req);
|
|
23769
23801
|
const amt = resolveSendAmount("ark", req.raw, req.amount);
|
|
23770
23802
|
return {
|
|
23771
23803
|
railId: "ark",
|
|
@@ -23782,6 +23814,41 @@ function arkRail() {
|
|
|
23782
23814
|
}
|
|
23783
23815
|
};
|
|
23784
23816
|
}
|
|
23817
|
+
|
|
23818
|
+
// src/payment/rails/arkAsset.ts
|
|
23819
|
+
var ASSET_CARRIER_SATS = 330;
|
|
23820
|
+
function arkAssetRail() {
|
|
23821
|
+
return {
|
|
23822
|
+
id: "ark-asset",
|
|
23823
|
+
match: (req) => arkTarget(req.raw) !== void 0,
|
|
23824
|
+
// A malformed asset is `quote()`'s to name, not this rail's to drop.
|
|
23825
|
+
available: (req) => assetsOf(req).length > 0,
|
|
23826
|
+
quote: async (req, ctx) => {
|
|
23827
|
+
const address = arkTarget(req.raw);
|
|
23828
|
+
const asset = resolveAssetAmount("ark-asset", req);
|
|
23829
|
+
if (req.amount !== void 0) assertSendableAmount("ark-asset", req.amount);
|
|
23830
|
+
const carrier = tryResolveSendAmount(req.raw, req.amount) ?? ASSET_CARRIER_SATS;
|
|
23831
|
+
return {
|
|
23832
|
+
railId: "ark-asset",
|
|
23833
|
+
amount: carrier,
|
|
23834
|
+
fee: 0,
|
|
23835
|
+
total: carrier,
|
|
23836
|
+
assets: { delivered: asset, spent: asset },
|
|
23837
|
+
send: async () => makeHandle("ark-asset", async (emit) => {
|
|
23838
|
+
const txid = await ctx.wallet.send({
|
|
23839
|
+
address,
|
|
23840
|
+
amount: carrier,
|
|
23841
|
+
assets: [asset]
|
|
23842
|
+
});
|
|
23843
|
+
const result = { railId: "ark-asset", txid };
|
|
23844
|
+
emit({ status: "settled", result });
|
|
23845
|
+
return result;
|
|
23846
|
+
})
|
|
23847
|
+
};
|
|
23848
|
+
}
|
|
23849
|
+
};
|
|
23850
|
+
}
|
|
23851
|
+
var walletFeeSource = (wallet) => async () => (await wallet.arkProvider.getInfo()).fees;
|
|
23785
23852
|
var GROSS_UP_MAX_ROUNDS = 8;
|
|
23786
23853
|
function grossUpOffboard(net, feeInfo, script) {
|
|
23787
23854
|
const estimator = new Estimator(feeInfo?.intentFee ?? {});
|
|
@@ -23794,14 +23861,20 @@ function grossUpOffboard(net, feeInfo, script) {
|
|
|
23794
23861
|
}
|
|
23795
23862
|
return { gross, fee: gross - net };
|
|
23796
23863
|
}
|
|
23797
|
-
function onchainRail() {
|
|
23864
|
+
function onchainRail(deps) {
|
|
23865
|
+
if (typeof deps?.feeInfo !== "function") {
|
|
23866
|
+
throw new Error("onchain rail: a feeInfo source is required");
|
|
23867
|
+
}
|
|
23798
23868
|
return {
|
|
23799
23869
|
id: "onchain",
|
|
23800
23870
|
match: (req) => btcTarget(req.raw) !== void 0,
|
|
23871
|
+
// BTC only: an Arkade asset has no L1 representation to offboard to.
|
|
23872
|
+
available: (req) => assetsOf(req).length === 0,
|
|
23801
23873
|
quote: async (req, ctx) => {
|
|
23874
|
+
assertNoAssets("onchain", req);
|
|
23802
23875
|
const address = btcTarget(req.raw);
|
|
23803
23876
|
const amt = resolveSendAmount("onchain", req.raw, req.amount);
|
|
23804
|
-
const
|
|
23877
|
+
const fees = await deps.feeInfo();
|
|
23805
23878
|
const script = base.hex.encode(offboardDestinationScript(address));
|
|
23806
23879
|
const { gross, fee } = grossUpOffboard(amt, fees, script);
|
|
23807
23880
|
return {
|
|
@@ -23828,8 +23901,8 @@ function onchainRail() {
|
|
|
23828
23901
|
function createDefaultPaymentRouter(wallet) {
|
|
23829
23902
|
return new PaymentRouter({
|
|
23830
23903
|
wallet,
|
|
23831
|
-
prefs: { priority: ["ark", "lightning", "onchain"] }
|
|
23832
|
-
}).use(arkRail()).use(onchainRail());
|
|
23904
|
+
prefs: { priority: ["ark", "ark-asset", "lightning", "onchain"] }
|
|
23905
|
+
}).use(arkRail()).use(arkAssetRail()).use(onchainRail({ feeInfo: walletFeeSource(wallet) }));
|
|
23833
23906
|
}
|
|
23834
23907
|
/*! Bundled license information:
|
|
23835
23908
|
|
|
@@ -23840,6 +23913,7 @@ function createDefaultPaymentRouter(wallet) {
|
|
|
23840
23913
|
exports.ARKADE_MAGIC = ARKADE_MAGIC;
|
|
23841
23914
|
exports.ARKADE_SALTED_PREIMAGE_TAG = ARKADE_SALTED_PREIMAGE_TAG;
|
|
23842
23915
|
exports.ARKADE_SWAP_PREIMAGE_TAG = ARKADE_SWAP_PREIMAGE_TAG;
|
|
23916
|
+
exports.ASSET_CARRIER_SATS = ASSET_CARRIER_SATS;
|
|
23843
23917
|
exports.AbortError = AbortError;
|
|
23844
23918
|
exports.ActivityRegistry = ActivityRegistry;
|
|
23845
23919
|
exports.AmbiguousRouteError = AmbiguousRouteError;
|
|
@@ -23934,16 +24008,19 @@ exports.WalletNotInitializedError = WalletNotInitializedError;
|
|
|
23934
24008
|
exports.WalletRepositoryImpl = WalletRepositoryImpl;
|
|
23935
24009
|
exports.WsElectrumChainSource = WsElectrumChainSource;
|
|
23936
24010
|
exports.adoptContractDescriptor = adoptContractDescriptor;
|
|
24011
|
+
exports.arkAssetRail = arkAssetRail;
|
|
23937
24012
|
exports.arkRail = arkRail;
|
|
23938
24013
|
exports.arkTarget = arkTarget;
|
|
23939
24014
|
exports.arkade_exports = arkade_exports;
|
|
23940
24015
|
exports.assertFinalCommitmentMatchesValidated = assertFinalCommitmentMatchesValidated;
|
|
23941
24016
|
exports.assertIntentIdUnique = assertIntentIdUnique;
|
|
24017
|
+
exports.assertNoAssets = assertNoAssets;
|
|
23942
24018
|
exports.assertSendableAmount = assertSendableAmount;
|
|
23943
24019
|
exports.assertSubmittedArkTxid = assertSubmittedArkTxid;
|
|
23944
24020
|
exports.assertValidBatchExpiry = assertValidBatchExpiry;
|
|
23945
24021
|
exports.assertValidServerUnrollScript = assertValidServerUnrollScript;
|
|
23946
24022
|
exports.assetMintResolver = assetMintResolver;
|
|
24023
|
+
exports.assetsOf = assetsOf;
|
|
23947
24024
|
exports.attachPrevArkTxs = attachPrevArkTxs;
|
|
23948
24025
|
exports.attachPrevoutTxs = attachPrevoutTxs;
|
|
23949
24026
|
exports.awaitTransaction = awaitTransaction;
|
|
@@ -24027,6 +24104,7 @@ exports.promisifyRequest = promisifyRequest;
|
|
|
24027
24104
|
exports.provisionClaimSecret = provisionClaimSecret;
|
|
24028
24105
|
exports.provisionRefundKey = provisionRefundKey;
|
|
24029
24106
|
exports.requiresMigration = requiresMigration;
|
|
24107
|
+
exports.resolveAssetAmount = resolveAssetAmount;
|
|
24030
24108
|
exports.resolveBatchExpiryPolicy = resolveBatchExpiryPolicy;
|
|
24031
24109
|
exports.resolveCheckpointExitDelayPolicy = resolveCheckpointExitDelayPolicy;
|
|
24032
24110
|
exports.resolveDescriptorSigner = resolveDescriptorSigner;
|
|
@@ -24053,7 +24131,8 @@ exports.validateConnectorsTxGraph = validateConnectorsTxGraph;
|
|
|
24053
24131
|
exports.validateVtxoTxGraph = validateVtxoTxGraph;
|
|
24054
24132
|
exports.verifyTapscriptSignatures = verifyTapscriptSignatures;
|
|
24055
24133
|
exports.waitForIncomingFunds = waitForIncomingFunds;
|
|
24134
|
+
exports.walletFeeSource = walletFeeSource;
|
|
24056
24135
|
exports.warnAndFilterVtxosForScript = warnAndFilterVtxosForScript;
|
|
24057
24136
|
exports.withPrevTxs = withPrevTxs;
|
|
24058
|
-
//# sourceMappingURL=chunk-
|
|
24059
|
-
//# sourceMappingURL=chunk-
|
|
24137
|
+
//# sourceMappingURL=chunk-XTCOSZ34.cjs.map
|
|
24138
|
+
//# sourceMappingURL=chunk-XTCOSZ34.cjs.map
|