@arkade-os/sdk 0.4.55 → 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-Do9Lqfsp.d.cts → ark-CJgH_pmn.d.cts} +25 -2
- package/dist/{ark-Do9Lqfsp.d.ts → ark-CJgH_pmn.d.ts} +25 -2
- package/dist/{asyncStorageTaskQueue-DOnBOEDn.d.ts → asyncStorageTaskQueue-BeeZbf-Q.d.ts} +2 -2
- package/dist/{asyncStorageTaskQueue-C3DYxvAT.d.cts → asyncStorageTaskQueue-BlrsUUX_.d.cts} +2 -2
- package/dist/{chunk-C6UYPHTQ.cjs → chunk-A7TOVUYG.cjs} +9 -9
- package/dist/{chunk-C6UYPHTQ.cjs.map → chunk-A7TOVUYG.cjs.map} +1 -1
- package/dist/{chunk-ENWR2F2P.js → chunk-ASUJNZ63.js} +3 -3
- package/dist/{chunk-ENWR2F2P.js.map → chunk-ASUJNZ63.js.map} +1 -1
- package/dist/{chunk-LAONNMM5.js → chunk-C4SVRVNM.js} +4 -4
- package/dist/{chunk-LAONNMM5.js.map → chunk-C4SVRVNM.js.map} +1 -1
- package/dist/{chunk-SG4X7SEC.js → chunk-CPS7V4A3.js} +4 -4
- package/dist/{chunk-SG4X7SEC.js.map → chunk-CPS7V4A3.js.map} +1 -1
- package/dist/{chunk-CSS74VCN.cjs → chunk-EZBKSWEL.cjs} +17 -17
- package/dist/{chunk-CSS74VCN.cjs.map → chunk-EZBKSWEL.cjs.map} +1 -1
- package/dist/{chunk-ZPL34T2Q.cjs → chunk-KEG4AAKX.cjs} +568 -413
- package/dist/chunk-KEG4AAKX.cjs.map +1 -0
- package/dist/{chunk-OWCPXRGP.cjs → chunk-KUN5ZRMW.cjs} +4 -3
- package/dist/chunk-KUN5ZRMW.cjs.map +1 -0
- package/dist/{chunk-QO3IKBYL.js → chunk-NIZPFPUM.js} +192 -49
- package/dist/chunk-NIZPFPUM.js.map +1 -0
- package/dist/{chunk-V2TOHHPW.cjs → chunk-OWTKOMJZ.cjs} +40 -40
- package/dist/{chunk-V2TOHHPW.cjs.map → chunk-OWTKOMJZ.cjs.map} +1 -1
- package/dist/{chunk-QMPNPZ2T.js → chunk-P6L2W5IL.js} +3 -3
- package/dist/{chunk-QMPNPZ2T.js.map → chunk-P6L2W5IL.js.map} +1 -1
- package/dist/{chunk-JCJ5WFS3.js → chunk-PUNBWFIV.js} +4 -3
- package/dist/chunk-PUNBWFIV.js.map +1 -0
- package/dist/{chunk-G7DOBFQN.cjs → chunk-YK6NP5KX.cjs} +15 -15
- package/dist/{chunk-G7DOBFQN.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-DmhFrtdq.d.ts → delegate-DM3YECSY.d.ts} +1 -1
- package/dist/{delegate-C0iIBxen.d.cts → delegate-Dk-OJVdf.d.cts} +1 -1
- package/dist/{index-BnLM1XxA.d.cts → index-Cig0RkTf.d.cts} +2 -2
- package/dist/{index-BNt4wcSh.d.ts → index-CnE7Gnvb.d.ts} +2 -2
- package/dist/index.cjs +259 -211
- package/dist/index.d.cts +43 -12
- package/dist/index.d.ts +43 -12
- 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-RwUvgQ5M.d.cts → taskRunner-CnGSTaAJ.d.cts} +2 -2
- package/dist/{taskRunner-Bgs-0I3x.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-5Aou-V5n.d.ts → wallet-D6_S0n6B.d.ts} +124 -4
- package/dist/{wallet-Ck7BH8zR.d.cts → wallet-DvRIQBBY.d.cts} +124 -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-JCJ5WFS3.js.map +0 -1
- package/dist/chunk-OWCPXRGP.cjs.map +0 -1
- package/dist/chunk-QO3IKBYL.js.map +0 -1
- package/dist/chunk-ZPL34T2Q.cjs.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,21 +2993,41 @@ 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;
|
|
2923
3000
|
}
|
|
2924
3001
|
}
|
|
2925
|
-
function
|
|
3002
|
+
function assertRecipientArkAddress(encoded, address, context) {
|
|
3003
|
+
if (address.hrp !== context.hrp) {
|
|
3004
|
+
throw new Error(
|
|
3005
|
+
`Invalid Arkade address ${encoded}: expected prefix "${context.hrp}", got "${address.hrp}"`
|
|
3006
|
+
);
|
|
3007
|
+
}
|
|
3008
|
+
const { status } = classifyAgainstSignerSet(
|
|
3009
|
+
base.hex.encode(address.serverPubKey),
|
|
3010
|
+
context.signerSet
|
|
3011
|
+
);
|
|
3012
|
+
if (status === "UNKNOWN_SIGNER") {
|
|
3013
|
+
throw new Error(`Invalid Arkade address ${encoded}: unknown operator signer key`);
|
|
3014
|
+
}
|
|
3015
|
+
if (status === "EXPIRED") {
|
|
3016
|
+
throw new Error(
|
|
3017
|
+
`Invalid Arkade address ${encoded}: operator signer key is past its rotation cutoff`
|
|
3018
|
+
);
|
|
3019
|
+
}
|
|
3020
|
+
}
|
|
3021
|
+
function validateRecipients(recipients, dustAmount, context) {
|
|
2926
3022
|
const validatedRecipients = [];
|
|
2927
3023
|
for (const recipient of recipients) {
|
|
2928
3024
|
let address;
|
|
2929
3025
|
try {
|
|
2930
|
-
address =
|
|
3026
|
+
address = chunkKUN5ZRMW_cjs.ArkAddress.decode(recipient.address);
|
|
2931
3027
|
} catch (e) {
|
|
2932
3028
|
throw new Error(`Invalid Arkade address: ${recipient.address}`);
|
|
2933
3029
|
}
|
|
3030
|
+
assertRecipientArkAddress(recipient.address, address, context);
|
|
2934
3031
|
const amount = recipient.amount || dustAmount;
|
|
2935
3032
|
if (amount <= 0) {
|
|
2936
3033
|
throw new Error("Amount must be positive");
|
|
@@ -2955,7 +3052,7 @@ function selectPendingRecoveryOutpoints(contractsWithVtxos, signerSet, nowSecond
|
|
|
2955
3052
|
continue;
|
|
2956
3053
|
}
|
|
2957
3054
|
for (const v of vtxos) {
|
|
2958
|
-
if (!
|
|
3055
|
+
if (!chunkKUN5ZRMW_cjs.hasTerminalSpend(v) && !v.isSwept) out.add(`${v.txid}:${v.vout}`);
|
|
2959
3056
|
}
|
|
2960
3057
|
}
|
|
2961
3058
|
return out;
|
|
@@ -2988,10 +3085,10 @@ function byValueDescending(vtxos) {
|
|
|
2988
3085
|
return [...vtxos].sort((a, b) => b.value - a.value);
|
|
2989
3086
|
}
|
|
2990
3087
|
async function fetchTimeHeight(wallet) {
|
|
2991
|
-
return
|
|
3088
|
+
return chunkKUN5ZRMW_cjs.resolveTimeHeight(wallet.onchainProvider);
|
|
2992
3089
|
}
|
|
2993
3090
|
function canMigrateBySend(vtxo, now) {
|
|
2994
|
-
if (!
|
|
3091
|
+
if (!chunkKUN5ZRMW_cjs.canSpendOffchain(vtxo, now)) return false;
|
|
2995
3092
|
return vtxo.expiresAt !== void 0 || vtxo.expiresAtHeight !== void 0;
|
|
2996
3093
|
}
|
|
2997
3094
|
function byExpiryAscending(vtxos, now) {
|
|
@@ -2999,7 +3096,7 @@ function byExpiryAscending(vtxos, now) {
|
|
|
2999
3096
|
if (vtxo.isSwept) return -Infinity;
|
|
3000
3097
|
if (vtxo.expiresAt !== void 0) return vtxo.expiresAt.getTime();
|
|
3001
3098
|
if (vtxo.expiresAtHeight !== void 0) {
|
|
3002
|
-
return
|
|
3099
|
+
return chunkKUN5ZRMW_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
|
|
3003
3100
|
}
|
|
3004
3101
|
return Infinity;
|
|
3005
3102
|
};
|
|
@@ -3036,10 +3133,10 @@ var DEFAULT_SETTLEMENT_CONFIG = {
|
|
|
3036
3133
|
};
|
|
3037
3134
|
function getRecoverableVtxos(vtxos, dustAmount, now) {
|
|
3038
3135
|
return vtxos.filter((vtxo) => {
|
|
3039
|
-
if (
|
|
3136
|
+
if (chunkKUN5ZRMW_cjs.canRecoverOnchain(vtxo, now)) {
|
|
3040
3137
|
return true;
|
|
3041
3138
|
}
|
|
3042
|
-
if (
|
|
3139
|
+
if (chunkKUN5ZRMW_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
|
|
3043
3140
|
return true;
|
|
3044
3141
|
}
|
|
3045
3142
|
return false;
|
|
@@ -3070,7 +3167,7 @@ function getRecoverableWithSubdust(vtxos, dustAmount, now) {
|
|
|
3070
3167
|
}
|
|
3071
3168
|
function isVtxoExpiringSoon(vtxo, thresholdMs) {
|
|
3072
3169
|
const realThresholdMs = thresholdMs <= 100 ? DEFAULT_THRESHOLD_MS : thresholdMs;
|
|
3073
|
-
const expiresAt =
|
|
3170
|
+
const expiresAt = chunkKUN5ZRMW_cjs.normalizeVtxo(vtxo).expiresAt;
|
|
3074
3171
|
if (expiresAt === void 0) return false;
|
|
3075
3172
|
const now = Date.now();
|
|
3076
3173
|
const batchExpiry = expiresAt.getTime();
|
|
@@ -3079,7 +3176,7 @@ function isVtxoExpiringSoon(vtxo, thresholdMs) {
|
|
|
3079
3176
|
}
|
|
3080
3177
|
function getExpiringAndRecoverableVtxos(vtxos, thresholdMs, dustAmount, now) {
|
|
3081
3178
|
return vtxos.filter(
|
|
3082
|
-
(vtxo) => isVtxoExpiringSoon(vtxo, thresholdMs) ||
|
|
3179
|
+
(vtxo) => isVtxoExpiringSoon(vtxo, thresholdMs) || chunkKUN5ZRMW_cjs.canRecoverOnchain(vtxo, now) || isSubdust(vtxo, dustAmount)
|
|
3083
3180
|
);
|
|
3084
3181
|
}
|
|
3085
3182
|
function isMigrationCapable(wallet) {
|
|
@@ -3561,11 +3658,11 @@ var VtxoManager = class _VtxoManager {
|
|
|
3561
3658
|
`Sweep not economical: output ${outputAmount} sats after ${fee} sats fee is below dust (${dustAmount} sats)`
|
|
3562
3659
|
);
|
|
3563
3660
|
}
|
|
3564
|
-
const tx = new
|
|
3661
|
+
const tx = new chunkKUN5ZRMW_cjs.Transaction();
|
|
3565
3662
|
for (const utxo of expiredUtxos) {
|
|
3566
|
-
const utxoScript =
|
|
3663
|
+
const utxoScript = chunkKUN5ZRMW_cjs.VtxoScript.decode(utxo.tapTree);
|
|
3567
3664
|
const utxoExitLeaf = utxoScript.leaves.find(
|
|
3568
|
-
(leaf) =>
|
|
3665
|
+
(leaf) => chunkKUN5ZRMW_cjs.CSVMultisigTapscript.isScriptValid(chunkKUN5ZRMW_cjs.scriptFromTapLeafScript(leaf)) === true
|
|
3569
3666
|
);
|
|
3570
3667
|
if (!utxoExitLeaf) {
|
|
3571
3668
|
throw new Error(
|
|
@@ -3580,7 +3677,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
3580
3677
|
amount: BigInt(utxo.value)
|
|
3581
3678
|
},
|
|
3582
3679
|
tapLeafScript: [utxoExitLeaf],
|
|
3583
|
-
sequence:
|
|
3680
|
+
sequence: chunkKUN5ZRMW_cjs.getSequence(utxoExitLeaf)
|
|
3584
3681
|
});
|
|
3585
3682
|
}
|
|
3586
3683
|
tx.addOutputAddress(boardingAddress, outputAmount, this.getNetwork());
|
|
@@ -3814,8 +3911,8 @@ var VtxoManager = class _VtxoManager {
|
|
|
3814
3911
|
if (!serverPubKey) continue;
|
|
3815
3912
|
const cls = classifyAgainstSignerSet(serverPubKey, signerSet, nowSeconds);
|
|
3816
3913
|
if (cls.status === "CURRENT") continue;
|
|
3817
|
-
const recoverable = vtxos.filter((v) => v.isSwept && !
|
|
3818
|
-
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);
|
|
3819
3916
|
const value = spendable.reduce((sum, v) => sum + v.value, 0);
|
|
3820
3917
|
let recoverableCount = 0;
|
|
3821
3918
|
let recoverableValue = 0;
|
|
@@ -3828,7 +3925,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
3828
3925
|
awaitingSweepCount = spendable.length;
|
|
3829
3926
|
awaitingSweepValue = value;
|
|
3830
3927
|
for (const v of spendable) {
|
|
3831
|
-
const exp =
|
|
3928
|
+
const exp = chunkKUN5ZRMW_cjs.toBatchExpiry(v);
|
|
3832
3929
|
if (exp !== void 0 && (nextSweepEta === void 0 || exp < nextSweepEta)) {
|
|
3833
3930
|
nextSweepEta = exp;
|
|
3834
3931
|
}
|
|
@@ -4089,7 +4186,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4089
4186
|
/** Decodes the boarding tapscript exit path to extract the CSV timelock. */
|
|
4090
4187
|
getBoardingTimelock() {
|
|
4091
4188
|
const wallet = this.getSweepWallet();
|
|
4092
|
-
const exitScript =
|
|
4189
|
+
const exitScript = chunkKUN5ZRMW_cjs.CSVMultisigTapscript.decode(
|
|
4093
4190
|
base.hex.decode(wallet.boardingTapscript.exitScript)
|
|
4094
4191
|
);
|
|
4095
4192
|
return exitScript.params.timelock;
|
|
@@ -4220,8 +4317,8 @@ var VtxoManager = class _VtxoManager {
|
|
|
4220
4317
|
* or doesn't carry the metadata.
|
|
4221
4318
|
*/
|
|
4222
4319
|
extractSpentOutpoint(error) {
|
|
4223
|
-
const ark =
|
|
4224
|
-
if (!
|
|
4320
|
+
const ark = chunkKUN5ZRMW_cjs.maybeArkError(error);
|
|
4321
|
+
if (!chunkKUN5ZRMW_cjs.isArkError(ark, chunkKUN5ZRMW_cjs.ArkErrorName.VTXO_ALREADY_SPENT)) return void 0;
|
|
4225
4322
|
const raw = ark.metadata?.vtxo_outpoint;
|
|
4226
4323
|
if (typeof raw !== "string") return void 0;
|
|
4227
4324
|
const [txid, voutStr] = raw.split(":");
|
|
@@ -4411,7 +4508,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4411
4508
|
if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
|
|
4412
4509
|
break;
|
|
4413
4510
|
}
|
|
4414
|
-
const inputFee = estimator.evalOffchainInput(
|
|
4511
|
+
const inputFee = estimator.evalOffchainInput(chunkKUN5ZRMW_cjs.toOffchainInputFeeParams(v));
|
|
4415
4512
|
if (inputFee.satoshis >= v.value) {
|
|
4416
4513
|
continue;
|
|
4417
4514
|
}
|
|
@@ -4431,7 +4528,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4431
4528
|
const arkAddress = await this.wallet.getAddress();
|
|
4432
4529
|
const outputFee = estimator.evalOffchainOutput({
|
|
4433
4530
|
amount: totalAmount,
|
|
4434
|
-
script: base.hex.encode(
|
|
4531
|
+
script: base.hex.encode(chunkKUN5ZRMW_cjs.ArkAddress.decode(arkAddress).pkScript)
|
|
4435
4532
|
});
|
|
4436
4533
|
totalAmount -= BigInt(outputFee.satoshis);
|
|
4437
4534
|
if (totalAmount < dustAmount) return;
|
|
@@ -4511,7 +4608,7 @@ var ArkNote = class _ArkNote {
|
|
|
4511
4608
|
this.value = value;
|
|
4512
4609
|
this.HRP = HRP;
|
|
4513
4610
|
const preimageHash = utils_js.sha256(this.preimage);
|
|
4514
|
-
this.vtxoScript = new
|
|
4611
|
+
this.vtxoScript = new chunkKUN5ZRMW_cjs.VtxoScript([noteTapscript(preimageHash)]);
|
|
4515
4612
|
const leaf = this.vtxoScript.leaves[0];
|
|
4516
4613
|
this.txid = base.hex.encode(new Uint8Array(preimageHash).reverse());
|
|
4517
4614
|
this.tapTree = this.vtxoScript.encode();
|
|
@@ -4678,7 +4775,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
4678
4775
|
const privateKey = data.slice(1, 33);
|
|
4679
4776
|
const serverPubKey = data.slice(33, 65);
|
|
4680
4777
|
const sequence = new DataView(data.buffer, data.byteOffset + 65, 4).getUint32(0, false);
|
|
4681
|
-
const csvTimelock =
|
|
4778
|
+
const csvTimelock = chunkKUN5ZRMW_cjs.sequenceToTimelock(sequence);
|
|
4682
4779
|
return new _ArkadeCash(privateKey, serverPubKey, csvTimelock, decoded.prefix);
|
|
4683
4780
|
}
|
|
4684
4781
|
toString() {
|
|
@@ -4686,7 +4783,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
4686
4783
|
data[0] = _ArkadeCash.Version;
|
|
4687
4784
|
data.set(this._privateKey, 1);
|
|
4688
4785
|
data.set(this._serverPubKey, 33);
|
|
4689
|
-
const sequence =
|
|
4786
|
+
const sequence = chunkKUN5ZRMW_cjs.timelockToSequence(this.csvTimelock);
|
|
4690
4787
|
new DataView(data.buffer, data.byteOffset + 65, 4).setUint32(0, sequence, false);
|
|
4691
4788
|
const words = base.bech32m.toWords(data);
|
|
4692
4789
|
return base.bech32m.encode(this.hrp, words, 1023);
|
|
@@ -4695,7 +4792,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
4695
4792
|
return SingleKey.fromPrivateKey(this._privateKey);
|
|
4696
4793
|
}
|
|
4697
4794
|
get vtxoScript() {
|
|
4698
|
-
return new
|
|
4795
|
+
return new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({
|
|
4699
4796
|
pubKey: this._publicKey,
|
|
4700
4797
|
serverPubKey: this._serverPubKey,
|
|
4701
4798
|
csvTimelock: this.csvTimelock
|
|
@@ -4956,7 +5053,7 @@ async function captureExitBranch(params) {
|
|
|
4956
5053
|
const nonCommitment = ordered.filter((c) => chainTxTypeToChainedExit(c.type) !== 1 /* Commitment */).map((c) => c.txid);
|
|
4957
5054
|
if (nonCommitment.length > 0) {
|
|
4958
5055
|
for (const psbt of await resolver.getVirtualTxs(nonCommitment)) {
|
|
4959
|
-
psbtByTxid.set(
|
|
5056
|
+
psbtByTxid.set(chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
4960
5057
|
}
|
|
4961
5058
|
}
|
|
4962
5059
|
}
|
|
@@ -4999,10 +5096,10 @@ var IndexerExitDataSource = class {
|
|
|
4999
5096
|
while (hasMore) {
|
|
5000
5097
|
const { chain: page, page: meta } = await this.indexer.getVtxoChain(
|
|
5001
5098
|
{ txid: vtxo.txid, vout: vtxo.vout },
|
|
5002
|
-
{ pageIndex, pageSize:
|
|
5099
|
+
{ pageIndex, pageSize: chunkKUN5ZRMW_cjs.DEFAULT_PAGE_SIZE }
|
|
5003
5100
|
);
|
|
5004
5101
|
chain.push(...page);
|
|
5005
|
-
hasMore = meta ? page.length ===
|
|
5102
|
+
hasMore = meta ? page.length === chunkKUN5ZRMW_cjs.DEFAULT_PAGE_SIZE : false;
|
|
5006
5103
|
pageIndex++;
|
|
5007
5104
|
}
|
|
5008
5105
|
return chain;
|
|
@@ -5014,12 +5111,12 @@ var IndexerExitDataSource = class {
|
|
|
5014
5111
|
while (hasMore) {
|
|
5015
5112
|
const { txs, page } = await this.indexer.getVirtualTxs(txids, {
|
|
5016
5113
|
pageIndex,
|
|
5017
|
-
pageSize:
|
|
5114
|
+
pageSize: chunkKUN5ZRMW_cjs.DEFAULT_PAGE_SIZE
|
|
5018
5115
|
});
|
|
5019
5116
|
for (const psbt of txs) {
|
|
5020
|
-
out.set(
|
|
5117
|
+
out.set(chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
5021
5118
|
}
|
|
5022
|
-
hasMore = page ? txs.length ===
|
|
5119
|
+
hasMore = page ? txs.length === chunkKUN5ZRMW_cjs.DEFAULT_PAGE_SIZE : false;
|
|
5023
5120
|
pageIndex++;
|
|
5024
5121
|
}
|
|
5025
5122
|
return out;
|
|
@@ -5040,7 +5137,7 @@ function chainedTxTypeToChainTxType(t) {
|
|
|
5040
5137
|
}
|
|
5041
5138
|
}
|
|
5042
5139
|
function psbtInputTxids(psbtBase64) {
|
|
5043
|
-
const tx =
|
|
5140
|
+
const tx = chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
|
|
5044
5141
|
const ids = [];
|
|
5045
5142
|
for (let i = 0; i < tx.inputsLength; i++) {
|
|
5046
5143
|
const txid = tx.getInput(i).txid;
|
|
@@ -5220,6 +5317,7 @@ function serializeArkInfoSnapshot(info, savedAt) {
|
|
|
5220
5317
|
forfeitPubkey: info.forfeitPubkey,
|
|
5221
5318
|
unilateralExitDelay: info.unilateralExitDelay.toString(),
|
|
5222
5319
|
boardingExitDelay: info.boardingExitDelay.toString(),
|
|
5320
|
+
vtxoTreeExpiry: info.vtxoTreeExpiry?.toString(),
|
|
5223
5321
|
sessionDuration: info.sessionDuration.toString(),
|
|
5224
5322
|
dust: info.dust.toString(),
|
|
5225
5323
|
fees: info.fees,
|
|
@@ -5269,6 +5367,7 @@ function hydrateArkInfo(snapshot) {
|
|
|
5269
5367
|
sessionDuration: BigInt(a.sessionDuration),
|
|
5270
5368
|
signerPubkey: a.signerPubkey,
|
|
5271
5369
|
unilateralExitDelay: BigInt(a.unilateralExitDelay),
|
|
5370
|
+
vtxoTreeExpiry: a.vtxoTreeExpiry !== void 0 ? BigInt(a.vtxoTreeExpiry) : void 0,
|
|
5272
5371
|
utxoMaxAmount: BigInt(a.utxoMaxAmount),
|
|
5273
5372
|
utxoMinAmount: BigInt(a.utxoMinAmount),
|
|
5274
5373
|
version: a.version,
|
|
@@ -5341,6 +5440,9 @@ function parseStoredArkInfoSnapshot(raw) {
|
|
|
5341
5440
|
]) {
|
|
5342
5441
|
assertDecimalString(a[field], `arkInfo.${field}`);
|
|
5343
5442
|
}
|
|
5443
|
+
if (a.vtxoTreeExpiry !== void 0) {
|
|
5444
|
+
assertDecimalString(a.vtxoTreeExpiry, "arkInfo.vtxoTreeExpiry");
|
|
5445
|
+
}
|
|
5344
5446
|
assertFeeInfo(a.fees, "arkInfo.fees");
|
|
5345
5447
|
if (!Array.isArray(a.deprecatedSigners)) {
|
|
5346
5448
|
throw new MalformedArkInfoSnapshotError("arkInfo.deprecatedSigners must be an array");
|
|
@@ -5388,10 +5490,10 @@ async function resolveArkInfo(arkProvider, walletRepository) {
|
|
|
5388
5490
|
try {
|
|
5389
5491
|
info = await arkProvider.getInfo();
|
|
5390
5492
|
} catch (err) {
|
|
5391
|
-
if (!
|
|
5493
|
+
if (!chunkKUN5ZRMW_cjs.isRetryableProviderError(err)) throw err;
|
|
5392
5494
|
const snapshot = await loadArkInfoSnapshot(walletRepository);
|
|
5393
5495
|
if (!snapshot) {
|
|
5394
|
-
throw new
|
|
5496
|
+
throw new chunkKUN5ZRMW_cjs.ProviderUnavailableError(
|
|
5395
5497
|
"Arkade server info is unavailable and no cached snapshot exists",
|
|
5396
5498
|
{ cause: err }
|
|
5397
5499
|
);
|
|
@@ -5774,7 +5876,7 @@ function collectArkTxidsNeedingCreatedAt(vtxos) {
|
|
|
5774
5876
|
return [...txids];
|
|
5775
5877
|
}
|
|
5776
5878
|
async function buildTransactionHistory(vtxos, allBoardingTxs, commitmentsToIgnore, resolveTxCreatedAt) {
|
|
5777
|
-
const fromOldestVtxo = vtxos.map(
|
|
5879
|
+
const fromOldestVtxo = vtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
|
|
5778
5880
|
const txidsNeedingCreatedAt = resolveTxCreatedAt ? collectArkTxidsNeedingCreatedAt(fromOldestVtxo) : [];
|
|
5779
5881
|
const resolvedCreatedAt = resolveTxCreatedAt && txidsNeedingCreatedAt.length > 0 ? await resolveTxCreatedAt(txidsNeedingCreatedAt) : /* @__PURE__ */ new Map();
|
|
5780
5882
|
const unmatchedSettledBoardingTxs = allBoardingTxs.filter(isSettledBoardingReceive).sort((a, b) => a.createdAt - b.createdAt);
|
|
@@ -5938,7 +6040,7 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
5938
6040
|
const virtualCoins = await this.wallet.getVtxos({
|
|
5939
6041
|
withRecoverable: false
|
|
5940
6042
|
});
|
|
5941
|
-
const controlAssetRef = params.controlAssetId ?
|
|
6043
|
+
const controlAssetRef = params.controlAssetId ? chunkYK6NP5KX_cjs.AssetRef.fromId(chunkYK6NP5KX_cjs.AssetId.fromString(params.controlAssetId)) : null;
|
|
5942
6044
|
const coinSelection = selectVirtualCoins(virtualCoins, Number(this.wallet.dustAmount));
|
|
5943
6045
|
let totalBtcSelected = 0n;
|
|
5944
6046
|
const assetChanges = /* @__PURE__ */ new Map();
|
|
@@ -5951,8 +6053,8 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
5951
6053
|
}
|
|
5952
6054
|
}
|
|
5953
6055
|
const groups = [];
|
|
5954
|
-
const issuedAssetOutput =
|
|
5955
|
-
const issuedAssetGroup =
|
|
6056
|
+
const issuedAssetOutput = chunkYK6NP5KX_cjs.AssetOutput.create(0, params.amount);
|
|
6057
|
+
const issuedAssetGroup = chunkYK6NP5KX_cjs.AssetGroup.create(
|
|
5956
6058
|
null,
|
|
5957
6059
|
controlAssetRef,
|
|
5958
6060
|
[],
|
|
@@ -5967,28 +6069,28 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
5967
6069
|
for (const [inputIndex, assets] of assetInputs) {
|
|
5968
6070
|
for (const asset of assets) {
|
|
5969
6071
|
if (asset.assetId !== assetId) continue;
|
|
5970
|
-
changeInputs.push(
|
|
6072
|
+
changeInputs.push(chunkYK6NP5KX_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
5971
6073
|
}
|
|
5972
6074
|
}
|
|
5973
6075
|
groups.push(
|
|
5974
|
-
|
|
5975
|
-
|
|
6076
|
+
chunkYK6NP5KX_cjs.AssetGroup.create(
|
|
6077
|
+
chunkYK6NP5KX_cjs.AssetId.fromString(assetId),
|
|
5976
6078
|
null,
|
|
5977
6079
|
changeInputs,
|
|
5978
|
-
[
|
|
6080
|
+
[chunkYK6NP5KX_cjs.AssetOutput.create(0, amount)],
|
|
5979
6081
|
[]
|
|
5980
6082
|
)
|
|
5981
6083
|
);
|
|
5982
6084
|
}
|
|
5983
6085
|
}
|
|
5984
6086
|
const address = await this.wallet.getAddress();
|
|
5985
|
-
const outputAddress =
|
|
6087
|
+
const outputAddress = chunkKUN5ZRMW_cjs.ArkAddress.decode(address);
|
|
5986
6088
|
const outputs = [
|
|
5987
6089
|
{
|
|
5988
6090
|
script: outputAddress.pkScript,
|
|
5989
6091
|
amount: BigInt(totalBtcSelected)
|
|
5990
6092
|
},
|
|
5991
|
-
Extension.create([
|
|
6093
|
+
Extension.create([chunkYK6NP5KX_cjs.Packet.create(groups)]).txOut()
|
|
5992
6094
|
];
|
|
5993
6095
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(
|
|
5994
6096
|
coinSelection.inputs,
|
|
@@ -5996,7 +6098,7 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
5996
6098
|
);
|
|
5997
6099
|
return {
|
|
5998
6100
|
arkTxId: arkTxid,
|
|
5999
|
-
assetId:
|
|
6101
|
+
assetId: chunkYK6NP5KX_cjs.AssetId.create(arkTxid, 0).toString()
|
|
6000
6102
|
};
|
|
6001
6103
|
}
|
|
6002
6104
|
/**
|
|
@@ -6068,16 +6170,16 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6068
6170
|
for (const [inputIndex, assets] of assetInputs) {
|
|
6069
6171
|
for (const asset of assets) {
|
|
6070
6172
|
if (asset.assetId !== params.assetId) continue;
|
|
6071
|
-
reissueInputs.push(
|
|
6173
|
+
reissueInputs.push(chunkYK6NP5KX_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
6072
6174
|
}
|
|
6073
6175
|
}
|
|
6074
6176
|
const totalAssetAmount = assetToReissueAmount + params.amount;
|
|
6075
|
-
const reissueAssetIdObj =
|
|
6076
|
-
const reissueAssetGroup =
|
|
6177
|
+
const reissueAssetIdObj = chunkYK6NP5KX_cjs.AssetId.fromString(params.assetId);
|
|
6178
|
+
const reissueAssetGroup = chunkYK6NP5KX_cjs.AssetGroup.create(
|
|
6077
6179
|
reissueAssetIdObj,
|
|
6078
6180
|
null,
|
|
6079
6181
|
reissueInputs,
|
|
6080
|
-
[
|
|
6182
|
+
[chunkYK6NP5KX_cjs.AssetOutput.create(0, totalAssetAmount)],
|
|
6081
6183
|
[]
|
|
6082
6184
|
);
|
|
6083
6185
|
const groups = [reissueAssetGroup];
|
|
@@ -6086,27 +6188,27 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6086
6188
|
for (const [inputIndex, assets] of assetInputs) {
|
|
6087
6189
|
for (const asset of assets) {
|
|
6088
6190
|
if (asset.assetId !== assetId) continue;
|
|
6089
|
-
changeInputs.push(
|
|
6191
|
+
changeInputs.push(chunkYK6NP5KX_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
6090
6192
|
}
|
|
6091
6193
|
}
|
|
6092
6194
|
groups.push(
|
|
6093
|
-
|
|
6094
|
-
|
|
6195
|
+
chunkYK6NP5KX_cjs.AssetGroup.create(
|
|
6196
|
+
chunkYK6NP5KX_cjs.AssetId.fromString(assetId),
|
|
6095
6197
|
null,
|
|
6096
6198
|
changeInputs,
|
|
6097
|
-
[
|
|
6199
|
+
[chunkYK6NP5KX_cjs.AssetOutput.create(0, amount)],
|
|
6098
6200
|
[]
|
|
6099
6201
|
)
|
|
6100
6202
|
);
|
|
6101
6203
|
}
|
|
6102
6204
|
const address = await this.wallet.getAddress();
|
|
6103
|
-
const outputAddress =
|
|
6205
|
+
const outputAddress = chunkKUN5ZRMW_cjs.ArkAddress.decode(address);
|
|
6104
6206
|
const outputs = [
|
|
6105
6207
|
{
|
|
6106
6208
|
script: outputAddress.pkScript,
|
|
6107
6209
|
amount: BigInt(totalBtcSelected)
|
|
6108
6210
|
},
|
|
6109
|
-
Extension.create([
|
|
6211
|
+
Extension.create([chunkYK6NP5KX_cjs.Packet.create(groups)]).txOut()
|
|
6110
6212
|
];
|
|
6111
6213
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
|
|
6112
6214
|
return arkTxid;
|
|
@@ -6173,27 +6275,27 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6173
6275
|
for (const [inputIndex, assets] of assetInputs) {
|
|
6174
6276
|
for (const asset of assets) {
|
|
6175
6277
|
if (asset.assetId !== assetId) continue;
|
|
6176
|
-
changeInputs.push(
|
|
6278
|
+
changeInputs.push(chunkYK6NP5KX_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
6177
6279
|
}
|
|
6178
6280
|
}
|
|
6179
6281
|
groups.push(
|
|
6180
|
-
|
|
6181
|
-
|
|
6282
|
+
chunkYK6NP5KX_cjs.AssetGroup.create(
|
|
6283
|
+
chunkYK6NP5KX_cjs.AssetId.fromString(assetId),
|
|
6182
6284
|
null,
|
|
6183
6285
|
changeInputs,
|
|
6184
|
-
amount > 0n ? [
|
|
6286
|
+
amount > 0n ? [chunkYK6NP5KX_cjs.AssetOutput.create(0, amount)] : [],
|
|
6185
6287
|
[]
|
|
6186
6288
|
)
|
|
6187
6289
|
);
|
|
6188
6290
|
}
|
|
6189
6291
|
const address = await this.wallet.getAddress();
|
|
6190
|
-
const outputAddress =
|
|
6292
|
+
const outputAddress = chunkKUN5ZRMW_cjs.ArkAddress.decode(address);
|
|
6191
6293
|
const outputs = [
|
|
6192
6294
|
{
|
|
6193
6295
|
script: outputAddress.pkScript,
|
|
6194
6296
|
amount: BigInt(totalBtcSelected)
|
|
6195
6297
|
},
|
|
6196
|
-
Extension.create([
|
|
6298
|
+
Extension.create([chunkYK6NP5KX_cjs.Packet.create(groups)]).txOut()
|
|
6197
6299
|
];
|
|
6198
6300
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
|
|
6199
6301
|
return arkTxid;
|
|
@@ -6218,7 +6320,7 @@ function castMetadata(metadata) {
|
|
|
6218
6320
|
} else {
|
|
6219
6321
|
throw new Error("Invalid metadata value type");
|
|
6220
6322
|
}
|
|
6221
|
-
md.push(
|
|
6323
|
+
md.push(chunkYK6NP5KX_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
|
|
6222
6324
|
}
|
|
6223
6325
|
return md;
|
|
6224
6326
|
}
|
|
@@ -6239,10 +6341,10 @@ var DelegateManagerImpl = class {
|
|
|
6239
6341
|
if (vtxos.length === 0) {
|
|
6240
6342
|
return { delegated: [], failed: [] };
|
|
6241
6343
|
}
|
|
6242
|
-
const destinationScript =
|
|
6344
|
+
const destinationScript = chunkKUN5ZRMW_cjs.ArkAddress.decode(destination).pkScript;
|
|
6243
6345
|
const arkInfo = await this.arkInfoProvider.getInfo();
|
|
6244
6346
|
const delegateInfo = await this.delegateProvider.getDelegateInfo();
|
|
6245
|
-
const eligible = vtxos.map(
|
|
6347
|
+
const eligible = vtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo).filter(
|
|
6246
6348
|
(v) => isAnnotated(v) && findDelegateTapLeaf(v, delegateInfo.pubkey) !== void 0
|
|
6247
6349
|
);
|
|
6248
6350
|
if (eligible.length === 0) {
|
|
@@ -6271,11 +6373,11 @@ var DelegateManagerImpl = class {
|
|
|
6271
6373
|
const groupByExpiry = /* @__PURE__ */ new Map();
|
|
6272
6374
|
let recoverableVtxos = [];
|
|
6273
6375
|
for (const vtxo of eligible) {
|
|
6274
|
-
if (
|
|
6376
|
+
if (chunkKUN5ZRMW_cjs.canRecoverOnchain(vtxo, now)) {
|
|
6275
6377
|
recoverableVtxos.push(vtxo);
|
|
6276
6378
|
continue;
|
|
6277
6379
|
}
|
|
6278
|
-
const expiry =
|
|
6380
|
+
const expiry = chunkKUN5ZRMW_cjs.toBatchExpiry(vtxo);
|
|
6279
6381
|
if (!expiry) continue;
|
|
6280
6382
|
const dayKey = getDayTimestamp(expiry);
|
|
6281
6383
|
groupByExpiry.set(dayKey, [...groupByExpiry.get(dayKey) ?? [], vtxo]);
|
|
@@ -6340,7 +6442,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
6340
6442
|
}
|
|
6341
6443
|
if (!delegateAt) {
|
|
6342
6444
|
const now = { timestamp: /* @__PURE__ */ new Date() };
|
|
6343
|
-
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);
|
|
6344
6446
|
if (!expiryTimestamp || expiryTimestamp === Number.MAX_SAFE_INTEGER) {
|
|
6345
6447
|
delegateAt = new Date(Date.now() + 1 * 60 * 1e3);
|
|
6346
6448
|
} else {
|
|
@@ -6369,7 +6471,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
6369
6471
|
let amount = 0n;
|
|
6370
6472
|
for (const coin of vtxos) {
|
|
6371
6473
|
const inputFee = estimator.evalOffchainInput({
|
|
6372
|
-
...
|
|
6474
|
+
...chunkKUN5ZRMW_cjs.toOffchainInputFeeParams(coin),
|
|
6373
6475
|
type: "vtxo"
|
|
6374
6476
|
});
|
|
6375
6477
|
if (inputFee.value >= coin.value) {
|
|
@@ -6383,7 +6485,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
6383
6485
|
const delegateFee = BigInt(Number(fee));
|
|
6384
6486
|
if (delegateFee > 0n) {
|
|
6385
6487
|
outputs.push({
|
|
6386
|
-
script:
|
|
6488
|
+
script: chunkKUN5ZRMW_cjs.ArkAddress.decode(delegateAddress).pkScript,
|
|
6387
6489
|
amount: delegateFee
|
|
6388
6490
|
});
|
|
6389
6491
|
}
|
|
@@ -6416,10 +6518,10 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
6416
6518
|
destinationScript
|
|
6417
6519
|
);
|
|
6418
6520
|
const forfeitOutputScript = btcSigner.OutScript.encode(
|
|
6419
|
-
btcSigner.Address(
|
|
6521
|
+
btcSigner.Address(chunkKUN5ZRMW_cjs.getNetwork(network)).decode(forfeitAddress)
|
|
6420
6522
|
);
|
|
6421
6523
|
const forfeits = await Promise.all(
|
|
6422
|
-
vtxos.filter((v) => !
|
|
6524
|
+
vtxos.filter((v) => !chunkKUN5ZRMW_cjs.canRecoverOnchain(v, { timestamp: /* @__PURE__ */ new Date() })).map(async (coin) => {
|
|
6423
6525
|
const forfeit = await makeDelegateForfeitTx(
|
|
6424
6526
|
coin,
|
|
6425
6527
|
dust,
|
|
@@ -6444,7 +6546,7 @@ async function makeDelegateForfeitTx(input, connectorAmount, delegatePubkey, for
|
|
|
6444
6546
|
index: input.vout,
|
|
6445
6547
|
witnessUtxo: {
|
|
6446
6548
|
amount: BigInt(input.value),
|
|
6447
|
-
script:
|
|
6549
|
+
script: chunkKUN5ZRMW_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
6448
6550
|
},
|
|
6449
6551
|
sighashType: btcSigner.SigHash.ALL_ANYONECANPAY,
|
|
6450
6552
|
tapLeafScript: [delegateTapLeaf]
|
|
@@ -6502,7 +6604,7 @@ async function makeSignedDelegateIntent(identity, coins, outputs, onchainOutputs
|
|
|
6502
6604
|
expire_at: 0,
|
|
6503
6605
|
cosigners_public_keys: cosignerPubKeys
|
|
6504
6606
|
};
|
|
6505
|
-
const proof =
|
|
6607
|
+
const proof = chunkKUN5ZRMW_cjs.Intent.create(message, coins, outputs);
|
|
6506
6608
|
const signedProof = await identity.sign(proof);
|
|
6507
6609
|
return {
|
|
6508
6610
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -6520,10 +6622,10 @@ function getDayTimestamp(timestamp) {
|
|
|
6520
6622
|
function findDelegateTapLeaf(vtxo, delegatePubkey) {
|
|
6521
6623
|
if (!vtxo.tapTree) return void 0;
|
|
6522
6624
|
const pk = delegatePubkey.length === 66 ? delegatePubkey.slice(2) : delegatePubkey;
|
|
6523
|
-
const vtxoScript =
|
|
6625
|
+
const vtxoScript = chunkKUN5ZRMW_cjs.VtxoScript.decode(vtxo.tapTree);
|
|
6524
6626
|
return vtxoScript.leaves.find((tapLeaf) => {
|
|
6525
|
-
const arkTapscript =
|
|
6526
|
-
if (!
|
|
6627
|
+
const arkTapscript = chunkKUN5ZRMW_cjs.decodeTapscript(chunkKUN5ZRMW_cjs.scriptFromTapLeafScript(tapLeaf));
|
|
6628
|
+
if (!chunkKUN5ZRMW_cjs.MultisigTapscript.is(arkTapscript)) return false;
|
|
6527
6629
|
return arkTapscript.params.pubkeys.map(base.hex.encode).includes(pk);
|
|
6528
6630
|
});
|
|
6529
6631
|
}
|
|
@@ -6711,7 +6813,7 @@ async function closeDatabase(dbName) {
|
|
|
6711
6813
|
return true;
|
|
6712
6814
|
}
|
|
6713
6815
|
function scriptFromArkAddress(address) {
|
|
6714
|
-
return base.hex.encode(
|
|
6816
|
+
return base.hex.encode(chunkKUN5ZRMW_cjs.ArkAddress.decode(address).pkScript);
|
|
6715
6817
|
}
|
|
6716
6818
|
|
|
6717
6819
|
// src/repositories/indexedDB/schema.ts
|
|
@@ -7208,7 +7310,7 @@ function validateVtxosForScript(vtxos, script, context) {
|
|
|
7208
7310
|
}
|
|
7209
7311
|
async function getVtxosForContract(repo, contract) {
|
|
7210
7312
|
const vtxos = repo.getVtxosForScript ? await repo.getVtxosForScript(contract.script) : filterVtxosForScript(await repo.getVtxos(contract.address), contract.script);
|
|
7211
|
-
return vtxos.map(
|
|
7313
|
+
return vtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo);
|
|
7212
7314
|
}
|
|
7213
7315
|
async function saveVtxosForContract(repo, contract, vtxos) {
|
|
7214
7316
|
if (repo.saveVtxosForScript) {
|
|
@@ -7412,7 +7514,7 @@ var deserializeTapLeaf = (t) => {
|
|
|
7412
7514
|
const s = base.hex.decode(t.s);
|
|
7413
7515
|
return [cb, s];
|
|
7414
7516
|
};
|
|
7415
|
-
var deserializeVtxo = (o) =>
|
|
7517
|
+
var deserializeVtxo = (o) => chunkKUN5ZRMW_cjs.normalizeVtxo({
|
|
7416
7518
|
...o,
|
|
7417
7519
|
createdAt: new Date(o.createdAt),
|
|
7418
7520
|
tapTree: base.hex.decode(o.tapTree),
|
|
@@ -8551,7 +8653,7 @@ var ContractWatcher = class {
|
|
|
8551
8653
|
this.connectionState = "connected";
|
|
8552
8654
|
this.reconnectAttempts = 0;
|
|
8553
8655
|
this.listenLoop().catch((e) => {
|
|
8554
|
-
if (
|
|
8656
|
+
if (chunkKUN5ZRMW_cjs.isEventSourceError(e)) {
|
|
8555
8657
|
console.debug("ContractWatcher subscription disconnected; reconnecting");
|
|
8556
8658
|
} else {
|
|
8557
8659
|
console.error(e);
|
|
@@ -8780,14 +8882,14 @@ var ContractWatcher = class {
|
|
|
8780
8882
|
const timestamp = Date.now();
|
|
8781
8883
|
if (update.newVtxos?.length) {
|
|
8782
8884
|
this.processSubscriptionVtxos(
|
|
8783
|
-
update.newVtxos.map(
|
|
8885
|
+
update.newVtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo),
|
|
8784
8886
|
"vtxo_received",
|
|
8785
8887
|
timestamp
|
|
8786
8888
|
);
|
|
8787
8889
|
}
|
|
8788
8890
|
if (update.spentVtxos?.length) {
|
|
8789
8891
|
this.processSubscriptionVtxos(
|
|
8790
|
-
update.spentVtxos.map(
|
|
8892
|
+
update.spentVtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo),
|
|
8791
8893
|
"vtxo_spent",
|
|
8792
8894
|
timestamp
|
|
8793
8895
|
);
|
|
@@ -8920,7 +9022,7 @@ async function reconcileIntents(deps) {
|
|
|
8920
9022
|
let vtxosByOutpoint = /* @__PURE__ */ new Map();
|
|
8921
9023
|
if (outpoints.length > 0) {
|
|
8922
9024
|
try {
|
|
8923
|
-
const { vtxos } = await
|
|
9025
|
+
const { vtxos } = await chunkKUN5ZRMW_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
|
|
8924
9026
|
vtxosByOutpoint = new Map(vtxos.map((v) => [outpointKey(v), v]));
|
|
8925
9027
|
} catch (e) {
|
|
8926
9028
|
console.error("reconcileIntents: failed to fetch input VTXO state", e);
|
|
@@ -9040,7 +9142,7 @@ var ContractManager = class _ContractManager {
|
|
|
9040
9142
|
await this.reconcileWatched();
|
|
9041
9143
|
this.markSyncOnline();
|
|
9042
9144
|
} catch (err) {
|
|
9043
|
-
if (!
|
|
9145
|
+
if (!chunkKUN5ZRMW_cjs.isRetryableProviderError(err)) throw err;
|
|
9044
9146
|
this.markSyncDegraded(err);
|
|
9045
9147
|
}
|
|
9046
9148
|
this.initialized = true;
|
|
@@ -9152,7 +9254,7 @@ var ContractManager = class _ContractManager {
|
|
|
9152
9254
|
const from = Math.max(0, watermark - lookAhead.size);
|
|
9153
9255
|
const to = watermark + lookAhead.size;
|
|
9154
9256
|
const deps = lookAhead.candidateDeps();
|
|
9155
|
-
const handlers =
|
|
9257
|
+
const handlers = chunkOWTKOMJZ_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkOWTKOMJZ_cjs.contractHandlers.get(t)).filter(hasCandidates);
|
|
9156
9258
|
const band = /* @__PURE__ */ new Map();
|
|
9157
9259
|
for (let index = from; index <= to; index++) {
|
|
9158
9260
|
const descriptor = lookAhead.materialize(index);
|
|
@@ -9163,7 +9265,7 @@ var ContractManager = class _ContractManager {
|
|
|
9163
9265
|
index,
|
|
9164
9266
|
params: {
|
|
9165
9267
|
...candidate,
|
|
9166
|
-
...
|
|
9268
|
+
...chunkOWTKOMJZ_cjs.speculativeReceiveMetadata(descriptor)
|
|
9167
9269
|
}
|
|
9168
9270
|
});
|
|
9169
9271
|
}
|
|
@@ -9223,7 +9325,7 @@ var ContractManager = class _ContractManager {
|
|
|
9223
9325
|
});
|
|
9224
9326
|
for (const entry of pending) entry.catchUpPending = false;
|
|
9225
9327
|
} catch (err) {
|
|
9226
|
-
if (!
|
|
9328
|
+
if (!chunkKUN5ZRMW_cjs.isRetryableProviderError(err)) throw err;
|
|
9227
9329
|
this.markSyncDegraded(err);
|
|
9228
9330
|
}
|
|
9229
9331
|
}
|
|
@@ -9267,7 +9369,7 @@ var ContractManager = class _ContractManager {
|
|
|
9267
9369
|
await this.fetchContractVxosFromIndexer([contract]);
|
|
9268
9370
|
this.markSyncOnline();
|
|
9269
9371
|
} catch (err) {
|
|
9270
|
-
if (!
|
|
9372
|
+
if (!chunkKUN5ZRMW_cjs.isRetryableProviderError(err)) throw err;
|
|
9271
9373
|
this.markSyncDegraded(err);
|
|
9272
9374
|
}
|
|
9273
9375
|
await this.watcher.addContract(contract);
|
|
@@ -9304,7 +9406,7 @@ var ContractManager = class _ContractManager {
|
|
|
9304
9406
|
return result;
|
|
9305
9407
|
}
|
|
9306
9408
|
async upsertContractRow(params) {
|
|
9307
|
-
const handler =
|
|
9409
|
+
const handler = chunkOWTKOMJZ_cjs.contractHandlers.get(params.type);
|
|
9308
9410
|
if (!handler) {
|
|
9309
9411
|
throw new Error(`No handler registered for contract type '${params.type}'`);
|
|
9310
9412
|
}
|
|
@@ -9404,7 +9506,7 @@ var ContractManager = class _ContractManager {
|
|
|
9404
9506
|
`scanContracts: batchSize must be a positive integer (got ${String(opts.batchSize)})`
|
|
9405
9507
|
);
|
|
9406
9508
|
}
|
|
9407
|
-
const registered =
|
|
9509
|
+
const registered = chunkOWTKOMJZ_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkOWTKOMJZ_cjs.contractHandlers.get(t)).filter(isDiscoverable);
|
|
9408
9510
|
const discoverables = [
|
|
9409
9511
|
...registered.filter((h) => h.type === "boarding"),
|
|
9410
9512
|
...registered.filter((h) => h.type !== "boarding")
|
|
@@ -9539,7 +9641,7 @@ var ContractManager = class _ContractManager {
|
|
|
9539
9641
|
await this.syncContracts({ contracts, pageSize });
|
|
9540
9642
|
this.markSyncOnline();
|
|
9541
9643
|
} catch (err) {
|
|
9542
|
-
if (!
|
|
9644
|
+
if (!chunkKUN5ZRMW_cjs.isRetryableProviderError(err)) throw err;
|
|
9543
9645
|
this.markSyncDegraded(err);
|
|
9544
9646
|
}
|
|
9545
9647
|
const vtxos = await this.getVtxosForContracts(contracts);
|
|
@@ -9560,7 +9662,7 @@ var ContractManager = class _ContractManager {
|
|
|
9560
9662
|
}
|
|
9561
9663
|
const tapscriptCache = /* @__PURE__ */ new Map();
|
|
9562
9664
|
return vtxos.map(
|
|
9563
|
-
(vtxo) => extendVirtualCoinForContract(
|
|
9665
|
+
(vtxo) => extendVirtualCoinForContract(chunkKUN5ZRMW_cjs.normalizeVtxo(vtxo), byScript, tapscriptCache)
|
|
9564
9666
|
);
|
|
9565
9667
|
}
|
|
9566
9668
|
buildContractsDbFilter(filter) {
|
|
@@ -9645,7 +9747,7 @@ var ContractManager = class _ContractManager {
|
|
|
9645
9747
|
const { contractScript, collaborative = true, walletPubKey, vtxo } = options;
|
|
9646
9748
|
const [contract] = await this.getContracts({ script: contractScript });
|
|
9647
9749
|
if (!contract) return [];
|
|
9648
|
-
const handler =
|
|
9750
|
+
const handler = chunkOWTKOMJZ_cjs.contractHandlers.get(contract.type);
|
|
9649
9751
|
if (!handler) return [];
|
|
9650
9752
|
const script = handler.createScript(contract.params);
|
|
9651
9753
|
const context = {
|
|
@@ -9665,7 +9767,7 @@ var ContractManager = class _ContractManager {
|
|
|
9665
9767
|
const { contractScript, collaborative = true, walletPubKey } = options;
|
|
9666
9768
|
const [contract] = await this.getContracts({ script: contractScript });
|
|
9667
9769
|
if (!contract) return [];
|
|
9668
|
-
const handler =
|
|
9770
|
+
const handler = chunkOWTKOMJZ_cjs.contractHandlers.get(contract.type);
|
|
9669
9771
|
if (!handler) return [];
|
|
9670
9772
|
const script = handler.createScript(contract.params);
|
|
9671
9773
|
const context = {
|
|
@@ -9721,7 +9823,7 @@ var ContractManager = class _ContractManager {
|
|
|
9721
9823
|
}
|
|
9722
9824
|
async refreshOutpoints(outpoints) {
|
|
9723
9825
|
if (outpoints.length === 0) return;
|
|
9724
|
-
const { vtxos } = await
|
|
9826
|
+
const { vtxos } = await chunkKUN5ZRMW_cjs.getNormalizedVtxos(this.config.indexerProvider, {
|
|
9725
9827
|
outpoints
|
|
9726
9828
|
});
|
|
9727
9829
|
if (vtxos.length === 0) return;
|
|
@@ -9799,7 +9901,7 @@ var ContractManager = class _ContractManager {
|
|
|
9799
9901
|
break;
|
|
9800
9902
|
}
|
|
9801
9903
|
} catch (err) {
|
|
9802
|
-
if (!
|
|
9904
|
+
if (!chunkKUN5ZRMW_cjs.isRetryableProviderError(err)) throw err;
|
|
9803
9905
|
this.markSyncDegraded(err);
|
|
9804
9906
|
}
|
|
9805
9907
|
this.emitEvent(event);
|
|
@@ -9848,7 +9950,7 @@ var ContractManager = class _ContractManager {
|
|
|
9848
9950
|
*/
|
|
9849
9951
|
async reconcilePendingFrontier(contracts) {
|
|
9850
9952
|
const scriptToContract = new Map(contracts.map((c) => [c.script, c]));
|
|
9851
|
-
const vtxos = await
|
|
9953
|
+
const vtxos = await chunkKUN5ZRMW_cjs.getAllNormalizedVtxos(
|
|
9852
9954
|
this.config.indexerProvider,
|
|
9853
9955
|
contracts.map((c) => c.script),
|
|
9854
9956
|
{ pendingOnly: true }
|
|
@@ -9929,7 +10031,7 @@ var ContractManager = class _ContractManager {
|
|
|
9929
10031
|
}
|
|
9930
10032
|
return result;
|
|
9931
10033
|
}
|
|
9932
|
-
async fetchContractVtxosBulk(contracts, pageSize =
|
|
10034
|
+
async fetchContractVtxosBulk(contracts, pageSize = chunkKUN5ZRMW_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
|
|
9933
10035
|
if (contracts.length === 0) {
|
|
9934
10036
|
return { vtxosByScript: /* @__PURE__ */ new Map(), promoted: /* @__PURE__ */ new Map() };
|
|
9935
10037
|
}
|
|
@@ -9945,7 +10047,7 @@ var ContractManager = class _ContractManager {
|
|
|
9945
10047
|
before: syncWindow.before
|
|
9946
10048
|
}
|
|
9947
10049
|
} : {};
|
|
9948
|
-
const vtxos = await
|
|
10050
|
+
const vtxos = await chunkKUN5ZRMW_cjs.getAllNormalizedVtxos(
|
|
9949
10051
|
this.config.indexerProvider,
|
|
9950
10052
|
contracts.map((c) => c.script),
|
|
9951
10053
|
{ ...windowOpts, pageSize }
|
|
@@ -10112,7 +10214,7 @@ var HDDescriptorProvider = class _HDDescriptorProvider {
|
|
|
10112
10214
|
*/
|
|
10113
10215
|
materializeDescriptorAt(index) {
|
|
10114
10216
|
const descriptor = this.identity.descriptor;
|
|
10115
|
-
const network =
|
|
10217
|
+
const network = chunkOWTKOMJZ_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
10116
10218
|
const expansion = descriptorsScure.expand({ descriptor, network, index });
|
|
10117
10219
|
const keyInfo = expansion.expansionMap?.["@0"];
|
|
10118
10220
|
if (!keyInfo?.keyExpression) {
|
|
@@ -10256,7 +10358,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
|
|
|
10256
10358
|
const provider = await resolveDescriptorProvider(config, setup.walletRepository);
|
|
10257
10359
|
if (!provider) return void 0;
|
|
10258
10360
|
const allowSilentFallback = (config.walletMode ?? "auto") === "auto";
|
|
10259
|
-
const expectedContractType = setup.offchainTapscript instanceof
|
|
10361
|
+
const expectedContractType = setup.offchainTapscript instanceof chunkOWTKOMJZ_cjs.DelegateVtxo.Script ? "delegate" : "default";
|
|
10260
10362
|
const factoryOpts = {
|
|
10261
10363
|
walletRepository: setup.walletRepository,
|
|
10262
10364
|
contractRepository: setup.contractRepository,
|
|
@@ -10455,7 +10557,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
|
|
|
10455
10557
|
};
|
|
10456
10558
|
function deriveLeafPubkey(descriptor) {
|
|
10457
10559
|
try {
|
|
10458
|
-
return
|
|
10560
|
+
return chunkOWTKOMJZ_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
10459
10561
|
} catch (e) {
|
|
10460
10562
|
throw new NonRangeableDescriptorError(
|
|
10461
10563
|
"Cannot derive leaf pubkey: descriptor is not a materialized, parsable tr(...) shape.",
|
|
@@ -10467,7 +10569,7 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
10467
10569
|
const pubKey = deriveLeafPubkey(descriptor);
|
|
10468
10570
|
const tapscript = rebuildTapscript(current, pubKey);
|
|
10469
10571
|
const serverPubKey = tapscript.options.serverPubKey;
|
|
10470
|
-
const csvTimelock =
|
|
10572
|
+
const csvTimelock = chunkKUN5ZRMW_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
|
|
10471
10573
|
const base$1 = {
|
|
10472
10574
|
script: base.hex.encode(tapscript.pkScript),
|
|
10473
10575
|
address: tapscript.address(hrp, serverPubKey).encode(),
|
|
@@ -10478,11 +10580,11 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
10478
10580
|
// index-0 key. Without it, spends produce unsigned PSBTs that the
|
|
10479
10581
|
// server rejects with `INVALID_PSBT_INPUT (5): missing tapscript spend sig`.
|
|
10480
10582
|
metadata: {
|
|
10481
|
-
...{ source:
|
|
10583
|
+
...{ source: chunkOWTKOMJZ_cjs.WALLET_RECEIVE_SOURCE },
|
|
10482
10584
|
signingDescriptor: descriptor
|
|
10483
10585
|
}
|
|
10484
10586
|
};
|
|
10485
|
-
const params = tapscript instanceof
|
|
10587
|
+
const params = tapscript instanceof chunkOWTKOMJZ_cjs.DelegateVtxo.Script ? {
|
|
10486
10588
|
...base$1,
|
|
10487
10589
|
type: "delegate",
|
|
10488
10590
|
params: {
|
|
@@ -10503,10 +10605,10 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
10503
10605
|
return { tapscript, params };
|
|
10504
10606
|
}
|
|
10505
10607
|
function rebuildTapscript(current, pubKey) {
|
|
10506
|
-
if (current instanceof
|
|
10507
|
-
return new
|
|
10608
|
+
if (current instanceof chunkOWTKOMJZ_cjs.DelegateVtxo.Script) {
|
|
10609
|
+
return new chunkOWTKOMJZ_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
|
|
10508
10610
|
}
|
|
10509
|
-
return new
|
|
10611
|
+
return new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
|
|
10510
10612
|
}
|
|
10511
10613
|
async function pickActiveReceive(contractRepository, serverPubKey, expectedType) {
|
|
10512
10614
|
const candidates = await contractRepository.getContracts({
|
|
@@ -10515,7 +10617,7 @@ async function pickActiveReceive(contractRepository, serverPubKey, expectedType)
|
|
|
10515
10617
|
});
|
|
10516
10618
|
const serverPubKeyHex = base.hex.encode(serverPubKey);
|
|
10517
10619
|
const matching = candidates.filter(
|
|
10518
|
-
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source ===
|
|
10620
|
+
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkOWTKOMJZ_cjs.WALLET_RECEIVE_SOURCE
|
|
10519
10621
|
).sort((a, b) => {
|
|
10520
10622
|
if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
|
|
10521
10623
|
return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
|
|
@@ -10691,12 +10793,12 @@ var InputSignerRouter = class {
|
|
|
10691
10793
|
};
|
|
10692
10794
|
|
|
10693
10795
|
// src/wallet/wallet.ts
|
|
10694
|
-
var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl ||
|
|
10796
|
+
var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl || chunkKUN5ZRMW_cjs.DEFAULT_ARKADE_SERVER_URL;
|
|
10695
10797
|
function intentProofJobs(coins) {
|
|
10696
10798
|
if (coins.length === 0) return [];
|
|
10697
10799
|
const coinJobs = coins.map((coin, i) => ({
|
|
10698
10800
|
index: i + 1,
|
|
10699
|
-
lookupScript:
|
|
10801
|
+
lookupScript: chunkKUN5ZRMW_cjs.VtxoScript.decode(coin.tapTree).pkScript
|
|
10700
10802
|
}));
|
|
10701
10803
|
return [{ index: 0, lookupScript: coinJobs[0].lookupScript }, ...coinJobs];
|
|
10702
10804
|
}
|
|
@@ -10721,7 +10823,7 @@ function dedupeTimelocks(timelocks) {
|
|
|
10721
10823
|
const seen = /* @__PURE__ */ new Set();
|
|
10722
10824
|
const deduped = [];
|
|
10723
10825
|
for (const timelock of timelocks) {
|
|
10724
|
-
const sequence =
|
|
10826
|
+
const sequence = chunkKUN5ZRMW_cjs.timelockToSequence(timelock).toString();
|
|
10725
10827
|
if (seen.has(sequence)) continue;
|
|
10726
10828
|
seen.add(sequence);
|
|
10727
10829
|
deduped.push(timelock);
|
|
@@ -10738,7 +10840,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
|
|
|
10738
10840
|
state: "active"
|
|
10739
10841
|
});
|
|
10740
10842
|
const newest = candidates.filter(
|
|
10741
|
-
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source ===
|
|
10843
|
+
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkOWTKOMJZ_cjs.WALLET_RECEIVE_SOURCE
|
|
10742
10844
|
).sort((a, b) => {
|
|
10743
10845
|
if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
|
|
10744
10846
|
return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
|
|
@@ -10746,7 +10848,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
|
|
|
10746
10848
|
if (!newest?.params.pubKey) return baseline;
|
|
10747
10849
|
try {
|
|
10748
10850
|
const pubKey = base.hex.decode(newest.params.pubKey);
|
|
10749
|
-
return new
|
|
10851
|
+
return new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
|
|
10750
10852
|
} catch (e) {
|
|
10751
10853
|
console.warn("Skipping malformed boarding contract at boot", newest.script, e);
|
|
10752
10854
|
return baseline;
|
|
@@ -10996,6 +11098,20 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
10996
11098
|
...this._deprecatedSigners.keys()
|
|
10997
11099
|
]);
|
|
10998
11100
|
}
|
|
11101
|
+
/**
|
|
11102
|
+
* `serverPubKey` defaults to the live key; spend paths that snapshot it
|
|
11103
|
+
* against mid-flight rotation pass their snapshot, so the check reads from
|
|
11104
|
+
* one rotation epoch.
|
|
11105
|
+
*/
|
|
11106
|
+
recipientAddressContext(serverPubKey = this._arkServerPublicKey) {
|
|
11107
|
+
return {
|
|
11108
|
+
hrp: this.network.hrp,
|
|
11109
|
+
signerSet: {
|
|
11110
|
+
active: toXOnlySignerHex(base.hex.encode(serverPubKey)),
|
|
11111
|
+
deprecated: this._deprecatedSigners
|
|
11112
|
+
}
|
|
11113
|
+
};
|
|
11114
|
+
}
|
|
10999
11115
|
/**
|
|
11000
11116
|
* Currently-active receive tapscript. Read-only from the outside;
|
|
11001
11117
|
* mutated only via {@link Wallet.setOffchainTapscriptForRotation}
|
|
@@ -11066,7 +11182,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11066
11182
|
*/
|
|
11067
11183
|
static async setupWalletConfig(config, pubKey) {
|
|
11068
11184
|
const arkadeServerUrl = getArkadeServerUrl(config);
|
|
11069
|
-
const arkProvider = config.arkProvider || new
|
|
11185
|
+
const arkProvider = config.arkProvider || new chunkKUN5ZRMW_cjs.RestArkProvider(arkadeServerUrl);
|
|
11070
11186
|
let indexerProvider = config.indexerProvider;
|
|
11071
11187
|
if (!indexerProvider) {
|
|
11072
11188
|
let indexerUrl = config.indexerUrl;
|
|
@@ -11083,7 +11199,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11083
11199
|
indexerUrl = arkadeServerUrl;
|
|
11084
11200
|
}
|
|
11085
11201
|
}
|
|
11086
|
-
indexerProvider = new
|
|
11202
|
+
indexerProvider = new chunkYK6NP5KX_cjs.RestIndexerProvider(indexerUrl);
|
|
11087
11203
|
}
|
|
11088
11204
|
const walletRepository = config.storage?.walletRepository ?? new IndexedDBWalletRepository();
|
|
11089
11205
|
const contractRepository = config.storage?.contractRepository ?? new IndexedDBContractRepository();
|
|
@@ -11092,7 +11208,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11092
11208
|
source: serverInfoSource,
|
|
11093
11209
|
lastOnlineAt: serverInfoLastOnlineAt
|
|
11094
11210
|
} = await resolveArkInfo(arkProvider, walletRepository);
|
|
11095
|
-
const network =
|
|
11211
|
+
const network = chunkKUN5ZRMW_cjs.getNetwork(info.network);
|
|
11096
11212
|
if ("descriptor" in config.identity) {
|
|
11097
11213
|
const descriptor = config.identity.descriptor;
|
|
11098
11214
|
const identityIsMainnet = !descriptor.includes("tpub");
|
|
@@ -11139,11 +11255,11 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11139
11255
|
serverPubKey,
|
|
11140
11256
|
csvTimelock: exitTimelock
|
|
11141
11257
|
};
|
|
11142
|
-
const offchainTapscript = !delegatePubKey ? new
|
|
11143
|
-
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({
|
|
11144
11260
|
pubKey: base.hex.encode(pubKey),
|
|
11145
11261
|
serverPubKey: base.hex.encode(serverPubKey),
|
|
11146
|
-
csvTimelock:
|
|
11262
|
+
csvTimelock: chunkKUN5ZRMW_cjs.timelockToSequence(boardingTimelock).toString()
|
|
11147
11263
|
});
|
|
11148
11264
|
return {
|
|
11149
11265
|
arkProvider,
|
|
@@ -11249,19 +11365,19 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11249
11365
|
let pendingRecovery = 0;
|
|
11250
11366
|
const now = { timestamp: /* @__PURE__ */ new Date() };
|
|
11251
11367
|
const settled = vtxos.filter(
|
|
11252
|
-
(coin) =>
|
|
11368
|
+
(coin) => chunkKUN5ZRMW_cjs.canSpendOffchain(coin, now) && !coin.isPreconfirmed && !isPendingRecovery(coin)
|
|
11253
11369
|
).reduce((sum, coin) => sum + coin.value, 0);
|
|
11254
11370
|
const preconfirmed = vtxos.filter(
|
|
11255
|
-
(coin) =>
|
|
11371
|
+
(coin) => chunkKUN5ZRMW_cjs.canSpendOffchain(coin, now) && coin.isPreconfirmed && !isPendingRecovery(coin)
|
|
11256
11372
|
).reduce((sum, coin) => sum + coin.value, 0);
|
|
11257
|
-
const available = unlockedVtxos.filter((coin) =>
|
|
11258
|
-
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);
|
|
11259
11375
|
pendingRecovery = vtxos.filter(isPendingRecovery).reduce((sum, coin) => sum + coin.value, 0);
|
|
11260
11376
|
const totalBoarding = confirmed + unconfirmed;
|
|
11261
11377
|
const totalOffchain = settled + preconfirmed + recoverable + pendingRecovery;
|
|
11262
11378
|
const assetBalances = /* @__PURE__ */ new Map();
|
|
11263
11379
|
for (const vtxo of vtxos) {
|
|
11264
|
-
if (
|
|
11380
|
+
if (chunkKUN5ZRMW_cjs.hasTerminalSpend(vtxo)) continue;
|
|
11265
11381
|
if (vtxo.assets) {
|
|
11266
11382
|
for (const a of vtxo.assets) {
|
|
11267
11383
|
const current = assetBalances.get(a.assetId) ?? 0n;
|
|
@@ -11302,8 +11418,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11302
11418
|
if (this._pendingSpendOutpoints.has(`${vtxo.txid}:${vtxo.vout}`)) {
|
|
11303
11419
|
return false;
|
|
11304
11420
|
}
|
|
11305
|
-
if (!
|
|
11306
|
-
if (!f.withRecoverable &&
|
|
11421
|
+
if (!chunkKUN5ZRMW_cjs.hasTerminalSpend(vtxo)) {
|
|
11422
|
+
if (!f.withRecoverable && chunkKUN5ZRMW_cjs.canRecoverOnchain(vtxo, now)) {
|
|
11307
11423
|
return false;
|
|
11308
11424
|
}
|
|
11309
11425
|
return true;
|
|
@@ -11336,7 +11452,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11336
11452
|
const response = await contractManager.getContractsWithVtxos();
|
|
11337
11453
|
const allVtxos = response.flatMap((_) => _.vtxos);
|
|
11338
11454
|
const { boardingTxs, commitmentsToIgnore } = await this.getBoardingTxs();
|
|
11339
|
-
const resolveTxCreatedAt = (txids) =>
|
|
11455
|
+
const resolveTxCreatedAt = (txids) => chunkKUN5ZRMW_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
|
|
11340
11456
|
return buildTransactionHistory(
|
|
11341
11457
|
allVtxos,
|
|
11342
11458
|
boardingTxs,
|
|
@@ -11430,7 +11546,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11430
11546
|
},
|
|
11431
11547
|
isUnrolled: true,
|
|
11432
11548
|
...boardingFacts,
|
|
11433
|
-
virtualStatus:
|
|
11549
|
+
virtualStatus: chunkKUN5ZRMW_cjs.toVirtualStatus(boardingFacts),
|
|
11434
11550
|
spentBy: "",
|
|
11435
11551
|
createdAt: tx.status.confirmed ? new Date(tx.status.block_time * 1e3) : /* @__PURE__ */ new Date(0),
|
|
11436
11552
|
script: scriptHex
|
|
@@ -11486,9 +11602,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11486
11602
|
async getBoardingTapscripts(allowedSigners) {
|
|
11487
11603
|
const byScript = /* @__PURE__ */ new Map();
|
|
11488
11604
|
const add = (s) => byScript.set(base.hex.encode(s.pkScript), s);
|
|
11489
|
-
const boardingCsv = this.boardingTapscript.options.csvTimelock ??
|
|
11605
|
+
const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunkOWTKOMJZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
11490
11606
|
add(
|
|
11491
|
-
new
|
|
11607
|
+
new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({
|
|
11492
11608
|
pubKey: await this.identity.xOnlyPublicKey(),
|
|
11493
11609
|
serverPubKey: this.boardingTapscript.options.serverPubKey,
|
|
11494
11610
|
csvTimelock: boardingCsv
|
|
@@ -11503,7 +11619,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11503
11619
|
for (const c of boardingContracts) {
|
|
11504
11620
|
if (!allowed.has(toXOnlySignerHex(c.params.serverPubKey))) continue;
|
|
11505
11621
|
try {
|
|
11506
|
-
add(
|
|
11622
|
+
add(chunkOWTKOMJZ_cjs.BoardingContractHandler.createScript(c.params));
|
|
11507
11623
|
} catch (e) {
|
|
11508
11624
|
console.warn("Skipping malformed boarding contract", c.script, e);
|
|
11509
11625
|
}
|
|
@@ -11541,7 +11657,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11541
11657
|
// Per-row CSV delay decoded from THIS tapscript's exit leaf —
|
|
11542
11658
|
// not the wallet's current boarding timelock, which a signer
|
|
11543
11659
|
// rotation may have changed.
|
|
11544
|
-
csvTimelock:
|
|
11660
|
+
csvTimelock: chunkKUN5ZRMW_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
|
|
11545
11661
|
coins: utxos
|
|
11546
11662
|
});
|
|
11547
11663
|
}
|
|
@@ -11674,7 +11790,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11674
11790
|
/** Fetch Arkade transaction ids that are still pending final settlement. */
|
|
11675
11791
|
async fetchPendingTxs() {
|
|
11676
11792
|
const scripts = await this.getWalletScripts();
|
|
11677
|
-
const vtxos = await
|
|
11793
|
+
const vtxos = await chunkKUN5ZRMW_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
|
|
11678
11794
|
return vtxos.filter(
|
|
11679
11795
|
(vtxo) => (vtxo.isSpent || vtxo.isPreconfirmed && !vtxo.isSwept) && vtxo.arkTxId !== void 0
|
|
11680
11796
|
).map((_) => _.arkTxId);
|
|
@@ -11705,7 +11821,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11705
11821
|
});
|
|
11706
11822
|
for (const contract of contracts) {
|
|
11707
11823
|
if (map.has(contract.script)) continue;
|
|
11708
|
-
const handler =
|
|
11824
|
+
const handler = chunkOWTKOMJZ_cjs.contractHandlers.get(contract.type);
|
|
11709
11825
|
if (handler) {
|
|
11710
11826
|
const script = handler.createScript(contract.params);
|
|
11711
11827
|
map.set(contract.script, script);
|
|
@@ -11808,7 +11924,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11808
11924
|
lookAhead: this.lookAheadConfig()
|
|
11809
11925
|
});
|
|
11810
11926
|
const baselinePubkey = await this.identity.xOnlyPublicKey();
|
|
11811
|
-
const delegatePubKey = this.offchainTapscript instanceof
|
|
11927
|
+
const delegatePubKey = this.offchainTapscript instanceof chunkOWTKOMJZ_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
|
|
11812
11928
|
const baselineSigners = [
|
|
11813
11929
|
this.offchainTapscript.options.serverPubKey,
|
|
11814
11930
|
...[...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h))
|
|
@@ -11816,8 +11932,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11816
11932
|
const seenBaselineScripts = /* @__PURE__ */ new Set();
|
|
11817
11933
|
for (const serverPubKey of baselineSigners) {
|
|
11818
11934
|
for (const csvTimelock of this.walletContractTimelocks) {
|
|
11819
|
-
const csvTimelockStr =
|
|
11820
|
-
const defaultScript = new
|
|
11935
|
+
const csvTimelockStr = chunkKUN5ZRMW_cjs.timelockToSequence(csvTimelock).toString();
|
|
11936
|
+
const defaultScript = new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({
|
|
11821
11937
|
pubKey: baselinePubkey,
|
|
11822
11938
|
serverPubKey,
|
|
11823
11939
|
csvTimelock
|
|
@@ -11838,7 +11954,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11838
11954
|
});
|
|
11839
11955
|
}
|
|
11840
11956
|
if (delegatePubKey) {
|
|
11841
|
-
const delegateScript = new
|
|
11957
|
+
const delegateScript = new chunkOWTKOMJZ_cjs.DelegateVtxo.Script({
|
|
11842
11958
|
pubKey: baselinePubkey,
|
|
11843
11959
|
serverPubKey,
|
|
11844
11960
|
delegatePubKey,
|
|
@@ -11862,9 +11978,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11862
11978
|
}
|
|
11863
11979
|
}
|
|
11864
11980
|
}
|
|
11865
|
-
const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ??
|
|
11981
|
+
const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunkOWTKOMJZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
11866
11982
|
for (const serverPubKey of baselineSigners) {
|
|
11867
|
-
const baselineBoarding = new
|
|
11983
|
+
const baselineBoarding = new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({
|
|
11868
11984
|
pubKey: baselinePubkey,
|
|
11869
11985
|
serverPubKey,
|
|
11870
11986
|
csvTimelock: boardingCsvTimelock
|
|
@@ -11877,7 +11993,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11877
11993
|
params: {
|
|
11878
11994
|
pubKey: base.hex.encode(baselineBoarding.options.pubKey),
|
|
11879
11995
|
serverPubKey: base.hex.encode(serverPubKey),
|
|
11880
|
-
csvTimelock:
|
|
11996
|
+
csvTimelock: chunkKUN5ZRMW_cjs.timelockToSequence(boardingCsvTimelock).toString()
|
|
11881
11997
|
},
|
|
11882
11998
|
script: boardingScriptHex,
|
|
11883
11999
|
address: baselineBoarding.address(this.network.hrp, serverPubKey).encode(),
|
|
@@ -11899,7 +12015,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
11899
12015
|
}
|
|
11900
12016
|
};
|
|
11901
12017
|
var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
11902
|
-
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) {
|
|
11903
12019
|
super(
|
|
11904
12020
|
identity,
|
|
11905
12021
|
network,
|
|
@@ -11918,6 +12034,8 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
11918
12034
|
this.arkProvider = arkProvider;
|
|
11919
12035
|
this.forfeitOutputScript = forfeitOutputScript;
|
|
11920
12036
|
this.forfeitPubkey = forfeitPubkey;
|
|
12037
|
+
this.batchExpiryPolicy = batchExpiryPolicy;
|
|
12038
|
+
this.checkpointExitDelayPolicy = checkpointExitDelayPolicy;
|
|
11921
12039
|
this.identity = identity;
|
|
11922
12040
|
this.renewalConfig = {
|
|
11923
12041
|
enabled: renewalConfig?.enabled ?? false,
|
|
@@ -11950,6 +12068,8 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
11950
12068
|
arkProvider;
|
|
11951
12069
|
forfeitOutputScript;
|
|
11952
12070
|
forfeitPubkey;
|
|
12071
|
+
batchExpiryPolicy;
|
|
12072
|
+
checkpointExitDelayPolicy;
|
|
11953
12073
|
static MIN_FEE_RATE = 1;
|
|
11954
12074
|
// sats/vbyte
|
|
11955
12075
|
identity;
|
|
@@ -12051,7 +12171,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
12051
12171
|
serverPubKey: this.offchainTapscript.options.serverPubKey,
|
|
12052
12172
|
deprecatedSignerPubKeys: [...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h)),
|
|
12053
12173
|
csvTimelocks: this.walletContractTimelocks,
|
|
12054
|
-
delegatePubKey: this.offchainTapscript instanceof
|
|
12174
|
+
delegatePubKey: this.offchainTapscript instanceof chunkOWTKOMJZ_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
|
|
12055
12175
|
};
|
|
12056
12176
|
}
|
|
12057
12177
|
_signerRouter;
|
|
@@ -12143,25 +12263,25 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
12143
12263
|
return this.getBoardingAddress();
|
|
12144
12264
|
}
|
|
12145
12265
|
const descriptor = await provider.getNextSigningDescriptor();
|
|
12146
|
-
const pubKey =
|
|
12147
|
-
const newBoarding = new
|
|
12266
|
+
const pubKey = chunkOWTKOMJZ_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
12267
|
+
const newBoarding = new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({
|
|
12148
12268
|
...this._boardingTapscript.options,
|
|
12149
12269
|
pubKey
|
|
12150
12270
|
});
|
|
12151
|
-
const csvTimelock = newBoarding.options.csvTimelock ??
|
|
12271
|
+
const csvTimelock = newBoarding.options.csvTimelock ?? chunkOWTKOMJZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
12152
12272
|
const manager = await this.getContractManager();
|
|
12153
12273
|
await manager.createContract({
|
|
12154
12274
|
type: "boarding",
|
|
12155
12275
|
params: {
|
|
12156
12276
|
pubKey: base.hex.encode(pubKey),
|
|
12157
12277
|
serverPubKey: base.hex.encode(newBoarding.options.serverPubKey),
|
|
12158
|
-
csvTimelock:
|
|
12278
|
+
csvTimelock: chunkKUN5ZRMW_cjs.timelockToSequence(csvTimelock).toString()
|
|
12159
12279
|
},
|
|
12160
12280
|
script: base.hex.encode(newBoarding.pkScript),
|
|
12161
12281
|
address: newBoarding.address(this.network.hrp, this.arkServerPublicKey).encode(),
|
|
12162
12282
|
state: "active",
|
|
12163
12283
|
metadata: {
|
|
12164
|
-
source:
|
|
12284
|
+
source: chunkOWTKOMJZ_cjs.WALLET_RECEIVE_SOURCE,
|
|
12165
12285
|
signingDescriptor: descriptor
|
|
12166
12286
|
}
|
|
12167
12287
|
});
|
|
@@ -12248,12 +12368,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
12248
12368
|
*/
|
|
12249
12369
|
async rotateServerSigner(newServerPubKey, checkpointTapscript) {
|
|
12250
12370
|
const xonly = toXOnlyPubKey(newServerPubKey);
|
|
12251
|
-
|
|
12252
|
-
|
|
12253
|
-
|
|
12254
|
-
|
|
12255
|
-
throw new Error("Invalid checkpointTapscript from server");
|
|
12256
|
-
}
|
|
12371
|
+
const newServerUnrollScript = assertValidServerUnrollScript(
|
|
12372
|
+
checkpointTapscript,
|
|
12373
|
+
resolveCheckpointExitDelayPolicy(this.network, this.checkpointExitDelayPolicy)
|
|
12374
|
+
);
|
|
12257
12375
|
if (utils_js.equalBytes(xonly, this.arkServerPublicKey)) return;
|
|
12258
12376
|
if (this._receiveRotator) {
|
|
12259
12377
|
await this._receiveRotator.runExclusive(
|
|
@@ -12278,21 +12396,21 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
12278
12396
|
const [currentBoardingRow] = await manager.getContracts({
|
|
12279
12397
|
script: currentBoardingScript
|
|
12280
12398
|
});
|
|
12281
|
-
const newOffchain = this.offchainTapscript instanceof
|
|
12399
|
+
const newOffchain = this.offchainTapscript instanceof chunkOWTKOMJZ_cjs.DelegateVtxo.Script ? new chunkOWTKOMJZ_cjs.DelegateVtxo.Script({
|
|
12282
12400
|
...this.offchainTapscript.options,
|
|
12283
12401
|
serverPubKey: xonly
|
|
12284
|
-
}) : new
|
|
12402
|
+
}) : new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({
|
|
12285
12403
|
...this.offchainTapscript.options,
|
|
12286
12404
|
serverPubKey: xonly
|
|
12287
12405
|
});
|
|
12288
|
-
const newBoarding = new
|
|
12406
|
+
const newBoarding = new chunkOWTKOMJZ_cjs.DefaultVtxo.Script({
|
|
12289
12407
|
...this._boardingTapscript.options,
|
|
12290
12408
|
serverPubKey: xonly
|
|
12291
12409
|
});
|
|
12292
|
-
const offchainCsv =
|
|
12410
|
+
const offchainCsv = chunkKUN5ZRMW_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
|
|
12293
12411
|
const newOffchainScript = base.hex.encode(newOffchain.pkScript);
|
|
12294
12412
|
const newOffchainAddress = newOffchain.address(this.network.hrp, xonly).encode();
|
|
12295
|
-
if (newOffchain instanceof
|
|
12413
|
+
if (newOffchain instanceof chunkOWTKOMJZ_cjs.DelegateVtxo.Script) {
|
|
12296
12414
|
await manager.createContract({
|
|
12297
12415
|
type: "delegate",
|
|
12298
12416
|
params: {
|
|
@@ -12320,13 +12438,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
12320
12438
|
metadata: currentOffchainRow?.metadata
|
|
12321
12439
|
});
|
|
12322
12440
|
}
|
|
12323
|
-
const boardingCsv = newBoarding.options.csvTimelock ??
|
|
12441
|
+
const boardingCsv = newBoarding.options.csvTimelock ?? chunkOWTKOMJZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
12324
12442
|
await manager.createContract({
|
|
12325
12443
|
type: "boarding",
|
|
12326
12444
|
params: {
|
|
12327
12445
|
pubKey: base.hex.encode(newBoarding.options.pubKey),
|
|
12328
12446
|
serverPubKey: base.hex.encode(xonly),
|
|
12329
|
-
csvTimelock:
|
|
12447
|
+
csvTimelock: chunkKUN5ZRMW_cjs.timelockToSequence(boardingCsv).toString()
|
|
12330
12448
|
},
|
|
12331
12449
|
script: base.hex.encode(newBoarding.pkScript),
|
|
12332
12450
|
address: newBoarding.address(this.network.hrp, xonly).encode(),
|
|
@@ -12359,14 +12477,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
12359
12477
|
_restoreInFlight;
|
|
12360
12478
|
_addPendingSpends(inputs) {
|
|
12361
12479
|
for (const input of inputs) {
|
|
12362
|
-
if (
|
|
12480
|
+
if (chunkKUN5ZRMW_cjs.isVirtualCoin(input)) {
|
|
12363
12481
|
this._pendingSpendOutpoints.add(`${input.txid}:${input.vout}`);
|
|
12364
12482
|
}
|
|
12365
12483
|
}
|
|
12366
12484
|
}
|
|
12367
12485
|
_removePendingSpends(inputs) {
|
|
12368
12486
|
for (const input of inputs) {
|
|
12369
|
-
if (
|
|
12487
|
+
if (chunkKUN5ZRMW_cjs.isVirtualCoin(input)) {
|
|
12370
12488
|
this._pendingSpendOutpoints.delete(`${input.txid}:${input.vout}`);
|
|
12371
12489
|
}
|
|
12372
12490
|
}
|
|
@@ -12426,7 +12544,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
12426
12544
|
const hd = provider instanceof HDDescriptorProvider;
|
|
12427
12545
|
const staticDescriptor = hd ? void 0 : `tr(${base.hex.encode(await this.identity.xOnlyPublicKey())})`;
|
|
12428
12546
|
const materialize = (index) => hd ? provider.materializeDescriptorAt(index) : staticDescriptor;
|
|
12429
|
-
const delegatePubKey = this.offchainTapscript instanceof
|
|
12547
|
+
const delegatePubKey = this.offchainTapscript instanceof chunkOWTKOMJZ_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
|
|
12430
12548
|
const arkInfo = await this.arkProvider.getInfo();
|
|
12431
12549
|
const currentSignerPubKey = toXOnlyPubKey(base.hex.decode(arkInfo.signerPubkey));
|
|
12432
12550
|
const deprecatedSignerPubKeys = arkInfo.deprecatedSigners.map(
|
|
@@ -12445,7 +12563,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
12445
12563
|
csvTimelocks: this.walletContractTimelocks,
|
|
12446
12564
|
// Boarding-exit CSV so the boarding handler can build its
|
|
12447
12565
|
// candidate script (distinct from the unilateral-exit matrix).
|
|
12448
|
-
boardingTimelock: this.boardingTapscript.options.csvTimelock ??
|
|
12566
|
+
boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunkOWTKOMJZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
|
|
12449
12567
|
delegatePubKey
|
|
12450
12568
|
};
|
|
12451
12569
|
const result = await manager.scanContracts({
|
|
@@ -12559,16 +12677,17 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
12559
12677
|
throw new Error("Invalid configured public key");
|
|
12560
12678
|
}
|
|
12561
12679
|
const setup = await ReadonlyWallet.setupWalletConfig(config, pubkey);
|
|
12562
|
-
let serverUnrollScript;
|
|
12563
|
-
try {
|
|
12564
|
-
const raw = base.hex.decode(setup.info.checkpointTapscript);
|
|
12565
|
-
serverUnrollScript = chunkOWCPXRGP_cjs.CSVMultisigTapscript.decode(raw);
|
|
12566
|
-
} catch (e) {
|
|
12567
|
-
throw new Error("Invalid checkpointTapscript from server");
|
|
12568
|
-
}
|
|
12569
12680
|
const forfeitPubkey = base.hex.decode(setup.info.forfeitPubkey).slice(1);
|
|
12570
12681
|
const forfeitAddress = btcSigner.Address(setup.network).decode(setup.info.forfeitAddress);
|
|
12571
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
|
+
);
|
|
12572
12691
|
const boot = await WalletReceiveRotator.resolveBoot(config, setup);
|
|
12573
12692
|
const wallet = new _Wallet(
|
|
12574
12693
|
config.identity,
|
|
@@ -12592,7 +12711,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
12592
12711
|
setup.walletContractTimelocks,
|
|
12593
12712
|
boot?.rotator,
|
|
12594
12713
|
boot?.provider,
|
|
12595
|
-
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
|
|
12596
12721
|
);
|
|
12597
12722
|
wallet._serverInfoSource = setup.serverInfoSource;
|
|
12598
12723
|
if (setup.serverInfoSource === "live") {
|
|
@@ -12700,7 +12825,12 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
12700
12825
|
inputs: params.selectedVtxos,
|
|
12701
12826
|
changeAmount: BigInt(changeAmount)
|
|
12702
12827
|
};
|
|
12703
|
-
const outputAddress =
|
|
12828
|
+
const outputAddress = chunkKUN5ZRMW_cjs.ArkAddress.decode(params.address);
|
|
12829
|
+
assertRecipientArkAddress(
|
|
12830
|
+
params.address,
|
|
12831
|
+
outputAddress,
|
|
12832
|
+
this.recipientAddressContext(serverPubKey)
|
|
12833
|
+
);
|
|
12704
12834
|
const outputScript = BigInt(params.amount) < this.dustAmount ? outputAddress.subdustPkScript : outputAddress.pkScript;
|
|
12705
12835
|
const outputs = [
|
|
12706
12836
|
{
|
|
@@ -12753,13 +12883,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
12753
12883
|
}
|
|
12754
12884
|
}
|
|
12755
12885
|
const offchainAddress = await this.getAddress();
|
|
12756
|
-
const offchainPkScript =
|
|
12886
|
+
const offchainPkScript = chunkKUN5ZRMW_cjs.ArkAddress.decode(offchainAddress).pkScript;
|
|
12757
12887
|
const offchainOutputScript = base.hex.encode(offchainPkScript);
|
|
12758
12888
|
if (!params) {
|
|
12759
12889
|
const { fees, vtxoMaxAmount } = await this.arkProvider.getInfo();
|
|
12760
12890
|
const estimator = new Estimator(fees.intentFee);
|
|
12761
12891
|
let amount = 0;
|
|
12762
|
-
const exitScript =
|
|
12892
|
+
const exitScript = chunkKUN5ZRMW_cjs.CSVMultisigTapscript.decode(
|
|
12763
12893
|
base.hex.decode(this.boardingTapscript.exitScript)
|
|
12764
12894
|
);
|
|
12765
12895
|
const boardingTimelock = exitScript.params.timelock;
|
|
@@ -12788,7 +12918,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
12788
12918
|
if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
|
|
12789
12919
|
break;
|
|
12790
12920
|
}
|
|
12791
|
-
const inputFee = estimator.evalOffchainInput(
|
|
12921
|
+
const inputFee = estimator.evalOffchainInput(chunkKUN5ZRMW_cjs.toOffchainInputFeeParams(vtxo));
|
|
12792
12922
|
if (inputFee.satoshis >= vtxo.value) {
|
|
12793
12923
|
continue;
|
|
12794
12924
|
}
|
|
@@ -12830,13 +12960,21 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
12830
12960
|
const onchainOutputIndexes = [];
|
|
12831
12961
|
const outputs = [];
|
|
12832
12962
|
let hasOffchainOutputs = false;
|
|
12963
|
+
let recipientContext;
|
|
12833
12964
|
for (const [index, output] of params.outputs.entries()) {
|
|
12834
12965
|
let script;
|
|
12966
|
+
let arkAddress;
|
|
12835
12967
|
try {
|
|
12836
|
-
|
|
12837
|
-
script = addr.pkScript;
|
|
12838
|
-
hasOffchainOutputs = true;
|
|
12968
|
+
arkAddress = chunkKUN5ZRMW_cjs.ArkAddress.decode(output.address);
|
|
12839
12969
|
} catch {
|
|
12970
|
+
arkAddress = void 0;
|
|
12971
|
+
}
|
|
12972
|
+
if (arkAddress) {
|
|
12973
|
+
recipientContext ??= this.recipientAddressContext();
|
|
12974
|
+
assertRecipientArkAddress(output.address, arkAddress, recipientContext);
|
|
12975
|
+
script = arkAddress.pkScript;
|
|
12976
|
+
hasOffchainOutputs = true;
|
|
12977
|
+
} else {
|
|
12840
12978
|
const addr = btcSigner.Address(this.network).decode(output.address);
|
|
12841
12979
|
script = btcSigner.OutScript.encode(addr);
|
|
12842
12980
|
onchainOutputIndexes.push(index);
|
|
@@ -13019,7 +13157,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13019
13157
|
async maybeRotateBoardingAfterBoard(inputs) {
|
|
13020
13158
|
if (!this._descriptorProvider) return;
|
|
13021
13159
|
const consumedBoarding = inputs.some(
|
|
13022
|
-
(input) => typeof input !== "string" && !
|
|
13160
|
+
(input) => typeof input !== "string" && !chunkKUN5ZRMW_cjs.isVirtualCoin(input)
|
|
13023
13161
|
);
|
|
13024
13162
|
if (!consumedBoarding) return;
|
|
13025
13163
|
try {
|
|
@@ -13043,7 +13181,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13043
13181
|
let connectorIndex = 0;
|
|
13044
13182
|
const connectorsLeaves = connectorsGraph?.leaves() || [];
|
|
13045
13183
|
for (const input of inputs) {
|
|
13046
|
-
if (!
|
|
13184
|
+
if (!chunkKUN5ZRMW_cjs.isVirtualCoin(input)) {
|
|
13047
13185
|
for (let i = 0; i < settlementPsbt.inputsLength; i++) {
|
|
13048
13186
|
const settlementInput = settlementPsbt.getInput(i);
|
|
13049
13187
|
if (!settlementInput.txid || settlementInput.index === void 0) {
|
|
@@ -13074,7 +13212,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13074
13212
|
}
|
|
13075
13213
|
continue;
|
|
13076
13214
|
}
|
|
13077
|
-
if (
|
|
13215
|
+
if (chunkKUN5ZRMW_cjs.canRecoverOnchain(input, { timestamp: /* @__PURE__ */ new Date() }) || isSubdust({ value: input.value }, this.dustAmount)) {
|
|
13078
13216
|
continue;
|
|
13079
13217
|
}
|
|
13080
13218
|
if (connectorsLeaves.length === 0) {
|
|
@@ -13102,7 +13240,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13102
13240
|
index: input.vout,
|
|
13103
13241
|
witnessUtxo: {
|
|
13104
13242
|
amount: BigInt(input.value),
|
|
13105
|
-
script:
|
|
13243
|
+
script: chunkKUN5ZRMW_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
13106
13244
|
},
|
|
13107
13245
|
sighashType: btcSigner.SigHash.DEFAULT,
|
|
13108
13246
|
tapLeafScript: [input.forfeitTapLeafScript]
|
|
@@ -13121,7 +13259,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13121
13259
|
forfeitTx = await this._signerRouter.sign(forfeitTx, [
|
|
13122
13260
|
{
|
|
13123
13261
|
index: 0,
|
|
13124
|
-
lookupScript:
|
|
13262
|
+
lookupScript: chunkKUN5ZRMW_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
13125
13263
|
}
|
|
13126
13264
|
]);
|
|
13127
13265
|
signedForfeits.push(base.base64.encode(forfeitTx.toPSBT()));
|
|
@@ -13167,24 +13305,20 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13167
13305
|
const utf8IntentId = new TextEncoder().encode(intentId);
|
|
13168
13306
|
const intentIdHash = utils_js.sha256(utf8IntentId);
|
|
13169
13307
|
const intentIdHashStr = base.hex.encode(intentIdHash);
|
|
13170
|
-
|
|
13171
|
-
for (const idHash of event.intentIdHashes) {
|
|
13172
|
-
if (idHash === intentIdHashStr) {
|
|
13173
|
-
if (!this.arkProvider) {
|
|
13174
|
-
throw new Error("Arkade provider not configured");
|
|
13175
|
-
}
|
|
13176
|
-
await this.arkProvider.confirmRegistration(intentId);
|
|
13177
|
-
skip = false;
|
|
13178
|
-
}
|
|
13179
|
-
}
|
|
13308
|
+
const skip = !event.intentIdHashes.includes(intentIdHashStr);
|
|
13180
13309
|
if (skip) {
|
|
13181
13310
|
return { skip };
|
|
13182
13311
|
}
|
|
13183
|
-
|
|
13184
|
-
|
|
13185
|
-
|
|
13186
|
-
|
|
13187
|
-
|
|
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,
|
|
13188
13322
|
pubkeys: [this.forfeitPubkey]
|
|
13189
13323
|
}).script;
|
|
13190
13324
|
sweepTapTreeRoot = payment_js.tapLeafHash(sweepTapscript);
|
|
@@ -13289,9 +13423,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13289
13423
|
...existing ?? {},
|
|
13290
13424
|
intentTxId,
|
|
13291
13425
|
registerProof: intent.proof,
|
|
13292
|
-
registerProofMessage:
|
|
13426
|
+
registerProofMessage: chunkKUN5ZRMW_cjs.Intent.encodeMessage(intent.message),
|
|
13293
13427
|
deleteProof: deleteIntent.proof,
|
|
13294
|
-
deleteProofMessage:
|
|
13428
|
+
deleteProofMessage: chunkKUN5ZRMW_cjs.Intent.encodeMessage(deleteIntent.message),
|
|
13295
13429
|
intentVtxos: inputs.map((i) => ({
|
|
13296
13430
|
txid: i.txid,
|
|
13297
13431
|
vout: i.vout
|
|
@@ -13323,7 +13457,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13323
13457
|
try {
|
|
13324
13458
|
return await this.arkProvider.registerIntent(intent);
|
|
13325
13459
|
} catch (error) {
|
|
13326
|
-
if (error instanceof
|
|
13460
|
+
if (error instanceof chunkKUN5ZRMW_cjs.ArkError && error.code === 0 && error.message.includes("duplicated input")) {
|
|
13327
13461
|
const deleteIntent = await this.makeDeleteIntentSignature(inputs);
|
|
13328
13462
|
await this.arkProvider.deleteIntent(deleteIntent);
|
|
13329
13463
|
return this.arkProvider.registerIntent(intent);
|
|
@@ -13339,7 +13473,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13339
13473
|
expire_at: 0,
|
|
13340
13474
|
cosigners_public_keys: cosignerPubKeys
|
|
13341
13475
|
};
|
|
13342
|
-
const proof =
|
|
13476
|
+
const proof = chunkKUN5ZRMW_cjs.Intent.create(message, coins, outputs);
|
|
13343
13477
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
13344
13478
|
return {
|
|
13345
13479
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -13351,7 +13485,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13351
13485
|
type: "delete",
|
|
13352
13486
|
expire_at: 0
|
|
13353
13487
|
};
|
|
13354
|
-
const proof =
|
|
13488
|
+
const proof = chunkKUN5ZRMW_cjs.Intent.create(message, coins, []);
|
|
13355
13489
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
13356
13490
|
return {
|
|
13357
13491
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -13363,7 +13497,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13363
13497
|
type: "get-pending-tx",
|
|
13364
13498
|
expire_at: 0
|
|
13365
13499
|
};
|
|
13366
|
-
const proof =
|
|
13500
|
+
const proof = chunkKUN5ZRMW_cjs.Intent.create(message, coins, []);
|
|
13367
13501
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
13368
13502
|
return {
|
|
13369
13503
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -13384,7 +13518,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13384
13518
|
if (!vtxos || vtxos.length === 0) {
|
|
13385
13519
|
const scriptMap = await this.getScriptMap();
|
|
13386
13520
|
const allExtended = [];
|
|
13387
|
-
const fetchedVtxos = await
|
|
13521
|
+
const fetchedVtxos = await chunkKUN5ZRMW_cjs.getAllNormalizedVtxos(this.indexerProvider, [
|
|
13388
13522
|
...scriptMap.keys()
|
|
13389
13523
|
]);
|
|
13390
13524
|
for (const vtxo of fetchedVtxos) {
|
|
@@ -13498,11 +13632,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13498
13632
|
* against the current key alone would leave it pending forever.
|
|
13499
13633
|
*/
|
|
13500
13634
|
checkpointUnrollCandidates(info) {
|
|
13501
|
-
const current =
|
|
13635
|
+
const current = chunkKUN5ZRMW_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
|
|
13502
13636
|
const candidates = [this._serverUnrollScript, current];
|
|
13503
13637
|
for (const deprecated of signerSetFromInfo(info).deprecated.keys()) {
|
|
13504
13638
|
candidates.push(
|
|
13505
|
-
|
|
13639
|
+
chunkKUN5ZRMW_cjs.CSVMultisigTapscript.encode({
|
|
13506
13640
|
...current.params,
|
|
13507
13641
|
pubkeys: [base.hex.decode(deprecated)]
|
|
13508
13642
|
})
|
|
@@ -13593,7 +13727,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13593
13727
|
if (vtxos.length === 0) {
|
|
13594
13728
|
throw new Error("No VTXOs found for this arkadeCash");
|
|
13595
13729
|
}
|
|
13596
|
-
const myPkScript =
|
|
13730
|
+
const myPkScript = chunkKUN5ZRMW_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
|
|
13597
13731
|
let { spendable, unclaimed } = this.classifyCashVtxos(vtxos);
|
|
13598
13732
|
let swept = 0;
|
|
13599
13733
|
const drainable = vtxos.filter((vtxo) => !isSubdust(vtxo, this.dustAmount));
|
|
@@ -13620,8 +13754,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13620
13754
|
}
|
|
13621
13755
|
if (spendable.length > 0) {
|
|
13622
13756
|
const info = await this.arkProvider.getInfo();
|
|
13623
|
-
const serverUnrollScript =
|
|
13624
|
-
|
|
13757
|
+
const serverUnrollScript = assertValidServerUnrollScript(
|
|
13758
|
+
info.checkpointTapscript,
|
|
13759
|
+
resolveCheckpointExitDelayPolicy(this.network, this.checkpointExitDelayPolicy)
|
|
13625
13760
|
);
|
|
13626
13761
|
for (const vtxo of spendable) {
|
|
13627
13762
|
try {
|
|
@@ -13666,7 +13801,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13666
13801
|
const spendable = [];
|
|
13667
13802
|
const unclaimed = [];
|
|
13668
13803
|
for (const vtxo of vtxos) {
|
|
13669
|
-
if (
|
|
13804
|
+
if (chunkKUN5ZRMW_cjs.hasTerminalSpend(vtxo)) {
|
|
13670
13805
|
unclaimed.push(cashReport(vtxo, "already-spent"));
|
|
13671
13806
|
} else if (isSubdust(vtxo, this.dustAmount)) {
|
|
13672
13807
|
unclaimed.push(cashReport(vtxo, "subdust"));
|
|
@@ -13686,7 +13821,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13686
13821
|
const all = [];
|
|
13687
13822
|
const seen = /* @__PURE__ */ new Set();
|
|
13688
13823
|
for (let pageIndex = 0; ; pageIndex++) {
|
|
13689
|
-
const { vtxos, page } = await
|
|
13824
|
+
const { vtxos, page } = await chunkKUN5ZRMW_cjs.getNormalizedVtxos(this.indexerProvider, {
|
|
13690
13825
|
scripts,
|
|
13691
13826
|
pageIndex,
|
|
13692
13827
|
pageSize
|
|
@@ -13733,7 +13868,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13733
13868
|
for (let i = 0; i < inputs.length; i += MAX_INPUTS_PER_INTENT) {
|
|
13734
13869
|
const batch = inputs.slice(i, i + MAX_INPUTS_PER_INTENT);
|
|
13735
13870
|
const message = { type: "get-pending-tx", expire_at: 0 };
|
|
13736
|
-
const proof =
|
|
13871
|
+
const proof = chunkKUN5ZRMW_cjs.Intent.create(message, batch, []);
|
|
13737
13872
|
const signedProof = await identity.sign(
|
|
13738
13873
|
proof,
|
|
13739
13874
|
Array.from({ length: batch.length + 1 }, (_, j) => j)
|
|
@@ -13829,7 +13964,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13829
13964
|
const serverUnrollScript = this.serverUnrollScript;
|
|
13830
13965
|
const outputAddress = offchainTapscript.address(this.network.hrp, serverPubKey);
|
|
13831
13966
|
const address = outputAddress.encode();
|
|
13832
|
-
const recipients = validateRecipients(
|
|
13967
|
+
const recipients = validateRecipients(
|
|
13968
|
+
args,
|
|
13969
|
+
Number(this.dustAmount),
|
|
13970
|
+
this.recipientAddressContext(serverPubKey)
|
|
13971
|
+
);
|
|
13833
13972
|
const allVirtualCoins = await this.getVtxos({
|
|
13834
13973
|
withRecoverable: false
|
|
13835
13974
|
});
|
|
@@ -14039,10 +14178,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14039
14178
|
const serverPubKey = this.arkServerPublicKey;
|
|
14040
14179
|
const serverUnrollScript = this.serverUnrollScript;
|
|
14041
14180
|
const arkAddress = offchainTapscript.address(this.network.hrp, serverPubKey);
|
|
14042
|
-
const normalizedInputs = inputs.map(
|
|
14043
|
-
const at = now ?? await
|
|
14181
|
+
const normalizedInputs = inputs.map(chunkKUN5ZRMW_cjs.normalizeVtxo);
|
|
14182
|
+
const at = now ?? await chunkKUN5ZRMW_cjs.resolveTimeHeight(this.onchainProvider);
|
|
14044
14183
|
for (const input of normalizedInputs) {
|
|
14045
|
-
if (!
|
|
14184
|
+
if (!chunkKUN5ZRMW_cjs.canSpendOffchain(input, at)) {
|
|
14046
14185
|
throw new Error(
|
|
14047
14186
|
`sendSelectedVtxosToSelf: input ${input.txid}:${input.vout} is not cooperatively spendable`
|
|
14048
14187
|
);
|
|
@@ -14107,7 +14246,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14107
14246
|
);
|
|
14108
14247
|
const arkTxJobs = inputs.map((input, index) => ({
|
|
14109
14248
|
index,
|
|
14110
|
-
lookupScript:
|
|
14249
|
+
lookupScript: chunkKUN5ZRMW_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
14111
14250
|
}));
|
|
14112
14251
|
const identity = this.identity;
|
|
14113
14252
|
const signer = {
|
|
@@ -14193,14 +14332,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14193
14332
|
const spentBy = checkpointIdByOutpoint.get(`${vtxo.txid}:${vtxo.vout}`);
|
|
14194
14333
|
spentVtxos.push({
|
|
14195
14334
|
...spentFacts,
|
|
14196
|
-
virtualStatus:
|
|
14335
|
+
virtualStatus: chunkKUN5ZRMW_cjs.toVirtualStatus(spentFacts),
|
|
14197
14336
|
...spentBy ? { spentBy } : {},
|
|
14198
14337
|
arkTxId: arkTxid
|
|
14199
14338
|
});
|
|
14200
14339
|
for (const id of vtxo.commitmentTxIds) {
|
|
14201
14340
|
commitmentTxIds.add(id);
|
|
14202
14341
|
}
|
|
14203
|
-
const vtxoExpiry =
|
|
14342
|
+
const vtxoExpiry = chunkKUN5ZRMW_cjs.toBatchExpiry(vtxo);
|
|
14204
14343
|
if (vtxoExpiry) {
|
|
14205
14344
|
batchExpiry = Math.min(batchExpiry, vtxoExpiry);
|
|
14206
14345
|
}
|
|
@@ -14213,7 +14352,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14213
14352
|
isSwept: false,
|
|
14214
14353
|
isPreconfirmed: true,
|
|
14215
14354
|
commitmentTxIds: Array.from(commitmentTxIds),
|
|
14216
|
-
...
|
|
14355
|
+
...chunkKUN5ZRMW_cjs.parseLegacyExpiry(batchExpiry)
|
|
14217
14356
|
};
|
|
14218
14357
|
changeVtxo = {
|
|
14219
14358
|
txid: arkTxid,
|
|
@@ -14225,7 +14364,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14225
14364
|
tapTree: offchainTapscript.encode(),
|
|
14226
14365
|
value: Number(changeAmount),
|
|
14227
14366
|
...changeFacts,
|
|
14228
|
-
virtualStatus:
|
|
14367
|
+
virtualStatus: chunkKUN5ZRMW_cjs.toVirtualStatus(changeFacts),
|
|
14229
14368
|
spentBy: "",
|
|
14230
14369
|
status: {
|
|
14231
14370
|
confirmed: false
|
|
@@ -14294,12 +14433,12 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14294
14433
|
const spentVtxos = [];
|
|
14295
14434
|
const inputArkTxIds = /* @__PURE__ */ new Set();
|
|
14296
14435
|
const boardingRemovalsByAddress = /* @__PURE__ */ new Map();
|
|
14297
|
-
const vtxoInputs = inputs.filter(
|
|
14436
|
+
const vtxoInputs = inputs.filter(chunkKUN5ZRMW_cjs.isVirtualCoin);
|
|
14298
14437
|
const cm = await this.getContractManager();
|
|
14299
14438
|
const annotatedVtxos = await cm.annotateVtxos(vtxoInputs);
|
|
14300
14439
|
const annotatedByKey = new Map(annotatedVtxos.map((v) => [`${v.txid}:${v.vout}`, v]));
|
|
14301
14440
|
for (const input of inputs) {
|
|
14302
|
-
if (
|
|
14441
|
+
if (chunkKUN5ZRMW_cjs.isVirtualCoin(input)) {
|
|
14303
14442
|
const outpoint = `${input.txid}:${input.vout}`;
|
|
14304
14443
|
const vtxo = annotatedByKey.get(outpoint);
|
|
14305
14444
|
if (!vtxo) {
|
|
@@ -14311,13 +14450,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14311
14450
|
const settledFacts = { ...vtxo, isSpent: true };
|
|
14312
14451
|
spentVtxos.push({
|
|
14313
14452
|
...settledFacts,
|
|
14314
|
-
virtualStatus:
|
|
14453
|
+
virtualStatus: chunkKUN5ZRMW_cjs.toVirtualStatus(settledFacts),
|
|
14315
14454
|
settledBy: commitmentTxid
|
|
14316
14455
|
});
|
|
14317
14456
|
} else {
|
|
14318
14457
|
let sourceAddress;
|
|
14319
14458
|
try {
|
|
14320
|
-
sourceAddress =
|
|
14459
|
+
sourceAddress = chunkKUN5ZRMW_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
|
|
14321
14460
|
this.network
|
|
14322
14461
|
);
|
|
14323
14462
|
} catch {
|
|
@@ -14375,9 +14514,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14375
14514
|
}
|
|
14376
14515
|
};
|
|
14377
14516
|
function selectVirtualCoins(coins, targetAmount) {
|
|
14378
|
-
const sortedCoins = coins.map(
|
|
14379
|
-
const expiryA =
|
|
14380
|
-
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;
|
|
14381
14520
|
if (expiryA !== expiryB) {
|
|
14382
14521
|
return expiryA - expiryB;
|
|
14383
14522
|
}
|
|
@@ -14634,7 +14773,7 @@ var MessageBus = class {
|
|
|
14634
14773
|
this.initialized = true;
|
|
14635
14774
|
}
|
|
14636
14775
|
async buildServices(config) {
|
|
14637
|
-
const arkProvider = new
|
|
14776
|
+
const arkProvider = new chunkKUN5ZRMW_cjs.RestArkProvider(config.arkServer.url);
|
|
14638
14777
|
const storage = {
|
|
14639
14778
|
walletRepository: this.walletRepository,
|
|
14640
14779
|
contractRepository: this.contractRepository
|
|
@@ -14973,7 +15112,7 @@ var offboardNetworkNames = [
|
|
|
14973
15112
|
function offboardDestinationScript(destinationAddress) {
|
|
14974
15113
|
for (const networkName of offboardNetworkNames) {
|
|
14975
15114
|
try {
|
|
14976
|
-
const network =
|
|
15115
|
+
const network = chunkKUN5ZRMW_cjs.networks[networkName];
|
|
14977
15116
|
const addr = btcSigner.Address(network).decode(destinationAddress);
|
|
14978
15117
|
return btcSigner.OutScript.encode(addr);
|
|
14979
15118
|
} catch {
|
|
@@ -15037,7 +15176,7 @@ var Ramps = class {
|
|
|
15037
15176
|
}
|
|
15038
15177
|
amount = amount ?? totalAmount;
|
|
15039
15178
|
const offchainAddress = await this.wallet.getAddress();
|
|
15040
|
-
const offchainAddr =
|
|
15179
|
+
const offchainAddr = chunkKUN5ZRMW_cjs.ArkAddress.decode(offchainAddress);
|
|
15041
15180
|
const offchainScript = base.hex.encode(offchainAddr.pkScript);
|
|
15042
15181
|
const outputFee = estimator.evalOffchainOutput({
|
|
15043
15182
|
amount,
|
|
@@ -15097,7 +15236,7 @@ var Ramps = class {
|
|
|
15097
15236
|
const filteredVtxos = [];
|
|
15098
15237
|
let totalAmount = 0n;
|
|
15099
15238
|
for (const vtxo of vtxos) {
|
|
15100
|
-
const inputFee = estimator.evalOffchainInput(
|
|
15239
|
+
const inputFee = estimator.evalOffchainInput(chunkKUN5ZRMW_cjs.toOffchainInputFeeParams(vtxo));
|
|
15101
15240
|
if (inputFee.satoshis >= vtxo.value) {
|
|
15102
15241
|
continue;
|
|
15103
15242
|
}
|
|
@@ -15794,7 +15933,7 @@ var WalletMessageHandler = class {
|
|
|
15794
15933
|
// Wallet methods
|
|
15795
15934
|
async handleInitWallet({ payload }) {
|
|
15796
15935
|
const { arkServerUrl } = payload;
|
|
15797
|
-
this.indexerProvider = new
|
|
15936
|
+
this.indexerProvider = new chunkYK6NP5KX_cjs.RestIndexerProvider(arkServerUrl);
|
|
15798
15937
|
await this.onWalletInitialized();
|
|
15799
15938
|
}
|
|
15800
15939
|
async handleGetBalance() {
|
|
@@ -15818,12 +15957,12 @@ var WalletMessageHandler = class {
|
|
|
15818
15957
|
let recoverable = 0;
|
|
15819
15958
|
let pendingRecovery = 0;
|
|
15820
15959
|
for (const vtxo of allVtxos) {
|
|
15821
|
-
if (
|
|
15960
|
+
if (chunkKUN5ZRMW_cjs.hasTerminalSpend(vtxo)) continue;
|
|
15822
15961
|
if (pendingOutpoints.has(`${vtxo.txid}:${vtxo.vout}`)) {
|
|
15823
15962
|
pendingRecovery += vtxo.value;
|
|
15824
|
-
} else if (
|
|
15963
|
+
} else if (chunkKUN5ZRMW_cjs.canRecoverOnchain(vtxo, now)) {
|
|
15825
15964
|
recoverable += vtxo.value;
|
|
15826
|
-
} else if (
|
|
15965
|
+
} else if (chunkKUN5ZRMW_cjs.canSpendOffchain(vtxo, now)) {
|
|
15827
15966
|
if (vtxo.isPreconfirmed) {
|
|
15828
15967
|
preconfirmed += vtxo.value;
|
|
15829
15968
|
} else {
|
|
@@ -15835,7 +15974,7 @@ var WalletMessageHandler = class {
|
|
|
15835
15974
|
const totalOffchain = settled + preconfirmed + recoverable + pendingRecovery;
|
|
15836
15975
|
const assetBalances = /* @__PURE__ */ new Map();
|
|
15837
15976
|
for (const vtxo of allVtxos) {
|
|
15838
|
-
if (
|
|
15977
|
+
if (chunkKUN5ZRMW_cjs.hasTerminalSpend(vtxo)) continue;
|
|
15839
15978
|
if (vtxo.assets) {
|
|
15840
15979
|
for (const a of vtxo.assets) {
|
|
15841
15980
|
const current = assetBalances.get(a.assetId) ?? 0n;
|
|
@@ -15871,7 +16010,7 @@ var WalletMessageHandler = class {
|
|
|
15871
16010
|
*/
|
|
15872
16011
|
async getSpendableVtxos() {
|
|
15873
16012
|
const vtxos = await this.getVtxosFromRepo();
|
|
15874
|
-
return vtxos.filter((v) => !
|
|
16013
|
+
return vtxos.filter((v) => !chunkKUN5ZRMW_cjs.hasTerminalSpend(v));
|
|
15875
16014
|
}
|
|
15876
16015
|
async onWalletInitialized() {
|
|
15877
16016
|
if (!this.readonlyWallet || !this.arkProvider || !this.indexerProvider || !this.walletRepository) {
|
|
@@ -16083,10 +16222,10 @@ var WalletMessageHandler = class {
|
|
|
16083
16222
|
if (dustAmount != null && isSubdust(v, dustAmount)) {
|
|
16084
16223
|
return false;
|
|
16085
16224
|
}
|
|
16086
|
-
if (
|
|
16225
|
+
if (chunkKUN5ZRMW_cjs.isRecoverable(v)) {
|
|
16087
16226
|
return false;
|
|
16088
16227
|
}
|
|
16089
|
-
if (
|
|
16228
|
+
if (chunkKUN5ZRMW_cjs.isExpired(v)) {
|
|
16090
16229
|
return false;
|
|
16091
16230
|
}
|
|
16092
16231
|
return true;
|
|
@@ -16158,7 +16297,7 @@ var WalletMessageHandler = class {
|
|
|
16158
16297
|
if (!this.readonlyWallet) return null;
|
|
16159
16298
|
const { boardingTxs, commitmentsToIgnore } = await this.readonlyWallet.getBoardingTxs();
|
|
16160
16299
|
const indexerProvider = this.indexerProvider;
|
|
16161
|
-
const resolveTxCreatedAt = indexerProvider ? (txids) =>
|
|
16300
|
+
const resolveTxCreatedAt = indexerProvider ? (txids) => chunkKUN5ZRMW_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
|
|
16162
16301
|
return buildTransactionHistory(vtxos, boardingTxs, commitmentsToIgnore, resolveTxCreatedAt);
|
|
16163
16302
|
}
|
|
16164
16303
|
async ensureContractEventBroadcasting() {
|
|
@@ -16843,7 +16982,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
16843
16982
|
};
|
|
16844
16983
|
try {
|
|
16845
16984
|
const response = await this.sendMessage(message);
|
|
16846
|
-
return response.payload.vtxos.map(
|
|
16985
|
+
return response.payload.vtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo);
|
|
16847
16986
|
} catch (error) {
|
|
16848
16987
|
throw new Error(`Failed to get vtxos: ${error}`);
|
|
16849
16988
|
}
|
|
@@ -16956,7 +17095,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
16956
17095
|
};
|
|
16957
17096
|
try {
|
|
16958
17097
|
const response = await sendContractMessage(message);
|
|
16959
|
-
return response.payload.vtxos.map(
|
|
17098
|
+
return response.payload.vtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo);
|
|
16960
17099
|
} catch (e) {
|
|
16961
17100
|
throw new Error("Failed to annotate vtxos");
|
|
16962
17101
|
}
|
|
@@ -17410,7 +17549,7 @@ var ServiceWorkerWallet = class _ServiceWorkerWallet extends ServiceWorkerReadon
|
|
|
17410
17549
|
};
|
|
17411
17550
|
try {
|
|
17412
17551
|
const response = await wallet.sendMessage(message);
|
|
17413
|
-
return response.payload.vtxos.map(
|
|
17552
|
+
return response.payload.vtxos.map(chunkKUN5ZRMW_cjs.normalizeVtxo);
|
|
17414
17553
|
} catch (e) {
|
|
17415
17554
|
throw new Error(`Failed to get expiring vtxos: ${e}`);
|
|
17416
17555
|
}
|
|
@@ -17522,12 +17661,12 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
17522
17661
|
* @returns Configured onchain wallet
|
|
17523
17662
|
* @throws Error if the configured identity cannot produce a valid x-only public key
|
|
17524
17663
|
*/
|
|
17525
|
-
static async create(identity, networkName =
|
|
17664
|
+
static async create(identity, networkName = chunkKUN5ZRMW_cjs.DEFAULT_NETWORK_NAME, provider) {
|
|
17526
17665
|
const pubkey = await identity.xOnlyPublicKey();
|
|
17527
17666
|
if (!pubkey) {
|
|
17528
17667
|
throw new Error("Invalid configured public key");
|
|
17529
17668
|
}
|
|
17530
|
-
const network =
|
|
17669
|
+
const network = chunkKUN5ZRMW_cjs.getNetwork(networkName);
|
|
17531
17670
|
const onchainProvider = provider || new EsploraProvider(ESPLORA_URL[networkName]);
|
|
17532
17671
|
const onchainP2TR = btcSigner.p2tr(pubkey, void 0, network);
|
|
17533
17672
|
return new _OnchainWallet(identity, network, onchainP2TR, onchainProvider);
|
|
@@ -17633,7 +17772,7 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
17633
17772
|
if (!inputs) {
|
|
17634
17773
|
throw new Error("Fee estimation failed");
|
|
17635
17774
|
}
|
|
17636
|
-
let tx = new
|
|
17775
|
+
let tx = new chunkKUN5ZRMW_cjs.Transaction();
|
|
17637
17776
|
for (const input of inputs) {
|
|
17638
17777
|
tx.addInput({
|
|
17639
17778
|
txid: input.txid,
|
|
@@ -17691,7 +17830,7 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
17691
17830
|
* @throws If the parent has no anchor, or funding cannot be selected/signed
|
|
17692
17831
|
*/
|
|
17693
17832
|
async bumpAnchor(parentHex, feeRate) {
|
|
17694
|
-
const parent =
|
|
17833
|
+
const parent = chunkKUN5ZRMW_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
|
|
17695
17834
|
const coins = (await this.getCoins()).filter((c) => c.status.confirmed);
|
|
17696
17835
|
const child = await this.buildBumpPackage(parent, feeRate, coins);
|
|
17697
17836
|
return [parent.hex, child.hex];
|
|
@@ -18456,7 +18595,7 @@ exports.BIP322 = void 0;
|
|
|
18456
18595
|
async function sign2(message, identity, network) {
|
|
18457
18596
|
const xOnlyPubKey = await identity.xOnlyPublicKey();
|
|
18458
18597
|
const payment = btcSigner.p2tr(xOnlyPubKey, void 0, network);
|
|
18459
|
-
const toSpend =
|
|
18598
|
+
const toSpend = chunkKUN5ZRMW_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
|
|
18460
18599
|
const toSign = craftBIP322ToSignP2TR(toSpend, payment.script, xOnlyPubKey);
|
|
18461
18600
|
const signed = await identity.sign(toSign, [0]);
|
|
18462
18601
|
signed.finalizeIdx(0);
|
|
@@ -18514,7 +18653,7 @@ function verifyP2TR(message, witnessItems, pkScript, pubkey) {
|
|
|
18514
18653
|
if (sighashType !== btcSigner.SigHash.DEFAULT && sighashType !== btcSigner.SigHash.ALL) {
|
|
18515
18654
|
return false;
|
|
18516
18655
|
}
|
|
18517
|
-
const toSpend =
|
|
18656
|
+
const toSpend = chunkKUN5ZRMW_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
|
|
18518
18657
|
const toSign = craftBIP322ToSignP2TR(toSpend, pkScript, pubkey);
|
|
18519
18658
|
const sighash = toSign.preimageWitnessV1(0, [pkScript], sighashType, [0n]);
|
|
18520
18659
|
const rawSig = sig.length === 65 ? sig.subarray(0, 64) : sig;
|
|
@@ -18535,7 +18674,7 @@ function verifyP2WPKH(message, witnessItems, pkScript, addressHash) {
|
|
|
18535
18674
|
}
|
|
18536
18675
|
const sighashType = sigWithHash[sigWithHash.length - 1];
|
|
18537
18676
|
const derSig = sigWithHash.subarray(0, sigWithHash.length - 1);
|
|
18538
|
-
const toSpend =
|
|
18677
|
+
const toSpend = chunkKUN5ZRMW_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
|
|
18539
18678
|
const toSign = craftBIP322ToSignSimple(toSpend, pkScript);
|
|
18540
18679
|
const scriptCode = btcSigner.OutScript.encode({ type: "pkh", hash: addressHash });
|
|
18541
18680
|
const sighash = toSign.preimageWitnessV0(0, scriptCode, sighashType, 0n);
|
|
@@ -18588,7 +18727,7 @@ function encodeCompactSize(n) {
|
|
|
18588
18727
|
return buf;
|
|
18589
18728
|
}
|
|
18590
18729
|
function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
|
|
18591
|
-
const tx = new
|
|
18730
|
+
const tx = new chunkKUN5ZRMW_cjs.Transaction({ version: 0 });
|
|
18592
18731
|
tx.addInput({
|
|
18593
18732
|
txid: toSpend.id,
|
|
18594
18733
|
index: 0,
|
|
@@ -18602,12 +18741,12 @@ function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
|
|
|
18602
18741
|
});
|
|
18603
18742
|
tx.addOutput({
|
|
18604
18743
|
amount: 0n,
|
|
18605
|
-
script:
|
|
18744
|
+
script: chunkKUN5ZRMW_cjs.OP_RETURN_EMPTY_PKSCRIPT
|
|
18606
18745
|
});
|
|
18607
18746
|
return tx;
|
|
18608
18747
|
}
|
|
18609
18748
|
function craftBIP322ToSignSimple(toSpend, pkScript) {
|
|
18610
|
-
const tx = new
|
|
18749
|
+
const tx = new chunkKUN5ZRMW_cjs.Transaction({ version: 0 });
|
|
18611
18750
|
tx.addInput({
|
|
18612
18751
|
txid: toSpend.id,
|
|
18613
18752
|
index: 0,
|
|
@@ -18619,7 +18758,7 @@ function craftBIP322ToSignSimple(toSpend, pkScript) {
|
|
|
18619
18758
|
});
|
|
18620
18759
|
tx.addOutput({
|
|
18621
18760
|
amount: 0n,
|
|
18622
|
-
script:
|
|
18761
|
+
script: chunkKUN5ZRMW_cjs.OP_RETURN_EMPTY_PKSCRIPT
|
|
18623
18762
|
});
|
|
18624
18763
|
return tx;
|
|
18625
18764
|
}
|
|
@@ -18750,7 +18889,7 @@ var RestEmulatorProvider = class {
|
|
|
18750
18889
|
}
|
|
18751
18890
|
};
|
|
18752
18891
|
function finalizeVirtualTx(type, psbtBase64) {
|
|
18753
|
-
const tx =
|
|
18892
|
+
const tx = chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
|
|
18754
18893
|
if (type === "INDEXER_CHAINED_TX_TYPE_TREE" /* TREE */) {
|
|
18755
18894
|
const input = tx.getInput(0);
|
|
18756
18895
|
if (!input) {
|
|
@@ -18777,14 +18916,14 @@ var ExitPathError = class extends Error {
|
|
|
18777
18916
|
reason;
|
|
18778
18917
|
};
|
|
18779
18918
|
function delayWeight(sequence) {
|
|
18780
|
-
const t =
|
|
18919
|
+
const t = chunkKUN5ZRMW_cjs.sequenceToTimelock(sequence);
|
|
18781
18920
|
return t.type === "blocks" ? Number(t.value) : Number(t.value) / 600;
|
|
18782
18921
|
}
|
|
18783
18922
|
async function resolveUnilateralPath(params) {
|
|
18784
18923
|
const { vtxo, scriptHex, contractRepository } = params;
|
|
18785
18924
|
const contract = contractRepository ? (await contractRepository.getContracts({ script: scriptHex }))[0] : void 0;
|
|
18786
18925
|
if (contract) {
|
|
18787
|
-
const handler =
|
|
18926
|
+
const handler = chunkOWTKOMJZ_cjs.contractHandlers.get(contract.type);
|
|
18788
18927
|
if (!handler) {
|
|
18789
18928
|
throw new ExitPathError(
|
|
18790
18929
|
"no-handler",
|
|
@@ -18807,12 +18946,12 @@ async function resolveUnilateralPath(params) {
|
|
|
18807
18946
|
paths.sort((a, b) => delayWeight(a.sequence) - delayWeight(b.sequence));
|
|
18808
18947
|
return { selection: paths[0], label: `${contract.type}:unilateral` };
|
|
18809
18948
|
}
|
|
18810
|
-
const decoded =
|
|
18949
|
+
const decoded = chunkKUN5ZRMW_cjs.VtxoScript.decode(vtxo.tapTree);
|
|
18811
18950
|
let best;
|
|
18812
18951
|
for (const exit of decoded.exitPaths()) {
|
|
18813
18952
|
const leaf = decoded.findLeaf(base.hex.encode(exit.script));
|
|
18814
18953
|
if (!leaf) continue;
|
|
18815
|
-
const sequence =
|
|
18954
|
+
const sequence = chunkKUN5ZRMW_cjs.timelockToSequence(exit.params.timelock);
|
|
18816
18955
|
const weight = delayWeight(sequence);
|
|
18817
18956
|
if (!best || weight < best.weight) {
|
|
18818
18957
|
best = { selection: { leaf, sequence }, weight };
|
|
@@ -18998,14 +19137,14 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
18998
19137
|
}
|
|
18999
19138
|
const resolved = await resolveUnilateralPath({
|
|
19000
19139
|
vtxo,
|
|
19001
|
-
scriptHex: base.hex.encode(
|
|
19140
|
+
scriptHex: base.hex.encode(chunkKUN5ZRMW_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
|
|
19002
19141
|
contractRepository: wallet.contractRepository,
|
|
19003
19142
|
walletPubKeyHex: base.hex.encode(await wallet.identity.xOnlyPublicKey()),
|
|
19004
19143
|
currentTime: Date.now()
|
|
19005
19144
|
});
|
|
19006
19145
|
const spendingLeaf = resolved.selection.leaf;
|
|
19007
19146
|
const sequence = resolved.selection.sequence;
|
|
19008
|
-
const timelock =
|
|
19147
|
+
const timelock = chunkKUN5ZRMW_cjs.sequenceToTimelock(sequence);
|
|
19009
19148
|
const elapsed = timelock.type === "blocks" ? chainTip.height >= txStatus.blockHeight + Number(timelock.value) : chainTip.time >= txStatus.blockTime + Number(timelock.value);
|
|
19010
19149
|
if (!elapsed) {
|
|
19011
19150
|
throw new Error(`no available exit path found for vtxo ${vtxo.txid}:${vtxo.vout}`);
|
|
@@ -19018,7 +19157,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
19018
19157
|
sequence,
|
|
19019
19158
|
witnessUtxo: {
|
|
19020
19159
|
amount: BigInt(vtxo.value),
|
|
19021
|
-
script:
|
|
19160
|
+
script: chunkKUN5ZRMW_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
|
|
19022
19161
|
},
|
|
19023
19162
|
sighashType: btcSigner.SigHash.DEFAULT
|
|
19024
19163
|
});
|
|
@@ -19028,7 +19167,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
19028
19167
|
btcSigner.TaprootControlBlock.encode(spendingLeaf[0]).length
|
|
19029
19168
|
);
|
|
19030
19169
|
}
|
|
19031
|
-
const tx = new
|
|
19170
|
+
const tx = new chunkKUN5ZRMW_cjs.Transaction({ version: 2 });
|
|
19032
19171
|
for (const input of inputs) {
|
|
19033
19172
|
tx.addInput(input);
|
|
19034
19173
|
}
|
|
@@ -19095,7 +19234,7 @@ async function buildSignedSweep(params) {
|
|
|
19095
19234
|
`uneconomic vtxo ${vtxo.txid}:${vtxo.vout}: value ${vtxo.value} - fee ${fee} < dust`
|
|
19096
19235
|
);
|
|
19097
19236
|
}
|
|
19098
|
-
const tx = new
|
|
19237
|
+
const tx = new chunkKUN5ZRMW_cjs.Transaction({ version: 2 });
|
|
19099
19238
|
tx.addInput({
|
|
19100
19239
|
txid: vtxo.txid,
|
|
19101
19240
|
index: vtxo.vout,
|
|
@@ -19120,7 +19259,7 @@ async function buildSignedSweep(params) {
|
|
|
19120
19259
|
finalScriptWitness: [
|
|
19121
19260
|
tapScriptSig[0][1],
|
|
19122
19261
|
...path.extraWitness,
|
|
19123
|
-
|
|
19262
|
+
chunkKUN5ZRMW_cjs.scriptFromTapLeafScript(path.leaf),
|
|
19124
19263
|
btcSigner.TaprootControlBlock.encode(controlBlock)
|
|
19125
19264
|
]
|
|
19126
19265
|
});
|
|
@@ -19150,7 +19289,7 @@ async function resolveFeeRate(opts) {
|
|
|
19150
19289
|
}
|
|
19151
19290
|
async function selectExitVtxos(opts) {
|
|
19152
19291
|
if (!opts.vtxos) return opts.wallet.getVtxos();
|
|
19153
|
-
const res = await
|
|
19292
|
+
const res = await chunkKUN5ZRMW_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
|
|
19154
19293
|
const tapTrees = /* @__PURE__ */ new Map();
|
|
19155
19294
|
const out = [];
|
|
19156
19295
|
for (const vtxo of res.vtxos) {
|
|
@@ -19165,7 +19304,7 @@ async function selectExitVtxos(opts) {
|
|
|
19165
19304
|
`no contract registered for vtxo script ${vtxo.script} \u2014 register the contract before exiting`
|
|
19166
19305
|
);
|
|
19167
19306
|
}
|
|
19168
|
-
const handler =
|
|
19307
|
+
const handler = chunkOWTKOMJZ_cjs.contractHandlers.get(contract.type);
|
|
19169
19308
|
if (!handler) {
|
|
19170
19309
|
throw new Error(`no contract handler registered for type '${contract.type}'`);
|
|
19171
19310
|
}
|
|
@@ -19195,7 +19334,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
19195
19334
|
if (pendingNodes.length > 0) {
|
|
19196
19335
|
const txs = await resolver.getVirtualTxs(pendingNodes.map((n) => n.txid));
|
|
19197
19336
|
for (const psbt of txs) {
|
|
19198
|
-
psbts.set(
|
|
19337
|
+
psbts.set(chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
19199
19338
|
}
|
|
19200
19339
|
}
|
|
19201
19340
|
const childVsize = Number(
|
|
@@ -19231,7 +19370,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
19231
19370
|
try {
|
|
19232
19371
|
const resolved = await resolveUnilateralPath({
|
|
19233
19372
|
vtxo,
|
|
19234
|
-
scriptHex: base.hex.encode(
|
|
19373
|
+
scriptHex: base.hex.encode(chunkKUN5ZRMW_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
|
|
19235
19374
|
contractRepository: wallet.contractRepository,
|
|
19236
19375
|
walletPubKeyHex,
|
|
19237
19376
|
currentTime: Date.now()
|
|
@@ -19250,7 +19389,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
19250
19389
|
});
|
|
19251
19390
|
continue;
|
|
19252
19391
|
}
|
|
19253
|
-
const t =
|
|
19392
|
+
const t = chunkKUN5ZRMW_cjs.sequenceToTimelock(resolved.selection.sequence);
|
|
19254
19393
|
const delay = { type: t.type, value: Number(t.value) };
|
|
19255
19394
|
infos.push({ outpoint, value: vtxo.value, sweepFee, path: resolved.label, delay });
|
|
19256
19395
|
sweeps.push({ vtxo, resolved, sweepFee, delay });
|
|
@@ -19589,7 +19728,7 @@ async function prepare(opts) {
|
|
|
19589
19728
|
txid: sweep.vtxo.txid,
|
|
19590
19729
|
vout: sweep.vtxo.vout,
|
|
19591
19730
|
value: sweep.vtxo.value,
|
|
19592
|
-
pkScript:
|
|
19731
|
+
pkScript: chunkKUN5ZRMW_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
|
|
19593
19732
|
},
|
|
19594
19733
|
path: sweep.resolved.selection,
|
|
19595
19734
|
outputAddress: opts.sweepAddress,
|
|
@@ -19674,7 +19813,7 @@ async function prepare(opts) {
|
|
|
19674
19813
|
if (newFee <= splitterFee) break;
|
|
19675
19814
|
splitterFee = newFee;
|
|
19676
19815
|
}
|
|
19677
|
-
const splitter = new
|
|
19816
|
+
const splitter = new chunkKUN5ZRMW_cjs.Transaction({ version: 2 });
|
|
19678
19817
|
for (const coin of selected.inputs) {
|
|
19679
19818
|
splitter.addInput({
|
|
19680
19819
|
txid: coin.txid,
|
|
@@ -19817,42 +19956,42 @@ var UnilateralExit = {
|
|
|
19817
19956
|
// src/arkade/index.ts
|
|
19818
19957
|
var arkade_exports = {};
|
|
19819
19958
|
chunk5BLDMQED_cjs.__export(arkade_exports, {
|
|
19820
|
-
ARKADE_OP: () =>
|
|
19821
|
-
ARKADE_OPCODES: () =>
|
|
19822
|
-
ARKADE_OPCODE_NAMES: () =>
|
|
19823
|
-
ARKADE_OPCODE_VALUES: () =>
|
|
19824
|
-
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,
|
|
19825
19964
|
Arkade: () => Arkade,
|
|
19826
19965
|
ArkadeContract: () => ArkadeContract,
|
|
19827
|
-
ArkadeProgramScript: () =>
|
|
19828
|
-
ArkadeScript: () =>
|
|
19966
|
+
ArkadeProgramScript: () => chunkOWTKOMJZ_cjs.ArkadeProgramScript,
|
|
19967
|
+
ArkadeScript: () => chunkOWTKOMJZ_cjs.ArkadeScript,
|
|
19829
19968
|
ArkadeTransactionBuilder: () => ArkadeTransactionBuilder,
|
|
19830
|
-
BigNum: () =>
|
|
19969
|
+
BigNum: () => chunkOWTKOMJZ_cjs.bignum_exports,
|
|
19831
19970
|
OP: () => btcSigner.OP,
|
|
19832
|
-
OPCODE_NAMES: () =>
|
|
19833
|
-
OPCODE_VALUES: () =>
|
|
19834
|
-
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,
|
|
19835
19974
|
Script: () => btcSigner.Script,
|
|
19836
|
-
arkadeScriptHash: () =>
|
|
19837
|
-
arkadeWitnessHash: () =>
|
|
19838
|
-
asmToBytes: () =>
|
|
19839
|
-
bytesToASM: () =>
|
|
19840
|
-
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,
|
|
19841
19980
|
createArkadeBatchHandler: () => createArkadeBatchHandler,
|
|
19842
|
-
deserializeArkadeContractParams: () =>
|
|
19843
|
-
fromASM: () =>
|
|
19844
|
-
getOpcodeName: () =>
|
|
19845
|
-
getOpcodeValue: () =>
|
|
19846
|
-
parseArtifact: () =>
|
|
19847
|
-
resolveAsm: () =>
|
|
19848
|
-
serializeArkadeContractParams: () =>
|
|
19849
|
-
stringifyArtifact: () =>
|
|
19850
|
-
toASM: () =>
|
|
19851
|
-
validateProgram: () =>
|
|
19852
|
-
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
|
|
19853
19992
|
});
|
|
19854
|
-
var isVtxoCoin = (input) =>
|
|
19855
|
-
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) {
|
|
19856
19995
|
let batchId;
|
|
19857
19996
|
let sweepTapTreeRoot;
|
|
19858
19997
|
let validatedCommitmentTxid;
|
|
@@ -19862,15 +20001,19 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
19862
20001
|
const intentIdHash = utils_js.sha256(utf8IntentId);
|
|
19863
20002
|
const intentIdHashStr = base.hex.encode(intentIdHash);
|
|
19864
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
|
+
);
|
|
19865
20012
|
await arkProvider.confirmRegistration(intentId);
|
|
19866
20013
|
batchId = event.id;
|
|
19867
|
-
const sweepTapscript =
|
|
19868
|
-
timelock
|
|
19869
|
-
|
|
19870
|
-
// BIP-65: values >= 512 are interpreted as seconds, below as blocks
|
|
19871
|
-
type: event.batchExpiry >= 512n ? "seconds" : "blocks"
|
|
19872
|
-
},
|
|
19873
|
-
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)]
|
|
19874
20017
|
}).script;
|
|
19875
20018
|
sweepTapTreeRoot = payment_js.tapLeafHash(sweepTapscript);
|
|
19876
20019
|
return { skip: false };
|
|
@@ -19882,7 +20025,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
19882
20025
|
if (!xOnlyPubkeys.includes(base.hex.encode(xonlySignerPubKey))) {
|
|
19883
20026
|
return { skip: true };
|
|
19884
20027
|
}
|
|
19885
|
-
const commitmentTx =
|
|
20028
|
+
const commitmentTx = chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
|
|
19886
20029
|
validateVtxoTxGraph(vtxoTree, commitmentTx, sweepTapTreeRoot);
|
|
19887
20030
|
if (recipients && recipients.length > 0) {
|
|
19888
20031
|
validateBatchRecipients(commitmentTx, vtxoTree.leaves(), recipients, network);
|
|
@@ -19914,7 +20057,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
19914
20057
|
if (connectorTree) {
|
|
19915
20058
|
validateConnectorsTxGraph(event.commitmentTx, connectorTree);
|
|
19916
20059
|
}
|
|
19917
|
-
let commitmentPsbt =
|
|
20060
|
+
let commitmentPsbt = chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
|
|
19918
20061
|
assertFinalCommitmentMatchesValidated(
|
|
19919
20062
|
commitmentPsbt,
|
|
19920
20063
|
validatedCommitmentTxid,
|
|
@@ -19949,7 +20092,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
19949
20092
|
boardingIndices.push(boardingIdx);
|
|
19950
20093
|
continue;
|
|
19951
20094
|
}
|
|
19952
|
-
if (
|
|
20095
|
+
if (chunkKUN5ZRMW_cjs.isRecoverable(input) || isSubdust(input, info.dust)) {
|
|
19953
20096
|
continue;
|
|
19954
20097
|
}
|
|
19955
20098
|
if (connectorIndex >= connectorLeaves.length) {
|
|
@@ -19970,7 +20113,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
19970
20113
|
index: input.vout,
|
|
19971
20114
|
witnessUtxo: {
|
|
19972
20115
|
amount: BigInt(input.value),
|
|
19973
|
-
script:
|
|
20116
|
+
script: chunkKUN5ZRMW_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
19974
20117
|
},
|
|
19975
20118
|
sighashType: btcSigner.SigHash.DEFAULT,
|
|
19976
20119
|
tapLeafScript: [input.forfeitTapLeafScript]
|
|
@@ -20053,7 +20196,7 @@ var Arkade = class _Arkade {
|
|
|
20053
20196
|
static async connect(opts) {
|
|
20054
20197
|
const info = await opts.arkade.getInfo();
|
|
20055
20198
|
const serverKey = base.hex.decode(info.signerPubkey).slice(1);
|
|
20056
|
-
const checkpoint =
|
|
20199
|
+
const checkpoint = chunkKUN5ZRMW_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
|
|
20057
20200
|
let emulatorKey;
|
|
20058
20201
|
if (opts.emulator) {
|
|
20059
20202
|
const eInfo = await opts.emulator.getInfo();
|
|
@@ -20067,7 +20210,7 @@ var Arkade = class _Arkade {
|
|
|
20067
20210
|
return new _Arkade({
|
|
20068
20211
|
arkProvider: opts.arkade,
|
|
20069
20212
|
emulator: opts.emulator,
|
|
20070
|
-
network: opts.network ??
|
|
20213
|
+
network: opts.network ?? chunkKUN5ZRMW_cjs.DEFAULT_NETWORK,
|
|
20071
20214
|
serverKey,
|
|
20072
20215
|
emulatorKey,
|
|
20073
20216
|
checkpoint,
|
|
@@ -20088,7 +20231,7 @@ var Arkade = class _Arkade {
|
|
|
20088
20231
|
* key respectively; explicit args always win.
|
|
20089
20232
|
*/
|
|
20090
20233
|
contract(program, args = {}) {
|
|
20091
|
-
const declared = (program.params ?? []).map(
|
|
20234
|
+
const declared = (program.params ?? []).map(chunkOWTKOMJZ_cjs.inputName);
|
|
20092
20235
|
if (declared.includes("server") && args.server === void 0) {
|
|
20093
20236
|
args = { ...args, server: this.serverKey };
|
|
20094
20237
|
}
|
|
@@ -20108,7 +20251,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
20108
20251
|
userKey: client.userKey,
|
|
20109
20252
|
emulatorKey: client.emulatorKey
|
|
20110
20253
|
};
|
|
20111
|
-
this.vtxoScript = new
|
|
20254
|
+
this.vtxoScript = new chunkOWTKOMJZ_cjs.ArkadeProgramScript(program, args, this.keys);
|
|
20112
20255
|
this.tapTree = this.vtxoScript.encode();
|
|
20113
20256
|
this.compiled = this.vtxoScript.compiled;
|
|
20114
20257
|
}
|
|
@@ -20136,7 +20279,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
20136
20279
|
`ArkadeContract.fromContract: expected contract type 'arkade', got '${contract.type}'`
|
|
20137
20280
|
);
|
|
20138
20281
|
}
|
|
20139
|
-
const typed =
|
|
20282
|
+
const typed = chunkOWTKOMJZ_cjs.deserializeArkadeContractParams(contract.params);
|
|
20140
20283
|
return new _ArkadeContract(client, typed.program, typed.args, {
|
|
20141
20284
|
serverKey: typed.serverKey,
|
|
20142
20285
|
userKey: typed.userKey,
|
|
@@ -20177,7 +20320,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
20177
20320
|
toContractParams() {
|
|
20178
20321
|
return {
|
|
20179
20322
|
type: "arkade",
|
|
20180
|
-
params:
|
|
20323
|
+
params: chunkOWTKOMJZ_cjs.serializeArkadeContractParams({
|
|
20181
20324
|
program: this.program,
|
|
20182
20325
|
args: this.args,
|
|
20183
20326
|
serverKey: this.keys.serverKey,
|
|
@@ -20222,13 +20365,13 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
20222
20365
|
const [registered] = await manager.getContracts({ script: scriptHex });
|
|
20223
20366
|
if (registered) {
|
|
20224
20367
|
const [withVtxos] = await manager.getContractsWithVtxos({ script: scriptHex });
|
|
20225
|
-
return (withVtxos?.vtxos ?? []).filter((v) => !
|
|
20368
|
+
return (withVtxos?.vtxos ?? []).filter((v) => !chunkKUN5ZRMW_cjs.hasTerminalSpend(v));
|
|
20226
20369
|
}
|
|
20227
20370
|
}
|
|
20228
20371
|
if (!this.client.indexer) {
|
|
20229
20372
|
throw new Error("ArkadeContract.getUtxos: an indexer is required");
|
|
20230
20373
|
}
|
|
20231
|
-
const { vtxos } = await
|
|
20374
|
+
const { vtxos } = await chunkKUN5ZRMW_cjs.getNormalizedVtxos(this.client.indexer, {
|
|
20232
20375
|
scripts: [scriptHex],
|
|
20233
20376
|
spendableOnly: true
|
|
20234
20377
|
});
|
|
@@ -20330,12 +20473,12 @@ var ArkadeTransactionBuilder = class {
|
|
|
20330
20473
|
this.contract.client.checkpoint
|
|
20331
20474
|
);
|
|
20332
20475
|
if (coin.sourceTx) {
|
|
20333
|
-
|
|
20476
|
+
chunkKUN5ZRMW_cjs.setArkPsbtField(arkTx, 0, chunkKUN5ZRMW_cjs.PrevArkTxField, coin.sourceTx);
|
|
20334
20477
|
}
|
|
20335
20478
|
const condition = (def.tapscript.witness ?? []).map((w) => this.witnessBytes(w));
|
|
20336
20479
|
if (condition.length > 0) {
|
|
20337
|
-
|
|
20338
|
-
|
|
20480
|
+
chunkKUN5ZRMW_cjs.setArkPsbtField(arkTx, 0, chunkKUN5ZRMW_cjs.ConditionWitness, condition);
|
|
20481
|
+
chunkKUN5ZRMW_cjs.setArkPsbtField(checkpoints[0], 0, chunkKUN5ZRMW_cjs.ConditionWitness, condition);
|
|
20339
20482
|
}
|
|
20340
20483
|
const packets = [];
|
|
20341
20484
|
if (this.assetSpecs.length > 0) {
|
|
@@ -20374,7 +20517,7 @@ var ArkadeTransactionBuilder = class {
|
|
|
20374
20517
|
base.base64.encode(signedArk2.toPSBT()),
|
|
20375
20518
|
signedCps.map((c) => base.base64.encode(c.toPSBT()))
|
|
20376
20519
|
);
|
|
20377
|
-
const txid =
|
|
20520
|
+
const txid = chunkKUN5ZRMW_cjs.Transaction.fromPSBT(base.base64.decode(res2.signedArkTx)).id;
|
|
20378
20521
|
return {
|
|
20379
20522
|
txid,
|
|
20380
20523
|
signedArkTx: res2.signedArkTx,
|
|
@@ -20433,23 +20576,23 @@ var ArkadeTransactionBuilder = class {
|
|
|
20433
20576
|
}
|
|
20434
20577
|
buildAssetPacket() {
|
|
20435
20578
|
const groups = this.assetSpecs.map((s) => {
|
|
20436
|
-
const id = typeof s.assetId === "string" ?
|
|
20437
|
-
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(
|
|
20438
20581
|
id,
|
|
20439
20582
|
null,
|
|
20440
|
-
s.inputs.map((i) =>
|
|
20441
|
-
s.outputs.map((o) =>
|
|
20442
|
-
(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))
|
|
20443
20586
|
);
|
|
20444
20587
|
});
|
|
20445
|
-
return
|
|
20588
|
+
return chunkYK6NP5KX_cjs.Packet.create(groups);
|
|
20446
20589
|
}
|
|
20447
20590
|
witnessBytes(ref) {
|
|
20448
|
-
return
|
|
20591
|
+
return chunkOWTKOMJZ_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
|
|
20449
20592
|
}
|
|
20450
20593
|
};
|
|
20451
20594
|
function bindInputs(fn, callArgs) {
|
|
20452
|
-
const names = (fn.def.inputs ?? []).map(
|
|
20595
|
+
const names = (fn.def.inputs ?? []).map(chunkOWTKOMJZ_cjs.inputName);
|
|
20453
20596
|
if (callArgs.length !== names.length) {
|
|
20454
20597
|
throw new Error(`${fn.name}: expected ${names.length} argument(s), got ${callArgs.length}`);
|
|
20455
20598
|
}
|
|
@@ -20856,7 +20999,7 @@ function decodeArkContract(encoded) {
|
|
|
20856
20999
|
}
|
|
20857
21000
|
function contractFromArkContract(encoded, options = {}) {
|
|
20858
21001
|
const parsed = decodeArkContract(encoded);
|
|
20859
|
-
const handler =
|
|
21002
|
+
const handler = chunkOWTKOMJZ_cjs.contractHandlers.get(parsed.type);
|
|
20860
21003
|
if (!handler) {
|
|
20861
21004
|
throw new Error(`No handler registered for contract type '${parsed.type}'`);
|
|
20862
21005
|
}
|
|
@@ -20870,9 +21013,9 @@ function contractFromArkContract(encoded, options = {}) {
|
|
|
20870
21013
|
metadata: options.metadata
|
|
20871
21014
|
};
|
|
20872
21015
|
}
|
|
20873
|
-
function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix =
|
|
21016
|
+
function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunkKUN5ZRMW_cjs.DEFAULT_NETWORK.hrp, options = {}) {
|
|
20874
21017
|
const parsed = decodeArkContract(encoded);
|
|
20875
|
-
const handler =
|
|
21018
|
+
const handler = chunkOWTKOMJZ_cjs.contractHandlers.getOrThrow(parsed.type);
|
|
20876
21019
|
const params = parsed.data;
|
|
20877
21020
|
const vtxoScript = handler.createScript(params);
|
|
20878
21021
|
return {
|
|
@@ -20905,6 +21048,8 @@ exports.ContractRepositoryImpl = ContractRepositoryImpl;
|
|
|
20905
21048
|
exports.ContractWatcher = ContractWatcher;
|
|
20906
21049
|
exports.DB_VERSION = DB_VERSION;
|
|
20907
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;
|
|
20908
21053
|
exports.DelegateManagerImpl = DelegateManagerImpl;
|
|
20909
21054
|
exports.DelegateNotConfiguredError = DelegateNotConfiguredError;
|
|
20910
21055
|
exports.DelegatorManagerImpl = DelegatorManagerImpl;
|
|
@@ -20942,6 +21087,8 @@ exports.MnemonicIdentity = MnemonicIdentity;
|
|
|
20942
21087
|
exports.OnchainWallet = OnchainWallet;
|
|
20943
21088
|
exports.P2A = P2A;
|
|
20944
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;
|
|
20945
21092
|
exports.Ramps = Ramps;
|
|
20946
21093
|
exports.ReadonlyAssetManager = ReadonlyAssetManager;
|
|
20947
21094
|
exports.ReadonlyDescriptorIdentity = ReadonlyDescriptorIdentity;
|
|
@@ -20970,9 +21117,12 @@ exports.WsElectrumChainSource = WsElectrumChainSource;
|
|
|
20970
21117
|
exports.arkRail = arkRail;
|
|
20971
21118
|
exports.arkTarget = arkTarget;
|
|
20972
21119
|
exports.arkade_exports = arkade_exports;
|
|
21120
|
+
exports.assertFinalCommitmentMatchesValidated = assertFinalCommitmentMatchesValidated;
|
|
20973
21121
|
exports.assertIntentIdUnique = assertIntentIdUnique;
|
|
20974
21122
|
exports.assertSendableAmount = assertSendableAmount;
|
|
20975
21123
|
exports.assertSubmittedArkTxid = assertSubmittedArkTxid;
|
|
21124
|
+
exports.assertValidBatchExpiry = assertValidBatchExpiry;
|
|
21125
|
+
exports.assertValidServerUnrollScript = assertValidServerUnrollScript;
|
|
20976
21126
|
exports.assetMintResolver = assetMintResolver;
|
|
20977
21127
|
exports.boardingResolver = boardingResolver;
|
|
20978
21128
|
exports.btcTarget = btcTarget;
|
|
@@ -20990,6 +21140,8 @@ exports.createDefaultActivityRegistry = createDefaultActivityRegistry;
|
|
|
20990
21140
|
exports.createDefaultPaymentRouter = createDefaultPaymentRouter;
|
|
20991
21141
|
exports.createExitChainResolver = createExitChainResolver;
|
|
20992
21142
|
exports.decodeArkContract = decodeArkContract;
|
|
21143
|
+
exports.defaultBatchExpiryPolicy = defaultBatchExpiryPolicy;
|
|
21144
|
+
exports.defaultCheckpointExitDelayPolicy = defaultCheckpointExitDelayPolicy;
|
|
20993
21145
|
exports.deserializeAssets = deserializeAssets;
|
|
20994
21146
|
exports.deserializeExitPackage = deserializeExitPackage;
|
|
20995
21147
|
exports.deserializeUtxo = deserializeUtxo;
|
|
@@ -21026,6 +21178,8 @@ exports.migrateWalletRepository = migrateWalletRepository;
|
|
|
21026
21178
|
exports.onchainRail = onchainRail;
|
|
21027
21179
|
exports.openDatabase = openDatabase;
|
|
21028
21180
|
exports.requiresMigration = requiresMigration;
|
|
21181
|
+
exports.resolveBatchExpiryPolicy = resolveBatchExpiryPolicy;
|
|
21182
|
+
exports.resolveCheckpointExitDelayPolicy = resolveCheckpointExitDelayPolicy;
|
|
21029
21183
|
exports.resolveSendAmount = resolveSendAmount;
|
|
21030
21184
|
exports.rollbackMigration = rollbackMigration;
|
|
21031
21185
|
exports.saveVtxosForContract = saveVtxosForContract;
|
|
@@ -21040,10 +21194,11 @@ exports.setupServiceWorker = setupServiceWorker;
|
|
|
21040
21194
|
exports.signerSetFromInfo = signerSetFromInfo;
|
|
21041
21195
|
exports.toXOnlySignerHex = toXOnlySignerHex;
|
|
21042
21196
|
exports.tryResolveSendAmount = tryResolveSendAmount;
|
|
21197
|
+
exports.validateBatchRecipients = validateBatchRecipients;
|
|
21043
21198
|
exports.validateConnectorsTxGraph = validateConnectorsTxGraph;
|
|
21044
21199
|
exports.validateVtxoTxGraph = validateVtxoTxGraph;
|
|
21045
21200
|
exports.verifyTapscriptSignatures = verifyTapscriptSignatures;
|
|
21046
21201
|
exports.waitForIncomingFunds = waitForIncomingFunds;
|
|
21047
21202
|
exports.warnAndFilterVtxosForScript = warnAndFilterVtxosForScript;
|
|
21048
|
-
//# sourceMappingURL=chunk-
|
|
21049
|
-
//# sourceMappingURL=chunk-
|
|
21203
|
+
//# sourceMappingURL=chunk-KEG4AAKX.cjs.map
|
|
21204
|
+
//# sourceMappingURL=chunk-KEG4AAKX.cjs.map
|