@arkade-os/sdk 0.4.56 → 0.4.57
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/expo.cjs +5 -5
- package/dist/adapters/expo.d.cts +2 -2
- package/dist/adapters/expo.d.ts +2 -2
- package/dist/adapters/expo.js +3 -3
- package/dist/adapters/indexedDB.cjs +5 -5
- package/dist/adapters/indexedDB.js +4 -4
- package/dist/{ark-Cgsd9tMd.d.cts → ark-CJgH_pmn.d.cts} +20 -1
- package/dist/{ark-Cgsd9tMd.d.ts → ark-CJgH_pmn.d.ts} +20 -1
- package/dist/{asyncStorageTaskQueue-CXz4PRBW.d.ts → asyncStorageTaskQueue-BeeZbf-Q.d.ts} +2 -2
- package/dist/{asyncStorageTaskQueue-C0ZsDE60.d.cts → asyncStorageTaskQueue-BlrsUUX_.d.cts} +2 -2
- package/dist/{chunk-IMVKQQHU.cjs → chunk-A7TOVUYG.cjs} +9 -9
- package/dist/{chunk-IMVKQQHU.cjs.map → chunk-A7TOVUYG.cjs.map} +1 -1
- package/dist/{chunk-NN7BNNF5.js → chunk-ASUJNZ63.js} +3 -3
- package/dist/{chunk-NN7BNNF5.js.map → chunk-ASUJNZ63.js.map} +1 -1
- package/dist/{chunk-5IMBONCK.js → chunk-C4SVRVNM.js} +4 -4
- package/dist/{chunk-5IMBONCK.js.map → chunk-C4SVRVNM.js.map} +1 -1
- package/dist/{chunk-VNDVUM2W.js → chunk-CPS7V4A3.js} +4 -4
- package/dist/{chunk-VNDVUM2W.js.map → chunk-CPS7V4A3.js.map} +1 -1
- package/dist/{chunk-MXPBHDOI.cjs → chunk-EZBKSWEL.cjs} +17 -17
- package/dist/{chunk-MXPBHDOI.cjs.map → chunk-EZBKSWEL.cjs.map} +1 -1
- package/dist/{chunk-ENRRZFZ4.cjs → chunk-KEG4AAKX.cjs} +511 -409
- package/dist/chunk-KEG4AAKX.cjs.map +1 -0
- package/dist/{chunk-CDWLZQQW.cjs → chunk-KUN5ZRMW.cjs} +4 -3
- package/dist/chunk-KUN5ZRMW.cjs.map +1 -0
- package/dist/{chunk-T22257HW.js → chunk-NIZPFPUM.js} +136 -44
- package/dist/chunk-NIZPFPUM.js.map +1 -0
- package/dist/{chunk-37XKN5DZ.cjs → chunk-OWTKOMJZ.cjs} +40 -40
- package/dist/{chunk-37XKN5DZ.cjs.map → chunk-OWTKOMJZ.cjs.map} +1 -1
- package/dist/{chunk-OOPDT2WV.js → chunk-P6L2W5IL.js} +3 -3
- package/dist/{chunk-OOPDT2WV.js.map → chunk-P6L2W5IL.js.map} +1 -1
- package/dist/{chunk-IFGN2GB2.js → chunk-PUNBWFIV.js} +4 -3
- package/dist/chunk-PUNBWFIV.js.map +1 -0
- package/dist/{chunk-24YNIQSW.cjs → chunk-YK6NP5KX.cjs} +15 -15
- package/dist/{chunk-24YNIQSW.cjs.map → chunk-YK6NP5KX.cjs.map} +1 -1
- package/dist/contracts/handlers/index.cjs +8 -8
- package/dist/contracts/handlers/index.d.cts +3 -3
- package/dist/contracts/handlers/index.d.ts +3 -3
- package/dist/contracts/handlers/index.js +2 -2
- package/dist/{delegate-CZPXtd2F.d.ts → delegate-DM3YECSY.d.ts} +1 -1
- package/dist/{delegate-xXT8O-Kn.d.cts → delegate-Dk-OJVdf.d.cts} +1 -1
- package/dist/{index-BYG2eKOA.d.cts → index-Cig0RkTf.d.cts} +2 -2
- package/dist/{index-BBJ466mM.d.ts → index-CnE7Gnvb.d.ts} +2 -2
- package/dist/index.cjs +253 -213
- package/dist/index.d.cts +12 -10
- package/dist/index.d.ts +12 -10
- package/dist/index.js +4 -4
- package/dist/repositories/realm/index.cjs +19 -19
- package/dist/repositories/realm/index.d.cts +2 -2
- package/dist/repositories/realm/index.d.ts +2 -2
- package/dist/repositories/realm/index.js +5 -5
- package/dist/repositories/sqlite/index.cjs +18 -18
- package/dist/repositories/sqlite/index.d.cts +2 -2
- package/dist/repositories/sqlite/index.d.ts +2 -2
- package/dist/repositories/sqlite/index.js +5 -5
- package/dist/{taskRunner-BG1PRFps.d.cts → taskRunner-CnGSTaAJ.d.cts} +2 -2
- package/dist/{taskRunner-C46NnRsY.d.ts → taskRunner-F7tWzsrC.d.ts} +2 -2
- package/dist/wallet/expo/background.cjs +14 -14
- package/dist/wallet/expo/background.d.cts +3 -3
- package/dist/wallet/expo/background.d.ts +3 -3
- package/dist/wallet/expo/background.js +6 -6
- package/dist/wallet/expo/index.cjs +14 -14
- package/dist/wallet/expo/index.d.cts +4 -4
- package/dist/wallet/expo/index.d.ts +4 -4
- package/dist/wallet/expo/index.js +5 -5
- package/dist/{wallet-DuCm55EC.d.ts → wallet-D6_S0n6B.d.ts} +107 -4
- package/dist/{wallet-1yWg75gN.d.cts → wallet-DvRIQBBY.d.cts} +107 -4
- package/dist/worker/expo/index.cjs +9 -9
- package/dist/worker/expo/index.d.cts +4 -4
- package/dist/worker/expo/index.d.ts +4 -4
- package/dist/worker/expo/index.js +5 -5
- package/package.json +1 -1
- package/dist/chunk-CDWLZQQW.cjs.map +0 -1
- package/dist/chunk-ENRRZFZ4.cjs.map +0 -1
- package/dist/chunk-IFGN2GB2.js.map +0 -1
- package/dist/chunk-T22257HW.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunkYK6NP5KX_cjs = require('./chunk-YK6NP5KX.cjs');
|
|
4
|
+
var chunkOWTKOMJZ_cjs = require('./chunk-OWTKOMJZ.cjs');
|
|
5
|
+
var chunkKUN5ZRMW_cjs = require('./chunk-KUN5ZRMW.cjs');
|
|
6
6
|
var chunk5BLDMQED_cjs = require('./chunk-5BLDMQED.cjs');
|
|
7
7
|
var utils_js = require('@scure/btc-signer/utils.js');
|
|
8
8
|
var btcSigner = require('@scure/btc-signer');
|
|
@@ -188,7 +188,7 @@ var TreeSignerSession = class _TreeSignerSession {
|
|
|
188
188
|
noncesByPubkey.set(base.hex.encode(myPublicKey.subarray(1)), myNonce);
|
|
189
189
|
const tx = this.graph.find(txid);
|
|
190
190
|
if (!tx) throw new Error(`missing tx for txid ${txid}`);
|
|
191
|
-
const cosigners =
|
|
191
|
+
const cosigners = chunkKUN5ZRMW_cjs.getArkPsbtFields(tx.root, 0, chunkKUN5ZRMW_cjs.CosignerPublicKey).map(
|
|
192
192
|
(c) => base.hex.encode(c.key.subarray(1))
|
|
193
193
|
// xonly pubkey
|
|
194
194
|
);
|
|
@@ -240,7 +240,7 @@ var TreeSignerSession = class _TreeSignerSession {
|
|
|
240
240
|
if (!aggNonce) throw new Error("missing aggregate nonce");
|
|
241
241
|
const prevoutAmounts = [];
|
|
242
242
|
const prevoutScripts = [];
|
|
243
|
-
const cosigners =
|
|
243
|
+
const cosigners = chunkKUN5ZRMW_cjs.getArkPsbtFields(g.root, 0, chunkKUN5ZRMW_cjs.CosignerPublicKey).map((c) => c.key);
|
|
244
244
|
const { finalKey } = aggregateKeys(cosigners, true, {
|
|
245
245
|
taprootTweak: this.scriptRoot
|
|
246
246
|
});
|
|
@@ -419,7 +419,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
419
419
|
let network;
|
|
420
420
|
if ("descriptor" in opts && typeof opts.descriptor === "string") {
|
|
421
421
|
descriptor = opts.descriptor;
|
|
422
|
-
network =
|
|
422
|
+
network = chunkOWTKOMJZ_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
423
423
|
} else {
|
|
424
424
|
network = opts.isMainnet ?? true ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
425
425
|
descriptor = descriptorsScure.scriptExpressions.trBIP32({
|
|
@@ -504,7 +504,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
504
504
|
* `StaticDescriptorProvider` for legacy single-key wallets.
|
|
505
505
|
*/
|
|
506
506
|
isOurs(descriptor) {
|
|
507
|
-
return
|
|
507
|
+
return chunkOWTKOMJZ_cjs.descriptorIsOurs(descriptor, this.descriptor, utils_js.pubSchnorr(this.derivedKey));
|
|
508
508
|
}
|
|
509
509
|
/**
|
|
510
510
|
* Signs each request with the key derived from its descriptor.
|
|
@@ -553,7 +553,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
553
553
|
}
|
|
554
554
|
// ── internal helpers ─────────────────────────────────────────────
|
|
555
555
|
derivePrivateKeyForDescriptor(descriptor) {
|
|
556
|
-
const network =
|
|
556
|
+
const network = chunkOWTKOMJZ_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
557
557
|
const expansion = descriptorsScure.expand({ descriptor, network });
|
|
558
558
|
if (expansion.isRanged) {
|
|
559
559
|
throw new Error(
|
|
@@ -639,7 +639,7 @@ var ReadonlyDescriptorIdentity = class _ReadonlyDescriptorIdentity {
|
|
|
639
639
|
*/
|
|
640
640
|
descriptor;
|
|
641
641
|
constructor(descriptor) {
|
|
642
|
-
const network =
|
|
642
|
+
const network = chunkOWTKOMJZ_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
643
643
|
let expansion;
|
|
644
644
|
try {
|
|
645
645
|
expansion = descriptorsScure.expand({ descriptor, network, index: 0 });
|
|
@@ -689,7 +689,7 @@ var ReadonlyDescriptorIdentity = class _ReadonlyDescriptorIdentity {
|
|
|
689
689
|
* `StaticDescriptorProvider` for legacy single-key wallets.
|
|
690
690
|
*/
|
|
691
691
|
isOurs(descriptor) {
|
|
692
|
-
return
|
|
692
|
+
return chunkOWTKOMJZ_cjs.descriptorIsOurs(descriptor, this.descriptor, this.indexZero.pubkey);
|
|
693
693
|
}
|
|
694
694
|
};
|
|
695
695
|
function serializeSeedOwnedSigningIdentity(identity) {
|
|
@@ -851,10 +851,10 @@ var DescriptorIdentity = class {
|
|
|
851
851
|
this.base = base;
|
|
852
852
|
}
|
|
853
853
|
async xOnlyPublicKey() {
|
|
854
|
-
return
|
|
854
|
+
return chunkOWTKOMJZ_cjs.deriveDescriptorLeafPubKey(this.descriptor);
|
|
855
855
|
}
|
|
856
856
|
async compressedPublicKey() {
|
|
857
|
-
return
|
|
857
|
+
return chunkOWTKOMJZ_cjs.deriveDescriptorLeafCompressedPubKey(this.descriptor);
|
|
858
858
|
}
|
|
859
859
|
async sign(tx, inputIndexes) {
|
|
860
860
|
const [signed] = await this.signer.signWithDescriptor([
|
|
@@ -1061,14 +1061,14 @@ var RestDelegateProvider = class {
|
|
|
1061
1061
|
*/
|
|
1062
1062
|
async delegate(intent, forfeitTxs, options) {
|
|
1063
1063
|
const url = `${this.url}/v1/delegate`;
|
|
1064
|
-
const response = await
|
|
1064
|
+
const response = await chunkKUN5ZRMW_cjs.baseFetch(url, {
|
|
1065
1065
|
method: "POST",
|
|
1066
1066
|
headers: {
|
|
1067
1067
|
"Content-Type": "application/json"
|
|
1068
1068
|
},
|
|
1069
1069
|
body: JSON.stringify({
|
|
1070
1070
|
intent: {
|
|
1071
|
-
message:
|
|
1071
|
+
message: chunkKUN5ZRMW_cjs.Intent.encodeMessage(intent.message),
|
|
1072
1072
|
proof: intent.proof
|
|
1073
1073
|
},
|
|
1074
1074
|
forfeit_txs: forfeitTxs,
|
|
@@ -1088,7 +1088,7 @@ var RestDelegateProvider = class {
|
|
|
1088
1088
|
*/
|
|
1089
1089
|
async getDelegateInfo() {
|
|
1090
1090
|
const url = `${this.url}/v1/delegator/info`;
|
|
1091
|
-
const response = await
|
|
1091
|
+
const response = await chunkKUN5ZRMW_cjs.rateGate.runHttp(url, () => chunkKUN5ZRMW_cjs.baseFetch(url));
|
|
1092
1092
|
if (!response.ok) {
|
|
1093
1093
|
const errorText2 = await response.text();
|
|
1094
1094
|
throw new Error(`Failed to get delegate info: ${errorText2}`);
|
|
@@ -1115,7 +1115,7 @@ var ESPLORA_URL = {
|
|
|
1115
1115
|
regtest: "http://localhost:3000/api"
|
|
1116
1116
|
};
|
|
1117
1117
|
var EsploraProvider = class {
|
|
1118
|
-
constructor(baseUrl = ESPLORA_URL[
|
|
1118
|
+
constructor(baseUrl = ESPLORA_URL[chunkKUN5ZRMW_cjs.DEFAULT_NETWORK_NAME], opts) {
|
|
1119
1119
|
this.baseUrl = baseUrl;
|
|
1120
1120
|
this.pollingInterval = opts?.pollingInterval ?? 15e3;
|
|
1121
1121
|
this.forcePolling = opts?.forcePolling ?? false;
|
|
@@ -1124,14 +1124,14 @@ var EsploraProvider = class {
|
|
|
1124
1124
|
pollingInterval;
|
|
1125
1125
|
forcePolling;
|
|
1126
1126
|
async getCoins(address) {
|
|
1127
|
-
const response = await
|
|
1127
|
+
const response = await chunkKUN5ZRMW_cjs.baseFetch(`${this.baseUrl}/address/${address}/utxo`);
|
|
1128
1128
|
if (!response.ok) {
|
|
1129
1129
|
throw new Error(`Failed to fetch UTXOs: ${response.statusText}`);
|
|
1130
1130
|
}
|
|
1131
1131
|
return response.json();
|
|
1132
1132
|
}
|
|
1133
1133
|
async getFeeRate() {
|
|
1134
|
-
const response = await
|
|
1134
|
+
const response = await chunkKUN5ZRMW_cjs.baseFetch(`${this.baseUrl}/fee-estimates`);
|
|
1135
1135
|
if (response.status === 404) {
|
|
1136
1136
|
return void 0;
|
|
1137
1137
|
}
|
|
@@ -1152,7 +1152,7 @@ var EsploraProvider = class {
|
|
|
1152
1152
|
}
|
|
1153
1153
|
}
|
|
1154
1154
|
async getTxOutspends(txid) {
|
|
1155
|
-
const response = await
|
|
1155
|
+
const response = await chunkKUN5ZRMW_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/outspends`);
|
|
1156
1156
|
if (!response.ok) {
|
|
1157
1157
|
const error = await response.text();
|
|
1158
1158
|
throw new Error(`Failed to get transaction outspends: ${error}`);
|
|
@@ -1160,7 +1160,7 @@ var EsploraProvider = class {
|
|
|
1160
1160
|
return response.json();
|
|
1161
1161
|
}
|
|
1162
1162
|
async getTransactions(address) {
|
|
1163
|
-
const response = await
|
|
1163
|
+
const response = await chunkKUN5ZRMW_cjs.baseFetch(`${this.baseUrl}/address/${address}/txs`);
|
|
1164
1164
|
if (!response.ok) {
|
|
1165
1165
|
const error = await response.text();
|
|
1166
1166
|
throw new Error(`Failed to get transactions: ${error}`);
|
|
@@ -1168,7 +1168,7 @@ var EsploraProvider = class {
|
|
|
1168
1168
|
return response.json();
|
|
1169
1169
|
}
|
|
1170
1170
|
async getTxStatus(txid) {
|
|
1171
|
-
const txresponse = await
|
|
1171
|
+
const txresponse = await chunkKUN5ZRMW_cjs.baseFetch(`${this.baseUrl}/tx/${txid}`);
|
|
1172
1172
|
if (!txresponse.ok) {
|
|
1173
1173
|
throw new Error(txresponse.statusText);
|
|
1174
1174
|
}
|
|
@@ -1176,7 +1176,7 @@ var EsploraProvider = class {
|
|
|
1176
1176
|
if (!tx.status.confirmed) {
|
|
1177
1177
|
return { confirmed: false };
|
|
1178
1178
|
}
|
|
1179
|
-
const response = await
|
|
1179
|
+
const response = await chunkKUN5ZRMW_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/status`);
|
|
1180
1180
|
if (!response.ok) {
|
|
1181
1181
|
throw new Error(`Failed to get transaction status: ${response.statusText}`);
|
|
1182
1182
|
}
|
|
@@ -1260,7 +1260,7 @@ var EsploraProvider = class {
|
|
|
1260
1260
|
return stopFunc;
|
|
1261
1261
|
}
|
|
1262
1262
|
async getChainTip() {
|
|
1263
|
-
const tipBlocks = await
|
|
1263
|
+
const tipBlocks = await chunkKUN5ZRMW_cjs.baseFetch(`${this.baseUrl}/blocks`);
|
|
1264
1264
|
if (!tipBlocks.ok) {
|
|
1265
1265
|
throw new Error(`Failed to get chain tip: ${tipBlocks.statusText}`);
|
|
1266
1266
|
}
|
|
@@ -1279,7 +1279,7 @@ var EsploraProvider = class {
|
|
|
1279
1279
|
};
|
|
1280
1280
|
}
|
|
1281
1281
|
async broadcastPackage(parent, child) {
|
|
1282
|
-
const response = await
|
|
1282
|
+
const response = await chunkKUN5ZRMW_cjs.baseFetch(`${this.baseUrl}/txs/package`, {
|
|
1283
1283
|
method: "POST",
|
|
1284
1284
|
headers: {
|
|
1285
1285
|
"Content-Type": "application/json"
|
|
@@ -1293,7 +1293,7 @@ var EsploraProvider = class {
|
|
|
1293
1293
|
return response.json();
|
|
1294
1294
|
}
|
|
1295
1295
|
async broadcastTx(tx) {
|
|
1296
|
-
const response = await
|
|
1296
|
+
const response = await chunkKUN5ZRMW_cjs.baseFetch(`${this.baseUrl}/tx`, {
|
|
1297
1297
|
method: "POST",
|
|
1298
1298
|
headers: {
|
|
1299
1299
|
"Content-Type": "text/plain"
|
|
@@ -1455,7 +1455,7 @@ function findP2AOutput(tx) {
|
|
|
1455
1455
|
var CHILD_DUST_AMOUNT = 546;
|
|
1456
1456
|
function buildAnchorChild(params) {
|
|
1457
1457
|
const { parent, feeRate, fundingCoins, changeAddress, tapInternalKey, network } = params;
|
|
1458
|
-
const child = new
|
|
1458
|
+
const child = new chunkKUN5ZRMW_cjs.Transaction({ version: 3, allowLegacyWitnessUtxo: true });
|
|
1459
1459
|
child.addInput(findP2AOutput(parent));
|
|
1460
1460
|
const estimator = TxWeightEstimator.create().addP2AInput();
|
|
1461
1461
|
for (const _ of fundingCoins) {
|
|
@@ -1503,7 +1503,7 @@ function buildForfeitTx(inputs, forfeitPkScript, txLocktime) {
|
|
|
1503
1503
|
);
|
|
1504
1504
|
}
|
|
1505
1505
|
function buildForfeitTxWithOutput(inputs, output, txLocktime) {
|
|
1506
|
-
const tx = new
|
|
1506
|
+
const tx = new chunkKUN5ZRMW_cjs.Transaction({
|
|
1507
1507
|
version: 3,
|
|
1508
1508
|
lockTime: txLocktime
|
|
1509
1509
|
});
|
|
@@ -1579,7 +1579,7 @@ function validateVtxoTxGraph(graph, roundTransaction, sweepTapTreeRoot) {
|
|
|
1579
1579
|
if (previousScriptKey.length !== 32) {
|
|
1580
1580
|
throw new Error(`parent output ${childIndex} has invalid script`);
|
|
1581
1581
|
}
|
|
1582
|
-
const cosigners =
|
|
1582
|
+
const cosigners = chunkKUN5ZRMW_cjs.getArkPsbtFields(child.root, 0, chunkKUN5ZRMW_cjs.CosignerPublicKey);
|
|
1583
1583
|
if (cosigners.length === 0) {
|
|
1584
1584
|
throw ErrMissingCosignersPublicKeys;
|
|
1585
1585
|
}
|
|
@@ -1637,7 +1637,7 @@ var EmulatorPacket = class _EmulatorPacket {
|
|
|
1637
1637
|
return new _EmulatorPacket(entries);
|
|
1638
1638
|
}
|
|
1639
1639
|
static fromBytes(data) {
|
|
1640
|
-
const reader = new
|
|
1640
|
+
const reader = new chunkYK6NP5KX_cjs.BufferReader(data);
|
|
1641
1641
|
const entryCount = reader.readCompactSize();
|
|
1642
1642
|
const entries = [];
|
|
1643
1643
|
for (let i = 0; i < entryCount; i++) {
|
|
@@ -1655,7 +1655,7 @@ var EmulatorPacket = class _EmulatorPacket {
|
|
|
1655
1655
|
return _EmulatorPacket.PACKET_TYPE;
|
|
1656
1656
|
}
|
|
1657
1657
|
serialize() {
|
|
1658
|
-
const writer = new
|
|
1658
|
+
const writer = new chunkYK6NP5KX_cjs.BufferWriter();
|
|
1659
1659
|
writer.writeCompactSize(this.entries.length);
|
|
1660
1660
|
for (const entry of this.entries) {
|
|
1661
1661
|
writer.writeUint16LE(entry.vin);
|
|
@@ -1742,7 +1742,7 @@ var Extension = class _Extension {
|
|
|
1742
1742
|
`expected magic prefix ${base.hex.encode(ARKADE_MAGIC)}, got ${base.hex.encode(payload.slice(0, Math.min(payload.length, ARKADE_MAGIC.length)))}`
|
|
1743
1743
|
);
|
|
1744
1744
|
}
|
|
1745
|
-
const reader = new
|
|
1745
|
+
const reader = new chunkYK6NP5KX_cjs.BufferReader(payload.slice(ARKADE_MAGIC.length));
|
|
1746
1746
|
const packets = [];
|
|
1747
1747
|
while (reader.remaining() > 0) {
|
|
1748
1748
|
const packetType = reader.readByte();
|
|
@@ -1816,7 +1816,7 @@ var Extension = class _Extension {
|
|
|
1816
1816
|
*/
|
|
1817
1817
|
getAssetPacket() {
|
|
1818
1818
|
for (const p of this.packets) {
|
|
1819
|
-
if (p instanceof
|
|
1819
|
+
if (p instanceof chunkYK6NP5KX_cjs.Packet) {
|
|
1820
1820
|
return p;
|
|
1821
1821
|
}
|
|
1822
1822
|
}
|
|
@@ -1854,8 +1854,8 @@ var Extension = class _Extension {
|
|
|
1854
1854
|
};
|
|
1855
1855
|
function parsePacket(packetType, data) {
|
|
1856
1856
|
switch (packetType) {
|
|
1857
|
-
case
|
|
1858
|
-
return
|
|
1857
|
+
case chunkYK6NP5KX_cjs.Packet.PACKET_TYPE:
|
|
1858
|
+
return chunkYK6NP5KX_cjs.Packet.fromBytes(data);
|
|
1859
1859
|
case EmulatorPacket.PACKET_TYPE:
|
|
1860
1860
|
return EmulatorPacket.fromBytes(data);
|
|
1861
1861
|
default:
|
|
@@ -1902,16 +1902,16 @@ function buildOpReturnScript(data) {
|
|
|
1902
1902
|
}
|
|
1903
1903
|
return script;
|
|
1904
1904
|
}
|
|
1905
|
-
var ErrOffchainOutputNotFound = (address) => new
|
|
1906
|
-
var ErrInvalidAssetOutputAmount = (got, want, assetId) => new
|
|
1905
|
+
var ErrOffchainOutputNotFound = (address) => new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(`offchain send output not found: ${address}`);
|
|
1906
|
+
var ErrInvalidAssetOutputAmount = (got, want, assetId) => new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
|
|
1907
1907
|
`invalid asset output amount for ${assetId}: got ${got}, want ${want}`
|
|
1908
1908
|
);
|
|
1909
|
-
var ErrAssetGroupNotFound = (assetId) => new
|
|
1910
|
-
var ErrAssetOutputNotFound = (assetId, outputIndex) => new
|
|
1909
|
+
var ErrAssetGroupNotFound = (assetId) => new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(`asset group not found in batch leaf: ${assetId}`);
|
|
1910
|
+
var ErrAssetOutputNotFound = (assetId, outputIndex) => new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
|
|
1911
1911
|
`asset output not found in asset group ${assetId} at index ${outputIndex}`
|
|
1912
1912
|
);
|
|
1913
|
-
var ErrOnchainOutputNotFound = (address) => new
|
|
1914
|
-
var ErrUnvalidatedOffchainOutput = (address) => new
|
|
1913
|
+
var ErrOnchainOutputNotFound = (address) => new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(`onchain output not found: ${address}`);
|
|
1914
|
+
var ErrUnvalidatedOffchainOutput = (address) => new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
|
|
1915
1915
|
`offchain output ${address} cannot be validated: virtual output tree signing did not run`
|
|
1916
1916
|
);
|
|
1917
1917
|
var ErrInvalidOnchainOutputAmount = (address) => new Error(`invalid onchain output amount: ${address}`);
|
|
@@ -1920,7 +1920,7 @@ var ErrInvalidOffchainOutputAmount = (address) => new Error(`invalid offchain ou
|
|
|
1920
1920
|
function assertFinalCommitmentMatchesValidated(finalCommitmentTx, validatedCommitmentTxid, context) {
|
|
1921
1921
|
if (!validatedCommitmentTxid) return;
|
|
1922
1922
|
if (finalCommitmentTx.id === validatedCommitmentTxid) return;
|
|
1923
|
-
throw new
|
|
1923
|
+
throw new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
|
|
1924
1924
|
`${context}: finalization commitment tx ${finalCommitmentTx.id} differs from the validated commitment tx ${validatedCommitmentTxid}`
|
|
1925
1925
|
);
|
|
1926
1926
|
}
|
|
@@ -1930,7 +1930,7 @@ function validateBatchRecipients(commitmentTx, vtxoTreeLeaves, recipients, netwo
|
|
|
1930
1930
|
for (const recipient of recipients) {
|
|
1931
1931
|
let arkAddress;
|
|
1932
1932
|
try {
|
|
1933
|
-
arkAddress =
|
|
1933
|
+
arkAddress = chunkKUN5ZRMW_cjs.ArkAddress.decode(recipient.address);
|
|
1934
1934
|
} catch {
|
|
1935
1935
|
validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
|
|
1936
1936
|
continue;
|
|
@@ -1942,7 +1942,7 @@ function validateBatchRecipientsWithoutTree(commitmentTx, recipients, network) {
|
|
|
1942
1942
|
const usedOnchainOutputs = /* @__PURE__ */ new Set();
|
|
1943
1943
|
for (const recipient of recipients) {
|
|
1944
1944
|
try {
|
|
1945
|
-
|
|
1945
|
+
chunkKUN5ZRMW_cjs.ArkAddress.decode(recipient.address);
|
|
1946
1946
|
} catch {
|
|
1947
1947
|
validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
|
|
1948
1948
|
continue;
|
|
@@ -2173,7 +2173,7 @@ function assetMintResolver() {
|
|
|
2173
2173
|
if (!tx.assets?.length || !tx.key.arkTxid) return void 0;
|
|
2174
2174
|
const minted = tx.assets.filter((a) => {
|
|
2175
2175
|
try {
|
|
2176
|
-
return base.hex.encode(
|
|
2176
|
+
return base.hex.encode(chunkYK6NP5KX_cjs.AssetId.fromString(a.assetId).txid) === tx.key.arkTxid;
|
|
2177
2177
|
} catch {
|
|
2178
2178
|
return false;
|
|
2179
2179
|
}
|
|
@@ -2216,7 +2216,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
2216
2216
|
const existing = inputsByAssetId.get(asset.assetId);
|
|
2217
2217
|
inputsByAssetId.set(asset.assetId, [
|
|
2218
2218
|
...existing ?? [],
|
|
2219
|
-
|
|
2219
|
+
chunkYK6NP5KX_cjs.AssetInput.create(inputIndex, asset.amount)
|
|
2220
2220
|
]);
|
|
2221
2221
|
}
|
|
2222
2222
|
}
|
|
@@ -2228,7 +2228,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
2228
2228
|
const existing = outputsByAssetId.get(asset.assetId);
|
|
2229
2229
|
outputsByAssetId.set(asset.assetId, [
|
|
2230
2230
|
...existing ?? [],
|
|
2231
|
-
|
|
2231
|
+
chunkYK6NP5KX_cjs.AssetOutput.create(outputIndex, asset.amount)
|
|
2232
2232
|
]);
|
|
2233
2233
|
}
|
|
2234
2234
|
}
|
|
@@ -2239,7 +2239,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
2239
2239
|
const existing = outputsByAssetId.get(asset.assetId);
|
|
2240
2240
|
outputsByAssetId.set(asset.assetId, [
|
|
2241
2241
|
...existing ?? [],
|
|
2242
|
-
|
|
2242
|
+
chunkYK6NP5KX_cjs.AssetOutput.create(outputIndex, asset.amount)
|
|
2243
2243
|
]);
|
|
2244
2244
|
}
|
|
2245
2245
|
}
|
|
@@ -2248,11 +2248,11 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
2248
2248
|
for (const assetIdStr of allAssetIds) {
|
|
2249
2249
|
const inputs = inputsByAssetId.get(assetIdStr);
|
|
2250
2250
|
const outputs = outputsByAssetId.get(assetIdStr);
|
|
2251
|
-
const assetId =
|
|
2252
|
-
const group =
|
|
2251
|
+
const assetId = chunkYK6NP5KX_cjs.AssetId.fromString(assetIdStr);
|
|
2252
|
+
const group = chunkYK6NP5KX_cjs.AssetGroup.create(assetId, null, inputs ?? [], outputs ?? [], []);
|
|
2253
2253
|
groups.push(group);
|
|
2254
2254
|
}
|
|
2255
|
-
return
|
|
2255
|
+
return chunkYK6NP5KX_cjs.Packet.create(groups);
|
|
2256
2256
|
}
|
|
2257
2257
|
function selectCoinsWithAsset(coins, assetId, requiredAmount) {
|
|
2258
2258
|
const coinsWithAsset = coins.filter((coin) => coin.assets?.some((a) => a.assetId === assetId));
|
|
@@ -2326,6 +2326,83 @@ function classifyContractSigner(contractServerPubKeyHex, info, nowSeconds = Math
|
|
|
2326
2326
|
function isCooperativelyMigratable(status) {
|
|
2327
2327
|
return status === "MIGRATABLE" || status === "DUE_NOW";
|
|
2328
2328
|
}
|
|
2329
|
+
|
|
2330
|
+
// src/wallet/timelockPolicy.ts
|
|
2331
|
+
var isRegtest = (network) => network.bech32 === "bcrt";
|
|
2332
|
+
var NOMINAL_BLOCK_SECONDS = 600n;
|
|
2333
|
+
var toTimelock = (value) => ({
|
|
2334
|
+
value,
|
|
2335
|
+
type: value >= 512n ? "seconds" : "blocks"
|
|
2336
|
+
});
|
|
2337
|
+
var toSeconds = (t) => t.type === "seconds" ? t.value : t.value * NOMINAL_BLOCK_SECONDS;
|
|
2338
|
+
function assertTimelockInPolicy(timelock, policy, label) {
|
|
2339
|
+
if (policy.requireSeconds && timelock.type === "blocks") {
|
|
2340
|
+
throw new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
|
|
2341
|
+
`${label} rejected: block-typed timelocks are not accepted (got ${timelock.value})`
|
|
2342
|
+
);
|
|
2343
|
+
}
|
|
2344
|
+
const seconds = toSeconds(timelock);
|
|
2345
|
+
if (seconds < policy.minSeconds) {
|
|
2346
|
+
throw new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
|
|
2347
|
+
`${label} rejected: ${timelock.value} ${timelock.type} is below the ${policy.minSeconds}s floor`
|
|
2348
|
+
);
|
|
2349
|
+
}
|
|
2350
|
+
return timelock;
|
|
2351
|
+
}
|
|
2352
|
+
function assertTimelockWithinFloor(value, policy, label) {
|
|
2353
|
+
return assertTimelockInPolicy(toTimelock(value), policy, label);
|
|
2354
|
+
}
|
|
2355
|
+
|
|
2356
|
+
// src/wallet/batchExpiry.ts
|
|
2357
|
+
var DEFAULT_MIN_BATCH_EXPIRY_SECONDS = 86400n;
|
|
2358
|
+
var REGTEST_MIN_BATCH_EXPIRY_SECONDS = 6000n;
|
|
2359
|
+
function defaultBatchExpiryPolicy(network) {
|
|
2360
|
+
return isRegtest(network) ? { minSeconds: REGTEST_MIN_BATCH_EXPIRY_SECONDS, requireSeconds: false } : { minSeconds: DEFAULT_MIN_BATCH_EXPIRY_SECONDS, requireSeconds: true };
|
|
2361
|
+
}
|
|
2362
|
+
function resolveBatchExpiryPolicy(network, overrides) {
|
|
2363
|
+
return { ...defaultBatchExpiryPolicy(network), ...overrides };
|
|
2364
|
+
}
|
|
2365
|
+
function assertValidBatchExpiry(batchExpiry, policy) {
|
|
2366
|
+
if (policy.advertisedVtxoTreeExpiry !== void 0 && batchExpiry !== policy.advertisedVtxoTreeExpiry) {
|
|
2367
|
+
throw new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
|
|
2368
|
+
`batch expiry rejected: ${batchExpiry} does not match the advertised vtxoTreeExpiry ${policy.advertisedVtxoTreeExpiry}`
|
|
2369
|
+
);
|
|
2370
|
+
}
|
|
2371
|
+
return assertTimelockWithinFloor(batchExpiry, policy, "batch expiry");
|
|
2372
|
+
}
|
|
2373
|
+
var DEFAULT_MIN_CHECKPOINT_EXIT_DELAY_SECONDS = 86400n;
|
|
2374
|
+
var REGTEST_MIN_CHECKPOINT_EXIT_DELAY_SECONDS = 1200n;
|
|
2375
|
+
function defaultCheckpointExitDelayPolicy(network) {
|
|
2376
|
+
return isRegtest(network) ? { minSeconds: REGTEST_MIN_CHECKPOINT_EXIT_DELAY_SECONDS, requireSeconds: false } : { minSeconds: DEFAULT_MIN_CHECKPOINT_EXIT_DELAY_SECONDS, requireSeconds: true };
|
|
2377
|
+
}
|
|
2378
|
+
function resolveCheckpointExitDelayPolicy(network, overrides) {
|
|
2379
|
+
return { ...defaultCheckpointExitDelayPolicy(network), ...overrides };
|
|
2380
|
+
}
|
|
2381
|
+
function assertValidServerUnrollScript(checkpointTapscript, policy) {
|
|
2382
|
+
let script;
|
|
2383
|
+
try {
|
|
2384
|
+
script = chunkKUN5ZRMW_cjs.CSVMultisigTapscript.decode(base.hex.decode(checkpointTapscript));
|
|
2385
|
+
} catch (e) {
|
|
2386
|
+
throw new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
|
|
2387
|
+
`checkpoint exit delay rejected: invalid checkpointTapscript from server (${e instanceof Error ? e.message : String(e)})`
|
|
2388
|
+
);
|
|
2389
|
+
}
|
|
2390
|
+
if (policy.advertisedForfeitPubkey !== void 0) {
|
|
2391
|
+
const { pubkeys } = script.params;
|
|
2392
|
+
if (pubkeys.length !== 1) {
|
|
2393
|
+
throw new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
|
|
2394
|
+
`checkpoint exit delay rejected: checkpointTapscript must commit to exactly one pubkey, got ${pubkeys.length} [${pubkeys.map(base.hex.encode).join(", ")}]`
|
|
2395
|
+
);
|
|
2396
|
+
}
|
|
2397
|
+
if (!utils_js.equalBytes(pubkeys[0], policy.advertisedForfeitPubkey)) {
|
|
2398
|
+
throw new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
|
|
2399
|
+
`checkpoint exit delay rejected: checkpointTapscript pubkey ${base.hex.encode(pubkeys[0])} does not match the advertised forfeitPubkey ${base.hex.encode(policy.advertisedForfeitPubkey)}`
|
|
2400
|
+
);
|
|
2401
|
+
}
|
|
2402
|
+
}
|
|
2403
|
+
assertTimelockInPolicy(script.params.timelock, policy, "checkpoint exit delay");
|
|
2404
|
+
return script;
|
|
2405
|
+
}
|
|
2329
2406
|
function buildOffchainTx(inputs, outputs, serverUnrollScript) {
|
|
2330
2407
|
const MAX_OP_RETURN = 2;
|
|
2331
2408
|
let countOpReturn = 0;
|
|
@@ -2357,8 +2434,8 @@ function buildOffchainTx(inputs, outputs, serverUnrollScript) {
|
|
|
2357
2434
|
function buildVirtualTx(inputs, outputs) {
|
|
2358
2435
|
let lockTime = 0n;
|
|
2359
2436
|
for (const input of inputs) {
|
|
2360
|
-
const tapscript =
|
|
2361
|
-
if (
|
|
2437
|
+
const tapscript = chunkKUN5ZRMW_cjs.decodeTapscript(chunkKUN5ZRMW_cjs.scriptFromTapLeafScript(input.tapLeafScript));
|
|
2438
|
+
if (chunkKUN5ZRMW_cjs.CLTVMultisigTapscript.is(tapscript)) {
|
|
2362
2439
|
if (lockTime !== 0n) {
|
|
2363
2440
|
if (isSeconds(lockTime) !== isSeconds(tapscript.params.absoluteTimelock)) {
|
|
2364
2441
|
throw new Error("cannot mix seconds and blocks locktime");
|
|
@@ -2369,7 +2446,7 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
2369
2446
|
}
|
|
2370
2447
|
}
|
|
2371
2448
|
}
|
|
2372
|
-
const tx = new
|
|
2449
|
+
const tx = new chunkKUN5ZRMW_cjs.Transaction({
|
|
2373
2450
|
version: 3,
|
|
2374
2451
|
lockTime: Number(lockTime)
|
|
2375
2452
|
});
|
|
@@ -2379,12 +2456,12 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
2379
2456
|
index: input.vout,
|
|
2380
2457
|
sequence: lockTime ? btcSigner.DEFAULT_SEQUENCE - 1 : void 0,
|
|
2381
2458
|
witnessUtxo: {
|
|
2382
|
-
script:
|
|
2459
|
+
script: chunkKUN5ZRMW_cjs.VtxoScript.decode(input.tapTree).pkScript,
|
|
2383
2460
|
amount: BigInt(input.value)
|
|
2384
2461
|
},
|
|
2385
2462
|
tapLeafScript: [input.tapLeafScript]
|
|
2386
2463
|
});
|
|
2387
|
-
|
|
2464
|
+
chunkKUN5ZRMW_cjs.setArkPsbtField(tx, i, chunkKUN5ZRMW_cjs.VtxoTaprootTree, input.tapTree);
|
|
2388
2465
|
}
|
|
2389
2466
|
for (const output of outputs) {
|
|
2390
2467
|
tx.addOutput(output);
|
|
@@ -2393,8 +2470,8 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
2393
2470
|
return tx;
|
|
2394
2471
|
}
|
|
2395
2472
|
function buildCheckpointTx(vtxo, serverUnrollScript) {
|
|
2396
|
-
const collaborativeClosure =
|
|
2397
|
-
const checkpointVtxoScript = new
|
|
2473
|
+
const collaborativeClosure = chunkKUN5ZRMW_cjs.decodeTapscript(chunkKUN5ZRMW_cjs.scriptFromTapLeafScript(vtxo.tapLeafScript));
|
|
2474
|
+
const checkpointVtxoScript = new chunkKUN5ZRMW_cjs.VtxoScript([
|
|
2398
2475
|
serverUnrollScript.script,
|
|
2399
2476
|
collaborativeClosure.script
|
|
2400
2477
|
]);
|
|
@@ -2547,7 +2624,7 @@ function combineTapscriptSigs(signedTx, originalTx) {
|
|
|
2547
2624
|
}
|
|
2548
2625
|
function isValidArkAddress(address) {
|
|
2549
2626
|
try {
|
|
2550
|
-
|
|
2627
|
+
chunkKUN5ZRMW_cjs.ArkAddress.decode(address);
|
|
2551
2628
|
return true;
|
|
2552
2629
|
} catch (e) {
|
|
2553
2630
|
return false;
|
|
@@ -2555,16 +2632,16 @@ function isValidArkAddress(address) {
|
|
|
2555
2632
|
}
|
|
2556
2633
|
function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, context) {
|
|
2557
2634
|
if (serverCheckpointTxs.length !== expectedCheckpoints.length) {
|
|
2558
|
-
throw new
|
|
2635
|
+
throw new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
|
|
2559
2636
|
`${context} returned ${serverCheckpointTxs.length} checkpoints, expected ${expectedCheckpoints.length}`
|
|
2560
2637
|
);
|
|
2561
2638
|
}
|
|
2562
2639
|
const byTxid = new Map(expectedCheckpoints.map((c) => [c.id, c]));
|
|
2563
2640
|
return serverCheckpointTxs.map((encoded, index) => {
|
|
2564
|
-
const server =
|
|
2641
|
+
const server = chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
|
|
2565
2642
|
const local = byTxid.get(server.id);
|
|
2566
2643
|
if (!local) {
|
|
2567
|
-
throw new
|
|
2644
|
+
throw new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
|
|
2568
2645
|
`${context} checkpoint ${index} txid ${server.id} does not match any submitted checkpoint`
|
|
2569
2646
|
);
|
|
2570
2647
|
}
|
|
@@ -2574,14 +2651,14 @@ function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, contex
|
|
|
2574
2651
|
}
|
|
2575
2652
|
function assertSubmittedArkTxid(response, signedArkTx, context) {
|
|
2576
2653
|
if (response.arkTxid !== signedArkTx.id) {
|
|
2577
|
-
throw new
|
|
2654
|
+
throw new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
|
|
2578
2655
|
`${context} returned ark txid ${response.arkTxid}, expected ${signedArkTx.id}`
|
|
2579
2656
|
);
|
|
2580
2657
|
}
|
|
2581
2658
|
if (response.finalArkTx === void 0) return;
|
|
2582
|
-
const finalTxid =
|
|
2659
|
+
const finalTxid = chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx)).id;
|
|
2583
2660
|
if (finalTxid !== signedArkTx.id) {
|
|
2584
|
-
throw new
|
|
2661
|
+
throw new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
|
|
2585
2662
|
`${context} returned final ark tx ${finalTxid}, expected ${signedArkTx.id}`
|
|
2586
2663
|
);
|
|
2587
2664
|
}
|
|
@@ -2590,20 +2667,20 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
|
|
|
2590
2667
|
const byOutpoint = new Map(inputs.map((input) => [`${input.txid}:${input.vout}`, input]));
|
|
2591
2668
|
for (const [index, checkpoint] of checkpoints.entries()) {
|
|
2592
2669
|
if (checkpoint.inputsLength !== 1) {
|
|
2593
|
-
throw new
|
|
2670
|
+
throw new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
|
|
2594
2671
|
`${context}: checkpoint ${index} spends ${checkpoint.inputsLength} inputs, expected 1`
|
|
2595
2672
|
);
|
|
2596
2673
|
}
|
|
2597
2674
|
const spent = checkpoint.getInput(0);
|
|
2598
2675
|
if (!spent.txid || spent.index === void 0) {
|
|
2599
|
-
throw new
|
|
2676
|
+
throw new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
|
|
2600
2677
|
`${context}: checkpoint ${index} has no input outpoint`
|
|
2601
2678
|
);
|
|
2602
2679
|
}
|
|
2603
2680
|
const outpoint = `${base.hex.encode(spent.txid)}:${spent.index}`;
|
|
2604
2681
|
const input = byOutpoint.get(outpoint);
|
|
2605
2682
|
if (!input) {
|
|
2606
|
-
throw new
|
|
2683
|
+
throw new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
|
|
2607
2684
|
`${context}: checkpoint ${index} spends ${outpoint}, which is not one of the requested virtual outputs`
|
|
2608
2685
|
);
|
|
2609
2686
|
}
|
|
@@ -2611,7 +2688,7 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
|
|
|
2611
2688
|
(unroll) => buildCheckpointTx(input, unroll).tx.id === checkpoint.id
|
|
2612
2689
|
);
|
|
2613
2690
|
if (!rebuilt) {
|
|
2614
|
-
throw new
|
|
2691
|
+
throw new chunkKUN5ZRMW_cjs.ServerResponseMismatchError(
|
|
2615
2692
|
`${context}: checkpoint ${index} txid ${checkpoint.id} differs from the checkpoint built locally for ${outpoint}`
|
|
2616
2693
|
);
|
|
2617
2694
|
}
|
|
@@ -2845,7 +2922,7 @@ function extendCoinWithTapscript(boardingTapscript, utxo) {
|
|
|
2845
2922
|
};
|
|
2846
2923
|
}
|
|
2847
2924
|
function deriveContractTapscripts(contract) {
|
|
2848
|
-
const handler =
|
|
2925
|
+
const handler = chunkOWTKOMJZ_cjs.contractHandlers.get(contract.type);
|
|
2849
2926
|
if (!handler) {
|
|
2850
2927
|
throw new Error(`No handler for contract type '${contract.type}'`);
|
|
2851
2928
|
}
|
|
@@ -2916,7 +2993,7 @@ function getRandomId() {
|
|
|
2916
2993
|
}
|
|
2917
2994
|
function isValidArkAddress2(address) {
|
|
2918
2995
|
try {
|
|
2919
|
-
|
|
2996
|
+
chunkKUN5ZRMW_cjs.ArkAddress.decode(address);
|
|
2920
2997
|
return true;
|
|
2921
2998
|
} catch (e) {
|
|
2922
2999
|
return false;
|
|
@@ -2946,7 +3023,7 @@ function validateRecipients(recipients, dustAmount, context) {
|
|
|
2946
3023
|
for (const recipient of recipients) {
|
|
2947
3024
|
let address;
|
|
2948
3025
|
try {
|
|
2949
|
-
address =
|
|
3026
|
+
address = chunkKUN5ZRMW_cjs.ArkAddress.decode(recipient.address);
|
|
2950
3027
|
} catch (e) {
|
|
2951
3028
|
throw new Error(`Invalid Arkade address: ${recipient.address}`);
|
|
2952
3029
|
}
|
|
@@ -2975,7 +3052,7 @@ function selectPendingRecoveryOutpoints(contractsWithVtxos, signerSet, nowSecond
|
|
|
2975
3052
|
continue;
|
|
2976
3053
|
}
|
|
2977
3054
|
for (const v of vtxos) {
|
|
2978
|
-
if (!
|
|
3055
|
+
if (!chunkKUN5ZRMW_cjs.hasTerminalSpend(v) && !v.isSwept) out.add(`${v.txid}:${v.vout}`);
|
|
2979
3056
|
}
|
|
2980
3057
|
}
|
|
2981
3058
|
return out;
|
|
@@ -3008,10 +3085,10 @@ function byValueDescending(vtxos) {
|
|
|
3008
3085
|
return [...vtxos].sort((a, b) => b.value - a.value);
|
|
3009
3086
|
}
|
|
3010
3087
|
async function fetchTimeHeight(wallet) {
|
|
3011
|
-
return
|
|
3088
|
+
return chunkKUN5ZRMW_cjs.resolveTimeHeight(wallet.onchainProvider);
|
|
3012
3089
|
}
|
|
3013
3090
|
function canMigrateBySend(vtxo, now) {
|
|
3014
|
-
if (!
|
|
3091
|
+
if (!chunkKUN5ZRMW_cjs.canSpendOffchain(vtxo, now)) return false;
|
|
3015
3092
|
return vtxo.expiresAt !== void 0 || vtxo.expiresAtHeight !== void 0;
|
|
3016
3093
|
}
|
|
3017
3094
|
function byExpiryAscending(vtxos, now) {
|
|
@@ -3019,7 +3096,7 @@ function byExpiryAscending(vtxos, now) {
|
|
|
3019
3096
|
if (vtxo.isSwept) return -Infinity;
|
|
3020
3097
|
if (vtxo.expiresAt !== void 0) return vtxo.expiresAt.getTime();
|
|
3021
3098
|
if (vtxo.expiresAtHeight !== void 0) {
|
|
3022
|
-
return
|
|
3099
|
+
return chunkKUN5ZRMW_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
|
|
3023
3100
|
}
|
|
3024
3101
|
return Infinity;
|
|
3025
3102
|
};
|
|
@@ -3056,10 +3133,10 @@ var DEFAULT_SETTLEMENT_CONFIG = {
|
|
|
3056
3133
|
};
|
|
3057
3134
|
function getRecoverableVtxos(vtxos, dustAmount, now) {
|
|
3058
3135
|
return vtxos.filter((vtxo) => {
|
|
3059
|
-
if (
|
|
3136
|
+
if (chunkKUN5ZRMW_cjs.canRecoverOnchain(vtxo, now)) {
|
|
3060
3137
|
return true;
|
|
3061
3138
|
}
|
|
3062
|
-
if (
|
|
3139
|
+
if (chunkKUN5ZRMW_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
|
|
3063
3140
|
return true;
|
|
3064
3141
|
}
|
|
3065
3142
|
return false;
|
|
@@ -3090,7 +3167,7 @@ function getRecoverableWithSubdust(vtxos, dustAmount, now) {
|
|
|
3090
3167
|
}
|
|
3091
3168
|
function isVtxoExpiringSoon(vtxo, thresholdMs) {
|
|
3092
3169
|
const realThresholdMs = thresholdMs <= 100 ? DEFAULT_THRESHOLD_MS : thresholdMs;
|
|
3093
|
-
const expiresAt =
|
|
3170
|
+
const expiresAt = chunkKUN5ZRMW_cjs.normalizeVtxo(vtxo).expiresAt;
|
|
3094
3171
|
if (expiresAt === void 0) return false;
|
|
3095
3172
|
const now = Date.now();
|
|
3096
3173
|
const batchExpiry = expiresAt.getTime();
|
|
@@ -3099,7 +3176,7 @@ function isVtxoExpiringSoon(vtxo, thresholdMs) {
|
|
|
3099
3176
|
}
|
|
3100
3177
|
function getExpiringAndRecoverableVtxos(vtxos, thresholdMs, dustAmount, now) {
|
|
3101
3178
|
return vtxos.filter(
|
|
3102
|
-
(vtxo) => isVtxoExpiringSoon(vtxo, thresholdMs) ||
|
|
3179
|
+
(vtxo) => isVtxoExpiringSoon(vtxo, thresholdMs) || chunkKUN5ZRMW_cjs.canRecoverOnchain(vtxo, now) || isSubdust(vtxo, dustAmount)
|
|
3103
3180
|
);
|
|
3104
3181
|
}
|
|
3105
3182
|
function isMigrationCapable(wallet) {
|
|
@@ -3581,11 +3658,11 @@ var VtxoManager = class _VtxoManager {
|
|
|
3581
3658
|
`Sweep not economical: output ${outputAmount} sats after ${fee} sats fee is below dust (${dustAmount} sats)`
|
|
3582
3659
|
);
|
|
3583
3660
|
}
|
|
3584
|
-
const tx = new
|
|
3661
|
+
const tx = new chunkKUN5ZRMW_cjs.Transaction();
|
|
3585
3662
|
for (const utxo of expiredUtxos) {
|
|
3586
|
-
const utxoScript =
|
|
3663
|
+
const utxoScript = chunkKUN5ZRMW_cjs.VtxoScript.decode(utxo.tapTree);
|
|
3587
3664
|
const utxoExitLeaf = utxoScript.leaves.find(
|
|
3588
|
-
(leaf) =>
|
|
3665
|
+
(leaf) => chunkKUN5ZRMW_cjs.CSVMultisigTapscript.isScriptValid(chunkKUN5ZRMW_cjs.scriptFromTapLeafScript(leaf)) === true
|
|
3589
3666
|
);
|
|
3590
3667
|
if (!utxoExitLeaf) {
|
|
3591
3668
|
throw new Error(
|
|
@@ -3600,7 +3677,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
3600
3677
|
amount: BigInt(utxo.value)
|
|
3601
3678
|
},
|
|
3602
3679
|
tapLeafScript: [utxoExitLeaf],
|
|
3603
|
-
sequence:
|
|
3680
|
+
sequence: chunkKUN5ZRMW_cjs.getSequence(utxoExitLeaf)
|
|
3604
3681
|
});
|
|
3605
3682
|
}
|
|
3606
3683
|
tx.addOutputAddress(boardingAddress, outputAmount, this.getNetwork());
|
|
@@ -3834,8 +3911,8 @@ var VtxoManager = class _VtxoManager {
|
|
|
3834
3911
|
if (!serverPubKey) continue;
|
|
3835
3912
|
const cls = classifyAgainstSignerSet(serverPubKey, signerSet, nowSeconds);
|
|
3836
3913
|
if (cls.status === "CURRENT") continue;
|
|
3837
|
-
const recoverable = vtxos.filter((v) => v.isSwept && !
|
|
3838
|
-
const spendable = vtxos.filter((v) => !
|
|
3914
|
+
const recoverable = vtxos.filter((v) => v.isSwept && !chunkKUN5ZRMW_cjs.hasTerminalSpend(v));
|
|
3915
|
+
const spendable = vtxos.filter((v) => !chunkKUN5ZRMW_cjs.hasTerminalSpend(v) && !v.isSwept);
|
|
3839
3916
|
const value = spendable.reduce((sum, v) => sum + v.value, 0);
|
|
3840
3917
|
let recoverableCount = 0;
|
|
3841
3918
|
let recoverableValue = 0;
|
|
@@ -3848,7 +3925,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
3848
3925
|
awaitingSweepCount = spendable.length;
|
|
3849
3926
|
awaitingSweepValue = value;
|
|
3850
3927
|
for (const v of spendable) {
|
|
3851
|
-
const exp =
|
|
3928
|
+
const exp = chunkKUN5ZRMW_cjs.toBatchExpiry(v);
|
|
3852
3929
|
if (exp !== void 0 && (nextSweepEta === void 0 || exp < nextSweepEta)) {
|
|
3853
3930
|
nextSweepEta = exp;
|
|
3854
3931
|
}
|
|
@@ -4109,7 +4186,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4109
4186
|
/** Decodes the boarding tapscript exit path to extract the CSV timelock. */
|
|
4110
4187
|
getBoardingTimelock() {
|
|
4111
4188
|
const wallet = this.getSweepWallet();
|
|
4112
|
-
const exitScript =
|
|
4189
|
+
const exitScript = chunkKUN5ZRMW_cjs.CSVMultisigTapscript.decode(
|
|
4113
4190
|
base.hex.decode(wallet.boardingTapscript.exitScript)
|
|
4114
4191
|
);
|
|
4115
4192
|
return exitScript.params.timelock;
|
|
@@ -4240,8 +4317,8 @@ var VtxoManager = class _VtxoManager {
|
|
|
4240
4317
|
* or doesn't carry the metadata.
|
|
4241
4318
|
*/
|
|
4242
4319
|
extractSpentOutpoint(error) {
|
|
4243
|
-
const ark =
|
|
4244
|
-
if (!
|
|
4320
|
+
const ark = chunkKUN5ZRMW_cjs.maybeArkError(error);
|
|
4321
|
+
if (!chunkKUN5ZRMW_cjs.isArkError(ark, chunkKUN5ZRMW_cjs.ArkErrorName.VTXO_ALREADY_SPENT)) return void 0;
|
|
4245
4322
|
const raw = ark.metadata?.vtxo_outpoint;
|
|
4246
4323
|
if (typeof raw !== "string") return void 0;
|
|
4247
4324
|
const [txid, voutStr] = raw.split(":");
|
|
@@ -4431,7 +4508,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4431
4508
|
if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
|
|
4432
4509
|
break;
|
|
4433
4510
|
}
|
|
4434
|
-
const inputFee = estimator.evalOffchainInput(
|
|
4511
|
+
const inputFee = estimator.evalOffchainInput(chunkKUN5ZRMW_cjs.toOffchainInputFeeParams(v));
|
|
4435
4512
|
if (inputFee.satoshis >= v.value) {
|
|
4436
4513
|
continue;
|
|
4437
4514
|
}
|
|
@@ -4451,7 +4528,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4451
4528
|
const arkAddress = await this.wallet.getAddress();
|
|
4452
4529
|
const outputFee = estimator.evalOffchainOutput({
|
|
4453
4530
|
amount: totalAmount,
|
|
4454
|
-
script: base.hex.encode(
|
|
4531
|
+
script: base.hex.encode(chunkKUN5ZRMW_cjs.ArkAddress.decode(arkAddress).pkScript)
|
|
4455
4532
|
});
|
|
4456
4533
|
totalAmount -= BigInt(outputFee.satoshis);
|
|
4457
4534
|
if (totalAmount < dustAmount) return;
|
|
@@ -4531,7 +4608,7 @@ var ArkNote = class _ArkNote {
|
|
|
4531
4608
|
this.value = value;
|
|
4532
4609
|
this.HRP = HRP;
|
|
4533
4610
|
const preimageHash = utils_js.sha256(this.preimage);
|
|
4534
|
-
this.vtxoScript = new
|
|
4611
|
+
this.vtxoScript = new chunkKUN5ZRMW_cjs.VtxoScript([noteTapscript(preimageHash)]);
|
|
4535
4612
|
const leaf = this.vtxoScript.leaves[0];
|
|
4536
4613
|
this.txid = base.hex.encode(new Uint8Array(preimageHash).reverse());
|
|
4537
4614
|
this.tapTree = this.vtxoScript.encode();
|
|
@@ -4698,7 +4775,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
4698
4775
|
const privateKey = data.slice(1, 33);
|
|
4699
4776
|
const serverPubKey = data.slice(33, 65);
|
|
4700
4777
|
const sequence = new DataView(data.buffer, data.byteOffset + 65, 4).getUint32(0, false);
|
|
4701
|
-
const csvTimelock =
|
|
4778
|
+
const csvTimelock = chunkKUN5ZRMW_cjs.sequenceToTimelock(sequence);
|
|
4702
4779
|
return new _ArkadeCash(privateKey, serverPubKey, csvTimelock, decoded.prefix);
|
|
4703
4780
|
}
|
|
4704
4781
|
toString() {
|
|
@@ -4706,7 +4783,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
4706
4783
|
data[0] = _ArkadeCash.Version;
|
|
4707
4784
|
data.set(this._privateKey, 1);
|
|
4708
4785
|
data.set(this._serverPubKey, 33);
|
|
4709
|
-
const sequence =
|
|
4786
|
+
const sequence = chunkKUN5ZRMW_cjs.timelockToSequence(this.csvTimelock);
|
|
4710
4787
|
new DataView(data.buffer, data.byteOffset + 65, 4).setUint32(0, sequence, false);
|
|
4711
4788
|
const words = base.bech32m.toWords(data);
|
|
4712
4789
|
return base.bech32m.encode(this.hrp, words, 1023);
|
|
@@ -4715,7 +4792,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
4715
4792
|
return SingleKey.fromPrivateKey(this._privateKey);
|
|
4716
4793
|
}
|
|
4717
4794
|
get vtxoScript() {
|
|
4718
|
-
return new
|
|
4795
|
+
return new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({
|
|
4719
4796
|
pubKey: this._publicKey,
|
|
4720
4797
|
serverPubKey: this._serverPubKey,
|
|
4721
4798
|
csvTimelock: this.csvTimelock
|
|
@@ -4976,7 +5053,7 @@ async function captureExitBranch(params) {
|
|
|
4976
5053
|
const nonCommitment = ordered.filter((c) => chainTxTypeToChainedExit(c.type) !== 1 /* Commitment */).map((c) => c.txid);
|
|
4977
5054
|
if (nonCommitment.length > 0) {
|
|
4978
5055
|
for (const psbt of await resolver.getVirtualTxs(nonCommitment)) {
|
|
4979
|
-
psbtByTxid.set(
|
|
5056
|
+
psbtByTxid.set(chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
4980
5057
|
}
|
|
4981
5058
|
}
|
|
4982
5059
|
}
|
|
@@ -5019,10 +5096,10 @@ var IndexerExitDataSource = class {
|
|
|
5019
5096
|
while (hasMore) {
|
|
5020
5097
|
const { chain: page, page: meta } = await this.indexer.getVtxoChain(
|
|
5021
5098
|
{ txid: vtxo.txid, vout: vtxo.vout },
|
|
5022
|
-
{ pageIndex, pageSize:
|
|
5099
|
+
{ pageIndex, pageSize: chunkKUN5ZRMW_cjs.DEFAULT_PAGE_SIZE }
|
|
5023
5100
|
);
|
|
5024
5101
|
chain.push(...page);
|
|
5025
|
-
hasMore = meta ? page.length ===
|
|
5102
|
+
hasMore = meta ? page.length === chunkKUN5ZRMW_cjs.DEFAULT_PAGE_SIZE : false;
|
|
5026
5103
|
pageIndex++;
|
|
5027
5104
|
}
|
|
5028
5105
|
return chain;
|
|
@@ -5034,12 +5111,12 @@ var IndexerExitDataSource = class {
|
|
|
5034
5111
|
while (hasMore) {
|
|
5035
5112
|
const { txs, page } = await this.indexer.getVirtualTxs(txids, {
|
|
5036
5113
|
pageIndex,
|
|
5037
|
-
pageSize:
|
|
5114
|
+
pageSize: chunkKUN5ZRMW_cjs.DEFAULT_PAGE_SIZE
|
|
5038
5115
|
});
|
|
5039
5116
|
for (const psbt of txs) {
|
|
5040
|
-
out.set(
|
|
5117
|
+
out.set(chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
5041
5118
|
}
|
|
5042
|
-
hasMore = page ? txs.length ===
|
|
5119
|
+
hasMore = page ? txs.length === chunkKUN5ZRMW_cjs.DEFAULT_PAGE_SIZE : false;
|
|
5043
5120
|
pageIndex++;
|
|
5044
5121
|
}
|
|
5045
5122
|
return out;
|
|
@@ -5060,7 +5137,7 @@ function chainedTxTypeToChainTxType(t) {
|
|
|
5060
5137
|
}
|
|
5061
5138
|
}
|
|
5062
5139
|
function psbtInputTxids(psbtBase64) {
|
|
5063
|
-
const tx =
|
|
5140
|
+
const tx = chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
|
|
5064
5141
|
const ids = [];
|
|
5065
5142
|
for (let i = 0; i < tx.inputsLength; i++) {
|
|
5066
5143
|
const txid = tx.getInput(i).txid;
|
|
@@ -5240,6 +5317,7 @@ function serializeArkInfoSnapshot(info, savedAt) {
|
|
|
5240
5317
|
forfeitPubkey: info.forfeitPubkey,
|
|
5241
5318
|
unilateralExitDelay: info.unilateralExitDelay.toString(),
|
|
5242
5319
|
boardingExitDelay: info.boardingExitDelay.toString(),
|
|
5320
|
+
vtxoTreeExpiry: info.vtxoTreeExpiry?.toString(),
|
|
5243
5321
|
sessionDuration: info.sessionDuration.toString(),
|
|
5244
5322
|
dust: info.dust.toString(),
|
|
5245
5323
|
fees: info.fees,
|
|
@@ -5289,6 +5367,7 @@ function hydrateArkInfo(snapshot) {
|
|
|
5289
5367
|
sessionDuration: BigInt(a.sessionDuration),
|
|
5290
5368
|
signerPubkey: a.signerPubkey,
|
|
5291
5369
|
unilateralExitDelay: BigInt(a.unilateralExitDelay),
|
|
5370
|
+
vtxoTreeExpiry: a.vtxoTreeExpiry !== void 0 ? BigInt(a.vtxoTreeExpiry) : void 0,
|
|
5292
5371
|
utxoMaxAmount: BigInt(a.utxoMaxAmount),
|
|
5293
5372
|
utxoMinAmount: BigInt(a.utxoMinAmount),
|
|
5294
5373
|
version: a.version,
|
|
@@ -5361,6 +5440,9 @@ function parseStoredArkInfoSnapshot(raw) {
|
|
|
5361
5440
|
]) {
|
|
5362
5441
|
assertDecimalString(a[field], `arkInfo.${field}`);
|
|
5363
5442
|
}
|
|
5443
|
+
if (a.vtxoTreeExpiry !== void 0) {
|
|
5444
|
+
assertDecimalString(a.vtxoTreeExpiry, "arkInfo.vtxoTreeExpiry");
|
|
5445
|
+
}
|
|
5364
5446
|
assertFeeInfo(a.fees, "arkInfo.fees");
|
|
5365
5447
|
if (!Array.isArray(a.deprecatedSigners)) {
|
|
5366
5448
|
throw new MalformedArkInfoSnapshotError("arkInfo.deprecatedSigners must be an array");
|
|
@@ -5408,10 +5490,10 @@ async function resolveArkInfo(arkProvider, walletRepository) {
|
|
|
5408
5490
|
try {
|
|
5409
5491
|
info = await arkProvider.getInfo();
|
|
5410
5492
|
} catch (err) {
|
|
5411
|
-
if (!
|
|
5493
|
+
if (!chunkKUN5ZRMW_cjs.isRetryableProviderError(err)) throw err;
|
|
5412
5494
|
const snapshot = await loadArkInfoSnapshot(walletRepository);
|
|
5413
5495
|
if (!snapshot) {
|
|
5414
|
-
throw new
|
|
5496
|
+
throw new chunkKUN5ZRMW_cjs.ProviderUnavailableError(
|
|
5415
5497
|
"Arkade server info is unavailable and no cached snapshot exists",
|
|
5416
5498
|
{ cause: err }
|
|
5417
5499
|
);
|
|
@@ -5794,7 +5876,7 @@ function collectArkTxidsNeedingCreatedAt(vtxos) {
|
|
|
5794
5876
|
return [...txids];
|
|
5795
5877
|
}
|
|
5796
5878
|
async function buildTransactionHistory(vtxos, allBoardingTxs, commitmentsToIgnore, resolveTxCreatedAt) {
|
|
5797
|
-
const fromOldestVtxo = vtxos.map(
|
|
5879
|
+
const fromOldestVtxo = vtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
|
|
5798
5880
|
const txidsNeedingCreatedAt = resolveTxCreatedAt ? collectArkTxidsNeedingCreatedAt(fromOldestVtxo) : [];
|
|
5799
5881
|
const resolvedCreatedAt = resolveTxCreatedAt && txidsNeedingCreatedAt.length > 0 ? await resolveTxCreatedAt(txidsNeedingCreatedAt) : /* @__PURE__ */ new Map();
|
|
5800
5882
|
const unmatchedSettledBoardingTxs = allBoardingTxs.filter(isSettledBoardingReceive).sort((a, b) => a.createdAt - b.createdAt);
|
|
@@ -5958,7 +6040,7 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
5958
6040
|
const virtualCoins = await this.wallet.getVtxos({
|
|
5959
6041
|
withRecoverable: false
|
|
5960
6042
|
});
|
|
5961
|
-
const controlAssetRef = params.controlAssetId ?
|
|
6043
|
+
const controlAssetRef = params.controlAssetId ? chunkYK6NP5KX_cjs.AssetRef.fromId(chunkYK6NP5KX_cjs.AssetId.fromString(params.controlAssetId)) : null;
|
|
5962
6044
|
const coinSelection = selectVirtualCoins(virtualCoins, Number(this.wallet.dustAmount));
|
|
5963
6045
|
let totalBtcSelected = 0n;
|
|
5964
6046
|
const assetChanges = /* @__PURE__ */ new Map();
|
|
@@ -5971,8 +6053,8 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
5971
6053
|
}
|
|
5972
6054
|
}
|
|
5973
6055
|
const groups = [];
|
|
5974
|
-
const issuedAssetOutput =
|
|
5975
|
-
const issuedAssetGroup =
|
|
6056
|
+
const issuedAssetOutput = chunkYK6NP5KX_cjs.AssetOutput.create(0, params.amount);
|
|
6057
|
+
const issuedAssetGroup = chunkYK6NP5KX_cjs.AssetGroup.create(
|
|
5976
6058
|
null,
|
|
5977
6059
|
controlAssetRef,
|
|
5978
6060
|
[],
|
|
@@ -5987,28 +6069,28 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
5987
6069
|
for (const [inputIndex, assets] of assetInputs) {
|
|
5988
6070
|
for (const asset of assets) {
|
|
5989
6071
|
if (asset.assetId !== assetId) continue;
|
|
5990
|
-
changeInputs.push(
|
|
6072
|
+
changeInputs.push(chunkYK6NP5KX_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
5991
6073
|
}
|
|
5992
6074
|
}
|
|
5993
6075
|
groups.push(
|
|
5994
|
-
|
|
5995
|
-
|
|
6076
|
+
chunkYK6NP5KX_cjs.AssetGroup.create(
|
|
6077
|
+
chunkYK6NP5KX_cjs.AssetId.fromString(assetId),
|
|
5996
6078
|
null,
|
|
5997
6079
|
changeInputs,
|
|
5998
|
-
[
|
|
6080
|
+
[chunkYK6NP5KX_cjs.AssetOutput.create(0, amount)],
|
|
5999
6081
|
[]
|
|
6000
6082
|
)
|
|
6001
6083
|
);
|
|
6002
6084
|
}
|
|
6003
6085
|
}
|
|
6004
6086
|
const address = await this.wallet.getAddress();
|
|
6005
|
-
const outputAddress =
|
|
6087
|
+
const outputAddress = chunkKUN5ZRMW_cjs.ArkAddress.decode(address);
|
|
6006
6088
|
const outputs = [
|
|
6007
6089
|
{
|
|
6008
6090
|
script: outputAddress.pkScript,
|
|
6009
6091
|
amount: BigInt(totalBtcSelected)
|
|
6010
6092
|
},
|
|
6011
|
-
Extension.create([
|
|
6093
|
+
Extension.create([chunkYK6NP5KX_cjs.Packet.create(groups)]).txOut()
|
|
6012
6094
|
];
|
|
6013
6095
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(
|
|
6014
6096
|
coinSelection.inputs,
|
|
@@ -6016,7 +6098,7 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6016
6098
|
);
|
|
6017
6099
|
return {
|
|
6018
6100
|
arkTxId: arkTxid,
|
|
6019
|
-
assetId:
|
|
6101
|
+
assetId: chunkYK6NP5KX_cjs.AssetId.create(arkTxid, 0).toString()
|
|
6020
6102
|
};
|
|
6021
6103
|
}
|
|
6022
6104
|
/**
|
|
@@ -6088,16 +6170,16 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6088
6170
|
for (const [inputIndex, assets] of assetInputs) {
|
|
6089
6171
|
for (const asset of assets) {
|
|
6090
6172
|
if (asset.assetId !== params.assetId) continue;
|
|
6091
|
-
reissueInputs.push(
|
|
6173
|
+
reissueInputs.push(chunkYK6NP5KX_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
6092
6174
|
}
|
|
6093
6175
|
}
|
|
6094
6176
|
const totalAssetAmount = assetToReissueAmount + params.amount;
|
|
6095
|
-
const reissueAssetIdObj =
|
|
6096
|
-
const reissueAssetGroup =
|
|
6177
|
+
const reissueAssetIdObj = chunkYK6NP5KX_cjs.AssetId.fromString(params.assetId);
|
|
6178
|
+
const reissueAssetGroup = chunkYK6NP5KX_cjs.AssetGroup.create(
|
|
6097
6179
|
reissueAssetIdObj,
|
|
6098
6180
|
null,
|
|
6099
6181
|
reissueInputs,
|
|
6100
|
-
[
|
|
6182
|
+
[chunkYK6NP5KX_cjs.AssetOutput.create(0, totalAssetAmount)],
|
|
6101
6183
|
[]
|
|
6102
6184
|
);
|
|
6103
6185
|
const groups = [reissueAssetGroup];
|
|
@@ -6106,27 +6188,27 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6106
6188
|
for (const [inputIndex, assets] of assetInputs) {
|
|
6107
6189
|
for (const asset of assets) {
|
|
6108
6190
|
if (asset.assetId !== assetId) continue;
|
|
6109
|
-
changeInputs.push(
|
|
6191
|
+
changeInputs.push(chunkYK6NP5KX_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
6110
6192
|
}
|
|
6111
6193
|
}
|
|
6112
6194
|
groups.push(
|
|
6113
|
-
|
|
6114
|
-
|
|
6195
|
+
chunkYK6NP5KX_cjs.AssetGroup.create(
|
|
6196
|
+
chunkYK6NP5KX_cjs.AssetId.fromString(assetId),
|
|
6115
6197
|
null,
|
|
6116
6198
|
changeInputs,
|
|
6117
|
-
[
|
|
6199
|
+
[chunkYK6NP5KX_cjs.AssetOutput.create(0, amount)],
|
|
6118
6200
|
[]
|
|
6119
6201
|
)
|
|
6120
6202
|
);
|
|
6121
6203
|
}
|
|
6122
6204
|
const address = await this.wallet.getAddress();
|
|
6123
|
-
const outputAddress =
|
|
6205
|
+
const outputAddress = chunkKUN5ZRMW_cjs.ArkAddress.decode(address);
|
|
6124
6206
|
const outputs = [
|
|
6125
6207
|
{
|
|
6126
6208
|
script: outputAddress.pkScript,
|
|
6127
6209
|
amount: BigInt(totalBtcSelected)
|
|
6128
6210
|
},
|
|
6129
|
-
Extension.create([
|
|
6211
|
+
Extension.create([chunkYK6NP5KX_cjs.Packet.create(groups)]).txOut()
|
|
6130
6212
|
];
|
|
6131
6213
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
|
|
6132
6214
|
return arkTxid;
|
|
@@ -6193,27 +6275,27 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6193
6275
|
for (const [inputIndex, assets] of assetInputs) {
|
|
6194
6276
|
for (const asset of assets) {
|
|
6195
6277
|
if (asset.assetId !== assetId) continue;
|
|
6196
|
-
changeInputs.push(
|
|
6278
|
+
changeInputs.push(chunkYK6NP5KX_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
6197
6279
|
}
|
|
6198
6280
|
}
|
|
6199
6281
|
groups.push(
|
|
6200
|
-
|
|
6201
|
-
|
|
6282
|
+
chunkYK6NP5KX_cjs.AssetGroup.create(
|
|
6283
|
+
chunkYK6NP5KX_cjs.AssetId.fromString(assetId),
|
|
6202
6284
|
null,
|
|
6203
6285
|
changeInputs,
|
|
6204
|
-
amount > 0n ? [
|
|
6286
|
+
amount > 0n ? [chunkYK6NP5KX_cjs.AssetOutput.create(0, amount)] : [],
|
|
6205
6287
|
[]
|
|
6206
6288
|
)
|
|
6207
6289
|
);
|
|
6208
6290
|
}
|
|
6209
6291
|
const address = await this.wallet.getAddress();
|
|
6210
|
-
const outputAddress =
|
|
6292
|
+
const outputAddress = chunkKUN5ZRMW_cjs.ArkAddress.decode(address);
|
|
6211
6293
|
const outputs = [
|
|
6212
6294
|
{
|
|
6213
6295
|
script: outputAddress.pkScript,
|
|
6214
6296
|
amount: BigInt(totalBtcSelected)
|
|
6215
6297
|
},
|
|
6216
|
-
Extension.create([
|
|
6298
|
+
Extension.create([chunkYK6NP5KX_cjs.Packet.create(groups)]).txOut()
|
|
6217
6299
|
];
|
|
6218
6300
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
|
|
6219
6301
|
return arkTxid;
|
|
@@ -6238,7 +6320,7 @@ function castMetadata(metadata) {
|
|
|
6238
6320
|
} else {
|
|
6239
6321
|
throw new Error("Invalid metadata value type");
|
|
6240
6322
|
}
|
|
6241
|
-
md.push(
|
|
6323
|
+
md.push(chunkYK6NP5KX_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
|
|
6242
6324
|
}
|
|
6243
6325
|
return md;
|
|
6244
6326
|
}
|
|
@@ -6259,10 +6341,10 @@ var DelegateManagerImpl = class {
|
|
|
6259
6341
|
if (vtxos.length === 0) {
|
|
6260
6342
|
return { delegated: [], failed: [] };
|
|
6261
6343
|
}
|
|
6262
|
-
const destinationScript =
|
|
6344
|
+
const destinationScript = chunkKUN5ZRMW_cjs.ArkAddress.decode(destination).pkScript;
|
|
6263
6345
|
const arkInfo = await this.arkInfoProvider.getInfo();
|
|
6264
6346
|
const delegateInfo = await this.delegateProvider.getDelegateInfo();
|
|
6265
|
-
const eligible = vtxos.map(
|
|
6347
|
+
const eligible = vtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo).filter(
|
|
6266
6348
|
(v) => isAnnotated(v) && findDelegateTapLeaf(v, delegateInfo.pubkey) !== void 0
|
|
6267
6349
|
);
|
|
6268
6350
|
if (eligible.length === 0) {
|
|
@@ -6291,11 +6373,11 @@ var DelegateManagerImpl = class {
|
|
|
6291
6373
|
const groupByExpiry = /* @__PURE__ */ new Map();
|
|
6292
6374
|
let recoverableVtxos = [];
|
|
6293
6375
|
for (const vtxo of eligible) {
|
|
6294
|
-
if (
|
|
6376
|
+
if (chunkKUN5ZRMW_cjs.canRecoverOnchain(vtxo, now)) {
|
|
6295
6377
|
recoverableVtxos.push(vtxo);
|
|
6296
6378
|
continue;
|
|
6297
6379
|
}
|
|
6298
|
-
const expiry =
|
|
6380
|
+
const expiry = chunkKUN5ZRMW_cjs.toBatchExpiry(vtxo);
|
|
6299
6381
|
if (!expiry) continue;
|
|
6300
6382
|
const dayKey = getDayTimestamp(expiry);
|
|
6301
6383
|
groupByExpiry.set(dayKey, [...groupByExpiry.get(dayKey) ?? [], vtxo]);
|
|
@@ -6360,7 +6442,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
6360
6442
|
}
|
|
6361
6443
|
if (!delegateAt) {
|
|
6362
6444
|
const now = { timestamp: /* @__PURE__ */ new Date() };
|
|
6363
|
-
const expiryTimestamp = vtxos.filter((coin) => !
|
|
6445
|
+
const expiryTimestamp = vtxos.filter((coin) => !chunkKUN5ZRMW_cjs.canRecoverOnchain(coin, now) && chunkKUN5ZRMW_cjs.toBatchExpiry(coin)).reduce((min, coin) => Math.min(min, chunkKUN5ZRMW_cjs.toBatchExpiry(coin)), Number.MAX_SAFE_INTEGER);
|
|
6364
6446
|
if (!expiryTimestamp || expiryTimestamp === Number.MAX_SAFE_INTEGER) {
|
|
6365
6447
|
delegateAt = new Date(Date.now() + 1 * 60 * 1e3);
|
|
6366
6448
|
} else {
|
|
@@ -6389,7 +6471,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
6389
6471
|
let amount = 0n;
|
|
6390
6472
|
for (const coin of vtxos) {
|
|
6391
6473
|
const inputFee = estimator.evalOffchainInput({
|
|
6392
|
-
...
|
|
6474
|
+
...chunkKUN5ZRMW_cjs.toOffchainInputFeeParams(coin),
|
|
6393
6475
|
type: "vtxo"
|
|
6394
6476
|
});
|
|
6395
6477
|
if (inputFee.value >= coin.value) {
|
|
@@ -6403,7 +6485,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
6403
6485
|
const delegateFee = BigInt(Number(fee));
|
|
6404
6486
|
if (delegateFee > 0n) {
|
|
6405
6487
|
outputs.push({
|
|
6406
|
-
script:
|
|
6488
|
+
script: chunkKUN5ZRMW_cjs.ArkAddress.decode(delegateAddress).pkScript,
|
|
6407
6489
|
amount: delegateFee
|
|
6408
6490
|
});
|
|
6409
6491
|
}
|
|
@@ -6436,10 +6518,10 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
6436
6518
|
destinationScript
|
|
6437
6519
|
);
|
|
6438
6520
|
const forfeitOutputScript = btcSigner.OutScript.encode(
|
|
6439
|
-
btcSigner.Address(
|
|
6521
|
+
btcSigner.Address(chunkKUN5ZRMW_cjs.getNetwork(network)).decode(forfeitAddress)
|
|
6440
6522
|
);
|
|
6441
6523
|
const forfeits = await Promise.all(
|
|
6442
|
-
vtxos.filter((v) => !
|
|
6524
|
+
vtxos.filter((v) => !chunkKUN5ZRMW_cjs.canRecoverOnchain(v, { timestamp: /* @__PURE__ */ new Date() })).map(async (coin) => {
|
|
6443
6525
|
const forfeit = await makeDelegateForfeitTx(
|
|
6444
6526
|
coin,
|
|
6445
6527
|
dust,
|
|
@@ -6464,7 +6546,7 @@ async function makeDelegateForfeitTx(input, connectorAmount, delegatePubkey, for
|
|
|
6464
6546
|
index: input.vout,
|
|
6465
6547
|
witnessUtxo: {
|
|
6466
6548
|
amount: BigInt(input.value),
|
|
6467
|
-
script:
|
|
6549
|
+
script: chunkKUN5ZRMW_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
6468
6550
|
},
|
|
6469
6551
|
sighashType: btcSigner.SigHash.ALL_ANYONECANPAY,
|
|
6470
6552
|
tapLeafScript: [delegateTapLeaf]
|
|
@@ -6522,7 +6604,7 @@ async function makeSignedDelegateIntent(identity, coins, outputs, onchainOutputs
|
|
|
6522
6604
|
expire_at: 0,
|
|
6523
6605
|
cosigners_public_keys: cosignerPubKeys
|
|
6524
6606
|
};
|
|
6525
|
-
const proof =
|
|
6607
|
+
const proof = chunkKUN5ZRMW_cjs.Intent.create(message, coins, outputs);
|
|
6526
6608
|
const signedProof = await identity.sign(proof);
|
|
6527
6609
|
return {
|
|
6528
6610
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -6540,10 +6622,10 @@ function getDayTimestamp(timestamp) {
|
|
|
6540
6622
|
function findDelegateTapLeaf(vtxo, delegatePubkey) {
|
|
6541
6623
|
if (!vtxo.tapTree) return void 0;
|
|
6542
6624
|
const pk = delegatePubkey.length === 66 ? delegatePubkey.slice(2) : delegatePubkey;
|
|
6543
|
-
const vtxoScript =
|
|
6625
|
+
const vtxoScript = chunkKUN5ZRMW_cjs.VtxoScript.decode(vtxo.tapTree);
|
|
6544
6626
|
return vtxoScript.leaves.find((tapLeaf) => {
|
|
6545
|
-
const arkTapscript =
|
|
6546
|
-
if (!
|
|
6627
|
+
const arkTapscript = chunkKUN5ZRMW_cjs.decodeTapscript(chunkKUN5ZRMW_cjs.scriptFromTapLeafScript(tapLeaf));
|
|
6628
|
+
if (!chunkKUN5ZRMW_cjs.MultisigTapscript.is(arkTapscript)) return false;
|
|
6547
6629
|
return arkTapscript.params.pubkeys.map(base.hex.encode).includes(pk);
|
|
6548
6630
|
});
|
|
6549
6631
|
}
|
|
@@ -6731,7 +6813,7 @@ async function closeDatabase(dbName) {
|
|
|
6731
6813
|
return true;
|
|
6732
6814
|
}
|
|
6733
6815
|
function scriptFromArkAddress(address) {
|
|
6734
|
-
return base.hex.encode(
|
|
6816
|
+
return base.hex.encode(chunkKUN5ZRMW_cjs.ArkAddress.decode(address).pkScript);
|
|
6735
6817
|
}
|
|
6736
6818
|
|
|
6737
6819
|
// src/repositories/indexedDB/schema.ts
|
|
@@ -7228,7 +7310,7 @@ function validateVtxosForScript(vtxos, script, context) {
|
|
|
7228
7310
|
}
|
|
7229
7311
|
async function getVtxosForContract(repo, contract) {
|
|
7230
7312
|
const vtxos = repo.getVtxosForScript ? await repo.getVtxosForScript(contract.script) : filterVtxosForScript(await repo.getVtxos(contract.address), contract.script);
|
|
7231
|
-
return vtxos.map(
|
|
7313
|
+
return vtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo);
|
|
7232
7314
|
}
|
|
7233
7315
|
async function saveVtxosForContract(repo, contract, vtxos) {
|
|
7234
7316
|
if (repo.saveVtxosForScript) {
|
|
@@ -7432,7 +7514,7 @@ var deserializeTapLeaf = (t) => {
|
|
|
7432
7514
|
const s = base.hex.decode(t.s);
|
|
7433
7515
|
return [cb, s];
|
|
7434
7516
|
};
|
|
7435
|
-
var deserializeVtxo = (o) =>
|
|
7517
|
+
var deserializeVtxo = (o) => chunkKUN5ZRMW_cjs.normalizeVtxo({
|
|
7436
7518
|
...o,
|
|
7437
7519
|
createdAt: new Date(o.createdAt),
|
|
7438
7520
|
tapTree: base.hex.decode(o.tapTree),
|
|
@@ -8571,7 +8653,7 @@ var ContractWatcher = class {
|
|
|
8571
8653
|
this.connectionState = "connected";
|
|
8572
8654
|
this.reconnectAttempts = 0;
|
|
8573
8655
|
this.listenLoop().catch((e) => {
|
|
8574
|
-
if (
|
|
8656
|
+
if (chunkKUN5ZRMW_cjs.isEventSourceError(e)) {
|
|
8575
8657
|
console.debug("ContractWatcher subscription disconnected; reconnecting");
|
|
8576
8658
|
} else {
|
|
8577
8659
|
console.error(e);
|
|
@@ -8800,14 +8882,14 @@ var ContractWatcher = class {
|
|
|
8800
8882
|
const timestamp = Date.now();
|
|
8801
8883
|
if (update.newVtxos?.length) {
|
|
8802
8884
|
this.processSubscriptionVtxos(
|
|
8803
|
-
update.newVtxos.map(
|
|
8885
|
+
update.newVtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo),
|
|
8804
8886
|
"vtxo_received",
|
|
8805
8887
|
timestamp
|
|
8806
8888
|
);
|
|
8807
8889
|
}
|
|
8808
8890
|
if (update.spentVtxos?.length) {
|
|
8809
8891
|
this.processSubscriptionVtxos(
|
|
8810
|
-
update.spentVtxos.map(
|
|
8892
|
+
update.spentVtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo),
|
|
8811
8893
|
"vtxo_spent",
|
|
8812
8894
|
timestamp
|
|
8813
8895
|
);
|
|
@@ -8940,7 +9022,7 @@ async function reconcileIntents(deps) {
|
|
|
8940
9022
|
let vtxosByOutpoint = /* @__PURE__ */ new Map();
|
|
8941
9023
|
if (outpoints.length > 0) {
|
|
8942
9024
|
try {
|
|
8943
|
-
const { vtxos } = await
|
|
9025
|
+
const { vtxos } = await chunkKUN5ZRMW_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
|
|
8944
9026
|
vtxosByOutpoint = new Map(vtxos.map((v) => [outpointKey(v), v]));
|
|
8945
9027
|
} catch (e) {
|
|
8946
9028
|
console.error("reconcileIntents: failed to fetch input VTXO state", e);
|
|
@@ -9060,7 +9142,7 @@ var ContractManager = class _ContractManager {
|
|
|
9060
9142
|
await this.reconcileWatched();
|
|
9061
9143
|
this.markSyncOnline();
|
|
9062
9144
|
} catch (err) {
|
|
9063
|
-
if (!
|
|
9145
|
+
if (!chunkKUN5ZRMW_cjs.isRetryableProviderError(err)) throw err;
|
|
9064
9146
|
this.markSyncDegraded(err);
|
|
9065
9147
|
}
|
|
9066
9148
|
this.initialized = true;
|
|
@@ -9172,7 +9254,7 @@ var ContractManager = class _ContractManager {
|
|
|
9172
9254
|
const from = Math.max(0, watermark - lookAhead.size);
|
|
9173
9255
|
const to = watermark + lookAhead.size;
|
|
9174
9256
|
const deps = lookAhead.candidateDeps();
|
|
9175
|
-
const handlers =
|
|
9257
|
+
const handlers = chunkOWTKOMJZ_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkOWTKOMJZ_cjs.contractHandlers.get(t)).filter(hasCandidates);
|
|
9176
9258
|
const band = /* @__PURE__ */ new Map();
|
|
9177
9259
|
for (let index = from; index <= to; index++) {
|
|
9178
9260
|
const descriptor = lookAhead.materialize(index);
|
|
@@ -9183,7 +9265,7 @@ var ContractManager = class _ContractManager {
|
|
|
9183
9265
|
index,
|
|
9184
9266
|
params: {
|
|
9185
9267
|
...candidate,
|
|
9186
|
-
...
|
|
9268
|
+
...chunkOWTKOMJZ_cjs.speculativeReceiveMetadata(descriptor)
|
|
9187
9269
|
}
|
|
9188
9270
|
});
|
|
9189
9271
|
}
|
|
@@ -9243,7 +9325,7 @@ var ContractManager = class _ContractManager {
|
|
|
9243
9325
|
});
|
|
9244
9326
|
for (const entry of pending) entry.catchUpPending = false;
|
|
9245
9327
|
} catch (err) {
|
|
9246
|
-
if (!
|
|
9328
|
+
if (!chunkKUN5ZRMW_cjs.isRetryableProviderError(err)) throw err;
|
|
9247
9329
|
this.markSyncDegraded(err);
|
|
9248
9330
|
}
|
|
9249
9331
|
}
|
|
@@ -9287,7 +9369,7 @@ var ContractManager = class _ContractManager {
|
|
|
9287
9369
|
await this.fetchContractVxosFromIndexer([contract]);
|
|
9288
9370
|
this.markSyncOnline();
|
|
9289
9371
|
} catch (err) {
|
|
9290
|
-
if (!
|
|
9372
|
+
if (!chunkKUN5ZRMW_cjs.isRetryableProviderError(err)) throw err;
|
|
9291
9373
|
this.markSyncDegraded(err);
|
|
9292
9374
|
}
|
|
9293
9375
|
await this.watcher.addContract(contract);
|
|
@@ -9324,7 +9406,7 @@ var ContractManager = class _ContractManager {
|
|
|
9324
9406
|
return result;
|
|
9325
9407
|
}
|
|
9326
9408
|
async upsertContractRow(params) {
|
|
9327
|
-
const handler =
|
|
9409
|
+
const handler = chunkOWTKOMJZ_cjs.contractHandlers.get(params.type);
|
|
9328
9410
|
if (!handler) {
|
|
9329
9411
|
throw new Error(`No handler registered for contract type '${params.type}'`);
|
|
9330
9412
|
}
|
|
@@ -9424,7 +9506,7 @@ var ContractManager = class _ContractManager {
|
|
|
9424
9506
|
`scanContracts: batchSize must be a positive integer (got ${String(opts.batchSize)})`
|
|
9425
9507
|
);
|
|
9426
9508
|
}
|
|
9427
|
-
const registered =
|
|
9509
|
+
const registered = chunkOWTKOMJZ_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkOWTKOMJZ_cjs.contractHandlers.get(t)).filter(isDiscoverable);
|
|
9428
9510
|
const discoverables = [
|
|
9429
9511
|
...registered.filter((h) => h.type === "boarding"),
|
|
9430
9512
|
...registered.filter((h) => h.type !== "boarding")
|
|
@@ -9559,7 +9641,7 @@ var ContractManager = class _ContractManager {
|
|
|
9559
9641
|
await this.syncContracts({ contracts, pageSize });
|
|
9560
9642
|
this.markSyncOnline();
|
|
9561
9643
|
} catch (err) {
|
|
9562
|
-
if (!
|
|
9644
|
+
if (!chunkKUN5ZRMW_cjs.isRetryableProviderError(err)) throw err;
|
|
9563
9645
|
this.markSyncDegraded(err);
|
|
9564
9646
|
}
|
|
9565
9647
|
const vtxos = await this.getVtxosForContracts(contracts);
|
|
@@ -9580,7 +9662,7 @@ var ContractManager = class _ContractManager {
|
|
|
9580
9662
|
}
|
|
9581
9663
|
const tapscriptCache = /* @__PURE__ */ new Map();
|
|
9582
9664
|
return vtxos.map(
|
|
9583
|
-
(vtxo) => extendVirtualCoinForContract(
|
|
9665
|
+
(vtxo) => extendVirtualCoinForContract(chunkKUN5ZRMW_cjs.normalizeVtxo(vtxo), byScript, tapscriptCache)
|
|
9584
9666
|
);
|
|
9585
9667
|
}
|
|
9586
9668
|
buildContractsDbFilter(filter) {
|
|
@@ -9665,7 +9747,7 @@ var ContractManager = class _ContractManager {
|
|
|
9665
9747
|
const { contractScript, collaborative = true, walletPubKey, vtxo } = options;
|
|
9666
9748
|
const [contract] = await this.getContracts({ script: contractScript });
|
|
9667
9749
|
if (!contract) return [];
|
|
9668
|
-
const handler =
|
|
9750
|
+
const handler = chunkOWTKOMJZ_cjs.contractHandlers.get(contract.type);
|
|
9669
9751
|
if (!handler) return [];
|
|
9670
9752
|
const script = handler.createScript(contract.params);
|
|
9671
9753
|
const context = {
|
|
@@ -9685,7 +9767,7 @@ var ContractManager = class _ContractManager {
|
|
|
9685
9767
|
const { contractScript, collaborative = true, walletPubKey } = options;
|
|
9686
9768
|
const [contract] = await this.getContracts({ script: contractScript });
|
|
9687
9769
|
if (!contract) return [];
|
|
9688
|
-
const handler =
|
|
9770
|
+
const handler = chunkOWTKOMJZ_cjs.contractHandlers.get(contract.type);
|
|
9689
9771
|
if (!handler) return [];
|
|
9690
9772
|
const script = handler.createScript(contract.params);
|
|
9691
9773
|
const context = {
|
|
@@ -9741,7 +9823,7 @@ var ContractManager = class _ContractManager {
|
|
|
9741
9823
|
}
|
|
9742
9824
|
async refreshOutpoints(outpoints) {
|
|
9743
9825
|
if (outpoints.length === 0) return;
|
|
9744
|
-
const { vtxos } = await
|
|
9826
|
+
const { vtxos } = await chunkKUN5ZRMW_cjs.getNormalizedVtxos(this.config.indexerProvider, {
|
|
9745
9827
|
outpoints
|
|
9746
9828
|
});
|
|
9747
9829
|
if (vtxos.length === 0) return;
|
|
@@ -9819,7 +9901,7 @@ var ContractManager = class _ContractManager {
|
|
|
9819
9901
|
break;
|
|
9820
9902
|
}
|
|
9821
9903
|
} catch (err) {
|
|
9822
|
-
if (!
|
|
9904
|
+
if (!chunkKUN5ZRMW_cjs.isRetryableProviderError(err)) throw err;
|
|
9823
9905
|
this.markSyncDegraded(err);
|
|
9824
9906
|
}
|
|
9825
9907
|
this.emitEvent(event);
|
|
@@ -9868,7 +9950,7 @@ var ContractManager = class _ContractManager {
|
|
|
9868
9950
|
*/
|
|
9869
9951
|
async reconcilePendingFrontier(contracts) {
|
|
9870
9952
|
const scriptToContract = new Map(contracts.map((c) => [c.script, c]));
|
|
9871
|
-
const vtxos = await
|
|
9953
|
+
const vtxos = await chunkKUN5ZRMW_cjs.getAllNormalizedVtxos(
|
|
9872
9954
|
this.config.indexerProvider,
|
|
9873
9955
|
contracts.map((c) => c.script),
|
|
9874
9956
|
{ pendingOnly: true }
|
|
@@ -9949,7 +10031,7 @@ var ContractManager = class _ContractManager {
|
|
|
9949
10031
|
}
|
|
9950
10032
|
return result;
|
|
9951
10033
|
}
|
|
9952
|
-
async fetchContractVtxosBulk(contracts, pageSize =
|
|
10034
|
+
async fetchContractVtxosBulk(contracts, pageSize = chunkKUN5ZRMW_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
|
|
9953
10035
|
if (contracts.length === 0) {
|
|
9954
10036
|
return { vtxosByScript: /* @__PURE__ */ new Map(), promoted: /* @__PURE__ */ new Map() };
|
|
9955
10037
|
}
|
|
@@ -9965,7 +10047,7 @@ var ContractManager = class _ContractManager {
|
|
|
9965
10047
|
before: syncWindow.before
|
|
9966
10048
|
}
|
|
9967
10049
|
} : {};
|
|
9968
|
-
const vtxos = await
|
|
10050
|
+
const vtxos = await chunkKUN5ZRMW_cjs.getAllNormalizedVtxos(
|
|
9969
10051
|
this.config.indexerProvider,
|
|
9970
10052
|
contracts.map((c) => c.script),
|
|
9971
10053
|
{ ...windowOpts, pageSize }
|
|
@@ -10132,7 +10214,7 @@ var HDDescriptorProvider = class _HDDescriptorProvider {
|
|
|
10132
10214
|
*/
|
|
10133
10215
|
materializeDescriptorAt(index) {
|
|
10134
10216
|
const descriptor = this.identity.descriptor;
|
|
10135
|
-
const network =
|
|
10217
|
+
const network = chunkOWTKOMJZ_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
10136
10218
|
const expansion = descriptorsScure.expand({ descriptor, network, index });
|
|
10137
10219
|
const keyInfo = expansion.expansionMap?.["@0"];
|
|
10138
10220
|
if (!keyInfo?.keyExpression) {
|
|
@@ -10276,7 +10358,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
|
|
|
10276
10358
|
const provider = await resolveDescriptorProvider(config, setup.walletRepository);
|
|
10277
10359
|
if (!provider) return void 0;
|
|
10278
10360
|
const allowSilentFallback = (config.walletMode ?? "auto") === "auto";
|
|
10279
|
-
const expectedContractType = setup.offchainTapscript instanceof
|
|
10361
|
+
const expectedContractType = setup.offchainTapscript instanceof chunkOWTKOMJZ_cjs.DelegateVtxo.Script ? "delegate" : "default";
|
|
10280
10362
|
const factoryOpts = {
|
|
10281
10363
|
walletRepository: setup.walletRepository,
|
|
10282
10364
|
contractRepository: setup.contractRepository,
|
|
@@ -10475,7 +10557,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
|
|
|
10475
10557
|
};
|
|
10476
10558
|
function deriveLeafPubkey(descriptor) {
|
|
10477
10559
|
try {
|
|
10478
|
-
return
|
|
10560
|
+
return chunkOWTKOMJZ_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
10479
10561
|
} catch (e) {
|
|
10480
10562
|
throw new NonRangeableDescriptorError(
|
|
10481
10563
|
"Cannot derive leaf pubkey: descriptor is not a materialized, parsable tr(...) shape.",
|
|
@@ -10487,7 +10569,7 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
10487
10569
|
const pubKey = deriveLeafPubkey(descriptor);
|
|
10488
10570
|
const tapscript = rebuildTapscript(current, pubKey);
|
|
10489
10571
|
const serverPubKey = tapscript.options.serverPubKey;
|
|
10490
|
-
const csvTimelock =
|
|
10572
|
+
const csvTimelock = chunkKUN5ZRMW_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
|
|
10491
10573
|
const base$1 = {
|
|
10492
10574
|
script: base.hex.encode(tapscript.pkScript),
|
|
10493
10575
|
address: tapscript.address(hrp, serverPubKey).encode(),
|
|
@@ -10498,11 +10580,11 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
10498
10580
|
// index-0 key. Without it, spends produce unsigned PSBTs that the
|
|
10499
10581
|
// server rejects with `INVALID_PSBT_INPUT (5): missing tapscript spend sig`.
|
|
10500
10582
|
metadata: {
|
|
10501
|
-
...{ source:
|
|
10583
|
+
...{ source: chunkOWTKOMJZ_cjs.WALLET_RECEIVE_SOURCE },
|
|
10502
10584
|
signingDescriptor: descriptor
|
|
10503
10585
|
}
|
|
10504
10586
|
};
|
|
10505
|
-
const params = tapscript instanceof
|
|
10587
|
+
const params = tapscript instanceof chunkOWTKOMJZ_cjs.DelegateVtxo.Script ? {
|
|
10506
10588
|
...base$1,
|
|
10507
10589
|
type: "delegate",
|
|
10508
10590
|
params: {
|
|
@@ -10523,10 +10605,10 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
10523
10605
|
return { tapscript, params };
|
|
10524
10606
|
}
|
|
10525
10607
|
function rebuildTapscript(current, pubKey) {
|
|
10526
|
-
if (current instanceof
|
|
10527
|
-
return new
|
|
10608
|
+
if (current instanceof chunkOWTKOMJZ_cjs.DelegateVtxo.Script) {
|
|
10609
|
+
return new chunkOWTKOMJZ_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
|
|
10528
10610
|
}
|
|
10529
|
-
return new
|
|
10611
|
+
return new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
|
|
10530
10612
|
}
|
|
10531
10613
|
async function pickActiveReceive(contractRepository, serverPubKey, expectedType) {
|
|
10532
10614
|
const candidates = await contractRepository.getContracts({
|
|
@@ -10535,7 +10617,7 @@ async function pickActiveReceive(contractRepository, serverPubKey, expectedType)
|
|
|
10535
10617
|
});
|
|
10536
10618
|
const serverPubKeyHex = base.hex.encode(serverPubKey);
|
|
10537
10619
|
const matching = candidates.filter(
|
|
10538
|
-
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source ===
|
|
10620
|
+
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkOWTKOMJZ_cjs.WALLET_RECEIVE_SOURCE
|
|
10539
10621
|
).sort((a, b) => {
|
|
10540
10622
|
if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
|
|
10541
10623
|
return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
|
|
@@ -10711,12 +10793,12 @@ var InputSignerRouter = class {
|
|
|
10711
10793
|
};
|
|
10712
10794
|
|
|
10713
10795
|
// src/wallet/wallet.ts
|
|
10714
|
-
var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl ||
|
|
10796
|
+
var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl || chunkKUN5ZRMW_cjs.DEFAULT_ARKADE_SERVER_URL;
|
|
10715
10797
|
function intentProofJobs(coins) {
|
|
10716
10798
|
if (coins.length === 0) return [];
|
|
10717
10799
|
const coinJobs = coins.map((coin, i) => ({
|
|
10718
10800
|
index: i + 1,
|
|
10719
|
-
lookupScript:
|
|
10801
|
+
lookupScript: chunkKUN5ZRMW_cjs.VtxoScript.decode(coin.tapTree).pkScript
|
|
10720
10802
|
}));
|
|
10721
10803
|
return [{ index: 0, lookupScript: coinJobs[0].lookupScript }, ...coinJobs];
|
|
10722
10804
|
}
|
|
@@ -10741,7 +10823,7 @@ function dedupeTimelocks(timelocks) {
|
|
|
10741
10823
|
const seen = /* @__PURE__ */ new Set();
|
|
10742
10824
|
const deduped = [];
|
|
10743
10825
|
for (const timelock of timelocks) {
|
|
10744
|
-
const sequence =
|
|
10826
|
+
const sequence = chunkKUN5ZRMW_cjs.timelockToSequence(timelock).toString();
|
|
10745
10827
|
if (seen.has(sequence)) continue;
|
|
10746
10828
|
seen.add(sequence);
|
|
10747
10829
|
deduped.push(timelock);
|
|
@@ -10758,7 +10840,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
|
|
|
10758
10840
|
state: "active"
|
|
10759
10841
|
});
|
|
10760
10842
|
const newest = candidates.filter(
|
|
10761
|
-
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source ===
|
|
10843
|
+
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkOWTKOMJZ_cjs.WALLET_RECEIVE_SOURCE
|
|
10762
10844
|
).sort((a, b) => {
|
|
10763
10845
|
if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
|
|
10764
10846
|
return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
|
|
@@ -10766,7 +10848,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
|
|
|
10766
10848
|
if (!newest?.params.pubKey) return baseline;
|
|
10767
10849
|
try {
|
|
10768
10850
|
const pubKey = base.hex.decode(newest.params.pubKey);
|
|
10769
|
-
return new
|
|
10851
|
+
return new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
|
|
10770
10852
|
} catch (e) {
|
|
10771
10853
|
console.warn("Skipping malformed boarding contract at boot", newest.script, e);
|
|
10772
10854
|
return baseline;
|
|
@@ -11100,7 +11182,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11100
11182
|
*/
|
|
11101
11183
|
static async setupWalletConfig(config, pubKey) {
|
|
11102
11184
|
const arkadeServerUrl = getArkadeServerUrl(config);
|
|
11103
|
-
const arkProvider = config.arkProvider || new
|
|
11185
|
+
const arkProvider = config.arkProvider || new chunkKUN5ZRMW_cjs.RestArkProvider(arkadeServerUrl);
|
|
11104
11186
|
let indexerProvider = config.indexerProvider;
|
|
11105
11187
|
if (!indexerProvider) {
|
|
11106
11188
|
let indexerUrl = config.indexerUrl;
|
|
@@ -11117,7 +11199,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11117
11199
|
indexerUrl = arkadeServerUrl;
|
|
11118
11200
|
}
|
|
11119
11201
|
}
|
|
11120
|
-
indexerProvider = new
|
|
11202
|
+
indexerProvider = new chunkYK6NP5KX_cjs.RestIndexerProvider(indexerUrl);
|
|
11121
11203
|
}
|
|
11122
11204
|
const walletRepository = config.storage?.walletRepository ?? new IndexedDBWalletRepository();
|
|
11123
11205
|
const contractRepository = config.storage?.contractRepository ?? new IndexedDBContractRepository();
|
|
@@ -11126,7 +11208,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11126
11208
|
source: serverInfoSource,
|
|
11127
11209
|
lastOnlineAt: serverInfoLastOnlineAt
|
|
11128
11210
|
} = await resolveArkInfo(arkProvider, walletRepository);
|
|
11129
|
-
const network =
|
|
11211
|
+
const network = chunkKUN5ZRMW_cjs.getNetwork(info.network);
|
|
11130
11212
|
if ("descriptor" in config.identity) {
|
|
11131
11213
|
const descriptor = config.identity.descriptor;
|
|
11132
11214
|
const identityIsMainnet = !descriptor.includes("tpub");
|
|
@@ -11173,11 +11255,11 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11173
11255
|
serverPubKey,
|
|
11174
11256
|
csvTimelock: exitTimelock
|
|
11175
11257
|
};
|
|
11176
|
-
const offchainTapscript = !delegatePubKey ? new
|
|
11177
|
-
const boardingTapscript =
|
|
11258
|
+
const offchainTapscript = !delegatePubKey ? new chunkOWTKOMJZ_cjs.DefaultVtxo.Script(offchainOptions) : new chunkOWTKOMJZ_cjs.DelegateVtxo.Script({ ...offchainOptions, delegatePubKey });
|
|
11259
|
+
const boardingTapscript = chunkOWTKOMJZ_cjs.BoardingContractHandler.createScript({
|
|
11178
11260
|
pubKey: base.hex.encode(pubKey),
|
|
11179
11261
|
serverPubKey: base.hex.encode(serverPubKey),
|
|
11180
|
-
csvTimelock:
|
|
11262
|
+
csvTimelock: chunkKUN5ZRMW_cjs.timelockToSequence(boardingTimelock).toString()
|
|
11181
11263
|
});
|
|
11182
11264
|
return {
|
|
11183
11265
|
arkProvider,
|
|
@@ -11283,19 +11365,19 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11283
11365
|
let pendingRecovery = 0;
|
|
11284
11366
|
const now = { timestamp: /* @__PURE__ */ new Date() };
|
|
11285
11367
|
const settled = vtxos.filter(
|
|
11286
|
-
(coin) =>
|
|
11368
|
+
(coin) => chunkKUN5ZRMW_cjs.canSpendOffchain(coin, now) && !coin.isPreconfirmed && !isPendingRecovery(coin)
|
|
11287
11369
|
).reduce((sum, coin) => sum + coin.value, 0);
|
|
11288
11370
|
const preconfirmed = vtxos.filter(
|
|
11289
|
-
(coin) =>
|
|
11371
|
+
(coin) => chunkKUN5ZRMW_cjs.canSpendOffchain(coin, now) && coin.isPreconfirmed && !isPendingRecovery(coin)
|
|
11290
11372
|
).reduce((sum, coin) => sum + coin.value, 0);
|
|
11291
|
-
const available = unlockedVtxos.filter((coin) =>
|
|
11292
|
-
recoverable = vtxos.filter((coin) =>
|
|
11373
|
+
const available = unlockedVtxos.filter((coin) => chunkKUN5ZRMW_cjs.canSpendOffchain(coin, now) && !isPendingRecovery(coin)).reduce((sum, coin) => sum + coin.value, 0);
|
|
11374
|
+
recoverable = vtxos.filter((coin) => chunkKUN5ZRMW_cjs.canRecoverOnchain(coin, now) && !isPendingRecovery(coin)).reduce((sum, coin) => sum + coin.value, 0);
|
|
11293
11375
|
pendingRecovery = vtxos.filter(isPendingRecovery).reduce((sum, coin) => sum + coin.value, 0);
|
|
11294
11376
|
const totalBoarding = confirmed + unconfirmed;
|
|
11295
11377
|
const totalOffchain = settled + preconfirmed + recoverable + pendingRecovery;
|
|
11296
11378
|
const assetBalances = /* @__PURE__ */ new Map();
|
|
11297
11379
|
for (const vtxo of vtxos) {
|
|
11298
|
-
if (
|
|
11380
|
+
if (chunkKUN5ZRMW_cjs.hasTerminalSpend(vtxo)) continue;
|
|
11299
11381
|
if (vtxo.assets) {
|
|
11300
11382
|
for (const a of vtxo.assets) {
|
|
11301
11383
|
const current = assetBalances.get(a.assetId) ?? 0n;
|
|
@@ -11336,8 +11418,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11336
11418
|
if (this._pendingSpendOutpoints.has(`${vtxo.txid}:${vtxo.vout}`)) {
|
|
11337
11419
|
return false;
|
|
11338
11420
|
}
|
|
11339
|
-
if (!
|
|
11340
|
-
if (!f.withRecoverable &&
|
|
11421
|
+
if (!chunkKUN5ZRMW_cjs.hasTerminalSpend(vtxo)) {
|
|
11422
|
+
if (!f.withRecoverable && chunkKUN5ZRMW_cjs.canRecoverOnchain(vtxo, now)) {
|
|
11341
11423
|
return false;
|
|
11342
11424
|
}
|
|
11343
11425
|
return true;
|
|
@@ -11370,7 +11452,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11370
11452
|
const response = await contractManager.getContractsWithVtxos();
|
|
11371
11453
|
const allVtxos = response.flatMap((_) => _.vtxos);
|
|
11372
11454
|
const { boardingTxs, commitmentsToIgnore } = await this.getBoardingTxs();
|
|
11373
|
-
const resolveTxCreatedAt = (txids) =>
|
|
11455
|
+
const resolveTxCreatedAt = (txids) => chunkKUN5ZRMW_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
|
|
11374
11456
|
return buildTransactionHistory(
|
|
11375
11457
|
allVtxos,
|
|
11376
11458
|
boardingTxs,
|
|
@@ -11464,7 +11546,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11464
11546
|
},
|
|
11465
11547
|
isUnrolled: true,
|
|
11466
11548
|
...boardingFacts,
|
|
11467
|
-
virtualStatus:
|
|
11549
|
+
virtualStatus: chunkKUN5ZRMW_cjs.toVirtualStatus(boardingFacts),
|
|
11468
11550
|
spentBy: "",
|
|
11469
11551
|
createdAt: tx.status.confirmed ? new Date(tx.status.block_time * 1e3) : /* @__PURE__ */ new Date(0),
|
|
11470
11552
|
script: scriptHex
|
|
@@ -11520,9 +11602,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11520
11602
|
async getBoardingTapscripts(allowedSigners) {
|
|
11521
11603
|
const byScript = /* @__PURE__ */ new Map();
|
|
11522
11604
|
const add = (s) => byScript.set(base.hex.encode(s.pkScript), s);
|
|
11523
|
-
const boardingCsv = this.boardingTapscript.options.csvTimelock ??
|
|
11605
|
+
const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunkOWTKOMJZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
11524
11606
|
add(
|
|
11525
|
-
new
|
|
11607
|
+
new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({
|
|
11526
11608
|
pubKey: await this.identity.xOnlyPublicKey(),
|
|
11527
11609
|
serverPubKey: this.boardingTapscript.options.serverPubKey,
|
|
11528
11610
|
csvTimelock: boardingCsv
|
|
@@ -11537,7 +11619,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11537
11619
|
for (const c of boardingContracts) {
|
|
11538
11620
|
if (!allowed.has(toXOnlySignerHex(c.params.serverPubKey))) continue;
|
|
11539
11621
|
try {
|
|
11540
|
-
add(
|
|
11622
|
+
add(chunkOWTKOMJZ_cjs.BoardingContractHandler.createScript(c.params));
|
|
11541
11623
|
} catch (e) {
|
|
11542
11624
|
console.warn("Skipping malformed boarding contract", c.script, e);
|
|
11543
11625
|
}
|
|
@@ -11575,7 +11657,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11575
11657
|
// Per-row CSV delay decoded from THIS tapscript's exit leaf —
|
|
11576
11658
|
// not the wallet's current boarding timelock, which a signer
|
|
11577
11659
|
// rotation may have changed.
|
|
11578
|
-
csvTimelock:
|
|
11660
|
+
csvTimelock: chunkKUN5ZRMW_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
|
|
11579
11661
|
coins: utxos
|
|
11580
11662
|
});
|
|
11581
11663
|
}
|
|
@@ -11708,7 +11790,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11708
11790
|
/** Fetch Arkade transaction ids that are still pending final settlement. */
|
|
11709
11791
|
async fetchPendingTxs() {
|
|
11710
11792
|
const scripts = await this.getWalletScripts();
|
|
11711
|
-
const vtxos = await
|
|
11793
|
+
const vtxos = await chunkKUN5ZRMW_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
|
|
11712
11794
|
return vtxos.filter(
|
|
11713
11795
|
(vtxo) => (vtxo.isSpent || vtxo.isPreconfirmed && !vtxo.isSwept) && vtxo.arkTxId !== void 0
|
|
11714
11796
|
).map((_) => _.arkTxId);
|
|
@@ -11739,7 +11821,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11739
11821
|
});
|
|
11740
11822
|
for (const contract of contracts) {
|
|
11741
11823
|
if (map.has(contract.script)) continue;
|
|
11742
|
-
const handler =
|
|
11824
|
+
const handler = chunkOWTKOMJZ_cjs.contractHandlers.get(contract.type);
|
|
11743
11825
|
if (handler) {
|
|
11744
11826
|
const script = handler.createScript(contract.params);
|
|
11745
11827
|
map.set(contract.script, script);
|
|
@@ -11842,7 +11924,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11842
11924
|
lookAhead: this.lookAheadConfig()
|
|
11843
11925
|
});
|
|
11844
11926
|
const baselinePubkey = await this.identity.xOnlyPublicKey();
|
|
11845
|
-
const delegatePubKey = this.offchainTapscript instanceof
|
|
11927
|
+
const delegatePubKey = this.offchainTapscript instanceof chunkOWTKOMJZ_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
|
|
11846
11928
|
const baselineSigners = [
|
|
11847
11929
|
this.offchainTapscript.options.serverPubKey,
|
|
11848
11930
|
...[...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h))
|
|
@@ -11850,8 +11932,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11850
11932
|
const seenBaselineScripts = /* @__PURE__ */ new Set();
|
|
11851
11933
|
for (const serverPubKey of baselineSigners) {
|
|
11852
11934
|
for (const csvTimelock of this.walletContractTimelocks) {
|
|
11853
|
-
const csvTimelockStr =
|
|
11854
|
-
const defaultScript = new
|
|
11935
|
+
const csvTimelockStr = chunkKUN5ZRMW_cjs.timelockToSequence(csvTimelock).toString();
|
|
11936
|
+
const defaultScript = new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({
|
|
11855
11937
|
pubKey: baselinePubkey,
|
|
11856
11938
|
serverPubKey,
|
|
11857
11939
|
csvTimelock
|
|
@@ -11872,7 +11954,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11872
11954
|
});
|
|
11873
11955
|
}
|
|
11874
11956
|
if (delegatePubKey) {
|
|
11875
|
-
const delegateScript = new
|
|
11957
|
+
const delegateScript = new chunkOWTKOMJZ_cjs.DelegateVtxo.Script({
|
|
11876
11958
|
pubKey: baselinePubkey,
|
|
11877
11959
|
serverPubKey,
|
|
11878
11960
|
delegatePubKey,
|
|
@@ -11896,9 +11978,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11896
11978
|
}
|
|
11897
11979
|
}
|
|
11898
11980
|
}
|
|
11899
|
-
const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ??
|
|
11981
|
+
const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunkOWTKOMJZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
11900
11982
|
for (const serverPubKey of baselineSigners) {
|
|
11901
|
-
const baselineBoarding = new
|
|
11983
|
+
const baselineBoarding = new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({
|
|
11902
11984
|
pubKey: baselinePubkey,
|
|
11903
11985
|
serverPubKey,
|
|
11904
11986
|
csvTimelock: boardingCsvTimelock
|
|
@@ -11911,7 +11993,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11911
11993
|
params: {
|
|
11912
11994
|
pubKey: base.hex.encode(baselineBoarding.options.pubKey),
|
|
11913
11995
|
serverPubKey: base.hex.encode(serverPubKey),
|
|
11914
|
-
csvTimelock:
|
|
11996
|
+
csvTimelock: chunkKUN5ZRMW_cjs.timelockToSequence(boardingCsvTimelock).toString()
|
|
11915
11997
|
},
|
|
11916
11998
|
script: boardingScriptHex,
|
|
11917
11999
|
address: baselineBoarding.address(this.network.hrp, serverPubKey).encode(),
|
|
@@ -11933,7 +12015,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11933
12015
|
}
|
|
11934
12016
|
};
|
|
11935
12017
|
var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
11936
|
-
constructor(identity, network, onchainProvider, arkProvider, indexerProvider, arkServerPublicKey, offchainTapscript, boardingTapscript, serverUnrollScript, forfeitOutputScript, forfeitPubkey, dustAmount, walletRepository, contractRepository, renewalConfig, delegateProvider, watcherConfig, settlementConfig, walletContractTimelocks, receiveRotator, descriptorProvider, lookAheadWindow) {
|
|
12018
|
+
constructor(identity, network, onchainProvider, arkProvider, indexerProvider, arkServerPublicKey, offchainTapscript, boardingTapscript, serverUnrollScript, forfeitOutputScript, forfeitPubkey, dustAmount, walletRepository, contractRepository, renewalConfig, delegateProvider, watcherConfig, settlementConfig, walletContractTimelocks, receiveRotator, descriptorProvider, lookAheadWindow, batchExpiryPolicy, checkpointExitDelayPolicy) {
|
|
11937
12019
|
super(
|
|
11938
12020
|
identity,
|
|
11939
12021
|
network,
|
|
@@ -11952,6 +12034,8 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
11952
12034
|
this.arkProvider = arkProvider;
|
|
11953
12035
|
this.forfeitOutputScript = forfeitOutputScript;
|
|
11954
12036
|
this.forfeitPubkey = forfeitPubkey;
|
|
12037
|
+
this.batchExpiryPolicy = batchExpiryPolicy;
|
|
12038
|
+
this.checkpointExitDelayPolicy = checkpointExitDelayPolicy;
|
|
11955
12039
|
this.identity = identity;
|
|
11956
12040
|
this.renewalConfig = {
|
|
11957
12041
|
enabled: renewalConfig?.enabled ?? false,
|
|
@@ -11984,6 +12068,8 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
11984
12068
|
arkProvider;
|
|
11985
12069
|
forfeitOutputScript;
|
|
11986
12070
|
forfeitPubkey;
|
|
12071
|
+
batchExpiryPolicy;
|
|
12072
|
+
checkpointExitDelayPolicy;
|
|
11987
12073
|
static MIN_FEE_RATE = 1;
|
|
11988
12074
|
// sats/vbyte
|
|
11989
12075
|
identity;
|
|
@@ -12085,7 +12171,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
12085
12171
|
serverPubKey: this.offchainTapscript.options.serverPubKey,
|
|
12086
12172
|
deprecatedSignerPubKeys: [...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h)),
|
|
12087
12173
|
csvTimelocks: this.walletContractTimelocks,
|
|
12088
|
-
delegatePubKey: this.offchainTapscript instanceof
|
|
12174
|
+
delegatePubKey: this.offchainTapscript instanceof chunkOWTKOMJZ_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
|
|
12089
12175
|
};
|
|
12090
12176
|
}
|
|
12091
12177
|
_signerRouter;
|
|
@@ -12177,25 +12263,25 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
12177
12263
|
return this.getBoardingAddress();
|
|
12178
12264
|
}
|
|
12179
12265
|
const descriptor = await provider.getNextSigningDescriptor();
|
|
12180
|
-
const pubKey =
|
|
12181
|
-
const newBoarding = new
|
|
12266
|
+
const pubKey = chunkOWTKOMJZ_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
12267
|
+
const newBoarding = new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({
|
|
12182
12268
|
...this._boardingTapscript.options,
|
|
12183
12269
|
pubKey
|
|
12184
12270
|
});
|
|
12185
|
-
const csvTimelock = newBoarding.options.csvTimelock ??
|
|
12271
|
+
const csvTimelock = newBoarding.options.csvTimelock ?? chunkOWTKOMJZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
12186
12272
|
const manager = await this.getContractManager();
|
|
12187
12273
|
await manager.createContract({
|
|
12188
12274
|
type: "boarding",
|
|
12189
12275
|
params: {
|
|
12190
12276
|
pubKey: base.hex.encode(pubKey),
|
|
12191
12277
|
serverPubKey: base.hex.encode(newBoarding.options.serverPubKey),
|
|
12192
|
-
csvTimelock:
|
|
12278
|
+
csvTimelock: chunkKUN5ZRMW_cjs.timelockToSequence(csvTimelock).toString()
|
|
12193
12279
|
},
|
|
12194
12280
|
script: base.hex.encode(newBoarding.pkScript),
|
|
12195
12281
|
address: newBoarding.address(this.network.hrp, this.arkServerPublicKey).encode(),
|
|
12196
12282
|
state: "active",
|
|
12197
12283
|
metadata: {
|
|
12198
|
-
source:
|
|
12284
|
+
source: chunkOWTKOMJZ_cjs.WALLET_RECEIVE_SOURCE,
|
|
12199
12285
|
signingDescriptor: descriptor
|
|
12200
12286
|
}
|
|
12201
12287
|
});
|
|
@@ -12282,12 +12368,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
12282
12368
|
*/
|
|
12283
12369
|
async rotateServerSigner(newServerPubKey, checkpointTapscript) {
|
|
12284
12370
|
const xonly = toXOnlyPubKey(newServerPubKey);
|
|
12285
|
-
|
|
12286
|
-
|
|
12287
|
-
|
|
12288
|
-
|
|
12289
|
-
throw new Error("Invalid checkpointTapscript from server");
|
|
12290
|
-
}
|
|
12371
|
+
const newServerUnrollScript = assertValidServerUnrollScript(
|
|
12372
|
+
checkpointTapscript,
|
|
12373
|
+
resolveCheckpointExitDelayPolicy(this.network, this.checkpointExitDelayPolicy)
|
|
12374
|
+
);
|
|
12291
12375
|
if (utils_js.equalBytes(xonly, this.arkServerPublicKey)) return;
|
|
12292
12376
|
if (this._receiveRotator) {
|
|
12293
12377
|
await this._receiveRotator.runExclusive(
|
|
@@ -12312,21 +12396,21 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
12312
12396
|
const [currentBoardingRow] = await manager.getContracts({
|
|
12313
12397
|
script: currentBoardingScript
|
|
12314
12398
|
});
|
|
12315
|
-
const newOffchain = this.offchainTapscript instanceof
|
|
12399
|
+
const newOffchain = this.offchainTapscript instanceof chunkOWTKOMJZ_cjs.DelegateVtxo.Script ? new chunkOWTKOMJZ_cjs.DelegateVtxo.Script({
|
|
12316
12400
|
...this.offchainTapscript.options,
|
|
12317
12401
|
serverPubKey: xonly
|
|
12318
|
-
}) : new
|
|
12402
|
+
}) : new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({
|
|
12319
12403
|
...this.offchainTapscript.options,
|
|
12320
12404
|
serverPubKey: xonly
|
|
12321
12405
|
});
|
|
12322
|
-
const newBoarding = new
|
|
12406
|
+
const newBoarding = new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({
|
|
12323
12407
|
...this._boardingTapscript.options,
|
|
12324
12408
|
serverPubKey: xonly
|
|
12325
12409
|
});
|
|
12326
|
-
const offchainCsv =
|
|
12410
|
+
const offchainCsv = chunkKUN5ZRMW_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
|
|
12327
12411
|
const newOffchainScript = base.hex.encode(newOffchain.pkScript);
|
|
12328
12412
|
const newOffchainAddress = newOffchain.address(this.network.hrp, xonly).encode();
|
|
12329
|
-
if (newOffchain instanceof
|
|
12413
|
+
if (newOffchain instanceof chunkOWTKOMJZ_cjs.DelegateVtxo.Script) {
|
|
12330
12414
|
await manager.createContract({
|
|
12331
12415
|
type: "delegate",
|
|
12332
12416
|
params: {
|
|
@@ -12354,13 +12438,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
12354
12438
|
metadata: currentOffchainRow?.metadata
|
|
12355
12439
|
});
|
|
12356
12440
|
}
|
|
12357
|
-
const boardingCsv = newBoarding.options.csvTimelock ??
|
|
12441
|
+
const boardingCsv = newBoarding.options.csvTimelock ?? chunkOWTKOMJZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
12358
12442
|
await manager.createContract({
|
|
12359
12443
|
type: "boarding",
|
|
12360
12444
|
params: {
|
|
12361
12445
|
pubKey: base.hex.encode(newBoarding.options.pubKey),
|
|
12362
12446
|
serverPubKey: base.hex.encode(xonly),
|
|
12363
|
-
csvTimelock:
|
|
12447
|
+
csvTimelock: chunkKUN5ZRMW_cjs.timelockToSequence(boardingCsv).toString()
|
|
12364
12448
|
},
|
|
12365
12449
|
script: base.hex.encode(newBoarding.pkScript),
|
|
12366
12450
|
address: newBoarding.address(this.network.hrp, xonly).encode(),
|
|
@@ -12393,14 +12477,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
12393
12477
|
_restoreInFlight;
|
|
12394
12478
|
_addPendingSpends(inputs) {
|
|
12395
12479
|
for (const input of inputs) {
|
|
12396
|
-
if (
|
|
12480
|
+
if (chunkKUN5ZRMW_cjs.isVirtualCoin(input)) {
|
|
12397
12481
|
this._pendingSpendOutpoints.add(`${input.txid}:${input.vout}`);
|
|
12398
12482
|
}
|
|
12399
12483
|
}
|
|
12400
12484
|
}
|
|
12401
12485
|
_removePendingSpends(inputs) {
|
|
12402
12486
|
for (const input of inputs) {
|
|
12403
|
-
if (
|
|
12487
|
+
if (chunkKUN5ZRMW_cjs.isVirtualCoin(input)) {
|
|
12404
12488
|
this._pendingSpendOutpoints.delete(`${input.txid}:${input.vout}`);
|
|
12405
12489
|
}
|
|
12406
12490
|
}
|
|
@@ -12460,7 +12544,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
12460
12544
|
const hd = provider instanceof HDDescriptorProvider;
|
|
12461
12545
|
const staticDescriptor = hd ? void 0 : `tr(${base.hex.encode(await this.identity.xOnlyPublicKey())})`;
|
|
12462
12546
|
const materialize = (index) => hd ? provider.materializeDescriptorAt(index) : staticDescriptor;
|
|
12463
|
-
const delegatePubKey = this.offchainTapscript instanceof
|
|
12547
|
+
const delegatePubKey = this.offchainTapscript instanceof chunkOWTKOMJZ_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
|
|
12464
12548
|
const arkInfo = await this.arkProvider.getInfo();
|
|
12465
12549
|
const currentSignerPubKey = toXOnlyPubKey(base.hex.decode(arkInfo.signerPubkey));
|
|
12466
12550
|
const deprecatedSignerPubKeys = arkInfo.deprecatedSigners.map(
|
|
@@ -12479,7 +12563,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
12479
12563
|
csvTimelocks: this.walletContractTimelocks,
|
|
12480
12564
|
// Boarding-exit CSV so the boarding handler can build its
|
|
12481
12565
|
// candidate script (distinct from the unilateral-exit matrix).
|
|
12482
|
-
boardingTimelock: this.boardingTapscript.options.csvTimelock ??
|
|
12566
|
+
boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunkOWTKOMJZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
|
|
12483
12567
|
delegatePubKey
|
|
12484
12568
|
};
|
|
12485
12569
|
const result = await manager.scanContracts({
|
|
@@ -12593,16 +12677,17 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
12593
12677
|
throw new Error("Invalid configured public key");
|
|
12594
12678
|
}
|
|
12595
12679
|
const setup = await ReadonlyWallet.setupWalletConfig(config, pubkey);
|
|
12596
|
-
let serverUnrollScript;
|
|
12597
|
-
try {
|
|
12598
|
-
const raw = base.hex.decode(setup.info.checkpointTapscript);
|
|
12599
|
-
serverUnrollScript = chunkCDWLZQQW_cjs.CSVMultisigTapscript.decode(raw);
|
|
12600
|
-
} catch (e) {
|
|
12601
|
-
throw new Error("Invalid checkpointTapscript from server");
|
|
12602
|
-
}
|
|
12603
12680
|
const forfeitPubkey = base.hex.decode(setup.info.forfeitPubkey).slice(1);
|
|
12604
12681
|
const forfeitAddress = btcSigner.Address(setup.network).decode(setup.info.forfeitAddress);
|
|
12605
12682
|
const forfeitOutputScript = btcSigner.OutScript.encode(forfeitAddress);
|
|
12683
|
+
const checkpointExitDelayOverrides = {
|
|
12684
|
+
advertisedForfeitPubkey: forfeitPubkey,
|
|
12685
|
+
...config.minCheckpointExitDelaySeconds !== void 0 ? { minSeconds: config.minCheckpointExitDelaySeconds } : {}
|
|
12686
|
+
};
|
|
12687
|
+
const serverUnrollScript = assertValidServerUnrollScript(
|
|
12688
|
+
setup.info.checkpointTapscript,
|
|
12689
|
+
resolveCheckpointExitDelayPolicy(setup.network, checkpointExitDelayOverrides)
|
|
12690
|
+
);
|
|
12606
12691
|
const boot = await WalletReceiveRotator.resolveBoot(config, setup);
|
|
12607
12692
|
const wallet = new _Wallet(
|
|
12608
12693
|
config.identity,
|
|
@@ -12626,7 +12711,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
12626
12711
|
setup.walletContractTimelocks,
|
|
12627
12712
|
boot?.rotator,
|
|
12628
12713
|
boot?.provider,
|
|
12629
|
-
config.lookAheadWindow
|
|
12714
|
+
config.lookAheadWindow,
|
|
12715
|
+
// Pinned at setup rather than refetched per round.
|
|
12716
|
+
{
|
|
12717
|
+
advertisedVtxoTreeExpiry: setup.info.vtxoTreeExpiry,
|
|
12718
|
+
...config.minBatchExpirySeconds !== void 0 ? { minSeconds: config.minBatchExpirySeconds } : {}
|
|
12719
|
+
},
|
|
12720
|
+
checkpointExitDelayOverrides
|
|
12630
12721
|
);
|
|
12631
12722
|
wallet._serverInfoSource = setup.serverInfoSource;
|
|
12632
12723
|
if (setup.serverInfoSource === "live") {
|
|
@@ -12734,7 +12825,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
12734
12825
|
inputs: params.selectedVtxos,
|
|
12735
12826
|
changeAmount: BigInt(changeAmount)
|
|
12736
12827
|
};
|
|
12737
|
-
const outputAddress =
|
|
12828
|
+
const outputAddress = chunkKUN5ZRMW_cjs.ArkAddress.decode(params.address);
|
|
12738
12829
|
assertRecipientArkAddress(
|
|
12739
12830
|
params.address,
|
|
12740
12831
|
outputAddress,
|
|
@@ -12792,13 +12883,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
12792
12883
|
}
|
|
12793
12884
|
}
|
|
12794
12885
|
const offchainAddress = await this.getAddress();
|
|
12795
|
-
const offchainPkScript =
|
|
12886
|
+
const offchainPkScript = chunkKUN5ZRMW_cjs.ArkAddress.decode(offchainAddress).pkScript;
|
|
12796
12887
|
const offchainOutputScript = base.hex.encode(offchainPkScript);
|
|
12797
12888
|
if (!params) {
|
|
12798
12889
|
const { fees, vtxoMaxAmount } = await this.arkProvider.getInfo();
|
|
12799
12890
|
const estimator = new Estimator(fees.intentFee);
|
|
12800
12891
|
let amount = 0;
|
|
12801
|
-
const exitScript =
|
|
12892
|
+
const exitScript = chunkKUN5ZRMW_cjs.CSVMultisigTapscript.decode(
|
|
12802
12893
|
base.hex.decode(this.boardingTapscript.exitScript)
|
|
12803
12894
|
);
|
|
12804
12895
|
const boardingTimelock = exitScript.params.timelock;
|
|
@@ -12827,7 +12918,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
12827
12918
|
if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
|
|
12828
12919
|
break;
|
|
12829
12920
|
}
|
|
12830
|
-
const inputFee = estimator.evalOffchainInput(
|
|
12921
|
+
const inputFee = estimator.evalOffchainInput(chunkKUN5ZRMW_cjs.toOffchainInputFeeParams(vtxo));
|
|
12831
12922
|
if (inputFee.satoshis >= vtxo.value) {
|
|
12832
12923
|
continue;
|
|
12833
12924
|
}
|
|
@@ -12874,7 +12965,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
12874
12965
|
let script;
|
|
12875
12966
|
let arkAddress;
|
|
12876
12967
|
try {
|
|
12877
|
-
arkAddress =
|
|
12968
|
+
arkAddress = chunkKUN5ZRMW_cjs.ArkAddress.decode(output.address);
|
|
12878
12969
|
} catch {
|
|
12879
12970
|
arkAddress = void 0;
|
|
12880
12971
|
}
|
|
@@ -13066,7 +13157,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13066
13157
|
async maybeRotateBoardingAfterBoard(inputs) {
|
|
13067
13158
|
if (!this._descriptorProvider) return;
|
|
13068
13159
|
const consumedBoarding = inputs.some(
|
|
13069
|
-
(input) => typeof input !== "string" && !
|
|
13160
|
+
(input) => typeof input !== "string" && !chunkKUN5ZRMW_cjs.isVirtualCoin(input)
|
|
13070
13161
|
);
|
|
13071
13162
|
if (!consumedBoarding) return;
|
|
13072
13163
|
try {
|
|
@@ -13090,7 +13181,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13090
13181
|
let connectorIndex = 0;
|
|
13091
13182
|
const connectorsLeaves = connectorsGraph?.leaves() || [];
|
|
13092
13183
|
for (const input of inputs) {
|
|
13093
|
-
if (!
|
|
13184
|
+
if (!chunkKUN5ZRMW_cjs.isVirtualCoin(input)) {
|
|
13094
13185
|
for (let i = 0; i < settlementPsbt.inputsLength; i++) {
|
|
13095
13186
|
const settlementInput = settlementPsbt.getInput(i);
|
|
13096
13187
|
if (!settlementInput.txid || settlementInput.index === void 0) {
|
|
@@ -13121,7 +13212,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13121
13212
|
}
|
|
13122
13213
|
continue;
|
|
13123
13214
|
}
|
|
13124
|
-
if (
|
|
13215
|
+
if (chunkKUN5ZRMW_cjs.canRecoverOnchain(input, { timestamp: /* @__PURE__ */ new Date() }) || isSubdust({ value: input.value }, this.dustAmount)) {
|
|
13125
13216
|
continue;
|
|
13126
13217
|
}
|
|
13127
13218
|
if (connectorsLeaves.length === 0) {
|
|
@@ -13149,7 +13240,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13149
13240
|
index: input.vout,
|
|
13150
13241
|
witnessUtxo: {
|
|
13151
13242
|
amount: BigInt(input.value),
|
|
13152
|
-
script:
|
|
13243
|
+
script: chunkKUN5ZRMW_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
13153
13244
|
},
|
|
13154
13245
|
sighashType: btcSigner.SigHash.DEFAULT,
|
|
13155
13246
|
tapLeafScript: [input.forfeitTapLeafScript]
|
|
@@ -13168,7 +13259,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13168
13259
|
forfeitTx = await this._signerRouter.sign(forfeitTx, [
|
|
13169
13260
|
{
|
|
13170
13261
|
index: 0,
|
|
13171
|
-
lookupScript:
|
|
13262
|
+
lookupScript: chunkKUN5ZRMW_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
13172
13263
|
}
|
|
13173
13264
|
]);
|
|
13174
13265
|
signedForfeits.push(base.base64.encode(forfeitTx.toPSBT()));
|
|
@@ -13214,24 +13305,20 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13214
13305
|
const utf8IntentId = new TextEncoder().encode(intentId);
|
|
13215
13306
|
const intentIdHash = utils_js.sha256(utf8IntentId);
|
|
13216
13307
|
const intentIdHashStr = base.hex.encode(intentIdHash);
|
|
13217
|
-
|
|
13218
|
-
for (const idHash of event.intentIdHashes) {
|
|
13219
|
-
if (idHash === intentIdHashStr) {
|
|
13220
|
-
if (!this.arkProvider) {
|
|
13221
|
-
throw new Error("Arkade provider not configured");
|
|
13222
|
-
}
|
|
13223
|
-
await this.arkProvider.confirmRegistration(intentId);
|
|
13224
|
-
skip = false;
|
|
13225
|
-
}
|
|
13226
|
-
}
|
|
13308
|
+
const skip = !event.intentIdHashes.includes(intentIdHashStr);
|
|
13227
13309
|
if (skip) {
|
|
13228
13310
|
return { skip };
|
|
13229
13311
|
}
|
|
13230
|
-
|
|
13231
|
-
|
|
13232
|
-
|
|
13233
|
-
|
|
13234
|
-
|
|
13312
|
+
if (!this.arkProvider) {
|
|
13313
|
+
throw new Error("Arkade provider not configured");
|
|
13314
|
+
}
|
|
13315
|
+
const timelock = assertValidBatchExpiry(
|
|
13316
|
+
event.batchExpiry,
|
|
13317
|
+
resolveBatchExpiryPolicy(this.network, this.batchExpiryPolicy)
|
|
13318
|
+
);
|
|
13319
|
+
await this.arkProvider.confirmRegistration(intentId);
|
|
13320
|
+
const sweepTapscript = chunkKUN5ZRMW_cjs.CSVMultisigTapscript.encode({
|
|
13321
|
+
timelock,
|
|
13235
13322
|
pubkeys: [this.forfeitPubkey]
|
|
13236
13323
|
}).script;
|
|
13237
13324
|
sweepTapTreeRoot = payment_js.tapLeafHash(sweepTapscript);
|
|
@@ -13336,9 +13423,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13336
13423
|
...existing ?? {},
|
|
13337
13424
|
intentTxId,
|
|
13338
13425
|
registerProof: intent.proof,
|
|
13339
|
-
registerProofMessage:
|
|
13426
|
+
registerProofMessage: chunkKUN5ZRMW_cjs.Intent.encodeMessage(intent.message),
|
|
13340
13427
|
deleteProof: deleteIntent.proof,
|
|
13341
|
-
deleteProofMessage:
|
|
13428
|
+
deleteProofMessage: chunkKUN5ZRMW_cjs.Intent.encodeMessage(deleteIntent.message),
|
|
13342
13429
|
intentVtxos: inputs.map((i) => ({
|
|
13343
13430
|
txid: i.txid,
|
|
13344
13431
|
vout: i.vout
|
|
@@ -13370,7 +13457,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13370
13457
|
try {
|
|
13371
13458
|
return await this.arkProvider.registerIntent(intent);
|
|
13372
13459
|
} catch (error) {
|
|
13373
|
-
if (error instanceof
|
|
13460
|
+
if (error instanceof chunkKUN5ZRMW_cjs.ArkError && error.code === 0 && error.message.includes("duplicated input")) {
|
|
13374
13461
|
const deleteIntent = await this.makeDeleteIntentSignature(inputs);
|
|
13375
13462
|
await this.arkProvider.deleteIntent(deleteIntent);
|
|
13376
13463
|
return this.arkProvider.registerIntent(intent);
|
|
@@ -13386,7 +13473,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13386
13473
|
expire_at: 0,
|
|
13387
13474
|
cosigners_public_keys: cosignerPubKeys
|
|
13388
13475
|
};
|
|
13389
|
-
const proof =
|
|
13476
|
+
const proof = chunkKUN5ZRMW_cjs.Intent.create(message, coins, outputs);
|
|
13390
13477
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
13391
13478
|
return {
|
|
13392
13479
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -13398,7 +13485,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13398
13485
|
type: "delete",
|
|
13399
13486
|
expire_at: 0
|
|
13400
13487
|
};
|
|
13401
|
-
const proof =
|
|
13488
|
+
const proof = chunkKUN5ZRMW_cjs.Intent.create(message, coins, []);
|
|
13402
13489
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
13403
13490
|
return {
|
|
13404
13491
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -13410,7 +13497,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13410
13497
|
type: "get-pending-tx",
|
|
13411
13498
|
expire_at: 0
|
|
13412
13499
|
};
|
|
13413
|
-
const proof =
|
|
13500
|
+
const proof = chunkKUN5ZRMW_cjs.Intent.create(message, coins, []);
|
|
13414
13501
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
13415
13502
|
return {
|
|
13416
13503
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -13431,7 +13518,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13431
13518
|
if (!vtxos || vtxos.length === 0) {
|
|
13432
13519
|
const scriptMap = await this.getScriptMap();
|
|
13433
13520
|
const allExtended = [];
|
|
13434
|
-
const fetchedVtxos = await
|
|
13521
|
+
const fetchedVtxos = await chunkKUN5ZRMW_cjs.getAllNormalizedVtxos(this.indexerProvider, [
|
|
13435
13522
|
...scriptMap.keys()
|
|
13436
13523
|
]);
|
|
13437
13524
|
for (const vtxo of fetchedVtxos) {
|
|
@@ -13545,11 +13632,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13545
13632
|
* against the current key alone would leave it pending forever.
|
|
13546
13633
|
*/
|
|
13547
13634
|
checkpointUnrollCandidates(info) {
|
|
13548
|
-
const current =
|
|
13635
|
+
const current = chunkKUN5ZRMW_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
|
|
13549
13636
|
const candidates = [this._serverUnrollScript, current];
|
|
13550
13637
|
for (const deprecated of signerSetFromInfo(info).deprecated.keys()) {
|
|
13551
13638
|
candidates.push(
|
|
13552
|
-
|
|
13639
|
+
chunkKUN5ZRMW_cjs.CSVMultisigTapscript.encode({
|
|
13553
13640
|
...current.params,
|
|
13554
13641
|
pubkeys: [base.hex.decode(deprecated)]
|
|
13555
13642
|
})
|
|
@@ -13640,7 +13727,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13640
13727
|
if (vtxos.length === 0) {
|
|
13641
13728
|
throw new Error("No VTXOs found for this arkadeCash");
|
|
13642
13729
|
}
|
|
13643
|
-
const myPkScript =
|
|
13730
|
+
const myPkScript = chunkKUN5ZRMW_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
|
|
13644
13731
|
let { spendable, unclaimed } = this.classifyCashVtxos(vtxos);
|
|
13645
13732
|
let swept = 0;
|
|
13646
13733
|
const drainable = vtxos.filter((vtxo) => !isSubdust(vtxo, this.dustAmount));
|
|
@@ -13667,8 +13754,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13667
13754
|
}
|
|
13668
13755
|
if (spendable.length > 0) {
|
|
13669
13756
|
const info = await this.arkProvider.getInfo();
|
|
13670
|
-
const serverUnrollScript =
|
|
13671
|
-
|
|
13757
|
+
const serverUnrollScript = assertValidServerUnrollScript(
|
|
13758
|
+
info.checkpointTapscript,
|
|
13759
|
+
resolveCheckpointExitDelayPolicy(this.network, this.checkpointExitDelayPolicy)
|
|
13672
13760
|
);
|
|
13673
13761
|
for (const vtxo of spendable) {
|
|
13674
13762
|
try {
|
|
@@ -13713,7 +13801,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13713
13801
|
const spendable = [];
|
|
13714
13802
|
const unclaimed = [];
|
|
13715
13803
|
for (const vtxo of vtxos) {
|
|
13716
|
-
if (
|
|
13804
|
+
if (chunkKUN5ZRMW_cjs.hasTerminalSpend(vtxo)) {
|
|
13717
13805
|
unclaimed.push(cashReport(vtxo, "already-spent"));
|
|
13718
13806
|
} else if (isSubdust(vtxo, this.dustAmount)) {
|
|
13719
13807
|
unclaimed.push(cashReport(vtxo, "subdust"));
|
|
@@ -13733,7 +13821,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13733
13821
|
const all = [];
|
|
13734
13822
|
const seen = /* @__PURE__ */ new Set();
|
|
13735
13823
|
for (let pageIndex = 0; ; pageIndex++) {
|
|
13736
|
-
const { vtxos, page } = await
|
|
13824
|
+
const { vtxos, page } = await chunkKUN5ZRMW_cjs.getNormalizedVtxos(this.indexerProvider, {
|
|
13737
13825
|
scripts,
|
|
13738
13826
|
pageIndex,
|
|
13739
13827
|
pageSize
|
|
@@ -13780,7 +13868,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13780
13868
|
for (let i = 0; i < inputs.length; i += MAX_INPUTS_PER_INTENT) {
|
|
13781
13869
|
const batch = inputs.slice(i, i + MAX_INPUTS_PER_INTENT);
|
|
13782
13870
|
const message = { type: "get-pending-tx", expire_at: 0 };
|
|
13783
|
-
const proof =
|
|
13871
|
+
const proof = chunkKUN5ZRMW_cjs.Intent.create(message, batch, []);
|
|
13784
13872
|
const signedProof = await identity.sign(
|
|
13785
13873
|
proof,
|
|
13786
13874
|
Array.from({ length: batch.length + 1 }, (_, j) => j)
|
|
@@ -14090,10 +14178,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14090
14178
|
const serverPubKey = this.arkServerPublicKey;
|
|
14091
14179
|
const serverUnrollScript = this.serverUnrollScript;
|
|
14092
14180
|
const arkAddress = offchainTapscript.address(this.network.hrp, serverPubKey);
|
|
14093
|
-
const normalizedInputs = inputs.map(
|
|
14094
|
-
const at = now ?? await
|
|
14181
|
+
const normalizedInputs = inputs.map(chunkKUN5ZRMW_cjs.normalizeVtxo);
|
|
14182
|
+
const at = now ?? await chunkKUN5ZRMW_cjs.resolveTimeHeight(this.onchainProvider);
|
|
14095
14183
|
for (const input of normalizedInputs) {
|
|
14096
|
-
if (!
|
|
14184
|
+
if (!chunkKUN5ZRMW_cjs.canSpendOffchain(input, at)) {
|
|
14097
14185
|
throw new Error(
|
|
14098
14186
|
`sendSelectedVtxosToSelf: input ${input.txid}:${input.vout} is not cooperatively spendable`
|
|
14099
14187
|
);
|
|
@@ -14158,7 +14246,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14158
14246
|
);
|
|
14159
14247
|
const arkTxJobs = inputs.map((input, index) => ({
|
|
14160
14248
|
index,
|
|
14161
|
-
lookupScript:
|
|
14249
|
+
lookupScript: chunkKUN5ZRMW_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
14162
14250
|
}));
|
|
14163
14251
|
const identity = this.identity;
|
|
14164
14252
|
const signer = {
|
|
@@ -14244,14 +14332,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14244
14332
|
const spentBy = checkpointIdByOutpoint.get(`${vtxo.txid}:${vtxo.vout}`);
|
|
14245
14333
|
spentVtxos.push({
|
|
14246
14334
|
...spentFacts,
|
|
14247
|
-
virtualStatus:
|
|
14335
|
+
virtualStatus: chunkKUN5ZRMW_cjs.toVirtualStatus(spentFacts),
|
|
14248
14336
|
...spentBy ? { spentBy } : {},
|
|
14249
14337
|
arkTxId: arkTxid
|
|
14250
14338
|
});
|
|
14251
14339
|
for (const id of vtxo.commitmentTxIds) {
|
|
14252
14340
|
commitmentTxIds.add(id);
|
|
14253
14341
|
}
|
|
14254
|
-
const vtxoExpiry =
|
|
14342
|
+
const vtxoExpiry = chunkKUN5ZRMW_cjs.toBatchExpiry(vtxo);
|
|
14255
14343
|
if (vtxoExpiry) {
|
|
14256
14344
|
batchExpiry = Math.min(batchExpiry, vtxoExpiry);
|
|
14257
14345
|
}
|
|
@@ -14264,7 +14352,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14264
14352
|
isSwept: false,
|
|
14265
14353
|
isPreconfirmed: true,
|
|
14266
14354
|
commitmentTxIds: Array.from(commitmentTxIds),
|
|
14267
|
-
...
|
|
14355
|
+
...chunkKUN5ZRMW_cjs.parseLegacyExpiry(batchExpiry)
|
|
14268
14356
|
};
|
|
14269
14357
|
changeVtxo = {
|
|
14270
14358
|
txid: arkTxid,
|
|
@@ -14276,7 +14364,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14276
14364
|
tapTree: offchainTapscript.encode(),
|
|
14277
14365
|
value: Number(changeAmount),
|
|
14278
14366
|
...changeFacts,
|
|
14279
|
-
virtualStatus:
|
|
14367
|
+
virtualStatus: chunkKUN5ZRMW_cjs.toVirtualStatus(changeFacts),
|
|
14280
14368
|
spentBy: "",
|
|
14281
14369
|
status: {
|
|
14282
14370
|
confirmed: false
|
|
@@ -14345,12 +14433,12 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14345
14433
|
const spentVtxos = [];
|
|
14346
14434
|
const inputArkTxIds = /* @__PURE__ */ new Set();
|
|
14347
14435
|
const boardingRemovalsByAddress = /* @__PURE__ */ new Map();
|
|
14348
|
-
const vtxoInputs = inputs.filter(
|
|
14436
|
+
const vtxoInputs = inputs.filter(chunkKUN5ZRMW_cjs.isVirtualCoin);
|
|
14349
14437
|
const cm = await this.getContractManager();
|
|
14350
14438
|
const annotatedVtxos = await cm.annotateVtxos(vtxoInputs);
|
|
14351
14439
|
const annotatedByKey = new Map(annotatedVtxos.map((v) => [`${v.txid}:${v.vout}`, v]));
|
|
14352
14440
|
for (const input of inputs) {
|
|
14353
|
-
if (
|
|
14441
|
+
if (chunkKUN5ZRMW_cjs.isVirtualCoin(input)) {
|
|
14354
14442
|
const outpoint = `${input.txid}:${input.vout}`;
|
|
14355
14443
|
const vtxo = annotatedByKey.get(outpoint);
|
|
14356
14444
|
if (!vtxo) {
|
|
@@ -14362,13 +14450,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14362
14450
|
const settledFacts = { ...vtxo, isSpent: true };
|
|
14363
14451
|
spentVtxos.push({
|
|
14364
14452
|
...settledFacts,
|
|
14365
|
-
virtualStatus:
|
|
14453
|
+
virtualStatus: chunkKUN5ZRMW_cjs.toVirtualStatus(settledFacts),
|
|
14366
14454
|
settledBy: commitmentTxid
|
|
14367
14455
|
});
|
|
14368
14456
|
} else {
|
|
14369
14457
|
let sourceAddress;
|
|
14370
14458
|
try {
|
|
14371
|
-
sourceAddress =
|
|
14459
|
+
sourceAddress = chunkKUN5ZRMW_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
|
|
14372
14460
|
this.network
|
|
14373
14461
|
);
|
|
14374
14462
|
} catch {
|
|
@@ -14426,9 +14514,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14426
14514
|
}
|
|
14427
14515
|
};
|
|
14428
14516
|
function selectVirtualCoins(coins, targetAmount) {
|
|
14429
|
-
const sortedCoins = coins.map(
|
|
14430
|
-
const expiryA =
|
|
14431
|
-
const expiryB =
|
|
14517
|
+
const sortedCoins = coins.map(chunkKUN5ZRMW_cjs.normalizeVtxo).sort((a, b) => {
|
|
14518
|
+
const expiryA = chunkKUN5ZRMW_cjs.toBatchExpiry(a) || Number.MAX_SAFE_INTEGER;
|
|
14519
|
+
const expiryB = chunkKUN5ZRMW_cjs.toBatchExpiry(b) || Number.MAX_SAFE_INTEGER;
|
|
14432
14520
|
if (expiryA !== expiryB) {
|
|
14433
14521
|
return expiryA - expiryB;
|
|
14434
14522
|
}
|
|
@@ -14685,7 +14773,7 @@ var MessageBus = class {
|
|
|
14685
14773
|
this.initialized = true;
|
|
14686
14774
|
}
|
|
14687
14775
|
async buildServices(config) {
|
|
14688
|
-
const arkProvider = new
|
|
14776
|
+
const arkProvider = new chunkKUN5ZRMW_cjs.RestArkProvider(config.arkServer.url);
|
|
14689
14777
|
const storage = {
|
|
14690
14778
|
walletRepository: this.walletRepository,
|
|
14691
14779
|
contractRepository: this.contractRepository
|
|
@@ -15024,7 +15112,7 @@ var offboardNetworkNames = [
|
|
|
15024
15112
|
function offboardDestinationScript(destinationAddress) {
|
|
15025
15113
|
for (const networkName of offboardNetworkNames) {
|
|
15026
15114
|
try {
|
|
15027
|
-
const network =
|
|
15115
|
+
const network = chunkKUN5ZRMW_cjs.networks[networkName];
|
|
15028
15116
|
const addr = btcSigner.Address(network).decode(destinationAddress);
|
|
15029
15117
|
return btcSigner.OutScript.encode(addr);
|
|
15030
15118
|
} catch {
|
|
@@ -15088,7 +15176,7 @@ var Ramps = class {
|
|
|
15088
15176
|
}
|
|
15089
15177
|
amount = amount ?? totalAmount;
|
|
15090
15178
|
const offchainAddress = await this.wallet.getAddress();
|
|
15091
|
-
const offchainAddr =
|
|
15179
|
+
const offchainAddr = chunkKUN5ZRMW_cjs.ArkAddress.decode(offchainAddress);
|
|
15092
15180
|
const offchainScript = base.hex.encode(offchainAddr.pkScript);
|
|
15093
15181
|
const outputFee = estimator.evalOffchainOutput({
|
|
15094
15182
|
amount,
|
|
@@ -15148,7 +15236,7 @@ var Ramps = class {
|
|
|
15148
15236
|
const filteredVtxos = [];
|
|
15149
15237
|
let totalAmount = 0n;
|
|
15150
15238
|
for (const vtxo of vtxos) {
|
|
15151
|
-
const inputFee = estimator.evalOffchainInput(
|
|
15239
|
+
const inputFee = estimator.evalOffchainInput(chunkKUN5ZRMW_cjs.toOffchainInputFeeParams(vtxo));
|
|
15152
15240
|
if (inputFee.satoshis >= vtxo.value) {
|
|
15153
15241
|
continue;
|
|
15154
15242
|
}
|
|
@@ -15845,7 +15933,7 @@ var WalletMessageHandler = class {
|
|
|
15845
15933
|
// Wallet methods
|
|
15846
15934
|
async handleInitWallet({ payload }) {
|
|
15847
15935
|
const { arkServerUrl } = payload;
|
|
15848
|
-
this.indexerProvider = new
|
|
15936
|
+
this.indexerProvider = new chunkYK6NP5KX_cjs.RestIndexerProvider(arkServerUrl);
|
|
15849
15937
|
await this.onWalletInitialized();
|
|
15850
15938
|
}
|
|
15851
15939
|
async handleGetBalance() {
|
|
@@ -15869,12 +15957,12 @@ var WalletMessageHandler = class {
|
|
|
15869
15957
|
let recoverable = 0;
|
|
15870
15958
|
let pendingRecovery = 0;
|
|
15871
15959
|
for (const vtxo of allVtxos) {
|
|
15872
|
-
if (
|
|
15960
|
+
if (chunkKUN5ZRMW_cjs.hasTerminalSpend(vtxo)) continue;
|
|
15873
15961
|
if (pendingOutpoints.has(`${vtxo.txid}:${vtxo.vout}`)) {
|
|
15874
15962
|
pendingRecovery += vtxo.value;
|
|
15875
|
-
} else if (
|
|
15963
|
+
} else if (chunkKUN5ZRMW_cjs.canRecoverOnchain(vtxo, now)) {
|
|
15876
15964
|
recoverable += vtxo.value;
|
|
15877
|
-
} else if (
|
|
15965
|
+
} else if (chunkKUN5ZRMW_cjs.canSpendOffchain(vtxo, now)) {
|
|
15878
15966
|
if (vtxo.isPreconfirmed) {
|
|
15879
15967
|
preconfirmed += vtxo.value;
|
|
15880
15968
|
} else {
|
|
@@ -15886,7 +15974,7 @@ var WalletMessageHandler = class {
|
|
|
15886
15974
|
const totalOffchain = settled + preconfirmed + recoverable + pendingRecovery;
|
|
15887
15975
|
const assetBalances = /* @__PURE__ */ new Map();
|
|
15888
15976
|
for (const vtxo of allVtxos) {
|
|
15889
|
-
if (
|
|
15977
|
+
if (chunkKUN5ZRMW_cjs.hasTerminalSpend(vtxo)) continue;
|
|
15890
15978
|
if (vtxo.assets) {
|
|
15891
15979
|
for (const a of vtxo.assets) {
|
|
15892
15980
|
const current = assetBalances.get(a.assetId) ?? 0n;
|
|
@@ -15922,7 +16010,7 @@ var WalletMessageHandler = class {
|
|
|
15922
16010
|
*/
|
|
15923
16011
|
async getSpendableVtxos() {
|
|
15924
16012
|
const vtxos = await this.getVtxosFromRepo();
|
|
15925
|
-
return vtxos.filter((v) => !
|
|
16013
|
+
return vtxos.filter((v) => !chunkKUN5ZRMW_cjs.hasTerminalSpend(v));
|
|
15926
16014
|
}
|
|
15927
16015
|
async onWalletInitialized() {
|
|
15928
16016
|
if (!this.readonlyWallet || !this.arkProvider || !this.indexerProvider || !this.walletRepository) {
|
|
@@ -16134,10 +16222,10 @@ var WalletMessageHandler = class {
|
|
|
16134
16222
|
if (dustAmount != null && isSubdust(v, dustAmount)) {
|
|
16135
16223
|
return false;
|
|
16136
16224
|
}
|
|
16137
|
-
if (
|
|
16225
|
+
if (chunkKUN5ZRMW_cjs.isRecoverable(v)) {
|
|
16138
16226
|
return false;
|
|
16139
16227
|
}
|
|
16140
|
-
if (
|
|
16228
|
+
if (chunkKUN5ZRMW_cjs.isExpired(v)) {
|
|
16141
16229
|
return false;
|
|
16142
16230
|
}
|
|
16143
16231
|
return true;
|
|
@@ -16209,7 +16297,7 @@ var WalletMessageHandler = class {
|
|
|
16209
16297
|
if (!this.readonlyWallet) return null;
|
|
16210
16298
|
const { boardingTxs, commitmentsToIgnore } = await this.readonlyWallet.getBoardingTxs();
|
|
16211
16299
|
const indexerProvider = this.indexerProvider;
|
|
16212
|
-
const resolveTxCreatedAt = indexerProvider ? (txids) =>
|
|
16300
|
+
const resolveTxCreatedAt = indexerProvider ? (txids) => chunkKUN5ZRMW_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
|
|
16213
16301
|
return buildTransactionHistory(vtxos, boardingTxs, commitmentsToIgnore, resolveTxCreatedAt);
|
|
16214
16302
|
}
|
|
16215
16303
|
async ensureContractEventBroadcasting() {
|
|
@@ -16894,7 +16982,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
16894
16982
|
};
|
|
16895
16983
|
try {
|
|
16896
16984
|
const response = await this.sendMessage(message);
|
|
16897
|
-
return response.payload.vtxos.map(
|
|
16985
|
+
return response.payload.vtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo);
|
|
16898
16986
|
} catch (error) {
|
|
16899
16987
|
throw new Error(`Failed to get vtxos: ${error}`);
|
|
16900
16988
|
}
|
|
@@ -17007,7 +17095,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
17007
17095
|
};
|
|
17008
17096
|
try {
|
|
17009
17097
|
const response = await sendContractMessage(message);
|
|
17010
|
-
return response.payload.vtxos.map(
|
|
17098
|
+
return response.payload.vtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo);
|
|
17011
17099
|
} catch (e) {
|
|
17012
17100
|
throw new Error("Failed to annotate vtxos");
|
|
17013
17101
|
}
|
|
@@ -17461,7 +17549,7 @@ var ServiceWorkerWallet = class _ServiceWorkerWallet extends ServiceWorkerReadon
|
|
|
17461
17549
|
};
|
|
17462
17550
|
try {
|
|
17463
17551
|
const response = await wallet.sendMessage(message);
|
|
17464
|
-
return response.payload.vtxos.map(
|
|
17552
|
+
return response.payload.vtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo);
|
|
17465
17553
|
} catch (e) {
|
|
17466
17554
|
throw new Error(`Failed to get expiring vtxos: ${e}`);
|
|
17467
17555
|
}
|
|
@@ -17573,12 +17661,12 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
17573
17661
|
* @returns Configured onchain wallet
|
|
17574
17662
|
* @throws Error if the configured identity cannot produce a valid x-only public key
|
|
17575
17663
|
*/
|
|
17576
|
-
static async create(identity, networkName =
|
|
17664
|
+
static async create(identity, networkName = chunkKUN5ZRMW_cjs.DEFAULT_NETWORK_NAME, provider) {
|
|
17577
17665
|
const pubkey = await identity.xOnlyPublicKey();
|
|
17578
17666
|
if (!pubkey) {
|
|
17579
17667
|
throw new Error("Invalid configured public key");
|
|
17580
17668
|
}
|
|
17581
|
-
const network =
|
|
17669
|
+
const network = chunkKUN5ZRMW_cjs.getNetwork(networkName);
|
|
17582
17670
|
const onchainProvider = provider || new EsploraProvider(ESPLORA_URL[networkName]);
|
|
17583
17671
|
const onchainP2TR = btcSigner.p2tr(pubkey, void 0, network);
|
|
17584
17672
|
return new _OnchainWallet(identity, network, onchainP2TR, onchainProvider);
|
|
@@ -17684,7 +17772,7 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
17684
17772
|
if (!inputs) {
|
|
17685
17773
|
throw new Error("Fee estimation failed");
|
|
17686
17774
|
}
|
|
17687
|
-
let tx = new
|
|
17775
|
+
let tx = new chunkKUN5ZRMW_cjs.Transaction();
|
|
17688
17776
|
for (const input of inputs) {
|
|
17689
17777
|
tx.addInput({
|
|
17690
17778
|
txid: input.txid,
|
|
@@ -17742,7 +17830,7 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
17742
17830
|
* @throws If the parent has no anchor, or funding cannot be selected/signed
|
|
17743
17831
|
*/
|
|
17744
17832
|
async bumpAnchor(parentHex, feeRate) {
|
|
17745
|
-
const parent =
|
|
17833
|
+
const parent = chunkKUN5ZRMW_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
|
|
17746
17834
|
const coins = (await this.getCoins()).filter((c) => c.status.confirmed);
|
|
17747
17835
|
const child = await this.buildBumpPackage(parent, feeRate, coins);
|
|
17748
17836
|
return [parent.hex, child.hex];
|
|
@@ -18507,7 +18595,7 @@ exports.BIP322 = void 0;
|
|
|
18507
18595
|
async function sign2(message, identity, network) {
|
|
18508
18596
|
const xOnlyPubKey = await identity.xOnlyPublicKey();
|
|
18509
18597
|
const payment = btcSigner.p2tr(xOnlyPubKey, void 0, network);
|
|
18510
|
-
const toSpend =
|
|
18598
|
+
const toSpend = chunkKUN5ZRMW_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
|
|
18511
18599
|
const toSign = craftBIP322ToSignP2TR(toSpend, payment.script, xOnlyPubKey);
|
|
18512
18600
|
const signed = await identity.sign(toSign, [0]);
|
|
18513
18601
|
signed.finalizeIdx(0);
|
|
@@ -18565,7 +18653,7 @@ function verifyP2TR(message, witnessItems, pkScript, pubkey) {
|
|
|
18565
18653
|
if (sighashType !== btcSigner.SigHash.DEFAULT && sighashType !== btcSigner.SigHash.ALL) {
|
|
18566
18654
|
return false;
|
|
18567
18655
|
}
|
|
18568
|
-
const toSpend =
|
|
18656
|
+
const toSpend = chunkKUN5ZRMW_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
|
|
18569
18657
|
const toSign = craftBIP322ToSignP2TR(toSpend, pkScript, pubkey);
|
|
18570
18658
|
const sighash = toSign.preimageWitnessV1(0, [pkScript], sighashType, [0n]);
|
|
18571
18659
|
const rawSig = sig.length === 65 ? sig.subarray(0, 64) : sig;
|
|
@@ -18586,7 +18674,7 @@ function verifyP2WPKH(message, witnessItems, pkScript, addressHash) {
|
|
|
18586
18674
|
}
|
|
18587
18675
|
const sighashType = sigWithHash[sigWithHash.length - 1];
|
|
18588
18676
|
const derSig = sigWithHash.subarray(0, sigWithHash.length - 1);
|
|
18589
|
-
const toSpend =
|
|
18677
|
+
const toSpend = chunkKUN5ZRMW_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
|
|
18590
18678
|
const toSign = craftBIP322ToSignSimple(toSpend, pkScript);
|
|
18591
18679
|
const scriptCode = btcSigner.OutScript.encode({ type: "pkh", hash: addressHash });
|
|
18592
18680
|
const sighash = toSign.preimageWitnessV0(0, scriptCode, sighashType, 0n);
|
|
@@ -18639,7 +18727,7 @@ function encodeCompactSize(n) {
|
|
|
18639
18727
|
return buf;
|
|
18640
18728
|
}
|
|
18641
18729
|
function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
|
|
18642
|
-
const tx = new
|
|
18730
|
+
const tx = new chunkKUN5ZRMW_cjs.Transaction({ version: 0 });
|
|
18643
18731
|
tx.addInput({
|
|
18644
18732
|
txid: toSpend.id,
|
|
18645
18733
|
index: 0,
|
|
@@ -18653,12 +18741,12 @@ function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
|
|
|
18653
18741
|
});
|
|
18654
18742
|
tx.addOutput({
|
|
18655
18743
|
amount: 0n,
|
|
18656
|
-
script:
|
|
18744
|
+
script: chunkKUN5ZRMW_cjs.OP_RETURN_EMPTY_PKSCRIPT
|
|
18657
18745
|
});
|
|
18658
18746
|
return tx;
|
|
18659
18747
|
}
|
|
18660
18748
|
function craftBIP322ToSignSimple(toSpend, pkScript) {
|
|
18661
|
-
const tx = new
|
|
18749
|
+
const tx = new chunkKUN5ZRMW_cjs.Transaction({ version: 0 });
|
|
18662
18750
|
tx.addInput({
|
|
18663
18751
|
txid: toSpend.id,
|
|
18664
18752
|
index: 0,
|
|
@@ -18670,7 +18758,7 @@ function craftBIP322ToSignSimple(toSpend, pkScript) {
|
|
|
18670
18758
|
});
|
|
18671
18759
|
tx.addOutput({
|
|
18672
18760
|
amount: 0n,
|
|
18673
|
-
script:
|
|
18761
|
+
script: chunkKUN5ZRMW_cjs.OP_RETURN_EMPTY_PKSCRIPT
|
|
18674
18762
|
});
|
|
18675
18763
|
return tx;
|
|
18676
18764
|
}
|
|
@@ -18801,7 +18889,7 @@ var RestEmulatorProvider = class {
|
|
|
18801
18889
|
}
|
|
18802
18890
|
};
|
|
18803
18891
|
function finalizeVirtualTx(type, psbtBase64) {
|
|
18804
|
-
const tx =
|
|
18892
|
+
const tx = chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
|
|
18805
18893
|
if (type === "INDEXER_CHAINED_TX_TYPE_TREE" /* TREE */) {
|
|
18806
18894
|
const input = tx.getInput(0);
|
|
18807
18895
|
if (!input) {
|
|
@@ -18828,14 +18916,14 @@ var ExitPathError = class extends Error {
|
|
|
18828
18916
|
reason;
|
|
18829
18917
|
};
|
|
18830
18918
|
function delayWeight(sequence) {
|
|
18831
|
-
const t =
|
|
18919
|
+
const t = chunkKUN5ZRMW_cjs.sequenceToTimelock(sequence);
|
|
18832
18920
|
return t.type === "blocks" ? Number(t.value) : Number(t.value) / 600;
|
|
18833
18921
|
}
|
|
18834
18922
|
async function resolveUnilateralPath(params) {
|
|
18835
18923
|
const { vtxo, scriptHex, contractRepository } = params;
|
|
18836
18924
|
const contract = contractRepository ? (await contractRepository.getContracts({ script: scriptHex }))[0] : void 0;
|
|
18837
18925
|
if (contract) {
|
|
18838
|
-
const handler =
|
|
18926
|
+
const handler = chunkOWTKOMJZ_cjs.contractHandlers.get(contract.type);
|
|
18839
18927
|
if (!handler) {
|
|
18840
18928
|
throw new ExitPathError(
|
|
18841
18929
|
"no-handler",
|
|
@@ -18858,12 +18946,12 @@ async function resolveUnilateralPath(params) {
|
|
|
18858
18946
|
paths.sort((a, b) => delayWeight(a.sequence) - delayWeight(b.sequence));
|
|
18859
18947
|
return { selection: paths[0], label: `${contract.type}:unilateral` };
|
|
18860
18948
|
}
|
|
18861
|
-
const decoded =
|
|
18949
|
+
const decoded = chunkKUN5ZRMW_cjs.VtxoScript.decode(vtxo.tapTree);
|
|
18862
18950
|
let best;
|
|
18863
18951
|
for (const exit of decoded.exitPaths()) {
|
|
18864
18952
|
const leaf = decoded.findLeaf(base.hex.encode(exit.script));
|
|
18865
18953
|
if (!leaf) continue;
|
|
18866
|
-
const sequence =
|
|
18954
|
+
const sequence = chunkKUN5ZRMW_cjs.timelockToSequence(exit.params.timelock);
|
|
18867
18955
|
const weight = delayWeight(sequence);
|
|
18868
18956
|
if (!best || weight < best.weight) {
|
|
18869
18957
|
best = { selection: { leaf, sequence }, weight };
|
|
@@ -19049,14 +19137,14 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
19049
19137
|
}
|
|
19050
19138
|
const resolved = await resolveUnilateralPath({
|
|
19051
19139
|
vtxo,
|
|
19052
|
-
scriptHex: base.hex.encode(
|
|
19140
|
+
scriptHex: base.hex.encode(chunkKUN5ZRMW_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
|
|
19053
19141
|
contractRepository: wallet.contractRepository,
|
|
19054
19142
|
walletPubKeyHex: base.hex.encode(await wallet.identity.xOnlyPublicKey()),
|
|
19055
19143
|
currentTime: Date.now()
|
|
19056
19144
|
});
|
|
19057
19145
|
const spendingLeaf = resolved.selection.leaf;
|
|
19058
19146
|
const sequence = resolved.selection.sequence;
|
|
19059
|
-
const timelock =
|
|
19147
|
+
const timelock = chunkKUN5ZRMW_cjs.sequenceToTimelock(sequence);
|
|
19060
19148
|
const elapsed = timelock.type === "blocks" ? chainTip.height >= txStatus.blockHeight + Number(timelock.value) : chainTip.time >= txStatus.blockTime + Number(timelock.value);
|
|
19061
19149
|
if (!elapsed) {
|
|
19062
19150
|
throw new Error(`no available exit path found for vtxo ${vtxo.txid}:${vtxo.vout}`);
|
|
@@ -19069,7 +19157,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
19069
19157
|
sequence,
|
|
19070
19158
|
witnessUtxo: {
|
|
19071
19159
|
amount: BigInt(vtxo.value),
|
|
19072
|
-
script:
|
|
19160
|
+
script: chunkKUN5ZRMW_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
|
|
19073
19161
|
},
|
|
19074
19162
|
sighashType: btcSigner.SigHash.DEFAULT
|
|
19075
19163
|
});
|
|
@@ -19079,7 +19167,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
19079
19167
|
btcSigner.TaprootControlBlock.encode(spendingLeaf[0]).length
|
|
19080
19168
|
);
|
|
19081
19169
|
}
|
|
19082
|
-
const tx = new
|
|
19170
|
+
const tx = new chunkKUN5ZRMW_cjs.Transaction({ version: 2 });
|
|
19083
19171
|
for (const input of inputs) {
|
|
19084
19172
|
tx.addInput(input);
|
|
19085
19173
|
}
|
|
@@ -19146,7 +19234,7 @@ async function buildSignedSweep(params) {
|
|
|
19146
19234
|
`uneconomic vtxo ${vtxo.txid}:${vtxo.vout}: value ${vtxo.value} - fee ${fee} < dust`
|
|
19147
19235
|
);
|
|
19148
19236
|
}
|
|
19149
|
-
const tx = new
|
|
19237
|
+
const tx = new chunkKUN5ZRMW_cjs.Transaction({ version: 2 });
|
|
19150
19238
|
tx.addInput({
|
|
19151
19239
|
txid: vtxo.txid,
|
|
19152
19240
|
index: vtxo.vout,
|
|
@@ -19171,7 +19259,7 @@ async function buildSignedSweep(params) {
|
|
|
19171
19259
|
finalScriptWitness: [
|
|
19172
19260
|
tapScriptSig[0][1],
|
|
19173
19261
|
...path.extraWitness,
|
|
19174
|
-
|
|
19262
|
+
chunkKUN5ZRMW_cjs.scriptFromTapLeafScript(path.leaf),
|
|
19175
19263
|
btcSigner.TaprootControlBlock.encode(controlBlock)
|
|
19176
19264
|
]
|
|
19177
19265
|
});
|
|
@@ -19201,7 +19289,7 @@ async function resolveFeeRate(opts) {
|
|
|
19201
19289
|
}
|
|
19202
19290
|
async function selectExitVtxos(opts) {
|
|
19203
19291
|
if (!opts.vtxos) return opts.wallet.getVtxos();
|
|
19204
|
-
const res = await
|
|
19292
|
+
const res = await chunkKUN5ZRMW_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
|
|
19205
19293
|
const tapTrees = /* @__PURE__ */ new Map();
|
|
19206
19294
|
const out = [];
|
|
19207
19295
|
for (const vtxo of res.vtxos) {
|
|
@@ -19216,7 +19304,7 @@ async function selectExitVtxos(opts) {
|
|
|
19216
19304
|
`no contract registered for vtxo script ${vtxo.script} \u2014 register the contract before exiting`
|
|
19217
19305
|
);
|
|
19218
19306
|
}
|
|
19219
|
-
const handler =
|
|
19307
|
+
const handler = chunkOWTKOMJZ_cjs.contractHandlers.get(contract.type);
|
|
19220
19308
|
if (!handler) {
|
|
19221
19309
|
throw new Error(`no contract handler registered for type '${contract.type}'`);
|
|
19222
19310
|
}
|
|
@@ -19246,7 +19334,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
19246
19334
|
if (pendingNodes.length > 0) {
|
|
19247
19335
|
const txs = await resolver.getVirtualTxs(pendingNodes.map((n) => n.txid));
|
|
19248
19336
|
for (const psbt of txs) {
|
|
19249
|
-
psbts.set(
|
|
19337
|
+
psbts.set(chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
19250
19338
|
}
|
|
19251
19339
|
}
|
|
19252
19340
|
const childVsize = Number(
|
|
@@ -19282,7 +19370,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
19282
19370
|
try {
|
|
19283
19371
|
const resolved = await resolveUnilateralPath({
|
|
19284
19372
|
vtxo,
|
|
19285
|
-
scriptHex: base.hex.encode(
|
|
19373
|
+
scriptHex: base.hex.encode(chunkKUN5ZRMW_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
|
|
19286
19374
|
contractRepository: wallet.contractRepository,
|
|
19287
19375
|
walletPubKeyHex,
|
|
19288
19376
|
currentTime: Date.now()
|
|
@@ -19301,7 +19389,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
19301
19389
|
});
|
|
19302
19390
|
continue;
|
|
19303
19391
|
}
|
|
19304
|
-
const t =
|
|
19392
|
+
const t = chunkKUN5ZRMW_cjs.sequenceToTimelock(resolved.selection.sequence);
|
|
19305
19393
|
const delay = { type: t.type, value: Number(t.value) };
|
|
19306
19394
|
infos.push({ outpoint, value: vtxo.value, sweepFee, path: resolved.label, delay });
|
|
19307
19395
|
sweeps.push({ vtxo, resolved, sweepFee, delay });
|
|
@@ -19640,7 +19728,7 @@ async function prepare(opts) {
|
|
|
19640
19728
|
txid: sweep.vtxo.txid,
|
|
19641
19729
|
vout: sweep.vtxo.vout,
|
|
19642
19730
|
value: sweep.vtxo.value,
|
|
19643
|
-
pkScript:
|
|
19731
|
+
pkScript: chunkKUN5ZRMW_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
|
|
19644
19732
|
},
|
|
19645
19733
|
path: sweep.resolved.selection,
|
|
19646
19734
|
outputAddress: opts.sweepAddress,
|
|
@@ -19725,7 +19813,7 @@ async function prepare(opts) {
|
|
|
19725
19813
|
if (newFee <= splitterFee) break;
|
|
19726
19814
|
splitterFee = newFee;
|
|
19727
19815
|
}
|
|
19728
|
-
const splitter = new
|
|
19816
|
+
const splitter = new chunkKUN5ZRMW_cjs.Transaction({ version: 2 });
|
|
19729
19817
|
for (const coin of selected.inputs) {
|
|
19730
19818
|
splitter.addInput({
|
|
19731
19819
|
txid: coin.txid,
|
|
@@ -19868,42 +19956,42 @@ var UnilateralExit = {
|
|
|
19868
19956
|
// src/arkade/index.ts
|
|
19869
19957
|
var arkade_exports = {};
|
|
19870
19958
|
chunk5BLDMQED_cjs.__export(arkade_exports, {
|
|
19871
|
-
ARKADE_OP: () =>
|
|
19872
|
-
ARKADE_OPCODES: () =>
|
|
19873
|
-
ARKADE_OPCODE_NAMES: () =>
|
|
19874
|
-
ARKADE_OPCODE_VALUES: () =>
|
|
19875
|
-
ARKADE_OPS: () =>
|
|
19959
|
+
ARKADE_OP: () => chunkOWTKOMJZ_cjs.ARKADE_OP,
|
|
19960
|
+
ARKADE_OPCODES: () => chunkOWTKOMJZ_cjs.ARKADE_OPCODES,
|
|
19961
|
+
ARKADE_OPCODE_NAMES: () => chunkOWTKOMJZ_cjs.ARKADE_OPCODE_NAMES,
|
|
19962
|
+
ARKADE_OPCODE_VALUES: () => chunkOWTKOMJZ_cjs.ARKADE_OPCODE_VALUES,
|
|
19963
|
+
ARKADE_OPS: () => chunkOWTKOMJZ_cjs.ARKADE_OPS,
|
|
19876
19964
|
Arkade: () => Arkade,
|
|
19877
19965
|
ArkadeContract: () => ArkadeContract,
|
|
19878
|
-
ArkadeProgramScript: () =>
|
|
19879
|
-
ArkadeScript: () =>
|
|
19966
|
+
ArkadeProgramScript: () => chunkOWTKOMJZ_cjs.ArkadeProgramScript,
|
|
19967
|
+
ArkadeScript: () => chunkOWTKOMJZ_cjs.ArkadeScript,
|
|
19880
19968
|
ArkadeTransactionBuilder: () => ArkadeTransactionBuilder,
|
|
19881
|
-
BigNum: () =>
|
|
19969
|
+
BigNum: () => chunkOWTKOMJZ_cjs.bignum_exports,
|
|
19882
19970
|
OP: () => btcSigner.OP,
|
|
19883
|
-
OPCODE_NAMES: () =>
|
|
19884
|
-
OPCODE_VALUES: () =>
|
|
19885
|
-
SUPPORTED_PROGRAM_VERSION: () =>
|
|
19971
|
+
OPCODE_NAMES: () => chunkOWTKOMJZ_cjs.OPCODE_NAMES,
|
|
19972
|
+
OPCODE_VALUES: () => chunkOWTKOMJZ_cjs.OPCODE_VALUES,
|
|
19973
|
+
SUPPORTED_PROGRAM_VERSION: () => chunkOWTKOMJZ_cjs.SUPPORTED_PROGRAM_VERSION,
|
|
19886
19974
|
Script: () => btcSigner.Script,
|
|
19887
|
-
arkadeScriptHash: () =>
|
|
19888
|
-
arkadeWitnessHash: () =>
|
|
19889
|
-
asmToBytes: () =>
|
|
19890
|
-
bytesToASM: () =>
|
|
19891
|
-
computeArkadeScriptPublicKey: () =>
|
|
19975
|
+
arkadeScriptHash: () => chunkOWTKOMJZ_cjs.arkadeScriptHash,
|
|
19976
|
+
arkadeWitnessHash: () => chunkOWTKOMJZ_cjs.arkadeWitnessHash,
|
|
19977
|
+
asmToBytes: () => chunkOWTKOMJZ_cjs.asmToBytes,
|
|
19978
|
+
bytesToASM: () => chunkOWTKOMJZ_cjs.bytesToASM,
|
|
19979
|
+
computeArkadeScriptPublicKey: () => chunkOWTKOMJZ_cjs.computeArkadeScriptPublicKey,
|
|
19892
19980
|
createArkadeBatchHandler: () => createArkadeBatchHandler,
|
|
19893
|
-
deserializeArkadeContractParams: () =>
|
|
19894
|
-
fromASM: () =>
|
|
19895
|
-
getOpcodeName: () =>
|
|
19896
|
-
getOpcodeValue: () =>
|
|
19897
|
-
parseArtifact: () =>
|
|
19898
|
-
resolveAsm: () =>
|
|
19899
|
-
serializeArkadeContractParams: () =>
|
|
19900
|
-
stringifyArtifact: () =>
|
|
19901
|
-
toASM: () =>
|
|
19902
|
-
validateProgram: () =>
|
|
19903
|
-
witnessRefToBytes: () =>
|
|
19981
|
+
deserializeArkadeContractParams: () => chunkOWTKOMJZ_cjs.deserializeArkadeContractParams,
|
|
19982
|
+
fromASM: () => chunkOWTKOMJZ_cjs.fromASM,
|
|
19983
|
+
getOpcodeName: () => chunkOWTKOMJZ_cjs.getOpcodeName,
|
|
19984
|
+
getOpcodeValue: () => chunkOWTKOMJZ_cjs.getOpcodeValue,
|
|
19985
|
+
parseArtifact: () => chunkOWTKOMJZ_cjs.parseArtifact,
|
|
19986
|
+
resolveAsm: () => chunkOWTKOMJZ_cjs.resolveAsm,
|
|
19987
|
+
serializeArkadeContractParams: () => chunkOWTKOMJZ_cjs.serializeArkadeContractParams,
|
|
19988
|
+
stringifyArtifact: () => chunkOWTKOMJZ_cjs.stringifyArtifact,
|
|
19989
|
+
toASM: () => chunkOWTKOMJZ_cjs.toASM,
|
|
19990
|
+
validateProgram: () => chunkOWTKOMJZ_cjs.validateProgram,
|
|
19991
|
+
witnessRefToBytes: () => chunkOWTKOMJZ_cjs.witnessRefToBytes
|
|
19904
19992
|
});
|
|
19905
|
-
var isVtxoCoin = (input) =>
|
|
19906
|
-
function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message, session, arkProvider, emulator, network, recipients) {
|
|
19993
|
+
var isVtxoCoin = (input) => chunkKUN5ZRMW_cjs.isVirtualCoin(input);
|
|
19994
|
+
function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message, session, arkProvider, emulator, network, recipients, batchExpiryPolicy) {
|
|
19907
19995
|
let batchId;
|
|
19908
19996
|
let sweepTapTreeRoot;
|
|
19909
19997
|
let validatedCommitmentTxid;
|
|
@@ -19913,15 +20001,19 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
19913
20001
|
const intentIdHash = utils_js.sha256(utf8IntentId);
|
|
19914
20002
|
const intentIdHashStr = base.hex.encode(intentIdHash);
|
|
19915
20003
|
if (!event.intentIdHashes.includes(intentIdHashStr)) return { skip: true };
|
|
20004
|
+
const info = await arkProvider.getInfo();
|
|
20005
|
+
const timelock = assertValidBatchExpiry(
|
|
20006
|
+
event.batchExpiry,
|
|
20007
|
+
resolveBatchExpiryPolicy(network, {
|
|
20008
|
+
advertisedVtxoTreeExpiry: info.vtxoTreeExpiry,
|
|
20009
|
+
...batchExpiryPolicy
|
|
20010
|
+
})
|
|
20011
|
+
);
|
|
19916
20012
|
await arkProvider.confirmRegistration(intentId);
|
|
19917
20013
|
batchId = event.id;
|
|
19918
|
-
const sweepTapscript =
|
|
19919
|
-
timelock
|
|
19920
|
-
|
|
19921
|
-
// BIP-65: values >= 512 are interpreted as seconds, below as blocks
|
|
19922
|
-
type: event.batchExpiry >= 512n ? "seconds" : "blocks"
|
|
19923
|
-
},
|
|
19924
|
-
pubkeys: [base.hex.decode((await arkProvider.getInfo()).forfeitPubkey).subarray(1)]
|
|
20014
|
+
const sweepTapscript = chunkKUN5ZRMW_cjs.CSVMultisigTapscript.encode({
|
|
20015
|
+
timelock,
|
|
20016
|
+
pubkeys: [base.hex.decode(info.forfeitPubkey).subarray(1)]
|
|
19925
20017
|
}).script;
|
|
19926
20018
|
sweepTapTreeRoot = payment_js.tapLeafHash(sweepTapscript);
|
|
19927
20019
|
return { skip: false };
|
|
@@ -19933,7 +20025,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
19933
20025
|
if (!xOnlyPubkeys.includes(base.hex.encode(xonlySignerPubKey))) {
|
|
19934
20026
|
return { skip: true };
|
|
19935
20027
|
}
|
|
19936
|
-
const commitmentTx =
|
|
20028
|
+
const commitmentTx = chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
|
|
19937
20029
|
validateVtxoTxGraph(vtxoTree, commitmentTx, sweepTapTreeRoot);
|
|
19938
20030
|
if (recipients && recipients.length > 0) {
|
|
19939
20031
|
validateBatchRecipients(commitmentTx, vtxoTree.leaves(), recipients, network);
|
|
@@ -19965,7 +20057,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
19965
20057
|
if (connectorTree) {
|
|
19966
20058
|
validateConnectorsTxGraph(event.commitmentTx, connectorTree);
|
|
19967
20059
|
}
|
|
19968
|
-
let commitmentPsbt =
|
|
20060
|
+
let commitmentPsbt = chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
|
|
19969
20061
|
assertFinalCommitmentMatchesValidated(
|
|
19970
20062
|
commitmentPsbt,
|
|
19971
20063
|
validatedCommitmentTxid,
|
|
@@ -20000,7 +20092,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
20000
20092
|
boardingIndices.push(boardingIdx);
|
|
20001
20093
|
continue;
|
|
20002
20094
|
}
|
|
20003
|
-
if (
|
|
20095
|
+
if (chunkKUN5ZRMW_cjs.isRecoverable(input) || isSubdust(input, info.dust)) {
|
|
20004
20096
|
continue;
|
|
20005
20097
|
}
|
|
20006
20098
|
if (connectorIndex >= connectorLeaves.length) {
|
|
@@ -20021,7 +20113,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
20021
20113
|
index: input.vout,
|
|
20022
20114
|
witnessUtxo: {
|
|
20023
20115
|
amount: BigInt(input.value),
|
|
20024
|
-
script:
|
|
20116
|
+
script: chunkKUN5ZRMW_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
20025
20117
|
},
|
|
20026
20118
|
sighashType: btcSigner.SigHash.DEFAULT,
|
|
20027
20119
|
tapLeafScript: [input.forfeitTapLeafScript]
|
|
@@ -20104,7 +20196,7 @@ var Arkade = class _Arkade {
|
|
|
20104
20196
|
static async connect(opts) {
|
|
20105
20197
|
const info = await opts.arkade.getInfo();
|
|
20106
20198
|
const serverKey = base.hex.decode(info.signerPubkey).slice(1);
|
|
20107
|
-
const checkpoint =
|
|
20199
|
+
const checkpoint = chunkKUN5ZRMW_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
|
|
20108
20200
|
let emulatorKey;
|
|
20109
20201
|
if (opts.emulator) {
|
|
20110
20202
|
const eInfo = await opts.emulator.getInfo();
|
|
@@ -20118,7 +20210,7 @@ var Arkade = class _Arkade {
|
|
|
20118
20210
|
return new _Arkade({
|
|
20119
20211
|
arkProvider: opts.arkade,
|
|
20120
20212
|
emulator: opts.emulator,
|
|
20121
|
-
network: opts.network ??
|
|
20213
|
+
network: opts.network ?? chunkKUN5ZRMW_cjs.DEFAULT_NETWORK,
|
|
20122
20214
|
serverKey,
|
|
20123
20215
|
emulatorKey,
|
|
20124
20216
|
checkpoint,
|
|
@@ -20139,7 +20231,7 @@ var Arkade = class _Arkade {
|
|
|
20139
20231
|
* key respectively; explicit args always win.
|
|
20140
20232
|
*/
|
|
20141
20233
|
contract(program, args = {}) {
|
|
20142
|
-
const declared = (program.params ?? []).map(
|
|
20234
|
+
const declared = (program.params ?? []).map(chunkOWTKOMJZ_cjs.inputName);
|
|
20143
20235
|
if (declared.includes("server") && args.server === void 0) {
|
|
20144
20236
|
args = { ...args, server: this.serverKey };
|
|
20145
20237
|
}
|
|
@@ -20159,7 +20251,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
20159
20251
|
userKey: client.userKey,
|
|
20160
20252
|
emulatorKey: client.emulatorKey
|
|
20161
20253
|
};
|
|
20162
|
-
this.vtxoScript = new
|
|
20254
|
+
this.vtxoScript = new chunkOWTKOMJZ_cjs.ArkadeProgramScript(program, args, this.keys);
|
|
20163
20255
|
this.tapTree = this.vtxoScript.encode();
|
|
20164
20256
|
this.compiled = this.vtxoScript.compiled;
|
|
20165
20257
|
}
|
|
@@ -20187,7 +20279,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
20187
20279
|
`ArkadeContract.fromContract: expected contract type 'arkade', got '${contract.type}'`
|
|
20188
20280
|
);
|
|
20189
20281
|
}
|
|
20190
|
-
const typed =
|
|
20282
|
+
const typed = chunkOWTKOMJZ_cjs.deserializeArkadeContractParams(contract.params);
|
|
20191
20283
|
return new _ArkadeContract(client, typed.program, typed.args, {
|
|
20192
20284
|
serverKey: typed.serverKey,
|
|
20193
20285
|
userKey: typed.userKey,
|
|
@@ -20228,7 +20320,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
20228
20320
|
toContractParams() {
|
|
20229
20321
|
return {
|
|
20230
20322
|
type: "arkade",
|
|
20231
|
-
params:
|
|
20323
|
+
params: chunkOWTKOMJZ_cjs.serializeArkadeContractParams({
|
|
20232
20324
|
program: this.program,
|
|
20233
20325
|
args: this.args,
|
|
20234
20326
|
serverKey: this.keys.serverKey,
|
|
@@ -20273,13 +20365,13 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
20273
20365
|
const [registered] = await manager.getContracts({ script: scriptHex });
|
|
20274
20366
|
if (registered) {
|
|
20275
20367
|
const [withVtxos] = await manager.getContractsWithVtxos({ script: scriptHex });
|
|
20276
|
-
return (withVtxos?.vtxos ?? []).filter((v) => !
|
|
20368
|
+
return (withVtxos?.vtxos ?? []).filter((v) => !chunkKUN5ZRMW_cjs.hasTerminalSpend(v));
|
|
20277
20369
|
}
|
|
20278
20370
|
}
|
|
20279
20371
|
if (!this.client.indexer) {
|
|
20280
20372
|
throw new Error("ArkadeContract.getUtxos: an indexer is required");
|
|
20281
20373
|
}
|
|
20282
|
-
const { vtxos } = await
|
|
20374
|
+
const { vtxos } = await chunkKUN5ZRMW_cjs.getNormalizedVtxos(this.client.indexer, {
|
|
20283
20375
|
scripts: [scriptHex],
|
|
20284
20376
|
spendableOnly: true
|
|
20285
20377
|
});
|
|
@@ -20381,12 +20473,12 @@ var ArkadeTransactionBuilder = class {
|
|
|
20381
20473
|
this.contract.client.checkpoint
|
|
20382
20474
|
);
|
|
20383
20475
|
if (coin.sourceTx) {
|
|
20384
|
-
|
|
20476
|
+
chunkKUN5ZRMW_cjs.setArkPsbtField(arkTx, 0, chunkKUN5ZRMW_cjs.PrevArkTxField, coin.sourceTx);
|
|
20385
20477
|
}
|
|
20386
20478
|
const condition = (def.tapscript.witness ?? []).map((w) => this.witnessBytes(w));
|
|
20387
20479
|
if (condition.length > 0) {
|
|
20388
|
-
|
|
20389
|
-
|
|
20480
|
+
chunkKUN5ZRMW_cjs.setArkPsbtField(arkTx, 0, chunkKUN5ZRMW_cjs.ConditionWitness, condition);
|
|
20481
|
+
chunkKUN5ZRMW_cjs.setArkPsbtField(checkpoints[0], 0, chunkKUN5ZRMW_cjs.ConditionWitness, condition);
|
|
20390
20482
|
}
|
|
20391
20483
|
const packets = [];
|
|
20392
20484
|
if (this.assetSpecs.length > 0) {
|
|
@@ -20425,7 +20517,7 @@ var ArkadeTransactionBuilder = class {
|
|
|
20425
20517
|
base.base64.encode(signedArk2.toPSBT()),
|
|
20426
20518
|
signedCps.map((c) => base.base64.encode(c.toPSBT()))
|
|
20427
20519
|
);
|
|
20428
|
-
const txid =
|
|
20520
|
+
const txid = chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(res2.signedArkTx)).id;
|
|
20429
20521
|
return {
|
|
20430
20522
|
txid,
|
|
20431
20523
|
signedArkTx: res2.signedArkTx,
|
|
@@ -20484,23 +20576,23 @@ var ArkadeTransactionBuilder = class {
|
|
|
20484
20576
|
}
|
|
20485
20577
|
buildAssetPacket() {
|
|
20486
20578
|
const groups = this.assetSpecs.map((s) => {
|
|
20487
|
-
const id = typeof s.assetId === "string" ?
|
|
20488
|
-
return
|
|
20579
|
+
const id = typeof s.assetId === "string" ? chunkYK6NP5KX_cjs.AssetId.fromString(s.assetId) : chunkYK6NP5KX_cjs.AssetId.fromBytes(s.assetId);
|
|
20580
|
+
return chunkYK6NP5KX_cjs.AssetGroup.create(
|
|
20489
20581
|
id,
|
|
20490
20582
|
null,
|
|
20491
|
-
s.inputs.map((i) =>
|
|
20492
|
-
s.outputs.map((o) =>
|
|
20493
|
-
(s.metadata ?? []).map((m) =>
|
|
20583
|
+
s.inputs.map((i) => chunkYK6NP5KX_cjs.AssetInput.create(i.vin, i.amount)),
|
|
20584
|
+
s.outputs.map((o) => chunkYK6NP5KX_cjs.AssetOutput.create(o.vout, o.amount)),
|
|
20585
|
+
(s.metadata ?? []).map((m) => chunkYK6NP5KX_cjs.Metadata.create(m.key, m.value))
|
|
20494
20586
|
);
|
|
20495
20587
|
});
|
|
20496
|
-
return
|
|
20588
|
+
return chunkYK6NP5KX_cjs.Packet.create(groups);
|
|
20497
20589
|
}
|
|
20498
20590
|
witnessBytes(ref) {
|
|
20499
|
-
return
|
|
20591
|
+
return chunkOWTKOMJZ_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
|
|
20500
20592
|
}
|
|
20501
20593
|
};
|
|
20502
20594
|
function bindInputs(fn, callArgs) {
|
|
20503
|
-
const names = (fn.def.inputs ?? []).map(
|
|
20595
|
+
const names = (fn.def.inputs ?? []).map(chunkOWTKOMJZ_cjs.inputName);
|
|
20504
20596
|
if (callArgs.length !== names.length) {
|
|
20505
20597
|
throw new Error(`${fn.name}: expected ${names.length} argument(s), got ${callArgs.length}`);
|
|
20506
20598
|
}
|
|
@@ -20907,7 +20999,7 @@ function decodeArkContract(encoded) {
|
|
|
20907
20999
|
}
|
|
20908
21000
|
function contractFromArkContract(encoded, options = {}) {
|
|
20909
21001
|
const parsed = decodeArkContract(encoded);
|
|
20910
|
-
const handler =
|
|
21002
|
+
const handler = chunkOWTKOMJZ_cjs.contractHandlers.get(parsed.type);
|
|
20911
21003
|
if (!handler) {
|
|
20912
21004
|
throw new Error(`No handler registered for contract type '${parsed.type}'`);
|
|
20913
21005
|
}
|
|
@@ -20921,9 +21013,9 @@ function contractFromArkContract(encoded, options = {}) {
|
|
|
20921
21013
|
metadata: options.metadata
|
|
20922
21014
|
};
|
|
20923
21015
|
}
|
|
20924
|
-
function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix =
|
|
21016
|
+
function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunkKUN5ZRMW_cjs.DEFAULT_NETWORK.hrp, options = {}) {
|
|
20925
21017
|
const parsed = decodeArkContract(encoded);
|
|
20926
|
-
const handler =
|
|
21018
|
+
const handler = chunkOWTKOMJZ_cjs.contractHandlers.getOrThrow(parsed.type);
|
|
20927
21019
|
const params = parsed.data;
|
|
20928
21020
|
const vtxoScript = handler.createScript(params);
|
|
20929
21021
|
return {
|
|
@@ -20956,6 +21048,8 @@ exports.ContractRepositoryImpl = ContractRepositoryImpl;
|
|
|
20956
21048
|
exports.ContractWatcher = ContractWatcher;
|
|
20957
21049
|
exports.DB_VERSION = DB_VERSION;
|
|
20958
21050
|
exports.DEFAULT_MESSAGE_TIMEOUTS = DEFAULT_MESSAGE_TIMEOUTS;
|
|
21051
|
+
exports.DEFAULT_MIN_BATCH_EXPIRY_SECONDS = DEFAULT_MIN_BATCH_EXPIRY_SECONDS;
|
|
21052
|
+
exports.DEFAULT_MIN_CHECKPOINT_EXIT_DELAY_SECONDS = DEFAULT_MIN_CHECKPOINT_EXIT_DELAY_SECONDS;
|
|
20959
21053
|
exports.DelegateManagerImpl = DelegateManagerImpl;
|
|
20960
21054
|
exports.DelegateNotConfiguredError = DelegateNotConfiguredError;
|
|
20961
21055
|
exports.DelegatorManagerImpl = DelegatorManagerImpl;
|
|
@@ -20993,6 +21087,8 @@ exports.MnemonicIdentity = MnemonicIdentity;
|
|
|
20993
21087
|
exports.OnchainWallet = OnchainWallet;
|
|
20994
21088
|
exports.P2A = P2A;
|
|
20995
21089
|
exports.PaymentRouter = PaymentRouter;
|
|
21090
|
+
exports.REGTEST_MIN_BATCH_EXPIRY_SECONDS = REGTEST_MIN_BATCH_EXPIRY_SECONDS;
|
|
21091
|
+
exports.REGTEST_MIN_CHECKPOINT_EXIT_DELAY_SECONDS = REGTEST_MIN_CHECKPOINT_EXIT_DELAY_SECONDS;
|
|
20996
21092
|
exports.Ramps = Ramps;
|
|
20997
21093
|
exports.ReadonlyAssetManager = ReadonlyAssetManager;
|
|
20998
21094
|
exports.ReadonlyDescriptorIdentity = ReadonlyDescriptorIdentity;
|
|
@@ -21025,6 +21121,8 @@ exports.assertFinalCommitmentMatchesValidated = assertFinalCommitmentMatchesVali
|
|
|
21025
21121
|
exports.assertIntentIdUnique = assertIntentIdUnique;
|
|
21026
21122
|
exports.assertSendableAmount = assertSendableAmount;
|
|
21027
21123
|
exports.assertSubmittedArkTxid = assertSubmittedArkTxid;
|
|
21124
|
+
exports.assertValidBatchExpiry = assertValidBatchExpiry;
|
|
21125
|
+
exports.assertValidServerUnrollScript = assertValidServerUnrollScript;
|
|
21028
21126
|
exports.assetMintResolver = assetMintResolver;
|
|
21029
21127
|
exports.boardingResolver = boardingResolver;
|
|
21030
21128
|
exports.btcTarget = btcTarget;
|
|
@@ -21042,6 +21140,8 @@ exports.createDefaultActivityRegistry = createDefaultActivityRegistry;
|
|
|
21042
21140
|
exports.createDefaultPaymentRouter = createDefaultPaymentRouter;
|
|
21043
21141
|
exports.createExitChainResolver = createExitChainResolver;
|
|
21044
21142
|
exports.decodeArkContract = decodeArkContract;
|
|
21143
|
+
exports.defaultBatchExpiryPolicy = defaultBatchExpiryPolicy;
|
|
21144
|
+
exports.defaultCheckpointExitDelayPolicy = defaultCheckpointExitDelayPolicy;
|
|
21045
21145
|
exports.deserializeAssets = deserializeAssets;
|
|
21046
21146
|
exports.deserializeExitPackage = deserializeExitPackage;
|
|
21047
21147
|
exports.deserializeUtxo = deserializeUtxo;
|
|
@@ -21078,6 +21178,8 @@ exports.migrateWalletRepository = migrateWalletRepository;
|
|
|
21078
21178
|
exports.onchainRail = onchainRail;
|
|
21079
21179
|
exports.openDatabase = openDatabase;
|
|
21080
21180
|
exports.requiresMigration = requiresMigration;
|
|
21181
|
+
exports.resolveBatchExpiryPolicy = resolveBatchExpiryPolicy;
|
|
21182
|
+
exports.resolveCheckpointExitDelayPolicy = resolveCheckpointExitDelayPolicy;
|
|
21081
21183
|
exports.resolveSendAmount = resolveSendAmount;
|
|
21082
21184
|
exports.rollbackMigration = rollbackMigration;
|
|
21083
21185
|
exports.saveVtxosForContract = saveVtxosForContract;
|
|
@@ -21098,5 +21200,5 @@ exports.validateVtxoTxGraph = validateVtxoTxGraph;
|
|
|
21098
21200
|
exports.verifyTapscriptSignatures = verifyTapscriptSignatures;
|
|
21099
21201
|
exports.waitForIncomingFunds = waitForIncomingFunds;
|
|
21100
21202
|
exports.warnAndFilterVtxosForScript = warnAndFilterVtxosForScript;
|
|
21101
|
-
//# sourceMappingURL=chunk-
|
|
21102
|
-
//# sourceMappingURL=chunk-
|
|
21203
|
+
//# sourceMappingURL=chunk-KEG4AAKX.cjs.map
|
|
21204
|
+
//# sourceMappingURL=chunk-KEG4AAKX.cjs.map
|