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