@arkade-os/sdk 0.5.0-rc.26 → 0.5.0-rc.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/adapters/expo.cjs +5 -5
- package/dist/adapters/expo.d.cts +2 -2
- package/dist/adapters/expo.d.ts +2 -2
- package/dist/adapters/expo.js +3 -3
- package/dist/{asyncStorageTaskQueue-CFWscYpG.d.cts → asyncStorageTaskQueue-CGZMG8Mc.d.cts} +1 -1
- package/dist/{asyncStorageTaskQueue-DrFapzPg.d.ts → asyncStorageTaskQueue-Ca-mM3NR.d.ts} +1 -1
- package/dist/{chunk-HPUKFTZV.js → chunk-BULTXVEN.js} +4 -4
- package/dist/{chunk-HPUKFTZV.js.map → chunk-BULTXVEN.js.map} +1 -1
- package/dist/{chunk-K2YTDYQF.cjs → chunk-DKHBOT5W.cjs} +16 -16
- package/dist/{chunk-K2YTDYQF.cjs.map → chunk-DKHBOT5W.cjs.map} +1 -1
- package/dist/{chunk-CFOIHLON.cjs → chunk-EP6XF7JX.cjs} +48 -48
- package/dist/{chunk-CFOIHLON.cjs.map → chunk-EP6XF7JX.cjs.map} +1 -1
- package/dist/{chunk-5JQ5EOYE.js → chunk-FTJ2YWJJ.js} +3 -3
- package/dist/{chunk-5JQ5EOYE.js.map → chunk-FTJ2YWJJ.js.map} +1 -1
- package/dist/{chunk-U5ZRDVVB.js → chunk-I4ZWKG7B.js} +11 -6
- package/dist/chunk-I4ZWKG7B.js.map +1 -0
- package/dist/{chunk-B2YMUJD5.cjs → chunk-PM6KYV7S.cjs} +495 -490
- package/dist/chunk-PM6KYV7S.cjs.map +1 -0
- package/dist/{chunk-N2VM6V6K.js → chunk-PO6AJUWK.js} +3 -3
- package/dist/{chunk-N2VM6V6K.js.map → chunk-PO6AJUWK.js.map} +1 -1
- package/dist/{chunk-QCD3SJOL.cjs → chunk-QXZS4J3V.cjs} +10 -10
- package/dist/{chunk-QCD3SJOL.cjs.map → chunk-QXZS4J3V.cjs.map} +1 -1
- package/dist/{chunk-HTCIPDVW.js → chunk-RUWTAAJK.js} +3 -3
- package/dist/{chunk-HTCIPDVW.js.map → chunk-RUWTAAJK.js.map} +1 -1
- package/dist/{chunk-FEBAG2K2.cjs → chunk-URILS6HH.cjs} +18 -18
- package/dist/{chunk-FEBAG2K2.cjs.map → chunk-URILS6HH.cjs.map} +1 -1
- package/dist/{chunk-Y5VSJURH.js → chunk-X42Z36L5.js} +4 -4
- package/dist/{chunk-Y5VSJURH.js.map → chunk-X42Z36L5.js.map} +1 -1
- package/dist/{chunk-VVFCCNU2.cjs → chunk-ZN7BX5XT.cjs} +3 -3
- package/dist/{chunk-VVFCCNU2.cjs.map → chunk-ZN7BX5XT.cjs.map} +1 -1
- 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-Cz8FnLqi.d.ts → delegate-CG3EwryS.d.ts} +1 -1
- package/dist/{delegate-r3jh7UcH.d.cts → delegate-CH-QUGok.d.cts} +1 -1
- package/dist/{index-DOION7Ta.d.cts → index-BPS3Ki3l.d.cts} +2 -2
- package/dist/{index-BfvbSL0W.d.cts → index-BpiwCcFb.d.cts} +2 -2
- package/dist/{index-BfvbSL0W.d.ts → index-BpiwCcFb.d.ts} +2 -2
- package/dist/{index-Chgwl4dO.d.ts → index-DLn2XUIl.d.ts} +2 -2
- package/dist/index.cjs +316 -316
- package/dist/index.d.cts +14 -9
- package/dist/index.d.ts +14 -9
- package/dist/index.js +4 -4
- package/dist/repositories/realm/index.cjs +35 -35
- 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 +33 -33
- 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-CXAcjtdU.d.ts → taskRunner-Dbdr9WMQ.d.ts} +1 -1
- package/dist/{taskRunner-BO8a-SQh.d.cts → taskRunner-DtphXKXv.d.cts} +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 +15 -15
- package/dist/wallet/expo/index.d.cts +4 -4
- package/dist/wallet/expo/index.d.ts +4 -4
- package/dist/wallet/expo/index.js +5 -5
- package/dist/{wallet-s90p-vIk.d.cts → wallet-CTrmow5R.d.cts} +2 -2
- package/dist/{wallet-CFIfUlQP.d.ts → wallet-QvS_5Jjd.d.ts} +2 -2
- 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-B2YMUJD5.cjs.map +0 -1
- package/dist/chunk-U5ZRDVVB.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunkURILS6HH_cjs = require('./chunk-URILS6HH.cjs');
|
|
4
|
+
var chunkEP6XF7JX_cjs = require('./chunk-EP6XF7JX.cjs');
|
|
5
|
+
var chunkZN7BX5XT_cjs = require('./chunk-ZN7BX5XT.cjs');
|
|
6
6
|
var utils_js = require('@scure/btc-signer/utils.js');
|
|
7
7
|
var btcSigner = require('@scure/btc-signer');
|
|
8
8
|
var base = require('@scure/base');
|
|
@@ -187,7 +187,7 @@ var TreeSignerSession = class _TreeSignerSession {
|
|
|
187
187
|
noncesByPubkey.set(base.hex.encode(myPublicKey.subarray(1)), myNonce);
|
|
188
188
|
const tx = this.graph.find(txid);
|
|
189
189
|
if (!tx) throw new Error(`missing tx for txid ${txid}`);
|
|
190
|
-
const cosigners =
|
|
190
|
+
const cosigners = chunkZN7BX5XT_cjs.getArkPsbtFields(tx.root, 0, chunkZN7BX5XT_cjs.CosignerPublicKey).map(
|
|
191
191
|
(c) => base.hex.encode(c.key.subarray(1))
|
|
192
192
|
// xonly pubkey
|
|
193
193
|
);
|
|
@@ -239,7 +239,7 @@ var TreeSignerSession = class _TreeSignerSession {
|
|
|
239
239
|
if (!aggNonce) throw new Error("missing aggregate nonce");
|
|
240
240
|
const prevoutAmounts = [];
|
|
241
241
|
const prevoutScripts = [];
|
|
242
|
-
const cosigners =
|
|
242
|
+
const cosigners = chunkZN7BX5XT_cjs.getArkPsbtFields(g.root, 0, chunkZN7BX5XT_cjs.CosignerPublicKey).map((c) => c.key);
|
|
243
243
|
const { finalKey } = aggregateKeys(cosigners, true, {
|
|
244
244
|
taprootTweak: this.scriptRoot
|
|
245
245
|
});
|
|
@@ -322,7 +322,7 @@ var SingleKey = class _SingleKey {
|
|
|
322
322
|
async sign(tx, inputIndexes) {
|
|
323
323
|
const txCpy = tx.clone();
|
|
324
324
|
if (!inputIndexes) {
|
|
325
|
-
|
|
325
|
+
chunkZN7BX5XT_cjs.assertAllowedSighashTypes(txCpy, ALLOWED_SIGHASH);
|
|
326
326
|
try {
|
|
327
327
|
if (!txCpy.sign(this.key, ALLOWED_SIGHASH)) {
|
|
328
328
|
throw new Error("Failed to sign transaction");
|
|
@@ -422,7 +422,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
422
422
|
let network;
|
|
423
423
|
if ("descriptor" in opts && typeof opts.descriptor === "string") {
|
|
424
424
|
descriptor = opts.descriptor;
|
|
425
|
-
network =
|
|
425
|
+
network = chunkEP6XF7JX_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
426
426
|
} else {
|
|
427
427
|
network = opts.isMainnet ?? true ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
428
428
|
descriptor = descriptorsScure.scriptExpressions.trBIP32({
|
|
@@ -499,7 +499,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
499
499
|
}
|
|
500
500
|
/** Returns true when `descriptor` is derived from this identity's seed. */
|
|
501
501
|
ownsDescriptor(descriptor) {
|
|
502
|
-
return
|
|
502
|
+
return chunkEP6XF7JX_cjs.descriptorIsOurs(descriptor, this.descriptor, utils_js.pubSchnorr(this.derivedKey));
|
|
503
503
|
}
|
|
504
504
|
/**
|
|
505
505
|
* Signs each request with the key derived from its descriptor.
|
|
@@ -538,7 +538,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
538
538
|
}
|
|
539
539
|
// ── internal helpers ─────────────────────────────────────────────
|
|
540
540
|
derivePrivateKeyForDescriptor(descriptor) {
|
|
541
|
-
const network =
|
|
541
|
+
const network = chunkEP6XF7JX_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
542
542
|
const expansion = descriptorsScure.expand({ descriptor, network });
|
|
543
543
|
if (expansion.isRanged) {
|
|
544
544
|
throw new Error(
|
|
@@ -563,7 +563,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
563
563
|
signTxWithKey(tx, key, inputIndexes) {
|
|
564
564
|
const txCpy = tx.clone();
|
|
565
565
|
if (!inputIndexes) {
|
|
566
|
-
|
|
566
|
+
chunkZN7BX5XT_cjs.assertAllowedSighashTypes(txCpy, ALLOWED_SIGHASH2);
|
|
567
567
|
try {
|
|
568
568
|
if (!txCpy.sign(key, ALLOWED_SIGHASH2)) {
|
|
569
569
|
throw new Error("Failed to sign transaction");
|
|
@@ -615,7 +615,7 @@ var ReadonlyDescriptorIdentity = class _ReadonlyDescriptorIdentity {
|
|
|
615
615
|
/** Wildcard account-descriptor template (e.g. `tr([fp/86'/0'/0']xpub/0/*)`). */
|
|
616
616
|
descriptor;
|
|
617
617
|
constructor(descriptor) {
|
|
618
|
-
const network =
|
|
618
|
+
const network = chunkEP6XF7JX_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
619
619
|
let expansion;
|
|
620
620
|
try {
|
|
621
621
|
expansion = descriptorsScure.expand({ descriptor, network, index: 0 });
|
|
@@ -650,7 +650,7 @@ var ReadonlyDescriptorIdentity = class _ReadonlyDescriptorIdentity {
|
|
|
650
650
|
}
|
|
651
651
|
/** Returns true when `descriptor` derives from this identity's xpub. */
|
|
652
652
|
ownsDescriptor(descriptor) {
|
|
653
|
-
return
|
|
653
|
+
return chunkEP6XF7JX_cjs.descriptorIsOurs(descriptor, this.descriptor, this.indexZero.pubkey);
|
|
654
654
|
}
|
|
655
655
|
};
|
|
656
656
|
function serializeSeedOwnedSigningIdentity(identity) {
|
|
@@ -793,10 +793,10 @@ var DescriptorIdentity = class {
|
|
|
793
793
|
this.base = base;
|
|
794
794
|
}
|
|
795
795
|
async xOnlyPublicKey() {
|
|
796
|
-
return
|
|
796
|
+
return chunkEP6XF7JX_cjs.deriveDescriptorLeafPubKey(this.descriptor);
|
|
797
797
|
}
|
|
798
798
|
async compressedPublicKey() {
|
|
799
|
-
return
|
|
799
|
+
return chunkEP6XF7JX_cjs.deriveDescriptorLeafCompressedPubKey(this.descriptor);
|
|
800
800
|
}
|
|
801
801
|
async sign(tx, inputIndexes) {
|
|
802
802
|
const [signed] = await this.signer.signWithDescriptor([
|
|
@@ -856,8 +856,8 @@ var StaticDescriptorProvider = class _StaticDescriptorProvider {
|
|
|
856
856
|
}
|
|
857
857
|
isOurs(descriptor) {
|
|
858
858
|
try {
|
|
859
|
-
const normalized =
|
|
860
|
-
const pubKey =
|
|
859
|
+
const normalized = chunkEP6XF7JX_cjs.normalizeToDescriptor(descriptor);
|
|
860
|
+
const pubKey = chunkEP6XF7JX_cjs.extractPubKey(normalized);
|
|
861
861
|
return pubKey.toLowerCase() === this.pubKeyHex.toLowerCase();
|
|
862
862
|
} catch {
|
|
863
863
|
return false;
|
|
@@ -1194,7 +1194,7 @@ function unwrapKeyring(provider) {
|
|
|
1194
1194
|
}
|
|
1195
1195
|
function keyOf(descriptor) {
|
|
1196
1196
|
try {
|
|
1197
|
-
return
|
|
1197
|
+
return chunkEP6XF7JX_cjs.extractPubKey(chunkEP6XF7JX_cjs.normalizeToDescriptor(descriptor)).toLowerCase();
|
|
1198
1198
|
} catch {
|
|
1199
1199
|
return void 0;
|
|
1200
1200
|
}
|
|
@@ -1285,12 +1285,12 @@ async function resolveDescriptorSigner(descriptor, identity, provider) {
|
|
|
1285
1285
|
signMessageWithDescriptor: (ownedDescriptor, message, signatureType) => identity.signDescriptorMessage(ownedDescriptor, message, signatureType)
|
|
1286
1286
|
} : void 0;
|
|
1287
1287
|
const owner = providerOwner ?? identityOwner;
|
|
1288
|
-
if (owner &&
|
|
1288
|
+
if (owner && chunkEP6XF7JX_cjs.parseHDDescriptor(descriptor)) {
|
|
1289
1289
|
return new DescriptorIdentity({ descriptor, signer: owner, base: identity });
|
|
1290
1290
|
}
|
|
1291
1291
|
let key;
|
|
1292
1292
|
try {
|
|
1293
|
-
key =
|
|
1293
|
+
key = chunkEP6XF7JX_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
1294
1294
|
} catch {
|
|
1295
1295
|
throw new ForeignDescriptorError(descriptor);
|
|
1296
1296
|
}
|
|
@@ -1343,14 +1343,14 @@ function buildSaltedPreimageMessage(xonly, salt) {
|
|
|
1343
1343
|
}
|
|
1344
1344
|
var PREIMAGE_INDEX = 0;
|
|
1345
1345
|
function isPerArtifactDescriptor(descriptor) {
|
|
1346
|
-
return
|
|
1346
|
+
return chunkEP6XF7JX_cjs.parseHDDescriptor(descriptor) !== null;
|
|
1347
1347
|
}
|
|
1348
1348
|
async function provisionDescriptor(wallet) {
|
|
1349
1349
|
const allocated = isHDAllocationCapable(wallet) ? await wallet.getNextSigningDescriptor() : void 0;
|
|
1350
|
-
return allocated ?? await
|
|
1350
|
+
return allocated ?? await chunkEP6XF7JX_cjs.identityDescriptor(wallet.identity);
|
|
1351
1351
|
}
|
|
1352
1352
|
async function provisionRefundKey(wallet) {
|
|
1353
|
-
const descriptor = await
|
|
1353
|
+
const descriptor = await chunkEP6XF7JX_cjs.identityDescriptor(wallet.identity);
|
|
1354
1354
|
const signer = await contractSigner(wallet, descriptor);
|
|
1355
1355
|
const pubkey = await signer.xOnlyPublicKey();
|
|
1356
1356
|
const identityPubkey = await wallet.identity.xOnlyPublicKey();
|
|
@@ -1360,7 +1360,7 @@ async function provisionRefundKey(wallet) {
|
|
|
1360
1360
|
);
|
|
1361
1361
|
}
|
|
1362
1362
|
const address = await wallet.getAddress();
|
|
1363
|
-
const { pkScript } =
|
|
1363
|
+
const { pkScript } = chunkZN7BX5XT_cjs.ArkAddress.decode(address);
|
|
1364
1364
|
return { descriptor, pubkey, pkScript, address };
|
|
1365
1365
|
}
|
|
1366
1366
|
async function provisionClaimSecret(wallet, opts = {}) {
|
|
@@ -1406,7 +1406,7 @@ async function contractSigner(wallet, descriptor) {
|
|
|
1406
1406
|
const signer = isHDWalletCapable(wallet) ? await wallet.signerForDescriptor(descriptor) : wallet.identity;
|
|
1407
1407
|
let expected;
|
|
1408
1408
|
try {
|
|
1409
|
-
expected =
|
|
1409
|
+
expected = chunkEP6XF7JX_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
1410
1410
|
} catch (cause) {
|
|
1411
1411
|
throw new ForeignDescriptorError(descriptor, { cause });
|
|
1412
1412
|
}
|
|
@@ -1488,7 +1488,7 @@ function debugLog(debug, ...args) {
|
|
|
1488
1488
|
}
|
|
1489
1489
|
function normalizeOptions(pathOrOptions) {
|
|
1490
1490
|
const o = typeof pathOrOptions === "string" ? { path: pathOrOptions } : pathOrOptions;
|
|
1491
|
-
|
|
1491
|
+
chunkZN7BX5XT_cjs.assertTimerMs("activationTimeoutMs", o.activationTimeoutMs);
|
|
1492
1492
|
return {
|
|
1493
1493
|
path: o.path,
|
|
1494
1494
|
updateViaCache: o.updateViaCache ?? "none",
|
|
@@ -1611,14 +1611,14 @@ var RestDelegateProvider = class {
|
|
|
1611
1611
|
*/
|
|
1612
1612
|
async delegate(intent, forfeitTxs, options) {
|
|
1613
1613
|
const url = `${this.url}/v1/delegate`;
|
|
1614
|
-
const response = await
|
|
1614
|
+
const response = await chunkZN7BX5XT_cjs.baseFetch(url, {
|
|
1615
1615
|
method: "POST",
|
|
1616
1616
|
headers: {
|
|
1617
1617
|
"Content-Type": "application/json"
|
|
1618
1618
|
},
|
|
1619
1619
|
body: JSON.stringify({
|
|
1620
1620
|
intent: {
|
|
1621
|
-
message:
|
|
1621
|
+
message: chunkZN7BX5XT_cjs.Intent.encodeMessage(intent.message),
|
|
1622
1622
|
proof: intent.proof
|
|
1623
1623
|
},
|
|
1624
1624
|
forfeit_txs: forfeitTxs,
|
|
@@ -1637,7 +1637,7 @@ var RestDelegateProvider = class {
|
|
|
1637
1637
|
*/
|
|
1638
1638
|
async getDelegateInfo() {
|
|
1639
1639
|
const url = `${this.url}/v1/delegator/info`;
|
|
1640
|
-
const response = await
|
|
1640
|
+
const response = await chunkZN7BX5XT_cjs.rateGate.runHttp(url, () => chunkZN7BX5XT_cjs.baseFetch(url));
|
|
1641
1641
|
if (!response.ok) {
|
|
1642
1642
|
const errorText2 = await response.text();
|
|
1643
1643
|
throw new Error(`Failed to get delegate info: ${errorText2}`);
|
|
@@ -1693,7 +1693,7 @@ async function collectPages(read) {
|
|
|
1693
1693
|
return items;
|
|
1694
1694
|
}
|
|
1695
1695
|
function scriptFromArkAddress(address) {
|
|
1696
|
-
return base.hex.encode(
|
|
1696
|
+
return base.hex.encode(chunkZN7BX5XT_cjs.ArkAddress.decode(address).pkScript);
|
|
1697
1697
|
}
|
|
1698
1698
|
|
|
1699
1699
|
// src/repositories/walletRepository.ts
|
|
@@ -1755,9 +1755,9 @@ async function collectScriptVtxos(repository, script, options) {
|
|
|
1755
1755
|
return [...byOutpoint.values()].map((row) => row.vtxo);
|
|
1756
1756
|
}
|
|
1757
1757
|
function unspentScriptVtxos(rows, copies) {
|
|
1758
|
-
const spent = copies.filter((copy) =>
|
|
1758
|
+
const spent = copies.filter((copy) => chunkZN7BX5XT_cjs.isVtxoSpent(copy.vtxo));
|
|
1759
1759
|
return rows.filter(
|
|
1760
|
-
(row) => !
|
|
1760
|
+
(row) => !chunkZN7BX5XT_cjs.isVtxoSpent(row.vtxo) && !spent.some(
|
|
1761
1761
|
(copy) => copy.address !== row.address && copy.vtxo.txid === row.vtxo.txid && copy.vtxo.vout === row.vtxo.vout && shouldReplaceScriptVtxo(row, copy)
|
|
1762
1762
|
)
|
|
1763
1763
|
);
|
|
@@ -1840,7 +1840,7 @@ var ESPLORA_URL = {
|
|
|
1840
1840
|
regtest: "http://localhost:3000/api"
|
|
1841
1841
|
};
|
|
1842
1842
|
var EsploraProvider = class {
|
|
1843
|
-
constructor(baseUrl = ESPLORA_URL[
|
|
1843
|
+
constructor(baseUrl = ESPLORA_URL[chunkZN7BX5XT_cjs.DEFAULT_NETWORK_NAME], opts) {
|
|
1844
1844
|
this.baseUrl = baseUrl;
|
|
1845
1845
|
this.pollingInterval = opts?.pollingInterval ?? 15e3;
|
|
1846
1846
|
this.forcePolling = opts?.forcePolling ?? false;
|
|
@@ -1855,7 +1855,7 @@ var EsploraProvider = class {
|
|
|
1855
1855
|
*/
|
|
1856
1856
|
addressWatches = /* @__PURE__ */ new Map();
|
|
1857
1857
|
async getCoins(address) {
|
|
1858
|
-
const response = await
|
|
1858
|
+
const response = await chunkZN7BX5XT_cjs.baseFetch(`${this.baseUrl}/address/${address}/utxo`);
|
|
1859
1859
|
if (!response.ok) {
|
|
1860
1860
|
throw new Error(`Failed to fetch UTXOs: ${response.statusText}`);
|
|
1861
1861
|
}
|
|
@@ -1864,12 +1864,12 @@ var EsploraProvider = class {
|
|
|
1864
1864
|
async getFeeRate() {
|
|
1865
1865
|
let url = `${this.baseUrl}/fee-estimates`;
|
|
1866
1866
|
let key = "1";
|
|
1867
|
-
let response = await
|
|
1867
|
+
let response = await chunkZN7BX5XT_cjs.baseFetch(url);
|
|
1868
1868
|
if (response.status === 404) {
|
|
1869
1869
|
await response.body?.cancel();
|
|
1870
1870
|
url = `${this.baseUrl}/v1/fees/recommended`;
|
|
1871
1871
|
key = "fastestFee";
|
|
1872
|
-
response = await
|
|
1872
|
+
response = await chunkZN7BX5XT_cjs.baseFetch(url);
|
|
1873
1873
|
}
|
|
1874
1874
|
if (response.status === 404) {
|
|
1875
1875
|
await response.body?.cancel();
|
|
@@ -1906,7 +1906,7 @@ var EsploraProvider = class {
|
|
|
1906
1906
|
}
|
|
1907
1907
|
}
|
|
1908
1908
|
async getTxOutspends(txid) {
|
|
1909
|
-
const response = await
|
|
1909
|
+
const response = await chunkZN7BX5XT_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/outspends`);
|
|
1910
1910
|
if (!response.ok) {
|
|
1911
1911
|
const error = await response.text();
|
|
1912
1912
|
throw new Error(`Failed to get transaction outspends: ${error}`);
|
|
@@ -1914,7 +1914,7 @@ var EsploraProvider = class {
|
|
|
1914
1914
|
return response.json();
|
|
1915
1915
|
}
|
|
1916
1916
|
async getTransactions(address) {
|
|
1917
|
-
const response = await
|
|
1917
|
+
const response = await chunkZN7BX5XT_cjs.baseFetch(`${this.baseUrl}/address/${address}/txs`);
|
|
1918
1918
|
if (!response.ok) {
|
|
1919
1919
|
const error = await response.text();
|
|
1920
1920
|
throw new Error(`Failed to get transactions: ${error}`);
|
|
@@ -1923,14 +1923,14 @@ var EsploraProvider = class {
|
|
|
1923
1923
|
}
|
|
1924
1924
|
/** Orders of magnitude smaller than `/address/{addr}/txs`: the polling fallback's probe. */
|
|
1925
1925
|
async getAddressStats(address) {
|
|
1926
|
-
const response = await
|
|
1926
|
+
const response = await chunkZN7BX5XT_cjs.baseFetch(`${this.baseUrl}/address/${address}`);
|
|
1927
1927
|
if (!response.ok) {
|
|
1928
1928
|
throw new Error(`Failed to get address stats: ${response.statusText}`);
|
|
1929
1929
|
}
|
|
1930
1930
|
return response.json();
|
|
1931
1931
|
}
|
|
1932
1932
|
async getRawTransaction(txid) {
|
|
1933
|
-
const response = await
|
|
1933
|
+
const response = await chunkZN7BX5XT_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/hex`);
|
|
1934
1934
|
if (!response.ok) {
|
|
1935
1935
|
const error = await response.text();
|
|
1936
1936
|
throw new Error(`Failed to get raw transaction ${txid}: ${error}`);
|
|
@@ -1938,7 +1938,7 @@ var EsploraProvider = class {
|
|
|
1938
1938
|
return base.hex.decode((await response.text()).trim());
|
|
1939
1939
|
}
|
|
1940
1940
|
async getTxStatus(txid) {
|
|
1941
|
-
const txresponse = await
|
|
1941
|
+
const txresponse = await chunkZN7BX5XT_cjs.baseFetch(`${this.baseUrl}/tx/${txid}`);
|
|
1942
1942
|
if (!txresponse.ok) {
|
|
1943
1943
|
throw new Error(txresponse.statusText);
|
|
1944
1944
|
}
|
|
@@ -1946,7 +1946,7 @@ var EsploraProvider = class {
|
|
|
1946
1946
|
if (!tx.status.confirmed) {
|
|
1947
1947
|
return { confirmed: false };
|
|
1948
1948
|
}
|
|
1949
|
-
const response = await
|
|
1949
|
+
const response = await chunkZN7BX5XT_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/status`);
|
|
1950
1950
|
if (!response.ok) {
|
|
1951
1951
|
throw new Error(`Failed to get transaction status: ${response.statusText}`);
|
|
1952
1952
|
}
|
|
@@ -2220,9 +2220,9 @@ var EsploraProvider = class {
|
|
|
2220
2220
|
return { subscribers, teardown, started };
|
|
2221
2221
|
}
|
|
2222
2222
|
async getChainTip() {
|
|
2223
|
-
let tipBlocks = await
|
|
2223
|
+
let tipBlocks = await chunkZN7BX5XT_cjs.baseFetch(`${this.baseUrl}/blocks`);
|
|
2224
2224
|
if (tipBlocks.status === 404) {
|
|
2225
|
-
tipBlocks = await
|
|
2225
|
+
tipBlocks = await chunkZN7BX5XT_cjs.baseFetch(`${this.baseUrl}/v1/blocks`);
|
|
2226
2226
|
}
|
|
2227
2227
|
if (!tipBlocks.ok) {
|
|
2228
2228
|
throw new Error(`Failed to get chain tip: ${tipBlocks.statusText}`);
|
|
@@ -2243,7 +2243,7 @@ var EsploraProvider = class {
|
|
|
2243
2243
|
};
|
|
2244
2244
|
}
|
|
2245
2245
|
async broadcastPackage(parent, child) {
|
|
2246
|
-
const response = await
|
|
2246
|
+
const response = await chunkZN7BX5XT_cjs.baseFetch(`${this.baseUrl}/txs/package`, {
|
|
2247
2247
|
method: "POST",
|
|
2248
2248
|
headers: {
|
|
2249
2249
|
"Content-Type": "application/json"
|
|
@@ -2259,7 +2259,7 @@ var EsploraProvider = class {
|
|
|
2259
2259
|
return result;
|
|
2260
2260
|
}
|
|
2261
2261
|
async broadcastTx(tx) {
|
|
2262
|
-
const response = await
|
|
2262
|
+
const response = await chunkZN7BX5XT_cjs.baseFetch(`${this.baseUrl}/tx`, {
|
|
2263
2263
|
method: "POST",
|
|
2264
2264
|
headers: {
|
|
2265
2265
|
"Content-Type": "text/plain"
|
|
@@ -2431,7 +2431,7 @@ function findP2AOutput(tx) {
|
|
|
2431
2431
|
var CHILD_DUST_AMOUNT = 546;
|
|
2432
2432
|
function buildAnchorChild(params) {
|
|
2433
2433
|
const { parent, feeRate, fundingCoins, changeAddress, tapInternalKey, network } = params;
|
|
2434
|
-
const child = new
|
|
2434
|
+
const child = new chunkZN7BX5XT_cjs.Transaction({ version: 3, allowLegacyWitnessUtxo: true });
|
|
2435
2435
|
const anchor = findP2AOutput(parent);
|
|
2436
2436
|
child.addInput(anchor);
|
|
2437
2437
|
const estimator = TxWeightEstimator.create().addP2AInput();
|
|
@@ -2480,7 +2480,7 @@ function buildForfeitTx(inputs, forfeitPkScript, txLocktime) {
|
|
|
2480
2480
|
);
|
|
2481
2481
|
}
|
|
2482
2482
|
function buildForfeitTxWithOutput(inputs, output, txLocktime) {
|
|
2483
|
-
const tx = new
|
|
2483
|
+
const tx = new chunkZN7BX5XT_cjs.Transaction({
|
|
2484
2484
|
version: 3,
|
|
2485
2485
|
lockTime: txLocktime
|
|
2486
2486
|
});
|
|
@@ -2507,7 +2507,7 @@ function validateConnectorsTxGraph(settlementTxB64, connectorsGraph) {
|
|
|
2507
2507
|
connectorsGraph.validate();
|
|
2508
2508
|
if (connectorsGraph.root.inputsLength !== 1) throw ErrNumberOfInputs;
|
|
2509
2509
|
const rootInput = connectorsGraph.root.getInput(0);
|
|
2510
|
-
const settlementTx =
|
|
2510
|
+
const settlementTx = chunkZN7BX5XT_cjs.Transaction.fromPSBT(base.base64.decode(settlementTxB64));
|
|
2511
2511
|
if (settlementTx.outputsLength <= BATCH_OUTPUT_CONNECTORS_INDEX)
|
|
2512
2512
|
throw ErrInvalidSettlementTxOutputs;
|
|
2513
2513
|
const expectedRootTxid = settlementTx.id;
|
|
@@ -2556,7 +2556,7 @@ function validateVtxoTxGraph(graph, roundTransaction, sweepTapTreeRoot) {
|
|
|
2556
2556
|
if (previousScriptKey.length !== 32) {
|
|
2557
2557
|
throw new Error(`parent output ${childIndex} has invalid script`);
|
|
2558
2558
|
}
|
|
2559
|
-
const cosigners =
|
|
2559
|
+
const cosigners = chunkZN7BX5XT_cjs.getArkPsbtFields(child.root, 0, chunkZN7BX5XT_cjs.CosignerPublicKey);
|
|
2560
2560
|
if (cosigners.length === 0) {
|
|
2561
2561
|
throw ErrMissingCosignersPublicKeys;
|
|
2562
2562
|
}
|
|
@@ -2614,7 +2614,7 @@ var EmulatorPacket = class _EmulatorPacket {
|
|
|
2614
2614
|
return new _EmulatorPacket(entries);
|
|
2615
2615
|
}
|
|
2616
2616
|
static fromBytes(data) {
|
|
2617
|
-
const reader = new
|
|
2617
|
+
const reader = new chunkURILS6HH_cjs.BufferReader(data);
|
|
2618
2618
|
const entryCount = reader.readCompactSize();
|
|
2619
2619
|
const entries = [];
|
|
2620
2620
|
for (let i = 0; i < entryCount; i++) {
|
|
@@ -2632,7 +2632,7 @@ var EmulatorPacket = class _EmulatorPacket {
|
|
|
2632
2632
|
return _EmulatorPacket.PACKET_TYPE;
|
|
2633
2633
|
}
|
|
2634
2634
|
serialize() {
|
|
2635
|
-
const writer = new
|
|
2635
|
+
const writer = new chunkURILS6HH_cjs.BufferWriter();
|
|
2636
2636
|
writer.writeCompactSize(this.entries.length);
|
|
2637
2637
|
for (const entry of this.entries) {
|
|
2638
2638
|
writer.writeUint16LE(entry.vin);
|
|
@@ -2719,7 +2719,7 @@ var Extension = class _Extension {
|
|
|
2719
2719
|
`expected magic prefix ${base.hex.encode(ARKADE_MAGIC)}, got ${base.hex.encode(payload.slice(0, Math.min(payload.length, ARKADE_MAGIC.length)))}`
|
|
2720
2720
|
);
|
|
2721
2721
|
}
|
|
2722
|
-
const reader = new
|
|
2722
|
+
const reader = new chunkURILS6HH_cjs.BufferReader(payload.slice(ARKADE_MAGIC.length));
|
|
2723
2723
|
const packets = [];
|
|
2724
2724
|
while (reader.remaining() > 0) {
|
|
2725
2725
|
const packetType = reader.readByte();
|
|
@@ -2792,7 +2792,7 @@ var Extension = class _Extension {
|
|
|
2792
2792
|
* getAssetPacket returns the embedded Packet, or null if not present.
|
|
2793
2793
|
*/
|
|
2794
2794
|
getAssetPacket() {
|
|
2795
|
-
return this.packets.find((p) => p instanceof
|
|
2795
|
+
return this.packets.find((p) => p instanceof chunkURILS6HH_cjs.Packet) ?? null;
|
|
2796
2796
|
}
|
|
2797
2797
|
/**
|
|
2798
2798
|
* getEmulatorPacket returns the embedded EmulatorPacket, or null if not present.
|
|
@@ -2816,8 +2816,8 @@ var Extension = class _Extension {
|
|
|
2816
2816
|
};
|
|
2817
2817
|
function parsePacket(packetType, data) {
|
|
2818
2818
|
switch (packetType) {
|
|
2819
|
-
case
|
|
2820
|
-
return
|
|
2819
|
+
case chunkURILS6HH_cjs.Packet.PACKET_TYPE:
|
|
2820
|
+
return chunkURILS6HH_cjs.Packet.fromBytes(data);
|
|
2821
2821
|
case EmulatorPacket.PACKET_TYPE:
|
|
2822
2822
|
return EmulatorPacket.fromBytes(data);
|
|
2823
2823
|
default:
|
|
@@ -2864,22 +2864,22 @@ function buildOpReturnScript(data) {
|
|
|
2864
2864
|
}
|
|
2865
2865
|
return script;
|
|
2866
2866
|
}
|
|
2867
|
-
var ErrOffchainOutputNotFound = (address) => new
|
|
2868
|
-
var ErrInvalidAssetOutputAmount = (got, want, assetId) => new
|
|
2867
|
+
var ErrOffchainOutputNotFound = (address) => new chunkZN7BX5XT_cjs.ServerResponseMismatchError(`offchain send output not found: ${address}`);
|
|
2868
|
+
var ErrInvalidAssetOutputAmount = (got, want, assetId) => new chunkZN7BX5XT_cjs.ServerResponseMismatchError(
|
|
2869
2869
|
`invalid asset output amount for ${assetId}: got ${got}, want ${want}`
|
|
2870
2870
|
);
|
|
2871
|
-
var ErrAssetGroupNotFound = (assetId) => new
|
|
2872
|
-
var ErrAssetOutputNotFound = (assetId, outputIndex) => new
|
|
2871
|
+
var ErrAssetGroupNotFound = (assetId) => new chunkZN7BX5XT_cjs.ServerResponseMismatchError(`asset group not found in batch leaf: ${assetId}`);
|
|
2872
|
+
var ErrAssetOutputNotFound = (assetId, outputIndex) => new chunkZN7BX5XT_cjs.ServerResponseMismatchError(
|
|
2873
2873
|
`asset output not found in asset group ${assetId} at index ${outputIndex}`
|
|
2874
2874
|
);
|
|
2875
|
-
var ErrOnchainOutputNotFound = (address) => new
|
|
2876
|
-
var ErrUnvalidatedOffchainOutput = (address) => new
|
|
2875
|
+
var ErrOnchainOutputNotFound = (address) => new chunkZN7BX5XT_cjs.ServerResponseMismatchError(`onchain output not found: ${address}`);
|
|
2876
|
+
var ErrUnvalidatedOffchainOutput = (address) => new chunkZN7BX5XT_cjs.ServerResponseMismatchError(
|
|
2877
2877
|
`offchain output ${address} cannot be validated: virtual output tree signing did not run`
|
|
2878
2878
|
);
|
|
2879
|
-
var ErrIntentOutputNotFound = (index, kind) => new
|
|
2879
|
+
var ErrIntentOutputNotFound = (index, kind) => new chunkZN7BX5XT_cjs.ServerResponseMismatchError(
|
|
2880
2880
|
`${kind} output ${index} of the intent proof is not present in what the server built`
|
|
2881
2881
|
);
|
|
2882
|
-
var ErrUnvalidatedIntentOutput = (index) => new
|
|
2882
|
+
var ErrUnvalidatedIntentOutput = (index) => new chunkZN7BX5XT_cjs.ServerResponseMismatchError(
|
|
2883
2883
|
`offchain output ${index} of the intent proof cannot be validated: virtual output tree signing did not run`
|
|
2884
2884
|
);
|
|
2885
2885
|
var ErrInvalidOnchainOutputAmount = (address) => new Error(`invalid onchain output amount: ${address}`);
|
|
@@ -2888,7 +2888,7 @@ var ErrInvalidOffchainOutputAmount = (address) => new Error(`invalid offchain ou
|
|
|
2888
2888
|
function assertFinalCommitmentMatchesValidated(finalCommitmentTx, validatedCommitmentTxid, context) {
|
|
2889
2889
|
if (!validatedCommitmentTxid) return;
|
|
2890
2890
|
if (finalCommitmentTx.id === validatedCommitmentTxid) return;
|
|
2891
|
-
throw new
|
|
2891
|
+
throw new chunkZN7BX5XT_cjs.ServerResponseMismatchError(
|
|
2892
2892
|
`${context}: finalization commitment tx ${finalCommitmentTx.id} differs from the validated commitment tx ${validatedCommitmentTxid}`
|
|
2893
2893
|
);
|
|
2894
2894
|
}
|
|
@@ -2898,7 +2898,7 @@ function validateBatchRecipients(commitmentTx, vtxoTreeLeaves, recipients, netwo
|
|
|
2898
2898
|
for (const recipient of recipients) {
|
|
2899
2899
|
let arkAddress;
|
|
2900
2900
|
try {
|
|
2901
|
-
arkAddress =
|
|
2901
|
+
arkAddress = chunkZN7BX5XT_cjs.ArkAddress.decode(recipient.address);
|
|
2902
2902
|
} catch {
|
|
2903
2903
|
validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
|
|
2904
2904
|
continue;
|
|
@@ -2910,7 +2910,7 @@ function validateBatchRecipientsWithoutTree(commitmentTx, recipients, network) {
|
|
|
2910
2910
|
const usedOnchainOutputs = /* @__PURE__ */ new Set();
|
|
2911
2911
|
for (const recipient of recipients) {
|
|
2912
2912
|
try {
|
|
2913
|
-
|
|
2913
|
+
chunkZN7BX5XT_cjs.ArkAddress.decode(recipient.address);
|
|
2914
2914
|
} catch {
|
|
2915
2915
|
validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
|
|
2916
2916
|
continue;
|
|
@@ -2919,7 +2919,7 @@ function validateBatchRecipientsWithoutTree(commitmentTx, recipients, network) {
|
|
|
2919
2919
|
}
|
|
2920
2920
|
}
|
|
2921
2921
|
function declaredIntentOutputs(signedProof, onchainOutputIndexes) {
|
|
2922
|
-
const proof =
|
|
2922
|
+
const proof = chunkZN7BX5XT_cjs.Transaction.fromPSBT(base.base64.decode(signedProof));
|
|
2923
2923
|
const onchain = new Set(onchainOutputIndexes);
|
|
2924
2924
|
const declared = [];
|
|
2925
2925
|
for (let i = 0; i < proof.outputsLength; i++) {
|
|
@@ -3211,7 +3211,7 @@ function assetMintResolver() {
|
|
|
3211
3211
|
if (!tx.assets?.length || !tx.key.arkTxid) return void 0;
|
|
3212
3212
|
const minted = tx.assets.filter((a) => {
|
|
3213
3213
|
try {
|
|
3214
|
-
return base.hex.encode(
|
|
3214
|
+
return base.hex.encode(chunkURILS6HH_cjs.AssetId.fromString(a.assetId).txid) === tx.key.arkTxid;
|
|
3215
3215
|
} catch {
|
|
3216
3216
|
return false;
|
|
3217
3217
|
}
|
|
@@ -3288,7 +3288,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
3288
3288
|
const existing = inputsByAssetId.get(asset.assetId);
|
|
3289
3289
|
inputsByAssetId.set(asset.assetId, [
|
|
3290
3290
|
...existing ?? [],
|
|
3291
|
-
|
|
3291
|
+
chunkURILS6HH_cjs.AssetInput.create(inputIndex, asset.amount)
|
|
3292
3292
|
]);
|
|
3293
3293
|
}
|
|
3294
3294
|
}
|
|
@@ -3300,7 +3300,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
3300
3300
|
const existing = outputsByAssetId.get(asset.assetId);
|
|
3301
3301
|
outputsByAssetId.set(asset.assetId, [
|
|
3302
3302
|
...existing ?? [],
|
|
3303
|
-
|
|
3303
|
+
chunkURILS6HH_cjs.AssetOutput.create(outputIndex, asset.amount)
|
|
3304
3304
|
]);
|
|
3305
3305
|
}
|
|
3306
3306
|
}
|
|
@@ -3311,7 +3311,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
3311
3311
|
const existing = outputsByAssetId.get(asset.assetId);
|
|
3312
3312
|
outputsByAssetId.set(asset.assetId, [
|
|
3313
3313
|
...existing ?? [],
|
|
3314
|
-
|
|
3314
|
+
chunkURILS6HH_cjs.AssetOutput.create(outputIndex, asset.amount)
|
|
3315
3315
|
]);
|
|
3316
3316
|
}
|
|
3317
3317
|
}
|
|
@@ -3320,11 +3320,11 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
3320
3320
|
for (const assetIdStr of allAssetIds) {
|
|
3321
3321
|
const inputs = inputsByAssetId.get(assetIdStr);
|
|
3322
3322
|
const outputs = outputsByAssetId.get(assetIdStr);
|
|
3323
|
-
const assetId =
|
|
3324
|
-
const group =
|
|
3323
|
+
const assetId = chunkURILS6HH_cjs.AssetId.fromString(assetIdStr);
|
|
3324
|
+
const group = chunkURILS6HH_cjs.AssetGroup.create(assetId, null, inputs ?? [], outputs ?? [], []);
|
|
3325
3325
|
groups.push(group);
|
|
3326
3326
|
}
|
|
3327
|
-
return
|
|
3327
|
+
return chunkURILS6HH_cjs.Packet.create(groups);
|
|
3328
3328
|
}
|
|
3329
3329
|
function selectCoinsWithAsset(coins, assetId, requiredAmount) {
|
|
3330
3330
|
const coinsWithAsset = coins.filter((coin) => coin.assets?.some((a) => a.assetId === assetId));
|
|
@@ -3408,7 +3408,7 @@ function meetsInputExpiryFloor(coin, floor) {
|
|
|
3408
3408
|
}
|
|
3409
3409
|
function toXOnlySignerHex(pubkeyHex) {
|
|
3410
3410
|
const bytes = base.hex.decode(pubkeyHex);
|
|
3411
|
-
if (bytes.length === 32 || bytes.length === 33) return base.hex.encode(
|
|
3411
|
+
if (bytes.length === 32 || bytes.length === 33) return base.hex.encode(chunkEP6XF7JX_cjs.toXOnly(bytes, "signer key"));
|
|
3412
3412
|
throw new Error(`invalid signer pubkey length: expected 32 or 33 bytes, got ${bytes.length}`);
|
|
3413
3413
|
}
|
|
3414
3414
|
function signerSetFromInfo(info) {
|
|
@@ -3455,13 +3455,13 @@ var toTimelock = (value) => ({
|
|
|
3455
3455
|
var toSeconds = (t) => t.type === "seconds" ? t.value : t.value * NOMINAL_BLOCK_SECONDS;
|
|
3456
3456
|
function assertTimelockInPolicy(timelock, policy, label, overrideOption) {
|
|
3457
3457
|
if (policy.requireSeconds && timelock.type === "blocks") {
|
|
3458
|
-
throw new
|
|
3458
|
+
throw new chunkZN7BX5XT_cjs.ServerResponseMismatchError(
|
|
3459
3459
|
`${label} rejected: block-typed timelocks are not accepted (got ${timelock.value})`
|
|
3460
3460
|
);
|
|
3461
3461
|
}
|
|
3462
3462
|
const seconds = toSeconds(timelock);
|
|
3463
3463
|
if (seconds < policy.minSeconds) {
|
|
3464
|
-
throw new
|
|
3464
|
+
throw new chunkZN7BX5XT_cjs.ServerResponseMismatchError(
|
|
3465
3465
|
`${label} rejected: ${timelock.value} ${timelock.type} is below the ${policy.minSeconds}s floor; pass ${overrideOption}: ${seconds}n to Wallet.create to lower it`
|
|
3466
3466
|
);
|
|
3467
3467
|
}
|
|
@@ -3482,7 +3482,7 @@ function resolveBatchExpiryPolicy(network, overrides) {
|
|
|
3482
3482
|
}
|
|
3483
3483
|
function assertValidBatchExpiry(batchExpiry, policy) {
|
|
3484
3484
|
if (policy.advertisedVtxoTreeExpiry !== void 0 && batchExpiry !== policy.advertisedVtxoTreeExpiry) {
|
|
3485
|
-
throw new
|
|
3485
|
+
throw new chunkZN7BX5XT_cjs.ServerResponseMismatchError(
|
|
3486
3486
|
`batch expiry rejected: ${batchExpiry} does not match the advertised vtxoTreeExpiry ${policy.advertisedVtxoTreeExpiry}`
|
|
3487
3487
|
);
|
|
3488
3488
|
}
|
|
@@ -3512,21 +3512,21 @@ function resolveCheckpointExitDelayPolicy(network, overrides) {
|
|
|
3512
3512
|
function assertValidServerUnrollScript(checkpointTapscript, policy) {
|
|
3513
3513
|
let script;
|
|
3514
3514
|
try {
|
|
3515
|
-
script =
|
|
3515
|
+
script = chunkZN7BX5XT_cjs.CSVMultisigTapscript.decode(base.hex.decode(checkpointTapscript));
|
|
3516
3516
|
} catch (e) {
|
|
3517
|
-
throw new
|
|
3517
|
+
throw new chunkZN7BX5XT_cjs.ServerResponseMismatchError(
|
|
3518
3518
|
`checkpoint exit delay rejected: invalid checkpointTapscript from server (${e instanceof Error ? e.message : String(e)})`
|
|
3519
3519
|
);
|
|
3520
3520
|
}
|
|
3521
3521
|
if (policy.advertisedForfeitPubkey !== void 0) {
|
|
3522
3522
|
const { pubkeys } = script.params;
|
|
3523
3523
|
if (pubkeys.length !== 1) {
|
|
3524
|
-
throw new
|
|
3524
|
+
throw new chunkZN7BX5XT_cjs.ServerResponseMismatchError(
|
|
3525
3525
|
`checkpoint exit delay rejected: checkpointTapscript must commit to exactly one pubkey, got ${pubkeys.length} [${pubkeys.map(base.hex.encode).join(", ")}]`
|
|
3526
3526
|
);
|
|
3527
3527
|
}
|
|
3528
3528
|
if (!utils_js.equalBytes(pubkeys[0], policy.advertisedForfeitPubkey)) {
|
|
3529
|
-
throw new
|
|
3529
|
+
throw new chunkZN7BX5XT_cjs.ServerResponseMismatchError(
|
|
3530
3530
|
`checkpoint exit delay rejected: checkpointTapscript pubkey ${base.hex.encode(pubkeys[0])} does not match the advertised forfeitPubkey ${base.hex.encode(policy.advertisedForfeitPubkey)}`
|
|
3531
3531
|
);
|
|
3532
3532
|
}
|
|
@@ -3570,8 +3570,8 @@ function buildOffchainTx(inputs, outputs, serverUnrollScript) {
|
|
|
3570
3570
|
function buildVirtualTx(inputs, outputs) {
|
|
3571
3571
|
let lockTime = 0n;
|
|
3572
3572
|
for (const input of inputs) {
|
|
3573
|
-
const tapscript =
|
|
3574
|
-
if (
|
|
3573
|
+
const tapscript = chunkZN7BX5XT_cjs.decodeTapscript(chunkZN7BX5XT_cjs.scriptFromTapLeafScript(input.tapLeafScript));
|
|
3574
|
+
if (chunkZN7BX5XT_cjs.CLTVMultisigTapscript.is(tapscript)) {
|
|
3575
3575
|
if (lockTime !== 0n) {
|
|
3576
3576
|
if (isSeconds(lockTime) !== isSeconds(tapscript.params.absoluteTimelock)) {
|
|
3577
3577
|
throw new Error("cannot mix seconds and blocks locktime");
|
|
@@ -3582,7 +3582,7 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
3582
3582
|
}
|
|
3583
3583
|
}
|
|
3584
3584
|
}
|
|
3585
|
-
const tx = new
|
|
3585
|
+
const tx = new chunkZN7BX5XT_cjs.Transaction({
|
|
3586
3586
|
version: 3,
|
|
3587
3587
|
lockTime: Number(lockTime)
|
|
3588
3588
|
});
|
|
@@ -3592,12 +3592,12 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
3592
3592
|
index: input.vout,
|
|
3593
3593
|
sequence: lockTime ? btcSigner.DEFAULT_SEQUENCE - 1 : void 0,
|
|
3594
3594
|
witnessUtxo: {
|
|
3595
|
-
script:
|
|
3595
|
+
script: chunkZN7BX5XT_cjs.VtxoScript.decode(input.tapTree).pkScript,
|
|
3596
3596
|
amount: BigInt(input.value)
|
|
3597
3597
|
},
|
|
3598
3598
|
tapLeafScript: [input.tapLeafScript]
|
|
3599
3599
|
});
|
|
3600
|
-
|
|
3600
|
+
chunkZN7BX5XT_cjs.setArkPsbtField(tx, i, chunkZN7BX5XT_cjs.VtxoTaprootTree, input.tapTree);
|
|
3601
3601
|
}
|
|
3602
3602
|
for (const output of outputs) {
|
|
3603
3603
|
tx.addOutput(output);
|
|
@@ -3608,8 +3608,8 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
3608
3608
|
return tx;
|
|
3609
3609
|
}
|
|
3610
3610
|
function buildCheckpointTx(vtxo, serverUnrollScript) {
|
|
3611
|
-
const collaborativeClosure =
|
|
3612
|
-
const checkpointVtxoScript = new
|
|
3611
|
+
const collaborativeClosure = chunkZN7BX5XT_cjs.decodeTapscript(chunkZN7BX5XT_cjs.scriptFromTapLeafScript(vtxo.tapLeafScript));
|
|
3612
|
+
const checkpointVtxoScript = new chunkZN7BX5XT_cjs.VtxoScript([
|
|
3613
3613
|
serverUnrollScript.script,
|
|
3614
3614
|
collaborativeClosure.script
|
|
3615
3615
|
]);
|
|
@@ -3685,7 +3685,7 @@ function verifyTapscriptSignatures(tx, inputIndex, requiredSigners, excludePubke
|
|
|
3685
3685
|
const sighashType = signature.length === 65 ? signature[64] : btcSigner.SigHash.DEFAULT;
|
|
3686
3686
|
const sig = signature.subarray(0, 64);
|
|
3687
3687
|
if (!allowedSighashTypes.includes(sighashType)) {
|
|
3688
|
-
const sighashName =
|
|
3688
|
+
const sighashName = chunkZN7BX5XT_cjs.formatSighash(sighashType);
|
|
3689
3689
|
throw new Error(
|
|
3690
3690
|
`Unallowed sighash type ${sighashName} for input ${inputIndex}, pubkey ${pubKeyHex}.`
|
|
3691
3691
|
);
|
|
@@ -3759,7 +3759,7 @@ function combineTapscriptSigs(signedTx, originalTx) {
|
|
|
3759
3759
|
}
|
|
3760
3760
|
function isValidArkAddress(address) {
|
|
3761
3761
|
try {
|
|
3762
|
-
|
|
3762
|
+
chunkZN7BX5XT_cjs.ArkAddress.decode(address);
|
|
3763
3763
|
return true;
|
|
3764
3764
|
} catch (e) {
|
|
3765
3765
|
return false;
|
|
@@ -3767,16 +3767,16 @@ function isValidArkAddress(address) {
|
|
|
3767
3767
|
}
|
|
3768
3768
|
function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, context) {
|
|
3769
3769
|
if (serverCheckpointTxs.length !== expectedCheckpoints.length) {
|
|
3770
|
-
throw new
|
|
3770
|
+
throw new chunkZN7BX5XT_cjs.ServerResponseMismatchError(
|
|
3771
3771
|
`${context} returned ${serverCheckpointTxs.length} checkpoints, expected ${expectedCheckpoints.length}`
|
|
3772
3772
|
);
|
|
3773
3773
|
}
|
|
3774
3774
|
const byTxid = new Map(expectedCheckpoints.map((c) => [c.id, c]));
|
|
3775
3775
|
return serverCheckpointTxs.map((encoded, index) => {
|
|
3776
|
-
const server =
|
|
3776
|
+
const server = chunkZN7BX5XT_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
|
|
3777
3777
|
const local = byTxid.get(server.id);
|
|
3778
3778
|
if (!local) {
|
|
3779
|
-
throw new
|
|
3779
|
+
throw new chunkZN7BX5XT_cjs.ServerResponseMismatchError(
|
|
3780
3780
|
`${context} checkpoint ${index} txid ${server.id} does not match any submitted checkpoint`
|
|
3781
3781
|
);
|
|
3782
3782
|
}
|
|
@@ -3786,14 +3786,14 @@ function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, contex
|
|
|
3786
3786
|
}
|
|
3787
3787
|
function assertSubmittedArkTxid(response, signedArkTx, context) {
|
|
3788
3788
|
if (response.arkTxid !== signedArkTx.id) {
|
|
3789
|
-
throw new
|
|
3789
|
+
throw new chunkZN7BX5XT_cjs.ServerResponseMismatchError(
|
|
3790
3790
|
`${context} returned ark txid ${response.arkTxid}, expected ${signedArkTx.id}`
|
|
3791
3791
|
);
|
|
3792
3792
|
}
|
|
3793
3793
|
if (response.finalArkTx === void 0) return;
|
|
3794
|
-
const finalTxid =
|
|
3794
|
+
const finalTxid = chunkZN7BX5XT_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx)).id;
|
|
3795
3795
|
if (finalTxid !== signedArkTx.id) {
|
|
3796
|
-
throw new
|
|
3796
|
+
throw new chunkZN7BX5XT_cjs.ServerResponseMismatchError(
|
|
3797
3797
|
`${context} returned final ark tx ${finalTxid}, expected ${signedArkTx.id}`
|
|
3798
3798
|
);
|
|
3799
3799
|
}
|
|
@@ -3805,20 +3805,20 @@ function assertServerSignedLeaf(serverTx, localTx, inputIndex, serverPubkeys, co
|
|
|
3805
3805
|
`${context}: input ${inputIndex} carries no spend leaf to verify the server signature against`
|
|
3806
3806
|
);
|
|
3807
3807
|
}
|
|
3808
|
-
const script =
|
|
3808
|
+
const script = chunkZN7BX5XT_cjs.scriptFromTapLeafScript(leaf);
|
|
3809
3809
|
let leafPubkeys;
|
|
3810
3810
|
try {
|
|
3811
|
-
leafPubkeys =
|
|
3812
|
-
(key) => base.hex.encode(
|
|
3811
|
+
leafPubkeys = chunkZN7BX5XT_cjs.decodeTapscript(script).params.pubkeys.map(
|
|
3812
|
+
(key) => base.hex.encode(chunkEP6XF7JX_cjs.toXOnly(key, "leaf key"))
|
|
3813
3813
|
);
|
|
3814
3814
|
} catch (error) {
|
|
3815
|
-
throw new
|
|
3815
|
+
throw new chunkZN7BX5XT_cjs.ServerResponseMismatchError(
|
|
3816
3816
|
`${context}: input ${inputIndex} spend leaf cannot be decoded (${error instanceof Error ? error.message : String(error)})`
|
|
3817
3817
|
);
|
|
3818
3818
|
}
|
|
3819
3819
|
const signer = leafPubkeys.find((key) => serverPubkeys.has(key));
|
|
3820
3820
|
if (!signer) {
|
|
3821
|
-
throw new
|
|
3821
|
+
throw new chunkZN7BX5XT_cjs.ServerResponseMismatchError(
|
|
3822
3822
|
`${context}: input ${inputIndex} spend leaf names no signer key the server advertises`
|
|
3823
3823
|
);
|
|
3824
3824
|
}
|
|
@@ -3832,7 +3832,7 @@ function assertServerSignedLeaf(serverTx, localTx, inputIndex, serverPubkeys, co
|
|
|
3832
3832
|
payment_js.tapLeafHash(script)
|
|
3833
3833
|
);
|
|
3834
3834
|
} catch (error) {
|
|
3835
|
-
throw new
|
|
3835
|
+
throw new chunkZN7BX5XT_cjs.ServerResponseMismatchError(
|
|
3836
3836
|
`${context}: input ${inputIndex} is not signed by the server on the leaf being spent (${error instanceof Error ? error.message : String(error)})`
|
|
3837
3837
|
);
|
|
3838
3838
|
}
|
|
@@ -3841,20 +3841,20 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
|
|
|
3841
3841
|
const byOutpoint = new Map(inputs.map((input) => [`${input.txid}:${input.vout}`, input]));
|
|
3842
3842
|
for (const [index, checkpoint] of checkpoints.entries()) {
|
|
3843
3843
|
if (checkpoint.inputsLength !== 1) {
|
|
3844
|
-
throw new
|
|
3844
|
+
throw new chunkZN7BX5XT_cjs.ServerResponseMismatchError(
|
|
3845
3845
|
`${context}: checkpoint ${index} spends ${checkpoint.inputsLength} inputs, expected 1`
|
|
3846
3846
|
);
|
|
3847
3847
|
}
|
|
3848
3848
|
const spent = checkpoint.getInput(0);
|
|
3849
3849
|
if (!spent.txid || spent.index === void 0) {
|
|
3850
|
-
throw new
|
|
3850
|
+
throw new chunkZN7BX5XT_cjs.ServerResponseMismatchError(
|
|
3851
3851
|
`${context}: checkpoint ${index} has no input outpoint`
|
|
3852
3852
|
);
|
|
3853
3853
|
}
|
|
3854
3854
|
const outpoint = `${base.hex.encode(spent.txid)}:${spent.index}`;
|
|
3855
3855
|
const input = byOutpoint.get(outpoint);
|
|
3856
3856
|
if (!input) {
|
|
3857
|
-
throw new
|
|
3857
|
+
throw new chunkZN7BX5XT_cjs.ServerResponseMismatchError(
|
|
3858
3858
|
`${context}: checkpoint ${index} spends ${outpoint}, which is not one of the requested virtual outputs`
|
|
3859
3859
|
);
|
|
3860
3860
|
}
|
|
@@ -3862,7 +3862,7 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
|
|
|
3862
3862
|
(unroll) => buildCheckpointTx(input, unroll).tx.id === checkpoint.id
|
|
3863
3863
|
);
|
|
3864
3864
|
if (!rebuilt) {
|
|
3865
|
-
throw new
|
|
3865
|
+
throw new chunkZN7BX5XT_cjs.ServerResponseMismatchError(
|
|
3866
3866
|
`${context}: checkpoint ${index} txid ${checkpoint.id} differs from the checkpoint built locally for ${outpoint}`
|
|
3867
3867
|
);
|
|
3868
3868
|
}
|
|
@@ -3888,9 +3888,9 @@ async function submitOffchainTx(provider, offchainTx, signer, hooks, options) {
|
|
|
3888
3888
|
const matched = matchServerCheckpoints(signedCheckpointTxs, offchainTx.checkpoints, "submitTx");
|
|
3889
3889
|
matched.forEach(({ server }, index) => {
|
|
3890
3890
|
try {
|
|
3891
|
-
|
|
3891
|
+
chunkZN7BX5XT_cjs.assertAllowedSighashTypes(server);
|
|
3892
3892
|
} catch (error) {
|
|
3893
|
-
throw new
|
|
3893
|
+
throw new chunkZN7BX5XT_cjs.ServerResponseMismatchError(
|
|
3894
3894
|
`submitTx checkpoint ${index}: ${error instanceof Error ? error.message : String(error)}`
|
|
3895
3895
|
);
|
|
3896
3896
|
}
|
|
@@ -3898,14 +3898,14 @@ async function submitOffchainTx(provider, offchainTx, signer, hooks, options) {
|
|
|
3898
3898
|
const verify = options?.verifyServerSignatures;
|
|
3899
3899
|
if (verify) {
|
|
3900
3900
|
if (response.finalArkTx === void 0) {
|
|
3901
|
-
throw new
|
|
3901
|
+
throw new chunkZN7BX5XT_cjs.ServerResponseMismatchError(
|
|
3902
3902
|
"submitTx: server returned no final ark tx to verify its signatures against"
|
|
3903
3903
|
);
|
|
3904
3904
|
}
|
|
3905
|
-
const finalArkTx =
|
|
3905
|
+
const finalArkTx = chunkZN7BX5XT_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx));
|
|
3906
3906
|
const serverPubkeys = new Set(
|
|
3907
3907
|
[verify.serverPubkey, ...verify.deprecatedServerPubkeys ?? []].map(
|
|
3908
|
-
(key) => base.hex.encode(
|
|
3908
|
+
(key) => base.hex.encode(chunkEP6XF7JX_cjs.toXOnly(key, "server key"))
|
|
3909
3909
|
)
|
|
3910
3910
|
);
|
|
3911
3911
|
for (let i = 0; i < offchainTx.arkTx.inputsLength; i++) {
|
|
@@ -3969,7 +3969,7 @@ async function submitViaEmulator(emulator, offchainTx, signer, opts) {
|
|
|
3969
3969
|
base.base64.encode(arkTx.toPSBT()),
|
|
3970
3970
|
checkpoints.map((c) => base.base64.encode(c.toPSBT()))
|
|
3971
3971
|
);
|
|
3972
|
-
const txid =
|
|
3972
|
+
const txid = chunkZN7BX5XT_cjs.Transaction.fromPSBT(base.base64.decode(res.signedArkTx)).id;
|
|
3973
3973
|
assertSubmittedArkTxid({ arkTxid: txid }, arkTx, "emulator submitTx");
|
|
3974
3974
|
return { txid, signedArkTx: res.signedArkTx, signedCheckpointTxs: res.signedCheckpointTxs };
|
|
3975
3975
|
}
|
|
@@ -3977,12 +3977,12 @@ function claimWithPreimageIdentity(identity, preimage) {
|
|
|
3977
3977
|
return {
|
|
3978
3978
|
...identity,
|
|
3979
3979
|
sign: async (tx, inputIndexes) => {
|
|
3980
|
-
const signed =
|
|
3980
|
+
const signed = chunkZN7BX5XT_cjs.Transaction.fromPSBT(
|
|
3981
3981
|
(await identity.sign(tx.clone(), inputIndexes)).toPSBT()
|
|
3982
3982
|
);
|
|
3983
3983
|
const indexes = inputIndexes ?? Array.from({ length: signed.inputsLength }, (_, i) => i);
|
|
3984
3984
|
for (const index of indexes) {
|
|
3985
|
-
|
|
3985
|
+
chunkZN7BX5XT_cjs.setArkPsbtField(signed, index, chunkZN7BX5XT_cjs.ConditionWitness, [preimage]);
|
|
3986
3986
|
}
|
|
3987
3987
|
return signed;
|
|
3988
3988
|
}
|
|
@@ -4165,7 +4165,7 @@ function extendCoinWithTapscript(boardingTapscript, utxo) {
|
|
|
4165
4165
|
};
|
|
4166
4166
|
}
|
|
4167
4167
|
function deriveContractTapscripts(contract) {
|
|
4168
|
-
const handler =
|
|
4168
|
+
const handler = chunkEP6XF7JX_cjs.contractHandlers.get(contract.type);
|
|
4169
4169
|
if (!handler) {
|
|
4170
4170
|
throw new Error(`No handler for contract type '${contract.type}'`);
|
|
4171
4171
|
}
|
|
@@ -4268,7 +4268,7 @@ function assertRecipientArkadeAddress(encoded, address, context) {
|
|
|
4268
4268
|
function assertTapTreeDerivesAddress(encoded, tapTree, address) {
|
|
4269
4269
|
let derived;
|
|
4270
4270
|
try {
|
|
4271
|
-
derived =
|
|
4271
|
+
derived = chunkZN7BX5XT_cjs.VtxoScript.decode(tapTree).pkScript;
|
|
4272
4272
|
} catch (e) {
|
|
4273
4273
|
throw new Error(
|
|
4274
4274
|
`Invalid tapTree for ${encoded}: ${e instanceof Error ? e.message : String(e)}`
|
|
@@ -4285,7 +4285,7 @@ function validateRecipients(recipients, dustAmount, context) {
|
|
|
4285
4285
|
for (const recipient of recipients) {
|
|
4286
4286
|
let address;
|
|
4287
4287
|
try {
|
|
4288
|
-
address =
|
|
4288
|
+
address = chunkZN7BX5XT_cjs.ArkAddress.decode(recipient.address);
|
|
4289
4289
|
} catch (e) {
|
|
4290
4290
|
throw new Error(`Invalid Arkade address: ${recipient.address}`);
|
|
4291
4291
|
}
|
|
@@ -4310,7 +4310,7 @@ function validateRecipients(recipients, dustAmount, context) {
|
|
|
4310
4310
|
|
|
4311
4311
|
// src/contracts/spendability.ts
|
|
4312
4312
|
function isContractGenericallySpendable(contract) {
|
|
4313
|
-
return
|
|
4313
|
+
return chunkEP6XF7JX_cjs.contractHandlers.get(contract.type)?.isGenericallySpendable?.(contract) === true;
|
|
4314
4314
|
}
|
|
4315
4315
|
function gatedContracts(contracts) {
|
|
4316
4316
|
const gated = /* @__PURE__ */ new Map();
|
|
@@ -4332,7 +4332,7 @@ function gateExclusion(gated) {
|
|
|
4332
4332
|
return (vtxo) => {
|
|
4333
4333
|
const type = gatedTypeOf(vtxo, gated);
|
|
4334
4334
|
if (type === void 0) return void 0;
|
|
4335
|
-
if (!
|
|
4335
|
+
if (!chunkEP6XF7JX_cjs.contractHandlers.has(type)) {
|
|
4336
4336
|
return `at ${vtxo.script} (contract type '${type}') has no handler registered in this build`;
|
|
4337
4337
|
}
|
|
4338
4338
|
return `at ${vtxo.script} (contract type '${type}') is not generically spendable`;
|
|
@@ -4368,7 +4368,7 @@ function selectPendingRecoveryOutpoints(contractsWithVtxos, signerSet, nowSecond
|
|
|
4368
4368
|
continue;
|
|
4369
4369
|
}
|
|
4370
4370
|
for (const v of vtxos) {
|
|
4371
|
-
if (!
|
|
4371
|
+
if (!chunkZN7BX5XT_cjs.isVtxoSpent(v) && !v.isSwept && !v.isUnrolled) {
|
|
4372
4372
|
out.add(`${v.txid}:${v.vout}`);
|
|
4373
4373
|
}
|
|
4374
4374
|
}
|
|
@@ -4404,14 +4404,14 @@ function byValueDescending(vtxos) {
|
|
|
4404
4404
|
return [...vtxos].sort((a, b) => b.value - a.value);
|
|
4405
4405
|
}
|
|
4406
4406
|
async function fetchTimeHeight(wallet) {
|
|
4407
|
-
return
|
|
4407
|
+
return chunkZN7BX5XT_cjs.resolveTimeHeight(wallet.onchainProvider);
|
|
4408
4408
|
}
|
|
4409
4409
|
function heldVtxosOf(wallet) {
|
|
4410
4410
|
const held = wallet.getHeldVtxos;
|
|
4411
4411
|
return typeof held === "function" ? held.call(wallet) : Promise.resolve([]);
|
|
4412
4412
|
}
|
|
4413
4413
|
function canMigrateBySend(vtxo, now) {
|
|
4414
|
-
if (!
|
|
4414
|
+
if (!chunkZN7BX5XT_cjs.canSpendOffchain(vtxo, now)) return false;
|
|
4415
4415
|
return vtxo.expiresAt !== void 0 || vtxo.expiresAtHeight !== void 0;
|
|
4416
4416
|
}
|
|
4417
4417
|
function byExpiryAscending(vtxos, now) {
|
|
@@ -4419,7 +4419,7 @@ function byExpiryAscending(vtxos, now) {
|
|
|
4419
4419
|
if (vtxo.isSwept) return -Infinity;
|
|
4420
4420
|
if (vtxo.expiresAt !== void 0) return vtxo.expiresAt.getTime();
|
|
4421
4421
|
if (vtxo.expiresAtHeight !== void 0) {
|
|
4422
|
-
return
|
|
4422
|
+
return chunkZN7BX5XT_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
|
|
4423
4423
|
}
|
|
4424
4424
|
return Infinity;
|
|
4425
4425
|
};
|
|
@@ -4446,7 +4446,7 @@ function priceSettlementInputs(vtxos, estimator) {
|
|
|
4446
4446
|
const payable = [];
|
|
4447
4447
|
const net = /* @__PURE__ */ new Map();
|
|
4448
4448
|
for (const vtxo of vtxos) {
|
|
4449
|
-
const inputFee = estimator.evalOffchainInput(
|
|
4449
|
+
const inputFee = estimator.evalOffchainInput(chunkZN7BX5XT_cjs.toOffchainInputFeeParams(vtxo));
|
|
4450
4450
|
if (inputFee.satoshis >= vtxo.value) {
|
|
4451
4451
|
continue;
|
|
4452
4452
|
}
|
|
@@ -4475,7 +4475,7 @@ function offchainOutputFee(amount, estimator, arkAddress) {
|
|
|
4475
4475
|
}
|
|
4476
4476
|
const outputFee = estimator.evalOffchainOutput({
|
|
4477
4477
|
amount,
|
|
4478
|
-
script: base.hex.encode(
|
|
4478
|
+
script: base.hex.encode(chunkZN7BX5XT_cjs.ArkAddress.decode(arkAddress).pkScript)
|
|
4479
4479
|
});
|
|
4480
4480
|
return BigInt(outputFee.satoshis);
|
|
4481
4481
|
}
|
|
@@ -4526,10 +4526,10 @@ var DEFAULT_SETTLEMENT_CONFIG = {
|
|
|
4526
4526
|
};
|
|
4527
4527
|
function getRecoverableVtxos(vtxos, dustAmount, now) {
|
|
4528
4528
|
return vtxos.filter((vtxo) => {
|
|
4529
|
-
if (
|
|
4529
|
+
if (chunkZN7BX5XT_cjs.canRecoverOnchain(vtxo, now)) {
|
|
4530
4530
|
return true;
|
|
4531
4531
|
}
|
|
4532
|
-
if (
|
|
4532
|
+
if (chunkZN7BX5XT_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
|
|
4533
4533
|
return true;
|
|
4534
4534
|
}
|
|
4535
4535
|
return false;
|
|
@@ -4561,7 +4561,7 @@ function getRecoverableWithSubdust(vtxos, dustAmount, now) {
|
|
|
4561
4561
|
function isVtxoExpiringSoon(vtxo, thresholdMs) {
|
|
4562
4562
|
if (vtxo.isUnrolled) return false;
|
|
4563
4563
|
const realThresholdMs = thresholdMs <= 100 ? DEFAULT_THRESHOLD_MS : thresholdMs;
|
|
4564
|
-
const expiresAt =
|
|
4564
|
+
const expiresAt = chunkZN7BX5XT_cjs.normalizeVtxo(vtxo).expiresAt;
|
|
4565
4565
|
if (expiresAt === void 0) return false;
|
|
4566
4566
|
const now = Date.now();
|
|
4567
4567
|
const batchExpiry = expiresAt.getTime();
|
|
@@ -4572,7 +4572,7 @@ function getExpiringAndRecoverableVtxos(vtxos, thresholdMs, dustAmount, now) {
|
|
|
4572
4572
|
return vtxos.filter(
|
|
4573
4573
|
// The leading exclusion covers the `isSubdust` arm too, which is a value
|
|
4574
4574
|
// property and would otherwise re-admit an exited coin on its own.
|
|
4575
|
-
(vtxo) => !vtxo.isUnrolled && (isVtxoExpiringSoon(vtxo, thresholdMs) ||
|
|
4575
|
+
(vtxo) => !vtxo.isUnrolled && (isVtxoExpiringSoon(vtxo, thresholdMs) || chunkZN7BX5XT_cjs.canRecoverOnchain(vtxo, now) || isSubdust(vtxo, dustAmount))
|
|
4576
4576
|
);
|
|
4577
4577
|
}
|
|
4578
4578
|
function isMigrationCapable(wallet) {
|
|
@@ -4632,7 +4632,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4632
4632
|
constructor(wallet, settlementConfig) {
|
|
4633
4633
|
this.wallet = wallet;
|
|
4634
4634
|
if (settlementConfig !== false) {
|
|
4635
|
-
|
|
4635
|
+
chunkZN7BX5XT_cjs.assertTimerMs("pollIntervalMs", settlementConfig?.pollIntervalMs);
|
|
4636
4636
|
}
|
|
4637
4637
|
this.settlementConfig = settlementConfig !== void 0 ? settlementConfig : { ...DEFAULT_SETTLEMENT_CONFIG };
|
|
4638
4638
|
this.contractEventsSubscriptionReady = this.initializeSubscription();
|
|
@@ -4939,7 +4939,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4939
4939
|
* {@link recoverImportedContracts}).
|
|
4940
4940
|
*/
|
|
4941
4941
|
async recoverOneImportedContract(wallet, contract, vtxos, info, dustAmount) {
|
|
4942
|
-
const recoverable = vtxos.filter((vtxo) => vtxo.isSwept && !
|
|
4942
|
+
const recoverable = vtxos.filter((vtxo) => vtxo.isSwept && !chunkZN7BX5XT_cjs.isVtxoSpent(vtxo));
|
|
4943
4943
|
const estimator = new Estimator(info?.fees.intentFee ?? {});
|
|
4944
4944
|
const { payable, net } = priceSettlementInputs(recoverable, estimator);
|
|
4945
4945
|
const vtxoMaxAmount = info?.vtxoMaxAmount ?? -1n;
|
|
@@ -4961,7 +4961,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4961
4961
|
if (vtxos.length === 0) return;
|
|
4962
4962
|
const spent = new Set(batch.map((vtxo) => `${vtxo.txid}:${vtxo.vout}`));
|
|
4963
4963
|
const stillSpendable = vtxos.some(
|
|
4964
|
-
(vtxo) => !
|
|
4964
|
+
(vtxo) => !chunkZN7BX5XT_cjs.isVtxoSpent(vtxo) && !spent.has(`${vtxo.txid}:${vtxo.vout}`)
|
|
4965
4965
|
);
|
|
4966
4966
|
if (!stillSpendable) {
|
|
4967
4967
|
await wallet.removeRecoveryContract(contract.script);
|
|
@@ -5253,11 +5253,11 @@ var VtxoManager = class _VtxoManager {
|
|
|
5253
5253
|
`Sweep not economical: output ${outputAmount} sats after ${fee} sats fee is below dust (${dustAmount} sats)`
|
|
5254
5254
|
);
|
|
5255
5255
|
}
|
|
5256
|
-
const tx = new
|
|
5256
|
+
const tx = new chunkZN7BX5XT_cjs.Transaction();
|
|
5257
5257
|
for (const utxo of expiredUtxos) {
|
|
5258
|
-
const utxoScript =
|
|
5258
|
+
const utxoScript = chunkZN7BX5XT_cjs.VtxoScript.decode(utxo.tapTree);
|
|
5259
5259
|
const utxoExitLeaf = utxoScript.leaves.find(
|
|
5260
|
-
(leaf) =>
|
|
5260
|
+
(leaf) => chunkZN7BX5XT_cjs.CSVMultisigTapscript.isScriptValid(chunkZN7BX5XT_cjs.scriptFromTapLeafScript(leaf)) === true
|
|
5261
5261
|
);
|
|
5262
5262
|
if (!utxoExitLeaf) {
|
|
5263
5263
|
throw new Error(
|
|
@@ -5272,7 +5272,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5272
5272
|
amount: BigInt(utxo.value)
|
|
5273
5273
|
},
|
|
5274
5274
|
tapLeafScript: [utxoExitLeaf],
|
|
5275
|
-
sequence:
|
|
5275
|
+
sequence: chunkZN7BX5XT_cjs.getSequence(utxoExitLeaf)
|
|
5276
5276
|
});
|
|
5277
5277
|
}
|
|
5278
5278
|
tx.addOutputAddress(boardingAddress, outputAmount, this.getNetwork());
|
|
@@ -5498,8 +5498,8 @@ var VtxoManager = class _VtxoManager {
|
|
|
5498
5498
|
const cls = classifyAgainstSignerSet(serverPubKey, signerSet, nowSeconds);
|
|
5499
5499
|
if (cls.status === "CURRENT") continue;
|
|
5500
5500
|
const live = vtxos.filter((v) => !v.isUnrolled);
|
|
5501
|
-
const recoverable = live.filter((v) => v.isSwept && !
|
|
5502
|
-
const spendable = live.filter((v) => !
|
|
5501
|
+
const recoverable = live.filter((v) => v.isSwept && !chunkZN7BX5XT_cjs.isVtxoSpent(v));
|
|
5502
|
+
const spendable = live.filter((v) => !chunkZN7BX5XT_cjs.isVtxoSpent(v) && !v.isSwept);
|
|
5503
5503
|
const value = spendable.reduce((sum, v) => sum + v.value, 0);
|
|
5504
5504
|
let recoverableCount = 0;
|
|
5505
5505
|
let recoverableValue = 0;
|
|
@@ -5739,7 +5739,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5739
5739
|
}
|
|
5740
5740
|
getBoardingTimelock() {
|
|
5741
5741
|
const wallet = this.getSweepWallet();
|
|
5742
|
-
const exitScript =
|
|
5742
|
+
const exitScript = chunkZN7BX5XT_cjs.CSVMultisigTapscript.decode(
|
|
5743
5743
|
base.hex.decode(wallet.boardingTapscript.exitScript)
|
|
5744
5744
|
);
|
|
5745
5745
|
return exitScript.params.timelock;
|
|
@@ -5847,8 +5847,8 @@ var VtxoManager = class _VtxoManager {
|
|
|
5847
5847
|
}
|
|
5848
5848
|
/** The outpoint a `VTXO_ALREADY_SPENT` error carries in `metadata.vtxo_outpoint`, if any. */
|
|
5849
5849
|
extractSpentOutpoint(error) {
|
|
5850
|
-
const ark =
|
|
5851
|
-
if (!
|
|
5850
|
+
const ark = chunkZN7BX5XT_cjs.maybeArkError(error);
|
|
5851
|
+
if (!chunkZN7BX5XT_cjs.isArkError(ark, chunkZN7BX5XT_cjs.ArkErrorName.VTXO_ALREADY_SPENT)) return void 0;
|
|
5852
5852
|
const raw = ark.metadata?.vtxo_outpoint;
|
|
5853
5853
|
if (typeof raw !== "string") return void 0;
|
|
5854
5854
|
const [txid, voutStr] = raw.split(":");
|
|
@@ -6022,7 +6022,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
6022
6022
|
if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
|
|
6023
6023
|
break;
|
|
6024
6024
|
}
|
|
6025
|
-
const inputFee = estimator.evalOffchainInput(
|
|
6025
|
+
const inputFee = estimator.evalOffchainInput(chunkZN7BX5XT_cjs.toOffchainInputFeeParams(v));
|
|
6026
6026
|
if (inputFee.satoshis >= v.value) {
|
|
6027
6027
|
continue;
|
|
6028
6028
|
}
|
|
@@ -6042,7 +6042,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
6042
6042
|
const arkAddress = await this.wallet.getAddress();
|
|
6043
6043
|
const outputFee = estimator.evalOffchainOutput({
|
|
6044
6044
|
amount: totalAmount,
|
|
6045
|
-
script: base.hex.encode(
|
|
6045
|
+
script: base.hex.encode(chunkZN7BX5XT_cjs.ArkAddress.decode(arkAddress).pkScript)
|
|
6046
6046
|
});
|
|
6047
6047
|
totalAmount -= BigInt(outputFee.satoshis);
|
|
6048
6048
|
if (totalAmount < dustAmount) return;
|
|
@@ -6126,7 +6126,7 @@ var ArkNote = class _ArkNote {
|
|
|
6126
6126
|
this.value = value;
|
|
6127
6127
|
this.HRP = HRP;
|
|
6128
6128
|
const preimageHash = utils_js.sha256(this.preimage);
|
|
6129
|
-
this.vtxoScript = new
|
|
6129
|
+
this.vtxoScript = new chunkZN7BX5XT_cjs.VtxoScript([noteTapscript(preimageHash)]);
|
|
6130
6130
|
const leaf = this.vtxoScript.leaves[0];
|
|
6131
6131
|
this.txid = base.hex.encode(new Uint8Array(preimageHash).reverse());
|
|
6132
6132
|
this.tapTree = this.vtxoScript.encode();
|
|
@@ -6299,7 +6299,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
6299
6299
|
const privateKey = data.slice(1, 33);
|
|
6300
6300
|
const serverPubKey = data.slice(33, 65);
|
|
6301
6301
|
const sequence = new DataView(data.buffer, data.byteOffset + 65, 4).getUint32(0, false);
|
|
6302
|
-
const csvTimelock2 =
|
|
6302
|
+
const csvTimelock2 = chunkZN7BX5XT_cjs.sequenceToTimelock(sequence);
|
|
6303
6303
|
return new _ArkadeCash(privateKey, serverPubKey, csvTimelock2, decoded.prefix);
|
|
6304
6304
|
}
|
|
6305
6305
|
toString() {
|
|
@@ -6307,7 +6307,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
6307
6307
|
data[0] = _ArkadeCash.Version;
|
|
6308
6308
|
data.set(this._privateKey, 1);
|
|
6309
6309
|
data.set(this._serverPubKey, 33);
|
|
6310
|
-
const sequence =
|
|
6310
|
+
const sequence = chunkZN7BX5XT_cjs.timelockToSequence(this.csvTimelock);
|
|
6311
6311
|
new DataView(data.buffer, data.byteOffset + 65, 4).setUint32(0, sequence, false);
|
|
6312
6312
|
const words = base.bech32m.toWords(data);
|
|
6313
6313
|
return base.bech32m.encode(this.hrp, words, 1023);
|
|
@@ -6316,7 +6316,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
6316
6316
|
return SingleKey.fromPrivateKey(this._privateKey);
|
|
6317
6317
|
}
|
|
6318
6318
|
get vtxoScript() {
|
|
6319
|
-
return new
|
|
6319
|
+
return new chunkEP6XF7JX_cjs.DefaultVtxo.Script({
|
|
6320
6320
|
pubKey: this._publicKey,
|
|
6321
6321
|
serverPubKey: this._serverPubKey,
|
|
6322
6322
|
csvTimelock: this.csvTimelock
|
|
@@ -6332,7 +6332,7 @@ var NON_TERMINAL_INTENT_STATES = ALL_INTENT_STATES.filter(
|
|
|
6332
6332
|
(s) => !isTerminalIntentState(s)
|
|
6333
6333
|
);
|
|
6334
6334
|
function isConsumed(vtxo) {
|
|
6335
|
-
return vtxo !== void 0 &&
|
|
6335
|
+
return vtxo !== void 0 && chunkZN7BX5XT_cjs.isVtxoSpent(vtxo);
|
|
6336
6336
|
}
|
|
6337
6337
|
async function classifyIntent(intent, vtxosByOutpoint, now) {
|
|
6338
6338
|
if (isTerminalIntentState(intent.state)) return void 0;
|
|
@@ -6375,7 +6375,7 @@ async function reconcileIntents(deps) {
|
|
|
6375
6375
|
let vtxosByOutpoint = /* @__PURE__ */ new Map();
|
|
6376
6376
|
if (outpoints.length > 0) {
|
|
6377
6377
|
try {
|
|
6378
|
-
const { vtxos } = await
|
|
6378
|
+
const { vtxos } = await chunkZN7BX5XT_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
|
|
6379
6379
|
vtxosByOutpoint = new Map(vtxos.map((v) => [outpointKey(v), v]));
|
|
6380
6380
|
} catch (e) {
|
|
6381
6381
|
console.error("reconcileIntents: failed to fetch input VTXO state", e);
|
|
@@ -6435,7 +6435,7 @@ async function releaseFromServer(intent, deps, now) {
|
|
|
6435
6435
|
});
|
|
6436
6436
|
}
|
|
6437
6437
|
function isNoMatchingIntentsError(e) {
|
|
6438
|
-
return
|
|
6438
|
+
return chunkZN7BX5XT_cjs.isArkError(e, chunkZN7BX5XT_cjs.ArkErrorName.INVALID_INTENT_PROOF) && e.message.includes("no matching intents found");
|
|
6439
6439
|
}
|
|
6440
6440
|
function terminal(intent, state, now, patch) {
|
|
6441
6441
|
return { ...intent, ...patch, state, updatedAt: now };
|
|
@@ -6654,7 +6654,7 @@ async function captureExitBranch(params) {
|
|
|
6654
6654
|
const nonCommitment = ordered.filter((c) => chainTxTypeToChainedExit(c.type) !== 1 /* Commitment */).map((c) => c.txid);
|
|
6655
6655
|
if (nonCommitment.length > 0) {
|
|
6656
6656
|
for (const psbt of await resolver.getVirtualTxs(nonCommitment)) {
|
|
6657
|
-
psbtByTxid.set(
|
|
6657
|
+
psbtByTxid.set(chunkZN7BX5XT_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
6658
6658
|
}
|
|
6659
6659
|
}
|
|
6660
6660
|
}
|
|
@@ -6697,10 +6697,10 @@ var IndexerExitDataSource = class {
|
|
|
6697
6697
|
while (hasMore) {
|
|
6698
6698
|
const { chain: page, page: meta } = await this.indexer.getVtxoChain(
|
|
6699
6699
|
{ txid: vtxo.txid, vout: vtxo.vout },
|
|
6700
|
-
{ pageIndex, pageSize:
|
|
6700
|
+
{ pageIndex, pageSize: chunkZN7BX5XT_cjs.DEFAULT_PAGE_SIZE }
|
|
6701
6701
|
);
|
|
6702
6702
|
chain.push(...page);
|
|
6703
|
-
hasMore = meta ? page.length ===
|
|
6703
|
+
hasMore = meta ? page.length === chunkZN7BX5XT_cjs.DEFAULT_PAGE_SIZE : false;
|
|
6704
6704
|
pageIndex++;
|
|
6705
6705
|
}
|
|
6706
6706
|
return chain;
|
|
@@ -6712,12 +6712,12 @@ var IndexerExitDataSource = class {
|
|
|
6712
6712
|
while (hasMore) {
|
|
6713
6713
|
const { txs, page } = await this.indexer.getVirtualTxs(txids, {
|
|
6714
6714
|
pageIndex,
|
|
6715
|
-
pageSize:
|
|
6715
|
+
pageSize: chunkZN7BX5XT_cjs.DEFAULT_PAGE_SIZE
|
|
6716
6716
|
});
|
|
6717
6717
|
for (const psbt of txs) {
|
|
6718
|
-
out.set(
|
|
6718
|
+
out.set(chunkZN7BX5XT_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
6719
6719
|
}
|
|
6720
|
-
hasMore = page ? txs.length ===
|
|
6720
|
+
hasMore = page ? txs.length === chunkZN7BX5XT_cjs.DEFAULT_PAGE_SIZE : false;
|
|
6721
6721
|
pageIndex++;
|
|
6722
6722
|
}
|
|
6723
6723
|
return out;
|
|
@@ -6738,7 +6738,7 @@ function chainedTxTypeToChainTxType(t) {
|
|
|
6738
6738
|
}
|
|
6739
6739
|
}
|
|
6740
6740
|
function psbtInputTxids(psbtBase64) {
|
|
6741
|
-
return txInputTxids(
|
|
6741
|
+
return txInputTxids(chunkZN7BX5XT_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64)));
|
|
6742
6742
|
}
|
|
6743
6743
|
function txInputTxids(tx) {
|
|
6744
6744
|
const ids = [];
|
|
@@ -7042,10 +7042,10 @@ async function resolveArkInfo(arkProvider, walletRepository, opts) {
|
|
|
7042
7042
|
try {
|
|
7043
7043
|
info = await arkProvider.getInfo();
|
|
7044
7044
|
} catch (err) {
|
|
7045
|
-
if (opts?.requireLive || !
|
|
7045
|
+
if (opts?.requireLive || !chunkZN7BX5XT_cjs.isRetryableProviderError(err)) throw err;
|
|
7046
7046
|
const snapshot = await loadArkInfoSnapshot(walletRepository);
|
|
7047
7047
|
if (!snapshot) {
|
|
7048
|
-
throw new
|
|
7048
|
+
throw new chunkZN7BX5XT_cjs.ProviderUnavailableError(
|
|
7049
7049
|
"Arkade server info is unavailable and no cached snapshot exists",
|
|
7050
7050
|
{ cause: err }
|
|
7051
7051
|
);
|
|
@@ -7237,7 +7237,7 @@ function buildGraph(rootTxid, chunksByTxid) {
|
|
|
7237
7237
|
return new TxTree(rootTx, children);
|
|
7238
7238
|
}
|
|
7239
7239
|
function decodeNode(chunk) {
|
|
7240
|
-
const tx =
|
|
7240
|
+
const tx = chunkZN7BX5XT_cjs.Transaction.fromPSBT(base.base64.decode(chunk.tx));
|
|
7241
7241
|
return { tx, children: chunk.children };
|
|
7242
7242
|
}
|
|
7243
7243
|
exports.Batch = void 0;
|
|
@@ -7440,7 +7440,7 @@ function collectArkTxidsNeedingCreatedAt(vtxos, localCreatedAt) {
|
|
|
7440
7440
|
return [...txids];
|
|
7441
7441
|
}
|
|
7442
7442
|
async function buildTransactionHistory(vtxos, allBoardingTxs, commitmentsToIgnore, resolveTxCreatedAt, gatedScripts = /* @__PURE__ */ new Map()) {
|
|
7443
|
-
const normalized = vtxos.map(
|
|
7443
|
+
const normalized = vtxos.map(chunkZN7BX5XT_cjs.normalizeVtxo).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
|
|
7444
7444
|
const localCreatedAt = localCreatedAtByTxid(normalized);
|
|
7445
7445
|
const gatedVtxos = normalized.filter((vtxo) => isGatedVtxo(vtxo, gatedScripts));
|
|
7446
7446
|
const ownVtxos = normalized.filter((vtxo) => !isGatedVtxo(vtxo, gatedScripts));
|
|
@@ -7618,7 +7618,7 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7618
7618
|
withRecoverable: false,
|
|
7619
7619
|
genericallySpendableOnly: true
|
|
7620
7620
|
});
|
|
7621
|
-
const controlAssetRef = params.controlAssetId ?
|
|
7621
|
+
const controlAssetRef = params.controlAssetId ? chunkURILS6HH_cjs.AssetRef.fromId(chunkURILS6HH_cjs.AssetId.fromString(params.controlAssetId)) : null;
|
|
7622
7622
|
const coinSelection = selectVirtualCoins(virtualCoins, Number(this.wallet.dustAmount));
|
|
7623
7623
|
let totalBtcSelected = 0n;
|
|
7624
7624
|
const assetChanges = /* @__PURE__ */ new Map();
|
|
@@ -7631,8 +7631,8 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7631
7631
|
}
|
|
7632
7632
|
}
|
|
7633
7633
|
const groups = [];
|
|
7634
|
-
const issuedAssetOutput =
|
|
7635
|
-
const issuedAssetGroup =
|
|
7634
|
+
const issuedAssetOutput = chunkURILS6HH_cjs.AssetOutput.create(0, params.amount);
|
|
7635
|
+
const issuedAssetGroup = chunkURILS6HH_cjs.AssetGroup.create(
|
|
7636
7636
|
null,
|
|
7637
7637
|
controlAssetRef,
|
|
7638
7638
|
[],
|
|
@@ -7645,11 +7645,11 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7645
7645
|
for (const [assetId, amount] of assetChanges) {
|
|
7646
7646
|
const changeInputs = inputsForAsset(assetInputs, assetId);
|
|
7647
7647
|
groups.push(
|
|
7648
|
-
|
|
7649
|
-
|
|
7648
|
+
chunkURILS6HH_cjs.AssetGroup.create(
|
|
7649
|
+
chunkURILS6HH_cjs.AssetId.fromString(assetId),
|
|
7650
7650
|
null,
|
|
7651
7651
|
changeInputs,
|
|
7652
|
-
[
|
|
7652
|
+
[chunkURILS6HH_cjs.AssetOutput.create(0, amount)],
|
|
7653
7653
|
[]
|
|
7654
7654
|
)
|
|
7655
7655
|
);
|
|
@@ -7664,7 +7664,7 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7664
7664
|
);
|
|
7665
7665
|
return {
|
|
7666
7666
|
arkTxId: arkTxid,
|
|
7667
|
-
assetId:
|
|
7667
|
+
assetId: chunkURILS6HH_cjs.AssetId.create(arkTxid, 0).toString()
|
|
7668
7668
|
};
|
|
7669
7669
|
}
|
|
7670
7670
|
/**
|
|
@@ -7738,23 +7738,23 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7738
7738
|
const assetInputs = selectedCoinsToAssetInputs(selectedCoins);
|
|
7739
7739
|
const reissueInputs = inputsForAsset(assetInputs, params.assetId);
|
|
7740
7740
|
const totalAssetAmount = assetToReissueAmount + params.amount;
|
|
7741
|
-
const reissueAssetIdObj =
|
|
7742
|
-
const reissueAssetGroup =
|
|
7741
|
+
const reissueAssetIdObj = chunkURILS6HH_cjs.AssetId.fromString(params.assetId);
|
|
7742
|
+
const reissueAssetGroup = chunkURILS6HH_cjs.AssetGroup.create(
|
|
7743
7743
|
reissueAssetIdObj,
|
|
7744
7744
|
null,
|
|
7745
7745
|
reissueInputs,
|
|
7746
|
-
[
|
|
7746
|
+
[chunkURILS6HH_cjs.AssetOutput.create(0, totalAssetAmount)],
|
|
7747
7747
|
[]
|
|
7748
7748
|
);
|
|
7749
7749
|
const groups = [reissueAssetGroup];
|
|
7750
7750
|
for (const [assetId, amount] of assetChanges) {
|
|
7751
7751
|
const changeInputs = inputsForAsset(assetInputs, assetId);
|
|
7752
7752
|
groups.push(
|
|
7753
|
-
|
|
7754
|
-
|
|
7753
|
+
chunkURILS6HH_cjs.AssetGroup.create(
|
|
7754
|
+
chunkURILS6HH_cjs.AssetId.fromString(assetId),
|
|
7755
7755
|
null,
|
|
7756
7756
|
changeInputs,
|
|
7757
|
-
[
|
|
7757
|
+
[chunkURILS6HH_cjs.AssetOutput.create(0, amount)],
|
|
7758
7758
|
[]
|
|
7759
7759
|
)
|
|
7760
7760
|
);
|
|
@@ -7825,11 +7825,11 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7825
7825
|
for (const [assetId, amount] of assetChanges) {
|
|
7826
7826
|
const changeInputs = inputsForAsset(assetInputs, assetId);
|
|
7827
7827
|
groups.push(
|
|
7828
|
-
|
|
7829
|
-
|
|
7828
|
+
chunkURILS6HH_cjs.AssetGroup.create(
|
|
7829
|
+
chunkURILS6HH_cjs.AssetId.fromString(assetId),
|
|
7830
7830
|
null,
|
|
7831
7831
|
changeInputs,
|
|
7832
|
-
amount > 0n ? [
|
|
7832
|
+
amount > 0n ? [chunkURILS6HH_cjs.AssetOutput.create(0, amount)] : [],
|
|
7833
7833
|
[]
|
|
7834
7834
|
)
|
|
7835
7835
|
);
|
|
@@ -7842,16 +7842,16 @@ function inputsForAsset(assetInputs, assetId) {
|
|
|
7842
7842
|
for (const [inputIndex, assets] of assetInputs) {
|
|
7843
7843
|
for (const asset of assets) {
|
|
7844
7844
|
if (asset.assetId !== assetId) continue;
|
|
7845
|
-
inputs.push(
|
|
7845
|
+
inputs.push(chunkURILS6HH_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
7846
7846
|
}
|
|
7847
7847
|
}
|
|
7848
7848
|
return inputs;
|
|
7849
7849
|
}
|
|
7850
7850
|
async function submitToSelf(submit, wallet, inputs, amount, groups) {
|
|
7851
|
-
const outputAddress =
|
|
7851
|
+
const outputAddress = chunkZN7BX5XT_cjs.ArkAddress.decode(await wallet.getAddress());
|
|
7852
7852
|
const outputs = [
|
|
7853
7853
|
{ script: outputAddress.pkScript, amount: BigInt(amount) },
|
|
7854
|
-
Extension.create([
|
|
7854
|
+
Extension.create([chunkURILS6HH_cjs.Packet.create(groups)]).txOut()
|
|
7855
7855
|
];
|
|
7856
7856
|
const { arkTxid } = await submit(inputs, outputs);
|
|
7857
7857
|
return arkTxid;
|
|
@@ -7875,7 +7875,7 @@ function castMetadata(metadata) {
|
|
|
7875
7875
|
} else {
|
|
7876
7876
|
throw new Error("Invalid metadata value type");
|
|
7877
7877
|
}
|
|
7878
|
-
md.push(
|
|
7878
|
+
md.push(chunkURILS6HH_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
|
|
7879
7879
|
}
|
|
7880
7880
|
return md;
|
|
7881
7881
|
}
|
|
@@ -7896,10 +7896,10 @@ var DelegateManagerImpl = class {
|
|
|
7896
7896
|
if (vtxos.length === 0) {
|
|
7897
7897
|
return { delegated: [], failed: [] };
|
|
7898
7898
|
}
|
|
7899
|
-
const destinationScript =
|
|
7899
|
+
const destinationScript = chunkZN7BX5XT_cjs.ArkAddress.decode(destination).pkScript;
|
|
7900
7900
|
const arkInfo = await this.arkInfoProvider.getInfo();
|
|
7901
7901
|
const delegateInfo = await this.delegateProvider.getDelegateInfo();
|
|
7902
|
-
const eligible = vtxos.map(
|
|
7902
|
+
const eligible = vtxos.map(chunkZN7BX5XT_cjs.normalizeVtxo).filter(
|
|
7903
7903
|
(v) => isAnnotated(v) && findDelegateTapLeaf(v, delegateInfo.pubkey) !== void 0
|
|
7904
7904
|
);
|
|
7905
7905
|
if (eligible.length === 0) {
|
|
@@ -7931,7 +7931,7 @@ var DelegateManagerImpl = class {
|
|
|
7931
7931
|
const groupByExpiry = /* @__PURE__ */ new Map();
|
|
7932
7932
|
let recoverableVtxos = [];
|
|
7933
7933
|
for (const vtxo of eligible) {
|
|
7934
|
-
if (
|
|
7934
|
+
if (chunkZN7BX5XT_cjs.canRecoverOnchain(vtxo, now)) {
|
|
7935
7935
|
recoverableVtxos.push(vtxo);
|
|
7936
7936
|
continue;
|
|
7937
7937
|
}
|
|
@@ -7983,7 +7983,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7983
7983
|
}
|
|
7984
7984
|
if (!delegateAt) {
|
|
7985
7985
|
const now = { timestamp: /* @__PURE__ */ new Date() };
|
|
7986
|
-
const expiryTimestamp = vtxos.filter((coin) => !
|
|
7986
|
+
const expiryTimestamp = vtxos.filter((coin) => !chunkZN7BX5XT_cjs.canRecoverOnchain(coin, now) && coin.expiresAt).reduce(
|
|
7987
7987
|
(min, coin) => Math.min(min, coin.expiresAt.getTime()),
|
|
7988
7988
|
Number.MAX_SAFE_INTEGER
|
|
7989
7989
|
);
|
|
@@ -8010,7 +8010,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
8010
8010
|
let amount = 0n;
|
|
8011
8011
|
for (const coin of vtxos) {
|
|
8012
8012
|
const inputFee = estimator.evalOffchainInput({
|
|
8013
|
-
...
|
|
8013
|
+
...chunkZN7BX5XT_cjs.toOffchainInputFeeParams(coin),
|
|
8014
8014
|
type: "vtxo"
|
|
8015
8015
|
});
|
|
8016
8016
|
if (inputFee.satoshis >= coin.value) {
|
|
@@ -8024,7 +8024,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
8024
8024
|
const delegateFee = BigInt(Number(fee));
|
|
8025
8025
|
if (delegateFee > 0n) {
|
|
8026
8026
|
outputs.push({
|
|
8027
|
-
script:
|
|
8027
|
+
script: chunkZN7BX5XT_cjs.ArkAddress.decode(delegateAddress).pkScript,
|
|
8028
8028
|
amount: delegateFee
|
|
8029
8029
|
});
|
|
8030
8030
|
}
|
|
@@ -8057,10 +8057,10 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
8057
8057
|
destinationScript
|
|
8058
8058
|
);
|
|
8059
8059
|
const forfeitOutputScript = btcSigner.OutScript.encode(
|
|
8060
|
-
btcSigner.Address(
|
|
8060
|
+
btcSigner.Address(chunkZN7BX5XT_cjs.getNetwork(network)).decode(forfeitAddress)
|
|
8061
8061
|
);
|
|
8062
8062
|
const forfeits = await Promise.all(
|
|
8063
|
-
vtxos.filter((v) =>
|
|
8063
|
+
vtxos.filter((v) => chunkZN7BX5XT_cjs.requiresForfeit(v)).map(async (coin) => {
|
|
8064
8064
|
const forfeit = await makeDelegateForfeitTx(
|
|
8065
8065
|
coin,
|
|
8066
8066
|
dust,
|
|
@@ -8085,7 +8085,7 @@ async function makeDelegateForfeitTx(input, connectorAmount, delegatePubkey, for
|
|
|
8085
8085
|
index: input.vout,
|
|
8086
8086
|
witnessUtxo: {
|
|
8087
8087
|
amount: BigInt(input.value),
|
|
8088
|
-
script:
|
|
8088
|
+
script: chunkZN7BX5XT_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
8089
8089
|
},
|
|
8090
8090
|
sighashType: btcSigner.SigHash.ALL_ANYONECANPAY,
|
|
8091
8091
|
tapLeafScript: [delegateTapLeaf]
|
|
@@ -8143,7 +8143,7 @@ async function makeSignedDelegateIntent(identity, coins, outputs, onchainOutputs
|
|
|
8143
8143
|
expire_at: 0,
|
|
8144
8144
|
cosigners_public_keys: cosignerPubKeys
|
|
8145
8145
|
};
|
|
8146
|
-
const proof =
|
|
8146
|
+
const proof = chunkZN7BX5XT_cjs.Intent.create(message, coins, outputs);
|
|
8147
8147
|
const signedProof = await identity.sign(proof);
|
|
8148
8148
|
return {
|
|
8149
8149
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -8169,10 +8169,10 @@ function getDayTimestamp(timestamp) {
|
|
|
8169
8169
|
function findDelegateTapLeaf(vtxo, delegatePubkey) {
|
|
8170
8170
|
if (!vtxo.tapTree) return void 0;
|
|
8171
8171
|
const pk = delegatePubkey.length === 66 ? delegatePubkey.slice(2) : delegatePubkey;
|
|
8172
|
-
const vtxoScript =
|
|
8172
|
+
const vtxoScript = chunkZN7BX5XT_cjs.VtxoScript.decode(vtxo.tapTree);
|
|
8173
8173
|
return vtxoScript.leaves.find((tapLeaf) => {
|
|
8174
|
-
const arkTapscript =
|
|
8175
|
-
if (!
|
|
8174
|
+
const arkTapscript = chunkZN7BX5XT_cjs.decodeTapscript(chunkZN7BX5XT_cjs.scriptFromTapLeafScript(tapLeaf));
|
|
8175
|
+
if (!chunkZN7BX5XT_cjs.MultisigTapscript.is(arkTapscript)) return false;
|
|
8176
8176
|
return arkTapscript.params.pubkeys.map(base.hex.encode).includes(pk);
|
|
8177
8177
|
});
|
|
8178
8178
|
}
|
|
@@ -8728,8 +8728,8 @@ function checkSaveVtxosForScript(backend, key, vtxos) {
|
|
|
8728
8728
|
}
|
|
8729
8729
|
async function getVtxosForContract(repo, contract, options) {
|
|
8730
8730
|
const vtxos = repo.getVtxosForScriptPage ? await collectScriptVtxos(repo, contract.script, options) : filterVtxosForScript(await collectVtxos(repo, contract.address), contract.script);
|
|
8731
|
-
const normalized = vtxos.map(
|
|
8732
|
-
return options?.unspentOnly ? normalized.filter((vtxo) => !
|
|
8731
|
+
const normalized = vtxos.map(chunkZN7BX5XT_cjs.normalizeVtxo);
|
|
8732
|
+
return options?.unspentOnly ? normalized.filter((vtxo) => !chunkZN7BX5XT_cjs.isVtxoSpent(vtxo)) : normalized;
|
|
8733
8733
|
}
|
|
8734
8734
|
async function hasVtxosForContract(repo, contract) {
|
|
8735
8735
|
if (repo.getVtxosForScriptPage) {
|
|
@@ -8960,7 +8960,7 @@ function decodeArkContract(encoded) {
|
|
|
8960
8960
|
}
|
|
8961
8961
|
function contractFromArkContract(encoded, options = {}) {
|
|
8962
8962
|
const parsed = decodeArkContract(encoded);
|
|
8963
|
-
const handler =
|
|
8963
|
+
const handler = chunkEP6XF7JX_cjs.contractHandlers.get(parsed.type);
|
|
8964
8964
|
if (!handler) {
|
|
8965
8965
|
throw new Error(`No handler registered for contract type '${parsed.type}'`);
|
|
8966
8966
|
}
|
|
@@ -8974,9 +8974,9 @@ function contractFromArkContract(encoded, options = {}) {
|
|
|
8974
8974
|
metadata: options.metadata
|
|
8975
8975
|
};
|
|
8976
8976
|
}
|
|
8977
|
-
function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix =
|
|
8977
|
+
function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunkZN7BX5XT_cjs.DEFAULT_NETWORK.hrp, options = {}) {
|
|
8978
8978
|
const parsed = decodeArkContract(encoded);
|
|
8979
|
-
const handler =
|
|
8979
|
+
const handler = chunkEP6XF7JX_cjs.contractHandlers.getOrThrow(parsed.type);
|
|
8980
8980
|
const params = parsed.data;
|
|
8981
8981
|
const vtxoScript = handler.createScript(params);
|
|
8982
8982
|
return {
|
|
@@ -9033,10 +9033,10 @@ var ContractWatcher = class {
|
|
|
9033
9033
|
eventSourceReported = false;
|
|
9034
9034
|
/** @see ContractWatcherConfig */
|
|
9035
9035
|
constructor(config) {
|
|
9036
|
-
|
|
9037
|
-
|
|
9038
|
-
|
|
9039
|
-
|
|
9036
|
+
chunkZN7BX5XT_cjs.assertTimerMs("failsafePollIntervalMs", config.failsafePollIntervalMs);
|
|
9037
|
+
chunkZN7BX5XT_cjs.assertTimerMs("reconnectDelayMs", config.reconnectDelayMs);
|
|
9038
|
+
chunkZN7BX5XT_cjs.assertTimerMs("maxReconnectDelayMs", config.maxReconnectDelayMs);
|
|
9039
|
+
chunkZN7BX5XT_cjs.assertTimerMs("subscriptionRequestTimeoutMs", config.subscriptionRequestTimeoutMs);
|
|
9040
9040
|
if (config.subscriptionRequestTimeoutMs === 0) {
|
|
9041
9041
|
throw new Error("subscriptionRequestTimeoutMs must be greater than 0");
|
|
9042
9042
|
}
|
|
@@ -9259,9 +9259,9 @@ var ContractWatcher = class {
|
|
|
9259
9259
|
this.reconnectAttempts = 0;
|
|
9260
9260
|
this.listenLoop().catch((e) => {
|
|
9261
9261
|
if (!this.isWatching || signal?.aborted) return;
|
|
9262
|
-
if (
|
|
9262
|
+
if (chunkZN7BX5XT_cjs.isEventSourceError(e)) {
|
|
9263
9263
|
console.debug("ContractWatcher subscription disconnected; reconnecting");
|
|
9264
|
-
} else if (!
|
|
9264
|
+
} else if (!chunkZN7BX5XT_cjs.isEventSourceUnavailableError(e)) {
|
|
9265
9265
|
console.error(e);
|
|
9266
9266
|
}
|
|
9267
9267
|
this.connectionState = "disconnected";
|
|
@@ -9271,7 +9271,7 @@ var ContractWatcher = class {
|
|
|
9271
9271
|
});
|
|
9272
9272
|
} catch (error) {
|
|
9273
9273
|
if (!this.isWatching || signal?.aborted) return;
|
|
9274
|
-
if (!
|
|
9274
|
+
if (!chunkZN7BX5XT_cjs.isEventSourceUnavailableError(error)) {
|
|
9275
9275
|
console.error("ContractWatcher connection failed:", error);
|
|
9276
9276
|
}
|
|
9277
9277
|
this.connectionState = "disconnected";
|
|
@@ -9287,7 +9287,7 @@ var ContractWatcher = class {
|
|
|
9287
9287
|
* few seconds.
|
|
9288
9288
|
*/
|
|
9289
9289
|
reportEventSourceUnavailable(error) {
|
|
9290
|
-
if (!
|
|
9290
|
+
if (!chunkZN7BX5XT_cjs.isEventSourceUnavailableError(error)) return false;
|
|
9291
9291
|
if (!this.eventSourceReported) {
|
|
9292
9292
|
this.eventSourceReported = true;
|
|
9293
9293
|
console.warn(
|
|
@@ -9352,7 +9352,7 @@ var ContractWatcher = class {
|
|
|
9352
9352
|
const now = Date.now();
|
|
9353
9353
|
let current;
|
|
9354
9354
|
try {
|
|
9355
|
-
current = await
|
|
9355
|
+
current = await chunkZN7BX5XT_cjs.getAllNormalizedVtxos(this.config.indexerProvider, scripts, {
|
|
9356
9356
|
spendableOnly: true
|
|
9357
9357
|
});
|
|
9358
9358
|
} catch (error) {
|
|
@@ -9634,14 +9634,14 @@ var ContractWatcher = class {
|
|
|
9634
9634
|
const timestamp = Date.now();
|
|
9635
9635
|
if (update.newVtxos?.length) {
|
|
9636
9636
|
this.processSubscriptionVtxos(
|
|
9637
|
-
update.newVtxos.map(
|
|
9637
|
+
update.newVtxos.map(chunkZN7BX5XT_cjs.normalizeVtxo),
|
|
9638
9638
|
"vtxo_received",
|
|
9639
9639
|
timestamp
|
|
9640
9640
|
);
|
|
9641
9641
|
}
|
|
9642
9642
|
if (update.spentVtxos?.length) {
|
|
9643
9643
|
this.processSubscriptionVtxos(
|
|
9644
|
-
update.spentVtxos.map(
|
|
9644
|
+
update.spentVtxos.map(chunkZN7BX5XT_cjs.normalizeVtxo),
|
|
9645
9645
|
"vtxo_spent",
|
|
9646
9646
|
timestamp
|
|
9647
9647
|
);
|
|
@@ -9666,8 +9666,8 @@ var ContractWatcher = class {
|
|
|
9666
9666
|
continue;
|
|
9667
9667
|
}
|
|
9668
9668
|
if (target === byWatchedScript && eventType === "vtxo_received") {
|
|
9669
|
-
const n =
|
|
9670
|
-
if (
|
|
9669
|
+
const n = chunkZN7BX5XT_cjs.normalizeVtxo(vtxo);
|
|
9670
|
+
if (chunkZN7BX5XT_cjs.isVtxoSpent(n) || n.isSwept || chunkZN7BX5XT_cjs.isPastExpiry(n, now)) continue;
|
|
9671
9671
|
}
|
|
9672
9672
|
let bucket = target.get(vtxo.script);
|
|
9673
9673
|
if (!bucket) {
|
|
@@ -9804,7 +9804,7 @@ function annotatableIn(scriptToContract, vtxos, memo) {
|
|
|
9804
9804
|
if (!contract) continue;
|
|
9805
9805
|
try {
|
|
9806
9806
|
const key = `${contract.type}\0${script}\0${JSON.stringify(contract.params)}`;
|
|
9807
|
-
const handler =
|
|
9807
|
+
const handler = chunkEP6XF7JX_cjs.contractHandlers.get(contract.type);
|
|
9808
9808
|
const hit = memo?.get(script);
|
|
9809
9809
|
let tapscripts;
|
|
9810
9810
|
if (hit && hit.key === key && hit.handler === handler) {
|
|
@@ -9834,7 +9834,7 @@ function annotatableIn(scriptToContract, vtxos, memo) {
|
|
|
9834
9834
|
}
|
|
9835
9835
|
function annotateAgainst(vtxos, byScript, tapscripts = /* @__PURE__ */ new Map()) {
|
|
9836
9836
|
return vtxos.map(
|
|
9837
|
-
(vtxo) => extendVirtualCoinForContract(
|
|
9837
|
+
(vtxo) => extendVirtualCoinForContract(chunkZN7BX5XT_cjs.normalizeVtxo(vtxo), byScript, tapscripts)
|
|
9838
9838
|
);
|
|
9839
9839
|
}
|
|
9840
9840
|
var SCAN_MAX_INDEX = 1e4;
|
|
@@ -9878,8 +9878,8 @@ var ContractManager = class _ContractManager {
|
|
|
9878
9878
|
* `dispose()`, so it re-checks this at every await rather than run on a torn-down watcher. */
|
|
9879
9879
|
disposed = false;
|
|
9880
9880
|
constructor(config) {
|
|
9881
|
-
|
|
9882
|
-
|
|
9881
|
+
chunkZN7BX5XT_cjs.assertNonNegativeMs("vtxoSyncMaxAgeMs", config.vtxoSyncMaxAgeMs);
|
|
9882
|
+
chunkZN7BX5XT_cjs.assertNonNegativeMs("vtxoSyncOverlapMs", config.vtxoSyncOverlapMs);
|
|
9883
9883
|
this.config = { ...config };
|
|
9884
9884
|
this.watcher = new ContractWatcher({
|
|
9885
9885
|
indexerProvider: config.indexerProvider,
|
|
@@ -9915,12 +9915,12 @@ var ContractManager = class _ContractManager {
|
|
|
9915
9915
|
}
|
|
9916
9916
|
/** @see ContractManagerConfig.vtxoSyncMaxAgeMs — for factory-built managers. */
|
|
9917
9917
|
setVtxoSyncMaxAge(maxAgeMs) {
|
|
9918
|
-
|
|
9918
|
+
chunkZN7BX5XT_cjs.assertNonNegativeMs("vtxoSyncMaxAgeMs", maxAgeMs);
|
|
9919
9919
|
this.config.vtxoSyncMaxAgeMs = maxAgeMs;
|
|
9920
9920
|
}
|
|
9921
9921
|
/** @see ContractManagerConfig.vtxoSyncOverlapMs — for factory-built managers. */
|
|
9922
9922
|
setVtxoSyncOverlap(overlapMs) {
|
|
9923
|
-
|
|
9923
|
+
chunkZN7BX5XT_cjs.assertNonNegativeMs("vtxoSyncOverlapMs", overlapMs);
|
|
9924
9924
|
this.config.vtxoSyncOverlapMs = overlapMs;
|
|
9925
9925
|
}
|
|
9926
9926
|
markSyncOnline() {
|
|
@@ -9968,7 +9968,7 @@ var ContractManager = class _ContractManager {
|
|
|
9968
9968
|
this.markSyncOnline();
|
|
9969
9969
|
return void 0;
|
|
9970
9970
|
} catch (err) {
|
|
9971
|
-
if (!
|
|
9971
|
+
if (!chunkZN7BX5XT_cjs.isRetryableProviderError(err)) throw err;
|
|
9972
9972
|
this.markSyncDegraded(err);
|
|
9973
9973
|
return err;
|
|
9974
9974
|
}
|
|
@@ -9991,7 +9991,7 @@ var ContractManager = class _ContractManager {
|
|
|
9991
9991
|
try {
|
|
9992
9992
|
await this.scheduleLookAheadDrain();
|
|
9993
9993
|
} catch (err) {
|
|
9994
|
-
if (!
|
|
9994
|
+
if (!chunkZN7BX5XT_cjs.isRetryableProviderError(err)) throw err;
|
|
9995
9995
|
this.lookAheadRefillOwed = true;
|
|
9996
9996
|
this.markSyncDegraded(err);
|
|
9997
9997
|
}
|
|
@@ -10054,7 +10054,7 @@ var ContractManager = class _ContractManager {
|
|
|
10054
10054
|
/** No throw: construction returned long ago, so the state is the channel. */
|
|
10055
10055
|
reportBackgroundFailure(stage, err) {
|
|
10056
10056
|
this.markSyncDegraded(err);
|
|
10057
|
-
if (!
|
|
10057
|
+
if (!chunkZN7BX5XT_cjs.isRetryableProviderError(err)) {
|
|
10058
10058
|
console.error(`[contracts] background ${stage} failed`, err);
|
|
10059
10059
|
}
|
|
10060
10060
|
}
|
|
@@ -10156,7 +10156,7 @@ var ContractManager = class _ContractManager {
|
|
|
10156
10156
|
const from = Math.max(0, watermark - lookAhead.size);
|
|
10157
10157
|
const to = watermark + lookAhead.size;
|
|
10158
10158
|
const deps = lookAhead.candidateDeps();
|
|
10159
|
-
const handlers =
|
|
10159
|
+
const handlers = chunkEP6XF7JX_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkEP6XF7JX_cjs.contractHandlers.get(t)).filter(hasCandidates);
|
|
10160
10160
|
const band = /* @__PURE__ */ new Map();
|
|
10161
10161
|
for (let index = from; index <= to; index++) {
|
|
10162
10162
|
const descriptor = lookAhead.materialize(index);
|
|
@@ -10167,7 +10167,7 @@ var ContractManager = class _ContractManager {
|
|
|
10167
10167
|
index,
|
|
10168
10168
|
params: {
|
|
10169
10169
|
...candidate,
|
|
10170
|
-
...
|
|
10170
|
+
...chunkEP6XF7JX_cjs.speculativeReceiveMetadata(descriptor)
|
|
10171
10171
|
}
|
|
10172
10172
|
});
|
|
10173
10173
|
}
|
|
@@ -10226,7 +10226,7 @@ var ContractManager = class _ContractManager {
|
|
|
10226
10226
|
});
|
|
10227
10227
|
for (const entry of pending) entry.catchUpPending = false;
|
|
10228
10228
|
} catch (err) {
|
|
10229
|
-
if (!
|
|
10229
|
+
if (!chunkZN7BX5XT_cjs.isRetryableProviderError(err)) throw err;
|
|
10230
10230
|
this.markSyncDegraded(err);
|
|
10231
10231
|
}
|
|
10232
10232
|
}
|
|
@@ -10317,7 +10317,7 @@ var ContractManager = class _ContractManager {
|
|
|
10317
10317
|
return result;
|
|
10318
10318
|
}
|
|
10319
10319
|
async upsertContractRow(params) {
|
|
10320
|
-
const handler =
|
|
10320
|
+
const handler = chunkEP6XF7JX_cjs.contractHandlers.get(params.type);
|
|
10321
10321
|
if (!handler) {
|
|
10322
10322
|
throw new Error(`No handler registered for contract type '${params.type}'`);
|
|
10323
10323
|
}
|
|
@@ -10385,7 +10385,7 @@ var ContractManager = class _ContractManager {
|
|
|
10385
10385
|
`scanContracts: batchSize must be a positive integer (got ${String(opts.batchSize)})`
|
|
10386
10386
|
);
|
|
10387
10387
|
}
|
|
10388
|
-
const registered =
|
|
10388
|
+
const registered = chunkEP6XF7JX_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkEP6XF7JX_cjs.contractHandlers.get(t)).filter(isDiscoverable);
|
|
10389
10389
|
const discoverables = [
|
|
10390
10390
|
...registered.filter((h) => h.type === "boarding"),
|
|
10391
10391
|
...registered.filter((h) => h.type !== "boarding")
|
|
@@ -10511,7 +10511,7 @@ var ContractManager = class _ContractManager {
|
|
|
10511
10511
|
return await collectContracts(this.config.contractRepository, dbFilter);
|
|
10512
10512
|
}
|
|
10513
10513
|
async getContractsWithVtxos(filter, pageSize, options) {
|
|
10514
|
-
|
|
10514
|
+
chunkZN7BX5XT_cjs.assertNonNegativeMs("maxSyncAgeMs", options?.maxSyncAgeMs);
|
|
10515
10515
|
const contracts = await this.getContracts(filter);
|
|
10516
10516
|
if (this.syncedWithin(
|
|
10517
10517
|
contracts,
|
|
@@ -10618,14 +10618,14 @@ var ContractManager = class _ContractManager {
|
|
|
10618
10618
|
const byScript = new Map(contracts.map((contract) => [contract.script, contract]));
|
|
10619
10619
|
const asking = vtxos.filter((vtxo) => {
|
|
10620
10620
|
const contract = byScript.get(vtxo.script);
|
|
10621
|
-
return contract !== void 0 &&
|
|
10621
|
+
return contract !== void 0 && chunkEP6XF7JX_cjs.contractHandlers.get(contract.type)?.assertSpendableNow !== void 0;
|
|
10622
10622
|
});
|
|
10623
10623
|
if (asking.length === 0) return refused;
|
|
10624
10624
|
const tip = await this.currentChainTip();
|
|
10625
10625
|
const walletDescriptorValue = await walletDescriptor?.();
|
|
10626
10626
|
for (const vtxo of asking) {
|
|
10627
10627
|
const contract = byScript.get(vtxo.script);
|
|
10628
|
-
const handler =
|
|
10628
|
+
const handler = chunkEP6XF7JX_cjs.contractHandlers.get(contract.type);
|
|
10629
10629
|
if (!handler?.assertSpendableNow) continue;
|
|
10630
10630
|
const context = {
|
|
10631
10631
|
collaborative: true,
|
|
@@ -10635,7 +10635,7 @@ var ContractManager = class _ContractManager {
|
|
|
10635
10635
|
walletDescriptor: walletDescriptorValue,
|
|
10636
10636
|
// `isVirtualCoin` only checks `script`, which every input has; `isCsvSpendable`
|
|
10637
10637
|
// reads `vtxo.status.block_time` unguarded, so require `status` too.
|
|
10638
|
-
vtxo:
|
|
10638
|
+
vtxo: chunkZN7BX5XT_cjs.isVirtualCoin(vtxo) && "status" in vtxo ? vtxo : void 0
|
|
10639
10639
|
};
|
|
10640
10640
|
try {
|
|
10641
10641
|
await handler.assertSpendableNow(
|
|
@@ -10748,7 +10748,7 @@ var ContractManager = class _ContractManager {
|
|
|
10748
10748
|
const { contractScript, collaborative = true, walletDescriptor, vtxo } = options;
|
|
10749
10749
|
const [contract] = await this.getContracts({ script: contractScript });
|
|
10750
10750
|
if (!contract) return [];
|
|
10751
|
-
const handler =
|
|
10751
|
+
const handler = chunkEP6XF7JX_cjs.contractHandlers.get(contract.type);
|
|
10752
10752
|
if (!handler) return [];
|
|
10753
10753
|
const script = handler.createScript(contract.params);
|
|
10754
10754
|
const tip = await this.currentChainTip();
|
|
@@ -10770,7 +10770,7 @@ var ContractManager = class _ContractManager {
|
|
|
10770
10770
|
const { contractScript, collaborative = true, walletDescriptor } = options;
|
|
10771
10771
|
const [contract] = await this.getContracts({ script: contractScript });
|
|
10772
10772
|
if (!contract) return [];
|
|
10773
|
-
const handler =
|
|
10773
|
+
const handler = chunkEP6XF7JX_cjs.contractHandlers.get(contract.type);
|
|
10774
10774
|
if (!handler) return [];
|
|
10775
10775
|
const script = handler.createScript(contract.params);
|
|
10776
10776
|
const context = {
|
|
@@ -10816,7 +10816,7 @@ var ContractManager = class _ContractManager {
|
|
|
10816
10816
|
}
|
|
10817
10817
|
async refreshOutpoints(outpoints) {
|
|
10818
10818
|
if (outpoints.length === 0) return;
|
|
10819
|
-
const { vtxos } = await
|
|
10819
|
+
const { vtxos } = await chunkZN7BX5XT_cjs.getNormalizedVtxos(this.config.indexerProvider, {
|
|
10820
10820
|
outpoints
|
|
10821
10821
|
});
|
|
10822
10822
|
if (vtxos.length === 0) return;
|
|
@@ -10917,7 +10917,7 @@ var ContractManager = class _ContractManager {
|
|
|
10917
10917
|
break;
|
|
10918
10918
|
}
|
|
10919
10919
|
} catch (err) {
|
|
10920
|
-
if (!
|
|
10920
|
+
if (!chunkZN7BX5XT_cjs.isRetryableProviderError(err)) throw err;
|
|
10921
10921
|
this.markSyncDegraded(err);
|
|
10922
10922
|
synced = false;
|
|
10923
10923
|
}
|
|
@@ -11005,7 +11005,7 @@ var ContractManager = class _ContractManager {
|
|
|
11005
11005
|
*/
|
|
11006
11006
|
async reconcilePendingFrontier(contracts) {
|
|
11007
11007
|
const scriptToContract = new Map(contracts.map((c) => [c.script, c]));
|
|
11008
|
-
const vtxos = await
|
|
11008
|
+
const vtxos = await chunkZN7BX5XT_cjs.getAllNormalizedVtxos(
|
|
11009
11009
|
this.config.indexerProvider,
|
|
11010
11010
|
contracts.map((c) => c.script),
|
|
11011
11011
|
{ pendingOnly: true }
|
|
@@ -11079,7 +11079,7 @@ var ContractManager = class _ContractManager {
|
|
|
11079
11079
|
}
|
|
11080
11080
|
return result;
|
|
11081
11081
|
}
|
|
11082
|
-
async fetchContractVtxosBulk(contracts, pageSize =
|
|
11082
|
+
async fetchContractVtxosBulk(contracts, pageSize = chunkZN7BX5XT_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
|
|
11083
11083
|
if (contracts.length === 0) {
|
|
11084
11084
|
return { vtxosByScript: /* @__PURE__ */ new Map(), promoted: /* @__PURE__ */ new Map() };
|
|
11085
11085
|
}
|
|
@@ -11095,7 +11095,7 @@ var ContractManager = class _ContractManager {
|
|
|
11095
11095
|
before: syncWindow.before
|
|
11096
11096
|
}
|
|
11097
11097
|
} : {};
|
|
11098
|
-
const vtxos = await
|
|
11098
|
+
const vtxos = await chunkZN7BX5XT_cjs.getAllNormalizedVtxos(
|
|
11099
11099
|
this.config.indexerProvider,
|
|
11100
11100
|
contracts.map((c) => c.script),
|
|
11101
11101
|
{ ...windowOpts, pageSize }
|
|
@@ -11197,7 +11197,7 @@ function parseLegacyExpiry(batchExpiry) {
|
|
|
11197
11197
|
if (typeof batchExpiry !== "number" || !Number.isFinite(batchExpiry) || batchExpiry <= 0) {
|
|
11198
11198
|
return {};
|
|
11199
11199
|
}
|
|
11200
|
-
if (batchExpiry >=
|
|
11200
|
+
if (batchExpiry >= chunkZN7BX5XT_cjs.EXPIRY_MIN_PLAUSIBLE_MS) return { expiresAt: new Date(batchExpiry) };
|
|
11201
11201
|
return { expiresAtHeight: batchExpiry / 1e3 };
|
|
11202
11202
|
}
|
|
11203
11203
|
function legacyVtxoFacts(status) {
|
|
@@ -11435,7 +11435,7 @@ function backfillContractWatchState(store) {
|
|
|
11435
11435
|
};
|
|
11436
11436
|
readPage();
|
|
11437
11437
|
}
|
|
11438
|
-
var unspentFlag = (vtxo) =>
|
|
11438
|
+
var unspentFlag = (vtxo) => chunkZN7BX5XT_cjs.isVtxoSpent(vtxo) ? {} : { unspent: 1 };
|
|
11439
11439
|
function backfillVtxoIndexFields(transaction) {
|
|
11440
11440
|
const store = transaction.objectStore(STORE_VTXOS);
|
|
11441
11441
|
const pageSize = 1e3;
|
|
@@ -11466,7 +11466,7 @@ var DEFAULT_DB_NAME = "arkade-service-worker";
|
|
|
11466
11466
|
var DEFAULT_SERVICE_WORKER_ACTIVATION_TIMEOUT_MS = 1e4;
|
|
11467
11467
|
function normalizeOptions2(pathOrOptions) {
|
|
11468
11468
|
const o = typeof pathOrOptions === "string" ? { path: pathOrOptions } : pathOrOptions;
|
|
11469
|
-
|
|
11469
|
+
chunkZN7BX5XT_cjs.assertTimerMs("activationTimeoutMs", o.activationTimeoutMs);
|
|
11470
11470
|
return {
|
|
11471
11471
|
path: o.path,
|
|
11472
11472
|
activationTimeoutMs: o.activationTimeoutMs ?? DEFAULT_SERVICE_WORKER_ACTIVATION_TIMEOUT_MS
|
|
@@ -11685,7 +11685,7 @@ var deserializeTapLeaf = (t) => {
|
|
|
11685
11685
|
const s = base.hex.decode(t.s);
|
|
11686
11686
|
return [cb, s];
|
|
11687
11687
|
};
|
|
11688
|
-
var deserializeVtxo = (o) =>
|
|
11688
|
+
var deserializeVtxo = (o) => chunkZN7BX5XT_cjs.normalizeVtxo({
|
|
11689
11689
|
...o,
|
|
11690
11690
|
createdAt: new Date(o.createdAt),
|
|
11691
11691
|
tapTree: base.hex.decode(o.tapTree),
|
|
@@ -12109,7 +12109,7 @@ var HDDescriptorProvider = class _HDDescriptorProvider {
|
|
|
12109
12109
|
*/
|
|
12110
12110
|
materializeDescriptorAt(index) {
|
|
12111
12111
|
const descriptor = this.identity.descriptor;
|
|
12112
|
-
const network =
|
|
12112
|
+
const network = chunkEP6XF7JX_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
12113
12113
|
const expansion = descriptorsScure.expand({ descriptor, network, index });
|
|
12114
12114
|
const keyInfo = expansion.expansionMap?.["@0"];
|
|
12115
12115
|
if (!keyInfo?.keyExpression) {
|
|
@@ -12177,7 +12177,7 @@ function signingDescriptorIndex(descriptor) {
|
|
|
12177
12177
|
}
|
|
12178
12178
|
function newestWalletReceiveContract(contracts, serverPubKeyHex) {
|
|
12179
12179
|
return contracts.filter(
|
|
12180
|
-
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source ===
|
|
12180
|
+
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkEP6XF7JX_cjs.WALLET_RECEIVE_SOURCE
|
|
12181
12181
|
).sort((a, b) => {
|
|
12182
12182
|
if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
|
|
12183
12183
|
return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
|
|
@@ -12228,7 +12228,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
|
|
|
12228
12228
|
const provider = await resolveDescriptorProvider(config, setup.walletRepository);
|
|
12229
12229
|
if (!provider) return void 0;
|
|
12230
12230
|
const allowSilentFallback = (config.walletMode ?? "auto") === "auto";
|
|
12231
|
-
const expectedContractType = setup.offchainTapscript instanceof
|
|
12231
|
+
const expectedContractType = setup.offchainTapscript instanceof chunkEP6XF7JX_cjs.DelegateVtxo.Script ? "delegate" : "default";
|
|
12232
12232
|
const factoryOpts = {
|
|
12233
12233
|
walletRepository: setup.walletRepository,
|
|
12234
12234
|
contractRepository: setup.contractRepository,
|
|
@@ -12385,7 +12385,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
|
|
|
12385
12385
|
};
|
|
12386
12386
|
function deriveLeafPubkey(descriptor) {
|
|
12387
12387
|
try {
|
|
12388
|
-
return
|
|
12388
|
+
return chunkEP6XF7JX_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
12389
12389
|
} catch (e) {
|
|
12390
12390
|
throw new NonRangeableDescriptorError(
|
|
12391
12391
|
"Cannot derive leaf pubkey: descriptor is not a materialized, parsable tr(...) shape.",
|
|
@@ -12397,7 +12397,7 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
12397
12397
|
const pubKey = deriveLeafPubkey(descriptor);
|
|
12398
12398
|
const tapscript = rebuildTapscript(current, pubKey);
|
|
12399
12399
|
const serverPubKey = tapscript.options.serverPubKey;
|
|
12400
|
-
const csvTimelock2 =
|
|
12400
|
+
const csvTimelock2 = chunkZN7BX5XT_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
|
|
12401
12401
|
const base$1 = {
|
|
12402
12402
|
script: base.hex.encode(tapscript.pkScript),
|
|
12403
12403
|
address: tapscript.address(hrp, serverPubKey).encode(),
|
|
@@ -12405,11 +12405,11 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
12405
12405
|
// Read at sign time to route rotated-pubkey inputs through `signWithDescriptor`; without
|
|
12406
12406
|
// it spends are rejected with `INVALID_PSBT_INPUT (5): missing tapscript spend sig`.
|
|
12407
12407
|
metadata: {
|
|
12408
|
-
...tagSource && { source:
|
|
12408
|
+
...tagSource && { source: chunkEP6XF7JX_cjs.WALLET_RECEIVE_SOURCE },
|
|
12409
12409
|
signingDescriptor: descriptor
|
|
12410
12410
|
}
|
|
12411
12411
|
};
|
|
12412
|
-
const params = tapscript instanceof
|
|
12412
|
+
const params = tapscript instanceof chunkEP6XF7JX_cjs.DelegateVtxo.Script ? {
|
|
12413
12413
|
...base$1,
|
|
12414
12414
|
type: "delegate",
|
|
12415
12415
|
params: {
|
|
@@ -12430,10 +12430,10 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
12430
12430
|
return { tapscript, params };
|
|
12431
12431
|
}
|
|
12432
12432
|
function rebuildTapscript(current, pubKey) {
|
|
12433
|
-
if (current instanceof
|
|
12434
|
-
return new
|
|
12433
|
+
if (current instanceof chunkEP6XF7JX_cjs.DelegateVtxo.Script) {
|
|
12434
|
+
return new chunkEP6XF7JX_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
|
|
12435
12435
|
}
|
|
12436
|
-
return new
|
|
12436
|
+
return new chunkEP6XF7JX_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
|
|
12437
12437
|
}
|
|
12438
12438
|
async function pickActiveReceive(contractRepository, serverPubKey, expectedType) {
|
|
12439
12439
|
const candidates = await collectContracts(contractRepository, {
|
|
@@ -12492,7 +12492,7 @@ function computeOffchainBalance(vtxos, caps) {
|
|
|
12492
12492
|
}
|
|
12493
12493
|
};
|
|
12494
12494
|
for (const vtxo of vtxos) {
|
|
12495
|
-
if (
|
|
12495
|
+
if (chunkZN7BX5XT_cjs.isVtxoSpent(vtxo)) continue;
|
|
12496
12496
|
addAssets(owned, vtxo);
|
|
12497
12497
|
if (vtxo.isUnrolled) {
|
|
12498
12498
|
unrolled += vtxo.value;
|
|
@@ -12502,11 +12502,11 @@ function computeOffchainBalance(vtxos, caps) {
|
|
|
12502
12502
|
pendingRecovery += vtxo.value;
|
|
12503
12503
|
continue;
|
|
12504
12504
|
}
|
|
12505
|
-
if (
|
|
12505
|
+
if (chunkZN7BX5XT_cjs.canRecoverOnchain(vtxo, now)) {
|
|
12506
12506
|
recoverable += vtxo.value;
|
|
12507
12507
|
continue;
|
|
12508
12508
|
}
|
|
12509
|
-
if (!
|
|
12509
|
+
if (!chunkZN7BX5XT_cjs.canSpendOffchain(vtxo, now)) continue;
|
|
12510
12510
|
if (vtxo.isPreconfirmed) {
|
|
12511
12511
|
preconfirmed += vtxo.value;
|
|
12512
12512
|
} else {
|
|
@@ -12721,7 +12721,7 @@ function intentProofJobs(coins) {
|
|
|
12721
12721
|
if (coins.length === 0) return [];
|
|
12722
12722
|
const coinJobs = coins.map((coin, i) => ({
|
|
12723
12723
|
index: i + 1,
|
|
12724
|
-
lookupScript:
|
|
12724
|
+
lookupScript: chunkZN7BX5XT_cjs.VtxoScript.decode(coin.tapTree).pkScript
|
|
12725
12725
|
}));
|
|
12726
12726
|
return [{ index: 0, lookupScript: coinJobs[0].lookupScript }, ...coinJobs];
|
|
12727
12727
|
}
|
|
@@ -12747,7 +12747,7 @@ function dedupeTimelocks(timelocks) {
|
|
|
12747
12747
|
const seen = /* @__PURE__ */ new Set();
|
|
12748
12748
|
const deduped = [];
|
|
12749
12749
|
for (const timelock of timelocks) {
|
|
12750
|
-
const sequence =
|
|
12750
|
+
const sequence = chunkZN7BX5XT_cjs.timelockToSequence(timelock).toString();
|
|
12751
12751
|
if (seen.has(sequence)) continue;
|
|
12752
12752
|
seen.add(sequence);
|
|
12753
12753
|
deduped.push(timelock);
|
|
@@ -12763,7 +12763,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
|
|
|
12763
12763
|
if (!newest?.params.pubKey) return baseline;
|
|
12764
12764
|
try {
|
|
12765
12765
|
const pubKey = base.hex.decode(newest.params.pubKey);
|
|
12766
|
-
return new
|
|
12766
|
+
return new chunkEP6XF7JX_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
|
|
12767
12767
|
} catch (e) {
|
|
12768
12768
|
console.warn("Skipping malformed boarding contract at boot", newest.script, e);
|
|
12769
12769
|
return baseline;
|
|
@@ -12795,21 +12795,21 @@ function filterFlatVtxos(vtxos, filter, pendingSpendOutpoints) {
|
|
|
12795
12795
|
if (vtxo.isUnrolled) {
|
|
12796
12796
|
return !!f.withUnrolled;
|
|
12797
12797
|
}
|
|
12798
|
-
if (
|
|
12798
|
+
if (chunkZN7BX5XT_cjs.isVtxoSpent(vtxo)) {
|
|
12799
12799
|
return false;
|
|
12800
12800
|
}
|
|
12801
|
-
if (!f.withRecoverable &&
|
|
12801
|
+
if (!f.withRecoverable && chunkZN7BX5XT_cjs.canRecoverOnchain(vtxo, now)) {
|
|
12802
12802
|
return false;
|
|
12803
12803
|
}
|
|
12804
12804
|
return true;
|
|
12805
12805
|
});
|
|
12806
12806
|
}
|
|
12807
12807
|
async function refreshSweptStateOfExpiredInputs(wallet, inputs) {
|
|
12808
|
-
const candidates = inputs.filter(
|
|
12808
|
+
const candidates = inputs.filter(chunkZN7BX5XT_cjs.isVirtualCoin).map(chunkZN7BX5XT_cjs.normalizeVtxo).filter((v) => !v.isSwept);
|
|
12809
12809
|
if (candidates.length === 0) return inputs;
|
|
12810
|
-
const now = candidates.some((v) => v.expiresAtHeight !== void 0) ? await
|
|
12810
|
+
const now = candidates.some((v) => v.expiresAtHeight !== void 0) ? await chunkZN7BX5XT_cjs.resolveTimeHeight(wallet.onchainProvider) : { timestamp: /* @__PURE__ */ new Date() };
|
|
12811
12811
|
const suspects = candidates.filter(
|
|
12812
|
-
(v) =>
|
|
12812
|
+
(v) => chunkZN7BX5XT_cjs.isPastExpiry(v, now) || v.expiresAtHeight !== void 0 && now.height === void 0
|
|
12813
12813
|
);
|
|
12814
12814
|
if (suspects.length === 0) return inputs;
|
|
12815
12815
|
let sweptNow;
|
|
@@ -12823,12 +12823,12 @@ async function refreshSweptStateOfExpiredInputs(wallet, inputs) {
|
|
|
12823
12823
|
);
|
|
12824
12824
|
} catch (e) {
|
|
12825
12825
|
const message = "could not confirm the swept state of expired settlement inputs; retry the settlement";
|
|
12826
|
-
throw
|
|
12826
|
+
throw chunkZN7BX5XT_cjs.isRetryableProviderError(e) ? new chunkZN7BX5XT_cjs.ProviderUnavailableError(message, { cause: e }) : new Error(message, { cause: e });
|
|
12827
12827
|
}
|
|
12828
12828
|
if (sweptNow.size === 0) return inputs;
|
|
12829
12829
|
return inputs.map((input) => {
|
|
12830
|
-
if (!
|
|
12831
|
-
return { ...
|
|
12830
|
+
if (!chunkZN7BX5XT_cjs.isVirtualCoin(input) || !sweptNow.has(`${input.txid}:${input.vout}`)) return input;
|
|
12831
|
+
return { ...chunkZN7BX5XT_cjs.normalizeVtxo(input), isSwept: true };
|
|
12832
12832
|
});
|
|
12833
12833
|
}
|
|
12834
12834
|
var PENDING_RECOVERY_REASON = "is past its operator signer's rotation cutoff \u2014 the operator will not co-sign it until it recovers";
|
|
@@ -13117,7 +13117,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13117
13117
|
async getArkadeReader() {
|
|
13118
13118
|
const indexer = this.indexerProvider;
|
|
13119
13119
|
return {
|
|
13120
|
-
getVtxos: (opts) =>
|
|
13120
|
+
getVtxos: (opts) => chunkZN7BX5XT_cjs.getNormalizedVtxos(indexer, opts),
|
|
13121
13121
|
getVirtualTxs: (txids, opts) => indexer.getVirtualTxs(txids, opts)
|
|
13122
13122
|
};
|
|
13123
13123
|
}
|
|
@@ -13152,7 +13152,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13152
13152
|
}
|
|
13153
13153
|
/** Shared setup for ReadonlyWallet.create() and Wallet.create(). */
|
|
13154
13154
|
static async setupWalletConfig(config, pubKey) {
|
|
13155
|
-
const arkProvider = config.arkProvider || new
|
|
13155
|
+
const arkProvider = config.arkProvider || new chunkZN7BX5XT_cjs.RestArkProvider();
|
|
13156
13156
|
let indexerProvider = config.indexerProvider;
|
|
13157
13157
|
if (!indexerProvider) {
|
|
13158
13158
|
const derived = extractArkProviderUrl(arkProvider);
|
|
@@ -13161,7 +13161,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13161
13161
|
"indexerProvider is required when arkProvider is provided without a discoverable serverUrl"
|
|
13162
13162
|
);
|
|
13163
13163
|
}
|
|
13164
|
-
indexerProvider = new
|
|
13164
|
+
indexerProvider = new chunkURILS6HH_cjs.RestIndexerProvider(derived ?? chunkZN7BX5XT_cjs.DEFAULT_ARKADE_SERVER_URL);
|
|
13165
13165
|
}
|
|
13166
13166
|
const walletRepository = config.storage?.walletRepository ?? new IndexedDBWalletRepository();
|
|
13167
13167
|
const contractRepository = config.storage?.contractRepository ?? new IndexedDBContractRepository();
|
|
@@ -13170,7 +13170,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13170
13170
|
source: serverInfoSource,
|
|
13171
13171
|
lastOnlineAt: serverInfoLastOnlineAt
|
|
13172
13172
|
} = await resolveArkInfo(arkProvider, walletRepository);
|
|
13173
|
-
const network =
|
|
13173
|
+
const network = chunkZN7BX5XT_cjs.networkFromArkadeInfo(info);
|
|
13174
13174
|
if ("descriptor" in config.identity) {
|
|
13175
13175
|
const descriptor = config.identity.descriptor;
|
|
13176
13176
|
const identityIsMainnet = !descriptor.includes("tpub");
|
|
@@ -13186,7 +13186,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13186
13186
|
);
|
|
13187
13187
|
}
|
|
13188
13188
|
}
|
|
13189
|
-
const onchainProvider = config.onchainProvider || new EsploraProvider(ESPLORA_URL[info.network]);
|
|
13189
|
+
const onchainProvider = typeof config.onchainProvider === "function" ? config.onchainProvider(info.network) : config.onchainProvider || new EsploraProvider(ESPLORA_URL[info.network]);
|
|
13190
13190
|
if (config.exitTimelock) {
|
|
13191
13191
|
const { value, type } = config.exitTimelock;
|
|
13192
13192
|
if (value < 512n && type !== "blocks" || value >= 512n && type !== "seconds") {
|
|
@@ -13206,18 +13206,18 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13206
13206
|
}
|
|
13207
13207
|
}
|
|
13208
13208
|
const boardingTimelock = config.boardingTimelock ?? toTimelock(info.boardingExitDelay);
|
|
13209
|
-
const serverPubKey =
|
|
13210
|
-
const delegatePubKey = config.delegateProvider ? await config.delegateProvider.getDelegateInfo().then((info2) =>
|
|
13209
|
+
const serverPubKey = chunkEP6XF7JX_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
|
|
13210
|
+
const delegatePubKey = config.delegateProvider ? await config.delegateProvider.getDelegateInfo().then((info2) => chunkEP6XF7JX_cjs.toXOnly(base.hex.decode(info2.pubkey), "delegate key")).catch(() => void 0) : void 0;
|
|
13211
13211
|
const offchainOptions = {
|
|
13212
13212
|
pubKey,
|
|
13213
13213
|
serverPubKey,
|
|
13214
13214
|
csvTimelock: exitTimelock
|
|
13215
13215
|
};
|
|
13216
|
-
const offchainTapscript = !delegatePubKey ? new
|
|
13217
|
-
const boardingTapscript =
|
|
13216
|
+
const offchainTapscript = !delegatePubKey ? new chunkEP6XF7JX_cjs.DefaultVtxo.Script(offchainOptions) : new chunkEP6XF7JX_cjs.DelegateVtxo.Script({ ...offchainOptions, delegatePubKey });
|
|
13217
|
+
const boardingTapscript = chunkEP6XF7JX_cjs.BoardingContractHandler.createScript({
|
|
13218
13218
|
pubKey: base.hex.encode(pubKey),
|
|
13219
13219
|
serverPubKey: base.hex.encode(serverPubKey),
|
|
13220
|
-
csvTimelock:
|
|
13220
|
+
csvTimelock: chunkZN7BX5XT_cjs.timelockToSequence(boardingTimelock).toString()
|
|
13221
13221
|
});
|
|
13222
13222
|
return {
|
|
13223
13223
|
arkProvider,
|
|
@@ -13383,7 +13383,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13383
13383
|
if (!filter?.withUnrolled) {
|
|
13384
13384
|
logExcludedVtxos(
|
|
13385
13385
|
"getSpendableVtxos",
|
|
13386
|
-
snapshot.flatMap((contract) => contract.vtxos).filter((vtxo) => vtxo.isUnrolled && !
|
|
13386
|
+
snapshot.flatMap((contract) => contract.vtxos).filter((vtxo) => vtxo.isUnrolled && !chunkZN7BX5XT_cjs.isVtxoSpent(vtxo)),
|
|
13387
13387
|
[() => UNROLLED_REASON]
|
|
13388
13388
|
);
|
|
13389
13389
|
}
|
|
@@ -13526,7 +13526,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13526
13526
|
this.getBoardingTxs()
|
|
13527
13527
|
]);
|
|
13528
13528
|
const allVtxos = snapshot.flatMap((_) => _.vtxos);
|
|
13529
|
-
const resolveTxCreatedAt = (txids) =>
|
|
13529
|
+
const resolveTxCreatedAt = (txids) => chunkZN7BX5XT_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
|
|
13530
13530
|
return buildTransactionHistory(
|
|
13531
13531
|
allVtxos,
|
|
13532
13532
|
boardingTxs,
|
|
@@ -13680,9 +13680,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13680
13680
|
async getBoardingTapscripts(allowedSigners) {
|
|
13681
13681
|
const byScript = /* @__PURE__ */ new Map();
|
|
13682
13682
|
const add = (s) => byScript.set(base.hex.encode(s.pkScript), s);
|
|
13683
|
-
const boardingCsv = this.boardingTapscript.options.csvTimelock ??
|
|
13683
|
+
const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunkEP6XF7JX_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
13684
13684
|
add(
|
|
13685
|
-
new
|
|
13685
|
+
new chunkEP6XF7JX_cjs.DefaultVtxo.Script({
|
|
13686
13686
|
pubKey: await this.identity.xOnlyPublicKey(),
|
|
13687
13687
|
serverPubKey: this.boardingTapscript.options.serverPubKey,
|
|
13688
13688
|
csvTimelock: boardingCsv
|
|
@@ -13697,7 +13697,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13697
13697
|
for (const c of boardingContracts) {
|
|
13698
13698
|
if (!allowed.has(toXOnlySignerHex(c.params.serverPubKey))) continue;
|
|
13699
13699
|
try {
|
|
13700
|
-
add(
|
|
13700
|
+
add(chunkEP6XF7JX_cjs.BoardingContractHandler.createScript(c.params));
|
|
13701
13701
|
} catch (e) {
|
|
13702
13702
|
console.warn("Skipping malformed boarding contract", c.script, e);
|
|
13703
13703
|
}
|
|
@@ -13726,7 +13726,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13726
13726
|
// Per-row CSV delay decoded from THIS tapscript's exit leaf —
|
|
13727
13727
|
// not the wallet's current boarding timelock, which a signer
|
|
13728
13728
|
// rotation may have changed.
|
|
13729
|
-
csvTimelock:
|
|
13729
|
+
csvTimelock: chunkZN7BX5XT_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
|
|
13730
13730
|
coins: utxos
|
|
13731
13731
|
};
|
|
13732
13732
|
})
|
|
@@ -13882,7 +13882,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13882
13882
|
/** Fetch Arkade transaction ids that are still pending final settlement. */
|
|
13883
13883
|
async fetchPendingTxs() {
|
|
13884
13884
|
const scripts = await this.getWalletScripts();
|
|
13885
|
-
const vtxos = await
|
|
13885
|
+
const vtxos = await chunkZN7BX5XT_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
|
|
13886
13886
|
return vtxos.filter(
|
|
13887
13887
|
(vtxo) => (vtxo.isSpent || vtxo.isPreconfirmed && !vtxo.isSwept) && vtxo.arkTxId !== void 0
|
|
13888
13888
|
).map((_) => _.arkTxId);
|
|
@@ -13913,7 +13913,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13913
13913
|
});
|
|
13914
13914
|
for (const contract of contracts) {
|
|
13915
13915
|
if (map.has(contract.script)) continue;
|
|
13916
|
-
const handler =
|
|
13916
|
+
const handler = chunkEP6XF7JX_cjs.contractHandlers.get(contract.type);
|
|
13917
13917
|
if (handler) {
|
|
13918
13918
|
const script = handler.createScript(contract.params);
|
|
13919
13919
|
map.set(contract.script, script);
|
|
@@ -14025,7 +14025,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
14025
14025
|
}
|
|
14026
14026
|
});
|
|
14027
14027
|
const baselinePubkey = await this.identity.xOnlyPublicKey();
|
|
14028
|
-
const delegatePubKey = this.offchainTapscript instanceof
|
|
14028
|
+
const delegatePubKey = this.offchainTapscript instanceof chunkEP6XF7JX_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
|
|
14029
14029
|
const baselineSigners = [
|
|
14030
14030
|
this.offchainTapscript.options.serverPubKey,
|
|
14031
14031
|
...[...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h))
|
|
@@ -14033,8 +14033,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
14033
14033
|
const seenBaselineScripts = /* @__PURE__ */ new Set();
|
|
14034
14034
|
for (const serverPubKey of baselineSigners) {
|
|
14035
14035
|
for (const csvTimelock2 of this.walletContractTimelocks) {
|
|
14036
|
-
const csvTimelockStr =
|
|
14037
|
-
const defaultScript = new
|
|
14036
|
+
const csvTimelockStr = chunkZN7BX5XT_cjs.timelockToSequence(csvTimelock2).toString();
|
|
14037
|
+
const defaultScript = new chunkEP6XF7JX_cjs.DefaultVtxo.Script({
|
|
14038
14038
|
pubKey: baselinePubkey,
|
|
14039
14039
|
serverPubKey,
|
|
14040
14040
|
csvTimelock: csvTimelock2
|
|
@@ -14055,7 +14055,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
14055
14055
|
});
|
|
14056
14056
|
}
|
|
14057
14057
|
if (delegatePubKey) {
|
|
14058
|
-
const delegateScript = new
|
|
14058
|
+
const delegateScript = new chunkEP6XF7JX_cjs.DelegateVtxo.Script({
|
|
14059
14059
|
pubKey: baselinePubkey,
|
|
14060
14060
|
serverPubKey,
|
|
14061
14061
|
delegatePubKey,
|
|
@@ -14079,9 +14079,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
14079
14079
|
}
|
|
14080
14080
|
}
|
|
14081
14081
|
}
|
|
14082
|
-
const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ??
|
|
14082
|
+
const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunkEP6XF7JX_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
14083
14083
|
for (const serverPubKey of baselineSigners) {
|
|
14084
|
-
const baselineBoarding = new
|
|
14084
|
+
const baselineBoarding = new chunkEP6XF7JX_cjs.DefaultVtxo.Script({
|
|
14085
14085
|
pubKey: baselinePubkey,
|
|
14086
14086
|
serverPubKey,
|
|
14087
14087
|
csvTimelock: boardingCsvTimelock
|
|
@@ -14094,7 +14094,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
14094
14094
|
params: {
|
|
14095
14095
|
pubKey: base.hex.encode(baselineBoarding.options.pubKey),
|
|
14096
14096
|
serverPubKey: base.hex.encode(serverPubKey),
|
|
14097
|
-
csvTimelock:
|
|
14097
|
+
csvTimelock: chunkZN7BX5XT_cjs.timelockToSequence(boardingCsvTimelock).toString()
|
|
14098
14098
|
},
|
|
14099
14099
|
script: boardingScriptHex,
|
|
14100
14100
|
address: baselineBoarding.address(this.network.hrp, serverPubKey).encode(),
|
|
@@ -14281,7 +14281,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
14281
14281
|
serverPubKey: this.offchainTapscript.options.serverPubKey,
|
|
14282
14282
|
deprecatedSignerPubKeys: [...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h)),
|
|
14283
14283
|
csvTimelocks: this.walletContractTimelocks,
|
|
14284
|
-
delegatePubKey: this.offchainTapscript instanceof
|
|
14284
|
+
delegatePubKey: this.offchainTapscript instanceof chunkEP6XF7JX_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
|
|
14285
14285
|
};
|
|
14286
14286
|
}
|
|
14287
14287
|
_signerRouter;
|
|
@@ -14441,7 +14441,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
14441
14441
|
const [row] = await manager.getContracts({ script: base.hex.encode(display.pkScript) });
|
|
14442
14442
|
const persisted = row?.metadata?.signingDescriptor;
|
|
14443
14443
|
if (typeof persisted === "string") return persisted;
|
|
14444
|
-
return
|
|
14444
|
+
return chunkEP6XF7JX_cjs.identityDescriptor(this.identity);
|
|
14445
14445
|
}
|
|
14446
14446
|
/**
|
|
14447
14447
|
* Build, persist and shape one address of `type` owned by `descriptor`. The descriptor is the
|
|
@@ -14451,7 +14451,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
14451
14451
|
async mintAddress(manager, type, descriptor, tagSource, allocated) {
|
|
14452
14452
|
if (type === "boarding") {
|
|
14453
14453
|
const built2 = this.buildBoardingContract(
|
|
14454
|
-
|
|
14454
|
+
chunkEP6XF7JX_cjs.deriveDescriptorLeafPubKey(descriptor),
|
|
14455
14455
|
descriptor,
|
|
14456
14456
|
tagSource
|
|
14457
14457
|
);
|
|
@@ -14488,11 +14488,11 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
14488
14488
|
* (offchain analogue: {@link buildReceiveContract}).
|
|
14489
14489
|
*/
|
|
14490
14490
|
buildBoardingContract(pubKey, descriptor, tagSource) {
|
|
14491
|
-
const tapscript = new
|
|
14491
|
+
const tapscript = new chunkEP6XF7JX_cjs.DefaultVtxo.Script({
|
|
14492
14492
|
...this._boardingTapscript.options,
|
|
14493
14493
|
pubKey
|
|
14494
14494
|
});
|
|
14495
|
-
const csvTimelock2 = tapscript.options.csvTimelock ??
|
|
14495
|
+
const csvTimelock2 = tapscript.options.csvTimelock ?? chunkEP6XF7JX_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
14496
14496
|
return {
|
|
14497
14497
|
tapscript,
|
|
14498
14498
|
params: {
|
|
@@ -14500,13 +14500,13 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
14500
14500
|
params: {
|
|
14501
14501
|
pubKey: base.hex.encode(pubKey),
|
|
14502
14502
|
serverPubKey: base.hex.encode(tapscript.options.serverPubKey),
|
|
14503
|
-
csvTimelock:
|
|
14503
|
+
csvTimelock: chunkZN7BX5XT_cjs.timelockToSequence(csvTimelock2).toString()
|
|
14504
14504
|
},
|
|
14505
14505
|
script: base.hex.encode(tapscript.pkScript),
|
|
14506
14506
|
address: tapscript.address(this.network.hrp, this.arkServerPublicKey).encode(),
|
|
14507
14507
|
state: "active",
|
|
14508
14508
|
metadata: {
|
|
14509
|
-
...tagSource && { source:
|
|
14509
|
+
...tagSource && { source: chunkEP6XF7JX_cjs.WALLET_RECEIVE_SOURCE },
|
|
14510
14510
|
signingDescriptor: descriptor
|
|
14511
14511
|
}
|
|
14512
14512
|
}
|
|
@@ -14528,7 +14528,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
14528
14528
|
if (this._hdProvider) {
|
|
14529
14529
|
return (await this.getContractManager()).getNextSigningDescriptor();
|
|
14530
14530
|
}
|
|
14531
|
-
return
|
|
14531
|
+
return chunkEP6XF7JX_cjs.identityDescriptor(this.identity);
|
|
14532
14532
|
}
|
|
14533
14533
|
/**
|
|
14534
14534
|
* @see HDAllocationCapable.advanceSigningDescriptorWatermark
|
|
@@ -14604,7 +14604,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
14604
14604
|
* the stable public API.
|
|
14605
14605
|
*/
|
|
14606
14606
|
async rotateServerSigner(newServerPubKey, checkpointTapscript) {
|
|
14607
|
-
const xonly =
|
|
14607
|
+
const xonly = chunkEP6XF7JX_cjs.toXOnly(newServerPubKey, "ark signer key");
|
|
14608
14608
|
const newServerUnrollScript = assertValidServerUnrollScript(
|
|
14609
14609
|
checkpointTapscript,
|
|
14610
14610
|
resolveCheckpointExitDelayPolicy(this.network, this.checkpointExitDelayPolicy)
|
|
@@ -14633,21 +14633,21 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
14633
14633
|
const [currentBoardingRow] = await manager.getContracts({
|
|
14634
14634
|
script: currentBoardingScript
|
|
14635
14635
|
});
|
|
14636
|
-
const newOffchain = this.offchainTapscript instanceof
|
|
14636
|
+
const newOffchain = this.offchainTapscript instanceof chunkEP6XF7JX_cjs.DelegateVtxo.Script ? new chunkEP6XF7JX_cjs.DelegateVtxo.Script({
|
|
14637
14637
|
...this.offchainTapscript.options,
|
|
14638
14638
|
serverPubKey: xonly
|
|
14639
|
-
}) : new
|
|
14639
|
+
}) : new chunkEP6XF7JX_cjs.DefaultVtxo.Script({
|
|
14640
14640
|
...this.offchainTapscript.options,
|
|
14641
14641
|
serverPubKey: xonly
|
|
14642
14642
|
});
|
|
14643
|
-
const newBoarding = new
|
|
14643
|
+
const newBoarding = new chunkEP6XF7JX_cjs.DefaultVtxo.Script({
|
|
14644
14644
|
...this._boardingTapscript.options,
|
|
14645
14645
|
serverPubKey: xonly
|
|
14646
14646
|
});
|
|
14647
|
-
const offchainCsv =
|
|
14647
|
+
const offchainCsv = chunkZN7BX5XT_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
|
|
14648
14648
|
const newOffchainScript = base.hex.encode(newOffchain.pkScript);
|
|
14649
14649
|
const newOffchainAddress = newOffchain.address(this.network.hrp, xonly).encode();
|
|
14650
|
-
if (newOffchain instanceof
|
|
14650
|
+
if (newOffchain instanceof chunkEP6XF7JX_cjs.DelegateVtxo.Script) {
|
|
14651
14651
|
await manager.createContract({
|
|
14652
14652
|
type: "delegate",
|
|
14653
14653
|
params: {
|
|
@@ -14675,13 +14675,13 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
14675
14675
|
metadata: currentOffchainRow?.metadata
|
|
14676
14676
|
});
|
|
14677
14677
|
}
|
|
14678
|
-
const boardingCsv = newBoarding.options.csvTimelock ??
|
|
14678
|
+
const boardingCsv = newBoarding.options.csvTimelock ?? chunkEP6XF7JX_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
14679
14679
|
await manager.createContract({
|
|
14680
14680
|
type: "boarding",
|
|
14681
14681
|
params: {
|
|
14682
14682
|
pubKey: base.hex.encode(newBoarding.options.pubKey),
|
|
14683
14683
|
serverPubKey: base.hex.encode(xonly),
|
|
14684
|
-
csvTimelock:
|
|
14684
|
+
csvTimelock: chunkZN7BX5XT_cjs.timelockToSequence(boardingCsv).toString()
|
|
14685
14685
|
},
|
|
14686
14686
|
script: base.hex.encode(newBoarding.pkScript),
|
|
14687
14687
|
address: newBoarding.address(this.network.hrp, xonly).encode(),
|
|
@@ -14709,14 +14709,14 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
14709
14709
|
_restoreInFlight;
|
|
14710
14710
|
_addPendingSpends(inputs) {
|
|
14711
14711
|
for (const input of inputs) {
|
|
14712
|
-
if (
|
|
14712
|
+
if (chunkZN7BX5XT_cjs.isVirtualCoin(input)) {
|
|
14713
14713
|
this._pendingSpendOutpoints.add(`${input.txid}:${input.vout}`);
|
|
14714
14714
|
}
|
|
14715
14715
|
}
|
|
14716
14716
|
}
|
|
14717
14717
|
_removePendingSpends(inputs) {
|
|
14718
14718
|
for (const input of inputs) {
|
|
14719
|
-
if (
|
|
14719
|
+
if (chunkZN7BX5XT_cjs.isVirtualCoin(input)) {
|
|
14720
14720
|
this._pendingSpendOutpoints.delete(`${input.txid}:${input.vout}`);
|
|
14721
14721
|
}
|
|
14722
14722
|
}
|
|
@@ -14780,7 +14780,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
14780
14780
|
if (clashing.length > 0) throw new VtxoReservedError(clashing, "in-flight");
|
|
14781
14781
|
}
|
|
14782
14782
|
_assertNotHeld(inputs) {
|
|
14783
|
-
const held = coinKeys(inputs.filter(
|
|
14783
|
+
const held = coinKeys(inputs.filter(chunkZN7BX5XT_cjs.isVirtualCoin)).filter(
|
|
14784
14784
|
(key) => this._heldOutpoints.has(key)
|
|
14785
14785
|
);
|
|
14786
14786
|
if (held.length > 0) throw new VtxoReservedError(held, "held");
|
|
@@ -14818,13 +14818,13 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
14818
14818
|
const manager = await this.getContractManager();
|
|
14819
14819
|
const provider = this._hdProvider;
|
|
14820
14820
|
const hd = provider !== void 0;
|
|
14821
|
-
const staticDescriptor = hd ? void 0 : await
|
|
14821
|
+
const staticDescriptor = hd ? void 0 : await chunkEP6XF7JX_cjs.identityDescriptor(this.identity);
|
|
14822
14822
|
const materialize = (index) => hd ? provider.materializeDescriptorAt(index) : staticDescriptor;
|
|
14823
|
-
const delegatePubKey = this.offchainTapscript instanceof
|
|
14823
|
+
const delegatePubKey = this.offchainTapscript instanceof chunkEP6XF7JX_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
|
|
14824
14824
|
const arkInfo = await this.arkProvider.getInfo();
|
|
14825
|
-
const currentSignerPubKey =
|
|
14825
|
+
const currentSignerPubKey = chunkEP6XF7JX_cjs.toXOnly(base.hex.decode(arkInfo.signerPubkey), "ark signer key");
|
|
14826
14826
|
const deprecatedSignerPubKeys = arkInfo.deprecatedSigners.map(
|
|
14827
|
-
(s) =>
|
|
14827
|
+
(s) => chunkEP6XF7JX_cjs.toXOnly(base.hex.decode(s.pubkey), "deprecated signer key")
|
|
14828
14828
|
);
|
|
14829
14829
|
const deps = {
|
|
14830
14830
|
indexerProvider: this.indexerProvider,
|
|
@@ -14836,7 +14836,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
14836
14836
|
deprecatedSignerPubKeys,
|
|
14837
14837
|
csvTimelocks: this.walletContractTimelocks,
|
|
14838
14838
|
// Boarding-exit CSV, distinct from the unilateral-exit matrix.
|
|
14839
|
-
boardingTimelock: this.boardingTapscript.options.csvTimelock ??
|
|
14839
|
+
boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunkEP6XF7JX_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
|
|
14840
14840
|
delegatePubKey
|
|
14841
14841
|
};
|
|
14842
14842
|
const result = await manager.scanContracts({
|
|
@@ -14952,7 +14952,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
14952
14952
|
throw new Error("Invalid configured public key");
|
|
14953
14953
|
}
|
|
14954
14954
|
const setup = await ReadonlyWallet.setupWalletConfig(config, pubkey);
|
|
14955
|
-
const forfeitPubkey =
|
|
14955
|
+
const forfeitPubkey = chunkEP6XF7JX_cjs.toXOnly(base.hex.decode(setup.info.forfeitPubkey), "forfeit key");
|
|
14956
14956
|
const forfeitAddress = btcSigner.Address(setup.network).decode(setup.info.forfeitAddress);
|
|
14957
14957
|
const forfeitOutputScript = btcSigner.OutScript.encode(forfeitAddress);
|
|
14958
14958
|
const checkpointExitDelayOverrides = {
|
|
@@ -15124,13 +15124,13 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15124
15124
|
void this.logUngatedInputs("settle({ inputs })", params.inputs);
|
|
15125
15125
|
}
|
|
15126
15126
|
const offchainAddress = await this.getAddress();
|
|
15127
|
-
const offchainPkScript =
|
|
15127
|
+
const offchainPkScript = chunkZN7BX5XT_cjs.ArkAddress.decode(offchainAddress).pkScript;
|
|
15128
15128
|
const offchainOutputScript = base.hex.encode(offchainPkScript);
|
|
15129
15129
|
if (!params) {
|
|
15130
15130
|
const { fees, vtxoMaxAmount } = await this.arkProvider.getInfo();
|
|
15131
15131
|
const estimator = new Estimator(fees.intentFee);
|
|
15132
15132
|
let amount = 0;
|
|
15133
|
-
const exitScript =
|
|
15133
|
+
const exitScript = chunkZN7BX5XT_cjs.CSVMultisigTapscript.decode(
|
|
15134
15134
|
base.hex.decode(this.boardingTapscript.exitScript)
|
|
15135
15135
|
);
|
|
15136
15136
|
const boardingTimelock = exitScript.params.timelock;
|
|
@@ -15162,7 +15162,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15162
15162
|
if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
|
|
15163
15163
|
break;
|
|
15164
15164
|
}
|
|
15165
|
-
const inputFee = estimator.evalOffchainInput(
|
|
15165
|
+
const inputFee = estimator.evalOffchainInput(chunkZN7BX5XT_cjs.toOffchainInputFeeParams(vtxo));
|
|
15166
15166
|
if (inputFee.satoshis >= vtxo.value) {
|
|
15167
15167
|
continue;
|
|
15168
15168
|
}
|
|
@@ -15214,7 +15214,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15214
15214
|
let script;
|
|
15215
15215
|
let arkAddress;
|
|
15216
15216
|
try {
|
|
15217
|
-
arkAddress =
|
|
15217
|
+
arkAddress = chunkZN7BX5XT_cjs.ArkAddress.decode(output.address);
|
|
15218
15218
|
} catch {
|
|
15219
15219
|
arkAddress = void 0;
|
|
15220
15220
|
}
|
|
@@ -15286,11 +15286,11 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15286
15286
|
]);
|
|
15287
15287
|
let intentTxId;
|
|
15288
15288
|
try {
|
|
15289
|
-
intentTxId =
|
|
15289
|
+
intentTxId = chunkZN7BX5XT_cjs.Transaction.fromPSBT(base.base64.decode(intent.proof)).id;
|
|
15290
15290
|
} catch {
|
|
15291
15291
|
intentTxId = params.inputs.map((i) => `${i.txid}:${i.vout}`).sort().join("|");
|
|
15292
15292
|
}
|
|
15293
|
-
const settleInputVtxos = params.inputs.filter(
|
|
15293
|
+
const settleInputVtxos = params.inputs.filter(chunkZN7BX5XT_cjs.isVirtualCoin);
|
|
15294
15294
|
const contractManager = await this.getContractManager();
|
|
15295
15295
|
await contractManager.assertAnnotatable(settleInputVtxos);
|
|
15296
15296
|
await contractManager.assertSpendableNow?.(
|
|
@@ -15299,7 +15299,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15299
15299
|
);
|
|
15300
15300
|
if (picked) this._assertNotHeld(params.inputs);
|
|
15301
15301
|
this._addPendingSpends(params.inputs);
|
|
15302
|
-
const boardingKeys = onReserved ? coinKeys(params.inputs.filter((i) => !
|
|
15302
|
+
const boardingKeys = onReserved ? coinKeys(params.inputs.filter((i) => !chunkZN7BX5XT_cjs.isVirtualCoin(i))) : [];
|
|
15303
15303
|
for (const key of boardingKeys) this._pendingSpendOutpoints.add(key);
|
|
15304
15304
|
const settlingKeys = params.inputs.map((i) => `${i.txid}:${i.vout}`);
|
|
15305
15305
|
for (const key of settlingKeys) this._settlingOutpoints.add(key);
|
|
@@ -15410,7 +15410,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15410
15410
|
async maybeRotateBoardingAfterBoard(inputs) {
|
|
15411
15411
|
if (!this._descriptorProvider) return;
|
|
15412
15412
|
const consumedBoarding = inputs.some(
|
|
15413
|
-
(input) => typeof input !== "string" && !
|
|
15413
|
+
(input) => typeof input !== "string" && !chunkZN7BX5XT_cjs.isVirtualCoin(input)
|
|
15414
15414
|
);
|
|
15415
15415
|
if (!consumedBoarding) return;
|
|
15416
15416
|
try {
|
|
@@ -15421,7 +15421,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15421
15421
|
}
|
|
15422
15422
|
async handleSettlementFinalizationEvent(event, inputs, forfeitOutputScript, expectedRecipients, connectorsGraph, validatedCommitmentTxid) {
|
|
15423
15423
|
const signedForfeits = [];
|
|
15424
|
-
let settlementPsbt =
|
|
15424
|
+
let settlementPsbt = chunkZN7BX5XT_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
|
|
15425
15425
|
assertFinalCommitmentMatchesValidated(
|
|
15426
15426
|
settlementPsbt,
|
|
15427
15427
|
validatedCommitmentTxid,
|
|
@@ -15434,7 +15434,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15434
15434
|
let connectorIndex = 0;
|
|
15435
15435
|
const connectorsLeaves = connectorsGraph?.leaves() || [];
|
|
15436
15436
|
for (const input of inputs) {
|
|
15437
|
-
if (!
|
|
15437
|
+
if (!chunkZN7BX5XT_cjs.isVirtualCoin(input)) {
|
|
15438
15438
|
let matched = false;
|
|
15439
15439
|
for (let i = 0; i < settlementPsbt.inputsLength; i++) {
|
|
15440
15440
|
const settlementInput = settlementPsbt.getInput(i);
|
|
@@ -15472,7 +15472,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15472
15472
|
}
|
|
15473
15473
|
continue;
|
|
15474
15474
|
}
|
|
15475
|
-
if (!
|
|
15475
|
+
if (!chunkZN7BX5XT_cjs.requiresForfeit(input) || isSubdust({ value: input.value }, this.dustAmount)) {
|
|
15476
15476
|
continue;
|
|
15477
15477
|
}
|
|
15478
15478
|
if (connectorsLeaves.length === 0) {
|
|
@@ -15500,7 +15500,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15500
15500
|
index: input.vout,
|
|
15501
15501
|
witnessUtxo: {
|
|
15502
15502
|
amount: BigInt(input.value),
|
|
15503
|
-
script:
|
|
15503
|
+
script: chunkZN7BX5XT_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
15504
15504
|
},
|
|
15505
15505
|
sighashType: btcSigner.SigHash.DEFAULT,
|
|
15506
15506
|
tapLeafScript: [input.forfeitTapLeafScript]
|
|
@@ -15519,7 +15519,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15519
15519
|
forfeitTx = await this._signerRouter.sign(forfeitTx, [
|
|
15520
15520
|
{
|
|
15521
15521
|
index: 0,
|
|
15522
|
-
lookupScript:
|
|
15522
|
+
lookupScript: chunkZN7BX5XT_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
15523
15523
|
}
|
|
15524
15524
|
]);
|
|
15525
15525
|
signedForfeits.push(base.base64.encode(forfeitTx.toPSBT()));
|
|
@@ -15577,7 +15577,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15577
15577
|
resolveBatchExpiryPolicy(this.network, this.batchExpiryPolicy)
|
|
15578
15578
|
);
|
|
15579
15579
|
await this.arkProvider.confirmRegistration(intentId);
|
|
15580
|
-
const sweepTapscript =
|
|
15580
|
+
const sweepTapscript = chunkZN7BX5XT_cjs.CSVMultisigTapscript.encode({
|
|
15581
15581
|
timelock,
|
|
15582
15582
|
pubkeys: [this.forfeitPubkey]
|
|
15583
15583
|
}).script;
|
|
@@ -15592,14 +15592,14 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15592
15592
|
throw new Error("Sweep tap tree root not set");
|
|
15593
15593
|
}
|
|
15594
15594
|
const xOnlyPublicKeys = event.cosignersPublicKeys.map(
|
|
15595
|
-
(k) => base.hex.encode(
|
|
15595
|
+
(k) => base.hex.encode(chunkEP6XF7JX_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
|
|
15596
15596
|
);
|
|
15597
15597
|
const signerPublicKey = await session.getPublicKey();
|
|
15598
|
-
const xonlySignerPublicKey =
|
|
15598
|
+
const xonlySignerPublicKey = chunkEP6XF7JX_cjs.toXOnly(signerPublicKey, "signer key");
|
|
15599
15599
|
if (!xOnlyPublicKeys.includes(base.hex.encode(xonlySignerPublicKey))) {
|
|
15600
15600
|
return { skip: true };
|
|
15601
15601
|
}
|
|
15602
|
-
const commitmentTx =
|
|
15602
|
+
const commitmentTx = chunkZN7BX5XT_cjs.Transaction.fromPSBT(
|
|
15603
15603
|
base.base64.decode(event.unsignedCommitmentTx)
|
|
15604
15604
|
);
|
|
15605
15605
|
validateVtxoTxGraph(vtxoTree, commitmentTx, sweepTapTreeRoot);
|
|
@@ -15681,9 +15681,9 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15681
15681
|
...existing ?? {},
|
|
15682
15682
|
intentTxId,
|
|
15683
15683
|
registerProof: intent.proof,
|
|
15684
|
-
registerProofMessage:
|
|
15684
|
+
registerProofMessage: chunkZN7BX5XT_cjs.Intent.encodeMessage(intent.message),
|
|
15685
15685
|
deleteProof: deleteIntent.proof,
|
|
15686
|
-
deleteProofMessage:
|
|
15686
|
+
deleteProofMessage: chunkZN7BX5XT_cjs.Intent.encodeMessage(deleteIntent.message),
|
|
15687
15687
|
intentVtxos: inputs.map((i) => ({
|
|
15688
15688
|
txid: i.txid,
|
|
15689
15689
|
vout: i.vout
|
|
@@ -15716,7 +15716,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15716
15716
|
try {
|
|
15717
15717
|
return await this.arkProvider.registerIntent(intent);
|
|
15718
15718
|
} catch (error) {
|
|
15719
|
-
if (error instanceof
|
|
15719
|
+
if (error instanceof chunkZN7BX5XT_cjs.ArkError && error.code === 0 && error.message.includes("duplicated input")) {
|
|
15720
15720
|
const deleteIntent = await this.makeDeleteIntentSignature(inputs);
|
|
15721
15721
|
await this.arkProvider.deleteIntent(deleteIntent);
|
|
15722
15722
|
return this.arkProvider.registerIntent(intent);
|
|
@@ -15732,7 +15732,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15732
15732
|
expire_at: 0,
|
|
15733
15733
|
cosigners_public_keys: cosignerPubKeys
|
|
15734
15734
|
};
|
|
15735
|
-
const proof =
|
|
15735
|
+
const proof = chunkZN7BX5XT_cjs.Intent.create(message, coins, outputs);
|
|
15736
15736
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
15737
15737
|
return {
|
|
15738
15738
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -15744,7 +15744,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15744
15744
|
type: "delete",
|
|
15745
15745
|
expire_at: 0
|
|
15746
15746
|
};
|
|
15747
|
-
const proof =
|
|
15747
|
+
const proof = chunkZN7BX5XT_cjs.Intent.create(message, coins, []);
|
|
15748
15748
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
15749
15749
|
return {
|
|
15750
15750
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -15756,7 +15756,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15756
15756
|
type: "get-pending-tx",
|
|
15757
15757
|
expire_at: 0
|
|
15758
15758
|
};
|
|
15759
|
-
const proof =
|
|
15759
|
+
const proof = chunkZN7BX5XT_cjs.Intent.create(message, coins, []);
|
|
15760
15760
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
15761
15761
|
return {
|
|
15762
15762
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -15777,7 +15777,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15777
15777
|
if (!vtxos || vtxos.length === 0) {
|
|
15778
15778
|
const scriptMap = await this.getScriptMap();
|
|
15779
15779
|
const allExtended = [];
|
|
15780
|
-
const fetchedVtxos = await
|
|
15780
|
+
const fetchedVtxos = await chunkZN7BX5XT_cjs.getAllNormalizedVtxos(this.indexerProvider, [
|
|
15781
15781
|
...scriptMap.keys()
|
|
15782
15782
|
]);
|
|
15783
15783
|
for (const vtxo of fetchedVtxos) {
|
|
@@ -15820,8 +15820,8 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15820
15820
|
batchPending.push(pendingTx.arkTxid);
|
|
15821
15821
|
try {
|
|
15822
15822
|
const checkpointTxs = pendingTx.signedCheckpointTxs.map((c) => {
|
|
15823
|
-
const tx =
|
|
15824
|
-
|
|
15823
|
+
const tx = chunkZN7BX5XT_cjs.Transaction.fromPSBT(base.base64.decode(c));
|
|
15824
|
+
chunkZN7BX5XT_cjs.assertAllowedSighashTypes(tx);
|
|
15825
15825
|
return tx;
|
|
15826
15826
|
});
|
|
15827
15827
|
assertCheckpointsMatchInputs(
|
|
@@ -15890,11 +15890,11 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15890
15890
|
* and one per deprecated signer — else a pre-rotation tx would stay pending forever.
|
|
15891
15891
|
*/
|
|
15892
15892
|
checkpointUnrollCandidates(info) {
|
|
15893
|
-
const current =
|
|
15893
|
+
const current = chunkZN7BX5XT_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
|
|
15894
15894
|
const candidates = [this._serverUnrollScript, current];
|
|
15895
15895
|
for (const deprecated of signerSetFromInfo(info).deprecated.keys()) {
|
|
15896
15896
|
candidates.push(
|
|
15897
|
-
|
|
15897
|
+
chunkZN7BX5XT_cjs.CSVMultisigTapscript.encode({
|
|
15898
15898
|
...current.params,
|
|
15899
15899
|
pubkeys: [base.hex.decode(deprecated)]
|
|
15900
15900
|
})
|
|
@@ -15989,7 +15989,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15989
15989
|
if (vtxos.length === 0) {
|
|
15990
15990
|
throw new Error("No VTXOs found for this arkadeCash");
|
|
15991
15991
|
}
|
|
15992
|
-
const myPkScript =
|
|
15992
|
+
const myPkScript = chunkZN7BX5XT_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
|
|
15993
15993
|
let { spendable, recoverable, unclaimed } = this.classifyCashVtxos(vtxos);
|
|
15994
15994
|
let swept = 0;
|
|
15995
15995
|
const drainable = vtxos.filter(
|
|
@@ -16115,7 +16115,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
16115
16115
|
params: {
|
|
16116
16116
|
pubKey: base.hex.encode(cash.publicKey),
|
|
16117
16117
|
serverPubKey: base.hex.encode(cash.serverPubKey),
|
|
16118
|
-
csvTimelock:
|
|
16118
|
+
csvTimelock: chunkZN7BX5XT_cjs.timelockToSequence(cash.csvTimelock).toString()
|
|
16119
16119
|
},
|
|
16120
16120
|
script: base.hex.encode(cashScript.pkScript),
|
|
16121
16121
|
address: cashAddress.encode(),
|
|
@@ -16196,7 +16196,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
16196
16196
|
const recoverable = [];
|
|
16197
16197
|
const unclaimed = [];
|
|
16198
16198
|
for (const vtxo of vtxos) {
|
|
16199
|
-
if (
|
|
16199
|
+
if (chunkZN7BX5XT_cjs.isVtxoSpent(vtxo)) {
|
|
16200
16200
|
unclaimed.push(cashReport(vtxo, "already-spent"));
|
|
16201
16201
|
} else if (vtxo.isUnrolled) {
|
|
16202
16202
|
unclaimed.push(cashReport(vtxo, "exited"));
|
|
@@ -16218,7 +16218,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
16218
16218
|
const all = [];
|
|
16219
16219
|
const seen = /* @__PURE__ */ new Set();
|
|
16220
16220
|
for (let pageIndex = 0; ; pageIndex++) {
|
|
16221
|
-
const { vtxos, page } = await
|
|
16221
|
+
const { vtxos, page } = await chunkZN7BX5XT_cjs.getNormalizedVtxos(this.indexerProvider, {
|
|
16222
16222
|
scripts,
|
|
16223
16223
|
pageIndex,
|
|
16224
16224
|
pageSize
|
|
@@ -16256,7 +16256,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
16256
16256
|
for (let i = 0; i < inputs.length; i += MAX_INPUTS_PER_INTENT) {
|
|
16257
16257
|
const batch = inputs.slice(i, i + MAX_INPUTS_PER_INTENT);
|
|
16258
16258
|
const message = { type: "get-pending-tx", expire_at: 0 };
|
|
16259
|
-
const proof =
|
|
16259
|
+
const proof = chunkZN7BX5XT_cjs.Intent.create(message, batch, []);
|
|
16260
16260
|
const signedProof = await identity.sign(
|
|
16261
16261
|
proof,
|
|
16262
16262
|
Array.from({ length: batch.length + 1 }, (_, j) => j)
|
|
@@ -16277,8 +16277,8 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
16277
16277
|
for (const pendingTx of pendingTxs) {
|
|
16278
16278
|
try {
|
|
16279
16279
|
const checkpointTxs = pendingTx.signedCheckpointTxs.map((checkpoint) => {
|
|
16280
|
-
const tx =
|
|
16281
|
-
|
|
16280
|
+
const tx = chunkZN7BX5XT_cjs.Transaction.fromPSBT(base.base64.decode(checkpoint));
|
|
16281
|
+
chunkZN7BX5XT_cjs.assertAllowedSighashTypes(tx);
|
|
16282
16282
|
return tx;
|
|
16283
16283
|
});
|
|
16284
16284
|
assertCheckpointsMatchInputs(
|
|
@@ -16318,7 +16318,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
16318
16318
|
}
|
|
16319
16319
|
/** Sum the outputs of an ark tx PSBT that pay the given scriptPubKey. */
|
|
16320
16320
|
arkTxAmountPaidTo(arkTxPsbt, pkScriptHex) {
|
|
16321
|
-
const arkTx =
|
|
16321
|
+
const arkTx = chunkZN7BX5XT_cjs.Transaction.fromPSBT(base.base64.decode(arkTxPsbt));
|
|
16322
16322
|
let total = 0;
|
|
16323
16323
|
for (let i = 0; i < arkTx.outputsLength; i++) {
|
|
16324
16324
|
const output = arkTx.getOutput(i);
|
|
@@ -16377,7 +16377,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
16377
16377
|
throw new Error("send({ maxChangeFee }): expected a non-negative safe integer");
|
|
16378
16378
|
}
|
|
16379
16379
|
if (selectedVtxos) {
|
|
16380
|
-
if (inputExpiryFloor) selectedVtxos = selectedVtxos.map(
|
|
16380
|
+
if (inputExpiryFloor) selectedVtxos = selectedVtxos.map(chunkZN7BX5XT_cjs.normalizeVtxo);
|
|
16381
16381
|
if (inputExpiryFloor && selectedVtxos.some((coin) => !meetsInputExpiryFloor(coin, inputExpiryFloor))) {
|
|
16382
16382
|
throw new Error("send({ selectedVtxos }): input expiry floor not met");
|
|
16383
16383
|
}
|
|
@@ -16512,7 +16512,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
16512
16512
|
script: recipient.script,
|
|
16513
16513
|
amount: BigInt(recipient.amount),
|
|
16514
16514
|
// Already checked against the recipient address in `validateRecipients`.
|
|
16515
|
-
...recipient.tapTree ? { tapTree:
|
|
16515
|
+
...recipient.tapTree ? { tapTree: chunkZN7BX5XT_cjs.toBIP371TapTree(recipient.tapTree) } : {}
|
|
16516
16516
|
}));
|
|
16517
16517
|
const totalBtcOutput = outputs.reduce((sum, o) => sum + Number(o.amount), 0);
|
|
16518
16518
|
let changeAmount = totalBtcSelected - totalBtcOutput;
|
|
@@ -16704,10 +16704,10 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
16704
16704
|
const serverPubKey = this.arkServerPublicKey;
|
|
16705
16705
|
const serverUnrollScript = this.serverUnrollScript;
|
|
16706
16706
|
const arkAddress = offchainTapscript.address(this.network.hrp, serverPubKey);
|
|
16707
|
-
const normalizedInputs = inputs.map(
|
|
16708
|
-
const at = now ?? await
|
|
16707
|
+
const normalizedInputs = inputs.map(chunkZN7BX5XT_cjs.normalizeVtxo);
|
|
16708
|
+
const at = now ?? await chunkZN7BX5XT_cjs.resolveTimeHeight(this.onchainProvider);
|
|
16709
16709
|
for (const input of normalizedInputs) {
|
|
16710
|
-
if (!
|
|
16710
|
+
if (!chunkZN7BX5XT_cjs.canSpendOffchain(input, at)) {
|
|
16711
16711
|
throw new Error(
|
|
16712
16712
|
`sendSelectedVtxosToSelf: input ${input.txid}:${input.vout} is not cooperatively spendable`
|
|
16713
16713
|
);
|
|
@@ -16791,7 +16791,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
16791
16791
|
);
|
|
16792
16792
|
const arkTxJobs = inputs.map((input, index) => ({
|
|
16793
16793
|
index,
|
|
16794
|
-
lookupScript:
|
|
16794
|
+
lookupScript: chunkZN7BX5XT_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
16795
16795
|
}));
|
|
16796
16796
|
const identity = this.identity;
|
|
16797
16797
|
const signer = {
|
|
@@ -16900,7 +16900,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
16900
16900
|
}
|
|
16901
16901
|
const checkpointIdByOutpoint = /* @__PURE__ */ new Map();
|
|
16902
16902
|
for (const encoded of signedCheckpointTxs) {
|
|
16903
|
-
const checkpoint =
|
|
16903
|
+
const checkpoint = chunkZN7BX5XT_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
|
|
16904
16904
|
for (let i = 0; i < checkpoint.inputsLength; i++) {
|
|
16905
16905
|
const input = checkpoint.getInput(i);
|
|
16906
16906
|
if (!input.txid) continue;
|
|
@@ -17016,12 +17016,12 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
17016
17016
|
const spentVtxos = [];
|
|
17017
17017
|
const inputArkTxIds = /* @__PURE__ */ new Set();
|
|
17018
17018
|
const boardingRemovalsByAddress = /* @__PURE__ */ new Map();
|
|
17019
|
-
const vtxoInputs = inputs.filter(
|
|
17019
|
+
const vtxoInputs = inputs.filter(chunkZN7BX5XT_cjs.isVirtualCoin);
|
|
17020
17020
|
const cm = await this.getContractManager();
|
|
17021
17021
|
const annotatedVtxos = await cm.annotateVtxos(vtxoInputs);
|
|
17022
17022
|
const annotatedByKey = new Map(annotatedVtxos.map((v) => [`${v.txid}:${v.vout}`, v]));
|
|
17023
17023
|
for (const input of inputs) {
|
|
17024
|
-
if (
|
|
17024
|
+
if (chunkZN7BX5XT_cjs.isVirtualCoin(input)) {
|
|
17025
17025
|
const outpoint = `${input.txid}:${input.vout}`;
|
|
17026
17026
|
const vtxo = annotatedByKey.get(outpoint);
|
|
17027
17027
|
if (!vtxo) {
|
|
@@ -17038,7 +17038,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
17038
17038
|
} else {
|
|
17039
17039
|
let sourceAddress;
|
|
17040
17040
|
try {
|
|
17041
|
-
sourceAddress =
|
|
17041
|
+
sourceAddress = chunkZN7BX5XT_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
|
|
17042
17042
|
this.network
|
|
17043
17043
|
);
|
|
17044
17044
|
} catch {
|
|
@@ -17110,7 +17110,7 @@ function bySelectionOrder(a, b) {
|
|
|
17110
17110
|
return b.value - a.value;
|
|
17111
17111
|
}
|
|
17112
17112
|
function selectVirtualCoins(coins, targetAmount) {
|
|
17113
|
-
const sortedCoins = coins.map(
|
|
17113
|
+
const sortedCoins = coins.map(chunkZN7BX5XT_cjs.normalizeVtxo).sort(bySelectionOrder);
|
|
17114
17114
|
const selectedCoins = [];
|
|
17115
17115
|
let selectedAmount = 0;
|
|
17116
17116
|
for (const coin of sortedCoins) {
|
|
@@ -17227,7 +17227,7 @@ function assertTimeoutMap(name, timeouts) {
|
|
|
17227
17227
|
if (value === void 0) {
|
|
17228
17228
|
throw new Error(`${name}.${key} must be a non-negative safe integer`);
|
|
17229
17229
|
}
|
|
17230
|
-
|
|
17230
|
+
chunkZN7BX5XT_cjs.assertTimerMs(`${name}.${key}`, value);
|
|
17231
17231
|
}
|
|
17232
17232
|
}
|
|
17233
17233
|
var MessageBus = class {
|
|
@@ -17238,15 +17238,17 @@ var MessageBus = class {
|
|
|
17238
17238
|
messageTimeoutMs = 3e4,
|
|
17239
17239
|
messageTimeoutOverrides = {},
|
|
17240
17240
|
intentRepository,
|
|
17241
|
+
onchainProvider,
|
|
17241
17242
|
debug = false,
|
|
17242
17243
|
buildServices
|
|
17243
17244
|
}) {
|
|
17244
17245
|
this.walletRepository = walletRepository;
|
|
17245
17246
|
this.contractRepository = contractRepository;
|
|
17246
|
-
|
|
17247
|
-
|
|
17247
|
+
chunkZN7BX5XT_cjs.assertTimerMs("tickIntervalMs", tickIntervalMs);
|
|
17248
|
+
chunkZN7BX5XT_cjs.assertTimerMs("messageTimeoutMs", messageTimeoutMs);
|
|
17248
17249
|
assertTimeoutMap("messageTimeoutOverrides", messageTimeoutOverrides);
|
|
17249
17250
|
this.intentRepository = intentRepository;
|
|
17251
|
+
this.onchainProvider = onchainProvider;
|
|
17250
17252
|
this.handlers = new Map(messageHandlers.map((u) => [u.messageTag, u]));
|
|
17251
17253
|
this.tickIntervalMs = tickIntervalMs;
|
|
17252
17254
|
this.messageTimeoutMs = messageTimeoutMs;
|
|
@@ -17281,6 +17283,7 @@ var MessageBus = class {
|
|
|
17281
17283
|
buildServicesFn;
|
|
17282
17284
|
boundOnMessage = this.onMessage.bind(this);
|
|
17283
17285
|
intentRepository;
|
|
17286
|
+
onchainProvider;
|
|
17284
17287
|
/** Pending broadcasts, drained FIFO by a single {@link drain} loop. */
|
|
17285
17288
|
broadcastQueue = [];
|
|
17286
17289
|
draining = false;
|
|
@@ -17498,14 +17501,14 @@ var MessageBus = class {
|
|
|
17498
17501
|
this.initialized = true;
|
|
17499
17502
|
}
|
|
17500
17503
|
async buildServices(config) {
|
|
17501
|
-
const arkProvider = new
|
|
17504
|
+
const arkProvider = new chunkZN7BX5XT_cjs.RestArkProvider(config.arkServer.url);
|
|
17502
17505
|
const storage = {
|
|
17503
17506
|
walletRepository: this.walletRepository,
|
|
17504
17507
|
contractRepository: this.contractRepository,
|
|
17505
17508
|
...this.intentRepository && { intentRepository: this.intentRepository }
|
|
17506
17509
|
};
|
|
17507
17510
|
const delegateProvider = config.delegateUrl ? new RestDelegateProvider(config.delegateUrl) : void 0;
|
|
17508
|
-
const indexerProvider = new
|
|
17511
|
+
const indexerProvider = new chunkURILS6HH_cjs.RestIndexerProvider(config.arkServer.url);
|
|
17509
17512
|
const serialized = normalizeSerializedIdentity(config.wallet);
|
|
17510
17513
|
if (isSigningSerialized(serialized)) {
|
|
17511
17514
|
const identity2 = hydrateIdentity(serialized);
|
|
@@ -17514,6 +17517,7 @@ var MessageBus = class {
|
|
|
17514
17517
|
arkProvider,
|
|
17515
17518
|
arkServerPublicKey: config.arkServer.publicKey,
|
|
17516
17519
|
indexerProvider,
|
|
17520
|
+
onchainProvider: this.onchainProvider,
|
|
17517
17521
|
storage,
|
|
17518
17522
|
delegateProvider,
|
|
17519
17523
|
settlementConfig: config.settlementConfig,
|
|
@@ -17534,6 +17538,7 @@ var MessageBus = class {
|
|
|
17534
17538
|
arkProvider,
|
|
17535
17539
|
arkServerPublicKey: config.arkServer.publicKey,
|
|
17536
17540
|
indexerProvider,
|
|
17541
|
+
onchainProvider: this.onchainProvider,
|
|
17537
17542
|
storage,
|
|
17538
17543
|
delegateProvider,
|
|
17539
17544
|
watcherConfig: config.watcherConfig
|
|
@@ -17846,7 +17851,7 @@ var offboardNetworkNames = [
|
|
|
17846
17851
|
function offboardDestinationScript(destinationAddress) {
|
|
17847
17852
|
for (const networkName of offboardNetworkNames) {
|
|
17848
17853
|
try {
|
|
17849
|
-
const network =
|
|
17854
|
+
const network = chunkZN7BX5XT_cjs.networks[networkName];
|
|
17850
17855
|
const addr = btcSigner.Address(network).decode(destinationAddress);
|
|
17851
17856
|
return btcSigner.OutScript.encode(addr);
|
|
17852
17857
|
} catch {
|
|
@@ -17886,7 +17891,7 @@ function filterOffboardInputs(vtxos, feeInfo, named) {
|
|
|
17886
17891
|
const inputs = [];
|
|
17887
17892
|
let subtotal = 0n;
|
|
17888
17893
|
for (const vtxo of vtxos) {
|
|
17889
|
-
const inputFee = estimator.evalOffchainInput(
|
|
17894
|
+
const inputFee = estimator.evalOffchainInput(chunkZN7BX5XT_cjs.toOffchainInputFeeParams(vtxo));
|
|
17890
17895
|
if (inputFee.satoshis >= vtxo.value) {
|
|
17891
17896
|
if (named) {
|
|
17892
17897
|
throw new Error(
|
|
@@ -17983,7 +17988,7 @@ var Ramps = class {
|
|
|
17983
17988
|
}
|
|
17984
17989
|
amount = amount ?? totalAmount;
|
|
17985
17990
|
const offchainAddress = await this.wallet.getAddress();
|
|
17986
|
-
const offchainAddr =
|
|
17991
|
+
const offchainAddr = chunkZN7BX5XT_cjs.ArkAddress.decode(offchainAddress);
|
|
17987
17992
|
const offchainScript = base.hex.encode(offchainAddr.pkScript);
|
|
17988
17993
|
const outputFee = estimator.evalOffchainOutput({
|
|
17989
17994
|
amount,
|
|
@@ -18133,7 +18138,7 @@ var Ramps = class {
|
|
|
18133
18138
|
const ordered = [...candidates].sort(bySelectionOrder);
|
|
18134
18139
|
let covered = 0n;
|
|
18135
18140
|
for (let i = 0; i < ordered.length && i < MAX_VTXOS_PER_SETTLEMENT; i++) {
|
|
18136
|
-
const fee = estimator.evalOffchainInput(
|
|
18141
|
+
const fee = estimator.evalOffchainInput(chunkZN7BX5XT_cjs.toOffchainInputFeeParams(ordered[i])).satoshis;
|
|
18137
18142
|
covered += BigInt(ordered[i].value) - BigInt(fee);
|
|
18138
18143
|
if (covered < needed) continue;
|
|
18139
18144
|
try {
|
|
@@ -18167,7 +18172,7 @@ var Ramps = class {
|
|
|
18167
18172
|
async fundChange(left, estimator) {
|
|
18168
18173
|
if (left <= 0n) return { change: 0n };
|
|
18169
18174
|
const changeAddress = await this.wallet.getAddress();
|
|
18170
|
-
const changeScript = base.hex.encode(
|
|
18175
|
+
const changeScript = base.hex.encode(chunkZN7BX5XT_cjs.ArkAddress.decode(changeAddress).pkScript);
|
|
18171
18176
|
const { change } = changeAfterOutputFee(
|
|
18172
18177
|
left,
|
|
18173
18178
|
(amount) => BigInt(estimator.evalOffchainOutput({ amount, script: changeScript }).satoshis)
|
|
@@ -19092,7 +19097,7 @@ var WalletMessageHandler = class {
|
|
|
19092
19097
|
this.lazyBoardingInit = payload.lazyBoarding ?? false;
|
|
19093
19098
|
this.boardingEpoch++;
|
|
19094
19099
|
this.boardingLoaded = false;
|
|
19095
|
-
this.indexerProvider = new
|
|
19100
|
+
this.indexerProvider = new chunkURILS6HH_cjs.RestIndexerProvider(arkServerUrl);
|
|
19096
19101
|
await this.onWalletInitialized();
|
|
19097
19102
|
}
|
|
19098
19103
|
/** @see RequestInitWallet.payload.lazyBoarding */
|
|
@@ -19514,7 +19519,7 @@ var WalletMessageHandler = class {
|
|
|
19514
19519
|
this.readonlyWallet.getBoardingTxs()
|
|
19515
19520
|
]);
|
|
19516
19521
|
const indexerProvider = this.indexerProvider;
|
|
19517
|
-
const resolveTxCreatedAt = indexerProvider ? (txids) =>
|
|
19522
|
+
const resolveTxCreatedAt = indexerProvider ? (txids) => chunkZN7BX5XT_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
|
|
19518
19523
|
return buildTransactionHistory(
|
|
19519
19524
|
vtxos,
|
|
19520
19525
|
boardingTxs,
|
|
@@ -19583,7 +19588,7 @@ var DEFAULT_MESSAGE_TIMEOUTS = {
|
|
|
19583
19588
|
// budget so the worker's snapshot fallback stays reachable before this
|
|
19584
19589
|
// page deadline fires — lowering it below the budget would time the page
|
|
19585
19590
|
// out while the worker is still seconds from answering from cache.
|
|
19586
|
-
GET_ARKADE_INFO:
|
|
19591
|
+
GET_ARKADE_INFO: chunkZN7BX5XT_cjs.INFO_FETCH_TIMEOUT_MS + 8e3,
|
|
19587
19592
|
INDEXER_GET_VTXOS: 2e4,
|
|
19588
19593
|
INDEXER_GET_VIRTUAL_TXS: 2e4,
|
|
19589
19594
|
GET_VTXOS: 2e4,
|
|
@@ -19726,7 +19731,7 @@ var ServiceWorkerAssetManager = class extends ServiceWorkerReadonlyAssetManager
|
|
|
19726
19731
|
}
|
|
19727
19732
|
};
|
|
19728
19733
|
var initializeMessageBus = (serviceWorker, config, timeoutMs = 2e3) => {
|
|
19729
|
-
|
|
19734
|
+
chunkZN7BX5XT_cjs.assertTimerMs("messageBusTimeoutMs", timeoutMs);
|
|
19730
19735
|
const initCmd = {
|
|
19731
19736
|
tag: "INITIALIZE_MESSAGE_BUS",
|
|
19732
19737
|
id: getRandomId(),
|
|
@@ -19814,7 +19819,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
19814
19819
|
}
|
|
19815
19820
|
/** Shared tail of both `create()` factories: boot the bus, INIT_WALLET, cache for reinit. */
|
|
19816
19821
|
static async bootstrap(wallet, options, serializedWallet, busConfig) {
|
|
19817
|
-
const arkServer = options.arkServer ?? { url:
|
|
19822
|
+
const arkServer = options.arkServer ?? { url: chunkZN7BX5XT_cjs.DEFAULT_ARKADE_SERVER_URL };
|
|
19818
19823
|
const initWalletPayload = {
|
|
19819
19824
|
lazyBoarding: options.lazyBoarding,
|
|
19820
19825
|
arkServerUrl: arkServer.url,
|
|
@@ -19824,7 +19829,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
19824
19829
|
Object.entries(options.messageTimeouts ?? {}).filter(([, ms]) => ms !== void 0)
|
|
19825
19830
|
);
|
|
19826
19831
|
for (const [key, value] of Object.entries(overrides)) {
|
|
19827
|
-
|
|
19832
|
+
chunkZN7BX5XT_cjs.assertTimerMs(`messageTimeouts.${key}`, value);
|
|
19828
19833
|
}
|
|
19829
19834
|
const messageTimeouts = {
|
|
19830
19835
|
...DEFAULT_MESSAGE_TIMEOUTS,
|
|
@@ -20164,7 +20169,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
20164
20169
|
try {
|
|
20165
20170
|
const response = await this.sendMessage(message);
|
|
20166
20171
|
const { vtxos, page } = response.payload;
|
|
20167
|
-
return { vtxos: vtxos.map(
|
|
20172
|
+
return { vtxos: vtxos.map(chunkZN7BX5XT_cjs.normalizeVtxo), page: page && { ...page } };
|
|
20168
20173
|
} catch (cause) {
|
|
20169
20174
|
throw new Error(`Failed to get vtxos: ${cause}`, { cause });
|
|
20170
20175
|
}
|
|
@@ -20268,7 +20273,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
20268
20273
|
};
|
|
20269
20274
|
try {
|
|
20270
20275
|
const response = await this.sendMessage(message);
|
|
20271
|
-
return response.payload.vtxos.map(
|
|
20276
|
+
return response.payload.vtxos.map(chunkZN7BX5XT_cjs.normalizeVtxo);
|
|
20272
20277
|
} catch (error) {
|
|
20273
20278
|
throw new Error(`Failed to get vtxos: ${error}`);
|
|
20274
20279
|
}
|
|
@@ -20299,7 +20304,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
20299
20304
|
"Service worker does not support the requested contract scope or freshness check"
|
|
20300
20305
|
);
|
|
20301
20306
|
}
|
|
20302
|
-
return payload.vtxos.map(
|
|
20307
|
+
return payload.vtxos.map(chunkZN7BX5XT_cjs.normalizeVtxo);
|
|
20303
20308
|
} catch (error) {
|
|
20304
20309
|
throw new Error(`Failed to get spendable vtxos: ${error}`);
|
|
20305
20310
|
}
|
|
@@ -20494,7 +20499,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
20494
20499
|
};
|
|
20495
20500
|
try {
|
|
20496
20501
|
const response = await sendContractMessage(message);
|
|
20497
|
-
return response.payload.vtxos.map(
|
|
20502
|
+
return response.payload.vtxos.map(chunkZN7BX5XT_cjs.normalizeVtxo);
|
|
20498
20503
|
} catch (cause) {
|
|
20499
20504
|
throw new Error(`Failed to annotate vtxos: ${cause}`, { cause });
|
|
20500
20505
|
}
|
|
@@ -21122,7 +21127,7 @@ var ServiceWorkerWallet = class _ServiceWorkerWallet extends ServiceWorkerReadon
|
|
|
21122
21127
|
};
|
|
21123
21128
|
try {
|
|
21124
21129
|
const response = await wallet.sendMessage(message);
|
|
21125
|
-
return response.payload.vtxos.map(
|
|
21130
|
+
return response.payload.vtxos.map(chunkZN7BX5XT_cjs.normalizeVtxo);
|
|
21126
21131
|
} catch (e) {
|
|
21127
21132
|
throw new Error(`Failed to get expiring vtxos: ${e}`);
|
|
21128
21133
|
}
|
|
@@ -21239,12 +21244,12 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
21239
21244
|
* @returns Configured onchain wallet
|
|
21240
21245
|
* @throws Error if the configured identity cannot produce a valid x-only public key
|
|
21241
21246
|
*/
|
|
21242
|
-
static async create(identity, networkName =
|
|
21247
|
+
static async create(identity, networkName = chunkZN7BX5XT_cjs.DEFAULT_NETWORK_NAME, provider) {
|
|
21243
21248
|
const pubkey = await identity.xOnlyPublicKey();
|
|
21244
21249
|
if (!pubkey) {
|
|
21245
21250
|
throw new Error("Invalid configured public key");
|
|
21246
21251
|
}
|
|
21247
|
-
const network =
|
|
21252
|
+
const network = chunkZN7BX5XT_cjs.getNetwork(networkName);
|
|
21248
21253
|
const onchainProvider = provider || new EsploraProvider(ESPLORA_URL[networkName]);
|
|
21249
21254
|
const onchainP2TR = btcSigner.p2tr(pubkey, void 0, network);
|
|
21250
21255
|
return new _OnchainWallet(identity, network, onchainP2TR, onchainProvider);
|
|
@@ -21344,7 +21349,7 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
21344
21349
|
feeRate,
|
|
21345
21350
|
params.address
|
|
21346
21351
|
);
|
|
21347
|
-
let tx = new
|
|
21352
|
+
let tx = new chunkZN7BX5XT_cjs.Transaction();
|
|
21348
21353
|
for (const input of inputs) {
|
|
21349
21354
|
tx.addInput({
|
|
21350
21355
|
txid: input.txid,
|
|
@@ -21402,7 +21407,7 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
21402
21407
|
* @throws If the parent has no anchor, or funding cannot be selected/signed
|
|
21403
21408
|
*/
|
|
21404
21409
|
async bumpAnchor(parentHex, feeRate) {
|
|
21405
|
-
const parent =
|
|
21410
|
+
const parent = chunkZN7BX5XT_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
|
|
21406
21411
|
const coins = (await this.getCoins()).filter((c) => c.status.confirmed);
|
|
21407
21412
|
const child = await this.buildBumpPackage(parent, feeRate, coins);
|
|
21408
21413
|
return [parent.hex, child.hex];
|
|
@@ -22218,7 +22223,7 @@ var CachingArkProvider = class {
|
|
|
22218
22223
|
constructor(inner, ttlMs = DEFAULT_TTL_MS) {
|
|
22219
22224
|
this.inner = inner;
|
|
22220
22225
|
this.ttlMs = ttlMs;
|
|
22221
|
-
|
|
22226
|
+
chunkZN7BX5XT_cjs.assertNonNegativeMs("ttlMs", ttlMs);
|
|
22222
22227
|
this.unsubscribe = inner.onServerInfoChanged?.((info) => {
|
|
22223
22228
|
this.cached = info;
|
|
22224
22229
|
this.expiresAt = Date.now() + this.ttlMs;
|
|
@@ -22310,7 +22315,7 @@ async function resolvePrevTxs(txids, source, onchain) {
|
|
|
22310
22315
|
try {
|
|
22311
22316
|
const { txs } = await source.getVirtualTxs(wanted);
|
|
22312
22317
|
for (const psbt of txs) {
|
|
22313
|
-
const tx =
|
|
22318
|
+
const tx = chunkZN7BX5XT_cjs.Transaction.fromPSBT(base.base64.decode(psbt));
|
|
22314
22319
|
resolved.set(tx.id, tx.toBytes());
|
|
22315
22320
|
}
|
|
22316
22321
|
} catch (err) {
|
|
@@ -22343,7 +22348,7 @@ async function resolvePrevTxs(txids, source, onchain) {
|
|
|
22343
22348
|
async function attachPrevArkTxs(tx, txids, source, onchain) {
|
|
22344
22349
|
const pending = [];
|
|
22345
22350
|
for (let i = 0; i < tx.inputsLength; i++) {
|
|
22346
|
-
if (
|
|
22351
|
+
if (chunkZN7BX5XT_cjs.getArkPsbtFields(tx, i, chunkZN7BX5XT_cjs.PrevArkTxField).length === 0) pending.push(i);
|
|
22347
22352
|
}
|
|
22348
22353
|
if (pending.length === 0) return;
|
|
22349
22354
|
const resolved = await resolvePrevTxs(
|
|
@@ -22352,13 +22357,13 @@ async function attachPrevArkTxs(tx, txids, source, onchain) {
|
|
|
22352
22357
|
onchain
|
|
22353
22358
|
);
|
|
22354
22359
|
for (const i of pending) {
|
|
22355
|
-
|
|
22360
|
+
chunkZN7BX5XT_cjs.setArkPsbtField(tx, i, chunkZN7BX5XT_cjs.PrevArkTxField, resolved.get(txidAt(txids, i)));
|
|
22356
22361
|
}
|
|
22357
22362
|
}
|
|
22358
22363
|
async function attachPrevoutTxs(tx, source) {
|
|
22359
22364
|
const pending = [];
|
|
22360
22365
|
for (let i = 0; i < tx.inputsLength; i++) {
|
|
22361
|
-
if (
|
|
22366
|
+
if (chunkZN7BX5XT_cjs.getArkPsbtFields(tx, i, chunkZN7BX5XT_cjs.PrevoutTxField).length > 0) continue;
|
|
22362
22367
|
const input = tx.getInput(i);
|
|
22363
22368
|
if (!input?.txid) throw new PrevTxUnavailableError(`input ${i} has no outpoint`);
|
|
22364
22369
|
pending.push({ index: i, txid: base.hex.encode(input.txid) });
|
|
@@ -22369,7 +22374,7 @@ async function attachPrevoutTxs(tx, source) {
|
|
|
22369
22374
|
resolved.set(txid, await source.getRawTransaction(txid));
|
|
22370
22375
|
}
|
|
22371
22376
|
for (const { index, txid } of pending) {
|
|
22372
|
-
|
|
22377
|
+
chunkZN7BX5XT_cjs.setArkPsbtField(tx, index, chunkZN7BX5XT_cjs.PrevoutTxField, resolved.get(txid));
|
|
22373
22378
|
}
|
|
22374
22379
|
}
|
|
22375
22380
|
async function withPrevTxs(coins, source, onchain) {
|
|
@@ -22395,7 +22400,7 @@ exports.BIP322 = void 0;
|
|
|
22395
22400
|
async function sign2(message, identity, network) {
|
|
22396
22401
|
const xOnlyPubKey = await identity.xOnlyPublicKey();
|
|
22397
22402
|
const payment = btcSigner.p2tr(xOnlyPubKey, void 0, network);
|
|
22398
|
-
const toSpend =
|
|
22403
|
+
const toSpend = chunkZN7BX5XT_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
|
|
22399
22404
|
const toSign = craftBIP322ToSignP2TR(toSpend, payment.script, xOnlyPubKey);
|
|
22400
22405
|
const signed = await identity.sign(toSign, [0]);
|
|
22401
22406
|
signed.finalizeIdx(0);
|
|
@@ -22453,7 +22458,7 @@ function verifyP2TR(message, witnessItems, pkScript, pubkey) {
|
|
|
22453
22458
|
if (sighashType !== btcSigner.SigHash.DEFAULT && sighashType !== btcSigner.SigHash.ALL) {
|
|
22454
22459
|
return false;
|
|
22455
22460
|
}
|
|
22456
|
-
const toSpend =
|
|
22461
|
+
const toSpend = chunkZN7BX5XT_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
|
|
22457
22462
|
const toSign = craftBIP322ToSignP2TR(toSpend, pkScript);
|
|
22458
22463
|
const sighash = toSign.preimageWitnessV1(0, [pkScript], sighashType, [0n]);
|
|
22459
22464
|
const rawSig = sig.length === 65 ? sig.subarray(0, 64) : sig;
|
|
@@ -22474,7 +22479,7 @@ function verifyP2WPKH(message, witnessItems, pkScript, addressHash) {
|
|
|
22474
22479
|
}
|
|
22475
22480
|
const sighashType = sigWithHash[sigWithHash.length - 1];
|
|
22476
22481
|
const derSig = sigWithHash.subarray(0, sigWithHash.length - 1);
|
|
22477
|
-
const toSpend =
|
|
22482
|
+
const toSpend = chunkZN7BX5XT_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
|
|
22478
22483
|
const toSign = craftBIP322ToSignSimple(toSpend, pkScript);
|
|
22479
22484
|
const scriptCode = btcSigner.OutScript.encode({ type: "pkh", hash: addressHash });
|
|
22480
22485
|
const sighash = toSign.preimageWitnessV0(0, scriptCode, sighashType, 0n);
|
|
@@ -22527,7 +22532,7 @@ function encodeCompactSize(n) {
|
|
|
22527
22532
|
return buf;
|
|
22528
22533
|
}
|
|
22529
22534
|
function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
|
|
22530
|
-
const tx = new
|
|
22535
|
+
const tx = new chunkZN7BX5XT_cjs.Transaction({ version: 0 });
|
|
22531
22536
|
tx.addInput({
|
|
22532
22537
|
txid: toSpend.id,
|
|
22533
22538
|
index: 0,
|
|
@@ -22541,12 +22546,12 @@ function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
|
|
|
22541
22546
|
});
|
|
22542
22547
|
tx.addOutput({
|
|
22543
22548
|
amount: 0n,
|
|
22544
|
-
script:
|
|
22549
|
+
script: chunkZN7BX5XT_cjs.OP_RETURN_EMPTY_PKSCRIPT
|
|
22545
22550
|
});
|
|
22546
22551
|
return tx;
|
|
22547
22552
|
}
|
|
22548
22553
|
function craftBIP322ToSignSimple(toSpend, pkScript) {
|
|
22549
|
-
const tx = new
|
|
22554
|
+
const tx = new chunkZN7BX5XT_cjs.Transaction({ version: 0 });
|
|
22550
22555
|
tx.addInput({
|
|
22551
22556
|
txid: toSpend.id,
|
|
22552
22557
|
index: 0,
|
|
@@ -22558,7 +22563,7 @@ function craftBIP322ToSignSimple(toSpend, pkScript) {
|
|
|
22558
22563
|
});
|
|
22559
22564
|
tx.addOutput({
|
|
22560
22565
|
amount: 0n,
|
|
22561
|
-
script:
|
|
22566
|
+
script: chunkZN7BX5XT_cjs.OP_RETURN_EMPTY_PKSCRIPT
|
|
22562
22567
|
});
|
|
22563
22568
|
return tx;
|
|
22564
22569
|
}
|
|
@@ -22571,7 +22576,7 @@ var RestEmulatorProvider = class {
|
|
|
22571
22576
|
serverUrl;
|
|
22572
22577
|
async getInfo() {
|
|
22573
22578
|
const url = `${this.serverUrl}/v1/info`;
|
|
22574
|
-
const response = await
|
|
22579
|
+
const response = await chunkZN7BX5XT_cjs.baseFetch(url);
|
|
22575
22580
|
if (!response.ok) {
|
|
22576
22581
|
const errorText2 = await response.text();
|
|
22577
22582
|
throw new Error(`Failed to get emulator info: ${errorText2}`);
|
|
@@ -22689,7 +22694,7 @@ var RestEmulatorProvider = class {
|
|
|
22689
22694
|
}
|
|
22690
22695
|
};
|
|
22691
22696
|
function finalizeVirtualTx(type, psbtBase64) {
|
|
22692
|
-
const tx =
|
|
22697
|
+
const tx = chunkZN7BX5XT_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
|
|
22693
22698
|
if (type === "INDEXER_CHAINED_TX_TYPE_TREE" /* TREE */) {
|
|
22694
22699
|
const input = tx.getInput(0);
|
|
22695
22700
|
if (!input) {
|
|
@@ -22716,14 +22721,14 @@ var ExitPathError = class extends Error {
|
|
|
22716
22721
|
reason;
|
|
22717
22722
|
};
|
|
22718
22723
|
function delayWeight(sequence) {
|
|
22719
|
-
const t =
|
|
22724
|
+
const t = chunkZN7BX5XT_cjs.sequenceToTimelock(sequence);
|
|
22720
22725
|
return t.type === "blocks" ? Number(t.value) : Number(t.value) / 600;
|
|
22721
22726
|
}
|
|
22722
22727
|
async function resolveUnilateralPath(params) {
|
|
22723
22728
|
const { vtxo, scriptHex, contractRepository } = params;
|
|
22724
22729
|
const contract = contractRepository ? (await collectContracts(contractRepository, { script: scriptHex }))[0] : void 0;
|
|
22725
22730
|
if (contract) {
|
|
22726
|
-
const handler =
|
|
22731
|
+
const handler = chunkEP6XF7JX_cjs.contractHandlers.get(contract.type);
|
|
22727
22732
|
if (!handler) {
|
|
22728
22733
|
throw new ExitPathError(
|
|
22729
22734
|
"no-handler",
|
|
@@ -22745,12 +22750,12 @@ async function resolveUnilateralPath(params) {
|
|
|
22745
22750
|
paths.sort((a, b) => delayWeight(a.sequence) - delayWeight(b.sequence));
|
|
22746
22751
|
return { selection: paths[0], label: `${contract.type}:unilateral` };
|
|
22747
22752
|
}
|
|
22748
|
-
const decoded =
|
|
22753
|
+
const decoded = chunkZN7BX5XT_cjs.VtxoScript.decode(vtxo.tapTree);
|
|
22749
22754
|
let best;
|
|
22750
22755
|
for (const exit of decoded.exitPaths()) {
|
|
22751
22756
|
const leaf = decoded.findLeaf(base.hex.encode(exit.script));
|
|
22752
22757
|
if (!leaf) continue;
|
|
22753
|
-
const sequence =
|
|
22758
|
+
const sequence = chunkZN7BX5XT_cjs.timelockToSequence(exit.params.timelock);
|
|
22754
22759
|
const weight = delayWeight(sequence);
|
|
22755
22760
|
if (!best || weight < best.weight) {
|
|
22756
22761
|
best = { selection: { leaf, sequence }, weight };
|
|
@@ -22957,7 +22962,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
22957
22962
|
const txWeightEstimator = TxWeightEstimator.create();
|
|
22958
22963
|
const walletDescriptor = base.hex.encode(await wallet.identity.xOnlyPublicKey());
|
|
22959
22964
|
for (const vtxo of vtxos) {
|
|
22960
|
-
if (!
|
|
22965
|
+
if (!chunkZN7BX5XT_cjs.canSweepOnchain(vtxo)) {
|
|
22961
22966
|
throw new Error(
|
|
22962
22967
|
`Vtxo ${vtxo.txid}:${vtxo.vout} cannot be swept onchain: it is not fully unrolled (use unroll first), or its exit output was already spent`
|
|
22963
22968
|
);
|
|
@@ -22968,14 +22973,14 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
22968
22973
|
}
|
|
22969
22974
|
const resolved = await resolveUnilateralPath({
|
|
22970
22975
|
vtxo,
|
|
22971
|
-
scriptHex: base.hex.encode(
|
|
22976
|
+
scriptHex: base.hex.encode(chunkZN7BX5XT_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
|
|
22972
22977
|
contractRepository: wallet.contractRepository,
|
|
22973
22978
|
walletDescriptor,
|
|
22974
22979
|
currentTime: Date.now()
|
|
22975
22980
|
});
|
|
22976
22981
|
const spendingLeaf = resolved.selection.leaf;
|
|
22977
22982
|
const sequence = resolved.selection.sequence;
|
|
22978
|
-
const timelock =
|
|
22983
|
+
const timelock = chunkZN7BX5XT_cjs.sequenceToTimelock(sequence);
|
|
22979
22984
|
const elapsed = timelock.type === "blocks" ? chainTip.height >= txStatus.blockHeight + Number(timelock.value) : chainTip.time >= txStatus.blockTime + Number(timelock.value);
|
|
22980
22985
|
if (!elapsed) {
|
|
22981
22986
|
throw new Error(`no available exit path found for vtxo ${vtxo.txid}:${vtxo.vout}`);
|
|
@@ -22988,7 +22993,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
22988
22993
|
sequence,
|
|
22989
22994
|
witnessUtxo: {
|
|
22990
22995
|
amount: BigInt(vtxo.value),
|
|
22991
|
-
script:
|
|
22996
|
+
script: chunkZN7BX5XT_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
|
|
22992
22997
|
},
|
|
22993
22998
|
sighashType: btcSigner.SigHash.DEFAULT
|
|
22994
22999
|
});
|
|
@@ -22998,7 +23003,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
22998
23003
|
btcSigner.TaprootControlBlock.encode(spendingLeaf[0]).length
|
|
22999
23004
|
);
|
|
23000
23005
|
}
|
|
23001
|
-
const tx = new
|
|
23006
|
+
const tx = new chunkZN7BX5XT_cjs.Transaction({ version: 2 });
|
|
23002
23007
|
for (const input of inputs) {
|
|
23003
23008
|
tx.addInput(input);
|
|
23004
23009
|
}
|
|
@@ -23081,7 +23086,7 @@ async function buildSignedSweep(params) {
|
|
|
23081
23086
|
`uneconomic vtxo ${vtxo.txid}:${vtxo.vout}: value ${vtxo.value} - fee ${fee} < dust`
|
|
23082
23087
|
);
|
|
23083
23088
|
}
|
|
23084
|
-
const tx = new
|
|
23089
|
+
const tx = new chunkZN7BX5XT_cjs.Transaction({ version: 2 });
|
|
23085
23090
|
tx.addInput({
|
|
23086
23091
|
txid: vtxo.txid,
|
|
23087
23092
|
index: vtxo.vout,
|
|
@@ -23106,7 +23111,7 @@ async function buildSignedSweep(params) {
|
|
|
23106
23111
|
finalScriptWitness: [
|
|
23107
23112
|
tapScriptSig[0][1],
|
|
23108
23113
|
...path.extraWitness,
|
|
23109
|
-
|
|
23114
|
+
chunkZN7BX5XT_cjs.scriptFromTapLeafScript(path.leaf),
|
|
23110
23115
|
btcSigner.TaprootControlBlock.encode(controlBlock)
|
|
23111
23116
|
]
|
|
23112
23117
|
});
|
|
@@ -23136,7 +23141,7 @@ async function resolveFeeRate(opts) {
|
|
|
23136
23141
|
}
|
|
23137
23142
|
async function selectExitVtxos(opts) {
|
|
23138
23143
|
if (!opts.vtxos) return opts.wallet.getVtxos();
|
|
23139
|
-
const res = await
|
|
23144
|
+
const res = await chunkZN7BX5XT_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
|
|
23140
23145
|
const tapTrees = /* @__PURE__ */ new Map();
|
|
23141
23146
|
const out = [];
|
|
23142
23147
|
for (const vtxo of res.vtxos) {
|
|
@@ -23151,7 +23156,7 @@ async function selectExitVtxos(opts) {
|
|
|
23151
23156
|
`no contract registered for vtxo script ${vtxo.script} \u2014 register the contract before exiting`
|
|
23152
23157
|
);
|
|
23153
23158
|
}
|
|
23154
|
-
const handler =
|
|
23159
|
+
const handler = chunkEP6XF7JX_cjs.contractHandlers.get(contract.type);
|
|
23155
23160
|
if (!handler) {
|
|
23156
23161
|
throw new Error(`no contract handler registered for type '${contract.type}'`);
|
|
23157
23162
|
}
|
|
@@ -23181,7 +23186,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
23181
23186
|
if (pendingNodes.length > 0) {
|
|
23182
23187
|
const txs = await resolver.getVirtualTxs(pendingNodes.map((n) => n.txid));
|
|
23183
23188
|
for (const psbt of txs) {
|
|
23184
|
-
psbts.set(
|
|
23189
|
+
psbts.set(chunkZN7BX5XT_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
23185
23190
|
}
|
|
23186
23191
|
}
|
|
23187
23192
|
const childVsize = Number(
|
|
@@ -23209,7 +23214,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
23209
23214
|
try {
|
|
23210
23215
|
const resolved = await resolveUnilateralPath({
|
|
23211
23216
|
vtxo,
|
|
23212
|
-
scriptHex: base.hex.encode(
|
|
23217
|
+
scriptHex: base.hex.encode(chunkZN7BX5XT_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
|
|
23213
23218
|
contractRepository: wallet.contractRepository,
|
|
23214
23219
|
walletDescriptor,
|
|
23215
23220
|
currentTime: Date.now()
|
|
@@ -23228,7 +23233,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
23228
23233
|
});
|
|
23229
23234
|
continue;
|
|
23230
23235
|
}
|
|
23231
|
-
const t =
|
|
23236
|
+
const t = chunkZN7BX5XT_cjs.sequenceToTimelock(resolved.selection.sequence);
|
|
23232
23237
|
const delay = { type: t.type, value: Number(t.value) };
|
|
23233
23238
|
infos.push({ outpoint, value: vtxo.value, sweepFee, path: resolved.label, delay });
|
|
23234
23239
|
sweeps.push({ vtxo, resolved, sweepFee, delay });
|
|
@@ -23335,7 +23340,7 @@ var Executor = class {
|
|
|
23335
23340
|
constructor(pkg, provider, opts) {
|
|
23336
23341
|
this.pkg = pkg;
|
|
23337
23342
|
this.provider = provider;
|
|
23338
|
-
|
|
23343
|
+
chunkZN7BX5XT_cjs.assertTimerMs("pollIntervalMs", opts?.pollIntervalMs);
|
|
23339
23344
|
this.pollIntervalMs = opts?.pollIntervalMs ?? 5e3;
|
|
23340
23345
|
this.feeWallet = opts?.feeWallet;
|
|
23341
23346
|
this.signal = opts?.signal;
|
|
@@ -23630,7 +23635,7 @@ async function prepare(opts) {
|
|
|
23630
23635
|
txid: sweep.vtxo.txid,
|
|
23631
23636
|
vout: sweep.vtxo.vout,
|
|
23632
23637
|
value: sweep.vtxo.value,
|
|
23633
|
-
pkScript:
|
|
23638
|
+
pkScript: chunkZN7BX5XT_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
|
|
23634
23639
|
},
|
|
23635
23640
|
path: sweep.resolved.selection,
|
|
23636
23641
|
outputAddress: opts.sweepAddress,
|
|
@@ -23719,7 +23724,7 @@ async function prepare(opts) {
|
|
|
23719
23724
|
if (newFee <= splitterFee) break;
|
|
23720
23725
|
splitterFee = newFee;
|
|
23721
23726
|
}
|
|
23722
|
-
const splitter = new
|
|
23727
|
+
const splitter = new chunkZN7BX5XT_cjs.Transaction({ version: 2 });
|
|
23723
23728
|
for (const coin of selected.inputs) {
|
|
23724
23729
|
splitter.addInput({
|
|
23725
23730
|
txid: coin.txid,
|
|
@@ -23858,44 +23863,44 @@ var UnilateralExit = {
|
|
|
23858
23863
|
|
|
23859
23864
|
// src/arkade/index.ts
|
|
23860
23865
|
var arkade_exports = {};
|
|
23861
|
-
|
|
23862
|
-
ARKADE_OP: () =>
|
|
23863
|
-
ARKADE_OPCODES: () =>
|
|
23864
|
-
ARKADE_OPCODE_NAMES: () =>
|
|
23865
|
-
ARKADE_OPCODE_VALUES: () =>
|
|
23866
|
-
ARKADE_OPS: () =>
|
|
23866
|
+
chunkZN7BX5XT_cjs.__export(arkade_exports, {
|
|
23867
|
+
ARKADE_OP: () => chunkEP6XF7JX_cjs.ARKADE_OP,
|
|
23868
|
+
ARKADE_OPCODES: () => chunkEP6XF7JX_cjs.ARKADE_OPCODES,
|
|
23869
|
+
ARKADE_OPCODE_NAMES: () => chunkEP6XF7JX_cjs.ARKADE_OPCODE_NAMES,
|
|
23870
|
+
ARKADE_OPCODE_VALUES: () => chunkEP6XF7JX_cjs.ARKADE_OPCODE_VALUES,
|
|
23871
|
+
ARKADE_OPS: () => chunkEP6XF7JX_cjs.ARKADE_OPS,
|
|
23867
23872
|
Arkade: () => Arkade,
|
|
23868
23873
|
ArkadeContract: () => ArkadeContract,
|
|
23869
|
-
ArkadeProgramScript: () =>
|
|
23870
|
-
ArkadeScript: () =>
|
|
23874
|
+
ArkadeProgramScript: () => chunkEP6XF7JX_cjs.ArkadeProgramScript,
|
|
23875
|
+
ArkadeScript: () => chunkEP6XF7JX_cjs.ArkadeScript,
|
|
23871
23876
|
ArkadeTransactionBuilder: () => ArkadeTransactionBuilder,
|
|
23872
|
-
BigNum: () =>
|
|
23877
|
+
BigNum: () => chunkEP6XF7JX_cjs.bignum_exports,
|
|
23873
23878
|
OP: () => btcSigner.OP,
|
|
23874
|
-
OPCODE_NAMES: () =>
|
|
23875
|
-
OPCODE_VALUES: () =>
|
|
23876
|
-
SUPPORTED_PROGRAM_VERSION: () =>
|
|
23879
|
+
OPCODE_NAMES: () => chunkEP6XF7JX_cjs.OPCODE_NAMES,
|
|
23880
|
+
OPCODE_VALUES: () => chunkEP6XF7JX_cjs.OPCODE_VALUES,
|
|
23881
|
+
SUPPORTED_PROGRAM_VERSION: () => chunkEP6XF7JX_cjs.SUPPORTED_PROGRAM_VERSION,
|
|
23877
23882
|
Script: () => btcSigner.Script,
|
|
23878
|
-
arkadeScriptHash: () =>
|
|
23879
|
-
arkadeWitnessHash: () =>
|
|
23880
|
-
asmToBytes: () =>
|
|
23881
|
-
bytesToASM: () =>
|
|
23882
|
-
computeArkadeScriptPublicKey: () =>
|
|
23883
|
+
arkadeScriptHash: () => chunkEP6XF7JX_cjs.arkadeScriptHash,
|
|
23884
|
+
arkadeWitnessHash: () => chunkEP6XF7JX_cjs.arkadeWitnessHash,
|
|
23885
|
+
asmToBytes: () => chunkEP6XF7JX_cjs.asmToBytes,
|
|
23886
|
+
bytesToASM: () => chunkEP6XF7JX_cjs.bytesToASM,
|
|
23887
|
+
computeArkadeScriptPublicKey: () => chunkEP6XF7JX_cjs.computeArkadeScriptPublicKey,
|
|
23883
23888
|
createArkadeBatchHandler: () => createArkadeBatchHandler,
|
|
23884
|
-
deserializeArkadeContractParams: () =>
|
|
23885
|
-
fromASM: () =>
|
|
23886
|
-
getOpcodeName: () =>
|
|
23887
|
-
getOpcodeValue: () =>
|
|
23889
|
+
deserializeArkadeContractParams: () => chunkEP6XF7JX_cjs.deserializeArkadeContractParams,
|
|
23890
|
+
fromASM: () => chunkEP6XF7JX_cjs.fromASM,
|
|
23891
|
+
getOpcodeName: () => chunkEP6XF7JX_cjs.getOpcodeName,
|
|
23892
|
+
getOpcodeValue: () => chunkEP6XF7JX_cjs.getOpcodeValue,
|
|
23888
23893
|
isContractArtifact: () => isContractArtifact,
|
|
23889
|
-
parseArtifact: () =>
|
|
23894
|
+
parseArtifact: () => chunkEP6XF7JX_cjs.parseArtifact,
|
|
23890
23895
|
programFromArtifact: () => programFromArtifact,
|
|
23891
|
-
resolveAsm: () =>
|
|
23892
|
-
serializeArkadeContractParams: () =>
|
|
23893
|
-
stringifyArtifact: () =>
|
|
23894
|
-
toASM: () =>
|
|
23895
|
-
validateProgram: () =>
|
|
23896
|
-
witnessRefToBytes: () =>
|
|
23896
|
+
resolveAsm: () => chunkEP6XF7JX_cjs.resolveAsm,
|
|
23897
|
+
serializeArkadeContractParams: () => chunkEP6XF7JX_cjs.serializeArkadeContractParams,
|
|
23898
|
+
stringifyArtifact: () => chunkEP6XF7JX_cjs.stringifyArtifact,
|
|
23899
|
+
toASM: () => chunkEP6XF7JX_cjs.toASM,
|
|
23900
|
+
validateProgram: () => chunkEP6XF7JX_cjs.validateProgram,
|
|
23901
|
+
witnessRefToBytes: () => chunkEP6XF7JX_cjs.witnessRefToBytes
|
|
23897
23902
|
});
|
|
23898
|
-
var isVtxoCoin = (input) =>
|
|
23903
|
+
var isVtxoCoin = (input) => chunkZN7BX5XT_cjs.isVirtualCoin(input);
|
|
23899
23904
|
function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message, session, arkProvider, emulator, network, recipients, batchExpiryPolicy) {
|
|
23900
23905
|
let batchId;
|
|
23901
23906
|
let sweepTapTreeRoot;
|
|
@@ -23916,23 +23921,23 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
23916
23921
|
);
|
|
23917
23922
|
await arkProvider.confirmRegistration(intentId);
|
|
23918
23923
|
batchId = event.id;
|
|
23919
|
-
const sweepTapscript =
|
|
23924
|
+
const sweepTapscript = chunkZN7BX5XT_cjs.CSVMultisigTapscript.encode({
|
|
23920
23925
|
timelock,
|
|
23921
|
-
pubkeys: [
|
|
23926
|
+
pubkeys: [chunkEP6XF7JX_cjs.toXOnly(base.hex.decode(info.forfeitPubkey), "forfeit key")]
|
|
23922
23927
|
}).script;
|
|
23923
23928
|
sweepTapTreeRoot = payment_js.tapLeafHash(sweepTapscript);
|
|
23924
23929
|
return { skip: false };
|
|
23925
23930
|
},
|
|
23926
23931
|
onTreeSigningStarted: async (event, vtxoTree) => {
|
|
23927
23932
|
const signerPubKey = await session.getPublicKey();
|
|
23928
|
-
const xonlySignerPubKey =
|
|
23933
|
+
const xonlySignerPubKey = chunkEP6XF7JX_cjs.toXOnly(signerPubKey, "signer key");
|
|
23929
23934
|
const xOnlyPubkeys = event.cosignersPublicKeys.map(
|
|
23930
|
-
(k) => base.hex.encode(
|
|
23935
|
+
(k) => base.hex.encode(chunkEP6XF7JX_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
|
|
23931
23936
|
);
|
|
23932
23937
|
if (!xOnlyPubkeys.includes(base.hex.encode(xonlySignerPubKey))) {
|
|
23933
23938
|
return { skip: true };
|
|
23934
23939
|
}
|
|
23935
|
-
const commitmentTx =
|
|
23940
|
+
const commitmentTx = chunkZN7BX5XT_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
|
|
23936
23941
|
validateVtxoTxGraph(vtxoTree, commitmentTx, sweepTapTreeRoot);
|
|
23937
23942
|
if (recipients && recipients.length > 0) {
|
|
23938
23943
|
validateBatchRecipients(commitmentTx, vtxoTree.leaves(), recipients, network);
|
|
@@ -23970,7 +23975,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
23970
23975
|
if (connectorTree) {
|
|
23971
23976
|
validateConnectorsTxGraph(event.commitmentTx, connectorTree);
|
|
23972
23977
|
}
|
|
23973
|
-
let commitmentPsbt =
|
|
23978
|
+
let commitmentPsbt = chunkZN7BX5XT_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
|
|
23974
23979
|
assertFinalCommitmentMatchesValidated(
|
|
23975
23980
|
commitmentPsbt,
|
|
23976
23981
|
validatedCommitmentTxid,
|
|
@@ -24012,7 +24017,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
24012
24017
|
boardingIndices.push(boardingIdx);
|
|
24013
24018
|
continue;
|
|
24014
24019
|
}
|
|
24015
|
-
if (!
|
|
24020
|
+
if (!chunkZN7BX5XT_cjs.requiresForfeit(input) || isSubdust(input, info.dust)) {
|
|
24016
24021
|
continue;
|
|
24017
24022
|
}
|
|
24018
24023
|
if (connectorIndex >= connectorLeaves.length) {
|
|
@@ -24033,7 +24038,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
24033
24038
|
index: input.vout,
|
|
24034
24039
|
witnessUtxo: {
|
|
24035
24040
|
amount: BigInt(input.value),
|
|
24036
|
-
script:
|
|
24041
|
+
script: chunkZN7BX5XT_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
24037
24042
|
},
|
|
24038
24043
|
sighashType: btcSigner.SigHash.DEFAULT,
|
|
24039
24044
|
tapLeafScript: [input.forfeitTapLeafScript]
|
|
@@ -24178,7 +24183,7 @@ function flatten(param, structs, stack = []) {
|
|
|
24178
24183
|
function opcodeToken(token) {
|
|
24179
24184
|
const base = token.slice(3);
|
|
24180
24185
|
const name = base === "0" || /^([1-9]|1[0-6])$/.test(base) ? token : base;
|
|
24181
|
-
if (!Object.hasOwn(
|
|
24186
|
+
if (!Object.hasOwn(chunkEP6XF7JX_cjs.ARKADE_OPS, name)) {
|
|
24182
24187
|
fail(`opcode '${token}' is not in this SDK's table`);
|
|
24183
24188
|
}
|
|
24184
24189
|
return name;
|
|
@@ -24225,7 +24230,7 @@ function providedWitness(witness) {
|
|
|
24225
24230
|
}
|
|
24226
24231
|
function csvTimelock(leafName, operand) {
|
|
24227
24232
|
if (typeof operand === "string") return { type: "sequence", value: operand };
|
|
24228
|
-
const timelock =
|
|
24233
|
+
const timelock = chunkZN7BX5XT_cjs.sequenceToCanonicalTimelock(operand);
|
|
24229
24234
|
if (!timelock) {
|
|
24230
24235
|
fail(`leaf '${leafName}': CSV literal ${operand} is not a canonical BIP68 sequence`);
|
|
24231
24236
|
}
|
|
@@ -24344,7 +24349,7 @@ function programFromArtifact(artifact) {
|
|
|
24344
24349
|
const paramNames = /* @__PURE__ */ new Set();
|
|
24345
24350
|
for (const param of params) claim(paramNames, param.name, "program parameter");
|
|
24346
24351
|
return {
|
|
24347
|
-
version:
|
|
24352
|
+
version: chunkEP6XF7JX_cjs.SUPPORTED_PROGRAM_VERSION,
|
|
24348
24353
|
name: artifact.contractName,
|
|
24349
24354
|
params,
|
|
24350
24355
|
functions
|
|
@@ -24385,16 +24390,16 @@ var Arkade = class _Arkade {
|
|
|
24385
24390
|
/** Connect and resolve the server key, checkpoint closure and (if present) the co-signer key. */
|
|
24386
24391
|
static async connect(opts) {
|
|
24387
24392
|
const info = await opts.arkade.getInfo();
|
|
24388
|
-
const serverKey =
|
|
24389
|
-
const checkpoint =
|
|
24390
|
-
const network = opts.network ?? (Object.hasOwn(
|
|
24393
|
+
const serverKey = chunkEP6XF7JX_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
|
|
24394
|
+
const checkpoint = chunkZN7BX5XT_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
|
|
24395
|
+
const network = opts.network ?? (Object.hasOwn(chunkZN7BX5XT_cjs.networks, info.network) ? chunkZN7BX5XT_cjs.getNetwork(info.network) : chunkZN7BX5XT_cjs.DEFAULT_NETWORK);
|
|
24391
24396
|
let emulatorKey;
|
|
24392
24397
|
if (opts.emulator) {
|
|
24393
|
-
emulatorKey = base.hex.decode(
|
|
24398
|
+
emulatorKey = base.hex.decode(chunkZN7BX5XT_cjs.resolveEmulatorPubkey(network, opts.emulatorPubkey));
|
|
24394
24399
|
}
|
|
24395
24400
|
let userKey;
|
|
24396
24401
|
if (opts.identity) {
|
|
24397
|
-
userKey =
|
|
24402
|
+
userKey = chunkEP6XF7JX_cjs.toXOnly(await opts.identity.xOnlyPublicKey(), "identity key");
|
|
24398
24403
|
}
|
|
24399
24404
|
return new _Arkade({
|
|
24400
24405
|
arkProvider: opts.arkade,
|
|
@@ -24417,7 +24422,7 @@ var Arkade = class _Arkade {
|
|
|
24417
24422
|
* explicit args win.
|
|
24418
24423
|
*/
|
|
24419
24424
|
contract(program, args = {}) {
|
|
24420
|
-
const declared = (program.params ?? []).map(
|
|
24425
|
+
const declared = (program.params ?? []).map(chunkEP6XF7JX_cjs.inputName);
|
|
24421
24426
|
if (declared.includes("server") && args.server === void 0) {
|
|
24422
24427
|
args = { ...args, server: this.serverKey };
|
|
24423
24428
|
}
|
|
@@ -24437,7 +24442,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
24437
24442
|
userKey: client.userKey,
|
|
24438
24443
|
emulatorKey: client.emulatorKey
|
|
24439
24444
|
};
|
|
24440
|
-
this.vtxoScript = new
|
|
24445
|
+
this.vtxoScript = new chunkEP6XF7JX_cjs.ArkadeProgramScript(program, args, this.keys);
|
|
24441
24446
|
this.tapTree = this.vtxoScript.encode();
|
|
24442
24447
|
this.compiled = this.vtxoScript.compiled;
|
|
24443
24448
|
}
|
|
@@ -24462,7 +24467,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
24462
24467
|
`ArkadeContract.fromContract: expected contract type 'arkade', got '${contract.type}'`
|
|
24463
24468
|
);
|
|
24464
24469
|
}
|
|
24465
|
-
const typed =
|
|
24470
|
+
const typed = chunkEP6XF7JX_cjs.deserializeArkadeContractParams(contract.params);
|
|
24466
24471
|
return new _ArkadeContract(client, typed.program, typed.args, {
|
|
24467
24472
|
serverKey: typed.serverKey,
|
|
24468
24473
|
userKey: typed.userKey,
|
|
@@ -24498,7 +24503,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
24498
24503
|
toContractParams() {
|
|
24499
24504
|
return {
|
|
24500
24505
|
type: "arkade",
|
|
24501
|
-
params:
|
|
24506
|
+
params: chunkEP6XF7JX_cjs.serializeArkadeContractParams({
|
|
24502
24507
|
program: this.program,
|
|
24503
24508
|
args: this.args,
|
|
24504
24509
|
serverKey: this.keys.serverKey,
|
|
@@ -24538,17 +24543,17 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
24538
24543
|
const [registered] = await manager.getContracts({ script: scriptHex });
|
|
24539
24544
|
if (registered) {
|
|
24540
24545
|
const [withVtxos] = await manager.getContractsWithVtxos({ script: scriptHex });
|
|
24541
|
-
return (withVtxos?.vtxos ?? []).filter((v) => !
|
|
24546
|
+
return (withVtxos?.vtxos ?? []).filter((v) => !chunkZN7BX5XT_cjs.isVtxoSpent(v) && !v.isUnrolled);
|
|
24542
24547
|
}
|
|
24543
24548
|
}
|
|
24544
24549
|
if (!this.client.indexer) {
|
|
24545
24550
|
throw new Error("ArkadeContract.getUtxos: an indexer is required");
|
|
24546
24551
|
}
|
|
24547
|
-
const { vtxos } = await
|
|
24552
|
+
const { vtxos } = await chunkZN7BX5XT_cjs.getNormalizedVtxos(this.client.indexer, {
|
|
24548
24553
|
scripts: [scriptHex],
|
|
24549
24554
|
spendableOnly: true
|
|
24550
24555
|
});
|
|
24551
|
-
return vtxos.filter((v) => !
|
|
24556
|
+
return vtxos.filter((v) => !chunkZN7BX5XT_cjs.isVtxoSpent(v) && !v.isUnrolled);
|
|
24552
24557
|
}
|
|
24553
24558
|
/** Total spendable balance (requires an indexer). */
|
|
24554
24559
|
async getBalance() {
|
|
@@ -24652,7 +24657,7 @@ var ArkadeTransactionBuilder = class {
|
|
|
24652
24657
|
this.contract.client.checkpoint
|
|
24653
24658
|
);
|
|
24654
24659
|
if (coin.sourceTx) {
|
|
24655
|
-
|
|
24660
|
+
chunkZN7BX5XT_cjs.setArkPsbtField(arkTx, 0, chunkZN7BX5XT_cjs.PrevArkTxField, coin.sourceTx);
|
|
24656
24661
|
}
|
|
24657
24662
|
if (this.fn.arkadeScript) {
|
|
24658
24663
|
const indexer = this.contract.client.indexer;
|
|
@@ -24669,8 +24674,8 @@ var ArkadeTransactionBuilder = class {
|
|
|
24669
24674
|
}
|
|
24670
24675
|
const condition = (def.tapscript.witness ?? []).map((w) => this.witnessBytes(w));
|
|
24671
24676
|
if (condition.length > 0) {
|
|
24672
|
-
|
|
24673
|
-
|
|
24677
|
+
chunkZN7BX5XT_cjs.setArkPsbtField(arkTx, 0, chunkZN7BX5XT_cjs.ConditionWitness, condition);
|
|
24678
|
+
chunkZN7BX5XT_cjs.setArkPsbtField(checkpoints[0], 0, chunkZN7BX5XT_cjs.ConditionWitness, condition);
|
|
24674
24679
|
}
|
|
24675
24680
|
const packets = [];
|
|
24676
24681
|
if (this.assetSpecs.length > 0) {
|
|
@@ -24762,23 +24767,23 @@ var ArkadeTransactionBuilder = class {
|
|
|
24762
24767
|
}
|
|
24763
24768
|
buildAssetPacket() {
|
|
24764
24769
|
const groups = this.assetSpecs.map((s) => {
|
|
24765
|
-
const id = typeof s.assetId === "string" ?
|
|
24766
|
-
return
|
|
24770
|
+
const id = typeof s.assetId === "string" ? chunkURILS6HH_cjs.AssetId.fromString(s.assetId) : chunkURILS6HH_cjs.AssetId.fromBytes(s.assetId);
|
|
24771
|
+
return chunkURILS6HH_cjs.AssetGroup.create(
|
|
24767
24772
|
id,
|
|
24768
24773
|
null,
|
|
24769
|
-
s.inputs.map((i) =>
|
|
24770
|
-
s.outputs.map((o) =>
|
|
24771
|
-
(s.metadata ?? []).map((m) =>
|
|
24774
|
+
s.inputs.map((i) => chunkURILS6HH_cjs.AssetInput.create(i.vin, i.amount)),
|
|
24775
|
+
s.outputs.map((o) => chunkURILS6HH_cjs.AssetOutput.create(o.vout, o.amount)),
|
|
24776
|
+
(s.metadata ?? []).map((m) => chunkURILS6HH_cjs.Metadata.create(m.key, m.value))
|
|
24772
24777
|
);
|
|
24773
24778
|
});
|
|
24774
|
-
return
|
|
24779
|
+
return chunkURILS6HH_cjs.Packet.create(groups);
|
|
24775
24780
|
}
|
|
24776
24781
|
witnessBytes(ref) {
|
|
24777
|
-
return
|
|
24782
|
+
return chunkEP6XF7JX_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
|
|
24778
24783
|
}
|
|
24779
24784
|
};
|
|
24780
24785
|
function bindInputs(fn, callArgs) {
|
|
24781
|
-
const names = (fn.def.inputs ?? []).map(
|
|
24786
|
+
const names = (fn.def.inputs ?? []).map(chunkEP6XF7JX_cjs.inputName);
|
|
24782
24787
|
if (callArgs.length !== names.length) {
|
|
24783
24788
|
throw new Error(`${fn.name}: expected ${names.length} argument(s), got ${callArgs.length}`);
|
|
24784
24789
|
}
|
|
@@ -25192,17 +25197,17 @@ var walletFeeSource = (wallet) => async () => (await wallet.arkProvider.getInfo(
|
|
|
25192
25197
|
function offchainInputFees(vtxos, fees) {
|
|
25193
25198
|
const estimator = new Estimator(fees?.intentFee ?? {});
|
|
25194
25199
|
return vtxos.reduce(
|
|
25195
|
-
(total, vtxo) => total + estimator.evalOffchainInput(
|
|
25200
|
+
(total, vtxo) => total + estimator.evalOffchainInput(chunkZN7BX5XT_cjs.toOffchainInputFeeParams(vtxo)).satoshis,
|
|
25196
25201
|
0
|
|
25197
25202
|
);
|
|
25198
25203
|
}
|
|
25199
25204
|
async function changeOutputFee(wallet, inputs, needed, fees) {
|
|
25200
25205
|
const estimator = new Estimator(fees?.intentFee ?? {});
|
|
25201
25206
|
const net = inputs.reduce(
|
|
25202
|
-
(total, vtxo) => total + BigInt(vtxo.value) - BigInt(estimator.evalOffchainInput(
|
|
25207
|
+
(total, vtxo) => total + BigInt(vtxo.value) - BigInt(estimator.evalOffchainInput(chunkZN7BX5XT_cjs.toOffchainInputFeeParams(vtxo)).satoshis),
|
|
25203
25208
|
0n
|
|
25204
25209
|
);
|
|
25205
|
-
const script = base.hex.encode(
|
|
25210
|
+
const script = base.hex.encode(chunkZN7BX5XT_cjs.ArkAddress.decode(await wallet.getAddress()).pkScript);
|
|
25206
25211
|
return changeAfterOutputFee(
|
|
25207
25212
|
net - needed,
|
|
25208
25213
|
(amount) => BigInt(estimator.evalOffchainOutput({ amount, script }).satoshis)
|
|
@@ -25510,5 +25515,5 @@ exports.waitForIncomingFunds = waitForIncomingFunds;
|
|
|
25510
25515
|
exports.walletFeeSource = walletFeeSource;
|
|
25511
25516
|
exports.warnAndFilterVtxosForScript = warnAndFilterVtxosForScript;
|
|
25512
25517
|
exports.withPrevTxs = withPrevTxs;
|
|
25513
|
-
//# sourceMappingURL=chunk-
|
|
25514
|
-
//# sourceMappingURL=chunk-
|
|
25518
|
+
//# sourceMappingURL=chunk-PM6KYV7S.cjs.map
|
|
25519
|
+
//# sourceMappingURL=chunk-PM6KYV7S.cjs.map
|