@arkade-os/sdk 0.4.40 → 0.4.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/dist/adapters/expo.cjs +5 -5
- package/dist/adapters/expo.d.cts +2 -2
- package/dist/adapters/expo.d.ts +2 -2
- package/dist/adapters/expo.js +3 -3
- package/dist/adapters/indexedDB.cjs +5 -5
- package/dist/adapters/indexedDB.js +4 -4
- package/dist/{ark-BaZ6da8C.d.cts → ark-CKDWpuGL.d.cts} +95 -1
- package/dist/{ark-BaZ6da8C.d.ts → ark-CKDWpuGL.d.ts} +95 -1
- package/dist/{asyncStorageTaskQueue-CvV50MjV.d.ts → asyncStorageTaskQueue-BB2MffwG.d.ts} +2 -2
- package/dist/{asyncStorageTaskQueue-trKcQM7q.d.cts → asyncStorageTaskQueue-BpN8RRHR.d.cts} +2 -2
- package/dist/{chunk-SWJBV4UB.js → chunk-2V3BU2X6.js} +4 -4
- package/dist/{chunk-SWJBV4UB.js.map → chunk-2V3BU2X6.js.map} +1 -1
- package/dist/{chunk-GUTKJMSF.cjs → chunk-32YKLQPS.cjs} +29 -29
- package/dist/{chunk-GUTKJMSF.cjs.map → chunk-32YKLQPS.cjs.map} +1 -1
- package/dist/{chunk-GF6NPAOJ.js → chunk-5X5YMZHB.js} +4 -4
- package/dist/{chunk-GF6NPAOJ.js.map → chunk-5X5YMZHB.js.map} +1 -1
- package/dist/{chunk-OUVTG72A.js → chunk-BE5MUB7T.js} +5 -3
- package/dist/chunk-BE5MUB7T.js.map +1 -0
- package/dist/{chunk-I4Z6KKUH.cjs → chunk-ED7JDFX4.cjs} +366 -209
- package/dist/chunk-ED7JDFX4.cjs.map +1 -0
- package/dist/{chunk-5TSUGRHP.js → chunk-FLPPSRYH.js} +3 -3
- package/dist/{chunk-5TSUGRHP.js.map → chunk-FLPPSRYH.js.map} +1 -1
- package/dist/{chunk-TSG74BHI.cjs → chunk-HHPUCCB3.cjs} +7 -7
- package/dist/{chunk-TSG74BHI.cjs.map → chunk-HHPUCCB3.cjs.map} +1 -1
- package/dist/{chunk-CMPJR3HS.cjs → chunk-HXDZ2QTW.cjs} +5 -3
- package/dist/chunk-HXDZ2QTW.cjs.map +1 -0
- package/dist/{chunk-GWISMFO5.cjs → chunk-T2ACJD22.cjs} +14 -14
- package/dist/{chunk-GWISMFO5.cjs.map → chunk-T2ACJD22.cjs.map} +1 -1
- package/dist/{chunk-I2O4Q2EL.js → chunk-V3FCNVJE.js} +185 -31
- package/dist/chunk-V3FCNVJE.js.map +1 -0
- package/dist/{chunk-6EZY43WE.cjs → chunk-YEF5FL6E.cjs} +9 -9
- package/dist/{chunk-6EZY43WE.cjs.map → chunk-YEF5FL6E.cjs.map} +1 -1
- package/dist/{chunk-CUSABEUQ.js → chunk-YNEDJTX2.js} +3 -3
- package/dist/{chunk-CUSABEUQ.js.map → chunk-YNEDJTX2.js.map} +1 -1
- package/dist/contracts/handlers/index.cjs +7 -7
- 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-ClaZWxlA.d.ts → delegate-DllAQ3Eu.d.ts} +1 -1
- package/dist/{delegate-Bt5H1gbW.d.cts → delegate-yjhcR9n4.d.cts} +1 -1
- package/dist/{index-D6kIRfBy.d.cts → index-D1te-ZR6.d.cts} +2 -2
- package/dist/{index-ByYBDr1g.d.ts → index-DVdCGyyH.d.ts} +2 -2
- package/dist/index.cjs +157 -141
- package/dist/index.d.cts +11 -8
- package/dist/index.d.ts +11 -8
- package/dist/index.js +4 -4
- package/dist/repositories/realm/index.cjs +13 -13
- package/dist/repositories/realm/index.d.cts +1 -1
- package/dist/repositories/realm/index.d.ts +1 -1
- package/dist/repositories/realm/index.js +4 -4
- package/dist/repositories/sqlite/index.cjs +13 -13
- package/dist/repositories/sqlite/index.d.cts +1 -1
- package/dist/repositories/sqlite/index.d.ts +1 -1
- package/dist/repositories/sqlite/index.js +4 -4
- package/dist/{taskRunner-Bwss4MUW.d.ts → taskRunner-BdiRy4iI.d.ts} +2 -2
- package/dist/{taskRunner-D7SuOTOa.d.cts → taskRunner-CuTk8RYg.d.cts} +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 +44 -14
- package/dist/wallet/expo/index.cjs.map +1 -1
- package/dist/wallet/expo/index.d.cts +14 -4
- package/dist/wallet/expo/index.d.ts +14 -4
- package/dist/wallet/expo/index.js +36 -6
- package/dist/wallet/expo/index.js.map +1 -1
- package/dist/{wallet-l-2dKXVh.d.ts → wallet-CrIVUQMb.d.ts} +15 -2
- package/dist/{wallet-V5C4Nlhz.d.cts → wallet-CyPOQ0oM.d.cts} +15 -2
- package/dist/worker/expo/index.cjs +9 -9
- package/dist/worker/expo/index.d.cts +4 -4
- package/dist/worker/expo/index.d.ts +4 -4
- package/dist/worker/expo/index.js +5 -5
- package/package.json +1 -1
- package/dist/chunk-CMPJR3HS.cjs.map +0 -1
- package/dist/chunk-I2O4Q2EL.js.map +0 -1
- package/dist/chunk-I4Z6KKUH.cjs.map +0 -1
- package/dist/chunk-OUVTG72A.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunkYEF5FL6E_cjs = require('./chunk-YEF5FL6E.cjs');
|
|
4
|
+
var chunk32YKLQPS_cjs = require('./chunk-32YKLQPS.cjs');
|
|
5
|
+
var chunkHXDZ2QTW_cjs = require('./chunk-HXDZ2QTW.cjs');
|
|
6
6
|
var utils_js = require('@scure/btc-signer/utils.js');
|
|
7
7
|
var btcSigner = require('@scure/btc-signer');
|
|
8
8
|
var base = require('@scure/base');
|
|
@@ -181,7 +181,7 @@ var TreeSignerSession = class _TreeSignerSession {
|
|
|
181
181
|
noncesByPubkey.set(base.hex.encode(myPublicKey.subarray(1)), myNonce);
|
|
182
182
|
const tx = this.graph.find(txid);
|
|
183
183
|
if (!tx) throw new Error(`missing tx for txid ${txid}`);
|
|
184
|
-
const cosigners =
|
|
184
|
+
const cosigners = chunkYEF5FL6E_cjs.getArkPsbtFields(tx.root, 0, chunkYEF5FL6E_cjs.CosignerPublicKey).map(
|
|
185
185
|
(c) => base.hex.encode(c.key.subarray(1))
|
|
186
186
|
// xonly pubkey
|
|
187
187
|
);
|
|
@@ -233,7 +233,7 @@ var TreeSignerSession = class _TreeSignerSession {
|
|
|
233
233
|
if (!aggNonce) throw new Error("missing aggregate nonce");
|
|
234
234
|
const prevoutAmounts = [];
|
|
235
235
|
const prevoutScripts = [];
|
|
236
|
-
const cosigners =
|
|
236
|
+
const cosigners = chunkYEF5FL6E_cjs.getArkPsbtFields(g.root, 0, chunkYEF5FL6E_cjs.CosignerPublicKey).map((c) => c.key);
|
|
237
237
|
const { finalKey } = aggregateKeys(cosigners, true, {
|
|
238
238
|
taprootTweak: this.scriptRoot
|
|
239
239
|
});
|
|
@@ -411,7 +411,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
411
411
|
let network;
|
|
412
412
|
if ("descriptor" in opts && typeof opts.descriptor === "string") {
|
|
413
413
|
descriptor = opts.descriptor;
|
|
414
|
-
network =
|
|
414
|
+
network = chunk32YKLQPS_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
415
415
|
} else {
|
|
416
416
|
network = opts.isMainnet ?? true ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
417
417
|
descriptor = descriptorsScure.scriptExpressions.trBIP32({
|
|
@@ -496,7 +496,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
496
496
|
* `StaticDescriptorProvider` for legacy single-key wallets.
|
|
497
497
|
*/
|
|
498
498
|
isOurs(descriptor) {
|
|
499
|
-
return
|
|
499
|
+
return chunk32YKLQPS_cjs.descriptorIsOurs(descriptor, this.descriptor, utils_js.pubSchnorr(this.derivedKey));
|
|
500
500
|
}
|
|
501
501
|
/**
|
|
502
502
|
* Signs each request with the key derived from its descriptor.
|
|
@@ -533,7 +533,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
533
533
|
}
|
|
534
534
|
// ── internal helpers ─────────────────────────────────────────────
|
|
535
535
|
derivePrivateKeyForDescriptor(descriptor) {
|
|
536
|
-
const network =
|
|
536
|
+
const network = chunk32YKLQPS_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
537
537
|
const expansion = descriptorsScure.expand({ descriptor, network });
|
|
538
538
|
if (expansion.isRanged) {
|
|
539
539
|
throw new Error(
|
|
@@ -619,7 +619,7 @@ var ReadonlyDescriptorIdentity = class _ReadonlyDescriptorIdentity {
|
|
|
619
619
|
*/
|
|
620
620
|
descriptor;
|
|
621
621
|
constructor(descriptor) {
|
|
622
|
-
const network =
|
|
622
|
+
const network = chunk32YKLQPS_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
623
623
|
let expansion;
|
|
624
624
|
try {
|
|
625
625
|
expansion = descriptorsScure.expand({ descriptor, network, index: 0 });
|
|
@@ -669,7 +669,7 @@ var ReadonlyDescriptorIdentity = class _ReadonlyDescriptorIdentity {
|
|
|
669
669
|
* `StaticDescriptorProvider` for legacy single-key wallets.
|
|
670
670
|
*/
|
|
671
671
|
isOurs(descriptor) {
|
|
672
|
-
return
|
|
672
|
+
return chunk32YKLQPS_cjs.descriptorIsOurs(descriptor, this.descriptor, this.indexZero.pubkey);
|
|
673
673
|
}
|
|
674
674
|
};
|
|
675
675
|
function serializeSeedOwnedSigningIdentity(identity) {
|
|
@@ -980,14 +980,14 @@ var RestDelegateProvider = class {
|
|
|
980
980
|
*/
|
|
981
981
|
async delegate(intent, forfeitTxs, options) {
|
|
982
982
|
const url = `${this.url}/v1/delegate`;
|
|
983
|
-
const response = await
|
|
983
|
+
const response = await chunkYEF5FL6E_cjs.baseFetch(url, {
|
|
984
984
|
method: "POST",
|
|
985
985
|
headers: {
|
|
986
986
|
"Content-Type": "application/json"
|
|
987
987
|
},
|
|
988
988
|
body: JSON.stringify({
|
|
989
989
|
intent: {
|
|
990
|
-
message:
|
|
990
|
+
message: chunkYEF5FL6E_cjs.Intent.encodeMessage(intent.message),
|
|
991
991
|
proof: intent.proof
|
|
992
992
|
},
|
|
993
993
|
forfeit_txs: forfeitTxs,
|
|
@@ -1007,7 +1007,7 @@ var RestDelegateProvider = class {
|
|
|
1007
1007
|
*/
|
|
1008
1008
|
async getDelegateInfo() {
|
|
1009
1009
|
const url = `${this.url}/v1/delegator/info`;
|
|
1010
|
-
const response = await
|
|
1010
|
+
const response = await chunkYEF5FL6E_cjs.baseFetch(url);
|
|
1011
1011
|
if (!response.ok) {
|
|
1012
1012
|
const errorText2 = await response.text();
|
|
1013
1013
|
throw new Error(`Failed to get delegate info: ${errorText2}`);
|
|
@@ -1034,7 +1034,7 @@ var ESPLORA_URL = {
|
|
|
1034
1034
|
regtest: "http://localhost:3000/api"
|
|
1035
1035
|
};
|
|
1036
1036
|
var EsploraProvider = class {
|
|
1037
|
-
constructor(baseUrl = ESPLORA_URL[
|
|
1037
|
+
constructor(baseUrl = ESPLORA_URL[chunkHXDZ2QTW_cjs.DEFAULT_NETWORK_NAME], opts) {
|
|
1038
1038
|
this.baseUrl = baseUrl;
|
|
1039
1039
|
this.pollingInterval = opts?.pollingInterval ?? 15e3;
|
|
1040
1040
|
this.forcePolling = opts?.forcePolling ?? false;
|
|
@@ -1042,14 +1042,14 @@ var EsploraProvider = class {
|
|
|
1042
1042
|
pollingInterval;
|
|
1043
1043
|
forcePolling;
|
|
1044
1044
|
async getCoins(address) {
|
|
1045
|
-
const response = await
|
|
1045
|
+
const response = await chunkYEF5FL6E_cjs.baseFetch(`${this.baseUrl}/address/${address}/utxo`);
|
|
1046
1046
|
if (!response.ok) {
|
|
1047
1047
|
throw new Error(`Failed to fetch UTXOs: ${response.statusText}`);
|
|
1048
1048
|
}
|
|
1049
1049
|
return response.json();
|
|
1050
1050
|
}
|
|
1051
1051
|
async getFeeRate() {
|
|
1052
|
-
const response = await
|
|
1052
|
+
const response = await chunkYEF5FL6E_cjs.baseFetch(`${this.baseUrl}/fee-estimates`);
|
|
1053
1053
|
if (response.status === 404) {
|
|
1054
1054
|
return void 0;
|
|
1055
1055
|
}
|
|
@@ -1070,7 +1070,7 @@ var EsploraProvider = class {
|
|
|
1070
1070
|
}
|
|
1071
1071
|
}
|
|
1072
1072
|
async getTxOutspends(txid) {
|
|
1073
|
-
const response = await
|
|
1073
|
+
const response = await chunkYEF5FL6E_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/outspends`);
|
|
1074
1074
|
if (!response.ok) {
|
|
1075
1075
|
const error = await response.text();
|
|
1076
1076
|
throw new Error(`Failed to get transaction outspends: ${error}`);
|
|
@@ -1078,7 +1078,7 @@ var EsploraProvider = class {
|
|
|
1078
1078
|
return response.json();
|
|
1079
1079
|
}
|
|
1080
1080
|
async getTransactions(address) {
|
|
1081
|
-
const response = await
|
|
1081
|
+
const response = await chunkYEF5FL6E_cjs.baseFetch(`${this.baseUrl}/address/${address}/txs`);
|
|
1082
1082
|
if (!response.ok) {
|
|
1083
1083
|
const error = await response.text();
|
|
1084
1084
|
throw new Error(`Failed to get transactions: ${error}`);
|
|
@@ -1086,7 +1086,7 @@ var EsploraProvider = class {
|
|
|
1086
1086
|
return response.json();
|
|
1087
1087
|
}
|
|
1088
1088
|
async getTxStatus(txid) {
|
|
1089
|
-
const txresponse = await
|
|
1089
|
+
const txresponse = await chunkYEF5FL6E_cjs.baseFetch(`${this.baseUrl}/tx/${txid}`);
|
|
1090
1090
|
if (!txresponse.ok) {
|
|
1091
1091
|
throw new Error(txresponse.statusText);
|
|
1092
1092
|
}
|
|
@@ -1094,7 +1094,7 @@ var EsploraProvider = class {
|
|
|
1094
1094
|
if (!tx.status.confirmed) {
|
|
1095
1095
|
return { confirmed: false };
|
|
1096
1096
|
}
|
|
1097
|
-
const response = await
|
|
1097
|
+
const response = await chunkYEF5FL6E_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/status`);
|
|
1098
1098
|
if (!response.ok) {
|
|
1099
1099
|
throw new Error(`Failed to get transaction status: ${response.statusText}`);
|
|
1100
1100
|
}
|
|
@@ -1178,7 +1178,7 @@ var EsploraProvider = class {
|
|
|
1178
1178
|
return stopFunc;
|
|
1179
1179
|
}
|
|
1180
1180
|
async getChainTip() {
|
|
1181
|
-
const tipBlocks = await
|
|
1181
|
+
const tipBlocks = await chunkYEF5FL6E_cjs.baseFetch(`${this.baseUrl}/blocks`);
|
|
1182
1182
|
if (!tipBlocks.ok) {
|
|
1183
1183
|
throw new Error(`Failed to get chain tip: ${tipBlocks.statusText}`);
|
|
1184
1184
|
}
|
|
@@ -1197,7 +1197,7 @@ var EsploraProvider = class {
|
|
|
1197
1197
|
};
|
|
1198
1198
|
}
|
|
1199
1199
|
async broadcastPackage(parent, child) {
|
|
1200
|
-
const response = await
|
|
1200
|
+
const response = await chunkYEF5FL6E_cjs.baseFetch(`${this.baseUrl}/txs/package`, {
|
|
1201
1201
|
method: "POST",
|
|
1202
1202
|
headers: {
|
|
1203
1203
|
"Content-Type": "application/json"
|
|
@@ -1211,7 +1211,7 @@ var EsploraProvider = class {
|
|
|
1211
1211
|
return response.json();
|
|
1212
1212
|
}
|
|
1213
1213
|
async broadcastTx(tx) {
|
|
1214
|
-
const response = await
|
|
1214
|
+
const response = await chunkYEF5FL6E_cjs.baseFetch(`${this.baseUrl}/tx`, {
|
|
1215
1215
|
method: "POST",
|
|
1216
1216
|
headers: {
|
|
1217
1217
|
"Content-Type": "text/plain"
|
|
@@ -1282,7 +1282,7 @@ function buildForfeitTx(inputs, forfeitPkScript, txLocktime) {
|
|
|
1282
1282
|
);
|
|
1283
1283
|
}
|
|
1284
1284
|
function buildForfeitTxWithOutput(inputs, output, txLocktime) {
|
|
1285
|
-
const tx = new
|
|
1285
|
+
const tx = new chunkYEF5FL6E_cjs.Transaction({
|
|
1286
1286
|
version: 3,
|
|
1287
1287
|
lockTime: txLocktime
|
|
1288
1288
|
});
|
|
@@ -1358,7 +1358,7 @@ function validateVtxoTxGraph(graph, roundTransaction, sweepTapTreeRoot) {
|
|
|
1358
1358
|
if (previousScriptKey.length !== 32) {
|
|
1359
1359
|
throw new Error(`parent output ${childIndex} has invalid script`);
|
|
1360
1360
|
}
|
|
1361
|
-
const cosigners =
|
|
1361
|
+
const cosigners = chunkYEF5FL6E_cjs.getArkPsbtFields(child.root, 0, chunkYEF5FL6E_cjs.CosignerPublicKey);
|
|
1362
1362
|
if (cosigners.length === 0) {
|
|
1363
1363
|
throw ErrMissingCosignersPublicKeys;
|
|
1364
1364
|
}
|
|
@@ -1458,7 +1458,7 @@ var Extension = class _Extension {
|
|
|
1458
1458
|
`expected magic prefix ${base.hex.encode(ARKADE_MAGIC)}, got ${base.hex.encode(payload.slice(0, Math.min(payload.length, ARKADE_MAGIC.length)))}`
|
|
1459
1459
|
);
|
|
1460
1460
|
}
|
|
1461
|
-
const reader = new
|
|
1461
|
+
const reader = new chunkYEF5FL6E_cjs.BufferReader(payload.slice(ARKADE_MAGIC.length));
|
|
1462
1462
|
const packets = [];
|
|
1463
1463
|
while (reader.remaining() > 0) {
|
|
1464
1464
|
const packetType = reader.readByte();
|
|
@@ -1532,7 +1532,7 @@ var Extension = class _Extension {
|
|
|
1532
1532
|
*/
|
|
1533
1533
|
getAssetPacket() {
|
|
1534
1534
|
for (const p of this.packets) {
|
|
1535
|
-
if (p instanceof
|
|
1535
|
+
if (p instanceof chunkYEF5FL6E_cjs.Packet) {
|
|
1536
1536
|
return p;
|
|
1537
1537
|
}
|
|
1538
1538
|
}
|
|
@@ -1540,8 +1540,8 @@ var Extension = class _Extension {
|
|
|
1540
1540
|
}
|
|
1541
1541
|
};
|
|
1542
1542
|
function parsePacket(packetType, data) {
|
|
1543
|
-
if (packetType ===
|
|
1544
|
-
return
|
|
1543
|
+
if (packetType === chunkYEF5FL6E_cjs.Packet.PACKET_TYPE) {
|
|
1544
|
+
return chunkYEF5FL6E_cjs.Packet.fromBytes(data);
|
|
1545
1545
|
}
|
|
1546
1546
|
return new UnknownPacket(packetType, data);
|
|
1547
1547
|
}
|
|
@@ -1599,7 +1599,7 @@ function validateBatchRecipients(commitmentTx, vtxoTreeLeaves, recipients, netwo
|
|
|
1599
1599
|
for (const recipient of recipients) {
|
|
1600
1600
|
let arkAddress;
|
|
1601
1601
|
try {
|
|
1602
|
-
arkAddress =
|
|
1602
|
+
arkAddress = chunkHXDZ2QTW_cjs.ArkAddress.decode(recipient.address);
|
|
1603
1603
|
} catch {
|
|
1604
1604
|
validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
|
|
1605
1605
|
continue;
|
|
@@ -1700,6 +1700,122 @@ function validateAssetGroupOutput(packet, outputIndex, assetId, expectedAmount)
|
|
|
1700
1700
|
}
|
|
1701
1701
|
}
|
|
1702
1702
|
|
|
1703
|
+
// src/wallet/activity.ts
|
|
1704
|
+
async function buildActivities(txs, resolvers) {
|
|
1705
|
+
const preparedResolvers = (await Promise.all(
|
|
1706
|
+
resolvers.map(async (r) => {
|
|
1707
|
+
try {
|
|
1708
|
+
await r.prepare?.();
|
|
1709
|
+
return r;
|
|
1710
|
+
} catch {
|
|
1711
|
+
return void 0;
|
|
1712
|
+
}
|
|
1713
|
+
})
|
|
1714
|
+
)).filter((r) => r !== void 0);
|
|
1715
|
+
const keyOf = (tx) => tx.key.arkTxid || tx.key.commitmentTxid || tx.key.boardingTxid;
|
|
1716
|
+
const merge = (a, b) => ({
|
|
1717
|
+
groupId: a.groupId,
|
|
1718
|
+
label: a.label ?? b.label,
|
|
1719
|
+
kind: a.kind ?? b.kind,
|
|
1720
|
+
metadata: { ...b.metadata, ...a.metadata },
|
|
1721
|
+
amount: a.amount ?? b.amount
|
|
1722
|
+
});
|
|
1723
|
+
const isSent = (tx) => tx.type === "SENT" /* TxSent */;
|
|
1724
|
+
const signedAmount = (tx, amount = tx.amount) => {
|
|
1725
|
+
const magnitude = Math.abs(amount);
|
|
1726
|
+
return isSent(tx) ? -magnitude : magnitude;
|
|
1727
|
+
};
|
|
1728
|
+
const buckets = /* @__PURE__ */ new Map();
|
|
1729
|
+
for (const tx of txs) {
|
|
1730
|
+
const perGroup = /* @__PURE__ */ new Map();
|
|
1731
|
+
for (const r of preparedResolvers) {
|
|
1732
|
+
let ms;
|
|
1733
|
+
try {
|
|
1734
|
+
ms = r.resolve(tx);
|
|
1735
|
+
} catch {
|
|
1736
|
+
ms = void 0;
|
|
1737
|
+
}
|
|
1738
|
+
for (const m of ms ?? []) {
|
|
1739
|
+
if (!m.groupId) continue;
|
|
1740
|
+
if (m.amount !== void 0 && !Number.isFinite(m.amount)) continue;
|
|
1741
|
+
const existing = perGroup.get(m.groupId);
|
|
1742
|
+
perGroup.set(m.groupId, existing ? merge(existing, m) : { ...m });
|
|
1743
|
+
}
|
|
1744
|
+
}
|
|
1745
|
+
if (perGroup.size === 0) {
|
|
1746
|
+
const id = keyOf(tx);
|
|
1747
|
+
const b = buckets.get(id) ?? { members: [] };
|
|
1748
|
+
b.members.push({ tx, amount: signedAmount(tx) });
|
|
1749
|
+
buckets.set(id, b);
|
|
1750
|
+
continue;
|
|
1751
|
+
}
|
|
1752
|
+
for (const m of perGroup.values()) {
|
|
1753
|
+
const b = buckets.get(m.groupId) ?? { members: [] };
|
|
1754
|
+
b.intent = {
|
|
1755
|
+
label: b.intent?.label ?? m.label,
|
|
1756
|
+
kind: b.intent?.kind ?? m.kind,
|
|
1757
|
+
metadata: { ...m.metadata, ...b.intent?.metadata }
|
|
1758
|
+
};
|
|
1759
|
+
b.members.push({ tx, amount: signedAmount(tx, m.amount ?? tx.amount) });
|
|
1760
|
+
buckets.set(m.groupId, b);
|
|
1761
|
+
}
|
|
1762
|
+
}
|
|
1763
|
+
const netAmount = (members) => {
|
|
1764
|
+
const sentKeys = new Set(members.filter((x) => isSent(x.tx)).map((x) => keyOf(x.tx)));
|
|
1765
|
+
return members.reduce((s, x) => {
|
|
1766
|
+
if (!isSent(x.tx) && sentKeys.has(keyOf(x.tx))) return s;
|
|
1767
|
+
return s + x.amount;
|
|
1768
|
+
}, 0);
|
|
1769
|
+
};
|
|
1770
|
+
const latest = (a) => a.txs[a.txs.length - 1].createdAt;
|
|
1771
|
+
return [...buckets.entries()].map(([id, b]) => {
|
|
1772
|
+
const members = [...b.members].sort((x, y) => x.tx.createdAt - y.tx.createdAt);
|
|
1773
|
+
return {
|
|
1774
|
+
id,
|
|
1775
|
+
intent: b.intent,
|
|
1776
|
+
txs: members.map((x) => x.tx),
|
|
1777
|
+
amount: netAmount(members),
|
|
1778
|
+
createdAt: members[0].tx.createdAt,
|
|
1779
|
+
settled: members.every((x) => x.tx.settled)
|
|
1780
|
+
};
|
|
1781
|
+
}).sort((a, c) => latest(c) - latest(a));
|
|
1782
|
+
}
|
|
1783
|
+
var ActivityRegistry = class {
|
|
1784
|
+
resolvers = /* @__PURE__ */ new Map();
|
|
1785
|
+
/** Add a resolver, or override an existing one with the same id (kept in place). */
|
|
1786
|
+
use(resolver) {
|
|
1787
|
+
this.resolvers.set(resolver.id, resolver);
|
|
1788
|
+
}
|
|
1789
|
+
/** Remove a resolver (built-in or custom) by id. */
|
|
1790
|
+
remove(id) {
|
|
1791
|
+
this.resolvers.delete(id);
|
|
1792
|
+
}
|
|
1793
|
+
/** The registered resolver ids, in registration order. */
|
|
1794
|
+
list() {
|
|
1795
|
+
return [...this.resolvers.keys()];
|
|
1796
|
+
}
|
|
1797
|
+
/** All registered resolvers, in registration (priority) order. */
|
|
1798
|
+
all() {
|
|
1799
|
+
return [...this.resolvers.values()];
|
|
1800
|
+
}
|
|
1801
|
+
};
|
|
1802
|
+
function boardingResolver() {
|
|
1803
|
+
return {
|
|
1804
|
+
id: "boarding",
|
|
1805
|
+
resolve(tx) {
|
|
1806
|
+
if (!tx.key.boardingTxid) return void 0;
|
|
1807
|
+
return [
|
|
1808
|
+
{ groupId: `boarding:${tx.key.boardingTxid}`, label: "Deposit", kind: "boarding" }
|
|
1809
|
+
];
|
|
1810
|
+
}
|
|
1811
|
+
};
|
|
1812
|
+
}
|
|
1813
|
+
function createDefaultActivityRegistry() {
|
|
1814
|
+
const registry = new ActivityRegistry();
|
|
1815
|
+
registry.use(boardingResolver());
|
|
1816
|
+
return registry;
|
|
1817
|
+
}
|
|
1818
|
+
|
|
1703
1819
|
// src/wallet/index.ts
|
|
1704
1820
|
var TxType = /* @__PURE__ */ ((TxType2) => {
|
|
1705
1821
|
TxType2["TxSent"] = "SENT";
|
|
@@ -1732,7 +1848,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
1732
1848
|
const existing = inputsByAssetId.get(asset.assetId);
|
|
1733
1849
|
inputsByAssetId.set(asset.assetId, [
|
|
1734
1850
|
...existing ?? [],
|
|
1735
|
-
|
|
1851
|
+
chunkYEF5FL6E_cjs.AssetInput.create(inputIndex, asset.amount)
|
|
1736
1852
|
]);
|
|
1737
1853
|
}
|
|
1738
1854
|
}
|
|
@@ -1744,7 +1860,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
1744
1860
|
const existing = outputsByAssetId.get(asset.assetId);
|
|
1745
1861
|
outputsByAssetId.set(asset.assetId, [
|
|
1746
1862
|
...existing ?? [],
|
|
1747
|
-
|
|
1863
|
+
chunkYEF5FL6E_cjs.AssetOutput.create(outputIndex, asset.amount)
|
|
1748
1864
|
]);
|
|
1749
1865
|
}
|
|
1750
1866
|
}
|
|
@@ -1755,7 +1871,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
1755
1871
|
const existing = outputsByAssetId.get(asset.assetId);
|
|
1756
1872
|
outputsByAssetId.set(asset.assetId, [
|
|
1757
1873
|
...existing ?? [],
|
|
1758
|
-
|
|
1874
|
+
chunkYEF5FL6E_cjs.AssetOutput.create(outputIndex, asset.amount)
|
|
1759
1875
|
]);
|
|
1760
1876
|
}
|
|
1761
1877
|
}
|
|
@@ -1764,11 +1880,11 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
1764
1880
|
for (const assetIdStr of allAssetIds) {
|
|
1765
1881
|
const inputs = inputsByAssetId.get(assetIdStr);
|
|
1766
1882
|
const outputs = outputsByAssetId.get(assetIdStr);
|
|
1767
|
-
const assetId =
|
|
1768
|
-
const group =
|
|
1883
|
+
const assetId = chunkYEF5FL6E_cjs.AssetId.fromString(assetIdStr);
|
|
1884
|
+
const group = chunkYEF5FL6E_cjs.AssetGroup.create(assetId, null, inputs ?? [], outputs ?? [], []);
|
|
1769
1885
|
groups.push(group);
|
|
1770
1886
|
}
|
|
1771
|
-
return
|
|
1887
|
+
return chunkYEF5FL6E_cjs.Packet.create(groups);
|
|
1772
1888
|
}
|
|
1773
1889
|
function selectCoinsWithAsset(coins, assetId, requiredAmount) {
|
|
1774
1890
|
const coinsWithAsset = coins.filter((coin) => coin.assets?.some((a) => a.assetId === assetId));
|
|
@@ -1873,8 +1989,8 @@ function buildOffchainTx(inputs, outputs, serverUnrollScript) {
|
|
|
1873
1989
|
function buildVirtualTx(inputs, outputs) {
|
|
1874
1990
|
let lockTime = 0n;
|
|
1875
1991
|
for (const input of inputs) {
|
|
1876
|
-
const tapscript =
|
|
1877
|
-
if (
|
|
1992
|
+
const tapscript = chunkHXDZ2QTW_cjs.decodeTapscript(chunkHXDZ2QTW_cjs.scriptFromTapLeafScript(input.tapLeafScript));
|
|
1993
|
+
if (chunkHXDZ2QTW_cjs.CLTVMultisigTapscript.is(tapscript)) {
|
|
1878
1994
|
if (lockTime !== 0n) {
|
|
1879
1995
|
if (isSeconds(lockTime) !== isSeconds(tapscript.params.absoluteTimelock)) {
|
|
1880
1996
|
throw new Error("cannot mix seconds and blocks locktime");
|
|
@@ -1885,7 +2001,7 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
1885
2001
|
}
|
|
1886
2002
|
}
|
|
1887
2003
|
}
|
|
1888
|
-
const tx = new
|
|
2004
|
+
const tx = new chunkYEF5FL6E_cjs.Transaction({
|
|
1889
2005
|
version: 3,
|
|
1890
2006
|
lockTime: Number(lockTime)
|
|
1891
2007
|
});
|
|
@@ -1895,12 +2011,12 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
1895
2011
|
index: input.vout,
|
|
1896
2012
|
sequence: lockTime ? btcSigner.DEFAULT_SEQUENCE - 1 : void 0,
|
|
1897
2013
|
witnessUtxo: {
|
|
1898
|
-
script:
|
|
2014
|
+
script: chunkHXDZ2QTW_cjs.VtxoScript.decode(input.tapTree).pkScript,
|
|
1899
2015
|
amount: BigInt(input.value)
|
|
1900
2016
|
},
|
|
1901
2017
|
tapLeafScript: [input.tapLeafScript]
|
|
1902
2018
|
});
|
|
1903
|
-
|
|
2019
|
+
chunkYEF5FL6E_cjs.setArkPsbtField(tx, i, chunkYEF5FL6E_cjs.VtxoTaprootTree, input.tapTree);
|
|
1904
2020
|
}
|
|
1905
2021
|
for (const output of outputs) {
|
|
1906
2022
|
tx.addOutput(output);
|
|
@@ -1909,8 +2025,8 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
1909
2025
|
return tx;
|
|
1910
2026
|
}
|
|
1911
2027
|
function buildCheckpointTx(vtxo, serverUnrollScript) {
|
|
1912
|
-
const collaborativeClosure =
|
|
1913
|
-
const checkpointVtxoScript = new
|
|
2028
|
+
const collaborativeClosure = chunkHXDZ2QTW_cjs.decodeTapscript(chunkHXDZ2QTW_cjs.scriptFromTapLeafScript(vtxo.tapLeafScript));
|
|
2029
|
+
const checkpointVtxoScript = new chunkHXDZ2QTW_cjs.VtxoScript([
|
|
1914
2030
|
serverUnrollScript.script,
|
|
1915
2031
|
collaborativeClosure.script
|
|
1916
2032
|
]);
|
|
@@ -2054,7 +2170,7 @@ function combineTapscriptSigs(signedTx, originalTx) {
|
|
|
2054
2170
|
}
|
|
2055
2171
|
function isValidArkAddress(address) {
|
|
2056
2172
|
try {
|
|
2057
|
-
|
|
2173
|
+
chunkHXDZ2QTW_cjs.ArkAddress.decode(address);
|
|
2058
2174
|
return true;
|
|
2059
2175
|
} catch (e) {
|
|
2060
2176
|
return false;
|
|
@@ -2333,7 +2449,7 @@ function extendCoinWithTapscript(boardingTapscript, utxo) {
|
|
|
2333
2449
|
};
|
|
2334
2450
|
}
|
|
2335
2451
|
function deriveContractTapscripts(contract) {
|
|
2336
|
-
const handler =
|
|
2452
|
+
const handler = chunk32YKLQPS_cjs.contractHandlers.get(contract.type);
|
|
2337
2453
|
if (!handler) {
|
|
2338
2454
|
throw new Error(`No handler for contract type '${contract.type}'`);
|
|
2339
2455
|
}
|
|
@@ -2403,7 +2519,7 @@ function validateRecipients(recipients, dustAmount) {
|
|
|
2403
2519
|
for (const recipient of recipients) {
|
|
2404
2520
|
let address;
|
|
2405
2521
|
try {
|
|
2406
|
-
address =
|
|
2522
|
+
address = chunkHXDZ2QTW_cjs.ArkAddress.decode(recipient.address);
|
|
2407
2523
|
} catch (e) {
|
|
2408
2524
|
throw new Error(`Invalid Arkade address: ${recipient.address}`);
|
|
2409
2525
|
}
|
|
@@ -3008,11 +3124,11 @@ var VtxoManager = class _VtxoManager {
|
|
|
3008
3124
|
`Sweep not economical: output ${outputAmount} sats after ${fee} sats fee is below dust (${dustAmount} sats)`
|
|
3009
3125
|
);
|
|
3010
3126
|
}
|
|
3011
|
-
const tx = new
|
|
3127
|
+
const tx = new chunkYEF5FL6E_cjs.Transaction();
|
|
3012
3128
|
for (const utxo of expiredUtxos) {
|
|
3013
|
-
const utxoScript =
|
|
3129
|
+
const utxoScript = chunkHXDZ2QTW_cjs.VtxoScript.decode(utxo.tapTree);
|
|
3014
3130
|
const utxoExitLeaf = utxoScript.leaves.find(
|
|
3015
|
-
(leaf) =>
|
|
3131
|
+
(leaf) => chunkHXDZ2QTW_cjs.CSVMultisigTapscript.isScriptValid(chunkHXDZ2QTW_cjs.scriptFromTapLeafScript(leaf)) === true
|
|
3016
3132
|
);
|
|
3017
3133
|
if (!utxoExitLeaf) {
|
|
3018
3134
|
throw new Error(
|
|
@@ -3027,7 +3143,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
3027
3143
|
amount: BigInt(utxo.value)
|
|
3028
3144
|
},
|
|
3029
3145
|
tapLeafScript: [utxoExitLeaf],
|
|
3030
|
-
sequence:
|
|
3146
|
+
sequence: chunkHXDZ2QTW_cjs.getSequence(utxoExitLeaf)
|
|
3031
3147
|
});
|
|
3032
3148
|
}
|
|
3033
3149
|
tx.addOutputAddress(boardingAddress, outputAmount, this.getNetwork());
|
|
@@ -3515,7 +3631,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
3515
3631
|
/** Decodes the boarding tapscript exit path to extract the CSV timelock. */
|
|
3516
3632
|
getBoardingTimelock() {
|
|
3517
3633
|
const wallet = this.getSweepWallet();
|
|
3518
|
-
const exitScript =
|
|
3634
|
+
const exitScript = chunkHXDZ2QTW_cjs.CSVMultisigTapscript.decode(
|
|
3519
3635
|
base.hex.decode(wallet.boardingTapscript.exitScript)
|
|
3520
3636
|
);
|
|
3521
3637
|
return exitScript.params.timelock;
|
|
@@ -3646,7 +3762,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
3646
3762
|
* or doesn't carry the metadata.
|
|
3647
3763
|
*/
|
|
3648
3764
|
extractSpentOutpoint(error) {
|
|
3649
|
-
const ark =
|
|
3765
|
+
const ark = chunkYEF5FL6E_cjs.maybeArkError(error);
|
|
3650
3766
|
if (!ark || ark.name !== "VTXO_ALREADY_SPENT") return void 0;
|
|
3651
3767
|
const raw = ark.metadata?.vtxo_outpoint;
|
|
3652
3768
|
if (typeof raw !== "string") return void 0;
|
|
@@ -3861,7 +3977,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
3861
3977
|
const arkAddress = await this.wallet.getAddress();
|
|
3862
3978
|
const outputFee = estimator.evalOffchainOutput({
|
|
3863
3979
|
amount: totalAmount,
|
|
3864
|
-
script: base.hex.encode(
|
|
3980
|
+
script: base.hex.encode(chunkHXDZ2QTW_cjs.ArkAddress.decode(arkAddress).pkScript)
|
|
3865
3981
|
});
|
|
3866
3982
|
totalAmount -= BigInt(outputFee.satoshis);
|
|
3867
3983
|
if (totalAmount < dustAmount) return;
|
|
@@ -3941,7 +4057,7 @@ var ArkNote = class _ArkNote {
|
|
|
3941
4057
|
this.value = value;
|
|
3942
4058
|
this.HRP = HRP;
|
|
3943
4059
|
const preimageHash = utils_js.sha256(this.preimage);
|
|
3944
|
-
this.vtxoScript = new
|
|
4060
|
+
this.vtxoScript = new chunkHXDZ2QTW_cjs.VtxoScript([noteTapscript(preimageHash)]);
|
|
3945
4061
|
const leaf = this.vtxoScript.leaves[0];
|
|
3946
4062
|
this.txid = base.hex.encode(new Uint8Array(preimageHash).reverse());
|
|
3947
4063
|
this.tapTree = this.vtxoScript.encode();
|
|
@@ -4557,7 +4673,7 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
4557
4673
|
const virtualCoins = await this.wallet.getVtxos({
|
|
4558
4674
|
withRecoverable: false
|
|
4559
4675
|
});
|
|
4560
|
-
const controlAssetRef = params.controlAssetId ?
|
|
4676
|
+
const controlAssetRef = params.controlAssetId ? chunkYEF5FL6E_cjs.AssetRef.fromId(chunkYEF5FL6E_cjs.AssetId.fromString(params.controlAssetId)) : null;
|
|
4561
4677
|
const coinSelection = selectVirtualCoins(virtualCoins, Number(this.wallet.dustAmount));
|
|
4562
4678
|
let totalBtcSelected = 0n;
|
|
4563
4679
|
const assetChanges = /* @__PURE__ */ new Map();
|
|
@@ -4570,8 +4686,8 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
4570
4686
|
}
|
|
4571
4687
|
}
|
|
4572
4688
|
const groups = [];
|
|
4573
|
-
const issuedAssetOutput =
|
|
4574
|
-
const issuedAssetGroup =
|
|
4689
|
+
const issuedAssetOutput = chunkYEF5FL6E_cjs.AssetOutput.create(0, params.amount);
|
|
4690
|
+
const issuedAssetGroup = chunkYEF5FL6E_cjs.AssetGroup.create(
|
|
4575
4691
|
null,
|
|
4576
4692
|
controlAssetRef,
|
|
4577
4693
|
[],
|
|
@@ -4586,28 +4702,28 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
4586
4702
|
for (const [inputIndex, assets] of assetInputs) {
|
|
4587
4703
|
for (const asset of assets) {
|
|
4588
4704
|
if (asset.assetId !== assetId) continue;
|
|
4589
|
-
changeInputs.push(
|
|
4705
|
+
changeInputs.push(chunkYEF5FL6E_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
4590
4706
|
}
|
|
4591
4707
|
}
|
|
4592
4708
|
groups.push(
|
|
4593
|
-
|
|
4594
|
-
|
|
4709
|
+
chunkYEF5FL6E_cjs.AssetGroup.create(
|
|
4710
|
+
chunkYEF5FL6E_cjs.AssetId.fromString(assetId),
|
|
4595
4711
|
null,
|
|
4596
4712
|
changeInputs,
|
|
4597
|
-
[
|
|
4713
|
+
[chunkYEF5FL6E_cjs.AssetOutput.create(0, amount)],
|
|
4598
4714
|
[]
|
|
4599
4715
|
)
|
|
4600
4716
|
);
|
|
4601
4717
|
}
|
|
4602
4718
|
}
|
|
4603
4719
|
const address = await this.wallet.getAddress();
|
|
4604
|
-
const outputAddress =
|
|
4720
|
+
const outputAddress = chunkHXDZ2QTW_cjs.ArkAddress.decode(address);
|
|
4605
4721
|
const outputs = [
|
|
4606
4722
|
{
|
|
4607
4723
|
script: outputAddress.pkScript,
|
|
4608
4724
|
amount: BigInt(totalBtcSelected)
|
|
4609
4725
|
},
|
|
4610
|
-
Extension.create([
|
|
4726
|
+
Extension.create([chunkYEF5FL6E_cjs.Packet.create(groups)]).txOut()
|
|
4611
4727
|
];
|
|
4612
4728
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(
|
|
4613
4729
|
coinSelection.inputs,
|
|
@@ -4615,7 +4731,7 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
4615
4731
|
);
|
|
4616
4732
|
return {
|
|
4617
4733
|
arkTxId: arkTxid,
|
|
4618
|
-
assetId:
|
|
4734
|
+
assetId: chunkYEF5FL6E_cjs.AssetId.create(arkTxid, 0).toString()
|
|
4619
4735
|
};
|
|
4620
4736
|
}
|
|
4621
4737
|
/**
|
|
@@ -4687,16 +4803,16 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
4687
4803
|
for (const [inputIndex, assets] of assetInputs) {
|
|
4688
4804
|
for (const asset of assets) {
|
|
4689
4805
|
if (asset.assetId !== params.assetId) continue;
|
|
4690
|
-
reissueInputs.push(
|
|
4806
|
+
reissueInputs.push(chunkYEF5FL6E_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
4691
4807
|
}
|
|
4692
4808
|
}
|
|
4693
4809
|
const totalAssetAmount = assetToReissueAmount + params.amount;
|
|
4694
|
-
const reissueAssetIdObj =
|
|
4695
|
-
const reissueAssetGroup =
|
|
4810
|
+
const reissueAssetIdObj = chunkYEF5FL6E_cjs.AssetId.fromString(params.assetId);
|
|
4811
|
+
const reissueAssetGroup = chunkYEF5FL6E_cjs.AssetGroup.create(
|
|
4696
4812
|
reissueAssetIdObj,
|
|
4697
4813
|
null,
|
|
4698
4814
|
reissueInputs,
|
|
4699
|
-
[
|
|
4815
|
+
[chunkYEF5FL6E_cjs.AssetOutput.create(0, totalAssetAmount)],
|
|
4700
4816
|
[]
|
|
4701
4817
|
);
|
|
4702
4818
|
const groups = [reissueAssetGroup];
|
|
@@ -4705,27 +4821,27 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
4705
4821
|
for (const [inputIndex, assets] of assetInputs) {
|
|
4706
4822
|
for (const asset of assets) {
|
|
4707
4823
|
if (asset.assetId !== assetId) continue;
|
|
4708
|
-
changeInputs.push(
|
|
4824
|
+
changeInputs.push(chunkYEF5FL6E_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
4709
4825
|
}
|
|
4710
4826
|
}
|
|
4711
4827
|
groups.push(
|
|
4712
|
-
|
|
4713
|
-
|
|
4828
|
+
chunkYEF5FL6E_cjs.AssetGroup.create(
|
|
4829
|
+
chunkYEF5FL6E_cjs.AssetId.fromString(assetId),
|
|
4714
4830
|
null,
|
|
4715
4831
|
changeInputs,
|
|
4716
|
-
[
|
|
4832
|
+
[chunkYEF5FL6E_cjs.AssetOutput.create(0, amount)],
|
|
4717
4833
|
[]
|
|
4718
4834
|
)
|
|
4719
4835
|
);
|
|
4720
4836
|
}
|
|
4721
4837
|
const address = await this.wallet.getAddress();
|
|
4722
|
-
const outputAddress =
|
|
4838
|
+
const outputAddress = chunkHXDZ2QTW_cjs.ArkAddress.decode(address);
|
|
4723
4839
|
const outputs = [
|
|
4724
4840
|
{
|
|
4725
4841
|
script: outputAddress.pkScript,
|
|
4726
4842
|
amount: BigInt(totalBtcSelected)
|
|
4727
4843
|
},
|
|
4728
|
-
Extension.create([
|
|
4844
|
+
Extension.create([chunkYEF5FL6E_cjs.Packet.create(groups)]).txOut()
|
|
4729
4845
|
];
|
|
4730
4846
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
|
|
4731
4847
|
return arkTxid;
|
|
@@ -4792,27 +4908,27 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
4792
4908
|
for (const [inputIndex, assets] of assetInputs) {
|
|
4793
4909
|
for (const asset of assets) {
|
|
4794
4910
|
if (asset.assetId !== assetId) continue;
|
|
4795
|
-
changeInputs.push(
|
|
4911
|
+
changeInputs.push(chunkYEF5FL6E_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
4796
4912
|
}
|
|
4797
4913
|
}
|
|
4798
4914
|
groups.push(
|
|
4799
|
-
|
|
4800
|
-
|
|
4915
|
+
chunkYEF5FL6E_cjs.AssetGroup.create(
|
|
4916
|
+
chunkYEF5FL6E_cjs.AssetId.fromString(assetId),
|
|
4801
4917
|
null,
|
|
4802
4918
|
changeInputs,
|
|
4803
|
-
amount > 0n ? [
|
|
4919
|
+
amount > 0n ? [chunkYEF5FL6E_cjs.AssetOutput.create(0, amount)] : [],
|
|
4804
4920
|
[]
|
|
4805
4921
|
)
|
|
4806
4922
|
);
|
|
4807
4923
|
}
|
|
4808
4924
|
const address = await this.wallet.getAddress();
|
|
4809
|
-
const outputAddress =
|
|
4925
|
+
const outputAddress = chunkHXDZ2QTW_cjs.ArkAddress.decode(address);
|
|
4810
4926
|
const outputs = [
|
|
4811
4927
|
{
|
|
4812
4928
|
script: outputAddress.pkScript,
|
|
4813
4929
|
amount: BigInt(totalBtcSelected)
|
|
4814
4930
|
},
|
|
4815
|
-
Extension.create([
|
|
4931
|
+
Extension.create([chunkYEF5FL6E_cjs.Packet.create(groups)]).txOut()
|
|
4816
4932
|
];
|
|
4817
4933
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
|
|
4818
4934
|
return arkTxid;
|
|
@@ -4837,7 +4953,7 @@ function castMetadata(metadata) {
|
|
|
4837
4953
|
} else {
|
|
4838
4954
|
throw new Error("Invalid metadata value type");
|
|
4839
4955
|
}
|
|
4840
|
-
md.push(
|
|
4956
|
+
md.push(chunkYEF5FL6E_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
|
|
4841
4957
|
}
|
|
4842
4958
|
return md;
|
|
4843
4959
|
}
|
|
@@ -4855,7 +4971,7 @@ var DelegateManagerImpl = class {
|
|
|
4855
4971
|
if (vtxos.length === 0) {
|
|
4856
4972
|
return { delegated: [], failed: [] };
|
|
4857
4973
|
}
|
|
4858
|
-
const destinationScript =
|
|
4974
|
+
const destinationScript = chunkHXDZ2QTW_cjs.ArkAddress.decode(destination).pkScript;
|
|
4859
4975
|
const arkInfo = await this.arkInfoProvider.getInfo();
|
|
4860
4976
|
const delegateInfo = await this.delegateProvider.getDelegateInfo();
|
|
4861
4977
|
const eligible = vtxos.filter(
|
|
@@ -5003,7 +5119,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
5003
5119
|
const delegateFee = BigInt(Number(fee));
|
|
5004
5120
|
if (delegateFee > 0n) {
|
|
5005
5121
|
outputs.push({
|
|
5006
|
-
script:
|
|
5122
|
+
script: chunkHXDZ2QTW_cjs.ArkAddress.decode(delegateAddress).pkScript,
|
|
5007
5123
|
amount: delegateFee
|
|
5008
5124
|
});
|
|
5009
5125
|
}
|
|
@@ -5036,7 +5152,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
5036
5152
|
destinationScript
|
|
5037
5153
|
);
|
|
5038
5154
|
const forfeitOutputScript = btcSigner.OutScript.encode(
|
|
5039
|
-
btcSigner.Address(
|
|
5155
|
+
btcSigner.Address(chunkHXDZ2QTW_cjs.getNetwork(network)).decode(forfeitAddress)
|
|
5040
5156
|
);
|
|
5041
5157
|
const forfeits = await Promise.all(
|
|
5042
5158
|
vtxos.filter((v) => !isRecoverable(v)).map(async (coin) => {
|
|
@@ -5064,7 +5180,7 @@ async function makeDelegateForfeitTx(input, connectorAmount, delegatePubkey, for
|
|
|
5064
5180
|
index: input.vout,
|
|
5065
5181
|
witnessUtxo: {
|
|
5066
5182
|
amount: BigInt(input.value),
|
|
5067
|
-
script:
|
|
5183
|
+
script: chunkHXDZ2QTW_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
5068
5184
|
},
|
|
5069
5185
|
sighashType: btcSigner.SigHash.ALL_ANYONECANPAY,
|
|
5070
5186
|
tapLeafScript: [delegateTapLeaf]
|
|
@@ -5122,7 +5238,7 @@ async function makeSignedDelegateIntent(identity, coins, outputs, onchainOutputs
|
|
|
5122
5238
|
expire_at: 0,
|
|
5123
5239
|
cosigners_public_keys: cosignerPubKeys
|
|
5124
5240
|
};
|
|
5125
|
-
const proof =
|
|
5241
|
+
const proof = chunkYEF5FL6E_cjs.Intent.create(message, coins, outputs);
|
|
5126
5242
|
const signedProof = await identity.sign(proof);
|
|
5127
5243
|
return {
|
|
5128
5244
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -5140,10 +5256,10 @@ function getDayTimestamp(timestamp) {
|
|
|
5140
5256
|
function findDelegateTapLeaf(vtxo, delegatePubkey) {
|
|
5141
5257
|
if (!vtxo.tapTree) return void 0;
|
|
5142
5258
|
const pk = delegatePubkey.length === 66 ? delegatePubkey.slice(2) : delegatePubkey;
|
|
5143
|
-
const vtxoScript =
|
|
5259
|
+
const vtxoScript = chunkHXDZ2QTW_cjs.VtxoScript.decode(vtxo.tapTree);
|
|
5144
5260
|
return vtxoScript.leaves.find((tapLeaf) => {
|
|
5145
|
-
const arkTapscript =
|
|
5146
|
-
if (!
|
|
5261
|
+
const arkTapscript = chunkHXDZ2QTW_cjs.decodeTapscript(chunkHXDZ2QTW_cjs.scriptFromTapLeafScript(tapLeaf));
|
|
5262
|
+
if (!chunkHXDZ2QTW_cjs.MultisigTapscript.is(arkTapscript)) return false;
|
|
5147
5263
|
return arkTapscript.params.pubkeys.map(base.hex.encode).includes(pk);
|
|
5148
5264
|
});
|
|
5149
5265
|
}
|
|
@@ -5347,7 +5463,7 @@ var InMemoryContractRepository = class {
|
|
|
5347
5463
|
}
|
|
5348
5464
|
};
|
|
5349
5465
|
function scriptFromArkAddress(address) {
|
|
5350
|
-
return base.hex.encode(
|
|
5466
|
+
return base.hex.encode(chunkHXDZ2QTW_cjs.ArkAddress.decode(address).pkScript);
|
|
5351
5467
|
}
|
|
5352
5468
|
|
|
5353
5469
|
// src/repositories/indexedDB/schema.ts
|
|
@@ -5627,7 +5743,13 @@ async function openDatabase(dbName, dbVersion, initDatabase2) {
|
|
|
5627
5743
|
reject(request.error);
|
|
5628
5744
|
};
|
|
5629
5745
|
request.onsuccess = () => {
|
|
5630
|
-
|
|
5746
|
+
const db = request.result;
|
|
5747
|
+
db.onversionchange = () => {
|
|
5748
|
+
db.close();
|
|
5749
|
+
dbCache.delete(dbName);
|
|
5750
|
+
refCounts.delete(dbName);
|
|
5751
|
+
};
|
|
5752
|
+
resolve(db);
|
|
5631
5753
|
};
|
|
5632
5754
|
request.onupgradeneeded = (event) => {
|
|
5633
5755
|
const db = request.result;
|
|
@@ -6865,7 +6987,7 @@ var ContractWatcher = class {
|
|
|
6865
6987
|
this.connectionState = "connected";
|
|
6866
6988
|
this.reconnectAttempts = 0;
|
|
6867
6989
|
this.listenLoop().catch((e) => {
|
|
6868
|
-
if (
|
|
6990
|
+
if (chunkYEF5FL6E_cjs.isEventSourceError(e)) {
|
|
6869
6991
|
console.debug("ContractWatcher subscription disconnected; reconnecting");
|
|
6870
6992
|
} else {
|
|
6871
6993
|
console.error(e);
|
|
@@ -7016,7 +7138,7 @@ var ContractWatcher = class {
|
|
|
7016
7138
|
this.subscriptionId
|
|
7017
7139
|
);
|
|
7018
7140
|
} catch (error) {
|
|
7019
|
-
const isStale = error instanceof Error && /subscription\
|
|
7141
|
+
const isStale = error instanceof Error && /subscription\b.*\bnot\s+found/i.test(error.message);
|
|
7020
7142
|
if (this.subscriptionId && isStale) {
|
|
7021
7143
|
this.subscriptionId = void 0;
|
|
7022
7144
|
this.subscriptionId = await this.config.indexerProvider.subscribeForScripts(scriptsToWatch);
|
|
@@ -7309,7 +7431,7 @@ var ContractManager = class _ContractManager {
|
|
|
7309
7431
|
* `persisted` is `true`.
|
|
7310
7432
|
*/
|
|
7311
7433
|
async upsertContract(params) {
|
|
7312
|
-
const handler =
|
|
7434
|
+
const handler = chunk32YKLQPS_cjs.contractHandlers.get(params.type);
|
|
7313
7435
|
if (!handler) {
|
|
7314
7436
|
throw new Error(`No handler registered for contract type '${params.type}'`);
|
|
7315
7437
|
}
|
|
@@ -7392,7 +7514,7 @@ var ContractManager = class _ContractManager {
|
|
|
7392
7514
|
`scanContracts: batchSize must be a positive integer (got ${String(opts.batchSize)})`
|
|
7393
7515
|
);
|
|
7394
7516
|
}
|
|
7395
|
-
const registered =
|
|
7517
|
+
const registered = chunk32YKLQPS_cjs.contractHandlers.getRegisteredTypes().map((t) => chunk32YKLQPS_cjs.contractHandlers.get(t)).filter(isDiscoverable);
|
|
7396
7518
|
const discoverables = [
|
|
7397
7519
|
...registered.filter((h) => h.type === "boarding"),
|
|
7398
7520
|
...registered.filter((h) => h.type !== "boarding")
|
|
@@ -7576,7 +7698,7 @@ var ContractManager = class _ContractManager {
|
|
|
7576
7698
|
const { contractScript, collaborative = true, walletPubKey, vtxo } = options;
|
|
7577
7699
|
const [contract] = await this.getContracts({ script: contractScript });
|
|
7578
7700
|
if (!contract) return [];
|
|
7579
|
-
const handler =
|
|
7701
|
+
const handler = chunk32YKLQPS_cjs.contractHandlers.get(contract.type);
|
|
7580
7702
|
if (!handler) return [];
|
|
7581
7703
|
const script = handler.createScript(contract.params);
|
|
7582
7704
|
const context = {
|
|
@@ -7596,7 +7718,7 @@ var ContractManager = class _ContractManager {
|
|
|
7596
7718
|
const { contractScript, collaborative = true, walletPubKey } = options;
|
|
7597
7719
|
const [contract] = await this.getContracts({ script: contractScript });
|
|
7598
7720
|
if (!contract) return [];
|
|
7599
|
-
const handler =
|
|
7721
|
+
const handler = chunk32YKLQPS_cjs.contractHandlers.get(contract.type);
|
|
7600
7722
|
if (!handler) return [];
|
|
7601
7723
|
const script = handler.createScript(contract.params);
|
|
7602
7724
|
const context = {
|
|
@@ -7830,7 +7952,7 @@ var ContractManager = class _ContractManager {
|
|
|
7830
7952
|
}
|
|
7831
7953
|
return result;
|
|
7832
7954
|
}
|
|
7833
|
-
async fetchContractVtxosBulk(contracts, pageSize =
|
|
7955
|
+
async fetchContractVtxosBulk(contracts, pageSize = chunk32YKLQPS_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
|
|
7834
7956
|
if (contracts.length === 0) {
|
|
7835
7957
|
return /* @__PURE__ */ new Map();
|
|
7836
7958
|
}
|
|
@@ -8006,7 +8128,7 @@ var HDDescriptorProvider = class _HDDescriptorProvider {
|
|
|
8006
8128
|
*/
|
|
8007
8129
|
materializeDescriptorAt(index) {
|
|
8008
8130
|
const descriptor = this.identity.descriptor;
|
|
8009
|
-
const network =
|
|
8131
|
+
const network = chunk32YKLQPS_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
8010
8132
|
const expansion = descriptorsScure.expand({ descriptor, network, index });
|
|
8011
8133
|
const keyInfo = expansion.expansionMap?.["@0"];
|
|
8012
8134
|
if (!keyInfo?.keyExpression) {
|
|
@@ -8149,7 +8271,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
|
|
|
8149
8271
|
const provider = await resolveDescriptorProvider(config, setup.walletRepository);
|
|
8150
8272
|
if (!provider) return void 0;
|
|
8151
8273
|
const allowSilentFallback = (config.walletMode ?? "auto") === "auto";
|
|
8152
|
-
const expectedContractType = setup.offchainTapscript instanceof
|
|
8274
|
+
const expectedContractType = setup.offchainTapscript instanceof chunk32YKLQPS_cjs.DelegateVtxo.Script ? "delegate" : "default";
|
|
8153
8275
|
const factoryOpts = {
|
|
8154
8276
|
walletRepository: setup.walletRepository,
|
|
8155
8277
|
contractRepository: setup.contractRepository,
|
|
@@ -8332,7 +8454,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
|
|
|
8332
8454
|
const newAddress = newTapscript.address(wallet.network.hrp, wallet.arkServerPublicKey).encode();
|
|
8333
8455
|
const manager = await wallet.getContractManager();
|
|
8334
8456
|
const csvTimelock = newTapscript.options.csvTimelock;
|
|
8335
|
-
const csvTimelockStr =
|
|
8457
|
+
const csvTimelockStr = chunkHXDZ2QTW_cjs.timelockToSequence(csvTimelock).toString();
|
|
8336
8458
|
const serverPubKeyHex = base.hex.encode(newTapscript.options.serverPubKey);
|
|
8337
8459
|
const baseParams = {
|
|
8338
8460
|
script: newScript,
|
|
@@ -8346,11 +8468,11 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
|
|
|
8346
8468
|
// produce unsigned PSBTs that the server rejects with
|
|
8347
8469
|
// `INVALID_PSBT_INPUT (5): missing tapscript spend sig`.
|
|
8348
8470
|
metadata: {
|
|
8349
|
-
source:
|
|
8471
|
+
source: chunk32YKLQPS_cjs.WALLET_RECEIVE_SOURCE,
|
|
8350
8472
|
signingDescriptor: descriptor
|
|
8351
8473
|
}
|
|
8352
8474
|
};
|
|
8353
|
-
if (newTapscript instanceof
|
|
8475
|
+
if (newTapscript instanceof chunk32YKLQPS_cjs.DelegateVtxo.Script) {
|
|
8354
8476
|
await manager.createContract({
|
|
8355
8477
|
...baseParams,
|
|
8356
8478
|
type: "delegate",
|
|
@@ -8382,7 +8504,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
|
|
|
8382
8504
|
};
|
|
8383
8505
|
function deriveLeafPubkey(descriptor) {
|
|
8384
8506
|
try {
|
|
8385
|
-
return
|
|
8507
|
+
return chunk32YKLQPS_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
8386
8508
|
} catch (e) {
|
|
8387
8509
|
throw new NonRangeableDescriptorError(
|
|
8388
8510
|
"Cannot derive leaf pubkey: descriptor is not a materialized, parsable tr(...) shape.",
|
|
@@ -8391,10 +8513,10 @@ function deriveLeafPubkey(descriptor) {
|
|
|
8391
8513
|
}
|
|
8392
8514
|
}
|
|
8393
8515
|
function rebuildTapscript(current, pubKey) {
|
|
8394
|
-
if (current instanceof
|
|
8395
|
-
return new
|
|
8516
|
+
if (current instanceof chunk32YKLQPS_cjs.DelegateVtxo.Script) {
|
|
8517
|
+
return new chunk32YKLQPS_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
|
|
8396
8518
|
}
|
|
8397
|
-
return new
|
|
8519
|
+
return new chunk32YKLQPS_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
|
|
8398
8520
|
}
|
|
8399
8521
|
async function pickActiveReceive(contractRepository, serverPubKey, expectedType) {
|
|
8400
8522
|
const candidates = await contractRepository.getContracts({
|
|
@@ -8403,7 +8525,7 @@ async function pickActiveReceive(contractRepository, serverPubKey, expectedType)
|
|
|
8403
8525
|
});
|
|
8404
8526
|
const serverPubKeyHex = base.hex.encode(serverPubKey);
|
|
8405
8527
|
const matching = candidates.filter(
|
|
8406
|
-
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source ===
|
|
8528
|
+
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunk32YKLQPS_cjs.WALLET_RECEIVE_SOURCE
|
|
8407
8529
|
).sort((a, b) => {
|
|
8408
8530
|
if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
|
|
8409
8531
|
return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
|
|
@@ -8576,12 +8698,12 @@ var InputSignerRouter = class {
|
|
|
8576
8698
|
};
|
|
8577
8699
|
|
|
8578
8700
|
// src/wallet/wallet.ts
|
|
8579
|
-
var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl ||
|
|
8701
|
+
var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl || chunkHXDZ2QTW_cjs.DEFAULT_ARKADE_SERVER_URL;
|
|
8580
8702
|
function intentProofJobs(coins) {
|
|
8581
8703
|
if (coins.length === 0) return [];
|
|
8582
8704
|
const coinJobs = coins.map((coin, i) => ({
|
|
8583
8705
|
index: i + 1,
|
|
8584
|
-
lookupScript:
|
|
8706
|
+
lookupScript: chunkHXDZ2QTW_cjs.VtxoScript.decode(coin.tapTree).pkScript
|
|
8585
8707
|
}));
|
|
8586
8708
|
return [{ index: 0, lookupScript: coinJobs[0].lookupScript }, ...coinJobs];
|
|
8587
8709
|
}
|
|
@@ -8605,7 +8727,7 @@ function dedupeTimelocks(timelocks) {
|
|
|
8605
8727
|
const seen = /* @__PURE__ */ new Set();
|
|
8606
8728
|
const deduped = [];
|
|
8607
8729
|
for (const timelock of timelocks) {
|
|
8608
|
-
const sequence =
|
|
8730
|
+
const sequence = chunkHXDZ2QTW_cjs.timelockToSequence(timelock).toString();
|
|
8609
8731
|
if (seen.has(sequence)) continue;
|
|
8610
8732
|
seen.add(sequence);
|
|
8611
8733
|
deduped.push(timelock);
|
|
@@ -8622,7 +8744,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
|
|
|
8622
8744
|
state: "active"
|
|
8623
8745
|
});
|
|
8624
8746
|
const newest = candidates.filter(
|
|
8625
|
-
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source ===
|
|
8747
|
+
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunk32YKLQPS_cjs.WALLET_RECEIVE_SOURCE
|
|
8626
8748
|
).sort((a, b) => {
|
|
8627
8749
|
if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
|
|
8628
8750
|
return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
|
|
@@ -8630,7 +8752,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
|
|
|
8630
8752
|
if (!newest?.params.pubKey) return baseline;
|
|
8631
8753
|
try {
|
|
8632
8754
|
const pubKey = base.hex.decode(newest.params.pubKey);
|
|
8633
|
-
return new
|
|
8755
|
+
return new chunk32YKLQPS_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
|
|
8634
8756
|
} catch (e) {
|
|
8635
8757
|
console.warn("Skipping malformed boarding contract at boot", newest.script, e);
|
|
8636
8758
|
return baseline;
|
|
@@ -8677,6 +8799,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
8677
8799
|
// already on their way out. The set is in-memory only: a process crash
|
|
8678
8800
|
// clears it, and a stale entry only hides a VTXO (never spends one).
|
|
8679
8801
|
_pendingSpendOutpoints = /* @__PURE__ */ new Set();
|
|
8802
|
+
/** Activity resolvers consumed by {@link getActivityHistory}. */
|
|
8803
|
+
activity = createDefaultActivityRegistry();
|
|
8680
8804
|
get assetManager() {
|
|
8681
8805
|
return this._assetManager;
|
|
8682
8806
|
}
|
|
@@ -8821,7 +8945,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
8821
8945
|
*/
|
|
8822
8946
|
static async setupWalletConfig(config, pubKey) {
|
|
8823
8947
|
const arkadeServerUrl = getArkadeServerUrl(config);
|
|
8824
|
-
const arkProvider = config.arkProvider || new
|
|
8948
|
+
const arkProvider = config.arkProvider || new chunkYEF5FL6E_cjs.RestArkProvider(arkadeServerUrl);
|
|
8825
8949
|
let indexerProvider = config.indexerProvider;
|
|
8826
8950
|
if (!indexerProvider) {
|
|
8827
8951
|
let indexerUrl = config.indexerUrl;
|
|
@@ -8838,10 +8962,10 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
8838
8962
|
indexerUrl = arkadeServerUrl;
|
|
8839
8963
|
}
|
|
8840
8964
|
}
|
|
8841
|
-
indexerProvider = new
|
|
8965
|
+
indexerProvider = new chunkYEF5FL6E_cjs.RestIndexerProvider(indexerUrl);
|
|
8842
8966
|
}
|
|
8843
8967
|
const info = await arkProvider.getInfo();
|
|
8844
|
-
const network =
|
|
8968
|
+
const network = chunkHXDZ2QTW_cjs.getNetwork(info.network);
|
|
8845
8969
|
if ("descriptor" in config.identity) {
|
|
8846
8970
|
const descriptor = config.identity.descriptor;
|
|
8847
8971
|
const identityIsMainnet = !descriptor.includes("tpub");
|
|
@@ -8882,17 +9006,17 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
8882
9006
|
type: info.boardingExitDelay < 512n ? "blocks" : "seconds"
|
|
8883
9007
|
};
|
|
8884
9008
|
const serverPubKey = base.hex.decode(info.signerPubkey).slice(1);
|
|
8885
|
-
const delegatePubKey = config.delegateProvider ? await config.delegateProvider.getDelegateInfo().then((info2) => base.hex.decode(info2.pubkey).slice(1)) : config.delegatorProvider ? await config.delegatorProvider.getDelegateInfo().then((info2) => base.hex.decode(info2.pubkey).slice(1)) : void 0;
|
|
9009
|
+
const delegatePubKey = config.delegateProvider ? await config.delegateProvider.getDelegateInfo().then((info2) => base.hex.decode(info2.pubkey).slice(1)).catch(() => void 0) : config.delegatorProvider ? await config.delegatorProvider.getDelegateInfo().then((info2) => base.hex.decode(info2.pubkey).slice(1)).catch(() => void 0) : void 0;
|
|
8886
9010
|
const offchainOptions = {
|
|
8887
9011
|
pubKey,
|
|
8888
9012
|
serverPubKey,
|
|
8889
9013
|
csvTimelock: exitTimelock
|
|
8890
9014
|
};
|
|
8891
|
-
const offchainTapscript = !delegatePubKey ? new
|
|
8892
|
-
const boardingTapscript =
|
|
9015
|
+
const offchainTapscript = !delegatePubKey ? new chunk32YKLQPS_cjs.DefaultVtxo.Script(offchainOptions) : new chunk32YKLQPS_cjs.DelegateVtxo.Script({ ...offchainOptions, delegatePubKey });
|
|
9016
|
+
const boardingTapscript = chunk32YKLQPS_cjs.BoardingContractHandler.createScript({
|
|
8893
9017
|
pubKey: base.hex.encode(pubKey),
|
|
8894
9018
|
serverPubKey: base.hex.encode(serverPubKey),
|
|
8895
|
-
csvTimelock:
|
|
9019
|
+
csvTimelock: chunkHXDZ2QTW_cjs.timelockToSequence(boardingTimelock).toString()
|
|
8896
9020
|
});
|
|
8897
9021
|
const walletRepository = config.storage?.walletRepository ?? new IndexedDBWalletRepository();
|
|
8898
9022
|
const contractRepository = config.storage?.contractRepository ?? new IndexedDBContractRepository();
|
|
@@ -9073,6 +9197,13 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
9073
9197
|
const getTxCreatedAt = (txid) => this.indexerProvider.getVtxos({ outpoints: [{ txid, vout: 0 }] }).then((res) => res.vtxos[0]?.createdAt.getTime());
|
|
9074
9198
|
return buildTransactionHistory(allVtxos, boardingTxs, commitmentsToIgnore, getTxCreatedAt);
|
|
9075
9199
|
}
|
|
9200
|
+
/**
|
|
9201
|
+
* Wallet history grouped by registered activity resolvers. With no resolver match,
|
|
9202
|
+
* rows bucket by transaction key so send/change pairs stay together.
|
|
9203
|
+
*/
|
|
9204
|
+
async getActivityHistory() {
|
|
9205
|
+
return buildActivities(await this.getTransactionHistory(), this.activity.all());
|
|
9206
|
+
}
|
|
9076
9207
|
/**
|
|
9077
9208
|
* Clear the global VTXO sync cursor, forcing a full re-bootstrap on next sync.
|
|
9078
9209
|
* Useful for recovery after indexer reprocessing or debugging.
|
|
@@ -9080,6 +9211,17 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
9080
9211
|
async clearSyncCursor() {
|
|
9081
9212
|
await clearSyncCursor(this.walletRepository);
|
|
9082
9213
|
}
|
|
9214
|
+
/**
|
|
9215
|
+
* Wipe all locally persisted wallet data (VTXOs, UTXOs, history, sync
|
|
9216
|
+
* cursor, contracts). Create a fresh wallet instance afterward.
|
|
9217
|
+
*/
|
|
9218
|
+
async clear() {
|
|
9219
|
+
try {
|
|
9220
|
+
await this.dispose();
|
|
9221
|
+
} finally {
|
|
9222
|
+
await Promise.all([this.walletRepository.clear(), this.contractRepository.clear()]);
|
|
9223
|
+
}
|
|
9224
|
+
}
|
|
9083
9225
|
/**
|
|
9084
9226
|
* The on-chain (P2TR) addresses of every boarding tapscript this wallet
|
|
9085
9227
|
* uses — the current address plus any historical rotated boarding
|
|
@@ -9192,9 +9334,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
9192
9334
|
async getBoardingTapscripts(allowedSigners) {
|
|
9193
9335
|
const byScript = /* @__PURE__ */ new Map();
|
|
9194
9336
|
const add = (s) => byScript.set(base.hex.encode(s.pkScript), s);
|
|
9195
|
-
const boardingCsv = this.boardingTapscript.options.csvTimelock ??
|
|
9337
|
+
const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunk32YKLQPS_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
9196
9338
|
add(
|
|
9197
|
-
new
|
|
9339
|
+
new chunk32YKLQPS_cjs.DefaultVtxo.Script({
|
|
9198
9340
|
pubKey: await this.identity.xOnlyPublicKey(),
|
|
9199
9341
|
serverPubKey: this.boardingTapscript.options.serverPubKey,
|
|
9200
9342
|
csvTimelock: boardingCsv
|
|
@@ -9209,7 +9351,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
9209
9351
|
for (const c of boardingContracts) {
|
|
9210
9352
|
if (!allowed.has(toXOnlySignerHex(c.params.serverPubKey))) continue;
|
|
9211
9353
|
try {
|
|
9212
|
-
add(
|
|
9354
|
+
add(chunk32YKLQPS_cjs.BoardingContractHandler.createScript(c.params));
|
|
9213
9355
|
} catch (e) {
|
|
9214
9356
|
console.warn("Skipping malformed boarding contract", c.script, e);
|
|
9215
9357
|
}
|
|
@@ -9247,7 +9389,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
9247
9389
|
// Per-row CSV delay decoded from THIS tapscript's exit leaf —
|
|
9248
9390
|
// not the wallet's current boarding timelock, which a signer
|
|
9249
9391
|
// rotation may have changed.
|
|
9250
|
-
csvTimelock:
|
|
9392
|
+
csvTimelock: chunkHXDZ2QTW_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
|
|
9251
9393
|
coins: utxos
|
|
9252
9394
|
});
|
|
9253
9395
|
}
|
|
@@ -9413,7 +9555,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
9413
9555
|
});
|
|
9414
9556
|
for (const contract of contracts) {
|
|
9415
9557
|
if (map.has(contract.script)) continue;
|
|
9416
|
-
const handler =
|
|
9558
|
+
const handler = chunk32YKLQPS_cjs.contractHandlers.get(contract.type);
|
|
9417
9559
|
if (handler) {
|
|
9418
9560
|
const script = handler.createScript(contract.params);
|
|
9419
9561
|
map.set(contract.script, script);
|
|
@@ -9478,7 +9620,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
9478
9620
|
watcherConfig: this.watcherConfig
|
|
9479
9621
|
});
|
|
9480
9622
|
const baselinePubkey = await this.identity.xOnlyPublicKey();
|
|
9481
|
-
const delegatePubKey = this.offchainTapscript instanceof
|
|
9623
|
+
const delegatePubKey = this.offchainTapscript instanceof chunk32YKLQPS_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
|
|
9482
9624
|
const baselineSigners = [
|
|
9483
9625
|
this.offchainTapscript.options.serverPubKey,
|
|
9484
9626
|
...[...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h))
|
|
@@ -9486,8 +9628,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
9486
9628
|
const seenBaselineScripts = /* @__PURE__ */ new Set();
|
|
9487
9629
|
for (const serverPubKey of baselineSigners) {
|
|
9488
9630
|
for (const csvTimelock of this.walletContractTimelocks) {
|
|
9489
|
-
const csvTimelockStr =
|
|
9490
|
-
const defaultScript = new
|
|
9631
|
+
const csvTimelockStr = chunkHXDZ2QTW_cjs.timelockToSequence(csvTimelock).toString();
|
|
9632
|
+
const defaultScript = new chunk32YKLQPS_cjs.DefaultVtxo.Script({
|
|
9491
9633
|
pubKey: baselinePubkey,
|
|
9492
9634
|
serverPubKey,
|
|
9493
9635
|
csvTimelock
|
|
@@ -9508,7 +9650,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
9508
9650
|
});
|
|
9509
9651
|
}
|
|
9510
9652
|
if (delegatePubKey) {
|
|
9511
|
-
const delegateScript = new
|
|
9653
|
+
const delegateScript = new chunk32YKLQPS_cjs.DelegateVtxo.Script({
|
|
9512
9654
|
pubKey: baselinePubkey,
|
|
9513
9655
|
serverPubKey,
|
|
9514
9656
|
delegatePubKey,
|
|
@@ -9532,9 +9674,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
9532
9674
|
}
|
|
9533
9675
|
}
|
|
9534
9676
|
}
|
|
9535
|
-
const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ??
|
|
9677
|
+
const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunk32YKLQPS_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
9536
9678
|
for (const serverPubKey of baselineSigners) {
|
|
9537
|
-
const baselineBoarding = new
|
|
9679
|
+
const baselineBoarding = new chunk32YKLQPS_cjs.DefaultVtxo.Script({
|
|
9538
9680
|
pubKey: baselinePubkey,
|
|
9539
9681
|
serverPubKey,
|
|
9540
9682
|
csvTimelock: boardingCsvTimelock
|
|
@@ -9547,7 +9689,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
9547
9689
|
params: {
|
|
9548
9690
|
pubKey: base.hex.encode(baselineBoarding.options.pubKey),
|
|
9549
9691
|
serverPubKey: base.hex.encode(serverPubKey),
|
|
9550
|
-
csvTimelock:
|
|
9692
|
+
csvTimelock: chunkHXDZ2QTW_cjs.timelockToSequence(boardingCsvTimelock).toString()
|
|
9551
9693
|
},
|
|
9552
9694
|
script: boardingScriptHex,
|
|
9553
9695
|
address: baselineBoarding.address(this.network.hrp, serverPubKey).encode(),
|
|
@@ -9767,25 +9909,25 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
9767
9909
|
return this.getBoardingAddress();
|
|
9768
9910
|
}
|
|
9769
9911
|
const descriptor = await provider.getNextSigningDescriptor();
|
|
9770
|
-
const pubKey =
|
|
9771
|
-
const newBoarding = new
|
|
9912
|
+
const pubKey = chunk32YKLQPS_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
9913
|
+
const newBoarding = new chunk32YKLQPS_cjs.DefaultVtxo.Script({
|
|
9772
9914
|
...this._boardingTapscript.options,
|
|
9773
9915
|
pubKey
|
|
9774
9916
|
});
|
|
9775
|
-
const csvTimelock = newBoarding.options.csvTimelock ??
|
|
9917
|
+
const csvTimelock = newBoarding.options.csvTimelock ?? chunk32YKLQPS_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
9776
9918
|
const manager = await this.getContractManager();
|
|
9777
9919
|
await manager.createContract({
|
|
9778
9920
|
type: "boarding",
|
|
9779
9921
|
params: {
|
|
9780
9922
|
pubKey: base.hex.encode(pubKey),
|
|
9781
9923
|
serverPubKey: base.hex.encode(newBoarding.options.serverPubKey),
|
|
9782
|
-
csvTimelock:
|
|
9924
|
+
csvTimelock: chunkHXDZ2QTW_cjs.timelockToSequence(csvTimelock).toString()
|
|
9783
9925
|
},
|
|
9784
9926
|
script: base.hex.encode(newBoarding.pkScript),
|
|
9785
9927
|
address: newBoarding.address(this.network.hrp, this.arkServerPublicKey).encode(),
|
|
9786
9928
|
state: "active",
|
|
9787
9929
|
metadata: {
|
|
9788
|
-
source:
|
|
9930
|
+
source: chunk32YKLQPS_cjs.WALLET_RECEIVE_SOURCE,
|
|
9789
9931
|
signingDescriptor: descriptor
|
|
9790
9932
|
}
|
|
9791
9933
|
});
|
|
@@ -9824,7 +9966,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
9824
9966
|
const xonly = toXOnlyPubKey(newServerPubKey);
|
|
9825
9967
|
let newServerUnrollScript;
|
|
9826
9968
|
try {
|
|
9827
|
-
newServerUnrollScript =
|
|
9969
|
+
newServerUnrollScript = chunkHXDZ2QTW_cjs.CSVMultisigTapscript.decode(base.hex.decode(checkpointTapscript));
|
|
9828
9970
|
} catch (e) {
|
|
9829
9971
|
throw new Error("Invalid checkpointTapscript from server");
|
|
9830
9972
|
}
|
|
@@ -9852,21 +9994,21 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
9852
9994
|
const [currentBoardingRow] = await manager.getContracts({
|
|
9853
9995
|
script: currentBoardingScript
|
|
9854
9996
|
});
|
|
9855
|
-
const newOffchain = this.offchainTapscript instanceof
|
|
9997
|
+
const newOffchain = this.offchainTapscript instanceof chunk32YKLQPS_cjs.DelegateVtxo.Script ? new chunk32YKLQPS_cjs.DelegateVtxo.Script({
|
|
9856
9998
|
...this.offchainTapscript.options,
|
|
9857
9999
|
serverPubKey: xonly
|
|
9858
|
-
}) : new
|
|
10000
|
+
}) : new chunk32YKLQPS_cjs.DefaultVtxo.Script({
|
|
9859
10001
|
...this.offchainTapscript.options,
|
|
9860
10002
|
serverPubKey: xonly
|
|
9861
10003
|
});
|
|
9862
|
-
const newBoarding = new
|
|
10004
|
+
const newBoarding = new chunk32YKLQPS_cjs.DefaultVtxo.Script({
|
|
9863
10005
|
...this._boardingTapscript.options,
|
|
9864
10006
|
serverPubKey: xonly
|
|
9865
10007
|
});
|
|
9866
|
-
const offchainCsv =
|
|
10008
|
+
const offchainCsv = chunkHXDZ2QTW_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
|
|
9867
10009
|
const newOffchainScript = base.hex.encode(newOffchain.pkScript);
|
|
9868
10010
|
const newOffchainAddress = newOffchain.address(this.network.hrp, xonly).encode();
|
|
9869
|
-
if (newOffchain instanceof
|
|
10011
|
+
if (newOffchain instanceof chunk32YKLQPS_cjs.DelegateVtxo.Script) {
|
|
9870
10012
|
await manager.createContract({
|
|
9871
10013
|
type: "delegate",
|
|
9872
10014
|
params: {
|
|
@@ -9894,13 +10036,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
9894
10036
|
metadata: currentOffchainRow?.metadata
|
|
9895
10037
|
});
|
|
9896
10038
|
}
|
|
9897
|
-
const boardingCsv = newBoarding.options.csvTimelock ??
|
|
10039
|
+
const boardingCsv = newBoarding.options.csvTimelock ?? chunk32YKLQPS_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
9898
10040
|
await manager.createContract({
|
|
9899
10041
|
type: "boarding",
|
|
9900
10042
|
params: {
|
|
9901
10043
|
pubKey: base.hex.encode(newBoarding.options.pubKey),
|
|
9902
10044
|
serverPubKey: base.hex.encode(xonly),
|
|
9903
|
-
csvTimelock:
|
|
10045
|
+
csvTimelock: chunkHXDZ2QTW_cjs.timelockToSequence(boardingCsv).toString()
|
|
9904
10046
|
},
|
|
9905
10047
|
script: base.hex.encode(newBoarding.pkScript),
|
|
9906
10048
|
address: newBoarding.address(this.network.hrp, xonly).encode(),
|
|
@@ -9995,7 +10137,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
9995
10137
|
const hd = provider instanceof HDDescriptorProvider;
|
|
9996
10138
|
const staticDescriptor = hd ? void 0 : `tr(${base.hex.encode(await this.identity.xOnlyPublicKey())})`;
|
|
9997
10139
|
const materialize = (index) => hd ? provider.materializeDescriptorAt(index) : staticDescriptor;
|
|
9998
|
-
const delegatePubKey = this.offchainTapscript instanceof
|
|
10140
|
+
const delegatePubKey = this.offchainTapscript instanceof chunk32YKLQPS_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
|
|
9999
10141
|
const arkInfo = await this.arkProvider.getInfo();
|
|
10000
10142
|
const currentSignerPubKey = toXOnlyPubKey(base.hex.decode(arkInfo.signerPubkey));
|
|
10001
10143
|
const deprecatedSignerPubKeys = arkInfo.deprecatedSigners.map(
|
|
@@ -10014,7 +10156,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
10014
10156
|
csvTimelocks: this.walletContractTimelocks,
|
|
10015
10157
|
// Boarding-exit CSV so the boarding handler can build its
|
|
10016
10158
|
// candidate script (distinct from the unilateral-exit matrix).
|
|
10017
|
-
boardingTimelock: this.boardingTapscript.options.csvTimelock ??
|
|
10159
|
+
boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunk32YKLQPS_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
|
|
10018
10160
|
delegatePubKey
|
|
10019
10161
|
};
|
|
10020
10162
|
const result = await manager.scanContracts({
|
|
@@ -10118,7 +10260,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
10118
10260
|
let serverUnrollScript;
|
|
10119
10261
|
try {
|
|
10120
10262
|
const raw = base.hex.decode(setup.info.checkpointTapscript);
|
|
10121
|
-
serverUnrollScript =
|
|
10263
|
+
serverUnrollScript = chunkHXDZ2QTW_cjs.CSVMultisigTapscript.decode(raw);
|
|
10122
10264
|
} catch (e) {
|
|
10123
10265
|
throw new Error("Invalid checkpointTapscript from server");
|
|
10124
10266
|
}
|
|
@@ -10244,7 +10386,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
10244
10386
|
inputs: params.selectedVtxos,
|
|
10245
10387
|
changeAmount: BigInt(changeAmount)
|
|
10246
10388
|
};
|
|
10247
|
-
const outputAddress =
|
|
10389
|
+
const outputAddress = chunkHXDZ2QTW_cjs.ArkAddress.decode(params.address);
|
|
10248
10390
|
const outputScript = BigInt(params.amount) < this.dustAmount ? outputAddress.subdustPkScript : outputAddress.pkScript;
|
|
10249
10391
|
const outputs = [
|
|
10250
10392
|
{
|
|
@@ -10297,13 +10439,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
10297
10439
|
}
|
|
10298
10440
|
}
|
|
10299
10441
|
const offchainAddress = await this.getAddress();
|
|
10300
|
-
const offchainPkScript =
|
|
10442
|
+
const offchainPkScript = chunkHXDZ2QTW_cjs.ArkAddress.decode(offchainAddress).pkScript;
|
|
10301
10443
|
const offchainOutputScript = base.hex.encode(offchainPkScript);
|
|
10302
10444
|
if (!params) {
|
|
10303
10445
|
const { fees, vtxoMaxAmount } = await this.arkProvider.getInfo();
|
|
10304
10446
|
const estimator = new Estimator(fees.intentFee);
|
|
10305
10447
|
let amount = 0;
|
|
10306
|
-
const exitScript =
|
|
10448
|
+
const exitScript = chunkHXDZ2QTW_cjs.CSVMultisigTapscript.decode(
|
|
10307
10449
|
base.hex.decode(this.boardingTapscript.exitScript)
|
|
10308
10450
|
);
|
|
10309
10451
|
const boardingTimelock = exitScript.params.timelock;
|
|
@@ -10383,7 +10525,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
10383
10525
|
for (const [index, output] of params.outputs.entries()) {
|
|
10384
10526
|
let script;
|
|
10385
10527
|
try {
|
|
10386
|
-
const addr =
|
|
10528
|
+
const addr = chunkHXDZ2QTW_cjs.ArkAddress.decode(output.address);
|
|
10387
10529
|
script = addr.pkScript;
|
|
10388
10530
|
hasOffchainOutputs = true;
|
|
10389
10531
|
} catch {
|
|
@@ -10558,6 +10700,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
10558
10700
|
settlementPsbt = await this._signerRouter.sign(settlementPsbt, [
|
|
10559
10701
|
{ index: i, lookupScript: script }
|
|
10560
10702
|
]);
|
|
10703
|
+
if (!settlementPsbt.getInput(i).tapScriptSig?.length) {
|
|
10704
|
+
throw new Error(await this.unsignableBoardingInputError(input, script));
|
|
10705
|
+
}
|
|
10561
10706
|
hasBoardingUtxos = true;
|
|
10562
10707
|
break;
|
|
10563
10708
|
}
|
|
@@ -10591,7 +10736,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
10591
10736
|
index: input.vout,
|
|
10592
10737
|
witnessUtxo: {
|
|
10593
10738
|
amount: BigInt(input.value),
|
|
10594
|
-
script:
|
|
10739
|
+
script: chunkHXDZ2QTW_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
10595
10740
|
},
|
|
10596
10741
|
sighashType: btcSigner.SigHash.DEFAULT,
|
|
10597
10742
|
tapLeafScript: [input.forfeitTapLeafScript]
|
|
@@ -10610,7 +10755,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
10610
10755
|
forfeitTx = await this._signerRouter.sign(forfeitTx, [
|
|
10611
10756
|
{
|
|
10612
10757
|
index: 0,
|
|
10613
|
-
lookupScript:
|
|
10758
|
+
lookupScript: chunkHXDZ2QTW_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
10614
10759
|
}
|
|
10615
10760
|
]);
|
|
10616
10761
|
signedForfeits.push(base.base64.encode(forfeitTx.toPSBT()));
|
|
@@ -10622,6 +10767,24 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
10622
10767
|
);
|
|
10623
10768
|
}
|
|
10624
10769
|
}
|
|
10770
|
+
// Best-effort: every enrichment is guarded so a secondary failure can't
|
|
10771
|
+
// mask the original signing error.
|
|
10772
|
+
async unsignableBoardingInputError(input, script) {
|
|
10773
|
+
const scriptHex = base.hex.encode(script);
|
|
10774
|
+
let unresolvedAddress = "<undecodable>";
|
|
10775
|
+
try {
|
|
10776
|
+
unresolvedAddress = btcSigner.Address(this.network).encode(btcSigner.OutScript.decode(script));
|
|
10777
|
+
} catch {
|
|
10778
|
+
}
|
|
10779
|
+
let recognized = "<unavailable>";
|
|
10780
|
+
try {
|
|
10781
|
+
const current = await this.getBoardingAddress();
|
|
10782
|
+
const all = await this.getBoardingAddresses();
|
|
10783
|
+
recognized = `current=${current}; all=[${all.join(", ")}]`;
|
|
10784
|
+
} catch {
|
|
10785
|
+
}
|
|
10786
|
+
return `failed to sign boarding input ${input.txid}:${input.vout}: signer did not recognize script ${scriptHex} (${unresolvedAddress}); would have reached arkd unsigned and been rejected as "not a wallet script". Recognized boarding addresses: ${recognized}. Likely a rotated boarding address with a missing contract row.`;
|
|
10787
|
+
}
|
|
10625
10788
|
/**
|
|
10626
10789
|
* Create a batch event handler for settlement flows.
|
|
10627
10790
|
*
|
|
@@ -10650,7 +10813,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
10650
10813
|
if (skip) {
|
|
10651
10814
|
return { skip };
|
|
10652
10815
|
}
|
|
10653
|
-
const sweepTapscript =
|
|
10816
|
+
const sweepTapscript = chunkHXDZ2QTW_cjs.CSVMultisigTapscript.encode({
|
|
10654
10817
|
timelock: {
|
|
10655
10818
|
value: event.batchExpiry,
|
|
10656
10819
|
type: event.batchExpiry >= 512n ? "seconds" : "blocks"
|
|
@@ -10754,7 +10917,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
10754
10917
|
try {
|
|
10755
10918
|
return await this.arkProvider.registerIntent(intent);
|
|
10756
10919
|
} catch (error) {
|
|
10757
|
-
if (error instanceof
|
|
10920
|
+
if (error instanceof chunkYEF5FL6E_cjs.ArkError && error.code === 0 && error.message.includes("duplicated input")) {
|
|
10758
10921
|
const deleteIntent = await this.makeDeleteIntentSignature(inputs);
|
|
10759
10922
|
await this.arkProvider.deleteIntent(deleteIntent);
|
|
10760
10923
|
return this.arkProvider.registerIntent(intent);
|
|
@@ -10770,7 +10933,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
10770
10933
|
expire_at: 0,
|
|
10771
10934
|
cosigners_public_keys: cosignerPubKeys
|
|
10772
10935
|
};
|
|
10773
|
-
const proof =
|
|
10936
|
+
const proof = chunkYEF5FL6E_cjs.Intent.create(message, coins, outputs);
|
|
10774
10937
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
10775
10938
|
return {
|
|
10776
10939
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -10782,7 +10945,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
10782
10945
|
type: "delete",
|
|
10783
10946
|
expire_at: 0
|
|
10784
10947
|
};
|
|
10785
|
-
const proof =
|
|
10948
|
+
const proof = chunkYEF5FL6E_cjs.Intent.create(message, coins, []);
|
|
10786
10949
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
10787
10950
|
return {
|
|
10788
10951
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -10794,7 +10957,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
10794
10957
|
type: "get-pending-tx",
|
|
10795
10958
|
expire_at: 0
|
|
10796
10959
|
};
|
|
10797
|
-
const proof =
|
|
10960
|
+
const proof = chunkYEF5FL6E_cjs.Intent.create(message, coins, []);
|
|
10798
10961
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
10799
10962
|
return {
|
|
10800
10963
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -11210,7 +11373,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
11210
11373
|
);
|
|
11211
11374
|
const arkTxJobs = inputs.map((input, index) => ({
|
|
11212
11375
|
index,
|
|
11213
|
-
lookupScript:
|
|
11376
|
+
lookupScript: chunkHXDZ2QTW_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
11214
11377
|
}));
|
|
11215
11378
|
const checkpointJobs = offchainTx.checkpoints.map(
|
|
11216
11379
|
(c) => this.inputSigningJobsFromWitnessUtxos(c)
|
|
@@ -11443,7 +11606,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
11443
11606
|
} else {
|
|
11444
11607
|
let sourceAddress;
|
|
11445
11608
|
try {
|
|
11446
|
-
sourceAddress =
|
|
11609
|
+
sourceAddress = chunkHXDZ2QTW_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
|
|
11447
11610
|
this.network
|
|
11448
11611
|
);
|
|
11449
11612
|
} catch {
|
|
@@ -11752,7 +11915,7 @@ var MessageBus = class {
|
|
|
11752
11915
|
this.initialized = true;
|
|
11753
11916
|
}
|
|
11754
11917
|
async buildServices(config) {
|
|
11755
|
-
const arkProvider = new
|
|
11918
|
+
const arkProvider = new chunkYEF5FL6E_cjs.RestArkProvider(config.arkServer.url);
|
|
11756
11919
|
const storage = {
|
|
11757
11920
|
walletRepository: this.walletRepository,
|
|
11758
11921
|
contractRepository: this.contractRepository
|
|
@@ -12134,7 +12297,7 @@ var Ramps = class {
|
|
|
12134
12297
|
}
|
|
12135
12298
|
amount = amount ?? totalAmount;
|
|
12136
12299
|
const offchainAddress = await this.wallet.getAddress();
|
|
12137
|
-
const offchainAddr =
|
|
12300
|
+
const offchainAddr = chunkHXDZ2QTW_cjs.ArkAddress.decode(offchainAddress);
|
|
12138
12301
|
const offchainScript = base.hex.encode(offchainAddr.pkScript);
|
|
12139
12302
|
const outputFee = estimator.evalOffchainOutput({
|
|
12140
12303
|
amount,
|
|
@@ -12232,7 +12395,7 @@ var Ramps = class {
|
|
|
12232
12395
|
let destinationScript;
|
|
12233
12396
|
for (const networkName of networkNames) {
|
|
12234
12397
|
try {
|
|
12235
|
-
const network =
|
|
12398
|
+
const network = chunkHXDZ2QTW_cjs.networks[networkName];
|
|
12236
12399
|
const addr = btcSigner.Address(network).decode(destinationAddress);
|
|
12237
12400
|
destinationScript = btcSigner.OutScript.encode(addr);
|
|
12238
12401
|
break;
|
|
@@ -12909,7 +13072,7 @@ var WalletMessageHandler = class {
|
|
|
12909
13072
|
// Wallet methods
|
|
12910
13073
|
async handleInitWallet({ payload }) {
|
|
12911
13074
|
const { arkServerUrl } = payload;
|
|
12912
|
-
this.indexerProvider = new
|
|
13075
|
+
this.indexerProvider = new chunkYEF5FL6E_cjs.RestIndexerProvider(arkServerUrl);
|
|
12913
13076
|
await this.onWalletInitialized();
|
|
12914
13077
|
}
|
|
12915
13078
|
async handleGetBalance() {
|
|
@@ -13210,26 +13373,19 @@ var WalletMessageHandler = class {
|
|
|
13210
13373
|
});
|
|
13211
13374
|
return filteredVtxos;
|
|
13212
13375
|
}
|
|
13376
|
+
/** Tear down handler subscriptions, then delegate the full wipe to the wallet. */
|
|
13213
13377
|
async clear() {
|
|
13214
|
-
|
|
13215
|
-
if (
|
|
13378
|
+
const wallet = this.wallet ?? this.readonlyWallet;
|
|
13379
|
+
if (!wallet) return;
|
|
13380
|
+
if (this.incomingFundsSubscription) {
|
|
13381
|
+
this.incomingFundsSubscription();
|
|
13382
|
+
this.incomingFundsSubscription = void 0;
|
|
13383
|
+
}
|
|
13216
13384
|
if (this.contractEventsSubscription) {
|
|
13217
13385
|
this.contractEventsSubscription();
|
|
13218
13386
|
this.contractEventsSubscription = void 0;
|
|
13219
13387
|
}
|
|
13220
|
-
|
|
13221
|
-
if (this.wallet) {
|
|
13222
|
-
await this.wallet.dispose();
|
|
13223
|
-
} else {
|
|
13224
|
-
await this.readonlyWallet.dispose();
|
|
13225
|
-
}
|
|
13226
|
-
} catch (_) {
|
|
13227
|
-
}
|
|
13228
|
-
try {
|
|
13229
|
-
await this.walletRepository?.clear();
|
|
13230
|
-
} catch (_) {
|
|
13231
|
-
console.warn("Failed to clear vtxos from wallet repository");
|
|
13232
|
-
}
|
|
13388
|
+
await wallet.clear();
|
|
13233
13389
|
this.wallet = void 0;
|
|
13234
13390
|
this.readonlyWallet = void 0;
|
|
13235
13391
|
this.arkProvider = void 0;
|
|
@@ -13520,6 +13676,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
13520
13676
|
walletRepository;
|
|
13521
13677
|
contractRepository;
|
|
13522
13678
|
identity;
|
|
13679
|
+
activity = createDefaultActivityRegistry();
|
|
13523
13680
|
_readonlyAssetManager;
|
|
13524
13681
|
initConfig = null;
|
|
13525
13682
|
initWalletPayload = null;
|
|
@@ -13878,19 +14035,13 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
13878
14035
|
);
|
|
13879
14036
|
}
|
|
13880
14037
|
}
|
|
13881
|
-
/**
|
|
14038
|
+
/** This tells the service worker to wipe all locally persisted wallet data. */
|
|
13882
14039
|
async clear() {
|
|
13883
14040
|
const message = {
|
|
13884
14041
|
id: getRandomId(),
|
|
13885
14042
|
tag: this.messageTag,
|
|
13886
14043
|
type: "CLEAR"
|
|
13887
14044
|
};
|
|
13888
|
-
try {
|
|
13889
|
-
const address = await this.getAddress();
|
|
13890
|
-
await this.walletRepository.deleteVtxos(address);
|
|
13891
|
-
} catch (_) {
|
|
13892
|
-
console.warn("Failed to clear vtxos from wallet repository");
|
|
13893
|
-
}
|
|
13894
14045
|
await this.sendMessage(message);
|
|
13895
14046
|
}
|
|
13896
14047
|
async getAddress() {
|
|
@@ -13963,6 +14114,9 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
13963
14114
|
throw new Error(`Failed to get status: ${error}`);
|
|
13964
14115
|
}
|
|
13965
14116
|
}
|
|
14117
|
+
async getActivityHistory() {
|
|
14118
|
+
return buildActivities(await this.getTransactionHistory(), this.activity.all());
|
|
14119
|
+
}
|
|
13966
14120
|
async getTransactionHistory() {
|
|
13967
14121
|
const message = {
|
|
13968
14122
|
id: getRandomId(),
|
|
@@ -14614,12 +14768,12 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
14614
14768
|
* @returns Configured onchain wallet
|
|
14615
14769
|
* @throws Error if the configured identity cannot produce a valid x-only public key
|
|
14616
14770
|
*/
|
|
14617
|
-
static async create(identity, networkName =
|
|
14771
|
+
static async create(identity, networkName = chunkHXDZ2QTW_cjs.DEFAULT_NETWORK_NAME, provider) {
|
|
14618
14772
|
const pubkey = await identity.xOnlyPublicKey();
|
|
14619
14773
|
if (!pubkey) {
|
|
14620
14774
|
throw new Error("Invalid configured public key");
|
|
14621
14775
|
}
|
|
14622
|
-
const network =
|
|
14776
|
+
const network = chunkHXDZ2QTW_cjs.getNetwork(networkName);
|
|
14623
14777
|
const onchainProvider = provider || new EsploraProvider(ESPLORA_URL[networkName]);
|
|
14624
14778
|
const onchainP2TR = btcSigner.p2tr(pubkey, void 0, network);
|
|
14625
14779
|
return new _OnchainWallet(identity, network, onchainP2TR, onchainProvider);
|
|
@@ -14725,7 +14879,7 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
14725
14879
|
if (!inputs) {
|
|
14726
14880
|
throw new Error("Fee estimation failed");
|
|
14727
14881
|
}
|
|
14728
|
-
let tx = new
|
|
14882
|
+
let tx = new chunkYEF5FL6E_cjs.Transaction();
|
|
14729
14883
|
for (const input of inputs) {
|
|
14730
14884
|
tx.addInput({
|
|
14731
14885
|
txid: input.txid,
|
|
@@ -14756,7 +14910,7 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
14756
14910
|
*/
|
|
14757
14911
|
async bumpP2A(parent) {
|
|
14758
14912
|
const parentVsize = parent.vsize;
|
|
14759
|
-
let child = new
|
|
14913
|
+
let child = new chunkYEF5FL6E_cjs.Transaction({
|
|
14760
14914
|
version: 3,
|
|
14761
14915
|
allowLegacyWitnessUtxo: true
|
|
14762
14916
|
});
|
|
@@ -15522,7 +15676,7 @@ exports.BIP322 = void 0;
|
|
|
15522
15676
|
async function sign2(message, identity, network) {
|
|
15523
15677
|
const xOnlyPubKey = await identity.xOnlyPublicKey();
|
|
15524
15678
|
const payment = btcSigner.p2tr(xOnlyPubKey, void 0, network);
|
|
15525
|
-
const toSpend =
|
|
15679
|
+
const toSpend = chunkYEF5FL6E_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
|
|
15526
15680
|
const toSign = craftBIP322ToSignP2TR(toSpend, payment.script, xOnlyPubKey);
|
|
15527
15681
|
const signed = await identity.sign(toSign, [0]);
|
|
15528
15682
|
signed.finalizeIdx(0);
|
|
@@ -15580,7 +15734,7 @@ function verifyP2TR(message, witnessItems, pkScript, pubkey) {
|
|
|
15580
15734
|
if (sighashType !== btcSigner.SigHash.DEFAULT && sighashType !== btcSigner.SigHash.ALL) {
|
|
15581
15735
|
return false;
|
|
15582
15736
|
}
|
|
15583
|
-
const toSpend =
|
|
15737
|
+
const toSpend = chunkYEF5FL6E_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
|
|
15584
15738
|
const toSign = craftBIP322ToSignP2TR(toSpend, pkScript, pubkey);
|
|
15585
15739
|
const sighash = toSign.preimageWitnessV1(0, [pkScript], sighashType, [0n]);
|
|
15586
15740
|
const rawSig = sig.length === 65 ? sig.subarray(0, 64) : sig;
|
|
@@ -15601,7 +15755,7 @@ function verifyP2WPKH(message, witnessItems, pkScript, addressHash) {
|
|
|
15601
15755
|
}
|
|
15602
15756
|
const sighashType = sigWithHash[sigWithHash.length - 1];
|
|
15603
15757
|
const derSig = sigWithHash.subarray(0, sigWithHash.length - 1);
|
|
15604
|
-
const toSpend =
|
|
15758
|
+
const toSpend = chunkYEF5FL6E_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
|
|
15605
15759
|
const toSign = craftBIP322ToSignSimple(toSpend, pkScript);
|
|
15606
15760
|
const scriptCode = btcSigner.OutScript.encode({ type: "pkh", hash: addressHash });
|
|
15607
15761
|
const sighash = toSign.preimageWitnessV0(0, scriptCode, sighashType, 0n);
|
|
@@ -15654,7 +15808,7 @@ function encodeCompactSize(n) {
|
|
|
15654
15808
|
return buf;
|
|
15655
15809
|
}
|
|
15656
15810
|
function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
|
|
15657
|
-
const tx = new
|
|
15811
|
+
const tx = new chunkYEF5FL6E_cjs.Transaction({ version: 0 });
|
|
15658
15812
|
tx.addInput({
|
|
15659
15813
|
txid: toSpend.id,
|
|
15660
15814
|
index: 0,
|
|
@@ -15668,12 +15822,12 @@ function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
|
|
|
15668
15822
|
});
|
|
15669
15823
|
tx.addOutput({
|
|
15670
15824
|
amount: 0n,
|
|
15671
|
-
script:
|
|
15825
|
+
script: chunkYEF5FL6E_cjs.OP_RETURN_EMPTY_PKSCRIPT
|
|
15672
15826
|
});
|
|
15673
15827
|
return tx;
|
|
15674
15828
|
}
|
|
15675
15829
|
function craftBIP322ToSignSimple(toSpend, pkScript) {
|
|
15676
|
-
const tx = new
|
|
15830
|
+
const tx = new chunkYEF5FL6E_cjs.Transaction({ version: 0 });
|
|
15677
15831
|
tx.addInput({
|
|
15678
15832
|
txid: toSpend.id,
|
|
15679
15833
|
index: 0,
|
|
@@ -15685,7 +15839,7 @@ function craftBIP322ToSignSimple(toSpend, pkScript) {
|
|
|
15685
15839
|
});
|
|
15686
15840
|
tx.addOutput({
|
|
15687
15841
|
amount: 0n,
|
|
15688
|
-
script:
|
|
15842
|
+
script: chunkYEF5FL6E_cjs.OP_RETURN_EMPTY_PKSCRIPT
|
|
15689
15843
|
});
|
|
15690
15844
|
return tx;
|
|
15691
15845
|
}
|
|
@@ -15746,7 +15900,7 @@ exports.Unroll = void 0;
|
|
|
15746
15900
|
if (virtualTxs.txs.length === 0) {
|
|
15747
15901
|
throw new Error(`Tx ${nextTxToBroadcast.txid} not found`);
|
|
15748
15902
|
}
|
|
15749
|
-
const tx =
|
|
15903
|
+
const tx = chunkYEF5FL6E_cjs.Transaction.fromPSBT(base.base64.decode(virtualTxs.txs[0]));
|
|
15750
15904
|
if (nextTxToBroadcast.type === "INDEXER_CHAINED_TX_TYPE_TREE" /* TREE */) {
|
|
15751
15905
|
const input = tx.getInput(0);
|
|
15752
15906
|
if (!input) {
|
|
@@ -15823,12 +15977,12 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
15823
15977
|
if (!exit) {
|
|
15824
15978
|
throw new Error(`no available exit path found for vtxo ${vtxo.txid}:${vtxo.vout}`);
|
|
15825
15979
|
}
|
|
15826
|
-
const spendingLeaf =
|
|
15980
|
+
const spendingLeaf = chunkHXDZ2QTW_cjs.VtxoScript.decode(vtxo.tapTree).findLeaf(base.hex.encode(exit.script));
|
|
15827
15981
|
if (!spendingLeaf) {
|
|
15828
15982
|
throw new Error(`spending leaf not found for vtxo ${vtxo.txid}:${vtxo.vout}`);
|
|
15829
15983
|
}
|
|
15830
15984
|
totalAmount += BigInt(vtxo.value);
|
|
15831
|
-
const sequence =
|
|
15985
|
+
const sequence = chunkHXDZ2QTW_cjs.timelockToSequence(exit.params.timelock);
|
|
15832
15986
|
inputs.push({
|
|
15833
15987
|
txid: vtxo.txid,
|
|
15834
15988
|
index: vtxo.vout,
|
|
@@ -15836,7 +15990,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
15836
15990
|
sequence,
|
|
15837
15991
|
witnessUtxo: {
|
|
15838
15992
|
amount: BigInt(vtxo.value),
|
|
15839
|
-
script:
|
|
15993
|
+
script: chunkHXDZ2QTW_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
|
|
15840
15994
|
},
|
|
15841
15995
|
sighashType: btcSigner.SigHash.DEFAULT
|
|
15842
15996
|
});
|
|
@@ -15846,7 +16000,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
15846
16000
|
btcSigner.TaprootControlBlock.encode(spendingLeaf[0]).length
|
|
15847
16001
|
);
|
|
15848
16002
|
}
|
|
15849
|
-
const tx = new
|
|
16003
|
+
const tx = new chunkYEF5FL6E_cjs.Transaction({ version: 2 });
|
|
15850
16004
|
for (const input of inputs) {
|
|
15851
16005
|
tx.addInput(input);
|
|
15852
16006
|
}
|
|
@@ -15893,7 +16047,7 @@ function doWait(onchainProvider, txid) {
|
|
|
15893
16047
|
};
|
|
15894
16048
|
}
|
|
15895
16049
|
function availableExitPath(confirmedAt, current, vtxo) {
|
|
15896
|
-
const exits =
|
|
16050
|
+
const exits = chunkHXDZ2QTW_cjs.VtxoScript.decode(vtxo.tapTree).exitPaths();
|
|
15897
16051
|
for (const exit of exits) {
|
|
15898
16052
|
if (exit.params.timelock.type === "blocks") {
|
|
15899
16053
|
if (current.height >= confirmedAt.height + Number(exit.params.timelock.value)) {
|
|
@@ -15932,7 +16086,7 @@ function decodeArkContract(encoded) {
|
|
|
15932
16086
|
}
|
|
15933
16087
|
function contractFromArkContract(encoded, options = {}) {
|
|
15934
16088
|
const parsed = decodeArkContract(encoded);
|
|
15935
|
-
const handler =
|
|
16089
|
+
const handler = chunk32YKLQPS_cjs.contractHandlers.get(parsed.type);
|
|
15936
16090
|
if (!handler) {
|
|
15937
16091
|
throw new Error(`No handler registered for contract type '${parsed.type}'`);
|
|
15938
16092
|
}
|
|
@@ -15946,9 +16100,9 @@ function contractFromArkContract(encoded, options = {}) {
|
|
|
15946
16100
|
metadata: options.metadata
|
|
15947
16101
|
};
|
|
15948
16102
|
}
|
|
15949
|
-
function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix =
|
|
16103
|
+
function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunkHXDZ2QTW_cjs.DEFAULT_NETWORK.hrp, options = {}) {
|
|
15950
16104
|
const parsed = decodeArkContract(encoded);
|
|
15951
|
-
const handler =
|
|
16105
|
+
const handler = chunk32YKLQPS_cjs.contractHandlers.getOrThrow(parsed.type);
|
|
15952
16106
|
const params = parsed.data;
|
|
15953
16107
|
const vtxoScript = handler.createScript(params);
|
|
15954
16108
|
return {
|
|
@@ -15966,6 +16120,7 @@ function isArkContract(str) {
|
|
|
15966
16120
|
return str.startsWith(ARKCONTRACT_PREFIX + "=");
|
|
15967
16121
|
}
|
|
15968
16122
|
|
|
16123
|
+
exports.ActivityRegistry = ActivityRegistry;
|
|
15969
16124
|
exports.ArkNote = ArkNote;
|
|
15970
16125
|
exports.AssetManager = AssetManager;
|
|
15971
16126
|
exports.ContractManager = ContractManager;
|
|
@@ -16022,6 +16177,7 @@ exports.WalletMessageHandler = WalletMessageHandler;
|
|
|
16022
16177
|
exports.WalletNotInitializedError = WalletNotInitializedError;
|
|
16023
16178
|
exports.WalletRepositoryImpl = WalletRepositoryImpl;
|
|
16024
16179
|
exports.WsElectrumChainSource = WsElectrumChainSource;
|
|
16180
|
+
exports.boardingResolver = boardingResolver;
|
|
16025
16181
|
exports.buildForfeitTx = buildForfeitTx;
|
|
16026
16182
|
exports.buildOffchainTx = buildOffchainTx;
|
|
16027
16183
|
exports.classifyAgainstSignerSet = classifyAgainstSignerSet;
|
|
@@ -16030,6 +16186,7 @@ exports.closeDatabase = closeDatabase;
|
|
|
16030
16186
|
exports.combineTapscriptSigs = combineTapscriptSigs;
|
|
16031
16187
|
exports.contractFromArkContract = contractFromArkContract;
|
|
16032
16188
|
exports.contractFromArkContractWithAddress = contractFromArkContractWithAddress;
|
|
16189
|
+
exports.createDefaultActivityRegistry = createDefaultActivityRegistry;
|
|
16033
16190
|
exports.decodeArkContract = decodeArkContract;
|
|
16034
16191
|
exports.deserializeAssets = deserializeAssets;
|
|
16035
16192
|
exports.deserializeUtxo = deserializeUtxo;
|
|
@@ -16067,5 +16224,5 @@ exports.validateVtxoTxGraph = validateVtxoTxGraph;
|
|
|
16067
16224
|
exports.verifyTapscriptSignatures = verifyTapscriptSignatures;
|
|
16068
16225
|
exports.waitForIncomingFunds = waitForIncomingFunds;
|
|
16069
16226
|
exports.warnAndFilterVtxosForScript = warnAndFilterVtxosForScript;
|
|
16070
|
-
//# sourceMappingURL=chunk-
|
|
16071
|
-
//# sourceMappingURL=chunk-
|
|
16227
|
+
//# sourceMappingURL=chunk-ED7JDFX4.cjs.map
|
|
16228
|
+
//# sourceMappingURL=chunk-ED7JDFX4.cjs.map
|