@arkade-os/sdk 0.5.0-rc.30 → 0.5.0-rc.32
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 -2
- 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-fkkUPrhz.d.cts → asyncStorageTaskQueue-Dh9He96-.d.cts} +1 -1
- package/dist/{asyncStorageTaskQueue-DAVf4Fyy.d.ts → asyncStorageTaskQueue-DreNZKuC.d.ts} +1 -1
- package/dist/{chunk-PY3YQNHP.js → chunk-5RW2ADEN.js} +3 -3
- package/dist/{chunk-PY3YQNHP.js.map → chunk-5RW2ADEN.js.map} +1 -1
- package/dist/{chunk-3SM7BMIE.cjs → chunk-H7DN4AJC.cjs} +505 -504
- package/dist/chunk-H7DN4AJC.cjs.map +1 -0
- package/dist/{chunk-4MCQZYH6.cjs → chunk-M4DM3N6F.cjs} +48 -48
- package/dist/{chunk-4MCQZYH6.cjs.map → chunk-M4DM3N6F.cjs.map} +1 -1
- package/dist/{chunk-ASKOHVGX.cjs → chunk-NMDISCGW.cjs} +3 -3
- package/dist/{chunk-ASKOHVGX.cjs.map → chunk-NMDISCGW.cjs.map} +1 -1
- package/dist/{chunk-XW72DWYO.js → chunk-NNIJTYK3.js} +11 -10
- package/dist/chunk-NNIJTYK3.js.map +1 -0
- package/dist/{chunk-6BTZ6KFI.cjs → chunk-S7PDYPH6.cjs} +10 -10
- package/dist/{chunk-6BTZ6KFI.cjs.map → chunk-S7PDYPH6.cjs.map} +1 -1
- package/dist/{chunk-ESEHYZAY.js → chunk-SRIRT5K3.js} +3 -3
- package/dist/{chunk-ESEHYZAY.js.map → chunk-SRIRT5K3.js.map} +1 -1
- package/dist/{chunk-DLHE4RCH.cjs → chunk-TO63QDQA.cjs} +16 -16
- package/dist/{chunk-DLHE4RCH.cjs.map → chunk-TO63QDQA.cjs.map} +1 -1
- package/dist/{chunk-G6ZPX2GL.js → chunk-UAIQ2ORI.js} +3 -3
- package/dist/{chunk-G6ZPX2GL.js.map → chunk-UAIQ2ORI.js.map} +1 -1
- package/dist/{chunk-AICUNREA.cjs → chunk-X2BWPGCY.cjs} +18 -18
- package/dist/{chunk-AICUNREA.cjs.map → chunk-X2BWPGCY.cjs.map} +1 -1
- package/dist/{chunk-YML2N4SC.js → chunk-YO3QE7ZX.js} +4 -4
- package/dist/{chunk-YML2N4SC.js.map → chunk-YO3QE7ZX.js.map} +1 -1
- package/dist/{chunk-KK6GXY4L.js → chunk-ZN23HI7N.js} +4 -4
- package/dist/{chunk-KK6GXY4L.js.map → chunk-ZN23HI7N.js.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-BYoNu3lf.d.cts → delegate-Bhip6Td7.d.cts} +1 -1
- package/dist/{delegate-DsqzUVId.d.ts → delegate-C2aNsS7T.d.ts} +1 -1
- package/dist/{index-DhP68WBD.d.cts → index-CKuHj3vn.d.cts} +3 -3
- package/dist/{index-DhP68WBD.d.ts → index-CKuHj3vn.d.ts} +3 -3
- package/dist/{index-CXNTURO_.d.cts → index-CSHjrzb7.d.cts} +2 -2
- package/dist/{index-pQr5y77P.d.ts → index-DHjrQRnG.d.ts} +2 -2
- package/dist/index.cjs +313 -313
- package/dist/index.d.cts +8 -8
- package/dist/index.d.ts +8 -8
- 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-DKtBy8Yo.d.ts → taskRunner-Co6W72XB.d.ts} +1 -1
- package/dist/{taskRunner-C8H3bSsk.d.cts → taskRunner-DZG6vkws.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-C0W8EOnA.d.ts → wallet-BiPYZ3X5.d.ts} +2 -2
- package/dist/{wallet-BmAHDzK3.d.cts → wallet-DBt_J26X.d.cts} +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-3SM7BMIE.cjs.map +0 -1
- package/dist/chunk-XW72DWYO.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunkX2BWPGCY_cjs = require('./chunk-X2BWPGCY.cjs');
|
|
4
|
+
var chunkM4DM3N6F_cjs = require('./chunk-M4DM3N6F.cjs');
|
|
5
|
+
var chunkNMDISCGW_cjs = require('./chunk-NMDISCGW.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 = chunkNMDISCGW_cjs.getArkPsbtFields(tx.root, 0, chunkNMDISCGW_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 = chunkNMDISCGW_cjs.getArkPsbtFields(g.root, 0, chunkNMDISCGW_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
|
+
chunkNMDISCGW_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 = chunkM4DM3N6F_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 chunkM4DM3N6F_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 = chunkM4DM3N6F_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
|
+
chunkNMDISCGW_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 = chunkM4DM3N6F_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 chunkM4DM3N6F_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 chunkM4DM3N6F_cjs.deriveDescriptorLeafPubKey(this.descriptor);
|
|
797
797
|
}
|
|
798
798
|
async compressedPublicKey() {
|
|
799
|
-
return
|
|
799
|
+
return chunkM4DM3N6F_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 = chunkM4DM3N6F_cjs.normalizeToDescriptor(descriptor);
|
|
860
|
+
const pubKey = chunkM4DM3N6F_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 chunkM4DM3N6F_cjs.extractPubKey(chunkM4DM3N6F_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 && chunkM4DM3N6F_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 = chunkM4DM3N6F_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 chunkM4DM3N6F_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 chunkM4DM3N6F_cjs.identityDescriptor(wallet.identity);
|
|
1351
1351
|
}
|
|
1352
1352
|
async function provisionRefundKey(wallet) {
|
|
1353
|
-
const descriptor = await
|
|
1353
|
+
const descriptor = await chunkM4DM3N6F_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 } = chunkNMDISCGW_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 = chunkM4DM3N6F_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
|
+
chunkNMDISCGW_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 chunkNMDISCGW_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: chunkNMDISCGW_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 chunkNMDISCGW_cjs.rateGate.runHttp(url, () => chunkNMDISCGW_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(chunkNMDISCGW_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) => chunkNMDISCGW_cjs.isVtxoSpent(copy.vtxo));
|
|
1759
1759
|
return rows.filter(
|
|
1760
|
-
(row) => !
|
|
1760
|
+
(row) => !chunkNMDISCGW_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[chunkNMDISCGW_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 chunkNMDISCGW_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 chunkNMDISCGW_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 chunkNMDISCGW_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 chunkNMDISCGW_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 chunkNMDISCGW_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 chunkNMDISCGW_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 chunkNMDISCGW_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 chunkNMDISCGW_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 chunkNMDISCGW_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 chunkNMDISCGW_cjs.baseFetch(`${this.baseUrl}/blocks`);
|
|
2224
2224
|
if (tipBlocks.status === 404) {
|
|
2225
|
-
tipBlocks = await
|
|
2225
|
+
tipBlocks = await chunkNMDISCGW_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 chunkNMDISCGW_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 chunkNMDISCGW_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 chunkNMDISCGW_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 chunkNMDISCGW_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 = chunkNMDISCGW_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 = chunkNMDISCGW_cjs.getArkPsbtFields(child.root, 0, chunkNMDISCGW_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 chunkX2BWPGCY_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 chunkX2BWPGCY_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 chunkX2BWPGCY_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 chunkX2BWPGCY_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 chunkX2BWPGCY_cjs.Packet.PACKET_TYPE:
|
|
2820
|
+
return chunkX2BWPGCY_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 chunkNMDISCGW_cjs.ServerResponseMismatchError(`offchain send output not found: ${address}`);
|
|
2868
|
+
var ErrInvalidAssetOutputAmount = (got, want, assetId) => new chunkNMDISCGW_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 chunkNMDISCGW_cjs.ServerResponseMismatchError(`asset group not found in batch leaf: ${assetId}`);
|
|
2872
|
+
var ErrAssetOutputNotFound = (assetId, outputIndex) => new chunkNMDISCGW_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 chunkNMDISCGW_cjs.ServerResponseMismatchError(`onchain output not found: ${address}`);
|
|
2876
|
+
var ErrUnvalidatedOffchainOutput = (address) => new chunkNMDISCGW_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 chunkNMDISCGW_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 chunkNMDISCGW_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 chunkNMDISCGW_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 = chunkNMDISCGW_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
|
+
chunkNMDISCGW_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 = chunkNMDISCGW_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(chunkX2BWPGCY_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
|
+
chunkX2BWPGCY_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
|
+
chunkX2BWPGCY_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
|
+
chunkX2BWPGCY_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 = chunkX2BWPGCY_cjs.AssetId.fromString(assetIdStr);
|
|
3324
|
+
const group = chunkX2BWPGCY_cjs.AssetGroup.create(assetId, null, inputs ?? [], outputs ?? [], []);
|
|
3325
3325
|
groups.push(group);
|
|
3326
3326
|
}
|
|
3327
|
-
return
|
|
3327
|
+
return chunkX2BWPGCY_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(chunkM4DM3N6F_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,14 +3455,14 @@ 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 chunkNMDISCGW_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
3464
|
const remedy = overrideOption ? `; pass ${overrideOption}: ${seconds}n to Wallet.create to lower it` : "";
|
|
3465
|
-
throw new
|
|
3465
|
+
throw new chunkNMDISCGW_cjs.ServerResponseMismatchError(
|
|
3466
3466
|
`${label} rejected: ${timelock.value} ${timelock.type} is below the ${policy.minSeconds}s floor${remedy}`
|
|
3467
3467
|
);
|
|
3468
3468
|
}
|
|
@@ -3483,7 +3483,7 @@ function resolveBatchExpiryPolicy(network, overrides) {
|
|
|
3483
3483
|
}
|
|
3484
3484
|
function assertValidBatchExpiry(batchExpiry, policy) {
|
|
3485
3485
|
if (policy.advertisedVtxoTreeExpiry !== void 0 && batchExpiry !== policy.advertisedVtxoTreeExpiry) {
|
|
3486
|
-
throw new
|
|
3486
|
+
throw new chunkNMDISCGW_cjs.ServerResponseMismatchError(
|
|
3487
3487
|
`batch expiry rejected: ${batchExpiry} does not match the advertised vtxoTreeExpiry ${policy.advertisedVtxoTreeExpiry}`
|
|
3488
3488
|
);
|
|
3489
3489
|
}
|
|
@@ -3492,21 +3492,21 @@ function assertValidBatchExpiry(batchExpiry, policy) {
|
|
|
3492
3492
|
function assertValidServerUnrollScript(checkpointTapscript, network, advertisedForfeitPubkey) {
|
|
3493
3493
|
let script;
|
|
3494
3494
|
try {
|
|
3495
|
-
script =
|
|
3495
|
+
script = chunkNMDISCGW_cjs.CSVMultisigTapscript.decode(base.hex.decode(checkpointTapscript));
|
|
3496
3496
|
} catch (e) {
|
|
3497
|
-
throw new
|
|
3497
|
+
throw new chunkNMDISCGW_cjs.ServerResponseMismatchError(
|
|
3498
3498
|
`checkpoint exit delay rejected: invalid checkpointTapscript from server (${e instanceof Error ? e.message : String(e)})`
|
|
3499
3499
|
);
|
|
3500
3500
|
}
|
|
3501
3501
|
if (advertisedForfeitPubkey !== void 0) {
|
|
3502
3502
|
const { pubkeys } = script.params;
|
|
3503
3503
|
if (pubkeys.length !== 1) {
|
|
3504
|
-
throw new
|
|
3504
|
+
throw new chunkNMDISCGW_cjs.ServerResponseMismatchError(
|
|
3505
3505
|
`checkpoint exit delay rejected: checkpointTapscript must commit to exactly one pubkey, got ${pubkeys.length} [${pubkeys.map(base.hex.encode).join(", ")}]`
|
|
3506
3506
|
);
|
|
3507
3507
|
}
|
|
3508
3508
|
if (!utils_js.equalBytes(pubkeys[0], advertisedForfeitPubkey)) {
|
|
3509
|
-
throw new
|
|
3509
|
+
throw new chunkNMDISCGW_cjs.ServerResponseMismatchError(
|
|
3510
3510
|
`checkpoint exit delay rejected: checkpointTapscript pubkey ${base.hex.encode(pubkeys[0])} does not match the advertised forfeitPubkey ${base.hex.encode(advertisedForfeitPubkey)}`
|
|
3511
3511
|
);
|
|
3512
3512
|
}
|
|
@@ -3549,8 +3549,8 @@ function buildOffchainTx(inputs, outputs, serverUnrollScript) {
|
|
|
3549
3549
|
function buildVirtualTx(inputs, outputs) {
|
|
3550
3550
|
let lockTime = 0n;
|
|
3551
3551
|
for (const input of inputs) {
|
|
3552
|
-
const tapscript =
|
|
3553
|
-
if (
|
|
3552
|
+
const tapscript = chunkNMDISCGW_cjs.decodeTapscript(chunkNMDISCGW_cjs.scriptFromTapLeafScript(input.tapLeafScript));
|
|
3553
|
+
if (chunkNMDISCGW_cjs.CLTVMultisigTapscript.is(tapscript)) {
|
|
3554
3554
|
if (lockTime !== 0n) {
|
|
3555
3555
|
if (isSeconds(lockTime) !== isSeconds(tapscript.params.absoluteTimelock)) {
|
|
3556
3556
|
throw new Error("cannot mix seconds and blocks locktime");
|
|
@@ -3561,7 +3561,7 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
3561
3561
|
}
|
|
3562
3562
|
}
|
|
3563
3563
|
}
|
|
3564
|
-
const tx = new
|
|
3564
|
+
const tx = new chunkNMDISCGW_cjs.Transaction({
|
|
3565
3565
|
version: 3,
|
|
3566
3566
|
lockTime: Number(lockTime)
|
|
3567
3567
|
});
|
|
@@ -3571,12 +3571,12 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
3571
3571
|
index: input.vout,
|
|
3572
3572
|
sequence: lockTime ? btcSigner.DEFAULT_SEQUENCE - 1 : void 0,
|
|
3573
3573
|
witnessUtxo: {
|
|
3574
|
-
script:
|
|
3574
|
+
script: chunkNMDISCGW_cjs.VtxoScript.decode(input.tapTree).pkScript,
|
|
3575
3575
|
amount: BigInt(input.value)
|
|
3576
3576
|
},
|
|
3577
3577
|
tapLeafScript: [input.tapLeafScript]
|
|
3578
3578
|
});
|
|
3579
|
-
|
|
3579
|
+
chunkNMDISCGW_cjs.setArkPsbtField(tx, i, chunkNMDISCGW_cjs.VtxoTaprootTree, input.tapTree);
|
|
3580
3580
|
}
|
|
3581
3581
|
for (const output of outputs) {
|
|
3582
3582
|
tx.addOutput(output);
|
|
@@ -3587,8 +3587,8 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
3587
3587
|
return tx;
|
|
3588
3588
|
}
|
|
3589
3589
|
function buildCheckpointTx(vtxo, serverUnrollScript) {
|
|
3590
|
-
const collaborativeClosure =
|
|
3591
|
-
const checkpointVtxoScript = new
|
|
3590
|
+
const collaborativeClosure = chunkNMDISCGW_cjs.decodeTapscript(chunkNMDISCGW_cjs.scriptFromTapLeafScript(vtxo.tapLeafScript));
|
|
3591
|
+
const checkpointVtxoScript = new chunkNMDISCGW_cjs.VtxoScript([
|
|
3592
3592
|
serverUnrollScript.script,
|
|
3593
3593
|
collaborativeClosure.script
|
|
3594
3594
|
]);
|
|
@@ -3664,7 +3664,7 @@ function verifyTapscriptSignatures(tx, inputIndex, requiredSigners, excludePubke
|
|
|
3664
3664
|
const sighashType = signature.length === 65 ? signature[64] : btcSigner.SigHash.DEFAULT;
|
|
3665
3665
|
const sig = signature.subarray(0, 64);
|
|
3666
3666
|
if (!allowedSighashTypes.includes(sighashType)) {
|
|
3667
|
-
const sighashName =
|
|
3667
|
+
const sighashName = chunkNMDISCGW_cjs.formatSighash(sighashType);
|
|
3668
3668
|
throw new Error(
|
|
3669
3669
|
`Unallowed sighash type ${sighashName} for input ${inputIndex}, pubkey ${pubKeyHex}.`
|
|
3670
3670
|
);
|
|
@@ -3738,7 +3738,7 @@ function combineTapscriptSigs(signedTx, originalTx) {
|
|
|
3738
3738
|
}
|
|
3739
3739
|
function isValidArkAddress(address) {
|
|
3740
3740
|
try {
|
|
3741
|
-
|
|
3741
|
+
chunkNMDISCGW_cjs.ArkAddress.decode(address);
|
|
3742
3742
|
return true;
|
|
3743
3743
|
} catch (e) {
|
|
3744
3744
|
return false;
|
|
@@ -3746,16 +3746,16 @@ function isValidArkAddress(address) {
|
|
|
3746
3746
|
}
|
|
3747
3747
|
function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, context) {
|
|
3748
3748
|
if (serverCheckpointTxs.length !== expectedCheckpoints.length) {
|
|
3749
|
-
throw new
|
|
3749
|
+
throw new chunkNMDISCGW_cjs.ServerResponseMismatchError(
|
|
3750
3750
|
`${context} returned ${serverCheckpointTxs.length} checkpoints, expected ${expectedCheckpoints.length}`
|
|
3751
3751
|
);
|
|
3752
3752
|
}
|
|
3753
3753
|
const byTxid = new Map(expectedCheckpoints.map((c) => [c.id, c]));
|
|
3754
3754
|
return serverCheckpointTxs.map((encoded, index) => {
|
|
3755
|
-
const server =
|
|
3755
|
+
const server = chunkNMDISCGW_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
|
|
3756
3756
|
const local = byTxid.get(server.id);
|
|
3757
3757
|
if (!local) {
|
|
3758
|
-
throw new
|
|
3758
|
+
throw new chunkNMDISCGW_cjs.ServerResponseMismatchError(
|
|
3759
3759
|
`${context} checkpoint ${index} txid ${server.id} does not match any submitted checkpoint`
|
|
3760
3760
|
);
|
|
3761
3761
|
}
|
|
@@ -3765,14 +3765,14 @@ function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, contex
|
|
|
3765
3765
|
}
|
|
3766
3766
|
function assertSubmittedArkTxid(response, signedArkTx, context) {
|
|
3767
3767
|
if (response.arkTxid !== signedArkTx.id) {
|
|
3768
|
-
throw new
|
|
3768
|
+
throw new chunkNMDISCGW_cjs.ServerResponseMismatchError(
|
|
3769
3769
|
`${context} returned ark txid ${response.arkTxid}, expected ${signedArkTx.id}`
|
|
3770
3770
|
);
|
|
3771
3771
|
}
|
|
3772
3772
|
if (response.finalArkTx === void 0) return;
|
|
3773
|
-
const finalTxid =
|
|
3773
|
+
const finalTxid = chunkNMDISCGW_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx)).id;
|
|
3774
3774
|
if (finalTxid !== signedArkTx.id) {
|
|
3775
|
-
throw new
|
|
3775
|
+
throw new chunkNMDISCGW_cjs.ServerResponseMismatchError(
|
|
3776
3776
|
`${context} returned final ark tx ${finalTxid}, expected ${signedArkTx.id}`
|
|
3777
3777
|
);
|
|
3778
3778
|
}
|
|
@@ -3784,20 +3784,20 @@ function assertServerSignedLeaf(serverTx, localTx, inputIndex, serverPubkeys, co
|
|
|
3784
3784
|
`${context}: input ${inputIndex} carries no spend leaf to verify the server signature against`
|
|
3785
3785
|
);
|
|
3786
3786
|
}
|
|
3787
|
-
const script =
|
|
3787
|
+
const script = chunkNMDISCGW_cjs.scriptFromTapLeafScript(leaf);
|
|
3788
3788
|
let leafPubkeys;
|
|
3789
3789
|
try {
|
|
3790
|
-
leafPubkeys =
|
|
3791
|
-
(key) => base.hex.encode(
|
|
3790
|
+
leafPubkeys = chunkNMDISCGW_cjs.decodeTapscript(script).params.pubkeys.map(
|
|
3791
|
+
(key) => base.hex.encode(chunkM4DM3N6F_cjs.toXOnly(key, "leaf key"))
|
|
3792
3792
|
);
|
|
3793
3793
|
} catch (error) {
|
|
3794
|
-
throw new
|
|
3794
|
+
throw new chunkNMDISCGW_cjs.ServerResponseMismatchError(
|
|
3795
3795
|
`${context}: input ${inputIndex} spend leaf cannot be decoded (${error instanceof Error ? error.message : String(error)})`
|
|
3796
3796
|
);
|
|
3797
3797
|
}
|
|
3798
3798
|
const signer = leafPubkeys.find((key) => serverPubkeys.has(key));
|
|
3799
3799
|
if (!signer) {
|
|
3800
|
-
throw new
|
|
3800
|
+
throw new chunkNMDISCGW_cjs.ServerResponseMismatchError(
|
|
3801
3801
|
`${context}: input ${inputIndex} spend leaf names no signer key the server advertises`
|
|
3802
3802
|
);
|
|
3803
3803
|
}
|
|
@@ -3811,7 +3811,7 @@ function assertServerSignedLeaf(serverTx, localTx, inputIndex, serverPubkeys, co
|
|
|
3811
3811
|
payment_js.tapLeafHash(script)
|
|
3812
3812
|
);
|
|
3813
3813
|
} catch (error) {
|
|
3814
|
-
throw new
|
|
3814
|
+
throw new chunkNMDISCGW_cjs.ServerResponseMismatchError(
|
|
3815
3815
|
`${context}: input ${inputIndex} is not signed by the server on the leaf being spent (${error instanceof Error ? error.message : String(error)})`
|
|
3816
3816
|
);
|
|
3817
3817
|
}
|
|
@@ -3820,20 +3820,20 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
|
|
|
3820
3820
|
const byOutpoint = new Map(inputs.map((input) => [`${input.txid}:${input.vout}`, input]));
|
|
3821
3821
|
for (const [index, checkpoint] of checkpoints.entries()) {
|
|
3822
3822
|
if (checkpoint.inputsLength !== 1) {
|
|
3823
|
-
throw new
|
|
3823
|
+
throw new chunkNMDISCGW_cjs.ServerResponseMismatchError(
|
|
3824
3824
|
`${context}: checkpoint ${index} spends ${checkpoint.inputsLength} inputs, expected 1`
|
|
3825
3825
|
);
|
|
3826
3826
|
}
|
|
3827
3827
|
const spent = checkpoint.getInput(0);
|
|
3828
3828
|
if (!spent.txid || spent.index === void 0) {
|
|
3829
|
-
throw new
|
|
3829
|
+
throw new chunkNMDISCGW_cjs.ServerResponseMismatchError(
|
|
3830
3830
|
`${context}: checkpoint ${index} has no input outpoint`
|
|
3831
3831
|
);
|
|
3832
3832
|
}
|
|
3833
3833
|
const outpoint = `${base.hex.encode(spent.txid)}:${spent.index}`;
|
|
3834
3834
|
const input = byOutpoint.get(outpoint);
|
|
3835
3835
|
if (!input) {
|
|
3836
|
-
throw new
|
|
3836
|
+
throw new chunkNMDISCGW_cjs.ServerResponseMismatchError(
|
|
3837
3837
|
`${context}: checkpoint ${index} spends ${outpoint}, which is not one of the requested virtual outputs`
|
|
3838
3838
|
);
|
|
3839
3839
|
}
|
|
@@ -3841,7 +3841,7 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
|
|
|
3841
3841
|
(unroll) => buildCheckpointTx(input, unroll).tx.id === checkpoint.id
|
|
3842
3842
|
);
|
|
3843
3843
|
if (!rebuilt) {
|
|
3844
|
-
throw new
|
|
3844
|
+
throw new chunkNMDISCGW_cjs.ServerResponseMismatchError(
|
|
3845
3845
|
`${context}: checkpoint ${index} txid ${checkpoint.id} differs from the checkpoint built locally for ${outpoint}`
|
|
3846
3846
|
);
|
|
3847
3847
|
}
|
|
@@ -3867,9 +3867,9 @@ async function submitOffchainTx(provider, offchainTx, signer, hooks, options) {
|
|
|
3867
3867
|
const matched = matchServerCheckpoints(signedCheckpointTxs, offchainTx.checkpoints, "submitTx");
|
|
3868
3868
|
matched.forEach(({ server }, index) => {
|
|
3869
3869
|
try {
|
|
3870
|
-
|
|
3870
|
+
chunkNMDISCGW_cjs.assertAllowedSighashTypes(server);
|
|
3871
3871
|
} catch (error) {
|
|
3872
|
-
throw new
|
|
3872
|
+
throw new chunkNMDISCGW_cjs.ServerResponseMismatchError(
|
|
3873
3873
|
`submitTx checkpoint ${index}: ${error instanceof Error ? error.message : String(error)}`
|
|
3874
3874
|
);
|
|
3875
3875
|
}
|
|
@@ -3877,14 +3877,14 @@ async function submitOffchainTx(provider, offchainTx, signer, hooks, options) {
|
|
|
3877
3877
|
const verify = options?.verifyServerSignatures;
|
|
3878
3878
|
if (verify) {
|
|
3879
3879
|
if (response.finalArkTx === void 0) {
|
|
3880
|
-
throw new
|
|
3880
|
+
throw new chunkNMDISCGW_cjs.ServerResponseMismatchError(
|
|
3881
3881
|
"submitTx: server returned no final ark tx to verify its signatures against"
|
|
3882
3882
|
);
|
|
3883
3883
|
}
|
|
3884
|
-
const finalArkTx =
|
|
3884
|
+
const finalArkTx = chunkNMDISCGW_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx));
|
|
3885
3885
|
const serverPubkeys = new Set(
|
|
3886
3886
|
[verify.serverPubkey, ...verify.deprecatedServerPubkeys ?? []].map(
|
|
3887
|
-
(key) => base.hex.encode(
|
|
3887
|
+
(key) => base.hex.encode(chunkM4DM3N6F_cjs.toXOnly(key, "server key"))
|
|
3888
3888
|
)
|
|
3889
3889
|
);
|
|
3890
3890
|
for (let i = 0; i < offchainTx.arkTx.inputsLength; i++) {
|
|
@@ -3948,7 +3948,7 @@ async function submitViaEmulator(emulator, offchainTx, signer, opts) {
|
|
|
3948
3948
|
base.base64.encode(arkTx.toPSBT()),
|
|
3949
3949
|
checkpoints.map((c) => base.base64.encode(c.toPSBT()))
|
|
3950
3950
|
);
|
|
3951
|
-
const txid =
|
|
3951
|
+
const txid = chunkNMDISCGW_cjs.Transaction.fromPSBT(base.base64.decode(res.signedArkTx)).id;
|
|
3952
3952
|
assertSubmittedArkTxid({ arkTxid: txid }, arkTx, "emulator submitTx");
|
|
3953
3953
|
return { txid, signedArkTx: res.signedArkTx, signedCheckpointTxs: res.signedCheckpointTxs };
|
|
3954
3954
|
}
|
|
@@ -3956,12 +3956,12 @@ function claimWithPreimageIdentity(identity, preimage) {
|
|
|
3956
3956
|
return {
|
|
3957
3957
|
...identity,
|
|
3958
3958
|
sign: async (tx, inputIndexes) => {
|
|
3959
|
-
const signed =
|
|
3959
|
+
const signed = chunkNMDISCGW_cjs.Transaction.fromPSBT(
|
|
3960
3960
|
(await identity.sign(tx.clone(), inputIndexes)).toPSBT()
|
|
3961
3961
|
);
|
|
3962
3962
|
const indexes = inputIndexes ?? Array.from({ length: signed.inputsLength }, (_, i) => i);
|
|
3963
3963
|
for (const index of indexes) {
|
|
3964
|
-
|
|
3964
|
+
chunkNMDISCGW_cjs.setArkPsbtField(signed, index, chunkNMDISCGW_cjs.ConditionWitness, [preimage]);
|
|
3965
3965
|
}
|
|
3966
3966
|
return signed;
|
|
3967
3967
|
}
|
|
@@ -4144,7 +4144,7 @@ function extendCoinWithTapscript(boardingTapscript, utxo) {
|
|
|
4144
4144
|
};
|
|
4145
4145
|
}
|
|
4146
4146
|
function deriveContractTapscripts(contract) {
|
|
4147
|
-
const handler =
|
|
4147
|
+
const handler = chunkM4DM3N6F_cjs.contractHandlers.get(contract.type);
|
|
4148
4148
|
if (!handler) {
|
|
4149
4149
|
throw new Error(`No handler for contract type '${contract.type}'`);
|
|
4150
4150
|
}
|
|
@@ -4247,7 +4247,7 @@ function assertRecipientArkadeAddress(encoded, address, context) {
|
|
|
4247
4247
|
function assertTapTreeDerivesAddress(encoded, tapTree, address) {
|
|
4248
4248
|
let derived;
|
|
4249
4249
|
try {
|
|
4250
|
-
derived =
|
|
4250
|
+
derived = chunkNMDISCGW_cjs.VtxoScript.decode(tapTree).pkScript;
|
|
4251
4251
|
} catch (e) {
|
|
4252
4252
|
throw new Error(
|
|
4253
4253
|
`Invalid tapTree for ${encoded}: ${e instanceof Error ? e.message : String(e)}`
|
|
@@ -4264,7 +4264,7 @@ function validateRecipients(recipients, dustAmount, context) {
|
|
|
4264
4264
|
for (const recipient of recipients) {
|
|
4265
4265
|
let address;
|
|
4266
4266
|
try {
|
|
4267
|
-
address =
|
|
4267
|
+
address = chunkNMDISCGW_cjs.ArkAddress.decode(recipient.address);
|
|
4268
4268
|
} catch (e) {
|
|
4269
4269
|
throw new Error(`Invalid Arkade address: ${recipient.address}`);
|
|
4270
4270
|
}
|
|
@@ -4289,7 +4289,7 @@ function validateRecipients(recipients, dustAmount, context) {
|
|
|
4289
4289
|
|
|
4290
4290
|
// src/contracts/spendability.ts
|
|
4291
4291
|
function isContractGenericallySpendable(contract) {
|
|
4292
|
-
return
|
|
4292
|
+
return chunkM4DM3N6F_cjs.contractHandlers.get(contract.type)?.isGenericallySpendable?.(contract) === true;
|
|
4293
4293
|
}
|
|
4294
4294
|
function gatedContracts(contracts) {
|
|
4295
4295
|
const gated = /* @__PURE__ */ new Map();
|
|
@@ -4311,7 +4311,7 @@ function gateExclusion(gated) {
|
|
|
4311
4311
|
return (vtxo) => {
|
|
4312
4312
|
const type = gatedTypeOf(vtxo, gated);
|
|
4313
4313
|
if (type === void 0) return void 0;
|
|
4314
|
-
if (!
|
|
4314
|
+
if (!chunkM4DM3N6F_cjs.contractHandlers.has(type)) {
|
|
4315
4315
|
return `at ${vtxo.script} (contract type '${type}') has no handler registered in this build`;
|
|
4316
4316
|
}
|
|
4317
4317
|
return `at ${vtxo.script} (contract type '${type}') is not generically spendable`;
|
|
@@ -4347,7 +4347,7 @@ function selectPendingRecoveryOutpoints(contractsWithVtxos, signerSet, nowSecond
|
|
|
4347
4347
|
continue;
|
|
4348
4348
|
}
|
|
4349
4349
|
for (const v of vtxos) {
|
|
4350
|
-
if (!
|
|
4350
|
+
if (!chunkNMDISCGW_cjs.isVtxoSpent(v) && !v.isSwept && !v.isUnrolled) {
|
|
4351
4351
|
out.add(`${v.txid}:${v.vout}`);
|
|
4352
4352
|
}
|
|
4353
4353
|
}
|
|
@@ -4383,14 +4383,14 @@ function byValueDescending(vtxos) {
|
|
|
4383
4383
|
return [...vtxos].sort((a, b) => b.value - a.value);
|
|
4384
4384
|
}
|
|
4385
4385
|
async function fetchTimeHeight(wallet) {
|
|
4386
|
-
return
|
|
4386
|
+
return chunkNMDISCGW_cjs.resolveTimeHeight(wallet.onchainProvider);
|
|
4387
4387
|
}
|
|
4388
4388
|
function heldVtxosOf(wallet) {
|
|
4389
4389
|
const held = wallet.getHeldVtxos;
|
|
4390
4390
|
return typeof held === "function" ? held.call(wallet) : Promise.resolve([]);
|
|
4391
4391
|
}
|
|
4392
4392
|
function canMigrateBySend(vtxo, now) {
|
|
4393
|
-
if (!
|
|
4393
|
+
if (!chunkNMDISCGW_cjs.canSpendOffchain(vtxo, now)) return false;
|
|
4394
4394
|
return vtxo.expiresAt !== void 0 || vtxo.expiresAtHeight !== void 0;
|
|
4395
4395
|
}
|
|
4396
4396
|
function byExpiryAscending(vtxos, now) {
|
|
@@ -4398,7 +4398,7 @@ function byExpiryAscending(vtxos, now) {
|
|
|
4398
4398
|
if (vtxo.isSwept) return -Infinity;
|
|
4399
4399
|
if (vtxo.expiresAt !== void 0) return vtxo.expiresAt.getTime();
|
|
4400
4400
|
if (vtxo.expiresAtHeight !== void 0) {
|
|
4401
|
-
return
|
|
4401
|
+
return chunkNMDISCGW_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
|
|
4402
4402
|
}
|
|
4403
4403
|
return Infinity;
|
|
4404
4404
|
};
|
|
@@ -4425,7 +4425,7 @@ function priceSettlementInputs(vtxos, estimator) {
|
|
|
4425
4425
|
const payable = [];
|
|
4426
4426
|
const net = /* @__PURE__ */ new Map();
|
|
4427
4427
|
for (const vtxo of vtxos) {
|
|
4428
|
-
const inputFee = estimator.evalOffchainInput(
|
|
4428
|
+
const inputFee = estimator.evalOffchainInput(chunkNMDISCGW_cjs.toOffchainInputFeeParams(vtxo));
|
|
4429
4429
|
if (inputFee.satoshis >= vtxo.value) {
|
|
4430
4430
|
continue;
|
|
4431
4431
|
}
|
|
@@ -4454,7 +4454,7 @@ function offchainOutputFee(amount, estimator, arkAddress) {
|
|
|
4454
4454
|
}
|
|
4455
4455
|
const outputFee = estimator.evalOffchainOutput({
|
|
4456
4456
|
amount,
|
|
4457
|
-
script: base.hex.encode(
|
|
4457
|
+
script: base.hex.encode(chunkNMDISCGW_cjs.ArkAddress.decode(arkAddress).pkScript)
|
|
4458
4458
|
});
|
|
4459
4459
|
return BigInt(outputFee.satoshis);
|
|
4460
4460
|
}
|
|
@@ -4505,10 +4505,10 @@ var DEFAULT_SETTLEMENT_CONFIG = {
|
|
|
4505
4505
|
};
|
|
4506
4506
|
function getRecoverableVtxos(vtxos, dustAmount, now) {
|
|
4507
4507
|
return vtxos.filter((vtxo) => {
|
|
4508
|
-
if (
|
|
4508
|
+
if (chunkNMDISCGW_cjs.canRecoverOnchain(vtxo, now)) {
|
|
4509
4509
|
return true;
|
|
4510
4510
|
}
|
|
4511
|
-
if (
|
|
4511
|
+
if (chunkNMDISCGW_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
|
|
4512
4512
|
return true;
|
|
4513
4513
|
}
|
|
4514
4514
|
return false;
|
|
@@ -4540,7 +4540,7 @@ function getRecoverableWithSubdust(vtxos, dustAmount, now) {
|
|
|
4540
4540
|
function isVtxoExpiringSoon(vtxo, thresholdMs) {
|
|
4541
4541
|
if (vtxo.isUnrolled) return false;
|
|
4542
4542
|
const realThresholdMs = thresholdMs <= 100 ? DEFAULT_THRESHOLD_MS : thresholdMs;
|
|
4543
|
-
const expiresAt =
|
|
4543
|
+
const expiresAt = chunkNMDISCGW_cjs.normalizeVtxo(vtxo).expiresAt;
|
|
4544
4544
|
if (expiresAt === void 0) return false;
|
|
4545
4545
|
const now = Date.now();
|
|
4546
4546
|
const batchExpiry = expiresAt.getTime();
|
|
@@ -4551,7 +4551,7 @@ function getExpiringAndRecoverableVtxos(vtxos, thresholdMs, dustAmount, now) {
|
|
|
4551
4551
|
return vtxos.filter(
|
|
4552
4552
|
// The leading exclusion covers the `isSubdust` arm too, which is a value
|
|
4553
4553
|
// property and would otherwise re-admit an exited coin on its own.
|
|
4554
|
-
(vtxo) => !vtxo.isUnrolled && (isVtxoExpiringSoon(vtxo, thresholdMs) ||
|
|
4554
|
+
(vtxo) => !vtxo.isUnrolled && (isVtxoExpiringSoon(vtxo, thresholdMs) || chunkNMDISCGW_cjs.canRecoverOnchain(vtxo, now) || isSubdust(vtxo, dustAmount))
|
|
4555
4555
|
);
|
|
4556
4556
|
}
|
|
4557
4557
|
function isMigrationCapable(wallet) {
|
|
@@ -4611,7 +4611,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4611
4611
|
constructor(wallet, settlementConfig) {
|
|
4612
4612
|
this.wallet = wallet;
|
|
4613
4613
|
if (settlementConfig !== false) {
|
|
4614
|
-
|
|
4614
|
+
chunkNMDISCGW_cjs.assertTimerMs("pollIntervalMs", settlementConfig?.pollIntervalMs);
|
|
4615
4615
|
}
|
|
4616
4616
|
this.settlementConfig = settlementConfig !== void 0 ? settlementConfig : { ...DEFAULT_SETTLEMENT_CONFIG };
|
|
4617
4617
|
this.contractEventsSubscriptionReady = this.initializeSubscription();
|
|
@@ -4918,7 +4918,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4918
4918
|
* {@link recoverImportedContracts}).
|
|
4919
4919
|
*/
|
|
4920
4920
|
async recoverOneImportedContract(wallet, contract, vtxos, info, dustAmount) {
|
|
4921
|
-
const recoverable = vtxos.filter((vtxo) => vtxo.isSwept && !
|
|
4921
|
+
const recoverable = vtxos.filter((vtxo) => vtxo.isSwept && !chunkNMDISCGW_cjs.isVtxoSpent(vtxo));
|
|
4922
4922
|
const estimator = new Estimator(info?.fees.intentFee ?? {});
|
|
4923
4923
|
const { payable, net } = priceSettlementInputs(recoverable, estimator);
|
|
4924
4924
|
const vtxoMaxAmount = info?.vtxoMaxAmount ?? -1n;
|
|
@@ -4940,7 +4940,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4940
4940
|
if (vtxos.length === 0) return;
|
|
4941
4941
|
const spent = new Set(batch.map((vtxo) => `${vtxo.txid}:${vtxo.vout}`));
|
|
4942
4942
|
const stillSpendable = vtxos.some(
|
|
4943
|
-
(vtxo) => !
|
|
4943
|
+
(vtxo) => !chunkNMDISCGW_cjs.isVtxoSpent(vtxo) && !spent.has(`${vtxo.txid}:${vtxo.vout}`)
|
|
4944
4944
|
);
|
|
4945
4945
|
if (!stillSpendable) {
|
|
4946
4946
|
await wallet.removeRecoveryContract(contract.script);
|
|
@@ -5232,11 +5232,11 @@ var VtxoManager = class _VtxoManager {
|
|
|
5232
5232
|
`Sweep not economical: output ${outputAmount} sats after ${fee} sats fee is below dust (${dustAmount} sats)`
|
|
5233
5233
|
);
|
|
5234
5234
|
}
|
|
5235
|
-
const tx = new
|
|
5235
|
+
const tx = new chunkNMDISCGW_cjs.Transaction();
|
|
5236
5236
|
for (const utxo of expiredUtxos) {
|
|
5237
|
-
const utxoScript =
|
|
5237
|
+
const utxoScript = chunkNMDISCGW_cjs.VtxoScript.decode(utxo.tapTree);
|
|
5238
5238
|
const utxoExitLeaf = utxoScript.leaves.find(
|
|
5239
|
-
(leaf) =>
|
|
5239
|
+
(leaf) => chunkNMDISCGW_cjs.CSVMultisigTapscript.isScriptValid(chunkNMDISCGW_cjs.scriptFromTapLeafScript(leaf)) === true
|
|
5240
5240
|
);
|
|
5241
5241
|
if (!utxoExitLeaf) {
|
|
5242
5242
|
throw new Error(
|
|
@@ -5251,7 +5251,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5251
5251
|
amount: BigInt(utxo.value)
|
|
5252
5252
|
},
|
|
5253
5253
|
tapLeafScript: [utxoExitLeaf],
|
|
5254
|
-
sequence:
|
|
5254
|
+
sequence: chunkNMDISCGW_cjs.getSequence(utxoExitLeaf)
|
|
5255
5255
|
});
|
|
5256
5256
|
}
|
|
5257
5257
|
tx.addOutputAddress(boardingAddress, outputAmount, this.getNetwork());
|
|
@@ -5477,8 +5477,8 @@ var VtxoManager = class _VtxoManager {
|
|
|
5477
5477
|
const cls = classifyAgainstSignerSet(serverPubKey, signerSet, nowSeconds);
|
|
5478
5478
|
if (cls.status === "CURRENT") continue;
|
|
5479
5479
|
const live = vtxos.filter((v) => !v.isUnrolled);
|
|
5480
|
-
const recoverable = live.filter((v) => v.isSwept && !
|
|
5481
|
-
const spendable = live.filter((v) => !
|
|
5480
|
+
const recoverable = live.filter((v) => v.isSwept && !chunkNMDISCGW_cjs.isVtxoSpent(v));
|
|
5481
|
+
const spendable = live.filter((v) => !chunkNMDISCGW_cjs.isVtxoSpent(v) && !v.isSwept);
|
|
5482
5482
|
const value = spendable.reduce((sum, v) => sum + v.value, 0);
|
|
5483
5483
|
let recoverableCount = 0;
|
|
5484
5484
|
let recoverableValue = 0;
|
|
@@ -5718,7 +5718,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5718
5718
|
}
|
|
5719
5719
|
getBoardingTimelock() {
|
|
5720
5720
|
const wallet = this.getSweepWallet();
|
|
5721
|
-
const exitScript =
|
|
5721
|
+
const exitScript = chunkNMDISCGW_cjs.CSVMultisigTapscript.decode(
|
|
5722
5722
|
base.hex.decode(wallet.boardingTapscript.exitScript)
|
|
5723
5723
|
);
|
|
5724
5724
|
return exitScript.params.timelock;
|
|
@@ -5826,8 +5826,8 @@ var VtxoManager = class _VtxoManager {
|
|
|
5826
5826
|
}
|
|
5827
5827
|
/** The outpoint a `VTXO_ALREADY_SPENT` error carries in `metadata.vtxo_outpoint`, if any. */
|
|
5828
5828
|
extractSpentOutpoint(error) {
|
|
5829
|
-
const ark =
|
|
5830
|
-
if (!
|
|
5829
|
+
const ark = chunkNMDISCGW_cjs.maybeArkError(error);
|
|
5830
|
+
if (!chunkNMDISCGW_cjs.isArkError(ark, chunkNMDISCGW_cjs.ArkErrorName.VTXO_ALREADY_SPENT)) return void 0;
|
|
5831
5831
|
const raw = ark.metadata?.vtxo_outpoint;
|
|
5832
5832
|
if (typeof raw !== "string") return void 0;
|
|
5833
5833
|
const [txid, voutStr] = raw.split(":");
|
|
@@ -6001,7 +6001,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
6001
6001
|
if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
|
|
6002
6002
|
break;
|
|
6003
6003
|
}
|
|
6004
|
-
const inputFee = estimator.evalOffchainInput(
|
|
6004
|
+
const inputFee = estimator.evalOffchainInput(chunkNMDISCGW_cjs.toOffchainInputFeeParams(v));
|
|
6005
6005
|
if (inputFee.satoshis >= v.value) {
|
|
6006
6006
|
continue;
|
|
6007
6007
|
}
|
|
@@ -6021,7 +6021,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
6021
6021
|
const arkAddress = await this.wallet.getAddress();
|
|
6022
6022
|
const outputFee = estimator.evalOffchainOutput({
|
|
6023
6023
|
amount: totalAmount,
|
|
6024
|
-
script: base.hex.encode(
|
|
6024
|
+
script: base.hex.encode(chunkNMDISCGW_cjs.ArkAddress.decode(arkAddress).pkScript)
|
|
6025
6025
|
});
|
|
6026
6026
|
totalAmount -= BigInt(outputFee.satoshis);
|
|
6027
6027
|
if (totalAmount < dustAmount) return;
|
|
@@ -6105,7 +6105,7 @@ var ArkNote = class _ArkNote {
|
|
|
6105
6105
|
this.value = value;
|
|
6106
6106
|
this.HRP = HRP;
|
|
6107
6107
|
const preimageHash = utils_js.sha256(this.preimage);
|
|
6108
|
-
this.vtxoScript = new
|
|
6108
|
+
this.vtxoScript = new chunkNMDISCGW_cjs.VtxoScript([noteTapscript(preimageHash)]);
|
|
6109
6109
|
const leaf = this.vtxoScript.leaves[0];
|
|
6110
6110
|
this.txid = base.hex.encode(new Uint8Array(preimageHash).reverse());
|
|
6111
6111
|
this.tapTree = this.vtxoScript.encode();
|
|
@@ -6278,7 +6278,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
6278
6278
|
const privateKey = data.slice(1, 33);
|
|
6279
6279
|
const serverPubKey = data.slice(33, 65);
|
|
6280
6280
|
const sequence = new DataView(data.buffer, data.byteOffset + 65, 4).getUint32(0, false);
|
|
6281
|
-
const csvTimelock2 =
|
|
6281
|
+
const csvTimelock2 = chunkNMDISCGW_cjs.sequenceToTimelock(sequence);
|
|
6282
6282
|
return new _ArkadeCash(privateKey, serverPubKey, csvTimelock2, decoded.prefix);
|
|
6283
6283
|
}
|
|
6284
6284
|
toString() {
|
|
@@ -6286,7 +6286,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
6286
6286
|
data[0] = _ArkadeCash.Version;
|
|
6287
6287
|
data.set(this._privateKey, 1);
|
|
6288
6288
|
data.set(this._serverPubKey, 33);
|
|
6289
|
-
const sequence =
|
|
6289
|
+
const sequence = chunkNMDISCGW_cjs.timelockToSequence(this.csvTimelock);
|
|
6290
6290
|
new DataView(data.buffer, data.byteOffset + 65, 4).setUint32(0, sequence, false);
|
|
6291
6291
|
const words = base.bech32m.toWords(data);
|
|
6292
6292
|
return base.bech32m.encode(this.hrp, words, 1023);
|
|
@@ -6295,7 +6295,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
6295
6295
|
return SingleKey.fromPrivateKey(this._privateKey);
|
|
6296
6296
|
}
|
|
6297
6297
|
get vtxoScript() {
|
|
6298
|
-
return new
|
|
6298
|
+
return new chunkM4DM3N6F_cjs.DefaultVtxo.Script({
|
|
6299
6299
|
pubKey: this._publicKey,
|
|
6300
6300
|
serverPubKey: this._serverPubKey,
|
|
6301
6301
|
csvTimelock: this.csvTimelock
|
|
@@ -6311,7 +6311,7 @@ var NON_TERMINAL_INTENT_STATES = ALL_INTENT_STATES.filter(
|
|
|
6311
6311
|
(s) => !isTerminalIntentState(s)
|
|
6312
6312
|
);
|
|
6313
6313
|
function isConsumed(vtxo) {
|
|
6314
|
-
return vtxo !== void 0 &&
|
|
6314
|
+
return vtxo !== void 0 && chunkNMDISCGW_cjs.isVtxoSpent(vtxo);
|
|
6315
6315
|
}
|
|
6316
6316
|
async function classifyIntent(intent, vtxosByOutpoint, now) {
|
|
6317
6317
|
if (isTerminalIntentState(intent.state)) return void 0;
|
|
@@ -6354,7 +6354,7 @@ async function reconcileIntents(deps) {
|
|
|
6354
6354
|
let vtxosByOutpoint = /* @__PURE__ */ new Map();
|
|
6355
6355
|
if (outpoints.length > 0) {
|
|
6356
6356
|
try {
|
|
6357
|
-
const { vtxos } = await
|
|
6357
|
+
const { vtxos } = await chunkNMDISCGW_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
|
|
6358
6358
|
vtxosByOutpoint = new Map(vtxos.map((v) => [outpointKey(v), v]));
|
|
6359
6359
|
} catch (e) {
|
|
6360
6360
|
console.error("reconcileIntents: failed to fetch input VTXO state", e);
|
|
@@ -6414,7 +6414,7 @@ async function releaseFromServer(intent, deps, now) {
|
|
|
6414
6414
|
});
|
|
6415
6415
|
}
|
|
6416
6416
|
function isNoMatchingIntentsError(e) {
|
|
6417
|
-
return
|
|
6417
|
+
return chunkNMDISCGW_cjs.isArkError(e, chunkNMDISCGW_cjs.ArkErrorName.INVALID_INTENT_PROOF) && e.message.includes("no matching intents found");
|
|
6418
6418
|
}
|
|
6419
6419
|
function terminal(intent, state, now, patch) {
|
|
6420
6420
|
return { ...intent, ...patch, state, updatedAt: now };
|
|
@@ -6633,7 +6633,7 @@ async function captureExitBranch(params) {
|
|
|
6633
6633
|
const nonCommitment = ordered.filter((c) => chainTxTypeToChainedExit(c.type) !== 1 /* Commitment */).map((c) => c.txid);
|
|
6634
6634
|
if (nonCommitment.length > 0) {
|
|
6635
6635
|
for (const psbt of await resolver.getVirtualTxs(nonCommitment)) {
|
|
6636
|
-
psbtByTxid.set(
|
|
6636
|
+
psbtByTxid.set(chunkNMDISCGW_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
6637
6637
|
}
|
|
6638
6638
|
}
|
|
6639
6639
|
}
|
|
@@ -6676,10 +6676,10 @@ var IndexerExitDataSource = class {
|
|
|
6676
6676
|
while (hasMore) {
|
|
6677
6677
|
const { chain: page, page: meta } = await this.indexer.getVtxoChain(
|
|
6678
6678
|
{ txid: vtxo.txid, vout: vtxo.vout },
|
|
6679
|
-
{ pageIndex, pageSize:
|
|
6679
|
+
{ pageIndex, pageSize: chunkNMDISCGW_cjs.DEFAULT_PAGE_SIZE }
|
|
6680
6680
|
);
|
|
6681
6681
|
chain.push(...page);
|
|
6682
|
-
hasMore = meta ? page.length ===
|
|
6682
|
+
hasMore = meta ? page.length === chunkNMDISCGW_cjs.DEFAULT_PAGE_SIZE : false;
|
|
6683
6683
|
pageIndex++;
|
|
6684
6684
|
}
|
|
6685
6685
|
return chain;
|
|
@@ -6691,12 +6691,12 @@ var IndexerExitDataSource = class {
|
|
|
6691
6691
|
while (hasMore) {
|
|
6692
6692
|
const { txs, page } = await this.indexer.getVirtualTxs(txids, {
|
|
6693
6693
|
pageIndex,
|
|
6694
|
-
pageSize:
|
|
6694
|
+
pageSize: chunkNMDISCGW_cjs.DEFAULT_PAGE_SIZE
|
|
6695
6695
|
});
|
|
6696
6696
|
for (const psbt of txs) {
|
|
6697
|
-
out.set(
|
|
6697
|
+
out.set(chunkNMDISCGW_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
6698
6698
|
}
|
|
6699
|
-
hasMore = page ? txs.length ===
|
|
6699
|
+
hasMore = page ? txs.length === chunkNMDISCGW_cjs.DEFAULT_PAGE_SIZE : false;
|
|
6700
6700
|
pageIndex++;
|
|
6701
6701
|
}
|
|
6702
6702
|
return out;
|
|
@@ -6717,7 +6717,7 @@ function chainedTxTypeToChainTxType(t) {
|
|
|
6717
6717
|
}
|
|
6718
6718
|
}
|
|
6719
6719
|
function psbtInputTxids(psbtBase64) {
|
|
6720
|
-
return txInputTxids(
|
|
6720
|
+
return txInputTxids(chunkNMDISCGW_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64)));
|
|
6721
6721
|
}
|
|
6722
6722
|
function txInputTxids(tx) {
|
|
6723
6723
|
const ids = [];
|
|
@@ -7021,10 +7021,10 @@ async function resolveArkInfo(arkProvider, walletRepository, opts) {
|
|
|
7021
7021
|
try {
|
|
7022
7022
|
info = await arkProvider.getInfo();
|
|
7023
7023
|
} catch (err) {
|
|
7024
|
-
if (opts?.requireLive || !
|
|
7024
|
+
if (opts?.requireLive || !chunkNMDISCGW_cjs.isRetryableProviderError(err)) throw err;
|
|
7025
7025
|
const snapshot = await loadArkInfoSnapshot(walletRepository);
|
|
7026
7026
|
if (!snapshot) {
|
|
7027
|
-
throw new
|
|
7027
|
+
throw new chunkNMDISCGW_cjs.ProviderUnavailableError(
|
|
7028
7028
|
"Arkade server info is unavailable and no cached snapshot exists",
|
|
7029
7029
|
{ cause: err }
|
|
7030
7030
|
);
|
|
@@ -7216,7 +7216,7 @@ function buildGraph(rootTxid, chunksByTxid) {
|
|
|
7216
7216
|
return new TxTree(rootTx, children);
|
|
7217
7217
|
}
|
|
7218
7218
|
function decodeNode(chunk) {
|
|
7219
|
-
const tx =
|
|
7219
|
+
const tx = chunkNMDISCGW_cjs.Transaction.fromPSBT(base.base64.decode(chunk.tx));
|
|
7220
7220
|
return { tx, children: chunk.children };
|
|
7221
7221
|
}
|
|
7222
7222
|
exports.Batch = void 0;
|
|
@@ -7419,7 +7419,7 @@ function collectArkTxidsNeedingCreatedAt(vtxos, localCreatedAt) {
|
|
|
7419
7419
|
return [...txids];
|
|
7420
7420
|
}
|
|
7421
7421
|
async function buildTransactionHistory(vtxos, allBoardingTxs, commitmentsToIgnore, resolveTxCreatedAt, gatedScripts = /* @__PURE__ */ new Map()) {
|
|
7422
|
-
const normalized = vtxos.map(
|
|
7422
|
+
const normalized = vtxos.map(chunkNMDISCGW_cjs.normalizeVtxo).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
|
|
7423
7423
|
const localCreatedAt = localCreatedAtByTxid(normalized);
|
|
7424
7424
|
const gatedVtxos = normalized.filter((vtxo) => isGatedVtxo(vtxo, gatedScripts));
|
|
7425
7425
|
const ownVtxos = normalized.filter((vtxo) => !isGatedVtxo(vtxo, gatedScripts));
|
|
@@ -7597,7 +7597,7 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7597
7597
|
withRecoverable: false,
|
|
7598
7598
|
genericallySpendableOnly: true
|
|
7599
7599
|
});
|
|
7600
|
-
const controlAssetRef = params.controlAssetId ?
|
|
7600
|
+
const controlAssetRef = params.controlAssetId ? chunkX2BWPGCY_cjs.AssetRef.fromId(chunkX2BWPGCY_cjs.AssetId.fromString(params.controlAssetId)) : null;
|
|
7601
7601
|
const coinSelection = selectVirtualCoins(virtualCoins, Number(this.wallet.dustAmount));
|
|
7602
7602
|
let totalBtcSelected = 0n;
|
|
7603
7603
|
const assetChanges = /* @__PURE__ */ new Map();
|
|
@@ -7610,8 +7610,8 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7610
7610
|
}
|
|
7611
7611
|
}
|
|
7612
7612
|
const groups = [];
|
|
7613
|
-
const issuedAssetOutput =
|
|
7614
|
-
const issuedAssetGroup =
|
|
7613
|
+
const issuedAssetOutput = chunkX2BWPGCY_cjs.AssetOutput.create(0, params.amount);
|
|
7614
|
+
const issuedAssetGroup = chunkX2BWPGCY_cjs.AssetGroup.create(
|
|
7615
7615
|
null,
|
|
7616
7616
|
controlAssetRef,
|
|
7617
7617
|
[],
|
|
@@ -7624,11 +7624,11 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7624
7624
|
for (const [assetId, amount] of assetChanges) {
|
|
7625
7625
|
const changeInputs = inputsForAsset(assetInputs, assetId);
|
|
7626
7626
|
groups.push(
|
|
7627
|
-
|
|
7628
|
-
|
|
7627
|
+
chunkX2BWPGCY_cjs.AssetGroup.create(
|
|
7628
|
+
chunkX2BWPGCY_cjs.AssetId.fromString(assetId),
|
|
7629
7629
|
null,
|
|
7630
7630
|
changeInputs,
|
|
7631
|
-
[
|
|
7631
|
+
[chunkX2BWPGCY_cjs.AssetOutput.create(0, amount)],
|
|
7632
7632
|
[]
|
|
7633
7633
|
)
|
|
7634
7634
|
);
|
|
@@ -7643,7 +7643,7 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7643
7643
|
);
|
|
7644
7644
|
return {
|
|
7645
7645
|
arkTxId: arkTxid,
|
|
7646
|
-
assetId:
|
|
7646
|
+
assetId: chunkX2BWPGCY_cjs.AssetId.create(arkTxid, 0).toString()
|
|
7647
7647
|
};
|
|
7648
7648
|
}
|
|
7649
7649
|
/**
|
|
@@ -7717,23 +7717,23 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7717
7717
|
const assetInputs = selectedCoinsToAssetInputs(selectedCoins);
|
|
7718
7718
|
const reissueInputs = inputsForAsset(assetInputs, params.assetId);
|
|
7719
7719
|
const totalAssetAmount = assetToReissueAmount + params.amount;
|
|
7720
|
-
const reissueAssetIdObj =
|
|
7721
|
-
const reissueAssetGroup =
|
|
7720
|
+
const reissueAssetIdObj = chunkX2BWPGCY_cjs.AssetId.fromString(params.assetId);
|
|
7721
|
+
const reissueAssetGroup = chunkX2BWPGCY_cjs.AssetGroup.create(
|
|
7722
7722
|
reissueAssetIdObj,
|
|
7723
7723
|
null,
|
|
7724
7724
|
reissueInputs,
|
|
7725
|
-
[
|
|
7725
|
+
[chunkX2BWPGCY_cjs.AssetOutput.create(0, totalAssetAmount)],
|
|
7726
7726
|
[]
|
|
7727
7727
|
);
|
|
7728
7728
|
const groups = [reissueAssetGroup];
|
|
7729
7729
|
for (const [assetId, amount] of assetChanges) {
|
|
7730
7730
|
const changeInputs = inputsForAsset(assetInputs, assetId);
|
|
7731
7731
|
groups.push(
|
|
7732
|
-
|
|
7733
|
-
|
|
7732
|
+
chunkX2BWPGCY_cjs.AssetGroup.create(
|
|
7733
|
+
chunkX2BWPGCY_cjs.AssetId.fromString(assetId),
|
|
7734
7734
|
null,
|
|
7735
7735
|
changeInputs,
|
|
7736
|
-
[
|
|
7736
|
+
[chunkX2BWPGCY_cjs.AssetOutput.create(0, amount)],
|
|
7737
7737
|
[]
|
|
7738
7738
|
)
|
|
7739
7739
|
);
|
|
@@ -7804,11 +7804,11 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7804
7804
|
for (const [assetId, amount] of assetChanges) {
|
|
7805
7805
|
const changeInputs = inputsForAsset(assetInputs, assetId);
|
|
7806
7806
|
groups.push(
|
|
7807
|
-
|
|
7808
|
-
|
|
7807
|
+
chunkX2BWPGCY_cjs.AssetGroup.create(
|
|
7808
|
+
chunkX2BWPGCY_cjs.AssetId.fromString(assetId),
|
|
7809
7809
|
null,
|
|
7810
7810
|
changeInputs,
|
|
7811
|
-
amount > 0n ? [
|
|
7811
|
+
amount > 0n ? [chunkX2BWPGCY_cjs.AssetOutput.create(0, amount)] : [],
|
|
7812
7812
|
[]
|
|
7813
7813
|
)
|
|
7814
7814
|
);
|
|
@@ -7821,16 +7821,16 @@ function inputsForAsset(assetInputs, assetId) {
|
|
|
7821
7821
|
for (const [inputIndex, assets] of assetInputs) {
|
|
7822
7822
|
for (const asset of assets) {
|
|
7823
7823
|
if (asset.assetId !== assetId) continue;
|
|
7824
|
-
inputs.push(
|
|
7824
|
+
inputs.push(chunkX2BWPGCY_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
7825
7825
|
}
|
|
7826
7826
|
}
|
|
7827
7827
|
return inputs;
|
|
7828
7828
|
}
|
|
7829
7829
|
async function submitToSelf(submit, wallet, inputs, amount, groups) {
|
|
7830
|
-
const outputAddress =
|
|
7830
|
+
const outputAddress = chunkNMDISCGW_cjs.ArkAddress.decode(await wallet.getAddress());
|
|
7831
7831
|
const outputs = [
|
|
7832
7832
|
{ script: outputAddress.pkScript, amount: BigInt(amount) },
|
|
7833
|
-
Extension.create([
|
|
7833
|
+
Extension.create([chunkX2BWPGCY_cjs.Packet.create(groups)]).txOut()
|
|
7834
7834
|
];
|
|
7835
7835
|
const { arkTxid } = await submit(inputs, outputs);
|
|
7836
7836
|
return arkTxid;
|
|
@@ -7854,7 +7854,7 @@ function castMetadata(metadata) {
|
|
|
7854
7854
|
} else {
|
|
7855
7855
|
throw new Error("Invalid metadata value type");
|
|
7856
7856
|
}
|
|
7857
|
-
md.push(
|
|
7857
|
+
md.push(chunkX2BWPGCY_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
|
|
7858
7858
|
}
|
|
7859
7859
|
return md;
|
|
7860
7860
|
}
|
|
@@ -7875,10 +7875,10 @@ var DelegateManagerImpl = class {
|
|
|
7875
7875
|
if (vtxos.length === 0) {
|
|
7876
7876
|
return { delegated: [], failed: [] };
|
|
7877
7877
|
}
|
|
7878
|
-
const destinationScript =
|
|
7878
|
+
const destinationScript = chunkNMDISCGW_cjs.ArkAddress.decode(destination).pkScript;
|
|
7879
7879
|
const arkInfo = await this.arkInfoProvider.getInfo();
|
|
7880
7880
|
const delegateInfo = await this.delegateProvider.getDelegateInfo();
|
|
7881
|
-
const eligible = vtxos.map(
|
|
7881
|
+
const eligible = vtxos.map(chunkNMDISCGW_cjs.normalizeVtxo).filter(
|
|
7882
7882
|
(v) => isAnnotated(v) && findDelegateTapLeaf(v, delegateInfo.pubkey) !== void 0
|
|
7883
7883
|
);
|
|
7884
7884
|
if (eligible.length === 0) {
|
|
@@ -7910,7 +7910,7 @@ var DelegateManagerImpl = class {
|
|
|
7910
7910
|
const groupByExpiry = /* @__PURE__ */ new Map();
|
|
7911
7911
|
let recoverableVtxos = [];
|
|
7912
7912
|
for (const vtxo of eligible) {
|
|
7913
|
-
if (
|
|
7913
|
+
if (chunkNMDISCGW_cjs.canRecoverOnchain(vtxo, now)) {
|
|
7914
7914
|
recoverableVtxos.push(vtxo);
|
|
7915
7915
|
continue;
|
|
7916
7916
|
}
|
|
@@ -7962,7 +7962,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7962
7962
|
}
|
|
7963
7963
|
if (!delegateAt) {
|
|
7964
7964
|
const now = { timestamp: /* @__PURE__ */ new Date() };
|
|
7965
|
-
const expiryTimestamp = vtxos.filter((coin) => !
|
|
7965
|
+
const expiryTimestamp = vtxos.filter((coin) => !chunkNMDISCGW_cjs.canRecoverOnchain(coin, now) && coin.expiresAt).reduce(
|
|
7966
7966
|
(min, coin) => Math.min(min, coin.expiresAt.getTime()),
|
|
7967
7967
|
Number.MAX_SAFE_INTEGER
|
|
7968
7968
|
);
|
|
@@ -7989,7 +7989,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7989
7989
|
let amount = 0n;
|
|
7990
7990
|
for (const coin of vtxos) {
|
|
7991
7991
|
const inputFee = estimator.evalOffchainInput({
|
|
7992
|
-
...
|
|
7992
|
+
...chunkNMDISCGW_cjs.toOffchainInputFeeParams(coin),
|
|
7993
7993
|
type: "vtxo"
|
|
7994
7994
|
});
|
|
7995
7995
|
if (inputFee.satoshis >= coin.value) {
|
|
@@ -8003,7 +8003,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
8003
8003
|
const delegateFee = BigInt(Number(fee));
|
|
8004
8004
|
if (delegateFee > 0n) {
|
|
8005
8005
|
outputs.push({
|
|
8006
|
-
script:
|
|
8006
|
+
script: chunkNMDISCGW_cjs.ArkAddress.decode(delegateAddress).pkScript,
|
|
8007
8007
|
amount: delegateFee
|
|
8008
8008
|
});
|
|
8009
8009
|
}
|
|
@@ -8036,10 +8036,10 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
8036
8036
|
destinationScript
|
|
8037
8037
|
);
|
|
8038
8038
|
const forfeitOutputScript = btcSigner.OutScript.encode(
|
|
8039
|
-
btcSigner.Address(
|
|
8039
|
+
btcSigner.Address(chunkNMDISCGW_cjs.getNetwork(network)).decode(forfeitAddress)
|
|
8040
8040
|
);
|
|
8041
8041
|
const forfeits = await Promise.all(
|
|
8042
|
-
vtxos.filter((v) =>
|
|
8042
|
+
vtxos.filter((v) => chunkNMDISCGW_cjs.requiresForfeit(v)).map(async (coin) => {
|
|
8043
8043
|
const forfeit = await makeDelegateForfeitTx(
|
|
8044
8044
|
coin,
|
|
8045
8045
|
dust,
|
|
@@ -8064,7 +8064,7 @@ async function makeDelegateForfeitTx(input, connectorAmount, delegatePubkey, for
|
|
|
8064
8064
|
index: input.vout,
|
|
8065
8065
|
witnessUtxo: {
|
|
8066
8066
|
amount: BigInt(input.value),
|
|
8067
|
-
script:
|
|
8067
|
+
script: chunkNMDISCGW_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
8068
8068
|
},
|
|
8069
8069
|
sighashType: btcSigner.SigHash.ALL_ANYONECANPAY,
|
|
8070
8070
|
tapLeafScript: [delegateTapLeaf]
|
|
@@ -8122,7 +8122,7 @@ async function makeSignedDelegateIntent(identity, coins, outputs, onchainOutputs
|
|
|
8122
8122
|
expire_at: 0,
|
|
8123
8123
|
cosigners_public_keys: cosignerPubKeys
|
|
8124
8124
|
};
|
|
8125
|
-
const proof =
|
|
8125
|
+
const proof = chunkNMDISCGW_cjs.Intent.create(message, coins, outputs);
|
|
8126
8126
|
const signedProof = await identity.sign(proof);
|
|
8127
8127
|
return {
|
|
8128
8128
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -8148,10 +8148,10 @@ function getDayTimestamp(timestamp) {
|
|
|
8148
8148
|
function findDelegateTapLeaf(vtxo, delegatePubkey) {
|
|
8149
8149
|
if (!vtxo.tapTree) return void 0;
|
|
8150
8150
|
const pk = delegatePubkey.length === 66 ? delegatePubkey.slice(2) : delegatePubkey;
|
|
8151
|
-
const vtxoScript =
|
|
8151
|
+
const vtxoScript = chunkNMDISCGW_cjs.VtxoScript.decode(vtxo.tapTree);
|
|
8152
8152
|
return vtxoScript.leaves.find((tapLeaf) => {
|
|
8153
|
-
const arkTapscript =
|
|
8154
|
-
if (!
|
|
8153
|
+
const arkTapscript = chunkNMDISCGW_cjs.decodeTapscript(chunkNMDISCGW_cjs.scriptFromTapLeafScript(tapLeaf));
|
|
8154
|
+
if (!chunkNMDISCGW_cjs.MultisigTapscript.is(arkTapscript)) return false;
|
|
8155
8155
|
return arkTapscript.params.pubkeys.map(base.hex.encode).includes(pk);
|
|
8156
8156
|
});
|
|
8157
8157
|
}
|
|
@@ -8707,8 +8707,8 @@ function checkSaveVtxosForScript(backend, key, vtxos) {
|
|
|
8707
8707
|
}
|
|
8708
8708
|
async function getVtxosForContract(repo, contract, options) {
|
|
8709
8709
|
const vtxos = repo.getVtxosForScriptPage ? await collectScriptVtxos(repo, contract.script, options) : filterVtxosForScript(await collectVtxos(repo, contract.address), contract.script);
|
|
8710
|
-
const normalized = vtxos.map(
|
|
8711
|
-
return options?.unspentOnly ? normalized.filter((vtxo) => !
|
|
8710
|
+
const normalized = vtxos.map(chunkNMDISCGW_cjs.normalizeVtxo);
|
|
8711
|
+
return options?.unspentOnly ? normalized.filter((vtxo) => !chunkNMDISCGW_cjs.isVtxoSpent(vtxo)) : normalized;
|
|
8712
8712
|
}
|
|
8713
8713
|
async function hasVtxosForContract(repo, contract) {
|
|
8714
8714
|
if (repo.getVtxosForScriptPage) {
|
|
@@ -8939,7 +8939,7 @@ function decodeArkContract(encoded) {
|
|
|
8939
8939
|
}
|
|
8940
8940
|
function contractFromArkContract(encoded, options = {}) {
|
|
8941
8941
|
const parsed = decodeArkContract(encoded);
|
|
8942
|
-
const handler =
|
|
8942
|
+
const handler = chunkM4DM3N6F_cjs.contractHandlers.get(parsed.type);
|
|
8943
8943
|
if (!handler) {
|
|
8944
8944
|
throw new Error(`No handler registered for contract type '${parsed.type}'`);
|
|
8945
8945
|
}
|
|
@@ -8953,9 +8953,9 @@ function contractFromArkContract(encoded, options = {}) {
|
|
|
8953
8953
|
metadata: options.metadata
|
|
8954
8954
|
};
|
|
8955
8955
|
}
|
|
8956
|
-
function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix =
|
|
8956
|
+
function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunkNMDISCGW_cjs.DEFAULT_NETWORK.hrp, options = {}) {
|
|
8957
8957
|
const parsed = decodeArkContract(encoded);
|
|
8958
|
-
const handler =
|
|
8958
|
+
const handler = chunkM4DM3N6F_cjs.contractHandlers.getOrThrow(parsed.type);
|
|
8959
8959
|
const params = parsed.data;
|
|
8960
8960
|
const vtxoScript = handler.createScript(params);
|
|
8961
8961
|
return {
|
|
@@ -9012,10 +9012,10 @@ var ContractWatcher = class {
|
|
|
9012
9012
|
eventSourceReported = false;
|
|
9013
9013
|
/** @see ContractWatcherConfig */
|
|
9014
9014
|
constructor(config) {
|
|
9015
|
-
|
|
9016
|
-
|
|
9017
|
-
|
|
9018
|
-
|
|
9015
|
+
chunkNMDISCGW_cjs.assertTimerMs("failsafePollIntervalMs", config.failsafePollIntervalMs);
|
|
9016
|
+
chunkNMDISCGW_cjs.assertTimerMs("reconnectDelayMs", config.reconnectDelayMs);
|
|
9017
|
+
chunkNMDISCGW_cjs.assertTimerMs("maxReconnectDelayMs", config.maxReconnectDelayMs);
|
|
9018
|
+
chunkNMDISCGW_cjs.assertTimerMs("subscriptionRequestTimeoutMs", config.subscriptionRequestTimeoutMs);
|
|
9019
9019
|
if (config.subscriptionRequestTimeoutMs === 0) {
|
|
9020
9020
|
throw new Error("subscriptionRequestTimeoutMs must be greater than 0");
|
|
9021
9021
|
}
|
|
@@ -9238,9 +9238,9 @@ var ContractWatcher = class {
|
|
|
9238
9238
|
this.reconnectAttempts = 0;
|
|
9239
9239
|
this.listenLoop().catch((e) => {
|
|
9240
9240
|
if (!this.isWatching || signal?.aborted) return;
|
|
9241
|
-
if (
|
|
9241
|
+
if (chunkNMDISCGW_cjs.isEventSourceError(e)) {
|
|
9242
9242
|
console.debug("ContractWatcher subscription disconnected; reconnecting");
|
|
9243
|
-
} else if (!
|
|
9243
|
+
} else if (!chunkNMDISCGW_cjs.isEventSourceUnavailableError(e)) {
|
|
9244
9244
|
console.error(e);
|
|
9245
9245
|
}
|
|
9246
9246
|
this.connectionState = "disconnected";
|
|
@@ -9250,7 +9250,7 @@ var ContractWatcher = class {
|
|
|
9250
9250
|
});
|
|
9251
9251
|
} catch (error) {
|
|
9252
9252
|
if (!this.isWatching || signal?.aborted) return;
|
|
9253
|
-
if (!
|
|
9253
|
+
if (!chunkNMDISCGW_cjs.isEventSourceUnavailableError(error)) {
|
|
9254
9254
|
console.error("ContractWatcher connection failed:", error);
|
|
9255
9255
|
}
|
|
9256
9256
|
this.connectionState = "disconnected";
|
|
@@ -9266,7 +9266,7 @@ var ContractWatcher = class {
|
|
|
9266
9266
|
* few seconds.
|
|
9267
9267
|
*/
|
|
9268
9268
|
reportEventSourceUnavailable(error) {
|
|
9269
|
-
if (!
|
|
9269
|
+
if (!chunkNMDISCGW_cjs.isEventSourceUnavailableError(error)) return false;
|
|
9270
9270
|
if (!this.eventSourceReported) {
|
|
9271
9271
|
this.eventSourceReported = true;
|
|
9272
9272
|
console.warn(
|
|
@@ -9331,7 +9331,7 @@ var ContractWatcher = class {
|
|
|
9331
9331
|
const now = Date.now();
|
|
9332
9332
|
let current;
|
|
9333
9333
|
try {
|
|
9334
|
-
current = await
|
|
9334
|
+
current = await chunkNMDISCGW_cjs.getAllNormalizedVtxos(this.config.indexerProvider, scripts, {
|
|
9335
9335
|
spendableOnly: true
|
|
9336
9336
|
});
|
|
9337
9337
|
} catch (error) {
|
|
@@ -9613,14 +9613,14 @@ var ContractWatcher = class {
|
|
|
9613
9613
|
const timestamp = Date.now();
|
|
9614
9614
|
if (update.newVtxos?.length) {
|
|
9615
9615
|
this.processSubscriptionVtxos(
|
|
9616
|
-
update.newVtxos.map(
|
|
9616
|
+
update.newVtxos.map(chunkNMDISCGW_cjs.normalizeVtxo),
|
|
9617
9617
|
"vtxo_received",
|
|
9618
9618
|
timestamp
|
|
9619
9619
|
);
|
|
9620
9620
|
}
|
|
9621
9621
|
if (update.spentVtxos?.length) {
|
|
9622
9622
|
this.processSubscriptionVtxos(
|
|
9623
|
-
update.spentVtxos.map(
|
|
9623
|
+
update.spentVtxos.map(chunkNMDISCGW_cjs.normalizeVtxo),
|
|
9624
9624
|
"vtxo_spent",
|
|
9625
9625
|
timestamp
|
|
9626
9626
|
);
|
|
@@ -9645,8 +9645,8 @@ var ContractWatcher = class {
|
|
|
9645
9645
|
continue;
|
|
9646
9646
|
}
|
|
9647
9647
|
if (target === byWatchedScript && eventType === "vtxo_received") {
|
|
9648
|
-
const n =
|
|
9649
|
-
if (
|
|
9648
|
+
const n = chunkNMDISCGW_cjs.normalizeVtxo(vtxo);
|
|
9649
|
+
if (chunkNMDISCGW_cjs.isVtxoSpent(n) || n.isSwept || chunkNMDISCGW_cjs.isPastExpiry(n, now)) continue;
|
|
9650
9650
|
}
|
|
9651
9651
|
let bucket = target.get(vtxo.script);
|
|
9652
9652
|
if (!bucket) {
|
|
@@ -9787,7 +9787,7 @@ function annotatableIn(scriptToContract, vtxos, memo) {
|
|
|
9787
9787
|
if (!contract) continue;
|
|
9788
9788
|
try {
|
|
9789
9789
|
const key = contractKey(contract);
|
|
9790
|
-
const handler =
|
|
9790
|
+
const handler = chunkM4DM3N6F_cjs.contractHandlers.get(contract.type);
|
|
9791
9791
|
const hit = memo?.get(script);
|
|
9792
9792
|
let tapscripts;
|
|
9793
9793
|
if (hit && hit.key === key && hit.handler === handler) {
|
|
@@ -9808,7 +9808,7 @@ function annotatableIn(scriptToContract, vtxos, memo) {
|
|
|
9808
9808
|
scripts.add(script);
|
|
9809
9809
|
} catch (err) {
|
|
9810
9810
|
const reason = `'${contract.type}' at ${script}: ${err instanceof Error ? err.message : String(err)}`;
|
|
9811
|
-
if (err instanceof
|
|
9811
|
+
if (err instanceof chunkM4DM3N6F_cjs.UnsupportedProgramVersionError) {
|
|
9812
9812
|
unsupported.set(script, { key: contractKey(contract), reason });
|
|
9813
9813
|
} else {
|
|
9814
9814
|
failures.set(script, reason);
|
|
@@ -9819,7 +9819,7 @@ function annotatableIn(scriptToContract, vtxos, memo) {
|
|
|
9819
9819
|
}
|
|
9820
9820
|
function annotateAgainst(vtxos, byScript, tapscripts = /* @__PURE__ */ new Map()) {
|
|
9821
9821
|
return vtxos.map(
|
|
9822
|
-
(vtxo) => extendVirtualCoinForContract(
|
|
9822
|
+
(vtxo) => extendVirtualCoinForContract(chunkNMDISCGW_cjs.normalizeVtxo(vtxo), byScript, tapscripts)
|
|
9823
9823
|
);
|
|
9824
9824
|
}
|
|
9825
9825
|
var SCAN_MAX_INDEX = 1e4;
|
|
@@ -9863,8 +9863,8 @@ var ContractManager = class _ContractManager {
|
|
|
9863
9863
|
* `dispose()`, so it re-checks this at every await rather than run on a torn-down watcher. */
|
|
9864
9864
|
disposed = false;
|
|
9865
9865
|
constructor(config) {
|
|
9866
|
-
|
|
9867
|
-
|
|
9866
|
+
chunkNMDISCGW_cjs.assertNonNegativeMs("vtxoSyncMaxAgeMs", config.vtxoSyncMaxAgeMs);
|
|
9867
|
+
chunkNMDISCGW_cjs.assertNonNegativeMs("vtxoSyncOverlapMs", config.vtxoSyncOverlapMs);
|
|
9868
9868
|
this.config = { ...config };
|
|
9869
9869
|
this.watcher = new ContractWatcher({
|
|
9870
9870
|
indexerProvider: config.indexerProvider,
|
|
@@ -9900,12 +9900,12 @@ var ContractManager = class _ContractManager {
|
|
|
9900
9900
|
}
|
|
9901
9901
|
/** @see ContractManagerConfig.vtxoSyncMaxAgeMs — for factory-built managers. */
|
|
9902
9902
|
setVtxoSyncMaxAge(maxAgeMs) {
|
|
9903
|
-
|
|
9903
|
+
chunkNMDISCGW_cjs.assertNonNegativeMs("vtxoSyncMaxAgeMs", maxAgeMs);
|
|
9904
9904
|
this.config.vtxoSyncMaxAgeMs = maxAgeMs;
|
|
9905
9905
|
}
|
|
9906
9906
|
/** @see ContractManagerConfig.vtxoSyncOverlapMs — for factory-built managers. */
|
|
9907
9907
|
setVtxoSyncOverlap(overlapMs) {
|
|
9908
|
-
|
|
9908
|
+
chunkNMDISCGW_cjs.assertNonNegativeMs("vtxoSyncOverlapMs", overlapMs);
|
|
9909
9909
|
this.config.vtxoSyncOverlapMs = overlapMs;
|
|
9910
9910
|
}
|
|
9911
9911
|
markSyncOnline() {
|
|
@@ -9969,10 +9969,10 @@ var ContractManager = class _ContractManager {
|
|
|
9969
9969
|
if (this.unsupportedContracts.get(contract.script) === key) return true;
|
|
9970
9970
|
if (this.tapscriptMemo.get(contract.script)?.key === key) return false;
|
|
9971
9971
|
try {
|
|
9972
|
-
|
|
9972
|
+
chunkM4DM3N6F_cjs.contractHandlers.get(contract.type)?.createScript(contract.params);
|
|
9973
9973
|
return false;
|
|
9974
9974
|
} catch (err) {
|
|
9975
|
-
if (!(err instanceof
|
|
9975
|
+
if (!(err instanceof chunkM4DM3N6F_cjs.UnsupportedProgramVersionError)) return false;
|
|
9976
9976
|
this.unsupportedContracts.set(contract.script, key);
|
|
9977
9977
|
return true;
|
|
9978
9978
|
}
|
|
@@ -9985,7 +9985,7 @@ var ContractManager = class _ContractManager {
|
|
|
9985
9985
|
this.markSyncOnline();
|
|
9986
9986
|
return void 0;
|
|
9987
9987
|
} catch (err) {
|
|
9988
|
-
if (!
|
|
9988
|
+
if (!chunkNMDISCGW_cjs.isRetryableProviderError(err)) throw err;
|
|
9989
9989
|
this.markSyncDegraded(err);
|
|
9990
9990
|
return err;
|
|
9991
9991
|
}
|
|
@@ -10008,7 +10008,7 @@ var ContractManager = class _ContractManager {
|
|
|
10008
10008
|
try {
|
|
10009
10009
|
await this.scheduleLookAheadDrain();
|
|
10010
10010
|
} catch (err) {
|
|
10011
|
-
if (!
|
|
10011
|
+
if (!chunkNMDISCGW_cjs.isRetryableProviderError(err)) throw err;
|
|
10012
10012
|
this.lookAheadRefillOwed = true;
|
|
10013
10013
|
this.markSyncDegraded(err);
|
|
10014
10014
|
}
|
|
@@ -10071,7 +10071,7 @@ var ContractManager = class _ContractManager {
|
|
|
10071
10071
|
/** No throw: construction returned long ago, so the state is the channel. */
|
|
10072
10072
|
reportBackgroundFailure(stage, err) {
|
|
10073
10073
|
this.markSyncDegraded(err);
|
|
10074
|
-
if (!
|
|
10074
|
+
if (!chunkNMDISCGW_cjs.isRetryableProviderError(err)) {
|
|
10075
10075
|
console.error(`[contracts] background ${stage} failed`, err);
|
|
10076
10076
|
}
|
|
10077
10077
|
}
|
|
@@ -10173,7 +10173,7 @@ var ContractManager = class _ContractManager {
|
|
|
10173
10173
|
const from = Math.max(0, watermark - lookAhead.size);
|
|
10174
10174
|
const to = watermark + lookAhead.size;
|
|
10175
10175
|
const deps = lookAhead.candidateDeps();
|
|
10176
|
-
const handlers =
|
|
10176
|
+
const handlers = chunkM4DM3N6F_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkM4DM3N6F_cjs.contractHandlers.get(t)).filter(hasCandidates);
|
|
10177
10177
|
const band = /* @__PURE__ */ new Map();
|
|
10178
10178
|
for (let index = from; index <= to; index++) {
|
|
10179
10179
|
const descriptor = lookAhead.materialize(index);
|
|
@@ -10184,7 +10184,7 @@ var ContractManager = class _ContractManager {
|
|
|
10184
10184
|
index,
|
|
10185
10185
|
params: {
|
|
10186
10186
|
...candidate,
|
|
10187
|
-
...
|
|
10187
|
+
...chunkM4DM3N6F_cjs.speculativeReceiveMetadata(descriptor)
|
|
10188
10188
|
}
|
|
10189
10189
|
});
|
|
10190
10190
|
}
|
|
@@ -10243,7 +10243,7 @@ var ContractManager = class _ContractManager {
|
|
|
10243
10243
|
});
|
|
10244
10244
|
for (const entry of pending) entry.catchUpPending = false;
|
|
10245
10245
|
} catch (err) {
|
|
10246
|
-
if (!
|
|
10246
|
+
if (!chunkNMDISCGW_cjs.isRetryableProviderError(err)) throw err;
|
|
10247
10247
|
this.markSyncDegraded(err);
|
|
10248
10248
|
}
|
|
10249
10249
|
}
|
|
@@ -10334,7 +10334,7 @@ var ContractManager = class _ContractManager {
|
|
|
10334
10334
|
return result;
|
|
10335
10335
|
}
|
|
10336
10336
|
async upsertContractRow(params) {
|
|
10337
|
-
const handler =
|
|
10337
|
+
const handler = chunkM4DM3N6F_cjs.contractHandlers.get(params.type);
|
|
10338
10338
|
if (!handler) {
|
|
10339
10339
|
throw new Error(`No handler registered for contract type '${params.type}'`);
|
|
10340
10340
|
}
|
|
@@ -10433,7 +10433,7 @@ var ContractManager = class _ContractManager {
|
|
|
10433
10433
|
`scanContracts: batchSize must be a positive integer (got ${String(opts.batchSize)})`
|
|
10434
10434
|
);
|
|
10435
10435
|
}
|
|
10436
|
-
const registered =
|
|
10436
|
+
const registered = chunkM4DM3N6F_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkM4DM3N6F_cjs.contractHandlers.get(t)).filter(isDiscoverable);
|
|
10437
10437
|
const discoverables = [
|
|
10438
10438
|
...registered.filter((h) => h.type === "boarding"),
|
|
10439
10439
|
...registered.filter((h) => h.type !== "boarding")
|
|
@@ -10564,7 +10564,7 @@ var ContractManager = class _ContractManager {
|
|
|
10564
10564
|
return contracts.filter((contract) => this.isUnsupported(contract));
|
|
10565
10565
|
}
|
|
10566
10566
|
async getContractsWithVtxos(filter, pageSize, options) {
|
|
10567
|
-
|
|
10567
|
+
chunkNMDISCGW_cjs.assertNonNegativeMs("maxSyncAgeMs", options?.maxSyncAgeMs);
|
|
10568
10568
|
const contracts = await this.getContracts(filter);
|
|
10569
10569
|
if (this.syncedWithin(
|
|
10570
10570
|
contracts,
|
|
@@ -10672,14 +10672,14 @@ var ContractManager = class _ContractManager {
|
|
|
10672
10672
|
const byScript = new Map(contracts.map((contract) => [contract.script, contract]));
|
|
10673
10673
|
const asking = vtxos.filter((vtxo) => {
|
|
10674
10674
|
const contract = byScript.get(vtxo.script);
|
|
10675
|
-
return contract !== void 0 &&
|
|
10675
|
+
return contract !== void 0 && chunkM4DM3N6F_cjs.contractHandlers.get(contract.type)?.assertSpendableNow !== void 0;
|
|
10676
10676
|
});
|
|
10677
10677
|
if (asking.length === 0) return refused;
|
|
10678
10678
|
const tip = await this.currentChainTip();
|
|
10679
10679
|
const walletDescriptorValue = await walletDescriptor?.();
|
|
10680
10680
|
for (const vtxo of asking) {
|
|
10681
10681
|
const contract = byScript.get(vtxo.script);
|
|
10682
|
-
const handler =
|
|
10682
|
+
const handler = chunkM4DM3N6F_cjs.contractHandlers.get(contract.type);
|
|
10683
10683
|
if (!handler?.assertSpendableNow) continue;
|
|
10684
10684
|
const context = {
|
|
10685
10685
|
collaborative: true,
|
|
@@ -10689,7 +10689,7 @@ var ContractManager = class _ContractManager {
|
|
|
10689
10689
|
walletDescriptor: walletDescriptorValue,
|
|
10690
10690
|
// `isVirtualCoin` only checks `script`, which every input has; `isCsvSpendable`
|
|
10691
10691
|
// reads `vtxo.status.block_time` unguarded, so require `status` too.
|
|
10692
|
-
vtxo:
|
|
10692
|
+
vtxo: chunkNMDISCGW_cjs.isVirtualCoin(vtxo) && "status" in vtxo ? vtxo : void 0
|
|
10693
10693
|
};
|
|
10694
10694
|
try {
|
|
10695
10695
|
await handler.assertSpendableNow(
|
|
@@ -10802,7 +10802,7 @@ var ContractManager = class _ContractManager {
|
|
|
10802
10802
|
const { contractScript, collaborative = true, walletDescriptor, vtxo } = options;
|
|
10803
10803
|
const [contract] = await this.getContracts({ script: contractScript });
|
|
10804
10804
|
if (!contract) return [];
|
|
10805
|
-
const handler =
|
|
10805
|
+
const handler = chunkM4DM3N6F_cjs.contractHandlers.get(contract.type);
|
|
10806
10806
|
if (!handler) return [];
|
|
10807
10807
|
const script = handler.createScript(contract.params);
|
|
10808
10808
|
const tip = await this.currentChainTip();
|
|
@@ -10824,7 +10824,7 @@ var ContractManager = class _ContractManager {
|
|
|
10824
10824
|
const { contractScript, collaborative = true, walletDescriptor } = options;
|
|
10825
10825
|
const [contract] = await this.getContracts({ script: contractScript });
|
|
10826
10826
|
if (!contract) return [];
|
|
10827
|
-
const handler =
|
|
10827
|
+
const handler = chunkM4DM3N6F_cjs.contractHandlers.get(contract.type);
|
|
10828
10828
|
if (!handler) return [];
|
|
10829
10829
|
const script = handler.createScript(contract.params);
|
|
10830
10830
|
const context = {
|
|
@@ -10870,7 +10870,7 @@ var ContractManager = class _ContractManager {
|
|
|
10870
10870
|
}
|
|
10871
10871
|
async refreshOutpoints(outpoints) {
|
|
10872
10872
|
if (outpoints.length === 0) return;
|
|
10873
|
-
const { vtxos } = await
|
|
10873
|
+
const { vtxos } = await chunkNMDISCGW_cjs.getNormalizedVtxos(this.config.indexerProvider, {
|
|
10874
10874
|
outpoints
|
|
10875
10875
|
});
|
|
10876
10876
|
if (vtxos.length === 0) return;
|
|
@@ -10972,7 +10972,7 @@ var ContractManager = class _ContractManager {
|
|
|
10972
10972
|
break;
|
|
10973
10973
|
}
|
|
10974
10974
|
} catch (err) {
|
|
10975
|
-
if (!
|
|
10975
|
+
if (!chunkNMDISCGW_cjs.isRetryableProviderError(err)) throw err;
|
|
10976
10976
|
this.markSyncDegraded(err);
|
|
10977
10977
|
synced = false;
|
|
10978
10978
|
}
|
|
@@ -11060,7 +11060,7 @@ var ContractManager = class _ContractManager {
|
|
|
11060
11060
|
*/
|
|
11061
11061
|
async reconcilePendingFrontier(contracts) {
|
|
11062
11062
|
const scriptToContract = new Map(contracts.map((c) => [c.script, c]));
|
|
11063
|
-
const vtxos = await
|
|
11063
|
+
const vtxos = await chunkNMDISCGW_cjs.getAllNormalizedVtxos(
|
|
11064
11064
|
this.config.indexerProvider,
|
|
11065
11065
|
contracts.map((c) => c.script),
|
|
11066
11066
|
{ pendingOnly: true }
|
|
@@ -11135,7 +11135,7 @@ var ContractManager = class _ContractManager {
|
|
|
11135
11135
|
}
|
|
11136
11136
|
return result;
|
|
11137
11137
|
}
|
|
11138
|
-
async fetchContractVtxosBulk(contracts, pageSize =
|
|
11138
|
+
async fetchContractVtxosBulk(contracts, pageSize = chunkNMDISCGW_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
|
|
11139
11139
|
if (contracts.length === 0) {
|
|
11140
11140
|
return { vtxosByScript: /* @__PURE__ */ new Map(), promoted: /* @__PURE__ */ new Map() };
|
|
11141
11141
|
}
|
|
@@ -11151,7 +11151,7 @@ var ContractManager = class _ContractManager {
|
|
|
11151
11151
|
before: syncWindow.before
|
|
11152
11152
|
}
|
|
11153
11153
|
} : {};
|
|
11154
|
-
const vtxos = await
|
|
11154
|
+
const vtxos = await chunkNMDISCGW_cjs.getAllNormalizedVtxos(
|
|
11155
11155
|
this.config.indexerProvider,
|
|
11156
11156
|
contracts.map((c) => c.script),
|
|
11157
11157
|
{ ...windowOpts, pageSize }
|
|
@@ -11254,7 +11254,7 @@ function parseLegacyExpiry(batchExpiry) {
|
|
|
11254
11254
|
if (typeof batchExpiry !== "number" || !Number.isFinite(batchExpiry) || batchExpiry <= 0) {
|
|
11255
11255
|
return {};
|
|
11256
11256
|
}
|
|
11257
|
-
if (batchExpiry >=
|
|
11257
|
+
if (batchExpiry >= chunkNMDISCGW_cjs.EXPIRY_MIN_PLAUSIBLE_MS) return { expiresAt: new Date(batchExpiry) };
|
|
11258
11258
|
return { expiresAtHeight: batchExpiry / 1e3 };
|
|
11259
11259
|
}
|
|
11260
11260
|
function legacyVtxoFacts(status) {
|
|
@@ -11492,7 +11492,7 @@ function backfillContractWatchState(store) {
|
|
|
11492
11492
|
};
|
|
11493
11493
|
readPage();
|
|
11494
11494
|
}
|
|
11495
|
-
var unspentFlag = (vtxo) =>
|
|
11495
|
+
var unspentFlag = (vtxo) => chunkNMDISCGW_cjs.isVtxoSpent(vtxo) ? {} : { unspent: 1 };
|
|
11496
11496
|
function backfillVtxoIndexFields(transaction) {
|
|
11497
11497
|
const store = transaction.objectStore(STORE_VTXOS);
|
|
11498
11498
|
const pageSize = 1e3;
|
|
@@ -11523,7 +11523,7 @@ var DEFAULT_DB_NAME = "arkade-service-worker";
|
|
|
11523
11523
|
var DEFAULT_SERVICE_WORKER_ACTIVATION_TIMEOUT_MS = 1e4;
|
|
11524
11524
|
function normalizeOptions2(pathOrOptions) {
|
|
11525
11525
|
const o = typeof pathOrOptions === "string" ? { path: pathOrOptions } : pathOrOptions;
|
|
11526
|
-
|
|
11526
|
+
chunkNMDISCGW_cjs.assertTimerMs("activationTimeoutMs", o.activationTimeoutMs);
|
|
11527
11527
|
return {
|
|
11528
11528
|
path: o.path,
|
|
11529
11529
|
activationTimeoutMs: o.activationTimeoutMs ?? DEFAULT_SERVICE_WORKER_ACTIVATION_TIMEOUT_MS
|
|
@@ -11742,7 +11742,7 @@ var deserializeTapLeaf = (t) => {
|
|
|
11742
11742
|
const s = base.hex.decode(t.s);
|
|
11743
11743
|
return [cb, s];
|
|
11744
11744
|
};
|
|
11745
|
-
var deserializeVtxo = (o) =>
|
|
11745
|
+
var deserializeVtxo = (o) => chunkNMDISCGW_cjs.normalizeVtxo({
|
|
11746
11746
|
...o,
|
|
11747
11747
|
createdAt: new Date(o.createdAt),
|
|
11748
11748
|
tapTree: base.hex.decode(o.tapTree),
|
|
@@ -12097,7 +12097,7 @@ var RestEmulatorProvider = class {
|
|
|
12097
12097
|
serverUrl;
|
|
12098
12098
|
async getInfo() {
|
|
12099
12099
|
const url = `${this.serverUrl}/v1/info`;
|
|
12100
|
-
const response = await
|
|
12100
|
+
const response = await chunkNMDISCGW_cjs.baseFetch(url);
|
|
12101
12101
|
if (!response.ok) {
|
|
12102
12102
|
const errorText2 = await response.text();
|
|
12103
12103
|
throw new Error(`Failed to get emulator info: ${errorText2}`);
|
|
@@ -12217,11 +12217,11 @@ var RestEmulatorProvider = class {
|
|
|
12217
12217
|
|
|
12218
12218
|
// src/arkade/service.ts
|
|
12219
12219
|
function arkadeServiceUrl(service) {
|
|
12220
|
-
return "operatorUrl" in service ? service.operatorUrl :
|
|
12220
|
+
return "operatorUrl" in service ? service.operatorUrl : chunkNMDISCGW_cjs.DEFAULT_ARKADE_SERVER_URL;
|
|
12221
12221
|
}
|
|
12222
12222
|
async function resolveArkadeService(service, opts = {}) {
|
|
12223
12223
|
const operatorUrl = arkadeServiceUrl(service);
|
|
12224
|
-
const arkProvider = opts.arkProvider ?? new
|
|
12224
|
+
const arkProvider = opts.arkProvider ?? new chunkNMDISCGW_cjs.RestArkProvider(operatorUrl);
|
|
12225
12225
|
const info = opts.info ?? await arkProvider.getInfo();
|
|
12226
12226
|
if ("network" in service && service.network !== info.network) {
|
|
12227
12227
|
throw new Error(
|
|
@@ -12234,13 +12234,13 @@ async function resolveArkadeService(service, opts = {}) {
|
|
|
12234
12234
|
}
|
|
12235
12235
|
let emulator;
|
|
12236
12236
|
if ("network" in service) {
|
|
12237
|
-
emulator = new RestEmulatorProvider(
|
|
12237
|
+
emulator = new RestEmulatorProvider(chunkNMDISCGW_cjs.DEFAULT_ARKADE_EMULATOR_URL);
|
|
12238
12238
|
} else if (service.emulatorUrl) {
|
|
12239
12239
|
emulator = new RestEmulatorProvider(service.emulatorUrl);
|
|
12240
12240
|
}
|
|
12241
12241
|
return {
|
|
12242
12242
|
arkProvider,
|
|
12243
|
-
indexerProvider: new
|
|
12243
|
+
indexerProvider: new chunkX2BWPGCY_cjs.RestIndexerProvider(operatorUrl),
|
|
12244
12244
|
onchainProvider: new EsploraProvider(esploraUrl),
|
|
12245
12245
|
emulator,
|
|
12246
12246
|
info
|
|
@@ -12324,7 +12324,7 @@ var HDDescriptorProvider = class _HDDescriptorProvider {
|
|
|
12324
12324
|
*/
|
|
12325
12325
|
materializeDescriptorAt(index) {
|
|
12326
12326
|
const descriptor = this.identity.descriptor;
|
|
12327
|
-
const network =
|
|
12327
|
+
const network = chunkM4DM3N6F_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
12328
12328
|
const expansion = descriptorsScure.expand({ descriptor, network, index });
|
|
12329
12329
|
const keyInfo = expansion.expansionMap?.["@0"];
|
|
12330
12330
|
if (!keyInfo?.keyExpression) {
|
|
@@ -12392,7 +12392,7 @@ function signingDescriptorIndex(descriptor) {
|
|
|
12392
12392
|
}
|
|
12393
12393
|
function newestWalletReceiveContract(contracts, serverPubKeyHex) {
|
|
12394
12394
|
return contracts.filter(
|
|
12395
|
-
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source ===
|
|
12395
|
+
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkM4DM3N6F_cjs.WALLET_RECEIVE_SOURCE
|
|
12396
12396
|
).sort((a, b) => {
|
|
12397
12397
|
if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
|
|
12398
12398
|
return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
|
|
@@ -12443,7 +12443,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
|
|
|
12443
12443
|
const provider = await resolveDescriptorProvider(config, setup.walletRepository);
|
|
12444
12444
|
if (!provider) return void 0;
|
|
12445
12445
|
const allowSilentFallback = (config.walletMode ?? "auto") === "auto";
|
|
12446
|
-
const expectedContractType = setup.offchainTapscript instanceof
|
|
12446
|
+
const expectedContractType = setup.offchainTapscript instanceof chunkM4DM3N6F_cjs.DelegateVtxo.Script ? "delegate" : "default";
|
|
12447
12447
|
const factoryOpts = {
|
|
12448
12448
|
walletRepository: setup.walletRepository,
|
|
12449
12449
|
contractRepository: setup.contractRepository,
|
|
@@ -12600,7 +12600,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
|
|
|
12600
12600
|
};
|
|
12601
12601
|
function deriveLeafPubkey(descriptor) {
|
|
12602
12602
|
try {
|
|
12603
|
-
return
|
|
12603
|
+
return chunkM4DM3N6F_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
12604
12604
|
} catch (e) {
|
|
12605
12605
|
throw new NonRangeableDescriptorError(
|
|
12606
12606
|
"Cannot derive leaf pubkey: descriptor is not a materialized, parsable tr(...) shape.",
|
|
@@ -12612,7 +12612,7 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
12612
12612
|
const pubKey = deriveLeafPubkey(descriptor);
|
|
12613
12613
|
const tapscript = rebuildTapscript(current, pubKey);
|
|
12614
12614
|
const serverPubKey = tapscript.options.serverPubKey;
|
|
12615
|
-
const csvTimelock2 =
|
|
12615
|
+
const csvTimelock2 = chunkNMDISCGW_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
|
|
12616
12616
|
const base$1 = {
|
|
12617
12617
|
script: base.hex.encode(tapscript.pkScript),
|
|
12618
12618
|
address: tapscript.address(hrp, serverPubKey).encode(),
|
|
@@ -12620,11 +12620,11 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
12620
12620
|
// Read at sign time to route rotated-pubkey inputs through `signWithDescriptor`; without
|
|
12621
12621
|
// it spends are rejected with `INVALID_PSBT_INPUT (5): missing tapscript spend sig`.
|
|
12622
12622
|
metadata: {
|
|
12623
|
-
...tagSource && { source:
|
|
12623
|
+
...tagSource && { source: chunkM4DM3N6F_cjs.WALLET_RECEIVE_SOURCE },
|
|
12624
12624
|
signingDescriptor: descriptor
|
|
12625
12625
|
}
|
|
12626
12626
|
};
|
|
12627
|
-
const params = tapscript instanceof
|
|
12627
|
+
const params = tapscript instanceof chunkM4DM3N6F_cjs.DelegateVtxo.Script ? {
|
|
12628
12628
|
...base$1,
|
|
12629
12629
|
type: "delegate",
|
|
12630
12630
|
params: {
|
|
@@ -12645,10 +12645,10 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
12645
12645
|
return { tapscript, params };
|
|
12646
12646
|
}
|
|
12647
12647
|
function rebuildTapscript(current, pubKey) {
|
|
12648
|
-
if (current instanceof
|
|
12649
|
-
return new
|
|
12648
|
+
if (current instanceof chunkM4DM3N6F_cjs.DelegateVtxo.Script) {
|
|
12649
|
+
return new chunkM4DM3N6F_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
|
|
12650
12650
|
}
|
|
12651
|
-
return new
|
|
12651
|
+
return new chunkM4DM3N6F_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
|
|
12652
12652
|
}
|
|
12653
12653
|
async function pickActiveReceive(contractRepository, serverPubKey, expectedType) {
|
|
12654
12654
|
const candidates = await collectContracts(contractRepository, {
|
|
@@ -12694,7 +12694,7 @@ function computeOffchainBalance(vtxos, caps) {
|
|
|
12694
12694
|
let preconfirmed = 0;
|
|
12695
12695
|
let available = 0;
|
|
12696
12696
|
let gated = 0;
|
|
12697
|
-
let
|
|
12697
|
+
let pendingSettlement = 0;
|
|
12698
12698
|
let reserved = 0;
|
|
12699
12699
|
let recoverable = 0;
|
|
12700
12700
|
let pendingRecovery = 0;
|
|
@@ -12707,7 +12707,7 @@ function computeOffchainBalance(vtxos, caps) {
|
|
|
12707
12707
|
}
|
|
12708
12708
|
};
|
|
12709
12709
|
for (const vtxo of vtxos) {
|
|
12710
|
-
if (
|
|
12710
|
+
if (chunkNMDISCGW_cjs.isVtxoSpent(vtxo)) continue;
|
|
12711
12711
|
addAssets(owned, vtxo);
|
|
12712
12712
|
if (vtxo.isUnrolled) {
|
|
12713
12713
|
unrolled += vtxo.value;
|
|
@@ -12717,11 +12717,11 @@ function computeOffchainBalance(vtxos, caps) {
|
|
|
12717
12717
|
pendingRecovery += vtxo.value;
|
|
12718
12718
|
continue;
|
|
12719
12719
|
}
|
|
12720
|
-
if (
|
|
12720
|
+
if (chunkNMDISCGW_cjs.canRecoverOnchain(vtxo, now)) {
|
|
12721
12721
|
recoverable += vtxo.value;
|
|
12722
12722
|
continue;
|
|
12723
12723
|
}
|
|
12724
|
-
if (!
|
|
12724
|
+
if (!chunkNMDISCGW_cjs.canSpendOffchain(vtxo, now)) continue;
|
|
12725
12725
|
if (vtxo.isPreconfirmed) {
|
|
12726
12726
|
preconfirmed += vtxo.value;
|
|
12727
12727
|
} else {
|
|
@@ -12730,7 +12730,7 @@ function computeOffchainBalance(vtxos, caps) {
|
|
|
12730
12730
|
if (!isGenericallySpendable(vtxo)) {
|
|
12731
12731
|
gated += vtxo.value;
|
|
12732
12732
|
} else if (!isUnlocked(vtxo)) {
|
|
12733
|
-
|
|
12733
|
+
pendingSettlement += vtxo.value;
|
|
12734
12734
|
} else if (isReserved?.(vtxo)) {
|
|
12735
12735
|
reserved += vtxo.value;
|
|
12736
12736
|
} else {
|
|
@@ -12747,7 +12747,7 @@ function computeOffchainBalance(vtxos, caps) {
|
|
|
12747
12747
|
preconfirmed,
|
|
12748
12748
|
available,
|
|
12749
12749
|
gated,
|
|
12750
|
-
|
|
12750
|
+
pendingSettlement,
|
|
12751
12751
|
reserved,
|
|
12752
12752
|
recoverable,
|
|
12753
12753
|
pendingRecovery,
|
|
@@ -12778,7 +12778,7 @@ function toWalletBalance(boardingUtxos, offchain) {
|
|
|
12778
12778
|
preconfirmed: offchain.preconfirmed,
|
|
12779
12779
|
available: offchain.available,
|
|
12780
12780
|
gated: offchain.gated,
|
|
12781
|
-
|
|
12781
|
+
pendingSettlement: offchain.pendingSettlement,
|
|
12782
12782
|
reserved: offchain.reserved,
|
|
12783
12783
|
recoverable: offchain.recoverable,
|
|
12784
12784
|
pendingRecovery: offchain.pendingRecovery,
|
|
@@ -12936,7 +12936,7 @@ function intentProofJobs(coins) {
|
|
|
12936
12936
|
if (coins.length === 0) return [];
|
|
12937
12937
|
const coinJobs = coins.map((coin, i) => ({
|
|
12938
12938
|
index: i + 1,
|
|
12939
|
-
lookupScript:
|
|
12939
|
+
lookupScript: chunkNMDISCGW_cjs.VtxoScript.decode(coin.tapTree).pkScript
|
|
12940
12940
|
}));
|
|
12941
12941
|
return [{ index: 0, lookupScript: coinJobs[0].lookupScript }, ...coinJobs];
|
|
12942
12942
|
}
|
|
@@ -12976,7 +12976,7 @@ function dedupeTimelocks(timelocks) {
|
|
|
12976
12976
|
const seen = /* @__PURE__ */ new Set();
|
|
12977
12977
|
const deduped = [];
|
|
12978
12978
|
for (const timelock of timelocks) {
|
|
12979
|
-
const sequence =
|
|
12979
|
+
const sequence = chunkNMDISCGW_cjs.timelockToSequence(timelock).toString();
|
|
12980
12980
|
if (seen.has(sequence)) continue;
|
|
12981
12981
|
seen.add(sequence);
|
|
12982
12982
|
deduped.push(timelock);
|
|
@@ -12992,7 +12992,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
|
|
|
12992
12992
|
if (!newest?.params.pubKey) return baseline;
|
|
12993
12993
|
try {
|
|
12994
12994
|
const pubKey = base.hex.decode(newest.params.pubKey);
|
|
12995
|
-
return new
|
|
12995
|
+
return new chunkM4DM3N6F_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
|
|
12996
12996
|
} catch (e) {
|
|
12997
12997
|
console.warn("Skipping malformed boarding contract at boot", newest.script, e);
|
|
12998
12998
|
return baseline;
|
|
@@ -13024,21 +13024,21 @@ function filterFlatVtxos(vtxos, filter, pendingSpendOutpoints) {
|
|
|
13024
13024
|
if (vtxo.isUnrolled) {
|
|
13025
13025
|
return !!f.withUnrolled;
|
|
13026
13026
|
}
|
|
13027
|
-
if (
|
|
13027
|
+
if (chunkNMDISCGW_cjs.isVtxoSpent(vtxo)) {
|
|
13028
13028
|
return false;
|
|
13029
13029
|
}
|
|
13030
|
-
if (!f.withRecoverable &&
|
|
13030
|
+
if (!f.withRecoverable && chunkNMDISCGW_cjs.canRecoverOnchain(vtxo, now)) {
|
|
13031
13031
|
return false;
|
|
13032
13032
|
}
|
|
13033
13033
|
return true;
|
|
13034
13034
|
});
|
|
13035
13035
|
}
|
|
13036
13036
|
async function refreshSweptStateOfExpiredInputs(wallet, inputs) {
|
|
13037
|
-
const candidates = inputs.filter(
|
|
13037
|
+
const candidates = inputs.filter(chunkNMDISCGW_cjs.isVirtualCoin).map(chunkNMDISCGW_cjs.normalizeVtxo).filter((v) => !v.isSwept);
|
|
13038
13038
|
if (candidates.length === 0) return inputs;
|
|
13039
|
-
const now = candidates.some((v) => v.expiresAtHeight !== void 0) ? await
|
|
13039
|
+
const now = candidates.some((v) => v.expiresAtHeight !== void 0) ? await chunkNMDISCGW_cjs.resolveTimeHeight(wallet.onchainProvider) : { timestamp: /* @__PURE__ */ new Date() };
|
|
13040
13040
|
const suspects = candidates.filter(
|
|
13041
|
-
(v) =>
|
|
13041
|
+
(v) => chunkNMDISCGW_cjs.isPastExpiry(v, now) || v.expiresAtHeight !== void 0 && now.height === void 0
|
|
13042
13042
|
);
|
|
13043
13043
|
if (suspects.length === 0) return inputs;
|
|
13044
13044
|
let sweptNow;
|
|
@@ -13052,12 +13052,12 @@ async function refreshSweptStateOfExpiredInputs(wallet, inputs) {
|
|
|
13052
13052
|
);
|
|
13053
13053
|
} catch (e) {
|
|
13054
13054
|
const message = "could not confirm the swept state of expired settlement inputs; retry the settlement";
|
|
13055
|
-
throw
|
|
13055
|
+
throw chunkNMDISCGW_cjs.isRetryableProviderError(e) ? new chunkNMDISCGW_cjs.ProviderUnavailableError(message, { cause: e }) : new Error(message, { cause: e });
|
|
13056
13056
|
}
|
|
13057
13057
|
if (sweptNow.size === 0) return inputs;
|
|
13058
13058
|
return inputs.map((input) => {
|
|
13059
|
-
if (!
|
|
13060
|
-
return { ...
|
|
13059
|
+
if (!chunkNMDISCGW_cjs.isVirtualCoin(input) || !sweptNow.has(`${input.txid}:${input.vout}`)) return input;
|
|
13060
|
+
return { ...chunkNMDISCGW_cjs.normalizeVtxo(input), isSwept: true };
|
|
13061
13061
|
});
|
|
13062
13062
|
}
|
|
13063
13063
|
var PENDING_RECOVERY_REASON = "is past its operator signer's rotation cutoff \u2014 the operator will not co-sign it until it recovers";
|
|
@@ -13346,7 +13346,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13346
13346
|
async getArkadeReader() {
|
|
13347
13347
|
const indexer = this.indexerProvider;
|
|
13348
13348
|
return {
|
|
13349
|
-
getVtxos: (opts) =>
|
|
13349
|
+
getVtxos: (opts) => chunkNMDISCGW_cjs.getNormalizedVtxos(indexer, opts),
|
|
13350
13350
|
getVirtualTxs: (txids, opts) => indexer.getVirtualTxs(txids, opts)
|
|
13351
13351
|
};
|
|
13352
13352
|
}
|
|
@@ -13386,7 +13386,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13386
13386
|
"Pass either `service` or `arkProvider`/`indexerProvider`/`onchainProvider`, not both"
|
|
13387
13387
|
);
|
|
13388
13388
|
}
|
|
13389
|
-
const arkProvider = config.arkProvider || new
|
|
13389
|
+
const arkProvider = config.arkProvider || new chunkNMDISCGW_cjs.RestArkProvider(config.service ? arkadeServiceUrl(config.service) : void 0);
|
|
13390
13390
|
let indexerProvider = config.indexerProvider;
|
|
13391
13391
|
if (!indexerProvider && !config.service) {
|
|
13392
13392
|
const derived = extractArkProviderUrl(arkProvider);
|
|
@@ -13395,10 +13395,11 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13395
13395
|
"indexerProvider is required when arkProvider is provided without a discoverable serverUrl"
|
|
13396
13396
|
);
|
|
13397
13397
|
}
|
|
13398
|
-
indexerProvider = new
|
|
13398
|
+
indexerProvider = new chunkX2BWPGCY_cjs.RestIndexerProvider(derived ?? chunkNMDISCGW_cjs.DEFAULT_ARKADE_SERVER_URL);
|
|
13399
13399
|
}
|
|
13400
13400
|
const walletRepository = config.storage?.walletRepository ?? new IndexedDBWalletRepository();
|
|
13401
13401
|
const contractRepository = config.storage?.contractRepository ?? new IndexedDBContractRepository();
|
|
13402
|
+
const delegatePubKeyPromise = config.delegateProvider?.getDelegateInfo().then((info2) => chunkM4DM3N6F_cjs.toXOnly(base.hex.decode(info2.pubkey), "delegate key")).catch(() => void 0);
|
|
13402
13403
|
const {
|
|
13403
13404
|
info,
|
|
13404
13405
|
source: serverInfoSource,
|
|
@@ -13409,7 +13410,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13409
13410
|
if (!resolvedService) throw new Error("indexerProvider is unresolved");
|
|
13410
13411
|
indexerProvider = resolvedService.indexerProvider;
|
|
13411
13412
|
}
|
|
13412
|
-
const network =
|
|
13413
|
+
const network = chunkNMDISCGW_cjs.networkFromArkadeInfo(info);
|
|
13413
13414
|
if ("descriptor" in config.identity) {
|
|
13414
13415
|
const descriptor = config.identity.descriptor;
|
|
13415
13416
|
const identityIsMainnet = !descriptor.includes("tpub");
|
|
@@ -13445,18 +13446,18 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13445
13446
|
}
|
|
13446
13447
|
}
|
|
13447
13448
|
const boardingTimelock = config.boardingTimelock ?? toTimelock(info.boardingExitDelay);
|
|
13448
|
-
const serverPubKey =
|
|
13449
|
-
const delegatePubKey =
|
|
13449
|
+
const serverPubKey = chunkM4DM3N6F_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
|
|
13450
|
+
const delegatePubKey = await delegatePubKeyPromise;
|
|
13450
13451
|
const offchainOptions = {
|
|
13451
13452
|
pubKey,
|
|
13452
13453
|
serverPubKey,
|
|
13453
13454
|
csvTimelock: exitTimelock
|
|
13454
13455
|
};
|
|
13455
|
-
const offchainTapscript = !delegatePubKey ? new
|
|
13456
|
-
const boardingTapscript =
|
|
13456
|
+
const offchainTapscript = !delegatePubKey ? new chunkM4DM3N6F_cjs.DefaultVtxo.Script(offchainOptions) : new chunkM4DM3N6F_cjs.DelegateVtxo.Script({ ...offchainOptions, delegatePubKey });
|
|
13457
|
+
const boardingTapscript = chunkM4DM3N6F_cjs.BoardingContractHandler.createScript({
|
|
13457
13458
|
pubKey: base.hex.encode(pubKey),
|
|
13458
13459
|
serverPubKey: base.hex.encode(serverPubKey),
|
|
13459
|
-
csvTimelock:
|
|
13460
|
+
csvTimelock: chunkNMDISCGW_cjs.timelockToSequence(boardingTimelock).toString()
|
|
13460
13461
|
});
|
|
13461
13462
|
return {
|
|
13462
13463
|
arkProvider,
|
|
@@ -13622,7 +13623,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13622
13623
|
if (!filter?.withUnrolled) {
|
|
13623
13624
|
logExcludedVtxos(
|
|
13624
13625
|
"getSpendableVtxos",
|
|
13625
|
-
snapshot.flatMap((contract) => contract.vtxos).filter((vtxo) => vtxo.isUnrolled && !
|
|
13626
|
+
snapshot.flatMap((contract) => contract.vtxos).filter((vtxo) => vtxo.isUnrolled && !chunkNMDISCGW_cjs.isVtxoSpent(vtxo)),
|
|
13626
13627
|
[() => UNROLLED_REASON]
|
|
13627
13628
|
);
|
|
13628
13629
|
}
|
|
@@ -13765,7 +13766,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13765
13766
|
this.getBoardingTxs()
|
|
13766
13767
|
]);
|
|
13767
13768
|
const allVtxos = snapshot.flatMap((_) => _.vtxos);
|
|
13768
|
-
const resolveTxCreatedAt = (txids) =>
|
|
13769
|
+
const resolveTxCreatedAt = (txids) => chunkNMDISCGW_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
|
|
13769
13770
|
return buildTransactionHistory(
|
|
13770
13771
|
allVtxos,
|
|
13771
13772
|
boardingTxs,
|
|
@@ -13919,9 +13920,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13919
13920
|
async getBoardingTapscripts(allowedSigners) {
|
|
13920
13921
|
const byScript = /* @__PURE__ */ new Map();
|
|
13921
13922
|
const add = (s) => byScript.set(base.hex.encode(s.pkScript), s);
|
|
13922
|
-
const boardingCsv = this.boardingTapscript.options.csvTimelock ??
|
|
13923
|
+
const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunkM4DM3N6F_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
13923
13924
|
add(
|
|
13924
|
-
new
|
|
13925
|
+
new chunkM4DM3N6F_cjs.DefaultVtxo.Script({
|
|
13925
13926
|
pubKey: await this.identity.xOnlyPublicKey(),
|
|
13926
13927
|
serverPubKey: this.boardingTapscript.options.serverPubKey,
|
|
13927
13928
|
csvTimelock: boardingCsv
|
|
@@ -13936,7 +13937,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13936
13937
|
for (const c of boardingContracts) {
|
|
13937
13938
|
if (!allowed.has(toXOnlySignerHex(c.params.serverPubKey))) continue;
|
|
13938
13939
|
try {
|
|
13939
|
-
add(
|
|
13940
|
+
add(chunkM4DM3N6F_cjs.BoardingContractHandler.createScript(c.params));
|
|
13940
13941
|
} catch (e) {
|
|
13941
13942
|
console.warn("Skipping malformed boarding contract", c.script, e);
|
|
13942
13943
|
}
|
|
@@ -13965,7 +13966,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13965
13966
|
// Per-row CSV delay decoded from THIS tapscript's exit leaf —
|
|
13966
13967
|
// not the wallet's current boarding timelock, which a signer
|
|
13967
13968
|
// rotation may have changed.
|
|
13968
|
-
csvTimelock:
|
|
13969
|
+
csvTimelock: chunkNMDISCGW_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
|
|
13969
13970
|
coins: utxos
|
|
13970
13971
|
};
|
|
13971
13972
|
})
|
|
@@ -14121,7 +14122,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
14121
14122
|
/** Fetch Arkade transaction ids that are still pending final settlement. */
|
|
14122
14123
|
async fetchPendingTxs() {
|
|
14123
14124
|
const scripts = await this.getWalletScripts();
|
|
14124
|
-
const vtxos = await
|
|
14125
|
+
const vtxos = await chunkNMDISCGW_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
|
|
14125
14126
|
return vtxos.filter(
|
|
14126
14127
|
(vtxo) => (vtxo.isSpent || vtxo.isPreconfirmed && !vtxo.isSwept) && vtxo.arkTxId !== void 0
|
|
14127
14128
|
).map((_) => _.arkTxId);
|
|
@@ -14152,7 +14153,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
14152
14153
|
});
|
|
14153
14154
|
for (const contract of contracts) {
|
|
14154
14155
|
if (map.has(contract.script)) continue;
|
|
14155
|
-
const handler =
|
|
14156
|
+
const handler = chunkM4DM3N6F_cjs.contractHandlers.get(contract.type);
|
|
14156
14157
|
if (handler) {
|
|
14157
14158
|
const script = handler.createScript(contract.params);
|
|
14158
14159
|
map.set(contract.script, script);
|
|
@@ -14264,7 +14265,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
14264
14265
|
}
|
|
14265
14266
|
});
|
|
14266
14267
|
const baselinePubkey = await this.identity.xOnlyPublicKey();
|
|
14267
|
-
const delegatePubKey = this.offchainTapscript instanceof
|
|
14268
|
+
const delegatePubKey = this.offchainTapscript instanceof chunkM4DM3N6F_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
|
|
14268
14269
|
const baselineSigners = [
|
|
14269
14270
|
this.offchainTapscript.options.serverPubKey,
|
|
14270
14271
|
...[...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h))
|
|
@@ -14272,8 +14273,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
14272
14273
|
const seenBaselineScripts = /* @__PURE__ */ new Set();
|
|
14273
14274
|
for (const serverPubKey of baselineSigners) {
|
|
14274
14275
|
for (const csvTimelock2 of this.walletContractTimelocks) {
|
|
14275
|
-
const csvTimelockStr =
|
|
14276
|
-
const defaultScript = new
|
|
14276
|
+
const csvTimelockStr = chunkNMDISCGW_cjs.timelockToSequence(csvTimelock2).toString();
|
|
14277
|
+
const defaultScript = new chunkM4DM3N6F_cjs.DefaultVtxo.Script({
|
|
14277
14278
|
pubKey: baselinePubkey,
|
|
14278
14279
|
serverPubKey,
|
|
14279
14280
|
csvTimelock: csvTimelock2
|
|
@@ -14294,7 +14295,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
14294
14295
|
});
|
|
14295
14296
|
}
|
|
14296
14297
|
if (delegatePubKey) {
|
|
14297
|
-
const delegateScript = new
|
|
14298
|
+
const delegateScript = new chunkM4DM3N6F_cjs.DelegateVtxo.Script({
|
|
14298
14299
|
pubKey: baselinePubkey,
|
|
14299
14300
|
serverPubKey,
|
|
14300
14301
|
delegatePubKey,
|
|
@@ -14318,9 +14319,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
14318
14319
|
}
|
|
14319
14320
|
}
|
|
14320
14321
|
}
|
|
14321
|
-
const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ??
|
|
14322
|
+
const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunkM4DM3N6F_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
14322
14323
|
for (const serverPubKey of baselineSigners) {
|
|
14323
|
-
const baselineBoarding = new
|
|
14324
|
+
const baselineBoarding = new chunkM4DM3N6F_cjs.DefaultVtxo.Script({
|
|
14324
14325
|
pubKey: baselinePubkey,
|
|
14325
14326
|
serverPubKey,
|
|
14326
14327
|
csvTimelock: boardingCsvTimelock
|
|
@@ -14333,7 +14334,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
14333
14334
|
params: {
|
|
14334
14335
|
pubKey: base.hex.encode(baselineBoarding.options.pubKey),
|
|
14335
14336
|
serverPubKey: base.hex.encode(serverPubKey),
|
|
14336
|
-
csvTimelock:
|
|
14337
|
+
csvTimelock: chunkNMDISCGW_cjs.timelockToSequence(boardingCsvTimelock).toString()
|
|
14337
14338
|
},
|
|
14338
14339
|
script: boardingScriptHex,
|
|
14339
14340
|
address: baselineBoarding.address(this.network.hrp, serverPubKey).encode(),
|
|
@@ -14518,7 +14519,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
14518
14519
|
serverPubKey: this.offchainTapscript.options.serverPubKey,
|
|
14519
14520
|
deprecatedSignerPubKeys: [...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h)),
|
|
14520
14521
|
csvTimelocks: this.walletContractTimelocks,
|
|
14521
|
-
delegatePubKey: this.offchainTapscript instanceof
|
|
14522
|
+
delegatePubKey: this.offchainTapscript instanceof chunkM4DM3N6F_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
|
|
14522
14523
|
};
|
|
14523
14524
|
}
|
|
14524
14525
|
_signerRouter;
|
|
@@ -14678,7 +14679,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
14678
14679
|
const [row] = await manager.getContracts({ script: base.hex.encode(display.pkScript) });
|
|
14679
14680
|
const persisted = row?.metadata?.signingDescriptor;
|
|
14680
14681
|
if (typeof persisted === "string") return persisted;
|
|
14681
|
-
return
|
|
14682
|
+
return chunkM4DM3N6F_cjs.identityDescriptor(this.identity);
|
|
14682
14683
|
}
|
|
14683
14684
|
/**
|
|
14684
14685
|
* Build, persist and shape one address of `type` owned by `descriptor`. The descriptor is the
|
|
@@ -14688,7 +14689,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
14688
14689
|
async mintAddress(manager, type, descriptor, tagSource, allocated) {
|
|
14689
14690
|
if (type === "boarding") {
|
|
14690
14691
|
const built2 = this.buildBoardingContract(
|
|
14691
|
-
|
|
14692
|
+
chunkM4DM3N6F_cjs.deriveDescriptorLeafPubKey(descriptor),
|
|
14692
14693
|
descriptor,
|
|
14693
14694
|
tagSource
|
|
14694
14695
|
);
|
|
@@ -14725,11 +14726,11 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
14725
14726
|
* (offchain analogue: {@link buildReceiveContract}).
|
|
14726
14727
|
*/
|
|
14727
14728
|
buildBoardingContract(pubKey, descriptor, tagSource) {
|
|
14728
|
-
const tapscript = new
|
|
14729
|
+
const tapscript = new chunkM4DM3N6F_cjs.DefaultVtxo.Script({
|
|
14729
14730
|
...this._boardingTapscript.options,
|
|
14730
14731
|
pubKey
|
|
14731
14732
|
});
|
|
14732
|
-
const csvTimelock2 = tapscript.options.csvTimelock ??
|
|
14733
|
+
const csvTimelock2 = tapscript.options.csvTimelock ?? chunkM4DM3N6F_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
14733
14734
|
return {
|
|
14734
14735
|
tapscript,
|
|
14735
14736
|
params: {
|
|
@@ -14737,13 +14738,13 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
14737
14738
|
params: {
|
|
14738
14739
|
pubKey: base.hex.encode(pubKey),
|
|
14739
14740
|
serverPubKey: base.hex.encode(tapscript.options.serverPubKey),
|
|
14740
|
-
csvTimelock:
|
|
14741
|
+
csvTimelock: chunkNMDISCGW_cjs.timelockToSequence(csvTimelock2).toString()
|
|
14741
14742
|
},
|
|
14742
14743
|
script: base.hex.encode(tapscript.pkScript),
|
|
14743
14744
|
address: tapscript.address(this.network.hrp, this.arkServerPublicKey).encode(),
|
|
14744
14745
|
state: "active",
|
|
14745
14746
|
metadata: {
|
|
14746
|
-
...tagSource && { source:
|
|
14747
|
+
...tagSource && { source: chunkM4DM3N6F_cjs.WALLET_RECEIVE_SOURCE },
|
|
14747
14748
|
signingDescriptor: descriptor
|
|
14748
14749
|
}
|
|
14749
14750
|
}
|
|
@@ -14765,7 +14766,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
14765
14766
|
if (this._hdProvider) {
|
|
14766
14767
|
return (await this.getContractManager()).getNextSigningDescriptor();
|
|
14767
14768
|
}
|
|
14768
|
-
return
|
|
14769
|
+
return chunkM4DM3N6F_cjs.identityDescriptor(this.identity);
|
|
14769
14770
|
}
|
|
14770
14771
|
/**
|
|
14771
14772
|
* @see HDAllocationCapable.advanceSigningDescriptorWatermark
|
|
@@ -14841,7 +14842,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
14841
14842
|
* the stable public API.
|
|
14842
14843
|
*/
|
|
14843
14844
|
async rotateServerSigner(newServerPubKey, checkpointTapscript) {
|
|
14844
|
-
const xonly =
|
|
14845
|
+
const xonly = chunkM4DM3N6F_cjs.toXOnly(newServerPubKey, "ark signer key");
|
|
14845
14846
|
const newServerUnrollScript = assertValidServerUnrollScript(
|
|
14846
14847
|
checkpointTapscript,
|
|
14847
14848
|
this.network,
|
|
@@ -14871,21 +14872,21 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
14871
14872
|
const [currentBoardingRow] = await manager.getContracts({
|
|
14872
14873
|
script: currentBoardingScript
|
|
14873
14874
|
});
|
|
14874
|
-
const newOffchain = this.offchainTapscript instanceof
|
|
14875
|
+
const newOffchain = this.offchainTapscript instanceof chunkM4DM3N6F_cjs.DelegateVtxo.Script ? new chunkM4DM3N6F_cjs.DelegateVtxo.Script({
|
|
14875
14876
|
...this.offchainTapscript.options,
|
|
14876
14877
|
serverPubKey: xonly
|
|
14877
|
-
}) : new
|
|
14878
|
+
}) : new chunkM4DM3N6F_cjs.DefaultVtxo.Script({
|
|
14878
14879
|
...this.offchainTapscript.options,
|
|
14879
14880
|
serverPubKey: xonly
|
|
14880
14881
|
});
|
|
14881
|
-
const newBoarding = new
|
|
14882
|
+
const newBoarding = new chunkM4DM3N6F_cjs.DefaultVtxo.Script({
|
|
14882
14883
|
...this._boardingTapscript.options,
|
|
14883
14884
|
serverPubKey: xonly
|
|
14884
14885
|
});
|
|
14885
|
-
const offchainCsv =
|
|
14886
|
+
const offchainCsv = chunkNMDISCGW_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
|
|
14886
14887
|
const newOffchainScript = base.hex.encode(newOffchain.pkScript);
|
|
14887
14888
|
const newOffchainAddress = newOffchain.address(this.network.hrp, xonly).encode();
|
|
14888
|
-
if (newOffchain instanceof
|
|
14889
|
+
if (newOffchain instanceof chunkM4DM3N6F_cjs.DelegateVtxo.Script) {
|
|
14889
14890
|
await manager.createContract({
|
|
14890
14891
|
type: "delegate",
|
|
14891
14892
|
params: {
|
|
@@ -14913,13 +14914,13 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
14913
14914
|
metadata: currentOffchainRow?.metadata
|
|
14914
14915
|
});
|
|
14915
14916
|
}
|
|
14916
|
-
const boardingCsv = newBoarding.options.csvTimelock ??
|
|
14917
|
+
const boardingCsv = newBoarding.options.csvTimelock ?? chunkM4DM3N6F_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
14917
14918
|
await manager.createContract({
|
|
14918
14919
|
type: "boarding",
|
|
14919
14920
|
params: {
|
|
14920
14921
|
pubKey: base.hex.encode(newBoarding.options.pubKey),
|
|
14921
14922
|
serverPubKey: base.hex.encode(xonly),
|
|
14922
|
-
csvTimelock:
|
|
14923
|
+
csvTimelock: chunkNMDISCGW_cjs.timelockToSequence(boardingCsv).toString()
|
|
14923
14924
|
},
|
|
14924
14925
|
script: base.hex.encode(newBoarding.pkScript),
|
|
14925
14926
|
address: newBoarding.address(this.network.hrp, xonly).encode(),
|
|
@@ -14947,14 +14948,14 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
14947
14948
|
_restoreInFlight;
|
|
14948
14949
|
_addPendingSpends(inputs) {
|
|
14949
14950
|
for (const input of inputs) {
|
|
14950
|
-
if (
|
|
14951
|
+
if (chunkNMDISCGW_cjs.isVirtualCoin(input)) {
|
|
14951
14952
|
this._pendingSpendOutpoints.add(`${input.txid}:${input.vout}`);
|
|
14952
14953
|
}
|
|
14953
14954
|
}
|
|
14954
14955
|
}
|
|
14955
14956
|
_removePendingSpends(inputs) {
|
|
14956
14957
|
for (const input of inputs) {
|
|
14957
|
-
if (
|
|
14958
|
+
if (chunkNMDISCGW_cjs.isVirtualCoin(input)) {
|
|
14958
14959
|
this._pendingSpendOutpoints.delete(`${input.txid}:${input.vout}`);
|
|
14959
14960
|
}
|
|
14960
14961
|
}
|
|
@@ -15018,7 +15019,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15018
15019
|
if (clashing.length > 0) throw new VtxoReservedError(clashing, "in-flight");
|
|
15019
15020
|
}
|
|
15020
15021
|
_assertNotHeld(inputs) {
|
|
15021
|
-
const held = coinKeys(inputs.filter(
|
|
15022
|
+
const held = coinKeys(inputs.filter(chunkNMDISCGW_cjs.isVirtualCoin)).filter(
|
|
15022
15023
|
(key) => this._heldOutpoints.has(key)
|
|
15023
15024
|
);
|
|
15024
15025
|
if (held.length > 0) throw new VtxoReservedError(held, "held");
|
|
@@ -15056,13 +15057,13 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15056
15057
|
const manager = await this.getContractManager();
|
|
15057
15058
|
const provider = this._hdProvider;
|
|
15058
15059
|
const hd = provider !== void 0;
|
|
15059
|
-
const staticDescriptor = hd ? void 0 : await
|
|
15060
|
+
const staticDescriptor = hd ? void 0 : await chunkM4DM3N6F_cjs.identityDescriptor(this.identity);
|
|
15060
15061
|
const materialize = (index) => hd ? provider.materializeDescriptorAt(index) : staticDescriptor;
|
|
15061
|
-
const delegatePubKey = this.offchainTapscript instanceof
|
|
15062
|
+
const delegatePubKey = this.offchainTapscript instanceof chunkM4DM3N6F_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
|
|
15062
15063
|
const arkInfo = await this.arkProvider.getInfo();
|
|
15063
|
-
const currentSignerPubKey =
|
|
15064
|
+
const currentSignerPubKey = chunkM4DM3N6F_cjs.toXOnly(base.hex.decode(arkInfo.signerPubkey), "ark signer key");
|
|
15064
15065
|
const deprecatedSignerPubKeys = arkInfo.deprecatedSigners.map(
|
|
15065
|
-
(s) =>
|
|
15066
|
+
(s) => chunkM4DM3N6F_cjs.toXOnly(base.hex.decode(s.pubkey), "deprecated signer key")
|
|
15066
15067
|
);
|
|
15067
15068
|
const deps = {
|
|
15068
15069
|
indexerProvider: this.indexerProvider,
|
|
@@ -15074,7 +15075,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15074
15075
|
deprecatedSignerPubKeys,
|
|
15075
15076
|
csvTimelocks: this.walletContractTimelocks,
|
|
15076
15077
|
// Boarding-exit CSV, distinct from the unilateral-exit matrix.
|
|
15077
|
-
boardingTimelock: this.boardingTapscript.options.csvTimelock ??
|
|
15078
|
+
boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunkM4DM3N6F_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
|
|
15078
15079
|
delegatePubKey
|
|
15079
15080
|
};
|
|
15080
15081
|
const result = await manager.scanContracts({
|
|
@@ -15191,7 +15192,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15191
15192
|
throw new Error("Invalid configured public key");
|
|
15192
15193
|
}
|
|
15193
15194
|
const setup = await ReadonlyWallet.setupWalletConfig(config, pubkey);
|
|
15194
|
-
const forfeitPubkey =
|
|
15195
|
+
const forfeitPubkey = chunkM4DM3N6F_cjs.toXOnly(base.hex.decode(setup.info.forfeitPubkey), "forfeit key");
|
|
15195
15196
|
const forfeitAddress = btcSigner.Address(setup.network).decode(setup.info.forfeitAddress);
|
|
15196
15197
|
const forfeitOutputScript = btcSigner.OutScript.encode(forfeitAddress);
|
|
15197
15198
|
const serverUnrollScript = assertValidServerUnrollScript(
|
|
@@ -15359,13 +15360,13 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15359
15360
|
void this.logUngatedInputs("settle({ inputs })", params.inputs);
|
|
15360
15361
|
}
|
|
15361
15362
|
const offchainAddress = await this.getAddress();
|
|
15362
|
-
const offchainPkScript =
|
|
15363
|
+
const offchainPkScript = chunkNMDISCGW_cjs.ArkAddress.decode(offchainAddress).pkScript;
|
|
15363
15364
|
const offchainOutputScript = base.hex.encode(offchainPkScript);
|
|
15364
15365
|
if (!params) {
|
|
15365
15366
|
const { fees, vtxoMaxAmount } = await this.arkProvider.getInfo();
|
|
15366
15367
|
const estimator = new Estimator(fees.intentFee);
|
|
15367
15368
|
let amount = 0;
|
|
15368
|
-
const exitScript =
|
|
15369
|
+
const exitScript = chunkNMDISCGW_cjs.CSVMultisigTapscript.decode(
|
|
15369
15370
|
base.hex.decode(this.boardingTapscript.exitScript)
|
|
15370
15371
|
);
|
|
15371
15372
|
const boardingTimelock = exitScript.params.timelock;
|
|
@@ -15397,7 +15398,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15397
15398
|
if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
|
|
15398
15399
|
break;
|
|
15399
15400
|
}
|
|
15400
|
-
const inputFee = estimator.evalOffchainInput(
|
|
15401
|
+
const inputFee = estimator.evalOffchainInput(chunkNMDISCGW_cjs.toOffchainInputFeeParams(vtxo));
|
|
15401
15402
|
if (inputFee.satoshis >= vtxo.value) {
|
|
15402
15403
|
continue;
|
|
15403
15404
|
}
|
|
@@ -15449,7 +15450,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15449
15450
|
let script;
|
|
15450
15451
|
let arkAddress;
|
|
15451
15452
|
try {
|
|
15452
|
-
arkAddress =
|
|
15453
|
+
arkAddress = chunkNMDISCGW_cjs.ArkAddress.decode(output.address);
|
|
15453
15454
|
} catch {
|
|
15454
15455
|
arkAddress = void 0;
|
|
15455
15456
|
}
|
|
@@ -15521,11 +15522,11 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15521
15522
|
]);
|
|
15522
15523
|
let intentTxId;
|
|
15523
15524
|
try {
|
|
15524
|
-
intentTxId =
|
|
15525
|
+
intentTxId = chunkNMDISCGW_cjs.Transaction.fromPSBT(base.base64.decode(intent.proof)).id;
|
|
15525
15526
|
} catch {
|
|
15526
15527
|
intentTxId = params.inputs.map((i) => `${i.txid}:${i.vout}`).sort().join("|");
|
|
15527
15528
|
}
|
|
15528
|
-
const settleInputVtxos = params.inputs.filter(
|
|
15529
|
+
const settleInputVtxos = params.inputs.filter(chunkNMDISCGW_cjs.isVirtualCoin);
|
|
15529
15530
|
const contractManager = await this.getContractManager();
|
|
15530
15531
|
await contractManager.assertAnnotatable(settleInputVtxos);
|
|
15531
15532
|
await contractManager.assertSpendableNow?.(
|
|
@@ -15534,7 +15535,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15534
15535
|
);
|
|
15535
15536
|
if (picked) this._assertNotHeld(params.inputs);
|
|
15536
15537
|
this._addPendingSpends(params.inputs);
|
|
15537
|
-
const boardingKeys = onReserved ? coinKeys(params.inputs.filter((i) => !
|
|
15538
|
+
const boardingKeys = onReserved ? coinKeys(params.inputs.filter((i) => !chunkNMDISCGW_cjs.isVirtualCoin(i))) : [];
|
|
15538
15539
|
for (const key of boardingKeys) this._pendingSpendOutpoints.add(key);
|
|
15539
15540
|
const settlingKeys = params.inputs.map((i) => `${i.txid}:${i.vout}`);
|
|
15540
15541
|
for (const key of settlingKeys) this._settlingOutpoints.add(key);
|
|
@@ -15645,7 +15646,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15645
15646
|
async maybeRotateBoardingAfterBoard(inputs) {
|
|
15646
15647
|
if (!this._descriptorProvider) return;
|
|
15647
15648
|
const consumedBoarding = inputs.some(
|
|
15648
|
-
(input) => typeof input !== "string" && !
|
|
15649
|
+
(input) => typeof input !== "string" && !chunkNMDISCGW_cjs.isVirtualCoin(input)
|
|
15649
15650
|
);
|
|
15650
15651
|
if (!consumedBoarding) return;
|
|
15651
15652
|
try {
|
|
@@ -15656,7 +15657,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15656
15657
|
}
|
|
15657
15658
|
async handleSettlementFinalizationEvent(event, inputs, forfeitOutputScript, expectedRecipients, connectorsGraph, validatedCommitmentTxid) {
|
|
15658
15659
|
const signedForfeits = [];
|
|
15659
|
-
let settlementPsbt =
|
|
15660
|
+
let settlementPsbt = chunkNMDISCGW_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
|
|
15660
15661
|
assertFinalCommitmentMatchesValidated(
|
|
15661
15662
|
settlementPsbt,
|
|
15662
15663
|
validatedCommitmentTxid,
|
|
@@ -15669,7 +15670,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15669
15670
|
let connectorIndex = 0;
|
|
15670
15671
|
const connectorsLeaves = connectorsGraph?.leaves() || [];
|
|
15671
15672
|
for (const input of inputs) {
|
|
15672
|
-
if (!
|
|
15673
|
+
if (!chunkNMDISCGW_cjs.isVirtualCoin(input)) {
|
|
15673
15674
|
let matched = false;
|
|
15674
15675
|
for (let i = 0; i < settlementPsbt.inputsLength; i++) {
|
|
15675
15676
|
const settlementInput = settlementPsbt.getInput(i);
|
|
@@ -15707,7 +15708,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15707
15708
|
}
|
|
15708
15709
|
continue;
|
|
15709
15710
|
}
|
|
15710
|
-
if (!
|
|
15711
|
+
if (!chunkNMDISCGW_cjs.requiresForfeit(input) || isSubdust({ value: input.value }, this.dustAmount)) {
|
|
15711
15712
|
continue;
|
|
15712
15713
|
}
|
|
15713
15714
|
if (connectorsLeaves.length === 0) {
|
|
@@ -15735,7 +15736,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15735
15736
|
index: input.vout,
|
|
15736
15737
|
witnessUtxo: {
|
|
15737
15738
|
amount: BigInt(input.value),
|
|
15738
|
-
script:
|
|
15739
|
+
script: chunkNMDISCGW_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
15739
15740
|
},
|
|
15740
15741
|
sighashType: btcSigner.SigHash.DEFAULT,
|
|
15741
15742
|
tapLeafScript: [input.forfeitTapLeafScript]
|
|
@@ -15754,7 +15755,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15754
15755
|
forfeitTx = await this._signerRouter.sign(forfeitTx, [
|
|
15755
15756
|
{
|
|
15756
15757
|
index: 0,
|
|
15757
|
-
lookupScript:
|
|
15758
|
+
lookupScript: chunkNMDISCGW_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
15758
15759
|
}
|
|
15759
15760
|
]);
|
|
15760
15761
|
signedForfeits.push(base.base64.encode(forfeitTx.toPSBT()));
|
|
@@ -15812,7 +15813,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15812
15813
|
resolveBatchExpiryPolicy(this.network, this.batchExpiryPolicy)
|
|
15813
15814
|
);
|
|
15814
15815
|
await this.arkProvider.confirmRegistration(intentId);
|
|
15815
|
-
const sweepTapscript =
|
|
15816
|
+
const sweepTapscript = chunkNMDISCGW_cjs.CSVMultisigTapscript.encode({
|
|
15816
15817
|
timelock,
|
|
15817
15818
|
pubkeys: [this.forfeitPubkey]
|
|
15818
15819
|
}).script;
|
|
@@ -15827,14 +15828,14 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15827
15828
|
throw new Error("Sweep tap tree root not set");
|
|
15828
15829
|
}
|
|
15829
15830
|
const xOnlyPublicKeys = event.cosignersPublicKeys.map(
|
|
15830
|
-
(k) => base.hex.encode(
|
|
15831
|
+
(k) => base.hex.encode(chunkM4DM3N6F_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
|
|
15831
15832
|
);
|
|
15832
15833
|
const signerPublicKey = await session.getPublicKey();
|
|
15833
|
-
const xonlySignerPublicKey =
|
|
15834
|
+
const xonlySignerPublicKey = chunkM4DM3N6F_cjs.toXOnly(signerPublicKey, "signer key");
|
|
15834
15835
|
if (!xOnlyPublicKeys.includes(base.hex.encode(xonlySignerPublicKey))) {
|
|
15835
15836
|
return { skip: true };
|
|
15836
15837
|
}
|
|
15837
|
-
const commitmentTx =
|
|
15838
|
+
const commitmentTx = chunkNMDISCGW_cjs.Transaction.fromPSBT(
|
|
15838
15839
|
base.base64.decode(event.unsignedCommitmentTx)
|
|
15839
15840
|
);
|
|
15840
15841
|
validateVtxoTxGraph(vtxoTree, commitmentTx, sweepTapTreeRoot);
|
|
@@ -15916,9 +15917,9 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15916
15917
|
...existing ?? {},
|
|
15917
15918
|
intentTxId,
|
|
15918
15919
|
registerProof: intent.proof,
|
|
15919
|
-
registerProofMessage:
|
|
15920
|
+
registerProofMessage: chunkNMDISCGW_cjs.Intent.encodeMessage(intent.message),
|
|
15920
15921
|
deleteProof: deleteIntent.proof,
|
|
15921
|
-
deleteProofMessage:
|
|
15922
|
+
deleteProofMessage: chunkNMDISCGW_cjs.Intent.encodeMessage(deleteIntent.message),
|
|
15922
15923
|
intentVtxos: inputs.map((i) => ({
|
|
15923
15924
|
txid: i.txid,
|
|
15924
15925
|
vout: i.vout
|
|
@@ -15951,7 +15952,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15951
15952
|
try {
|
|
15952
15953
|
return await this.arkProvider.registerIntent(intent);
|
|
15953
15954
|
} catch (error) {
|
|
15954
|
-
if (error instanceof
|
|
15955
|
+
if (error instanceof chunkNMDISCGW_cjs.ArkError && error.code === 0 && error.message.includes("duplicated input")) {
|
|
15955
15956
|
const deleteIntent = await this.makeDeleteIntentSignature(inputs);
|
|
15956
15957
|
await this.arkProvider.deleteIntent(deleteIntent);
|
|
15957
15958
|
return this.arkProvider.registerIntent(intent);
|
|
@@ -15967,7 +15968,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15967
15968
|
expire_at: 0,
|
|
15968
15969
|
cosigners_public_keys: cosignerPubKeys
|
|
15969
15970
|
};
|
|
15970
|
-
const proof =
|
|
15971
|
+
const proof = chunkNMDISCGW_cjs.Intent.create(message, coins, outputs);
|
|
15971
15972
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
15972
15973
|
return {
|
|
15973
15974
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -15979,7 +15980,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15979
15980
|
type: "delete",
|
|
15980
15981
|
expire_at: 0
|
|
15981
15982
|
};
|
|
15982
|
-
const proof =
|
|
15983
|
+
const proof = chunkNMDISCGW_cjs.Intent.create(message, coins, []);
|
|
15983
15984
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
15984
15985
|
return {
|
|
15985
15986
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -15991,7 +15992,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
15991
15992
|
type: "get-pending-tx",
|
|
15992
15993
|
expire_at: 0
|
|
15993
15994
|
};
|
|
15994
|
-
const proof =
|
|
15995
|
+
const proof = chunkNMDISCGW_cjs.Intent.create(message, coins, []);
|
|
15995
15996
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
15996
15997
|
return {
|
|
15997
15998
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -16012,7 +16013,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
16012
16013
|
if (!vtxos || vtxos.length === 0) {
|
|
16013
16014
|
const scriptMap = await this.getScriptMap();
|
|
16014
16015
|
const allExtended = [];
|
|
16015
|
-
const fetchedVtxos = await
|
|
16016
|
+
const fetchedVtxos = await chunkNMDISCGW_cjs.getAllNormalizedVtxos(this.indexerProvider, [
|
|
16016
16017
|
...scriptMap.keys()
|
|
16017
16018
|
]);
|
|
16018
16019
|
for (const vtxo of fetchedVtxos) {
|
|
@@ -16055,8 +16056,8 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
16055
16056
|
batchPending.push(pendingTx.arkTxid);
|
|
16056
16057
|
try {
|
|
16057
16058
|
const checkpointTxs = pendingTx.signedCheckpointTxs.map((c) => {
|
|
16058
|
-
const tx =
|
|
16059
|
-
|
|
16059
|
+
const tx = chunkNMDISCGW_cjs.Transaction.fromPSBT(base.base64.decode(c));
|
|
16060
|
+
chunkNMDISCGW_cjs.assertAllowedSighashTypes(tx);
|
|
16060
16061
|
return tx;
|
|
16061
16062
|
});
|
|
16062
16063
|
assertCheckpointsMatchInputs(
|
|
@@ -16125,11 +16126,11 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
16125
16126
|
* and one per deprecated signer — else a pre-rotation tx would stay pending forever.
|
|
16126
16127
|
*/
|
|
16127
16128
|
checkpointUnrollCandidates(info) {
|
|
16128
|
-
const current =
|
|
16129
|
+
const current = chunkNMDISCGW_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
|
|
16129
16130
|
const candidates = [this._serverUnrollScript, current];
|
|
16130
16131
|
for (const deprecated of signerSetFromInfo(info).deprecated.keys()) {
|
|
16131
16132
|
candidates.push(
|
|
16132
|
-
|
|
16133
|
+
chunkNMDISCGW_cjs.CSVMultisigTapscript.encode({
|
|
16133
16134
|
...current.params,
|
|
16134
16135
|
pubkeys: [base.hex.decode(deprecated)]
|
|
16135
16136
|
})
|
|
@@ -16224,7 +16225,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
16224
16225
|
if (vtxos.length === 0) {
|
|
16225
16226
|
throw new Error("No VTXOs found for this arkadeCash");
|
|
16226
16227
|
}
|
|
16227
|
-
const myPkScript =
|
|
16228
|
+
const myPkScript = chunkNMDISCGW_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
|
|
16228
16229
|
let { spendable, recoverable, unclaimed } = this.classifyCashVtxos(vtxos);
|
|
16229
16230
|
let swept = 0;
|
|
16230
16231
|
const drainable = vtxos.filter(
|
|
@@ -16351,7 +16352,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
16351
16352
|
params: {
|
|
16352
16353
|
pubKey: base.hex.encode(cash.publicKey),
|
|
16353
16354
|
serverPubKey: base.hex.encode(cash.serverPubKey),
|
|
16354
|
-
csvTimelock:
|
|
16355
|
+
csvTimelock: chunkNMDISCGW_cjs.timelockToSequence(cash.csvTimelock).toString()
|
|
16355
16356
|
},
|
|
16356
16357
|
script: base.hex.encode(cashScript.pkScript),
|
|
16357
16358
|
address: cashAddress.encode(),
|
|
@@ -16432,7 +16433,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
16432
16433
|
const recoverable = [];
|
|
16433
16434
|
const unclaimed = [];
|
|
16434
16435
|
for (const vtxo of vtxos) {
|
|
16435
|
-
if (
|
|
16436
|
+
if (chunkNMDISCGW_cjs.isVtxoSpent(vtxo)) {
|
|
16436
16437
|
unclaimed.push(cashReport(vtxo, "already-spent"));
|
|
16437
16438
|
} else if (vtxo.isUnrolled) {
|
|
16438
16439
|
unclaimed.push(cashReport(vtxo, "exited"));
|
|
@@ -16454,7 +16455,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
16454
16455
|
const all = [];
|
|
16455
16456
|
const seen = /* @__PURE__ */ new Set();
|
|
16456
16457
|
for (let pageIndex = 0; ; pageIndex++) {
|
|
16457
|
-
const { vtxos, page } = await
|
|
16458
|
+
const { vtxos, page } = await chunkNMDISCGW_cjs.getNormalizedVtxos(this.indexerProvider, {
|
|
16458
16459
|
scripts,
|
|
16459
16460
|
pageIndex,
|
|
16460
16461
|
pageSize
|
|
@@ -16492,7 +16493,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
16492
16493
|
for (let i = 0; i < inputs.length; i += MAX_INPUTS_PER_INTENT) {
|
|
16493
16494
|
const batch = inputs.slice(i, i + MAX_INPUTS_PER_INTENT);
|
|
16494
16495
|
const message = { type: "get-pending-tx", expire_at: 0 };
|
|
16495
|
-
const proof =
|
|
16496
|
+
const proof = chunkNMDISCGW_cjs.Intent.create(message, batch, []);
|
|
16496
16497
|
const signedProof = await identity.sign(
|
|
16497
16498
|
proof,
|
|
16498
16499
|
Array.from({ length: batch.length + 1 }, (_, j) => j)
|
|
@@ -16513,8 +16514,8 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
16513
16514
|
for (const pendingTx of pendingTxs) {
|
|
16514
16515
|
try {
|
|
16515
16516
|
const checkpointTxs = pendingTx.signedCheckpointTxs.map((checkpoint) => {
|
|
16516
|
-
const tx =
|
|
16517
|
-
|
|
16517
|
+
const tx = chunkNMDISCGW_cjs.Transaction.fromPSBT(base.base64.decode(checkpoint));
|
|
16518
|
+
chunkNMDISCGW_cjs.assertAllowedSighashTypes(tx);
|
|
16518
16519
|
return tx;
|
|
16519
16520
|
});
|
|
16520
16521
|
assertCheckpointsMatchInputs(
|
|
@@ -16554,7 +16555,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
16554
16555
|
}
|
|
16555
16556
|
/** Sum the outputs of an ark tx PSBT that pay the given scriptPubKey. */
|
|
16556
16557
|
arkTxAmountPaidTo(arkTxPsbt, pkScriptHex) {
|
|
16557
|
-
const arkTx =
|
|
16558
|
+
const arkTx = chunkNMDISCGW_cjs.Transaction.fromPSBT(base.base64.decode(arkTxPsbt));
|
|
16558
16559
|
let total = 0;
|
|
16559
16560
|
for (let i = 0; i < arkTx.outputsLength; i++) {
|
|
16560
16561
|
const output = arkTx.getOutput(i);
|
|
@@ -16613,7 +16614,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
16613
16614
|
throw new Error("send({ maxChangeFee }): expected a non-negative safe integer");
|
|
16614
16615
|
}
|
|
16615
16616
|
if (selectedVtxos) {
|
|
16616
|
-
if (inputExpiryFloor) selectedVtxos = selectedVtxos.map(
|
|
16617
|
+
if (inputExpiryFloor) selectedVtxos = selectedVtxos.map(chunkNMDISCGW_cjs.normalizeVtxo);
|
|
16617
16618
|
if (inputExpiryFloor && selectedVtxos.some((coin) => !meetsInputExpiryFloor(coin, inputExpiryFloor))) {
|
|
16618
16619
|
throw new Error("send({ selectedVtxos }): input expiry floor not met");
|
|
16619
16620
|
}
|
|
@@ -16748,7 +16749,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
16748
16749
|
script: recipient.script,
|
|
16749
16750
|
amount: BigInt(recipient.amount),
|
|
16750
16751
|
// Already checked against the recipient address in `validateRecipients`.
|
|
16751
|
-
...recipient.tapTree ? { tapTree:
|
|
16752
|
+
...recipient.tapTree ? { tapTree: chunkNMDISCGW_cjs.toBIP371TapTree(recipient.tapTree) } : {}
|
|
16752
16753
|
}));
|
|
16753
16754
|
const totalBtcOutput = outputs.reduce((sum, o) => sum + Number(o.amount), 0);
|
|
16754
16755
|
let changeAmount = totalBtcSelected - totalBtcOutput;
|
|
@@ -16940,10 +16941,10 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
16940
16941
|
const serverPubKey = this.arkServerPublicKey;
|
|
16941
16942
|
const serverUnrollScript = this.serverUnrollScript;
|
|
16942
16943
|
const arkAddress = offchainTapscript.address(this.network.hrp, serverPubKey);
|
|
16943
|
-
const normalizedInputs = inputs.map(
|
|
16944
|
-
const at = now ?? await
|
|
16944
|
+
const normalizedInputs = inputs.map(chunkNMDISCGW_cjs.normalizeVtxo);
|
|
16945
|
+
const at = now ?? await chunkNMDISCGW_cjs.resolveTimeHeight(this.onchainProvider);
|
|
16945
16946
|
for (const input of normalizedInputs) {
|
|
16946
|
-
if (!
|
|
16947
|
+
if (!chunkNMDISCGW_cjs.canSpendOffchain(input, at)) {
|
|
16947
16948
|
throw new Error(
|
|
16948
16949
|
`sendSelectedVtxosToSelf: input ${input.txid}:${input.vout} is not cooperatively spendable`
|
|
16949
16950
|
);
|
|
@@ -17027,7 +17028,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
17027
17028
|
);
|
|
17028
17029
|
const arkTxJobs = inputs.map((input, index) => ({
|
|
17029
17030
|
index,
|
|
17030
|
-
lookupScript:
|
|
17031
|
+
lookupScript: chunkNMDISCGW_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
17031
17032
|
}));
|
|
17032
17033
|
const identity = this.identity;
|
|
17033
17034
|
const signer = {
|
|
@@ -17136,7 +17137,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
17136
17137
|
}
|
|
17137
17138
|
const checkpointIdByOutpoint = /* @__PURE__ */ new Map();
|
|
17138
17139
|
for (const encoded of signedCheckpointTxs) {
|
|
17139
|
-
const checkpoint =
|
|
17140
|
+
const checkpoint = chunkNMDISCGW_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
|
|
17140
17141
|
for (let i = 0; i < checkpoint.inputsLength; i++) {
|
|
17141
17142
|
const input = checkpoint.getInput(i);
|
|
17142
17143
|
if (!input.txid) continue;
|
|
@@ -17252,12 +17253,12 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
17252
17253
|
const spentVtxos = [];
|
|
17253
17254
|
const inputArkTxIds = /* @__PURE__ */ new Set();
|
|
17254
17255
|
const boardingRemovalsByAddress = /* @__PURE__ */ new Map();
|
|
17255
|
-
const vtxoInputs = inputs.filter(
|
|
17256
|
+
const vtxoInputs = inputs.filter(chunkNMDISCGW_cjs.isVirtualCoin);
|
|
17256
17257
|
const cm = await this.getContractManager();
|
|
17257
17258
|
const annotatedVtxos = await cm.annotateVtxos(vtxoInputs);
|
|
17258
17259
|
const annotatedByKey = new Map(annotatedVtxos.map((v) => [`${v.txid}:${v.vout}`, v]));
|
|
17259
17260
|
for (const input of inputs) {
|
|
17260
|
-
if (
|
|
17261
|
+
if (chunkNMDISCGW_cjs.isVirtualCoin(input)) {
|
|
17261
17262
|
const outpoint = `${input.txid}:${input.vout}`;
|
|
17262
17263
|
const vtxo = annotatedByKey.get(outpoint);
|
|
17263
17264
|
if (!vtxo) {
|
|
@@ -17274,7 +17275,7 @@ var Wallet2 = class extends ReadonlyWallet {
|
|
|
17274
17275
|
} else {
|
|
17275
17276
|
let sourceAddress;
|
|
17276
17277
|
try {
|
|
17277
|
-
sourceAddress =
|
|
17278
|
+
sourceAddress = chunkNMDISCGW_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
|
|
17278
17279
|
this.network
|
|
17279
17280
|
);
|
|
17280
17281
|
} catch {
|
|
@@ -17346,7 +17347,7 @@ function bySelectionOrder(a, b) {
|
|
|
17346
17347
|
return b.value - a.value;
|
|
17347
17348
|
}
|
|
17348
17349
|
function selectVirtualCoins(coins, targetAmount) {
|
|
17349
|
-
const sortedCoins = coins.map(
|
|
17350
|
+
const sortedCoins = coins.map(chunkNMDISCGW_cjs.normalizeVtxo).sort(bySelectionOrder);
|
|
17350
17351
|
const selectedCoins = [];
|
|
17351
17352
|
let selectedAmount = 0;
|
|
17352
17353
|
for (const coin of sortedCoins) {
|
|
@@ -17463,7 +17464,7 @@ function assertTimeoutMap(name, timeouts) {
|
|
|
17463
17464
|
if (value === void 0) {
|
|
17464
17465
|
throw new Error(`${name}.${key} must be a non-negative safe integer`);
|
|
17465
17466
|
}
|
|
17466
|
-
|
|
17467
|
+
chunkNMDISCGW_cjs.assertTimerMs(`${name}.${key}`, value);
|
|
17467
17468
|
}
|
|
17468
17469
|
}
|
|
17469
17470
|
var MessageBus = class {
|
|
@@ -17480,8 +17481,8 @@ var MessageBus = class {
|
|
|
17480
17481
|
}) {
|
|
17481
17482
|
this.walletRepository = walletRepository;
|
|
17482
17483
|
this.contractRepository = contractRepository;
|
|
17483
|
-
|
|
17484
|
-
|
|
17484
|
+
chunkNMDISCGW_cjs.assertTimerMs("tickIntervalMs", tickIntervalMs);
|
|
17485
|
+
chunkNMDISCGW_cjs.assertTimerMs("messageTimeoutMs", messageTimeoutMs);
|
|
17485
17486
|
assertTimeoutMap("messageTimeoutOverrides", messageTimeoutOverrides);
|
|
17486
17487
|
this.intentRepository = intentRepository;
|
|
17487
17488
|
this.onchainProvider = onchainProvider;
|
|
@@ -17737,14 +17738,14 @@ var MessageBus = class {
|
|
|
17737
17738
|
this.initialized = true;
|
|
17738
17739
|
}
|
|
17739
17740
|
async buildServices(config) {
|
|
17740
|
-
const arkProvider = new
|
|
17741
|
+
const arkProvider = new chunkNMDISCGW_cjs.RestArkProvider(config.arkServer.url);
|
|
17741
17742
|
const storage = {
|
|
17742
17743
|
walletRepository: this.walletRepository,
|
|
17743
17744
|
contractRepository: this.contractRepository,
|
|
17744
17745
|
...this.intentRepository && { intentRepository: this.intentRepository }
|
|
17745
17746
|
};
|
|
17746
17747
|
const delegateProvider = config.delegateUrl ? new RestDelegateProvider(config.delegateUrl) : void 0;
|
|
17747
|
-
const indexerProvider = new
|
|
17748
|
+
const indexerProvider = new chunkX2BWPGCY_cjs.RestIndexerProvider(config.arkServer.url);
|
|
17748
17749
|
const serialized = normalizeSerializedIdentity(config.wallet);
|
|
17749
17750
|
if (isSigningSerialized(serialized)) {
|
|
17750
17751
|
const identity2 = hydrateIdentity(serialized);
|
|
@@ -18086,7 +18087,7 @@ var offboardNetworkNames = [
|
|
|
18086
18087
|
function offboardDestinationScript(destinationAddress) {
|
|
18087
18088
|
for (const networkName of offboardNetworkNames) {
|
|
18088
18089
|
try {
|
|
18089
|
-
const network =
|
|
18090
|
+
const network = chunkNMDISCGW_cjs.networks[networkName];
|
|
18090
18091
|
const addr = btcSigner.Address(network).decode(destinationAddress);
|
|
18091
18092
|
return btcSigner.OutScript.encode(addr);
|
|
18092
18093
|
} catch {
|
|
@@ -18126,7 +18127,7 @@ function filterOffboardInputs(vtxos, feeInfo, named) {
|
|
|
18126
18127
|
const inputs = [];
|
|
18127
18128
|
let subtotal = 0n;
|
|
18128
18129
|
for (const vtxo of vtxos) {
|
|
18129
|
-
const inputFee = estimator.evalOffchainInput(
|
|
18130
|
+
const inputFee = estimator.evalOffchainInput(chunkNMDISCGW_cjs.toOffchainInputFeeParams(vtxo));
|
|
18130
18131
|
if (inputFee.satoshis >= vtxo.value) {
|
|
18131
18132
|
if (named) {
|
|
18132
18133
|
throw new Error(
|
|
@@ -18223,7 +18224,7 @@ var Ramps = class {
|
|
|
18223
18224
|
}
|
|
18224
18225
|
amount = amount ?? totalAmount;
|
|
18225
18226
|
const offchainAddress = await this.wallet.getAddress();
|
|
18226
|
-
const offchainAddr =
|
|
18227
|
+
const offchainAddr = chunkNMDISCGW_cjs.ArkAddress.decode(offchainAddress);
|
|
18227
18228
|
const offchainScript = base.hex.encode(offchainAddr.pkScript);
|
|
18228
18229
|
const outputFee = estimator.evalOffchainOutput({
|
|
18229
18230
|
amount,
|
|
@@ -18373,7 +18374,7 @@ var Ramps = class {
|
|
|
18373
18374
|
const ordered = [...candidates].sort(bySelectionOrder);
|
|
18374
18375
|
let covered = 0n;
|
|
18375
18376
|
for (let i = 0; i < ordered.length && i < MAX_VTXOS_PER_SETTLEMENT; i++) {
|
|
18376
|
-
const fee = estimator.evalOffchainInput(
|
|
18377
|
+
const fee = estimator.evalOffchainInput(chunkNMDISCGW_cjs.toOffchainInputFeeParams(ordered[i])).satoshis;
|
|
18377
18378
|
covered += BigInt(ordered[i].value) - BigInt(fee);
|
|
18378
18379
|
if (covered < needed) continue;
|
|
18379
18380
|
try {
|
|
@@ -18407,7 +18408,7 @@ var Ramps = class {
|
|
|
18407
18408
|
async fundChange(left, estimator) {
|
|
18408
18409
|
if (left <= 0n) return { change: 0n };
|
|
18409
18410
|
const changeAddress = await this.wallet.getAddress();
|
|
18410
|
-
const changeScript = base.hex.encode(
|
|
18411
|
+
const changeScript = base.hex.encode(chunkNMDISCGW_cjs.ArkAddress.decode(changeAddress).pkScript);
|
|
18411
18412
|
const { change } = changeAfterOutputFee(
|
|
18412
18413
|
left,
|
|
18413
18414
|
(amount) => BigInt(estimator.evalOffchainOutput({ amount, script: changeScript }).satoshis)
|
|
@@ -19341,7 +19342,7 @@ var WalletMessageHandler = class {
|
|
|
19341
19342
|
this.lazyBoardingInit = payload.lazyBoarding ?? false;
|
|
19342
19343
|
this.boardingEpoch++;
|
|
19343
19344
|
this.boardingLoaded = false;
|
|
19344
|
-
this.indexerProvider = new
|
|
19345
|
+
this.indexerProvider = new chunkX2BWPGCY_cjs.RestIndexerProvider(arkServerUrl);
|
|
19345
19346
|
await this.onWalletInitialized();
|
|
19346
19347
|
}
|
|
19347
19348
|
/** @see RequestInitWallet.payload.lazyBoarding */
|
|
@@ -19763,7 +19764,7 @@ var WalletMessageHandler = class {
|
|
|
19763
19764
|
this.readonlyWallet.getBoardingTxs()
|
|
19764
19765
|
]);
|
|
19765
19766
|
const indexerProvider = this.indexerProvider;
|
|
19766
|
-
const resolveTxCreatedAt = indexerProvider ? (txids) =>
|
|
19767
|
+
const resolveTxCreatedAt = indexerProvider ? (txids) => chunkNMDISCGW_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
|
|
19767
19768
|
return buildTransactionHistory(
|
|
19768
19769
|
vtxos,
|
|
19769
19770
|
boardingTxs,
|
|
@@ -19832,7 +19833,7 @@ var DEFAULT_MESSAGE_TIMEOUTS = {
|
|
|
19832
19833
|
// budget so the worker's snapshot fallback stays reachable before this
|
|
19833
19834
|
// page deadline fires — lowering it below the budget would time the page
|
|
19834
19835
|
// out while the worker is still seconds from answering from cache.
|
|
19835
|
-
GET_ARKADE_INFO:
|
|
19836
|
+
GET_ARKADE_INFO: chunkNMDISCGW_cjs.INFO_FETCH_TIMEOUT_MS + 8e3,
|
|
19836
19837
|
INDEXER_GET_VTXOS: 2e4,
|
|
19837
19838
|
INDEXER_GET_VIRTUAL_TXS: 2e4,
|
|
19838
19839
|
GET_VTXOS: 2e4,
|
|
@@ -19977,7 +19978,7 @@ var ServiceWorkerAssetManager = class extends ServiceWorkerReadonlyAssetManager
|
|
|
19977
19978
|
}
|
|
19978
19979
|
};
|
|
19979
19980
|
var initializeMessageBus = (serviceWorker, config, timeoutMs = 2e3) => {
|
|
19980
|
-
|
|
19981
|
+
chunkNMDISCGW_cjs.assertTimerMs("messageBusTimeoutMs", timeoutMs);
|
|
19981
19982
|
const initCmd = {
|
|
19982
19983
|
tag: "INITIALIZE_MESSAGE_BUS",
|
|
19983
19984
|
id: getRandomId(),
|
|
@@ -20065,7 +20066,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
20065
20066
|
}
|
|
20066
20067
|
/** Shared tail of both `create()` factories: boot the bus, INIT_WALLET, cache for reinit. */
|
|
20067
20068
|
static async bootstrap(wallet, options, serializedWallet, busConfig) {
|
|
20068
|
-
const arkServer = options.arkServer ?? { url:
|
|
20069
|
+
const arkServer = options.arkServer ?? { url: chunkNMDISCGW_cjs.DEFAULT_ARKADE_SERVER_URL };
|
|
20069
20070
|
const initWalletPayload = {
|
|
20070
20071
|
lazyBoarding: options.lazyBoarding,
|
|
20071
20072
|
arkServerUrl: arkServer.url,
|
|
@@ -20075,7 +20076,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
20075
20076
|
Object.entries(options.messageTimeouts ?? {}).filter(([, ms]) => ms !== void 0)
|
|
20076
20077
|
);
|
|
20077
20078
|
for (const [key, value] of Object.entries(overrides)) {
|
|
20078
|
-
|
|
20079
|
+
chunkNMDISCGW_cjs.assertTimerMs(`messageTimeouts.${key}`, value);
|
|
20079
20080
|
}
|
|
20080
20081
|
const messageTimeouts = {
|
|
20081
20082
|
...DEFAULT_MESSAGE_TIMEOUTS,
|
|
@@ -20415,7 +20416,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
20415
20416
|
try {
|
|
20416
20417
|
const response = await this.sendMessage(message);
|
|
20417
20418
|
const { vtxos, page } = response.payload;
|
|
20418
|
-
return { vtxos: vtxos.map(
|
|
20419
|
+
return { vtxos: vtxos.map(chunkNMDISCGW_cjs.normalizeVtxo), page: page && { ...page } };
|
|
20419
20420
|
} catch (cause) {
|
|
20420
20421
|
throw new Error(`Failed to get vtxos: ${cause}`, { cause });
|
|
20421
20422
|
}
|
|
@@ -20519,7 +20520,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
20519
20520
|
};
|
|
20520
20521
|
try {
|
|
20521
20522
|
const response = await this.sendMessage(message);
|
|
20522
|
-
return response.payload.vtxos.map(
|
|
20523
|
+
return response.payload.vtxos.map(chunkNMDISCGW_cjs.normalizeVtxo);
|
|
20523
20524
|
} catch (error) {
|
|
20524
20525
|
throw new Error(`Failed to get vtxos: ${error}`);
|
|
20525
20526
|
}
|
|
@@ -20550,7 +20551,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
20550
20551
|
"Service worker does not support the requested contract scope or freshness check"
|
|
20551
20552
|
);
|
|
20552
20553
|
}
|
|
20553
|
-
return payload.vtxos.map(
|
|
20554
|
+
return payload.vtxos.map(chunkNMDISCGW_cjs.normalizeVtxo);
|
|
20554
20555
|
} catch (error) {
|
|
20555
20556
|
throw new Error(`Failed to get spendable vtxos: ${error}`);
|
|
20556
20557
|
}
|
|
@@ -20745,7 +20746,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
20745
20746
|
};
|
|
20746
20747
|
try {
|
|
20747
20748
|
const response = await sendContractMessage(message);
|
|
20748
|
-
return response.payload.vtxos.map(
|
|
20749
|
+
return response.payload.vtxos.map(chunkNMDISCGW_cjs.normalizeVtxo);
|
|
20749
20750
|
} catch (cause) {
|
|
20750
20751
|
throw new Error(`Failed to annotate vtxos: ${cause}`, { cause });
|
|
20751
20752
|
}
|
|
@@ -21385,7 +21386,7 @@ var ServiceWorkerWallet = class _ServiceWorkerWallet extends ServiceWorkerReadon
|
|
|
21385
21386
|
};
|
|
21386
21387
|
try {
|
|
21387
21388
|
const response = await wallet.sendMessage(message);
|
|
21388
|
-
return response.payload.vtxos.map(
|
|
21389
|
+
return response.payload.vtxos.map(chunkNMDISCGW_cjs.normalizeVtxo);
|
|
21389
21390
|
} catch (e) {
|
|
21390
21391
|
throw new Error(`Failed to get expiring vtxos: ${e}`);
|
|
21391
21392
|
}
|
|
@@ -21502,12 +21503,12 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
21502
21503
|
* @returns Configured onchain wallet
|
|
21503
21504
|
* @throws Error if the configured identity cannot produce a valid x-only public key
|
|
21504
21505
|
*/
|
|
21505
|
-
static async create(identity, networkName =
|
|
21506
|
+
static async create(identity, networkName = chunkNMDISCGW_cjs.DEFAULT_NETWORK_NAME, provider) {
|
|
21506
21507
|
const pubkey = await identity.xOnlyPublicKey();
|
|
21507
21508
|
if (!pubkey) {
|
|
21508
21509
|
throw new Error("Invalid configured public key");
|
|
21509
21510
|
}
|
|
21510
|
-
const network =
|
|
21511
|
+
const network = chunkNMDISCGW_cjs.getNetwork(networkName);
|
|
21511
21512
|
const onchainProvider = provider || new EsploraProvider(ESPLORA_URL[networkName]);
|
|
21512
21513
|
const onchainP2TR = btcSigner.p2tr(pubkey, void 0, network);
|
|
21513
21514
|
return new _OnchainWallet(identity, network, onchainP2TR, onchainProvider);
|
|
@@ -21607,7 +21608,7 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
21607
21608
|
feeRate,
|
|
21608
21609
|
params.address
|
|
21609
21610
|
);
|
|
21610
|
-
let tx = new
|
|
21611
|
+
let tx = new chunkNMDISCGW_cjs.Transaction();
|
|
21611
21612
|
for (const input of inputs) {
|
|
21612
21613
|
tx.addInput({
|
|
21613
21614
|
txid: input.txid,
|
|
@@ -21665,7 +21666,7 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
21665
21666
|
* @throws If the parent has no anchor, or funding cannot be selected/signed
|
|
21666
21667
|
*/
|
|
21667
21668
|
async bumpAnchor(parentHex, feeRate) {
|
|
21668
|
-
const parent =
|
|
21669
|
+
const parent = chunkNMDISCGW_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
|
|
21669
21670
|
const coins = (await this.getCoins()).filter((c) => c.status.confirmed);
|
|
21670
21671
|
const child = await this.buildBumpPackage(parent, feeRate, coins);
|
|
21671
21672
|
return [parent.hex, child.hex];
|
|
@@ -22481,7 +22482,7 @@ var CachingArkProvider = class {
|
|
|
22481
22482
|
constructor(inner, ttlMs = DEFAULT_TTL_MS) {
|
|
22482
22483
|
this.inner = inner;
|
|
22483
22484
|
this.ttlMs = ttlMs;
|
|
22484
|
-
|
|
22485
|
+
chunkNMDISCGW_cjs.assertNonNegativeMs("ttlMs", ttlMs);
|
|
22485
22486
|
this.unsubscribe = inner.onServerInfoChanged?.((info) => {
|
|
22486
22487
|
this.cached = info;
|
|
22487
22488
|
this.expiresAt = Date.now() + this.ttlMs;
|
|
@@ -22573,7 +22574,7 @@ async function resolvePrevTxs(txids, source, onchain) {
|
|
|
22573
22574
|
try {
|
|
22574
22575
|
const { txs } = await source.getVirtualTxs(wanted);
|
|
22575
22576
|
for (const psbt of txs) {
|
|
22576
|
-
const tx =
|
|
22577
|
+
const tx = chunkNMDISCGW_cjs.Transaction.fromPSBT(base.base64.decode(psbt));
|
|
22577
22578
|
resolved.set(tx.id, tx.toBytes());
|
|
22578
22579
|
}
|
|
22579
22580
|
} catch (err) {
|
|
@@ -22606,7 +22607,7 @@ async function resolvePrevTxs(txids, source, onchain) {
|
|
|
22606
22607
|
async function attachPrevArkTxs(tx, txids, source, onchain) {
|
|
22607
22608
|
const pending = [];
|
|
22608
22609
|
for (let i = 0; i < tx.inputsLength; i++) {
|
|
22609
|
-
if (
|
|
22610
|
+
if (chunkNMDISCGW_cjs.getArkPsbtFields(tx, i, chunkNMDISCGW_cjs.PrevArkTxField).length === 0) pending.push(i);
|
|
22610
22611
|
}
|
|
22611
22612
|
if (pending.length === 0) return;
|
|
22612
22613
|
const resolved = await resolvePrevTxs(
|
|
@@ -22615,13 +22616,13 @@ async function attachPrevArkTxs(tx, txids, source, onchain) {
|
|
|
22615
22616
|
onchain
|
|
22616
22617
|
);
|
|
22617
22618
|
for (const i of pending) {
|
|
22618
|
-
|
|
22619
|
+
chunkNMDISCGW_cjs.setArkPsbtField(tx, i, chunkNMDISCGW_cjs.PrevArkTxField, resolved.get(txidAt(txids, i)));
|
|
22619
22620
|
}
|
|
22620
22621
|
}
|
|
22621
22622
|
async function attachPrevoutTxs(tx, source) {
|
|
22622
22623
|
const pending = [];
|
|
22623
22624
|
for (let i = 0; i < tx.inputsLength; i++) {
|
|
22624
|
-
if (
|
|
22625
|
+
if (chunkNMDISCGW_cjs.getArkPsbtFields(tx, i, chunkNMDISCGW_cjs.PrevoutTxField).length > 0) continue;
|
|
22625
22626
|
const input = tx.getInput(i);
|
|
22626
22627
|
if (!input?.txid) throw new PrevTxUnavailableError(`input ${i} has no outpoint`);
|
|
22627
22628
|
pending.push({ index: i, txid: base.hex.encode(input.txid) });
|
|
@@ -22632,7 +22633,7 @@ async function attachPrevoutTxs(tx, source) {
|
|
|
22632
22633
|
resolved.set(txid, await source.getRawTransaction(txid));
|
|
22633
22634
|
}
|
|
22634
22635
|
for (const { index, txid } of pending) {
|
|
22635
|
-
|
|
22636
|
+
chunkNMDISCGW_cjs.setArkPsbtField(tx, index, chunkNMDISCGW_cjs.PrevoutTxField, resolved.get(txid));
|
|
22636
22637
|
}
|
|
22637
22638
|
}
|
|
22638
22639
|
async function withPrevTxs(coins, source, onchain) {
|
|
@@ -22658,7 +22659,7 @@ exports.BIP322 = void 0;
|
|
|
22658
22659
|
async function sign2(message, identity, network) {
|
|
22659
22660
|
const xOnlyPubKey = await identity.xOnlyPublicKey();
|
|
22660
22661
|
const payment = btcSigner.p2tr(xOnlyPubKey, void 0, network);
|
|
22661
|
-
const toSpend =
|
|
22662
|
+
const toSpend = chunkNMDISCGW_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
|
|
22662
22663
|
const toSign = craftBIP322ToSignP2TR(toSpend, payment.script, xOnlyPubKey);
|
|
22663
22664
|
const signed = await identity.sign(toSign, [0]);
|
|
22664
22665
|
signed.finalizeIdx(0);
|
|
@@ -22716,7 +22717,7 @@ function verifyP2TR(message, witnessItems, pkScript, pubkey) {
|
|
|
22716
22717
|
if (sighashType !== btcSigner.SigHash.DEFAULT && sighashType !== btcSigner.SigHash.ALL) {
|
|
22717
22718
|
return false;
|
|
22718
22719
|
}
|
|
22719
|
-
const toSpend =
|
|
22720
|
+
const toSpend = chunkNMDISCGW_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
|
|
22720
22721
|
const toSign = craftBIP322ToSignP2TR(toSpend, pkScript);
|
|
22721
22722
|
const sighash = toSign.preimageWitnessV1(0, [pkScript], sighashType, [0n]);
|
|
22722
22723
|
const rawSig = sig.length === 65 ? sig.subarray(0, 64) : sig;
|
|
@@ -22737,7 +22738,7 @@ function verifyP2WPKH(message, witnessItems, pkScript, addressHash) {
|
|
|
22737
22738
|
}
|
|
22738
22739
|
const sighashType = sigWithHash[sigWithHash.length - 1];
|
|
22739
22740
|
const derSig = sigWithHash.subarray(0, sigWithHash.length - 1);
|
|
22740
|
-
const toSpend =
|
|
22741
|
+
const toSpend = chunkNMDISCGW_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
|
|
22741
22742
|
const toSign = craftBIP322ToSignSimple(toSpend, pkScript);
|
|
22742
22743
|
const scriptCode = btcSigner.OutScript.encode({ type: "pkh", hash: addressHash });
|
|
22743
22744
|
const sighash = toSign.preimageWitnessV0(0, scriptCode, sighashType, 0n);
|
|
@@ -22790,7 +22791,7 @@ function encodeCompactSize(n) {
|
|
|
22790
22791
|
return buf;
|
|
22791
22792
|
}
|
|
22792
22793
|
function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
|
|
22793
|
-
const tx = new
|
|
22794
|
+
const tx = new chunkNMDISCGW_cjs.Transaction({ version: 0 });
|
|
22794
22795
|
tx.addInput({
|
|
22795
22796
|
txid: toSpend.id,
|
|
22796
22797
|
index: 0,
|
|
@@ -22804,12 +22805,12 @@ function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
|
|
|
22804
22805
|
});
|
|
22805
22806
|
tx.addOutput({
|
|
22806
22807
|
amount: 0n,
|
|
22807
|
-
script:
|
|
22808
|
+
script: chunkNMDISCGW_cjs.OP_RETURN_EMPTY_PKSCRIPT
|
|
22808
22809
|
});
|
|
22809
22810
|
return tx;
|
|
22810
22811
|
}
|
|
22811
22812
|
function craftBIP322ToSignSimple(toSpend, pkScript) {
|
|
22812
|
-
const tx = new
|
|
22813
|
+
const tx = new chunkNMDISCGW_cjs.Transaction({ version: 0 });
|
|
22813
22814
|
tx.addInput({
|
|
22814
22815
|
txid: toSpend.id,
|
|
22815
22816
|
index: 0,
|
|
@@ -22821,12 +22822,12 @@ function craftBIP322ToSignSimple(toSpend, pkScript) {
|
|
|
22821
22822
|
});
|
|
22822
22823
|
tx.addOutput({
|
|
22823
22824
|
amount: 0n,
|
|
22824
|
-
script:
|
|
22825
|
+
script: chunkNMDISCGW_cjs.OP_RETURN_EMPTY_PKSCRIPT
|
|
22825
22826
|
});
|
|
22826
22827
|
return tx;
|
|
22827
22828
|
}
|
|
22828
22829
|
function finalizeVirtualTx(type, psbtBase64) {
|
|
22829
|
-
const tx =
|
|
22830
|
+
const tx = chunkNMDISCGW_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
|
|
22830
22831
|
if (type === "INDEXER_CHAINED_TX_TYPE_TREE" /* TREE */) {
|
|
22831
22832
|
const input = tx.getInput(0);
|
|
22832
22833
|
if (!input) {
|
|
@@ -22853,14 +22854,14 @@ var ExitPathError = class extends Error {
|
|
|
22853
22854
|
reason;
|
|
22854
22855
|
};
|
|
22855
22856
|
function delayWeight(sequence) {
|
|
22856
|
-
const t =
|
|
22857
|
+
const t = chunkNMDISCGW_cjs.sequenceToTimelock(sequence);
|
|
22857
22858
|
return t.type === "blocks" ? Number(t.value) : Number(t.value) / 600;
|
|
22858
22859
|
}
|
|
22859
22860
|
async function resolveUnilateralPath(params) {
|
|
22860
22861
|
const { vtxo, scriptHex, contractRepository } = params;
|
|
22861
22862
|
const contract = contractRepository ? (await collectContracts(contractRepository, { script: scriptHex }))[0] : void 0;
|
|
22862
22863
|
if (contract) {
|
|
22863
|
-
const handler =
|
|
22864
|
+
const handler = chunkM4DM3N6F_cjs.contractHandlers.get(contract.type);
|
|
22864
22865
|
if (!handler) {
|
|
22865
22866
|
throw new ExitPathError(
|
|
22866
22867
|
"no-handler",
|
|
@@ -22882,12 +22883,12 @@ async function resolveUnilateralPath(params) {
|
|
|
22882
22883
|
paths.sort((a, b) => delayWeight(a.sequence) - delayWeight(b.sequence));
|
|
22883
22884
|
return { selection: paths[0], label: `${contract.type}:unilateral` };
|
|
22884
22885
|
}
|
|
22885
|
-
const decoded =
|
|
22886
|
+
const decoded = chunkNMDISCGW_cjs.VtxoScript.decode(vtxo.tapTree);
|
|
22886
22887
|
let best;
|
|
22887
22888
|
for (const exit of decoded.exitPaths()) {
|
|
22888
22889
|
const leaf = decoded.findLeaf(base.hex.encode(exit.script));
|
|
22889
22890
|
if (!leaf) continue;
|
|
22890
|
-
const sequence =
|
|
22891
|
+
const sequence = chunkNMDISCGW_cjs.timelockToSequence(exit.params.timelock);
|
|
22891
22892
|
const weight = delayWeight(sequence);
|
|
22892
22893
|
if (!best || weight < best.weight) {
|
|
22893
22894
|
best = { selection: { leaf, sequence }, weight };
|
|
@@ -23094,7 +23095,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
23094
23095
|
const txWeightEstimator = TxWeightEstimator.create();
|
|
23095
23096
|
const walletDescriptor = base.hex.encode(await wallet.identity.xOnlyPublicKey());
|
|
23096
23097
|
for (const vtxo of vtxos) {
|
|
23097
|
-
if (!
|
|
23098
|
+
if (!chunkNMDISCGW_cjs.canSweepOnchain(vtxo)) {
|
|
23098
23099
|
throw new Error(
|
|
23099
23100
|
`Vtxo ${vtxo.txid}:${vtxo.vout} cannot be swept onchain: it is not fully unrolled (use unroll first), or its exit output was already spent`
|
|
23100
23101
|
);
|
|
@@ -23105,14 +23106,14 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
23105
23106
|
}
|
|
23106
23107
|
const resolved = await resolveUnilateralPath({
|
|
23107
23108
|
vtxo,
|
|
23108
|
-
scriptHex: base.hex.encode(
|
|
23109
|
+
scriptHex: base.hex.encode(chunkNMDISCGW_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
|
|
23109
23110
|
contractRepository: wallet.contractRepository,
|
|
23110
23111
|
walletDescriptor,
|
|
23111
23112
|
currentTime: Date.now()
|
|
23112
23113
|
});
|
|
23113
23114
|
const spendingLeaf = resolved.selection.leaf;
|
|
23114
23115
|
const sequence = resolved.selection.sequence;
|
|
23115
|
-
const timelock =
|
|
23116
|
+
const timelock = chunkNMDISCGW_cjs.sequenceToTimelock(sequence);
|
|
23116
23117
|
const elapsed = timelock.type === "blocks" ? chainTip.height >= txStatus.blockHeight + Number(timelock.value) : chainTip.time >= txStatus.blockTime + Number(timelock.value);
|
|
23117
23118
|
if (!elapsed) {
|
|
23118
23119
|
throw new Error(`no available exit path found for vtxo ${vtxo.txid}:${vtxo.vout}`);
|
|
@@ -23125,7 +23126,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
23125
23126
|
sequence,
|
|
23126
23127
|
witnessUtxo: {
|
|
23127
23128
|
amount: BigInt(vtxo.value),
|
|
23128
|
-
script:
|
|
23129
|
+
script: chunkNMDISCGW_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
|
|
23129
23130
|
},
|
|
23130
23131
|
sighashType: btcSigner.SigHash.DEFAULT
|
|
23131
23132
|
});
|
|
@@ -23135,7 +23136,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
23135
23136
|
btcSigner.TaprootControlBlock.encode(spendingLeaf[0]).length
|
|
23136
23137
|
);
|
|
23137
23138
|
}
|
|
23138
|
-
const tx = new
|
|
23139
|
+
const tx = new chunkNMDISCGW_cjs.Transaction({ version: 2 });
|
|
23139
23140
|
for (const input of inputs) {
|
|
23140
23141
|
tx.addInput(input);
|
|
23141
23142
|
}
|
|
@@ -23218,7 +23219,7 @@ async function buildSignedSweep(params) {
|
|
|
23218
23219
|
`uneconomic vtxo ${vtxo.txid}:${vtxo.vout}: value ${vtxo.value} - fee ${fee} < dust`
|
|
23219
23220
|
);
|
|
23220
23221
|
}
|
|
23221
|
-
const tx = new
|
|
23222
|
+
const tx = new chunkNMDISCGW_cjs.Transaction({ version: 2 });
|
|
23222
23223
|
tx.addInput({
|
|
23223
23224
|
txid: vtxo.txid,
|
|
23224
23225
|
index: vtxo.vout,
|
|
@@ -23243,7 +23244,7 @@ async function buildSignedSweep(params) {
|
|
|
23243
23244
|
finalScriptWitness: [
|
|
23244
23245
|
tapScriptSig[0][1],
|
|
23245
23246
|
...path.extraWitness,
|
|
23246
|
-
|
|
23247
|
+
chunkNMDISCGW_cjs.scriptFromTapLeafScript(path.leaf),
|
|
23247
23248
|
btcSigner.TaprootControlBlock.encode(controlBlock)
|
|
23248
23249
|
]
|
|
23249
23250
|
});
|
|
@@ -23273,7 +23274,7 @@ async function resolveFeeRate(opts) {
|
|
|
23273
23274
|
}
|
|
23274
23275
|
async function selectExitVtxos(opts) {
|
|
23275
23276
|
if (!opts.vtxos) return opts.wallet.getVtxos();
|
|
23276
|
-
const res = await
|
|
23277
|
+
const res = await chunkNMDISCGW_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
|
|
23277
23278
|
const tapTrees = /* @__PURE__ */ new Map();
|
|
23278
23279
|
const out = [];
|
|
23279
23280
|
for (const vtxo of res.vtxos) {
|
|
@@ -23288,7 +23289,7 @@ async function selectExitVtxos(opts) {
|
|
|
23288
23289
|
`no contract registered for vtxo script ${vtxo.script} \u2014 register the contract before exiting`
|
|
23289
23290
|
);
|
|
23290
23291
|
}
|
|
23291
|
-
const handler =
|
|
23292
|
+
const handler = chunkM4DM3N6F_cjs.contractHandlers.get(contract.type);
|
|
23292
23293
|
if (!handler) {
|
|
23293
23294
|
throw new Error(`no contract handler registered for type '${contract.type}'`);
|
|
23294
23295
|
}
|
|
@@ -23318,7 +23319,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
23318
23319
|
if (pendingNodes.length > 0) {
|
|
23319
23320
|
const txs = await resolver.getVirtualTxs(pendingNodes.map((n) => n.txid));
|
|
23320
23321
|
for (const psbt of txs) {
|
|
23321
|
-
psbts.set(
|
|
23322
|
+
psbts.set(chunkNMDISCGW_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
23322
23323
|
}
|
|
23323
23324
|
}
|
|
23324
23325
|
const childVsize = Number(
|
|
@@ -23346,7 +23347,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
23346
23347
|
try {
|
|
23347
23348
|
const resolved = await resolveUnilateralPath({
|
|
23348
23349
|
vtxo,
|
|
23349
|
-
scriptHex: base.hex.encode(
|
|
23350
|
+
scriptHex: base.hex.encode(chunkNMDISCGW_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
|
|
23350
23351
|
contractRepository: wallet.contractRepository,
|
|
23351
23352
|
walletDescriptor,
|
|
23352
23353
|
currentTime: Date.now()
|
|
@@ -23365,7 +23366,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
23365
23366
|
});
|
|
23366
23367
|
continue;
|
|
23367
23368
|
}
|
|
23368
|
-
const t =
|
|
23369
|
+
const t = chunkNMDISCGW_cjs.sequenceToTimelock(resolved.selection.sequence);
|
|
23369
23370
|
const delay = { type: t.type, value: Number(t.value) };
|
|
23370
23371
|
infos.push({ outpoint, value: vtxo.value, sweepFee, path: resolved.label, delay });
|
|
23371
23372
|
sweeps.push({ vtxo, resolved, sweepFee, delay });
|
|
@@ -23472,7 +23473,7 @@ var Executor = class {
|
|
|
23472
23473
|
constructor(pkg, provider, opts) {
|
|
23473
23474
|
this.pkg = pkg;
|
|
23474
23475
|
this.provider = provider;
|
|
23475
|
-
|
|
23476
|
+
chunkNMDISCGW_cjs.assertTimerMs("pollIntervalMs", opts?.pollIntervalMs);
|
|
23476
23477
|
this.pollIntervalMs = opts?.pollIntervalMs ?? 5e3;
|
|
23477
23478
|
this.feeWallet = opts?.feeWallet;
|
|
23478
23479
|
this.signal = opts?.signal;
|
|
@@ -23767,7 +23768,7 @@ async function prepare(opts) {
|
|
|
23767
23768
|
txid: sweep.vtxo.txid,
|
|
23768
23769
|
vout: sweep.vtxo.vout,
|
|
23769
23770
|
value: sweep.vtxo.value,
|
|
23770
|
-
pkScript:
|
|
23771
|
+
pkScript: chunkNMDISCGW_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
|
|
23771
23772
|
},
|
|
23772
23773
|
path: sweep.resolved.selection,
|
|
23773
23774
|
outputAddress: opts.sweepAddress,
|
|
@@ -23856,7 +23857,7 @@ async function prepare(opts) {
|
|
|
23856
23857
|
if (newFee <= splitterFee) break;
|
|
23857
23858
|
splitterFee = newFee;
|
|
23858
23859
|
}
|
|
23859
|
-
const splitter = new
|
|
23860
|
+
const splitter = new chunkNMDISCGW_cjs.Transaction({ version: 2 });
|
|
23860
23861
|
for (const coin of selected.inputs) {
|
|
23861
23862
|
splitter.addInput({
|
|
23862
23863
|
txid: coin.txid,
|
|
@@ -23995,46 +23996,46 @@ var UnilateralExit = {
|
|
|
23995
23996
|
|
|
23996
23997
|
// src/arkade/index.ts
|
|
23997
23998
|
var arkade_exports = {};
|
|
23998
|
-
|
|
23999
|
-
ARKADE_OP: () =>
|
|
24000
|
-
ARKADE_OPCODES: () =>
|
|
24001
|
-
ARKADE_OPCODE_NAMES: () =>
|
|
24002
|
-
ARKADE_OPCODE_VALUES: () =>
|
|
24003
|
-
ARKADE_OPS: () =>
|
|
23999
|
+
chunkNMDISCGW_cjs.__export(arkade_exports, {
|
|
24000
|
+
ARKADE_OP: () => chunkM4DM3N6F_cjs.ARKADE_OP,
|
|
24001
|
+
ARKADE_OPCODES: () => chunkM4DM3N6F_cjs.ARKADE_OPCODES,
|
|
24002
|
+
ARKADE_OPCODE_NAMES: () => chunkM4DM3N6F_cjs.ARKADE_OPCODE_NAMES,
|
|
24003
|
+
ARKADE_OPCODE_VALUES: () => chunkM4DM3N6F_cjs.ARKADE_OPCODE_VALUES,
|
|
24004
|
+
ARKADE_OPS: () => chunkM4DM3N6F_cjs.ARKADE_OPS,
|
|
24004
24005
|
Arkade: () => Arkade,
|
|
24005
24006
|
ArkadeContract: () => ArkadeContract,
|
|
24006
|
-
ArkadeProgramScript: () =>
|
|
24007
|
-
ArkadeScript: () =>
|
|
24007
|
+
ArkadeProgramScript: () => chunkM4DM3N6F_cjs.ArkadeProgramScript,
|
|
24008
|
+
ArkadeScript: () => chunkM4DM3N6F_cjs.ArkadeScript,
|
|
24008
24009
|
ArkadeTransactionBuilder: () => ArkadeTransactionBuilder,
|
|
24009
|
-
BigNum: () =>
|
|
24010
|
+
BigNum: () => chunkM4DM3N6F_cjs.bignum_exports,
|
|
24010
24011
|
OP: () => btcSigner.OP,
|
|
24011
|
-
OPCODE_NAMES: () =>
|
|
24012
|
-
OPCODE_VALUES: () =>
|
|
24013
|
-
SUPPORTED_PROGRAM_VERSION: () =>
|
|
24012
|
+
OPCODE_NAMES: () => chunkM4DM3N6F_cjs.OPCODE_NAMES,
|
|
24013
|
+
OPCODE_VALUES: () => chunkM4DM3N6F_cjs.OPCODE_VALUES,
|
|
24014
|
+
SUPPORTED_PROGRAM_VERSION: () => chunkM4DM3N6F_cjs.SUPPORTED_PROGRAM_VERSION,
|
|
24014
24015
|
Script: () => btcSigner.Script,
|
|
24015
|
-
UnsupportedProgramVersionError: () =>
|
|
24016
|
-
arkadeScriptHash: () =>
|
|
24017
|
-
arkadeWitnessHash: () =>
|
|
24018
|
-
asmToBytes: () =>
|
|
24019
|
-
bytesToASM: () =>
|
|
24020
|
-
computeArkadeScriptPublicKey: () =>
|
|
24016
|
+
UnsupportedProgramVersionError: () => chunkM4DM3N6F_cjs.UnsupportedProgramVersionError,
|
|
24017
|
+
arkadeScriptHash: () => chunkM4DM3N6F_cjs.arkadeScriptHash,
|
|
24018
|
+
arkadeWitnessHash: () => chunkM4DM3N6F_cjs.arkadeWitnessHash,
|
|
24019
|
+
asmToBytes: () => chunkM4DM3N6F_cjs.asmToBytes,
|
|
24020
|
+
bytesToASM: () => chunkM4DM3N6F_cjs.bytesToASM,
|
|
24021
|
+
computeArkadeScriptPublicKey: () => chunkM4DM3N6F_cjs.computeArkadeScriptPublicKey,
|
|
24021
24022
|
createArkadeBatchHandler: () => createArkadeBatchHandler,
|
|
24022
|
-
deserializeArkadeContractParams: () =>
|
|
24023
|
-
fromASM: () =>
|
|
24024
|
-
getOpcodeName: () =>
|
|
24025
|
-
getOpcodeValue: () =>
|
|
24023
|
+
deserializeArkadeContractParams: () => chunkM4DM3N6F_cjs.deserializeArkadeContractParams,
|
|
24024
|
+
fromASM: () => chunkM4DM3N6F_cjs.fromASM,
|
|
24025
|
+
getOpcodeName: () => chunkM4DM3N6F_cjs.getOpcodeName,
|
|
24026
|
+
getOpcodeValue: () => chunkM4DM3N6F_cjs.getOpcodeValue,
|
|
24026
24027
|
isContractArtifact: () => isContractArtifact,
|
|
24027
|
-
parseArtifact: () =>
|
|
24028
|
+
parseArtifact: () => chunkM4DM3N6F_cjs.parseArtifact,
|
|
24028
24029
|
programFromArtifact: () => programFromArtifact,
|
|
24029
24030
|
resolveArkadeService: () => resolveArkadeService,
|
|
24030
|
-
resolveAsm: () =>
|
|
24031
|
-
serializeArkadeContractParams: () =>
|
|
24032
|
-
stringifyArtifact: () =>
|
|
24033
|
-
toASM: () =>
|
|
24034
|
-
validateProgram: () =>
|
|
24035
|
-
witnessRefToBytes: () =>
|
|
24031
|
+
resolveAsm: () => chunkM4DM3N6F_cjs.resolveAsm,
|
|
24032
|
+
serializeArkadeContractParams: () => chunkM4DM3N6F_cjs.serializeArkadeContractParams,
|
|
24033
|
+
stringifyArtifact: () => chunkM4DM3N6F_cjs.stringifyArtifact,
|
|
24034
|
+
toASM: () => chunkM4DM3N6F_cjs.toASM,
|
|
24035
|
+
validateProgram: () => chunkM4DM3N6F_cjs.validateProgram,
|
|
24036
|
+
witnessRefToBytes: () => chunkM4DM3N6F_cjs.witnessRefToBytes
|
|
24036
24037
|
});
|
|
24037
|
-
var isVtxoCoin = (input) =>
|
|
24038
|
+
var isVtxoCoin = (input) => chunkNMDISCGW_cjs.isVirtualCoin(input);
|
|
24038
24039
|
function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message, session, arkProvider, emulator, network, recipients, batchExpiryPolicy) {
|
|
24039
24040
|
let batchId;
|
|
24040
24041
|
let sweepTapTreeRoot;
|
|
@@ -24055,23 +24056,23 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
24055
24056
|
);
|
|
24056
24057
|
await arkProvider.confirmRegistration(intentId);
|
|
24057
24058
|
batchId = event.id;
|
|
24058
|
-
const sweepTapscript =
|
|
24059
|
+
const sweepTapscript = chunkNMDISCGW_cjs.CSVMultisigTapscript.encode({
|
|
24059
24060
|
timelock,
|
|
24060
|
-
pubkeys: [
|
|
24061
|
+
pubkeys: [chunkM4DM3N6F_cjs.toXOnly(base.hex.decode(info.forfeitPubkey), "forfeit key")]
|
|
24061
24062
|
}).script;
|
|
24062
24063
|
sweepTapTreeRoot = payment_js.tapLeafHash(sweepTapscript);
|
|
24063
24064
|
return { skip: false };
|
|
24064
24065
|
},
|
|
24065
24066
|
onTreeSigningStarted: async (event, vtxoTree) => {
|
|
24066
24067
|
const signerPubKey = await session.getPublicKey();
|
|
24067
|
-
const xonlySignerPubKey =
|
|
24068
|
+
const xonlySignerPubKey = chunkM4DM3N6F_cjs.toXOnly(signerPubKey, "signer key");
|
|
24068
24069
|
const xOnlyPubkeys = event.cosignersPublicKeys.map(
|
|
24069
|
-
(k) => base.hex.encode(
|
|
24070
|
+
(k) => base.hex.encode(chunkM4DM3N6F_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
|
|
24070
24071
|
);
|
|
24071
24072
|
if (!xOnlyPubkeys.includes(base.hex.encode(xonlySignerPubKey))) {
|
|
24072
24073
|
return { skip: true };
|
|
24073
24074
|
}
|
|
24074
|
-
const commitmentTx =
|
|
24075
|
+
const commitmentTx = chunkNMDISCGW_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
|
|
24075
24076
|
validateVtxoTxGraph(vtxoTree, commitmentTx, sweepTapTreeRoot);
|
|
24076
24077
|
if (recipients && recipients.length > 0) {
|
|
24077
24078
|
validateBatchRecipients(commitmentTx, vtxoTree.leaves(), recipients, network);
|
|
@@ -24109,7 +24110,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
24109
24110
|
if (connectorTree) {
|
|
24110
24111
|
validateConnectorsTxGraph(event.commitmentTx, connectorTree);
|
|
24111
24112
|
}
|
|
24112
|
-
let commitmentPsbt =
|
|
24113
|
+
let commitmentPsbt = chunkNMDISCGW_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
|
|
24113
24114
|
assertFinalCommitmentMatchesValidated(
|
|
24114
24115
|
commitmentPsbt,
|
|
24115
24116
|
validatedCommitmentTxid,
|
|
@@ -24151,7 +24152,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
24151
24152
|
boardingIndices.push(boardingIdx);
|
|
24152
24153
|
continue;
|
|
24153
24154
|
}
|
|
24154
|
-
if (!
|
|
24155
|
+
if (!chunkNMDISCGW_cjs.requiresForfeit(input) || isSubdust(input, info.dust)) {
|
|
24155
24156
|
continue;
|
|
24156
24157
|
}
|
|
24157
24158
|
if (connectorIndex >= connectorLeaves.length) {
|
|
@@ -24172,7 +24173,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
24172
24173
|
index: input.vout,
|
|
24173
24174
|
witnessUtxo: {
|
|
24174
24175
|
amount: BigInt(input.value),
|
|
24175
|
-
script:
|
|
24176
|
+
script: chunkNMDISCGW_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
24176
24177
|
},
|
|
24177
24178
|
sighashType: btcSigner.SigHash.DEFAULT,
|
|
24178
24179
|
tapLeafScript: [input.forfeitTapLeafScript]
|
|
@@ -24283,7 +24284,7 @@ function inputDef(name, type) {
|
|
|
24283
24284
|
return { name, type: argType(type) };
|
|
24284
24285
|
}
|
|
24285
24286
|
function argType(arkType) {
|
|
24286
|
-
if (!Object.hasOwn(
|
|
24287
|
+
if (!Object.hasOwn(chunkM4DM3N6F_cjs.ARKADE_TYPE_ENCODINGS, arkType)) fail(`unknown type '${arkType}'`);
|
|
24287
24288
|
return arkType;
|
|
24288
24289
|
}
|
|
24289
24290
|
function arrayParts(type) {
|
|
@@ -24324,7 +24325,7 @@ function flatten(param, structs, stack = []) {
|
|
|
24324
24325
|
function opcodeToken(token) {
|
|
24325
24326
|
const base = token.slice(3);
|
|
24326
24327
|
const name = base === "0" || /^([1-9]|1[0-6])$/.test(base) ? token : base;
|
|
24327
|
-
if (!Object.hasOwn(
|
|
24328
|
+
if (!Object.hasOwn(chunkM4DM3N6F_cjs.ARKADE_OPS, name)) {
|
|
24328
24329
|
fail(`opcode '${token}' is not in this SDK's table`);
|
|
24329
24330
|
}
|
|
24330
24331
|
return name;
|
|
@@ -24371,7 +24372,7 @@ function providedWitness(witness) {
|
|
|
24371
24372
|
fail(`witness '${item.name}': injected must be boolean`);
|
|
24372
24373
|
if (item.injected && item.type !== "signature")
|
|
24373
24374
|
fail(`witness '${item.name}': only infrastructure signatures can be injected`);
|
|
24374
|
-
if (item.encoding !== void 0 && item.encoding !==
|
|
24375
|
+
if (item.encoding !== void 0 && item.encoding !== chunkM4DM3N6F_cjs.ARKADE_TYPE_ENCODINGS[type])
|
|
24375
24376
|
fail(
|
|
24376
24377
|
`witness '${item.name}': encoding '${item.encoding}' does not match type '${item.type}'`
|
|
24377
24378
|
);
|
|
@@ -24380,7 +24381,7 @@ function providedWitness(witness) {
|
|
|
24380
24381
|
}
|
|
24381
24382
|
function csvTimelock(leafName, operand) {
|
|
24382
24383
|
if (typeof operand === "string") return { type: "sequence", value: operand };
|
|
24383
|
-
const timelock =
|
|
24384
|
+
const timelock = chunkNMDISCGW_cjs.sequenceToCanonicalTimelock(operand);
|
|
24384
24385
|
if (!timelock) {
|
|
24385
24386
|
fail(`leaf '${leafName}': CSV literal ${operand} is not a canonical BIP68 sequence`);
|
|
24386
24387
|
}
|
|
@@ -24474,7 +24475,7 @@ function programFromArtifact(artifact) {
|
|
|
24474
24475
|
if (!isNamed(field)) fail(`struct '${struct.name}': field needs a name and type`);
|
|
24475
24476
|
claim(fields, field.name, "struct field");
|
|
24476
24477
|
}
|
|
24477
|
-
if (Object.hasOwn(
|
|
24478
|
+
if (Object.hasOwn(chunkM4DM3N6F_cjs.ARKADE_TYPE_ENCODINGS, struct.name) || Object.hasOwn(NATIVE_STRUCTS, struct.name)) {
|
|
24478
24479
|
fail(`struct name '${struct.name}' shadows a built-in type`);
|
|
24479
24480
|
}
|
|
24480
24481
|
claim(structNames, struct.name, "struct");
|
|
@@ -24557,7 +24558,7 @@ function programFromArtifact(artifact) {
|
|
|
24557
24558
|
const paramNames = /* @__PURE__ */ new Set();
|
|
24558
24559
|
for (const param of params) claim(paramNames, param.name, "program parameter");
|
|
24559
24560
|
return {
|
|
24560
|
-
version:
|
|
24561
|
+
version: chunkM4DM3N6F_cjs.SUPPORTED_PROGRAM_VERSION,
|
|
24561
24562
|
name: artifact.contractName,
|
|
24562
24563
|
params,
|
|
24563
24564
|
functions
|
|
@@ -24639,16 +24640,16 @@ var Arkade = class _Arkade {
|
|
|
24639
24640
|
indexer = opts.indexer;
|
|
24640
24641
|
info = await opts.arkade.getInfo();
|
|
24641
24642
|
}
|
|
24642
|
-
const serverKey =
|
|
24643
|
-
const checkpoint =
|
|
24644
|
-
const network = opts.network ?? (Object.hasOwn(
|
|
24643
|
+
const serverKey = chunkM4DM3N6F_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
|
|
24644
|
+
const checkpoint = chunkNMDISCGW_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
|
|
24645
|
+
const network = opts.network ?? (Object.hasOwn(chunkNMDISCGW_cjs.networks, info.network) ? chunkNMDISCGW_cjs.getNetwork(info.network) : chunkNMDISCGW_cjs.DEFAULT_NETWORK);
|
|
24645
24646
|
let emulatorKey;
|
|
24646
24647
|
if (emulator) {
|
|
24647
|
-
emulatorKey = base.hex.decode(
|
|
24648
|
+
emulatorKey = base.hex.decode(chunkNMDISCGW_cjs.resolveEmulatorPubkey(network, opts.emulatorPubkey));
|
|
24648
24649
|
}
|
|
24649
24650
|
let userKey;
|
|
24650
24651
|
if (opts.identity) {
|
|
24651
|
-
userKey =
|
|
24652
|
+
userKey = chunkM4DM3N6F_cjs.toXOnly(await opts.identity.xOnlyPublicKey(), "identity key");
|
|
24652
24653
|
}
|
|
24653
24654
|
let contractManager = opts.contractManager;
|
|
24654
24655
|
let ownsContractManager = false;
|
|
@@ -24767,7 +24768,7 @@ var Arkade = class _Arkade {
|
|
|
24767
24768
|
`compiler artifact: server exit delay ${delay}s must be a multiple of 512 seconds`
|
|
24768
24769
|
);
|
|
24769
24770
|
}
|
|
24770
|
-
const sequence = BigInt(
|
|
24771
|
+
const sequence = BigInt(chunkNMDISCGW_cjs.timelockToSequence(typed));
|
|
24771
24772
|
if (args.SERVER_EXIT_DELAY !== void 0 && args.SERVER_EXIT_DELAY !== sequence && args.SERVER_EXIT_DELAY !== Number(sequence)) {
|
|
24772
24773
|
throw new Error(
|
|
24773
24774
|
"compiler artifact: reserved SERVER_EXIT_DELAY must match the connected server"
|
|
@@ -24788,7 +24789,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
24788
24789
|
userKey: client.userKey,
|
|
24789
24790
|
emulatorKey: client.emulatorKey
|
|
24790
24791
|
};
|
|
24791
|
-
this.vtxoScript = new
|
|
24792
|
+
this.vtxoScript = new chunkM4DM3N6F_cjs.ArkadeProgramScript(program, args, this.keys);
|
|
24792
24793
|
this.tapTree = this.vtxoScript.encode();
|
|
24793
24794
|
this.compiled = this.vtxoScript.compiled;
|
|
24794
24795
|
}
|
|
@@ -24813,7 +24814,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
24813
24814
|
`ArkadeContract.fromContract: expected contract type 'arkade', got '${contract.type}'`
|
|
24814
24815
|
);
|
|
24815
24816
|
}
|
|
24816
|
-
const typed =
|
|
24817
|
+
const typed = chunkM4DM3N6F_cjs.deserializeArkadeContractParams(contract.params);
|
|
24817
24818
|
return new _ArkadeContract(client, typed.program, typed.args, {
|
|
24818
24819
|
serverKey: typed.serverKey,
|
|
24819
24820
|
userKey: typed.userKey,
|
|
@@ -24849,7 +24850,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
24849
24850
|
toContractParams() {
|
|
24850
24851
|
return {
|
|
24851
24852
|
type: "arkade",
|
|
24852
|
-
params:
|
|
24853
|
+
params: chunkM4DM3N6F_cjs.serializeArkadeContractParams({
|
|
24853
24854
|
program: this.program,
|
|
24854
24855
|
args: this.args,
|
|
24855
24856
|
serverKey: this.keys.serverKey,
|
|
@@ -24936,17 +24937,17 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
24936
24937
|
const [registered] = await manager.getContracts({ script: scriptHex });
|
|
24937
24938
|
if (registered) {
|
|
24938
24939
|
const [withVtxos] = await manager.getContractsWithVtxos({ script: scriptHex });
|
|
24939
|
-
return (withVtxos?.vtxos ?? []).filter((v) => !
|
|
24940
|
+
return (withVtxos?.vtxos ?? []).filter((v) => !chunkNMDISCGW_cjs.isVtxoSpent(v) && !v.isUnrolled);
|
|
24940
24941
|
}
|
|
24941
24942
|
}
|
|
24942
24943
|
if (!this.client.indexer) {
|
|
24943
24944
|
throw new Error("ArkadeContract.getUtxos: an indexer is required");
|
|
24944
24945
|
}
|
|
24945
|
-
const { vtxos } = await
|
|
24946
|
+
const { vtxos } = await chunkNMDISCGW_cjs.getNormalizedVtxos(this.client.indexer, {
|
|
24946
24947
|
scripts: [scriptHex],
|
|
24947
24948
|
spendableOnly: true
|
|
24948
24949
|
});
|
|
24949
|
-
return vtxos.filter((v) => !
|
|
24950
|
+
return vtxos.filter((v) => !chunkNMDISCGW_cjs.isVtxoSpent(v) && !v.isUnrolled);
|
|
24950
24951
|
}
|
|
24951
24952
|
/** Total spendable balance (requires an indexer). */
|
|
24952
24953
|
async getBalance() {
|
|
@@ -25055,7 +25056,7 @@ var ArkadeTransactionBuilder = class {
|
|
|
25055
25056
|
this.contract.client.checkpoint
|
|
25056
25057
|
);
|
|
25057
25058
|
if (coin.sourceTx) {
|
|
25058
|
-
|
|
25059
|
+
chunkNMDISCGW_cjs.setArkPsbtField(arkTx, 0, chunkNMDISCGW_cjs.PrevArkTxField, coin.sourceTx);
|
|
25059
25060
|
}
|
|
25060
25061
|
if (this.fn.arkadeScript) {
|
|
25061
25062
|
const indexer = this.contract.client.indexer;
|
|
@@ -25072,8 +25073,8 @@ var ArkadeTransactionBuilder = class {
|
|
|
25072
25073
|
}
|
|
25073
25074
|
const condition = (def.tapscript.witness ?? []).map((w) => this.witnessBytes(w));
|
|
25074
25075
|
if (condition.length > 0) {
|
|
25075
|
-
|
|
25076
|
-
|
|
25076
|
+
chunkNMDISCGW_cjs.setArkPsbtField(arkTx, 0, chunkNMDISCGW_cjs.ConditionWitness, condition);
|
|
25077
|
+
chunkNMDISCGW_cjs.setArkPsbtField(checkpoints[0], 0, chunkNMDISCGW_cjs.ConditionWitness, condition);
|
|
25077
25078
|
}
|
|
25078
25079
|
const packets = [];
|
|
25079
25080
|
if (this.assetSpecs.length > 0) {
|
|
@@ -25181,19 +25182,19 @@ var ArkadeTransactionBuilder = class {
|
|
|
25181
25182
|
}
|
|
25182
25183
|
buildAssetPacket() {
|
|
25183
25184
|
const groups = this.assetSpecs.map((s) => {
|
|
25184
|
-
const id = typeof s.assetId === "string" ?
|
|
25185
|
-
return
|
|
25185
|
+
const id = typeof s.assetId === "string" ? chunkX2BWPGCY_cjs.AssetId.fromString(s.assetId) : chunkX2BWPGCY_cjs.AssetId.fromBytes(s.assetId);
|
|
25186
|
+
return chunkX2BWPGCY_cjs.AssetGroup.create(
|
|
25186
25187
|
id,
|
|
25187
25188
|
null,
|
|
25188
|
-
s.inputs.map((i) =>
|
|
25189
|
-
s.outputs.map((o) =>
|
|
25190
|
-
(s.metadata ?? []).map((m) =>
|
|
25189
|
+
s.inputs.map((i) => chunkX2BWPGCY_cjs.AssetInput.create(i.vin, i.amount)),
|
|
25190
|
+
s.outputs.map((o) => chunkX2BWPGCY_cjs.AssetOutput.create(o.vout, o.amount)),
|
|
25191
|
+
(s.metadata ?? []).map((m) => chunkX2BWPGCY_cjs.Metadata.create(m.key, m.value))
|
|
25191
25192
|
);
|
|
25192
25193
|
});
|
|
25193
|
-
return
|
|
25194
|
+
return chunkX2BWPGCY_cjs.Packet.create(groups);
|
|
25194
25195
|
}
|
|
25195
25196
|
witnessBytes(ref) {
|
|
25196
|
-
return
|
|
25197
|
+
return chunkM4DM3N6F_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
|
|
25197
25198
|
}
|
|
25198
25199
|
};
|
|
25199
25200
|
function bindInputs(fn, callArgs) {
|
|
@@ -25207,7 +25208,7 @@ function bindInputs(fn, callArgs) {
|
|
|
25207
25208
|
inputs.forEach((def, i) => {
|
|
25208
25209
|
if (Object.hasOwn(bound, def.name))
|
|
25209
25210
|
throw new Error(`${fn.name}: duplicate input '${def.name}'`);
|
|
25210
|
-
|
|
25211
|
+
chunkM4DM3N6F_cjs.validateParamValue(def, callArgs[i]);
|
|
25211
25212
|
bound[def.name] = callArgs[i];
|
|
25212
25213
|
});
|
|
25213
25214
|
return bound;
|
|
@@ -25618,17 +25619,17 @@ var walletFeeSource = (wallet) => async () => (await wallet.arkProvider.getInfo(
|
|
|
25618
25619
|
function offchainInputFees(vtxos, fees) {
|
|
25619
25620
|
const estimator = new Estimator(fees?.intentFee ?? {});
|
|
25620
25621
|
return vtxos.reduce(
|
|
25621
|
-
(total, vtxo) => total + estimator.evalOffchainInput(
|
|
25622
|
+
(total, vtxo) => total + estimator.evalOffchainInput(chunkNMDISCGW_cjs.toOffchainInputFeeParams(vtxo)).satoshis,
|
|
25622
25623
|
0
|
|
25623
25624
|
);
|
|
25624
25625
|
}
|
|
25625
25626
|
async function changeOutputFee(wallet, inputs, needed, fees) {
|
|
25626
25627
|
const estimator = new Estimator(fees?.intentFee ?? {});
|
|
25627
25628
|
const net = inputs.reduce(
|
|
25628
|
-
(total, vtxo) => total + BigInt(vtxo.value) - BigInt(estimator.evalOffchainInput(
|
|
25629
|
+
(total, vtxo) => total + BigInt(vtxo.value) - BigInt(estimator.evalOffchainInput(chunkNMDISCGW_cjs.toOffchainInputFeeParams(vtxo)).satoshis),
|
|
25629
25630
|
0n
|
|
25630
25631
|
);
|
|
25631
|
-
const script = base.hex.encode(
|
|
25632
|
+
const script = base.hex.encode(chunkNMDISCGW_cjs.ArkAddress.decode(await wallet.getAddress()).pkScript);
|
|
25632
25633
|
return changeAfterOutputFee(
|
|
25633
25634
|
net - needed,
|
|
25634
25635
|
(amount) => BigInt(estimator.evalOffchainOutput({ amount, script }).satoshis)
|
|
@@ -25931,5 +25932,5 @@ exports.waitForIncomingFunds = waitForIncomingFunds;
|
|
|
25931
25932
|
exports.walletFeeSource = walletFeeSource;
|
|
25932
25933
|
exports.warnAndFilterVtxosForScript = warnAndFilterVtxosForScript;
|
|
25933
25934
|
exports.withPrevTxs = withPrevTxs;
|
|
25934
|
-
//# sourceMappingURL=chunk-
|
|
25935
|
-
//# sourceMappingURL=chunk-
|
|
25935
|
+
//# sourceMappingURL=chunk-H7DN4AJC.cjs.map
|
|
25936
|
+
//# sourceMappingURL=chunk-H7DN4AJC.cjs.map
|