@arkade-os/sdk 0.5.0-rc.13 → 0.5.0-rc.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/expo.cjs +5 -5
- package/dist/adapters/expo.js +3 -3
- package/dist/{asyncStorageTaskQueue-DV94jhwq.d.ts → asyncStorageTaskQueue-B3CNSoyU.d.ts} +2 -2
- package/dist/{asyncStorageTaskQueue-0EeSeCAt.d.cts → asyncStorageTaskQueue-C2YTpmtL.d.cts} +2 -2
- package/dist/{chunk-4EU2Q6YT.js → chunk-23USIDZD.js} +4 -4
- package/dist/{chunk-4EU2Q6YT.js.map → chunk-23USIDZD.js.map} +1 -1
- package/dist/{chunk-JOUPIZ32.js → chunk-7BJBBOV6.js} +3 -3
- package/dist/{chunk-JOUPIZ32.js.map → chunk-7BJBBOV6.js.map} +1 -1
- package/dist/{chunk-FDQQOF3F.cjs → chunk-7TSJAQRV.cjs} +47 -47
- package/dist/{chunk-FDQQOF3F.cjs.map → chunk-7TSJAQRV.cjs.map} +1 -1
- package/dist/{chunk-7BACS4XK.cjs → chunk-D5DCON5Q.cjs} +10 -10
- package/dist/{chunk-7BACS4XK.cjs.map → chunk-D5DCON5Q.cjs.map} +1 -1
- package/dist/{chunk-BFQX2KS3.cjs → chunk-JEJJYYYJ.cjs} +18 -18
- package/dist/{chunk-BFQX2KS3.cjs.map → chunk-JEJJYYYJ.cjs.map} +1 -1
- package/dist/{chunk-D7JLTHSZ.js → chunk-LJYEUSW3.js} +4 -4
- package/dist/{chunk-D7JLTHSZ.js.map → chunk-LJYEUSW3.js.map} +1 -1
- package/dist/{chunk-7NK6XFC3.cjs → chunk-NUIZAUNR.cjs} +3 -3
- package/dist/{chunk-7NK6XFC3.cjs.map → chunk-NUIZAUNR.cjs.map} +1 -1
- package/dist/{chunk-I4YBVHAK.cjs → chunk-OUX4QYWG.cjs} +451 -451
- package/dist/{chunk-I4YBVHAK.cjs.map → chunk-OUX4QYWG.cjs.map} +1 -1
- package/dist/{chunk-EJYWGTZ7.js → chunk-QGIJSURM.js} +3 -3
- package/dist/{chunk-EJYWGTZ7.js.map → chunk-QGIJSURM.js.map} +1 -1
- package/dist/{chunk-IV2252XM.js → chunk-QVMEGC66.js} +5 -5
- package/dist/{chunk-IV2252XM.js.map → chunk-QVMEGC66.js.map} +1 -1
- package/dist/{chunk-3JLYJ5KZ.js → chunk-WSVXDZPU.js} +3 -3
- package/dist/{chunk-3JLYJ5KZ.js.map → chunk-WSVXDZPU.js.map} +1 -1
- package/dist/{chunk-RDQSVIXD.cjs → chunk-XRSRFN26.cjs} +15 -15
- package/dist/{chunk-RDQSVIXD.cjs.map → chunk-XRSRFN26.cjs.map} +1 -1
- package/dist/contracts/handlers/index.cjs +9 -9
- package/dist/contracts/handlers/index.js +2 -2
- package/dist/index.cjs +305 -305
- package/dist/index.js +4 -4
- package/dist/repositories/realm/index.cjs +34 -34
- package/dist/repositories/realm/index.js +5 -5
- package/dist/repositories/sqlite/index.cjs +32 -32
- package/dist/repositories/sqlite/index.js +5 -5
- package/dist/{taskRunner-DJrFFyus.d.cts → taskRunner-CZoWmoTc.d.cts} +1 -1
- package/dist/{taskRunner-BX-pB0sv.d.ts → taskRunner-lfY7w6Up.d.ts} +1 -1
- package/dist/wallet/expo/background.cjs +14 -14
- package/dist/wallet/expo/background.d.cts +2 -2
- package/dist/wallet/expo/background.d.ts +2 -2
- package/dist/wallet/expo/background.js +6 -6
- package/dist/wallet/expo/index.cjs +14 -14
- package/dist/wallet/expo/index.d.cts +1 -1
- package/dist/wallet/expo/index.d.ts +1 -1
- package/dist/wallet/expo/index.js +5 -5
- package/dist/worker/expo/index.cjs +9 -9
- package/dist/worker/expo/index.d.cts +3 -3
- package/dist/worker/expo/index.d.ts +3 -3
- package/dist/worker/expo/index.js +5 -5
- package/package.json +1 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunkJEJJYYYJ_cjs = require('./chunk-JEJJYYYJ.cjs');
|
|
4
|
+
var chunk7TSJAQRV_cjs = require('./chunk-7TSJAQRV.cjs');
|
|
5
|
+
var chunkNUIZAUNR_cjs = require('./chunk-NUIZAUNR.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 = chunkNUIZAUNR_cjs.getArkPsbtFields(tx.root, 0, chunkNUIZAUNR_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 = chunkNUIZAUNR_cjs.getArkPsbtFields(g.root, 0, chunkNUIZAUNR_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
|
+
chunkNUIZAUNR_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 = chunk7TSJAQRV_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 chunk7TSJAQRV_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 = chunk7TSJAQRV_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
|
+
chunkNUIZAUNR_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 = chunk7TSJAQRV_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 chunk7TSJAQRV_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 chunk7TSJAQRV_cjs.deriveDescriptorLeafPubKey(this.descriptor);
|
|
797
797
|
}
|
|
798
798
|
async compressedPublicKey() {
|
|
799
|
-
return
|
|
799
|
+
return chunk7TSJAQRV_cjs.deriveDescriptorLeafCompressedPubKey(this.descriptor);
|
|
800
800
|
}
|
|
801
801
|
async sign(tx, inputIndexes) {
|
|
802
802
|
const [signed] = await this.signer.signWithDescriptor([
|
|
@@ -869,12 +869,12 @@ async function resolveDescriptorSigner(descriptor, identity, provider) {
|
|
|
869
869
|
signMessageWithDescriptor: (ownedDescriptor, message, signatureType) => identity.signDescriptorMessage(ownedDescriptor, message, signatureType)
|
|
870
870
|
} : void 0;
|
|
871
871
|
const owner = providerOwner ?? identityOwner;
|
|
872
|
-
if (owner &&
|
|
872
|
+
if (owner && chunk7TSJAQRV_cjs.parseHDDescriptor(descriptor)) {
|
|
873
873
|
return new DescriptorIdentity({ descriptor, signer: owner, base: identity });
|
|
874
874
|
}
|
|
875
875
|
let key;
|
|
876
876
|
try {
|
|
877
|
-
key =
|
|
877
|
+
key = chunk7TSJAQRV_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
878
878
|
} catch {
|
|
879
879
|
throw new ForeignDescriptorError(descriptor);
|
|
880
880
|
}
|
|
@@ -927,14 +927,14 @@ function buildSaltedPreimageMessage(xonly, salt) {
|
|
|
927
927
|
}
|
|
928
928
|
var PREIMAGE_INDEX = 0;
|
|
929
929
|
function isPerArtifactDescriptor(descriptor) {
|
|
930
|
-
return
|
|
930
|
+
return chunk7TSJAQRV_cjs.parseHDDescriptor(descriptor) !== null;
|
|
931
931
|
}
|
|
932
932
|
async function provisionDescriptor(wallet) {
|
|
933
933
|
const allocated = isHDAllocationCapable(wallet) ? await wallet.getNextSigningDescriptor() : void 0;
|
|
934
|
-
return allocated ?? await
|
|
934
|
+
return allocated ?? await chunk7TSJAQRV_cjs.identityDescriptor(wallet.identity);
|
|
935
935
|
}
|
|
936
936
|
async function provisionRefundKey(wallet) {
|
|
937
|
-
const descriptor = await
|
|
937
|
+
const descriptor = await chunk7TSJAQRV_cjs.identityDescriptor(wallet.identity);
|
|
938
938
|
const signer = await contractSigner(wallet, descriptor);
|
|
939
939
|
const pubkey = await signer.xOnlyPublicKey();
|
|
940
940
|
const identityPubkey = await wallet.identity.xOnlyPublicKey();
|
|
@@ -944,7 +944,7 @@ async function provisionRefundKey(wallet) {
|
|
|
944
944
|
);
|
|
945
945
|
}
|
|
946
946
|
const address = await wallet.getAddress();
|
|
947
|
-
const { pkScript } =
|
|
947
|
+
const { pkScript } = chunkNUIZAUNR_cjs.ArkAddress.decode(address);
|
|
948
948
|
return { descriptor, pubkey, pkScript, address };
|
|
949
949
|
}
|
|
950
950
|
async function provisionClaimSecret(wallet, opts = {}) {
|
|
@@ -990,7 +990,7 @@ async function contractSigner(wallet, descriptor) {
|
|
|
990
990
|
const signer = isHDWalletCapable(wallet) ? await wallet.signerForDescriptor(descriptor) : wallet.identity;
|
|
991
991
|
let expected;
|
|
992
992
|
try {
|
|
993
|
-
expected =
|
|
993
|
+
expected = chunk7TSJAQRV_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
994
994
|
} catch (cause) {
|
|
995
995
|
throw new ForeignDescriptorError(descriptor, { cause });
|
|
996
996
|
}
|
|
@@ -1194,14 +1194,14 @@ var RestDelegateProvider = class {
|
|
|
1194
1194
|
*/
|
|
1195
1195
|
async delegate(intent, forfeitTxs, options) {
|
|
1196
1196
|
const url = `${this.url}/v1/delegate`;
|
|
1197
|
-
const response = await
|
|
1197
|
+
const response = await chunkNUIZAUNR_cjs.baseFetch(url, {
|
|
1198
1198
|
method: "POST",
|
|
1199
1199
|
headers: {
|
|
1200
1200
|
"Content-Type": "application/json"
|
|
1201
1201
|
},
|
|
1202
1202
|
body: JSON.stringify({
|
|
1203
1203
|
intent: {
|
|
1204
|
-
message:
|
|
1204
|
+
message: chunkNUIZAUNR_cjs.Intent.encodeMessage(intent.message),
|
|
1205
1205
|
proof: intent.proof
|
|
1206
1206
|
},
|
|
1207
1207
|
forfeit_txs: forfeitTxs,
|
|
@@ -1220,7 +1220,7 @@ var RestDelegateProvider = class {
|
|
|
1220
1220
|
*/
|
|
1221
1221
|
async getDelegateInfo() {
|
|
1222
1222
|
const url = `${this.url}/v1/delegator/info`;
|
|
1223
|
-
const response = await
|
|
1223
|
+
const response = await chunkNUIZAUNR_cjs.rateGate.runHttp(url, () => chunkNUIZAUNR_cjs.baseFetch(url));
|
|
1224
1224
|
if (!response.ok) {
|
|
1225
1225
|
const errorText2 = await response.text();
|
|
1226
1226
|
throw new Error(`Failed to get delegate info: ${errorText2}`);
|
|
@@ -1276,7 +1276,7 @@ async function collectPages(read) {
|
|
|
1276
1276
|
return items;
|
|
1277
1277
|
}
|
|
1278
1278
|
function scriptFromArkAddress(address) {
|
|
1279
|
-
return base.hex.encode(
|
|
1279
|
+
return base.hex.encode(chunkNUIZAUNR_cjs.ArkAddress.decode(address).pkScript);
|
|
1280
1280
|
}
|
|
1281
1281
|
|
|
1282
1282
|
// src/repositories/walletRepository.ts
|
|
@@ -1335,9 +1335,9 @@ async function collectScriptVtxos(repository, script, options) {
|
|
|
1335
1335
|
return [...byOutpoint.values()].map((row) => row.vtxo);
|
|
1336
1336
|
}
|
|
1337
1337
|
function unspentScriptVtxos(rows, copies) {
|
|
1338
|
-
const spent = copies.filter((copy) =>
|
|
1338
|
+
const spent = copies.filter((copy) => chunkNUIZAUNR_cjs.isVtxoSpent(copy.vtxo));
|
|
1339
1339
|
return rows.filter(
|
|
1340
|
-
(row) => !
|
|
1340
|
+
(row) => !chunkNUIZAUNR_cjs.isVtxoSpent(row.vtxo) && !spent.some(
|
|
1341
1341
|
(copy) => copy.address !== row.address && copy.vtxo.txid === row.vtxo.txid && copy.vtxo.vout === row.vtxo.vout && shouldReplaceScriptVtxo(row, copy)
|
|
1342
1342
|
)
|
|
1343
1343
|
);
|
|
@@ -1420,7 +1420,7 @@ var ESPLORA_URL = {
|
|
|
1420
1420
|
regtest: "http://localhost:3000/api"
|
|
1421
1421
|
};
|
|
1422
1422
|
var EsploraProvider = class {
|
|
1423
|
-
constructor(baseUrl = ESPLORA_URL[
|
|
1423
|
+
constructor(baseUrl = ESPLORA_URL[chunkNUIZAUNR_cjs.DEFAULT_NETWORK_NAME], opts) {
|
|
1424
1424
|
this.baseUrl = baseUrl;
|
|
1425
1425
|
this.pollingInterval = opts?.pollingInterval ?? 15e3;
|
|
1426
1426
|
this.forcePolling = opts?.forcePolling ?? false;
|
|
@@ -1435,14 +1435,14 @@ var EsploraProvider = class {
|
|
|
1435
1435
|
*/
|
|
1436
1436
|
addressWatches = /* @__PURE__ */ new Map();
|
|
1437
1437
|
async getCoins(address) {
|
|
1438
|
-
const response = await
|
|
1438
|
+
const response = await chunkNUIZAUNR_cjs.baseFetch(`${this.baseUrl}/address/${address}/utxo`);
|
|
1439
1439
|
if (!response.ok) {
|
|
1440
1440
|
throw new Error(`Failed to fetch UTXOs: ${response.statusText}`);
|
|
1441
1441
|
}
|
|
1442
1442
|
return response.json();
|
|
1443
1443
|
}
|
|
1444
1444
|
async getFeeRate() {
|
|
1445
|
-
const response = await
|
|
1445
|
+
const response = await chunkNUIZAUNR_cjs.baseFetch(`${this.baseUrl}/fee-estimates`);
|
|
1446
1446
|
if (response.status === 404) {
|
|
1447
1447
|
return void 0;
|
|
1448
1448
|
}
|
|
@@ -1463,7 +1463,7 @@ var EsploraProvider = class {
|
|
|
1463
1463
|
}
|
|
1464
1464
|
}
|
|
1465
1465
|
async getTxOutspends(txid) {
|
|
1466
|
-
const response = await
|
|
1466
|
+
const response = await chunkNUIZAUNR_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/outspends`);
|
|
1467
1467
|
if (!response.ok) {
|
|
1468
1468
|
const error = await response.text();
|
|
1469
1469
|
throw new Error(`Failed to get transaction outspends: ${error}`);
|
|
@@ -1471,7 +1471,7 @@ var EsploraProvider = class {
|
|
|
1471
1471
|
return response.json();
|
|
1472
1472
|
}
|
|
1473
1473
|
async getTransactions(address) {
|
|
1474
|
-
const response = await
|
|
1474
|
+
const response = await chunkNUIZAUNR_cjs.baseFetch(`${this.baseUrl}/address/${address}/txs`);
|
|
1475
1475
|
if (!response.ok) {
|
|
1476
1476
|
const error = await response.text();
|
|
1477
1477
|
throw new Error(`Failed to get transactions: ${error}`);
|
|
@@ -1480,14 +1480,14 @@ var EsploraProvider = class {
|
|
|
1480
1480
|
}
|
|
1481
1481
|
/** Orders of magnitude smaller than `/address/{addr}/txs`: the polling fallback's probe. */
|
|
1482
1482
|
async getAddressStats(address) {
|
|
1483
|
-
const response = await
|
|
1483
|
+
const response = await chunkNUIZAUNR_cjs.baseFetch(`${this.baseUrl}/address/${address}`);
|
|
1484
1484
|
if (!response.ok) {
|
|
1485
1485
|
throw new Error(`Failed to get address stats: ${response.statusText}`);
|
|
1486
1486
|
}
|
|
1487
1487
|
return response.json();
|
|
1488
1488
|
}
|
|
1489
1489
|
async getRawTransaction(txid) {
|
|
1490
|
-
const response = await
|
|
1490
|
+
const response = await chunkNUIZAUNR_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/hex`);
|
|
1491
1491
|
if (!response.ok) {
|
|
1492
1492
|
const error = await response.text();
|
|
1493
1493
|
throw new Error(`Failed to get raw transaction ${txid}: ${error}`);
|
|
@@ -1495,7 +1495,7 @@ var EsploraProvider = class {
|
|
|
1495
1495
|
return base.hex.decode((await response.text()).trim());
|
|
1496
1496
|
}
|
|
1497
1497
|
async getTxStatus(txid) {
|
|
1498
|
-
const txresponse = await
|
|
1498
|
+
const txresponse = await chunkNUIZAUNR_cjs.baseFetch(`${this.baseUrl}/tx/${txid}`);
|
|
1499
1499
|
if (!txresponse.ok) {
|
|
1500
1500
|
throw new Error(txresponse.statusText);
|
|
1501
1501
|
}
|
|
@@ -1503,7 +1503,7 @@ var EsploraProvider = class {
|
|
|
1503
1503
|
if (!tx.status.confirmed) {
|
|
1504
1504
|
return { confirmed: false };
|
|
1505
1505
|
}
|
|
1506
|
-
const response = await
|
|
1506
|
+
const response = await chunkNUIZAUNR_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/status`);
|
|
1507
1507
|
if (!response.ok) {
|
|
1508
1508
|
throw new Error(`Failed to get transaction status: ${response.statusText}`);
|
|
1509
1509
|
}
|
|
@@ -1777,9 +1777,9 @@ var EsploraProvider = class {
|
|
|
1777
1777
|
return { subscribers, teardown, started };
|
|
1778
1778
|
}
|
|
1779
1779
|
async getChainTip() {
|
|
1780
|
-
let tipBlocks = await
|
|
1780
|
+
let tipBlocks = await chunkNUIZAUNR_cjs.baseFetch(`${this.baseUrl}/blocks`);
|
|
1781
1781
|
if (tipBlocks.status === 404) {
|
|
1782
|
-
tipBlocks = await
|
|
1782
|
+
tipBlocks = await chunkNUIZAUNR_cjs.baseFetch(`${this.baseUrl}/v1/blocks`);
|
|
1783
1783
|
}
|
|
1784
1784
|
if (!tipBlocks.ok) {
|
|
1785
1785
|
throw new Error(`Failed to get chain tip: ${tipBlocks.statusText}`);
|
|
@@ -1800,7 +1800,7 @@ var EsploraProvider = class {
|
|
|
1800
1800
|
};
|
|
1801
1801
|
}
|
|
1802
1802
|
async broadcastPackage(parent, child) {
|
|
1803
|
-
const response = await
|
|
1803
|
+
const response = await chunkNUIZAUNR_cjs.baseFetch(`${this.baseUrl}/txs/package`, {
|
|
1804
1804
|
method: "POST",
|
|
1805
1805
|
headers: {
|
|
1806
1806
|
"Content-Type": "application/json"
|
|
@@ -1816,7 +1816,7 @@ var EsploraProvider = class {
|
|
|
1816
1816
|
return result;
|
|
1817
1817
|
}
|
|
1818
1818
|
async broadcastTx(tx) {
|
|
1819
|
-
const response = await
|
|
1819
|
+
const response = await chunkNUIZAUNR_cjs.baseFetch(`${this.baseUrl}/tx`, {
|
|
1820
1820
|
method: "POST",
|
|
1821
1821
|
headers: {
|
|
1822
1822
|
"Content-Type": "text/plain"
|
|
@@ -1993,7 +1993,7 @@ function findP2AOutput(tx) {
|
|
|
1993
1993
|
var CHILD_DUST_AMOUNT = 546;
|
|
1994
1994
|
function buildAnchorChild(params) {
|
|
1995
1995
|
const { parent, feeRate, fundingCoins, changeAddress, tapInternalKey, network } = params;
|
|
1996
|
-
const child = new
|
|
1996
|
+
const child = new chunkNUIZAUNR_cjs.Transaction({ version: 3, allowLegacyWitnessUtxo: true });
|
|
1997
1997
|
child.addInput(findP2AOutput(parent));
|
|
1998
1998
|
const estimator = TxWeightEstimator.create().addP2AInput();
|
|
1999
1999
|
for (const _ of fundingCoins) {
|
|
@@ -2041,7 +2041,7 @@ function buildForfeitTx(inputs, forfeitPkScript, txLocktime) {
|
|
|
2041
2041
|
);
|
|
2042
2042
|
}
|
|
2043
2043
|
function buildForfeitTxWithOutput(inputs, output, txLocktime) {
|
|
2044
|
-
const tx = new
|
|
2044
|
+
const tx = new chunkNUIZAUNR_cjs.Transaction({
|
|
2045
2045
|
version: 3,
|
|
2046
2046
|
lockTime: txLocktime
|
|
2047
2047
|
});
|
|
@@ -2117,7 +2117,7 @@ function validateVtxoTxGraph(graph, roundTransaction, sweepTapTreeRoot) {
|
|
|
2117
2117
|
if (previousScriptKey.length !== 32) {
|
|
2118
2118
|
throw new Error(`parent output ${childIndex} has invalid script`);
|
|
2119
2119
|
}
|
|
2120
|
-
const cosigners =
|
|
2120
|
+
const cosigners = chunkNUIZAUNR_cjs.getArkPsbtFields(child.root, 0, chunkNUIZAUNR_cjs.CosignerPublicKey);
|
|
2121
2121
|
if (cosigners.length === 0) {
|
|
2122
2122
|
throw ErrMissingCosignersPublicKeys;
|
|
2123
2123
|
}
|
|
@@ -2175,7 +2175,7 @@ var EmulatorPacket = class _EmulatorPacket {
|
|
|
2175
2175
|
return new _EmulatorPacket(entries);
|
|
2176
2176
|
}
|
|
2177
2177
|
static fromBytes(data) {
|
|
2178
|
-
const reader = new
|
|
2178
|
+
const reader = new chunkJEJJYYYJ_cjs.BufferReader(data);
|
|
2179
2179
|
const entryCount = reader.readCompactSize();
|
|
2180
2180
|
const entries = [];
|
|
2181
2181
|
for (let i = 0; i < entryCount; i++) {
|
|
@@ -2193,7 +2193,7 @@ var EmulatorPacket = class _EmulatorPacket {
|
|
|
2193
2193
|
return _EmulatorPacket.PACKET_TYPE;
|
|
2194
2194
|
}
|
|
2195
2195
|
serialize() {
|
|
2196
|
-
const writer = new
|
|
2196
|
+
const writer = new chunkJEJJYYYJ_cjs.BufferWriter();
|
|
2197
2197
|
writer.writeCompactSize(this.entries.length);
|
|
2198
2198
|
for (const entry of this.entries) {
|
|
2199
2199
|
writer.writeUint16LE(entry.vin);
|
|
@@ -2280,7 +2280,7 @@ var Extension = class _Extension {
|
|
|
2280
2280
|
`expected magic prefix ${base.hex.encode(ARKADE_MAGIC)}, got ${base.hex.encode(payload.slice(0, Math.min(payload.length, ARKADE_MAGIC.length)))}`
|
|
2281
2281
|
);
|
|
2282
2282
|
}
|
|
2283
|
-
const reader = new
|
|
2283
|
+
const reader = new chunkJEJJYYYJ_cjs.BufferReader(payload.slice(ARKADE_MAGIC.length));
|
|
2284
2284
|
const packets = [];
|
|
2285
2285
|
while (reader.remaining() > 0) {
|
|
2286
2286
|
const packetType = reader.readByte();
|
|
@@ -2353,7 +2353,7 @@ var Extension = class _Extension {
|
|
|
2353
2353
|
* getAssetPacket returns the embedded Packet, or null if not present.
|
|
2354
2354
|
*/
|
|
2355
2355
|
getAssetPacket() {
|
|
2356
|
-
return this.packets.find((p) => p instanceof
|
|
2356
|
+
return this.packets.find((p) => p instanceof chunkJEJJYYYJ_cjs.Packet) ?? null;
|
|
2357
2357
|
}
|
|
2358
2358
|
/**
|
|
2359
2359
|
* getEmulatorPacket returns the embedded EmulatorPacket, or null if not present.
|
|
@@ -2377,8 +2377,8 @@ var Extension = class _Extension {
|
|
|
2377
2377
|
};
|
|
2378
2378
|
function parsePacket(packetType, data) {
|
|
2379
2379
|
switch (packetType) {
|
|
2380
|
-
case
|
|
2381
|
-
return
|
|
2380
|
+
case chunkJEJJYYYJ_cjs.Packet.PACKET_TYPE:
|
|
2381
|
+
return chunkJEJJYYYJ_cjs.Packet.fromBytes(data);
|
|
2382
2382
|
case EmulatorPacket.PACKET_TYPE:
|
|
2383
2383
|
return EmulatorPacket.fromBytes(data);
|
|
2384
2384
|
default:
|
|
@@ -2425,22 +2425,22 @@ function buildOpReturnScript(data) {
|
|
|
2425
2425
|
}
|
|
2426
2426
|
return script;
|
|
2427
2427
|
}
|
|
2428
|
-
var ErrOffchainOutputNotFound = (address) => new
|
|
2429
|
-
var ErrInvalidAssetOutputAmount = (got, want, assetId) => new
|
|
2428
|
+
var ErrOffchainOutputNotFound = (address) => new chunkNUIZAUNR_cjs.ServerResponseMismatchError(`offchain send output not found: ${address}`);
|
|
2429
|
+
var ErrInvalidAssetOutputAmount = (got, want, assetId) => new chunkNUIZAUNR_cjs.ServerResponseMismatchError(
|
|
2430
2430
|
`invalid asset output amount for ${assetId}: got ${got}, want ${want}`
|
|
2431
2431
|
);
|
|
2432
|
-
var ErrAssetGroupNotFound = (assetId) => new
|
|
2433
|
-
var ErrAssetOutputNotFound = (assetId, outputIndex) => new
|
|
2432
|
+
var ErrAssetGroupNotFound = (assetId) => new chunkNUIZAUNR_cjs.ServerResponseMismatchError(`asset group not found in batch leaf: ${assetId}`);
|
|
2433
|
+
var ErrAssetOutputNotFound = (assetId, outputIndex) => new chunkNUIZAUNR_cjs.ServerResponseMismatchError(
|
|
2434
2434
|
`asset output not found in asset group ${assetId} at index ${outputIndex}`
|
|
2435
2435
|
);
|
|
2436
|
-
var ErrOnchainOutputNotFound = (address) => new
|
|
2437
|
-
var ErrUnvalidatedOffchainOutput = (address) => new
|
|
2436
|
+
var ErrOnchainOutputNotFound = (address) => new chunkNUIZAUNR_cjs.ServerResponseMismatchError(`onchain output not found: ${address}`);
|
|
2437
|
+
var ErrUnvalidatedOffchainOutput = (address) => new chunkNUIZAUNR_cjs.ServerResponseMismatchError(
|
|
2438
2438
|
`offchain output ${address} cannot be validated: virtual output tree signing did not run`
|
|
2439
2439
|
);
|
|
2440
|
-
var ErrIntentOutputNotFound = (index, kind) => new
|
|
2440
|
+
var ErrIntentOutputNotFound = (index, kind) => new chunkNUIZAUNR_cjs.ServerResponseMismatchError(
|
|
2441
2441
|
`${kind} output ${index} of the intent proof is not present in what the server built`
|
|
2442
2442
|
);
|
|
2443
|
-
var ErrUnvalidatedIntentOutput = (index) => new
|
|
2443
|
+
var ErrUnvalidatedIntentOutput = (index) => new chunkNUIZAUNR_cjs.ServerResponseMismatchError(
|
|
2444
2444
|
`offchain output ${index} of the intent proof cannot be validated: virtual output tree signing did not run`
|
|
2445
2445
|
);
|
|
2446
2446
|
var ErrInvalidOnchainOutputAmount = (address) => new Error(`invalid onchain output amount: ${address}`);
|
|
@@ -2449,7 +2449,7 @@ var ErrInvalidOffchainOutputAmount = (address) => new Error(`invalid offchain ou
|
|
|
2449
2449
|
function assertFinalCommitmentMatchesValidated(finalCommitmentTx, validatedCommitmentTxid, context) {
|
|
2450
2450
|
if (!validatedCommitmentTxid) return;
|
|
2451
2451
|
if (finalCommitmentTx.id === validatedCommitmentTxid) return;
|
|
2452
|
-
throw new
|
|
2452
|
+
throw new chunkNUIZAUNR_cjs.ServerResponseMismatchError(
|
|
2453
2453
|
`${context}: finalization commitment tx ${finalCommitmentTx.id} differs from the validated commitment tx ${validatedCommitmentTxid}`
|
|
2454
2454
|
);
|
|
2455
2455
|
}
|
|
@@ -2459,7 +2459,7 @@ function validateBatchRecipients(commitmentTx, vtxoTreeLeaves, recipients, netwo
|
|
|
2459
2459
|
for (const recipient of recipients) {
|
|
2460
2460
|
let arkAddress;
|
|
2461
2461
|
try {
|
|
2462
|
-
arkAddress =
|
|
2462
|
+
arkAddress = chunkNUIZAUNR_cjs.ArkAddress.decode(recipient.address);
|
|
2463
2463
|
} catch {
|
|
2464
2464
|
validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
|
|
2465
2465
|
continue;
|
|
@@ -2471,7 +2471,7 @@ function validateBatchRecipientsWithoutTree(commitmentTx, recipients, network) {
|
|
|
2471
2471
|
const usedOnchainOutputs = /* @__PURE__ */ new Set();
|
|
2472
2472
|
for (const recipient of recipients) {
|
|
2473
2473
|
try {
|
|
2474
|
-
|
|
2474
|
+
chunkNUIZAUNR_cjs.ArkAddress.decode(recipient.address);
|
|
2475
2475
|
} catch {
|
|
2476
2476
|
validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
|
|
2477
2477
|
continue;
|
|
@@ -2480,7 +2480,7 @@ function validateBatchRecipientsWithoutTree(commitmentTx, recipients, network) {
|
|
|
2480
2480
|
}
|
|
2481
2481
|
}
|
|
2482
2482
|
function declaredIntentOutputs(signedProof, onchainOutputIndexes) {
|
|
2483
|
-
const proof =
|
|
2483
|
+
const proof = chunkNUIZAUNR_cjs.Transaction.fromPSBT(base.base64.decode(signedProof));
|
|
2484
2484
|
const onchain = new Set(onchainOutputIndexes);
|
|
2485
2485
|
const declared = [];
|
|
2486
2486
|
for (let i = 0; i < proof.outputsLength; i++) {
|
|
@@ -2772,7 +2772,7 @@ function assetMintResolver() {
|
|
|
2772
2772
|
if (!tx.assets?.length || !tx.key.arkTxid) return void 0;
|
|
2773
2773
|
const minted = tx.assets.filter((a) => {
|
|
2774
2774
|
try {
|
|
2775
|
-
return base.hex.encode(
|
|
2775
|
+
return base.hex.encode(chunkJEJJYYYJ_cjs.AssetId.fromString(a.assetId).txid) === tx.key.arkTxid;
|
|
2776
2776
|
} catch {
|
|
2777
2777
|
return false;
|
|
2778
2778
|
}
|
|
@@ -2849,7 +2849,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
2849
2849
|
const existing = inputsByAssetId.get(asset.assetId);
|
|
2850
2850
|
inputsByAssetId.set(asset.assetId, [
|
|
2851
2851
|
...existing ?? [],
|
|
2852
|
-
|
|
2852
|
+
chunkJEJJYYYJ_cjs.AssetInput.create(inputIndex, asset.amount)
|
|
2853
2853
|
]);
|
|
2854
2854
|
}
|
|
2855
2855
|
}
|
|
@@ -2861,7 +2861,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
2861
2861
|
const existing = outputsByAssetId.get(asset.assetId);
|
|
2862
2862
|
outputsByAssetId.set(asset.assetId, [
|
|
2863
2863
|
...existing ?? [],
|
|
2864
|
-
|
|
2864
|
+
chunkJEJJYYYJ_cjs.AssetOutput.create(outputIndex, asset.amount)
|
|
2865
2865
|
]);
|
|
2866
2866
|
}
|
|
2867
2867
|
}
|
|
@@ -2872,7 +2872,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
2872
2872
|
const existing = outputsByAssetId.get(asset.assetId);
|
|
2873
2873
|
outputsByAssetId.set(asset.assetId, [
|
|
2874
2874
|
...existing ?? [],
|
|
2875
|
-
|
|
2875
|
+
chunkJEJJYYYJ_cjs.AssetOutput.create(outputIndex, asset.amount)
|
|
2876
2876
|
]);
|
|
2877
2877
|
}
|
|
2878
2878
|
}
|
|
@@ -2881,11 +2881,11 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
2881
2881
|
for (const assetIdStr of allAssetIds) {
|
|
2882
2882
|
const inputs = inputsByAssetId.get(assetIdStr);
|
|
2883
2883
|
const outputs = outputsByAssetId.get(assetIdStr);
|
|
2884
|
-
const assetId =
|
|
2885
|
-
const group =
|
|
2884
|
+
const assetId = chunkJEJJYYYJ_cjs.AssetId.fromString(assetIdStr);
|
|
2885
|
+
const group = chunkJEJJYYYJ_cjs.AssetGroup.create(assetId, null, inputs ?? [], outputs ?? [], []);
|
|
2886
2886
|
groups.push(group);
|
|
2887
2887
|
}
|
|
2888
|
-
return
|
|
2888
|
+
return chunkJEJJYYYJ_cjs.Packet.create(groups);
|
|
2889
2889
|
}
|
|
2890
2890
|
function selectCoinsWithAsset(coins, assetId, requiredAmount) {
|
|
2891
2891
|
const coinsWithAsset = coins.filter((coin) => coin.assets?.some((a) => a.assetId === assetId));
|
|
@@ -2922,7 +2922,7 @@ function selectedCoinsToAssetInputs(selectedCoins) {
|
|
|
2922
2922
|
}
|
|
2923
2923
|
function toXOnlySignerHex(pubkeyHex) {
|
|
2924
2924
|
const bytes = base.hex.decode(pubkeyHex);
|
|
2925
|
-
if (bytes.length === 32 || bytes.length === 33) return base.hex.encode(
|
|
2925
|
+
if (bytes.length === 32 || bytes.length === 33) return base.hex.encode(chunk7TSJAQRV_cjs.toXOnly(bytes, "signer key"));
|
|
2926
2926
|
throw new Error(`invalid signer pubkey length: expected 32 or 33 bytes, got ${bytes.length}`);
|
|
2927
2927
|
}
|
|
2928
2928
|
function signerSetFromInfo(info) {
|
|
@@ -2969,13 +2969,13 @@ var toTimelock = (value) => ({
|
|
|
2969
2969
|
var toSeconds = (t) => t.type === "seconds" ? t.value : t.value * NOMINAL_BLOCK_SECONDS;
|
|
2970
2970
|
function assertTimelockInPolicy(timelock, policy, label, overrideOption) {
|
|
2971
2971
|
if (policy.requireSeconds && timelock.type === "blocks") {
|
|
2972
|
-
throw new
|
|
2972
|
+
throw new chunkNUIZAUNR_cjs.ServerResponseMismatchError(
|
|
2973
2973
|
`${label} rejected: block-typed timelocks are not accepted (got ${timelock.value})`
|
|
2974
2974
|
);
|
|
2975
2975
|
}
|
|
2976
2976
|
const seconds = toSeconds(timelock);
|
|
2977
2977
|
if (seconds < policy.minSeconds) {
|
|
2978
|
-
throw new
|
|
2978
|
+
throw new chunkNUIZAUNR_cjs.ServerResponseMismatchError(
|
|
2979
2979
|
`${label} rejected: ${timelock.value} ${timelock.type} is below the ${policy.minSeconds}s floor; pass ${overrideOption}: ${seconds}n to Wallet.create to lower it`
|
|
2980
2980
|
);
|
|
2981
2981
|
}
|
|
@@ -2996,7 +2996,7 @@ function resolveBatchExpiryPolicy(network, overrides) {
|
|
|
2996
2996
|
}
|
|
2997
2997
|
function assertValidBatchExpiry(batchExpiry, policy) {
|
|
2998
2998
|
if (policy.advertisedVtxoTreeExpiry !== void 0 && batchExpiry !== policy.advertisedVtxoTreeExpiry) {
|
|
2999
|
-
throw new
|
|
2999
|
+
throw new chunkNUIZAUNR_cjs.ServerResponseMismatchError(
|
|
3000
3000
|
`batch expiry rejected: ${batchExpiry} does not match the advertised vtxoTreeExpiry ${policy.advertisedVtxoTreeExpiry}`
|
|
3001
3001
|
);
|
|
3002
3002
|
}
|
|
@@ -3026,21 +3026,21 @@ function resolveCheckpointExitDelayPolicy(network, overrides) {
|
|
|
3026
3026
|
function assertValidServerUnrollScript(checkpointTapscript, policy) {
|
|
3027
3027
|
let script;
|
|
3028
3028
|
try {
|
|
3029
|
-
script =
|
|
3029
|
+
script = chunkNUIZAUNR_cjs.CSVMultisigTapscript.decode(base.hex.decode(checkpointTapscript));
|
|
3030
3030
|
} catch (e) {
|
|
3031
|
-
throw new
|
|
3031
|
+
throw new chunkNUIZAUNR_cjs.ServerResponseMismatchError(
|
|
3032
3032
|
`checkpoint exit delay rejected: invalid checkpointTapscript from server (${e instanceof Error ? e.message : String(e)})`
|
|
3033
3033
|
);
|
|
3034
3034
|
}
|
|
3035
3035
|
if (policy.advertisedForfeitPubkey !== void 0) {
|
|
3036
3036
|
const { pubkeys } = script.params;
|
|
3037
3037
|
if (pubkeys.length !== 1) {
|
|
3038
|
-
throw new
|
|
3038
|
+
throw new chunkNUIZAUNR_cjs.ServerResponseMismatchError(
|
|
3039
3039
|
`checkpoint exit delay rejected: checkpointTapscript must commit to exactly one pubkey, got ${pubkeys.length} [${pubkeys.map(base.hex.encode).join(", ")}]`
|
|
3040
3040
|
);
|
|
3041
3041
|
}
|
|
3042
3042
|
if (!utils_js.equalBytes(pubkeys[0], policy.advertisedForfeitPubkey)) {
|
|
3043
|
-
throw new
|
|
3043
|
+
throw new chunkNUIZAUNR_cjs.ServerResponseMismatchError(
|
|
3044
3044
|
`checkpoint exit delay rejected: checkpointTapscript pubkey ${base.hex.encode(pubkeys[0])} does not match the advertised forfeitPubkey ${base.hex.encode(policy.advertisedForfeitPubkey)}`
|
|
3045
3045
|
);
|
|
3046
3046
|
}
|
|
@@ -3084,8 +3084,8 @@ function buildOffchainTx(inputs, outputs, serverUnrollScript) {
|
|
|
3084
3084
|
function buildVirtualTx(inputs, outputs) {
|
|
3085
3085
|
let lockTime = 0n;
|
|
3086
3086
|
for (const input of inputs) {
|
|
3087
|
-
const tapscript =
|
|
3088
|
-
if (
|
|
3087
|
+
const tapscript = chunkNUIZAUNR_cjs.decodeTapscript(chunkNUIZAUNR_cjs.scriptFromTapLeafScript(input.tapLeafScript));
|
|
3088
|
+
if (chunkNUIZAUNR_cjs.CLTVMultisigTapscript.is(tapscript)) {
|
|
3089
3089
|
if (lockTime !== 0n) {
|
|
3090
3090
|
if (isSeconds(lockTime) !== isSeconds(tapscript.params.absoluteTimelock)) {
|
|
3091
3091
|
throw new Error("cannot mix seconds and blocks locktime");
|
|
@@ -3096,7 +3096,7 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
3096
3096
|
}
|
|
3097
3097
|
}
|
|
3098
3098
|
}
|
|
3099
|
-
const tx = new
|
|
3099
|
+
const tx = new chunkNUIZAUNR_cjs.Transaction({
|
|
3100
3100
|
version: 3,
|
|
3101
3101
|
lockTime: Number(lockTime)
|
|
3102
3102
|
});
|
|
@@ -3106,12 +3106,12 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
3106
3106
|
index: input.vout,
|
|
3107
3107
|
sequence: lockTime ? btcSigner.DEFAULT_SEQUENCE - 1 : void 0,
|
|
3108
3108
|
witnessUtxo: {
|
|
3109
|
-
script:
|
|
3109
|
+
script: chunkNUIZAUNR_cjs.VtxoScript.decode(input.tapTree).pkScript,
|
|
3110
3110
|
amount: BigInt(input.value)
|
|
3111
3111
|
},
|
|
3112
3112
|
tapLeafScript: [input.tapLeafScript]
|
|
3113
3113
|
});
|
|
3114
|
-
|
|
3114
|
+
chunkNUIZAUNR_cjs.setArkPsbtField(tx, i, chunkNUIZAUNR_cjs.VtxoTaprootTree, input.tapTree);
|
|
3115
3115
|
}
|
|
3116
3116
|
for (const output of outputs) {
|
|
3117
3117
|
tx.addOutput(output);
|
|
@@ -3120,8 +3120,8 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
3120
3120
|
return tx;
|
|
3121
3121
|
}
|
|
3122
3122
|
function buildCheckpointTx(vtxo, serverUnrollScript) {
|
|
3123
|
-
const collaborativeClosure =
|
|
3124
|
-
const checkpointVtxoScript = new
|
|
3123
|
+
const collaborativeClosure = chunkNUIZAUNR_cjs.decodeTapscript(chunkNUIZAUNR_cjs.scriptFromTapLeafScript(vtxo.tapLeafScript));
|
|
3124
|
+
const checkpointVtxoScript = new chunkNUIZAUNR_cjs.VtxoScript([
|
|
3125
3125
|
serverUnrollScript.script,
|
|
3126
3126
|
collaborativeClosure.script
|
|
3127
3127
|
]);
|
|
@@ -3197,7 +3197,7 @@ function verifyTapscriptSignatures(tx, inputIndex, requiredSigners, excludePubke
|
|
|
3197
3197
|
const sighashType = signature.length === 65 ? signature[64] : btcSigner.SigHash.DEFAULT;
|
|
3198
3198
|
const sig = signature.subarray(0, 64);
|
|
3199
3199
|
if (!allowedSighashTypes.includes(sighashType)) {
|
|
3200
|
-
const sighashName =
|
|
3200
|
+
const sighashName = chunkNUIZAUNR_cjs.formatSighash(sighashType);
|
|
3201
3201
|
throw new Error(
|
|
3202
3202
|
`Unallowed sighash type ${sighashName} for input ${inputIndex}, pubkey ${pubKeyHex}.`
|
|
3203
3203
|
);
|
|
@@ -3271,7 +3271,7 @@ function combineTapscriptSigs(signedTx, originalTx) {
|
|
|
3271
3271
|
}
|
|
3272
3272
|
function isValidArkAddress(address) {
|
|
3273
3273
|
try {
|
|
3274
|
-
|
|
3274
|
+
chunkNUIZAUNR_cjs.ArkAddress.decode(address);
|
|
3275
3275
|
return true;
|
|
3276
3276
|
} catch (e) {
|
|
3277
3277
|
return false;
|
|
@@ -3279,16 +3279,16 @@ function isValidArkAddress(address) {
|
|
|
3279
3279
|
}
|
|
3280
3280
|
function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, context) {
|
|
3281
3281
|
if (serverCheckpointTxs.length !== expectedCheckpoints.length) {
|
|
3282
|
-
throw new
|
|
3282
|
+
throw new chunkNUIZAUNR_cjs.ServerResponseMismatchError(
|
|
3283
3283
|
`${context} returned ${serverCheckpointTxs.length} checkpoints, expected ${expectedCheckpoints.length}`
|
|
3284
3284
|
);
|
|
3285
3285
|
}
|
|
3286
3286
|
const byTxid = new Map(expectedCheckpoints.map((c) => [c.id, c]));
|
|
3287
3287
|
return serverCheckpointTxs.map((encoded, index) => {
|
|
3288
|
-
const server =
|
|
3288
|
+
const server = chunkNUIZAUNR_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
|
|
3289
3289
|
const local = byTxid.get(server.id);
|
|
3290
3290
|
if (!local) {
|
|
3291
|
-
throw new
|
|
3291
|
+
throw new chunkNUIZAUNR_cjs.ServerResponseMismatchError(
|
|
3292
3292
|
`${context} checkpoint ${index} txid ${server.id} does not match any submitted checkpoint`
|
|
3293
3293
|
);
|
|
3294
3294
|
}
|
|
@@ -3298,14 +3298,14 @@ function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, contex
|
|
|
3298
3298
|
}
|
|
3299
3299
|
function assertSubmittedArkTxid(response, signedArkTx, context) {
|
|
3300
3300
|
if (response.arkTxid !== signedArkTx.id) {
|
|
3301
|
-
throw new
|
|
3301
|
+
throw new chunkNUIZAUNR_cjs.ServerResponseMismatchError(
|
|
3302
3302
|
`${context} returned ark txid ${response.arkTxid}, expected ${signedArkTx.id}`
|
|
3303
3303
|
);
|
|
3304
3304
|
}
|
|
3305
3305
|
if (response.finalArkTx === void 0) return;
|
|
3306
|
-
const finalTxid =
|
|
3306
|
+
const finalTxid = chunkNUIZAUNR_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx)).id;
|
|
3307
3307
|
if (finalTxid !== signedArkTx.id) {
|
|
3308
|
-
throw new
|
|
3308
|
+
throw new chunkNUIZAUNR_cjs.ServerResponseMismatchError(
|
|
3309
3309
|
`${context} returned final ark tx ${finalTxid}, expected ${signedArkTx.id}`
|
|
3310
3310
|
);
|
|
3311
3311
|
}
|
|
@@ -3317,20 +3317,20 @@ function assertServerSignedLeaf(serverTx, localTx, inputIndex, serverPubkeys, co
|
|
|
3317
3317
|
`${context}: input ${inputIndex} carries no spend leaf to verify the server signature against`
|
|
3318
3318
|
);
|
|
3319
3319
|
}
|
|
3320
|
-
const script =
|
|
3320
|
+
const script = chunkNUIZAUNR_cjs.scriptFromTapLeafScript(leaf);
|
|
3321
3321
|
let leafPubkeys;
|
|
3322
3322
|
try {
|
|
3323
|
-
leafPubkeys =
|
|
3324
|
-
(key) => base.hex.encode(
|
|
3323
|
+
leafPubkeys = chunkNUIZAUNR_cjs.decodeTapscript(script).params.pubkeys.map(
|
|
3324
|
+
(key) => base.hex.encode(chunk7TSJAQRV_cjs.toXOnly(key, "leaf key"))
|
|
3325
3325
|
);
|
|
3326
3326
|
} catch (error) {
|
|
3327
|
-
throw new
|
|
3327
|
+
throw new chunkNUIZAUNR_cjs.ServerResponseMismatchError(
|
|
3328
3328
|
`${context}: input ${inputIndex} spend leaf cannot be decoded (${error instanceof Error ? error.message : String(error)})`
|
|
3329
3329
|
);
|
|
3330
3330
|
}
|
|
3331
3331
|
const signer = leafPubkeys.find((key) => serverPubkeys.has(key));
|
|
3332
3332
|
if (!signer) {
|
|
3333
|
-
throw new
|
|
3333
|
+
throw new chunkNUIZAUNR_cjs.ServerResponseMismatchError(
|
|
3334
3334
|
`${context}: input ${inputIndex} spend leaf names no signer key the server advertises`
|
|
3335
3335
|
);
|
|
3336
3336
|
}
|
|
@@ -3344,7 +3344,7 @@ function assertServerSignedLeaf(serverTx, localTx, inputIndex, serverPubkeys, co
|
|
|
3344
3344
|
payment_js.tapLeafHash(script)
|
|
3345
3345
|
);
|
|
3346
3346
|
} catch (error) {
|
|
3347
|
-
throw new
|
|
3347
|
+
throw new chunkNUIZAUNR_cjs.ServerResponseMismatchError(
|
|
3348
3348
|
`${context}: input ${inputIndex} is not signed by the server on the leaf being spent (${error instanceof Error ? error.message : String(error)})`
|
|
3349
3349
|
);
|
|
3350
3350
|
}
|
|
@@ -3353,20 +3353,20 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
|
|
|
3353
3353
|
const byOutpoint = new Map(inputs.map((input) => [`${input.txid}:${input.vout}`, input]));
|
|
3354
3354
|
for (const [index, checkpoint] of checkpoints.entries()) {
|
|
3355
3355
|
if (checkpoint.inputsLength !== 1) {
|
|
3356
|
-
throw new
|
|
3356
|
+
throw new chunkNUIZAUNR_cjs.ServerResponseMismatchError(
|
|
3357
3357
|
`${context}: checkpoint ${index} spends ${checkpoint.inputsLength} inputs, expected 1`
|
|
3358
3358
|
);
|
|
3359
3359
|
}
|
|
3360
3360
|
const spent = checkpoint.getInput(0);
|
|
3361
3361
|
if (!spent.txid || spent.index === void 0) {
|
|
3362
|
-
throw new
|
|
3362
|
+
throw new chunkNUIZAUNR_cjs.ServerResponseMismatchError(
|
|
3363
3363
|
`${context}: checkpoint ${index} has no input outpoint`
|
|
3364
3364
|
);
|
|
3365
3365
|
}
|
|
3366
3366
|
const outpoint = `${base.hex.encode(spent.txid)}:${spent.index}`;
|
|
3367
3367
|
const input = byOutpoint.get(outpoint);
|
|
3368
3368
|
if (!input) {
|
|
3369
|
-
throw new
|
|
3369
|
+
throw new chunkNUIZAUNR_cjs.ServerResponseMismatchError(
|
|
3370
3370
|
`${context}: checkpoint ${index} spends ${outpoint}, which is not one of the requested virtual outputs`
|
|
3371
3371
|
);
|
|
3372
3372
|
}
|
|
@@ -3374,7 +3374,7 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
|
|
|
3374
3374
|
(unroll) => buildCheckpointTx(input, unroll).tx.id === checkpoint.id
|
|
3375
3375
|
);
|
|
3376
3376
|
if (!rebuilt) {
|
|
3377
|
-
throw new
|
|
3377
|
+
throw new chunkNUIZAUNR_cjs.ServerResponseMismatchError(
|
|
3378
3378
|
`${context}: checkpoint ${index} txid ${checkpoint.id} differs from the checkpoint built locally for ${outpoint}`
|
|
3379
3379
|
);
|
|
3380
3380
|
}
|
|
@@ -3400,9 +3400,9 @@ async function submitOffchainTx(provider, offchainTx, signer, hooks, options) {
|
|
|
3400
3400
|
const matched = matchServerCheckpoints(signedCheckpointTxs, offchainTx.checkpoints, "submitTx");
|
|
3401
3401
|
matched.forEach(({ server }, index) => {
|
|
3402
3402
|
try {
|
|
3403
|
-
|
|
3403
|
+
chunkNUIZAUNR_cjs.assertAllowedSighashTypes(server);
|
|
3404
3404
|
} catch (error) {
|
|
3405
|
-
throw new
|
|
3405
|
+
throw new chunkNUIZAUNR_cjs.ServerResponseMismatchError(
|
|
3406
3406
|
`submitTx checkpoint ${index}: ${error instanceof Error ? error.message : String(error)}`
|
|
3407
3407
|
);
|
|
3408
3408
|
}
|
|
@@ -3410,14 +3410,14 @@ async function submitOffchainTx(provider, offchainTx, signer, hooks, options) {
|
|
|
3410
3410
|
const verify = options?.verifyServerSignatures;
|
|
3411
3411
|
if (verify) {
|
|
3412
3412
|
if (response.finalArkTx === void 0) {
|
|
3413
|
-
throw new
|
|
3413
|
+
throw new chunkNUIZAUNR_cjs.ServerResponseMismatchError(
|
|
3414
3414
|
"submitTx: server returned no final ark tx to verify its signatures against"
|
|
3415
3415
|
);
|
|
3416
3416
|
}
|
|
3417
|
-
const finalArkTx =
|
|
3417
|
+
const finalArkTx = chunkNUIZAUNR_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx));
|
|
3418
3418
|
const serverPubkeys = new Set(
|
|
3419
3419
|
[verify.serverPubkey, ...verify.deprecatedServerPubkeys ?? []].map(
|
|
3420
|
-
(key) => base.hex.encode(
|
|
3420
|
+
(key) => base.hex.encode(chunk7TSJAQRV_cjs.toXOnly(key, "server key"))
|
|
3421
3421
|
)
|
|
3422
3422
|
);
|
|
3423
3423
|
for (let i = 0; i < offchainTx.arkTx.inputsLength; i++) {
|
|
@@ -3469,12 +3469,12 @@ function claimWithPreimageIdentity(identity, preimage) {
|
|
|
3469
3469
|
return {
|
|
3470
3470
|
...identity,
|
|
3471
3471
|
sign: async (tx, inputIndexes) => {
|
|
3472
|
-
const signed =
|
|
3472
|
+
const signed = chunkNUIZAUNR_cjs.Transaction.fromPSBT(
|
|
3473
3473
|
(await identity.sign(tx.clone(), inputIndexes)).toPSBT()
|
|
3474
3474
|
);
|
|
3475
3475
|
const indexes = inputIndexes ?? Array.from({ length: signed.inputsLength }, (_, i) => i);
|
|
3476
3476
|
for (const index of indexes) {
|
|
3477
|
-
|
|
3477
|
+
chunkNUIZAUNR_cjs.setArkPsbtField(signed, index, chunkNUIZAUNR_cjs.ConditionWitness, [preimage]);
|
|
3478
3478
|
}
|
|
3479
3479
|
return signed;
|
|
3480
3480
|
}
|
|
@@ -3654,7 +3654,7 @@ function extendCoinWithTapscript(boardingTapscript, utxo) {
|
|
|
3654
3654
|
};
|
|
3655
3655
|
}
|
|
3656
3656
|
function deriveContractTapscripts(contract) {
|
|
3657
|
-
const handler =
|
|
3657
|
+
const handler = chunk7TSJAQRV_cjs.contractHandlers.get(contract.type);
|
|
3658
3658
|
if (!handler) {
|
|
3659
3659
|
throw new Error(`No handler for contract type '${contract.type}'`);
|
|
3660
3660
|
}
|
|
@@ -3745,7 +3745,7 @@ function assertRecipientArkadeAddress(encoded, address, context) {
|
|
|
3745
3745
|
function assertTapTreeDerivesAddress(encoded, tapTree, address) {
|
|
3746
3746
|
let derived;
|
|
3747
3747
|
try {
|
|
3748
|
-
derived =
|
|
3748
|
+
derived = chunkNUIZAUNR_cjs.VtxoScript.decode(tapTree).pkScript;
|
|
3749
3749
|
} catch (e) {
|
|
3750
3750
|
throw new Error(
|
|
3751
3751
|
`Invalid tapTree for ${encoded}: ${e instanceof Error ? e.message : String(e)}`
|
|
@@ -3762,7 +3762,7 @@ function validateRecipients(recipients, dustAmount, context) {
|
|
|
3762
3762
|
for (const recipient of recipients) {
|
|
3763
3763
|
let address;
|
|
3764
3764
|
try {
|
|
3765
|
-
address =
|
|
3765
|
+
address = chunkNUIZAUNR_cjs.ArkAddress.decode(recipient.address);
|
|
3766
3766
|
} catch (e) {
|
|
3767
3767
|
throw new Error(`Invalid Arkade address: ${recipient.address}`);
|
|
3768
3768
|
}
|
|
@@ -3787,7 +3787,7 @@ function validateRecipients(recipients, dustAmount, context) {
|
|
|
3787
3787
|
|
|
3788
3788
|
// src/contracts/spendability.ts
|
|
3789
3789
|
function isContractGenericallySpendable(contract) {
|
|
3790
|
-
return
|
|
3790
|
+
return chunk7TSJAQRV_cjs.contractHandlers.get(contract.type)?.isGenericallySpendable?.(contract) === true;
|
|
3791
3791
|
}
|
|
3792
3792
|
function gatedContracts(contracts) {
|
|
3793
3793
|
const gated = /* @__PURE__ */ new Map();
|
|
@@ -3809,7 +3809,7 @@ function gateExclusion(gated) {
|
|
|
3809
3809
|
return (vtxo) => {
|
|
3810
3810
|
const type = gatedTypeOf(vtxo, gated);
|
|
3811
3811
|
if (type === void 0) return void 0;
|
|
3812
|
-
if (!
|
|
3812
|
+
if (!chunk7TSJAQRV_cjs.contractHandlers.has(type)) {
|
|
3813
3813
|
return `at ${vtxo.script} (contract type '${type}') has no handler registered in this build`;
|
|
3814
3814
|
}
|
|
3815
3815
|
return `at ${vtxo.script} (contract type '${type}') is not generically spendable`;
|
|
@@ -3845,7 +3845,7 @@ function selectPendingRecoveryOutpoints(contractsWithVtxos, signerSet, nowSecond
|
|
|
3845
3845
|
continue;
|
|
3846
3846
|
}
|
|
3847
3847
|
for (const v of vtxos) {
|
|
3848
|
-
if (!
|
|
3848
|
+
if (!chunkNUIZAUNR_cjs.isVtxoSpent(v) && !v.isSwept && !v.isUnrolled) {
|
|
3849
3849
|
out.add(`${v.txid}:${v.vout}`);
|
|
3850
3850
|
}
|
|
3851
3851
|
}
|
|
@@ -3880,10 +3880,10 @@ function byValueDescending(vtxos) {
|
|
|
3880
3880
|
return [...vtxos].sort((a, b) => b.value - a.value);
|
|
3881
3881
|
}
|
|
3882
3882
|
async function fetchTimeHeight(wallet) {
|
|
3883
|
-
return
|
|
3883
|
+
return chunkNUIZAUNR_cjs.resolveTimeHeight(wallet.onchainProvider);
|
|
3884
3884
|
}
|
|
3885
3885
|
function canMigrateBySend(vtxo, now) {
|
|
3886
|
-
if (!
|
|
3886
|
+
if (!chunkNUIZAUNR_cjs.canSpendOffchain(vtxo, now)) return false;
|
|
3887
3887
|
return vtxo.expiresAt !== void 0 || vtxo.expiresAtHeight !== void 0;
|
|
3888
3888
|
}
|
|
3889
3889
|
function byExpiryAscending(vtxos, now) {
|
|
@@ -3891,7 +3891,7 @@ function byExpiryAscending(vtxos, now) {
|
|
|
3891
3891
|
if (vtxo.isSwept) return -Infinity;
|
|
3892
3892
|
if (vtxo.expiresAt !== void 0) return vtxo.expiresAt.getTime();
|
|
3893
3893
|
if (vtxo.expiresAtHeight !== void 0) {
|
|
3894
|
-
return
|
|
3894
|
+
return chunkNUIZAUNR_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
|
|
3895
3895
|
}
|
|
3896
3896
|
return Infinity;
|
|
3897
3897
|
};
|
|
@@ -3918,7 +3918,7 @@ function priceSettlementInputs(vtxos, estimator) {
|
|
|
3918
3918
|
const payable = [];
|
|
3919
3919
|
const net = /* @__PURE__ */ new Map();
|
|
3920
3920
|
for (const vtxo of vtxos) {
|
|
3921
|
-
const inputFee = estimator.evalOffchainInput(
|
|
3921
|
+
const inputFee = estimator.evalOffchainInput(chunkNUIZAUNR_cjs.toOffchainInputFeeParams(vtxo));
|
|
3922
3922
|
if (inputFee.satoshis >= vtxo.value) {
|
|
3923
3923
|
continue;
|
|
3924
3924
|
}
|
|
@@ -3944,7 +3944,7 @@ function deductOffchainOutputFee(subtotal, estimator, arkAddress) {
|
|
|
3944
3944
|
}
|
|
3945
3945
|
const outputFee = estimator.evalOffchainOutput({
|
|
3946
3946
|
amount: subtotal,
|
|
3947
|
-
script: base.hex.encode(
|
|
3947
|
+
script: base.hex.encode(chunkNUIZAUNR_cjs.ArkAddress.decode(arkAddress).pkScript)
|
|
3948
3948
|
});
|
|
3949
3949
|
return subtotal - BigInt(outputFee.satoshis);
|
|
3950
3950
|
}
|
|
@@ -3958,10 +3958,10 @@ var DEFAULT_SETTLEMENT_CONFIG = {
|
|
|
3958
3958
|
};
|
|
3959
3959
|
function getRecoverableVtxos(vtxos, dustAmount, now) {
|
|
3960
3960
|
return vtxos.filter((vtxo) => {
|
|
3961
|
-
if (
|
|
3961
|
+
if (chunkNUIZAUNR_cjs.canRecoverOnchain(vtxo, now)) {
|
|
3962
3962
|
return true;
|
|
3963
3963
|
}
|
|
3964
|
-
if (
|
|
3964
|
+
if (chunkNUIZAUNR_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
|
|
3965
3965
|
return true;
|
|
3966
3966
|
}
|
|
3967
3967
|
return false;
|
|
@@ -3993,7 +3993,7 @@ function getRecoverableWithSubdust(vtxos, dustAmount, now) {
|
|
|
3993
3993
|
function isVtxoExpiringSoon(vtxo, thresholdMs) {
|
|
3994
3994
|
if (vtxo.isUnrolled) return false;
|
|
3995
3995
|
const realThresholdMs = thresholdMs <= 100 ? DEFAULT_THRESHOLD_MS : thresholdMs;
|
|
3996
|
-
const expiresAt =
|
|
3996
|
+
const expiresAt = chunkNUIZAUNR_cjs.normalizeVtxo(vtxo).expiresAt;
|
|
3997
3997
|
if (expiresAt === void 0) return false;
|
|
3998
3998
|
const now = Date.now();
|
|
3999
3999
|
const batchExpiry = expiresAt.getTime();
|
|
@@ -4004,7 +4004,7 @@ function getExpiringAndRecoverableVtxos(vtxos, thresholdMs, dustAmount, now) {
|
|
|
4004
4004
|
return vtxos.filter(
|
|
4005
4005
|
// The leading exclusion covers the `isSubdust` arm too, which is a value
|
|
4006
4006
|
// property and would otherwise re-admit an exited coin on its own.
|
|
4007
|
-
(vtxo) => !vtxo.isUnrolled && (isVtxoExpiringSoon(vtxo, thresholdMs) ||
|
|
4007
|
+
(vtxo) => !vtxo.isUnrolled && (isVtxoExpiringSoon(vtxo, thresholdMs) || chunkNUIZAUNR_cjs.canRecoverOnchain(vtxo, now) || isSubdust(vtxo, dustAmount))
|
|
4008
4008
|
);
|
|
4009
4009
|
}
|
|
4010
4010
|
function isMigrationCapable(wallet) {
|
|
@@ -4537,11 +4537,11 @@ var VtxoManager = class _VtxoManager {
|
|
|
4537
4537
|
`Sweep not economical: output ${outputAmount} sats after ${fee} sats fee is below dust (${dustAmount} sats)`
|
|
4538
4538
|
);
|
|
4539
4539
|
}
|
|
4540
|
-
const tx = new
|
|
4540
|
+
const tx = new chunkNUIZAUNR_cjs.Transaction();
|
|
4541
4541
|
for (const utxo of expiredUtxos) {
|
|
4542
|
-
const utxoScript =
|
|
4542
|
+
const utxoScript = chunkNUIZAUNR_cjs.VtxoScript.decode(utxo.tapTree);
|
|
4543
4543
|
const utxoExitLeaf = utxoScript.leaves.find(
|
|
4544
|
-
(leaf) =>
|
|
4544
|
+
(leaf) => chunkNUIZAUNR_cjs.CSVMultisigTapscript.isScriptValid(chunkNUIZAUNR_cjs.scriptFromTapLeafScript(leaf)) === true
|
|
4545
4545
|
);
|
|
4546
4546
|
if (!utxoExitLeaf) {
|
|
4547
4547
|
throw new Error(
|
|
@@ -4556,7 +4556,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4556
4556
|
amount: BigInt(utxo.value)
|
|
4557
4557
|
},
|
|
4558
4558
|
tapLeafScript: [utxoExitLeaf],
|
|
4559
|
-
sequence:
|
|
4559
|
+
sequence: chunkNUIZAUNR_cjs.getSequence(utxoExitLeaf)
|
|
4560
4560
|
});
|
|
4561
4561
|
}
|
|
4562
4562
|
tx.addOutputAddress(boardingAddress, outputAmount, this.getNetwork());
|
|
@@ -4782,8 +4782,8 @@ var VtxoManager = class _VtxoManager {
|
|
|
4782
4782
|
const cls = classifyAgainstSignerSet(serverPubKey, signerSet, nowSeconds);
|
|
4783
4783
|
if (cls.status === "CURRENT") continue;
|
|
4784
4784
|
const live = vtxos.filter((v) => !v.isUnrolled);
|
|
4785
|
-
const recoverable = live.filter((v) => v.isSwept && !
|
|
4786
|
-
const spendable = live.filter((v) => !
|
|
4785
|
+
const recoverable = live.filter((v) => v.isSwept && !chunkNUIZAUNR_cjs.isVtxoSpent(v));
|
|
4786
|
+
const spendable = live.filter((v) => !chunkNUIZAUNR_cjs.isVtxoSpent(v) && !v.isSwept);
|
|
4787
4787
|
const value = spendable.reduce((sum, v) => sum + v.value, 0);
|
|
4788
4788
|
let recoverableCount = 0;
|
|
4789
4789
|
let recoverableValue = 0;
|
|
@@ -5018,7 +5018,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5018
5018
|
}
|
|
5019
5019
|
getBoardingTimelock() {
|
|
5020
5020
|
const wallet = this.getSweepWallet();
|
|
5021
|
-
const exitScript =
|
|
5021
|
+
const exitScript = chunkNUIZAUNR_cjs.CSVMultisigTapscript.decode(
|
|
5022
5022
|
base.hex.decode(wallet.boardingTapscript.exitScript)
|
|
5023
5023
|
);
|
|
5024
5024
|
return exitScript.params.timelock;
|
|
@@ -5126,8 +5126,8 @@ var VtxoManager = class _VtxoManager {
|
|
|
5126
5126
|
}
|
|
5127
5127
|
/** The outpoint a `VTXO_ALREADY_SPENT` error carries in `metadata.vtxo_outpoint`, if any. */
|
|
5128
5128
|
extractSpentOutpoint(error) {
|
|
5129
|
-
const ark =
|
|
5130
|
-
if (!
|
|
5129
|
+
const ark = chunkNUIZAUNR_cjs.maybeArkError(error);
|
|
5130
|
+
if (!chunkNUIZAUNR_cjs.isArkError(ark, chunkNUIZAUNR_cjs.ArkErrorName.VTXO_ALREADY_SPENT)) return void 0;
|
|
5131
5131
|
const raw = ark.metadata?.vtxo_outpoint;
|
|
5132
5132
|
if (typeof raw !== "string") return void 0;
|
|
5133
5133
|
const [txid, voutStr] = raw.split(":");
|
|
@@ -5300,7 +5300,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5300
5300
|
if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
|
|
5301
5301
|
break;
|
|
5302
5302
|
}
|
|
5303
|
-
const inputFee = estimator.evalOffchainInput(
|
|
5303
|
+
const inputFee = estimator.evalOffchainInput(chunkNUIZAUNR_cjs.toOffchainInputFeeParams(v));
|
|
5304
5304
|
if (inputFee.satoshis >= v.value) {
|
|
5305
5305
|
continue;
|
|
5306
5306
|
}
|
|
@@ -5320,7 +5320,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5320
5320
|
const arkAddress = await this.wallet.getAddress();
|
|
5321
5321
|
const outputFee = estimator.evalOffchainOutput({
|
|
5322
5322
|
amount: totalAmount,
|
|
5323
|
-
script: base.hex.encode(
|
|
5323
|
+
script: base.hex.encode(chunkNUIZAUNR_cjs.ArkAddress.decode(arkAddress).pkScript)
|
|
5324
5324
|
});
|
|
5325
5325
|
totalAmount -= BigInt(outputFee.satoshis);
|
|
5326
5326
|
if (totalAmount < dustAmount) return;
|
|
@@ -5400,7 +5400,7 @@ var ArkNote = class _ArkNote {
|
|
|
5400
5400
|
this.value = value;
|
|
5401
5401
|
this.HRP = HRP;
|
|
5402
5402
|
const preimageHash = utils_js.sha256(this.preimage);
|
|
5403
|
-
this.vtxoScript = new
|
|
5403
|
+
this.vtxoScript = new chunkNUIZAUNR_cjs.VtxoScript([noteTapscript(preimageHash)]);
|
|
5404
5404
|
const leaf = this.vtxoScript.leaves[0];
|
|
5405
5405
|
this.txid = base.hex.encode(new Uint8Array(preimageHash).reverse());
|
|
5406
5406
|
this.tapTree = this.vtxoScript.encode();
|
|
@@ -5566,7 +5566,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
5566
5566
|
const privateKey = data.slice(1, 33);
|
|
5567
5567
|
const serverPubKey = data.slice(33, 65);
|
|
5568
5568
|
const sequence = new DataView(data.buffer, data.byteOffset + 65, 4).getUint32(0, false);
|
|
5569
|
-
const csvTimelock2 =
|
|
5569
|
+
const csvTimelock2 = chunkNUIZAUNR_cjs.sequenceToTimelock(sequence);
|
|
5570
5570
|
return new _ArkadeCash(privateKey, serverPubKey, csvTimelock2, decoded.prefix);
|
|
5571
5571
|
}
|
|
5572
5572
|
toString() {
|
|
@@ -5574,7 +5574,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
5574
5574
|
data[0] = _ArkadeCash.Version;
|
|
5575
5575
|
data.set(this._privateKey, 1);
|
|
5576
5576
|
data.set(this._serverPubKey, 33);
|
|
5577
|
-
const sequence =
|
|
5577
|
+
const sequence = chunkNUIZAUNR_cjs.timelockToSequence(this.csvTimelock);
|
|
5578
5578
|
new DataView(data.buffer, data.byteOffset + 65, 4).setUint32(0, sequence, false);
|
|
5579
5579
|
const words = base.bech32m.toWords(data);
|
|
5580
5580
|
return base.bech32m.encode(this.hrp, words, 1023);
|
|
@@ -5583,7 +5583,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
5583
5583
|
return SingleKey.fromPrivateKey(this._privateKey);
|
|
5584
5584
|
}
|
|
5585
5585
|
get vtxoScript() {
|
|
5586
|
-
return new
|
|
5586
|
+
return new chunk7TSJAQRV_cjs.DefaultVtxo.Script({
|
|
5587
5587
|
pubKey: this._publicKey,
|
|
5588
5588
|
serverPubKey: this._serverPubKey,
|
|
5589
5589
|
csvTimelock: this.csvTimelock
|
|
@@ -5793,7 +5793,7 @@ async function captureExitBranch(params) {
|
|
|
5793
5793
|
const nonCommitment = ordered.filter((c) => chainTxTypeToChainedExit(c.type) !== 1 /* Commitment */).map((c) => c.txid);
|
|
5794
5794
|
if (nonCommitment.length > 0) {
|
|
5795
5795
|
for (const psbt of await resolver.getVirtualTxs(nonCommitment)) {
|
|
5796
|
-
psbtByTxid.set(
|
|
5796
|
+
psbtByTxid.set(chunkNUIZAUNR_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
5797
5797
|
}
|
|
5798
5798
|
}
|
|
5799
5799
|
}
|
|
@@ -5836,10 +5836,10 @@ var IndexerExitDataSource = class {
|
|
|
5836
5836
|
while (hasMore) {
|
|
5837
5837
|
const { chain: page, page: meta } = await this.indexer.getVtxoChain(
|
|
5838
5838
|
{ txid: vtxo.txid, vout: vtxo.vout },
|
|
5839
|
-
{ pageIndex, pageSize:
|
|
5839
|
+
{ pageIndex, pageSize: chunkNUIZAUNR_cjs.DEFAULT_PAGE_SIZE }
|
|
5840
5840
|
);
|
|
5841
5841
|
chain.push(...page);
|
|
5842
|
-
hasMore = meta ? page.length ===
|
|
5842
|
+
hasMore = meta ? page.length === chunkNUIZAUNR_cjs.DEFAULT_PAGE_SIZE : false;
|
|
5843
5843
|
pageIndex++;
|
|
5844
5844
|
}
|
|
5845
5845
|
return chain;
|
|
@@ -5851,12 +5851,12 @@ var IndexerExitDataSource = class {
|
|
|
5851
5851
|
while (hasMore) {
|
|
5852
5852
|
const { txs, page } = await this.indexer.getVirtualTxs(txids, {
|
|
5853
5853
|
pageIndex,
|
|
5854
|
-
pageSize:
|
|
5854
|
+
pageSize: chunkNUIZAUNR_cjs.DEFAULT_PAGE_SIZE
|
|
5855
5855
|
});
|
|
5856
5856
|
for (const psbt of txs) {
|
|
5857
|
-
out.set(
|
|
5857
|
+
out.set(chunkNUIZAUNR_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
5858
5858
|
}
|
|
5859
|
-
hasMore = page ? txs.length ===
|
|
5859
|
+
hasMore = page ? txs.length === chunkNUIZAUNR_cjs.DEFAULT_PAGE_SIZE : false;
|
|
5860
5860
|
pageIndex++;
|
|
5861
5861
|
}
|
|
5862
5862
|
return out;
|
|
@@ -5877,7 +5877,7 @@ function chainedTxTypeToChainTxType(t) {
|
|
|
5877
5877
|
}
|
|
5878
5878
|
}
|
|
5879
5879
|
function psbtInputTxids(psbtBase64) {
|
|
5880
|
-
return txInputTxids(
|
|
5880
|
+
return txInputTxids(chunkNUIZAUNR_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64)));
|
|
5881
5881
|
}
|
|
5882
5882
|
function txInputTxids(tx) {
|
|
5883
5883
|
const ids = [];
|
|
@@ -6238,10 +6238,10 @@ async function resolveArkInfo(arkProvider, walletRepository, opts) {
|
|
|
6238
6238
|
try {
|
|
6239
6239
|
info = await arkProvider.getInfo();
|
|
6240
6240
|
} catch (err) {
|
|
6241
|
-
if (opts?.requireLive || !
|
|
6241
|
+
if (opts?.requireLive || !chunkNUIZAUNR_cjs.isRetryableProviderError(err)) throw err;
|
|
6242
6242
|
const snapshot = await loadArkInfoSnapshot(walletRepository);
|
|
6243
6243
|
if (!snapshot) {
|
|
6244
|
-
throw new
|
|
6244
|
+
throw new chunkNUIZAUNR_cjs.ProviderUnavailableError(
|
|
6245
6245
|
"Arkade server info is unavailable and no cached snapshot exists",
|
|
6246
6246
|
{ cause: err }
|
|
6247
6247
|
);
|
|
@@ -6636,7 +6636,7 @@ function collectArkTxidsNeedingCreatedAt(vtxos, localCreatedAt) {
|
|
|
6636
6636
|
return [...txids];
|
|
6637
6637
|
}
|
|
6638
6638
|
async function buildTransactionHistory(vtxos, allBoardingTxs, commitmentsToIgnore, resolveTxCreatedAt, gatedScripts = /* @__PURE__ */ new Map()) {
|
|
6639
|
-
const normalized = vtxos.map(
|
|
6639
|
+
const normalized = vtxos.map(chunkNUIZAUNR_cjs.normalizeVtxo).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
|
|
6640
6640
|
const localCreatedAt = localCreatedAtByTxid(normalized);
|
|
6641
6641
|
const gatedVtxos = normalized.filter((vtxo) => isGatedVtxo(vtxo, gatedScripts));
|
|
6642
6642
|
const ownVtxos = normalized.filter((vtxo) => !isGatedVtxo(vtxo, gatedScripts));
|
|
@@ -6811,7 +6811,7 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6811
6811
|
withRecoverable: false,
|
|
6812
6812
|
genericallySpendableOnly: true
|
|
6813
6813
|
});
|
|
6814
|
-
const controlAssetRef = params.controlAssetId ?
|
|
6814
|
+
const controlAssetRef = params.controlAssetId ? chunkJEJJYYYJ_cjs.AssetRef.fromId(chunkJEJJYYYJ_cjs.AssetId.fromString(params.controlAssetId)) : null;
|
|
6815
6815
|
const coinSelection = selectVirtualCoins(virtualCoins, Number(this.wallet.dustAmount));
|
|
6816
6816
|
let totalBtcSelected = 0n;
|
|
6817
6817
|
const assetChanges = /* @__PURE__ */ new Map();
|
|
@@ -6824,8 +6824,8 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6824
6824
|
}
|
|
6825
6825
|
}
|
|
6826
6826
|
const groups = [];
|
|
6827
|
-
const issuedAssetOutput =
|
|
6828
|
-
const issuedAssetGroup =
|
|
6827
|
+
const issuedAssetOutput = chunkJEJJYYYJ_cjs.AssetOutput.create(0, params.amount);
|
|
6828
|
+
const issuedAssetGroup = chunkJEJJYYYJ_cjs.AssetGroup.create(
|
|
6829
6829
|
null,
|
|
6830
6830
|
controlAssetRef,
|
|
6831
6831
|
[],
|
|
@@ -6838,11 +6838,11 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6838
6838
|
for (const [assetId, amount] of assetChanges) {
|
|
6839
6839
|
const changeInputs = inputsForAsset(assetInputs, assetId);
|
|
6840
6840
|
groups.push(
|
|
6841
|
-
|
|
6842
|
-
|
|
6841
|
+
chunkJEJJYYYJ_cjs.AssetGroup.create(
|
|
6842
|
+
chunkJEJJYYYJ_cjs.AssetId.fromString(assetId),
|
|
6843
6843
|
null,
|
|
6844
6844
|
changeInputs,
|
|
6845
|
-
[
|
|
6845
|
+
[chunkJEJJYYYJ_cjs.AssetOutput.create(0, amount)],
|
|
6846
6846
|
[]
|
|
6847
6847
|
)
|
|
6848
6848
|
);
|
|
@@ -6856,7 +6856,7 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6856
6856
|
);
|
|
6857
6857
|
return {
|
|
6858
6858
|
arkTxId: arkTxid,
|
|
6859
|
-
assetId:
|
|
6859
|
+
assetId: chunkJEJJYYYJ_cjs.AssetId.create(arkTxid, 0).toString()
|
|
6860
6860
|
};
|
|
6861
6861
|
}
|
|
6862
6862
|
/**
|
|
@@ -6927,23 +6927,23 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6927
6927
|
const assetInputs = selectedCoinsToAssetInputs(selectedCoins);
|
|
6928
6928
|
const reissueInputs = inputsForAsset(assetInputs, params.assetId);
|
|
6929
6929
|
const totalAssetAmount = assetToReissueAmount + params.amount;
|
|
6930
|
-
const reissueAssetIdObj =
|
|
6931
|
-
const reissueAssetGroup =
|
|
6930
|
+
const reissueAssetIdObj = chunkJEJJYYYJ_cjs.AssetId.fromString(params.assetId);
|
|
6931
|
+
const reissueAssetGroup = chunkJEJJYYYJ_cjs.AssetGroup.create(
|
|
6932
6932
|
reissueAssetIdObj,
|
|
6933
6933
|
null,
|
|
6934
6934
|
reissueInputs,
|
|
6935
|
-
[
|
|
6935
|
+
[chunkJEJJYYYJ_cjs.AssetOutput.create(0, totalAssetAmount)],
|
|
6936
6936
|
[]
|
|
6937
6937
|
);
|
|
6938
6938
|
const groups = [reissueAssetGroup];
|
|
6939
6939
|
for (const [assetId, amount] of assetChanges) {
|
|
6940
6940
|
const changeInputs = inputsForAsset(assetInputs, assetId);
|
|
6941
6941
|
groups.push(
|
|
6942
|
-
|
|
6943
|
-
|
|
6942
|
+
chunkJEJJYYYJ_cjs.AssetGroup.create(
|
|
6943
|
+
chunkJEJJYYYJ_cjs.AssetId.fromString(assetId),
|
|
6944
6944
|
null,
|
|
6945
6945
|
changeInputs,
|
|
6946
|
-
[
|
|
6946
|
+
[chunkJEJJYYYJ_cjs.AssetOutput.create(0, amount)],
|
|
6947
6947
|
[]
|
|
6948
6948
|
)
|
|
6949
6949
|
);
|
|
@@ -7011,11 +7011,11 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7011
7011
|
for (const [assetId, amount] of assetChanges) {
|
|
7012
7012
|
const changeInputs = inputsForAsset(assetInputs, assetId);
|
|
7013
7013
|
groups.push(
|
|
7014
|
-
|
|
7015
|
-
|
|
7014
|
+
chunkJEJJYYYJ_cjs.AssetGroup.create(
|
|
7015
|
+
chunkJEJJYYYJ_cjs.AssetId.fromString(assetId),
|
|
7016
7016
|
null,
|
|
7017
7017
|
changeInputs,
|
|
7018
|
-
amount > 0n ? [
|
|
7018
|
+
amount > 0n ? [chunkJEJJYYYJ_cjs.AssetOutput.create(0, amount)] : [],
|
|
7019
7019
|
[]
|
|
7020
7020
|
)
|
|
7021
7021
|
);
|
|
@@ -7028,16 +7028,16 @@ function inputsForAsset(assetInputs, assetId) {
|
|
|
7028
7028
|
for (const [inputIndex, assets] of assetInputs) {
|
|
7029
7029
|
for (const asset of assets) {
|
|
7030
7030
|
if (asset.assetId !== assetId) continue;
|
|
7031
|
-
inputs.push(
|
|
7031
|
+
inputs.push(chunkJEJJYYYJ_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
7032
7032
|
}
|
|
7033
7033
|
}
|
|
7034
7034
|
return inputs;
|
|
7035
7035
|
}
|
|
7036
7036
|
async function submitToSelf(wallet, inputs, amount, groups) {
|
|
7037
|
-
const outputAddress =
|
|
7037
|
+
const outputAddress = chunkNUIZAUNR_cjs.ArkAddress.decode(await wallet.getAddress());
|
|
7038
7038
|
const outputs = [
|
|
7039
7039
|
{ script: outputAddress.pkScript, amount: BigInt(amount) },
|
|
7040
|
-
Extension.create([
|
|
7040
|
+
Extension.create([chunkJEJJYYYJ_cjs.Packet.create(groups)]).txOut()
|
|
7041
7041
|
];
|
|
7042
7042
|
const { arkTxid } = await wallet.buildAndSubmitOffchainTx(inputs, outputs);
|
|
7043
7043
|
return arkTxid;
|
|
@@ -7061,7 +7061,7 @@ function castMetadata(metadata) {
|
|
|
7061
7061
|
} else {
|
|
7062
7062
|
throw new Error("Invalid metadata value type");
|
|
7063
7063
|
}
|
|
7064
|
-
md.push(
|
|
7064
|
+
md.push(chunkJEJJYYYJ_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
|
|
7065
7065
|
}
|
|
7066
7066
|
return md;
|
|
7067
7067
|
}
|
|
@@ -7082,10 +7082,10 @@ var DelegateManagerImpl = class {
|
|
|
7082
7082
|
if (vtxos.length === 0) {
|
|
7083
7083
|
return { delegated: [], failed: [] };
|
|
7084
7084
|
}
|
|
7085
|
-
const destinationScript =
|
|
7085
|
+
const destinationScript = chunkNUIZAUNR_cjs.ArkAddress.decode(destination).pkScript;
|
|
7086
7086
|
const arkInfo = await this.arkInfoProvider.getInfo();
|
|
7087
7087
|
const delegateInfo = await this.delegateProvider.getDelegateInfo();
|
|
7088
|
-
const eligible = vtxos.map(
|
|
7088
|
+
const eligible = vtxos.map(chunkNUIZAUNR_cjs.normalizeVtxo).filter(
|
|
7089
7089
|
(v) => isAnnotated(v) && findDelegateTapLeaf(v, delegateInfo.pubkey) !== void 0
|
|
7090
7090
|
);
|
|
7091
7091
|
if (eligible.length === 0) {
|
|
@@ -7117,7 +7117,7 @@ var DelegateManagerImpl = class {
|
|
|
7117
7117
|
const groupByExpiry = /* @__PURE__ */ new Map();
|
|
7118
7118
|
let recoverableVtxos = [];
|
|
7119
7119
|
for (const vtxo of eligible) {
|
|
7120
|
-
if (
|
|
7120
|
+
if (chunkNUIZAUNR_cjs.canRecoverOnchain(vtxo, now)) {
|
|
7121
7121
|
recoverableVtxos.push(vtxo);
|
|
7122
7122
|
continue;
|
|
7123
7123
|
}
|
|
@@ -7169,7 +7169,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7169
7169
|
}
|
|
7170
7170
|
if (!delegateAt) {
|
|
7171
7171
|
const now = { timestamp: /* @__PURE__ */ new Date() };
|
|
7172
|
-
const expiryTimestamp = vtxos.filter((coin) => !
|
|
7172
|
+
const expiryTimestamp = vtxos.filter((coin) => !chunkNUIZAUNR_cjs.canRecoverOnchain(coin, now) && coin.expiresAt).reduce(
|
|
7173
7173
|
(min, coin) => Math.min(min, coin.expiresAt.getTime()),
|
|
7174
7174
|
Number.MAX_SAFE_INTEGER
|
|
7175
7175
|
);
|
|
@@ -7196,7 +7196,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7196
7196
|
let amount = 0n;
|
|
7197
7197
|
for (const coin of vtxos) {
|
|
7198
7198
|
const inputFee = estimator.evalOffchainInput({
|
|
7199
|
-
...
|
|
7199
|
+
...chunkNUIZAUNR_cjs.toOffchainInputFeeParams(coin),
|
|
7200
7200
|
type: "vtxo"
|
|
7201
7201
|
});
|
|
7202
7202
|
if (inputFee.satoshis >= coin.value) {
|
|
@@ -7210,7 +7210,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7210
7210
|
const delegateFee = BigInt(Number(fee));
|
|
7211
7211
|
if (delegateFee > 0n) {
|
|
7212
7212
|
outputs.push({
|
|
7213
|
-
script:
|
|
7213
|
+
script: chunkNUIZAUNR_cjs.ArkAddress.decode(delegateAddress).pkScript,
|
|
7214
7214
|
amount: delegateFee
|
|
7215
7215
|
});
|
|
7216
7216
|
}
|
|
@@ -7243,10 +7243,10 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7243
7243
|
destinationScript
|
|
7244
7244
|
);
|
|
7245
7245
|
const forfeitOutputScript = btcSigner.OutScript.encode(
|
|
7246
|
-
btcSigner.Address(
|
|
7246
|
+
btcSigner.Address(chunkNUIZAUNR_cjs.getNetwork(network)).decode(forfeitAddress)
|
|
7247
7247
|
);
|
|
7248
7248
|
const forfeits = await Promise.all(
|
|
7249
|
-
vtxos.filter((v) =>
|
|
7249
|
+
vtxos.filter((v) => chunkNUIZAUNR_cjs.requiresForfeit(v)).map(async (coin) => {
|
|
7250
7250
|
const forfeit = await makeDelegateForfeitTx(
|
|
7251
7251
|
coin,
|
|
7252
7252
|
dust,
|
|
@@ -7271,7 +7271,7 @@ async function makeDelegateForfeitTx(input, connectorAmount, delegatePubkey, for
|
|
|
7271
7271
|
index: input.vout,
|
|
7272
7272
|
witnessUtxo: {
|
|
7273
7273
|
amount: BigInt(input.value),
|
|
7274
|
-
script:
|
|
7274
|
+
script: chunkNUIZAUNR_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
7275
7275
|
},
|
|
7276
7276
|
sighashType: btcSigner.SigHash.ALL_ANYONECANPAY,
|
|
7277
7277
|
tapLeafScript: [delegateTapLeaf]
|
|
@@ -7329,7 +7329,7 @@ async function makeSignedDelegateIntent(identity, coins, outputs, onchainOutputs
|
|
|
7329
7329
|
expire_at: 0,
|
|
7330
7330
|
cosigners_public_keys: cosignerPubKeys
|
|
7331
7331
|
};
|
|
7332
|
-
const proof =
|
|
7332
|
+
const proof = chunkNUIZAUNR_cjs.Intent.create(message, coins, outputs);
|
|
7333
7333
|
const signedProof = await identity.sign(proof);
|
|
7334
7334
|
return {
|
|
7335
7335
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -7355,10 +7355,10 @@ function getDayTimestamp(timestamp) {
|
|
|
7355
7355
|
function findDelegateTapLeaf(vtxo, delegatePubkey) {
|
|
7356
7356
|
if (!vtxo.tapTree) return void 0;
|
|
7357
7357
|
const pk = delegatePubkey.length === 66 ? delegatePubkey.slice(2) : delegatePubkey;
|
|
7358
|
-
const vtxoScript =
|
|
7358
|
+
const vtxoScript = chunkNUIZAUNR_cjs.VtxoScript.decode(vtxo.tapTree);
|
|
7359
7359
|
return vtxoScript.leaves.find((tapLeaf) => {
|
|
7360
|
-
const arkTapscript =
|
|
7361
|
-
if (!
|
|
7360
|
+
const arkTapscript = chunkNUIZAUNR_cjs.decodeTapscript(chunkNUIZAUNR_cjs.scriptFromTapLeafScript(tapLeaf));
|
|
7361
|
+
if (!chunkNUIZAUNR_cjs.MultisigTapscript.is(arkTapscript)) return false;
|
|
7362
7362
|
return arkTapscript.params.pubkeys.map(base.hex.encode).includes(pk);
|
|
7363
7363
|
});
|
|
7364
7364
|
}
|
|
@@ -7646,7 +7646,7 @@ function parseLegacyExpiry(batchExpiry) {
|
|
|
7646
7646
|
if (typeof batchExpiry !== "number" || !Number.isFinite(batchExpiry) || batchExpiry <= 0) {
|
|
7647
7647
|
return {};
|
|
7648
7648
|
}
|
|
7649
|
-
if (batchExpiry >=
|
|
7649
|
+
if (batchExpiry >= chunkNUIZAUNR_cjs.EXPIRY_MIN_PLAUSIBLE_MS) return { expiresAt: new Date(batchExpiry) };
|
|
7650
7650
|
return { expiresAtHeight: batchExpiry / 1e3 };
|
|
7651
7651
|
}
|
|
7652
7652
|
function legacyVtxoFacts(status) {
|
|
@@ -7847,7 +7847,7 @@ function initDatabase(db, oldVersion, transaction) {
|
|
|
7847
7847
|
}
|
|
7848
7848
|
}
|
|
7849
7849
|
}
|
|
7850
|
-
var unspentFlag = (vtxo) =>
|
|
7850
|
+
var unspentFlag = (vtxo) => chunkNUIZAUNR_cjs.isVtxoSpent(vtxo) ? {} : { unspent: 1 };
|
|
7851
7851
|
function initDatabaseWithIntents(db, oldVersion, transaction) {
|
|
7852
7852
|
initDatabase(db, oldVersion, transaction);
|
|
7853
7853
|
if (!db.objectStoreNames.contains(STORE_INTENTS)) {
|
|
@@ -8222,8 +8222,8 @@ function checkSaveVtxosForScript(backend, key, vtxos) {
|
|
|
8222
8222
|
}
|
|
8223
8223
|
async function getVtxosForContract(repo, contract, options) {
|
|
8224
8224
|
const vtxos = repo.getVtxosForScriptPage ? await collectScriptVtxos(repo, contract.script, options) : filterVtxosForScript(await collectVtxos(repo, contract.address), contract.script);
|
|
8225
|
-
const normalized = vtxos.map(
|
|
8226
|
-
return options?.unspentOnly ? normalized.filter((vtxo) => !
|
|
8225
|
+
const normalized = vtxos.map(chunkNUIZAUNR_cjs.normalizeVtxo);
|
|
8226
|
+
return options?.unspentOnly ? normalized.filter((vtxo) => !chunkNUIZAUNR_cjs.isVtxoSpent(vtxo)) : normalized;
|
|
8227
8227
|
}
|
|
8228
8228
|
async function hasVtxosForContract(repo, contract) {
|
|
8229
8229
|
if (repo.getVtxosForScriptPage) {
|
|
@@ -8452,7 +8452,7 @@ function decodeArkContract(encoded) {
|
|
|
8452
8452
|
}
|
|
8453
8453
|
function contractFromArkContract(encoded, options = {}) {
|
|
8454
8454
|
const parsed = decodeArkContract(encoded);
|
|
8455
|
-
const handler =
|
|
8455
|
+
const handler = chunk7TSJAQRV_cjs.contractHandlers.get(parsed.type);
|
|
8456
8456
|
if (!handler) {
|
|
8457
8457
|
throw new Error(`No handler registered for contract type '${parsed.type}'`);
|
|
8458
8458
|
}
|
|
@@ -8466,9 +8466,9 @@ function contractFromArkContract(encoded, options = {}) {
|
|
|
8466
8466
|
metadata: options.metadata
|
|
8467
8467
|
};
|
|
8468
8468
|
}
|
|
8469
|
-
function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix =
|
|
8469
|
+
function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunkNUIZAUNR_cjs.DEFAULT_NETWORK.hrp, options = {}) {
|
|
8470
8470
|
const parsed = decodeArkContract(encoded);
|
|
8471
|
-
const handler =
|
|
8471
|
+
const handler = chunk7TSJAQRV_cjs.contractHandlers.getOrThrow(parsed.type);
|
|
8472
8472
|
const params = parsed.data;
|
|
8473
8473
|
const vtxoScript = handler.createScript(params);
|
|
8474
8474
|
return {
|
|
@@ -8717,9 +8717,9 @@ var ContractWatcher = class {
|
|
|
8717
8717
|
this.connectionState = "connected";
|
|
8718
8718
|
this.reconnectAttempts = 0;
|
|
8719
8719
|
this.listenLoop().catch((e) => {
|
|
8720
|
-
if (
|
|
8720
|
+
if (chunkNUIZAUNR_cjs.isEventSourceError(e)) {
|
|
8721
8721
|
console.debug("ContractWatcher subscription disconnected; reconnecting");
|
|
8722
|
-
} else if (!
|
|
8722
|
+
} else if (!chunkNUIZAUNR_cjs.isEventSourceUnavailableError(e)) {
|
|
8723
8723
|
console.error(e);
|
|
8724
8724
|
}
|
|
8725
8725
|
this.connectionState = "disconnected";
|
|
@@ -8731,7 +8731,7 @@ var ContractWatcher = class {
|
|
|
8731
8731
|
this.scheduleReconnect();
|
|
8732
8732
|
});
|
|
8733
8733
|
} catch (error) {
|
|
8734
|
-
if (!
|
|
8734
|
+
if (!chunkNUIZAUNR_cjs.isEventSourceUnavailableError(error)) {
|
|
8735
8735
|
console.error("ContractWatcher connection failed:", error);
|
|
8736
8736
|
}
|
|
8737
8737
|
this.connectionState = "disconnected";
|
|
@@ -8750,7 +8750,7 @@ var ContractWatcher = class {
|
|
|
8750
8750
|
* few seconds. Failsafe polling keeps the watcher correct, just slower.
|
|
8751
8751
|
*/
|
|
8752
8752
|
reportEventSourceUnavailable(error) {
|
|
8753
|
-
if (!
|
|
8753
|
+
if (!chunkNUIZAUNR_cjs.isEventSourceUnavailableError(error)) return false;
|
|
8754
8754
|
if (!this.eventSourceReported) {
|
|
8755
8755
|
this.eventSourceReported = true;
|
|
8756
8756
|
console.warn(
|
|
@@ -8813,7 +8813,7 @@ var ContractWatcher = class {
|
|
|
8813
8813
|
const now = Date.now();
|
|
8814
8814
|
let current;
|
|
8815
8815
|
try {
|
|
8816
|
-
current = await
|
|
8816
|
+
current = await chunkNUIZAUNR_cjs.getAllNormalizedVtxos(this.config.indexerProvider, scripts, {
|
|
8817
8817
|
spendableOnly: true
|
|
8818
8818
|
});
|
|
8819
8819
|
} catch (error) {
|
|
@@ -9002,14 +9002,14 @@ var ContractWatcher = class {
|
|
|
9002
9002
|
const timestamp = Date.now();
|
|
9003
9003
|
if (update.newVtxos?.length) {
|
|
9004
9004
|
this.processSubscriptionVtxos(
|
|
9005
|
-
update.newVtxos.map(
|
|
9005
|
+
update.newVtxos.map(chunkNUIZAUNR_cjs.normalizeVtxo),
|
|
9006
9006
|
"vtxo_received",
|
|
9007
9007
|
timestamp
|
|
9008
9008
|
);
|
|
9009
9009
|
}
|
|
9010
9010
|
if (update.spentVtxos?.length) {
|
|
9011
9011
|
this.processSubscriptionVtxos(
|
|
9012
|
-
update.spentVtxos.map(
|
|
9012
|
+
update.spentVtxos.map(chunkNUIZAUNR_cjs.normalizeVtxo),
|
|
9013
9013
|
"vtxo_spent",
|
|
9014
9014
|
timestamp
|
|
9015
9015
|
);
|
|
@@ -9034,8 +9034,8 @@ var ContractWatcher = class {
|
|
|
9034
9034
|
continue;
|
|
9035
9035
|
}
|
|
9036
9036
|
if (target === byWatchedScript && eventType === "vtxo_received") {
|
|
9037
|
-
const n =
|
|
9038
|
-
if (
|
|
9037
|
+
const n = chunkNUIZAUNR_cjs.normalizeVtxo(vtxo);
|
|
9038
|
+
if (chunkNUIZAUNR_cjs.isVtxoSpent(n) || n.isSwept || chunkNUIZAUNR_cjs.isPastExpiry(n, now)) continue;
|
|
9039
9039
|
}
|
|
9040
9040
|
let bucket = target.get(vtxo.script);
|
|
9041
9041
|
if (!bucket) {
|
|
@@ -9131,7 +9131,7 @@ var NON_TERMINAL_INTENT_STATES = ALL_INTENT_STATES.filter(
|
|
|
9131
9131
|
(s) => !isTerminalIntentState(s)
|
|
9132
9132
|
);
|
|
9133
9133
|
function isConsumed(vtxo) {
|
|
9134
|
-
return vtxo !== void 0 &&
|
|
9134
|
+
return vtxo !== void 0 && chunkNUIZAUNR_cjs.isVtxoSpent(vtxo);
|
|
9135
9135
|
}
|
|
9136
9136
|
async function classifyIntent(intent, vtxosByOutpoint, now) {
|
|
9137
9137
|
if (isTerminalIntentState(intent.state)) return void 0;
|
|
@@ -9174,7 +9174,7 @@ async function reconcileIntents(deps) {
|
|
|
9174
9174
|
let vtxosByOutpoint = /* @__PURE__ */ new Map();
|
|
9175
9175
|
if (outpoints.length > 0) {
|
|
9176
9176
|
try {
|
|
9177
|
-
const { vtxos } = await
|
|
9177
|
+
const { vtxos } = await chunkNUIZAUNR_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
|
|
9178
9178
|
vtxosByOutpoint = new Map(vtxos.map((v) => [outpointKey(v), v]));
|
|
9179
9179
|
} catch (e) {
|
|
9180
9180
|
console.error("reconcileIntents: failed to fetch input VTXO state", e);
|
|
@@ -9231,7 +9231,7 @@ function annotatableIn(scriptToContract, vtxos, memo) {
|
|
|
9231
9231
|
if (!contract) continue;
|
|
9232
9232
|
try {
|
|
9233
9233
|
const key = `${contract.type}\0${script}\0${JSON.stringify(contract.params)}`;
|
|
9234
|
-
const handler =
|
|
9234
|
+
const handler = chunk7TSJAQRV_cjs.contractHandlers.get(contract.type);
|
|
9235
9235
|
const hit = memo?.get(script);
|
|
9236
9236
|
let tapscripts;
|
|
9237
9237
|
if (hit && hit.key === key && hit.handler === handler) {
|
|
@@ -9364,7 +9364,7 @@ var ContractManager = class _ContractManager {
|
|
|
9364
9364
|
this.markSyncOnline();
|
|
9365
9365
|
return void 0;
|
|
9366
9366
|
} catch (err) {
|
|
9367
|
-
if (!
|
|
9367
|
+
if (!chunkNUIZAUNR_cjs.isRetryableProviderError(err)) throw err;
|
|
9368
9368
|
this.markSyncDegraded(err);
|
|
9369
9369
|
return err;
|
|
9370
9370
|
}
|
|
@@ -9384,7 +9384,7 @@ var ContractManager = class _ContractManager {
|
|
|
9384
9384
|
try {
|
|
9385
9385
|
await this.scheduleLookAheadDrain();
|
|
9386
9386
|
} catch (err) {
|
|
9387
|
-
if (!
|
|
9387
|
+
if (!chunkNUIZAUNR_cjs.isRetryableProviderError(err)) throw err;
|
|
9388
9388
|
this.lookAheadRefillOwed = true;
|
|
9389
9389
|
this.markSyncDegraded(err);
|
|
9390
9390
|
}
|
|
@@ -9493,7 +9493,7 @@ var ContractManager = class _ContractManager {
|
|
|
9493
9493
|
const from = Math.max(0, watermark - lookAhead.size);
|
|
9494
9494
|
const to = watermark + lookAhead.size;
|
|
9495
9495
|
const deps = lookAhead.candidateDeps();
|
|
9496
|
-
const handlers =
|
|
9496
|
+
const handlers = chunk7TSJAQRV_cjs.contractHandlers.getRegisteredTypes().map((t) => chunk7TSJAQRV_cjs.contractHandlers.get(t)).filter(hasCandidates);
|
|
9497
9497
|
const band = /* @__PURE__ */ new Map();
|
|
9498
9498
|
for (let index = from; index <= to; index++) {
|
|
9499
9499
|
const descriptor = lookAhead.materialize(index);
|
|
@@ -9504,7 +9504,7 @@ var ContractManager = class _ContractManager {
|
|
|
9504
9504
|
index,
|
|
9505
9505
|
params: {
|
|
9506
9506
|
...candidate,
|
|
9507
|
-
...
|
|
9507
|
+
...chunk7TSJAQRV_cjs.speculativeReceiveMetadata(descriptor)
|
|
9508
9508
|
}
|
|
9509
9509
|
});
|
|
9510
9510
|
}
|
|
@@ -9563,7 +9563,7 @@ var ContractManager = class _ContractManager {
|
|
|
9563
9563
|
});
|
|
9564
9564
|
for (const entry of pending) entry.catchUpPending = false;
|
|
9565
9565
|
} catch (err) {
|
|
9566
|
-
if (!
|
|
9566
|
+
if (!chunkNUIZAUNR_cjs.isRetryableProviderError(err)) throw err;
|
|
9567
9567
|
this.markSyncDegraded(err);
|
|
9568
9568
|
}
|
|
9569
9569
|
}
|
|
@@ -9654,7 +9654,7 @@ var ContractManager = class _ContractManager {
|
|
|
9654
9654
|
return result;
|
|
9655
9655
|
}
|
|
9656
9656
|
async upsertContractRow(params) {
|
|
9657
|
-
const handler =
|
|
9657
|
+
const handler = chunk7TSJAQRV_cjs.contractHandlers.get(params.type);
|
|
9658
9658
|
if (!handler) {
|
|
9659
9659
|
throw new Error(`No handler registered for contract type '${params.type}'`);
|
|
9660
9660
|
}
|
|
@@ -9722,7 +9722,7 @@ var ContractManager = class _ContractManager {
|
|
|
9722
9722
|
`scanContracts: batchSize must be a positive integer (got ${String(opts.batchSize)})`
|
|
9723
9723
|
);
|
|
9724
9724
|
}
|
|
9725
|
-
const registered =
|
|
9725
|
+
const registered = chunk7TSJAQRV_cjs.contractHandlers.getRegisteredTypes().map((t) => chunk7TSJAQRV_cjs.contractHandlers.get(t)).filter(isDiscoverable);
|
|
9726
9726
|
const discoverables = [
|
|
9727
9727
|
...registered.filter((h) => h.type === "boarding"),
|
|
9728
9728
|
...registered.filter((h) => h.type !== "boarding")
|
|
@@ -9889,7 +9889,7 @@ var ContractManager = class _ContractManager {
|
|
|
9889
9889
|
}
|
|
9890
9890
|
const tapscriptCache = tapscripts ?? /* @__PURE__ */ new Map();
|
|
9891
9891
|
return vtxos.map(
|
|
9892
|
-
(vtxo) => extendVirtualCoinForContract(
|
|
9892
|
+
(vtxo) => extendVirtualCoinForContract(chunkNUIZAUNR_cjs.normalizeVtxo(vtxo), byScript, tapscriptCache)
|
|
9893
9893
|
);
|
|
9894
9894
|
}
|
|
9895
9895
|
/** @inheritdoc */
|
|
@@ -9934,14 +9934,14 @@ var ContractManager = class _ContractManager {
|
|
|
9934
9934
|
const byScript = new Map(contracts.map((contract) => [contract.script, contract]));
|
|
9935
9935
|
const asking = vtxos.filter((vtxo) => {
|
|
9936
9936
|
const contract = byScript.get(vtxo.script);
|
|
9937
|
-
return contract !== void 0 &&
|
|
9937
|
+
return contract !== void 0 && chunk7TSJAQRV_cjs.contractHandlers.get(contract.type)?.assertSpendableNow !== void 0;
|
|
9938
9938
|
});
|
|
9939
9939
|
if (asking.length === 0) return refused;
|
|
9940
9940
|
const tip = await this.currentChainTip();
|
|
9941
9941
|
const walletDescriptorValue = await walletDescriptor?.();
|
|
9942
9942
|
for (const vtxo of asking) {
|
|
9943
9943
|
const contract = byScript.get(vtxo.script);
|
|
9944
|
-
const handler =
|
|
9944
|
+
const handler = chunk7TSJAQRV_cjs.contractHandlers.get(contract.type);
|
|
9945
9945
|
if (!handler?.assertSpendableNow) continue;
|
|
9946
9946
|
const context = {
|
|
9947
9947
|
collaborative: true,
|
|
@@ -9951,7 +9951,7 @@ var ContractManager = class _ContractManager {
|
|
|
9951
9951
|
walletDescriptor: walletDescriptorValue,
|
|
9952
9952
|
// `isVirtualCoin` only checks `script`, which every input has; `isCsvSpendable`
|
|
9953
9953
|
// reads `vtxo.status.block_time` unguarded, so require `status` too.
|
|
9954
|
-
vtxo:
|
|
9954
|
+
vtxo: chunkNUIZAUNR_cjs.isVirtualCoin(vtxo) && "status" in vtxo ? vtxo : void 0
|
|
9955
9955
|
};
|
|
9956
9956
|
try {
|
|
9957
9957
|
await handler.assertSpendableNow(
|
|
@@ -10060,7 +10060,7 @@ var ContractManager = class _ContractManager {
|
|
|
10060
10060
|
const { contractScript, collaborative = true, walletDescriptor, vtxo } = options;
|
|
10061
10061
|
const [contract] = await this.getContracts({ script: contractScript });
|
|
10062
10062
|
if (!contract) return [];
|
|
10063
|
-
const handler =
|
|
10063
|
+
const handler = chunk7TSJAQRV_cjs.contractHandlers.get(contract.type);
|
|
10064
10064
|
if (!handler) return [];
|
|
10065
10065
|
const script = handler.createScript(contract.params);
|
|
10066
10066
|
const tip = await this.currentChainTip();
|
|
@@ -10082,7 +10082,7 @@ var ContractManager = class _ContractManager {
|
|
|
10082
10082
|
const { contractScript, collaborative = true, walletDescriptor } = options;
|
|
10083
10083
|
const [contract] = await this.getContracts({ script: contractScript });
|
|
10084
10084
|
if (!contract) return [];
|
|
10085
|
-
const handler =
|
|
10085
|
+
const handler = chunk7TSJAQRV_cjs.contractHandlers.get(contract.type);
|
|
10086
10086
|
if (!handler) return [];
|
|
10087
10087
|
const script = handler.createScript(contract.params);
|
|
10088
10088
|
const context = {
|
|
@@ -10128,7 +10128,7 @@ var ContractManager = class _ContractManager {
|
|
|
10128
10128
|
}
|
|
10129
10129
|
async refreshOutpoints(outpoints) {
|
|
10130
10130
|
if (outpoints.length === 0) return;
|
|
10131
|
-
const { vtxos } = await
|
|
10131
|
+
const { vtxos } = await chunkNUIZAUNR_cjs.getNormalizedVtxos(this.config.indexerProvider, {
|
|
10132
10132
|
outpoints
|
|
10133
10133
|
});
|
|
10134
10134
|
if (vtxos.length === 0) return;
|
|
@@ -10220,7 +10220,7 @@ var ContractManager = class _ContractManager {
|
|
|
10220
10220
|
break;
|
|
10221
10221
|
}
|
|
10222
10222
|
} catch (err) {
|
|
10223
|
-
if (!
|
|
10223
|
+
if (!chunkNUIZAUNR_cjs.isRetryableProviderError(err)) throw err;
|
|
10224
10224
|
this.markSyncDegraded(err);
|
|
10225
10225
|
}
|
|
10226
10226
|
this.emitEvent(event);
|
|
@@ -10295,7 +10295,7 @@ var ContractManager = class _ContractManager {
|
|
|
10295
10295
|
*/
|
|
10296
10296
|
async reconcilePendingFrontier(contracts) {
|
|
10297
10297
|
const scriptToContract = new Map(contracts.map((c) => [c.script, c]));
|
|
10298
|
-
const vtxos = await
|
|
10298
|
+
const vtxos = await chunkNUIZAUNR_cjs.getAllNormalizedVtxos(
|
|
10299
10299
|
this.config.indexerProvider,
|
|
10300
10300
|
contracts.map((c) => c.script),
|
|
10301
10301
|
{ pendingOnly: true }
|
|
@@ -10369,7 +10369,7 @@ var ContractManager = class _ContractManager {
|
|
|
10369
10369
|
}
|
|
10370
10370
|
return result;
|
|
10371
10371
|
}
|
|
10372
|
-
async fetchContractVtxosBulk(contracts, pageSize =
|
|
10372
|
+
async fetchContractVtxosBulk(contracts, pageSize = chunkNUIZAUNR_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
|
|
10373
10373
|
if (contracts.length === 0) {
|
|
10374
10374
|
return { vtxosByScript: /* @__PURE__ */ new Map(), promoted: /* @__PURE__ */ new Map() };
|
|
10375
10375
|
}
|
|
@@ -10385,7 +10385,7 @@ var ContractManager = class _ContractManager {
|
|
|
10385
10385
|
before: syncWindow.before
|
|
10386
10386
|
}
|
|
10387
10387
|
} : {};
|
|
10388
|
-
const vtxos = await
|
|
10388
|
+
const vtxos = await chunkNUIZAUNR_cjs.getAllNormalizedVtxos(
|
|
10389
10389
|
this.config.indexerProvider,
|
|
10390
10390
|
contracts.map((c) => c.script),
|
|
10391
10391
|
{ ...windowOpts, pageSize }
|
|
@@ -10620,7 +10620,7 @@ var deserializeTapLeaf = (t) => {
|
|
|
10620
10620
|
const s = base.hex.decode(t.s);
|
|
10621
10621
|
return [cb, s];
|
|
10622
10622
|
};
|
|
10623
|
-
var deserializeVtxo = (o) =>
|
|
10623
|
+
var deserializeVtxo = (o) => chunkNUIZAUNR_cjs.normalizeVtxo({
|
|
10624
10624
|
...o,
|
|
10625
10625
|
createdAt: new Date(o.createdAt),
|
|
10626
10626
|
tapTree: base.hex.decode(o.tapTree),
|
|
@@ -11039,7 +11039,7 @@ var HDDescriptorProvider = class _HDDescriptorProvider {
|
|
|
11039
11039
|
*/
|
|
11040
11040
|
materializeDescriptorAt(index) {
|
|
11041
11041
|
const descriptor = this.identity.descriptor;
|
|
11042
|
-
const network =
|
|
11042
|
+
const network = chunk7TSJAQRV_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
11043
11043
|
const expansion = descriptorsScure.expand({ descriptor, network, index });
|
|
11044
11044
|
const keyInfo = expansion.expansionMap?.["@0"];
|
|
11045
11045
|
if (!keyInfo?.keyExpression) {
|
|
@@ -11107,7 +11107,7 @@ function signingDescriptorIndex(descriptor) {
|
|
|
11107
11107
|
}
|
|
11108
11108
|
function newestWalletReceiveContract(contracts, serverPubKeyHex) {
|
|
11109
11109
|
return contracts.filter(
|
|
11110
|
-
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source ===
|
|
11110
|
+
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunk7TSJAQRV_cjs.WALLET_RECEIVE_SOURCE
|
|
11111
11111
|
).sort((a, b) => {
|
|
11112
11112
|
if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
|
|
11113
11113
|
return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
|
|
@@ -11158,7 +11158,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
|
|
|
11158
11158
|
const provider = await resolveDescriptorProvider(config, setup.walletRepository);
|
|
11159
11159
|
if (!provider) return void 0;
|
|
11160
11160
|
const allowSilentFallback = (config.walletMode ?? "auto") === "auto";
|
|
11161
|
-
const expectedContractType = setup.offchainTapscript instanceof
|
|
11161
|
+
const expectedContractType = setup.offchainTapscript instanceof chunk7TSJAQRV_cjs.DelegateVtxo.Script ? "delegate" : "default";
|
|
11162
11162
|
const factoryOpts = {
|
|
11163
11163
|
walletRepository: setup.walletRepository,
|
|
11164
11164
|
contractRepository: setup.contractRepository,
|
|
@@ -11315,7 +11315,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
|
|
|
11315
11315
|
};
|
|
11316
11316
|
function deriveLeafPubkey(descriptor) {
|
|
11317
11317
|
try {
|
|
11318
|
-
return
|
|
11318
|
+
return chunk7TSJAQRV_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
11319
11319
|
} catch (e) {
|
|
11320
11320
|
throw new NonRangeableDescriptorError(
|
|
11321
11321
|
"Cannot derive leaf pubkey: descriptor is not a materialized, parsable tr(...) shape.",
|
|
@@ -11327,7 +11327,7 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
11327
11327
|
const pubKey = deriveLeafPubkey(descriptor);
|
|
11328
11328
|
const tapscript = rebuildTapscript(current, pubKey);
|
|
11329
11329
|
const serverPubKey = tapscript.options.serverPubKey;
|
|
11330
|
-
const csvTimelock2 =
|
|
11330
|
+
const csvTimelock2 = chunkNUIZAUNR_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
|
|
11331
11331
|
const base$1 = {
|
|
11332
11332
|
script: base.hex.encode(tapscript.pkScript),
|
|
11333
11333
|
address: tapscript.address(hrp, serverPubKey).encode(),
|
|
@@ -11335,11 +11335,11 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
11335
11335
|
// Read at sign time to route rotated-pubkey inputs through `signWithDescriptor`; without
|
|
11336
11336
|
// it spends are rejected with `INVALID_PSBT_INPUT (5): missing tapscript spend sig`.
|
|
11337
11337
|
metadata: {
|
|
11338
|
-
...tagSource && { source:
|
|
11338
|
+
...tagSource && { source: chunk7TSJAQRV_cjs.WALLET_RECEIVE_SOURCE },
|
|
11339
11339
|
signingDescriptor: descriptor
|
|
11340
11340
|
}
|
|
11341
11341
|
};
|
|
11342
|
-
const params = tapscript instanceof
|
|
11342
|
+
const params = tapscript instanceof chunk7TSJAQRV_cjs.DelegateVtxo.Script ? {
|
|
11343
11343
|
...base$1,
|
|
11344
11344
|
type: "delegate",
|
|
11345
11345
|
params: {
|
|
@@ -11360,10 +11360,10 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
11360
11360
|
return { tapscript, params };
|
|
11361
11361
|
}
|
|
11362
11362
|
function rebuildTapscript(current, pubKey) {
|
|
11363
|
-
if (current instanceof
|
|
11364
|
-
return new
|
|
11363
|
+
if (current instanceof chunk7TSJAQRV_cjs.DelegateVtxo.Script) {
|
|
11364
|
+
return new chunk7TSJAQRV_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
|
|
11365
11365
|
}
|
|
11366
|
-
return new
|
|
11366
|
+
return new chunk7TSJAQRV_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
|
|
11367
11367
|
}
|
|
11368
11368
|
async function pickActiveReceive(contractRepository, serverPubKey, expectedType) {
|
|
11369
11369
|
const candidates = await collectContracts(contractRepository, {
|
|
@@ -11421,7 +11421,7 @@ function computeOffchainBalance(vtxos, caps) {
|
|
|
11421
11421
|
}
|
|
11422
11422
|
};
|
|
11423
11423
|
for (const vtxo of vtxos) {
|
|
11424
|
-
if (
|
|
11424
|
+
if (chunkNUIZAUNR_cjs.isVtxoSpent(vtxo)) continue;
|
|
11425
11425
|
addAssets(owned, vtxo);
|
|
11426
11426
|
if (vtxo.isUnrolled) {
|
|
11427
11427
|
unrolled += vtxo.value;
|
|
@@ -11431,11 +11431,11 @@ function computeOffchainBalance(vtxos, caps) {
|
|
|
11431
11431
|
pendingRecovery += vtxo.value;
|
|
11432
11432
|
continue;
|
|
11433
11433
|
}
|
|
11434
|
-
if (
|
|
11434
|
+
if (chunkNUIZAUNR_cjs.canRecoverOnchain(vtxo, now)) {
|
|
11435
11435
|
recoverable += vtxo.value;
|
|
11436
11436
|
continue;
|
|
11437
11437
|
}
|
|
11438
|
-
if (!
|
|
11438
|
+
if (!chunkNUIZAUNR_cjs.canSpendOffchain(vtxo, now)) continue;
|
|
11439
11439
|
if (vtxo.isPreconfirmed) {
|
|
11440
11440
|
preconfirmed += vtxo.value;
|
|
11441
11441
|
} else {
|
|
@@ -11646,7 +11646,7 @@ function intentProofJobs(coins) {
|
|
|
11646
11646
|
if (coins.length === 0) return [];
|
|
11647
11647
|
const coinJobs = coins.map((coin, i) => ({
|
|
11648
11648
|
index: i + 1,
|
|
11649
|
-
lookupScript:
|
|
11649
|
+
lookupScript: chunkNUIZAUNR_cjs.VtxoScript.decode(coin.tapTree).pkScript
|
|
11650
11650
|
}));
|
|
11651
11651
|
return [{ index: 0, lookupScript: coinJobs[0].lookupScript }, ...coinJobs];
|
|
11652
11652
|
}
|
|
@@ -11672,7 +11672,7 @@ function dedupeTimelocks(timelocks) {
|
|
|
11672
11672
|
const seen = /* @__PURE__ */ new Set();
|
|
11673
11673
|
const deduped = [];
|
|
11674
11674
|
for (const timelock of timelocks) {
|
|
11675
|
-
const sequence =
|
|
11675
|
+
const sequence = chunkNUIZAUNR_cjs.timelockToSequence(timelock).toString();
|
|
11676
11676
|
if (seen.has(sequence)) continue;
|
|
11677
11677
|
seen.add(sequence);
|
|
11678
11678
|
deduped.push(timelock);
|
|
@@ -11688,7 +11688,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
|
|
|
11688
11688
|
if (!newest?.params.pubKey) return baseline;
|
|
11689
11689
|
try {
|
|
11690
11690
|
const pubKey = base.hex.decode(newest.params.pubKey);
|
|
11691
|
-
return new
|
|
11691
|
+
return new chunk7TSJAQRV_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
|
|
11692
11692
|
} catch (e) {
|
|
11693
11693
|
console.warn("Skipping malformed boarding contract at boot", newest.script, e);
|
|
11694
11694
|
return baseline;
|
|
@@ -11707,21 +11707,21 @@ function filterSnapshotVtxos(snapshot, filter, pendingSpendOutpoints) {
|
|
|
11707
11707
|
if (vtxo.isUnrolled) {
|
|
11708
11708
|
return !!f.withUnrolled;
|
|
11709
11709
|
}
|
|
11710
|
-
if (
|
|
11710
|
+
if (chunkNUIZAUNR_cjs.isVtxoSpent(vtxo)) {
|
|
11711
11711
|
return false;
|
|
11712
11712
|
}
|
|
11713
|
-
if (!f.withRecoverable &&
|
|
11713
|
+
if (!f.withRecoverable && chunkNUIZAUNR_cjs.canRecoverOnchain(vtxo, now)) {
|
|
11714
11714
|
return false;
|
|
11715
11715
|
}
|
|
11716
11716
|
return true;
|
|
11717
11717
|
});
|
|
11718
11718
|
}
|
|
11719
11719
|
async function refreshSweptStateOfExpiredInputs(wallet, inputs) {
|
|
11720
|
-
const candidates = inputs.filter(
|
|
11720
|
+
const candidates = inputs.filter(chunkNUIZAUNR_cjs.isVirtualCoin).map(chunkNUIZAUNR_cjs.normalizeVtxo).filter((v) => !v.isSwept);
|
|
11721
11721
|
if (candidates.length === 0) return inputs;
|
|
11722
|
-
const now = candidates.some((v) => v.expiresAtHeight !== void 0) ? await
|
|
11722
|
+
const now = candidates.some((v) => v.expiresAtHeight !== void 0) ? await chunkNUIZAUNR_cjs.resolveTimeHeight(wallet.onchainProvider) : { timestamp: /* @__PURE__ */ new Date() };
|
|
11723
11723
|
const suspects = candidates.filter(
|
|
11724
|
-
(v) =>
|
|
11724
|
+
(v) => chunkNUIZAUNR_cjs.isPastExpiry(v, now) || v.expiresAtHeight !== void 0 && now.height === void 0
|
|
11725
11725
|
);
|
|
11726
11726
|
if (suspects.length === 0) return inputs;
|
|
11727
11727
|
let sweptNow;
|
|
@@ -11735,12 +11735,12 @@ async function refreshSweptStateOfExpiredInputs(wallet, inputs) {
|
|
|
11735
11735
|
);
|
|
11736
11736
|
} catch (e) {
|
|
11737
11737
|
const message = "could not confirm the swept state of expired settlement inputs; retry the settlement";
|
|
11738
|
-
throw
|
|
11738
|
+
throw chunkNUIZAUNR_cjs.isRetryableProviderError(e) ? new chunkNUIZAUNR_cjs.ProviderUnavailableError(message, { cause: e }) : new Error(message, { cause: e });
|
|
11739
11739
|
}
|
|
11740
11740
|
if (sweptNow.size === 0) return inputs;
|
|
11741
11741
|
return inputs.map((input) => {
|
|
11742
|
-
if (!
|
|
11743
|
-
return { ...
|
|
11742
|
+
if (!chunkNUIZAUNR_cjs.isVirtualCoin(input) || !sweptNow.has(`${input.txid}:${input.vout}`)) return input;
|
|
11743
|
+
return { ...chunkNUIZAUNR_cjs.normalizeVtxo(input), isSwept: true };
|
|
11744
11744
|
});
|
|
11745
11745
|
}
|
|
11746
11746
|
var PENDING_RECOVERY_REASON = "is past its operator signer's rotation cutoff \u2014 the operator will not co-sign it until it recovers";
|
|
@@ -12003,7 +12003,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12003
12003
|
async getArkadeReader() {
|
|
12004
12004
|
const indexer = this.indexerProvider;
|
|
12005
12005
|
return {
|
|
12006
|
-
getVtxos: (opts) =>
|
|
12006
|
+
getVtxos: (opts) => chunkNUIZAUNR_cjs.getNormalizedVtxos(indexer, opts),
|
|
12007
12007
|
getVirtualTxs: (txids, opts) => indexer.getVirtualTxs(txids, opts)
|
|
12008
12008
|
};
|
|
12009
12009
|
}
|
|
@@ -12038,7 +12038,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12038
12038
|
}
|
|
12039
12039
|
/** Shared setup for ReadonlyWallet.create() and Wallet.create(). */
|
|
12040
12040
|
static async setupWalletConfig(config, pubKey) {
|
|
12041
|
-
const arkProvider = config.arkProvider || new
|
|
12041
|
+
const arkProvider = config.arkProvider || new chunkNUIZAUNR_cjs.RestArkProvider();
|
|
12042
12042
|
let indexerProvider = config.indexerProvider;
|
|
12043
12043
|
if (!indexerProvider) {
|
|
12044
12044
|
const derived = extractArkProviderUrl(arkProvider);
|
|
@@ -12047,7 +12047,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12047
12047
|
"indexerProvider is required when arkProvider is provided without a discoverable serverUrl"
|
|
12048
12048
|
);
|
|
12049
12049
|
}
|
|
12050
|
-
indexerProvider = new
|
|
12050
|
+
indexerProvider = new chunkJEJJYYYJ_cjs.RestIndexerProvider(derived ?? chunkNUIZAUNR_cjs.DEFAULT_ARKADE_SERVER_URL);
|
|
12051
12051
|
}
|
|
12052
12052
|
const walletRepository = config.storage?.walletRepository ?? new IndexedDBWalletRepository();
|
|
12053
12053
|
const contractRepository = config.storage?.contractRepository ?? new IndexedDBContractRepository();
|
|
@@ -12056,7 +12056,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12056
12056
|
source: serverInfoSource,
|
|
12057
12057
|
lastOnlineAt: serverInfoLastOnlineAt
|
|
12058
12058
|
} = await resolveArkInfo(arkProvider, walletRepository);
|
|
12059
|
-
const network =
|
|
12059
|
+
const network = chunkNUIZAUNR_cjs.networkFromArkadeInfo(info);
|
|
12060
12060
|
if ("descriptor" in config.identity) {
|
|
12061
12061
|
const descriptor = config.identity.descriptor;
|
|
12062
12062
|
const identityIsMainnet = !descriptor.includes("tpub");
|
|
@@ -12092,18 +12092,18 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12092
12092
|
}
|
|
12093
12093
|
}
|
|
12094
12094
|
const boardingTimelock = config.boardingTimelock ?? toTimelock(info.boardingExitDelay);
|
|
12095
|
-
const serverPubKey =
|
|
12096
|
-
const delegatePubKey = config.delegateProvider ? await config.delegateProvider.getDelegateInfo().then((info2) =>
|
|
12095
|
+
const serverPubKey = chunk7TSJAQRV_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
|
|
12096
|
+
const delegatePubKey = config.delegateProvider ? await config.delegateProvider.getDelegateInfo().then((info2) => chunk7TSJAQRV_cjs.toXOnly(base.hex.decode(info2.pubkey), "delegate key")).catch(() => void 0) : void 0;
|
|
12097
12097
|
const offchainOptions = {
|
|
12098
12098
|
pubKey,
|
|
12099
12099
|
serverPubKey,
|
|
12100
12100
|
csvTimelock: exitTimelock
|
|
12101
12101
|
};
|
|
12102
|
-
const offchainTapscript = !delegatePubKey ? new
|
|
12103
|
-
const boardingTapscript =
|
|
12102
|
+
const offchainTapscript = !delegatePubKey ? new chunk7TSJAQRV_cjs.DefaultVtxo.Script(offchainOptions) : new chunk7TSJAQRV_cjs.DelegateVtxo.Script({ ...offchainOptions, delegatePubKey });
|
|
12103
|
+
const boardingTapscript = chunk7TSJAQRV_cjs.BoardingContractHandler.createScript({
|
|
12104
12104
|
pubKey: base.hex.encode(pubKey),
|
|
12105
12105
|
serverPubKey: base.hex.encode(serverPubKey),
|
|
12106
|
-
csvTimelock:
|
|
12106
|
+
csvTimelock: chunkNUIZAUNR_cjs.timelockToSequence(boardingTimelock).toString()
|
|
12107
12107
|
});
|
|
12108
12108
|
return {
|
|
12109
12109
|
arkProvider,
|
|
@@ -12241,7 +12241,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12241
12241
|
if (!filter?.withUnrolled) {
|
|
12242
12242
|
logExcludedVtxos(
|
|
12243
12243
|
"getSpendableVtxos",
|
|
12244
|
-
snapshot.flatMap((contract) => contract.vtxos).filter((vtxo) => vtxo.isUnrolled && !
|
|
12244
|
+
snapshot.flatMap((contract) => contract.vtxos).filter((vtxo) => vtxo.isUnrolled && !chunkNUIZAUNR_cjs.isVtxoSpent(vtxo)),
|
|
12245
12245
|
[() => UNROLLED_REASON]
|
|
12246
12246
|
);
|
|
12247
12247
|
}
|
|
@@ -12379,7 +12379,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12379
12379
|
this.getBoardingTxs()
|
|
12380
12380
|
]);
|
|
12381
12381
|
const allVtxos = snapshot.flatMap((_) => _.vtxos);
|
|
12382
|
-
const resolveTxCreatedAt = (txids) =>
|
|
12382
|
+
const resolveTxCreatedAt = (txids) => chunkNUIZAUNR_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
|
|
12383
12383
|
return buildTransactionHistory(
|
|
12384
12384
|
allVtxos,
|
|
12385
12385
|
boardingTxs,
|
|
@@ -12514,9 +12514,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12514
12514
|
async getBoardingTapscripts(allowedSigners) {
|
|
12515
12515
|
const byScript = /* @__PURE__ */ new Map();
|
|
12516
12516
|
const add = (s) => byScript.set(base.hex.encode(s.pkScript), s);
|
|
12517
|
-
const boardingCsv = this.boardingTapscript.options.csvTimelock ??
|
|
12517
|
+
const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunk7TSJAQRV_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
12518
12518
|
add(
|
|
12519
|
-
new
|
|
12519
|
+
new chunk7TSJAQRV_cjs.DefaultVtxo.Script({
|
|
12520
12520
|
pubKey: await this.identity.xOnlyPublicKey(),
|
|
12521
12521
|
serverPubKey: this.boardingTapscript.options.serverPubKey,
|
|
12522
12522
|
csvTimelock: boardingCsv
|
|
@@ -12531,7 +12531,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12531
12531
|
for (const c of boardingContracts) {
|
|
12532
12532
|
if (!allowed.has(toXOnlySignerHex(c.params.serverPubKey))) continue;
|
|
12533
12533
|
try {
|
|
12534
|
-
add(
|
|
12534
|
+
add(chunk7TSJAQRV_cjs.BoardingContractHandler.createScript(c.params));
|
|
12535
12535
|
} catch (e) {
|
|
12536
12536
|
console.warn("Skipping malformed boarding contract", c.script, e);
|
|
12537
12537
|
}
|
|
@@ -12560,7 +12560,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12560
12560
|
// Per-row CSV delay decoded from THIS tapscript's exit leaf —
|
|
12561
12561
|
// not the wallet's current boarding timelock, which a signer
|
|
12562
12562
|
// rotation may have changed.
|
|
12563
|
-
csvTimelock:
|
|
12563
|
+
csvTimelock: chunkNUIZAUNR_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
|
|
12564
12564
|
coins: utxos
|
|
12565
12565
|
};
|
|
12566
12566
|
})
|
|
@@ -12685,7 +12685,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12685
12685
|
/** Fetch Arkade transaction ids that are still pending final settlement. */
|
|
12686
12686
|
async fetchPendingTxs() {
|
|
12687
12687
|
const scripts = await this.getWalletScripts();
|
|
12688
|
-
const vtxos = await
|
|
12688
|
+
const vtxos = await chunkNUIZAUNR_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
|
|
12689
12689
|
return vtxos.filter(
|
|
12690
12690
|
(vtxo) => (vtxo.isSpent || vtxo.isPreconfirmed && !vtxo.isSwept) && vtxo.arkTxId !== void 0
|
|
12691
12691
|
).map((_) => _.arkTxId);
|
|
@@ -12716,7 +12716,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12716
12716
|
});
|
|
12717
12717
|
for (const contract of contracts) {
|
|
12718
12718
|
if (map.has(contract.script)) continue;
|
|
12719
|
-
const handler =
|
|
12719
|
+
const handler = chunk7TSJAQRV_cjs.contractHandlers.get(contract.type);
|
|
12720
12720
|
if (handler) {
|
|
12721
12721
|
const script = handler.createScript(contract.params);
|
|
12722
12722
|
map.set(contract.script, script);
|
|
@@ -12821,7 +12821,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12821
12821
|
}
|
|
12822
12822
|
});
|
|
12823
12823
|
const baselinePubkey = await this.identity.xOnlyPublicKey();
|
|
12824
|
-
const delegatePubKey = this.offchainTapscript instanceof
|
|
12824
|
+
const delegatePubKey = this.offchainTapscript instanceof chunk7TSJAQRV_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
|
|
12825
12825
|
const baselineSigners = [
|
|
12826
12826
|
this.offchainTapscript.options.serverPubKey,
|
|
12827
12827
|
...[...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h))
|
|
@@ -12829,8 +12829,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12829
12829
|
const seenBaselineScripts = /* @__PURE__ */ new Set();
|
|
12830
12830
|
for (const serverPubKey of baselineSigners) {
|
|
12831
12831
|
for (const csvTimelock2 of this.walletContractTimelocks) {
|
|
12832
|
-
const csvTimelockStr =
|
|
12833
|
-
const defaultScript = new
|
|
12832
|
+
const csvTimelockStr = chunkNUIZAUNR_cjs.timelockToSequence(csvTimelock2).toString();
|
|
12833
|
+
const defaultScript = new chunk7TSJAQRV_cjs.DefaultVtxo.Script({
|
|
12834
12834
|
pubKey: baselinePubkey,
|
|
12835
12835
|
serverPubKey,
|
|
12836
12836
|
csvTimelock: csvTimelock2
|
|
@@ -12851,7 +12851,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12851
12851
|
});
|
|
12852
12852
|
}
|
|
12853
12853
|
if (delegatePubKey) {
|
|
12854
|
-
const delegateScript = new
|
|
12854
|
+
const delegateScript = new chunk7TSJAQRV_cjs.DelegateVtxo.Script({
|
|
12855
12855
|
pubKey: baselinePubkey,
|
|
12856
12856
|
serverPubKey,
|
|
12857
12857
|
delegatePubKey,
|
|
@@ -12875,9 +12875,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12875
12875
|
}
|
|
12876
12876
|
}
|
|
12877
12877
|
}
|
|
12878
|
-
const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ??
|
|
12878
|
+
const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunk7TSJAQRV_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
12879
12879
|
for (const serverPubKey of baselineSigners) {
|
|
12880
|
-
const baselineBoarding = new
|
|
12880
|
+
const baselineBoarding = new chunk7TSJAQRV_cjs.DefaultVtxo.Script({
|
|
12881
12881
|
pubKey: baselinePubkey,
|
|
12882
12882
|
serverPubKey,
|
|
12883
12883
|
csvTimelock: boardingCsvTimelock
|
|
@@ -12890,7 +12890,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12890
12890
|
params: {
|
|
12891
12891
|
pubKey: base.hex.encode(baselineBoarding.options.pubKey),
|
|
12892
12892
|
serverPubKey: base.hex.encode(serverPubKey),
|
|
12893
|
-
csvTimelock:
|
|
12893
|
+
csvTimelock: chunkNUIZAUNR_cjs.timelockToSequence(boardingCsvTimelock).toString()
|
|
12894
12894
|
},
|
|
12895
12895
|
script: boardingScriptHex,
|
|
12896
12896
|
address: baselineBoarding.address(this.network.hrp, serverPubKey).encode(),
|
|
@@ -13038,7 +13038,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13038
13038
|
serverPubKey: this.offchainTapscript.options.serverPubKey,
|
|
13039
13039
|
deprecatedSignerPubKeys: [...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h)),
|
|
13040
13040
|
csvTimelocks: this.walletContractTimelocks,
|
|
13041
|
-
delegatePubKey: this.offchainTapscript instanceof
|
|
13041
|
+
delegatePubKey: this.offchainTapscript instanceof chunk7TSJAQRV_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
|
|
13042
13042
|
};
|
|
13043
13043
|
}
|
|
13044
13044
|
_signerRouter;
|
|
@@ -13198,7 +13198,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13198
13198
|
const [row] = await manager.getContracts({ script: base.hex.encode(display.pkScript) });
|
|
13199
13199
|
const persisted = row?.metadata?.signingDescriptor;
|
|
13200
13200
|
if (typeof persisted === "string") return persisted;
|
|
13201
|
-
return
|
|
13201
|
+
return chunk7TSJAQRV_cjs.identityDescriptor(this.identity);
|
|
13202
13202
|
}
|
|
13203
13203
|
/**
|
|
13204
13204
|
* Build, persist and shape one address of `type` owned by `descriptor`. The descriptor is the
|
|
@@ -13208,7 +13208,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13208
13208
|
async mintAddress(manager, type, descriptor, tagSource, allocated) {
|
|
13209
13209
|
if (type === "boarding") {
|
|
13210
13210
|
const built2 = this.buildBoardingContract(
|
|
13211
|
-
|
|
13211
|
+
chunk7TSJAQRV_cjs.deriveDescriptorLeafPubKey(descriptor),
|
|
13212
13212
|
descriptor,
|
|
13213
13213
|
tagSource
|
|
13214
13214
|
);
|
|
@@ -13245,11 +13245,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13245
13245
|
* (offchain analogue: {@link buildReceiveContract}).
|
|
13246
13246
|
*/
|
|
13247
13247
|
buildBoardingContract(pubKey, descriptor, tagSource) {
|
|
13248
|
-
const tapscript = new
|
|
13248
|
+
const tapscript = new chunk7TSJAQRV_cjs.DefaultVtxo.Script({
|
|
13249
13249
|
...this._boardingTapscript.options,
|
|
13250
13250
|
pubKey
|
|
13251
13251
|
});
|
|
13252
|
-
const csvTimelock2 = tapscript.options.csvTimelock ??
|
|
13252
|
+
const csvTimelock2 = tapscript.options.csvTimelock ?? chunk7TSJAQRV_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
13253
13253
|
return {
|
|
13254
13254
|
tapscript,
|
|
13255
13255
|
params: {
|
|
@@ -13257,13 +13257,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13257
13257
|
params: {
|
|
13258
13258
|
pubKey: base.hex.encode(pubKey),
|
|
13259
13259
|
serverPubKey: base.hex.encode(tapscript.options.serverPubKey),
|
|
13260
|
-
csvTimelock:
|
|
13260
|
+
csvTimelock: chunkNUIZAUNR_cjs.timelockToSequence(csvTimelock2).toString()
|
|
13261
13261
|
},
|
|
13262
13262
|
script: base.hex.encode(tapscript.pkScript),
|
|
13263
13263
|
address: tapscript.address(this.network.hrp, this.arkServerPublicKey).encode(),
|
|
13264
13264
|
state: "active",
|
|
13265
13265
|
metadata: {
|
|
13266
|
-
...tagSource && { source:
|
|
13266
|
+
...tagSource && { source: chunk7TSJAQRV_cjs.WALLET_RECEIVE_SOURCE },
|
|
13267
13267
|
signingDescriptor: descriptor
|
|
13268
13268
|
}
|
|
13269
13269
|
}
|
|
@@ -13287,7 +13287,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13287
13287
|
if (this._descriptorProvider instanceof HDDescriptorProvider) {
|
|
13288
13288
|
return (await this.getContractManager()).getNextSigningDescriptor();
|
|
13289
13289
|
}
|
|
13290
|
-
return
|
|
13290
|
+
return chunk7TSJAQRV_cjs.identityDescriptor(this.identity);
|
|
13291
13291
|
}
|
|
13292
13292
|
/**
|
|
13293
13293
|
* @see HDAllocationCapable.advanceSigningDescriptorWatermark
|
|
@@ -13362,7 +13362,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13362
13362
|
* the stable public API.
|
|
13363
13363
|
*/
|
|
13364
13364
|
async rotateServerSigner(newServerPubKey, checkpointTapscript) {
|
|
13365
|
-
const xonly =
|
|
13365
|
+
const xonly = chunk7TSJAQRV_cjs.toXOnly(newServerPubKey, "ark signer key");
|
|
13366
13366
|
const newServerUnrollScript = assertValidServerUnrollScript(
|
|
13367
13367
|
checkpointTapscript,
|
|
13368
13368
|
resolveCheckpointExitDelayPolicy(this.network, this.checkpointExitDelayPolicy)
|
|
@@ -13391,21 +13391,21 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13391
13391
|
const [currentBoardingRow] = await manager.getContracts({
|
|
13392
13392
|
script: currentBoardingScript
|
|
13393
13393
|
});
|
|
13394
|
-
const newOffchain = this.offchainTapscript instanceof
|
|
13394
|
+
const newOffchain = this.offchainTapscript instanceof chunk7TSJAQRV_cjs.DelegateVtxo.Script ? new chunk7TSJAQRV_cjs.DelegateVtxo.Script({
|
|
13395
13395
|
...this.offchainTapscript.options,
|
|
13396
13396
|
serverPubKey: xonly
|
|
13397
|
-
}) : new
|
|
13397
|
+
}) : new chunk7TSJAQRV_cjs.DefaultVtxo.Script({
|
|
13398
13398
|
...this.offchainTapscript.options,
|
|
13399
13399
|
serverPubKey: xonly
|
|
13400
13400
|
});
|
|
13401
|
-
const newBoarding = new
|
|
13401
|
+
const newBoarding = new chunk7TSJAQRV_cjs.DefaultVtxo.Script({
|
|
13402
13402
|
...this._boardingTapscript.options,
|
|
13403
13403
|
serverPubKey: xonly
|
|
13404
13404
|
});
|
|
13405
|
-
const offchainCsv =
|
|
13405
|
+
const offchainCsv = chunkNUIZAUNR_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
|
|
13406
13406
|
const newOffchainScript = base.hex.encode(newOffchain.pkScript);
|
|
13407
13407
|
const newOffchainAddress = newOffchain.address(this.network.hrp, xonly).encode();
|
|
13408
|
-
if (newOffchain instanceof
|
|
13408
|
+
if (newOffchain instanceof chunk7TSJAQRV_cjs.DelegateVtxo.Script) {
|
|
13409
13409
|
await manager.createContract({
|
|
13410
13410
|
type: "delegate",
|
|
13411
13411
|
params: {
|
|
@@ -13433,13 +13433,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13433
13433
|
metadata: currentOffchainRow?.metadata
|
|
13434
13434
|
});
|
|
13435
13435
|
}
|
|
13436
|
-
const boardingCsv = newBoarding.options.csvTimelock ??
|
|
13436
|
+
const boardingCsv = newBoarding.options.csvTimelock ?? chunk7TSJAQRV_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
13437
13437
|
await manager.createContract({
|
|
13438
13438
|
type: "boarding",
|
|
13439
13439
|
params: {
|
|
13440
13440
|
pubKey: base.hex.encode(newBoarding.options.pubKey),
|
|
13441
13441
|
serverPubKey: base.hex.encode(xonly),
|
|
13442
|
-
csvTimelock:
|
|
13442
|
+
csvTimelock: chunkNUIZAUNR_cjs.timelockToSequence(boardingCsv).toString()
|
|
13443
13443
|
},
|
|
13444
13444
|
script: base.hex.encode(newBoarding.pkScript),
|
|
13445
13445
|
address: newBoarding.address(this.network.hrp, xonly).encode(),
|
|
@@ -13465,14 +13465,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13465
13465
|
_restoreInFlight;
|
|
13466
13466
|
_addPendingSpends(inputs) {
|
|
13467
13467
|
for (const input of inputs) {
|
|
13468
|
-
if (
|
|
13468
|
+
if (chunkNUIZAUNR_cjs.isVirtualCoin(input)) {
|
|
13469
13469
|
this._pendingSpendOutpoints.add(`${input.txid}:${input.vout}`);
|
|
13470
13470
|
}
|
|
13471
13471
|
}
|
|
13472
13472
|
}
|
|
13473
13473
|
_removePendingSpends(inputs) {
|
|
13474
13474
|
for (const input of inputs) {
|
|
13475
|
-
if (
|
|
13475
|
+
if (chunkNUIZAUNR_cjs.isVirtualCoin(input)) {
|
|
13476
13476
|
this._pendingSpendOutpoints.delete(`${input.txid}:${input.vout}`);
|
|
13477
13477
|
}
|
|
13478
13478
|
}
|
|
@@ -13523,13 +13523,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13523
13523
|
const manager = await this.getContractManager();
|
|
13524
13524
|
const provider = this._descriptorProvider;
|
|
13525
13525
|
const hd = provider instanceof HDDescriptorProvider;
|
|
13526
|
-
const staticDescriptor = hd ? void 0 : await
|
|
13526
|
+
const staticDescriptor = hd ? void 0 : await chunk7TSJAQRV_cjs.identityDescriptor(this.identity);
|
|
13527
13527
|
const materialize = (index) => hd ? provider.materializeDescriptorAt(index) : staticDescriptor;
|
|
13528
|
-
const delegatePubKey = this.offchainTapscript instanceof
|
|
13528
|
+
const delegatePubKey = this.offchainTapscript instanceof chunk7TSJAQRV_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
|
|
13529
13529
|
const arkInfo = await this.arkProvider.getInfo();
|
|
13530
|
-
const currentSignerPubKey =
|
|
13530
|
+
const currentSignerPubKey = chunk7TSJAQRV_cjs.toXOnly(base.hex.decode(arkInfo.signerPubkey), "ark signer key");
|
|
13531
13531
|
const deprecatedSignerPubKeys = arkInfo.deprecatedSigners.map(
|
|
13532
|
-
(s) =>
|
|
13532
|
+
(s) => chunk7TSJAQRV_cjs.toXOnly(base.hex.decode(s.pubkey), "deprecated signer key")
|
|
13533
13533
|
);
|
|
13534
13534
|
const deps = {
|
|
13535
13535
|
indexerProvider: this.indexerProvider,
|
|
@@ -13541,7 +13541,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13541
13541
|
deprecatedSignerPubKeys,
|
|
13542
13542
|
csvTimelocks: this.walletContractTimelocks,
|
|
13543
13543
|
// Boarding-exit CSV, distinct from the unilateral-exit matrix.
|
|
13544
|
-
boardingTimelock: this.boardingTapscript.options.csvTimelock ??
|
|
13544
|
+
boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunk7TSJAQRV_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
|
|
13545
13545
|
delegatePubKey
|
|
13546
13546
|
};
|
|
13547
13547
|
const result = await manager.scanContracts({
|
|
@@ -13664,7 +13664,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13664
13664
|
throw new Error("Invalid configured public key");
|
|
13665
13665
|
}
|
|
13666
13666
|
const setup = await ReadonlyWallet.setupWalletConfig(config, pubkey);
|
|
13667
|
-
const forfeitPubkey =
|
|
13667
|
+
const forfeitPubkey = chunk7TSJAQRV_cjs.toXOnly(base.hex.decode(setup.info.forfeitPubkey), "forfeit key");
|
|
13668
13668
|
const forfeitAddress = btcSigner.Address(setup.network).decode(setup.info.forfeitAddress);
|
|
13669
13669
|
const forfeitOutputScript = btcSigner.OutScript.encode(forfeitAddress);
|
|
13670
13670
|
const checkpointExitDelayOverrides = {
|
|
@@ -13808,13 +13808,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13808
13808
|
void this.logUngatedInputs("settle({ inputs })", params.inputs);
|
|
13809
13809
|
}
|
|
13810
13810
|
const offchainAddress = await this.getAddress();
|
|
13811
|
-
const offchainPkScript =
|
|
13811
|
+
const offchainPkScript = chunkNUIZAUNR_cjs.ArkAddress.decode(offchainAddress).pkScript;
|
|
13812
13812
|
const offchainOutputScript = base.hex.encode(offchainPkScript);
|
|
13813
13813
|
if (!params) {
|
|
13814
13814
|
const { fees, vtxoMaxAmount } = await this.arkProvider.getInfo();
|
|
13815
13815
|
const estimator = new Estimator(fees.intentFee);
|
|
13816
13816
|
let amount = 0;
|
|
13817
|
-
const exitScript =
|
|
13817
|
+
const exitScript = chunkNUIZAUNR_cjs.CSVMultisigTapscript.decode(
|
|
13818
13818
|
base.hex.decode(this.boardingTapscript.exitScript)
|
|
13819
13819
|
);
|
|
13820
13820
|
const boardingTimelock = exitScript.params.timelock;
|
|
@@ -13846,7 +13846,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13846
13846
|
if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
|
|
13847
13847
|
break;
|
|
13848
13848
|
}
|
|
13849
|
-
const inputFee = estimator.evalOffchainInput(
|
|
13849
|
+
const inputFee = estimator.evalOffchainInput(chunkNUIZAUNR_cjs.toOffchainInputFeeParams(vtxo));
|
|
13850
13850
|
if (inputFee.satoshis >= vtxo.value) {
|
|
13851
13851
|
continue;
|
|
13852
13852
|
}
|
|
@@ -13897,7 +13897,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13897
13897
|
let script;
|
|
13898
13898
|
let arkAddress;
|
|
13899
13899
|
try {
|
|
13900
|
-
arkAddress =
|
|
13900
|
+
arkAddress = chunkNUIZAUNR_cjs.ArkAddress.decode(output.address);
|
|
13901
13901
|
} catch {
|
|
13902
13902
|
arkAddress = void 0;
|
|
13903
13903
|
}
|
|
@@ -13987,7 +13987,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13987
13987
|
const abortController = new AbortController();
|
|
13988
13988
|
let stream;
|
|
13989
13989
|
let committedTxid;
|
|
13990
|
-
const settleInputVtxos = params.inputs.filter(
|
|
13990
|
+
const settleInputVtxos = params.inputs.filter(chunkNUIZAUNR_cjs.isVirtualCoin);
|
|
13991
13991
|
const contractManager = await this.getContractManager();
|
|
13992
13992
|
await contractManager.assertAnnotatable(settleInputVtxos);
|
|
13993
13993
|
await contractManager.assertSpendableNow?.(
|
|
@@ -14079,7 +14079,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14079
14079
|
async maybeRotateBoardingAfterBoard(inputs) {
|
|
14080
14080
|
if (!this._descriptorProvider) return;
|
|
14081
14081
|
const consumedBoarding = inputs.some(
|
|
14082
|
-
(input) => typeof input !== "string" && !
|
|
14082
|
+
(input) => typeof input !== "string" && !chunkNUIZAUNR_cjs.isVirtualCoin(input)
|
|
14083
14083
|
);
|
|
14084
14084
|
if (!consumedBoarding) return;
|
|
14085
14085
|
try {
|
|
@@ -14103,7 +14103,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14103
14103
|
let connectorIndex = 0;
|
|
14104
14104
|
const connectorsLeaves = connectorsGraph?.leaves() || [];
|
|
14105
14105
|
for (const input of inputs) {
|
|
14106
|
-
if (!
|
|
14106
|
+
if (!chunkNUIZAUNR_cjs.isVirtualCoin(input)) {
|
|
14107
14107
|
let matched = false;
|
|
14108
14108
|
for (let i = 0; i < settlementPsbt.inputsLength; i++) {
|
|
14109
14109
|
const settlementInput = settlementPsbt.getInput(i);
|
|
@@ -14141,7 +14141,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14141
14141
|
}
|
|
14142
14142
|
continue;
|
|
14143
14143
|
}
|
|
14144
|
-
if (!
|
|
14144
|
+
if (!chunkNUIZAUNR_cjs.requiresForfeit(input) || isSubdust({ value: input.value }, this.dustAmount)) {
|
|
14145
14145
|
continue;
|
|
14146
14146
|
}
|
|
14147
14147
|
if (connectorsLeaves.length === 0) {
|
|
@@ -14169,7 +14169,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14169
14169
|
index: input.vout,
|
|
14170
14170
|
witnessUtxo: {
|
|
14171
14171
|
amount: BigInt(input.value),
|
|
14172
|
-
script:
|
|
14172
|
+
script: chunkNUIZAUNR_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
14173
14173
|
},
|
|
14174
14174
|
sighashType: btcSigner.SigHash.DEFAULT,
|
|
14175
14175
|
tapLeafScript: [input.forfeitTapLeafScript]
|
|
@@ -14188,7 +14188,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14188
14188
|
forfeitTx = await this._signerRouter.sign(forfeitTx, [
|
|
14189
14189
|
{
|
|
14190
14190
|
index: 0,
|
|
14191
|
-
lookupScript:
|
|
14191
|
+
lookupScript: chunkNUIZAUNR_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
14192
14192
|
}
|
|
14193
14193
|
]);
|
|
14194
14194
|
signedForfeits.push(base.base64.encode(forfeitTx.toPSBT()));
|
|
@@ -14246,7 +14246,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14246
14246
|
resolveBatchExpiryPolicy(this.network, this.batchExpiryPolicy)
|
|
14247
14247
|
);
|
|
14248
14248
|
await this.arkProvider.confirmRegistration(intentId);
|
|
14249
|
-
const sweepTapscript =
|
|
14249
|
+
const sweepTapscript = chunkNUIZAUNR_cjs.CSVMultisigTapscript.encode({
|
|
14250
14250
|
timelock,
|
|
14251
14251
|
pubkeys: [this.forfeitPubkey]
|
|
14252
14252
|
}).script;
|
|
@@ -14261,10 +14261,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14261
14261
|
throw new Error("Sweep tap tree root not set");
|
|
14262
14262
|
}
|
|
14263
14263
|
const xOnlyPublicKeys = event.cosignersPublicKeys.map(
|
|
14264
|
-
(k) => base.hex.encode(
|
|
14264
|
+
(k) => base.hex.encode(chunk7TSJAQRV_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
|
|
14265
14265
|
);
|
|
14266
14266
|
const signerPublicKey = await session.getPublicKey();
|
|
14267
|
-
const xonlySignerPublicKey =
|
|
14267
|
+
const xonlySignerPublicKey = chunk7TSJAQRV_cjs.toXOnly(signerPublicKey, "signer key");
|
|
14268
14268
|
if (!xOnlyPublicKeys.includes(base.hex.encode(xonlySignerPublicKey))) {
|
|
14269
14269
|
return { skip: true };
|
|
14270
14270
|
}
|
|
@@ -14350,9 +14350,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14350
14350
|
...existing ?? {},
|
|
14351
14351
|
intentTxId,
|
|
14352
14352
|
registerProof: intent.proof,
|
|
14353
|
-
registerProofMessage:
|
|
14353
|
+
registerProofMessage: chunkNUIZAUNR_cjs.Intent.encodeMessage(intent.message),
|
|
14354
14354
|
deleteProof: deleteIntent.proof,
|
|
14355
|
-
deleteProofMessage:
|
|
14355
|
+
deleteProofMessage: chunkNUIZAUNR_cjs.Intent.encodeMessage(deleteIntent.message),
|
|
14356
14356
|
intentVtxos: inputs.map((i) => ({
|
|
14357
14357
|
txid: i.txid,
|
|
14358
14358
|
vout: i.vout
|
|
@@ -14385,7 +14385,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14385
14385
|
try {
|
|
14386
14386
|
return await this.arkProvider.registerIntent(intent);
|
|
14387
14387
|
} catch (error) {
|
|
14388
|
-
if (error instanceof
|
|
14388
|
+
if (error instanceof chunkNUIZAUNR_cjs.ArkError && error.code === 0 && error.message.includes("duplicated input")) {
|
|
14389
14389
|
const deleteIntent = await this.makeDeleteIntentSignature(inputs);
|
|
14390
14390
|
await this.arkProvider.deleteIntent(deleteIntent);
|
|
14391
14391
|
return this.arkProvider.registerIntent(intent);
|
|
@@ -14401,7 +14401,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14401
14401
|
expire_at: 0,
|
|
14402
14402
|
cosigners_public_keys: cosignerPubKeys
|
|
14403
14403
|
};
|
|
14404
|
-
const proof =
|
|
14404
|
+
const proof = chunkNUIZAUNR_cjs.Intent.create(message, coins, outputs);
|
|
14405
14405
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
14406
14406
|
return {
|
|
14407
14407
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -14413,7 +14413,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14413
14413
|
type: "delete",
|
|
14414
14414
|
expire_at: 0
|
|
14415
14415
|
};
|
|
14416
|
-
const proof =
|
|
14416
|
+
const proof = chunkNUIZAUNR_cjs.Intent.create(message, coins, []);
|
|
14417
14417
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
14418
14418
|
return {
|
|
14419
14419
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -14425,7 +14425,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14425
14425
|
type: "get-pending-tx",
|
|
14426
14426
|
expire_at: 0
|
|
14427
14427
|
};
|
|
14428
|
-
const proof =
|
|
14428
|
+
const proof = chunkNUIZAUNR_cjs.Intent.create(message, coins, []);
|
|
14429
14429
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
14430
14430
|
return {
|
|
14431
14431
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -14446,7 +14446,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14446
14446
|
if (!vtxos || vtxos.length === 0) {
|
|
14447
14447
|
const scriptMap = await this.getScriptMap();
|
|
14448
14448
|
const allExtended = [];
|
|
14449
|
-
const fetchedVtxos = await
|
|
14449
|
+
const fetchedVtxos = await chunkNUIZAUNR_cjs.getAllNormalizedVtxos(this.indexerProvider, [
|
|
14450
14450
|
...scriptMap.keys()
|
|
14451
14451
|
]);
|
|
14452
14452
|
for (const vtxo of fetchedVtxos) {
|
|
@@ -14490,7 +14490,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14490
14490
|
try {
|
|
14491
14491
|
const checkpointTxs = pendingTx.signedCheckpointTxs.map((c) => {
|
|
14492
14492
|
const tx = btcSigner.Transaction.fromPSBT(base.base64.decode(c));
|
|
14493
|
-
|
|
14493
|
+
chunkNUIZAUNR_cjs.assertAllowedSighashTypes(tx);
|
|
14494
14494
|
return tx;
|
|
14495
14495
|
});
|
|
14496
14496
|
assertCheckpointsMatchInputs(
|
|
@@ -14559,11 +14559,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14559
14559
|
* and one per deprecated signer — else a pre-rotation tx would stay pending forever.
|
|
14560
14560
|
*/
|
|
14561
14561
|
checkpointUnrollCandidates(info) {
|
|
14562
|
-
const current =
|
|
14562
|
+
const current = chunkNUIZAUNR_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
|
|
14563
14563
|
const candidates = [this._serverUnrollScript, current];
|
|
14564
14564
|
for (const deprecated of signerSetFromInfo(info).deprecated.keys()) {
|
|
14565
14565
|
candidates.push(
|
|
14566
|
-
|
|
14566
|
+
chunkNUIZAUNR_cjs.CSVMultisigTapscript.encode({
|
|
14567
14567
|
...current.params,
|
|
14568
14568
|
pubkeys: [base.hex.decode(deprecated)]
|
|
14569
14569
|
})
|
|
@@ -14639,7 +14639,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14639
14639
|
if (vtxos.length === 0) {
|
|
14640
14640
|
throw new Error("No VTXOs found for this arkadeCash");
|
|
14641
14641
|
}
|
|
14642
|
-
const myPkScript =
|
|
14642
|
+
const myPkScript = chunkNUIZAUNR_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
|
|
14643
14643
|
let { spendable, unclaimed } = this.classifyCashVtxos(vtxos);
|
|
14644
14644
|
let swept = 0;
|
|
14645
14645
|
const drainable = vtxos.filter(
|
|
@@ -14715,7 +14715,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14715
14715
|
const spendable = [];
|
|
14716
14716
|
const unclaimed = [];
|
|
14717
14717
|
for (const vtxo of vtxos) {
|
|
14718
|
-
if (
|
|
14718
|
+
if (chunkNUIZAUNR_cjs.isVtxoSpent(vtxo)) {
|
|
14719
14719
|
unclaimed.push(cashReport(vtxo, "already-spent"));
|
|
14720
14720
|
} else if (vtxo.isUnrolled) {
|
|
14721
14721
|
unclaimed.push(cashReport(vtxo, "exited"));
|
|
@@ -14737,7 +14737,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14737
14737
|
const all = [];
|
|
14738
14738
|
const seen = /* @__PURE__ */ new Set();
|
|
14739
14739
|
for (let pageIndex = 0; ; pageIndex++) {
|
|
14740
|
-
const { vtxos, page } = await
|
|
14740
|
+
const { vtxos, page } = await chunkNUIZAUNR_cjs.getNormalizedVtxos(this.indexerProvider, {
|
|
14741
14741
|
scripts,
|
|
14742
14742
|
pageIndex,
|
|
14743
14743
|
pageSize
|
|
@@ -14775,7 +14775,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14775
14775
|
for (let i = 0; i < inputs.length; i += MAX_INPUTS_PER_INTENT) {
|
|
14776
14776
|
const batch = inputs.slice(i, i + MAX_INPUTS_PER_INTENT);
|
|
14777
14777
|
const message = { type: "get-pending-tx", expire_at: 0 };
|
|
14778
|
-
const proof =
|
|
14778
|
+
const proof = chunkNUIZAUNR_cjs.Intent.create(message, batch, []);
|
|
14779
14779
|
const signedProof = await identity.sign(
|
|
14780
14780
|
proof,
|
|
14781
14781
|
Array.from({ length: batch.length + 1 }, (_, j) => j)
|
|
@@ -14797,7 +14797,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14797
14797
|
try {
|
|
14798
14798
|
const checkpointTxs = pendingTx.signedCheckpointTxs.map((checkpoint) => {
|
|
14799
14799
|
const tx = btcSigner.Transaction.fromPSBT(base.base64.decode(checkpoint));
|
|
14800
|
-
|
|
14800
|
+
chunkNUIZAUNR_cjs.assertAllowedSighashTypes(tx);
|
|
14801
14801
|
return tx;
|
|
14802
14802
|
});
|
|
14803
14803
|
assertCheckpointsMatchInputs(
|
|
@@ -15008,7 +15008,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15008
15008
|
script: recipient.script,
|
|
15009
15009
|
amount: BigInt(recipient.amount),
|
|
15010
15010
|
// Already checked against the recipient address in `validateRecipients`.
|
|
15011
|
-
...recipient.tapTree ? { tapTree:
|
|
15011
|
+
...recipient.tapTree ? { tapTree: chunkNUIZAUNR_cjs.TapTreeCoder.decode(recipient.tapTree) } : {}
|
|
15012
15012
|
}));
|
|
15013
15013
|
const totalBtcOutput = outputs.reduce((sum, o) => sum + Number(o.amount), 0);
|
|
15014
15014
|
let changeAmount = totalBtcSelected - totalBtcOutput;
|
|
@@ -15179,10 +15179,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15179
15179
|
const serverPubKey = this.arkServerPublicKey;
|
|
15180
15180
|
const serverUnrollScript = this.serverUnrollScript;
|
|
15181
15181
|
const arkAddress = offchainTapscript.address(this.network.hrp, serverPubKey);
|
|
15182
|
-
const normalizedInputs = inputs.map(
|
|
15183
|
-
const at = now ?? await
|
|
15182
|
+
const normalizedInputs = inputs.map(chunkNUIZAUNR_cjs.normalizeVtxo);
|
|
15183
|
+
const at = now ?? await chunkNUIZAUNR_cjs.resolveTimeHeight(this.onchainProvider);
|
|
15184
15184
|
for (const input of normalizedInputs) {
|
|
15185
|
-
if (!
|
|
15185
|
+
if (!chunkNUIZAUNR_cjs.canSpendOffchain(input, at)) {
|
|
15186
15186
|
throw new Error(
|
|
15187
15187
|
`sendSelectedVtxosToSelf: input ${input.txid}:${input.vout} is not cooperatively spendable`
|
|
15188
15188
|
);
|
|
@@ -15252,7 +15252,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15252
15252
|
);
|
|
15253
15253
|
const arkTxJobs = inputs.map((input, index) => ({
|
|
15254
15254
|
index,
|
|
15255
|
-
lookupScript:
|
|
15255
|
+
lookupScript: chunkNUIZAUNR_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
15256
15256
|
}));
|
|
15257
15257
|
const identity = this.identity;
|
|
15258
15258
|
const signer = {
|
|
@@ -15447,12 +15447,12 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15447
15447
|
const spentVtxos = [];
|
|
15448
15448
|
const inputArkTxIds = /* @__PURE__ */ new Set();
|
|
15449
15449
|
const boardingRemovalsByAddress = /* @__PURE__ */ new Map();
|
|
15450
|
-
const vtxoInputs = inputs.filter(
|
|
15450
|
+
const vtxoInputs = inputs.filter(chunkNUIZAUNR_cjs.isVirtualCoin);
|
|
15451
15451
|
const cm = await this.getContractManager();
|
|
15452
15452
|
const annotatedVtxos = await cm.annotateVtxos(vtxoInputs);
|
|
15453
15453
|
const annotatedByKey = new Map(annotatedVtxos.map((v) => [`${v.txid}:${v.vout}`, v]));
|
|
15454
15454
|
for (const input of inputs) {
|
|
15455
|
-
if (
|
|
15455
|
+
if (chunkNUIZAUNR_cjs.isVirtualCoin(input)) {
|
|
15456
15456
|
const outpoint = `${input.txid}:${input.vout}`;
|
|
15457
15457
|
const vtxo = annotatedByKey.get(outpoint);
|
|
15458
15458
|
if (!vtxo) {
|
|
@@ -15469,7 +15469,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15469
15469
|
} else {
|
|
15470
15470
|
let sourceAddress;
|
|
15471
15471
|
try {
|
|
15472
|
-
sourceAddress =
|
|
15472
|
+
sourceAddress = chunkNUIZAUNR_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
|
|
15473
15473
|
this.network
|
|
15474
15474
|
);
|
|
15475
15475
|
} catch {
|
|
@@ -15527,7 +15527,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15527
15527
|
}
|
|
15528
15528
|
};
|
|
15529
15529
|
function selectVirtualCoins(coins, targetAmount) {
|
|
15530
|
-
const sortedCoins = coins.map(
|
|
15530
|
+
const sortedCoins = coins.map(chunkNUIZAUNR_cjs.normalizeVtxo).sort((a, b) => {
|
|
15531
15531
|
const expiryA = a.expiresAt?.getTime() || Number.MAX_SAFE_INTEGER;
|
|
15532
15532
|
const expiryB = b.expiresAt?.getTime() || Number.MAX_SAFE_INTEGER;
|
|
15533
15533
|
if (expiryA !== expiryB) {
|
|
@@ -15898,14 +15898,14 @@ var MessageBus = class {
|
|
|
15898
15898
|
this.initialized = true;
|
|
15899
15899
|
}
|
|
15900
15900
|
async buildServices(config) {
|
|
15901
|
-
const arkProvider = new
|
|
15901
|
+
const arkProvider = new chunkNUIZAUNR_cjs.RestArkProvider(config.arkServer.url);
|
|
15902
15902
|
const storage = {
|
|
15903
15903
|
walletRepository: this.walletRepository,
|
|
15904
15904
|
contractRepository: this.contractRepository,
|
|
15905
15905
|
...this.intentRepository && { intentRepository: this.intentRepository }
|
|
15906
15906
|
};
|
|
15907
15907
|
const delegateProvider = config.delegateUrl ? new RestDelegateProvider(config.delegateUrl) : void 0;
|
|
15908
|
-
const indexerProvider = new
|
|
15908
|
+
const indexerProvider = new chunkJEJJYYYJ_cjs.RestIndexerProvider(config.arkServer.url);
|
|
15909
15909
|
const serialized = normalizeSerializedIdentity(config.wallet);
|
|
15910
15910
|
if (isSigningSerialized(serialized)) {
|
|
15911
15911
|
const identity2 = hydrateIdentity(serialized);
|
|
@@ -16243,7 +16243,7 @@ var offboardNetworkNames = [
|
|
|
16243
16243
|
function offboardDestinationScript(destinationAddress) {
|
|
16244
16244
|
for (const networkName of offboardNetworkNames) {
|
|
16245
16245
|
try {
|
|
16246
|
-
const network =
|
|
16246
|
+
const network = chunkNUIZAUNR_cjs.networks[networkName];
|
|
16247
16247
|
const addr = btcSigner.Address(network).decode(destinationAddress);
|
|
16248
16248
|
return btcSigner.OutScript.encode(addr);
|
|
16249
16249
|
} catch {
|
|
@@ -16279,7 +16279,7 @@ function filterOffboardInputs(vtxos, feeInfo, named) {
|
|
|
16279
16279
|
const inputs = [];
|
|
16280
16280
|
let subtotal = 0n;
|
|
16281
16281
|
for (const vtxo of vtxos) {
|
|
16282
|
-
const inputFee = estimator.evalOffchainInput(
|
|
16282
|
+
const inputFee = estimator.evalOffchainInput(chunkNUIZAUNR_cjs.toOffchainInputFeeParams(vtxo));
|
|
16283
16283
|
if (inputFee.satoshis >= vtxo.value) {
|
|
16284
16284
|
if (named) {
|
|
16285
16285
|
throw new Error(
|
|
@@ -16376,7 +16376,7 @@ var Ramps = class {
|
|
|
16376
16376
|
}
|
|
16377
16377
|
amount = amount ?? totalAmount;
|
|
16378
16378
|
const offchainAddress = await this.wallet.getAddress();
|
|
16379
|
-
const offchainAddr =
|
|
16379
|
+
const offchainAddr = chunkNUIZAUNR_cjs.ArkAddress.decode(offchainAddress);
|
|
16380
16380
|
const offchainScript = base.hex.encode(offchainAddr.pkScript);
|
|
16381
16381
|
const outputFee = estimator.evalOffchainOutput({
|
|
16382
16382
|
amount,
|
|
@@ -16500,7 +16500,7 @@ var Ramps = class {
|
|
|
16500
16500
|
async fundChange(left, estimator) {
|
|
16501
16501
|
if (left <= 0n) return { change: 0n };
|
|
16502
16502
|
const changeAddress = await this.wallet.getAddress();
|
|
16503
|
-
const changeScript = base.hex.encode(
|
|
16503
|
+
const changeScript = base.hex.encode(chunkNUIZAUNR_cjs.ArkAddress.decode(changeAddress).pkScript);
|
|
16504
16504
|
const { change } = changeAfterOutputFee(
|
|
16505
16505
|
left,
|
|
16506
16506
|
(amount) => BigInt(estimator.evalOffchainOutput({ amount, script: changeScript }).satoshis)
|
|
@@ -17366,7 +17366,7 @@ var WalletMessageHandler = class {
|
|
|
17366
17366
|
// Wallet methods
|
|
17367
17367
|
async handleInitWallet({ payload }) {
|
|
17368
17368
|
const { arkServerUrl } = payload;
|
|
17369
|
-
this.indexerProvider = new
|
|
17369
|
+
this.indexerProvider = new chunkJEJJYYYJ_cjs.RestIndexerProvider(arkServerUrl);
|
|
17370
17370
|
await this.onWalletInitialized();
|
|
17371
17371
|
}
|
|
17372
17372
|
/**
|
|
@@ -17618,7 +17618,7 @@ var WalletMessageHandler = class {
|
|
|
17618
17618
|
if (v.isUnrolled) {
|
|
17619
17619
|
return withUnrolled;
|
|
17620
17620
|
}
|
|
17621
|
-
if (
|
|
17621
|
+
if (chunkNUIZAUNR_cjs.isVtxoSpent(v)) {
|
|
17622
17622
|
return false;
|
|
17623
17623
|
}
|
|
17624
17624
|
if (includeRecoverable) {
|
|
@@ -17627,7 +17627,7 @@ var WalletMessageHandler = class {
|
|
|
17627
17627
|
if (dustAmount != null && isSubdust(v, dustAmount)) {
|
|
17628
17628
|
return false;
|
|
17629
17629
|
}
|
|
17630
|
-
return
|
|
17630
|
+
return chunkNUIZAUNR_cjs.canSpendOffchain(v, { timestamp: /* @__PURE__ */ new Date() });
|
|
17631
17631
|
});
|
|
17632
17632
|
}
|
|
17633
17633
|
/** Tear down handler subscriptions, then delegate the full wipe to the wallet. */
|
|
@@ -17735,7 +17735,7 @@ var WalletMessageHandler = class {
|
|
|
17735
17735
|
this.readonlyWallet.getBoardingTxs()
|
|
17736
17736
|
]);
|
|
17737
17737
|
const indexerProvider = this.indexerProvider;
|
|
17738
|
-
const resolveTxCreatedAt = indexerProvider ? (txids) =>
|
|
17738
|
+
const resolveTxCreatedAt = indexerProvider ? (txids) => chunkNUIZAUNR_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
|
|
17739
17739
|
return buildTransactionHistory(
|
|
17740
17740
|
vtxos,
|
|
17741
17741
|
boardingTxs,
|
|
@@ -17804,7 +17804,7 @@ var DEFAULT_MESSAGE_TIMEOUTS = {
|
|
|
17804
17804
|
// budget so the worker's snapshot fallback stays reachable before this
|
|
17805
17805
|
// page deadline fires — lowering it below the budget would time the page
|
|
17806
17806
|
// out while the worker is still seconds from answering from cache.
|
|
17807
|
-
GET_ARKADE_INFO:
|
|
17807
|
+
GET_ARKADE_INFO: chunkNUIZAUNR_cjs.INFO_FETCH_TIMEOUT_MS + 8e3,
|
|
17808
17808
|
INDEXER_GET_VTXOS: 2e4,
|
|
17809
17809
|
INDEXER_GET_VIRTUAL_TXS: 2e4,
|
|
17810
17810
|
GET_VTXOS: 2e4,
|
|
@@ -18029,7 +18029,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
18029
18029
|
}
|
|
18030
18030
|
/** Shared tail of both `create()` factories: boot the bus, INIT_WALLET, cache for reinit. */
|
|
18031
18031
|
static async bootstrap(wallet, options, serializedWallet, busConfig) {
|
|
18032
|
-
const arkServer = options.arkServer ?? { url:
|
|
18032
|
+
const arkServer = options.arkServer ?? { url: chunkNUIZAUNR_cjs.DEFAULT_ARKADE_SERVER_URL };
|
|
18033
18033
|
const initWalletPayload = {
|
|
18034
18034
|
arkServerUrl: arkServer.url,
|
|
18035
18035
|
arkServerPublicKey: arkServer.publicKey
|
|
@@ -18362,7 +18362,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
18362
18362
|
try {
|
|
18363
18363
|
const response = await this.sendMessage(message);
|
|
18364
18364
|
const { vtxos, page } = response.payload;
|
|
18365
|
-
return { vtxos: vtxos.map(
|
|
18365
|
+
return { vtxos: vtxos.map(chunkNUIZAUNR_cjs.normalizeVtxo), page: page && { ...page } };
|
|
18366
18366
|
} catch (error) {
|
|
18367
18367
|
throw new Error(`Failed to get vtxos: ${error}`, { cause: error });
|
|
18368
18368
|
}
|
|
@@ -18466,7 +18466,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
18466
18466
|
};
|
|
18467
18467
|
try {
|
|
18468
18468
|
const response = await this.sendMessage(message);
|
|
18469
|
-
return response.payload.vtxos.map(
|
|
18469
|
+
return response.payload.vtxos.map(chunkNUIZAUNR_cjs.normalizeVtxo);
|
|
18470
18470
|
} catch (error) {
|
|
18471
18471
|
throw new Error(`Failed to get vtxos: ${error}`);
|
|
18472
18472
|
}
|
|
@@ -18497,7 +18497,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
18497
18497
|
"Service worker does not support the requested contract scope or freshness check"
|
|
18498
18498
|
);
|
|
18499
18499
|
}
|
|
18500
|
-
return payload.vtxos.map(
|
|
18500
|
+
return payload.vtxos.map(chunkNUIZAUNR_cjs.normalizeVtxo);
|
|
18501
18501
|
} catch (error) {
|
|
18502
18502
|
throw new Error(`Failed to get spendable vtxos: ${error}`);
|
|
18503
18503
|
}
|
|
@@ -18673,7 +18673,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
18673
18673
|
};
|
|
18674
18674
|
try {
|
|
18675
18675
|
const response = await sendContractMessage(message);
|
|
18676
|
-
return response.payload.vtxos.map(
|
|
18676
|
+
return response.payload.vtxos.map(chunkNUIZAUNR_cjs.normalizeVtxo);
|
|
18677
18677
|
} catch (e) {
|
|
18678
18678
|
throw new Error("Failed to annotate vtxos");
|
|
18679
18679
|
}
|
|
@@ -19256,7 +19256,7 @@ var ServiceWorkerWallet = class _ServiceWorkerWallet extends ServiceWorkerReadon
|
|
|
19256
19256
|
};
|
|
19257
19257
|
try {
|
|
19258
19258
|
const response = await wallet.sendMessage(message);
|
|
19259
|
-
return response.payload.vtxos.map(
|
|
19259
|
+
return response.payload.vtxos.map(chunkNUIZAUNR_cjs.normalizeVtxo);
|
|
19260
19260
|
} catch (e) {
|
|
19261
19261
|
throw new Error(`Failed to get expiring vtxos: ${e}`);
|
|
19262
19262
|
}
|
|
@@ -19368,12 +19368,12 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
19368
19368
|
* @returns Configured onchain wallet
|
|
19369
19369
|
* @throws Error if the configured identity cannot produce a valid x-only public key
|
|
19370
19370
|
*/
|
|
19371
|
-
static async create(identity, networkName =
|
|
19371
|
+
static async create(identity, networkName = chunkNUIZAUNR_cjs.DEFAULT_NETWORK_NAME, provider) {
|
|
19372
19372
|
const pubkey = await identity.xOnlyPublicKey();
|
|
19373
19373
|
if (!pubkey) {
|
|
19374
19374
|
throw new Error("Invalid configured public key");
|
|
19375
19375
|
}
|
|
19376
|
-
const network =
|
|
19376
|
+
const network = chunkNUIZAUNR_cjs.getNetwork(networkName);
|
|
19377
19377
|
const onchainProvider = provider || new EsploraProvider(ESPLORA_URL[networkName]);
|
|
19378
19378
|
const onchainP2TR = btcSigner.p2tr(pubkey, void 0, network);
|
|
19379
19379
|
return new _OnchainWallet(identity, network, onchainP2TR, onchainProvider);
|
|
@@ -19473,7 +19473,7 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
19473
19473
|
feeRate,
|
|
19474
19474
|
params.address
|
|
19475
19475
|
);
|
|
19476
|
-
let tx = new
|
|
19476
|
+
let tx = new chunkNUIZAUNR_cjs.Transaction();
|
|
19477
19477
|
for (const input of inputs) {
|
|
19478
19478
|
tx.addInput({
|
|
19479
19479
|
txid: input.txid,
|
|
@@ -19531,7 +19531,7 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
19531
19531
|
* @throws If the parent has no anchor, or funding cannot be selected/signed
|
|
19532
19532
|
*/
|
|
19533
19533
|
async bumpAnchor(parentHex, feeRate) {
|
|
19534
|
-
const parent =
|
|
19534
|
+
const parent = chunkNUIZAUNR_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
|
|
19535
19535
|
const coins = (await this.getCoins()).filter((c) => c.status.confirmed);
|
|
19536
19536
|
const child = await this.buildBumpPackage(parent, feeRate, coins);
|
|
19537
19537
|
return [parent.hex, child.hex];
|
|
@@ -20438,7 +20438,7 @@ async function resolvePrevTxs(txids, source, onchain) {
|
|
|
20438
20438
|
try {
|
|
20439
20439
|
const { txs } = await source.getVirtualTxs(wanted);
|
|
20440
20440
|
for (const psbt of txs) {
|
|
20441
|
-
const tx =
|
|
20441
|
+
const tx = chunkNUIZAUNR_cjs.Transaction.fromPSBT(base.base64.decode(psbt));
|
|
20442
20442
|
resolved.set(tx.id, tx.toBytes());
|
|
20443
20443
|
}
|
|
20444
20444
|
} catch (err) {
|
|
@@ -20471,7 +20471,7 @@ async function resolvePrevTxs(txids, source, onchain) {
|
|
|
20471
20471
|
async function attachPrevArkTxs(tx, txids, source, onchain) {
|
|
20472
20472
|
const pending = [];
|
|
20473
20473
|
for (let i = 0; i < tx.inputsLength; i++) {
|
|
20474
|
-
if (
|
|
20474
|
+
if (chunkNUIZAUNR_cjs.getArkPsbtFields(tx, i, chunkNUIZAUNR_cjs.PrevArkTxField).length === 0) pending.push(i);
|
|
20475
20475
|
}
|
|
20476
20476
|
if (pending.length === 0) return;
|
|
20477
20477
|
const resolved = await resolvePrevTxs(
|
|
@@ -20480,13 +20480,13 @@ async function attachPrevArkTxs(tx, txids, source, onchain) {
|
|
|
20480
20480
|
onchain
|
|
20481
20481
|
);
|
|
20482
20482
|
for (const i of pending) {
|
|
20483
|
-
|
|
20483
|
+
chunkNUIZAUNR_cjs.setArkPsbtField(tx, i, chunkNUIZAUNR_cjs.PrevArkTxField, resolved.get(txidAt(txids, i)));
|
|
20484
20484
|
}
|
|
20485
20485
|
}
|
|
20486
20486
|
async function attachPrevoutTxs(tx, source) {
|
|
20487
20487
|
const pending = [];
|
|
20488
20488
|
for (let i = 0; i < tx.inputsLength; i++) {
|
|
20489
|
-
if (
|
|
20489
|
+
if (chunkNUIZAUNR_cjs.getArkPsbtFields(tx, i, chunkNUIZAUNR_cjs.PrevoutTxField).length > 0) continue;
|
|
20490
20490
|
const input = tx.getInput(i);
|
|
20491
20491
|
if (!input?.txid) throw new PrevTxUnavailableError(`input ${i} has no outpoint`);
|
|
20492
20492
|
pending.push({ index: i, txid: base.hex.encode(input.txid) });
|
|
@@ -20497,7 +20497,7 @@ async function attachPrevoutTxs(tx, source) {
|
|
|
20497
20497
|
resolved.set(txid, await source.getRawTransaction(txid));
|
|
20498
20498
|
}
|
|
20499
20499
|
for (const { index, txid } of pending) {
|
|
20500
|
-
|
|
20500
|
+
chunkNUIZAUNR_cjs.setArkPsbtField(tx, index, chunkNUIZAUNR_cjs.PrevoutTxField, resolved.get(txid));
|
|
20501
20501
|
}
|
|
20502
20502
|
}
|
|
20503
20503
|
async function withPrevTxs(coins, source, onchain) {
|
|
@@ -20523,7 +20523,7 @@ exports.BIP322 = void 0;
|
|
|
20523
20523
|
async function sign2(message, identity, network) {
|
|
20524
20524
|
const xOnlyPubKey = await identity.xOnlyPublicKey();
|
|
20525
20525
|
const payment = btcSigner.p2tr(xOnlyPubKey, void 0, network);
|
|
20526
|
-
const toSpend =
|
|
20526
|
+
const toSpend = chunkNUIZAUNR_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
|
|
20527
20527
|
const toSign = craftBIP322ToSignP2TR(toSpend, payment.script, xOnlyPubKey);
|
|
20528
20528
|
const signed = await identity.sign(toSign, [0]);
|
|
20529
20529
|
signed.finalizeIdx(0);
|
|
@@ -20581,7 +20581,7 @@ function verifyP2TR(message, witnessItems, pkScript, pubkey) {
|
|
|
20581
20581
|
if (sighashType !== btcSigner.SigHash.DEFAULT && sighashType !== btcSigner.SigHash.ALL) {
|
|
20582
20582
|
return false;
|
|
20583
20583
|
}
|
|
20584
|
-
const toSpend =
|
|
20584
|
+
const toSpend = chunkNUIZAUNR_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
|
|
20585
20585
|
const toSign = craftBIP322ToSignP2TR(toSpend, pkScript, pubkey);
|
|
20586
20586
|
const sighash = toSign.preimageWitnessV1(0, [pkScript], sighashType, [0n]);
|
|
20587
20587
|
const rawSig = sig.length === 65 ? sig.subarray(0, 64) : sig;
|
|
@@ -20602,7 +20602,7 @@ function verifyP2WPKH(message, witnessItems, pkScript, addressHash) {
|
|
|
20602
20602
|
}
|
|
20603
20603
|
const sighashType = sigWithHash[sigWithHash.length - 1];
|
|
20604
20604
|
const derSig = sigWithHash.subarray(0, sigWithHash.length - 1);
|
|
20605
|
-
const toSpend =
|
|
20605
|
+
const toSpend = chunkNUIZAUNR_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
|
|
20606
20606
|
const toSign = craftBIP322ToSignSimple(toSpend, pkScript);
|
|
20607
20607
|
const scriptCode = btcSigner.OutScript.encode({ type: "pkh", hash: addressHash });
|
|
20608
20608
|
const sighash = toSign.preimageWitnessV0(0, scriptCode, sighashType, 0n);
|
|
@@ -20655,7 +20655,7 @@ function encodeCompactSize(n) {
|
|
|
20655
20655
|
return buf;
|
|
20656
20656
|
}
|
|
20657
20657
|
function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
|
|
20658
|
-
const tx = new
|
|
20658
|
+
const tx = new chunkNUIZAUNR_cjs.Transaction({ version: 0 });
|
|
20659
20659
|
tx.addInput({
|
|
20660
20660
|
txid: toSpend.id,
|
|
20661
20661
|
index: 0,
|
|
@@ -20669,12 +20669,12 @@ function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
|
|
|
20669
20669
|
});
|
|
20670
20670
|
tx.addOutput({
|
|
20671
20671
|
amount: 0n,
|
|
20672
|
-
script:
|
|
20672
|
+
script: chunkNUIZAUNR_cjs.OP_RETURN_EMPTY_PKSCRIPT
|
|
20673
20673
|
});
|
|
20674
20674
|
return tx;
|
|
20675
20675
|
}
|
|
20676
20676
|
function craftBIP322ToSignSimple(toSpend, pkScript) {
|
|
20677
|
-
const tx = new
|
|
20677
|
+
const tx = new chunkNUIZAUNR_cjs.Transaction({ version: 0 });
|
|
20678
20678
|
tx.addInput({
|
|
20679
20679
|
txid: toSpend.id,
|
|
20680
20680
|
index: 0,
|
|
@@ -20686,7 +20686,7 @@ function craftBIP322ToSignSimple(toSpend, pkScript) {
|
|
|
20686
20686
|
});
|
|
20687
20687
|
tx.addOutput({
|
|
20688
20688
|
amount: 0n,
|
|
20689
|
-
script:
|
|
20689
|
+
script: chunkNUIZAUNR_cjs.OP_RETURN_EMPTY_PKSCRIPT
|
|
20690
20690
|
});
|
|
20691
20691
|
return tx;
|
|
20692
20692
|
}
|
|
@@ -20699,7 +20699,7 @@ var RestEmulatorProvider = class {
|
|
|
20699
20699
|
serverUrl;
|
|
20700
20700
|
async getInfo() {
|
|
20701
20701
|
const url = `${this.serverUrl}/v1/info`;
|
|
20702
|
-
const response = await
|
|
20702
|
+
const response = await chunkNUIZAUNR_cjs.baseFetch(url);
|
|
20703
20703
|
if (!response.ok) {
|
|
20704
20704
|
const errorText2 = await response.text();
|
|
20705
20705
|
throw new Error(`Failed to get emulator info: ${errorText2}`);
|
|
@@ -20817,7 +20817,7 @@ var RestEmulatorProvider = class {
|
|
|
20817
20817
|
}
|
|
20818
20818
|
};
|
|
20819
20819
|
function finalizeVirtualTx(type, psbtBase64) {
|
|
20820
|
-
const tx =
|
|
20820
|
+
const tx = chunkNUIZAUNR_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
|
|
20821
20821
|
if (type === "INDEXER_CHAINED_TX_TYPE_TREE" /* TREE */) {
|
|
20822
20822
|
const input = tx.getInput(0);
|
|
20823
20823
|
if (!input) {
|
|
@@ -20844,14 +20844,14 @@ var ExitPathError = class extends Error {
|
|
|
20844
20844
|
reason;
|
|
20845
20845
|
};
|
|
20846
20846
|
function delayWeight(sequence) {
|
|
20847
|
-
const t =
|
|
20847
|
+
const t = chunkNUIZAUNR_cjs.sequenceToTimelock(sequence);
|
|
20848
20848
|
return t.type === "blocks" ? Number(t.value) : Number(t.value) / 600;
|
|
20849
20849
|
}
|
|
20850
20850
|
async function resolveUnilateralPath(params) {
|
|
20851
20851
|
const { vtxo, scriptHex, contractRepository } = params;
|
|
20852
20852
|
const contract = contractRepository ? (await collectContracts(contractRepository, { script: scriptHex }))[0] : void 0;
|
|
20853
20853
|
if (contract) {
|
|
20854
|
-
const handler =
|
|
20854
|
+
const handler = chunk7TSJAQRV_cjs.contractHandlers.get(contract.type);
|
|
20855
20855
|
if (!handler) {
|
|
20856
20856
|
throw new ExitPathError(
|
|
20857
20857
|
"no-handler",
|
|
@@ -20873,12 +20873,12 @@ async function resolveUnilateralPath(params) {
|
|
|
20873
20873
|
paths.sort((a, b) => delayWeight(a.sequence) - delayWeight(b.sequence));
|
|
20874
20874
|
return { selection: paths[0], label: `${contract.type}:unilateral` };
|
|
20875
20875
|
}
|
|
20876
|
-
const decoded =
|
|
20876
|
+
const decoded = chunkNUIZAUNR_cjs.VtxoScript.decode(vtxo.tapTree);
|
|
20877
20877
|
let best;
|
|
20878
20878
|
for (const exit of decoded.exitPaths()) {
|
|
20879
20879
|
const leaf = decoded.findLeaf(base.hex.encode(exit.script));
|
|
20880
20880
|
if (!leaf) continue;
|
|
20881
|
-
const sequence =
|
|
20881
|
+
const sequence = chunkNUIZAUNR_cjs.timelockToSequence(exit.params.timelock);
|
|
20882
20882
|
const weight = delayWeight(sequence);
|
|
20883
20883
|
if (!best || weight < best.weight) {
|
|
20884
20884
|
best = { selection: { leaf, sequence }, weight };
|
|
@@ -21085,7 +21085,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
21085
21085
|
const txWeightEstimator = TxWeightEstimator.create();
|
|
21086
21086
|
const walletDescriptor = base.hex.encode(await wallet.identity.xOnlyPublicKey());
|
|
21087
21087
|
for (const vtxo of vtxos) {
|
|
21088
|
-
if (!
|
|
21088
|
+
if (!chunkNUIZAUNR_cjs.canSweepOnchain(vtxo)) {
|
|
21089
21089
|
throw new Error(
|
|
21090
21090
|
`Vtxo ${vtxo.txid}:${vtxo.vout} cannot be swept onchain: it is not fully unrolled (use unroll first), or its exit output was already spent`
|
|
21091
21091
|
);
|
|
@@ -21096,14 +21096,14 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
21096
21096
|
}
|
|
21097
21097
|
const resolved = await resolveUnilateralPath({
|
|
21098
21098
|
vtxo,
|
|
21099
|
-
scriptHex: base.hex.encode(
|
|
21099
|
+
scriptHex: base.hex.encode(chunkNUIZAUNR_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
|
|
21100
21100
|
contractRepository: wallet.contractRepository,
|
|
21101
21101
|
walletDescriptor,
|
|
21102
21102
|
currentTime: Date.now()
|
|
21103
21103
|
});
|
|
21104
21104
|
const spendingLeaf = resolved.selection.leaf;
|
|
21105
21105
|
const sequence = resolved.selection.sequence;
|
|
21106
|
-
const timelock =
|
|
21106
|
+
const timelock = chunkNUIZAUNR_cjs.sequenceToTimelock(sequence);
|
|
21107
21107
|
const elapsed = timelock.type === "blocks" ? chainTip.height >= txStatus.blockHeight + Number(timelock.value) : chainTip.time >= txStatus.blockTime + Number(timelock.value);
|
|
21108
21108
|
if (!elapsed) {
|
|
21109
21109
|
throw new Error(`no available exit path found for vtxo ${vtxo.txid}:${vtxo.vout}`);
|
|
@@ -21116,7 +21116,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
21116
21116
|
sequence,
|
|
21117
21117
|
witnessUtxo: {
|
|
21118
21118
|
amount: BigInt(vtxo.value),
|
|
21119
|
-
script:
|
|
21119
|
+
script: chunkNUIZAUNR_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
|
|
21120
21120
|
},
|
|
21121
21121
|
sighashType: btcSigner.SigHash.DEFAULT
|
|
21122
21122
|
});
|
|
@@ -21126,7 +21126,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
21126
21126
|
btcSigner.TaprootControlBlock.encode(spendingLeaf[0]).length
|
|
21127
21127
|
);
|
|
21128
21128
|
}
|
|
21129
|
-
const tx = new
|
|
21129
|
+
const tx = new chunkNUIZAUNR_cjs.Transaction({ version: 2 });
|
|
21130
21130
|
for (const input of inputs) {
|
|
21131
21131
|
tx.addInput(input);
|
|
21132
21132
|
}
|
|
@@ -21209,7 +21209,7 @@ async function buildSignedSweep(params) {
|
|
|
21209
21209
|
`uneconomic vtxo ${vtxo.txid}:${vtxo.vout}: value ${vtxo.value} - fee ${fee} < dust`
|
|
21210
21210
|
);
|
|
21211
21211
|
}
|
|
21212
|
-
const tx = new
|
|
21212
|
+
const tx = new chunkNUIZAUNR_cjs.Transaction({ version: 2 });
|
|
21213
21213
|
tx.addInput({
|
|
21214
21214
|
txid: vtxo.txid,
|
|
21215
21215
|
index: vtxo.vout,
|
|
@@ -21234,7 +21234,7 @@ async function buildSignedSweep(params) {
|
|
|
21234
21234
|
finalScriptWitness: [
|
|
21235
21235
|
tapScriptSig[0][1],
|
|
21236
21236
|
...path.extraWitness,
|
|
21237
|
-
|
|
21237
|
+
chunkNUIZAUNR_cjs.scriptFromTapLeafScript(path.leaf),
|
|
21238
21238
|
btcSigner.TaprootControlBlock.encode(controlBlock)
|
|
21239
21239
|
]
|
|
21240
21240
|
});
|
|
@@ -21264,7 +21264,7 @@ async function resolveFeeRate(opts) {
|
|
|
21264
21264
|
}
|
|
21265
21265
|
async function selectExitVtxos(opts) {
|
|
21266
21266
|
if (!opts.vtxos) return opts.wallet.getVtxos();
|
|
21267
|
-
const res = await
|
|
21267
|
+
const res = await chunkNUIZAUNR_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
|
|
21268
21268
|
const tapTrees = /* @__PURE__ */ new Map();
|
|
21269
21269
|
const out = [];
|
|
21270
21270
|
for (const vtxo of res.vtxos) {
|
|
@@ -21279,7 +21279,7 @@ async function selectExitVtxos(opts) {
|
|
|
21279
21279
|
`no contract registered for vtxo script ${vtxo.script} \u2014 register the contract before exiting`
|
|
21280
21280
|
);
|
|
21281
21281
|
}
|
|
21282
|
-
const handler =
|
|
21282
|
+
const handler = chunk7TSJAQRV_cjs.contractHandlers.get(contract.type);
|
|
21283
21283
|
if (!handler) {
|
|
21284
21284
|
throw new Error(`no contract handler registered for type '${contract.type}'`);
|
|
21285
21285
|
}
|
|
@@ -21309,7 +21309,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
21309
21309
|
if (pendingNodes.length > 0) {
|
|
21310
21310
|
const txs = await resolver.getVirtualTxs(pendingNodes.map((n) => n.txid));
|
|
21311
21311
|
for (const psbt of txs) {
|
|
21312
|
-
psbts.set(
|
|
21312
|
+
psbts.set(chunkNUIZAUNR_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
21313
21313
|
}
|
|
21314
21314
|
}
|
|
21315
21315
|
const childVsize = Number(
|
|
@@ -21337,7 +21337,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
21337
21337
|
try {
|
|
21338
21338
|
const resolved = await resolveUnilateralPath({
|
|
21339
21339
|
vtxo,
|
|
21340
|
-
scriptHex: base.hex.encode(
|
|
21340
|
+
scriptHex: base.hex.encode(chunkNUIZAUNR_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
|
|
21341
21341
|
contractRepository: wallet.contractRepository,
|
|
21342
21342
|
walletDescriptor,
|
|
21343
21343
|
currentTime: Date.now()
|
|
@@ -21356,7 +21356,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
21356
21356
|
});
|
|
21357
21357
|
continue;
|
|
21358
21358
|
}
|
|
21359
|
-
const t =
|
|
21359
|
+
const t = chunkNUIZAUNR_cjs.sequenceToTimelock(resolved.selection.sequence);
|
|
21360
21360
|
const delay = { type: t.type, value: Number(t.value) };
|
|
21361
21361
|
infos.push({ outpoint, value: vtxo.value, sweepFee, path: resolved.label, delay });
|
|
21362
21362
|
sweeps.push({ vtxo, resolved, sweepFee, delay });
|
|
@@ -21757,7 +21757,7 @@ async function prepare(opts) {
|
|
|
21757
21757
|
txid: sweep.vtxo.txid,
|
|
21758
21758
|
vout: sweep.vtxo.vout,
|
|
21759
21759
|
value: sweep.vtxo.value,
|
|
21760
|
-
pkScript:
|
|
21760
|
+
pkScript: chunkNUIZAUNR_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
|
|
21761
21761
|
},
|
|
21762
21762
|
path: sweep.resolved.selection,
|
|
21763
21763
|
outputAddress: opts.sweepAddress,
|
|
@@ -21846,7 +21846,7 @@ async function prepare(opts) {
|
|
|
21846
21846
|
if (newFee <= splitterFee) break;
|
|
21847
21847
|
splitterFee = newFee;
|
|
21848
21848
|
}
|
|
21849
|
-
const splitter = new
|
|
21849
|
+
const splitter = new chunkNUIZAUNR_cjs.Transaction({ version: 2 });
|
|
21850
21850
|
for (const coin of selected.inputs) {
|
|
21851
21851
|
splitter.addInput({
|
|
21852
21852
|
txid: coin.txid,
|
|
@@ -21985,44 +21985,44 @@ var UnilateralExit = {
|
|
|
21985
21985
|
|
|
21986
21986
|
// src/arkade/index.ts
|
|
21987
21987
|
var arkade_exports = {};
|
|
21988
|
-
|
|
21989
|
-
ARKADE_OP: () =>
|
|
21990
|
-
ARKADE_OPCODES: () =>
|
|
21991
|
-
ARKADE_OPCODE_NAMES: () =>
|
|
21992
|
-
ARKADE_OPCODE_VALUES: () =>
|
|
21993
|
-
ARKADE_OPS: () =>
|
|
21988
|
+
chunkNUIZAUNR_cjs.__export(arkade_exports, {
|
|
21989
|
+
ARKADE_OP: () => chunk7TSJAQRV_cjs.ARKADE_OP,
|
|
21990
|
+
ARKADE_OPCODES: () => chunk7TSJAQRV_cjs.ARKADE_OPCODES,
|
|
21991
|
+
ARKADE_OPCODE_NAMES: () => chunk7TSJAQRV_cjs.ARKADE_OPCODE_NAMES,
|
|
21992
|
+
ARKADE_OPCODE_VALUES: () => chunk7TSJAQRV_cjs.ARKADE_OPCODE_VALUES,
|
|
21993
|
+
ARKADE_OPS: () => chunk7TSJAQRV_cjs.ARKADE_OPS,
|
|
21994
21994
|
Arkade: () => Arkade,
|
|
21995
21995
|
ArkadeContract: () => ArkadeContract,
|
|
21996
|
-
ArkadeProgramScript: () =>
|
|
21997
|
-
ArkadeScript: () =>
|
|
21996
|
+
ArkadeProgramScript: () => chunk7TSJAQRV_cjs.ArkadeProgramScript,
|
|
21997
|
+
ArkadeScript: () => chunk7TSJAQRV_cjs.ArkadeScript,
|
|
21998
21998
|
ArkadeTransactionBuilder: () => ArkadeTransactionBuilder,
|
|
21999
|
-
BigNum: () =>
|
|
21999
|
+
BigNum: () => chunk7TSJAQRV_cjs.bignum_exports,
|
|
22000
22000
|
OP: () => btcSigner.OP,
|
|
22001
|
-
OPCODE_NAMES: () =>
|
|
22002
|
-
OPCODE_VALUES: () =>
|
|
22003
|
-
SUPPORTED_PROGRAM_VERSION: () =>
|
|
22001
|
+
OPCODE_NAMES: () => chunk7TSJAQRV_cjs.OPCODE_NAMES,
|
|
22002
|
+
OPCODE_VALUES: () => chunk7TSJAQRV_cjs.OPCODE_VALUES,
|
|
22003
|
+
SUPPORTED_PROGRAM_VERSION: () => chunk7TSJAQRV_cjs.SUPPORTED_PROGRAM_VERSION,
|
|
22004
22004
|
Script: () => btcSigner.Script,
|
|
22005
|
-
arkadeScriptHash: () =>
|
|
22006
|
-
arkadeWitnessHash: () =>
|
|
22007
|
-
asmToBytes: () =>
|
|
22008
|
-
bytesToASM: () =>
|
|
22009
|
-
computeArkadeScriptPublicKey: () =>
|
|
22005
|
+
arkadeScriptHash: () => chunk7TSJAQRV_cjs.arkadeScriptHash,
|
|
22006
|
+
arkadeWitnessHash: () => chunk7TSJAQRV_cjs.arkadeWitnessHash,
|
|
22007
|
+
asmToBytes: () => chunk7TSJAQRV_cjs.asmToBytes,
|
|
22008
|
+
bytesToASM: () => chunk7TSJAQRV_cjs.bytesToASM,
|
|
22009
|
+
computeArkadeScriptPublicKey: () => chunk7TSJAQRV_cjs.computeArkadeScriptPublicKey,
|
|
22010
22010
|
createArkadeBatchHandler: () => createArkadeBatchHandler,
|
|
22011
|
-
deserializeArkadeContractParams: () =>
|
|
22012
|
-
fromASM: () =>
|
|
22013
|
-
getOpcodeName: () =>
|
|
22014
|
-
getOpcodeValue: () =>
|
|
22011
|
+
deserializeArkadeContractParams: () => chunk7TSJAQRV_cjs.deserializeArkadeContractParams,
|
|
22012
|
+
fromASM: () => chunk7TSJAQRV_cjs.fromASM,
|
|
22013
|
+
getOpcodeName: () => chunk7TSJAQRV_cjs.getOpcodeName,
|
|
22014
|
+
getOpcodeValue: () => chunk7TSJAQRV_cjs.getOpcodeValue,
|
|
22015
22015
|
isContractArtifact: () => isContractArtifact,
|
|
22016
|
-
parseArtifact: () =>
|
|
22016
|
+
parseArtifact: () => chunk7TSJAQRV_cjs.parseArtifact,
|
|
22017
22017
|
programFromArtifact: () => programFromArtifact,
|
|
22018
|
-
resolveAsm: () =>
|
|
22019
|
-
serializeArkadeContractParams: () =>
|
|
22020
|
-
stringifyArtifact: () =>
|
|
22021
|
-
toASM: () =>
|
|
22022
|
-
validateProgram: () =>
|
|
22023
|
-
witnessRefToBytes: () =>
|
|
22018
|
+
resolveAsm: () => chunk7TSJAQRV_cjs.resolveAsm,
|
|
22019
|
+
serializeArkadeContractParams: () => chunk7TSJAQRV_cjs.serializeArkadeContractParams,
|
|
22020
|
+
stringifyArtifact: () => chunk7TSJAQRV_cjs.stringifyArtifact,
|
|
22021
|
+
toASM: () => chunk7TSJAQRV_cjs.toASM,
|
|
22022
|
+
validateProgram: () => chunk7TSJAQRV_cjs.validateProgram,
|
|
22023
|
+
witnessRefToBytes: () => chunk7TSJAQRV_cjs.witnessRefToBytes
|
|
22024
22024
|
});
|
|
22025
|
-
var isVtxoCoin = (input) =>
|
|
22025
|
+
var isVtxoCoin = (input) => chunkNUIZAUNR_cjs.isVirtualCoin(input);
|
|
22026
22026
|
function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message, session, arkProvider, emulator, network, recipients, batchExpiryPolicy) {
|
|
22027
22027
|
let batchId;
|
|
22028
22028
|
let sweepTapTreeRoot;
|
|
@@ -22043,23 +22043,23 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
22043
22043
|
);
|
|
22044
22044
|
await arkProvider.confirmRegistration(intentId);
|
|
22045
22045
|
batchId = event.id;
|
|
22046
|
-
const sweepTapscript =
|
|
22046
|
+
const sweepTapscript = chunkNUIZAUNR_cjs.CSVMultisigTapscript.encode({
|
|
22047
22047
|
timelock,
|
|
22048
|
-
pubkeys: [
|
|
22048
|
+
pubkeys: [chunk7TSJAQRV_cjs.toXOnly(base.hex.decode(info.forfeitPubkey), "forfeit key")]
|
|
22049
22049
|
}).script;
|
|
22050
22050
|
sweepTapTreeRoot = payment_js.tapLeafHash(sweepTapscript);
|
|
22051
22051
|
return { skip: false };
|
|
22052
22052
|
},
|
|
22053
22053
|
onTreeSigningStarted: async (event, vtxoTree) => {
|
|
22054
22054
|
const signerPubKey = await session.getPublicKey();
|
|
22055
|
-
const xonlySignerPubKey =
|
|
22055
|
+
const xonlySignerPubKey = chunk7TSJAQRV_cjs.toXOnly(signerPubKey, "signer key");
|
|
22056
22056
|
const xOnlyPubkeys = event.cosignersPublicKeys.map(
|
|
22057
|
-
(k) => base.hex.encode(
|
|
22057
|
+
(k) => base.hex.encode(chunk7TSJAQRV_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
|
|
22058
22058
|
);
|
|
22059
22059
|
if (!xOnlyPubkeys.includes(base.hex.encode(xonlySignerPubKey))) {
|
|
22060
22060
|
return { skip: true };
|
|
22061
22061
|
}
|
|
22062
|
-
const commitmentTx =
|
|
22062
|
+
const commitmentTx = chunkNUIZAUNR_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
|
|
22063
22063
|
validateVtxoTxGraph(vtxoTree, commitmentTx, sweepTapTreeRoot);
|
|
22064
22064
|
if (recipients && recipients.length > 0) {
|
|
22065
22065
|
validateBatchRecipients(commitmentTx, vtxoTree.leaves(), recipients, network);
|
|
@@ -22097,7 +22097,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
22097
22097
|
if (connectorTree) {
|
|
22098
22098
|
validateConnectorsTxGraph(event.commitmentTx, connectorTree);
|
|
22099
22099
|
}
|
|
22100
|
-
let commitmentPsbt =
|
|
22100
|
+
let commitmentPsbt = chunkNUIZAUNR_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
|
|
22101
22101
|
assertFinalCommitmentMatchesValidated(
|
|
22102
22102
|
commitmentPsbt,
|
|
22103
22103
|
validatedCommitmentTxid,
|
|
@@ -22139,7 +22139,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
22139
22139
|
boardingIndices.push(boardingIdx);
|
|
22140
22140
|
continue;
|
|
22141
22141
|
}
|
|
22142
|
-
if (!
|
|
22142
|
+
if (!chunkNUIZAUNR_cjs.requiresForfeit(input) || isSubdust(input, info.dust)) {
|
|
22143
22143
|
continue;
|
|
22144
22144
|
}
|
|
22145
22145
|
if (connectorIndex >= connectorLeaves.length) {
|
|
@@ -22160,7 +22160,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
22160
22160
|
index: input.vout,
|
|
22161
22161
|
witnessUtxo: {
|
|
22162
22162
|
amount: BigInt(input.value),
|
|
22163
|
-
script:
|
|
22163
|
+
script: chunkNUIZAUNR_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
22164
22164
|
},
|
|
22165
22165
|
sighashType: btcSigner.SigHash.DEFAULT,
|
|
22166
22166
|
tapLeafScript: [input.forfeitTapLeafScript]
|
|
@@ -22305,7 +22305,7 @@ function flatten(param, structs, stack = []) {
|
|
|
22305
22305
|
function opcodeToken(token) {
|
|
22306
22306
|
const base = token.slice(3);
|
|
22307
22307
|
const name = base === "0" || /^([1-9]|1[0-6])$/.test(base) ? token : base;
|
|
22308
|
-
if (!Object.hasOwn(
|
|
22308
|
+
if (!Object.hasOwn(chunk7TSJAQRV_cjs.ARKADE_OPS, name)) {
|
|
22309
22309
|
fail(`opcode '${token}' is not in this SDK's table`);
|
|
22310
22310
|
}
|
|
22311
22311
|
return name;
|
|
@@ -22352,8 +22352,8 @@ function providedWitness(witness) {
|
|
|
22352
22352
|
}
|
|
22353
22353
|
function csvTimelock(leafName, operand) {
|
|
22354
22354
|
if (typeof operand === "string") return { type: "blocks", value: operand };
|
|
22355
|
-
const timelock = operand >= 0n && operand < 0x80000000n ?
|
|
22356
|
-
if (!timelock || BigInt(
|
|
22355
|
+
const timelock = operand >= 0n && operand < 0x80000000n ? chunkNUIZAUNR_cjs.sequenceToTimelock(Number(operand)) : void 0;
|
|
22356
|
+
if (!timelock || BigInt(chunkNUIZAUNR_cjs.timelockToSequence(timelock)) !== operand) {
|
|
22357
22357
|
fail(`leaf '${leafName}': CSV literal ${operand} is not a canonical BIP68 sequence`);
|
|
22358
22358
|
}
|
|
22359
22359
|
return timelock;
|
|
@@ -22471,7 +22471,7 @@ function programFromArtifact(artifact) {
|
|
|
22471
22471
|
const paramNames = /* @__PURE__ */ new Set();
|
|
22472
22472
|
for (const param of params) claim(paramNames, param.name, "program parameter");
|
|
22473
22473
|
return {
|
|
22474
|
-
version:
|
|
22474
|
+
version: chunk7TSJAQRV_cjs.SUPPORTED_PROGRAM_VERSION,
|
|
22475
22475
|
name: artifact.contractName,
|
|
22476
22476
|
params,
|
|
22477
22477
|
functions
|
|
@@ -22512,16 +22512,16 @@ var Arkade = class _Arkade {
|
|
|
22512
22512
|
/** Connect and resolve the server key, checkpoint closure and (if present) the co-signer key. */
|
|
22513
22513
|
static async connect(opts) {
|
|
22514
22514
|
const info = await opts.arkade.getInfo();
|
|
22515
|
-
const serverKey =
|
|
22516
|
-
const checkpoint =
|
|
22517
|
-
const network = opts.network ?? (Object.hasOwn(
|
|
22515
|
+
const serverKey = chunk7TSJAQRV_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
|
|
22516
|
+
const checkpoint = chunkNUIZAUNR_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
|
|
22517
|
+
const network = opts.network ?? (Object.hasOwn(chunkNUIZAUNR_cjs.networks, info.network) ? chunkNUIZAUNR_cjs.getNetwork(info.network) : chunkNUIZAUNR_cjs.DEFAULT_NETWORK);
|
|
22518
22518
|
let emulatorKey;
|
|
22519
22519
|
if (opts.emulator) {
|
|
22520
|
-
emulatorKey = base.hex.decode(
|
|
22520
|
+
emulatorKey = base.hex.decode(chunkNUIZAUNR_cjs.resolveEmulatorPubkey(network, opts.emulatorPubkey));
|
|
22521
22521
|
}
|
|
22522
22522
|
let userKey;
|
|
22523
22523
|
if (opts.identity) {
|
|
22524
|
-
userKey =
|
|
22524
|
+
userKey = chunk7TSJAQRV_cjs.toXOnly(await opts.identity.xOnlyPublicKey(), "identity key");
|
|
22525
22525
|
}
|
|
22526
22526
|
return new _Arkade({
|
|
22527
22527
|
arkProvider: opts.arkade,
|
|
@@ -22544,7 +22544,7 @@ var Arkade = class _Arkade {
|
|
|
22544
22544
|
* explicit args win.
|
|
22545
22545
|
*/
|
|
22546
22546
|
contract(program, args = {}) {
|
|
22547
|
-
const declared = (program.params ?? []).map(
|
|
22547
|
+
const declared = (program.params ?? []).map(chunk7TSJAQRV_cjs.inputName);
|
|
22548
22548
|
if (declared.includes("server") && args.server === void 0) {
|
|
22549
22549
|
args = { ...args, server: this.serverKey };
|
|
22550
22550
|
}
|
|
@@ -22564,7 +22564,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
22564
22564
|
userKey: client.userKey,
|
|
22565
22565
|
emulatorKey: client.emulatorKey
|
|
22566
22566
|
};
|
|
22567
|
-
this.vtxoScript = new
|
|
22567
|
+
this.vtxoScript = new chunk7TSJAQRV_cjs.ArkadeProgramScript(program, args, this.keys);
|
|
22568
22568
|
this.tapTree = this.vtxoScript.encode();
|
|
22569
22569
|
this.compiled = this.vtxoScript.compiled;
|
|
22570
22570
|
}
|
|
@@ -22589,7 +22589,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
22589
22589
|
`ArkadeContract.fromContract: expected contract type 'arkade', got '${contract.type}'`
|
|
22590
22590
|
);
|
|
22591
22591
|
}
|
|
22592
|
-
const typed =
|
|
22592
|
+
const typed = chunk7TSJAQRV_cjs.deserializeArkadeContractParams(contract.params);
|
|
22593
22593
|
return new _ArkadeContract(client, typed.program, typed.args, {
|
|
22594
22594
|
serverKey: typed.serverKey,
|
|
22595
22595
|
userKey: typed.userKey,
|
|
@@ -22625,7 +22625,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
22625
22625
|
toContractParams() {
|
|
22626
22626
|
return {
|
|
22627
22627
|
type: "arkade",
|
|
22628
|
-
params:
|
|
22628
|
+
params: chunk7TSJAQRV_cjs.serializeArkadeContractParams({
|
|
22629
22629
|
program: this.program,
|
|
22630
22630
|
args: this.args,
|
|
22631
22631
|
serverKey: this.keys.serverKey,
|
|
@@ -22665,17 +22665,17 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
22665
22665
|
const [registered] = await manager.getContracts({ script: scriptHex });
|
|
22666
22666
|
if (registered) {
|
|
22667
22667
|
const [withVtxos] = await manager.getContractsWithVtxos({ script: scriptHex });
|
|
22668
|
-
return (withVtxos?.vtxos ?? []).filter((v) => !
|
|
22668
|
+
return (withVtxos?.vtxos ?? []).filter((v) => !chunkNUIZAUNR_cjs.isVtxoSpent(v) && !v.isUnrolled);
|
|
22669
22669
|
}
|
|
22670
22670
|
}
|
|
22671
22671
|
if (!this.client.indexer) {
|
|
22672
22672
|
throw new Error("ArkadeContract.getUtxos: an indexer is required");
|
|
22673
22673
|
}
|
|
22674
|
-
const { vtxos } = await
|
|
22674
|
+
const { vtxos } = await chunkNUIZAUNR_cjs.getNormalizedVtxos(this.client.indexer, {
|
|
22675
22675
|
scripts: [scriptHex],
|
|
22676
22676
|
spendableOnly: true
|
|
22677
22677
|
});
|
|
22678
|
-
return vtxos.filter((v) => !
|
|
22678
|
+
return vtxos.filter((v) => !chunkNUIZAUNR_cjs.isVtxoSpent(v) && !v.isUnrolled);
|
|
22679
22679
|
}
|
|
22680
22680
|
/** Total spendable balance (requires an indexer). */
|
|
22681
22681
|
async getBalance() {
|
|
@@ -22773,7 +22773,7 @@ var ArkadeTransactionBuilder = class {
|
|
|
22773
22773
|
this.contract.client.checkpoint
|
|
22774
22774
|
);
|
|
22775
22775
|
if (coin.sourceTx) {
|
|
22776
|
-
|
|
22776
|
+
chunkNUIZAUNR_cjs.setArkPsbtField(arkTx, 0, chunkNUIZAUNR_cjs.PrevArkTxField, coin.sourceTx);
|
|
22777
22777
|
}
|
|
22778
22778
|
if (this.fn.arkadeScript) {
|
|
22779
22779
|
const indexer = this.contract.client.indexer;
|
|
@@ -22790,8 +22790,8 @@ var ArkadeTransactionBuilder = class {
|
|
|
22790
22790
|
}
|
|
22791
22791
|
const condition = (def.tapscript.witness ?? []).map((w) => this.witnessBytes(w));
|
|
22792
22792
|
if (condition.length > 0) {
|
|
22793
|
-
|
|
22794
|
-
|
|
22793
|
+
chunkNUIZAUNR_cjs.setArkPsbtField(arkTx, 0, chunkNUIZAUNR_cjs.ConditionWitness, condition);
|
|
22794
|
+
chunkNUIZAUNR_cjs.setArkPsbtField(checkpoints[0], 0, chunkNUIZAUNR_cjs.ConditionWitness, condition);
|
|
22795
22795
|
}
|
|
22796
22796
|
const packets = [];
|
|
22797
22797
|
if (this.assetSpecs.length > 0) {
|
|
@@ -22830,7 +22830,7 @@ var ArkadeTransactionBuilder = class {
|
|
|
22830
22830
|
base.base64.encode(signedArk2.toPSBT()),
|
|
22831
22831
|
signedCps.map((c) => base.base64.encode(c.toPSBT()))
|
|
22832
22832
|
);
|
|
22833
|
-
const txid =
|
|
22833
|
+
const txid = chunkNUIZAUNR_cjs.Transaction.fromPSBT(base.base64.decode(res2.signedArkTx)).id;
|
|
22834
22834
|
return {
|
|
22835
22835
|
txid,
|
|
22836
22836
|
signedArkTx: res2.signedArkTx,
|
|
@@ -22895,23 +22895,23 @@ var ArkadeTransactionBuilder = class {
|
|
|
22895
22895
|
}
|
|
22896
22896
|
buildAssetPacket() {
|
|
22897
22897
|
const groups = this.assetSpecs.map((s) => {
|
|
22898
|
-
const id = typeof s.assetId === "string" ?
|
|
22899
|
-
return
|
|
22898
|
+
const id = typeof s.assetId === "string" ? chunkJEJJYYYJ_cjs.AssetId.fromString(s.assetId) : chunkJEJJYYYJ_cjs.AssetId.fromBytes(s.assetId);
|
|
22899
|
+
return chunkJEJJYYYJ_cjs.AssetGroup.create(
|
|
22900
22900
|
id,
|
|
22901
22901
|
null,
|
|
22902
|
-
s.inputs.map((i) =>
|
|
22903
|
-
s.outputs.map((o) =>
|
|
22904
|
-
(s.metadata ?? []).map((m) =>
|
|
22902
|
+
s.inputs.map((i) => chunkJEJJYYYJ_cjs.AssetInput.create(i.vin, i.amount)),
|
|
22903
|
+
s.outputs.map((o) => chunkJEJJYYYJ_cjs.AssetOutput.create(o.vout, o.amount)),
|
|
22904
|
+
(s.metadata ?? []).map((m) => chunkJEJJYYYJ_cjs.Metadata.create(m.key, m.value))
|
|
22905
22905
|
);
|
|
22906
22906
|
});
|
|
22907
|
-
return
|
|
22907
|
+
return chunkJEJJYYYJ_cjs.Packet.create(groups);
|
|
22908
22908
|
}
|
|
22909
22909
|
witnessBytes(ref) {
|
|
22910
|
-
return
|
|
22910
|
+
return chunk7TSJAQRV_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
|
|
22911
22911
|
}
|
|
22912
22912
|
};
|
|
22913
22913
|
function bindInputs(fn, callArgs) {
|
|
22914
|
-
const names = (fn.def.inputs ?? []).map(
|
|
22914
|
+
const names = (fn.def.inputs ?? []).map(chunk7TSJAQRV_cjs.inputName);
|
|
22915
22915
|
if (callArgs.length !== names.length) {
|
|
22916
22916
|
throw new Error(`${fn.name}: expected ${names.length} argument(s), got ${callArgs.length}`);
|
|
22917
22917
|
}
|
|
@@ -23325,17 +23325,17 @@ var walletFeeSource = (wallet) => async () => (await wallet.arkProvider.getInfo(
|
|
|
23325
23325
|
function offchainInputFees(vtxos, fees) {
|
|
23326
23326
|
const estimator = new Estimator(fees?.intentFee ?? {});
|
|
23327
23327
|
return vtxos.reduce(
|
|
23328
|
-
(total, vtxo) => total + estimator.evalOffchainInput(
|
|
23328
|
+
(total, vtxo) => total + estimator.evalOffchainInput(chunkNUIZAUNR_cjs.toOffchainInputFeeParams(vtxo)).satoshis,
|
|
23329
23329
|
0
|
|
23330
23330
|
);
|
|
23331
23331
|
}
|
|
23332
23332
|
async function changeOutputFee(wallet, inputs, needed, fees) {
|
|
23333
23333
|
const estimator = new Estimator(fees?.intentFee ?? {});
|
|
23334
23334
|
const net = inputs.reduce(
|
|
23335
|
-
(total, vtxo) => total + BigInt(vtxo.value) - BigInt(estimator.evalOffchainInput(
|
|
23335
|
+
(total, vtxo) => total + BigInt(vtxo.value) - BigInt(estimator.evalOffchainInput(chunkNUIZAUNR_cjs.toOffchainInputFeeParams(vtxo)).satoshis),
|
|
23336
23336
|
0n
|
|
23337
23337
|
);
|
|
23338
|
-
const script = base.hex.encode(
|
|
23338
|
+
const script = base.hex.encode(chunkNUIZAUNR_cjs.ArkAddress.decode(await wallet.getAddress()).pkScript);
|
|
23339
23339
|
return changeAfterOutputFee(
|
|
23340
23340
|
net - needed,
|
|
23341
23341
|
(amount) => BigInt(estimator.evalOffchainOutput({ amount, script }).satoshis)
|
|
@@ -23635,5 +23635,5 @@ exports.waitForIncomingFunds = waitForIncomingFunds;
|
|
|
23635
23635
|
exports.walletFeeSource = walletFeeSource;
|
|
23636
23636
|
exports.warnAndFilterVtxosForScript = warnAndFilterVtxosForScript;
|
|
23637
23637
|
exports.withPrevTxs = withPrevTxs;
|
|
23638
|
-
//# sourceMappingURL=chunk-
|
|
23639
|
-
//# sourceMappingURL=chunk-
|
|
23638
|
+
//# sourceMappingURL=chunk-OUX4QYWG.cjs.map
|
|
23639
|
+
//# sourceMappingURL=chunk-OUX4QYWG.cjs.map
|