@arkade-os/sdk 0.4.61 → 0.4.63
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 +20 -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-BWDxp3Dr.d.cts → asyncStorageTaskQueue-CIUEhv2t.d.cts} +2 -2
- package/dist/{asyncStorageTaskQueue-Cq9FpKv6.d.ts → asyncStorageTaskQueue-LT-xvvDN.d.ts} +2 -2
- package/dist/{chunk-FNCQJLR2.cjs → chunk-AB67CMHS.cjs} +3 -3
- package/dist/{chunk-FNCQJLR2.cjs.map → chunk-AB67CMHS.cjs.map} +1 -1
- package/dist/{chunk-3NUDA3MB.cjs → chunk-COOBS7ET.cjs} +646 -476
- package/dist/chunk-COOBS7ET.cjs.map +1 -0
- package/dist/{chunk-YVQNHELA.js → chunk-CZFAMS57.js} +3 -3
- package/dist/{chunk-YVQNHELA.js.map → chunk-CZFAMS57.js.map} +1 -1
- package/dist/{chunk-GDI2A65Z.js → chunk-FKKERGKA.js} +4 -4
- package/dist/{chunk-GDI2A65Z.js.map → chunk-FKKERGKA.js.map} +1 -1
- package/dist/{chunk-XMRB74HA.cjs → chunk-K56BNZV3.cjs} +10 -10
- package/dist/{chunk-XMRB74HA.cjs.map → chunk-K56BNZV3.cjs.map} +1 -1
- package/dist/{chunk-XLHN5L2O.js → chunk-KWW74O2F.js} +4 -4
- package/dist/{chunk-XLHN5L2O.js.map → chunk-KWW74O2F.js.map} +1 -1
- package/dist/{chunk-2JHN5RCY.cjs → chunk-LG5GY73A.cjs} +17 -17
- package/dist/{chunk-2JHN5RCY.cjs.map → chunk-LG5GY73A.cjs.map} +1 -1
- package/dist/{chunk-PVY6DMN5.js → chunk-MA32NXUV.js} +3 -3
- package/dist/{chunk-PVY6DMN5.js.map → chunk-MA32NXUV.js.map} +1 -1
- package/dist/{chunk-6O5OLYTZ.js → chunk-OAESYVZQ.js} +3 -3
- package/dist/{chunk-6O5OLYTZ.js.map → chunk-OAESYVZQ.js.map} +1 -1
- package/dist/{chunk-SF5NKAUA.cjs → chunk-OL7V43WS.cjs} +48 -48
- package/dist/{chunk-SF5NKAUA.cjs.map → chunk-OL7V43WS.cjs.map} +1 -1
- package/dist/{chunk-XFYFREPH.cjs → chunk-P6XYE27K.cjs} +17 -17
- package/dist/{chunk-XFYFREPH.cjs.map → chunk-P6XYE27K.cjs.map} +1 -1
- package/dist/{chunk-AUEXB42T.js → chunk-X7MMBB7S.js} +252 -84
- package/dist/chunk-X7MMBB7S.js.map +1 -0
- package/dist/contracts/handlers/index.cjs +9 -9
- package/dist/contracts/handlers/index.d.cts +3 -3
- package/dist/contracts/handlers/index.d.ts +3 -3
- package/dist/contracts/handlers/index.js +2 -2
- package/dist/{delegate-C4Rl6h9l.d.cts → delegate-BBQW61ym.d.cts} +1 -1
- package/dist/{delegate-BySzD37I.d.ts → delegate-Dv_9OVHv.d.ts} +1 -1
- package/dist/{index-C29VNcxC.d.ts → index-Bxe9kBFs.d.ts} +2 -2
- package/dist/{index-BcRCHnzN.d.cts → index-CFOMyVMt.d.cts} +88 -12
- package/dist/{index-BcRCHnzN.d.ts → index-CFOMyVMt.d.ts} +88 -12
- package/dist/{index-Butfkm-K.d.cts → index-aZycGEsQ.d.cts} +2 -2
- package/dist/index.cjs +274 -266
- package/dist/index.d.cts +116 -20
- package/dist/index.d.ts +116 -20
- 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 +27 -18
- package/dist/repositories/sqlite/index.cjs.map +1 -1
- package/dist/repositories/sqlite/index.d.cts +20 -3
- package/dist/repositories/sqlite/index.d.ts +20 -3
- package/dist/repositories/sqlite/index.js +13 -6
- package/dist/repositories/sqlite/index.js.map +1 -1
- package/dist/{taskRunner-BTq3rMpI.d.cts → taskRunner-BJ6_AnLq.d.cts} +2 -2
- package/dist/{taskRunner-DxMJYJ7Y.d.ts → taskRunner-BQb0W1XG.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 +16 -16
- package/dist/wallet/expo/index.cjs.map +1 -1
- package/dist/wallet/expo/index.d.cts +5 -5
- package/dist/wallet/expo/index.d.ts +5 -5
- package/dist/wallet/expo/index.js +7 -7
- package/dist/wallet/expo/index.js.map +1 -1
- package/dist/{wallet-BVIfg2ic.d.ts → wallet-C2NvHjWB.d.cts} +14 -5
- package/dist/{wallet-DrSsUden.d.cts → wallet-DJUnN939.d.ts} +14 -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-3NUDA3MB.cjs.map +0 -1
- package/dist/chunk-AUEXB42T.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunkLG5GY73A_cjs = require('./chunk-LG5GY73A.cjs');
|
|
4
|
+
var chunkOL7V43WS_cjs = require('./chunk-OL7V43WS.cjs');
|
|
5
|
+
var chunkAB67CMHS_cjs = require('./chunk-AB67CMHS.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 = chunkAB67CMHS_cjs.getArkPsbtFields(tx.root, 0, chunkAB67CMHS_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 = chunkAB67CMHS_cjs.getArkPsbtFields(g.root, 0, chunkAB67CMHS_cjs.CosignerPublicKey).map((c) => c.key);
|
|
244
244
|
const { finalKey } = aggregateKeys(cosigners, true, {
|
|
245
245
|
taprootTweak: this.scriptRoot
|
|
246
246
|
});
|
|
@@ -354,6 +354,18 @@ var SingleKey = class _SingleKey {
|
|
|
354
354
|
if (signatureType === "ecdsa") return secp256k1.signAsync(message, this.key, { prehash: false });
|
|
355
355
|
return secp256k1.schnorr.signAsync(message, this.key);
|
|
356
356
|
}
|
|
357
|
+
/**
|
|
358
|
+
* BIP-340 sign `messageHash` with aux_rand = 0, so the signature — and
|
|
359
|
+
* anything derived from it — is reproducible from the key alone.
|
|
360
|
+
*
|
|
361
|
+
* What lets a static wallet derive a swap preimage instead of storing one
|
|
362
|
+
* (see `wallet/contractSecrets.ts`). Deliberately NOT `signMessage`, whose
|
|
363
|
+
* schnorr branch draws a random aux_rand: a preimage derived from that is
|
|
364
|
+
* unrecoverable, and the loss would only surface at claim time.
|
|
365
|
+
*/
|
|
366
|
+
async signSchnorrDeterministic(messageHash) {
|
|
367
|
+
return secp256k1.schnorr.signAsync(messageHash, this.key, new Uint8Array(32));
|
|
368
|
+
}
|
|
357
369
|
async toReadonly() {
|
|
358
370
|
return new ReadonlySingleKey(await this.compressedPublicKey());
|
|
359
371
|
}
|
|
@@ -419,7 +431,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
419
431
|
let network;
|
|
420
432
|
if ("descriptor" in opts && typeof opts.descriptor === "string") {
|
|
421
433
|
descriptor = opts.descriptor;
|
|
422
|
-
network =
|
|
434
|
+
network = chunkOL7V43WS_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
423
435
|
} else {
|
|
424
436
|
network = opts.isMainnet ?? true ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
425
437
|
descriptor = descriptorsScure.scriptExpressions.trBIP32({
|
|
@@ -483,6 +495,19 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
483
495
|
async signMessage(message, signatureType = "schnorr") {
|
|
484
496
|
return this.signMessageWithKey(this.derivedKey, message, signatureType);
|
|
485
497
|
}
|
|
498
|
+
/**
|
|
499
|
+
* BIP-340 sign `messageHash` with this identity's own key, aux_rand = 0.
|
|
500
|
+
*
|
|
501
|
+
* The descriptor-less sibling of
|
|
502
|
+
* {@link signSchnorrDeterministicWithDescriptor}, for an `auto`-mode wallet
|
|
503
|
+
* whose bare `tr(pubkey)` resolves to the identity itself rather than to a
|
|
504
|
+
* {@link DescriptorIdentity}. Deliberately NOT routed through
|
|
505
|
+
* `signMessage`, whose schnorr branch draws a random aux_rand and would
|
|
506
|
+
* make the "deterministic" signature unreproducible.
|
|
507
|
+
*/
|
|
508
|
+
async signSchnorrDeterministic(messageHash) {
|
|
509
|
+
return secp256k1.schnorr.signAsync(messageHash, this.derivedKey, new Uint8Array(32));
|
|
510
|
+
}
|
|
486
511
|
signerSession() {
|
|
487
512
|
return TreeSignerSession.random();
|
|
488
513
|
}
|
|
@@ -504,7 +529,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
504
529
|
* `StaticDescriptorProvider` for legacy single-key wallets.
|
|
505
530
|
*/
|
|
506
531
|
isOurs(descriptor) {
|
|
507
|
-
return
|
|
532
|
+
return chunkOL7V43WS_cjs.descriptorIsOurs(descriptor, this.descriptor, utils_js.pubSchnorr(this.derivedKey));
|
|
508
533
|
}
|
|
509
534
|
/**
|
|
510
535
|
* Signs each request with the key derived from its descriptor.
|
|
@@ -553,7 +578,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
553
578
|
}
|
|
554
579
|
// ── internal helpers ─────────────────────────────────────────────
|
|
555
580
|
derivePrivateKeyForDescriptor(descriptor) {
|
|
556
|
-
const network =
|
|
581
|
+
const network = chunkOL7V43WS_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
557
582
|
const expansion = descriptorsScure.expand({ descriptor, network });
|
|
558
583
|
if (expansion.isRanged) {
|
|
559
584
|
throw new Error(
|
|
@@ -639,7 +664,7 @@ var ReadonlyDescriptorIdentity = class _ReadonlyDescriptorIdentity {
|
|
|
639
664
|
*/
|
|
640
665
|
descriptor;
|
|
641
666
|
constructor(descriptor) {
|
|
642
|
-
const network =
|
|
667
|
+
const network = chunkOL7V43WS_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
643
668
|
let expansion;
|
|
644
669
|
try {
|
|
645
670
|
expansion = descriptorsScure.expand({ descriptor, network, index: 0 });
|
|
@@ -689,7 +714,7 @@ var ReadonlyDescriptorIdentity = class _ReadonlyDescriptorIdentity {
|
|
|
689
714
|
* `StaticDescriptorProvider` for legacy single-key wallets.
|
|
690
715
|
*/
|
|
691
716
|
isOurs(descriptor) {
|
|
692
|
-
return
|
|
717
|
+
return chunkOL7V43WS_cjs.descriptorIsOurs(descriptor, this.descriptor, this.indexZero.pubkey);
|
|
693
718
|
}
|
|
694
719
|
};
|
|
695
720
|
function serializeSeedOwnedSigningIdentity(identity) {
|
|
@@ -851,10 +876,10 @@ var DescriptorIdentity = class {
|
|
|
851
876
|
this.base = base;
|
|
852
877
|
}
|
|
853
878
|
async xOnlyPublicKey() {
|
|
854
|
-
return
|
|
879
|
+
return chunkOL7V43WS_cjs.deriveDescriptorLeafPubKey(this.descriptor);
|
|
855
880
|
}
|
|
856
881
|
async compressedPublicKey() {
|
|
857
|
-
return
|
|
882
|
+
return chunkOL7V43WS_cjs.deriveDescriptorLeafCompressedPubKey(this.descriptor);
|
|
858
883
|
}
|
|
859
884
|
async sign(tx, inputIndexes) {
|
|
860
885
|
const [signed] = await this.signer.signWithDescriptor([
|
|
@@ -916,12 +941,12 @@ var ForeignDescriptorError = class extends Error {
|
|
|
916
941
|
};
|
|
917
942
|
async function resolveDescriptorSigner(descriptor, identity, provider) {
|
|
918
943
|
const owner = provider?.isOurs(descriptor) ? provider : isHDCapableIdentity(identity) && identity.isOurs(descriptor) ? identity : void 0;
|
|
919
|
-
if (owner &&
|
|
944
|
+
if (owner && chunkOL7V43WS_cjs.parseHDDescriptor(descriptor)) {
|
|
920
945
|
return new DescriptorIdentity({ descriptor, signer: owner, base: identity });
|
|
921
946
|
}
|
|
922
947
|
let key;
|
|
923
948
|
try {
|
|
924
|
-
key =
|
|
949
|
+
key = chunkOL7V43WS_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
925
950
|
} catch {
|
|
926
951
|
throw new ForeignDescriptorError(descriptor);
|
|
927
952
|
}
|
|
@@ -1261,6 +1286,7 @@ var sha256 = /* @__PURE__ */ createHasher(
|
|
|
1261
1286
|
/* @__PURE__ */ oidNist(1)
|
|
1262
1287
|
);
|
|
1263
1288
|
var ARKADE_SWAP_PREIMAGE_TAG = "Arkade-RFQ-Preimage-v1";
|
|
1289
|
+
var ARKADE_SALTED_PREIMAGE_TAG = "Arkade-Contract-Preimage-Salted-v1";
|
|
1264
1290
|
function buildPreimageMessage(xonly, index) {
|
|
1265
1291
|
if (xonly.length !== 32) {
|
|
1266
1292
|
throw new Error(`x-only pubkey must be 32 bytes, got ${xonly.length}`);
|
|
@@ -1275,13 +1301,27 @@ function buildPreimageMessage(xonly, index) {
|
|
|
1275
1301
|
new DataView(message.buffer).setUint32(tag.length + 32, index, true);
|
|
1276
1302
|
return message;
|
|
1277
1303
|
}
|
|
1304
|
+
function buildSaltedPreimageMessage(xonly, salt) {
|
|
1305
|
+
if (xonly.length !== 32) {
|
|
1306
|
+
throw new Error(`x-only pubkey must be 32 bytes, got ${xonly.length}`);
|
|
1307
|
+
}
|
|
1308
|
+
if (salt.length !== 32) {
|
|
1309
|
+
throw new Error(`preimage salt must be 32 bytes, got ${salt.length}`);
|
|
1310
|
+
}
|
|
1311
|
+
const tag = new TextEncoder().encode(ARKADE_SALTED_PREIMAGE_TAG);
|
|
1312
|
+
const message = new Uint8Array(tag.length + 32 + 32);
|
|
1313
|
+
message.set(tag, 0);
|
|
1314
|
+
message.set(xonly, tag.length);
|
|
1315
|
+
message.set(salt, tag.length + 32);
|
|
1316
|
+
return message;
|
|
1317
|
+
}
|
|
1278
1318
|
var PREIMAGE_INDEX = 0;
|
|
1279
1319
|
function isPerArtifactDescriptor(descriptor) {
|
|
1280
|
-
return
|
|
1320
|
+
return chunkOL7V43WS_cjs.parseHDDescriptor(descriptor) !== null;
|
|
1281
1321
|
}
|
|
1282
1322
|
async function provisionDescriptor(wallet) {
|
|
1283
1323
|
const allocated = isHDAllocationCapable(wallet) ? await wallet.getNextSigningDescriptor() : void 0;
|
|
1284
|
-
return allocated ?? await
|
|
1324
|
+
return allocated ?? await chunkOL7V43WS_cjs.identityDescriptor(wallet.identity);
|
|
1285
1325
|
}
|
|
1286
1326
|
async function provisionRefundKey(wallet) {
|
|
1287
1327
|
const descriptor = await provisionDescriptor(wallet);
|
|
@@ -1293,21 +1333,43 @@ async function provisionClaimSecret(wallet, opts = {}) {
|
|
|
1293
1333
|
throw new Error(`preimage must be 32 bytes, got ${opts.preimage.length}`);
|
|
1294
1334
|
}
|
|
1295
1335
|
const { descriptor, pubkey } = await provisionRefundKey(wallet);
|
|
1296
|
-
const
|
|
1297
|
-
|
|
1336
|
+
const claim = async () => {
|
|
1337
|
+
if (opts.preimage) return { preimage: opts.preimage, mustPersistPreimage: true };
|
|
1338
|
+
if (isPerArtifactDescriptor(descriptor)) {
|
|
1339
|
+
return {
|
|
1340
|
+
preimage: await derivePreimage(wallet, descriptor),
|
|
1341
|
+
mustPersistPreimage: false
|
|
1342
|
+
};
|
|
1343
|
+
}
|
|
1344
|
+
const preimageSalt2 = randomBytes(32);
|
|
1345
|
+
try {
|
|
1346
|
+
return {
|
|
1347
|
+
preimage: await derivePreimage(wallet, descriptor, preimageSalt2),
|
|
1348
|
+
preimageSalt: preimageSalt2,
|
|
1349
|
+
mustPersistPreimage: false
|
|
1350
|
+
};
|
|
1351
|
+
} catch (cause) {
|
|
1352
|
+
if (cause instanceof ForeignDescriptorError || cause instanceof WalletCannotSignError) {
|
|
1353
|
+
throw cause;
|
|
1354
|
+
}
|
|
1355
|
+
return { preimage: randomBytes(32), mustPersistPreimage: true };
|
|
1356
|
+
}
|
|
1357
|
+
};
|
|
1358
|
+
const { preimage, preimageSalt, mustPersistPreimage } = await claim();
|
|
1298
1359
|
return {
|
|
1299
1360
|
descriptor,
|
|
1300
1361
|
pubkey,
|
|
1301
1362
|
preimage,
|
|
1302
1363
|
paymentHash: sha256(preimage),
|
|
1303
|
-
|
|
1364
|
+
...preimageSalt ? { preimageSalt } : {},
|
|
1365
|
+
mustPersistPreimage
|
|
1304
1366
|
};
|
|
1305
1367
|
}
|
|
1306
1368
|
async function contractSigner(wallet, descriptor) {
|
|
1307
1369
|
const signer = isHDWalletCapable(wallet) ? await wallet.signerForDescriptor(descriptor) : wallet.identity;
|
|
1308
1370
|
let expected;
|
|
1309
1371
|
try {
|
|
1310
|
-
expected =
|
|
1372
|
+
expected = chunkOL7V43WS_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
1311
1373
|
} catch (cause) {
|
|
1312
1374
|
throw new ForeignDescriptorError(descriptor, { cause });
|
|
1313
1375
|
}
|
|
@@ -1324,33 +1386,33 @@ var WalletCannotSignError = class extends Error {
|
|
|
1324
1386
|
descriptor;
|
|
1325
1387
|
name = "WalletCannotSignError";
|
|
1326
1388
|
};
|
|
1327
|
-
async function contractPreimage(wallet, descriptor,
|
|
1328
|
-
if (stored) {
|
|
1329
|
-
if (stored.length !== 32) {
|
|
1330
|
-
throw new Error(`stored preimage must be 32 bytes, got ${stored.length}`);
|
|
1389
|
+
async function contractPreimage(wallet, descriptor, opts = {}) {
|
|
1390
|
+
if (opts.stored) {
|
|
1391
|
+
if (opts.stored.length !== 32) {
|
|
1392
|
+
throw new Error(`stored preimage must be 32 bytes, got ${opts.stored.length}`);
|
|
1331
1393
|
}
|
|
1332
|
-
return stored;
|
|
1333
|
-
}
|
|
1334
|
-
if (!isPerArtifactDescriptor(descriptor)) {
|
|
1335
|
-
throw new Error(
|
|
1336
|
-
`descriptor ${descriptor} names no single artifact, so its preimage cannot be derived; none was stored`
|
|
1337
|
-
);
|
|
1394
|
+
return opts.stored;
|
|
1338
1395
|
}
|
|
1339
|
-
return derivePreimage(wallet, descriptor);
|
|
1396
|
+
if (isPerArtifactDescriptor(descriptor)) return derivePreimage(wallet, descriptor);
|
|
1397
|
+
if (opts.salt) return derivePreimage(wallet, descriptor, opts.salt);
|
|
1398
|
+
throw new Error(
|
|
1399
|
+
`descriptor ${descriptor} names no single artifact, so its preimage cannot be derived; no salt and no stored preimage were given`
|
|
1400
|
+
);
|
|
1340
1401
|
}
|
|
1341
1402
|
function isDeterministicSigner(value) {
|
|
1342
1403
|
if (typeof value !== "object" || value === null) return false;
|
|
1343
1404
|
const v = value;
|
|
1344
1405
|
return typeof v.signSchnorrDeterministic === "function" && typeof v.xOnlyPublicKey === "function";
|
|
1345
1406
|
}
|
|
1346
|
-
async function derivePreimage(wallet, descriptor) {
|
|
1407
|
+
async function derivePreimage(wallet, descriptor, salt) {
|
|
1347
1408
|
const signer = await contractSigner(wallet, descriptor);
|
|
1348
1409
|
if (!isDeterministicSigner(signer)) {
|
|
1349
1410
|
throw new Error(
|
|
1350
1411
|
`wallet cannot sign deterministically for ${descriptor}; its preimage is not derivable`
|
|
1351
1412
|
);
|
|
1352
1413
|
}
|
|
1353
|
-
const
|
|
1414
|
+
const xonly = await signer.xOnlyPublicKey();
|
|
1415
|
+
const message = salt ? buildSaltedPreimageMessage(xonly, salt) : buildPreimageMessage(xonly, PREIMAGE_INDEX);
|
|
1354
1416
|
try {
|
|
1355
1417
|
return sha256(await signer.signSchnorrDeterministic(sha256(message)));
|
|
1356
1418
|
} catch (cause) {
|
|
@@ -1526,14 +1588,14 @@ var RestDelegateProvider = class {
|
|
|
1526
1588
|
*/
|
|
1527
1589
|
async delegate(intent, forfeitTxs, options) {
|
|
1528
1590
|
const url = `${this.url}/v1/delegate`;
|
|
1529
|
-
const response = await
|
|
1591
|
+
const response = await chunkAB67CMHS_cjs.baseFetch(url, {
|
|
1530
1592
|
method: "POST",
|
|
1531
1593
|
headers: {
|
|
1532
1594
|
"Content-Type": "application/json"
|
|
1533
1595
|
},
|
|
1534
1596
|
body: JSON.stringify({
|
|
1535
1597
|
intent: {
|
|
1536
|
-
message:
|
|
1598
|
+
message: chunkAB67CMHS_cjs.Intent.encodeMessage(intent.message),
|
|
1537
1599
|
proof: intent.proof
|
|
1538
1600
|
},
|
|
1539
1601
|
forfeit_txs: forfeitTxs,
|
|
@@ -1553,7 +1615,7 @@ var RestDelegateProvider = class {
|
|
|
1553
1615
|
*/
|
|
1554
1616
|
async getDelegateInfo() {
|
|
1555
1617
|
const url = `${this.url}/v1/delegator/info`;
|
|
1556
|
-
const response = await
|
|
1618
|
+
const response = await chunkAB67CMHS_cjs.rateGate.runHttp(url, () => chunkAB67CMHS_cjs.baseFetch(url));
|
|
1557
1619
|
if (!response.ok) {
|
|
1558
1620
|
const errorText2 = await response.text();
|
|
1559
1621
|
throw new Error(`Failed to get delegate info: ${errorText2}`);
|
|
@@ -1580,7 +1642,7 @@ var ESPLORA_URL = {
|
|
|
1580
1642
|
regtest: "http://localhost:3000/api"
|
|
1581
1643
|
};
|
|
1582
1644
|
var EsploraProvider = class {
|
|
1583
|
-
constructor(baseUrl = ESPLORA_URL[
|
|
1645
|
+
constructor(baseUrl = ESPLORA_URL[chunkAB67CMHS_cjs.DEFAULT_NETWORK_NAME], opts) {
|
|
1584
1646
|
this.baseUrl = baseUrl;
|
|
1585
1647
|
this.pollingInterval = opts?.pollingInterval ?? 15e3;
|
|
1586
1648
|
this.forcePolling = opts?.forcePolling ?? false;
|
|
@@ -1589,14 +1651,14 @@ var EsploraProvider = class {
|
|
|
1589
1651
|
pollingInterval;
|
|
1590
1652
|
forcePolling;
|
|
1591
1653
|
async getCoins(address) {
|
|
1592
|
-
const response = await
|
|
1654
|
+
const response = await chunkAB67CMHS_cjs.baseFetch(`${this.baseUrl}/address/${address}/utxo`);
|
|
1593
1655
|
if (!response.ok) {
|
|
1594
1656
|
throw new Error(`Failed to fetch UTXOs: ${response.statusText}`);
|
|
1595
1657
|
}
|
|
1596
1658
|
return response.json();
|
|
1597
1659
|
}
|
|
1598
1660
|
async getFeeRate() {
|
|
1599
|
-
const response = await
|
|
1661
|
+
const response = await chunkAB67CMHS_cjs.baseFetch(`${this.baseUrl}/fee-estimates`);
|
|
1600
1662
|
if (response.status === 404) {
|
|
1601
1663
|
return void 0;
|
|
1602
1664
|
}
|
|
@@ -1617,7 +1679,7 @@ var EsploraProvider = class {
|
|
|
1617
1679
|
}
|
|
1618
1680
|
}
|
|
1619
1681
|
async getTxOutspends(txid) {
|
|
1620
|
-
const response = await
|
|
1682
|
+
const response = await chunkAB67CMHS_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/outspends`);
|
|
1621
1683
|
if (!response.ok) {
|
|
1622
1684
|
const error = await response.text();
|
|
1623
1685
|
throw new Error(`Failed to get transaction outspends: ${error}`);
|
|
@@ -1625,7 +1687,7 @@ var EsploraProvider = class {
|
|
|
1625
1687
|
return response.json();
|
|
1626
1688
|
}
|
|
1627
1689
|
async getTransactions(address) {
|
|
1628
|
-
const response = await
|
|
1690
|
+
const response = await chunkAB67CMHS_cjs.baseFetch(`${this.baseUrl}/address/${address}/txs`);
|
|
1629
1691
|
if (!response.ok) {
|
|
1630
1692
|
const error = await response.text();
|
|
1631
1693
|
throw new Error(`Failed to get transactions: ${error}`);
|
|
@@ -1633,7 +1695,7 @@ var EsploraProvider = class {
|
|
|
1633
1695
|
return response.json();
|
|
1634
1696
|
}
|
|
1635
1697
|
async getTxStatus(txid) {
|
|
1636
|
-
const txresponse = await
|
|
1698
|
+
const txresponse = await chunkAB67CMHS_cjs.baseFetch(`${this.baseUrl}/tx/${txid}`);
|
|
1637
1699
|
if (!txresponse.ok) {
|
|
1638
1700
|
throw new Error(txresponse.statusText);
|
|
1639
1701
|
}
|
|
@@ -1641,7 +1703,7 @@ var EsploraProvider = class {
|
|
|
1641
1703
|
if (!tx.status.confirmed) {
|
|
1642
1704
|
return { confirmed: false };
|
|
1643
1705
|
}
|
|
1644
|
-
const response = await
|
|
1706
|
+
const response = await chunkAB67CMHS_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/status`);
|
|
1645
1707
|
if (!response.ok) {
|
|
1646
1708
|
throw new Error(`Failed to get transaction status: ${response.statusText}`);
|
|
1647
1709
|
}
|
|
@@ -1725,7 +1787,7 @@ var EsploraProvider = class {
|
|
|
1725
1787
|
return stopFunc;
|
|
1726
1788
|
}
|
|
1727
1789
|
async getChainTip() {
|
|
1728
|
-
const tipBlocks = await
|
|
1790
|
+
const tipBlocks = await chunkAB67CMHS_cjs.baseFetch(`${this.baseUrl}/blocks`);
|
|
1729
1791
|
if (!tipBlocks.ok) {
|
|
1730
1792
|
throw new Error(`Failed to get chain tip: ${tipBlocks.statusText}`);
|
|
1731
1793
|
}
|
|
@@ -1744,7 +1806,7 @@ var EsploraProvider = class {
|
|
|
1744
1806
|
};
|
|
1745
1807
|
}
|
|
1746
1808
|
async broadcastPackage(parent, child) {
|
|
1747
|
-
const response = await
|
|
1809
|
+
const response = await chunkAB67CMHS_cjs.baseFetch(`${this.baseUrl}/txs/package`, {
|
|
1748
1810
|
method: "POST",
|
|
1749
1811
|
headers: {
|
|
1750
1812
|
"Content-Type": "application/json"
|
|
@@ -1758,7 +1820,7 @@ var EsploraProvider = class {
|
|
|
1758
1820
|
return response.json();
|
|
1759
1821
|
}
|
|
1760
1822
|
async broadcastTx(tx) {
|
|
1761
|
-
const response = await
|
|
1823
|
+
const response = await chunkAB67CMHS_cjs.baseFetch(`${this.baseUrl}/tx`, {
|
|
1762
1824
|
method: "POST",
|
|
1763
1825
|
headers: {
|
|
1764
1826
|
"Content-Type": "text/plain"
|
|
@@ -1920,7 +1982,7 @@ function findP2AOutput(tx) {
|
|
|
1920
1982
|
var CHILD_DUST_AMOUNT = 546;
|
|
1921
1983
|
function buildAnchorChild(params) {
|
|
1922
1984
|
const { parent, feeRate, fundingCoins, changeAddress, tapInternalKey, network } = params;
|
|
1923
|
-
const child = new
|
|
1985
|
+
const child = new chunkAB67CMHS_cjs.Transaction({ version: 3, allowLegacyWitnessUtxo: true });
|
|
1924
1986
|
child.addInput(findP2AOutput(parent));
|
|
1925
1987
|
const estimator = TxWeightEstimator.create().addP2AInput();
|
|
1926
1988
|
for (const _ of fundingCoins) {
|
|
@@ -1968,7 +2030,7 @@ function buildForfeitTx(inputs, forfeitPkScript, txLocktime) {
|
|
|
1968
2030
|
);
|
|
1969
2031
|
}
|
|
1970
2032
|
function buildForfeitTxWithOutput(inputs, output, txLocktime) {
|
|
1971
|
-
const tx = new
|
|
2033
|
+
const tx = new chunkAB67CMHS_cjs.Transaction({
|
|
1972
2034
|
version: 3,
|
|
1973
2035
|
lockTime: txLocktime
|
|
1974
2036
|
});
|
|
@@ -2044,7 +2106,7 @@ function validateVtxoTxGraph(graph, roundTransaction, sweepTapTreeRoot) {
|
|
|
2044
2106
|
if (previousScriptKey.length !== 32) {
|
|
2045
2107
|
throw new Error(`parent output ${childIndex} has invalid script`);
|
|
2046
2108
|
}
|
|
2047
|
-
const cosigners =
|
|
2109
|
+
const cosigners = chunkAB67CMHS_cjs.getArkPsbtFields(child.root, 0, chunkAB67CMHS_cjs.CosignerPublicKey);
|
|
2048
2110
|
if (cosigners.length === 0) {
|
|
2049
2111
|
throw ErrMissingCosignersPublicKeys;
|
|
2050
2112
|
}
|
|
@@ -2102,7 +2164,7 @@ var EmulatorPacket = class _EmulatorPacket {
|
|
|
2102
2164
|
return new _EmulatorPacket(entries);
|
|
2103
2165
|
}
|
|
2104
2166
|
static fromBytes(data) {
|
|
2105
|
-
const reader = new
|
|
2167
|
+
const reader = new chunkLG5GY73A_cjs.BufferReader(data);
|
|
2106
2168
|
const entryCount = reader.readCompactSize();
|
|
2107
2169
|
const entries = [];
|
|
2108
2170
|
for (let i = 0; i < entryCount; i++) {
|
|
@@ -2120,7 +2182,7 @@ var EmulatorPacket = class _EmulatorPacket {
|
|
|
2120
2182
|
return _EmulatorPacket.PACKET_TYPE;
|
|
2121
2183
|
}
|
|
2122
2184
|
serialize() {
|
|
2123
|
-
const writer = new
|
|
2185
|
+
const writer = new chunkLG5GY73A_cjs.BufferWriter();
|
|
2124
2186
|
writer.writeCompactSize(this.entries.length);
|
|
2125
2187
|
for (const entry of this.entries) {
|
|
2126
2188
|
writer.writeUint16LE(entry.vin);
|
|
@@ -2207,7 +2269,7 @@ var Extension = class _Extension {
|
|
|
2207
2269
|
`expected magic prefix ${base.hex.encode(ARKADE_MAGIC)}, got ${base.hex.encode(payload.slice(0, Math.min(payload.length, ARKADE_MAGIC.length)))}`
|
|
2208
2270
|
);
|
|
2209
2271
|
}
|
|
2210
|
-
const reader = new
|
|
2272
|
+
const reader = new chunkLG5GY73A_cjs.BufferReader(payload.slice(ARKADE_MAGIC.length));
|
|
2211
2273
|
const packets = [];
|
|
2212
2274
|
while (reader.remaining() > 0) {
|
|
2213
2275
|
const packetType = reader.readByte();
|
|
@@ -2281,7 +2343,7 @@ var Extension = class _Extension {
|
|
|
2281
2343
|
*/
|
|
2282
2344
|
getAssetPacket() {
|
|
2283
2345
|
for (const p of this.packets) {
|
|
2284
|
-
if (p instanceof
|
|
2346
|
+
if (p instanceof chunkLG5GY73A_cjs.Packet) {
|
|
2285
2347
|
return p;
|
|
2286
2348
|
}
|
|
2287
2349
|
}
|
|
@@ -2319,8 +2381,8 @@ var Extension = class _Extension {
|
|
|
2319
2381
|
};
|
|
2320
2382
|
function parsePacket(packetType, data) {
|
|
2321
2383
|
switch (packetType) {
|
|
2322
|
-
case
|
|
2323
|
-
return
|
|
2384
|
+
case chunkLG5GY73A_cjs.Packet.PACKET_TYPE:
|
|
2385
|
+
return chunkLG5GY73A_cjs.Packet.fromBytes(data);
|
|
2324
2386
|
case EmulatorPacket.PACKET_TYPE:
|
|
2325
2387
|
return EmulatorPacket.fromBytes(data);
|
|
2326
2388
|
default:
|
|
@@ -2367,16 +2429,16 @@ function buildOpReturnScript(data) {
|
|
|
2367
2429
|
}
|
|
2368
2430
|
return script;
|
|
2369
2431
|
}
|
|
2370
|
-
var ErrOffchainOutputNotFound = (address) => new
|
|
2371
|
-
var ErrInvalidAssetOutputAmount = (got, want, assetId) => new
|
|
2432
|
+
var ErrOffchainOutputNotFound = (address) => new chunkAB67CMHS_cjs.ServerResponseMismatchError(`offchain send output not found: ${address}`);
|
|
2433
|
+
var ErrInvalidAssetOutputAmount = (got, want, assetId) => new chunkAB67CMHS_cjs.ServerResponseMismatchError(
|
|
2372
2434
|
`invalid asset output amount for ${assetId}: got ${got}, want ${want}`
|
|
2373
2435
|
);
|
|
2374
|
-
var ErrAssetGroupNotFound = (assetId) => new
|
|
2375
|
-
var ErrAssetOutputNotFound = (assetId, outputIndex) => new
|
|
2436
|
+
var ErrAssetGroupNotFound = (assetId) => new chunkAB67CMHS_cjs.ServerResponseMismatchError(`asset group not found in batch leaf: ${assetId}`);
|
|
2437
|
+
var ErrAssetOutputNotFound = (assetId, outputIndex) => new chunkAB67CMHS_cjs.ServerResponseMismatchError(
|
|
2376
2438
|
`asset output not found in asset group ${assetId} at index ${outputIndex}`
|
|
2377
2439
|
);
|
|
2378
|
-
var ErrOnchainOutputNotFound = (address) => new
|
|
2379
|
-
var ErrUnvalidatedOffchainOutput = (address) => new
|
|
2440
|
+
var ErrOnchainOutputNotFound = (address) => new chunkAB67CMHS_cjs.ServerResponseMismatchError(`onchain output not found: ${address}`);
|
|
2441
|
+
var ErrUnvalidatedOffchainOutput = (address) => new chunkAB67CMHS_cjs.ServerResponseMismatchError(
|
|
2380
2442
|
`offchain output ${address} cannot be validated: virtual output tree signing did not run`
|
|
2381
2443
|
);
|
|
2382
2444
|
var ErrInvalidOnchainOutputAmount = (address) => new Error(`invalid onchain output amount: ${address}`);
|
|
@@ -2385,7 +2447,7 @@ var ErrInvalidOffchainOutputAmount = (address) => new Error(`invalid offchain ou
|
|
|
2385
2447
|
function assertFinalCommitmentMatchesValidated(finalCommitmentTx, validatedCommitmentTxid, context) {
|
|
2386
2448
|
if (!validatedCommitmentTxid) return;
|
|
2387
2449
|
if (finalCommitmentTx.id === validatedCommitmentTxid) return;
|
|
2388
|
-
throw new
|
|
2450
|
+
throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
|
|
2389
2451
|
`${context}: finalization commitment tx ${finalCommitmentTx.id} differs from the validated commitment tx ${validatedCommitmentTxid}`
|
|
2390
2452
|
);
|
|
2391
2453
|
}
|
|
@@ -2395,7 +2457,7 @@ function validateBatchRecipients(commitmentTx, vtxoTreeLeaves, recipients, netwo
|
|
|
2395
2457
|
for (const recipient of recipients) {
|
|
2396
2458
|
let arkAddress;
|
|
2397
2459
|
try {
|
|
2398
|
-
arkAddress =
|
|
2460
|
+
arkAddress = chunkAB67CMHS_cjs.ArkAddress.decode(recipient.address);
|
|
2399
2461
|
} catch {
|
|
2400
2462
|
validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
|
|
2401
2463
|
continue;
|
|
@@ -2407,7 +2469,7 @@ function validateBatchRecipientsWithoutTree(commitmentTx, recipients, network) {
|
|
|
2407
2469
|
const usedOnchainOutputs = /* @__PURE__ */ new Set();
|
|
2408
2470
|
for (const recipient of recipients) {
|
|
2409
2471
|
try {
|
|
2410
|
-
|
|
2472
|
+
chunkAB67CMHS_cjs.ArkAddress.decode(recipient.address);
|
|
2411
2473
|
} catch {
|
|
2412
2474
|
validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
|
|
2413
2475
|
continue;
|
|
@@ -2523,6 +2585,7 @@ async function buildActivities(txs, resolvers) {
|
|
|
2523
2585
|
groupId: a.groupId,
|
|
2524
2586
|
label: a.label ?? b.label,
|
|
2525
2587
|
kind: a.kind ?? b.kind,
|
|
2588
|
+
outcome: a.outcome ?? b.outcome,
|
|
2526
2589
|
metadata: { ...b.metadata, ...a.metadata },
|
|
2527
2590
|
amount: a.amount ?? b.amount
|
|
2528
2591
|
});
|
|
@@ -2560,6 +2623,7 @@ async function buildActivities(txs, resolvers) {
|
|
|
2560
2623
|
b.intent = {
|
|
2561
2624
|
label: b.intent?.label ?? m.label,
|
|
2562
2625
|
kind: b.intent?.kind ?? m.kind,
|
|
2626
|
+
outcome: b.intent?.outcome ?? m.outcome,
|
|
2563
2627
|
metadata: { ...m.metadata, ...b.intent?.metadata }
|
|
2564
2628
|
};
|
|
2565
2629
|
b.members.push({ tx, amount: signedAmount(tx, m.amount ?? tx.amount) });
|
|
@@ -2638,7 +2702,7 @@ function assetMintResolver() {
|
|
|
2638
2702
|
if (!tx.assets?.length || !tx.key.arkTxid) return void 0;
|
|
2639
2703
|
const minted = tx.assets.filter((a) => {
|
|
2640
2704
|
try {
|
|
2641
|
-
return base.hex.encode(
|
|
2705
|
+
return base.hex.encode(chunkLG5GY73A_cjs.AssetId.fromString(a.assetId).txid) === tx.key.arkTxid;
|
|
2642
2706
|
} catch {
|
|
2643
2707
|
return false;
|
|
2644
2708
|
}
|
|
@@ -2681,7 +2745,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
2681
2745
|
const existing = inputsByAssetId.get(asset.assetId);
|
|
2682
2746
|
inputsByAssetId.set(asset.assetId, [
|
|
2683
2747
|
...existing ?? [],
|
|
2684
|
-
|
|
2748
|
+
chunkLG5GY73A_cjs.AssetInput.create(inputIndex, asset.amount)
|
|
2685
2749
|
]);
|
|
2686
2750
|
}
|
|
2687
2751
|
}
|
|
@@ -2693,7 +2757,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
2693
2757
|
const existing = outputsByAssetId.get(asset.assetId);
|
|
2694
2758
|
outputsByAssetId.set(asset.assetId, [
|
|
2695
2759
|
...existing ?? [],
|
|
2696
|
-
|
|
2760
|
+
chunkLG5GY73A_cjs.AssetOutput.create(outputIndex, asset.amount)
|
|
2697
2761
|
]);
|
|
2698
2762
|
}
|
|
2699
2763
|
}
|
|
@@ -2704,7 +2768,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
2704
2768
|
const existing = outputsByAssetId.get(asset.assetId);
|
|
2705
2769
|
outputsByAssetId.set(asset.assetId, [
|
|
2706
2770
|
...existing ?? [],
|
|
2707
|
-
|
|
2771
|
+
chunkLG5GY73A_cjs.AssetOutput.create(outputIndex, asset.amount)
|
|
2708
2772
|
]);
|
|
2709
2773
|
}
|
|
2710
2774
|
}
|
|
@@ -2713,11 +2777,11 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
2713
2777
|
for (const assetIdStr of allAssetIds) {
|
|
2714
2778
|
const inputs = inputsByAssetId.get(assetIdStr);
|
|
2715
2779
|
const outputs = outputsByAssetId.get(assetIdStr);
|
|
2716
|
-
const assetId =
|
|
2717
|
-
const group =
|
|
2780
|
+
const assetId = chunkLG5GY73A_cjs.AssetId.fromString(assetIdStr);
|
|
2781
|
+
const group = chunkLG5GY73A_cjs.AssetGroup.create(assetId, null, inputs ?? [], outputs ?? [], []);
|
|
2718
2782
|
groups.push(group);
|
|
2719
2783
|
}
|
|
2720
|
-
return
|
|
2784
|
+
return chunkLG5GY73A_cjs.Packet.create(groups);
|
|
2721
2785
|
}
|
|
2722
2786
|
function selectCoinsWithAsset(coins, assetId, requiredAmount) {
|
|
2723
2787
|
const coinsWithAsset = coins.filter((coin) => coin.assets?.some((a) => a.assetId === assetId));
|
|
@@ -2802,13 +2866,13 @@ var toTimelock = (value) => ({
|
|
|
2802
2866
|
var toSeconds = (t) => t.type === "seconds" ? t.value : t.value * NOMINAL_BLOCK_SECONDS;
|
|
2803
2867
|
function assertTimelockInPolicy(timelock, policy, label, overrideOption) {
|
|
2804
2868
|
if (policy.requireSeconds && timelock.type === "blocks") {
|
|
2805
|
-
throw new
|
|
2869
|
+
throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
|
|
2806
2870
|
`${label} rejected: block-typed timelocks are not accepted (got ${timelock.value})`
|
|
2807
2871
|
);
|
|
2808
2872
|
}
|
|
2809
2873
|
const seconds = toSeconds(timelock);
|
|
2810
2874
|
if (seconds < policy.minSeconds) {
|
|
2811
|
-
throw new
|
|
2875
|
+
throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
|
|
2812
2876
|
`${label} rejected: ${timelock.value} ${timelock.type} is below the ${policy.minSeconds}s floor; pass ${overrideOption}: ${seconds}n to Wallet.create to lower it`
|
|
2813
2877
|
);
|
|
2814
2878
|
}
|
|
@@ -2829,7 +2893,7 @@ function resolveBatchExpiryPolicy(network, overrides) {
|
|
|
2829
2893
|
}
|
|
2830
2894
|
function assertValidBatchExpiry(batchExpiry, policy) {
|
|
2831
2895
|
if (policy.advertisedVtxoTreeExpiry !== void 0 && batchExpiry !== policy.advertisedVtxoTreeExpiry) {
|
|
2832
|
-
throw new
|
|
2896
|
+
throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
|
|
2833
2897
|
`batch expiry rejected: ${batchExpiry} does not match the advertised vtxoTreeExpiry ${policy.advertisedVtxoTreeExpiry}`
|
|
2834
2898
|
);
|
|
2835
2899
|
}
|
|
@@ -2859,21 +2923,21 @@ function resolveCheckpointExitDelayPolicy(network, overrides) {
|
|
|
2859
2923
|
function assertValidServerUnrollScript(checkpointTapscript, policy) {
|
|
2860
2924
|
let script;
|
|
2861
2925
|
try {
|
|
2862
|
-
script =
|
|
2926
|
+
script = chunkAB67CMHS_cjs.CSVMultisigTapscript.decode(base.hex.decode(checkpointTapscript));
|
|
2863
2927
|
} catch (e) {
|
|
2864
|
-
throw new
|
|
2928
|
+
throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
|
|
2865
2929
|
`checkpoint exit delay rejected: invalid checkpointTapscript from server (${e instanceof Error ? e.message : String(e)})`
|
|
2866
2930
|
);
|
|
2867
2931
|
}
|
|
2868
2932
|
if (policy.advertisedForfeitPubkey !== void 0) {
|
|
2869
2933
|
const { pubkeys } = script.params;
|
|
2870
2934
|
if (pubkeys.length !== 1) {
|
|
2871
|
-
throw new
|
|
2935
|
+
throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
|
|
2872
2936
|
`checkpoint exit delay rejected: checkpointTapscript must commit to exactly one pubkey, got ${pubkeys.length} [${pubkeys.map(base.hex.encode).join(", ")}]`
|
|
2873
2937
|
);
|
|
2874
2938
|
}
|
|
2875
2939
|
if (!utils_js.equalBytes(pubkeys[0], policy.advertisedForfeitPubkey)) {
|
|
2876
|
-
throw new
|
|
2940
|
+
throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
|
|
2877
2941
|
`checkpoint exit delay rejected: checkpointTapscript pubkey ${base.hex.encode(pubkeys[0])} does not match the advertised forfeitPubkey ${base.hex.encode(policy.advertisedForfeitPubkey)}`
|
|
2878
2942
|
);
|
|
2879
2943
|
}
|
|
@@ -2917,8 +2981,8 @@ function buildOffchainTx(inputs, outputs, serverUnrollScript) {
|
|
|
2917
2981
|
function buildVirtualTx(inputs, outputs) {
|
|
2918
2982
|
let lockTime = 0n;
|
|
2919
2983
|
for (const input of inputs) {
|
|
2920
|
-
const tapscript =
|
|
2921
|
-
if (
|
|
2984
|
+
const tapscript = chunkAB67CMHS_cjs.decodeTapscript(chunkAB67CMHS_cjs.scriptFromTapLeafScript(input.tapLeafScript));
|
|
2985
|
+
if (chunkAB67CMHS_cjs.CLTVMultisigTapscript.is(tapscript)) {
|
|
2922
2986
|
if (lockTime !== 0n) {
|
|
2923
2987
|
if (isSeconds(lockTime) !== isSeconds(tapscript.params.absoluteTimelock)) {
|
|
2924
2988
|
throw new Error("cannot mix seconds and blocks locktime");
|
|
@@ -2929,7 +2993,7 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
2929
2993
|
}
|
|
2930
2994
|
}
|
|
2931
2995
|
}
|
|
2932
|
-
const tx = new
|
|
2996
|
+
const tx = new chunkAB67CMHS_cjs.Transaction({
|
|
2933
2997
|
version: 3,
|
|
2934
2998
|
lockTime: Number(lockTime)
|
|
2935
2999
|
});
|
|
@@ -2939,12 +3003,12 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
2939
3003
|
index: input.vout,
|
|
2940
3004
|
sequence: lockTime ? btcSigner.DEFAULT_SEQUENCE - 1 : void 0,
|
|
2941
3005
|
witnessUtxo: {
|
|
2942
|
-
script:
|
|
3006
|
+
script: chunkAB67CMHS_cjs.VtxoScript.decode(input.tapTree).pkScript,
|
|
2943
3007
|
amount: BigInt(input.value)
|
|
2944
3008
|
},
|
|
2945
3009
|
tapLeafScript: [input.tapLeafScript]
|
|
2946
3010
|
});
|
|
2947
|
-
|
|
3011
|
+
chunkAB67CMHS_cjs.setArkPsbtField(tx, i, chunkAB67CMHS_cjs.VtxoTaprootTree, input.tapTree);
|
|
2948
3012
|
}
|
|
2949
3013
|
for (const output of outputs) {
|
|
2950
3014
|
tx.addOutput(output);
|
|
@@ -2953,8 +3017,8 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
2953
3017
|
return tx;
|
|
2954
3018
|
}
|
|
2955
3019
|
function buildCheckpointTx(vtxo, serverUnrollScript) {
|
|
2956
|
-
const collaborativeClosure =
|
|
2957
|
-
const checkpointVtxoScript = new
|
|
3020
|
+
const collaborativeClosure = chunkAB67CMHS_cjs.decodeTapscript(chunkAB67CMHS_cjs.scriptFromTapLeafScript(vtxo.tapLeafScript));
|
|
3021
|
+
const checkpointVtxoScript = new chunkAB67CMHS_cjs.VtxoScript([
|
|
2958
3022
|
serverUnrollScript.script,
|
|
2959
3023
|
collaborativeClosure.script
|
|
2960
3024
|
]);
|
|
@@ -3107,7 +3171,7 @@ function combineTapscriptSigs(signedTx, originalTx) {
|
|
|
3107
3171
|
}
|
|
3108
3172
|
function isValidArkAddress(address) {
|
|
3109
3173
|
try {
|
|
3110
|
-
|
|
3174
|
+
chunkAB67CMHS_cjs.ArkAddress.decode(address);
|
|
3111
3175
|
return true;
|
|
3112
3176
|
} catch (e) {
|
|
3113
3177
|
return false;
|
|
@@ -3115,16 +3179,16 @@ function isValidArkAddress(address) {
|
|
|
3115
3179
|
}
|
|
3116
3180
|
function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, context) {
|
|
3117
3181
|
if (serverCheckpointTxs.length !== expectedCheckpoints.length) {
|
|
3118
|
-
throw new
|
|
3182
|
+
throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
|
|
3119
3183
|
`${context} returned ${serverCheckpointTxs.length} checkpoints, expected ${expectedCheckpoints.length}`
|
|
3120
3184
|
);
|
|
3121
3185
|
}
|
|
3122
3186
|
const byTxid = new Map(expectedCheckpoints.map((c) => [c.id, c]));
|
|
3123
3187
|
return serverCheckpointTxs.map((encoded, index) => {
|
|
3124
|
-
const server =
|
|
3188
|
+
const server = chunkAB67CMHS_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
|
|
3125
3189
|
const local = byTxid.get(server.id);
|
|
3126
3190
|
if (!local) {
|
|
3127
|
-
throw new
|
|
3191
|
+
throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
|
|
3128
3192
|
`${context} checkpoint ${index} txid ${server.id} does not match any submitted checkpoint`
|
|
3129
3193
|
);
|
|
3130
3194
|
}
|
|
@@ -3134,14 +3198,14 @@ function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, contex
|
|
|
3134
3198
|
}
|
|
3135
3199
|
function assertSubmittedArkTxid(response, signedArkTx, context) {
|
|
3136
3200
|
if (response.arkTxid !== signedArkTx.id) {
|
|
3137
|
-
throw new
|
|
3201
|
+
throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
|
|
3138
3202
|
`${context} returned ark txid ${response.arkTxid}, expected ${signedArkTx.id}`
|
|
3139
3203
|
);
|
|
3140
3204
|
}
|
|
3141
3205
|
if (response.finalArkTx === void 0) return;
|
|
3142
|
-
const finalTxid =
|
|
3206
|
+
const finalTxid = chunkAB67CMHS_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx)).id;
|
|
3143
3207
|
if (finalTxid !== signedArkTx.id) {
|
|
3144
|
-
throw new
|
|
3208
|
+
throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
|
|
3145
3209
|
`${context} returned final ark tx ${finalTxid}, expected ${signedArkTx.id}`
|
|
3146
3210
|
);
|
|
3147
3211
|
}
|
|
@@ -3160,10 +3224,10 @@ function assertServerSignedLeaf(serverTx, localTx, inputIndex, serverPubkeyHex,
|
|
|
3160
3224
|
[serverPubkeyHex],
|
|
3161
3225
|
void 0,
|
|
3162
3226
|
void 0,
|
|
3163
|
-
payment_js.tapLeafHash(
|
|
3227
|
+
payment_js.tapLeafHash(chunkAB67CMHS_cjs.scriptFromTapLeafScript(leaf))
|
|
3164
3228
|
);
|
|
3165
3229
|
} catch (error) {
|
|
3166
|
-
throw new
|
|
3230
|
+
throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
|
|
3167
3231
|
`${context}: input ${inputIndex} is not signed by the server on the leaf being spent (${error instanceof Error ? error.message : String(error)})`
|
|
3168
3232
|
);
|
|
3169
3233
|
}
|
|
@@ -3172,20 +3236,20 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
|
|
|
3172
3236
|
const byOutpoint = new Map(inputs.map((input) => [`${input.txid}:${input.vout}`, input]));
|
|
3173
3237
|
for (const [index, checkpoint] of checkpoints.entries()) {
|
|
3174
3238
|
if (checkpoint.inputsLength !== 1) {
|
|
3175
|
-
throw new
|
|
3239
|
+
throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
|
|
3176
3240
|
`${context}: checkpoint ${index} spends ${checkpoint.inputsLength} inputs, expected 1`
|
|
3177
3241
|
);
|
|
3178
3242
|
}
|
|
3179
3243
|
const spent = checkpoint.getInput(0);
|
|
3180
3244
|
if (!spent.txid || spent.index === void 0) {
|
|
3181
|
-
throw new
|
|
3245
|
+
throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
|
|
3182
3246
|
`${context}: checkpoint ${index} has no input outpoint`
|
|
3183
3247
|
);
|
|
3184
3248
|
}
|
|
3185
3249
|
const outpoint = `${base.hex.encode(spent.txid)}:${spent.index}`;
|
|
3186
3250
|
const input = byOutpoint.get(outpoint);
|
|
3187
3251
|
if (!input) {
|
|
3188
|
-
throw new
|
|
3252
|
+
throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
|
|
3189
3253
|
`${context}: checkpoint ${index} spends ${outpoint}, which is not one of the requested virtual outputs`
|
|
3190
3254
|
);
|
|
3191
3255
|
}
|
|
@@ -3193,7 +3257,7 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
|
|
|
3193
3257
|
(unroll) => buildCheckpointTx(input, unroll).tx.id === checkpoint.id
|
|
3194
3258
|
);
|
|
3195
3259
|
if (!rebuilt) {
|
|
3196
|
-
throw new
|
|
3260
|
+
throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
|
|
3197
3261
|
`${context}: checkpoint ${index} txid ${checkpoint.id} differs from the checkpoint built locally for ${outpoint}`
|
|
3198
3262
|
);
|
|
3199
3263
|
}
|
|
@@ -3220,11 +3284,11 @@ async function submitOffchainTx(provider, offchainTx, signer, hooks, options) {
|
|
|
3220
3284
|
const verify = options?.verifyServerSignatures;
|
|
3221
3285
|
if (verify) {
|
|
3222
3286
|
if (response.finalArkTx === void 0) {
|
|
3223
|
-
throw new
|
|
3287
|
+
throw new chunkAB67CMHS_cjs.ServerResponseMismatchError(
|
|
3224
3288
|
"submitTx: server returned no final ark tx to verify its signatures against"
|
|
3225
3289
|
);
|
|
3226
3290
|
}
|
|
3227
|
-
const finalArkTx =
|
|
3291
|
+
const finalArkTx = chunkAB67CMHS_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx));
|
|
3228
3292
|
const serverPubkeyHex = base.hex.encode(
|
|
3229
3293
|
verify.serverPubkey.length === 33 ? verify.serverPubkey.subarray(1) : verify.serverPubkey
|
|
3230
3294
|
);
|
|
@@ -3283,12 +3347,12 @@ function claimWithPreimageIdentity(identity, preimage) {
|
|
|
3283
3347
|
return {
|
|
3284
3348
|
...identity,
|
|
3285
3349
|
sign: async (tx, inputIndexes) => {
|
|
3286
|
-
const signed =
|
|
3350
|
+
const signed = chunkAB67CMHS_cjs.Transaction.fromPSBT(
|
|
3287
3351
|
(await identity.sign(tx.clone(), inputIndexes)).toPSBT()
|
|
3288
3352
|
);
|
|
3289
3353
|
const indexes = inputIndexes ?? Array.from({ length: signed.inputsLength }, (_, i) => i);
|
|
3290
3354
|
for (const index of indexes) {
|
|
3291
|
-
|
|
3355
|
+
chunkAB67CMHS_cjs.setArkPsbtField(signed, index, chunkAB67CMHS_cjs.ConditionWitness, [preimage]);
|
|
3292
3356
|
}
|
|
3293
3357
|
return signed;
|
|
3294
3358
|
}
|
|
@@ -3480,7 +3544,7 @@ function extendCoinWithTapscript(boardingTapscript, utxo) {
|
|
|
3480
3544
|
};
|
|
3481
3545
|
}
|
|
3482
3546
|
function deriveContractTapscripts(contract) {
|
|
3483
|
-
const handler =
|
|
3547
|
+
const handler = chunkOL7V43WS_cjs.contractHandlers.get(contract.type);
|
|
3484
3548
|
if (!handler) {
|
|
3485
3549
|
throw new Error(`No handler for contract type '${contract.type}'`);
|
|
3486
3550
|
}
|
|
@@ -3551,7 +3615,7 @@ function getRandomId() {
|
|
|
3551
3615
|
}
|
|
3552
3616
|
function isValidArkAddress2(address) {
|
|
3553
3617
|
try {
|
|
3554
|
-
|
|
3618
|
+
chunkAB67CMHS_cjs.ArkAddress.decode(address);
|
|
3555
3619
|
return true;
|
|
3556
3620
|
} catch (e) {
|
|
3557
3621
|
return false;
|
|
@@ -3576,12 +3640,27 @@ function assertRecipientArkAddress(encoded, address, context) {
|
|
|
3576
3640
|
);
|
|
3577
3641
|
}
|
|
3578
3642
|
}
|
|
3643
|
+
function assertTapTreeDerivesAddress(encoded, tapTree, address) {
|
|
3644
|
+
let derived;
|
|
3645
|
+
try {
|
|
3646
|
+
derived = chunkAB67CMHS_cjs.VtxoScript.decode(tapTree).pkScript;
|
|
3647
|
+
} catch (e) {
|
|
3648
|
+
throw new Error(
|
|
3649
|
+
`Invalid tapTree for ${encoded}: ${e instanceof Error ? e.message : String(e)}`
|
|
3650
|
+
);
|
|
3651
|
+
}
|
|
3652
|
+
if (base.hex.encode(derived) !== base.hex.encode(address.pkScript)) {
|
|
3653
|
+
throw new Error(
|
|
3654
|
+
`Invalid tapTree for ${encoded}: derives ${base.hex.encode(derived)}, address is ${base.hex.encode(address.pkScript)}. Expected VtxoScript.encode() form: leaf depths are ignored and the tree is rebuilt in arkd's canonical shape.`
|
|
3655
|
+
);
|
|
3656
|
+
}
|
|
3657
|
+
}
|
|
3579
3658
|
function validateRecipients(recipients, dustAmount, context) {
|
|
3580
3659
|
const validatedRecipients = [];
|
|
3581
3660
|
for (const recipient of recipients) {
|
|
3582
3661
|
let address;
|
|
3583
3662
|
try {
|
|
3584
|
-
address =
|
|
3663
|
+
address = chunkAB67CMHS_cjs.ArkAddress.decode(recipient.address);
|
|
3585
3664
|
} catch (e) {
|
|
3586
3665
|
throw new Error(`Invalid Arkade address: ${recipient.address}`);
|
|
3587
3666
|
}
|
|
@@ -3590,11 +3669,15 @@ function validateRecipients(recipients, dustAmount, context) {
|
|
|
3590
3669
|
if (amount <= 0) {
|
|
3591
3670
|
throw new Error("Amount must be positive");
|
|
3592
3671
|
}
|
|
3672
|
+
if (recipient.tapTree) {
|
|
3673
|
+
assertTapTreeDerivesAddress(recipient.address, recipient.tapTree, address);
|
|
3674
|
+
}
|
|
3593
3675
|
validatedRecipients.push({
|
|
3594
3676
|
address: recipient.address,
|
|
3595
3677
|
assets: recipient.assets ?? [],
|
|
3596
3678
|
amount,
|
|
3597
|
-
script: amount < dustAmount ? address.subdustPkScript : address.pkScript
|
|
3679
|
+
script: amount < dustAmount ? address.subdustPkScript : address.pkScript,
|
|
3680
|
+
tapTree: recipient.tapTree
|
|
3598
3681
|
});
|
|
3599
3682
|
}
|
|
3600
3683
|
return validatedRecipients;
|
|
@@ -3602,7 +3685,7 @@ function validateRecipients(recipients, dustAmount, context) {
|
|
|
3602
3685
|
|
|
3603
3686
|
// src/contracts/spendability.ts
|
|
3604
3687
|
function isContractGenericallySpendable(contract) {
|
|
3605
|
-
return
|
|
3688
|
+
return chunkOL7V43WS_cjs.contractHandlers.get(contract.type)?.isGenericallySpendable?.(contract) === true;
|
|
3606
3689
|
}
|
|
3607
3690
|
function gatedContracts(contracts) {
|
|
3608
3691
|
const gated = /* @__PURE__ */ new Map();
|
|
@@ -3615,6 +3698,9 @@ function gateExclusion(gated) {
|
|
|
3615
3698
|
return (vtxo) => {
|
|
3616
3699
|
const type = vtxo.script === void 0 ? void 0 : gated.get(vtxo.script);
|
|
3617
3700
|
if (type === void 0) return void 0;
|
|
3701
|
+
if (!chunkOL7V43WS_cjs.contractHandlers.has(type)) {
|
|
3702
|
+
return `at ${vtxo.script} (contract type '${type}') has no handler registered in this build`;
|
|
3703
|
+
}
|
|
3618
3704
|
return `at ${vtxo.script} (contract type '${type}') is not generically spendable`;
|
|
3619
3705
|
};
|
|
3620
3706
|
}
|
|
@@ -3648,7 +3734,7 @@ function selectPendingRecoveryOutpoints(contractsWithVtxos, signerSet, nowSecond
|
|
|
3648
3734
|
continue;
|
|
3649
3735
|
}
|
|
3650
3736
|
for (const v of vtxos) {
|
|
3651
|
-
if (!
|
|
3737
|
+
if (!chunkAB67CMHS_cjs.hasTerminalSpend(v) && !v.isSwept) out.add(`${v.txid}:${v.vout}`);
|
|
3652
3738
|
}
|
|
3653
3739
|
}
|
|
3654
3740
|
return out;
|
|
@@ -3681,10 +3767,10 @@ function byValueDescending(vtxos) {
|
|
|
3681
3767
|
return [...vtxos].sort((a, b) => b.value - a.value);
|
|
3682
3768
|
}
|
|
3683
3769
|
async function fetchTimeHeight(wallet) {
|
|
3684
|
-
return
|
|
3770
|
+
return chunkAB67CMHS_cjs.resolveTimeHeight(wallet.onchainProvider);
|
|
3685
3771
|
}
|
|
3686
3772
|
function canMigrateBySend(vtxo, now) {
|
|
3687
|
-
if (!
|
|
3773
|
+
if (!chunkAB67CMHS_cjs.canSpendOffchain(vtxo, now)) return false;
|
|
3688
3774
|
return vtxo.expiresAt !== void 0 || vtxo.expiresAtHeight !== void 0;
|
|
3689
3775
|
}
|
|
3690
3776
|
function byExpiryAscending(vtxos, now) {
|
|
@@ -3692,7 +3778,7 @@ function byExpiryAscending(vtxos, now) {
|
|
|
3692
3778
|
if (vtxo.isSwept) return -Infinity;
|
|
3693
3779
|
if (vtxo.expiresAt !== void 0) return vtxo.expiresAt.getTime();
|
|
3694
3780
|
if (vtxo.expiresAtHeight !== void 0) {
|
|
3695
|
-
return
|
|
3781
|
+
return chunkAB67CMHS_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
|
|
3696
3782
|
}
|
|
3697
3783
|
return Infinity;
|
|
3698
3784
|
};
|
|
@@ -3719,7 +3805,7 @@ function priceSettlementInputs(vtxos, estimator) {
|
|
|
3719
3805
|
const payable = [];
|
|
3720
3806
|
const net = /* @__PURE__ */ new Map();
|
|
3721
3807
|
for (const vtxo of vtxos) {
|
|
3722
|
-
const inputFee = estimator.evalOffchainInput(
|
|
3808
|
+
const inputFee = estimator.evalOffchainInput(chunkAB67CMHS_cjs.toOffchainInputFeeParams(vtxo));
|
|
3723
3809
|
if (inputFee.satoshis >= vtxo.value) {
|
|
3724
3810
|
continue;
|
|
3725
3811
|
}
|
|
@@ -3745,7 +3831,7 @@ function deductOffchainOutputFee(subtotal, estimator, arkAddress) {
|
|
|
3745
3831
|
}
|
|
3746
3832
|
const outputFee = estimator.evalOffchainOutput({
|
|
3747
3833
|
amount: subtotal,
|
|
3748
|
-
script: base.hex.encode(
|
|
3834
|
+
script: base.hex.encode(chunkAB67CMHS_cjs.ArkAddress.decode(arkAddress).pkScript)
|
|
3749
3835
|
});
|
|
3750
3836
|
return subtotal - BigInt(outputFee.satoshis);
|
|
3751
3837
|
}
|
|
@@ -3763,10 +3849,10 @@ var DEFAULT_SETTLEMENT_CONFIG = {
|
|
|
3763
3849
|
};
|
|
3764
3850
|
function getRecoverableVtxos(vtxos, dustAmount, now) {
|
|
3765
3851
|
return vtxos.filter((vtxo) => {
|
|
3766
|
-
if (
|
|
3852
|
+
if (chunkAB67CMHS_cjs.canRecoverOnchain(vtxo, now)) {
|
|
3767
3853
|
return true;
|
|
3768
3854
|
}
|
|
3769
|
-
if (
|
|
3855
|
+
if (chunkAB67CMHS_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
|
|
3770
3856
|
return true;
|
|
3771
3857
|
}
|
|
3772
3858
|
return false;
|
|
@@ -3797,7 +3883,7 @@ function getRecoverableWithSubdust(vtxos, dustAmount, now) {
|
|
|
3797
3883
|
}
|
|
3798
3884
|
function isVtxoExpiringSoon(vtxo, thresholdMs) {
|
|
3799
3885
|
const realThresholdMs = thresholdMs <= 100 ? DEFAULT_THRESHOLD_MS : thresholdMs;
|
|
3800
|
-
const expiresAt =
|
|
3886
|
+
const expiresAt = chunkAB67CMHS_cjs.normalizeVtxo(vtxo).expiresAt;
|
|
3801
3887
|
if (expiresAt === void 0) return false;
|
|
3802
3888
|
const now = Date.now();
|
|
3803
3889
|
const batchExpiry = expiresAt.getTime();
|
|
@@ -3806,7 +3892,7 @@ function isVtxoExpiringSoon(vtxo, thresholdMs) {
|
|
|
3806
3892
|
}
|
|
3807
3893
|
function getExpiringAndRecoverableVtxos(vtxos, thresholdMs, dustAmount, now) {
|
|
3808
3894
|
return vtxos.filter(
|
|
3809
|
-
(vtxo) => isVtxoExpiringSoon(vtxo, thresholdMs) ||
|
|
3895
|
+
(vtxo) => isVtxoExpiringSoon(vtxo, thresholdMs) || chunkAB67CMHS_cjs.canRecoverOnchain(vtxo, now) || isSubdust(vtxo, dustAmount)
|
|
3810
3896
|
);
|
|
3811
3897
|
}
|
|
3812
3898
|
function isMigrationCapable(wallet) {
|
|
@@ -4405,11 +4491,11 @@ var VtxoManager = class _VtxoManager {
|
|
|
4405
4491
|
`Sweep not economical: output ${outputAmount} sats after ${fee} sats fee is below dust (${dustAmount} sats)`
|
|
4406
4492
|
);
|
|
4407
4493
|
}
|
|
4408
|
-
const tx = new
|
|
4494
|
+
const tx = new chunkAB67CMHS_cjs.Transaction();
|
|
4409
4495
|
for (const utxo of expiredUtxos) {
|
|
4410
|
-
const utxoScript =
|
|
4496
|
+
const utxoScript = chunkAB67CMHS_cjs.VtxoScript.decode(utxo.tapTree);
|
|
4411
4497
|
const utxoExitLeaf = utxoScript.leaves.find(
|
|
4412
|
-
(leaf) =>
|
|
4498
|
+
(leaf) => chunkAB67CMHS_cjs.CSVMultisigTapscript.isScriptValid(chunkAB67CMHS_cjs.scriptFromTapLeafScript(leaf)) === true
|
|
4413
4499
|
);
|
|
4414
4500
|
if (!utxoExitLeaf) {
|
|
4415
4501
|
throw new Error(
|
|
@@ -4424,7 +4510,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4424
4510
|
amount: BigInt(utxo.value)
|
|
4425
4511
|
},
|
|
4426
4512
|
tapLeafScript: [utxoExitLeaf],
|
|
4427
|
-
sequence:
|
|
4513
|
+
sequence: chunkAB67CMHS_cjs.getSequence(utxoExitLeaf)
|
|
4428
4514
|
});
|
|
4429
4515
|
}
|
|
4430
4516
|
tx.addOutputAddress(boardingAddress, outputAmount, this.getNetwork());
|
|
@@ -4658,8 +4744,8 @@ var VtxoManager = class _VtxoManager {
|
|
|
4658
4744
|
if (!serverPubKey) continue;
|
|
4659
4745
|
const cls = classifyAgainstSignerSet(serverPubKey, signerSet, nowSeconds);
|
|
4660
4746
|
if (cls.status === "CURRENT") continue;
|
|
4661
|
-
const recoverable = vtxos.filter((v) => v.isSwept && !
|
|
4662
|
-
const spendable = vtxos.filter((v) => !
|
|
4747
|
+
const recoverable = vtxos.filter((v) => v.isSwept && !chunkAB67CMHS_cjs.hasTerminalSpend(v));
|
|
4748
|
+
const spendable = vtxos.filter((v) => !chunkAB67CMHS_cjs.hasTerminalSpend(v) && !v.isSwept);
|
|
4663
4749
|
const value = spendable.reduce((sum, v) => sum + v.value, 0);
|
|
4664
4750
|
let recoverableCount = 0;
|
|
4665
4751
|
let recoverableValue = 0;
|
|
@@ -4672,7 +4758,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4672
4758
|
awaitingSweepCount = spendable.length;
|
|
4673
4759
|
awaitingSweepValue = value;
|
|
4674
4760
|
for (const v of spendable) {
|
|
4675
|
-
const exp =
|
|
4761
|
+
const exp = chunkAB67CMHS_cjs.toBatchExpiry(v);
|
|
4676
4762
|
if (exp !== void 0 && (nextSweepEta === void 0 || exp < nextSweepEta)) {
|
|
4677
4763
|
nextSweepEta = exp;
|
|
4678
4764
|
}
|
|
@@ -4933,7 +5019,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4933
5019
|
/** Decodes the boarding tapscript exit path to extract the CSV timelock. */
|
|
4934
5020
|
getBoardingTimelock() {
|
|
4935
5021
|
const wallet = this.getSweepWallet();
|
|
4936
|
-
const exitScript =
|
|
5022
|
+
const exitScript = chunkAB67CMHS_cjs.CSVMultisigTapscript.decode(
|
|
4937
5023
|
base.hex.decode(wallet.boardingTapscript.exitScript)
|
|
4938
5024
|
);
|
|
4939
5025
|
return exitScript.params.timelock;
|
|
@@ -5064,8 +5150,8 @@ var VtxoManager = class _VtxoManager {
|
|
|
5064
5150
|
* or doesn't carry the metadata.
|
|
5065
5151
|
*/
|
|
5066
5152
|
extractSpentOutpoint(error) {
|
|
5067
|
-
const ark =
|
|
5068
|
-
if (!
|
|
5153
|
+
const ark = chunkAB67CMHS_cjs.maybeArkError(error);
|
|
5154
|
+
if (!chunkAB67CMHS_cjs.isArkError(ark, chunkAB67CMHS_cjs.ArkErrorName.VTXO_ALREADY_SPENT)) return void 0;
|
|
5069
5155
|
const raw = ark.metadata?.vtxo_outpoint;
|
|
5070
5156
|
if (typeof raw !== "string") return void 0;
|
|
5071
5157
|
const [txid, voutStr] = raw.split(":");
|
|
@@ -5255,7 +5341,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5255
5341
|
if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
|
|
5256
5342
|
break;
|
|
5257
5343
|
}
|
|
5258
|
-
const inputFee = estimator.evalOffchainInput(
|
|
5344
|
+
const inputFee = estimator.evalOffchainInput(chunkAB67CMHS_cjs.toOffchainInputFeeParams(v));
|
|
5259
5345
|
if (inputFee.satoshis >= v.value) {
|
|
5260
5346
|
continue;
|
|
5261
5347
|
}
|
|
@@ -5275,7 +5361,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5275
5361
|
const arkAddress = await this.wallet.getAddress();
|
|
5276
5362
|
const outputFee = estimator.evalOffchainOutput({
|
|
5277
5363
|
amount: totalAmount,
|
|
5278
|
-
script: base.hex.encode(
|
|
5364
|
+
script: base.hex.encode(chunkAB67CMHS_cjs.ArkAddress.decode(arkAddress).pkScript)
|
|
5279
5365
|
});
|
|
5280
5366
|
totalAmount -= BigInt(outputFee.satoshis);
|
|
5281
5367
|
if (totalAmount < dustAmount) return;
|
|
@@ -5355,7 +5441,7 @@ var ArkNote = class _ArkNote {
|
|
|
5355
5441
|
this.value = value;
|
|
5356
5442
|
this.HRP = HRP;
|
|
5357
5443
|
const preimageHash = utils_js.sha256(this.preimage);
|
|
5358
|
-
this.vtxoScript = new
|
|
5444
|
+
this.vtxoScript = new chunkAB67CMHS_cjs.VtxoScript([noteTapscript(preimageHash)]);
|
|
5359
5445
|
const leaf = this.vtxoScript.leaves[0];
|
|
5360
5446
|
this.txid = base.hex.encode(new Uint8Array(preimageHash).reverse());
|
|
5361
5447
|
this.tapTree = this.vtxoScript.encode();
|
|
@@ -5522,7 +5608,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
5522
5608
|
const privateKey = data.slice(1, 33);
|
|
5523
5609
|
const serverPubKey = data.slice(33, 65);
|
|
5524
5610
|
const sequence = new DataView(data.buffer, data.byteOffset + 65, 4).getUint32(0, false);
|
|
5525
|
-
const csvTimelock =
|
|
5611
|
+
const csvTimelock = chunkAB67CMHS_cjs.sequenceToTimelock(sequence);
|
|
5526
5612
|
return new _ArkadeCash(privateKey, serverPubKey, csvTimelock, decoded.prefix);
|
|
5527
5613
|
}
|
|
5528
5614
|
toString() {
|
|
@@ -5530,7 +5616,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
5530
5616
|
data[0] = _ArkadeCash.Version;
|
|
5531
5617
|
data.set(this._privateKey, 1);
|
|
5532
5618
|
data.set(this._serverPubKey, 33);
|
|
5533
|
-
const sequence =
|
|
5619
|
+
const sequence = chunkAB67CMHS_cjs.timelockToSequence(this.csvTimelock);
|
|
5534
5620
|
new DataView(data.buffer, data.byteOffset + 65, 4).setUint32(0, sequence, false);
|
|
5535
5621
|
const words = base.bech32m.toWords(data);
|
|
5536
5622
|
return base.bech32m.encode(this.hrp, words, 1023);
|
|
@@ -5539,7 +5625,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
5539
5625
|
return SingleKey.fromPrivateKey(this._privateKey);
|
|
5540
5626
|
}
|
|
5541
5627
|
get vtxoScript() {
|
|
5542
|
-
return new
|
|
5628
|
+
return new chunkOL7V43WS_cjs.DefaultVtxo.Script({
|
|
5543
5629
|
pubKey: this._publicKey,
|
|
5544
5630
|
serverPubKey: this._serverPubKey,
|
|
5545
5631
|
csvTimelock: this.csvTimelock
|
|
@@ -5800,7 +5886,7 @@ async function captureExitBranch(params) {
|
|
|
5800
5886
|
const nonCommitment = ordered.filter((c) => chainTxTypeToChainedExit(c.type) !== 1 /* Commitment */).map((c) => c.txid);
|
|
5801
5887
|
if (nonCommitment.length > 0) {
|
|
5802
5888
|
for (const psbt of await resolver.getVirtualTxs(nonCommitment)) {
|
|
5803
|
-
psbtByTxid.set(
|
|
5889
|
+
psbtByTxid.set(chunkAB67CMHS_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
5804
5890
|
}
|
|
5805
5891
|
}
|
|
5806
5892
|
}
|
|
@@ -5843,10 +5929,10 @@ var IndexerExitDataSource = class {
|
|
|
5843
5929
|
while (hasMore) {
|
|
5844
5930
|
const { chain: page, page: meta } = await this.indexer.getVtxoChain(
|
|
5845
5931
|
{ txid: vtxo.txid, vout: vtxo.vout },
|
|
5846
|
-
{ pageIndex, pageSize:
|
|
5932
|
+
{ pageIndex, pageSize: chunkAB67CMHS_cjs.DEFAULT_PAGE_SIZE }
|
|
5847
5933
|
);
|
|
5848
5934
|
chain.push(...page);
|
|
5849
|
-
hasMore = meta ? page.length ===
|
|
5935
|
+
hasMore = meta ? page.length === chunkAB67CMHS_cjs.DEFAULT_PAGE_SIZE : false;
|
|
5850
5936
|
pageIndex++;
|
|
5851
5937
|
}
|
|
5852
5938
|
return chain;
|
|
@@ -5858,12 +5944,12 @@ var IndexerExitDataSource = class {
|
|
|
5858
5944
|
while (hasMore) {
|
|
5859
5945
|
const { txs, page } = await this.indexer.getVirtualTxs(txids, {
|
|
5860
5946
|
pageIndex,
|
|
5861
|
-
pageSize:
|
|
5947
|
+
pageSize: chunkAB67CMHS_cjs.DEFAULT_PAGE_SIZE
|
|
5862
5948
|
});
|
|
5863
5949
|
for (const psbt of txs) {
|
|
5864
|
-
out.set(
|
|
5950
|
+
out.set(chunkAB67CMHS_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
5865
5951
|
}
|
|
5866
|
-
hasMore = page ? txs.length ===
|
|
5952
|
+
hasMore = page ? txs.length === chunkAB67CMHS_cjs.DEFAULT_PAGE_SIZE : false;
|
|
5867
5953
|
pageIndex++;
|
|
5868
5954
|
}
|
|
5869
5955
|
return out;
|
|
@@ -5884,7 +5970,7 @@ function chainedTxTypeToChainTxType(t) {
|
|
|
5884
5970
|
}
|
|
5885
5971
|
}
|
|
5886
5972
|
function psbtInputTxids(psbtBase64) {
|
|
5887
|
-
const tx =
|
|
5973
|
+
const tx = chunkAB67CMHS_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
|
|
5888
5974
|
const ids = [];
|
|
5889
5975
|
for (let i = 0; i < tx.inputsLength; i++) {
|
|
5890
5976
|
const txid = tx.getInput(i).txid;
|
|
@@ -6237,10 +6323,10 @@ async function resolveArkInfo(arkProvider, walletRepository) {
|
|
|
6237
6323
|
try {
|
|
6238
6324
|
info = await arkProvider.getInfo();
|
|
6239
6325
|
} catch (err) {
|
|
6240
|
-
if (!
|
|
6326
|
+
if (!chunkAB67CMHS_cjs.isRetryableProviderError(err)) throw err;
|
|
6241
6327
|
const snapshot = await loadArkInfoSnapshot(walletRepository);
|
|
6242
6328
|
if (!snapshot) {
|
|
6243
|
-
throw new
|
|
6329
|
+
throw new chunkAB67CMHS_cjs.ProviderUnavailableError(
|
|
6244
6330
|
"Arkade server info is unavailable and no cached snapshot exists",
|
|
6245
6331
|
{ cause: err }
|
|
6246
6332
|
);
|
|
@@ -6623,7 +6709,7 @@ function collectArkTxidsNeedingCreatedAt(vtxos) {
|
|
|
6623
6709
|
return [...txids];
|
|
6624
6710
|
}
|
|
6625
6711
|
async function buildTransactionHistory(vtxos, allBoardingTxs, commitmentsToIgnore, resolveTxCreatedAt) {
|
|
6626
|
-
const fromOldestVtxo = vtxos.map(
|
|
6712
|
+
const fromOldestVtxo = vtxos.map(chunkAB67CMHS_cjs.normalizeVtxo).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
|
|
6627
6713
|
const txidsNeedingCreatedAt = resolveTxCreatedAt ? collectArkTxidsNeedingCreatedAt(fromOldestVtxo) : [];
|
|
6628
6714
|
const resolvedCreatedAt = resolveTxCreatedAt && txidsNeedingCreatedAt.length > 0 ? await resolveTxCreatedAt(txidsNeedingCreatedAt) : /* @__PURE__ */ new Map();
|
|
6629
6715
|
const unmatchedSettledBoardingTxs = allBoardingTxs.filter(isSettledBoardingReceive).sort((a, b) => a.createdAt - b.createdAt);
|
|
@@ -6787,7 +6873,7 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6787
6873
|
const virtualCoins = await this.wallet.getSpendableVtxos({
|
|
6788
6874
|
withRecoverable: false
|
|
6789
6875
|
});
|
|
6790
|
-
const controlAssetRef = params.controlAssetId ?
|
|
6876
|
+
const controlAssetRef = params.controlAssetId ? chunkLG5GY73A_cjs.AssetRef.fromId(chunkLG5GY73A_cjs.AssetId.fromString(params.controlAssetId)) : null;
|
|
6791
6877
|
const coinSelection = selectVirtualCoins(virtualCoins, Number(this.wallet.dustAmount));
|
|
6792
6878
|
let totalBtcSelected = 0n;
|
|
6793
6879
|
const assetChanges = /* @__PURE__ */ new Map();
|
|
@@ -6800,8 +6886,8 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6800
6886
|
}
|
|
6801
6887
|
}
|
|
6802
6888
|
const groups = [];
|
|
6803
|
-
const issuedAssetOutput =
|
|
6804
|
-
const issuedAssetGroup =
|
|
6889
|
+
const issuedAssetOutput = chunkLG5GY73A_cjs.AssetOutput.create(0, params.amount);
|
|
6890
|
+
const issuedAssetGroup = chunkLG5GY73A_cjs.AssetGroup.create(
|
|
6805
6891
|
null,
|
|
6806
6892
|
controlAssetRef,
|
|
6807
6893
|
[],
|
|
@@ -6816,28 +6902,28 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6816
6902
|
for (const [inputIndex, assets] of assetInputs) {
|
|
6817
6903
|
for (const asset of assets) {
|
|
6818
6904
|
if (asset.assetId !== assetId) continue;
|
|
6819
|
-
changeInputs.push(
|
|
6905
|
+
changeInputs.push(chunkLG5GY73A_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
6820
6906
|
}
|
|
6821
6907
|
}
|
|
6822
6908
|
groups.push(
|
|
6823
|
-
|
|
6824
|
-
|
|
6909
|
+
chunkLG5GY73A_cjs.AssetGroup.create(
|
|
6910
|
+
chunkLG5GY73A_cjs.AssetId.fromString(assetId),
|
|
6825
6911
|
null,
|
|
6826
6912
|
changeInputs,
|
|
6827
|
-
[
|
|
6913
|
+
[chunkLG5GY73A_cjs.AssetOutput.create(0, amount)],
|
|
6828
6914
|
[]
|
|
6829
6915
|
)
|
|
6830
6916
|
);
|
|
6831
6917
|
}
|
|
6832
6918
|
}
|
|
6833
6919
|
const address = await this.wallet.getAddress();
|
|
6834
|
-
const outputAddress =
|
|
6920
|
+
const outputAddress = chunkAB67CMHS_cjs.ArkAddress.decode(address);
|
|
6835
6921
|
const outputs = [
|
|
6836
6922
|
{
|
|
6837
6923
|
script: outputAddress.pkScript,
|
|
6838
6924
|
amount: BigInt(totalBtcSelected)
|
|
6839
6925
|
},
|
|
6840
|
-
Extension.create([
|
|
6926
|
+
Extension.create([chunkLG5GY73A_cjs.Packet.create(groups)]).txOut()
|
|
6841
6927
|
];
|
|
6842
6928
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(
|
|
6843
6929
|
coinSelection.inputs,
|
|
@@ -6845,7 +6931,7 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6845
6931
|
);
|
|
6846
6932
|
return {
|
|
6847
6933
|
arkTxId: arkTxid,
|
|
6848
|
-
assetId:
|
|
6934
|
+
assetId: chunkLG5GY73A_cjs.AssetId.create(arkTxid, 0).toString()
|
|
6849
6935
|
};
|
|
6850
6936
|
}
|
|
6851
6937
|
/**
|
|
@@ -6917,16 +7003,16 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6917
7003
|
for (const [inputIndex, assets] of assetInputs) {
|
|
6918
7004
|
for (const asset of assets) {
|
|
6919
7005
|
if (asset.assetId !== params.assetId) continue;
|
|
6920
|
-
reissueInputs.push(
|
|
7006
|
+
reissueInputs.push(chunkLG5GY73A_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
6921
7007
|
}
|
|
6922
7008
|
}
|
|
6923
7009
|
const totalAssetAmount = assetToReissueAmount + params.amount;
|
|
6924
|
-
const reissueAssetIdObj =
|
|
6925
|
-
const reissueAssetGroup =
|
|
7010
|
+
const reissueAssetIdObj = chunkLG5GY73A_cjs.AssetId.fromString(params.assetId);
|
|
7011
|
+
const reissueAssetGroup = chunkLG5GY73A_cjs.AssetGroup.create(
|
|
6926
7012
|
reissueAssetIdObj,
|
|
6927
7013
|
null,
|
|
6928
7014
|
reissueInputs,
|
|
6929
|
-
[
|
|
7015
|
+
[chunkLG5GY73A_cjs.AssetOutput.create(0, totalAssetAmount)],
|
|
6930
7016
|
[]
|
|
6931
7017
|
);
|
|
6932
7018
|
const groups = [reissueAssetGroup];
|
|
@@ -6935,27 +7021,27 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6935
7021
|
for (const [inputIndex, assets] of assetInputs) {
|
|
6936
7022
|
for (const asset of assets) {
|
|
6937
7023
|
if (asset.assetId !== assetId) continue;
|
|
6938
|
-
changeInputs.push(
|
|
7024
|
+
changeInputs.push(chunkLG5GY73A_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
6939
7025
|
}
|
|
6940
7026
|
}
|
|
6941
7027
|
groups.push(
|
|
6942
|
-
|
|
6943
|
-
|
|
7028
|
+
chunkLG5GY73A_cjs.AssetGroup.create(
|
|
7029
|
+
chunkLG5GY73A_cjs.AssetId.fromString(assetId),
|
|
6944
7030
|
null,
|
|
6945
7031
|
changeInputs,
|
|
6946
|
-
[
|
|
7032
|
+
[chunkLG5GY73A_cjs.AssetOutput.create(0, amount)],
|
|
6947
7033
|
[]
|
|
6948
7034
|
)
|
|
6949
7035
|
);
|
|
6950
7036
|
}
|
|
6951
7037
|
const address = await this.wallet.getAddress();
|
|
6952
|
-
const outputAddress =
|
|
7038
|
+
const outputAddress = chunkAB67CMHS_cjs.ArkAddress.decode(address);
|
|
6953
7039
|
const outputs = [
|
|
6954
7040
|
{
|
|
6955
7041
|
script: outputAddress.pkScript,
|
|
6956
7042
|
amount: BigInt(totalBtcSelected)
|
|
6957
7043
|
},
|
|
6958
|
-
Extension.create([
|
|
7044
|
+
Extension.create([chunkLG5GY73A_cjs.Packet.create(groups)]).txOut()
|
|
6959
7045
|
];
|
|
6960
7046
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
|
|
6961
7047
|
return arkTxid;
|
|
@@ -7022,27 +7108,27 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7022
7108
|
for (const [inputIndex, assets] of assetInputs) {
|
|
7023
7109
|
for (const asset of assets) {
|
|
7024
7110
|
if (asset.assetId !== assetId) continue;
|
|
7025
|
-
changeInputs.push(
|
|
7111
|
+
changeInputs.push(chunkLG5GY73A_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
7026
7112
|
}
|
|
7027
7113
|
}
|
|
7028
7114
|
groups.push(
|
|
7029
|
-
|
|
7030
|
-
|
|
7115
|
+
chunkLG5GY73A_cjs.AssetGroup.create(
|
|
7116
|
+
chunkLG5GY73A_cjs.AssetId.fromString(assetId),
|
|
7031
7117
|
null,
|
|
7032
7118
|
changeInputs,
|
|
7033
|
-
amount > 0n ? [
|
|
7119
|
+
amount > 0n ? [chunkLG5GY73A_cjs.AssetOutput.create(0, amount)] : [],
|
|
7034
7120
|
[]
|
|
7035
7121
|
)
|
|
7036
7122
|
);
|
|
7037
7123
|
}
|
|
7038
7124
|
const address = await this.wallet.getAddress();
|
|
7039
|
-
const outputAddress =
|
|
7125
|
+
const outputAddress = chunkAB67CMHS_cjs.ArkAddress.decode(address);
|
|
7040
7126
|
const outputs = [
|
|
7041
7127
|
{
|
|
7042
7128
|
script: outputAddress.pkScript,
|
|
7043
7129
|
amount: BigInt(totalBtcSelected)
|
|
7044
7130
|
},
|
|
7045
|
-
Extension.create([
|
|
7131
|
+
Extension.create([chunkLG5GY73A_cjs.Packet.create(groups)]).txOut()
|
|
7046
7132
|
];
|
|
7047
7133
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
|
|
7048
7134
|
return arkTxid;
|
|
@@ -7067,7 +7153,7 @@ function castMetadata(metadata) {
|
|
|
7067
7153
|
} else {
|
|
7068
7154
|
throw new Error("Invalid metadata value type");
|
|
7069
7155
|
}
|
|
7070
|
-
md.push(
|
|
7156
|
+
md.push(chunkLG5GY73A_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
|
|
7071
7157
|
}
|
|
7072
7158
|
return md;
|
|
7073
7159
|
}
|
|
@@ -7088,10 +7174,10 @@ var DelegateManagerImpl = class {
|
|
|
7088
7174
|
if (vtxos.length === 0) {
|
|
7089
7175
|
return { delegated: [], failed: [] };
|
|
7090
7176
|
}
|
|
7091
|
-
const destinationScript =
|
|
7177
|
+
const destinationScript = chunkAB67CMHS_cjs.ArkAddress.decode(destination).pkScript;
|
|
7092
7178
|
const arkInfo = await this.arkInfoProvider.getInfo();
|
|
7093
7179
|
const delegateInfo = await this.delegateProvider.getDelegateInfo();
|
|
7094
|
-
const eligible = vtxos.map(
|
|
7180
|
+
const eligible = vtxos.map(chunkAB67CMHS_cjs.normalizeVtxo).filter(
|
|
7095
7181
|
(v) => isAnnotated(v) && findDelegateTapLeaf(v, delegateInfo.pubkey) !== void 0
|
|
7096
7182
|
);
|
|
7097
7183
|
if (eligible.length === 0) {
|
|
@@ -7120,11 +7206,11 @@ var DelegateManagerImpl = class {
|
|
|
7120
7206
|
const groupByExpiry = /* @__PURE__ */ new Map();
|
|
7121
7207
|
let recoverableVtxos = [];
|
|
7122
7208
|
for (const vtxo of eligible) {
|
|
7123
|
-
if (
|
|
7209
|
+
if (chunkAB67CMHS_cjs.canRecoverOnchain(vtxo, now)) {
|
|
7124
7210
|
recoverableVtxos.push(vtxo);
|
|
7125
7211
|
continue;
|
|
7126
7212
|
}
|
|
7127
|
-
const expiry =
|
|
7213
|
+
const expiry = chunkAB67CMHS_cjs.toBatchExpiry(vtxo);
|
|
7128
7214
|
if (!expiry) continue;
|
|
7129
7215
|
const dayKey = getDayTimestamp(expiry);
|
|
7130
7216
|
groupByExpiry.set(dayKey, [...groupByExpiry.get(dayKey) ?? [], vtxo]);
|
|
@@ -7189,7 +7275,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7189
7275
|
}
|
|
7190
7276
|
if (!delegateAt) {
|
|
7191
7277
|
const now = { timestamp: /* @__PURE__ */ new Date() };
|
|
7192
|
-
const expiryTimestamp = vtxos.filter((coin) => !
|
|
7278
|
+
const expiryTimestamp = vtxos.filter((coin) => !chunkAB67CMHS_cjs.canRecoverOnchain(coin, now) && chunkAB67CMHS_cjs.toBatchExpiry(coin)).reduce((min, coin) => Math.min(min, chunkAB67CMHS_cjs.toBatchExpiry(coin)), Number.MAX_SAFE_INTEGER);
|
|
7193
7279
|
if (!expiryTimestamp || expiryTimestamp === Number.MAX_SAFE_INTEGER) {
|
|
7194
7280
|
delegateAt = new Date(Date.now() + 1 * 60 * 1e3);
|
|
7195
7281
|
} else {
|
|
@@ -7218,7 +7304,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7218
7304
|
let amount = 0n;
|
|
7219
7305
|
for (const coin of vtxos) {
|
|
7220
7306
|
const inputFee = estimator.evalOffchainInput({
|
|
7221
|
-
...
|
|
7307
|
+
...chunkAB67CMHS_cjs.toOffchainInputFeeParams(coin),
|
|
7222
7308
|
type: "vtxo"
|
|
7223
7309
|
});
|
|
7224
7310
|
if (inputFee.value >= coin.value) {
|
|
@@ -7232,7 +7318,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7232
7318
|
const delegateFee = BigInt(Number(fee));
|
|
7233
7319
|
if (delegateFee > 0n) {
|
|
7234
7320
|
outputs.push({
|
|
7235
|
-
script:
|
|
7321
|
+
script: chunkAB67CMHS_cjs.ArkAddress.decode(delegateAddress).pkScript,
|
|
7236
7322
|
amount: delegateFee
|
|
7237
7323
|
});
|
|
7238
7324
|
}
|
|
@@ -7265,10 +7351,10 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7265
7351
|
destinationScript
|
|
7266
7352
|
);
|
|
7267
7353
|
const forfeitOutputScript = btcSigner.OutScript.encode(
|
|
7268
|
-
btcSigner.Address(
|
|
7354
|
+
btcSigner.Address(chunkAB67CMHS_cjs.getNetwork(network)).decode(forfeitAddress)
|
|
7269
7355
|
);
|
|
7270
7356
|
const forfeits = await Promise.all(
|
|
7271
|
-
vtxos.filter((v) => !
|
|
7357
|
+
vtxos.filter((v) => !chunkAB67CMHS_cjs.canRecoverOnchain(v, { timestamp: /* @__PURE__ */ new Date() })).map(async (coin) => {
|
|
7272
7358
|
const forfeit = await makeDelegateForfeitTx(
|
|
7273
7359
|
coin,
|
|
7274
7360
|
dust,
|
|
@@ -7293,7 +7379,7 @@ async function makeDelegateForfeitTx(input, connectorAmount, delegatePubkey, for
|
|
|
7293
7379
|
index: input.vout,
|
|
7294
7380
|
witnessUtxo: {
|
|
7295
7381
|
amount: BigInt(input.value),
|
|
7296
|
-
script:
|
|
7382
|
+
script: chunkAB67CMHS_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
7297
7383
|
},
|
|
7298
7384
|
sighashType: btcSigner.SigHash.ALL_ANYONECANPAY,
|
|
7299
7385
|
tapLeafScript: [delegateTapLeaf]
|
|
@@ -7351,7 +7437,7 @@ async function makeSignedDelegateIntent(identity, coins, outputs, onchainOutputs
|
|
|
7351
7437
|
expire_at: 0,
|
|
7352
7438
|
cosigners_public_keys: cosignerPubKeys
|
|
7353
7439
|
};
|
|
7354
|
-
const proof =
|
|
7440
|
+
const proof = chunkAB67CMHS_cjs.Intent.create(message, coins, outputs);
|
|
7355
7441
|
const signedProof = await identity.sign(proof);
|
|
7356
7442
|
return {
|
|
7357
7443
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -7369,10 +7455,10 @@ function getDayTimestamp(timestamp) {
|
|
|
7369
7455
|
function findDelegateTapLeaf(vtxo, delegatePubkey) {
|
|
7370
7456
|
if (!vtxo.tapTree) return void 0;
|
|
7371
7457
|
const pk = delegatePubkey.length === 66 ? delegatePubkey.slice(2) : delegatePubkey;
|
|
7372
|
-
const vtxoScript =
|
|
7458
|
+
const vtxoScript = chunkAB67CMHS_cjs.VtxoScript.decode(vtxo.tapTree);
|
|
7373
7459
|
return vtxoScript.leaves.find((tapLeaf) => {
|
|
7374
|
-
const arkTapscript =
|
|
7375
|
-
if (!
|
|
7460
|
+
const arkTapscript = chunkAB67CMHS_cjs.decodeTapscript(chunkAB67CMHS_cjs.scriptFromTapLeafScript(tapLeaf));
|
|
7461
|
+
if (!chunkAB67CMHS_cjs.MultisigTapscript.is(arkTapscript)) return false;
|
|
7376
7462
|
return arkTapscript.params.pubkeys.map(base.hex.encode).includes(pk);
|
|
7377
7463
|
});
|
|
7378
7464
|
}
|
|
@@ -7560,7 +7646,7 @@ async function closeDatabase(dbName) {
|
|
|
7560
7646
|
return true;
|
|
7561
7647
|
}
|
|
7562
7648
|
function scriptFromArkAddress(address) {
|
|
7563
|
-
return base.hex.encode(
|
|
7649
|
+
return base.hex.encode(chunkAB67CMHS_cjs.ArkAddress.decode(address).pkScript);
|
|
7564
7650
|
}
|
|
7565
7651
|
|
|
7566
7652
|
// src/repositories/indexedDB/schema.ts
|
|
@@ -8057,7 +8143,7 @@ function validateVtxosForScript(vtxos, script, context) {
|
|
|
8057
8143
|
}
|
|
8058
8144
|
async function getVtxosForContract(repo, contract) {
|
|
8059
8145
|
const vtxos = repo.getVtxosForScript ? await repo.getVtxosForScript(contract.script) : filterVtxosForScript(await repo.getVtxos(contract.address), contract.script);
|
|
8060
|
-
return vtxos.map(
|
|
8146
|
+
return vtxos.map(chunkAB67CMHS_cjs.normalizeVtxo);
|
|
8061
8147
|
}
|
|
8062
8148
|
async function saveVtxosForContract(repo, contract, vtxos) {
|
|
8063
8149
|
if (repo.saveVtxosForScript) {
|
|
@@ -8199,7 +8285,7 @@ function decodeArkContract(encoded) {
|
|
|
8199
8285
|
}
|
|
8200
8286
|
function contractFromArkContract(encoded, options = {}) {
|
|
8201
8287
|
const parsed = decodeArkContract(encoded);
|
|
8202
|
-
const handler =
|
|
8288
|
+
const handler = chunkOL7V43WS_cjs.contractHandlers.get(parsed.type);
|
|
8203
8289
|
if (!handler) {
|
|
8204
8290
|
throw new Error(`No handler registered for contract type '${parsed.type}'`);
|
|
8205
8291
|
}
|
|
@@ -8213,9 +8299,9 @@ function contractFromArkContract(encoded, options = {}) {
|
|
|
8213
8299
|
metadata: options.metadata
|
|
8214
8300
|
};
|
|
8215
8301
|
}
|
|
8216
|
-
function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix =
|
|
8302
|
+
function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunkAB67CMHS_cjs.DEFAULT_NETWORK.hrp, options = {}) {
|
|
8217
8303
|
const parsed = decodeArkContract(encoded);
|
|
8218
|
-
const handler =
|
|
8304
|
+
const handler = chunkOL7V43WS_cjs.contractHandlers.getOrThrow(parsed.type);
|
|
8219
8305
|
const params = parsed.data;
|
|
8220
8306
|
const vtxoScript = handler.createScript(params);
|
|
8221
8307
|
return {
|
|
@@ -8469,9 +8555,9 @@ var ContractWatcher = class {
|
|
|
8469
8555
|
this.connectionState = "connected";
|
|
8470
8556
|
this.reconnectAttempts = 0;
|
|
8471
8557
|
this.listenLoop().catch((e) => {
|
|
8472
|
-
if (
|
|
8558
|
+
if (chunkAB67CMHS_cjs.isEventSourceError(e)) {
|
|
8473
8559
|
console.debug("ContractWatcher subscription disconnected; reconnecting");
|
|
8474
|
-
} else if (!
|
|
8560
|
+
} else if (!chunkAB67CMHS_cjs.isEventSourceUnavailableError(e)) {
|
|
8475
8561
|
console.error(e);
|
|
8476
8562
|
}
|
|
8477
8563
|
this.connectionState = "disconnected";
|
|
@@ -8483,7 +8569,7 @@ var ContractWatcher = class {
|
|
|
8483
8569
|
this.scheduleReconnect();
|
|
8484
8570
|
});
|
|
8485
8571
|
} catch (error) {
|
|
8486
|
-
if (!
|
|
8572
|
+
if (!chunkAB67CMHS_cjs.isEventSourceUnavailableError(error)) {
|
|
8487
8573
|
console.error("ContractWatcher connection failed:", error);
|
|
8488
8574
|
}
|
|
8489
8575
|
this.connectionState = "disconnected";
|
|
@@ -8509,7 +8595,7 @@ var ContractWatcher = class {
|
|
|
8509
8595
|
* slower; what it loses is push latency.
|
|
8510
8596
|
*/
|
|
8511
8597
|
reportEventSourceUnavailable(error) {
|
|
8512
|
-
if (!
|
|
8598
|
+
if (!chunkAB67CMHS_cjs.isEventSourceUnavailableError(error)) return false;
|
|
8513
8599
|
if (!this.eventSourceReported) {
|
|
8514
8600
|
this.eventSourceReported = true;
|
|
8515
8601
|
console.warn(
|
|
@@ -8725,14 +8811,14 @@ var ContractWatcher = class {
|
|
|
8725
8811
|
const timestamp = Date.now();
|
|
8726
8812
|
if (update.newVtxos?.length) {
|
|
8727
8813
|
this.processSubscriptionVtxos(
|
|
8728
|
-
update.newVtxos.map(
|
|
8814
|
+
update.newVtxos.map(chunkAB67CMHS_cjs.normalizeVtxo),
|
|
8729
8815
|
"vtxo_received",
|
|
8730
8816
|
timestamp
|
|
8731
8817
|
);
|
|
8732
8818
|
}
|
|
8733
8819
|
if (update.spentVtxos?.length) {
|
|
8734
8820
|
this.processSubscriptionVtxos(
|
|
8735
|
-
update.spentVtxos.map(
|
|
8821
|
+
update.spentVtxos.map(chunkAB67CMHS_cjs.normalizeVtxo),
|
|
8736
8822
|
"vtxo_spent",
|
|
8737
8823
|
timestamp
|
|
8738
8824
|
);
|
|
@@ -8865,7 +8951,7 @@ async function reconcileIntents(deps) {
|
|
|
8865
8951
|
let vtxosByOutpoint = /* @__PURE__ */ new Map();
|
|
8866
8952
|
if (outpoints.length > 0) {
|
|
8867
8953
|
try {
|
|
8868
|
-
const { vtxos } = await
|
|
8954
|
+
const { vtxos } = await chunkAB67CMHS_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
|
|
8869
8955
|
vtxosByOutpoint = new Map(vtxos.map((v) => [outpointKey(v), v]));
|
|
8870
8956
|
} catch (e) {
|
|
8871
8957
|
console.error("reconcileIntents: failed to fetch input VTXO state", e);
|
|
@@ -9039,7 +9125,7 @@ var ContractManager = class _ContractManager {
|
|
|
9039
9125
|
await this.reconcileWatched();
|
|
9040
9126
|
this.markSyncOnline();
|
|
9041
9127
|
} catch (err) {
|
|
9042
|
-
if (!
|
|
9128
|
+
if (!chunkAB67CMHS_cjs.isRetryableProviderError(err)) throw err;
|
|
9043
9129
|
this.markSyncDegraded(err);
|
|
9044
9130
|
}
|
|
9045
9131
|
this.initialized = true;
|
|
@@ -9171,7 +9257,7 @@ var ContractManager = class _ContractManager {
|
|
|
9171
9257
|
const from = Math.max(0, watermark - lookAhead.size);
|
|
9172
9258
|
const to = watermark + lookAhead.size;
|
|
9173
9259
|
const deps = lookAhead.candidateDeps();
|
|
9174
|
-
const handlers =
|
|
9260
|
+
const handlers = chunkOL7V43WS_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkOL7V43WS_cjs.contractHandlers.get(t)).filter(hasCandidates);
|
|
9175
9261
|
const band = /* @__PURE__ */ new Map();
|
|
9176
9262
|
for (let index = from; index <= to; index++) {
|
|
9177
9263
|
const descriptor = lookAhead.materialize(index);
|
|
@@ -9182,7 +9268,7 @@ var ContractManager = class _ContractManager {
|
|
|
9182
9268
|
index,
|
|
9183
9269
|
params: {
|
|
9184
9270
|
...candidate,
|
|
9185
|
-
...
|
|
9271
|
+
...chunkOL7V43WS_cjs.speculativeReceiveMetadata(descriptor)
|
|
9186
9272
|
}
|
|
9187
9273
|
});
|
|
9188
9274
|
}
|
|
@@ -9244,7 +9330,7 @@ var ContractManager = class _ContractManager {
|
|
|
9244
9330
|
});
|
|
9245
9331
|
for (const entry of pending) entry.catchUpPending = false;
|
|
9246
9332
|
} catch (err) {
|
|
9247
|
-
if (!
|
|
9333
|
+
if (!chunkAB67CMHS_cjs.isRetryableProviderError(err)) throw err;
|
|
9248
9334
|
this.markSyncDegraded(err);
|
|
9249
9335
|
}
|
|
9250
9336
|
}
|
|
@@ -9294,7 +9380,7 @@ var ContractManager = class _ContractManager {
|
|
|
9294
9380
|
await this.fetchContractVxosFromIndexer([contract]);
|
|
9295
9381
|
this.markSyncOnline();
|
|
9296
9382
|
} catch (err) {
|
|
9297
|
-
if (!
|
|
9383
|
+
if (!chunkAB67CMHS_cjs.isRetryableProviderError(err)) throw err;
|
|
9298
9384
|
this.markSyncDegraded(err);
|
|
9299
9385
|
}
|
|
9300
9386
|
await this.watcher.addContract(contract);
|
|
@@ -9331,7 +9417,7 @@ var ContractManager = class _ContractManager {
|
|
|
9331
9417
|
return result;
|
|
9332
9418
|
}
|
|
9333
9419
|
async upsertContractRow(params) {
|
|
9334
|
-
const handler =
|
|
9420
|
+
const handler = chunkOL7V43WS_cjs.contractHandlers.get(params.type);
|
|
9335
9421
|
if (!handler) {
|
|
9336
9422
|
throw new Error(`No handler registered for contract type '${params.type}'`);
|
|
9337
9423
|
}
|
|
@@ -9431,7 +9517,7 @@ var ContractManager = class _ContractManager {
|
|
|
9431
9517
|
`scanContracts: batchSize must be a positive integer (got ${String(opts.batchSize)})`
|
|
9432
9518
|
);
|
|
9433
9519
|
}
|
|
9434
|
-
const registered =
|
|
9520
|
+
const registered = chunkOL7V43WS_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkOL7V43WS_cjs.contractHandlers.get(t)).filter(isDiscoverable);
|
|
9435
9521
|
const discoverables = [
|
|
9436
9522
|
...registered.filter((h) => h.type === "boarding"),
|
|
9437
9523
|
...registered.filter((h) => h.type !== "boarding")
|
|
@@ -9566,7 +9652,7 @@ var ContractManager = class _ContractManager {
|
|
|
9566
9652
|
await this.syncContracts({ contracts, pageSize });
|
|
9567
9653
|
this.markSyncOnline();
|
|
9568
9654
|
} catch (err) {
|
|
9569
|
-
if (!
|
|
9655
|
+
if (!chunkAB67CMHS_cjs.isRetryableProviderError(err)) throw err;
|
|
9570
9656
|
this.markSyncDegraded(err);
|
|
9571
9657
|
}
|
|
9572
9658
|
const vtxos = await this.getVtxosForContracts(contracts);
|
|
@@ -9587,7 +9673,7 @@ var ContractManager = class _ContractManager {
|
|
|
9587
9673
|
}
|
|
9588
9674
|
const tapscriptCache = tapscripts ?? /* @__PURE__ */ new Map();
|
|
9589
9675
|
return vtxos.map(
|
|
9590
|
-
(vtxo) => extendVirtualCoinForContract(
|
|
9676
|
+
(vtxo) => extendVirtualCoinForContract(chunkAB67CMHS_cjs.normalizeVtxo(vtxo), byScript, tapscriptCache)
|
|
9591
9677
|
);
|
|
9592
9678
|
}
|
|
9593
9679
|
/** @inheritdoc */
|
|
@@ -9631,14 +9717,14 @@ var ContractManager = class _ContractManager {
|
|
|
9631
9717
|
const byScript = new Map(contracts.map((contract) => [contract.script, contract]));
|
|
9632
9718
|
const asking = vtxos.filter((vtxo) => {
|
|
9633
9719
|
const contract = byScript.get(vtxo.script);
|
|
9634
|
-
return contract !== void 0 &&
|
|
9720
|
+
return contract !== void 0 && chunkOL7V43WS_cjs.contractHandlers.get(contract.type)?.assertSpendableNow !== void 0;
|
|
9635
9721
|
});
|
|
9636
9722
|
if (asking.length === 0) return refused;
|
|
9637
9723
|
const tip = await this.currentChainTip();
|
|
9638
9724
|
const walletKey = await walletPubKey?.();
|
|
9639
9725
|
for (const vtxo of asking) {
|
|
9640
9726
|
const contract = byScript.get(vtxo.script);
|
|
9641
|
-
const handler =
|
|
9727
|
+
const handler = chunkOL7V43WS_cjs.contractHandlers.get(contract.type);
|
|
9642
9728
|
if (!handler?.assertSpendableNow) continue;
|
|
9643
9729
|
const context = {
|
|
9644
9730
|
collaborative: true,
|
|
@@ -9653,7 +9739,7 @@ var ContractManager = class _ContractManager {
|
|
|
9653
9739
|
// the next handler to answer a CSV question would meet a
|
|
9654
9740
|
// TypeError instead of a `false`. Carry the coin only when it
|
|
9655
9741
|
// really is one.
|
|
9656
|
-
vtxo:
|
|
9742
|
+
vtxo: chunkAB67CMHS_cjs.isVirtualCoin(vtxo) && "status" in vtxo ? vtxo : void 0
|
|
9657
9743
|
};
|
|
9658
9744
|
try {
|
|
9659
9745
|
await handler.assertSpendableNow(
|
|
@@ -9809,7 +9895,7 @@ var ContractManager = class _ContractManager {
|
|
|
9809
9895
|
const { contractScript, collaborative = true, walletPubKey, vtxo } = options;
|
|
9810
9896
|
const [contract] = await this.getContracts({ script: contractScript });
|
|
9811
9897
|
if (!contract) return [];
|
|
9812
|
-
const handler =
|
|
9898
|
+
const handler = chunkOL7V43WS_cjs.contractHandlers.get(contract.type);
|
|
9813
9899
|
if (!handler) return [];
|
|
9814
9900
|
const script = handler.createScript(contract.params);
|
|
9815
9901
|
const tip = await this.currentChainTip();
|
|
@@ -9837,7 +9923,7 @@ var ContractManager = class _ContractManager {
|
|
|
9837
9923
|
const { contractScript, collaborative = true, walletPubKey } = options;
|
|
9838
9924
|
const [contract] = await this.getContracts({ script: contractScript });
|
|
9839
9925
|
if (!contract) return [];
|
|
9840
|
-
const handler =
|
|
9926
|
+
const handler = chunkOL7V43WS_cjs.contractHandlers.get(contract.type);
|
|
9841
9927
|
if (!handler) return [];
|
|
9842
9928
|
const script = handler.createScript(contract.params);
|
|
9843
9929
|
const context = {
|
|
@@ -9893,7 +9979,7 @@ var ContractManager = class _ContractManager {
|
|
|
9893
9979
|
}
|
|
9894
9980
|
async refreshOutpoints(outpoints) {
|
|
9895
9981
|
if (outpoints.length === 0) return;
|
|
9896
|
-
const { vtxos } = await
|
|
9982
|
+
const { vtxos } = await chunkAB67CMHS_cjs.getNormalizedVtxos(this.config.indexerProvider, {
|
|
9897
9983
|
outpoints
|
|
9898
9984
|
});
|
|
9899
9985
|
if (vtxos.length === 0) return;
|
|
@@ -9972,7 +10058,7 @@ var ContractManager = class _ContractManager {
|
|
|
9972
10058
|
break;
|
|
9973
10059
|
}
|
|
9974
10060
|
} catch (err) {
|
|
9975
|
-
if (!
|
|
10061
|
+
if (!chunkAB67CMHS_cjs.isRetryableProviderError(err)) throw err;
|
|
9976
10062
|
this.markSyncDegraded(err);
|
|
9977
10063
|
}
|
|
9978
10064
|
this.emitEvent(event);
|
|
@@ -10051,7 +10137,7 @@ var ContractManager = class _ContractManager {
|
|
|
10051
10137
|
*/
|
|
10052
10138
|
async reconcilePendingFrontier(contracts) {
|
|
10053
10139
|
const scriptToContract = new Map(contracts.map((c) => [c.script, c]));
|
|
10054
|
-
const vtxos = await
|
|
10140
|
+
const vtxos = await chunkAB67CMHS_cjs.getAllNormalizedVtxos(
|
|
10055
10141
|
this.config.indexerProvider,
|
|
10056
10142
|
contracts.map((c) => c.script),
|
|
10057
10143
|
{ pendingOnly: true }
|
|
@@ -10134,7 +10220,7 @@ var ContractManager = class _ContractManager {
|
|
|
10134
10220
|
}
|
|
10135
10221
|
return result;
|
|
10136
10222
|
}
|
|
10137
|
-
async fetchContractVtxosBulk(contracts, pageSize =
|
|
10223
|
+
async fetchContractVtxosBulk(contracts, pageSize = chunkAB67CMHS_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
|
|
10138
10224
|
if (contracts.length === 0) {
|
|
10139
10225
|
return { vtxosByScript: /* @__PURE__ */ new Map(), promoted: /* @__PURE__ */ new Map() };
|
|
10140
10226
|
}
|
|
@@ -10150,7 +10236,7 @@ var ContractManager = class _ContractManager {
|
|
|
10150
10236
|
before: syncWindow.before
|
|
10151
10237
|
}
|
|
10152
10238
|
} : {};
|
|
10153
|
-
const vtxos = await
|
|
10239
|
+
const vtxos = await chunkAB67CMHS_cjs.getAllNormalizedVtxos(
|
|
10154
10240
|
this.config.indexerProvider,
|
|
10155
10241
|
contracts.map((c) => c.script),
|
|
10156
10242
|
{ ...windowOpts, pageSize }
|
|
@@ -10295,7 +10381,7 @@ var deserializeTapLeaf = (t) => {
|
|
|
10295
10381
|
const s = base.hex.decode(t.s);
|
|
10296
10382
|
return [cb, s];
|
|
10297
10383
|
};
|
|
10298
|
-
var deserializeVtxo = (o) =>
|
|
10384
|
+
var deserializeVtxo = (o) => chunkAB67CMHS_cjs.normalizeVtxo({
|
|
10299
10385
|
...o,
|
|
10300
10386
|
createdAt: new Date(o.createdAt),
|
|
10301
10387
|
tapTree: base.hex.decode(o.tapTree),
|
|
@@ -11336,7 +11422,7 @@ var HDDescriptorProvider = class _HDDescriptorProvider {
|
|
|
11336
11422
|
*/
|
|
11337
11423
|
materializeDescriptorAt(index) {
|
|
11338
11424
|
const descriptor = this.identity.descriptor;
|
|
11339
|
-
const network =
|
|
11425
|
+
const network = chunkOL7V43WS_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
11340
11426
|
const expansion = descriptorsScure.expand({ descriptor, network, index });
|
|
11341
11427
|
const keyInfo = expansion.expansionMap?.["@0"];
|
|
11342
11428
|
if (!keyInfo?.keyExpression) {
|
|
@@ -11484,7 +11570,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
|
|
|
11484
11570
|
const provider = await resolveDescriptorProvider(config, setup.walletRepository);
|
|
11485
11571
|
if (!provider) return void 0;
|
|
11486
11572
|
const allowSilentFallback = (config.walletMode ?? "auto") === "auto";
|
|
11487
|
-
const expectedContractType = setup.offchainTapscript instanceof
|
|
11573
|
+
const expectedContractType = setup.offchainTapscript instanceof chunkOL7V43WS_cjs.DelegateVtxo.Script ? "delegate" : "default";
|
|
11488
11574
|
const factoryOpts = {
|
|
11489
11575
|
walletRepository: setup.walletRepository,
|
|
11490
11576
|
contractRepository: setup.contractRepository,
|
|
@@ -11683,7 +11769,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
|
|
|
11683
11769
|
};
|
|
11684
11770
|
function deriveLeafPubkey(descriptor) {
|
|
11685
11771
|
try {
|
|
11686
|
-
return
|
|
11772
|
+
return chunkOL7V43WS_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
11687
11773
|
} catch (e) {
|
|
11688
11774
|
throw new NonRangeableDescriptorError(
|
|
11689
11775
|
"Cannot derive leaf pubkey: descriptor is not a materialized, parsable tr(...) shape.",
|
|
@@ -11695,7 +11781,7 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
11695
11781
|
const pubKey = deriveLeafPubkey(descriptor);
|
|
11696
11782
|
const tapscript = rebuildTapscript(current, pubKey);
|
|
11697
11783
|
const serverPubKey = tapscript.options.serverPubKey;
|
|
11698
|
-
const csvTimelock =
|
|
11784
|
+
const csvTimelock = chunkAB67CMHS_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
|
|
11699
11785
|
const base$1 = {
|
|
11700
11786
|
script: base.hex.encode(tapscript.pkScript),
|
|
11701
11787
|
address: tapscript.address(hrp, serverPubKey).encode(),
|
|
@@ -11706,11 +11792,11 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
11706
11792
|
// index-0 key. Without it, spends produce unsigned PSBTs that the
|
|
11707
11793
|
// server rejects with `INVALID_PSBT_INPUT (5): missing tapscript spend sig`.
|
|
11708
11794
|
metadata: {
|
|
11709
|
-
...{ source:
|
|
11795
|
+
...{ source: chunkOL7V43WS_cjs.WALLET_RECEIVE_SOURCE },
|
|
11710
11796
|
signingDescriptor: descriptor
|
|
11711
11797
|
}
|
|
11712
11798
|
};
|
|
11713
|
-
const params = tapscript instanceof
|
|
11799
|
+
const params = tapscript instanceof chunkOL7V43WS_cjs.DelegateVtxo.Script ? {
|
|
11714
11800
|
...base$1,
|
|
11715
11801
|
type: "delegate",
|
|
11716
11802
|
params: {
|
|
@@ -11731,10 +11817,10 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
11731
11817
|
return { tapscript, params };
|
|
11732
11818
|
}
|
|
11733
11819
|
function rebuildTapscript(current, pubKey) {
|
|
11734
|
-
if (current instanceof
|
|
11735
|
-
return new
|
|
11820
|
+
if (current instanceof chunkOL7V43WS_cjs.DelegateVtxo.Script) {
|
|
11821
|
+
return new chunkOL7V43WS_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
|
|
11736
11822
|
}
|
|
11737
|
-
return new
|
|
11823
|
+
return new chunkOL7V43WS_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
|
|
11738
11824
|
}
|
|
11739
11825
|
async function pickActiveReceive(contractRepository, serverPubKey, expectedType) {
|
|
11740
11826
|
const candidates = await contractRepository.getContracts({
|
|
@@ -11743,7 +11829,7 @@ async function pickActiveReceive(contractRepository, serverPubKey, expectedType)
|
|
|
11743
11829
|
});
|
|
11744
11830
|
const serverPubKeyHex = base.hex.encode(serverPubKey);
|
|
11745
11831
|
const matching = candidates.filter(
|
|
11746
|
-
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source ===
|
|
11832
|
+
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkOL7V43WS_cjs.WALLET_RECEIVE_SOURCE
|
|
11747
11833
|
).sort((a, b) => {
|
|
11748
11834
|
if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
|
|
11749
11835
|
return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
|
|
@@ -11786,6 +11872,8 @@ function computeOffchainBalance(vtxos, caps) {
|
|
|
11786
11872
|
let settled = 0;
|
|
11787
11873
|
let preconfirmed = 0;
|
|
11788
11874
|
let available = 0;
|
|
11875
|
+
let gated = 0;
|
|
11876
|
+
let intentLocked = 0;
|
|
11789
11877
|
let recoverable = 0;
|
|
11790
11878
|
let pendingRecovery = 0;
|
|
11791
11879
|
const owned = /* @__PURE__ */ new Map();
|
|
@@ -11796,23 +11884,27 @@ function computeOffchainBalance(vtxos, caps) {
|
|
|
11796
11884
|
}
|
|
11797
11885
|
};
|
|
11798
11886
|
for (const vtxo of vtxos) {
|
|
11799
|
-
if (
|
|
11887
|
+
if (chunkAB67CMHS_cjs.hasTerminalSpend(vtxo)) continue;
|
|
11800
11888
|
addAssets(owned, vtxo);
|
|
11801
11889
|
if (isPendingRecovery(vtxo)) {
|
|
11802
11890
|
pendingRecovery += vtxo.value;
|
|
11803
11891
|
continue;
|
|
11804
11892
|
}
|
|
11805
|
-
if (
|
|
11893
|
+
if (chunkAB67CMHS_cjs.canRecoverOnchain(vtxo, now)) {
|
|
11806
11894
|
recoverable += vtxo.value;
|
|
11807
11895
|
continue;
|
|
11808
11896
|
}
|
|
11809
|
-
if (!
|
|
11897
|
+
if (!chunkAB67CMHS_cjs.canSpendOffchain(vtxo, now)) continue;
|
|
11810
11898
|
if (vtxo.isPreconfirmed) {
|
|
11811
11899
|
preconfirmed += vtxo.value;
|
|
11812
11900
|
} else {
|
|
11813
11901
|
settled += vtxo.value;
|
|
11814
11902
|
}
|
|
11815
|
-
if (isGenericallySpendable(vtxo)
|
|
11903
|
+
if (!isGenericallySpendable(vtxo)) {
|
|
11904
|
+
gated += vtxo.value;
|
|
11905
|
+
} else if (!isUnlocked(vtxo)) {
|
|
11906
|
+
intentLocked += vtxo.value;
|
|
11907
|
+
} else {
|
|
11816
11908
|
available += vtxo.value;
|
|
11817
11909
|
addAssets(spendable, vtxo);
|
|
11818
11910
|
}
|
|
@@ -11822,6 +11914,8 @@ function computeOffchainBalance(vtxos, caps) {
|
|
|
11822
11914
|
settled,
|
|
11823
11915
|
preconfirmed,
|
|
11824
11916
|
available,
|
|
11917
|
+
gated,
|
|
11918
|
+
intentLocked,
|
|
11825
11919
|
recoverable,
|
|
11826
11920
|
pendingRecovery,
|
|
11827
11921
|
total: settled + preconfirmed + recoverable + pendingRecovery,
|
|
@@ -11969,15 +12063,26 @@ var InputSignerRouter = class {
|
|
|
11969
12063
|
};
|
|
11970
12064
|
|
|
11971
12065
|
// src/wallet/wallet.ts
|
|
11972
|
-
var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl ||
|
|
12066
|
+
var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl || chunkAB67CMHS_cjs.DEFAULT_ARKADE_SERVER_URL;
|
|
11973
12067
|
function intentProofJobs(coins) {
|
|
11974
12068
|
if (coins.length === 0) return [];
|
|
11975
12069
|
const coinJobs = coins.map((coin, i) => ({
|
|
11976
12070
|
index: i + 1,
|
|
11977
|
-
lookupScript:
|
|
12071
|
+
lookupScript: chunkAB67CMHS_cjs.VtxoScript.decode(coin.tapTree).pkScript
|
|
11978
12072
|
}));
|
|
11979
12073
|
return [{ index: 0, lookupScript: coinJobs[0].lookupScript }, ...coinJobs];
|
|
11980
12074
|
}
|
|
12075
|
+
function asSendParams(args) {
|
|
12076
|
+
const [first] = args;
|
|
12077
|
+
if (args.length === 1 && first && "recipients" in first) {
|
|
12078
|
+
const params = first;
|
|
12079
|
+
if (params.recipients.length === 0) {
|
|
12080
|
+
throw new Error("At least one receiver is required");
|
|
12081
|
+
}
|
|
12082
|
+
return params;
|
|
12083
|
+
}
|
|
12084
|
+
return { recipients: args };
|
|
12085
|
+
}
|
|
11981
12086
|
function extractArkProviderUrl(provider) {
|
|
11982
12087
|
const serverUrl = provider.serverUrl;
|
|
11983
12088
|
return typeof serverUrl === "string" && serverUrl.length > 0 ? serverUrl : void 0;
|
|
@@ -12000,7 +12105,7 @@ function dedupeTimelocks(timelocks) {
|
|
|
12000
12105
|
const seen = /* @__PURE__ */ new Set();
|
|
12001
12106
|
const deduped = [];
|
|
12002
12107
|
for (const timelock of timelocks) {
|
|
12003
|
-
const sequence =
|
|
12108
|
+
const sequence = chunkAB67CMHS_cjs.timelockToSequence(timelock).toString();
|
|
12004
12109
|
if (seen.has(sequence)) continue;
|
|
12005
12110
|
seen.add(sequence);
|
|
12006
12111
|
deduped.push(timelock);
|
|
@@ -12017,7 +12122,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
|
|
|
12017
12122
|
state: "active"
|
|
12018
12123
|
});
|
|
12019
12124
|
const newest = candidates.filter(
|
|
12020
|
-
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source ===
|
|
12125
|
+
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkOL7V43WS_cjs.WALLET_RECEIVE_SOURCE
|
|
12021
12126
|
).sort((a, b) => {
|
|
12022
12127
|
if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
|
|
12023
12128
|
return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
|
|
@@ -12025,7 +12130,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
|
|
|
12025
12130
|
if (!newest?.params.pubKey) return baseline;
|
|
12026
12131
|
try {
|
|
12027
12132
|
const pubKey = base.hex.decode(newest.params.pubKey);
|
|
12028
|
-
return new
|
|
12133
|
+
return new chunkOL7V43WS_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
|
|
12029
12134
|
} catch (e) {
|
|
12030
12135
|
console.warn("Skipping malformed boarding contract at boot", newest.script, e);
|
|
12031
12136
|
return baseline;
|
|
@@ -12041,8 +12146,8 @@ function filterSnapshotVtxos(snapshot, filter, pendingSpendOutpoints) {
|
|
|
12041
12146
|
if (pendingSpendOutpoints.has(`${vtxo.txid}:${vtxo.vout}`)) {
|
|
12042
12147
|
return false;
|
|
12043
12148
|
}
|
|
12044
|
-
if (!
|
|
12045
|
-
if (!f.withRecoverable &&
|
|
12149
|
+
if (!chunkAB67CMHS_cjs.hasTerminalSpend(vtxo)) {
|
|
12150
|
+
if (!f.withRecoverable && chunkAB67CMHS_cjs.canRecoverOnchain(vtxo, now)) {
|
|
12046
12151
|
return false;
|
|
12047
12152
|
}
|
|
12048
12153
|
return true;
|
|
@@ -12383,7 +12488,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12383
12488
|
*/
|
|
12384
12489
|
static async setupWalletConfig(config, pubKey) {
|
|
12385
12490
|
const arkadeServerUrl = getArkadeServerUrl(config);
|
|
12386
|
-
const arkProvider = config.arkProvider || new
|
|
12491
|
+
const arkProvider = config.arkProvider || new chunkAB67CMHS_cjs.RestArkProvider(arkadeServerUrl);
|
|
12387
12492
|
let indexerProvider = config.indexerProvider;
|
|
12388
12493
|
if (!indexerProvider) {
|
|
12389
12494
|
let indexerUrl = config.indexerUrl;
|
|
@@ -12400,7 +12505,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12400
12505
|
indexerUrl = arkadeServerUrl;
|
|
12401
12506
|
}
|
|
12402
12507
|
}
|
|
12403
|
-
indexerProvider = new
|
|
12508
|
+
indexerProvider = new chunkLG5GY73A_cjs.RestIndexerProvider(indexerUrl);
|
|
12404
12509
|
}
|
|
12405
12510
|
const walletRepository = config.storage?.walletRepository ?? new IndexedDBWalletRepository();
|
|
12406
12511
|
const contractRepository = config.storage?.contractRepository ?? new IndexedDBContractRepository();
|
|
@@ -12409,7 +12514,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12409
12514
|
source: serverInfoSource,
|
|
12410
12515
|
lastOnlineAt: serverInfoLastOnlineAt
|
|
12411
12516
|
} = await resolveArkInfo(arkProvider, walletRepository);
|
|
12412
|
-
const network =
|
|
12517
|
+
const network = chunkAB67CMHS_cjs.getNetwork(info.network);
|
|
12413
12518
|
if ("descriptor" in config.identity) {
|
|
12414
12519
|
const descriptor = config.identity.descriptor;
|
|
12415
12520
|
const identityIsMainnet = !descriptor.includes("tpub");
|
|
@@ -12456,11 +12561,11 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12456
12561
|
serverPubKey,
|
|
12457
12562
|
csvTimelock: exitTimelock
|
|
12458
12563
|
};
|
|
12459
|
-
const offchainTapscript = !delegatePubKey ? new
|
|
12460
|
-
const boardingTapscript =
|
|
12564
|
+
const offchainTapscript = !delegatePubKey ? new chunkOL7V43WS_cjs.DefaultVtxo.Script(offchainOptions) : new chunkOL7V43WS_cjs.DelegateVtxo.Script({ ...offchainOptions, delegatePubKey });
|
|
12565
|
+
const boardingTapscript = chunkOL7V43WS_cjs.BoardingContractHandler.createScript({
|
|
12461
12566
|
pubKey: base.hex.encode(pubKey),
|
|
12462
12567
|
serverPubKey: base.hex.encode(serverPubKey),
|
|
12463
|
-
csvTimelock:
|
|
12568
|
+
csvTimelock: chunkAB67CMHS_cjs.timelockToSequence(boardingTimelock).toString()
|
|
12464
12569
|
});
|
|
12465
12570
|
return {
|
|
12466
12571
|
arkProvider,
|
|
@@ -12574,6 +12679,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12574
12679
|
settled: offchain.settled,
|
|
12575
12680
|
preconfirmed: offchain.preconfirmed,
|
|
12576
12681
|
available: offchain.available,
|
|
12682
|
+
gated: offchain.gated,
|
|
12683
|
+
intentLocked: offchain.intentLocked,
|
|
12577
12684
|
recoverable: offchain.recoverable,
|
|
12578
12685
|
pendingRecovery: offchain.pendingRecovery,
|
|
12579
12686
|
total: totalBoarding + offchain.total,
|
|
@@ -12755,7 +12862,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12755
12862
|
const response = await contractManager.getContractsWithVtxos();
|
|
12756
12863
|
const allVtxos = response.flatMap((_) => _.vtxos);
|
|
12757
12864
|
const { boardingTxs, commitmentsToIgnore } = await this.getBoardingTxs();
|
|
12758
|
-
const resolveTxCreatedAt = (txids) =>
|
|
12865
|
+
const resolveTxCreatedAt = (txids) => chunkAB67CMHS_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
|
|
12759
12866
|
return buildTransactionHistory(
|
|
12760
12867
|
allVtxos,
|
|
12761
12868
|
boardingTxs,
|
|
@@ -12849,7 +12956,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12849
12956
|
},
|
|
12850
12957
|
isUnrolled: true,
|
|
12851
12958
|
...boardingFacts,
|
|
12852
|
-
virtualStatus:
|
|
12959
|
+
virtualStatus: chunkAB67CMHS_cjs.toVirtualStatus(boardingFacts),
|
|
12853
12960
|
spentBy: "",
|
|
12854
12961
|
createdAt: tx.status.confirmed ? new Date(tx.status.block_time * 1e3) : /* @__PURE__ */ new Date(0),
|
|
12855
12962
|
script: scriptHex
|
|
@@ -12905,9 +13012,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12905
13012
|
async getBoardingTapscripts(allowedSigners) {
|
|
12906
13013
|
const byScript = /* @__PURE__ */ new Map();
|
|
12907
13014
|
const add = (s) => byScript.set(base.hex.encode(s.pkScript), s);
|
|
12908
|
-
const boardingCsv = this.boardingTapscript.options.csvTimelock ??
|
|
13015
|
+
const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunkOL7V43WS_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
12909
13016
|
add(
|
|
12910
|
-
new
|
|
13017
|
+
new chunkOL7V43WS_cjs.DefaultVtxo.Script({
|
|
12911
13018
|
pubKey: await this.identity.xOnlyPublicKey(),
|
|
12912
13019
|
serverPubKey: this.boardingTapscript.options.serverPubKey,
|
|
12913
13020
|
csvTimelock: boardingCsv
|
|
@@ -12922,7 +13029,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12922
13029
|
for (const c of boardingContracts) {
|
|
12923
13030
|
if (!allowed.has(toXOnlySignerHex(c.params.serverPubKey))) continue;
|
|
12924
13031
|
try {
|
|
12925
|
-
add(
|
|
13032
|
+
add(chunkOL7V43WS_cjs.BoardingContractHandler.createScript(c.params));
|
|
12926
13033
|
} catch (e) {
|
|
12927
13034
|
console.warn("Skipping malformed boarding contract", c.script, e);
|
|
12928
13035
|
}
|
|
@@ -12960,7 +13067,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12960
13067
|
// Per-row CSV delay decoded from THIS tapscript's exit leaf —
|
|
12961
13068
|
// not the wallet's current boarding timelock, which a signer
|
|
12962
13069
|
// rotation may have changed.
|
|
12963
|
-
csvTimelock:
|
|
13070
|
+
csvTimelock: chunkAB67CMHS_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
|
|
12964
13071
|
coins: utxos
|
|
12965
13072
|
});
|
|
12966
13073
|
}
|
|
@@ -13093,7 +13200,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13093
13200
|
/** Fetch Arkade transaction ids that are still pending final settlement. */
|
|
13094
13201
|
async fetchPendingTxs() {
|
|
13095
13202
|
const scripts = await this.getWalletScripts();
|
|
13096
|
-
const vtxos = await
|
|
13203
|
+
const vtxos = await chunkAB67CMHS_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
|
|
13097
13204
|
return vtxos.filter(
|
|
13098
13205
|
(vtxo) => (vtxo.isSpent || vtxo.isPreconfirmed && !vtxo.isSwept) && vtxo.arkTxId !== void 0
|
|
13099
13206
|
).map((_) => _.arkTxId);
|
|
@@ -13124,7 +13231,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13124
13231
|
});
|
|
13125
13232
|
for (const contract of contracts) {
|
|
13126
13233
|
if (map.has(contract.script)) continue;
|
|
13127
|
-
const handler =
|
|
13234
|
+
const handler = chunkOL7V43WS_cjs.contractHandlers.get(contract.type);
|
|
13128
13235
|
if (handler) {
|
|
13129
13236
|
const script = handler.createScript(contract.params);
|
|
13130
13237
|
map.set(contract.script, script);
|
|
@@ -13236,7 +13343,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13236
13343
|
}
|
|
13237
13344
|
});
|
|
13238
13345
|
const baselinePubkey = await this.identity.xOnlyPublicKey();
|
|
13239
|
-
const delegatePubKey = this.offchainTapscript instanceof
|
|
13346
|
+
const delegatePubKey = this.offchainTapscript instanceof chunkOL7V43WS_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
|
|
13240
13347
|
const baselineSigners = [
|
|
13241
13348
|
this.offchainTapscript.options.serverPubKey,
|
|
13242
13349
|
...[...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h))
|
|
@@ -13244,8 +13351,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13244
13351
|
const seenBaselineScripts = /* @__PURE__ */ new Set();
|
|
13245
13352
|
for (const serverPubKey of baselineSigners) {
|
|
13246
13353
|
for (const csvTimelock of this.walletContractTimelocks) {
|
|
13247
|
-
const csvTimelockStr =
|
|
13248
|
-
const defaultScript = new
|
|
13354
|
+
const csvTimelockStr = chunkAB67CMHS_cjs.timelockToSequence(csvTimelock).toString();
|
|
13355
|
+
const defaultScript = new chunkOL7V43WS_cjs.DefaultVtxo.Script({
|
|
13249
13356
|
pubKey: baselinePubkey,
|
|
13250
13357
|
serverPubKey,
|
|
13251
13358
|
csvTimelock
|
|
@@ -13266,7 +13373,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13266
13373
|
});
|
|
13267
13374
|
}
|
|
13268
13375
|
if (delegatePubKey) {
|
|
13269
|
-
const delegateScript = new
|
|
13376
|
+
const delegateScript = new chunkOL7V43WS_cjs.DelegateVtxo.Script({
|
|
13270
13377
|
pubKey: baselinePubkey,
|
|
13271
13378
|
serverPubKey,
|
|
13272
13379
|
delegatePubKey,
|
|
@@ -13290,9 +13397,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13290
13397
|
}
|
|
13291
13398
|
}
|
|
13292
13399
|
}
|
|
13293
|
-
const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ??
|
|
13400
|
+
const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunkOL7V43WS_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
13294
13401
|
for (const serverPubKey of baselineSigners) {
|
|
13295
|
-
const baselineBoarding = new
|
|
13402
|
+
const baselineBoarding = new chunkOL7V43WS_cjs.DefaultVtxo.Script({
|
|
13296
13403
|
pubKey: baselinePubkey,
|
|
13297
13404
|
serverPubKey,
|
|
13298
13405
|
csvTimelock: boardingCsvTimelock
|
|
@@ -13305,7 +13412,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13305
13412
|
params: {
|
|
13306
13413
|
pubKey: base.hex.encode(baselineBoarding.options.pubKey),
|
|
13307
13414
|
serverPubKey: base.hex.encode(serverPubKey),
|
|
13308
|
-
csvTimelock:
|
|
13415
|
+
csvTimelock: chunkAB67CMHS_cjs.timelockToSequence(boardingCsvTimelock).toString()
|
|
13309
13416
|
},
|
|
13310
13417
|
script: boardingScriptHex,
|
|
13311
13418
|
address: baselineBoarding.address(this.network.hrp, serverPubKey).encode(),
|
|
@@ -13484,7 +13591,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13484
13591
|
serverPubKey: this.offchainTapscript.options.serverPubKey,
|
|
13485
13592
|
deprecatedSignerPubKeys: [...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h)),
|
|
13486
13593
|
csvTimelocks: this.walletContractTimelocks,
|
|
13487
|
-
delegatePubKey: this.offchainTapscript instanceof
|
|
13594
|
+
delegatePubKey: this.offchainTapscript instanceof chunkOL7V43WS_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
|
|
13488
13595
|
};
|
|
13489
13596
|
}
|
|
13490
13597
|
_signerRouter;
|
|
@@ -13578,24 +13685,24 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13578
13685
|
const manager = await this.getContractManager();
|
|
13579
13686
|
const descriptor = await manager.getNextSigningDescriptor();
|
|
13580
13687
|
if (!descriptor) return this.getBoardingAddress();
|
|
13581
|
-
const pubKey =
|
|
13582
|
-
const newBoarding = new
|
|
13688
|
+
const pubKey = chunkOL7V43WS_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
13689
|
+
const newBoarding = new chunkOL7V43WS_cjs.DefaultVtxo.Script({
|
|
13583
13690
|
...this._boardingTapscript.options,
|
|
13584
13691
|
pubKey
|
|
13585
13692
|
});
|
|
13586
|
-
const csvTimelock = newBoarding.options.csvTimelock ??
|
|
13693
|
+
const csvTimelock = newBoarding.options.csvTimelock ?? chunkOL7V43WS_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
13587
13694
|
await manager.createContract({
|
|
13588
13695
|
type: "boarding",
|
|
13589
13696
|
params: {
|
|
13590
13697
|
pubKey: base.hex.encode(pubKey),
|
|
13591
13698
|
serverPubKey: base.hex.encode(newBoarding.options.serverPubKey),
|
|
13592
|
-
csvTimelock:
|
|
13699
|
+
csvTimelock: chunkAB67CMHS_cjs.timelockToSequence(csvTimelock).toString()
|
|
13593
13700
|
},
|
|
13594
13701
|
script: base.hex.encode(newBoarding.pkScript),
|
|
13595
13702
|
address: newBoarding.address(this.network.hrp, this.arkServerPublicKey).encode(),
|
|
13596
13703
|
state: "active",
|
|
13597
13704
|
metadata: {
|
|
13598
|
-
source:
|
|
13705
|
+
source: chunkOL7V43WS_cjs.WALLET_RECEIVE_SOURCE,
|
|
13599
13706
|
signingDescriptor: descriptor
|
|
13600
13707
|
}
|
|
13601
13708
|
});
|
|
@@ -13630,7 +13737,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13630
13737
|
if (this._descriptorProvider instanceof HDDescriptorProvider) {
|
|
13631
13738
|
return (await this.getContractManager()).getNextSigningDescriptor();
|
|
13632
13739
|
}
|
|
13633
|
-
return
|
|
13740
|
+
return chunkOL7V43WS_cjs.identityDescriptor(this.identity);
|
|
13634
13741
|
}
|
|
13635
13742
|
/**
|
|
13636
13743
|
* @see HDAllocationCapable.advanceSigningDescriptorWatermark
|
|
@@ -13755,21 +13862,21 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13755
13862
|
const [currentBoardingRow] = await manager.getContracts({
|
|
13756
13863
|
script: currentBoardingScript
|
|
13757
13864
|
});
|
|
13758
|
-
const newOffchain = this.offchainTapscript instanceof
|
|
13865
|
+
const newOffchain = this.offchainTapscript instanceof chunkOL7V43WS_cjs.DelegateVtxo.Script ? new chunkOL7V43WS_cjs.DelegateVtxo.Script({
|
|
13759
13866
|
...this.offchainTapscript.options,
|
|
13760
13867
|
serverPubKey: xonly
|
|
13761
|
-
}) : new
|
|
13868
|
+
}) : new chunkOL7V43WS_cjs.DefaultVtxo.Script({
|
|
13762
13869
|
...this.offchainTapscript.options,
|
|
13763
13870
|
serverPubKey: xonly
|
|
13764
13871
|
});
|
|
13765
|
-
const newBoarding = new
|
|
13872
|
+
const newBoarding = new chunkOL7V43WS_cjs.DefaultVtxo.Script({
|
|
13766
13873
|
...this._boardingTapscript.options,
|
|
13767
13874
|
serverPubKey: xonly
|
|
13768
13875
|
});
|
|
13769
|
-
const offchainCsv =
|
|
13876
|
+
const offchainCsv = chunkAB67CMHS_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
|
|
13770
13877
|
const newOffchainScript = base.hex.encode(newOffchain.pkScript);
|
|
13771
13878
|
const newOffchainAddress = newOffchain.address(this.network.hrp, xonly).encode();
|
|
13772
|
-
if (newOffchain instanceof
|
|
13879
|
+
if (newOffchain instanceof chunkOL7V43WS_cjs.DelegateVtxo.Script) {
|
|
13773
13880
|
await manager.createContract({
|
|
13774
13881
|
type: "delegate",
|
|
13775
13882
|
params: {
|
|
@@ -13797,13 +13904,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13797
13904
|
metadata: currentOffchainRow?.metadata
|
|
13798
13905
|
});
|
|
13799
13906
|
}
|
|
13800
|
-
const boardingCsv = newBoarding.options.csvTimelock ??
|
|
13907
|
+
const boardingCsv = newBoarding.options.csvTimelock ?? chunkOL7V43WS_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
13801
13908
|
await manager.createContract({
|
|
13802
13909
|
type: "boarding",
|
|
13803
13910
|
params: {
|
|
13804
13911
|
pubKey: base.hex.encode(newBoarding.options.pubKey),
|
|
13805
13912
|
serverPubKey: base.hex.encode(xonly),
|
|
13806
|
-
csvTimelock:
|
|
13913
|
+
csvTimelock: chunkAB67CMHS_cjs.timelockToSequence(boardingCsv).toString()
|
|
13807
13914
|
},
|
|
13808
13915
|
script: base.hex.encode(newBoarding.pkScript),
|
|
13809
13916
|
address: newBoarding.address(this.network.hrp, xonly).encode(),
|
|
@@ -13836,14 +13943,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13836
13943
|
_restoreInFlight;
|
|
13837
13944
|
_addPendingSpends(inputs) {
|
|
13838
13945
|
for (const input of inputs) {
|
|
13839
|
-
if (
|
|
13946
|
+
if (chunkAB67CMHS_cjs.isVirtualCoin(input)) {
|
|
13840
13947
|
this._pendingSpendOutpoints.add(`${input.txid}:${input.vout}`);
|
|
13841
13948
|
}
|
|
13842
13949
|
}
|
|
13843
13950
|
}
|
|
13844
13951
|
_removePendingSpends(inputs) {
|
|
13845
13952
|
for (const input of inputs) {
|
|
13846
|
-
if (
|
|
13953
|
+
if (chunkAB67CMHS_cjs.isVirtualCoin(input)) {
|
|
13847
13954
|
this._pendingSpendOutpoints.delete(`${input.txid}:${input.vout}`);
|
|
13848
13955
|
}
|
|
13849
13956
|
}
|
|
@@ -13901,9 +14008,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13901
14008
|
const manager = await this.getContractManager();
|
|
13902
14009
|
const provider = this._descriptorProvider;
|
|
13903
14010
|
const hd = provider instanceof HDDescriptorProvider;
|
|
13904
|
-
const staticDescriptor = hd ? void 0 : await
|
|
14011
|
+
const staticDescriptor = hd ? void 0 : await chunkOL7V43WS_cjs.identityDescriptor(this.identity);
|
|
13905
14012
|
const materialize = (index) => hd ? provider.materializeDescriptorAt(index) : staticDescriptor;
|
|
13906
|
-
const delegatePubKey = this.offchainTapscript instanceof
|
|
14013
|
+
const delegatePubKey = this.offchainTapscript instanceof chunkOL7V43WS_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
|
|
13907
14014
|
const arkInfo = await this.arkProvider.getInfo();
|
|
13908
14015
|
const currentSignerPubKey = toXOnlyPubKey(base.hex.decode(arkInfo.signerPubkey));
|
|
13909
14016
|
const deprecatedSignerPubKeys = arkInfo.deprecatedSigners.map(
|
|
@@ -13922,7 +14029,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13922
14029
|
csvTimelocks: this.walletContractTimelocks,
|
|
13923
14030
|
// Boarding-exit CSV so the boarding handler can build its
|
|
13924
14031
|
// candidate script (distinct from the unilateral-exit matrix).
|
|
13925
|
-
boardingTimelock: this.boardingTapscript.options.csvTimelock ??
|
|
14032
|
+
boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunkOL7V43WS_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
|
|
13926
14033
|
delegatePubKey
|
|
13927
14034
|
};
|
|
13928
14035
|
const result = await manager.scanContracts({
|
|
@@ -14185,7 +14292,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14185
14292
|
inputs: params.selectedVtxos,
|
|
14186
14293
|
changeAmount: BigInt(changeAmount)
|
|
14187
14294
|
};
|
|
14188
|
-
const outputAddress =
|
|
14295
|
+
const outputAddress = chunkAB67CMHS_cjs.ArkAddress.decode(params.address);
|
|
14189
14296
|
assertRecipientArkAddress(
|
|
14190
14297
|
params.address,
|
|
14191
14298
|
outputAddress,
|
|
@@ -14251,13 +14358,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14251
14358
|
void this.logUngatedInputs("settle({ inputs })", params.inputs);
|
|
14252
14359
|
}
|
|
14253
14360
|
const offchainAddress = await this.getAddress();
|
|
14254
|
-
const offchainPkScript =
|
|
14361
|
+
const offchainPkScript = chunkAB67CMHS_cjs.ArkAddress.decode(offchainAddress).pkScript;
|
|
14255
14362
|
const offchainOutputScript = base.hex.encode(offchainPkScript);
|
|
14256
14363
|
if (!params) {
|
|
14257
14364
|
const { fees, vtxoMaxAmount } = await this.arkProvider.getInfo();
|
|
14258
14365
|
const estimator = new Estimator(fees.intentFee);
|
|
14259
14366
|
let amount = 0;
|
|
14260
|
-
const exitScript =
|
|
14367
|
+
const exitScript = chunkAB67CMHS_cjs.CSVMultisigTapscript.decode(
|
|
14261
14368
|
base.hex.decode(this.boardingTapscript.exitScript)
|
|
14262
14369
|
);
|
|
14263
14370
|
const boardingTimelock = exitScript.params.timelock;
|
|
@@ -14286,7 +14393,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14286
14393
|
if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
|
|
14287
14394
|
break;
|
|
14288
14395
|
}
|
|
14289
|
-
const inputFee = estimator.evalOffchainInput(
|
|
14396
|
+
const inputFee = estimator.evalOffchainInput(chunkAB67CMHS_cjs.toOffchainInputFeeParams(vtxo));
|
|
14290
14397
|
if (inputFee.satoshis >= vtxo.value) {
|
|
14291
14398
|
continue;
|
|
14292
14399
|
}
|
|
@@ -14333,7 +14440,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14333
14440
|
let script;
|
|
14334
14441
|
let arkAddress;
|
|
14335
14442
|
try {
|
|
14336
|
-
arkAddress =
|
|
14443
|
+
arkAddress = chunkAB67CMHS_cjs.ArkAddress.decode(output.address);
|
|
14337
14444
|
} catch {
|
|
14338
14445
|
arkAddress = void 0;
|
|
14339
14446
|
}
|
|
@@ -14423,7 +14530,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14423
14530
|
const abortController = new AbortController();
|
|
14424
14531
|
let stream;
|
|
14425
14532
|
let committedTxid;
|
|
14426
|
-
const settleInputVtxos = params.inputs.filter(
|
|
14533
|
+
const settleInputVtxos = params.inputs.filter(chunkAB67CMHS_cjs.isVirtualCoin);
|
|
14427
14534
|
const contractManager = await this.getContractManager();
|
|
14428
14535
|
await contractManager.assertAnnotatable(settleInputVtxos);
|
|
14429
14536
|
await contractManager.assertSpendableNow?.(
|
|
@@ -14532,7 +14639,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14532
14639
|
async maybeRotateBoardingAfterBoard(inputs) {
|
|
14533
14640
|
if (!this._descriptorProvider) return;
|
|
14534
14641
|
const consumedBoarding = inputs.some(
|
|
14535
|
-
(input) => typeof input !== "string" && !
|
|
14642
|
+
(input) => typeof input !== "string" && !chunkAB67CMHS_cjs.isVirtualCoin(input)
|
|
14536
14643
|
);
|
|
14537
14644
|
if (!consumedBoarding) return;
|
|
14538
14645
|
try {
|
|
@@ -14556,7 +14663,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14556
14663
|
let connectorIndex = 0;
|
|
14557
14664
|
const connectorsLeaves = connectorsGraph?.leaves() || [];
|
|
14558
14665
|
for (const input of inputs) {
|
|
14559
|
-
if (!
|
|
14666
|
+
if (!chunkAB67CMHS_cjs.isVirtualCoin(input)) {
|
|
14560
14667
|
for (let i = 0; i < settlementPsbt.inputsLength; i++) {
|
|
14561
14668
|
const settlementInput = settlementPsbt.getInput(i);
|
|
14562
14669
|
if (!settlementInput.txid || settlementInput.index === void 0) {
|
|
@@ -14587,7 +14694,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14587
14694
|
}
|
|
14588
14695
|
continue;
|
|
14589
14696
|
}
|
|
14590
|
-
if (
|
|
14697
|
+
if (chunkAB67CMHS_cjs.canRecoverOnchain(input, { timestamp: /* @__PURE__ */ new Date() }) || isSubdust({ value: input.value }, this.dustAmount)) {
|
|
14591
14698
|
continue;
|
|
14592
14699
|
}
|
|
14593
14700
|
if (connectorsLeaves.length === 0) {
|
|
@@ -14615,7 +14722,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14615
14722
|
index: input.vout,
|
|
14616
14723
|
witnessUtxo: {
|
|
14617
14724
|
amount: BigInt(input.value),
|
|
14618
|
-
script:
|
|
14725
|
+
script: chunkAB67CMHS_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
14619
14726
|
},
|
|
14620
14727
|
sighashType: btcSigner.SigHash.DEFAULT,
|
|
14621
14728
|
tapLeafScript: [input.forfeitTapLeafScript]
|
|
@@ -14634,7 +14741,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14634
14741
|
forfeitTx = await this._signerRouter.sign(forfeitTx, [
|
|
14635
14742
|
{
|
|
14636
14743
|
index: 0,
|
|
14637
|
-
lookupScript:
|
|
14744
|
+
lookupScript: chunkAB67CMHS_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
14638
14745
|
}
|
|
14639
14746
|
]);
|
|
14640
14747
|
signedForfeits.push(base.base64.encode(forfeitTx.toPSBT()));
|
|
@@ -14692,7 +14799,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14692
14799
|
resolveBatchExpiryPolicy(this.network, this.batchExpiryPolicy)
|
|
14693
14800
|
);
|
|
14694
14801
|
await this.arkProvider.confirmRegistration(intentId);
|
|
14695
|
-
const sweepTapscript =
|
|
14802
|
+
const sweepTapscript = chunkAB67CMHS_cjs.CSVMultisigTapscript.encode({
|
|
14696
14803
|
timelock,
|
|
14697
14804
|
pubkeys: [this.forfeitPubkey]
|
|
14698
14805
|
}).script;
|
|
@@ -14798,9 +14905,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14798
14905
|
...existing ?? {},
|
|
14799
14906
|
intentTxId,
|
|
14800
14907
|
registerProof: intent.proof,
|
|
14801
|
-
registerProofMessage:
|
|
14908
|
+
registerProofMessage: chunkAB67CMHS_cjs.Intent.encodeMessage(intent.message),
|
|
14802
14909
|
deleteProof: deleteIntent.proof,
|
|
14803
|
-
deleteProofMessage:
|
|
14910
|
+
deleteProofMessage: chunkAB67CMHS_cjs.Intent.encodeMessage(deleteIntent.message),
|
|
14804
14911
|
intentVtxos: inputs.map((i) => ({
|
|
14805
14912
|
txid: i.txid,
|
|
14806
14913
|
vout: i.vout
|
|
@@ -14832,7 +14939,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14832
14939
|
try {
|
|
14833
14940
|
return await this.arkProvider.registerIntent(intent);
|
|
14834
14941
|
} catch (error) {
|
|
14835
|
-
if (error instanceof
|
|
14942
|
+
if (error instanceof chunkAB67CMHS_cjs.ArkError && error.code === 0 && error.message.includes("duplicated input")) {
|
|
14836
14943
|
const deleteIntent = await this.makeDeleteIntentSignature(inputs);
|
|
14837
14944
|
await this.arkProvider.deleteIntent(deleteIntent);
|
|
14838
14945
|
return this.arkProvider.registerIntent(intent);
|
|
@@ -14848,7 +14955,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14848
14955
|
expire_at: 0,
|
|
14849
14956
|
cosigners_public_keys: cosignerPubKeys
|
|
14850
14957
|
};
|
|
14851
|
-
const proof =
|
|
14958
|
+
const proof = chunkAB67CMHS_cjs.Intent.create(message, coins, outputs);
|
|
14852
14959
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
14853
14960
|
return {
|
|
14854
14961
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -14860,7 +14967,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14860
14967
|
type: "delete",
|
|
14861
14968
|
expire_at: 0
|
|
14862
14969
|
};
|
|
14863
|
-
const proof =
|
|
14970
|
+
const proof = chunkAB67CMHS_cjs.Intent.create(message, coins, []);
|
|
14864
14971
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
14865
14972
|
return {
|
|
14866
14973
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -14872,7 +14979,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14872
14979
|
type: "get-pending-tx",
|
|
14873
14980
|
expire_at: 0
|
|
14874
14981
|
};
|
|
14875
|
-
const proof =
|
|
14982
|
+
const proof = chunkAB67CMHS_cjs.Intent.create(message, coins, []);
|
|
14876
14983
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
14877
14984
|
return {
|
|
14878
14985
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -14893,7 +15000,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14893
15000
|
if (!vtxos || vtxos.length === 0) {
|
|
14894
15001
|
const scriptMap = await this.getScriptMap();
|
|
14895
15002
|
const allExtended = [];
|
|
14896
|
-
const fetchedVtxos = await
|
|
15003
|
+
const fetchedVtxos = await chunkAB67CMHS_cjs.getAllNormalizedVtxos(this.indexerProvider, [
|
|
14897
15004
|
...scriptMap.keys()
|
|
14898
15005
|
]);
|
|
14899
15006
|
for (const vtxo of fetchedVtxos) {
|
|
@@ -15007,11 +15114,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15007
15114
|
* against the current key alone would leave it pending forever.
|
|
15008
15115
|
*/
|
|
15009
15116
|
checkpointUnrollCandidates(info) {
|
|
15010
|
-
const current =
|
|
15117
|
+
const current = chunkAB67CMHS_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
|
|
15011
15118
|
const candidates = [this._serverUnrollScript, current];
|
|
15012
15119
|
for (const deprecated of signerSetFromInfo(info).deprecated.keys()) {
|
|
15013
15120
|
candidates.push(
|
|
15014
|
-
|
|
15121
|
+
chunkAB67CMHS_cjs.CSVMultisigTapscript.encode({
|
|
15015
15122
|
...current.params,
|
|
15016
15123
|
pubkeys: [base.hex.decode(deprecated)]
|
|
15017
15124
|
})
|
|
@@ -15102,7 +15209,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15102
15209
|
if (vtxos.length === 0) {
|
|
15103
15210
|
throw new Error("No VTXOs found for this arkadeCash");
|
|
15104
15211
|
}
|
|
15105
|
-
const myPkScript =
|
|
15212
|
+
const myPkScript = chunkAB67CMHS_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
|
|
15106
15213
|
let { spendable, unclaimed } = this.classifyCashVtxos(vtxos);
|
|
15107
15214
|
let swept = 0;
|
|
15108
15215
|
const drainable = vtxos.filter((vtxo) => !isSubdust(vtxo, this.dustAmount));
|
|
@@ -15176,7 +15283,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15176
15283
|
const spendable = [];
|
|
15177
15284
|
const unclaimed = [];
|
|
15178
15285
|
for (const vtxo of vtxos) {
|
|
15179
|
-
if (
|
|
15286
|
+
if (chunkAB67CMHS_cjs.hasTerminalSpend(vtxo)) {
|
|
15180
15287
|
unclaimed.push(cashReport(vtxo, "already-spent"));
|
|
15181
15288
|
} else if (isSubdust(vtxo, this.dustAmount)) {
|
|
15182
15289
|
unclaimed.push(cashReport(vtxo, "subdust"));
|
|
@@ -15196,7 +15303,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15196
15303
|
const all = [];
|
|
15197
15304
|
const seen = /* @__PURE__ */ new Set();
|
|
15198
15305
|
for (let pageIndex = 0; ; pageIndex++) {
|
|
15199
|
-
const { vtxos, page } = await
|
|
15306
|
+
const { vtxos, page } = await chunkAB67CMHS_cjs.getNormalizedVtxos(this.indexerProvider, {
|
|
15200
15307
|
scripts,
|
|
15201
15308
|
pageIndex,
|
|
15202
15309
|
pageSize
|
|
@@ -15243,7 +15350,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15243
15350
|
for (let i = 0; i < inputs.length; i += MAX_INPUTS_PER_INTENT) {
|
|
15244
15351
|
const batch = inputs.slice(i, i + MAX_INPUTS_PER_INTENT);
|
|
15245
15352
|
const message = { type: "get-pending-tx", expire_at: 0 };
|
|
15246
|
-
const proof =
|
|
15353
|
+
const proof = chunkAB67CMHS_cjs.Intent.create(message, batch, []);
|
|
15247
15354
|
const signedProof = await identity.sign(
|
|
15248
15355
|
proof,
|
|
15249
15356
|
Array.from({ length: batch.length + 1 }, (_, j) => j)
|
|
@@ -15313,10 +15420,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15313
15420
|
return total;
|
|
15314
15421
|
}
|
|
15315
15422
|
/**
|
|
15316
|
-
* Send BTC and/or assets to one or more recipients
|
|
15423
|
+
* Send BTC and/or assets to one or more recipients, passed either as
|
|
15424
|
+
* variadic `Recipient`s or as a single `SendParams` object — the latter
|
|
15425
|
+
* also carries the virtual outputs to spend.
|
|
15317
15426
|
*
|
|
15318
|
-
* @param args - Recipients
|
|
15427
|
+
* @param args - Recipients, or a `SendParams` object
|
|
15319
15428
|
* @returns Promise resolving to the Arkade transaction ID
|
|
15429
|
+
* @see SendParams
|
|
15320
15430
|
*
|
|
15321
15431
|
* @example
|
|
15322
15432
|
* ```typescript
|
|
@@ -15325,15 +15435,28 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15325
15435
|
* amount: 1000, // (optional, default to dust) btc amount to send to the output
|
|
15326
15436
|
* assets: [{ assetId: 'abc123...', amount: 50n }] // (optional) list of assets to send
|
|
15327
15437
|
* });
|
|
15438
|
+
*
|
|
15439
|
+
* // choosing the inputs as well as the outputs
|
|
15440
|
+
* const txid = await wallet.send({
|
|
15441
|
+
* recipients: [{ address: 'ark1q...', amount: 1000 }],
|
|
15442
|
+
* selectedVtxos: mine, // spent as given, nothing added
|
|
15443
|
+
* });
|
|
15328
15444
|
* ```
|
|
15329
15445
|
*/
|
|
15330
15446
|
async send(...args) {
|
|
15331
|
-
|
|
15447
|
+
const params = asSendParams(args);
|
|
15448
|
+
return this._withTxLock(() => this._sendImpl(params));
|
|
15332
15449
|
}
|
|
15333
|
-
async _sendImpl(
|
|
15450
|
+
async _sendImpl({ recipients: args, selectedVtxos }) {
|
|
15334
15451
|
if (args.length === 0) {
|
|
15335
15452
|
throw new Error("At least one receiver is required");
|
|
15336
15453
|
}
|
|
15454
|
+
if (selectedVtxos && selectedVtxos.length === 0) {
|
|
15455
|
+
throw new Error("send({ selectedVtxos }): no inputs");
|
|
15456
|
+
}
|
|
15457
|
+
if (selectedVtxos) {
|
|
15458
|
+
void this.logUngatedInputs("send({ selectedVtxos })", selectedVtxos);
|
|
15459
|
+
}
|
|
15337
15460
|
const offchainTapscript = this.offchainTapscript;
|
|
15338
15461
|
const serverPubKey = this.arkServerPublicKey;
|
|
15339
15462
|
const serverUnrollScript = this.serverUnrollScript;
|
|
@@ -15344,84 +15467,123 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15344
15467
|
Number(this.dustAmount),
|
|
15345
15468
|
this.recipientAddressContext(serverPubKey)
|
|
15346
15469
|
);
|
|
15347
|
-
|
|
15348
|
-
|
|
15349
|
-
|
|
15470
|
+
let virtualCoins = [];
|
|
15471
|
+
if (!selectedVtxos) {
|
|
15472
|
+
virtualCoins = await this.getSpendableVtxos({
|
|
15473
|
+
withRecoverable: false
|
|
15474
|
+
});
|
|
15475
|
+
}
|
|
15350
15476
|
const assetChanges = /* @__PURE__ */ new Map();
|
|
15351
|
-
let selectedCoins = [];
|
|
15477
|
+
let selectedCoins = selectedVtxos ? [...selectedVtxos] : [];
|
|
15352
15478
|
let btcAmountToSelect = 0;
|
|
15353
15479
|
for (const recipient of recipients) {
|
|
15354
15480
|
btcAmountToSelect += Math.max(recipient.amount, Number(this.dustAmount));
|
|
15355
15481
|
}
|
|
15356
|
-
|
|
15357
|
-
|
|
15358
|
-
|
|
15482
|
+
if (selectedVtxos) {
|
|
15483
|
+
for (const coin of selectedCoins) {
|
|
15484
|
+
for (const asset of coin.assets ?? []) {
|
|
15485
|
+
const existing = assetChanges.get(asset.assetId) ?? 0n;
|
|
15486
|
+
assetChanges.set(asset.assetId, existing + asset.amount);
|
|
15487
|
+
}
|
|
15359
15488
|
}
|
|
15360
|
-
for (const
|
|
15361
|
-
|
|
15362
|
-
|
|
15363
|
-
|
|
15364
|
-
|
|
15365
|
-
|
|
15366
|
-
|
|
15489
|
+
for (const recipient of recipients) {
|
|
15490
|
+
for (const asset of recipient.assets) {
|
|
15491
|
+
const remaining = (assetChanges.get(asset.assetId) ?? 0n) - asset.amount;
|
|
15492
|
+
if (remaining < 0n) {
|
|
15493
|
+
throw new Error(
|
|
15494
|
+
`send({ selectedVtxos }): inputs are short ${-remaining} of asset ${asset.assetId}`
|
|
15495
|
+
);
|
|
15496
|
+
}
|
|
15497
|
+
if (remaining === 0n) {
|
|
15498
|
+
assetChanges.delete(asset.assetId);
|
|
15499
|
+
} else {
|
|
15500
|
+
assetChanges.set(asset.assetId, remaining);
|
|
15367
15501
|
}
|
|
15502
|
+
}
|
|
15503
|
+
}
|
|
15504
|
+
} else {
|
|
15505
|
+
for (const recipient of recipients) {
|
|
15506
|
+
if (!recipient.assets) {
|
|
15368
15507
|
continue;
|
|
15369
15508
|
}
|
|
15370
|
-
|
|
15371
|
-
amountToSelect
|
|
15372
|
-
assetChanges.
|
|
15509
|
+
for (const receiverAsset of recipient.assets) {
|
|
15510
|
+
let amountToSelect = receiverAsset.amount;
|
|
15511
|
+
const existingChange = assetChanges.get(receiverAsset.assetId) ?? 0n;
|
|
15512
|
+
if (existingChange >= amountToSelect) {
|
|
15513
|
+
assetChanges.set(receiverAsset.assetId, existingChange - amountToSelect);
|
|
15514
|
+
if (assetChanges.get(receiverAsset.assetId) === 0n) {
|
|
15515
|
+
assetChanges.delete(receiverAsset.assetId);
|
|
15516
|
+
}
|
|
15517
|
+
continue;
|
|
15518
|
+
}
|
|
15519
|
+
if (existingChange > 0n) {
|
|
15520
|
+
amountToSelect -= existingChange;
|
|
15521
|
+
assetChanges.delete(receiverAsset.assetId);
|
|
15522
|
+
}
|
|
15523
|
+
const availableCoins = virtualCoins.filter(
|
|
15524
|
+
(c) => !selectedCoins.find((sc) => sc.txid === c.txid && sc.vout === c.vout)
|
|
15525
|
+
);
|
|
15526
|
+
const { selected, totalAssetAmount } = selectCoinsWithAsset(
|
|
15527
|
+
availableCoins,
|
|
15528
|
+
receiverAsset.assetId,
|
|
15529
|
+
amountToSelect
|
|
15530
|
+
);
|
|
15531
|
+
for (const coin of selected) {
|
|
15532
|
+
selectedCoins.push(coin);
|
|
15533
|
+
btcAmountToSelect -= coin.value;
|
|
15534
|
+
if (coin.assets) {
|
|
15535
|
+
for (const a of coin.assets) {
|
|
15536
|
+
if (a.assetId === receiverAsset.assetId) {
|
|
15537
|
+
continue;
|
|
15538
|
+
}
|
|
15539
|
+
const existing = assetChanges.get(a.assetId) ?? 0n;
|
|
15540
|
+
assetChanges.set(a.assetId, existing + a.amount);
|
|
15541
|
+
}
|
|
15542
|
+
}
|
|
15543
|
+
}
|
|
15544
|
+
const assetChangeAmount = totalAssetAmount - amountToSelect;
|
|
15545
|
+
if (assetChangeAmount > 0n) {
|
|
15546
|
+
const existing = assetChanges.get(receiverAsset.assetId) ?? 0n;
|
|
15547
|
+
assetChanges.set(receiverAsset.assetId, existing + assetChangeAmount);
|
|
15548
|
+
}
|
|
15373
15549
|
}
|
|
15550
|
+
}
|
|
15551
|
+
if (btcAmountToSelect > 0) {
|
|
15374
15552
|
const availableCoins = virtualCoins.filter(
|
|
15375
15553
|
(c) => !selectedCoins.find((sc) => sc.txid === c.txid && sc.vout === c.vout)
|
|
15376
15554
|
);
|
|
15377
|
-
const {
|
|
15378
|
-
|
|
15379
|
-
receiverAsset.assetId,
|
|
15380
|
-
amountToSelect
|
|
15381
|
-
);
|
|
15382
|
-
for (const coin of selected) {
|
|
15383
|
-
selectedCoins.push(coin);
|
|
15384
|
-
btcAmountToSelect -= coin.value;
|
|
15555
|
+
const { inputs: btcCoins } = selectVirtualCoins(availableCoins, btcAmountToSelect);
|
|
15556
|
+
for (const coin of btcCoins) {
|
|
15385
15557
|
if (coin.assets) {
|
|
15386
|
-
for (const
|
|
15387
|
-
|
|
15388
|
-
|
|
15389
|
-
}
|
|
15390
|
-
const existing = assetChanges.get(a.assetId) ?? 0n;
|
|
15391
|
-
assetChanges.set(a.assetId, existing + a.amount);
|
|
15558
|
+
for (const asset of coin.assets) {
|
|
15559
|
+
const existing = assetChanges.get(asset.assetId) ?? 0n;
|
|
15560
|
+
assetChanges.set(asset.assetId, existing + asset.amount);
|
|
15392
15561
|
}
|
|
15393
15562
|
}
|
|
15394
15563
|
}
|
|
15395
|
-
|
|
15396
|
-
if (assetChangeAmount > 0n) {
|
|
15397
|
-
const existing = assetChanges.get(receiverAsset.assetId) ?? 0n;
|
|
15398
|
-
assetChanges.set(receiverAsset.assetId, existing + assetChangeAmount);
|
|
15399
|
-
}
|
|
15564
|
+
selectedCoins = [...selectedCoins, ...btcCoins];
|
|
15400
15565
|
}
|
|
15401
15566
|
}
|
|
15402
|
-
if (btcAmountToSelect > 0) {
|
|
15403
|
-
const availableCoins = virtualCoins.filter(
|
|
15404
|
-
(c) => !selectedCoins.find((sc) => sc.txid === c.txid && sc.vout === c.vout)
|
|
15405
|
-
);
|
|
15406
|
-
const { inputs: btcCoins } = selectVirtualCoins(availableCoins, btcAmountToSelect);
|
|
15407
|
-
for (const coin of btcCoins) {
|
|
15408
|
-
if (coin.assets) {
|
|
15409
|
-
for (const asset of coin.assets) {
|
|
15410
|
-
const existing = assetChanges.get(asset.assetId) ?? 0n;
|
|
15411
|
-
assetChanges.set(asset.assetId, existing + asset.amount);
|
|
15412
|
-
}
|
|
15413
|
-
}
|
|
15414
|
-
}
|
|
15415
|
-
selectedCoins = [...selectedCoins, ...btcCoins];
|
|
15416
|
-
}
|
|
15417
15567
|
let totalBtcSelected = selectedCoins.reduce((sum, c) => sum + c.value, 0);
|
|
15418
15568
|
const outputs = recipients.map((recipient) => ({
|
|
15419
15569
|
script: recipient.script,
|
|
15420
|
-
amount: BigInt(recipient.amount)
|
|
15570
|
+
amount: BigInt(recipient.amount),
|
|
15571
|
+
// Already checked against the recipient address in `validateRecipients`.
|
|
15572
|
+
...recipient.tapTree ? { tapTree: chunkAB67CMHS_cjs.TapTreeCoder.decode(recipient.tapTree) } : {}
|
|
15421
15573
|
}));
|
|
15422
15574
|
const totalBtcOutput = outputs.reduce((sum, o) => sum + Number(o.amount), 0);
|
|
15423
15575
|
let changeAmount = totalBtcSelected - totalBtcOutput;
|
|
15576
|
+
if (changeAmount < 0) {
|
|
15577
|
+
throw new Error(
|
|
15578
|
+
`send({ selectedVtxos }): inputs total ${totalBtcSelected} sats, outputs need ${totalBtcOutput}`
|
|
15579
|
+
);
|
|
15580
|
+
}
|
|
15424
15581
|
if (assetChanges.size > 0 && changeAmount < Number(this.dustAmount)) {
|
|
15582
|
+
if (selectedVtxos) {
|
|
15583
|
+
throw new Error(
|
|
15584
|
+
`send({ selectedVtxos }): ${changeAmount} sats of change cannot carry ${assetChanges.size} asset change(s), needs ${this.dustAmount}`
|
|
15585
|
+
);
|
|
15586
|
+
}
|
|
15425
15587
|
const availableCoins = virtualCoins.filter(
|
|
15426
15588
|
(c) => !selectedCoins.find((sc) => sc.txid === c.txid && sc.vout === c.vout)
|
|
15427
15589
|
);
|
|
@@ -15551,10 +15713,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15551
15713
|
const serverPubKey = this.arkServerPublicKey;
|
|
15552
15714
|
const serverUnrollScript = this.serverUnrollScript;
|
|
15553
15715
|
const arkAddress = offchainTapscript.address(this.network.hrp, serverPubKey);
|
|
15554
|
-
const normalizedInputs = inputs.map(
|
|
15555
|
-
const at = now ?? await
|
|
15716
|
+
const normalizedInputs = inputs.map(chunkAB67CMHS_cjs.normalizeVtxo);
|
|
15717
|
+
const at = now ?? await chunkAB67CMHS_cjs.resolveTimeHeight(this.onchainProvider);
|
|
15556
15718
|
for (const input of normalizedInputs) {
|
|
15557
|
-
if (!
|
|
15719
|
+
if (!chunkAB67CMHS_cjs.canSpendOffchain(input, at)) {
|
|
15558
15720
|
throw new Error(
|
|
15559
15721
|
`sendSelectedVtxosToSelf: input ${input.txid}:${input.vout} is not cooperatively spendable`
|
|
15560
15722
|
);
|
|
@@ -15624,7 +15786,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15624
15786
|
);
|
|
15625
15787
|
const arkTxJobs = inputs.map((input, index) => ({
|
|
15626
15788
|
index,
|
|
15627
|
-
lookupScript:
|
|
15789
|
+
lookupScript: chunkAB67CMHS_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
15628
15790
|
}));
|
|
15629
15791
|
const identity = this.identity;
|
|
15630
15792
|
const signer = {
|
|
@@ -15710,14 +15872,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15710
15872
|
const spentBy = checkpointIdByOutpoint.get(`${vtxo.txid}:${vtxo.vout}`);
|
|
15711
15873
|
spentVtxos.push({
|
|
15712
15874
|
...spentFacts,
|
|
15713
|
-
virtualStatus:
|
|
15875
|
+
virtualStatus: chunkAB67CMHS_cjs.toVirtualStatus(spentFacts),
|
|
15714
15876
|
...spentBy ? { spentBy } : {},
|
|
15715
15877
|
arkTxId: arkTxid
|
|
15716
15878
|
});
|
|
15717
15879
|
for (const id of vtxo.commitmentTxIds) {
|
|
15718
15880
|
commitmentTxIds.add(id);
|
|
15719
15881
|
}
|
|
15720
|
-
const vtxoExpiry =
|
|
15882
|
+
const vtxoExpiry = chunkAB67CMHS_cjs.toBatchExpiry(vtxo);
|
|
15721
15883
|
if (vtxoExpiry) {
|
|
15722
15884
|
batchExpiry = Math.min(batchExpiry, vtxoExpiry);
|
|
15723
15885
|
}
|
|
@@ -15730,7 +15892,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15730
15892
|
isSwept: false,
|
|
15731
15893
|
isPreconfirmed: true,
|
|
15732
15894
|
commitmentTxIds: Array.from(commitmentTxIds),
|
|
15733
|
-
...
|
|
15895
|
+
...chunkAB67CMHS_cjs.parseLegacyExpiry(batchExpiry)
|
|
15734
15896
|
};
|
|
15735
15897
|
changeVtxo = {
|
|
15736
15898
|
txid: arkTxid,
|
|
@@ -15742,7 +15904,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15742
15904
|
tapTree: offchainTapscript.encode(),
|
|
15743
15905
|
value: Number(changeAmount),
|
|
15744
15906
|
...changeFacts,
|
|
15745
|
-
virtualStatus:
|
|
15907
|
+
virtualStatus: chunkAB67CMHS_cjs.toVirtualStatus(changeFacts),
|
|
15746
15908
|
spentBy: "",
|
|
15747
15909
|
status: {
|
|
15748
15910
|
confirmed: false
|
|
@@ -15811,12 +15973,12 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15811
15973
|
const spentVtxos = [];
|
|
15812
15974
|
const inputArkTxIds = /* @__PURE__ */ new Set();
|
|
15813
15975
|
const boardingRemovalsByAddress = /* @__PURE__ */ new Map();
|
|
15814
|
-
const vtxoInputs = inputs.filter(
|
|
15976
|
+
const vtxoInputs = inputs.filter(chunkAB67CMHS_cjs.isVirtualCoin);
|
|
15815
15977
|
const cm = await this.getContractManager();
|
|
15816
15978
|
const annotatedVtxos = await cm.annotateVtxos(vtxoInputs);
|
|
15817
15979
|
const annotatedByKey = new Map(annotatedVtxos.map((v) => [`${v.txid}:${v.vout}`, v]));
|
|
15818
15980
|
for (const input of inputs) {
|
|
15819
|
-
if (
|
|
15981
|
+
if (chunkAB67CMHS_cjs.isVirtualCoin(input)) {
|
|
15820
15982
|
const outpoint = `${input.txid}:${input.vout}`;
|
|
15821
15983
|
const vtxo = annotatedByKey.get(outpoint);
|
|
15822
15984
|
if (!vtxo) {
|
|
@@ -15828,13 +15990,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15828
15990
|
const settledFacts = { ...vtxo, isSpent: true };
|
|
15829
15991
|
spentVtxos.push({
|
|
15830
15992
|
...settledFacts,
|
|
15831
|
-
virtualStatus:
|
|
15993
|
+
virtualStatus: chunkAB67CMHS_cjs.toVirtualStatus(settledFacts),
|
|
15832
15994
|
settledBy: commitmentTxid
|
|
15833
15995
|
});
|
|
15834
15996
|
} else {
|
|
15835
15997
|
let sourceAddress;
|
|
15836
15998
|
try {
|
|
15837
|
-
sourceAddress =
|
|
15999
|
+
sourceAddress = chunkAB67CMHS_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
|
|
15838
16000
|
this.network
|
|
15839
16001
|
);
|
|
15840
16002
|
} catch {
|
|
@@ -15892,9 +16054,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15892
16054
|
}
|
|
15893
16055
|
};
|
|
15894
16056
|
function selectVirtualCoins(coins, targetAmount) {
|
|
15895
|
-
const sortedCoins = coins.map(
|
|
15896
|
-
const expiryA =
|
|
15897
|
-
const expiryB =
|
|
16057
|
+
const sortedCoins = coins.map(chunkAB67CMHS_cjs.normalizeVtxo).sort((a, b) => {
|
|
16058
|
+
const expiryA = chunkAB67CMHS_cjs.toBatchExpiry(a) || Number.MAX_SAFE_INTEGER;
|
|
16059
|
+
const expiryB = chunkAB67CMHS_cjs.toBatchExpiry(b) || Number.MAX_SAFE_INTEGER;
|
|
15898
16060
|
if (expiryA !== expiryB) {
|
|
15899
16061
|
return expiryA - expiryB;
|
|
15900
16062
|
}
|
|
@@ -16154,7 +16316,7 @@ var MessageBus = class {
|
|
|
16154
16316
|
this.initialized = true;
|
|
16155
16317
|
}
|
|
16156
16318
|
async buildServices(config) {
|
|
16157
|
-
const arkProvider = new
|
|
16319
|
+
const arkProvider = new chunkAB67CMHS_cjs.RestArkProvider(config.arkServer.url);
|
|
16158
16320
|
const storage = {
|
|
16159
16321
|
walletRepository: this.walletRepository,
|
|
16160
16322
|
contractRepository: this.contractRepository,
|
|
@@ -16496,7 +16658,7 @@ var offboardNetworkNames = [
|
|
|
16496
16658
|
function offboardDestinationScript(destinationAddress) {
|
|
16497
16659
|
for (const networkName of offboardNetworkNames) {
|
|
16498
16660
|
try {
|
|
16499
|
-
const network =
|
|
16661
|
+
const network = chunkAB67CMHS_cjs.networks[networkName];
|
|
16500
16662
|
const addr = btcSigner.Address(network).decode(destinationAddress);
|
|
16501
16663
|
return btcSigner.OutScript.encode(addr);
|
|
16502
16664
|
} catch {
|
|
@@ -16560,7 +16722,7 @@ var Ramps = class {
|
|
|
16560
16722
|
}
|
|
16561
16723
|
amount = amount ?? totalAmount;
|
|
16562
16724
|
const offchainAddress = await this.wallet.getAddress();
|
|
16563
|
-
const offchainAddr =
|
|
16725
|
+
const offchainAddr = chunkAB67CMHS_cjs.ArkAddress.decode(offchainAddress);
|
|
16564
16726
|
const offchainScript = base.hex.encode(offchainAddr.pkScript);
|
|
16565
16727
|
const outputFee = estimator.evalOffchainOutput({
|
|
16566
16728
|
amount,
|
|
@@ -16620,7 +16782,7 @@ var Ramps = class {
|
|
|
16620
16782
|
const filteredVtxos = [];
|
|
16621
16783
|
let totalAmount = 0n;
|
|
16622
16784
|
for (const vtxo of vtxos) {
|
|
16623
|
-
const inputFee = estimator.evalOffchainInput(
|
|
16785
|
+
const inputFee = estimator.evalOffchainInput(chunkAB67CMHS_cjs.toOffchainInputFeeParams(vtxo));
|
|
16624
16786
|
if (inputFee.satoshis >= vtxo.value) {
|
|
16625
16787
|
continue;
|
|
16626
16788
|
}
|
|
@@ -17184,8 +17346,8 @@ var WalletMessageHandler = class {
|
|
|
17184
17346
|
});
|
|
17185
17347
|
}
|
|
17186
17348
|
case "SEND": {
|
|
17187
|
-
const { recipients } = message.payload;
|
|
17188
|
-
const txid = await this.wallet.send(...recipients);
|
|
17349
|
+
const { recipients, selectedVtxos } = message.payload;
|
|
17350
|
+
const txid = await (selectedVtxos ? this.wallet.send({ recipients, selectedVtxos }) : this.wallet.send(...recipients));
|
|
17189
17351
|
return this.tagged({
|
|
17190
17352
|
id,
|
|
17191
17353
|
type: "SEND_SUCCESS",
|
|
@@ -17387,7 +17549,7 @@ var WalletMessageHandler = class {
|
|
|
17387
17549
|
// Wallet methods
|
|
17388
17550
|
async handleInitWallet({ payload }) {
|
|
17389
17551
|
const { arkServerUrl } = payload;
|
|
17390
|
-
this.indexerProvider = new
|
|
17552
|
+
this.indexerProvider = new chunkLG5GY73A_cjs.RestIndexerProvider(arkServerUrl);
|
|
17391
17553
|
await this.onWalletInitialized();
|
|
17392
17554
|
}
|
|
17393
17555
|
/**
|
|
@@ -17433,6 +17595,8 @@ var WalletMessageHandler = class {
|
|
|
17433
17595
|
settled: offchain.settled,
|
|
17434
17596
|
preconfirmed: offchain.preconfirmed,
|
|
17435
17597
|
available: offchain.available,
|
|
17598
|
+
gated: offchain.gated,
|
|
17599
|
+
intentLocked: offchain.intentLocked,
|
|
17436
17600
|
recoverable: offchain.recoverable,
|
|
17437
17601
|
pendingRecovery: offchain.pendingRecovery,
|
|
17438
17602
|
total: totalBoarding + offchain.total,
|
|
@@ -17652,17 +17816,17 @@ var WalletMessageHandler = class {
|
|
|
17652
17816
|
throw new WalletNotInitializedError();
|
|
17653
17817
|
}
|
|
17654
17818
|
const allVtxos = await this.getVtxosFromRepo();
|
|
17655
|
-
const vtxos = allVtxos.filter((v) => !
|
|
17819
|
+
const vtxos = allVtxos.filter((v) => !chunkAB67CMHS_cjs.hasTerminalSpend(v));
|
|
17656
17820
|
const dustAmount = this.readonlyWallet.dustAmount;
|
|
17657
17821
|
const includeRecoverable = message.payload.filter?.withRecoverable ?? false;
|
|
17658
17822
|
const filteredVtxos = includeRecoverable ? vtxos : vtxos.filter((v) => {
|
|
17659
17823
|
if (dustAmount != null && isSubdust(v, dustAmount)) {
|
|
17660
17824
|
return false;
|
|
17661
17825
|
}
|
|
17662
|
-
if (
|
|
17826
|
+
if (chunkAB67CMHS_cjs.isRecoverable(v)) {
|
|
17663
17827
|
return false;
|
|
17664
17828
|
}
|
|
17665
|
-
if (
|
|
17829
|
+
if (chunkAB67CMHS_cjs.isExpired(v)) {
|
|
17666
17830
|
return false;
|
|
17667
17831
|
}
|
|
17668
17832
|
return true;
|
|
@@ -17670,7 +17834,7 @@ var WalletMessageHandler = class {
|
|
|
17670
17834
|
if (!message.payload.filter?.withUnrolled) {
|
|
17671
17835
|
return filteredVtxos;
|
|
17672
17836
|
}
|
|
17673
|
-
return filteredVtxos.concat(allVtxos.filter((v) =>
|
|
17837
|
+
return filteredVtxos.concat(allVtxos.filter((v) => chunkAB67CMHS_cjs.hasTerminalSpend(v) && v.isUnrolled));
|
|
17674
17838
|
}
|
|
17675
17839
|
/** Tear down handler subscriptions, then delegate the full wipe to the wallet. */
|
|
17676
17840
|
async clear() {
|
|
@@ -17760,7 +17924,7 @@ var WalletMessageHandler = class {
|
|
|
17760
17924
|
if (!this.readonlyWallet) return null;
|
|
17761
17925
|
const { boardingTxs, commitmentsToIgnore } = await this.readonlyWallet.getBoardingTxs();
|
|
17762
17926
|
const indexerProvider = this.indexerProvider;
|
|
17763
|
-
const resolveTxCreatedAt = indexerProvider ? (txids) =>
|
|
17927
|
+
const resolveTxCreatedAt = indexerProvider ? (txids) => chunkAB67CMHS_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
|
|
17764
17928
|
return buildTransactionHistory(vtxos, boardingTxs, commitmentsToIgnore, resolveTxCreatedAt);
|
|
17765
17929
|
}
|
|
17766
17930
|
async ensureContractEventBroadcasting() {
|
|
@@ -18449,7 +18613,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
18449
18613
|
};
|
|
18450
18614
|
try {
|
|
18451
18615
|
const response = await this.sendMessage(message);
|
|
18452
|
-
return response.payload.vtxos.map(
|
|
18616
|
+
return response.payload.vtxos.map(chunkAB67CMHS_cjs.normalizeVtxo);
|
|
18453
18617
|
} catch (error) {
|
|
18454
18618
|
throw new Error(`Failed to get vtxos: ${error}`);
|
|
18455
18619
|
}
|
|
@@ -18474,7 +18638,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
18474
18638
|
};
|
|
18475
18639
|
try {
|
|
18476
18640
|
const response = await this.sendMessage(message);
|
|
18477
|
-
return response.payload.vtxos.map(
|
|
18641
|
+
return response.payload.vtxos.map(chunkAB67CMHS_cjs.normalizeVtxo);
|
|
18478
18642
|
} catch (error) {
|
|
18479
18643
|
throw new Error(`Failed to get spendable vtxos: ${error}`);
|
|
18480
18644
|
}
|
|
@@ -18605,7 +18769,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
18605
18769
|
};
|
|
18606
18770
|
try {
|
|
18607
18771
|
const response = await sendContractMessage(message);
|
|
18608
|
-
return response.payload.vtxos.map(
|
|
18772
|
+
return response.payload.vtxos.map(chunkAB67CMHS_cjs.normalizeVtxo);
|
|
18609
18773
|
} catch (e) {
|
|
18610
18774
|
throw new Error("Failed to annotate vtxos");
|
|
18611
18775
|
}
|
|
@@ -19056,12 +19220,16 @@ var ServiceWorkerWallet = class _ServiceWorkerWallet extends ServiceWorkerReadon
|
|
|
19056
19220
|
throw error;
|
|
19057
19221
|
}
|
|
19058
19222
|
}
|
|
19059
|
-
async send(...
|
|
19223
|
+
async send(...args) {
|
|
19224
|
+
const [first] = args;
|
|
19225
|
+
const { recipients, selectedVtxos } = args.length === 1 && first && "recipients" in first ? first : { recipients: args, selectedVtxos: void 0 };
|
|
19060
19226
|
const message = {
|
|
19061
19227
|
tag: this.messageTag,
|
|
19062
19228
|
type: "SEND",
|
|
19063
19229
|
id: getRandomId(),
|
|
19064
|
-
|
|
19230
|
+
// Omitted rather than sent as `undefined`, so an older worker sees
|
|
19231
|
+
// exactly the payload it saw before.
|
|
19232
|
+
payload: selectedVtxos ? { recipients, selectedVtxos } : { recipients }
|
|
19065
19233
|
};
|
|
19066
19234
|
try {
|
|
19067
19235
|
const response = await this.sendMessage(message);
|
|
@@ -19173,7 +19341,7 @@ var ServiceWorkerWallet = class _ServiceWorkerWallet extends ServiceWorkerReadon
|
|
|
19173
19341
|
};
|
|
19174
19342
|
try {
|
|
19175
19343
|
const response = await wallet.sendMessage(message);
|
|
19176
|
-
return response.payload.vtxos.map(
|
|
19344
|
+
return response.payload.vtxos.map(chunkAB67CMHS_cjs.normalizeVtxo);
|
|
19177
19345
|
} catch (e) {
|
|
19178
19346
|
throw new Error(`Failed to get expiring vtxos: ${e}`);
|
|
19179
19347
|
}
|
|
@@ -19285,12 +19453,12 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
19285
19453
|
* @returns Configured onchain wallet
|
|
19286
19454
|
* @throws Error if the configured identity cannot produce a valid x-only public key
|
|
19287
19455
|
*/
|
|
19288
|
-
static async create(identity, networkName =
|
|
19456
|
+
static async create(identity, networkName = chunkAB67CMHS_cjs.DEFAULT_NETWORK_NAME, provider) {
|
|
19289
19457
|
const pubkey = await identity.xOnlyPublicKey();
|
|
19290
19458
|
if (!pubkey) {
|
|
19291
19459
|
throw new Error("Invalid configured public key");
|
|
19292
19460
|
}
|
|
19293
|
-
const network =
|
|
19461
|
+
const network = chunkAB67CMHS_cjs.getNetwork(networkName);
|
|
19294
19462
|
const onchainProvider = provider || new EsploraProvider(ESPLORA_URL[networkName]);
|
|
19295
19463
|
const onchainP2TR = btcSigner.p2tr(pubkey, void 0, network);
|
|
19296
19464
|
return new _OnchainWallet(identity, network, onchainP2TR, onchainProvider);
|
|
@@ -19396,7 +19564,7 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
19396
19564
|
if (!inputs) {
|
|
19397
19565
|
throw new Error("Fee estimation failed");
|
|
19398
19566
|
}
|
|
19399
|
-
let tx = new
|
|
19567
|
+
let tx = new chunkAB67CMHS_cjs.Transaction();
|
|
19400
19568
|
for (const input of inputs) {
|
|
19401
19569
|
tx.addInput({
|
|
19402
19570
|
txid: input.txid,
|
|
@@ -19454,7 +19622,7 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
19454
19622
|
* @throws If the parent has no anchor, or funding cannot be selected/signed
|
|
19455
19623
|
*/
|
|
19456
19624
|
async bumpAnchor(parentHex, feeRate) {
|
|
19457
|
-
const parent =
|
|
19625
|
+
const parent = chunkAB67CMHS_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
|
|
19458
19626
|
const coins = (await this.getCoins()).filter((c) => c.status.confirmed);
|
|
19459
19627
|
const child = await this.buildBumpPackage(parent, feeRate, coins);
|
|
19460
19628
|
return [parent.hex, child.hex];
|
|
@@ -20219,7 +20387,7 @@ exports.BIP322 = void 0;
|
|
|
20219
20387
|
async function sign2(message, identity, network) {
|
|
20220
20388
|
const xOnlyPubKey = await identity.xOnlyPublicKey();
|
|
20221
20389
|
const payment = btcSigner.p2tr(xOnlyPubKey, void 0, network);
|
|
20222
|
-
const toSpend =
|
|
20390
|
+
const toSpend = chunkAB67CMHS_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
|
|
20223
20391
|
const toSign = craftBIP322ToSignP2TR(toSpend, payment.script, xOnlyPubKey);
|
|
20224
20392
|
const signed = await identity.sign(toSign, [0]);
|
|
20225
20393
|
signed.finalizeIdx(0);
|
|
@@ -20277,7 +20445,7 @@ function verifyP2TR(message, witnessItems, pkScript, pubkey) {
|
|
|
20277
20445
|
if (sighashType !== btcSigner.SigHash.DEFAULT && sighashType !== btcSigner.SigHash.ALL) {
|
|
20278
20446
|
return false;
|
|
20279
20447
|
}
|
|
20280
|
-
const toSpend =
|
|
20448
|
+
const toSpend = chunkAB67CMHS_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
|
|
20281
20449
|
const toSign = craftBIP322ToSignP2TR(toSpend, pkScript, pubkey);
|
|
20282
20450
|
const sighash = toSign.preimageWitnessV1(0, [pkScript], sighashType, [0n]);
|
|
20283
20451
|
const rawSig = sig.length === 65 ? sig.subarray(0, 64) : sig;
|
|
@@ -20298,7 +20466,7 @@ function verifyP2WPKH(message, witnessItems, pkScript, addressHash) {
|
|
|
20298
20466
|
}
|
|
20299
20467
|
const sighashType = sigWithHash[sigWithHash.length - 1];
|
|
20300
20468
|
const derSig = sigWithHash.subarray(0, sigWithHash.length - 1);
|
|
20301
|
-
const toSpend =
|
|
20469
|
+
const toSpend = chunkAB67CMHS_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
|
|
20302
20470
|
const toSign = craftBIP322ToSignSimple(toSpend, pkScript);
|
|
20303
20471
|
const scriptCode = btcSigner.OutScript.encode({ type: "pkh", hash: addressHash });
|
|
20304
20472
|
const sighash = toSign.preimageWitnessV0(0, scriptCode, sighashType, 0n);
|
|
@@ -20351,7 +20519,7 @@ function encodeCompactSize(n) {
|
|
|
20351
20519
|
return buf;
|
|
20352
20520
|
}
|
|
20353
20521
|
function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
|
|
20354
|
-
const tx = new
|
|
20522
|
+
const tx = new chunkAB67CMHS_cjs.Transaction({ version: 0 });
|
|
20355
20523
|
tx.addInput({
|
|
20356
20524
|
txid: toSpend.id,
|
|
20357
20525
|
index: 0,
|
|
@@ -20365,12 +20533,12 @@ function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
|
|
|
20365
20533
|
});
|
|
20366
20534
|
tx.addOutput({
|
|
20367
20535
|
amount: 0n,
|
|
20368
|
-
script:
|
|
20536
|
+
script: chunkAB67CMHS_cjs.OP_RETURN_EMPTY_PKSCRIPT
|
|
20369
20537
|
});
|
|
20370
20538
|
return tx;
|
|
20371
20539
|
}
|
|
20372
20540
|
function craftBIP322ToSignSimple(toSpend, pkScript) {
|
|
20373
|
-
const tx = new
|
|
20541
|
+
const tx = new chunkAB67CMHS_cjs.Transaction({ version: 0 });
|
|
20374
20542
|
tx.addInput({
|
|
20375
20543
|
txid: toSpend.id,
|
|
20376
20544
|
index: 0,
|
|
@@ -20382,7 +20550,7 @@ function craftBIP322ToSignSimple(toSpend, pkScript) {
|
|
|
20382
20550
|
});
|
|
20383
20551
|
tx.addOutput({
|
|
20384
20552
|
amount: 0n,
|
|
20385
|
-
script:
|
|
20553
|
+
script: chunkAB67CMHS_cjs.OP_RETURN_EMPTY_PKSCRIPT
|
|
20386
20554
|
});
|
|
20387
20555
|
return tx;
|
|
20388
20556
|
}
|
|
@@ -20513,7 +20681,7 @@ var RestEmulatorProvider = class {
|
|
|
20513
20681
|
}
|
|
20514
20682
|
};
|
|
20515
20683
|
function finalizeVirtualTx(type, psbtBase64) {
|
|
20516
|
-
const tx =
|
|
20684
|
+
const tx = chunkAB67CMHS_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
|
|
20517
20685
|
if (type === "INDEXER_CHAINED_TX_TYPE_TREE" /* TREE */) {
|
|
20518
20686
|
const input = tx.getInput(0);
|
|
20519
20687
|
if (!input) {
|
|
@@ -20540,14 +20708,14 @@ var ExitPathError = class extends Error {
|
|
|
20540
20708
|
reason;
|
|
20541
20709
|
};
|
|
20542
20710
|
function delayWeight(sequence) {
|
|
20543
|
-
const t =
|
|
20711
|
+
const t = chunkAB67CMHS_cjs.sequenceToTimelock(sequence);
|
|
20544
20712
|
return t.type === "blocks" ? Number(t.value) : Number(t.value) / 600;
|
|
20545
20713
|
}
|
|
20546
20714
|
async function resolveUnilateralPath(params) {
|
|
20547
20715
|
const { vtxo, scriptHex, contractRepository } = params;
|
|
20548
20716
|
const contract = contractRepository ? (await contractRepository.getContracts({ script: scriptHex }))[0] : void 0;
|
|
20549
20717
|
if (contract) {
|
|
20550
|
-
const handler =
|
|
20718
|
+
const handler = chunkOL7V43WS_cjs.contractHandlers.get(contract.type);
|
|
20551
20719
|
if (!handler) {
|
|
20552
20720
|
throw new ExitPathError(
|
|
20553
20721
|
"no-handler",
|
|
@@ -20570,12 +20738,12 @@ async function resolveUnilateralPath(params) {
|
|
|
20570
20738
|
paths.sort((a, b) => delayWeight(a.sequence) - delayWeight(b.sequence));
|
|
20571
20739
|
return { selection: paths[0], label: `${contract.type}:unilateral` };
|
|
20572
20740
|
}
|
|
20573
|
-
const decoded =
|
|
20741
|
+
const decoded = chunkAB67CMHS_cjs.VtxoScript.decode(vtxo.tapTree);
|
|
20574
20742
|
let best;
|
|
20575
20743
|
for (const exit of decoded.exitPaths()) {
|
|
20576
20744
|
const leaf = decoded.findLeaf(base.hex.encode(exit.script));
|
|
20577
20745
|
if (!leaf) continue;
|
|
20578
|
-
const sequence =
|
|
20746
|
+
const sequence = chunkAB67CMHS_cjs.timelockToSequence(exit.params.timelock);
|
|
20579
20747
|
const weight = delayWeight(sequence);
|
|
20580
20748
|
if (!best || weight < best.weight) {
|
|
20581
20749
|
best = { selection: { leaf, sequence }, weight };
|
|
@@ -20761,14 +20929,14 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
20761
20929
|
}
|
|
20762
20930
|
const resolved = await resolveUnilateralPath({
|
|
20763
20931
|
vtxo,
|
|
20764
|
-
scriptHex: base.hex.encode(
|
|
20932
|
+
scriptHex: base.hex.encode(chunkAB67CMHS_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
|
|
20765
20933
|
contractRepository: wallet.contractRepository,
|
|
20766
20934
|
walletPubKeyHex: base.hex.encode(await wallet.identity.xOnlyPublicKey()),
|
|
20767
20935
|
currentTime: Date.now()
|
|
20768
20936
|
});
|
|
20769
20937
|
const spendingLeaf = resolved.selection.leaf;
|
|
20770
20938
|
const sequence = resolved.selection.sequence;
|
|
20771
|
-
const timelock =
|
|
20939
|
+
const timelock = chunkAB67CMHS_cjs.sequenceToTimelock(sequence);
|
|
20772
20940
|
const elapsed = timelock.type === "blocks" ? chainTip.height >= txStatus.blockHeight + Number(timelock.value) : chainTip.time >= txStatus.blockTime + Number(timelock.value);
|
|
20773
20941
|
if (!elapsed) {
|
|
20774
20942
|
throw new Error(`no available exit path found for vtxo ${vtxo.txid}:${vtxo.vout}`);
|
|
@@ -20781,7 +20949,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
20781
20949
|
sequence,
|
|
20782
20950
|
witnessUtxo: {
|
|
20783
20951
|
amount: BigInt(vtxo.value),
|
|
20784
|
-
script:
|
|
20952
|
+
script: chunkAB67CMHS_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
|
|
20785
20953
|
},
|
|
20786
20954
|
sighashType: btcSigner.SigHash.DEFAULT
|
|
20787
20955
|
});
|
|
@@ -20791,7 +20959,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
20791
20959
|
btcSigner.TaprootControlBlock.encode(spendingLeaf[0]).length
|
|
20792
20960
|
);
|
|
20793
20961
|
}
|
|
20794
|
-
const tx = new
|
|
20962
|
+
const tx = new chunkAB67CMHS_cjs.Transaction({ version: 2 });
|
|
20795
20963
|
for (const input of inputs) {
|
|
20796
20964
|
tx.addInput(input);
|
|
20797
20965
|
}
|
|
@@ -20858,7 +21026,7 @@ async function buildSignedSweep(params) {
|
|
|
20858
21026
|
`uneconomic vtxo ${vtxo.txid}:${vtxo.vout}: value ${vtxo.value} - fee ${fee} < dust`
|
|
20859
21027
|
);
|
|
20860
21028
|
}
|
|
20861
|
-
const tx = new
|
|
21029
|
+
const tx = new chunkAB67CMHS_cjs.Transaction({ version: 2 });
|
|
20862
21030
|
tx.addInput({
|
|
20863
21031
|
txid: vtxo.txid,
|
|
20864
21032
|
index: vtxo.vout,
|
|
@@ -20883,7 +21051,7 @@ async function buildSignedSweep(params) {
|
|
|
20883
21051
|
finalScriptWitness: [
|
|
20884
21052
|
tapScriptSig[0][1],
|
|
20885
21053
|
...path.extraWitness,
|
|
20886
|
-
|
|
21054
|
+
chunkAB67CMHS_cjs.scriptFromTapLeafScript(path.leaf),
|
|
20887
21055
|
btcSigner.TaprootControlBlock.encode(controlBlock)
|
|
20888
21056
|
]
|
|
20889
21057
|
});
|
|
@@ -20913,7 +21081,7 @@ async function resolveFeeRate(opts) {
|
|
|
20913
21081
|
}
|
|
20914
21082
|
async function selectExitVtxos(opts) {
|
|
20915
21083
|
if (!opts.vtxos) return opts.wallet.getVtxos();
|
|
20916
|
-
const res = await
|
|
21084
|
+
const res = await chunkAB67CMHS_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
|
|
20917
21085
|
const tapTrees = /* @__PURE__ */ new Map();
|
|
20918
21086
|
const out = [];
|
|
20919
21087
|
for (const vtxo of res.vtxos) {
|
|
@@ -20928,7 +21096,7 @@ async function selectExitVtxos(opts) {
|
|
|
20928
21096
|
`no contract registered for vtxo script ${vtxo.script} \u2014 register the contract before exiting`
|
|
20929
21097
|
);
|
|
20930
21098
|
}
|
|
20931
|
-
const handler =
|
|
21099
|
+
const handler = chunkOL7V43WS_cjs.contractHandlers.get(contract.type);
|
|
20932
21100
|
if (!handler) {
|
|
20933
21101
|
throw new Error(`no contract handler registered for type '${contract.type}'`);
|
|
20934
21102
|
}
|
|
@@ -20958,7 +21126,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
20958
21126
|
if (pendingNodes.length > 0) {
|
|
20959
21127
|
const txs = await resolver.getVirtualTxs(pendingNodes.map((n) => n.txid));
|
|
20960
21128
|
for (const psbt of txs) {
|
|
20961
|
-
psbts.set(
|
|
21129
|
+
psbts.set(chunkAB67CMHS_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
20962
21130
|
}
|
|
20963
21131
|
}
|
|
20964
21132
|
const childVsize = Number(
|
|
@@ -20994,7 +21162,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
20994
21162
|
try {
|
|
20995
21163
|
const resolved = await resolveUnilateralPath({
|
|
20996
21164
|
vtxo,
|
|
20997
|
-
scriptHex: base.hex.encode(
|
|
21165
|
+
scriptHex: base.hex.encode(chunkAB67CMHS_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
|
|
20998
21166
|
contractRepository: wallet.contractRepository,
|
|
20999
21167
|
walletPubKeyHex,
|
|
21000
21168
|
currentTime: Date.now()
|
|
@@ -21013,7 +21181,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
21013
21181
|
});
|
|
21014
21182
|
continue;
|
|
21015
21183
|
}
|
|
21016
|
-
const t =
|
|
21184
|
+
const t = chunkAB67CMHS_cjs.sequenceToTimelock(resolved.selection.sequence);
|
|
21017
21185
|
const delay = { type: t.type, value: Number(t.value) };
|
|
21018
21186
|
infos.push({ outpoint, value: vtxo.value, sweepFee, path: resolved.label, delay });
|
|
21019
21187
|
sweeps.push({ vtxo, resolved, sweepFee, delay });
|
|
@@ -21352,7 +21520,7 @@ async function prepare(opts) {
|
|
|
21352
21520
|
txid: sweep.vtxo.txid,
|
|
21353
21521
|
vout: sweep.vtxo.vout,
|
|
21354
21522
|
value: sweep.vtxo.value,
|
|
21355
|
-
pkScript:
|
|
21523
|
+
pkScript: chunkAB67CMHS_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
|
|
21356
21524
|
},
|
|
21357
21525
|
path: sweep.resolved.selection,
|
|
21358
21526
|
outputAddress: opts.sweepAddress,
|
|
@@ -21437,7 +21605,7 @@ async function prepare(opts) {
|
|
|
21437
21605
|
if (newFee <= splitterFee) break;
|
|
21438
21606
|
splitterFee = newFee;
|
|
21439
21607
|
}
|
|
21440
|
-
const splitter = new
|
|
21608
|
+
const splitter = new chunkAB67CMHS_cjs.Transaction({ version: 2 });
|
|
21441
21609
|
for (const coin of selected.inputs) {
|
|
21442
21610
|
splitter.addInput({
|
|
21443
21611
|
txid: coin.txid,
|
|
@@ -21580,41 +21748,41 @@ var UnilateralExit = {
|
|
|
21580
21748
|
// src/arkade/index.ts
|
|
21581
21749
|
var arkade_exports = {};
|
|
21582
21750
|
chunk5BLDMQED_cjs.__export(arkade_exports, {
|
|
21583
|
-
ARKADE_OP: () =>
|
|
21584
|
-
ARKADE_OPCODES: () =>
|
|
21585
|
-
ARKADE_OPCODE_NAMES: () =>
|
|
21586
|
-
ARKADE_OPCODE_VALUES: () =>
|
|
21587
|
-
ARKADE_OPS: () =>
|
|
21751
|
+
ARKADE_OP: () => chunkOL7V43WS_cjs.ARKADE_OP,
|
|
21752
|
+
ARKADE_OPCODES: () => chunkOL7V43WS_cjs.ARKADE_OPCODES,
|
|
21753
|
+
ARKADE_OPCODE_NAMES: () => chunkOL7V43WS_cjs.ARKADE_OPCODE_NAMES,
|
|
21754
|
+
ARKADE_OPCODE_VALUES: () => chunkOL7V43WS_cjs.ARKADE_OPCODE_VALUES,
|
|
21755
|
+
ARKADE_OPS: () => chunkOL7V43WS_cjs.ARKADE_OPS,
|
|
21588
21756
|
Arkade: () => Arkade,
|
|
21589
21757
|
ArkadeContract: () => ArkadeContract,
|
|
21590
|
-
ArkadeProgramScript: () =>
|
|
21591
|
-
ArkadeScript: () =>
|
|
21758
|
+
ArkadeProgramScript: () => chunkOL7V43WS_cjs.ArkadeProgramScript,
|
|
21759
|
+
ArkadeScript: () => chunkOL7V43WS_cjs.ArkadeScript,
|
|
21592
21760
|
ArkadeTransactionBuilder: () => ArkadeTransactionBuilder,
|
|
21593
|
-
BigNum: () =>
|
|
21761
|
+
BigNum: () => chunkOL7V43WS_cjs.bignum_exports,
|
|
21594
21762
|
OP: () => btcSigner.OP,
|
|
21595
|
-
OPCODE_NAMES: () =>
|
|
21596
|
-
OPCODE_VALUES: () =>
|
|
21597
|
-
SUPPORTED_PROGRAM_VERSION: () =>
|
|
21763
|
+
OPCODE_NAMES: () => chunkOL7V43WS_cjs.OPCODE_NAMES,
|
|
21764
|
+
OPCODE_VALUES: () => chunkOL7V43WS_cjs.OPCODE_VALUES,
|
|
21765
|
+
SUPPORTED_PROGRAM_VERSION: () => chunkOL7V43WS_cjs.SUPPORTED_PROGRAM_VERSION,
|
|
21598
21766
|
Script: () => btcSigner.Script,
|
|
21599
|
-
arkadeScriptHash: () =>
|
|
21600
|
-
arkadeWitnessHash: () =>
|
|
21601
|
-
asmToBytes: () =>
|
|
21602
|
-
bytesToASM: () =>
|
|
21603
|
-
computeArkadeScriptPublicKey: () =>
|
|
21767
|
+
arkadeScriptHash: () => chunkOL7V43WS_cjs.arkadeScriptHash,
|
|
21768
|
+
arkadeWitnessHash: () => chunkOL7V43WS_cjs.arkadeWitnessHash,
|
|
21769
|
+
asmToBytes: () => chunkOL7V43WS_cjs.asmToBytes,
|
|
21770
|
+
bytesToASM: () => chunkOL7V43WS_cjs.bytesToASM,
|
|
21771
|
+
computeArkadeScriptPublicKey: () => chunkOL7V43WS_cjs.computeArkadeScriptPublicKey,
|
|
21604
21772
|
createArkadeBatchHandler: () => createArkadeBatchHandler,
|
|
21605
|
-
deserializeArkadeContractParams: () =>
|
|
21606
|
-
fromASM: () =>
|
|
21607
|
-
getOpcodeName: () =>
|
|
21608
|
-
getOpcodeValue: () =>
|
|
21609
|
-
parseArtifact: () =>
|
|
21610
|
-
resolveAsm: () =>
|
|
21611
|
-
serializeArkadeContractParams: () =>
|
|
21612
|
-
stringifyArtifact: () =>
|
|
21613
|
-
toASM: () =>
|
|
21614
|
-
validateProgram: () =>
|
|
21615
|
-
witnessRefToBytes: () =>
|
|
21773
|
+
deserializeArkadeContractParams: () => chunkOL7V43WS_cjs.deserializeArkadeContractParams,
|
|
21774
|
+
fromASM: () => chunkOL7V43WS_cjs.fromASM,
|
|
21775
|
+
getOpcodeName: () => chunkOL7V43WS_cjs.getOpcodeName,
|
|
21776
|
+
getOpcodeValue: () => chunkOL7V43WS_cjs.getOpcodeValue,
|
|
21777
|
+
parseArtifact: () => chunkOL7V43WS_cjs.parseArtifact,
|
|
21778
|
+
resolveAsm: () => chunkOL7V43WS_cjs.resolveAsm,
|
|
21779
|
+
serializeArkadeContractParams: () => chunkOL7V43WS_cjs.serializeArkadeContractParams,
|
|
21780
|
+
stringifyArtifact: () => chunkOL7V43WS_cjs.stringifyArtifact,
|
|
21781
|
+
toASM: () => chunkOL7V43WS_cjs.toASM,
|
|
21782
|
+
validateProgram: () => chunkOL7V43WS_cjs.validateProgram,
|
|
21783
|
+
witnessRefToBytes: () => chunkOL7V43WS_cjs.witnessRefToBytes
|
|
21616
21784
|
});
|
|
21617
|
-
var isVtxoCoin = (input) =>
|
|
21785
|
+
var isVtxoCoin = (input) => chunkAB67CMHS_cjs.isVirtualCoin(input);
|
|
21618
21786
|
function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message, session, arkProvider, emulator, network, recipients, batchExpiryPolicy) {
|
|
21619
21787
|
let batchId;
|
|
21620
21788
|
let sweepTapTreeRoot;
|
|
@@ -21635,7 +21803,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
21635
21803
|
);
|
|
21636
21804
|
await arkProvider.confirmRegistration(intentId);
|
|
21637
21805
|
batchId = event.id;
|
|
21638
|
-
const sweepTapscript =
|
|
21806
|
+
const sweepTapscript = chunkAB67CMHS_cjs.CSVMultisigTapscript.encode({
|
|
21639
21807
|
timelock,
|
|
21640
21808
|
pubkeys: [base.hex.decode(info.forfeitPubkey).subarray(1)]
|
|
21641
21809
|
}).script;
|
|
@@ -21649,7 +21817,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
21649
21817
|
if (!xOnlyPubkeys.includes(base.hex.encode(xonlySignerPubKey))) {
|
|
21650
21818
|
return { skip: true };
|
|
21651
21819
|
}
|
|
21652
|
-
const commitmentTx =
|
|
21820
|
+
const commitmentTx = chunkAB67CMHS_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
|
|
21653
21821
|
validateVtxoTxGraph(vtxoTree, commitmentTx, sweepTapTreeRoot);
|
|
21654
21822
|
if (recipients && recipients.length > 0) {
|
|
21655
21823
|
validateBatchRecipients(commitmentTx, vtxoTree.leaves(), recipients, network);
|
|
@@ -21681,7 +21849,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
21681
21849
|
if (connectorTree) {
|
|
21682
21850
|
validateConnectorsTxGraph(event.commitmentTx, connectorTree);
|
|
21683
21851
|
}
|
|
21684
|
-
let commitmentPsbt =
|
|
21852
|
+
let commitmentPsbt = chunkAB67CMHS_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
|
|
21685
21853
|
assertFinalCommitmentMatchesValidated(
|
|
21686
21854
|
commitmentPsbt,
|
|
21687
21855
|
validatedCommitmentTxid,
|
|
@@ -21716,7 +21884,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
21716
21884
|
boardingIndices.push(boardingIdx);
|
|
21717
21885
|
continue;
|
|
21718
21886
|
}
|
|
21719
|
-
if (
|
|
21887
|
+
if (chunkAB67CMHS_cjs.isRecoverable(input) || isSubdust(input, info.dust)) {
|
|
21720
21888
|
continue;
|
|
21721
21889
|
}
|
|
21722
21890
|
if (connectorIndex >= connectorLeaves.length) {
|
|
@@ -21737,7 +21905,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
21737
21905
|
index: input.vout,
|
|
21738
21906
|
witnessUtxo: {
|
|
21739
21907
|
amount: BigInt(input.value),
|
|
21740
|
-
script:
|
|
21908
|
+
script: chunkAB67CMHS_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
21741
21909
|
},
|
|
21742
21910
|
sighashType: btcSigner.SigHash.DEFAULT,
|
|
21743
21911
|
tapLeafScript: [input.forfeitTapLeafScript]
|
|
@@ -21829,11 +21997,11 @@ var Arkade = class _Arkade {
|
|
|
21829
21997
|
static async connect(opts) {
|
|
21830
21998
|
const info = await opts.arkade.getInfo();
|
|
21831
21999
|
const serverKey = base.hex.decode(info.signerPubkey).slice(1);
|
|
21832
|
-
const checkpoint =
|
|
21833
|
-
const network = opts.network ??
|
|
22000
|
+
const checkpoint = chunkAB67CMHS_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
|
|
22001
|
+
const network = opts.network ?? chunkAB67CMHS_cjs.DEFAULT_NETWORK;
|
|
21834
22002
|
let emulatorKey;
|
|
21835
22003
|
if (opts.emulator) {
|
|
21836
|
-
emulatorKey = base.hex.decode(
|
|
22004
|
+
emulatorKey = base.hex.decode(chunkAB67CMHS_cjs.resolveEmulatorPubkey(network, opts.emulatorPubkey));
|
|
21837
22005
|
}
|
|
21838
22006
|
let userKey;
|
|
21839
22007
|
if (opts.identity) {
|
|
@@ -21864,7 +22032,7 @@ var Arkade = class _Arkade {
|
|
|
21864
22032
|
* key respectively; explicit args always win.
|
|
21865
22033
|
*/
|
|
21866
22034
|
contract(program, args = {}) {
|
|
21867
|
-
const declared = (program.params ?? []).map(
|
|
22035
|
+
const declared = (program.params ?? []).map(chunkOL7V43WS_cjs.inputName);
|
|
21868
22036
|
if (declared.includes("server") && args.server === void 0) {
|
|
21869
22037
|
args = { ...args, server: this.serverKey };
|
|
21870
22038
|
}
|
|
@@ -21884,7 +22052,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
21884
22052
|
userKey: client.userKey,
|
|
21885
22053
|
emulatorKey: client.emulatorKey
|
|
21886
22054
|
};
|
|
21887
|
-
this.vtxoScript = new
|
|
22055
|
+
this.vtxoScript = new chunkOL7V43WS_cjs.ArkadeProgramScript(program, args, this.keys);
|
|
21888
22056
|
this.tapTree = this.vtxoScript.encode();
|
|
21889
22057
|
this.compiled = this.vtxoScript.compiled;
|
|
21890
22058
|
}
|
|
@@ -21912,7 +22080,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
21912
22080
|
`ArkadeContract.fromContract: expected contract type 'arkade', got '${contract.type}'`
|
|
21913
22081
|
);
|
|
21914
22082
|
}
|
|
21915
|
-
const typed =
|
|
22083
|
+
const typed = chunkOL7V43WS_cjs.deserializeArkadeContractParams(contract.params);
|
|
21916
22084
|
return new _ArkadeContract(client, typed.program, typed.args, {
|
|
21917
22085
|
serverKey: typed.serverKey,
|
|
21918
22086
|
userKey: typed.userKey,
|
|
@@ -21953,7 +22121,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
21953
22121
|
toContractParams() {
|
|
21954
22122
|
return {
|
|
21955
22123
|
type: "arkade",
|
|
21956
|
-
params:
|
|
22124
|
+
params: chunkOL7V43WS_cjs.serializeArkadeContractParams({
|
|
21957
22125
|
program: this.program,
|
|
21958
22126
|
args: this.args,
|
|
21959
22127
|
serverKey: this.keys.serverKey,
|
|
@@ -21998,13 +22166,13 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
21998
22166
|
const [registered] = await manager.getContracts({ script: scriptHex });
|
|
21999
22167
|
if (registered) {
|
|
22000
22168
|
const [withVtxos] = await manager.getContractsWithVtxos({ script: scriptHex });
|
|
22001
|
-
return (withVtxos?.vtxos ?? []).filter((v) => !
|
|
22169
|
+
return (withVtxos?.vtxos ?? []).filter((v) => !chunkAB67CMHS_cjs.hasTerminalSpend(v));
|
|
22002
22170
|
}
|
|
22003
22171
|
}
|
|
22004
22172
|
if (!this.client.indexer) {
|
|
22005
22173
|
throw new Error("ArkadeContract.getUtxos: an indexer is required");
|
|
22006
22174
|
}
|
|
22007
|
-
const { vtxos } = await
|
|
22175
|
+
const { vtxos } = await chunkAB67CMHS_cjs.getNormalizedVtxos(this.client.indexer, {
|
|
22008
22176
|
scripts: [scriptHex],
|
|
22009
22177
|
spendableOnly: true
|
|
22010
22178
|
});
|
|
@@ -22106,12 +22274,12 @@ var ArkadeTransactionBuilder = class {
|
|
|
22106
22274
|
this.contract.client.checkpoint
|
|
22107
22275
|
);
|
|
22108
22276
|
if (coin.sourceTx) {
|
|
22109
|
-
|
|
22277
|
+
chunkAB67CMHS_cjs.setArkPsbtField(arkTx, 0, chunkAB67CMHS_cjs.PrevArkTxField, coin.sourceTx);
|
|
22110
22278
|
}
|
|
22111
22279
|
const condition = (def.tapscript.witness ?? []).map((w) => this.witnessBytes(w));
|
|
22112
22280
|
if (condition.length > 0) {
|
|
22113
|
-
|
|
22114
|
-
|
|
22281
|
+
chunkAB67CMHS_cjs.setArkPsbtField(arkTx, 0, chunkAB67CMHS_cjs.ConditionWitness, condition);
|
|
22282
|
+
chunkAB67CMHS_cjs.setArkPsbtField(checkpoints[0], 0, chunkAB67CMHS_cjs.ConditionWitness, condition);
|
|
22115
22283
|
}
|
|
22116
22284
|
const packets = [];
|
|
22117
22285
|
if (this.assetSpecs.length > 0) {
|
|
@@ -22150,7 +22318,7 @@ var ArkadeTransactionBuilder = class {
|
|
|
22150
22318
|
base.base64.encode(signedArk2.toPSBT()),
|
|
22151
22319
|
signedCps.map((c) => base.base64.encode(c.toPSBT()))
|
|
22152
22320
|
);
|
|
22153
|
-
const txid =
|
|
22321
|
+
const txid = chunkAB67CMHS_cjs.Transaction.fromPSBT(base.base64.decode(res2.signedArkTx)).id;
|
|
22154
22322
|
return {
|
|
22155
22323
|
txid,
|
|
22156
22324
|
signedArkTx: res2.signedArkTx,
|
|
@@ -22209,23 +22377,23 @@ var ArkadeTransactionBuilder = class {
|
|
|
22209
22377
|
}
|
|
22210
22378
|
buildAssetPacket() {
|
|
22211
22379
|
const groups = this.assetSpecs.map((s) => {
|
|
22212
|
-
const id = typeof s.assetId === "string" ?
|
|
22213
|
-
return
|
|
22380
|
+
const id = typeof s.assetId === "string" ? chunkLG5GY73A_cjs.AssetId.fromString(s.assetId) : chunkLG5GY73A_cjs.AssetId.fromBytes(s.assetId);
|
|
22381
|
+
return chunkLG5GY73A_cjs.AssetGroup.create(
|
|
22214
22382
|
id,
|
|
22215
22383
|
null,
|
|
22216
|
-
s.inputs.map((i) =>
|
|
22217
|
-
s.outputs.map((o) =>
|
|
22218
|
-
(s.metadata ?? []).map((m) =>
|
|
22384
|
+
s.inputs.map((i) => chunkLG5GY73A_cjs.AssetInput.create(i.vin, i.amount)),
|
|
22385
|
+
s.outputs.map((o) => chunkLG5GY73A_cjs.AssetOutput.create(o.vout, o.amount)),
|
|
22386
|
+
(s.metadata ?? []).map((m) => chunkLG5GY73A_cjs.Metadata.create(m.key, m.value))
|
|
22219
22387
|
);
|
|
22220
22388
|
});
|
|
22221
|
-
return
|
|
22389
|
+
return chunkLG5GY73A_cjs.Packet.create(groups);
|
|
22222
22390
|
}
|
|
22223
22391
|
witnessBytes(ref) {
|
|
22224
|
-
return
|
|
22392
|
+
return chunkOL7V43WS_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
|
|
22225
22393
|
}
|
|
22226
22394
|
};
|
|
22227
22395
|
function bindInputs(fn, callArgs) {
|
|
22228
|
-
const names = (fn.def.inputs ?? []).map(
|
|
22396
|
+
const names = (fn.def.inputs ?? []).map(chunkOL7V43WS_cjs.inputName);
|
|
22229
22397
|
if (callArgs.length !== names.length) {
|
|
22230
22398
|
throw new Error(`${fn.name}: expected ${names.length} argument(s), got ${callArgs.length}`);
|
|
22231
22399
|
}
|
|
@@ -22614,6 +22782,7 @@ function createDefaultPaymentRouter(wallet) {
|
|
|
22614
22782
|
*/
|
|
22615
22783
|
|
|
22616
22784
|
exports.ARKADE_MAGIC = ARKADE_MAGIC;
|
|
22785
|
+
exports.ARKADE_SALTED_PREIMAGE_TAG = ARKADE_SALTED_PREIMAGE_TAG;
|
|
22617
22786
|
exports.ARKADE_SWAP_PREIMAGE_TAG = ARKADE_SWAP_PREIMAGE_TAG;
|
|
22618
22787
|
exports.ActivityRegistry = ActivityRegistry;
|
|
22619
22788
|
exports.AmbiguousRouteError = AmbiguousRouteError;
|
|
@@ -22717,6 +22886,7 @@ exports.btcTarget = btcTarget;
|
|
|
22717
22886
|
exports.buildForfeitTx = buildForfeitTx;
|
|
22718
22887
|
exports.buildOffchainTx = buildOffchainTx;
|
|
22719
22888
|
exports.buildPreimageMessage = buildPreimageMessage;
|
|
22889
|
+
exports.buildSaltedPreimageMessage = buildSaltedPreimageMessage;
|
|
22720
22890
|
exports.claimWithPreimageIdentity = claimWithPreimageIdentity;
|
|
22721
22891
|
exports.classifyAgainstSignerSet = classifyAgainstSignerSet;
|
|
22722
22892
|
exports.classifyContractSigner = classifyContractSigner;
|
|
@@ -22809,5 +22979,5 @@ exports.validateVtxoTxGraph = validateVtxoTxGraph;
|
|
|
22809
22979
|
exports.verifyTapscriptSignatures = verifyTapscriptSignatures;
|
|
22810
22980
|
exports.waitForIncomingFunds = waitForIncomingFunds;
|
|
22811
22981
|
exports.warnAndFilterVtxosForScript = warnAndFilterVtxosForScript;
|
|
22812
|
-
//# sourceMappingURL=chunk-
|
|
22813
|
-
//# sourceMappingURL=chunk-
|
|
22982
|
+
//# sourceMappingURL=chunk-COOBS7ET.cjs.map
|
|
22983
|
+
//# sourceMappingURL=chunk-COOBS7ET.cjs.map
|