@arkade-os/sdk 0.4.61 → 0.4.62
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/expo.cjs +5 -5
- package/dist/adapters/expo.d.cts +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-B53mOTCw.d.cts} +1 -1
- package/dist/{asyncStorageTaskQueue-Cq9FpKv6.d.ts → asyncStorageTaskQueue-Df-CTfTE.d.ts} +1 -1
- package/dist/{chunk-AUEXB42T.js → chunk-2IZW6AEK.js} +247 -84
- package/dist/chunk-2IZW6AEK.js.map +1 -0
- package/dist/{chunk-SF5NKAUA.cjs → chunk-G53HASDV.cjs} +48 -48
- package/dist/{chunk-SF5NKAUA.cjs.map → chunk-G53HASDV.cjs.map} +1 -1
- package/dist/{chunk-GDI2A65Z.js → chunk-H2ZAJOQA.js} +4 -4
- package/dist/{chunk-GDI2A65Z.js.map → chunk-H2ZAJOQA.js.map} +1 -1
- package/dist/{chunk-2JHN5RCY.cjs → chunk-I6EDUE75.cjs} +17 -17
- package/dist/{chunk-2JHN5RCY.cjs.map → chunk-I6EDUE75.cjs.map} +1 -1
- package/dist/{chunk-XLHN5L2O.js → chunk-I7RLG6VX.js} +4 -4
- package/dist/{chunk-XLHN5L2O.js.map → chunk-I7RLG6VX.js.map} +1 -1
- package/dist/{chunk-6O5OLYTZ.js → chunk-L7S5KC5B.js} +3 -3
- package/dist/{chunk-6O5OLYTZ.js.map → chunk-L7S5KC5B.js.map} +1 -1
- package/dist/{chunk-FNCQJLR2.cjs → chunk-OH2XLTXE.cjs} +3 -3
- package/dist/{chunk-FNCQJLR2.cjs.map → chunk-OH2XLTXE.cjs.map} +1 -1
- package/dist/{chunk-XMRB74HA.cjs → chunk-PWWA4DBL.cjs} +10 -10
- package/dist/{chunk-XMRB74HA.cjs.map → chunk-PWWA4DBL.cjs.map} +1 -1
- package/dist/{chunk-XFYFREPH.cjs → chunk-QRSR4HV4.cjs} +17 -17
- package/dist/{chunk-XFYFREPH.cjs.map → chunk-QRSR4HV4.cjs.map} +1 -1
- package/dist/{chunk-YVQNHELA.js → chunk-RMBI6P4N.js} +3 -3
- package/dist/{chunk-YVQNHELA.js.map → chunk-RMBI6P4N.js.map} +1 -1
- package/dist/{chunk-PVY6DMN5.js → chunk-URT2RVGB.js} +3 -3
- package/dist/{chunk-PVY6DMN5.js.map → chunk-URT2RVGB.js.map} +1 -1
- package/dist/{chunk-3NUDA3MB.cjs → chunk-Z2OZMKFV.cjs} +641 -476
- package/dist/chunk-Z2OZMKFV.cjs.map +1 -0
- package/dist/contracts/handlers/index.cjs +9 -9
- package/dist/contracts/handlers/index.d.cts +3 -3
- package/dist/contracts/handlers/index.d.ts +3 -3
- package/dist/contracts/handlers/index.js +2 -2
- package/dist/{delegate-BySzD37I.d.ts → delegate-BjYJJsml.d.ts} +1 -1
- package/dist/{delegate-C4Rl6h9l.d.cts → delegate-CC1gcvuC.d.cts} +1 -1
- package/dist/{index-C29VNcxC.d.ts → index-C888wFEV.d.ts} +2 -2
- package/dist/{index-BcRCHnzN.d.cts → index-CwBr7qzV.d.cts} +71 -12
- package/dist/{index-BcRCHnzN.d.ts → index-CwBr7qzV.d.ts} +71 -12
- package/dist/{index-Butfkm-K.d.cts → index-Cz5_WaQP.d.cts} +2 -2
- package/dist/index.cjs +274 -266
- package/dist/index.d.cts +105 -19
- package/dist/index.d.ts +105 -19
- package/dist/index.js +4 -4
- package/dist/repositories/realm/index.cjs +19 -19
- package/dist/repositories/realm/index.d.cts +2 -2
- package/dist/repositories/realm/index.d.ts +2 -2
- package/dist/repositories/realm/index.js +5 -5
- package/dist/repositories/sqlite/index.cjs +18 -18
- package/dist/repositories/sqlite/index.d.cts +2 -2
- package/dist/repositories/sqlite/index.d.ts +2 -2
- package/dist/repositories/sqlite/index.js +5 -5
- package/dist/{taskRunner-BTq3rMpI.d.cts → taskRunner-BMUndClz.d.cts} +1 -1
- package/dist/{taskRunner-DxMJYJ7Y.d.ts → taskRunner-DZWUsSzA.d.ts} +1 -1
- package/dist/wallet/expo/background.cjs +14 -14
- package/dist/wallet/expo/background.d.cts +3 -3
- package/dist/wallet/expo/background.d.ts +3 -3
- package/dist/wallet/expo/background.js +6 -6
- package/dist/wallet/expo/index.cjs +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-DrSsUden.d.cts → wallet-Dpjx6CJ7.d.ts} +14 -5
- package/dist/{wallet-BVIfg2ic.d.ts → wallet-H3f14est.d.cts} +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 chunkI6EDUE75_cjs = require('./chunk-I6EDUE75.cjs');
|
|
4
|
+
var chunkG53HASDV_cjs = require('./chunk-G53HASDV.cjs');
|
|
5
|
+
var chunkOH2XLTXE_cjs = require('./chunk-OH2XLTXE.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 = chunkOH2XLTXE_cjs.getArkPsbtFields(tx.root, 0, chunkOH2XLTXE_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 = chunkOH2XLTXE_cjs.getArkPsbtFields(g.root, 0, chunkOH2XLTXE_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 = chunkG53HASDV_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 chunkG53HASDV_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 = chunkG53HASDV_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 = chunkG53HASDV_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 chunkG53HASDV_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 chunkG53HASDV_cjs.deriveDescriptorLeafPubKey(this.descriptor);
|
|
855
880
|
}
|
|
856
881
|
async compressedPublicKey() {
|
|
857
|
-
return
|
|
882
|
+
return chunkG53HASDV_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 && chunkG53HASDV_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 = chunkG53HASDV_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 chunkG53HASDV_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 chunkG53HASDV_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 = chunkG53HASDV_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 chunkOH2XLTXE_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: chunkOH2XLTXE_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 chunkOH2XLTXE_cjs.rateGate.runHttp(url, () => chunkOH2XLTXE_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[chunkOH2XLTXE_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 chunkOH2XLTXE_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 chunkOH2XLTXE_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 chunkOH2XLTXE_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 chunkOH2XLTXE_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 chunkOH2XLTXE_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 chunkOH2XLTXE_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 chunkOH2XLTXE_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 chunkOH2XLTXE_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 chunkOH2XLTXE_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 chunkOH2XLTXE_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 chunkOH2XLTXE_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 = chunkOH2XLTXE_cjs.getArkPsbtFields(child.root, 0, chunkOH2XLTXE_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 chunkI6EDUE75_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 chunkI6EDUE75_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 chunkI6EDUE75_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 chunkI6EDUE75_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 chunkI6EDUE75_cjs.Packet.PACKET_TYPE:
|
|
2385
|
+
return chunkI6EDUE75_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 chunkOH2XLTXE_cjs.ServerResponseMismatchError(`offchain send output not found: ${address}`);
|
|
2433
|
+
var ErrInvalidAssetOutputAmount = (got, want, assetId) => new chunkOH2XLTXE_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 chunkOH2XLTXE_cjs.ServerResponseMismatchError(`asset group not found in batch leaf: ${assetId}`);
|
|
2437
|
+
var ErrAssetOutputNotFound = (assetId, outputIndex) => new chunkOH2XLTXE_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 chunkOH2XLTXE_cjs.ServerResponseMismatchError(`onchain output not found: ${address}`);
|
|
2441
|
+
var ErrUnvalidatedOffchainOutput = (address) => new chunkOH2XLTXE_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 chunkOH2XLTXE_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 = chunkOH2XLTXE_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
|
+
chunkOH2XLTXE_cjs.ArkAddress.decode(recipient.address);
|
|
2411
2473
|
} catch {
|
|
2412
2474
|
validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
|
|
2413
2475
|
continue;
|
|
@@ -2638,7 +2700,7 @@ function assetMintResolver() {
|
|
|
2638
2700
|
if (!tx.assets?.length || !tx.key.arkTxid) return void 0;
|
|
2639
2701
|
const minted = tx.assets.filter((a) => {
|
|
2640
2702
|
try {
|
|
2641
|
-
return base.hex.encode(
|
|
2703
|
+
return base.hex.encode(chunkI6EDUE75_cjs.AssetId.fromString(a.assetId).txid) === tx.key.arkTxid;
|
|
2642
2704
|
} catch {
|
|
2643
2705
|
return false;
|
|
2644
2706
|
}
|
|
@@ -2681,7 +2743,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
2681
2743
|
const existing = inputsByAssetId.get(asset.assetId);
|
|
2682
2744
|
inputsByAssetId.set(asset.assetId, [
|
|
2683
2745
|
...existing ?? [],
|
|
2684
|
-
|
|
2746
|
+
chunkI6EDUE75_cjs.AssetInput.create(inputIndex, asset.amount)
|
|
2685
2747
|
]);
|
|
2686
2748
|
}
|
|
2687
2749
|
}
|
|
@@ -2693,7 +2755,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
2693
2755
|
const existing = outputsByAssetId.get(asset.assetId);
|
|
2694
2756
|
outputsByAssetId.set(asset.assetId, [
|
|
2695
2757
|
...existing ?? [],
|
|
2696
|
-
|
|
2758
|
+
chunkI6EDUE75_cjs.AssetOutput.create(outputIndex, asset.amount)
|
|
2697
2759
|
]);
|
|
2698
2760
|
}
|
|
2699
2761
|
}
|
|
@@ -2704,7 +2766,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
2704
2766
|
const existing = outputsByAssetId.get(asset.assetId);
|
|
2705
2767
|
outputsByAssetId.set(asset.assetId, [
|
|
2706
2768
|
...existing ?? [],
|
|
2707
|
-
|
|
2769
|
+
chunkI6EDUE75_cjs.AssetOutput.create(outputIndex, asset.amount)
|
|
2708
2770
|
]);
|
|
2709
2771
|
}
|
|
2710
2772
|
}
|
|
@@ -2713,11 +2775,11 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
2713
2775
|
for (const assetIdStr of allAssetIds) {
|
|
2714
2776
|
const inputs = inputsByAssetId.get(assetIdStr);
|
|
2715
2777
|
const outputs = outputsByAssetId.get(assetIdStr);
|
|
2716
|
-
const assetId =
|
|
2717
|
-
const group =
|
|
2778
|
+
const assetId = chunkI6EDUE75_cjs.AssetId.fromString(assetIdStr);
|
|
2779
|
+
const group = chunkI6EDUE75_cjs.AssetGroup.create(assetId, null, inputs ?? [], outputs ?? [], []);
|
|
2718
2780
|
groups.push(group);
|
|
2719
2781
|
}
|
|
2720
|
-
return
|
|
2782
|
+
return chunkI6EDUE75_cjs.Packet.create(groups);
|
|
2721
2783
|
}
|
|
2722
2784
|
function selectCoinsWithAsset(coins, assetId, requiredAmount) {
|
|
2723
2785
|
const coinsWithAsset = coins.filter((coin) => coin.assets?.some((a) => a.assetId === assetId));
|
|
@@ -2802,13 +2864,13 @@ var toTimelock = (value) => ({
|
|
|
2802
2864
|
var toSeconds = (t) => t.type === "seconds" ? t.value : t.value * NOMINAL_BLOCK_SECONDS;
|
|
2803
2865
|
function assertTimelockInPolicy(timelock, policy, label, overrideOption) {
|
|
2804
2866
|
if (policy.requireSeconds && timelock.type === "blocks") {
|
|
2805
|
-
throw new
|
|
2867
|
+
throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
|
|
2806
2868
|
`${label} rejected: block-typed timelocks are not accepted (got ${timelock.value})`
|
|
2807
2869
|
);
|
|
2808
2870
|
}
|
|
2809
2871
|
const seconds = toSeconds(timelock);
|
|
2810
2872
|
if (seconds < policy.minSeconds) {
|
|
2811
|
-
throw new
|
|
2873
|
+
throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
|
|
2812
2874
|
`${label} rejected: ${timelock.value} ${timelock.type} is below the ${policy.minSeconds}s floor; pass ${overrideOption}: ${seconds}n to Wallet.create to lower it`
|
|
2813
2875
|
);
|
|
2814
2876
|
}
|
|
@@ -2829,7 +2891,7 @@ function resolveBatchExpiryPolicy(network, overrides) {
|
|
|
2829
2891
|
}
|
|
2830
2892
|
function assertValidBatchExpiry(batchExpiry, policy) {
|
|
2831
2893
|
if (policy.advertisedVtxoTreeExpiry !== void 0 && batchExpiry !== policy.advertisedVtxoTreeExpiry) {
|
|
2832
|
-
throw new
|
|
2894
|
+
throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
|
|
2833
2895
|
`batch expiry rejected: ${batchExpiry} does not match the advertised vtxoTreeExpiry ${policy.advertisedVtxoTreeExpiry}`
|
|
2834
2896
|
);
|
|
2835
2897
|
}
|
|
@@ -2859,21 +2921,21 @@ function resolveCheckpointExitDelayPolicy(network, overrides) {
|
|
|
2859
2921
|
function assertValidServerUnrollScript(checkpointTapscript, policy) {
|
|
2860
2922
|
let script;
|
|
2861
2923
|
try {
|
|
2862
|
-
script =
|
|
2924
|
+
script = chunkOH2XLTXE_cjs.CSVMultisigTapscript.decode(base.hex.decode(checkpointTapscript));
|
|
2863
2925
|
} catch (e) {
|
|
2864
|
-
throw new
|
|
2926
|
+
throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
|
|
2865
2927
|
`checkpoint exit delay rejected: invalid checkpointTapscript from server (${e instanceof Error ? e.message : String(e)})`
|
|
2866
2928
|
);
|
|
2867
2929
|
}
|
|
2868
2930
|
if (policy.advertisedForfeitPubkey !== void 0) {
|
|
2869
2931
|
const { pubkeys } = script.params;
|
|
2870
2932
|
if (pubkeys.length !== 1) {
|
|
2871
|
-
throw new
|
|
2933
|
+
throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
|
|
2872
2934
|
`checkpoint exit delay rejected: checkpointTapscript must commit to exactly one pubkey, got ${pubkeys.length} [${pubkeys.map(base.hex.encode).join(", ")}]`
|
|
2873
2935
|
);
|
|
2874
2936
|
}
|
|
2875
2937
|
if (!utils_js.equalBytes(pubkeys[0], policy.advertisedForfeitPubkey)) {
|
|
2876
|
-
throw new
|
|
2938
|
+
throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
|
|
2877
2939
|
`checkpoint exit delay rejected: checkpointTapscript pubkey ${base.hex.encode(pubkeys[0])} does not match the advertised forfeitPubkey ${base.hex.encode(policy.advertisedForfeitPubkey)}`
|
|
2878
2940
|
);
|
|
2879
2941
|
}
|
|
@@ -2917,8 +2979,8 @@ function buildOffchainTx(inputs, outputs, serverUnrollScript) {
|
|
|
2917
2979
|
function buildVirtualTx(inputs, outputs) {
|
|
2918
2980
|
let lockTime = 0n;
|
|
2919
2981
|
for (const input of inputs) {
|
|
2920
|
-
const tapscript =
|
|
2921
|
-
if (
|
|
2982
|
+
const tapscript = chunkOH2XLTXE_cjs.decodeTapscript(chunkOH2XLTXE_cjs.scriptFromTapLeafScript(input.tapLeafScript));
|
|
2983
|
+
if (chunkOH2XLTXE_cjs.CLTVMultisigTapscript.is(tapscript)) {
|
|
2922
2984
|
if (lockTime !== 0n) {
|
|
2923
2985
|
if (isSeconds(lockTime) !== isSeconds(tapscript.params.absoluteTimelock)) {
|
|
2924
2986
|
throw new Error("cannot mix seconds and blocks locktime");
|
|
@@ -2929,7 +2991,7 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
2929
2991
|
}
|
|
2930
2992
|
}
|
|
2931
2993
|
}
|
|
2932
|
-
const tx = new
|
|
2994
|
+
const tx = new chunkOH2XLTXE_cjs.Transaction({
|
|
2933
2995
|
version: 3,
|
|
2934
2996
|
lockTime: Number(lockTime)
|
|
2935
2997
|
});
|
|
@@ -2939,12 +3001,12 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
2939
3001
|
index: input.vout,
|
|
2940
3002
|
sequence: lockTime ? btcSigner.DEFAULT_SEQUENCE - 1 : void 0,
|
|
2941
3003
|
witnessUtxo: {
|
|
2942
|
-
script:
|
|
3004
|
+
script: chunkOH2XLTXE_cjs.VtxoScript.decode(input.tapTree).pkScript,
|
|
2943
3005
|
amount: BigInt(input.value)
|
|
2944
3006
|
},
|
|
2945
3007
|
tapLeafScript: [input.tapLeafScript]
|
|
2946
3008
|
});
|
|
2947
|
-
|
|
3009
|
+
chunkOH2XLTXE_cjs.setArkPsbtField(tx, i, chunkOH2XLTXE_cjs.VtxoTaprootTree, input.tapTree);
|
|
2948
3010
|
}
|
|
2949
3011
|
for (const output of outputs) {
|
|
2950
3012
|
tx.addOutput(output);
|
|
@@ -2953,8 +3015,8 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
2953
3015
|
return tx;
|
|
2954
3016
|
}
|
|
2955
3017
|
function buildCheckpointTx(vtxo, serverUnrollScript) {
|
|
2956
|
-
const collaborativeClosure =
|
|
2957
|
-
const checkpointVtxoScript = new
|
|
3018
|
+
const collaborativeClosure = chunkOH2XLTXE_cjs.decodeTapscript(chunkOH2XLTXE_cjs.scriptFromTapLeafScript(vtxo.tapLeafScript));
|
|
3019
|
+
const checkpointVtxoScript = new chunkOH2XLTXE_cjs.VtxoScript([
|
|
2958
3020
|
serverUnrollScript.script,
|
|
2959
3021
|
collaborativeClosure.script
|
|
2960
3022
|
]);
|
|
@@ -3107,7 +3169,7 @@ function combineTapscriptSigs(signedTx, originalTx) {
|
|
|
3107
3169
|
}
|
|
3108
3170
|
function isValidArkAddress(address) {
|
|
3109
3171
|
try {
|
|
3110
|
-
|
|
3172
|
+
chunkOH2XLTXE_cjs.ArkAddress.decode(address);
|
|
3111
3173
|
return true;
|
|
3112
3174
|
} catch (e) {
|
|
3113
3175
|
return false;
|
|
@@ -3115,16 +3177,16 @@ function isValidArkAddress(address) {
|
|
|
3115
3177
|
}
|
|
3116
3178
|
function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, context) {
|
|
3117
3179
|
if (serverCheckpointTxs.length !== expectedCheckpoints.length) {
|
|
3118
|
-
throw new
|
|
3180
|
+
throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
|
|
3119
3181
|
`${context} returned ${serverCheckpointTxs.length} checkpoints, expected ${expectedCheckpoints.length}`
|
|
3120
3182
|
);
|
|
3121
3183
|
}
|
|
3122
3184
|
const byTxid = new Map(expectedCheckpoints.map((c) => [c.id, c]));
|
|
3123
3185
|
return serverCheckpointTxs.map((encoded, index) => {
|
|
3124
|
-
const server =
|
|
3186
|
+
const server = chunkOH2XLTXE_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
|
|
3125
3187
|
const local = byTxid.get(server.id);
|
|
3126
3188
|
if (!local) {
|
|
3127
|
-
throw new
|
|
3189
|
+
throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
|
|
3128
3190
|
`${context} checkpoint ${index} txid ${server.id} does not match any submitted checkpoint`
|
|
3129
3191
|
);
|
|
3130
3192
|
}
|
|
@@ -3134,14 +3196,14 @@ function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, contex
|
|
|
3134
3196
|
}
|
|
3135
3197
|
function assertSubmittedArkTxid(response, signedArkTx, context) {
|
|
3136
3198
|
if (response.arkTxid !== signedArkTx.id) {
|
|
3137
|
-
throw new
|
|
3199
|
+
throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
|
|
3138
3200
|
`${context} returned ark txid ${response.arkTxid}, expected ${signedArkTx.id}`
|
|
3139
3201
|
);
|
|
3140
3202
|
}
|
|
3141
3203
|
if (response.finalArkTx === void 0) return;
|
|
3142
|
-
const finalTxid =
|
|
3204
|
+
const finalTxid = chunkOH2XLTXE_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx)).id;
|
|
3143
3205
|
if (finalTxid !== signedArkTx.id) {
|
|
3144
|
-
throw new
|
|
3206
|
+
throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
|
|
3145
3207
|
`${context} returned final ark tx ${finalTxid}, expected ${signedArkTx.id}`
|
|
3146
3208
|
);
|
|
3147
3209
|
}
|
|
@@ -3160,10 +3222,10 @@ function assertServerSignedLeaf(serverTx, localTx, inputIndex, serverPubkeyHex,
|
|
|
3160
3222
|
[serverPubkeyHex],
|
|
3161
3223
|
void 0,
|
|
3162
3224
|
void 0,
|
|
3163
|
-
payment_js.tapLeafHash(
|
|
3225
|
+
payment_js.tapLeafHash(chunkOH2XLTXE_cjs.scriptFromTapLeafScript(leaf))
|
|
3164
3226
|
);
|
|
3165
3227
|
} catch (error) {
|
|
3166
|
-
throw new
|
|
3228
|
+
throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
|
|
3167
3229
|
`${context}: input ${inputIndex} is not signed by the server on the leaf being spent (${error instanceof Error ? error.message : String(error)})`
|
|
3168
3230
|
);
|
|
3169
3231
|
}
|
|
@@ -3172,20 +3234,20 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
|
|
|
3172
3234
|
const byOutpoint = new Map(inputs.map((input) => [`${input.txid}:${input.vout}`, input]));
|
|
3173
3235
|
for (const [index, checkpoint] of checkpoints.entries()) {
|
|
3174
3236
|
if (checkpoint.inputsLength !== 1) {
|
|
3175
|
-
throw new
|
|
3237
|
+
throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
|
|
3176
3238
|
`${context}: checkpoint ${index} spends ${checkpoint.inputsLength} inputs, expected 1`
|
|
3177
3239
|
);
|
|
3178
3240
|
}
|
|
3179
3241
|
const spent = checkpoint.getInput(0);
|
|
3180
3242
|
if (!spent.txid || spent.index === void 0) {
|
|
3181
|
-
throw new
|
|
3243
|
+
throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
|
|
3182
3244
|
`${context}: checkpoint ${index} has no input outpoint`
|
|
3183
3245
|
);
|
|
3184
3246
|
}
|
|
3185
3247
|
const outpoint = `${base.hex.encode(spent.txid)}:${spent.index}`;
|
|
3186
3248
|
const input = byOutpoint.get(outpoint);
|
|
3187
3249
|
if (!input) {
|
|
3188
|
-
throw new
|
|
3250
|
+
throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
|
|
3189
3251
|
`${context}: checkpoint ${index} spends ${outpoint}, which is not one of the requested virtual outputs`
|
|
3190
3252
|
);
|
|
3191
3253
|
}
|
|
@@ -3193,7 +3255,7 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
|
|
|
3193
3255
|
(unroll) => buildCheckpointTx(input, unroll).tx.id === checkpoint.id
|
|
3194
3256
|
);
|
|
3195
3257
|
if (!rebuilt) {
|
|
3196
|
-
throw new
|
|
3258
|
+
throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
|
|
3197
3259
|
`${context}: checkpoint ${index} txid ${checkpoint.id} differs from the checkpoint built locally for ${outpoint}`
|
|
3198
3260
|
);
|
|
3199
3261
|
}
|
|
@@ -3220,11 +3282,11 @@ async function submitOffchainTx(provider, offchainTx, signer, hooks, options) {
|
|
|
3220
3282
|
const verify = options?.verifyServerSignatures;
|
|
3221
3283
|
if (verify) {
|
|
3222
3284
|
if (response.finalArkTx === void 0) {
|
|
3223
|
-
throw new
|
|
3285
|
+
throw new chunkOH2XLTXE_cjs.ServerResponseMismatchError(
|
|
3224
3286
|
"submitTx: server returned no final ark tx to verify its signatures against"
|
|
3225
3287
|
);
|
|
3226
3288
|
}
|
|
3227
|
-
const finalArkTx =
|
|
3289
|
+
const finalArkTx = chunkOH2XLTXE_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx));
|
|
3228
3290
|
const serverPubkeyHex = base.hex.encode(
|
|
3229
3291
|
verify.serverPubkey.length === 33 ? verify.serverPubkey.subarray(1) : verify.serverPubkey
|
|
3230
3292
|
);
|
|
@@ -3283,12 +3345,12 @@ function claimWithPreimageIdentity(identity, preimage) {
|
|
|
3283
3345
|
return {
|
|
3284
3346
|
...identity,
|
|
3285
3347
|
sign: async (tx, inputIndexes) => {
|
|
3286
|
-
const signed =
|
|
3348
|
+
const signed = chunkOH2XLTXE_cjs.Transaction.fromPSBT(
|
|
3287
3349
|
(await identity.sign(tx.clone(), inputIndexes)).toPSBT()
|
|
3288
3350
|
);
|
|
3289
3351
|
const indexes = inputIndexes ?? Array.from({ length: signed.inputsLength }, (_, i) => i);
|
|
3290
3352
|
for (const index of indexes) {
|
|
3291
|
-
|
|
3353
|
+
chunkOH2XLTXE_cjs.setArkPsbtField(signed, index, chunkOH2XLTXE_cjs.ConditionWitness, [preimage]);
|
|
3292
3354
|
}
|
|
3293
3355
|
return signed;
|
|
3294
3356
|
}
|
|
@@ -3480,7 +3542,7 @@ function extendCoinWithTapscript(boardingTapscript, utxo) {
|
|
|
3480
3542
|
};
|
|
3481
3543
|
}
|
|
3482
3544
|
function deriveContractTapscripts(contract) {
|
|
3483
|
-
const handler =
|
|
3545
|
+
const handler = chunkG53HASDV_cjs.contractHandlers.get(contract.type);
|
|
3484
3546
|
if (!handler) {
|
|
3485
3547
|
throw new Error(`No handler for contract type '${contract.type}'`);
|
|
3486
3548
|
}
|
|
@@ -3551,7 +3613,7 @@ function getRandomId() {
|
|
|
3551
3613
|
}
|
|
3552
3614
|
function isValidArkAddress2(address) {
|
|
3553
3615
|
try {
|
|
3554
|
-
|
|
3616
|
+
chunkOH2XLTXE_cjs.ArkAddress.decode(address);
|
|
3555
3617
|
return true;
|
|
3556
3618
|
} catch (e) {
|
|
3557
3619
|
return false;
|
|
@@ -3576,12 +3638,27 @@ function assertRecipientArkAddress(encoded, address, context) {
|
|
|
3576
3638
|
);
|
|
3577
3639
|
}
|
|
3578
3640
|
}
|
|
3641
|
+
function assertTapTreeDerivesAddress(encoded, tapTree, address) {
|
|
3642
|
+
let derived;
|
|
3643
|
+
try {
|
|
3644
|
+
derived = chunkOH2XLTXE_cjs.VtxoScript.decode(tapTree).pkScript;
|
|
3645
|
+
} catch (e) {
|
|
3646
|
+
throw new Error(
|
|
3647
|
+
`Invalid tapTree for ${encoded}: ${e instanceof Error ? e.message : String(e)}`
|
|
3648
|
+
);
|
|
3649
|
+
}
|
|
3650
|
+
if (base.hex.encode(derived) !== base.hex.encode(address.pkScript)) {
|
|
3651
|
+
throw new Error(
|
|
3652
|
+
`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.`
|
|
3653
|
+
);
|
|
3654
|
+
}
|
|
3655
|
+
}
|
|
3579
3656
|
function validateRecipients(recipients, dustAmount, context) {
|
|
3580
3657
|
const validatedRecipients = [];
|
|
3581
3658
|
for (const recipient of recipients) {
|
|
3582
3659
|
let address;
|
|
3583
3660
|
try {
|
|
3584
|
-
address =
|
|
3661
|
+
address = chunkOH2XLTXE_cjs.ArkAddress.decode(recipient.address);
|
|
3585
3662
|
} catch (e) {
|
|
3586
3663
|
throw new Error(`Invalid Arkade address: ${recipient.address}`);
|
|
3587
3664
|
}
|
|
@@ -3590,11 +3667,15 @@ function validateRecipients(recipients, dustAmount, context) {
|
|
|
3590
3667
|
if (amount <= 0) {
|
|
3591
3668
|
throw new Error("Amount must be positive");
|
|
3592
3669
|
}
|
|
3670
|
+
if (recipient.tapTree) {
|
|
3671
|
+
assertTapTreeDerivesAddress(recipient.address, recipient.tapTree, address);
|
|
3672
|
+
}
|
|
3593
3673
|
validatedRecipients.push({
|
|
3594
3674
|
address: recipient.address,
|
|
3595
3675
|
assets: recipient.assets ?? [],
|
|
3596
3676
|
amount,
|
|
3597
|
-
script: amount < dustAmount ? address.subdustPkScript : address.pkScript
|
|
3677
|
+
script: amount < dustAmount ? address.subdustPkScript : address.pkScript,
|
|
3678
|
+
tapTree: recipient.tapTree
|
|
3598
3679
|
});
|
|
3599
3680
|
}
|
|
3600
3681
|
return validatedRecipients;
|
|
@@ -3602,7 +3683,7 @@ function validateRecipients(recipients, dustAmount, context) {
|
|
|
3602
3683
|
|
|
3603
3684
|
// src/contracts/spendability.ts
|
|
3604
3685
|
function isContractGenericallySpendable(contract) {
|
|
3605
|
-
return
|
|
3686
|
+
return chunkG53HASDV_cjs.contractHandlers.get(contract.type)?.isGenericallySpendable?.(contract) === true;
|
|
3606
3687
|
}
|
|
3607
3688
|
function gatedContracts(contracts) {
|
|
3608
3689
|
const gated = /* @__PURE__ */ new Map();
|
|
@@ -3648,7 +3729,7 @@ function selectPendingRecoveryOutpoints(contractsWithVtxos, signerSet, nowSecond
|
|
|
3648
3729
|
continue;
|
|
3649
3730
|
}
|
|
3650
3731
|
for (const v of vtxos) {
|
|
3651
|
-
if (!
|
|
3732
|
+
if (!chunkOH2XLTXE_cjs.hasTerminalSpend(v) && !v.isSwept) out.add(`${v.txid}:${v.vout}`);
|
|
3652
3733
|
}
|
|
3653
3734
|
}
|
|
3654
3735
|
return out;
|
|
@@ -3681,10 +3762,10 @@ function byValueDescending(vtxos) {
|
|
|
3681
3762
|
return [...vtxos].sort((a, b) => b.value - a.value);
|
|
3682
3763
|
}
|
|
3683
3764
|
async function fetchTimeHeight(wallet) {
|
|
3684
|
-
return
|
|
3765
|
+
return chunkOH2XLTXE_cjs.resolveTimeHeight(wallet.onchainProvider);
|
|
3685
3766
|
}
|
|
3686
3767
|
function canMigrateBySend(vtxo, now) {
|
|
3687
|
-
if (!
|
|
3768
|
+
if (!chunkOH2XLTXE_cjs.canSpendOffchain(vtxo, now)) return false;
|
|
3688
3769
|
return vtxo.expiresAt !== void 0 || vtxo.expiresAtHeight !== void 0;
|
|
3689
3770
|
}
|
|
3690
3771
|
function byExpiryAscending(vtxos, now) {
|
|
@@ -3692,7 +3773,7 @@ function byExpiryAscending(vtxos, now) {
|
|
|
3692
3773
|
if (vtxo.isSwept) return -Infinity;
|
|
3693
3774
|
if (vtxo.expiresAt !== void 0) return vtxo.expiresAt.getTime();
|
|
3694
3775
|
if (vtxo.expiresAtHeight !== void 0) {
|
|
3695
|
-
return
|
|
3776
|
+
return chunkOH2XLTXE_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
|
|
3696
3777
|
}
|
|
3697
3778
|
return Infinity;
|
|
3698
3779
|
};
|
|
@@ -3719,7 +3800,7 @@ function priceSettlementInputs(vtxos, estimator) {
|
|
|
3719
3800
|
const payable = [];
|
|
3720
3801
|
const net = /* @__PURE__ */ new Map();
|
|
3721
3802
|
for (const vtxo of vtxos) {
|
|
3722
|
-
const inputFee = estimator.evalOffchainInput(
|
|
3803
|
+
const inputFee = estimator.evalOffchainInput(chunkOH2XLTXE_cjs.toOffchainInputFeeParams(vtxo));
|
|
3723
3804
|
if (inputFee.satoshis >= vtxo.value) {
|
|
3724
3805
|
continue;
|
|
3725
3806
|
}
|
|
@@ -3745,7 +3826,7 @@ function deductOffchainOutputFee(subtotal, estimator, arkAddress) {
|
|
|
3745
3826
|
}
|
|
3746
3827
|
const outputFee = estimator.evalOffchainOutput({
|
|
3747
3828
|
amount: subtotal,
|
|
3748
|
-
script: base.hex.encode(
|
|
3829
|
+
script: base.hex.encode(chunkOH2XLTXE_cjs.ArkAddress.decode(arkAddress).pkScript)
|
|
3749
3830
|
});
|
|
3750
3831
|
return subtotal - BigInt(outputFee.satoshis);
|
|
3751
3832
|
}
|
|
@@ -3763,10 +3844,10 @@ var DEFAULT_SETTLEMENT_CONFIG = {
|
|
|
3763
3844
|
};
|
|
3764
3845
|
function getRecoverableVtxos(vtxos, dustAmount, now) {
|
|
3765
3846
|
return vtxos.filter((vtxo) => {
|
|
3766
|
-
if (
|
|
3847
|
+
if (chunkOH2XLTXE_cjs.canRecoverOnchain(vtxo, now)) {
|
|
3767
3848
|
return true;
|
|
3768
3849
|
}
|
|
3769
|
-
if (
|
|
3850
|
+
if (chunkOH2XLTXE_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
|
|
3770
3851
|
return true;
|
|
3771
3852
|
}
|
|
3772
3853
|
return false;
|
|
@@ -3797,7 +3878,7 @@ function getRecoverableWithSubdust(vtxos, dustAmount, now) {
|
|
|
3797
3878
|
}
|
|
3798
3879
|
function isVtxoExpiringSoon(vtxo, thresholdMs) {
|
|
3799
3880
|
const realThresholdMs = thresholdMs <= 100 ? DEFAULT_THRESHOLD_MS : thresholdMs;
|
|
3800
|
-
const expiresAt =
|
|
3881
|
+
const expiresAt = chunkOH2XLTXE_cjs.normalizeVtxo(vtxo).expiresAt;
|
|
3801
3882
|
if (expiresAt === void 0) return false;
|
|
3802
3883
|
const now = Date.now();
|
|
3803
3884
|
const batchExpiry = expiresAt.getTime();
|
|
@@ -3806,7 +3887,7 @@ function isVtxoExpiringSoon(vtxo, thresholdMs) {
|
|
|
3806
3887
|
}
|
|
3807
3888
|
function getExpiringAndRecoverableVtxos(vtxos, thresholdMs, dustAmount, now) {
|
|
3808
3889
|
return vtxos.filter(
|
|
3809
|
-
(vtxo) => isVtxoExpiringSoon(vtxo, thresholdMs) ||
|
|
3890
|
+
(vtxo) => isVtxoExpiringSoon(vtxo, thresholdMs) || chunkOH2XLTXE_cjs.canRecoverOnchain(vtxo, now) || isSubdust(vtxo, dustAmount)
|
|
3810
3891
|
);
|
|
3811
3892
|
}
|
|
3812
3893
|
function isMigrationCapable(wallet) {
|
|
@@ -4405,11 +4486,11 @@ var VtxoManager = class _VtxoManager {
|
|
|
4405
4486
|
`Sweep not economical: output ${outputAmount} sats after ${fee} sats fee is below dust (${dustAmount} sats)`
|
|
4406
4487
|
);
|
|
4407
4488
|
}
|
|
4408
|
-
const tx = new
|
|
4489
|
+
const tx = new chunkOH2XLTXE_cjs.Transaction();
|
|
4409
4490
|
for (const utxo of expiredUtxos) {
|
|
4410
|
-
const utxoScript =
|
|
4491
|
+
const utxoScript = chunkOH2XLTXE_cjs.VtxoScript.decode(utxo.tapTree);
|
|
4411
4492
|
const utxoExitLeaf = utxoScript.leaves.find(
|
|
4412
|
-
(leaf) =>
|
|
4493
|
+
(leaf) => chunkOH2XLTXE_cjs.CSVMultisigTapscript.isScriptValid(chunkOH2XLTXE_cjs.scriptFromTapLeafScript(leaf)) === true
|
|
4413
4494
|
);
|
|
4414
4495
|
if (!utxoExitLeaf) {
|
|
4415
4496
|
throw new Error(
|
|
@@ -4424,7 +4505,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4424
4505
|
amount: BigInt(utxo.value)
|
|
4425
4506
|
},
|
|
4426
4507
|
tapLeafScript: [utxoExitLeaf],
|
|
4427
|
-
sequence:
|
|
4508
|
+
sequence: chunkOH2XLTXE_cjs.getSequence(utxoExitLeaf)
|
|
4428
4509
|
});
|
|
4429
4510
|
}
|
|
4430
4511
|
tx.addOutputAddress(boardingAddress, outputAmount, this.getNetwork());
|
|
@@ -4658,8 +4739,8 @@ var VtxoManager = class _VtxoManager {
|
|
|
4658
4739
|
if (!serverPubKey) continue;
|
|
4659
4740
|
const cls = classifyAgainstSignerSet(serverPubKey, signerSet, nowSeconds);
|
|
4660
4741
|
if (cls.status === "CURRENT") continue;
|
|
4661
|
-
const recoverable = vtxos.filter((v) => v.isSwept && !
|
|
4662
|
-
const spendable = vtxos.filter((v) => !
|
|
4742
|
+
const recoverable = vtxos.filter((v) => v.isSwept && !chunkOH2XLTXE_cjs.hasTerminalSpend(v));
|
|
4743
|
+
const spendable = vtxos.filter((v) => !chunkOH2XLTXE_cjs.hasTerminalSpend(v) && !v.isSwept);
|
|
4663
4744
|
const value = spendable.reduce((sum, v) => sum + v.value, 0);
|
|
4664
4745
|
let recoverableCount = 0;
|
|
4665
4746
|
let recoverableValue = 0;
|
|
@@ -4672,7 +4753,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4672
4753
|
awaitingSweepCount = spendable.length;
|
|
4673
4754
|
awaitingSweepValue = value;
|
|
4674
4755
|
for (const v of spendable) {
|
|
4675
|
-
const exp =
|
|
4756
|
+
const exp = chunkOH2XLTXE_cjs.toBatchExpiry(v);
|
|
4676
4757
|
if (exp !== void 0 && (nextSweepEta === void 0 || exp < nextSweepEta)) {
|
|
4677
4758
|
nextSweepEta = exp;
|
|
4678
4759
|
}
|
|
@@ -4933,7 +5014,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4933
5014
|
/** Decodes the boarding tapscript exit path to extract the CSV timelock. */
|
|
4934
5015
|
getBoardingTimelock() {
|
|
4935
5016
|
const wallet = this.getSweepWallet();
|
|
4936
|
-
const exitScript =
|
|
5017
|
+
const exitScript = chunkOH2XLTXE_cjs.CSVMultisigTapscript.decode(
|
|
4937
5018
|
base.hex.decode(wallet.boardingTapscript.exitScript)
|
|
4938
5019
|
);
|
|
4939
5020
|
return exitScript.params.timelock;
|
|
@@ -5064,8 +5145,8 @@ var VtxoManager = class _VtxoManager {
|
|
|
5064
5145
|
* or doesn't carry the metadata.
|
|
5065
5146
|
*/
|
|
5066
5147
|
extractSpentOutpoint(error) {
|
|
5067
|
-
const ark =
|
|
5068
|
-
if (!
|
|
5148
|
+
const ark = chunkOH2XLTXE_cjs.maybeArkError(error);
|
|
5149
|
+
if (!chunkOH2XLTXE_cjs.isArkError(ark, chunkOH2XLTXE_cjs.ArkErrorName.VTXO_ALREADY_SPENT)) return void 0;
|
|
5069
5150
|
const raw = ark.metadata?.vtxo_outpoint;
|
|
5070
5151
|
if (typeof raw !== "string") return void 0;
|
|
5071
5152
|
const [txid, voutStr] = raw.split(":");
|
|
@@ -5255,7 +5336,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5255
5336
|
if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
|
|
5256
5337
|
break;
|
|
5257
5338
|
}
|
|
5258
|
-
const inputFee = estimator.evalOffchainInput(
|
|
5339
|
+
const inputFee = estimator.evalOffchainInput(chunkOH2XLTXE_cjs.toOffchainInputFeeParams(v));
|
|
5259
5340
|
if (inputFee.satoshis >= v.value) {
|
|
5260
5341
|
continue;
|
|
5261
5342
|
}
|
|
@@ -5275,7 +5356,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5275
5356
|
const arkAddress = await this.wallet.getAddress();
|
|
5276
5357
|
const outputFee = estimator.evalOffchainOutput({
|
|
5277
5358
|
amount: totalAmount,
|
|
5278
|
-
script: base.hex.encode(
|
|
5359
|
+
script: base.hex.encode(chunkOH2XLTXE_cjs.ArkAddress.decode(arkAddress).pkScript)
|
|
5279
5360
|
});
|
|
5280
5361
|
totalAmount -= BigInt(outputFee.satoshis);
|
|
5281
5362
|
if (totalAmount < dustAmount) return;
|
|
@@ -5355,7 +5436,7 @@ var ArkNote = class _ArkNote {
|
|
|
5355
5436
|
this.value = value;
|
|
5356
5437
|
this.HRP = HRP;
|
|
5357
5438
|
const preimageHash = utils_js.sha256(this.preimage);
|
|
5358
|
-
this.vtxoScript = new
|
|
5439
|
+
this.vtxoScript = new chunkOH2XLTXE_cjs.VtxoScript([noteTapscript(preimageHash)]);
|
|
5359
5440
|
const leaf = this.vtxoScript.leaves[0];
|
|
5360
5441
|
this.txid = base.hex.encode(new Uint8Array(preimageHash).reverse());
|
|
5361
5442
|
this.tapTree = this.vtxoScript.encode();
|
|
@@ -5522,7 +5603,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
5522
5603
|
const privateKey = data.slice(1, 33);
|
|
5523
5604
|
const serverPubKey = data.slice(33, 65);
|
|
5524
5605
|
const sequence = new DataView(data.buffer, data.byteOffset + 65, 4).getUint32(0, false);
|
|
5525
|
-
const csvTimelock =
|
|
5606
|
+
const csvTimelock = chunkOH2XLTXE_cjs.sequenceToTimelock(sequence);
|
|
5526
5607
|
return new _ArkadeCash(privateKey, serverPubKey, csvTimelock, decoded.prefix);
|
|
5527
5608
|
}
|
|
5528
5609
|
toString() {
|
|
@@ -5530,7 +5611,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
5530
5611
|
data[0] = _ArkadeCash.Version;
|
|
5531
5612
|
data.set(this._privateKey, 1);
|
|
5532
5613
|
data.set(this._serverPubKey, 33);
|
|
5533
|
-
const sequence =
|
|
5614
|
+
const sequence = chunkOH2XLTXE_cjs.timelockToSequence(this.csvTimelock);
|
|
5534
5615
|
new DataView(data.buffer, data.byteOffset + 65, 4).setUint32(0, sequence, false);
|
|
5535
5616
|
const words = base.bech32m.toWords(data);
|
|
5536
5617
|
return base.bech32m.encode(this.hrp, words, 1023);
|
|
@@ -5539,7 +5620,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
5539
5620
|
return SingleKey.fromPrivateKey(this._privateKey);
|
|
5540
5621
|
}
|
|
5541
5622
|
get vtxoScript() {
|
|
5542
|
-
return new
|
|
5623
|
+
return new chunkG53HASDV_cjs.DefaultVtxo.Script({
|
|
5543
5624
|
pubKey: this._publicKey,
|
|
5544
5625
|
serverPubKey: this._serverPubKey,
|
|
5545
5626
|
csvTimelock: this.csvTimelock
|
|
@@ -5800,7 +5881,7 @@ async function captureExitBranch(params) {
|
|
|
5800
5881
|
const nonCommitment = ordered.filter((c) => chainTxTypeToChainedExit(c.type) !== 1 /* Commitment */).map((c) => c.txid);
|
|
5801
5882
|
if (nonCommitment.length > 0) {
|
|
5802
5883
|
for (const psbt of await resolver.getVirtualTxs(nonCommitment)) {
|
|
5803
|
-
psbtByTxid.set(
|
|
5884
|
+
psbtByTxid.set(chunkOH2XLTXE_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
5804
5885
|
}
|
|
5805
5886
|
}
|
|
5806
5887
|
}
|
|
@@ -5843,10 +5924,10 @@ var IndexerExitDataSource = class {
|
|
|
5843
5924
|
while (hasMore) {
|
|
5844
5925
|
const { chain: page, page: meta } = await this.indexer.getVtxoChain(
|
|
5845
5926
|
{ txid: vtxo.txid, vout: vtxo.vout },
|
|
5846
|
-
{ pageIndex, pageSize:
|
|
5927
|
+
{ pageIndex, pageSize: chunkOH2XLTXE_cjs.DEFAULT_PAGE_SIZE }
|
|
5847
5928
|
);
|
|
5848
5929
|
chain.push(...page);
|
|
5849
|
-
hasMore = meta ? page.length ===
|
|
5930
|
+
hasMore = meta ? page.length === chunkOH2XLTXE_cjs.DEFAULT_PAGE_SIZE : false;
|
|
5850
5931
|
pageIndex++;
|
|
5851
5932
|
}
|
|
5852
5933
|
return chain;
|
|
@@ -5858,12 +5939,12 @@ var IndexerExitDataSource = class {
|
|
|
5858
5939
|
while (hasMore) {
|
|
5859
5940
|
const { txs, page } = await this.indexer.getVirtualTxs(txids, {
|
|
5860
5941
|
pageIndex,
|
|
5861
|
-
pageSize:
|
|
5942
|
+
pageSize: chunkOH2XLTXE_cjs.DEFAULT_PAGE_SIZE
|
|
5862
5943
|
});
|
|
5863
5944
|
for (const psbt of txs) {
|
|
5864
|
-
out.set(
|
|
5945
|
+
out.set(chunkOH2XLTXE_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
5865
5946
|
}
|
|
5866
|
-
hasMore = page ? txs.length ===
|
|
5947
|
+
hasMore = page ? txs.length === chunkOH2XLTXE_cjs.DEFAULT_PAGE_SIZE : false;
|
|
5867
5948
|
pageIndex++;
|
|
5868
5949
|
}
|
|
5869
5950
|
return out;
|
|
@@ -5884,7 +5965,7 @@ function chainedTxTypeToChainTxType(t) {
|
|
|
5884
5965
|
}
|
|
5885
5966
|
}
|
|
5886
5967
|
function psbtInputTxids(psbtBase64) {
|
|
5887
|
-
const tx =
|
|
5968
|
+
const tx = chunkOH2XLTXE_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
|
|
5888
5969
|
const ids = [];
|
|
5889
5970
|
for (let i = 0; i < tx.inputsLength; i++) {
|
|
5890
5971
|
const txid = tx.getInput(i).txid;
|
|
@@ -6237,10 +6318,10 @@ async function resolveArkInfo(arkProvider, walletRepository) {
|
|
|
6237
6318
|
try {
|
|
6238
6319
|
info = await arkProvider.getInfo();
|
|
6239
6320
|
} catch (err) {
|
|
6240
|
-
if (!
|
|
6321
|
+
if (!chunkOH2XLTXE_cjs.isRetryableProviderError(err)) throw err;
|
|
6241
6322
|
const snapshot = await loadArkInfoSnapshot(walletRepository);
|
|
6242
6323
|
if (!snapshot) {
|
|
6243
|
-
throw new
|
|
6324
|
+
throw new chunkOH2XLTXE_cjs.ProviderUnavailableError(
|
|
6244
6325
|
"Arkade server info is unavailable and no cached snapshot exists",
|
|
6245
6326
|
{ cause: err }
|
|
6246
6327
|
);
|
|
@@ -6623,7 +6704,7 @@ function collectArkTxidsNeedingCreatedAt(vtxos) {
|
|
|
6623
6704
|
return [...txids];
|
|
6624
6705
|
}
|
|
6625
6706
|
async function buildTransactionHistory(vtxos, allBoardingTxs, commitmentsToIgnore, resolveTxCreatedAt) {
|
|
6626
|
-
const fromOldestVtxo = vtxos.map(
|
|
6707
|
+
const fromOldestVtxo = vtxos.map(chunkOH2XLTXE_cjs.normalizeVtxo).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
|
|
6627
6708
|
const txidsNeedingCreatedAt = resolveTxCreatedAt ? collectArkTxidsNeedingCreatedAt(fromOldestVtxo) : [];
|
|
6628
6709
|
const resolvedCreatedAt = resolveTxCreatedAt && txidsNeedingCreatedAt.length > 0 ? await resolveTxCreatedAt(txidsNeedingCreatedAt) : /* @__PURE__ */ new Map();
|
|
6629
6710
|
const unmatchedSettledBoardingTxs = allBoardingTxs.filter(isSettledBoardingReceive).sort((a, b) => a.createdAt - b.createdAt);
|
|
@@ -6787,7 +6868,7 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6787
6868
|
const virtualCoins = await this.wallet.getSpendableVtxos({
|
|
6788
6869
|
withRecoverable: false
|
|
6789
6870
|
});
|
|
6790
|
-
const controlAssetRef = params.controlAssetId ?
|
|
6871
|
+
const controlAssetRef = params.controlAssetId ? chunkI6EDUE75_cjs.AssetRef.fromId(chunkI6EDUE75_cjs.AssetId.fromString(params.controlAssetId)) : null;
|
|
6791
6872
|
const coinSelection = selectVirtualCoins(virtualCoins, Number(this.wallet.dustAmount));
|
|
6792
6873
|
let totalBtcSelected = 0n;
|
|
6793
6874
|
const assetChanges = /* @__PURE__ */ new Map();
|
|
@@ -6800,8 +6881,8 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6800
6881
|
}
|
|
6801
6882
|
}
|
|
6802
6883
|
const groups = [];
|
|
6803
|
-
const issuedAssetOutput =
|
|
6804
|
-
const issuedAssetGroup =
|
|
6884
|
+
const issuedAssetOutput = chunkI6EDUE75_cjs.AssetOutput.create(0, params.amount);
|
|
6885
|
+
const issuedAssetGroup = chunkI6EDUE75_cjs.AssetGroup.create(
|
|
6805
6886
|
null,
|
|
6806
6887
|
controlAssetRef,
|
|
6807
6888
|
[],
|
|
@@ -6816,28 +6897,28 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6816
6897
|
for (const [inputIndex, assets] of assetInputs) {
|
|
6817
6898
|
for (const asset of assets) {
|
|
6818
6899
|
if (asset.assetId !== assetId) continue;
|
|
6819
|
-
changeInputs.push(
|
|
6900
|
+
changeInputs.push(chunkI6EDUE75_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
6820
6901
|
}
|
|
6821
6902
|
}
|
|
6822
6903
|
groups.push(
|
|
6823
|
-
|
|
6824
|
-
|
|
6904
|
+
chunkI6EDUE75_cjs.AssetGroup.create(
|
|
6905
|
+
chunkI6EDUE75_cjs.AssetId.fromString(assetId),
|
|
6825
6906
|
null,
|
|
6826
6907
|
changeInputs,
|
|
6827
|
-
[
|
|
6908
|
+
[chunkI6EDUE75_cjs.AssetOutput.create(0, amount)],
|
|
6828
6909
|
[]
|
|
6829
6910
|
)
|
|
6830
6911
|
);
|
|
6831
6912
|
}
|
|
6832
6913
|
}
|
|
6833
6914
|
const address = await this.wallet.getAddress();
|
|
6834
|
-
const outputAddress =
|
|
6915
|
+
const outputAddress = chunkOH2XLTXE_cjs.ArkAddress.decode(address);
|
|
6835
6916
|
const outputs = [
|
|
6836
6917
|
{
|
|
6837
6918
|
script: outputAddress.pkScript,
|
|
6838
6919
|
amount: BigInt(totalBtcSelected)
|
|
6839
6920
|
},
|
|
6840
|
-
Extension.create([
|
|
6921
|
+
Extension.create([chunkI6EDUE75_cjs.Packet.create(groups)]).txOut()
|
|
6841
6922
|
];
|
|
6842
6923
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(
|
|
6843
6924
|
coinSelection.inputs,
|
|
@@ -6845,7 +6926,7 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6845
6926
|
);
|
|
6846
6927
|
return {
|
|
6847
6928
|
arkTxId: arkTxid,
|
|
6848
|
-
assetId:
|
|
6929
|
+
assetId: chunkI6EDUE75_cjs.AssetId.create(arkTxid, 0).toString()
|
|
6849
6930
|
};
|
|
6850
6931
|
}
|
|
6851
6932
|
/**
|
|
@@ -6917,16 +6998,16 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6917
6998
|
for (const [inputIndex, assets] of assetInputs) {
|
|
6918
6999
|
for (const asset of assets) {
|
|
6919
7000
|
if (asset.assetId !== params.assetId) continue;
|
|
6920
|
-
reissueInputs.push(
|
|
7001
|
+
reissueInputs.push(chunkI6EDUE75_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
6921
7002
|
}
|
|
6922
7003
|
}
|
|
6923
7004
|
const totalAssetAmount = assetToReissueAmount + params.amount;
|
|
6924
|
-
const reissueAssetIdObj =
|
|
6925
|
-
const reissueAssetGroup =
|
|
7005
|
+
const reissueAssetIdObj = chunkI6EDUE75_cjs.AssetId.fromString(params.assetId);
|
|
7006
|
+
const reissueAssetGroup = chunkI6EDUE75_cjs.AssetGroup.create(
|
|
6926
7007
|
reissueAssetIdObj,
|
|
6927
7008
|
null,
|
|
6928
7009
|
reissueInputs,
|
|
6929
|
-
[
|
|
7010
|
+
[chunkI6EDUE75_cjs.AssetOutput.create(0, totalAssetAmount)],
|
|
6930
7011
|
[]
|
|
6931
7012
|
);
|
|
6932
7013
|
const groups = [reissueAssetGroup];
|
|
@@ -6935,27 +7016,27 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6935
7016
|
for (const [inputIndex, assets] of assetInputs) {
|
|
6936
7017
|
for (const asset of assets) {
|
|
6937
7018
|
if (asset.assetId !== assetId) continue;
|
|
6938
|
-
changeInputs.push(
|
|
7019
|
+
changeInputs.push(chunkI6EDUE75_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
6939
7020
|
}
|
|
6940
7021
|
}
|
|
6941
7022
|
groups.push(
|
|
6942
|
-
|
|
6943
|
-
|
|
7023
|
+
chunkI6EDUE75_cjs.AssetGroup.create(
|
|
7024
|
+
chunkI6EDUE75_cjs.AssetId.fromString(assetId),
|
|
6944
7025
|
null,
|
|
6945
7026
|
changeInputs,
|
|
6946
|
-
[
|
|
7027
|
+
[chunkI6EDUE75_cjs.AssetOutput.create(0, amount)],
|
|
6947
7028
|
[]
|
|
6948
7029
|
)
|
|
6949
7030
|
);
|
|
6950
7031
|
}
|
|
6951
7032
|
const address = await this.wallet.getAddress();
|
|
6952
|
-
const outputAddress =
|
|
7033
|
+
const outputAddress = chunkOH2XLTXE_cjs.ArkAddress.decode(address);
|
|
6953
7034
|
const outputs = [
|
|
6954
7035
|
{
|
|
6955
7036
|
script: outputAddress.pkScript,
|
|
6956
7037
|
amount: BigInt(totalBtcSelected)
|
|
6957
7038
|
},
|
|
6958
|
-
Extension.create([
|
|
7039
|
+
Extension.create([chunkI6EDUE75_cjs.Packet.create(groups)]).txOut()
|
|
6959
7040
|
];
|
|
6960
7041
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
|
|
6961
7042
|
return arkTxid;
|
|
@@ -7022,27 +7103,27 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7022
7103
|
for (const [inputIndex, assets] of assetInputs) {
|
|
7023
7104
|
for (const asset of assets) {
|
|
7024
7105
|
if (asset.assetId !== assetId) continue;
|
|
7025
|
-
changeInputs.push(
|
|
7106
|
+
changeInputs.push(chunkI6EDUE75_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
7026
7107
|
}
|
|
7027
7108
|
}
|
|
7028
7109
|
groups.push(
|
|
7029
|
-
|
|
7030
|
-
|
|
7110
|
+
chunkI6EDUE75_cjs.AssetGroup.create(
|
|
7111
|
+
chunkI6EDUE75_cjs.AssetId.fromString(assetId),
|
|
7031
7112
|
null,
|
|
7032
7113
|
changeInputs,
|
|
7033
|
-
amount > 0n ? [
|
|
7114
|
+
amount > 0n ? [chunkI6EDUE75_cjs.AssetOutput.create(0, amount)] : [],
|
|
7034
7115
|
[]
|
|
7035
7116
|
)
|
|
7036
7117
|
);
|
|
7037
7118
|
}
|
|
7038
7119
|
const address = await this.wallet.getAddress();
|
|
7039
|
-
const outputAddress =
|
|
7120
|
+
const outputAddress = chunkOH2XLTXE_cjs.ArkAddress.decode(address);
|
|
7040
7121
|
const outputs = [
|
|
7041
7122
|
{
|
|
7042
7123
|
script: outputAddress.pkScript,
|
|
7043
7124
|
amount: BigInt(totalBtcSelected)
|
|
7044
7125
|
},
|
|
7045
|
-
Extension.create([
|
|
7126
|
+
Extension.create([chunkI6EDUE75_cjs.Packet.create(groups)]).txOut()
|
|
7046
7127
|
];
|
|
7047
7128
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
|
|
7048
7129
|
return arkTxid;
|
|
@@ -7067,7 +7148,7 @@ function castMetadata(metadata) {
|
|
|
7067
7148
|
} else {
|
|
7068
7149
|
throw new Error("Invalid metadata value type");
|
|
7069
7150
|
}
|
|
7070
|
-
md.push(
|
|
7151
|
+
md.push(chunkI6EDUE75_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
|
|
7071
7152
|
}
|
|
7072
7153
|
return md;
|
|
7073
7154
|
}
|
|
@@ -7088,10 +7169,10 @@ var DelegateManagerImpl = class {
|
|
|
7088
7169
|
if (vtxos.length === 0) {
|
|
7089
7170
|
return { delegated: [], failed: [] };
|
|
7090
7171
|
}
|
|
7091
|
-
const destinationScript =
|
|
7172
|
+
const destinationScript = chunkOH2XLTXE_cjs.ArkAddress.decode(destination).pkScript;
|
|
7092
7173
|
const arkInfo = await this.arkInfoProvider.getInfo();
|
|
7093
7174
|
const delegateInfo = await this.delegateProvider.getDelegateInfo();
|
|
7094
|
-
const eligible = vtxos.map(
|
|
7175
|
+
const eligible = vtxos.map(chunkOH2XLTXE_cjs.normalizeVtxo).filter(
|
|
7095
7176
|
(v) => isAnnotated(v) && findDelegateTapLeaf(v, delegateInfo.pubkey) !== void 0
|
|
7096
7177
|
);
|
|
7097
7178
|
if (eligible.length === 0) {
|
|
@@ -7120,11 +7201,11 @@ var DelegateManagerImpl = class {
|
|
|
7120
7201
|
const groupByExpiry = /* @__PURE__ */ new Map();
|
|
7121
7202
|
let recoverableVtxos = [];
|
|
7122
7203
|
for (const vtxo of eligible) {
|
|
7123
|
-
if (
|
|
7204
|
+
if (chunkOH2XLTXE_cjs.canRecoverOnchain(vtxo, now)) {
|
|
7124
7205
|
recoverableVtxos.push(vtxo);
|
|
7125
7206
|
continue;
|
|
7126
7207
|
}
|
|
7127
|
-
const expiry =
|
|
7208
|
+
const expiry = chunkOH2XLTXE_cjs.toBatchExpiry(vtxo);
|
|
7128
7209
|
if (!expiry) continue;
|
|
7129
7210
|
const dayKey = getDayTimestamp(expiry);
|
|
7130
7211
|
groupByExpiry.set(dayKey, [...groupByExpiry.get(dayKey) ?? [], vtxo]);
|
|
@@ -7189,7 +7270,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7189
7270
|
}
|
|
7190
7271
|
if (!delegateAt) {
|
|
7191
7272
|
const now = { timestamp: /* @__PURE__ */ new Date() };
|
|
7192
|
-
const expiryTimestamp = vtxos.filter((coin) => !
|
|
7273
|
+
const expiryTimestamp = vtxos.filter((coin) => !chunkOH2XLTXE_cjs.canRecoverOnchain(coin, now) && chunkOH2XLTXE_cjs.toBatchExpiry(coin)).reduce((min, coin) => Math.min(min, chunkOH2XLTXE_cjs.toBatchExpiry(coin)), Number.MAX_SAFE_INTEGER);
|
|
7193
7274
|
if (!expiryTimestamp || expiryTimestamp === Number.MAX_SAFE_INTEGER) {
|
|
7194
7275
|
delegateAt = new Date(Date.now() + 1 * 60 * 1e3);
|
|
7195
7276
|
} else {
|
|
@@ -7218,7 +7299,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7218
7299
|
let amount = 0n;
|
|
7219
7300
|
for (const coin of vtxos) {
|
|
7220
7301
|
const inputFee = estimator.evalOffchainInput({
|
|
7221
|
-
...
|
|
7302
|
+
...chunkOH2XLTXE_cjs.toOffchainInputFeeParams(coin),
|
|
7222
7303
|
type: "vtxo"
|
|
7223
7304
|
});
|
|
7224
7305
|
if (inputFee.value >= coin.value) {
|
|
@@ -7232,7 +7313,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7232
7313
|
const delegateFee = BigInt(Number(fee));
|
|
7233
7314
|
if (delegateFee > 0n) {
|
|
7234
7315
|
outputs.push({
|
|
7235
|
-
script:
|
|
7316
|
+
script: chunkOH2XLTXE_cjs.ArkAddress.decode(delegateAddress).pkScript,
|
|
7236
7317
|
amount: delegateFee
|
|
7237
7318
|
});
|
|
7238
7319
|
}
|
|
@@ -7265,10 +7346,10 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7265
7346
|
destinationScript
|
|
7266
7347
|
);
|
|
7267
7348
|
const forfeitOutputScript = btcSigner.OutScript.encode(
|
|
7268
|
-
btcSigner.Address(
|
|
7349
|
+
btcSigner.Address(chunkOH2XLTXE_cjs.getNetwork(network)).decode(forfeitAddress)
|
|
7269
7350
|
);
|
|
7270
7351
|
const forfeits = await Promise.all(
|
|
7271
|
-
vtxos.filter((v) => !
|
|
7352
|
+
vtxos.filter((v) => !chunkOH2XLTXE_cjs.canRecoverOnchain(v, { timestamp: /* @__PURE__ */ new Date() })).map(async (coin) => {
|
|
7272
7353
|
const forfeit = await makeDelegateForfeitTx(
|
|
7273
7354
|
coin,
|
|
7274
7355
|
dust,
|
|
@@ -7293,7 +7374,7 @@ async function makeDelegateForfeitTx(input, connectorAmount, delegatePubkey, for
|
|
|
7293
7374
|
index: input.vout,
|
|
7294
7375
|
witnessUtxo: {
|
|
7295
7376
|
amount: BigInt(input.value),
|
|
7296
|
-
script:
|
|
7377
|
+
script: chunkOH2XLTXE_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
7297
7378
|
},
|
|
7298
7379
|
sighashType: btcSigner.SigHash.ALL_ANYONECANPAY,
|
|
7299
7380
|
tapLeafScript: [delegateTapLeaf]
|
|
@@ -7351,7 +7432,7 @@ async function makeSignedDelegateIntent(identity, coins, outputs, onchainOutputs
|
|
|
7351
7432
|
expire_at: 0,
|
|
7352
7433
|
cosigners_public_keys: cosignerPubKeys
|
|
7353
7434
|
};
|
|
7354
|
-
const proof =
|
|
7435
|
+
const proof = chunkOH2XLTXE_cjs.Intent.create(message, coins, outputs);
|
|
7355
7436
|
const signedProof = await identity.sign(proof);
|
|
7356
7437
|
return {
|
|
7357
7438
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -7369,10 +7450,10 @@ function getDayTimestamp(timestamp) {
|
|
|
7369
7450
|
function findDelegateTapLeaf(vtxo, delegatePubkey) {
|
|
7370
7451
|
if (!vtxo.tapTree) return void 0;
|
|
7371
7452
|
const pk = delegatePubkey.length === 66 ? delegatePubkey.slice(2) : delegatePubkey;
|
|
7372
|
-
const vtxoScript =
|
|
7453
|
+
const vtxoScript = chunkOH2XLTXE_cjs.VtxoScript.decode(vtxo.tapTree);
|
|
7373
7454
|
return vtxoScript.leaves.find((tapLeaf) => {
|
|
7374
|
-
const arkTapscript =
|
|
7375
|
-
if (!
|
|
7455
|
+
const arkTapscript = chunkOH2XLTXE_cjs.decodeTapscript(chunkOH2XLTXE_cjs.scriptFromTapLeafScript(tapLeaf));
|
|
7456
|
+
if (!chunkOH2XLTXE_cjs.MultisigTapscript.is(arkTapscript)) return false;
|
|
7376
7457
|
return arkTapscript.params.pubkeys.map(base.hex.encode).includes(pk);
|
|
7377
7458
|
});
|
|
7378
7459
|
}
|
|
@@ -7560,7 +7641,7 @@ async function closeDatabase(dbName) {
|
|
|
7560
7641
|
return true;
|
|
7561
7642
|
}
|
|
7562
7643
|
function scriptFromArkAddress(address) {
|
|
7563
|
-
return base.hex.encode(
|
|
7644
|
+
return base.hex.encode(chunkOH2XLTXE_cjs.ArkAddress.decode(address).pkScript);
|
|
7564
7645
|
}
|
|
7565
7646
|
|
|
7566
7647
|
// src/repositories/indexedDB/schema.ts
|
|
@@ -8057,7 +8138,7 @@ function validateVtxosForScript(vtxos, script, context) {
|
|
|
8057
8138
|
}
|
|
8058
8139
|
async function getVtxosForContract(repo, contract) {
|
|
8059
8140
|
const vtxos = repo.getVtxosForScript ? await repo.getVtxosForScript(contract.script) : filterVtxosForScript(await repo.getVtxos(contract.address), contract.script);
|
|
8060
|
-
return vtxos.map(
|
|
8141
|
+
return vtxos.map(chunkOH2XLTXE_cjs.normalizeVtxo);
|
|
8061
8142
|
}
|
|
8062
8143
|
async function saveVtxosForContract(repo, contract, vtxos) {
|
|
8063
8144
|
if (repo.saveVtxosForScript) {
|
|
@@ -8199,7 +8280,7 @@ function decodeArkContract(encoded) {
|
|
|
8199
8280
|
}
|
|
8200
8281
|
function contractFromArkContract(encoded, options = {}) {
|
|
8201
8282
|
const parsed = decodeArkContract(encoded);
|
|
8202
|
-
const handler =
|
|
8283
|
+
const handler = chunkG53HASDV_cjs.contractHandlers.get(parsed.type);
|
|
8203
8284
|
if (!handler) {
|
|
8204
8285
|
throw new Error(`No handler registered for contract type '${parsed.type}'`);
|
|
8205
8286
|
}
|
|
@@ -8213,9 +8294,9 @@ function contractFromArkContract(encoded, options = {}) {
|
|
|
8213
8294
|
metadata: options.metadata
|
|
8214
8295
|
};
|
|
8215
8296
|
}
|
|
8216
|
-
function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix =
|
|
8297
|
+
function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunkOH2XLTXE_cjs.DEFAULT_NETWORK.hrp, options = {}) {
|
|
8217
8298
|
const parsed = decodeArkContract(encoded);
|
|
8218
|
-
const handler =
|
|
8299
|
+
const handler = chunkG53HASDV_cjs.contractHandlers.getOrThrow(parsed.type);
|
|
8219
8300
|
const params = parsed.data;
|
|
8220
8301
|
const vtxoScript = handler.createScript(params);
|
|
8221
8302
|
return {
|
|
@@ -8469,9 +8550,9 @@ var ContractWatcher = class {
|
|
|
8469
8550
|
this.connectionState = "connected";
|
|
8470
8551
|
this.reconnectAttempts = 0;
|
|
8471
8552
|
this.listenLoop().catch((e) => {
|
|
8472
|
-
if (
|
|
8553
|
+
if (chunkOH2XLTXE_cjs.isEventSourceError(e)) {
|
|
8473
8554
|
console.debug("ContractWatcher subscription disconnected; reconnecting");
|
|
8474
|
-
} else if (!
|
|
8555
|
+
} else if (!chunkOH2XLTXE_cjs.isEventSourceUnavailableError(e)) {
|
|
8475
8556
|
console.error(e);
|
|
8476
8557
|
}
|
|
8477
8558
|
this.connectionState = "disconnected";
|
|
@@ -8483,7 +8564,7 @@ var ContractWatcher = class {
|
|
|
8483
8564
|
this.scheduleReconnect();
|
|
8484
8565
|
});
|
|
8485
8566
|
} catch (error) {
|
|
8486
|
-
if (!
|
|
8567
|
+
if (!chunkOH2XLTXE_cjs.isEventSourceUnavailableError(error)) {
|
|
8487
8568
|
console.error("ContractWatcher connection failed:", error);
|
|
8488
8569
|
}
|
|
8489
8570
|
this.connectionState = "disconnected";
|
|
@@ -8509,7 +8590,7 @@ var ContractWatcher = class {
|
|
|
8509
8590
|
* slower; what it loses is push latency.
|
|
8510
8591
|
*/
|
|
8511
8592
|
reportEventSourceUnavailable(error) {
|
|
8512
|
-
if (!
|
|
8593
|
+
if (!chunkOH2XLTXE_cjs.isEventSourceUnavailableError(error)) return false;
|
|
8513
8594
|
if (!this.eventSourceReported) {
|
|
8514
8595
|
this.eventSourceReported = true;
|
|
8515
8596
|
console.warn(
|
|
@@ -8725,14 +8806,14 @@ var ContractWatcher = class {
|
|
|
8725
8806
|
const timestamp = Date.now();
|
|
8726
8807
|
if (update.newVtxos?.length) {
|
|
8727
8808
|
this.processSubscriptionVtxos(
|
|
8728
|
-
update.newVtxos.map(
|
|
8809
|
+
update.newVtxos.map(chunkOH2XLTXE_cjs.normalizeVtxo),
|
|
8729
8810
|
"vtxo_received",
|
|
8730
8811
|
timestamp
|
|
8731
8812
|
);
|
|
8732
8813
|
}
|
|
8733
8814
|
if (update.spentVtxos?.length) {
|
|
8734
8815
|
this.processSubscriptionVtxos(
|
|
8735
|
-
update.spentVtxos.map(
|
|
8816
|
+
update.spentVtxos.map(chunkOH2XLTXE_cjs.normalizeVtxo),
|
|
8736
8817
|
"vtxo_spent",
|
|
8737
8818
|
timestamp
|
|
8738
8819
|
);
|
|
@@ -8865,7 +8946,7 @@ async function reconcileIntents(deps) {
|
|
|
8865
8946
|
let vtxosByOutpoint = /* @__PURE__ */ new Map();
|
|
8866
8947
|
if (outpoints.length > 0) {
|
|
8867
8948
|
try {
|
|
8868
|
-
const { vtxos } = await
|
|
8949
|
+
const { vtxos } = await chunkOH2XLTXE_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
|
|
8869
8950
|
vtxosByOutpoint = new Map(vtxos.map((v) => [outpointKey(v), v]));
|
|
8870
8951
|
} catch (e) {
|
|
8871
8952
|
console.error("reconcileIntents: failed to fetch input VTXO state", e);
|
|
@@ -9039,7 +9120,7 @@ var ContractManager = class _ContractManager {
|
|
|
9039
9120
|
await this.reconcileWatched();
|
|
9040
9121
|
this.markSyncOnline();
|
|
9041
9122
|
} catch (err) {
|
|
9042
|
-
if (!
|
|
9123
|
+
if (!chunkOH2XLTXE_cjs.isRetryableProviderError(err)) throw err;
|
|
9043
9124
|
this.markSyncDegraded(err);
|
|
9044
9125
|
}
|
|
9045
9126
|
this.initialized = true;
|
|
@@ -9171,7 +9252,7 @@ var ContractManager = class _ContractManager {
|
|
|
9171
9252
|
const from = Math.max(0, watermark - lookAhead.size);
|
|
9172
9253
|
const to = watermark + lookAhead.size;
|
|
9173
9254
|
const deps = lookAhead.candidateDeps();
|
|
9174
|
-
const handlers =
|
|
9255
|
+
const handlers = chunkG53HASDV_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkG53HASDV_cjs.contractHandlers.get(t)).filter(hasCandidates);
|
|
9175
9256
|
const band = /* @__PURE__ */ new Map();
|
|
9176
9257
|
for (let index = from; index <= to; index++) {
|
|
9177
9258
|
const descriptor = lookAhead.materialize(index);
|
|
@@ -9182,7 +9263,7 @@ var ContractManager = class _ContractManager {
|
|
|
9182
9263
|
index,
|
|
9183
9264
|
params: {
|
|
9184
9265
|
...candidate,
|
|
9185
|
-
...
|
|
9266
|
+
...chunkG53HASDV_cjs.speculativeReceiveMetadata(descriptor)
|
|
9186
9267
|
}
|
|
9187
9268
|
});
|
|
9188
9269
|
}
|
|
@@ -9244,7 +9325,7 @@ var ContractManager = class _ContractManager {
|
|
|
9244
9325
|
});
|
|
9245
9326
|
for (const entry of pending) entry.catchUpPending = false;
|
|
9246
9327
|
} catch (err) {
|
|
9247
|
-
if (!
|
|
9328
|
+
if (!chunkOH2XLTXE_cjs.isRetryableProviderError(err)) throw err;
|
|
9248
9329
|
this.markSyncDegraded(err);
|
|
9249
9330
|
}
|
|
9250
9331
|
}
|
|
@@ -9294,7 +9375,7 @@ var ContractManager = class _ContractManager {
|
|
|
9294
9375
|
await this.fetchContractVxosFromIndexer([contract]);
|
|
9295
9376
|
this.markSyncOnline();
|
|
9296
9377
|
} catch (err) {
|
|
9297
|
-
if (!
|
|
9378
|
+
if (!chunkOH2XLTXE_cjs.isRetryableProviderError(err)) throw err;
|
|
9298
9379
|
this.markSyncDegraded(err);
|
|
9299
9380
|
}
|
|
9300
9381
|
await this.watcher.addContract(contract);
|
|
@@ -9331,7 +9412,7 @@ var ContractManager = class _ContractManager {
|
|
|
9331
9412
|
return result;
|
|
9332
9413
|
}
|
|
9333
9414
|
async upsertContractRow(params) {
|
|
9334
|
-
const handler =
|
|
9415
|
+
const handler = chunkG53HASDV_cjs.contractHandlers.get(params.type);
|
|
9335
9416
|
if (!handler) {
|
|
9336
9417
|
throw new Error(`No handler registered for contract type '${params.type}'`);
|
|
9337
9418
|
}
|
|
@@ -9431,7 +9512,7 @@ var ContractManager = class _ContractManager {
|
|
|
9431
9512
|
`scanContracts: batchSize must be a positive integer (got ${String(opts.batchSize)})`
|
|
9432
9513
|
);
|
|
9433
9514
|
}
|
|
9434
|
-
const registered =
|
|
9515
|
+
const registered = chunkG53HASDV_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkG53HASDV_cjs.contractHandlers.get(t)).filter(isDiscoverable);
|
|
9435
9516
|
const discoverables = [
|
|
9436
9517
|
...registered.filter((h) => h.type === "boarding"),
|
|
9437
9518
|
...registered.filter((h) => h.type !== "boarding")
|
|
@@ -9566,7 +9647,7 @@ var ContractManager = class _ContractManager {
|
|
|
9566
9647
|
await this.syncContracts({ contracts, pageSize });
|
|
9567
9648
|
this.markSyncOnline();
|
|
9568
9649
|
} catch (err) {
|
|
9569
|
-
if (!
|
|
9650
|
+
if (!chunkOH2XLTXE_cjs.isRetryableProviderError(err)) throw err;
|
|
9570
9651
|
this.markSyncDegraded(err);
|
|
9571
9652
|
}
|
|
9572
9653
|
const vtxos = await this.getVtxosForContracts(contracts);
|
|
@@ -9587,7 +9668,7 @@ var ContractManager = class _ContractManager {
|
|
|
9587
9668
|
}
|
|
9588
9669
|
const tapscriptCache = tapscripts ?? /* @__PURE__ */ new Map();
|
|
9589
9670
|
return vtxos.map(
|
|
9590
|
-
(vtxo) => extendVirtualCoinForContract(
|
|
9671
|
+
(vtxo) => extendVirtualCoinForContract(chunkOH2XLTXE_cjs.normalizeVtxo(vtxo), byScript, tapscriptCache)
|
|
9591
9672
|
);
|
|
9592
9673
|
}
|
|
9593
9674
|
/** @inheritdoc */
|
|
@@ -9631,14 +9712,14 @@ var ContractManager = class _ContractManager {
|
|
|
9631
9712
|
const byScript = new Map(contracts.map((contract) => [contract.script, contract]));
|
|
9632
9713
|
const asking = vtxos.filter((vtxo) => {
|
|
9633
9714
|
const contract = byScript.get(vtxo.script);
|
|
9634
|
-
return contract !== void 0 &&
|
|
9715
|
+
return contract !== void 0 && chunkG53HASDV_cjs.contractHandlers.get(contract.type)?.assertSpendableNow !== void 0;
|
|
9635
9716
|
});
|
|
9636
9717
|
if (asking.length === 0) return refused;
|
|
9637
9718
|
const tip = await this.currentChainTip();
|
|
9638
9719
|
const walletKey = await walletPubKey?.();
|
|
9639
9720
|
for (const vtxo of asking) {
|
|
9640
9721
|
const contract = byScript.get(vtxo.script);
|
|
9641
|
-
const handler =
|
|
9722
|
+
const handler = chunkG53HASDV_cjs.contractHandlers.get(contract.type);
|
|
9642
9723
|
if (!handler?.assertSpendableNow) continue;
|
|
9643
9724
|
const context = {
|
|
9644
9725
|
collaborative: true,
|
|
@@ -9653,7 +9734,7 @@ var ContractManager = class _ContractManager {
|
|
|
9653
9734
|
// the next handler to answer a CSV question would meet a
|
|
9654
9735
|
// TypeError instead of a `false`. Carry the coin only when it
|
|
9655
9736
|
// really is one.
|
|
9656
|
-
vtxo:
|
|
9737
|
+
vtxo: chunkOH2XLTXE_cjs.isVirtualCoin(vtxo) && "status" in vtxo ? vtxo : void 0
|
|
9657
9738
|
};
|
|
9658
9739
|
try {
|
|
9659
9740
|
await handler.assertSpendableNow(
|
|
@@ -9809,7 +9890,7 @@ var ContractManager = class _ContractManager {
|
|
|
9809
9890
|
const { contractScript, collaborative = true, walletPubKey, vtxo } = options;
|
|
9810
9891
|
const [contract] = await this.getContracts({ script: contractScript });
|
|
9811
9892
|
if (!contract) return [];
|
|
9812
|
-
const handler =
|
|
9893
|
+
const handler = chunkG53HASDV_cjs.contractHandlers.get(contract.type);
|
|
9813
9894
|
if (!handler) return [];
|
|
9814
9895
|
const script = handler.createScript(contract.params);
|
|
9815
9896
|
const tip = await this.currentChainTip();
|
|
@@ -9837,7 +9918,7 @@ var ContractManager = class _ContractManager {
|
|
|
9837
9918
|
const { contractScript, collaborative = true, walletPubKey } = options;
|
|
9838
9919
|
const [contract] = await this.getContracts({ script: contractScript });
|
|
9839
9920
|
if (!contract) return [];
|
|
9840
|
-
const handler =
|
|
9921
|
+
const handler = chunkG53HASDV_cjs.contractHandlers.get(contract.type);
|
|
9841
9922
|
if (!handler) return [];
|
|
9842
9923
|
const script = handler.createScript(contract.params);
|
|
9843
9924
|
const context = {
|
|
@@ -9893,7 +9974,7 @@ var ContractManager = class _ContractManager {
|
|
|
9893
9974
|
}
|
|
9894
9975
|
async refreshOutpoints(outpoints) {
|
|
9895
9976
|
if (outpoints.length === 0) return;
|
|
9896
|
-
const { vtxos } = await
|
|
9977
|
+
const { vtxos } = await chunkOH2XLTXE_cjs.getNormalizedVtxos(this.config.indexerProvider, {
|
|
9897
9978
|
outpoints
|
|
9898
9979
|
});
|
|
9899
9980
|
if (vtxos.length === 0) return;
|
|
@@ -9972,7 +10053,7 @@ var ContractManager = class _ContractManager {
|
|
|
9972
10053
|
break;
|
|
9973
10054
|
}
|
|
9974
10055
|
} catch (err) {
|
|
9975
|
-
if (!
|
|
10056
|
+
if (!chunkOH2XLTXE_cjs.isRetryableProviderError(err)) throw err;
|
|
9976
10057
|
this.markSyncDegraded(err);
|
|
9977
10058
|
}
|
|
9978
10059
|
this.emitEvent(event);
|
|
@@ -10051,7 +10132,7 @@ var ContractManager = class _ContractManager {
|
|
|
10051
10132
|
*/
|
|
10052
10133
|
async reconcilePendingFrontier(contracts) {
|
|
10053
10134
|
const scriptToContract = new Map(contracts.map((c) => [c.script, c]));
|
|
10054
|
-
const vtxos = await
|
|
10135
|
+
const vtxos = await chunkOH2XLTXE_cjs.getAllNormalizedVtxos(
|
|
10055
10136
|
this.config.indexerProvider,
|
|
10056
10137
|
contracts.map((c) => c.script),
|
|
10057
10138
|
{ pendingOnly: true }
|
|
@@ -10134,7 +10215,7 @@ var ContractManager = class _ContractManager {
|
|
|
10134
10215
|
}
|
|
10135
10216
|
return result;
|
|
10136
10217
|
}
|
|
10137
|
-
async fetchContractVtxosBulk(contracts, pageSize =
|
|
10218
|
+
async fetchContractVtxosBulk(contracts, pageSize = chunkOH2XLTXE_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
|
|
10138
10219
|
if (contracts.length === 0) {
|
|
10139
10220
|
return { vtxosByScript: /* @__PURE__ */ new Map(), promoted: /* @__PURE__ */ new Map() };
|
|
10140
10221
|
}
|
|
@@ -10150,7 +10231,7 @@ var ContractManager = class _ContractManager {
|
|
|
10150
10231
|
before: syncWindow.before
|
|
10151
10232
|
}
|
|
10152
10233
|
} : {};
|
|
10153
|
-
const vtxos = await
|
|
10234
|
+
const vtxos = await chunkOH2XLTXE_cjs.getAllNormalizedVtxos(
|
|
10154
10235
|
this.config.indexerProvider,
|
|
10155
10236
|
contracts.map((c) => c.script),
|
|
10156
10237
|
{ ...windowOpts, pageSize }
|
|
@@ -10295,7 +10376,7 @@ var deserializeTapLeaf = (t) => {
|
|
|
10295
10376
|
const s = base.hex.decode(t.s);
|
|
10296
10377
|
return [cb, s];
|
|
10297
10378
|
};
|
|
10298
|
-
var deserializeVtxo = (o) =>
|
|
10379
|
+
var deserializeVtxo = (o) => chunkOH2XLTXE_cjs.normalizeVtxo({
|
|
10299
10380
|
...o,
|
|
10300
10381
|
createdAt: new Date(o.createdAt),
|
|
10301
10382
|
tapTree: base.hex.decode(o.tapTree),
|
|
@@ -11336,7 +11417,7 @@ var HDDescriptorProvider = class _HDDescriptorProvider {
|
|
|
11336
11417
|
*/
|
|
11337
11418
|
materializeDescriptorAt(index) {
|
|
11338
11419
|
const descriptor = this.identity.descriptor;
|
|
11339
|
-
const network =
|
|
11420
|
+
const network = chunkG53HASDV_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
11340
11421
|
const expansion = descriptorsScure.expand({ descriptor, network, index });
|
|
11341
11422
|
const keyInfo = expansion.expansionMap?.["@0"];
|
|
11342
11423
|
if (!keyInfo?.keyExpression) {
|
|
@@ -11484,7 +11565,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
|
|
|
11484
11565
|
const provider = await resolveDescriptorProvider(config, setup.walletRepository);
|
|
11485
11566
|
if (!provider) return void 0;
|
|
11486
11567
|
const allowSilentFallback = (config.walletMode ?? "auto") === "auto";
|
|
11487
|
-
const expectedContractType = setup.offchainTapscript instanceof
|
|
11568
|
+
const expectedContractType = setup.offchainTapscript instanceof chunkG53HASDV_cjs.DelegateVtxo.Script ? "delegate" : "default";
|
|
11488
11569
|
const factoryOpts = {
|
|
11489
11570
|
walletRepository: setup.walletRepository,
|
|
11490
11571
|
contractRepository: setup.contractRepository,
|
|
@@ -11683,7 +11764,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
|
|
|
11683
11764
|
};
|
|
11684
11765
|
function deriveLeafPubkey(descriptor) {
|
|
11685
11766
|
try {
|
|
11686
|
-
return
|
|
11767
|
+
return chunkG53HASDV_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
11687
11768
|
} catch (e) {
|
|
11688
11769
|
throw new NonRangeableDescriptorError(
|
|
11689
11770
|
"Cannot derive leaf pubkey: descriptor is not a materialized, parsable tr(...) shape.",
|
|
@@ -11695,7 +11776,7 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
11695
11776
|
const pubKey = deriveLeafPubkey(descriptor);
|
|
11696
11777
|
const tapscript = rebuildTapscript(current, pubKey);
|
|
11697
11778
|
const serverPubKey = tapscript.options.serverPubKey;
|
|
11698
|
-
const csvTimelock =
|
|
11779
|
+
const csvTimelock = chunkOH2XLTXE_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
|
|
11699
11780
|
const base$1 = {
|
|
11700
11781
|
script: base.hex.encode(tapscript.pkScript),
|
|
11701
11782
|
address: tapscript.address(hrp, serverPubKey).encode(),
|
|
@@ -11706,11 +11787,11 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
11706
11787
|
// index-0 key. Without it, spends produce unsigned PSBTs that the
|
|
11707
11788
|
// server rejects with `INVALID_PSBT_INPUT (5): missing tapscript spend sig`.
|
|
11708
11789
|
metadata: {
|
|
11709
|
-
...{ source:
|
|
11790
|
+
...{ source: chunkG53HASDV_cjs.WALLET_RECEIVE_SOURCE },
|
|
11710
11791
|
signingDescriptor: descriptor
|
|
11711
11792
|
}
|
|
11712
11793
|
};
|
|
11713
|
-
const params = tapscript instanceof
|
|
11794
|
+
const params = tapscript instanceof chunkG53HASDV_cjs.DelegateVtxo.Script ? {
|
|
11714
11795
|
...base$1,
|
|
11715
11796
|
type: "delegate",
|
|
11716
11797
|
params: {
|
|
@@ -11731,10 +11812,10 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
11731
11812
|
return { tapscript, params };
|
|
11732
11813
|
}
|
|
11733
11814
|
function rebuildTapscript(current, pubKey) {
|
|
11734
|
-
if (current instanceof
|
|
11735
|
-
return new
|
|
11815
|
+
if (current instanceof chunkG53HASDV_cjs.DelegateVtxo.Script) {
|
|
11816
|
+
return new chunkG53HASDV_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
|
|
11736
11817
|
}
|
|
11737
|
-
return new
|
|
11818
|
+
return new chunkG53HASDV_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
|
|
11738
11819
|
}
|
|
11739
11820
|
async function pickActiveReceive(contractRepository, serverPubKey, expectedType) {
|
|
11740
11821
|
const candidates = await contractRepository.getContracts({
|
|
@@ -11743,7 +11824,7 @@ async function pickActiveReceive(contractRepository, serverPubKey, expectedType)
|
|
|
11743
11824
|
});
|
|
11744
11825
|
const serverPubKeyHex = base.hex.encode(serverPubKey);
|
|
11745
11826
|
const matching = candidates.filter(
|
|
11746
|
-
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source ===
|
|
11827
|
+
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkG53HASDV_cjs.WALLET_RECEIVE_SOURCE
|
|
11747
11828
|
).sort((a, b) => {
|
|
11748
11829
|
if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
|
|
11749
11830
|
return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
|
|
@@ -11786,6 +11867,8 @@ function computeOffchainBalance(vtxos, caps) {
|
|
|
11786
11867
|
let settled = 0;
|
|
11787
11868
|
let preconfirmed = 0;
|
|
11788
11869
|
let available = 0;
|
|
11870
|
+
let gated = 0;
|
|
11871
|
+
let intentLocked = 0;
|
|
11789
11872
|
let recoverable = 0;
|
|
11790
11873
|
let pendingRecovery = 0;
|
|
11791
11874
|
const owned = /* @__PURE__ */ new Map();
|
|
@@ -11796,23 +11879,27 @@ function computeOffchainBalance(vtxos, caps) {
|
|
|
11796
11879
|
}
|
|
11797
11880
|
};
|
|
11798
11881
|
for (const vtxo of vtxos) {
|
|
11799
|
-
if (
|
|
11882
|
+
if (chunkOH2XLTXE_cjs.hasTerminalSpend(vtxo)) continue;
|
|
11800
11883
|
addAssets(owned, vtxo);
|
|
11801
11884
|
if (isPendingRecovery(vtxo)) {
|
|
11802
11885
|
pendingRecovery += vtxo.value;
|
|
11803
11886
|
continue;
|
|
11804
11887
|
}
|
|
11805
|
-
if (
|
|
11888
|
+
if (chunkOH2XLTXE_cjs.canRecoverOnchain(vtxo, now)) {
|
|
11806
11889
|
recoverable += vtxo.value;
|
|
11807
11890
|
continue;
|
|
11808
11891
|
}
|
|
11809
|
-
if (!
|
|
11892
|
+
if (!chunkOH2XLTXE_cjs.canSpendOffchain(vtxo, now)) continue;
|
|
11810
11893
|
if (vtxo.isPreconfirmed) {
|
|
11811
11894
|
preconfirmed += vtxo.value;
|
|
11812
11895
|
} else {
|
|
11813
11896
|
settled += vtxo.value;
|
|
11814
11897
|
}
|
|
11815
|
-
if (isGenericallySpendable(vtxo)
|
|
11898
|
+
if (!isGenericallySpendable(vtxo)) {
|
|
11899
|
+
gated += vtxo.value;
|
|
11900
|
+
} else if (!isUnlocked(vtxo)) {
|
|
11901
|
+
intentLocked += vtxo.value;
|
|
11902
|
+
} else {
|
|
11816
11903
|
available += vtxo.value;
|
|
11817
11904
|
addAssets(spendable, vtxo);
|
|
11818
11905
|
}
|
|
@@ -11822,6 +11909,8 @@ function computeOffchainBalance(vtxos, caps) {
|
|
|
11822
11909
|
settled,
|
|
11823
11910
|
preconfirmed,
|
|
11824
11911
|
available,
|
|
11912
|
+
gated,
|
|
11913
|
+
intentLocked,
|
|
11825
11914
|
recoverable,
|
|
11826
11915
|
pendingRecovery,
|
|
11827
11916
|
total: settled + preconfirmed + recoverable + pendingRecovery,
|
|
@@ -11969,15 +12058,26 @@ var InputSignerRouter = class {
|
|
|
11969
12058
|
};
|
|
11970
12059
|
|
|
11971
12060
|
// src/wallet/wallet.ts
|
|
11972
|
-
var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl ||
|
|
12061
|
+
var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl || chunkOH2XLTXE_cjs.DEFAULT_ARKADE_SERVER_URL;
|
|
11973
12062
|
function intentProofJobs(coins) {
|
|
11974
12063
|
if (coins.length === 0) return [];
|
|
11975
12064
|
const coinJobs = coins.map((coin, i) => ({
|
|
11976
12065
|
index: i + 1,
|
|
11977
|
-
lookupScript:
|
|
12066
|
+
lookupScript: chunkOH2XLTXE_cjs.VtxoScript.decode(coin.tapTree).pkScript
|
|
11978
12067
|
}));
|
|
11979
12068
|
return [{ index: 0, lookupScript: coinJobs[0].lookupScript }, ...coinJobs];
|
|
11980
12069
|
}
|
|
12070
|
+
function asSendParams(args) {
|
|
12071
|
+
const [first] = args;
|
|
12072
|
+
if (args.length === 1 && first && "recipients" in first) {
|
|
12073
|
+
const params = first;
|
|
12074
|
+
if (params.recipients.length === 0) {
|
|
12075
|
+
throw new Error("At least one receiver is required");
|
|
12076
|
+
}
|
|
12077
|
+
return params;
|
|
12078
|
+
}
|
|
12079
|
+
return { recipients: args };
|
|
12080
|
+
}
|
|
11981
12081
|
function extractArkProviderUrl(provider) {
|
|
11982
12082
|
const serverUrl = provider.serverUrl;
|
|
11983
12083
|
return typeof serverUrl === "string" && serverUrl.length > 0 ? serverUrl : void 0;
|
|
@@ -12000,7 +12100,7 @@ function dedupeTimelocks(timelocks) {
|
|
|
12000
12100
|
const seen = /* @__PURE__ */ new Set();
|
|
12001
12101
|
const deduped = [];
|
|
12002
12102
|
for (const timelock of timelocks) {
|
|
12003
|
-
const sequence =
|
|
12103
|
+
const sequence = chunkOH2XLTXE_cjs.timelockToSequence(timelock).toString();
|
|
12004
12104
|
if (seen.has(sequence)) continue;
|
|
12005
12105
|
seen.add(sequence);
|
|
12006
12106
|
deduped.push(timelock);
|
|
@@ -12017,7 +12117,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
|
|
|
12017
12117
|
state: "active"
|
|
12018
12118
|
});
|
|
12019
12119
|
const newest = candidates.filter(
|
|
12020
|
-
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source ===
|
|
12120
|
+
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkG53HASDV_cjs.WALLET_RECEIVE_SOURCE
|
|
12021
12121
|
).sort((a, b) => {
|
|
12022
12122
|
if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
|
|
12023
12123
|
return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
|
|
@@ -12025,7 +12125,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
|
|
|
12025
12125
|
if (!newest?.params.pubKey) return baseline;
|
|
12026
12126
|
try {
|
|
12027
12127
|
const pubKey = base.hex.decode(newest.params.pubKey);
|
|
12028
|
-
return new
|
|
12128
|
+
return new chunkG53HASDV_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
|
|
12029
12129
|
} catch (e) {
|
|
12030
12130
|
console.warn("Skipping malformed boarding contract at boot", newest.script, e);
|
|
12031
12131
|
return baseline;
|
|
@@ -12041,8 +12141,8 @@ function filterSnapshotVtxos(snapshot, filter, pendingSpendOutpoints) {
|
|
|
12041
12141
|
if (pendingSpendOutpoints.has(`${vtxo.txid}:${vtxo.vout}`)) {
|
|
12042
12142
|
return false;
|
|
12043
12143
|
}
|
|
12044
|
-
if (!
|
|
12045
|
-
if (!f.withRecoverable &&
|
|
12144
|
+
if (!chunkOH2XLTXE_cjs.hasTerminalSpend(vtxo)) {
|
|
12145
|
+
if (!f.withRecoverable && chunkOH2XLTXE_cjs.canRecoverOnchain(vtxo, now)) {
|
|
12046
12146
|
return false;
|
|
12047
12147
|
}
|
|
12048
12148
|
return true;
|
|
@@ -12383,7 +12483,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12383
12483
|
*/
|
|
12384
12484
|
static async setupWalletConfig(config, pubKey) {
|
|
12385
12485
|
const arkadeServerUrl = getArkadeServerUrl(config);
|
|
12386
|
-
const arkProvider = config.arkProvider || new
|
|
12486
|
+
const arkProvider = config.arkProvider || new chunkOH2XLTXE_cjs.RestArkProvider(arkadeServerUrl);
|
|
12387
12487
|
let indexerProvider = config.indexerProvider;
|
|
12388
12488
|
if (!indexerProvider) {
|
|
12389
12489
|
let indexerUrl = config.indexerUrl;
|
|
@@ -12400,7 +12500,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12400
12500
|
indexerUrl = arkadeServerUrl;
|
|
12401
12501
|
}
|
|
12402
12502
|
}
|
|
12403
|
-
indexerProvider = new
|
|
12503
|
+
indexerProvider = new chunkI6EDUE75_cjs.RestIndexerProvider(indexerUrl);
|
|
12404
12504
|
}
|
|
12405
12505
|
const walletRepository = config.storage?.walletRepository ?? new IndexedDBWalletRepository();
|
|
12406
12506
|
const contractRepository = config.storage?.contractRepository ?? new IndexedDBContractRepository();
|
|
@@ -12409,7 +12509,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12409
12509
|
source: serverInfoSource,
|
|
12410
12510
|
lastOnlineAt: serverInfoLastOnlineAt
|
|
12411
12511
|
} = await resolveArkInfo(arkProvider, walletRepository);
|
|
12412
|
-
const network =
|
|
12512
|
+
const network = chunkOH2XLTXE_cjs.getNetwork(info.network);
|
|
12413
12513
|
if ("descriptor" in config.identity) {
|
|
12414
12514
|
const descriptor = config.identity.descriptor;
|
|
12415
12515
|
const identityIsMainnet = !descriptor.includes("tpub");
|
|
@@ -12456,11 +12556,11 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12456
12556
|
serverPubKey,
|
|
12457
12557
|
csvTimelock: exitTimelock
|
|
12458
12558
|
};
|
|
12459
|
-
const offchainTapscript = !delegatePubKey ? new
|
|
12460
|
-
const boardingTapscript =
|
|
12559
|
+
const offchainTapscript = !delegatePubKey ? new chunkG53HASDV_cjs.DefaultVtxo.Script(offchainOptions) : new chunkG53HASDV_cjs.DelegateVtxo.Script({ ...offchainOptions, delegatePubKey });
|
|
12560
|
+
const boardingTapscript = chunkG53HASDV_cjs.BoardingContractHandler.createScript({
|
|
12461
12561
|
pubKey: base.hex.encode(pubKey),
|
|
12462
12562
|
serverPubKey: base.hex.encode(serverPubKey),
|
|
12463
|
-
csvTimelock:
|
|
12563
|
+
csvTimelock: chunkOH2XLTXE_cjs.timelockToSequence(boardingTimelock).toString()
|
|
12464
12564
|
});
|
|
12465
12565
|
return {
|
|
12466
12566
|
arkProvider,
|
|
@@ -12574,6 +12674,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12574
12674
|
settled: offchain.settled,
|
|
12575
12675
|
preconfirmed: offchain.preconfirmed,
|
|
12576
12676
|
available: offchain.available,
|
|
12677
|
+
gated: offchain.gated,
|
|
12678
|
+
intentLocked: offchain.intentLocked,
|
|
12577
12679
|
recoverable: offchain.recoverable,
|
|
12578
12680
|
pendingRecovery: offchain.pendingRecovery,
|
|
12579
12681
|
total: totalBoarding + offchain.total,
|
|
@@ -12755,7 +12857,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12755
12857
|
const response = await contractManager.getContractsWithVtxos();
|
|
12756
12858
|
const allVtxos = response.flatMap((_) => _.vtxos);
|
|
12757
12859
|
const { boardingTxs, commitmentsToIgnore } = await this.getBoardingTxs();
|
|
12758
|
-
const resolveTxCreatedAt = (txids) =>
|
|
12860
|
+
const resolveTxCreatedAt = (txids) => chunkOH2XLTXE_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
|
|
12759
12861
|
return buildTransactionHistory(
|
|
12760
12862
|
allVtxos,
|
|
12761
12863
|
boardingTxs,
|
|
@@ -12849,7 +12951,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12849
12951
|
},
|
|
12850
12952
|
isUnrolled: true,
|
|
12851
12953
|
...boardingFacts,
|
|
12852
|
-
virtualStatus:
|
|
12954
|
+
virtualStatus: chunkOH2XLTXE_cjs.toVirtualStatus(boardingFacts),
|
|
12853
12955
|
spentBy: "",
|
|
12854
12956
|
createdAt: tx.status.confirmed ? new Date(tx.status.block_time * 1e3) : /* @__PURE__ */ new Date(0),
|
|
12855
12957
|
script: scriptHex
|
|
@@ -12905,9 +13007,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12905
13007
|
async getBoardingTapscripts(allowedSigners) {
|
|
12906
13008
|
const byScript = /* @__PURE__ */ new Map();
|
|
12907
13009
|
const add = (s) => byScript.set(base.hex.encode(s.pkScript), s);
|
|
12908
|
-
const boardingCsv = this.boardingTapscript.options.csvTimelock ??
|
|
13010
|
+
const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunkG53HASDV_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
12909
13011
|
add(
|
|
12910
|
-
new
|
|
13012
|
+
new chunkG53HASDV_cjs.DefaultVtxo.Script({
|
|
12911
13013
|
pubKey: await this.identity.xOnlyPublicKey(),
|
|
12912
13014
|
serverPubKey: this.boardingTapscript.options.serverPubKey,
|
|
12913
13015
|
csvTimelock: boardingCsv
|
|
@@ -12922,7 +13024,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12922
13024
|
for (const c of boardingContracts) {
|
|
12923
13025
|
if (!allowed.has(toXOnlySignerHex(c.params.serverPubKey))) continue;
|
|
12924
13026
|
try {
|
|
12925
|
-
add(
|
|
13027
|
+
add(chunkG53HASDV_cjs.BoardingContractHandler.createScript(c.params));
|
|
12926
13028
|
} catch (e) {
|
|
12927
13029
|
console.warn("Skipping malformed boarding contract", c.script, e);
|
|
12928
13030
|
}
|
|
@@ -12960,7 +13062,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12960
13062
|
// Per-row CSV delay decoded from THIS tapscript's exit leaf —
|
|
12961
13063
|
// not the wallet's current boarding timelock, which a signer
|
|
12962
13064
|
// rotation may have changed.
|
|
12963
|
-
csvTimelock:
|
|
13065
|
+
csvTimelock: chunkOH2XLTXE_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
|
|
12964
13066
|
coins: utxos
|
|
12965
13067
|
});
|
|
12966
13068
|
}
|
|
@@ -13093,7 +13195,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13093
13195
|
/** Fetch Arkade transaction ids that are still pending final settlement. */
|
|
13094
13196
|
async fetchPendingTxs() {
|
|
13095
13197
|
const scripts = await this.getWalletScripts();
|
|
13096
|
-
const vtxos = await
|
|
13198
|
+
const vtxos = await chunkOH2XLTXE_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
|
|
13097
13199
|
return vtxos.filter(
|
|
13098
13200
|
(vtxo) => (vtxo.isSpent || vtxo.isPreconfirmed && !vtxo.isSwept) && vtxo.arkTxId !== void 0
|
|
13099
13201
|
).map((_) => _.arkTxId);
|
|
@@ -13124,7 +13226,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13124
13226
|
});
|
|
13125
13227
|
for (const contract of contracts) {
|
|
13126
13228
|
if (map.has(contract.script)) continue;
|
|
13127
|
-
const handler =
|
|
13229
|
+
const handler = chunkG53HASDV_cjs.contractHandlers.get(contract.type);
|
|
13128
13230
|
if (handler) {
|
|
13129
13231
|
const script = handler.createScript(contract.params);
|
|
13130
13232
|
map.set(contract.script, script);
|
|
@@ -13236,7 +13338,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13236
13338
|
}
|
|
13237
13339
|
});
|
|
13238
13340
|
const baselinePubkey = await this.identity.xOnlyPublicKey();
|
|
13239
|
-
const delegatePubKey = this.offchainTapscript instanceof
|
|
13341
|
+
const delegatePubKey = this.offchainTapscript instanceof chunkG53HASDV_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
|
|
13240
13342
|
const baselineSigners = [
|
|
13241
13343
|
this.offchainTapscript.options.serverPubKey,
|
|
13242
13344
|
...[...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h))
|
|
@@ -13244,8 +13346,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13244
13346
|
const seenBaselineScripts = /* @__PURE__ */ new Set();
|
|
13245
13347
|
for (const serverPubKey of baselineSigners) {
|
|
13246
13348
|
for (const csvTimelock of this.walletContractTimelocks) {
|
|
13247
|
-
const csvTimelockStr =
|
|
13248
|
-
const defaultScript = new
|
|
13349
|
+
const csvTimelockStr = chunkOH2XLTXE_cjs.timelockToSequence(csvTimelock).toString();
|
|
13350
|
+
const defaultScript = new chunkG53HASDV_cjs.DefaultVtxo.Script({
|
|
13249
13351
|
pubKey: baselinePubkey,
|
|
13250
13352
|
serverPubKey,
|
|
13251
13353
|
csvTimelock
|
|
@@ -13266,7 +13368,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13266
13368
|
});
|
|
13267
13369
|
}
|
|
13268
13370
|
if (delegatePubKey) {
|
|
13269
|
-
const delegateScript = new
|
|
13371
|
+
const delegateScript = new chunkG53HASDV_cjs.DelegateVtxo.Script({
|
|
13270
13372
|
pubKey: baselinePubkey,
|
|
13271
13373
|
serverPubKey,
|
|
13272
13374
|
delegatePubKey,
|
|
@@ -13290,9 +13392,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13290
13392
|
}
|
|
13291
13393
|
}
|
|
13292
13394
|
}
|
|
13293
|
-
const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ??
|
|
13395
|
+
const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunkG53HASDV_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
13294
13396
|
for (const serverPubKey of baselineSigners) {
|
|
13295
|
-
const baselineBoarding = new
|
|
13397
|
+
const baselineBoarding = new chunkG53HASDV_cjs.DefaultVtxo.Script({
|
|
13296
13398
|
pubKey: baselinePubkey,
|
|
13297
13399
|
serverPubKey,
|
|
13298
13400
|
csvTimelock: boardingCsvTimelock
|
|
@@ -13305,7 +13407,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13305
13407
|
params: {
|
|
13306
13408
|
pubKey: base.hex.encode(baselineBoarding.options.pubKey),
|
|
13307
13409
|
serverPubKey: base.hex.encode(serverPubKey),
|
|
13308
|
-
csvTimelock:
|
|
13410
|
+
csvTimelock: chunkOH2XLTXE_cjs.timelockToSequence(boardingCsvTimelock).toString()
|
|
13309
13411
|
},
|
|
13310
13412
|
script: boardingScriptHex,
|
|
13311
13413
|
address: baselineBoarding.address(this.network.hrp, serverPubKey).encode(),
|
|
@@ -13484,7 +13586,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13484
13586
|
serverPubKey: this.offchainTapscript.options.serverPubKey,
|
|
13485
13587
|
deprecatedSignerPubKeys: [...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h)),
|
|
13486
13588
|
csvTimelocks: this.walletContractTimelocks,
|
|
13487
|
-
delegatePubKey: this.offchainTapscript instanceof
|
|
13589
|
+
delegatePubKey: this.offchainTapscript instanceof chunkG53HASDV_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
|
|
13488
13590
|
};
|
|
13489
13591
|
}
|
|
13490
13592
|
_signerRouter;
|
|
@@ -13578,24 +13680,24 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13578
13680
|
const manager = await this.getContractManager();
|
|
13579
13681
|
const descriptor = await manager.getNextSigningDescriptor();
|
|
13580
13682
|
if (!descriptor) return this.getBoardingAddress();
|
|
13581
|
-
const pubKey =
|
|
13582
|
-
const newBoarding = new
|
|
13683
|
+
const pubKey = chunkG53HASDV_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
13684
|
+
const newBoarding = new chunkG53HASDV_cjs.DefaultVtxo.Script({
|
|
13583
13685
|
...this._boardingTapscript.options,
|
|
13584
13686
|
pubKey
|
|
13585
13687
|
});
|
|
13586
|
-
const csvTimelock = newBoarding.options.csvTimelock ??
|
|
13688
|
+
const csvTimelock = newBoarding.options.csvTimelock ?? chunkG53HASDV_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
13587
13689
|
await manager.createContract({
|
|
13588
13690
|
type: "boarding",
|
|
13589
13691
|
params: {
|
|
13590
13692
|
pubKey: base.hex.encode(pubKey),
|
|
13591
13693
|
serverPubKey: base.hex.encode(newBoarding.options.serverPubKey),
|
|
13592
|
-
csvTimelock:
|
|
13694
|
+
csvTimelock: chunkOH2XLTXE_cjs.timelockToSequence(csvTimelock).toString()
|
|
13593
13695
|
},
|
|
13594
13696
|
script: base.hex.encode(newBoarding.pkScript),
|
|
13595
13697
|
address: newBoarding.address(this.network.hrp, this.arkServerPublicKey).encode(),
|
|
13596
13698
|
state: "active",
|
|
13597
13699
|
metadata: {
|
|
13598
|
-
source:
|
|
13700
|
+
source: chunkG53HASDV_cjs.WALLET_RECEIVE_SOURCE,
|
|
13599
13701
|
signingDescriptor: descriptor
|
|
13600
13702
|
}
|
|
13601
13703
|
});
|
|
@@ -13630,7 +13732,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13630
13732
|
if (this._descriptorProvider instanceof HDDescriptorProvider) {
|
|
13631
13733
|
return (await this.getContractManager()).getNextSigningDescriptor();
|
|
13632
13734
|
}
|
|
13633
|
-
return
|
|
13735
|
+
return chunkG53HASDV_cjs.identityDescriptor(this.identity);
|
|
13634
13736
|
}
|
|
13635
13737
|
/**
|
|
13636
13738
|
* @see HDAllocationCapable.advanceSigningDescriptorWatermark
|
|
@@ -13755,21 +13857,21 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13755
13857
|
const [currentBoardingRow] = await manager.getContracts({
|
|
13756
13858
|
script: currentBoardingScript
|
|
13757
13859
|
});
|
|
13758
|
-
const newOffchain = this.offchainTapscript instanceof
|
|
13860
|
+
const newOffchain = this.offchainTapscript instanceof chunkG53HASDV_cjs.DelegateVtxo.Script ? new chunkG53HASDV_cjs.DelegateVtxo.Script({
|
|
13759
13861
|
...this.offchainTapscript.options,
|
|
13760
13862
|
serverPubKey: xonly
|
|
13761
|
-
}) : new
|
|
13863
|
+
}) : new chunkG53HASDV_cjs.DefaultVtxo.Script({
|
|
13762
13864
|
...this.offchainTapscript.options,
|
|
13763
13865
|
serverPubKey: xonly
|
|
13764
13866
|
});
|
|
13765
|
-
const newBoarding = new
|
|
13867
|
+
const newBoarding = new chunkG53HASDV_cjs.DefaultVtxo.Script({
|
|
13766
13868
|
...this._boardingTapscript.options,
|
|
13767
13869
|
serverPubKey: xonly
|
|
13768
13870
|
});
|
|
13769
|
-
const offchainCsv =
|
|
13871
|
+
const offchainCsv = chunkOH2XLTXE_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
|
|
13770
13872
|
const newOffchainScript = base.hex.encode(newOffchain.pkScript);
|
|
13771
13873
|
const newOffchainAddress = newOffchain.address(this.network.hrp, xonly).encode();
|
|
13772
|
-
if (newOffchain instanceof
|
|
13874
|
+
if (newOffchain instanceof chunkG53HASDV_cjs.DelegateVtxo.Script) {
|
|
13773
13875
|
await manager.createContract({
|
|
13774
13876
|
type: "delegate",
|
|
13775
13877
|
params: {
|
|
@@ -13797,13 +13899,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13797
13899
|
metadata: currentOffchainRow?.metadata
|
|
13798
13900
|
});
|
|
13799
13901
|
}
|
|
13800
|
-
const boardingCsv = newBoarding.options.csvTimelock ??
|
|
13902
|
+
const boardingCsv = newBoarding.options.csvTimelock ?? chunkG53HASDV_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
13801
13903
|
await manager.createContract({
|
|
13802
13904
|
type: "boarding",
|
|
13803
13905
|
params: {
|
|
13804
13906
|
pubKey: base.hex.encode(newBoarding.options.pubKey),
|
|
13805
13907
|
serverPubKey: base.hex.encode(xonly),
|
|
13806
|
-
csvTimelock:
|
|
13908
|
+
csvTimelock: chunkOH2XLTXE_cjs.timelockToSequence(boardingCsv).toString()
|
|
13807
13909
|
},
|
|
13808
13910
|
script: base.hex.encode(newBoarding.pkScript),
|
|
13809
13911
|
address: newBoarding.address(this.network.hrp, xonly).encode(),
|
|
@@ -13836,14 +13938,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13836
13938
|
_restoreInFlight;
|
|
13837
13939
|
_addPendingSpends(inputs) {
|
|
13838
13940
|
for (const input of inputs) {
|
|
13839
|
-
if (
|
|
13941
|
+
if (chunkOH2XLTXE_cjs.isVirtualCoin(input)) {
|
|
13840
13942
|
this._pendingSpendOutpoints.add(`${input.txid}:${input.vout}`);
|
|
13841
13943
|
}
|
|
13842
13944
|
}
|
|
13843
13945
|
}
|
|
13844
13946
|
_removePendingSpends(inputs) {
|
|
13845
13947
|
for (const input of inputs) {
|
|
13846
|
-
if (
|
|
13948
|
+
if (chunkOH2XLTXE_cjs.isVirtualCoin(input)) {
|
|
13847
13949
|
this._pendingSpendOutpoints.delete(`${input.txid}:${input.vout}`);
|
|
13848
13950
|
}
|
|
13849
13951
|
}
|
|
@@ -13901,9 +14003,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13901
14003
|
const manager = await this.getContractManager();
|
|
13902
14004
|
const provider = this._descriptorProvider;
|
|
13903
14005
|
const hd = provider instanceof HDDescriptorProvider;
|
|
13904
|
-
const staticDescriptor = hd ? void 0 : await
|
|
14006
|
+
const staticDescriptor = hd ? void 0 : await chunkG53HASDV_cjs.identityDescriptor(this.identity);
|
|
13905
14007
|
const materialize = (index) => hd ? provider.materializeDescriptorAt(index) : staticDescriptor;
|
|
13906
|
-
const delegatePubKey = this.offchainTapscript instanceof
|
|
14008
|
+
const delegatePubKey = this.offchainTapscript instanceof chunkG53HASDV_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
|
|
13907
14009
|
const arkInfo = await this.arkProvider.getInfo();
|
|
13908
14010
|
const currentSignerPubKey = toXOnlyPubKey(base.hex.decode(arkInfo.signerPubkey));
|
|
13909
14011
|
const deprecatedSignerPubKeys = arkInfo.deprecatedSigners.map(
|
|
@@ -13922,7 +14024,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13922
14024
|
csvTimelocks: this.walletContractTimelocks,
|
|
13923
14025
|
// Boarding-exit CSV so the boarding handler can build its
|
|
13924
14026
|
// candidate script (distinct from the unilateral-exit matrix).
|
|
13925
|
-
boardingTimelock: this.boardingTapscript.options.csvTimelock ??
|
|
14027
|
+
boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunkG53HASDV_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
|
|
13926
14028
|
delegatePubKey
|
|
13927
14029
|
};
|
|
13928
14030
|
const result = await manager.scanContracts({
|
|
@@ -14185,7 +14287,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14185
14287
|
inputs: params.selectedVtxos,
|
|
14186
14288
|
changeAmount: BigInt(changeAmount)
|
|
14187
14289
|
};
|
|
14188
|
-
const outputAddress =
|
|
14290
|
+
const outputAddress = chunkOH2XLTXE_cjs.ArkAddress.decode(params.address);
|
|
14189
14291
|
assertRecipientArkAddress(
|
|
14190
14292
|
params.address,
|
|
14191
14293
|
outputAddress,
|
|
@@ -14251,13 +14353,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14251
14353
|
void this.logUngatedInputs("settle({ inputs })", params.inputs);
|
|
14252
14354
|
}
|
|
14253
14355
|
const offchainAddress = await this.getAddress();
|
|
14254
|
-
const offchainPkScript =
|
|
14356
|
+
const offchainPkScript = chunkOH2XLTXE_cjs.ArkAddress.decode(offchainAddress).pkScript;
|
|
14255
14357
|
const offchainOutputScript = base.hex.encode(offchainPkScript);
|
|
14256
14358
|
if (!params) {
|
|
14257
14359
|
const { fees, vtxoMaxAmount } = await this.arkProvider.getInfo();
|
|
14258
14360
|
const estimator = new Estimator(fees.intentFee);
|
|
14259
14361
|
let amount = 0;
|
|
14260
|
-
const exitScript =
|
|
14362
|
+
const exitScript = chunkOH2XLTXE_cjs.CSVMultisigTapscript.decode(
|
|
14261
14363
|
base.hex.decode(this.boardingTapscript.exitScript)
|
|
14262
14364
|
);
|
|
14263
14365
|
const boardingTimelock = exitScript.params.timelock;
|
|
@@ -14286,7 +14388,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14286
14388
|
if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
|
|
14287
14389
|
break;
|
|
14288
14390
|
}
|
|
14289
|
-
const inputFee = estimator.evalOffchainInput(
|
|
14391
|
+
const inputFee = estimator.evalOffchainInput(chunkOH2XLTXE_cjs.toOffchainInputFeeParams(vtxo));
|
|
14290
14392
|
if (inputFee.satoshis >= vtxo.value) {
|
|
14291
14393
|
continue;
|
|
14292
14394
|
}
|
|
@@ -14333,7 +14435,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14333
14435
|
let script;
|
|
14334
14436
|
let arkAddress;
|
|
14335
14437
|
try {
|
|
14336
|
-
arkAddress =
|
|
14438
|
+
arkAddress = chunkOH2XLTXE_cjs.ArkAddress.decode(output.address);
|
|
14337
14439
|
} catch {
|
|
14338
14440
|
arkAddress = void 0;
|
|
14339
14441
|
}
|
|
@@ -14423,7 +14525,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14423
14525
|
const abortController = new AbortController();
|
|
14424
14526
|
let stream;
|
|
14425
14527
|
let committedTxid;
|
|
14426
|
-
const settleInputVtxos = params.inputs.filter(
|
|
14528
|
+
const settleInputVtxos = params.inputs.filter(chunkOH2XLTXE_cjs.isVirtualCoin);
|
|
14427
14529
|
const contractManager = await this.getContractManager();
|
|
14428
14530
|
await contractManager.assertAnnotatable(settleInputVtxos);
|
|
14429
14531
|
await contractManager.assertSpendableNow?.(
|
|
@@ -14532,7 +14634,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14532
14634
|
async maybeRotateBoardingAfterBoard(inputs) {
|
|
14533
14635
|
if (!this._descriptorProvider) return;
|
|
14534
14636
|
const consumedBoarding = inputs.some(
|
|
14535
|
-
(input) => typeof input !== "string" && !
|
|
14637
|
+
(input) => typeof input !== "string" && !chunkOH2XLTXE_cjs.isVirtualCoin(input)
|
|
14536
14638
|
);
|
|
14537
14639
|
if (!consumedBoarding) return;
|
|
14538
14640
|
try {
|
|
@@ -14556,7 +14658,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14556
14658
|
let connectorIndex = 0;
|
|
14557
14659
|
const connectorsLeaves = connectorsGraph?.leaves() || [];
|
|
14558
14660
|
for (const input of inputs) {
|
|
14559
|
-
if (!
|
|
14661
|
+
if (!chunkOH2XLTXE_cjs.isVirtualCoin(input)) {
|
|
14560
14662
|
for (let i = 0; i < settlementPsbt.inputsLength; i++) {
|
|
14561
14663
|
const settlementInput = settlementPsbt.getInput(i);
|
|
14562
14664
|
if (!settlementInput.txid || settlementInput.index === void 0) {
|
|
@@ -14587,7 +14689,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14587
14689
|
}
|
|
14588
14690
|
continue;
|
|
14589
14691
|
}
|
|
14590
|
-
if (
|
|
14692
|
+
if (chunkOH2XLTXE_cjs.canRecoverOnchain(input, { timestamp: /* @__PURE__ */ new Date() }) || isSubdust({ value: input.value }, this.dustAmount)) {
|
|
14591
14693
|
continue;
|
|
14592
14694
|
}
|
|
14593
14695
|
if (connectorsLeaves.length === 0) {
|
|
@@ -14615,7 +14717,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14615
14717
|
index: input.vout,
|
|
14616
14718
|
witnessUtxo: {
|
|
14617
14719
|
amount: BigInt(input.value),
|
|
14618
|
-
script:
|
|
14720
|
+
script: chunkOH2XLTXE_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
14619
14721
|
},
|
|
14620
14722
|
sighashType: btcSigner.SigHash.DEFAULT,
|
|
14621
14723
|
tapLeafScript: [input.forfeitTapLeafScript]
|
|
@@ -14634,7 +14736,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14634
14736
|
forfeitTx = await this._signerRouter.sign(forfeitTx, [
|
|
14635
14737
|
{
|
|
14636
14738
|
index: 0,
|
|
14637
|
-
lookupScript:
|
|
14739
|
+
lookupScript: chunkOH2XLTXE_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
14638
14740
|
}
|
|
14639
14741
|
]);
|
|
14640
14742
|
signedForfeits.push(base.base64.encode(forfeitTx.toPSBT()));
|
|
@@ -14692,7 +14794,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14692
14794
|
resolveBatchExpiryPolicy(this.network, this.batchExpiryPolicy)
|
|
14693
14795
|
);
|
|
14694
14796
|
await this.arkProvider.confirmRegistration(intentId);
|
|
14695
|
-
const sweepTapscript =
|
|
14797
|
+
const sweepTapscript = chunkOH2XLTXE_cjs.CSVMultisigTapscript.encode({
|
|
14696
14798
|
timelock,
|
|
14697
14799
|
pubkeys: [this.forfeitPubkey]
|
|
14698
14800
|
}).script;
|
|
@@ -14798,9 +14900,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14798
14900
|
...existing ?? {},
|
|
14799
14901
|
intentTxId,
|
|
14800
14902
|
registerProof: intent.proof,
|
|
14801
|
-
registerProofMessage:
|
|
14903
|
+
registerProofMessage: chunkOH2XLTXE_cjs.Intent.encodeMessage(intent.message),
|
|
14802
14904
|
deleteProof: deleteIntent.proof,
|
|
14803
|
-
deleteProofMessage:
|
|
14905
|
+
deleteProofMessage: chunkOH2XLTXE_cjs.Intent.encodeMessage(deleteIntent.message),
|
|
14804
14906
|
intentVtxos: inputs.map((i) => ({
|
|
14805
14907
|
txid: i.txid,
|
|
14806
14908
|
vout: i.vout
|
|
@@ -14832,7 +14934,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14832
14934
|
try {
|
|
14833
14935
|
return await this.arkProvider.registerIntent(intent);
|
|
14834
14936
|
} catch (error) {
|
|
14835
|
-
if (error instanceof
|
|
14937
|
+
if (error instanceof chunkOH2XLTXE_cjs.ArkError && error.code === 0 && error.message.includes("duplicated input")) {
|
|
14836
14938
|
const deleteIntent = await this.makeDeleteIntentSignature(inputs);
|
|
14837
14939
|
await this.arkProvider.deleteIntent(deleteIntent);
|
|
14838
14940
|
return this.arkProvider.registerIntent(intent);
|
|
@@ -14848,7 +14950,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14848
14950
|
expire_at: 0,
|
|
14849
14951
|
cosigners_public_keys: cosignerPubKeys
|
|
14850
14952
|
};
|
|
14851
|
-
const proof =
|
|
14953
|
+
const proof = chunkOH2XLTXE_cjs.Intent.create(message, coins, outputs);
|
|
14852
14954
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
14853
14955
|
return {
|
|
14854
14956
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -14860,7 +14962,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14860
14962
|
type: "delete",
|
|
14861
14963
|
expire_at: 0
|
|
14862
14964
|
};
|
|
14863
|
-
const proof =
|
|
14965
|
+
const proof = chunkOH2XLTXE_cjs.Intent.create(message, coins, []);
|
|
14864
14966
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
14865
14967
|
return {
|
|
14866
14968
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -14872,7 +14974,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14872
14974
|
type: "get-pending-tx",
|
|
14873
14975
|
expire_at: 0
|
|
14874
14976
|
};
|
|
14875
|
-
const proof =
|
|
14977
|
+
const proof = chunkOH2XLTXE_cjs.Intent.create(message, coins, []);
|
|
14876
14978
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
14877
14979
|
return {
|
|
14878
14980
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -14893,7 +14995,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14893
14995
|
if (!vtxos || vtxos.length === 0) {
|
|
14894
14996
|
const scriptMap = await this.getScriptMap();
|
|
14895
14997
|
const allExtended = [];
|
|
14896
|
-
const fetchedVtxos = await
|
|
14998
|
+
const fetchedVtxos = await chunkOH2XLTXE_cjs.getAllNormalizedVtxos(this.indexerProvider, [
|
|
14897
14999
|
...scriptMap.keys()
|
|
14898
15000
|
]);
|
|
14899
15001
|
for (const vtxo of fetchedVtxos) {
|
|
@@ -15007,11 +15109,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15007
15109
|
* against the current key alone would leave it pending forever.
|
|
15008
15110
|
*/
|
|
15009
15111
|
checkpointUnrollCandidates(info) {
|
|
15010
|
-
const current =
|
|
15112
|
+
const current = chunkOH2XLTXE_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
|
|
15011
15113
|
const candidates = [this._serverUnrollScript, current];
|
|
15012
15114
|
for (const deprecated of signerSetFromInfo(info).deprecated.keys()) {
|
|
15013
15115
|
candidates.push(
|
|
15014
|
-
|
|
15116
|
+
chunkOH2XLTXE_cjs.CSVMultisigTapscript.encode({
|
|
15015
15117
|
...current.params,
|
|
15016
15118
|
pubkeys: [base.hex.decode(deprecated)]
|
|
15017
15119
|
})
|
|
@@ -15102,7 +15204,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15102
15204
|
if (vtxos.length === 0) {
|
|
15103
15205
|
throw new Error("No VTXOs found for this arkadeCash");
|
|
15104
15206
|
}
|
|
15105
|
-
const myPkScript =
|
|
15207
|
+
const myPkScript = chunkOH2XLTXE_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
|
|
15106
15208
|
let { spendable, unclaimed } = this.classifyCashVtxos(vtxos);
|
|
15107
15209
|
let swept = 0;
|
|
15108
15210
|
const drainable = vtxos.filter((vtxo) => !isSubdust(vtxo, this.dustAmount));
|
|
@@ -15176,7 +15278,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15176
15278
|
const spendable = [];
|
|
15177
15279
|
const unclaimed = [];
|
|
15178
15280
|
for (const vtxo of vtxos) {
|
|
15179
|
-
if (
|
|
15281
|
+
if (chunkOH2XLTXE_cjs.hasTerminalSpend(vtxo)) {
|
|
15180
15282
|
unclaimed.push(cashReport(vtxo, "already-spent"));
|
|
15181
15283
|
} else if (isSubdust(vtxo, this.dustAmount)) {
|
|
15182
15284
|
unclaimed.push(cashReport(vtxo, "subdust"));
|
|
@@ -15196,7 +15298,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15196
15298
|
const all = [];
|
|
15197
15299
|
const seen = /* @__PURE__ */ new Set();
|
|
15198
15300
|
for (let pageIndex = 0; ; pageIndex++) {
|
|
15199
|
-
const { vtxos, page } = await
|
|
15301
|
+
const { vtxos, page } = await chunkOH2XLTXE_cjs.getNormalizedVtxos(this.indexerProvider, {
|
|
15200
15302
|
scripts,
|
|
15201
15303
|
pageIndex,
|
|
15202
15304
|
pageSize
|
|
@@ -15243,7 +15345,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15243
15345
|
for (let i = 0; i < inputs.length; i += MAX_INPUTS_PER_INTENT) {
|
|
15244
15346
|
const batch = inputs.slice(i, i + MAX_INPUTS_PER_INTENT);
|
|
15245
15347
|
const message = { type: "get-pending-tx", expire_at: 0 };
|
|
15246
|
-
const proof =
|
|
15348
|
+
const proof = chunkOH2XLTXE_cjs.Intent.create(message, batch, []);
|
|
15247
15349
|
const signedProof = await identity.sign(
|
|
15248
15350
|
proof,
|
|
15249
15351
|
Array.from({ length: batch.length + 1 }, (_, j) => j)
|
|
@@ -15313,10 +15415,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15313
15415
|
return total;
|
|
15314
15416
|
}
|
|
15315
15417
|
/**
|
|
15316
|
-
* Send BTC and/or assets to one or more recipients
|
|
15418
|
+
* Send BTC and/or assets to one or more recipients, passed either as
|
|
15419
|
+
* variadic `Recipient`s or as a single `SendParams` object — the latter
|
|
15420
|
+
* also carries the virtual outputs to spend.
|
|
15317
15421
|
*
|
|
15318
|
-
* @param args - Recipients
|
|
15422
|
+
* @param args - Recipients, or a `SendParams` object
|
|
15319
15423
|
* @returns Promise resolving to the Arkade transaction ID
|
|
15424
|
+
* @see SendParams
|
|
15320
15425
|
*
|
|
15321
15426
|
* @example
|
|
15322
15427
|
* ```typescript
|
|
@@ -15325,15 +15430,28 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15325
15430
|
* amount: 1000, // (optional, default to dust) btc amount to send to the output
|
|
15326
15431
|
* assets: [{ assetId: 'abc123...', amount: 50n }] // (optional) list of assets to send
|
|
15327
15432
|
* });
|
|
15433
|
+
*
|
|
15434
|
+
* // choosing the inputs as well as the outputs
|
|
15435
|
+
* const txid = await wallet.send({
|
|
15436
|
+
* recipients: [{ address: 'ark1q...', amount: 1000 }],
|
|
15437
|
+
* selectedVtxos: mine, // spent as given, nothing added
|
|
15438
|
+
* });
|
|
15328
15439
|
* ```
|
|
15329
15440
|
*/
|
|
15330
15441
|
async send(...args) {
|
|
15331
|
-
|
|
15442
|
+
const params = asSendParams(args);
|
|
15443
|
+
return this._withTxLock(() => this._sendImpl(params));
|
|
15332
15444
|
}
|
|
15333
|
-
async _sendImpl(
|
|
15445
|
+
async _sendImpl({ recipients: args, selectedVtxos }) {
|
|
15334
15446
|
if (args.length === 0) {
|
|
15335
15447
|
throw new Error("At least one receiver is required");
|
|
15336
15448
|
}
|
|
15449
|
+
if (selectedVtxos && selectedVtxos.length === 0) {
|
|
15450
|
+
throw new Error("send({ selectedVtxos }): no inputs");
|
|
15451
|
+
}
|
|
15452
|
+
if (selectedVtxos) {
|
|
15453
|
+
void this.logUngatedInputs("send({ selectedVtxos })", selectedVtxos);
|
|
15454
|
+
}
|
|
15337
15455
|
const offchainTapscript = this.offchainTapscript;
|
|
15338
15456
|
const serverPubKey = this.arkServerPublicKey;
|
|
15339
15457
|
const serverUnrollScript = this.serverUnrollScript;
|
|
@@ -15344,84 +15462,123 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15344
15462
|
Number(this.dustAmount),
|
|
15345
15463
|
this.recipientAddressContext(serverPubKey)
|
|
15346
15464
|
);
|
|
15347
|
-
|
|
15348
|
-
|
|
15349
|
-
|
|
15465
|
+
let virtualCoins = [];
|
|
15466
|
+
if (!selectedVtxos) {
|
|
15467
|
+
virtualCoins = await this.getSpendableVtxos({
|
|
15468
|
+
withRecoverable: false
|
|
15469
|
+
});
|
|
15470
|
+
}
|
|
15350
15471
|
const assetChanges = /* @__PURE__ */ new Map();
|
|
15351
|
-
let selectedCoins = [];
|
|
15472
|
+
let selectedCoins = selectedVtxos ? [...selectedVtxos] : [];
|
|
15352
15473
|
let btcAmountToSelect = 0;
|
|
15353
15474
|
for (const recipient of recipients) {
|
|
15354
15475
|
btcAmountToSelect += Math.max(recipient.amount, Number(this.dustAmount));
|
|
15355
15476
|
}
|
|
15356
|
-
|
|
15357
|
-
|
|
15358
|
-
|
|
15477
|
+
if (selectedVtxos) {
|
|
15478
|
+
for (const coin of selectedCoins) {
|
|
15479
|
+
for (const asset of coin.assets ?? []) {
|
|
15480
|
+
const existing = assetChanges.get(asset.assetId) ?? 0n;
|
|
15481
|
+
assetChanges.set(asset.assetId, existing + asset.amount);
|
|
15482
|
+
}
|
|
15359
15483
|
}
|
|
15360
|
-
for (const
|
|
15361
|
-
|
|
15362
|
-
|
|
15363
|
-
|
|
15364
|
-
|
|
15365
|
-
|
|
15366
|
-
|
|
15484
|
+
for (const recipient of recipients) {
|
|
15485
|
+
for (const asset of recipient.assets) {
|
|
15486
|
+
const remaining = (assetChanges.get(asset.assetId) ?? 0n) - asset.amount;
|
|
15487
|
+
if (remaining < 0n) {
|
|
15488
|
+
throw new Error(
|
|
15489
|
+
`send({ selectedVtxos }): inputs are short ${-remaining} of asset ${asset.assetId}`
|
|
15490
|
+
);
|
|
15491
|
+
}
|
|
15492
|
+
if (remaining === 0n) {
|
|
15493
|
+
assetChanges.delete(asset.assetId);
|
|
15494
|
+
} else {
|
|
15495
|
+
assetChanges.set(asset.assetId, remaining);
|
|
15367
15496
|
}
|
|
15497
|
+
}
|
|
15498
|
+
}
|
|
15499
|
+
} else {
|
|
15500
|
+
for (const recipient of recipients) {
|
|
15501
|
+
if (!recipient.assets) {
|
|
15368
15502
|
continue;
|
|
15369
15503
|
}
|
|
15370
|
-
|
|
15371
|
-
amountToSelect
|
|
15372
|
-
assetChanges.
|
|
15504
|
+
for (const receiverAsset of recipient.assets) {
|
|
15505
|
+
let amountToSelect = receiverAsset.amount;
|
|
15506
|
+
const existingChange = assetChanges.get(receiverAsset.assetId) ?? 0n;
|
|
15507
|
+
if (existingChange >= amountToSelect) {
|
|
15508
|
+
assetChanges.set(receiverAsset.assetId, existingChange - amountToSelect);
|
|
15509
|
+
if (assetChanges.get(receiverAsset.assetId) === 0n) {
|
|
15510
|
+
assetChanges.delete(receiverAsset.assetId);
|
|
15511
|
+
}
|
|
15512
|
+
continue;
|
|
15513
|
+
}
|
|
15514
|
+
if (existingChange > 0n) {
|
|
15515
|
+
amountToSelect -= existingChange;
|
|
15516
|
+
assetChanges.delete(receiverAsset.assetId);
|
|
15517
|
+
}
|
|
15518
|
+
const availableCoins = virtualCoins.filter(
|
|
15519
|
+
(c) => !selectedCoins.find((sc) => sc.txid === c.txid && sc.vout === c.vout)
|
|
15520
|
+
);
|
|
15521
|
+
const { selected, totalAssetAmount } = selectCoinsWithAsset(
|
|
15522
|
+
availableCoins,
|
|
15523
|
+
receiverAsset.assetId,
|
|
15524
|
+
amountToSelect
|
|
15525
|
+
);
|
|
15526
|
+
for (const coin of selected) {
|
|
15527
|
+
selectedCoins.push(coin);
|
|
15528
|
+
btcAmountToSelect -= coin.value;
|
|
15529
|
+
if (coin.assets) {
|
|
15530
|
+
for (const a of coin.assets) {
|
|
15531
|
+
if (a.assetId === receiverAsset.assetId) {
|
|
15532
|
+
continue;
|
|
15533
|
+
}
|
|
15534
|
+
const existing = assetChanges.get(a.assetId) ?? 0n;
|
|
15535
|
+
assetChanges.set(a.assetId, existing + a.amount);
|
|
15536
|
+
}
|
|
15537
|
+
}
|
|
15538
|
+
}
|
|
15539
|
+
const assetChangeAmount = totalAssetAmount - amountToSelect;
|
|
15540
|
+
if (assetChangeAmount > 0n) {
|
|
15541
|
+
const existing = assetChanges.get(receiverAsset.assetId) ?? 0n;
|
|
15542
|
+
assetChanges.set(receiverAsset.assetId, existing + assetChangeAmount);
|
|
15543
|
+
}
|
|
15373
15544
|
}
|
|
15545
|
+
}
|
|
15546
|
+
if (btcAmountToSelect > 0) {
|
|
15374
15547
|
const availableCoins = virtualCoins.filter(
|
|
15375
15548
|
(c) => !selectedCoins.find((sc) => sc.txid === c.txid && sc.vout === c.vout)
|
|
15376
15549
|
);
|
|
15377
|
-
const {
|
|
15378
|
-
|
|
15379
|
-
receiverAsset.assetId,
|
|
15380
|
-
amountToSelect
|
|
15381
|
-
);
|
|
15382
|
-
for (const coin of selected) {
|
|
15383
|
-
selectedCoins.push(coin);
|
|
15384
|
-
btcAmountToSelect -= coin.value;
|
|
15550
|
+
const { inputs: btcCoins } = selectVirtualCoins(availableCoins, btcAmountToSelect);
|
|
15551
|
+
for (const coin of btcCoins) {
|
|
15385
15552
|
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);
|
|
15553
|
+
for (const asset of coin.assets) {
|
|
15554
|
+
const existing = assetChanges.get(asset.assetId) ?? 0n;
|
|
15555
|
+
assetChanges.set(asset.assetId, existing + asset.amount);
|
|
15392
15556
|
}
|
|
15393
15557
|
}
|
|
15394
15558
|
}
|
|
15395
|
-
|
|
15396
|
-
if (assetChangeAmount > 0n) {
|
|
15397
|
-
const existing = assetChanges.get(receiverAsset.assetId) ?? 0n;
|
|
15398
|
-
assetChanges.set(receiverAsset.assetId, existing + assetChangeAmount);
|
|
15399
|
-
}
|
|
15559
|
+
selectedCoins = [...selectedCoins, ...btcCoins];
|
|
15400
15560
|
}
|
|
15401
15561
|
}
|
|
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
15562
|
let totalBtcSelected = selectedCoins.reduce((sum, c) => sum + c.value, 0);
|
|
15418
15563
|
const outputs = recipients.map((recipient) => ({
|
|
15419
15564
|
script: recipient.script,
|
|
15420
|
-
amount: BigInt(recipient.amount)
|
|
15565
|
+
amount: BigInt(recipient.amount),
|
|
15566
|
+
// Already checked against the recipient address in `validateRecipients`.
|
|
15567
|
+
...recipient.tapTree ? { tapTree: chunkOH2XLTXE_cjs.TapTreeCoder.decode(recipient.tapTree) } : {}
|
|
15421
15568
|
}));
|
|
15422
15569
|
const totalBtcOutput = outputs.reduce((sum, o) => sum + Number(o.amount), 0);
|
|
15423
15570
|
let changeAmount = totalBtcSelected - totalBtcOutput;
|
|
15571
|
+
if (changeAmount < 0) {
|
|
15572
|
+
throw new Error(
|
|
15573
|
+
`send({ selectedVtxos }): inputs total ${totalBtcSelected} sats, outputs need ${totalBtcOutput}`
|
|
15574
|
+
);
|
|
15575
|
+
}
|
|
15424
15576
|
if (assetChanges.size > 0 && changeAmount < Number(this.dustAmount)) {
|
|
15577
|
+
if (selectedVtxos) {
|
|
15578
|
+
throw new Error(
|
|
15579
|
+
`send({ selectedVtxos }): ${changeAmount} sats of change cannot carry ${assetChanges.size} asset change(s), needs ${this.dustAmount}`
|
|
15580
|
+
);
|
|
15581
|
+
}
|
|
15425
15582
|
const availableCoins = virtualCoins.filter(
|
|
15426
15583
|
(c) => !selectedCoins.find((sc) => sc.txid === c.txid && sc.vout === c.vout)
|
|
15427
15584
|
);
|
|
@@ -15551,10 +15708,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15551
15708
|
const serverPubKey = this.arkServerPublicKey;
|
|
15552
15709
|
const serverUnrollScript = this.serverUnrollScript;
|
|
15553
15710
|
const arkAddress = offchainTapscript.address(this.network.hrp, serverPubKey);
|
|
15554
|
-
const normalizedInputs = inputs.map(
|
|
15555
|
-
const at = now ?? await
|
|
15711
|
+
const normalizedInputs = inputs.map(chunkOH2XLTXE_cjs.normalizeVtxo);
|
|
15712
|
+
const at = now ?? await chunkOH2XLTXE_cjs.resolveTimeHeight(this.onchainProvider);
|
|
15556
15713
|
for (const input of normalizedInputs) {
|
|
15557
|
-
if (!
|
|
15714
|
+
if (!chunkOH2XLTXE_cjs.canSpendOffchain(input, at)) {
|
|
15558
15715
|
throw new Error(
|
|
15559
15716
|
`sendSelectedVtxosToSelf: input ${input.txid}:${input.vout} is not cooperatively spendable`
|
|
15560
15717
|
);
|
|
@@ -15624,7 +15781,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15624
15781
|
);
|
|
15625
15782
|
const arkTxJobs = inputs.map((input, index) => ({
|
|
15626
15783
|
index,
|
|
15627
|
-
lookupScript:
|
|
15784
|
+
lookupScript: chunkOH2XLTXE_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
15628
15785
|
}));
|
|
15629
15786
|
const identity = this.identity;
|
|
15630
15787
|
const signer = {
|
|
@@ -15710,14 +15867,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15710
15867
|
const spentBy = checkpointIdByOutpoint.get(`${vtxo.txid}:${vtxo.vout}`);
|
|
15711
15868
|
spentVtxos.push({
|
|
15712
15869
|
...spentFacts,
|
|
15713
|
-
virtualStatus:
|
|
15870
|
+
virtualStatus: chunkOH2XLTXE_cjs.toVirtualStatus(spentFacts),
|
|
15714
15871
|
...spentBy ? { spentBy } : {},
|
|
15715
15872
|
arkTxId: arkTxid
|
|
15716
15873
|
});
|
|
15717
15874
|
for (const id of vtxo.commitmentTxIds) {
|
|
15718
15875
|
commitmentTxIds.add(id);
|
|
15719
15876
|
}
|
|
15720
|
-
const vtxoExpiry =
|
|
15877
|
+
const vtxoExpiry = chunkOH2XLTXE_cjs.toBatchExpiry(vtxo);
|
|
15721
15878
|
if (vtxoExpiry) {
|
|
15722
15879
|
batchExpiry = Math.min(batchExpiry, vtxoExpiry);
|
|
15723
15880
|
}
|
|
@@ -15730,7 +15887,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15730
15887
|
isSwept: false,
|
|
15731
15888
|
isPreconfirmed: true,
|
|
15732
15889
|
commitmentTxIds: Array.from(commitmentTxIds),
|
|
15733
|
-
...
|
|
15890
|
+
...chunkOH2XLTXE_cjs.parseLegacyExpiry(batchExpiry)
|
|
15734
15891
|
};
|
|
15735
15892
|
changeVtxo = {
|
|
15736
15893
|
txid: arkTxid,
|
|
@@ -15742,7 +15899,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15742
15899
|
tapTree: offchainTapscript.encode(),
|
|
15743
15900
|
value: Number(changeAmount),
|
|
15744
15901
|
...changeFacts,
|
|
15745
|
-
virtualStatus:
|
|
15902
|
+
virtualStatus: chunkOH2XLTXE_cjs.toVirtualStatus(changeFacts),
|
|
15746
15903
|
spentBy: "",
|
|
15747
15904
|
status: {
|
|
15748
15905
|
confirmed: false
|
|
@@ -15811,12 +15968,12 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15811
15968
|
const spentVtxos = [];
|
|
15812
15969
|
const inputArkTxIds = /* @__PURE__ */ new Set();
|
|
15813
15970
|
const boardingRemovalsByAddress = /* @__PURE__ */ new Map();
|
|
15814
|
-
const vtxoInputs = inputs.filter(
|
|
15971
|
+
const vtxoInputs = inputs.filter(chunkOH2XLTXE_cjs.isVirtualCoin);
|
|
15815
15972
|
const cm = await this.getContractManager();
|
|
15816
15973
|
const annotatedVtxos = await cm.annotateVtxos(vtxoInputs);
|
|
15817
15974
|
const annotatedByKey = new Map(annotatedVtxos.map((v) => [`${v.txid}:${v.vout}`, v]));
|
|
15818
15975
|
for (const input of inputs) {
|
|
15819
|
-
if (
|
|
15976
|
+
if (chunkOH2XLTXE_cjs.isVirtualCoin(input)) {
|
|
15820
15977
|
const outpoint = `${input.txid}:${input.vout}`;
|
|
15821
15978
|
const vtxo = annotatedByKey.get(outpoint);
|
|
15822
15979
|
if (!vtxo) {
|
|
@@ -15828,13 +15985,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15828
15985
|
const settledFacts = { ...vtxo, isSpent: true };
|
|
15829
15986
|
spentVtxos.push({
|
|
15830
15987
|
...settledFacts,
|
|
15831
|
-
virtualStatus:
|
|
15988
|
+
virtualStatus: chunkOH2XLTXE_cjs.toVirtualStatus(settledFacts),
|
|
15832
15989
|
settledBy: commitmentTxid
|
|
15833
15990
|
});
|
|
15834
15991
|
} else {
|
|
15835
15992
|
let sourceAddress;
|
|
15836
15993
|
try {
|
|
15837
|
-
sourceAddress =
|
|
15994
|
+
sourceAddress = chunkOH2XLTXE_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
|
|
15838
15995
|
this.network
|
|
15839
15996
|
);
|
|
15840
15997
|
} catch {
|
|
@@ -15892,9 +16049,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15892
16049
|
}
|
|
15893
16050
|
};
|
|
15894
16051
|
function selectVirtualCoins(coins, targetAmount) {
|
|
15895
|
-
const sortedCoins = coins.map(
|
|
15896
|
-
const expiryA =
|
|
15897
|
-
const expiryB =
|
|
16052
|
+
const sortedCoins = coins.map(chunkOH2XLTXE_cjs.normalizeVtxo).sort((a, b) => {
|
|
16053
|
+
const expiryA = chunkOH2XLTXE_cjs.toBatchExpiry(a) || Number.MAX_SAFE_INTEGER;
|
|
16054
|
+
const expiryB = chunkOH2XLTXE_cjs.toBatchExpiry(b) || Number.MAX_SAFE_INTEGER;
|
|
15898
16055
|
if (expiryA !== expiryB) {
|
|
15899
16056
|
return expiryA - expiryB;
|
|
15900
16057
|
}
|
|
@@ -16154,7 +16311,7 @@ var MessageBus = class {
|
|
|
16154
16311
|
this.initialized = true;
|
|
16155
16312
|
}
|
|
16156
16313
|
async buildServices(config) {
|
|
16157
|
-
const arkProvider = new
|
|
16314
|
+
const arkProvider = new chunkOH2XLTXE_cjs.RestArkProvider(config.arkServer.url);
|
|
16158
16315
|
const storage = {
|
|
16159
16316
|
walletRepository: this.walletRepository,
|
|
16160
16317
|
contractRepository: this.contractRepository,
|
|
@@ -16496,7 +16653,7 @@ var offboardNetworkNames = [
|
|
|
16496
16653
|
function offboardDestinationScript(destinationAddress) {
|
|
16497
16654
|
for (const networkName of offboardNetworkNames) {
|
|
16498
16655
|
try {
|
|
16499
|
-
const network =
|
|
16656
|
+
const network = chunkOH2XLTXE_cjs.networks[networkName];
|
|
16500
16657
|
const addr = btcSigner.Address(network).decode(destinationAddress);
|
|
16501
16658
|
return btcSigner.OutScript.encode(addr);
|
|
16502
16659
|
} catch {
|
|
@@ -16560,7 +16717,7 @@ var Ramps = class {
|
|
|
16560
16717
|
}
|
|
16561
16718
|
amount = amount ?? totalAmount;
|
|
16562
16719
|
const offchainAddress = await this.wallet.getAddress();
|
|
16563
|
-
const offchainAddr =
|
|
16720
|
+
const offchainAddr = chunkOH2XLTXE_cjs.ArkAddress.decode(offchainAddress);
|
|
16564
16721
|
const offchainScript = base.hex.encode(offchainAddr.pkScript);
|
|
16565
16722
|
const outputFee = estimator.evalOffchainOutput({
|
|
16566
16723
|
amount,
|
|
@@ -16620,7 +16777,7 @@ var Ramps = class {
|
|
|
16620
16777
|
const filteredVtxos = [];
|
|
16621
16778
|
let totalAmount = 0n;
|
|
16622
16779
|
for (const vtxo of vtxos) {
|
|
16623
|
-
const inputFee = estimator.evalOffchainInput(
|
|
16780
|
+
const inputFee = estimator.evalOffchainInput(chunkOH2XLTXE_cjs.toOffchainInputFeeParams(vtxo));
|
|
16624
16781
|
if (inputFee.satoshis >= vtxo.value) {
|
|
16625
16782
|
continue;
|
|
16626
16783
|
}
|
|
@@ -17184,8 +17341,8 @@ var WalletMessageHandler = class {
|
|
|
17184
17341
|
});
|
|
17185
17342
|
}
|
|
17186
17343
|
case "SEND": {
|
|
17187
|
-
const { recipients } = message.payload;
|
|
17188
|
-
const txid = await this.wallet.send(...recipients);
|
|
17344
|
+
const { recipients, selectedVtxos } = message.payload;
|
|
17345
|
+
const txid = await (selectedVtxos ? this.wallet.send({ recipients, selectedVtxos }) : this.wallet.send(...recipients));
|
|
17189
17346
|
return this.tagged({
|
|
17190
17347
|
id,
|
|
17191
17348
|
type: "SEND_SUCCESS",
|
|
@@ -17387,7 +17544,7 @@ var WalletMessageHandler = class {
|
|
|
17387
17544
|
// Wallet methods
|
|
17388
17545
|
async handleInitWallet({ payload }) {
|
|
17389
17546
|
const { arkServerUrl } = payload;
|
|
17390
|
-
this.indexerProvider = new
|
|
17547
|
+
this.indexerProvider = new chunkI6EDUE75_cjs.RestIndexerProvider(arkServerUrl);
|
|
17391
17548
|
await this.onWalletInitialized();
|
|
17392
17549
|
}
|
|
17393
17550
|
/**
|
|
@@ -17433,6 +17590,8 @@ var WalletMessageHandler = class {
|
|
|
17433
17590
|
settled: offchain.settled,
|
|
17434
17591
|
preconfirmed: offchain.preconfirmed,
|
|
17435
17592
|
available: offchain.available,
|
|
17593
|
+
gated: offchain.gated,
|
|
17594
|
+
intentLocked: offchain.intentLocked,
|
|
17436
17595
|
recoverable: offchain.recoverable,
|
|
17437
17596
|
pendingRecovery: offchain.pendingRecovery,
|
|
17438
17597
|
total: totalBoarding + offchain.total,
|
|
@@ -17652,17 +17811,17 @@ var WalletMessageHandler = class {
|
|
|
17652
17811
|
throw new WalletNotInitializedError();
|
|
17653
17812
|
}
|
|
17654
17813
|
const allVtxos = await this.getVtxosFromRepo();
|
|
17655
|
-
const vtxos = allVtxos.filter((v) => !
|
|
17814
|
+
const vtxos = allVtxos.filter((v) => !chunkOH2XLTXE_cjs.hasTerminalSpend(v));
|
|
17656
17815
|
const dustAmount = this.readonlyWallet.dustAmount;
|
|
17657
17816
|
const includeRecoverable = message.payload.filter?.withRecoverable ?? false;
|
|
17658
17817
|
const filteredVtxos = includeRecoverable ? vtxos : vtxos.filter((v) => {
|
|
17659
17818
|
if (dustAmount != null && isSubdust(v, dustAmount)) {
|
|
17660
17819
|
return false;
|
|
17661
17820
|
}
|
|
17662
|
-
if (
|
|
17821
|
+
if (chunkOH2XLTXE_cjs.isRecoverable(v)) {
|
|
17663
17822
|
return false;
|
|
17664
17823
|
}
|
|
17665
|
-
if (
|
|
17824
|
+
if (chunkOH2XLTXE_cjs.isExpired(v)) {
|
|
17666
17825
|
return false;
|
|
17667
17826
|
}
|
|
17668
17827
|
return true;
|
|
@@ -17670,7 +17829,7 @@ var WalletMessageHandler = class {
|
|
|
17670
17829
|
if (!message.payload.filter?.withUnrolled) {
|
|
17671
17830
|
return filteredVtxos;
|
|
17672
17831
|
}
|
|
17673
|
-
return filteredVtxos.concat(allVtxos.filter((v) =>
|
|
17832
|
+
return filteredVtxos.concat(allVtxos.filter((v) => chunkOH2XLTXE_cjs.hasTerminalSpend(v) && v.isUnrolled));
|
|
17674
17833
|
}
|
|
17675
17834
|
/** Tear down handler subscriptions, then delegate the full wipe to the wallet. */
|
|
17676
17835
|
async clear() {
|
|
@@ -17760,7 +17919,7 @@ var WalletMessageHandler = class {
|
|
|
17760
17919
|
if (!this.readonlyWallet) return null;
|
|
17761
17920
|
const { boardingTxs, commitmentsToIgnore } = await this.readonlyWallet.getBoardingTxs();
|
|
17762
17921
|
const indexerProvider = this.indexerProvider;
|
|
17763
|
-
const resolveTxCreatedAt = indexerProvider ? (txids) =>
|
|
17922
|
+
const resolveTxCreatedAt = indexerProvider ? (txids) => chunkOH2XLTXE_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
|
|
17764
17923
|
return buildTransactionHistory(vtxos, boardingTxs, commitmentsToIgnore, resolveTxCreatedAt);
|
|
17765
17924
|
}
|
|
17766
17925
|
async ensureContractEventBroadcasting() {
|
|
@@ -18449,7 +18608,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
18449
18608
|
};
|
|
18450
18609
|
try {
|
|
18451
18610
|
const response = await this.sendMessage(message);
|
|
18452
|
-
return response.payload.vtxos.map(
|
|
18611
|
+
return response.payload.vtxos.map(chunkOH2XLTXE_cjs.normalizeVtxo);
|
|
18453
18612
|
} catch (error) {
|
|
18454
18613
|
throw new Error(`Failed to get vtxos: ${error}`);
|
|
18455
18614
|
}
|
|
@@ -18474,7 +18633,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
18474
18633
|
};
|
|
18475
18634
|
try {
|
|
18476
18635
|
const response = await this.sendMessage(message);
|
|
18477
|
-
return response.payload.vtxos.map(
|
|
18636
|
+
return response.payload.vtxos.map(chunkOH2XLTXE_cjs.normalizeVtxo);
|
|
18478
18637
|
} catch (error) {
|
|
18479
18638
|
throw new Error(`Failed to get spendable vtxos: ${error}`);
|
|
18480
18639
|
}
|
|
@@ -18605,7 +18764,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
18605
18764
|
};
|
|
18606
18765
|
try {
|
|
18607
18766
|
const response = await sendContractMessage(message);
|
|
18608
|
-
return response.payload.vtxos.map(
|
|
18767
|
+
return response.payload.vtxos.map(chunkOH2XLTXE_cjs.normalizeVtxo);
|
|
18609
18768
|
} catch (e) {
|
|
18610
18769
|
throw new Error("Failed to annotate vtxos");
|
|
18611
18770
|
}
|
|
@@ -19056,12 +19215,16 @@ var ServiceWorkerWallet = class _ServiceWorkerWallet extends ServiceWorkerReadon
|
|
|
19056
19215
|
throw error;
|
|
19057
19216
|
}
|
|
19058
19217
|
}
|
|
19059
|
-
async send(...
|
|
19218
|
+
async send(...args) {
|
|
19219
|
+
const [first] = args;
|
|
19220
|
+
const { recipients, selectedVtxos } = args.length === 1 && first && "recipients" in first ? first : { recipients: args, selectedVtxos: void 0 };
|
|
19060
19221
|
const message = {
|
|
19061
19222
|
tag: this.messageTag,
|
|
19062
19223
|
type: "SEND",
|
|
19063
19224
|
id: getRandomId(),
|
|
19064
|
-
|
|
19225
|
+
// Omitted rather than sent as `undefined`, so an older worker sees
|
|
19226
|
+
// exactly the payload it saw before.
|
|
19227
|
+
payload: selectedVtxos ? { recipients, selectedVtxos } : { recipients }
|
|
19065
19228
|
};
|
|
19066
19229
|
try {
|
|
19067
19230
|
const response = await this.sendMessage(message);
|
|
@@ -19173,7 +19336,7 @@ var ServiceWorkerWallet = class _ServiceWorkerWallet extends ServiceWorkerReadon
|
|
|
19173
19336
|
};
|
|
19174
19337
|
try {
|
|
19175
19338
|
const response = await wallet.sendMessage(message);
|
|
19176
|
-
return response.payload.vtxos.map(
|
|
19339
|
+
return response.payload.vtxos.map(chunkOH2XLTXE_cjs.normalizeVtxo);
|
|
19177
19340
|
} catch (e) {
|
|
19178
19341
|
throw new Error(`Failed to get expiring vtxos: ${e}`);
|
|
19179
19342
|
}
|
|
@@ -19285,12 +19448,12 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
19285
19448
|
* @returns Configured onchain wallet
|
|
19286
19449
|
* @throws Error if the configured identity cannot produce a valid x-only public key
|
|
19287
19450
|
*/
|
|
19288
|
-
static async create(identity, networkName =
|
|
19451
|
+
static async create(identity, networkName = chunkOH2XLTXE_cjs.DEFAULT_NETWORK_NAME, provider) {
|
|
19289
19452
|
const pubkey = await identity.xOnlyPublicKey();
|
|
19290
19453
|
if (!pubkey) {
|
|
19291
19454
|
throw new Error("Invalid configured public key");
|
|
19292
19455
|
}
|
|
19293
|
-
const network =
|
|
19456
|
+
const network = chunkOH2XLTXE_cjs.getNetwork(networkName);
|
|
19294
19457
|
const onchainProvider = provider || new EsploraProvider(ESPLORA_URL[networkName]);
|
|
19295
19458
|
const onchainP2TR = btcSigner.p2tr(pubkey, void 0, network);
|
|
19296
19459
|
return new _OnchainWallet(identity, network, onchainP2TR, onchainProvider);
|
|
@@ -19396,7 +19559,7 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
19396
19559
|
if (!inputs) {
|
|
19397
19560
|
throw new Error("Fee estimation failed");
|
|
19398
19561
|
}
|
|
19399
|
-
let tx = new
|
|
19562
|
+
let tx = new chunkOH2XLTXE_cjs.Transaction();
|
|
19400
19563
|
for (const input of inputs) {
|
|
19401
19564
|
tx.addInput({
|
|
19402
19565
|
txid: input.txid,
|
|
@@ -19454,7 +19617,7 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
19454
19617
|
* @throws If the parent has no anchor, or funding cannot be selected/signed
|
|
19455
19618
|
*/
|
|
19456
19619
|
async bumpAnchor(parentHex, feeRate) {
|
|
19457
|
-
const parent =
|
|
19620
|
+
const parent = chunkOH2XLTXE_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
|
|
19458
19621
|
const coins = (await this.getCoins()).filter((c) => c.status.confirmed);
|
|
19459
19622
|
const child = await this.buildBumpPackage(parent, feeRate, coins);
|
|
19460
19623
|
return [parent.hex, child.hex];
|
|
@@ -20219,7 +20382,7 @@ exports.BIP322 = void 0;
|
|
|
20219
20382
|
async function sign2(message, identity, network) {
|
|
20220
20383
|
const xOnlyPubKey = await identity.xOnlyPublicKey();
|
|
20221
20384
|
const payment = btcSigner.p2tr(xOnlyPubKey, void 0, network);
|
|
20222
|
-
const toSpend =
|
|
20385
|
+
const toSpend = chunkOH2XLTXE_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
|
|
20223
20386
|
const toSign = craftBIP322ToSignP2TR(toSpend, payment.script, xOnlyPubKey);
|
|
20224
20387
|
const signed = await identity.sign(toSign, [0]);
|
|
20225
20388
|
signed.finalizeIdx(0);
|
|
@@ -20277,7 +20440,7 @@ function verifyP2TR(message, witnessItems, pkScript, pubkey) {
|
|
|
20277
20440
|
if (sighashType !== btcSigner.SigHash.DEFAULT && sighashType !== btcSigner.SigHash.ALL) {
|
|
20278
20441
|
return false;
|
|
20279
20442
|
}
|
|
20280
|
-
const toSpend =
|
|
20443
|
+
const toSpend = chunkOH2XLTXE_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
|
|
20281
20444
|
const toSign = craftBIP322ToSignP2TR(toSpend, pkScript, pubkey);
|
|
20282
20445
|
const sighash = toSign.preimageWitnessV1(0, [pkScript], sighashType, [0n]);
|
|
20283
20446
|
const rawSig = sig.length === 65 ? sig.subarray(0, 64) : sig;
|
|
@@ -20298,7 +20461,7 @@ function verifyP2WPKH(message, witnessItems, pkScript, addressHash) {
|
|
|
20298
20461
|
}
|
|
20299
20462
|
const sighashType = sigWithHash[sigWithHash.length - 1];
|
|
20300
20463
|
const derSig = sigWithHash.subarray(0, sigWithHash.length - 1);
|
|
20301
|
-
const toSpend =
|
|
20464
|
+
const toSpend = chunkOH2XLTXE_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
|
|
20302
20465
|
const toSign = craftBIP322ToSignSimple(toSpend, pkScript);
|
|
20303
20466
|
const scriptCode = btcSigner.OutScript.encode({ type: "pkh", hash: addressHash });
|
|
20304
20467
|
const sighash = toSign.preimageWitnessV0(0, scriptCode, sighashType, 0n);
|
|
@@ -20351,7 +20514,7 @@ function encodeCompactSize(n) {
|
|
|
20351
20514
|
return buf;
|
|
20352
20515
|
}
|
|
20353
20516
|
function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
|
|
20354
|
-
const tx = new
|
|
20517
|
+
const tx = new chunkOH2XLTXE_cjs.Transaction({ version: 0 });
|
|
20355
20518
|
tx.addInput({
|
|
20356
20519
|
txid: toSpend.id,
|
|
20357
20520
|
index: 0,
|
|
@@ -20365,12 +20528,12 @@ function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
|
|
|
20365
20528
|
});
|
|
20366
20529
|
tx.addOutput({
|
|
20367
20530
|
amount: 0n,
|
|
20368
|
-
script:
|
|
20531
|
+
script: chunkOH2XLTXE_cjs.OP_RETURN_EMPTY_PKSCRIPT
|
|
20369
20532
|
});
|
|
20370
20533
|
return tx;
|
|
20371
20534
|
}
|
|
20372
20535
|
function craftBIP322ToSignSimple(toSpend, pkScript) {
|
|
20373
|
-
const tx = new
|
|
20536
|
+
const tx = new chunkOH2XLTXE_cjs.Transaction({ version: 0 });
|
|
20374
20537
|
tx.addInput({
|
|
20375
20538
|
txid: toSpend.id,
|
|
20376
20539
|
index: 0,
|
|
@@ -20382,7 +20545,7 @@ function craftBIP322ToSignSimple(toSpend, pkScript) {
|
|
|
20382
20545
|
});
|
|
20383
20546
|
tx.addOutput({
|
|
20384
20547
|
amount: 0n,
|
|
20385
|
-
script:
|
|
20548
|
+
script: chunkOH2XLTXE_cjs.OP_RETURN_EMPTY_PKSCRIPT
|
|
20386
20549
|
});
|
|
20387
20550
|
return tx;
|
|
20388
20551
|
}
|
|
@@ -20513,7 +20676,7 @@ var RestEmulatorProvider = class {
|
|
|
20513
20676
|
}
|
|
20514
20677
|
};
|
|
20515
20678
|
function finalizeVirtualTx(type, psbtBase64) {
|
|
20516
|
-
const tx =
|
|
20679
|
+
const tx = chunkOH2XLTXE_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
|
|
20517
20680
|
if (type === "INDEXER_CHAINED_TX_TYPE_TREE" /* TREE */) {
|
|
20518
20681
|
const input = tx.getInput(0);
|
|
20519
20682
|
if (!input) {
|
|
@@ -20540,14 +20703,14 @@ var ExitPathError = class extends Error {
|
|
|
20540
20703
|
reason;
|
|
20541
20704
|
};
|
|
20542
20705
|
function delayWeight(sequence) {
|
|
20543
|
-
const t =
|
|
20706
|
+
const t = chunkOH2XLTXE_cjs.sequenceToTimelock(sequence);
|
|
20544
20707
|
return t.type === "blocks" ? Number(t.value) : Number(t.value) / 600;
|
|
20545
20708
|
}
|
|
20546
20709
|
async function resolveUnilateralPath(params) {
|
|
20547
20710
|
const { vtxo, scriptHex, contractRepository } = params;
|
|
20548
20711
|
const contract = contractRepository ? (await contractRepository.getContracts({ script: scriptHex }))[0] : void 0;
|
|
20549
20712
|
if (contract) {
|
|
20550
|
-
const handler =
|
|
20713
|
+
const handler = chunkG53HASDV_cjs.contractHandlers.get(contract.type);
|
|
20551
20714
|
if (!handler) {
|
|
20552
20715
|
throw new ExitPathError(
|
|
20553
20716
|
"no-handler",
|
|
@@ -20570,12 +20733,12 @@ async function resolveUnilateralPath(params) {
|
|
|
20570
20733
|
paths.sort((a, b) => delayWeight(a.sequence) - delayWeight(b.sequence));
|
|
20571
20734
|
return { selection: paths[0], label: `${contract.type}:unilateral` };
|
|
20572
20735
|
}
|
|
20573
|
-
const decoded =
|
|
20736
|
+
const decoded = chunkOH2XLTXE_cjs.VtxoScript.decode(vtxo.tapTree);
|
|
20574
20737
|
let best;
|
|
20575
20738
|
for (const exit of decoded.exitPaths()) {
|
|
20576
20739
|
const leaf = decoded.findLeaf(base.hex.encode(exit.script));
|
|
20577
20740
|
if (!leaf) continue;
|
|
20578
|
-
const sequence =
|
|
20741
|
+
const sequence = chunkOH2XLTXE_cjs.timelockToSequence(exit.params.timelock);
|
|
20579
20742
|
const weight = delayWeight(sequence);
|
|
20580
20743
|
if (!best || weight < best.weight) {
|
|
20581
20744
|
best = { selection: { leaf, sequence }, weight };
|
|
@@ -20761,14 +20924,14 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
20761
20924
|
}
|
|
20762
20925
|
const resolved = await resolveUnilateralPath({
|
|
20763
20926
|
vtxo,
|
|
20764
|
-
scriptHex: base.hex.encode(
|
|
20927
|
+
scriptHex: base.hex.encode(chunkOH2XLTXE_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
|
|
20765
20928
|
contractRepository: wallet.contractRepository,
|
|
20766
20929
|
walletPubKeyHex: base.hex.encode(await wallet.identity.xOnlyPublicKey()),
|
|
20767
20930
|
currentTime: Date.now()
|
|
20768
20931
|
});
|
|
20769
20932
|
const spendingLeaf = resolved.selection.leaf;
|
|
20770
20933
|
const sequence = resolved.selection.sequence;
|
|
20771
|
-
const timelock =
|
|
20934
|
+
const timelock = chunkOH2XLTXE_cjs.sequenceToTimelock(sequence);
|
|
20772
20935
|
const elapsed = timelock.type === "blocks" ? chainTip.height >= txStatus.blockHeight + Number(timelock.value) : chainTip.time >= txStatus.blockTime + Number(timelock.value);
|
|
20773
20936
|
if (!elapsed) {
|
|
20774
20937
|
throw new Error(`no available exit path found for vtxo ${vtxo.txid}:${vtxo.vout}`);
|
|
@@ -20781,7 +20944,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
20781
20944
|
sequence,
|
|
20782
20945
|
witnessUtxo: {
|
|
20783
20946
|
amount: BigInt(vtxo.value),
|
|
20784
|
-
script:
|
|
20947
|
+
script: chunkOH2XLTXE_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
|
|
20785
20948
|
},
|
|
20786
20949
|
sighashType: btcSigner.SigHash.DEFAULT
|
|
20787
20950
|
});
|
|
@@ -20791,7 +20954,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
20791
20954
|
btcSigner.TaprootControlBlock.encode(spendingLeaf[0]).length
|
|
20792
20955
|
);
|
|
20793
20956
|
}
|
|
20794
|
-
const tx = new
|
|
20957
|
+
const tx = new chunkOH2XLTXE_cjs.Transaction({ version: 2 });
|
|
20795
20958
|
for (const input of inputs) {
|
|
20796
20959
|
tx.addInput(input);
|
|
20797
20960
|
}
|
|
@@ -20858,7 +21021,7 @@ async function buildSignedSweep(params) {
|
|
|
20858
21021
|
`uneconomic vtxo ${vtxo.txid}:${vtxo.vout}: value ${vtxo.value} - fee ${fee} < dust`
|
|
20859
21022
|
);
|
|
20860
21023
|
}
|
|
20861
|
-
const tx = new
|
|
21024
|
+
const tx = new chunkOH2XLTXE_cjs.Transaction({ version: 2 });
|
|
20862
21025
|
tx.addInput({
|
|
20863
21026
|
txid: vtxo.txid,
|
|
20864
21027
|
index: vtxo.vout,
|
|
@@ -20883,7 +21046,7 @@ async function buildSignedSweep(params) {
|
|
|
20883
21046
|
finalScriptWitness: [
|
|
20884
21047
|
tapScriptSig[0][1],
|
|
20885
21048
|
...path.extraWitness,
|
|
20886
|
-
|
|
21049
|
+
chunkOH2XLTXE_cjs.scriptFromTapLeafScript(path.leaf),
|
|
20887
21050
|
btcSigner.TaprootControlBlock.encode(controlBlock)
|
|
20888
21051
|
]
|
|
20889
21052
|
});
|
|
@@ -20913,7 +21076,7 @@ async function resolveFeeRate(opts) {
|
|
|
20913
21076
|
}
|
|
20914
21077
|
async function selectExitVtxos(opts) {
|
|
20915
21078
|
if (!opts.vtxos) return opts.wallet.getVtxos();
|
|
20916
|
-
const res = await
|
|
21079
|
+
const res = await chunkOH2XLTXE_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
|
|
20917
21080
|
const tapTrees = /* @__PURE__ */ new Map();
|
|
20918
21081
|
const out = [];
|
|
20919
21082
|
for (const vtxo of res.vtxos) {
|
|
@@ -20928,7 +21091,7 @@ async function selectExitVtxos(opts) {
|
|
|
20928
21091
|
`no contract registered for vtxo script ${vtxo.script} \u2014 register the contract before exiting`
|
|
20929
21092
|
);
|
|
20930
21093
|
}
|
|
20931
|
-
const handler =
|
|
21094
|
+
const handler = chunkG53HASDV_cjs.contractHandlers.get(contract.type);
|
|
20932
21095
|
if (!handler) {
|
|
20933
21096
|
throw new Error(`no contract handler registered for type '${contract.type}'`);
|
|
20934
21097
|
}
|
|
@@ -20958,7 +21121,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
20958
21121
|
if (pendingNodes.length > 0) {
|
|
20959
21122
|
const txs = await resolver.getVirtualTxs(pendingNodes.map((n) => n.txid));
|
|
20960
21123
|
for (const psbt of txs) {
|
|
20961
|
-
psbts.set(
|
|
21124
|
+
psbts.set(chunkOH2XLTXE_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
20962
21125
|
}
|
|
20963
21126
|
}
|
|
20964
21127
|
const childVsize = Number(
|
|
@@ -20994,7 +21157,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
20994
21157
|
try {
|
|
20995
21158
|
const resolved = await resolveUnilateralPath({
|
|
20996
21159
|
vtxo,
|
|
20997
|
-
scriptHex: base.hex.encode(
|
|
21160
|
+
scriptHex: base.hex.encode(chunkOH2XLTXE_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
|
|
20998
21161
|
contractRepository: wallet.contractRepository,
|
|
20999
21162
|
walletPubKeyHex,
|
|
21000
21163
|
currentTime: Date.now()
|
|
@@ -21013,7 +21176,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
21013
21176
|
});
|
|
21014
21177
|
continue;
|
|
21015
21178
|
}
|
|
21016
|
-
const t =
|
|
21179
|
+
const t = chunkOH2XLTXE_cjs.sequenceToTimelock(resolved.selection.sequence);
|
|
21017
21180
|
const delay = { type: t.type, value: Number(t.value) };
|
|
21018
21181
|
infos.push({ outpoint, value: vtxo.value, sweepFee, path: resolved.label, delay });
|
|
21019
21182
|
sweeps.push({ vtxo, resolved, sweepFee, delay });
|
|
@@ -21352,7 +21515,7 @@ async function prepare(opts) {
|
|
|
21352
21515
|
txid: sweep.vtxo.txid,
|
|
21353
21516
|
vout: sweep.vtxo.vout,
|
|
21354
21517
|
value: sweep.vtxo.value,
|
|
21355
|
-
pkScript:
|
|
21518
|
+
pkScript: chunkOH2XLTXE_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
|
|
21356
21519
|
},
|
|
21357
21520
|
path: sweep.resolved.selection,
|
|
21358
21521
|
outputAddress: opts.sweepAddress,
|
|
@@ -21437,7 +21600,7 @@ async function prepare(opts) {
|
|
|
21437
21600
|
if (newFee <= splitterFee) break;
|
|
21438
21601
|
splitterFee = newFee;
|
|
21439
21602
|
}
|
|
21440
|
-
const splitter = new
|
|
21603
|
+
const splitter = new chunkOH2XLTXE_cjs.Transaction({ version: 2 });
|
|
21441
21604
|
for (const coin of selected.inputs) {
|
|
21442
21605
|
splitter.addInput({
|
|
21443
21606
|
txid: coin.txid,
|
|
@@ -21580,41 +21743,41 @@ var UnilateralExit = {
|
|
|
21580
21743
|
// src/arkade/index.ts
|
|
21581
21744
|
var arkade_exports = {};
|
|
21582
21745
|
chunk5BLDMQED_cjs.__export(arkade_exports, {
|
|
21583
|
-
ARKADE_OP: () =>
|
|
21584
|
-
ARKADE_OPCODES: () =>
|
|
21585
|
-
ARKADE_OPCODE_NAMES: () =>
|
|
21586
|
-
ARKADE_OPCODE_VALUES: () =>
|
|
21587
|
-
ARKADE_OPS: () =>
|
|
21746
|
+
ARKADE_OP: () => chunkG53HASDV_cjs.ARKADE_OP,
|
|
21747
|
+
ARKADE_OPCODES: () => chunkG53HASDV_cjs.ARKADE_OPCODES,
|
|
21748
|
+
ARKADE_OPCODE_NAMES: () => chunkG53HASDV_cjs.ARKADE_OPCODE_NAMES,
|
|
21749
|
+
ARKADE_OPCODE_VALUES: () => chunkG53HASDV_cjs.ARKADE_OPCODE_VALUES,
|
|
21750
|
+
ARKADE_OPS: () => chunkG53HASDV_cjs.ARKADE_OPS,
|
|
21588
21751
|
Arkade: () => Arkade,
|
|
21589
21752
|
ArkadeContract: () => ArkadeContract,
|
|
21590
|
-
ArkadeProgramScript: () =>
|
|
21591
|
-
ArkadeScript: () =>
|
|
21753
|
+
ArkadeProgramScript: () => chunkG53HASDV_cjs.ArkadeProgramScript,
|
|
21754
|
+
ArkadeScript: () => chunkG53HASDV_cjs.ArkadeScript,
|
|
21592
21755
|
ArkadeTransactionBuilder: () => ArkadeTransactionBuilder,
|
|
21593
|
-
BigNum: () =>
|
|
21756
|
+
BigNum: () => chunkG53HASDV_cjs.bignum_exports,
|
|
21594
21757
|
OP: () => btcSigner.OP,
|
|
21595
|
-
OPCODE_NAMES: () =>
|
|
21596
|
-
OPCODE_VALUES: () =>
|
|
21597
|
-
SUPPORTED_PROGRAM_VERSION: () =>
|
|
21758
|
+
OPCODE_NAMES: () => chunkG53HASDV_cjs.OPCODE_NAMES,
|
|
21759
|
+
OPCODE_VALUES: () => chunkG53HASDV_cjs.OPCODE_VALUES,
|
|
21760
|
+
SUPPORTED_PROGRAM_VERSION: () => chunkG53HASDV_cjs.SUPPORTED_PROGRAM_VERSION,
|
|
21598
21761
|
Script: () => btcSigner.Script,
|
|
21599
|
-
arkadeScriptHash: () =>
|
|
21600
|
-
arkadeWitnessHash: () =>
|
|
21601
|
-
asmToBytes: () =>
|
|
21602
|
-
bytesToASM: () =>
|
|
21603
|
-
computeArkadeScriptPublicKey: () =>
|
|
21762
|
+
arkadeScriptHash: () => chunkG53HASDV_cjs.arkadeScriptHash,
|
|
21763
|
+
arkadeWitnessHash: () => chunkG53HASDV_cjs.arkadeWitnessHash,
|
|
21764
|
+
asmToBytes: () => chunkG53HASDV_cjs.asmToBytes,
|
|
21765
|
+
bytesToASM: () => chunkG53HASDV_cjs.bytesToASM,
|
|
21766
|
+
computeArkadeScriptPublicKey: () => chunkG53HASDV_cjs.computeArkadeScriptPublicKey,
|
|
21604
21767
|
createArkadeBatchHandler: () => createArkadeBatchHandler,
|
|
21605
|
-
deserializeArkadeContractParams: () =>
|
|
21606
|
-
fromASM: () =>
|
|
21607
|
-
getOpcodeName: () =>
|
|
21608
|
-
getOpcodeValue: () =>
|
|
21609
|
-
parseArtifact: () =>
|
|
21610
|
-
resolveAsm: () =>
|
|
21611
|
-
serializeArkadeContractParams: () =>
|
|
21612
|
-
stringifyArtifact: () =>
|
|
21613
|
-
toASM: () =>
|
|
21614
|
-
validateProgram: () =>
|
|
21615
|
-
witnessRefToBytes: () =>
|
|
21768
|
+
deserializeArkadeContractParams: () => chunkG53HASDV_cjs.deserializeArkadeContractParams,
|
|
21769
|
+
fromASM: () => chunkG53HASDV_cjs.fromASM,
|
|
21770
|
+
getOpcodeName: () => chunkG53HASDV_cjs.getOpcodeName,
|
|
21771
|
+
getOpcodeValue: () => chunkG53HASDV_cjs.getOpcodeValue,
|
|
21772
|
+
parseArtifact: () => chunkG53HASDV_cjs.parseArtifact,
|
|
21773
|
+
resolveAsm: () => chunkG53HASDV_cjs.resolveAsm,
|
|
21774
|
+
serializeArkadeContractParams: () => chunkG53HASDV_cjs.serializeArkadeContractParams,
|
|
21775
|
+
stringifyArtifact: () => chunkG53HASDV_cjs.stringifyArtifact,
|
|
21776
|
+
toASM: () => chunkG53HASDV_cjs.toASM,
|
|
21777
|
+
validateProgram: () => chunkG53HASDV_cjs.validateProgram,
|
|
21778
|
+
witnessRefToBytes: () => chunkG53HASDV_cjs.witnessRefToBytes
|
|
21616
21779
|
});
|
|
21617
|
-
var isVtxoCoin = (input) =>
|
|
21780
|
+
var isVtxoCoin = (input) => chunkOH2XLTXE_cjs.isVirtualCoin(input);
|
|
21618
21781
|
function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message, session, arkProvider, emulator, network, recipients, batchExpiryPolicy) {
|
|
21619
21782
|
let batchId;
|
|
21620
21783
|
let sweepTapTreeRoot;
|
|
@@ -21635,7 +21798,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
21635
21798
|
);
|
|
21636
21799
|
await arkProvider.confirmRegistration(intentId);
|
|
21637
21800
|
batchId = event.id;
|
|
21638
|
-
const sweepTapscript =
|
|
21801
|
+
const sweepTapscript = chunkOH2XLTXE_cjs.CSVMultisigTapscript.encode({
|
|
21639
21802
|
timelock,
|
|
21640
21803
|
pubkeys: [base.hex.decode(info.forfeitPubkey).subarray(1)]
|
|
21641
21804
|
}).script;
|
|
@@ -21649,7 +21812,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
21649
21812
|
if (!xOnlyPubkeys.includes(base.hex.encode(xonlySignerPubKey))) {
|
|
21650
21813
|
return { skip: true };
|
|
21651
21814
|
}
|
|
21652
|
-
const commitmentTx =
|
|
21815
|
+
const commitmentTx = chunkOH2XLTXE_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
|
|
21653
21816
|
validateVtxoTxGraph(vtxoTree, commitmentTx, sweepTapTreeRoot);
|
|
21654
21817
|
if (recipients && recipients.length > 0) {
|
|
21655
21818
|
validateBatchRecipients(commitmentTx, vtxoTree.leaves(), recipients, network);
|
|
@@ -21681,7 +21844,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
21681
21844
|
if (connectorTree) {
|
|
21682
21845
|
validateConnectorsTxGraph(event.commitmentTx, connectorTree);
|
|
21683
21846
|
}
|
|
21684
|
-
let commitmentPsbt =
|
|
21847
|
+
let commitmentPsbt = chunkOH2XLTXE_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
|
|
21685
21848
|
assertFinalCommitmentMatchesValidated(
|
|
21686
21849
|
commitmentPsbt,
|
|
21687
21850
|
validatedCommitmentTxid,
|
|
@@ -21716,7 +21879,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
21716
21879
|
boardingIndices.push(boardingIdx);
|
|
21717
21880
|
continue;
|
|
21718
21881
|
}
|
|
21719
|
-
if (
|
|
21882
|
+
if (chunkOH2XLTXE_cjs.isRecoverable(input) || isSubdust(input, info.dust)) {
|
|
21720
21883
|
continue;
|
|
21721
21884
|
}
|
|
21722
21885
|
if (connectorIndex >= connectorLeaves.length) {
|
|
@@ -21737,7 +21900,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
21737
21900
|
index: input.vout,
|
|
21738
21901
|
witnessUtxo: {
|
|
21739
21902
|
amount: BigInt(input.value),
|
|
21740
|
-
script:
|
|
21903
|
+
script: chunkOH2XLTXE_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
21741
21904
|
},
|
|
21742
21905
|
sighashType: btcSigner.SigHash.DEFAULT,
|
|
21743
21906
|
tapLeafScript: [input.forfeitTapLeafScript]
|
|
@@ -21829,11 +21992,11 @@ var Arkade = class _Arkade {
|
|
|
21829
21992
|
static async connect(opts) {
|
|
21830
21993
|
const info = await opts.arkade.getInfo();
|
|
21831
21994
|
const serverKey = base.hex.decode(info.signerPubkey).slice(1);
|
|
21832
|
-
const checkpoint =
|
|
21833
|
-
const network = opts.network ??
|
|
21995
|
+
const checkpoint = chunkOH2XLTXE_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
|
|
21996
|
+
const network = opts.network ?? chunkOH2XLTXE_cjs.DEFAULT_NETWORK;
|
|
21834
21997
|
let emulatorKey;
|
|
21835
21998
|
if (opts.emulator) {
|
|
21836
|
-
emulatorKey = base.hex.decode(
|
|
21999
|
+
emulatorKey = base.hex.decode(chunkOH2XLTXE_cjs.resolveEmulatorPubkey(network, opts.emulatorPubkey));
|
|
21837
22000
|
}
|
|
21838
22001
|
let userKey;
|
|
21839
22002
|
if (opts.identity) {
|
|
@@ -21864,7 +22027,7 @@ var Arkade = class _Arkade {
|
|
|
21864
22027
|
* key respectively; explicit args always win.
|
|
21865
22028
|
*/
|
|
21866
22029
|
contract(program, args = {}) {
|
|
21867
|
-
const declared = (program.params ?? []).map(
|
|
22030
|
+
const declared = (program.params ?? []).map(chunkG53HASDV_cjs.inputName);
|
|
21868
22031
|
if (declared.includes("server") && args.server === void 0) {
|
|
21869
22032
|
args = { ...args, server: this.serverKey };
|
|
21870
22033
|
}
|
|
@@ -21884,7 +22047,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
21884
22047
|
userKey: client.userKey,
|
|
21885
22048
|
emulatorKey: client.emulatorKey
|
|
21886
22049
|
};
|
|
21887
|
-
this.vtxoScript = new
|
|
22050
|
+
this.vtxoScript = new chunkG53HASDV_cjs.ArkadeProgramScript(program, args, this.keys);
|
|
21888
22051
|
this.tapTree = this.vtxoScript.encode();
|
|
21889
22052
|
this.compiled = this.vtxoScript.compiled;
|
|
21890
22053
|
}
|
|
@@ -21912,7 +22075,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
21912
22075
|
`ArkadeContract.fromContract: expected contract type 'arkade', got '${contract.type}'`
|
|
21913
22076
|
);
|
|
21914
22077
|
}
|
|
21915
|
-
const typed =
|
|
22078
|
+
const typed = chunkG53HASDV_cjs.deserializeArkadeContractParams(contract.params);
|
|
21916
22079
|
return new _ArkadeContract(client, typed.program, typed.args, {
|
|
21917
22080
|
serverKey: typed.serverKey,
|
|
21918
22081
|
userKey: typed.userKey,
|
|
@@ -21953,7 +22116,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
21953
22116
|
toContractParams() {
|
|
21954
22117
|
return {
|
|
21955
22118
|
type: "arkade",
|
|
21956
|
-
params:
|
|
22119
|
+
params: chunkG53HASDV_cjs.serializeArkadeContractParams({
|
|
21957
22120
|
program: this.program,
|
|
21958
22121
|
args: this.args,
|
|
21959
22122
|
serverKey: this.keys.serverKey,
|
|
@@ -21998,13 +22161,13 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
21998
22161
|
const [registered] = await manager.getContracts({ script: scriptHex });
|
|
21999
22162
|
if (registered) {
|
|
22000
22163
|
const [withVtxos] = await manager.getContractsWithVtxos({ script: scriptHex });
|
|
22001
|
-
return (withVtxos?.vtxos ?? []).filter((v) => !
|
|
22164
|
+
return (withVtxos?.vtxos ?? []).filter((v) => !chunkOH2XLTXE_cjs.hasTerminalSpend(v));
|
|
22002
22165
|
}
|
|
22003
22166
|
}
|
|
22004
22167
|
if (!this.client.indexer) {
|
|
22005
22168
|
throw new Error("ArkadeContract.getUtxos: an indexer is required");
|
|
22006
22169
|
}
|
|
22007
|
-
const { vtxos } = await
|
|
22170
|
+
const { vtxos } = await chunkOH2XLTXE_cjs.getNormalizedVtxos(this.client.indexer, {
|
|
22008
22171
|
scripts: [scriptHex],
|
|
22009
22172
|
spendableOnly: true
|
|
22010
22173
|
});
|
|
@@ -22106,12 +22269,12 @@ var ArkadeTransactionBuilder = class {
|
|
|
22106
22269
|
this.contract.client.checkpoint
|
|
22107
22270
|
);
|
|
22108
22271
|
if (coin.sourceTx) {
|
|
22109
|
-
|
|
22272
|
+
chunkOH2XLTXE_cjs.setArkPsbtField(arkTx, 0, chunkOH2XLTXE_cjs.PrevArkTxField, coin.sourceTx);
|
|
22110
22273
|
}
|
|
22111
22274
|
const condition = (def.tapscript.witness ?? []).map((w) => this.witnessBytes(w));
|
|
22112
22275
|
if (condition.length > 0) {
|
|
22113
|
-
|
|
22114
|
-
|
|
22276
|
+
chunkOH2XLTXE_cjs.setArkPsbtField(arkTx, 0, chunkOH2XLTXE_cjs.ConditionWitness, condition);
|
|
22277
|
+
chunkOH2XLTXE_cjs.setArkPsbtField(checkpoints[0], 0, chunkOH2XLTXE_cjs.ConditionWitness, condition);
|
|
22115
22278
|
}
|
|
22116
22279
|
const packets = [];
|
|
22117
22280
|
if (this.assetSpecs.length > 0) {
|
|
@@ -22150,7 +22313,7 @@ var ArkadeTransactionBuilder = class {
|
|
|
22150
22313
|
base.base64.encode(signedArk2.toPSBT()),
|
|
22151
22314
|
signedCps.map((c) => base.base64.encode(c.toPSBT()))
|
|
22152
22315
|
);
|
|
22153
|
-
const txid =
|
|
22316
|
+
const txid = chunkOH2XLTXE_cjs.Transaction.fromPSBT(base.base64.decode(res2.signedArkTx)).id;
|
|
22154
22317
|
return {
|
|
22155
22318
|
txid,
|
|
22156
22319
|
signedArkTx: res2.signedArkTx,
|
|
@@ -22209,23 +22372,23 @@ var ArkadeTransactionBuilder = class {
|
|
|
22209
22372
|
}
|
|
22210
22373
|
buildAssetPacket() {
|
|
22211
22374
|
const groups = this.assetSpecs.map((s) => {
|
|
22212
|
-
const id = typeof s.assetId === "string" ?
|
|
22213
|
-
return
|
|
22375
|
+
const id = typeof s.assetId === "string" ? chunkI6EDUE75_cjs.AssetId.fromString(s.assetId) : chunkI6EDUE75_cjs.AssetId.fromBytes(s.assetId);
|
|
22376
|
+
return chunkI6EDUE75_cjs.AssetGroup.create(
|
|
22214
22377
|
id,
|
|
22215
22378
|
null,
|
|
22216
|
-
s.inputs.map((i) =>
|
|
22217
|
-
s.outputs.map((o) =>
|
|
22218
|
-
(s.metadata ?? []).map((m) =>
|
|
22379
|
+
s.inputs.map((i) => chunkI6EDUE75_cjs.AssetInput.create(i.vin, i.amount)),
|
|
22380
|
+
s.outputs.map((o) => chunkI6EDUE75_cjs.AssetOutput.create(o.vout, o.amount)),
|
|
22381
|
+
(s.metadata ?? []).map((m) => chunkI6EDUE75_cjs.Metadata.create(m.key, m.value))
|
|
22219
22382
|
);
|
|
22220
22383
|
});
|
|
22221
|
-
return
|
|
22384
|
+
return chunkI6EDUE75_cjs.Packet.create(groups);
|
|
22222
22385
|
}
|
|
22223
22386
|
witnessBytes(ref) {
|
|
22224
|
-
return
|
|
22387
|
+
return chunkG53HASDV_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
|
|
22225
22388
|
}
|
|
22226
22389
|
};
|
|
22227
22390
|
function bindInputs(fn, callArgs) {
|
|
22228
|
-
const names = (fn.def.inputs ?? []).map(
|
|
22391
|
+
const names = (fn.def.inputs ?? []).map(chunkG53HASDV_cjs.inputName);
|
|
22229
22392
|
if (callArgs.length !== names.length) {
|
|
22230
22393
|
throw new Error(`${fn.name}: expected ${names.length} argument(s), got ${callArgs.length}`);
|
|
22231
22394
|
}
|
|
@@ -22614,6 +22777,7 @@ function createDefaultPaymentRouter(wallet) {
|
|
|
22614
22777
|
*/
|
|
22615
22778
|
|
|
22616
22779
|
exports.ARKADE_MAGIC = ARKADE_MAGIC;
|
|
22780
|
+
exports.ARKADE_SALTED_PREIMAGE_TAG = ARKADE_SALTED_PREIMAGE_TAG;
|
|
22617
22781
|
exports.ARKADE_SWAP_PREIMAGE_TAG = ARKADE_SWAP_PREIMAGE_TAG;
|
|
22618
22782
|
exports.ActivityRegistry = ActivityRegistry;
|
|
22619
22783
|
exports.AmbiguousRouteError = AmbiguousRouteError;
|
|
@@ -22717,6 +22881,7 @@ exports.btcTarget = btcTarget;
|
|
|
22717
22881
|
exports.buildForfeitTx = buildForfeitTx;
|
|
22718
22882
|
exports.buildOffchainTx = buildOffchainTx;
|
|
22719
22883
|
exports.buildPreimageMessage = buildPreimageMessage;
|
|
22884
|
+
exports.buildSaltedPreimageMessage = buildSaltedPreimageMessage;
|
|
22720
22885
|
exports.claimWithPreimageIdentity = claimWithPreimageIdentity;
|
|
22721
22886
|
exports.classifyAgainstSignerSet = classifyAgainstSignerSet;
|
|
22722
22887
|
exports.classifyContractSigner = classifyContractSigner;
|
|
@@ -22809,5 +22974,5 @@ exports.validateVtxoTxGraph = validateVtxoTxGraph;
|
|
|
22809
22974
|
exports.verifyTapscriptSignatures = verifyTapscriptSignatures;
|
|
22810
22975
|
exports.waitForIncomingFunds = waitForIncomingFunds;
|
|
22811
22976
|
exports.warnAndFilterVtxosForScript = warnAndFilterVtxosForScript;
|
|
22812
|
-
//# sourceMappingURL=chunk-
|
|
22813
|
-
//# sourceMappingURL=chunk-
|
|
22977
|
+
//# sourceMappingURL=chunk-Z2OZMKFV.cjs.map
|
|
22978
|
+
//# sourceMappingURL=chunk-Z2OZMKFV.cjs.map
|