@arkade-os/sdk 0.4.64 → 0.4.65
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/expo.cjs +5 -5
- package/dist/adapters/expo.js +3 -3
- package/dist/adapters/indexedDB.cjs +5 -5
- package/dist/adapters/indexedDB.js +4 -4
- package/dist/{chunk-HQ2DDMQN.js → chunk-3G5V564P.js} +141 -3
- package/dist/chunk-3G5V564P.js.map +1 -0
- package/dist/{chunk-WJN2BLEI.js → chunk-5YTSQSLE.js} +226 -353
- package/dist/chunk-5YTSQSLE.js.map +1 -0
- package/dist/{chunk-35YIP6OA.cjs → chunk-7X744EFF.cjs} +10 -10
- package/dist/{chunk-35YIP6OA.cjs.map → chunk-7X744EFF.cjs.map} +1 -1
- package/dist/{chunk-WXCVS6PD.cjs → chunk-BABJ77NG.cjs} +196 -57
- package/dist/chunk-BABJ77NG.cjs.map +1 -0
- package/dist/{chunk-FZFSGOTZ.cjs → chunk-G552MISJ.cjs} +3 -3
- package/dist/{chunk-FZFSGOTZ.cjs.map → chunk-G552MISJ.cjs.map} +1 -1
- package/dist/{chunk-LPEE2H2M.cjs → chunk-GFZNEMGL.cjs} +629 -748
- package/dist/chunk-GFZNEMGL.cjs.map +1 -0
- package/dist/{chunk-USXWE2EJ.js → chunk-RESN6QHP.js} +4 -4
- package/dist/{chunk-USXWE2EJ.js.map → chunk-RESN6QHP.js.map} +1 -1
- package/dist/{chunk-4N45WCSJ.cjs → chunk-SJQM5AVB.cjs} +17 -17
- package/dist/{chunk-4N45WCSJ.cjs.map → chunk-SJQM5AVB.cjs.map} +1 -1
- package/dist/{chunk-XJCBV4AA.js → chunk-TFSVXMTM.js} +3 -3
- package/dist/{chunk-XJCBV4AA.js.map → chunk-TFSVXMTM.js.map} +1 -1
- package/dist/{chunk-ZUEGFM3T.js → chunk-TYTPVPKD.js} +4 -4
- package/dist/{chunk-ZUEGFM3T.js.map → chunk-TYTPVPKD.js.map} +1 -1
- package/dist/{chunk-LN2VZP63.js → chunk-XMOIRDLF.js} +151 -12
- package/dist/chunk-XMOIRDLF.js.map +1 -0
- package/dist/{chunk-RXITDAV4.cjs → chunk-XN55B6EP.cjs} +155 -17
- package/dist/chunk-XN55B6EP.cjs.map +1 -0
- package/dist/contracts/handlers/index.cjs +9 -9
- package/dist/contracts/handlers/index.d.cts +1 -1
- package/dist/contracts/handlers/index.d.ts +1 -1
- package/dist/contracts/handlers/index.js +2 -2
- package/dist/{index-aZycGEsQ.d.cts → index-BtTtQFUX.d.cts} +109 -0
- package/dist/{index-Bxe9kBFs.d.ts → index-fDDiA1-L.d.ts} +109 -0
- package/dist/index.cjs +300 -268
- package/dist/index.d.cts +187 -13
- package/dist/index.d.ts +187 -13
- package/dist/index.js +4 -4
- package/dist/repositories/realm/index.cjs +19 -19
- package/dist/repositories/realm/index.js +5 -5
- package/dist/repositories/sqlite/index.cjs +18 -18
- package/dist/repositories/sqlite/index.js +5 -5
- package/dist/wallet/expo/background.cjs +14 -14
- package/dist/wallet/expo/background.js +6 -6
- package/dist/wallet/expo/index.cjs +14 -14
- package/dist/wallet/expo/index.js +5 -5
- package/dist/worker/expo/index.cjs +9 -9
- package/dist/worker/expo/index.js +5 -5
- package/package.json +1 -1
- package/dist/chunk-HQ2DDMQN.js.map +0 -1
- package/dist/chunk-LN2VZP63.js.map +0 -1
- package/dist/chunk-LPEE2H2M.cjs.map +0 -1
- package/dist/chunk-RXITDAV4.cjs.map +0 -1
- package/dist/chunk-WJN2BLEI.js.map +0 -1
- package/dist/chunk-WXCVS6PD.cjs.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunkXN55B6EP_cjs = require('./chunk-XN55B6EP.cjs');
|
|
4
|
+
var chunkBABJ77NG_cjs = require('./chunk-BABJ77NG.cjs');
|
|
5
|
+
var chunkG552MISJ_cjs = require('./chunk-G552MISJ.cjs');
|
|
6
6
|
var chunk5BLDMQED_cjs = require('./chunk-5BLDMQED.cjs');
|
|
7
7
|
var utils_js = require('@scure/btc-signer/utils.js');
|
|
8
8
|
var btcSigner = require('@scure/btc-signer');
|
|
@@ -188,7 +188,7 @@ var TreeSignerSession = class _TreeSignerSession {
|
|
|
188
188
|
noncesByPubkey.set(base.hex.encode(myPublicKey.subarray(1)), myNonce);
|
|
189
189
|
const tx = this.graph.find(txid);
|
|
190
190
|
if (!tx) throw new Error(`missing tx for txid ${txid}`);
|
|
191
|
-
const cosigners =
|
|
191
|
+
const cosigners = chunkG552MISJ_cjs.getArkPsbtFields(tx.root, 0, chunkG552MISJ_cjs.CosignerPublicKey).map(
|
|
192
192
|
(c) => base.hex.encode(c.key.subarray(1))
|
|
193
193
|
// xonly pubkey
|
|
194
194
|
);
|
|
@@ -240,7 +240,7 @@ var TreeSignerSession = class _TreeSignerSession {
|
|
|
240
240
|
if (!aggNonce) throw new Error("missing aggregate nonce");
|
|
241
241
|
const prevoutAmounts = [];
|
|
242
242
|
const prevoutScripts = [];
|
|
243
|
-
const cosigners =
|
|
243
|
+
const cosigners = chunkG552MISJ_cjs.getArkPsbtFields(g.root, 0, chunkG552MISJ_cjs.CosignerPublicKey).map((c) => c.key);
|
|
244
244
|
const { finalKey } = aggregateKeys(cosigners, true, {
|
|
245
245
|
taprootTweak: this.scriptRoot
|
|
246
246
|
});
|
|
@@ -431,7 +431,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
431
431
|
let network;
|
|
432
432
|
if ("descriptor" in opts && typeof opts.descriptor === "string") {
|
|
433
433
|
descriptor = opts.descriptor;
|
|
434
|
-
network =
|
|
434
|
+
network = chunkBABJ77NG_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
435
435
|
} else {
|
|
436
436
|
network = opts.isMainnet ?? true ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
437
437
|
descriptor = descriptorsScure.scriptExpressions.trBIP32({
|
|
@@ -529,7 +529,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
529
529
|
* `StaticDescriptorProvider` for legacy single-key wallets.
|
|
530
530
|
*/
|
|
531
531
|
isOurs(descriptor) {
|
|
532
|
-
return
|
|
532
|
+
return chunkBABJ77NG_cjs.descriptorIsOurs(descriptor, this.descriptor, utils_js.pubSchnorr(this.derivedKey));
|
|
533
533
|
}
|
|
534
534
|
/**
|
|
535
535
|
* Signs each request with the key derived from its descriptor.
|
|
@@ -578,7 +578,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
578
578
|
}
|
|
579
579
|
// ── internal helpers ─────────────────────────────────────────────
|
|
580
580
|
derivePrivateKeyForDescriptor(descriptor) {
|
|
581
|
-
const network =
|
|
581
|
+
const network = chunkBABJ77NG_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
582
582
|
const expansion = descriptorsScure.expand({ descriptor, network });
|
|
583
583
|
if (expansion.isRanged) {
|
|
584
584
|
throw new Error(
|
|
@@ -664,7 +664,7 @@ var ReadonlyDescriptorIdentity = class _ReadonlyDescriptorIdentity {
|
|
|
664
664
|
*/
|
|
665
665
|
descriptor;
|
|
666
666
|
constructor(descriptor) {
|
|
667
|
-
const network =
|
|
667
|
+
const network = chunkBABJ77NG_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
668
668
|
let expansion;
|
|
669
669
|
try {
|
|
670
670
|
expansion = descriptorsScure.expand({ descriptor, network, index: 0 });
|
|
@@ -714,7 +714,7 @@ var ReadonlyDescriptorIdentity = class _ReadonlyDescriptorIdentity {
|
|
|
714
714
|
* `StaticDescriptorProvider` for legacy single-key wallets.
|
|
715
715
|
*/
|
|
716
716
|
isOurs(descriptor) {
|
|
717
|
-
return
|
|
717
|
+
return chunkBABJ77NG_cjs.descriptorIsOurs(descriptor, this.descriptor, this.indexZero.pubkey);
|
|
718
718
|
}
|
|
719
719
|
};
|
|
720
720
|
function serializeSeedOwnedSigningIdentity(identity) {
|
|
@@ -876,10 +876,10 @@ var DescriptorIdentity = class {
|
|
|
876
876
|
this.base = base;
|
|
877
877
|
}
|
|
878
878
|
async xOnlyPublicKey() {
|
|
879
|
-
return
|
|
879
|
+
return chunkBABJ77NG_cjs.deriveDescriptorLeafPubKey(this.descriptor);
|
|
880
880
|
}
|
|
881
881
|
async compressedPublicKey() {
|
|
882
|
-
return
|
|
882
|
+
return chunkBABJ77NG_cjs.deriveDescriptorLeafCompressedPubKey(this.descriptor);
|
|
883
883
|
}
|
|
884
884
|
async sign(tx, inputIndexes) {
|
|
885
885
|
const [signed] = await this.signer.signWithDescriptor([
|
|
@@ -941,12 +941,12 @@ var ForeignDescriptorError = class extends Error {
|
|
|
941
941
|
};
|
|
942
942
|
async function resolveDescriptorSigner(descriptor, identity, provider) {
|
|
943
943
|
const owner = provider?.isOurs(descriptor) ? provider : isHDCapableIdentity(identity) && identity.isOurs(descriptor) ? identity : void 0;
|
|
944
|
-
if (owner &&
|
|
944
|
+
if (owner && chunkBABJ77NG_cjs.parseHDDescriptor(descriptor)) {
|
|
945
945
|
return new DescriptorIdentity({ descriptor, signer: owner, base: identity });
|
|
946
946
|
}
|
|
947
947
|
let key;
|
|
948
948
|
try {
|
|
949
|
-
key =
|
|
949
|
+
key = chunkBABJ77NG_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
950
950
|
} catch {
|
|
951
951
|
throw new ForeignDescriptorError(descriptor);
|
|
952
952
|
}
|
|
@@ -1317,11 +1317,11 @@ function buildSaltedPreimageMessage(xonly, salt) {
|
|
|
1317
1317
|
}
|
|
1318
1318
|
var PREIMAGE_INDEX = 0;
|
|
1319
1319
|
function isPerArtifactDescriptor(descriptor) {
|
|
1320
|
-
return
|
|
1320
|
+
return chunkBABJ77NG_cjs.parseHDDescriptor(descriptor) !== null;
|
|
1321
1321
|
}
|
|
1322
1322
|
async function provisionDescriptor(wallet) {
|
|
1323
1323
|
const allocated = isHDAllocationCapable(wallet) ? await wallet.getNextSigningDescriptor() : void 0;
|
|
1324
|
-
return allocated ?? await
|
|
1324
|
+
return allocated ?? await chunkBABJ77NG_cjs.identityDescriptor(wallet.identity);
|
|
1325
1325
|
}
|
|
1326
1326
|
async function provisionRefundKey(wallet) {
|
|
1327
1327
|
const descriptor = await provisionDescriptor(wallet);
|
|
@@ -1369,7 +1369,7 @@ async function contractSigner(wallet, descriptor) {
|
|
|
1369
1369
|
const signer = isHDWalletCapable(wallet) ? await wallet.signerForDescriptor(descriptor) : wallet.identity;
|
|
1370
1370
|
let expected;
|
|
1371
1371
|
try {
|
|
1372
|
-
expected =
|
|
1372
|
+
expected = chunkBABJ77NG_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
1373
1373
|
} catch (cause) {
|
|
1374
1374
|
throw new ForeignDescriptorError(descriptor, { cause });
|
|
1375
1375
|
}
|
|
@@ -1588,14 +1588,14 @@ var RestDelegateProvider = class {
|
|
|
1588
1588
|
*/
|
|
1589
1589
|
async delegate(intent, forfeitTxs, options) {
|
|
1590
1590
|
const url = `${this.url}/v1/delegate`;
|
|
1591
|
-
const response = await
|
|
1591
|
+
const response = await chunkG552MISJ_cjs.baseFetch(url, {
|
|
1592
1592
|
method: "POST",
|
|
1593
1593
|
headers: {
|
|
1594
1594
|
"Content-Type": "application/json"
|
|
1595
1595
|
},
|
|
1596
1596
|
body: JSON.stringify({
|
|
1597
1597
|
intent: {
|
|
1598
|
-
message:
|
|
1598
|
+
message: chunkG552MISJ_cjs.Intent.encodeMessage(intent.message),
|
|
1599
1599
|
proof: intent.proof
|
|
1600
1600
|
},
|
|
1601
1601
|
forfeit_txs: forfeitTxs,
|
|
@@ -1615,7 +1615,7 @@ var RestDelegateProvider = class {
|
|
|
1615
1615
|
*/
|
|
1616
1616
|
async getDelegateInfo() {
|
|
1617
1617
|
const url = `${this.url}/v1/delegator/info`;
|
|
1618
|
-
const response = await
|
|
1618
|
+
const response = await chunkG552MISJ_cjs.rateGate.runHttp(url, () => chunkG552MISJ_cjs.baseFetch(url));
|
|
1619
1619
|
if (!response.ok) {
|
|
1620
1620
|
const errorText2 = await response.text();
|
|
1621
1621
|
throw new Error(`Failed to get delegate info: ${errorText2}`);
|
|
@@ -1642,7 +1642,7 @@ var ESPLORA_URL = {
|
|
|
1642
1642
|
regtest: "http://localhost:3000/api"
|
|
1643
1643
|
};
|
|
1644
1644
|
var EsploraProvider = class {
|
|
1645
|
-
constructor(baseUrl = ESPLORA_URL[
|
|
1645
|
+
constructor(baseUrl = ESPLORA_URL[chunkG552MISJ_cjs.DEFAULT_NETWORK_NAME], opts) {
|
|
1646
1646
|
this.baseUrl = baseUrl;
|
|
1647
1647
|
this.pollingInterval = opts?.pollingInterval ?? 15e3;
|
|
1648
1648
|
this.forcePolling = opts?.forcePolling ?? false;
|
|
@@ -1651,14 +1651,14 @@ var EsploraProvider = class {
|
|
|
1651
1651
|
pollingInterval;
|
|
1652
1652
|
forcePolling;
|
|
1653
1653
|
async getCoins(address) {
|
|
1654
|
-
const response = await
|
|
1654
|
+
const response = await chunkG552MISJ_cjs.baseFetch(`${this.baseUrl}/address/${address}/utxo`);
|
|
1655
1655
|
if (!response.ok) {
|
|
1656
1656
|
throw new Error(`Failed to fetch UTXOs: ${response.statusText}`);
|
|
1657
1657
|
}
|
|
1658
1658
|
return response.json();
|
|
1659
1659
|
}
|
|
1660
1660
|
async getFeeRate() {
|
|
1661
|
-
const response = await
|
|
1661
|
+
const response = await chunkG552MISJ_cjs.baseFetch(`${this.baseUrl}/fee-estimates`);
|
|
1662
1662
|
if (response.status === 404) {
|
|
1663
1663
|
return void 0;
|
|
1664
1664
|
}
|
|
@@ -1679,7 +1679,7 @@ var EsploraProvider = class {
|
|
|
1679
1679
|
}
|
|
1680
1680
|
}
|
|
1681
1681
|
async getTxOutspends(txid) {
|
|
1682
|
-
const response = await
|
|
1682
|
+
const response = await chunkG552MISJ_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/outspends`);
|
|
1683
1683
|
if (!response.ok) {
|
|
1684
1684
|
const error = await response.text();
|
|
1685
1685
|
throw new Error(`Failed to get transaction outspends: ${error}`);
|
|
@@ -1687,7 +1687,7 @@ var EsploraProvider = class {
|
|
|
1687
1687
|
return response.json();
|
|
1688
1688
|
}
|
|
1689
1689
|
async getTransactions(address) {
|
|
1690
|
-
const response = await
|
|
1690
|
+
const response = await chunkG552MISJ_cjs.baseFetch(`${this.baseUrl}/address/${address}/txs`);
|
|
1691
1691
|
if (!response.ok) {
|
|
1692
1692
|
const error = await response.text();
|
|
1693
1693
|
throw new Error(`Failed to get transactions: ${error}`);
|
|
@@ -1695,7 +1695,7 @@ var EsploraProvider = class {
|
|
|
1695
1695
|
return response.json();
|
|
1696
1696
|
}
|
|
1697
1697
|
async getTxStatus(txid) {
|
|
1698
|
-
const txresponse = await
|
|
1698
|
+
const txresponse = await chunkG552MISJ_cjs.baseFetch(`${this.baseUrl}/tx/${txid}`);
|
|
1699
1699
|
if (!txresponse.ok) {
|
|
1700
1700
|
throw new Error(txresponse.statusText);
|
|
1701
1701
|
}
|
|
@@ -1703,7 +1703,7 @@ var EsploraProvider = class {
|
|
|
1703
1703
|
if (!tx.status.confirmed) {
|
|
1704
1704
|
return { confirmed: false };
|
|
1705
1705
|
}
|
|
1706
|
-
const response = await
|
|
1706
|
+
const response = await chunkG552MISJ_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/status`);
|
|
1707
1707
|
if (!response.ok) {
|
|
1708
1708
|
throw new Error(`Failed to get transaction status: ${response.statusText}`);
|
|
1709
1709
|
}
|
|
@@ -1787,7 +1787,7 @@ var EsploraProvider = class {
|
|
|
1787
1787
|
return stopFunc;
|
|
1788
1788
|
}
|
|
1789
1789
|
async getChainTip() {
|
|
1790
|
-
const tipBlocks = await
|
|
1790
|
+
const tipBlocks = await chunkG552MISJ_cjs.baseFetch(`${this.baseUrl}/blocks`);
|
|
1791
1791
|
if (!tipBlocks.ok) {
|
|
1792
1792
|
throw new Error(`Failed to get chain tip: ${tipBlocks.statusText}`);
|
|
1793
1793
|
}
|
|
@@ -1806,7 +1806,7 @@ var EsploraProvider = class {
|
|
|
1806
1806
|
};
|
|
1807
1807
|
}
|
|
1808
1808
|
async broadcastPackage(parent, child) {
|
|
1809
|
-
const response = await
|
|
1809
|
+
const response = await chunkG552MISJ_cjs.baseFetch(`${this.baseUrl}/txs/package`, {
|
|
1810
1810
|
method: "POST",
|
|
1811
1811
|
headers: {
|
|
1812
1812
|
"Content-Type": "application/json"
|
|
@@ -1820,7 +1820,7 @@ var EsploraProvider = class {
|
|
|
1820
1820
|
return response.json();
|
|
1821
1821
|
}
|
|
1822
1822
|
async broadcastTx(tx) {
|
|
1823
|
-
const response = await
|
|
1823
|
+
const response = await chunkG552MISJ_cjs.baseFetch(`${this.baseUrl}/tx`, {
|
|
1824
1824
|
method: "POST",
|
|
1825
1825
|
headers: {
|
|
1826
1826
|
"Content-Type": "text/plain"
|
|
@@ -1982,7 +1982,7 @@ function findP2AOutput(tx) {
|
|
|
1982
1982
|
var CHILD_DUST_AMOUNT = 546;
|
|
1983
1983
|
function buildAnchorChild(params) {
|
|
1984
1984
|
const { parent, feeRate, fundingCoins, changeAddress, tapInternalKey, network } = params;
|
|
1985
|
-
const child = new
|
|
1985
|
+
const child = new chunkG552MISJ_cjs.Transaction({ version: 3, allowLegacyWitnessUtxo: true });
|
|
1986
1986
|
child.addInput(findP2AOutput(parent));
|
|
1987
1987
|
const estimator = TxWeightEstimator.create().addP2AInput();
|
|
1988
1988
|
for (const _ of fundingCoins) {
|
|
@@ -2030,7 +2030,7 @@ function buildForfeitTx(inputs, forfeitPkScript, txLocktime) {
|
|
|
2030
2030
|
);
|
|
2031
2031
|
}
|
|
2032
2032
|
function buildForfeitTxWithOutput(inputs, output, txLocktime) {
|
|
2033
|
-
const tx = new
|
|
2033
|
+
const tx = new chunkG552MISJ_cjs.Transaction({
|
|
2034
2034
|
version: 3,
|
|
2035
2035
|
lockTime: txLocktime
|
|
2036
2036
|
});
|
|
@@ -2106,7 +2106,7 @@ function validateVtxoTxGraph(graph, roundTransaction, sweepTapTreeRoot) {
|
|
|
2106
2106
|
if (previousScriptKey.length !== 32) {
|
|
2107
2107
|
throw new Error(`parent output ${childIndex} has invalid script`);
|
|
2108
2108
|
}
|
|
2109
|
-
const cosigners =
|
|
2109
|
+
const cosigners = chunkG552MISJ_cjs.getArkPsbtFields(child.root, 0, chunkG552MISJ_cjs.CosignerPublicKey);
|
|
2110
2110
|
if (cosigners.length === 0) {
|
|
2111
2111
|
throw ErrMissingCosignersPublicKeys;
|
|
2112
2112
|
}
|
|
@@ -2164,7 +2164,7 @@ var EmulatorPacket = class _EmulatorPacket {
|
|
|
2164
2164
|
return new _EmulatorPacket(entries);
|
|
2165
2165
|
}
|
|
2166
2166
|
static fromBytes(data) {
|
|
2167
|
-
const reader = new
|
|
2167
|
+
const reader = new chunkXN55B6EP_cjs.BufferReader(data);
|
|
2168
2168
|
const entryCount = reader.readCompactSize();
|
|
2169
2169
|
const entries = [];
|
|
2170
2170
|
for (let i = 0; i < entryCount; i++) {
|
|
@@ -2182,7 +2182,7 @@ var EmulatorPacket = class _EmulatorPacket {
|
|
|
2182
2182
|
return _EmulatorPacket.PACKET_TYPE;
|
|
2183
2183
|
}
|
|
2184
2184
|
serialize() {
|
|
2185
|
-
const writer = new
|
|
2185
|
+
const writer = new chunkXN55B6EP_cjs.BufferWriter();
|
|
2186
2186
|
writer.writeCompactSize(this.entries.length);
|
|
2187
2187
|
for (const entry of this.entries) {
|
|
2188
2188
|
writer.writeUint16LE(entry.vin);
|
|
@@ -2269,7 +2269,7 @@ var Extension = class _Extension {
|
|
|
2269
2269
|
`expected magic prefix ${base.hex.encode(ARKADE_MAGIC)}, got ${base.hex.encode(payload.slice(0, Math.min(payload.length, ARKADE_MAGIC.length)))}`
|
|
2270
2270
|
);
|
|
2271
2271
|
}
|
|
2272
|
-
const reader = new
|
|
2272
|
+
const reader = new chunkXN55B6EP_cjs.BufferReader(payload.slice(ARKADE_MAGIC.length));
|
|
2273
2273
|
const packets = [];
|
|
2274
2274
|
while (reader.remaining() > 0) {
|
|
2275
2275
|
const packetType = reader.readByte();
|
|
@@ -2343,7 +2343,7 @@ var Extension = class _Extension {
|
|
|
2343
2343
|
*/
|
|
2344
2344
|
getAssetPacket() {
|
|
2345
2345
|
for (const p of this.packets) {
|
|
2346
|
-
if (p instanceof
|
|
2346
|
+
if (p instanceof chunkXN55B6EP_cjs.Packet) {
|
|
2347
2347
|
return p;
|
|
2348
2348
|
}
|
|
2349
2349
|
}
|
|
@@ -2381,8 +2381,8 @@ var Extension = class _Extension {
|
|
|
2381
2381
|
};
|
|
2382
2382
|
function parsePacket(packetType, data) {
|
|
2383
2383
|
switch (packetType) {
|
|
2384
|
-
case
|
|
2385
|
-
return
|
|
2384
|
+
case chunkXN55B6EP_cjs.Packet.PACKET_TYPE:
|
|
2385
|
+
return chunkXN55B6EP_cjs.Packet.fromBytes(data);
|
|
2386
2386
|
case EmulatorPacket.PACKET_TYPE:
|
|
2387
2387
|
return EmulatorPacket.fromBytes(data);
|
|
2388
2388
|
default:
|
|
@@ -2429,16 +2429,16 @@ function buildOpReturnScript(data) {
|
|
|
2429
2429
|
}
|
|
2430
2430
|
return script;
|
|
2431
2431
|
}
|
|
2432
|
-
var ErrOffchainOutputNotFound = (address) => new
|
|
2433
|
-
var ErrInvalidAssetOutputAmount = (got, want, assetId) => new
|
|
2432
|
+
var ErrOffchainOutputNotFound = (address) => new chunkG552MISJ_cjs.ServerResponseMismatchError(`offchain send output not found: ${address}`);
|
|
2433
|
+
var ErrInvalidAssetOutputAmount = (got, want, assetId) => new chunkG552MISJ_cjs.ServerResponseMismatchError(
|
|
2434
2434
|
`invalid asset output amount for ${assetId}: got ${got}, want ${want}`
|
|
2435
2435
|
);
|
|
2436
|
-
var ErrAssetGroupNotFound = (assetId) => new
|
|
2437
|
-
var ErrAssetOutputNotFound = (assetId, outputIndex) => new
|
|
2436
|
+
var ErrAssetGroupNotFound = (assetId) => new chunkG552MISJ_cjs.ServerResponseMismatchError(`asset group not found in batch leaf: ${assetId}`);
|
|
2437
|
+
var ErrAssetOutputNotFound = (assetId, outputIndex) => new chunkG552MISJ_cjs.ServerResponseMismatchError(
|
|
2438
2438
|
`asset output not found in asset group ${assetId} at index ${outputIndex}`
|
|
2439
2439
|
);
|
|
2440
|
-
var ErrOnchainOutputNotFound = (address) => new
|
|
2441
|
-
var ErrUnvalidatedOffchainOutput = (address) => new
|
|
2440
|
+
var ErrOnchainOutputNotFound = (address) => new chunkG552MISJ_cjs.ServerResponseMismatchError(`onchain output not found: ${address}`);
|
|
2441
|
+
var ErrUnvalidatedOffchainOutput = (address) => new chunkG552MISJ_cjs.ServerResponseMismatchError(
|
|
2442
2442
|
`offchain output ${address} cannot be validated: virtual output tree signing did not run`
|
|
2443
2443
|
);
|
|
2444
2444
|
var ErrInvalidOnchainOutputAmount = (address) => new Error(`invalid onchain output amount: ${address}`);
|
|
@@ -2447,7 +2447,7 @@ var ErrInvalidOffchainOutputAmount = (address) => new Error(`invalid offchain ou
|
|
|
2447
2447
|
function assertFinalCommitmentMatchesValidated(finalCommitmentTx, validatedCommitmentTxid, context) {
|
|
2448
2448
|
if (!validatedCommitmentTxid) return;
|
|
2449
2449
|
if (finalCommitmentTx.id === validatedCommitmentTxid) return;
|
|
2450
|
-
throw new
|
|
2450
|
+
throw new chunkG552MISJ_cjs.ServerResponseMismatchError(
|
|
2451
2451
|
`${context}: finalization commitment tx ${finalCommitmentTx.id} differs from the validated commitment tx ${validatedCommitmentTxid}`
|
|
2452
2452
|
);
|
|
2453
2453
|
}
|
|
@@ -2457,7 +2457,7 @@ function validateBatchRecipients(commitmentTx, vtxoTreeLeaves, recipients, netwo
|
|
|
2457
2457
|
for (const recipient of recipients) {
|
|
2458
2458
|
let arkAddress;
|
|
2459
2459
|
try {
|
|
2460
|
-
arkAddress =
|
|
2460
|
+
arkAddress = chunkG552MISJ_cjs.ArkAddress.decode(recipient.address);
|
|
2461
2461
|
} catch {
|
|
2462
2462
|
validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
|
|
2463
2463
|
continue;
|
|
@@ -2469,7 +2469,7 @@ function validateBatchRecipientsWithoutTree(commitmentTx, recipients, network) {
|
|
|
2469
2469
|
const usedOnchainOutputs = /* @__PURE__ */ new Set();
|
|
2470
2470
|
for (const recipient of recipients) {
|
|
2471
2471
|
try {
|
|
2472
|
-
|
|
2472
|
+
chunkG552MISJ_cjs.ArkAddress.decode(recipient.address);
|
|
2473
2473
|
} catch {
|
|
2474
2474
|
validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
|
|
2475
2475
|
continue;
|
|
@@ -2702,7 +2702,7 @@ function assetMintResolver() {
|
|
|
2702
2702
|
if (!tx.assets?.length || !tx.key.arkTxid) return void 0;
|
|
2703
2703
|
const minted = tx.assets.filter((a) => {
|
|
2704
2704
|
try {
|
|
2705
|
-
return base.hex.encode(
|
|
2705
|
+
return base.hex.encode(chunkXN55B6EP_cjs.AssetId.fromString(a.assetId).txid) === tx.key.arkTxid;
|
|
2706
2706
|
} catch {
|
|
2707
2707
|
return false;
|
|
2708
2708
|
}
|
|
@@ -2745,7 +2745,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
2745
2745
|
const existing = inputsByAssetId.get(asset.assetId);
|
|
2746
2746
|
inputsByAssetId.set(asset.assetId, [
|
|
2747
2747
|
...existing ?? [],
|
|
2748
|
-
|
|
2748
|
+
chunkXN55B6EP_cjs.AssetInput.create(inputIndex, asset.amount)
|
|
2749
2749
|
]);
|
|
2750
2750
|
}
|
|
2751
2751
|
}
|
|
@@ -2757,7 +2757,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
2757
2757
|
const existing = outputsByAssetId.get(asset.assetId);
|
|
2758
2758
|
outputsByAssetId.set(asset.assetId, [
|
|
2759
2759
|
...existing ?? [],
|
|
2760
|
-
|
|
2760
|
+
chunkXN55B6EP_cjs.AssetOutput.create(outputIndex, asset.amount)
|
|
2761
2761
|
]);
|
|
2762
2762
|
}
|
|
2763
2763
|
}
|
|
@@ -2768,7 +2768,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
2768
2768
|
const existing = outputsByAssetId.get(asset.assetId);
|
|
2769
2769
|
outputsByAssetId.set(asset.assetId, [
|
|
2770
2770
|
...existing ?? [],
|
|
2771
|
-
|
|
2771
|
+
chunkXN55B6EP_cjs.AssetOutput.create(outputIndex, asset.amount)
|
|
2772
2772
|
]);
|
|
2773
2773
|
}
|
|
2774
2774
|
}
|
|
@@ -2777,11 +2777,11 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
2777
2777
|
for (const assetIdStr of allAssetIds) {
|
|
2778
2778
|
const inputs = inputsByAssetId.get(assetIdStr);
|
|
2779
2779
|
const outputs = outputsByAssetId.get(assetIdStr);
|
|
2780
|
-
const assetId =
|
|
2781
|
-
const group =
|
|
2780
|
+
const assetId = chunkXN55B6EP_cjs.AssetId.fromString(assetIdStr);
|
|
2781
|
+
const group = chunkXN55B6EP_cjs.AssetGroup.create(assetId, null, inputs ?? [], outputs ?? [], []);
|
|
2782
2782
|
groups.push(group);
|
|
2783
2783
|
}
|
|
2784
|
-
return
|
|
2784
|
+
return chunkXN55B6EP_cjs.Packet.create(groups);
|
|
2785
2785
|
}
|
|
2786
2786
|
function selectCoinsWithAsset(coins, assetId, requiredAmount) {
|
|
2787
2787
|
const coinsWithAsset = coins.filter((coin) => coin.assets?.some((a) => a.assetId === assetId));
|
|
@@ -2866,13 +2866,13 @@ var toTimelock = (value) => ({
|
|
|
2866
2866
|
var toSeconds = (t) => t.type === "seconds" ? t.value : t.value * NOMINAL_BLOCK_SECONDS;
|
|
2867
2867
|
function assertTimelockInPolicy(timelock, policy, label, overrideOption) {
|
|
2868
2868
|
if (policy.requireSeconds && timelock.type === "blocks") {
|
|
2869
|
-
throw new
|
|
2869
|
+
throw new chunkG552MISJ_cjs.ServerResponseMismatchError(
|
|
2870
2870
|
`${label} rejected: block-typed timelocks are not accepted (got ${timelock.value})`
|
|
2871
2871
|
);
|
|
2872
2872
|
}
|
|
2873
2873
|
const seconds = toSeconds(timelock);
|
|
2874
2874
|
if (seconds < policy.minSeconds) {
|
|
2875
|
-
throw new
|
|
2875
|
+
throw new chunkG552MISJ_cjs.ServerResponseMismatchError(
|
|
2876
2876
|
`${label} rejected: ${timelock.value} ${timelock.type} is below the ${policy.minSeconds}s floor; pass ${overrideOption}: ${seconds}n to Wallet.create to lower it`
|
|
2877
2877
|
);
|
|
2878
2878
|
}
|
|
@@ -2893,7 +2893,7 @@ function resolveBatchExpiryPolicy(network, overrides) {
|
|
|
2893
2893
|
}
|
|
2894
2894
|
function assertValidBatchExpiry(batchExpiry, policy) {
|
|
2895
2895
|
if (policy.advertisedVtxoTreeExpiry !== void 0 && batchExpiry !== policy.advertisedVtxoTreeExpiry) {
|
|
2896
|
-
throw new
|
|
2896
|
+
throw new chunkG552MISJ_cjs.ServerResponseMismatchError(
|
|
2897
2897
|
`batch expiry rejected: ${batchExpiry} does not match the advertised vtxoTreeExpiry ${policy.advertisedVtxoTreeExpiry}`
|
|
2898
2898
|
);
|
|
2899
2899
|
}
|
|
@@ -2923,21 +2923,21 @@ function resolveCheckpointExitDelayPolicy(network, overrides) {
|
|
|
2923
2923
|
function assertValidServerUnrollScript(checkpointTapscript, policy) {
|
|
2924
2924
|
let script;
|
|
2925
2925
|
try {
|
|
2926
|
-
script =
|
|
2926
|
+
script = chunkG552MISJ_cjs.CSVMultisigTapscript.decode(base.hex.decode(checkpointTapscript));
|
|
2927
2927
|
} catch (e) {
|
|
2928
|
-
throw new
|
|
2928
|
+
throw new chunkG552MISJ_cjs.ServerResponseMismatchError(
|
|
2929
2929
|
`checkpoint exit delay rejected: invalid checkpointTapscript from server (${e instanceof Error ? e.message : String(e)})`
|
|
2930
2930
|
);
|
|
2931
2931
|
}
|
|
2932
2932
|
if (policy.advertisedForfeitPubkey !== void 0) {
|
|
2933
2933
|
const { pubkeys } = script.params;
|
|
2934
2934
|
if (pubkeys.length !== 1) {
|
|
2935
|
-
throw new
|
|
2935
|
+
throw new chunkG552MISJ_cjs.ServerResponseMismatchError(
|
|
2936
2936
|
`checkpoint exit delay rejected: checkpointTapscript must commit to exactly one pubkey, got ${pubkeys.length} [${pubkeys.map(base.hex.encode).join(", ")}]`
|
|
2937
2937
|
);
|
|
2938
2938
|
}
|
|
2939
2939
|
if (!utils_js.equalBytes(pubkeys[0], policy.advertisedForfeitPubkey)) {
|
|
2940
|
-
throw new
|
|
2940
|
+
throw new chunkG552MISJ_cjs.ServerResponseMismatchError(
|
|
2941
2941
|
`checkpoint exit delay rejected: checkpointTapscript pubkey ${base.hex.encode(pubkeys[0])} does not match the advertised forfeitPubkey ${base.hex.encode(policy.advertisedForfeitPubkey)}`
|
|
2942
2942
|
);
|
|
2943
2943
|
}
|
|
@@ -2981,8 +2981,8 @@ function buildOffchainTx(inputs, outputs, serverUnrollScript) {
|
|
|
2981
2981
|
function buildVirtualTx(inputs, outputs) {
|
|
2982
2982
|
let lockTime = 0n;
|
|
2983
2983
|
for (const input of inputs) {
|
|
2984
|
-
const tapscript =
|
|
2985
|
-
if (
|
|
2984
|
+
const tapscript = chunkG552MISJ_cjs.decodeTapscript(chunkG552MISJ_cjs.scriptFromTapLeafScript(input.tapLeafScript));
|
|
2985
|
+
if (chunkG552MISJ_cjs.CLTVMultisigTapscript.is(tapscript)) {
|
|
2986
2986
|
if (lockTime !== 0n) {
|
|
2987
2987
|
if (isSeconds(lockTime) !== isSeconds(tapscript.params.absoluteTimelock)) {
|
|
2988
2988
|
throw new Error("cannot mix seconds and blocks locktime");
|
|
@@ -2993,7 +2993,7 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
2993
2993
|
}
|
|
2994
2994
|
}
|
|
2995
2995
|
}
|
|
2996
|
-
const tx = new
|
|
2996
|
+
const tx = new chunkG552MISJ_cjs.Transaction({
|
|
2997
2997
|
version: 3,
|
|
2998
2998
|
lockTime: Number(lockTime)
|
|
2999
2999
|
});
|
|
@@ -3003,12 +3003,12 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
3003
3003
|
index: input.vout,
|
|
3004
3004
|
sequence: lockTime ? btcSigner.DEFAULT_SEQUENCE - 1 : void 0,
|
|
3005
3005
|
witnessUtxo: {
|
|
3006
|
-
script:
|
|
3006
|
+
script: chunkG552MISJ_cjs.VtxoScript.decode(input.tapTree).pkScript,
|
|
3007
3007
|
amount: BigInt(input.value)
|
|
3008
3008
|
},
|
|
3009
3009
|
tapLeafScript: [input.tapLeafScript]
|
|
3010
3010
|
});
|
|
3011
|
-
|
|
3011
|
+
chunkG552MISJ_cjs.setArkPsbtField(tx, i, chunkG552MISJ_cjs.VtxoTaprootTree, input.tapTree);
|
|
3012
3012
|
}
|
|
3013
3013
|
for (const output of outputs) {
|
|
3014
3014
|
tx.addOutput(output);
|
|
@@ -3017,8 +3017,8 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
3017
3017
|
return tx;
|
|
3018
3018
|
}
|
|
3019
3019
|
function buildCheckpointTx(vtxo, serverUnrollScript) {
|
|
3020
|
-
const collaborativeClosure =
|
|
3021
|
-
const checkpointVtxoScript = new
|
|
3020
|
+
const collaborativeClosure = chunkG552MISJ_cjs.decodeTapscript(chunkG552MISJ_cjs.scriptFromTapLeafScript(vtxo.tapLeafScript));
|
|
3021
|
+
const checkpointVtxoScript = new chunkG552MISJ_cjs.VtxoScript([
|
|
3022
3022
|
serverUnrollScript.script,
|
|
3023
3023
|
collaborativeClosure.script
|
|
3024
3024
|
]);
|
|
@@ -3171,7 +3171,7 @@ function combineTapscriptSigs(signedTx, originalTx) {
|
|
|
3171
3171
|
}
|
|
3172
3172
|
function isValidArkAddress(address) {
|
|
3173
3173
|
try {
|
|
3174
|
-
|
|
3174
|
+
chunkG552MISJ_cjs.ArkAddress.decode(address);
|
|
3175
3175
|
return true;
|
|
3176
3176
|
} catch (e) {
|
|
3177
3177
|
return false;
|
|
@@ -3179,16 +3179,16 @@ function isValidArkAddress(address) {
|
|
|
3179
3179
|
}
|
|
3180
3180
|
function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, context) {
|
|
3181
3181
|
if (serverCheckpointTxs.length !== expectedCheckpoints.length) {
|
|
3182
|
-
throw new
|
|
3182
|
+
throw new chunkG552MISJ_cjs.ServerResponseMismatchError(
|
|
3183
3183
|
`${context} returned ${serverCheckpointTxs.length} checkpoints, expected ${expectedCheckpoints.length}`
|
|
3184
3184
|
);
|
|
3185
3185
|
}
|
|
3186
3186
|
const byTxid = new Map(expectedCheckpoints.map((c) => [c.id, c]));
|
|
3187
3187
|
return serverCheckpointTxs.map((encoded, index) => {
|
|
3188
|
-
const server =
|
|
3188
|
+
const server = chunkG552MISJ_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
|
|
3189
3189
|
const local = byTxid.get(server.id);
|
|
3190
3190
|
if (!local) {
|
|
3191
|
-
throw new
|
|
3191
|
+
throw new chunkG552MISJ_cjs.ServerResponseMismatchError(
|
|
3192
3192
|
`${context} checkpoint ${index} txid ${server.id} does not match any submitted checkpoint`
|
|
3193
3193
|
);
|
|
3194
3194
|
}
|
|
@@ -3198,14 +3198,14 @@ function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, contex
|
|
|
3198
3198
|
}
|
|
3199
3199
|
function assertSubmittedArkTxid(response, signedArkTx, context) {
|
|
3200
3200
|
if (response.arkTxid !== signedArkTx.id) {
|
|
3201
|
-
throw new
|
|
3201
|
+
throw new chunkG552MISJ_cjs.ServerResponseMismatchError(
|
|
3202
3202
|
`${context} returned ark txid ${response.arkTxid}, expected ${signedArkTx.id}`
|
|
3203
3203
|
);
|
|
3204
3204
|
}
|
|
3205
3205
|
if (response.finalArkTx === void 0) return;
|
|
3206
|
-
const finalTxid =
|
|
3206
|
+
const finalTxid = chunkG552MISJ_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx)).id;
|
|
3207
3207
|
if (finalTxid !== signedArkTx.id) {
|
|
3208
|
-
throw new
|
|
3208
|
+
throw new chunkG552MISJ_cjs.ServerResponseMismatchError(
|
|
3209
3209
|
`${context} returned final ark tx ${finalTxid}, expected ${signedArkTx.id}`
|
|
3210
3210
|
);
|
|
3211
3211
|
}
|
|
@@ -3224,10 +3224,10 @@ function assertServerSignedLeaf(serverTx, localTx, inputIndex, serverPubkeyHex,
|
|
|
3224
3224
|
[serverPubkeyHex],
|
|
3225
3225
|
void 0,
|
|
3226
3226
|
void 0,
|
|
3227
|
-
payment_js.tapLeafHash(
|
|
3227
|
+
payment_js.tapLeafHash(chunkG552MISJ_cjs.scriptFromTapLeafScript(leaf))
|
|
3228
3228
|
);
|
|
3229
3229
|
} catch (error) {
|
|
3230
|
-
throw new
|
|
3230
|
+
throw new chunkG552MISJ_cjs.ServerResponseMismatchError(
|
|
3231
3231
|
`${context}: input ${inputIndex} is not signed by the server on the leaf being spent (${error instanceof Error ? error.message : String(error)})`
|
|
3232
3232
|
);
|
|
3233
3233
|
}
|
|
@@ -3236,20 +3236,20 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
|
|
|
3236
3236
|
const byOutpoint = new Map(inputs.map((input) => [`${input.txid}:${input.vout}`, input]));
|
|
3237
3237
|
for (const [index, checkpoint] of checkpoints.entries()) {
|
|
3238
3238
|
if (checkpoint.inputsLength !== 1) {
|
|
3239
|
-
throw new
|
|
3239
|
+
throw new chunkG552MISJ_cjs.ServerResponseMismatchError(
|
|
3240
3240
|
`${context}: checkpoint ${index} spends ${checkpoint.inputsLength} inputs, expected 1`
|
|
3241
3241
|
);
|
|
3242
3242
|
}
|
|
3243
3243
|
const spent = checkpoint.getInput(0);
|
|
3244
3244
|
if (!spent.txid || spent.index === void 0) {
|
|
3245
|
-
throw new
|
|
3245
|
+
throw new chunkG552MISJ_cjs.ServerResponseMismatchError(
|
|
3246
3246
|
`${context}: checkpoint ${index} has no input outpoint`
|
|
3247
3247
|
);
|
|
3248
3248
|
}
|
|
3249
3249
|
const outpoint = `${base.hex.encode(spent.txid)}:${spent.index}`;
|
|
3250
3250
|
const input = byOutpoint.get(outpoint);
|
|
3251
3251
|
if (!input) {
|
|
3252
|
-
throw new
|
|
3252
|
+
throw new chunkG552MISJ_cjs.ServerResponseMismatchError(
|
|
3253
3253
|
`${context}: checkpoint ${index} spends ${outpoint}, which is not one of the requested virtual outputs`
|
|
3254
3254
|
);
|
|
3255
3255
|
}
|
|
@@ -3257,7 +3257,7 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
|
|
|
3257
3257
|
(unroll) => buildCheckpointTx(input, unroll).tx.id === checkpoint.id
|
|
3258
3258
|
);
|
|
3259
3259
|
if (!rebuilt) {
|
|
3260
|
-
throw new
|
|
3260
|
+
throw new chunkG552MISJ_cjs.ServerResponseMismatchError(
|
|
3261
3261
|
`${context}: checkpoint ${index} txid ${checkpoint.id} differs from the checkpoint built locally for ${outpoint}`
|
|
3262
3262
|
);
|
|
3263
3263
|
}
|
|
@@ -3284,11 +3284,11 @@ async function submitOffchainTx(provider, offchainTx, signer, hooks, options) {
|
|
|
3284
3284
|
const verify = options?.verifyServerSignatures;
|
|
3285
3285
|
if (verify) {
|
|
3286
3286
|
if (response.finalArkTx === void 0) {
|
|
3287
|
-
throw new
|
|
3287
|
+
throw new chunkG552MISJ_cjs.ServerResponseMismatchError(
|
|
3288
3288
|
"submitTx: server returned no final ark tx to verify its signatures against"
|
|
3289
3289
|
);
|
|
3290
3290
|
}
|
|
3291
|
-
const finalArkTx =
|
|
3291
|
+
const finalArkTx = chunkG552MISJ_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx));
|
|
3292
3292
|
const serverPubkeyHex = base.hex.encode(
|
|
3293
3293
|
verify.serverPubkey.length === 33 ? verify.serverPubkey.subarray(1) : verify.serverPubkey
|
|
3294
3294
|
);
|
|
@@ -3347,12 +3347,12 @@ function claimWithPreimageIdentity(identity, preimage) {
|
|
|
3347
3347
|
return {
|
|
3348
3348
|
...identity,
|
|
3349
3349
|
sign: async (tx, inputIndexes) => {
|
|
3350
|
-
const signed =
|
|
3350
|
+
const signed = chunkG552MISJ_cjs.Transaction.fromPSBT(
|
|
3351
3351
|
(await identity.sign(tx.clone(), inputIndexes)).toPSBT()
|
|
3352
3352
|
);
|
|
3353
3353
|
const indexes = inputIndexes ?? Array.from({ length: signed.inputsLength }, (_, i) => i);
|
|
3354
3354
|
for (const index of indexes) {
|
|
3355
|
-
|
|
3355
|
+
chunkG552MISJ_cjs.setArkPsbtField(signed, index, chunkG552MISJ_cjs.ConditionWitness, [preimage]);
|
|
3356
3356
|
}
|
|
3357
3357
|
return signed;
|
|
3358
3358
|
}
|
|
@@ -3544,7 +3544,7 @@ function extendCoinWithTapscript(boardingTapscript, utxo) {
|
|
|
3544
3544
|
};
|
|
3545
3545
|
}
|
|
3546
3546
|
function deriveContractTapscripts(contract) {
|
|
3547
|
-
const handler =
|
|
3547
|
+
const handler = chunkBABJ77NG_cjs.contractHandlers.get(contract.type);
|
|
3548
3548
|
if (!handler) {
|
|
3549
3549
|
throw new Error(`No handler for contract type '${contract.type}'`);
|
|
3550
3550
|
}
|
|
@@ -3615,7 +3615,7 @@ function getRandomId() {
|
|
|
3615
3615
|
}
|
|
3616
3616
|
function isValidArkAddress2(address) {
|
|
3617
3617
|
try {
|
|
3618
|
-
|
|
3618
|
+
chunkG552MISJ_cjs.ArkAddress.decode(address);
|
|
3619
3619
|
return true;
|
|
3620
3620
|
} catch (e) {
|
|
3621
3621
|
return false;
|
|
@@ -3643,7 +3643,7 @@ function assertRecipientArkAddress(encoded, address, context) {
|
|
|
3643
3643
|
function assertTapTreeDerivesAddress(encoded, tapTree, address) {
|
|
3644
3644
|
let derived;
|
|
3645
3645
|
try {
|
|
3646
|
-
derived =
|
|
3646
|
+
derived = chunkG552MISJ_cjs.VtxoScript.decode(tapTree).pkScript;
|
|
3647
3647
|
} catch (e) {
|
|
3648
3648
|
throw new Error(
|
|
3649
3649
|
`Invalid tapTree for ${encoded}: ${e instanceof Error ? e.message : String(e)}`
|
|
@@ -3660,7 +3660,7 @@ function validateRecipients(recipients, dustAmount, context) {
|
|
|
3660
3660
|
for (const recipient of recipients) {
|
|
3661
3661
|
let address;
|
|
3662
3662
|
try {
|
|
3663
|
-
address =
|
|
3663
|
+
address = chunkG552MISJ_cjs.ArkAddress.decode(recipient.address);
|
|
3664
3664
|
} catch (e) {
|
|
3665
3665
|
throw new Error(`Invalid Arkade address: ${recipient.address}`);
|
|
3666
3666
|
}
|
|
@@ -3685,7 +3685,7 @@ function validateRecipients(recipients, dustAmount, context) {
|
|
|
3685
3685
|
|
|
3686
3686
|
// src/contracts/spendability.ts
|
|
3687
3687
|
function isContractGenericallySpendable(contract) {
|
|
3688
|
-
return
|
|
3688
|
+
return chunkBABJ77NG_cjs.contractHandlers.get(contract.type)?.isGenericallySpendable?.(contract) === true;
|
|
3689
3689
|
}
|
|
3690
3690
|
function gatedContracts(contracts) {
|
|
3691
3691
|
const gated = /* @__PURE__ */ new Map();
|
|
@@ -3698,7 +3698,7 @@ function gateExclusion(gated) {
|
|
|
3698
3698
|
return (vtxo) => {
|
|
3699
3699
|
const type = vtxo.script === void 0 ? void 0 : gated.get(vtxo.script);
|
|
3700
3700
|
if (type === void 0) return void 0;
|
|
3701
|
-
if (!
|
|
3701
|
+
if (!chunkBABJ77NG_cjs.contractHandlers.has(type)) {
|
|
3702
3702
|
return `at ${vtxo.script} (contract type '${type}') has no handler registered in this build`;
|
|
3703
3703
|
}
|
|
3704
3704
|
return `at ${vtxo.script} (contract type '${type}') is not generically spendable`;
|
|
@@ -3734,7 +3734,7 @@ function selectPendingRecoveryOutpoints(contractsWithVtxos, signerSet, nowSecond
|
|
|
3734
3734
|
continue;
|
|
3735
3735
|
}
|
|
3736
3736
|
for (const v of vtxos) {
|
|
3737
|
-
if (!
|
|
3737
|
+
if (!chunkG552MISJ_cjs.hasTerminalSpend(v) && !v.isSwept) out.add(`${v.txid}:${v.vout}`);
|
|
3738
3738
|
}
|
|
3739
3739
|
}
|
|
3740
3740
|
return out;
|
|
@@ -3767,10 +3767,10 @@ function byValueDescending(vtxos) {
|
|
|
3767
3767
|
return [...vtxos].sort((a, b) => b.value - a.value);
|
|
3768
3768
|
}
|
|
3769
3769
|
async function fetchTimeHeight(wallet) {
|
|
3770
|
-
return
|
|
3770
|
+
return chunkG552MISJ_cjs.resolveTimeHeight(wallet.onchainProvider);
|
|
3771
3771
|
}
|
|
3772
3772
|
function canMigrateBySend(vtxo, now) {
|
|
3773
|
-
if (!
|
|
3773
|
+
if (!chunkG552MISJ_cjs.canSpendOffchain(vtxo, now)) return false;
|
|
3774
3774
|
return vtxo.expiresAt !== void 0 || vtxo.expiresAtHeight !== void 0;
|
|
3775
3775
|
}
|
|
3776
3776
|
function byExpiryAscending(vtxos, now) {
|
|
@@ -3778,7 +3778,7 @@ function byExpiryAscending(vtxos, now) {
|
|
|
3778
3778
|
if (vtxo.isSwept) return -Infinity;
|
|
3779
3779
|
if (vtxo.expiresAt !== void 0) return vtxo.expiresAt.getTime();
|
|
3780
3780
|
if (vtxo.expiresAtHeight !== void 0) {
|
|
3781
|
-
return
|
|
3781
|
+
return chunkG552MISJ_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
|
|
3782
3782
|
}
|
|
3783
3783
|
return Infinity;
|
|
3784
3784
|
};
|
|
@@ -3805,7 +3805,7 @@ function priceSettlementInputs(vtxos, estimator) {
|
|
|
3805
3805
|
const payable = [];
|
|
3806
3806
|
const net = /* @__PURE__ */ new Map();
|
|
3807
3807
|
for (const vtxo of vtxos) {
|
|
3808
|
-
const inputFee = estimator.evalOffchainInput(
|
|
3808
|
+
const inputFee = estimator.evalOffchainInput(chunkG552MISJ_cjs.toOffchainInputFeeParams(vtxo));
|
|
3809
3809
|
if (inputFee.satoshis >= vtxo.value) {
|
|
3810
3810
|
continue;
|
|
3811
3811
|
}
|
|
@@ -3831,7 +3831,7 @@ function deductOffchainOutputFee(subtotal, estimator, arkAddress) {
|
|
|
3831
3831
|
}
|
|
3832
3832
|
const outputFee = estimator.evalOffchainOutput({
|
|
3833
3833
|
amount: subtotal,
|
|
3834
|
-
script: base.hex.encode(
|
|
3834
|
+
script: base.hex.encode(chunkG552MISJ_cjs.ArkAddress.decode(arkAddress).pkScript)
|
|
3835
3835
|
});
|
|
3836
3836
|
return subtotal - BigInt(outputFee.satoshis);
|
|
3837
3837
|
}
|
|
@@ -3849,10 +3849,10 @@ var DEFAULT_SETTLEMENT_CONFIG = {
|
|
|
3849
3849
|
};
|
|
3850
3850
|
function getRecoverableVtxos(vtxos, dustAmount, now) {
|
|
3851
3851
|
return vtxos.filter((vtxo) => {
|
|
3852
|
-
if (
|
|
3852
|
+
if (chunkG552MISJ_cjs.canRecoverOnchain(vtxo, now)) {
|
|
3853
3853
|
return true;
|
|
3854
3854
|
}
|
|
3855
|
-
if (
|
|
3855
|
+
if (chunkG552MISJ_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
|
|
3856
3856
|
return true;
|
|
3857
3857
|
}
|
|
3858
3858
|
return false;
|
|
@@ -3883,7 +3883,7 @@ function getRecoverableWithSubdust(vtxos, dustAmount, now) {
|
|
|
3883
3883
|
}
|
|
3884
3884
|
function isVtxoExpiringSoon(vtxo, thresholdMs) {
|
|
3885
3885
|
const realThresholdMs = thresholdMs <= 100 ? DEFAULT_THRESHOLD_MS : thresholdMs;
|
|
3886
|
-
const expiresAt =
|
|
3886
|
+
const expiresAt = chunkG552MISJ_cjs.normalizeVtxo(vtxo).expiresAt;
|
|
3887
3887
|
if (expiresAt === void 0) return false;
|
|
3888
3888
|
const now = Date.now();
|
|
3889
3889
|
const batchExpiry = expiresAt.getTime();
|
|
@@ -3892,7 +3892,7 @@ function isVtxoExpiringSoon(vtxo, thresholdMs) {
|
|
|
3892
3892
|
}
|
|
3893
3893
|
function getExpiringAndRecoverableVtxos(vtxos, thresholdMs, dustAmount, now) {
|
|
3894
3894
|
return vtxos.filter(
|
|
3895
|
-
(vtxo) => isVtxoExpiringSoon(vtxo, thresholdMs) ||
|
|
3895
|
+
(vtxo) => isVtxoExpiringSoon(vtxo, thresholdMs) || chunkG552MISJ_cjs.canRecoverOnchain(vtxo, now) || isSubdust(vtxo, dustAmount)
|
|
3896
3896
|
);
|
|
3897
3897
|
}
|
|
3898
3898
|
function isMigrationCapable(wallet) {
|
|
@@ -4491,11 +4491,11 @@ var VtxoManager = class _VtxoManager {
|
|
|
4491
4491
|
`Sweep not economical: output ${outputAmount} sats after ${fee} sats fee is below dust (${dustAmount} sats)`
|
|
4492
4492
|
);
|
|
4493
4493
|
}
|
|
4494
|
-
const tx = new
|
|
4494
|
+
const tx = new chunkG552MISJ_cjs.Transaction();
|
|
4495
4495
|
for (const utxo of expiredUtxos) {
|
|
4496
|
-
const utxoScript =
|
|
4496
|
+
const utxoScript = chunkG552MISJ_cjs.VtxoScript.decode(utxo.tapTree);
|
|
4497
4497
|
const utxoExitLeaf = utxoScript.leaves.find(
|
|
4498
|
-
(leaf) =>
|
|
4498
|
+
(leaf) => chunkG552MISJ_cjs.CSVMultisigTapscript.isScriptValid(chunkG552MISJ_cjs.scriptFromTapLeafScript(leaf)) === true
|
|
4499
4499
|
);
|
|
4500
4500
|
if (!utxoExitLeaf) {
|
|
4501
4501
|
throw new Error(
|
|
@@ -4510,7 +4510,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4510
4510
|
amount: BigInt(utxo.value)
|
|
4511
4511
|
},
|
|
4512
4512
|
tapLeafScript: [utxoExitLeaf],
|
|
4513
|
-
sequence:
|
|
4513
|
+
sequence: chunkG552MISJ_cjs.getSequence(utxoExitLeaf)
|
|
4514
4514
|
});
|
|
4515
4515
|
}
|
|
4516
4516
|
tx.addOutputAddress(boardingAddress, outputAmount, this.getNetwork());
|
|
@@ -4744,8 +4744,8 @@ var VtxoManager = class _VtxoManager {
|
|
|
4744
4744
|
if (!serverPubKey) continue;
|
|
4745
4745
|
const cls = classifyAgainstSignerSet(serverPubKey, signerSet, nowSeconds);
|
|
4746
4746
|
if (cls.status === "CURRENT") continue;
|
|
4747
|
-
const recoverable = vtxos.filter((v) => v.isSwept && !
|
|
4748
|
-
const spendable = vtxos.filter((v) => !
|
|
4747
|
+
const recoverable = vtxos.filter((v) => v.isSwept && !chunkG552MISJ_cjs.hasTerminalSpend(v));
|
|
4748
|
+
const spendable = vtxos.filter((v) => !chunkG552MISJ_cjs.hasTerminalSpend(v) && !v.isSwept);
|
|
4749
4749
|
const value = spendable.reduce((sum, v) => sum + v.value, 0);
|
|
4750
4750
|
let recoverableCount = 0;
|
|
4751
4751
|
let recoverableValue = 0;
|
|
@@ -4758,7 +4758,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4758
4758
|
awaitingSweepCount = spendable.length;
|
|
4759
4759
|
awaitingSweepValue = value;
|
|
4760
4760
|
for (const v of spendable) {
|
|
4761
|
-
const exp =
|
|
4761
|
+
const exp = chunkG552MISJ_cjs.toBatchExpiry(v);
|
|
4762
4762
|
if (exp !== void 0 && (nextSweepEta === void 0 || exp < nextSweepEta)) {
|
|
4763
4763
|
nextSweepEta = exp;
|
|
4764
4764
|
}
|
|
@@ -5019,7 +5019,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5019
5019
|
/** Decodes the boarding tapscript exit path to extract the CSV timelock. */
|
|
5020
5020
|
getBoardingTimelock() {
|
|
5021
5021
|
const wallet = this.getSweepWallet();
|
|
5022
|
-
const exitScript =
|
|
5022
|
+
const exitScript = chunkG552MISJ_cjs.CSVMultisigTapscript.decode(
|
|
5023
5023
|
base.hex.decode(wallet.boardingTapscript.exitScript)
|
|
5024
5024
|
);
|
|
5025
5025
|
return exitScript.params.timelock;
|
|
@@ -5150,8 +5150,8 @@ var VtxoManager = class _VtxoManager {
|
|
|
5150
5150
|
* or doesn't carry the metadata.
|
|
5151
5151
|
*/
|
|
5152
5152
|
extractSpentOutpoint(error) {
|
|
5153
|
-
const ark =
|
|
5154
|
-
if (!
|
|
5153
|
+
const ark = chunkG552MISJ_cjs.maybeArkError(error);
|
|
5154
|
+
if (!chunkG552MISJ_cjs.isArkError(ark, chunkG552MISJ_cjs.ArkErrorName.VTXO_ALREADY_SPENT)) return void 0;
|
|
5155
5155
|
const raw = ark.metadata?.vtxo_outpoint;
|
|
5156
5156
|
if (typeof raw !== "string") return void 0;
|
|
5157
5157
|
const [txid, voutStr] = raw.split(":");
|
|
@@ -5341,7 +5341,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5341
5341
|
if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
|
|
5342
5342
|
break;
|
|
5343
5343
|
}
|
|
5344
|
-
const inputFee = estimator.evalOffchainInput(
|
|
5344
|
+
const inputFee = estimator.evalOffchainInput(chunkG552MISJ_cjs.toOffchainInputFeeParams(v));
|
|
5345
5345
|
if (inputFee.satoshis >= v.value) {
|
|
5346
5346
|
continue;
|
|
5347
5347
|
}
|
|
@@ -5361,7 +5361,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5361
5361
|
const arkAddress = await this.wallet.getAddress();
|
|
5362
5362
|
const outputFee = estimator.evalOffchainOutput({
|
|
5363
5363
|
amount: totalAmount,
|
|
5364
|
-
script: base.hex.encode(
|
|
5364
|
+
script: base.hex.encode(chunkG552MISJ_cjs.ArkAddress.decode(arkAddress).pkScript)
|
|
5365
5365
|
});
|
|
5366
5366
|
totalAmount -= BigInt(outputFee.satoshis);
|
|
5367
5367
|
if (totalAmount < dustAmount) return;
|
|
@@ -5441,7 +5441,7 @@ var ArkNote = class _ArkNote {
|
|
|
5441
5441
|
this.value = value;
|
|
5442
5442
|
this.HRP = HRP;
|
|
5443
5443
|
const preimageHash = utils_js.sha256(this.preimage);
|
|
5444
|
-
this.vtxoScript = new
|
|
5444
|
+
this.vtxoScript = new chunkG552MISJ_cjs.VtxoScript([noteTapscript(preimageHash)]);
|
|
5445
5445
|
const leaf = this.vtxoScript.leaves[0];
|
|
5446
5446
|
this.txid = base.hex.encode(new Uint8Array(preimageHash).reverse());
|
|
5447
5447
|
this.tapTree = this.vtxoScript.encode();
|
|
@@ -5608,7 +5608,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
5608
5608
|
const privateKey = data.slice(1, 33);
|
|
5609
5609
|
const serverPubKey = data.slice(33, 65);
|
|
5610
5610
|
const sequence = new DataView(data.buffer, data.byteOffset + 65, 4).getUint32(0, false);
|
|
5611
|
-
const csvTimelock =
|
|
5611
|
+
const csvTimelock = chunkG552MISJ_cjs.sequenceToTimelock(sequence);
|
|
5612
5612
|
return new _ArkadeCash(privateKey, serverPubKey, csvTimelock, decoded.prefix);
|
|
5613
5613
|
}
|
|
5614
5614
|
toString() {
|
|
@@ -5616,7 +5616,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
5616
5616
|
data[0] = _ArkadeCash.Version;
|
|
5617
5617
|
data.set(this._privateKey, 1);
|
|
5618
5618
|
data.set(this._serverPubKey, 33);
|
|
5619
|
-
const sequence =
|
|
5619
|
+
const sequence = chunkG552MISJ_cjs.timelockToSequence(this.csvTimelock);
|
|
5620
5620
|
new DataView(data.buffer, data.byteOffset + 65, 4).setUint32(0, sequence, false);
|
|
5621
5621
|
const words = base.bech32m.toWords(data);
|
|
5622
5622
|
return base.bech32m.encode(this.hrp, words, 1023);
|
|
@@ -5625,7 +5625,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
5625
5625
|
return SingleKey.fromPrivateKey(this._privateKey);
|
|
5626
5626
|
}
|
|
5627
5627
|
get vtxoScript() {
|
|
5628
|
-
return new
|
|
5628
|
+
return new chunkBABJ77NG_cjs.DefaultVtxo.Script({
|
|
5629
5629
|
pubKey: this._publicKey,
|
|
5630
5630
|
serverPubKey: this._serverPubKey,
|
|
5631
5631
|
csvTimelock: this.csvTimelock
|
|
@@ -5886,7 +5886,7 @@ async function captureExitBranch(params) {
|
|
|
5886
5886
|
const nonCommitment = ordered.filter((c) => chainTxTypeToChainedExit(c.type) !== 1 /* Commitment */).map((c) => c.txid);
|
|
5887
5887
|
if (nonCommitment.length > 0) {
|
|
5888
5888
|
for (const psbt of await resolver.getVirtualTxs(nonCommitment)) {
|
|
5889
|
-
psbtByTxid.set(
|
|
5889
|
+
psbtByTxid.set(chunkG552MISJ_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
5890
5890
|
}
|
|
5891
5891
|
}
|
|
5892
5892
|
}
|
|
@@ -5929,10 +5929,10 @@ var IndexerExitDataSource = class {
|
|
|
5929
5929
|
while (hasMore) {
|
|
5930
5930
|
const { chain: page, page: meta } = await this.indexer.getVtxoChain(
|
|
5931
5931
|
{ txid: vtxo.txid, vout: vtxo.vout },
|
|
5932
|
-
{ pageIndex, pageSize:
|
|
5932
|
+
{ pageIndex, pageSize: chunkG552MISJ_cjs.DEFAULT_PAGE_SIZE }
|
|
5933
5933
|
);
|
|
5934
5934
|
chain.push(...page);
|
|
5935
|
-
hasMore = meta ? page.length ===
|
|
5935
|
+
hasMore = meta ? page.length === chunkG552MISJ_cjs.DEFAULT_PAGE_SIZE : false;
|
|
5936
5936
|
pageIndex++;
|
|
5937
5937
|
}
|
|
5938
5938
|
return chain;
|
|
@@ -5944,12 +5944,12 @@ var IndexerExitDataSource = class {
|
|
|
5944
5944
|
while (hasMore) {
|
|
5945
5945
|
const { txs, page } = await this.indexer.getVirtualTxs(txids, {
|
|
5946
5946
|
pageIndex,
|
|
5947
|
-
pageSize:
|
|
5947
|
+
pageSize: chunkG552MISJ_cjs.DEFAULT_PAGE_SIZE
|
|
5948
5948
|
});
|
|
5949
5949
|
for (const psbt of txs) {
|
|
5950
|
-
out.set(
|
|
5950
|
+
out.set(chunkG552MISJ_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
5951
5951
|
}
|
|
5952
|
-
hasMore = page ? txs.length ===
|
|
5952
|
+
hasMore = page ? txs.length === chunkG552MISJ_cjs.DEFAULT_PAGE_SIZE : false;
|
|
5953
5953
|
pageIndex++;
|
|
5954
5954
|
}
|
|
5955
5955
|
return out;
|
|
@@ -5970,7 +5970,7 @@ function chainedTxTypeToChainTxType(t) {
|
|
|
5970
5970
|
}
|
|
5971
5971
|
}
|
|
5972
5972
|
function psbtInputTxids(psbtBase64) {
|
|
5973
|
-
const tx =
|
|
5973
|
+
const tx = chunkG552MISJ_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
|
|
5974
5974
|
const ids = [];
|
|
5975
5975
|
for (let i = 0; i < tx.inputsLength; i++) {
|
|
5976
5976
|
const txid = tx.getInput(i).txid;
|
|
@@ -6323,10 +6323,10 @@ async function resolveArkInfo(arkProvider, walletRepository) {
|
|
|
6323
6323
|
try {
|
|
6324
6324
|
info = await arkProvider.getInfo();
|
|
6325
6325
|
} catch (err) {
|
|
6326
|
-
if (!
|
|
6326
|
+
if (!chunkG552MISJ_cjs.isRetryableProviderError(err)) throw err;
|
|
6327
6327
|
const snapshot = await loadArkInfoSnapshot(walletRepository);
|
|
6328
6328
|
if (!snapshot) {
|
|
6329
|
-
throw new
|
|
6329
|
+
throw new chunkG552MISJ_cjs.ProviderUnavailableError(
|
|
6330
6330
|
"Arkade server info is unavailable and no cached snapshot exists",
|
|
6331
6331
|
{ cause: err }
|
|
6332
6332
|
);
|
|
@@ -6709,7 +6709,7 @@ function collectArkTxidsNeedingCreatedAt(vtxos) {
|
|
|
6709
6709
|
return [...txids];
|
|
6710
6710
|
}
|
|
6711
6711
|
async function buildTransactionHistory(vtxos, allBoardingTxs, commitmentsToIgnore, resolveTxCreatedAt) {
|
|
6712
|
-
const fromOldestVtxo = vtxos.map(
|
|
6712
|
+
const fromOldestVtxo = vtxos.map(chunkG552MISJ_cjs.normalizeVtxo).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
|
|
6713
6713
|
const txidsNeedingCreatedAt = resolveTxCreatedAt ? collectArkTxidsNeedingCreatedAt(fromOldestVtxo) : [];
|
|
6714
6714
|
const resolvedCreatedAt = resolveTxCreatedAt && txidsNeedingCreatedAt.length > 0 ? await resolveTxCreatedAt(txidsNeedingCreatedAt) : /* @__PURE__ */ new Map();
|
|
6715
6715
|
const unmatchedSettledBoardingTxs = allBoardingTxs.filter(isSettledBoardingReceive).sort((a, b) => a.createdAt - b.createdAt);
|
|
@@ -6873,7 +6873,7 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6873
6873
|
const virtualCoins = await this.wallet.getSpendableVtxos({
|
|
6874
6874
|
withRecoverable: false
|
|
6875
6875
|
});
|
|
6876
|
-
const controlAssetRef = params.controlAssetId ?
|
|
6876
|
+
const controlAssetRef = params.controlAssetId ? chunkXN55B6EP_cjs.AssetRef.fromId(chunkXN55B6EP_cjs.AssetId.fromString(params.controlAssetId)) : null;
|
|
6877
6877
|
const coinSelection = selectVirtualCoins(virtualCoins, Number(this.wallet.dustAmount));
|
|
6878
6878
|
let totalBtcSelected = 0n;
|
|
6879
6879
|
const assetChanges = /* @__PURE__ */ new Map();
|
|
@@ -6886,8 +6886,8 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6886
6886
|
}
|
|
6887
6887
|
}
|
|
6888
6888
|
const groups = [];
|
|
6889
|
-
const issuedAssetOutput =
|
|
6890
|
-
const issuedAssetGroup =
|
|
6889
|
+
const issuedAssetOutput = chunkXN55B6EP_cjs.AssetOutput.create(0, params.amount);
|
|
6890
|
+
const issuedAssetGroup = chunkXN55B6EP_cjs.AssetGroup.create(
|
|
6891
6891
|
null,
|
|
6892
6892
|
controlAssetRef,
|
|
6893
6893
|
[],
|
|
@@ -6902,28 +6902,28 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6902
6902
|
for (const [inputIndex, assets] of assetInputs) {
|
|
6903
6903
|
for (const asset of assets) {
|
|
6904
6904
|
if (asset.assetId !== assetId) continue;
|
|
6905
|
-
changeInputs.push(
|
|
6905
|
+
changeInputs.push(chunkXN55B6EP_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
6906
6906
|
}
|
|
6907
6907
|
}
|
|
6908
6908
|
groups.push(
|
|
6909
|
-
|
|
6910
|
-
|
|
6909
|
+
chunkXN55B6EP_cjs.AssetGroup.create(
|
|
6910
|
+
chunkXN55B6EP_cjs.AssetId.fromString(assetId),
|
|
6911
6911
|
null,
|
|
6912
6912
|
changeInputs,
|
|
6913
|
-
[
|
|
6913
|
+
[chunkXN55B6EP_cjs.AssetOutput.create(0, amount)],
|
|
6914
6914
|
[]
|
|
6915
6915
|
)
|
|
6916
6916
|
);
|
|
6917
6917
|
}
|
|
6918
6918
|
}
|
|
6919
6919
|
const address = await this.wallet.getAddress();
|
|
6920
|
-
const outputAddress =
|
|
6920
|
+
const outputAddress = chunkG552MISJ_cjs.ArkAddress.decode(address);
|
|
6921
6921
|
const outputs = [
|
|
6922
6922
|
{
|
|
6923
6923
|
script: outputAddress.pkScript,
|
|
6924
6924
|
amount: BigInt(totalBtcSelected)
|
|
6925
6925
|
},
|
|
6926
|
-
Extension.create([
|
|
6926
|
+
Extension.create([chunkXN55B6EP_cjs.Packet.create(groups)]).txOut()
|
|
6927
6927
|
];
|
|
6928
6928
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(
|
|
6929
6929
|
coinSelection.inputs,
|
|
@@ -6931,7 +6931,7 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
6931
6931
|
);
|
|
6932
6932
|
return {
|
|
6933
6933
|
arkTxId: arkTxid,
|
|
6934
|
-
assetId:
|
|
6934
|
+
assetId: chunkXN55B6EP_cjs.AssetId.create(arkTxid, 0).toString()
|
|
6935
6935
|
};
|
|
6936
6936
|
}
|
|
6937
6937
|
/**
|
|
@@ -7003,16 +7003,16 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7003
7003
|
for (const [inputIndex, assets] of assetInputs) {
|
|
7004
7004
|
for (const asset of assets) {
|
|
7005
7005
|
if (asset.assetId !== params.assetId) continue;
|
|
7006
|
-
reissueInputs.push(
|
|
7006
|
+
reissueInputs.push(chunkXN55B6EP_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
7007
7007
|
}
|
|
7008
7008
|
}
|
|
7009
7009
|
const totalAssetAmount = assetToReissueAmount + params.amount;
|
|
7010
|
-
const reissueAssetIdObj =
|
|
7011
|
-
const reissueAssetGroup =
|
|
7010
|
+
const reissueAssetIdObj = chunkXN55B6EP_cjs.AssetId.fromString(params.assetId);
|
|
7011
|
+
const reissueAssetGroup = chunkXN55B6EP_cjs.AssetGroup.create(
|
|
7012
7012
|
reissueAssetIdObj,
|
|
7013
7013
|
null,
|
|
7014
7014
|
reissueInputs,
|
|
7015
|
-
[
|
|
7015
|
+
[chunkXN55B6EP_cjs.AssetOutput.create(0, totalAssetAmount)],
|
|
7016
7016
|
[]
|
|
7017
7017
|
);
|
|
7018
7018
|
const groups = [reissueAssetGroup];
|
|
@@ -7021,27 +7021,27 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7021
7021
|
for (const [inputIndex, assets] of assetInputs) {
|
|
7022
7022
|
for (const asset of assets) {
|
|
7023
7023
|
if (asset.assetId !== assetId) continue;
|
|
7024
|
-
changeInputs.push(
|
|
7024
|
+
changeInputs.push(chunkXN55B6EP_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
7025
7025
|
}
|
|
7026
7026
|
}
|
|
7027
7027
|
groups.push(
|
|
7028
|
-
|
|
7029
|
-
|
|
7028
|
+
chunkXN55B6EP_cjs.AssetGroup.create(
|
|
7029
|
+
chunkXN55B6EP_cjs.AssetId.fromString(assetId),
|
|
7030
7030
|
null,
|
|
7031
7031
|
changeInputs,
|
|
7032
|
-
[
|
|
7032
|
+
[chunkXN55B6EP_cjs.AssetOutput.create(0, amount)],
|
|
7033
7033
|
[]
|
|
7034
7034
|
)
|
|
7035
7035
|
);
|
|
7036
7036
|
}
|
|
7037
7037
|
const address = await this.wallet.getAddress();
|
|
7038
|
-
const outputAddress =
|
|
7038
|
+
const outputAddress = chunkG552MISJ_cjs.ArkAddress.decode(address);
|
|
7039
7039
|
const outputs = [
|
|
7040
7040
|
{
|
|
7041
7041
|
script: outputAddress.pkScript,
|
|
7042
7042
|
amount: BigInt(totalBtcSelected)
|
|
7043
7043
|
},
|
|
7044
|
-
Extension.create([
|
|
7044
|
+
Extension.create([chunkXN55B6EP_cjs.Packet.create(groups)]).txOut()
|
|
7045
7045
|
];
|
|
7046
7046
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
|
|
7047
7047
|
return arkTxid;
|
|
@@ -7108,27 +7108,27 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7108
7108
|
for (const [inputIndex, assets] of assetInputs) {
|
|
7109
7109
|
for (const asset of assets) {
|
|
7110
7110
|
if (asset.assetId !== assetId) continue;
|
|
7111
|
-
changeInputs.push(
|
|
7111
|
+
changeInputs.push(chunkXN55B6EP_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
7112
7112
|
}
|
|
7113
7113
|
}
|
|
7114
7114
|
groups.push(
|
|
7115
|
-
|
|
7116
|
-
|
|
7115
|
+
chunkXN55B6EP_cjs.AssetGroup.create(
|
|
7116
|
+
chunkXN55B6EP_cjs.AssetId.fromString(assetId),
|
|
7117
7117
|
null,
|
|
7118
7118
|
changeInputs,
|
|
7119
|
-
amount > 0n ? [
|
|
7119
|
+
amount > 0n ? [chunkXN55B6EP_cjs.AssetOutput.create(0, amount)] : [],
|
|
7120
7120
|
[]
|
|
7121
7121
|
)
|
|
7122
7122
|
);
|
|
7123
7123
|
}
|
|
7124
7124
|
const address = await this.wallet.getAddress();
|
|
7125
|
-
const outputAddress =
|
|
7125
|
+
const outputAddress = chunkG552MISJ_cjs.ArkAddress.decode(address);
|
|
7126
7126
|
const outputs = [
|
|
7127
7127
|
{
|
|
7128
7128
|
script: outputAddress.pkScript,
|
|
7129
7129
|
amount: BigInt(totalBtcSelected)
|
|
7130
7130
|
},
|
|
7131
|
-
Extension.create([
|
|
7131
|
+
Extension.create([chunkXN55B6EP_cjs.Packet.create(groups)]).txOut()
|
|
7132
7132
|
];
|
|
7133
7133
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
|
|
7134
7134
|
return arkTxid;
|
|
@@ -7153,7 +7153,7 @@ function castMetadata(metadata) {
|
|
|
7153
7153
|
} else {
|
|
7154
7154
|
throw new Error("Invalid metadata value type");
|
|
7155
7155
|
}
|
|
7156
|
-
md.push(
|
|
7156
|
+
md.push(chunkXN55B6EP_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
|
|
7157
7157
|
}
|
|
7158
7158
|
return md;
|
|
7159
7159
|
}
|
|
@@ -7174,10 +7174,10 @@ var DelegateManagerImpl = class {
|
|
|
7174
7174
|
if (vtxos.length === 0) {
|
|
7175
7175
|
return { delegated: [], failed: [] };
|
|
7176
7176
|
}
|
|
7177
|
-
const destinationScript =
|
|
7177
|
+
const destinationScript = chunkG552MISJ_cjs.ArkAddress.decode(destination).pkScript;
|
|
7178
7178
|
const arkInfo = await this.arkInfoProvider.getInfo();
|
|
7179
7179
|
const delegateInfo = await this.delegateProvider.getDelegateInfo();
|
|
7180
|
-
const eligible = vtxos.map(
|
|
7180
|
+
const eligible = vtxos.map(chunkG552MISJ_cjs.normalizeVtxo).filter(
|
|
7181
7181
|
(v) => isAnnotated(v) && findDelegateTapLeaf(v, delegateInfo.pubkey) !== void 0
|
|
7182
7182
|
);
|
|
7183
7183
|
if (eligible.length === 0) {
|
|
@@ -7206,11 +7206,11 @@ var DelegateManagerImpl = class {
|
|
|
7206
7206
|
const groupByExpiry = /* @__PURE__ */ new Map();
|
|
7207
7207
|
let recoverableVtxos = [];
|
|
7208
7208
|
for (const vtxo of eligible) {
|
|
7209
|
-
if (
|
|
7209
|
+
if (chunkG552MISJ_cjs.canRecoverOnchain(vtxo, now)) {
|
|
7210
7210
|
recoverableVtxos.push(vtxo);
|
|
7211
7211
|
continue;
|
|
7212
7212
|
}
|
|
7213
|
-
const expiry =
|
|
7213
|
+
const expiry = chunkG552MISJ_cjs.toBatchExpiry(vtxo);
|
|
7214
7214
|
if (!expiry) continue;
|
|
7215
7215
|
const dayKey = getDayTimestamp(expiry);
|
|
7216
7216
|
groupByExpiry.set(dayKey, [...groupByExpiry.get(dayKey) ?? [], vtxo]);
|
|
@@ -7275,7 +7275,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7275
7275
|
}
|
|
7276
7276
|
if (!delegateAt) {
|
|
7277
7277
|
const now = { timestamp: /* @__PURE__ */ new Date() };
|
|
7278
|
-
const expiryTimestamp = vtxos.filter((coin) => !
|
|
7278
|
+
const expiryTimestamp = vtxos.filter((coin) => !chunkG552MISJ_cjs.canRecoverOnchain(coin, now) && chunkG552MISJ_cjs.toBatchExpiry(coin)).reduce((min, coin) => Math.min(min, chunkG552MISJ_cjs.toBatchExpiry(coin)), Number.MAX_SAFE_INTEGER);
|
|
7279
7279
|
if (!expiryTimestamp || expiryTimestamp === Number.MAX_SAFE_INTEGER) {
|
|
7280
7280
|
delegateAt = new Date(Date.now() + 1 * 60 * 1e3);
|
|
7281
7281
|
} else {
|
|
@@ -7304,7 +7304,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7304
7304
|
let amount = 0n;
|
|
7305
7305
|
for (const coin of vtxos) {
|
|
7306
7306
|
const inputFee = estimator.evalOffchainInput({
|
|
7307
|
-
...
|
|
7307
|
+
...chunkG552MISJ_cjs.toOffchainInputFeeParams(coin),
|
|
7308
7308
|
type: "vtxo"
|
|
7309
7309
|
});
|
|
7310
7310
|
if (inputFee.value >= coin.value) {
|
|
@@ -7318,7 +7318,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7318
7318
|
const delegateFee = BigInt(Number(fee));
|
|
7319
7319
|
if (delegateFee > 0n) {
|
|
7320
7320
|
outputs.push({
|
|
7321
|
-
script:
|
|
7321
|
+
script: chunkG552MISJ_cjs.ArkAddress.decode(delegateAddress).pkScript,
|
|
7322
7322
|
amount: delegateFee
|
|
7323
7323
|
});
|
|
7324
7324
|
}
|
|
@@ -7351,10 +7351,10 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7351
7351
|
destinationScript
|
|
7352
7352
|
);
|
|
7353
7353
|
const forfeitOutputScript = btcSigner.OutScript.encode(
|
|
7354
|
-
btcSigner.Address(
|
|
7354
|
+
btcSigner.Address(chunkG552MISJ_cjs.getNetwork(network)).decode(forfeitAddress)
|
|
7355
7355
|
);
|
|
7356
7356
|
const forfeits = await Promise.all(
|
|
7357
|
-
vtxos.filter((v) => !
|
|
7357
|
+
vtxos.filter((v) => !chunkG552MISJ_cjs.canRecoverOnchain(v, { timestamp: /* @__PURE__ */ new Date() })).map(async (coin) => {
|
|
7358
7358
|
const forfeit = await makeDelegateForfeitTx(
|
|
7359
7359
|
coin,
|
|
7360
7360
|
dust,
|
|
@@ -7379,7 +7379,7 @@ async function makeDelegateForfeitTx(input, connectorAmount, delegatePubkey, for
|
|
|
7379
7379
|
index: input.vout,
|
|
7380
7380
|
witnessUtxo: {
|
|
7381
7381
|
amount: BigInt(input.value),
|
|
7382
|
-
script:
|
|
7382
|
+
script: chunkG552MISJ_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
7383
7383
|
},
|
|
7384
7384
|
sighashType: btcSigner.SigHash.ALL_ANYONECANPAY,
|
|
7385
7385
|
tapLeafScript: [delegateTapLeaf]
|
|
@@ -7437,7 +7437,7 @@ async function makeSignedDelegateIntent(identity, coins, outputs, onchainOutputs
|
|
|
7437
7437
|
expire_at: 0,
|
|
7438
7438
|
cosigners_public_keys: cosignerPubKeys
|
|
7439
7439
|
};
|
|
7440
|
-
const proof =
|
|
7440
|
+
const proof = chunkG552MISJ_cjs.Intent.create(message, coins, outputs);
|
|
7441
7441
|
const signedProof = await identity.sign(proof);
|
|
7442
7442
|
return {
|
|
7443
7443
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -7455,10 +7455,10 @@ function getDayTimestamp(timestamp) {
|
|
|
7455
7455
|
function findDelegateTapLeaf(vtxo, delegatePubkey) {
|
|
7456
7456
|
if (!vtxo.tapTree) return void 0;
|
|
7457
7457
|
const pk = delegatePubkey.length === 66 ? delegatePubkey.slice(2) : delegatePubkey;
|
|
7458
|
-
const vtxoScript =
|
|
7458
|
+
const vtxoScript = chunkG552MISJ_cjs.VtxoScript.decode(vtxo.tapTree);
|
|
7459
7459
|
return vtxoScript.leaves.find((tapLeaf) => {
|
|
7460
|
-
const arkTapscript =
|
|
7461
|
-
if (!
|
|
7460
|
+
const arkTapscript = chunkG552MISJ_cjs.decodeTapscript(chunkG552MISJ_cjs.scriptFromTapLeafScript(tapLeaf));
|
|
7461
|
+
if (!chunkG552MISJ_cjs.MultisigTapscript.is(arkTapscript)) return false;
|
|
7462
7462
|
return arkTapscript.params.pubkeys.map(base.hex.encode).includes(pk);
|
|
7463
7463
|
});
|
|
7464
7464
|
}
|
|
@@ -7569,6 +7569,22 @@ var awaitTransaction = (transaction) => new Promise((resolve, reject) => {
|
|
|
7569
7569
|
transaction.onerror = () => reject(transaction.error);
|
|
7570
7570
|
transaction.onabort = () => reject(transaction.error ?? new Error("transaction aborted"));
|
|
7571
7571
|
});
|
|
7572
|
+
var deleteByIndex = (store, indexName, value) => {
|
|
7573
|
+
const request = store.index(indexName).openCursor(IDBKeyRange.only(value));
|
|
7574
|
+
request.onsuccess = () => {
|
|
7575
|
+
const cursor = request.result;
|
|
7576
|
+
if (!cursor) return;
|
|
7577
|
+
cursor.delete();
|
|
7578
|
+
cursor.continue();
|
|
7579
|
+
};
|
|
7580
|
+
};
|
|
7581
|
+
var getAllByIndexValues = (store, indexName, values) => {
|
|
7582
|
+
if (values.length === 0) return Promise.resolve([]);
|
|
7583
|
+
const index = store.index(indexName);
|
|
7584
|
+
return Promise.all(values.map((value) => promisifyRequest(index.getAll(value)))).then(
|
|
7585
|
+
(results) => results.flat()
|
|
7586
|
+
);
|
|
7587
|
+
};
|
|
7572
7588
|
|
|
7573
7589
|
// src/repositories/indexedDB/manager.ts
|
|
7574
7590
|
function getGlobalObject() {
|
|
@@ -7583,8 +7599,24 @@ function getGlobalObject() {
|
|
|
7583
7599
|
}
|
|
7584
7600
|
throw new Error("Global object not found");
|
|
7585
7601
|
}
|
|
7602
|
+
var BLOCKED_UPGRADE_TIMEOUT_MS = 1e4;
|
|
7603
|
+
var DatabaseUpgradeBlockedError = class extends Error {
|
|
7604
|
+
constructor(dbName) {
|
|
7605
|
+
super(
|
|
7606
|
+
`database "${dbName}" upgrade blocked by another connection for ${BLOCKED_UPGRADE_TIMEOUT_MS}ms; close other tabs and retry`
|
|
7607
|
+
);
|
|
7608
|
+
this.dbName = dbName;
|
|
7609
|
+
}
|
|
7610
|
+
dbName;
|
|
7611
|
+
name = "DatabaseUpgradeBlockedError";
|
|
7612
|
+
};
|
|
7586
7613
|
var dbCache = /* @__PURE__ */ new Map();
|
|
7587
7614
|
var refCounts = /* @__PURE__ */ new Map();
|
|
7615
|
+
function forget(dbName, promise) {
|
|
7616
|
+
if (dbCache.get(dbName)?.promise !== promise) return;
|
|
7617
|
+
dbCache.delete(dbName);
|
|
7618
|
+
refCounts.delete(dbName);
|
|
7619
|
+
}
|
|
7588
7620
|
async function openDatabase(dbName, dbVersion, initDatabase2) {
|
|
7589
7621
|
const { globalObject } = getGlobalObject();
|
|
7590
7622
|
if (!globalObject.indexedDB) {
|
|
@@ -7602,26 +7634,47 @@ async function openDatabase(dbName, dbVersion, initDatabase2) {
|
|
|
7602
7634
|
}
|
|
7603
7635
|
const dbPromise = new Promise((resolve, reject) => {
|
|
7604
7636
|
const request = globalObject.indexedDB.open(dbName, dbVersion);
|
|
7637
|
+
let settled = false;
|
|
7638
|
+
let blockedTimer;
|
|
7639
|
+
const clearBlockedTimer = () => {
|
|
7640
|
+
if (blockedTimer !== void 0) clearTimeout(blockedTimer);
|
|
7641
|
+
blockedTimer = void 0;
|
|
7642
|
+
};
|
|
7605
7643
|
request.onerror = () => {
|
|
7606
|
-
|
|
7607
|
-
|
|
7644
|
+
clearBlockedTimer();
|
|
7645
|
+
if (settled) return;
|
|
7646
|
+
settled = true;
|
|
7647
|
+
forget(dbName, dbPromise);
|
|
7608
7648
|
reject(request.error);
|
|
7609
7649
|
};
|
|
7610
7650
|
request.onsuccess = () => {
|
|
7651
|
+
clearBlockedTimer();
|
|
7611
7652
|
const db = request.result;
|
|
7653
|
+
if (settled) {
|
|
7654
|
+
db.close();
|
|
7655
|
+
return;
|
|
7656
|
+
}
|
|
7657
|
+
settled = true;
|
|
7612
7658
|
db.onversionchange = () => {
|
|
7613
7659
|
db.close();
|
|
7614
|
-
|
|
7615
|
-
refCounts.delete(dbName);
|
|
7660
|
+
forget(dbName, dbPromise);
|
|
7616
7661
|
};
|
|
7662
|
+
db.addEventListener("close", () => forget(dbName, dbPromise));
|
|
7617
7663
|
resolve(db);
|
|
7618
7664
|
};
|
|
7619
7665
|
request.onupgradeneeded = (event) => {
|
|
7666
|
+
clearBlockedTimer();
|
|
7620
7667
|
const db = request.result;
|
|
7621
7668
|
initDatabase2(db, event.oldVersion, request.transaction);
|
|
7622
7669
|
};
|
|
7623
7670
|
request.onblocked = () => {
|
|
7624
7671
|
console.warn("Database upgrade blocked - close other tabs/connections");
|
|
7672
|
+
blockedTimer = setTimeout(() => {
|
|
7673
|
+
if (settled) return;
|
|
7674
|
+
settled = true;
|
|
7675
|
+
forget(dbName, dbPromise);
|
|
7676
|
+
reject(new DatabaseUpgradeBlockedError(dbName));
|
|
7677
|
+
}, BLOCKED_UPGRADE_TIMEOUT_MS);
|
|
7625
7678
|
};
|
|
7626
7679
|
});
|
|
7627
7680
|
dbCache.set(dbName, { version: dbVersion, promise: dbPromise });
|
|
@@ -7645,8 +7698,48 @@ async function closeDatabase(dbName) {
|
|
|
7645
7698
|
}
|
|
7646
7699
|
return true;
|
|
7647
7700
|
}
|
|
7701
|
+
|
|
7702
|
+
// src/repositories/indexedDB/managedConnection.ts
|
|
7703
|
+
var ConnectionDisposedError = class extends Error {
|
|
7704
|
+
constructor(dbName) {
|
|
7705
|
+
super(`connection to database "${dbName}" was disposed`);
|
|
7706
|
+
this.dbName = dbName;
|
|
7707
|
+
}
|
|
7708
|
+
dbName;
|
|
7709
|
+
name = "ConnectionDisposedError";
|
|
7710
|
+
};
|
|
7711
|
+
function createManagedConnection(dbName, version, initDatabase2) {
|
|
7712
|
+
let current = null;
|
|
7713
|
+
let disposed = false;
|
|
7714
|
+
return {
|
|
7715
|
+
get() {
|
|
7716
|
+
if (disposed) return Promise.reject(new ConnectionDisposedError(dbName));
|
|
7717
|
+
if (current) return current;
|
|
7718
|
+
const opening = openDatabase(dbName, version, initDatabase2).then((db) => {
|
|
7719
|
+
const forget2 = () => {
|
|
7720
|
+
if (current === opening) current = null;
|
|
7721
|
+
};
|
|
7722
|
+
db.addEventListener("versionchange", forget2);
|
|
7723
|
+
db.addEventListener("close", forget2);
|
|
7724
|
+
return db;
|
|
7725
|
+
}).catch((err) => {
|
|
7726
|
+
if (current === opening) current = null;
|
|
7727
|
+
throw err;
|
|
7728
|
+
});
|
|
7729
|
+
current = opening;
|
|
7730
|
+
return opening;
|
|
7731
|
+
},
|
|
7732
|
+
async [Symbol.asyncDispose]() {
|
|
7733
|
+
if (disposed) return;
|
|
7734
|
+
disposed = true;
|
|
7735
|
+
if (!current) return;
|
|
7736
|
+
current = null;
|
|
7737
|
+
await closeDatabase(dbName);
|
|
7738
|
+
}
|
|
7739
|
+
};
|
|
7740
|
+
}
|
|
7648
7741
|
function scriptFromArkAddress(address) {
|
|
7649
|
-
return base.hex.encode(
|
|
7742
|
+
return base.hex.encode(chunkG552MISJ_cjs.ArkAddress.decode(address).pkScript);
|
|
7650
7743
|
}
|
|
7651
7744
|
|
|
7652
7745
|
// src/repositories/indexedDB/schema.ts
|
|
@@ -7928,16 +8021,17 @@ async function setupServiceWorker(pathOrOptions) {
|
|
|
7928
8021
|
|
|
7929
8022
|
// src/repositories/indexedDB/virtualTxRepository.ts
|
|
7930
8023
|
var IndexedDBVirtualTxRepository = class {
|
|
8024
|
+
version = 1;
|
|
8025
|
+
connection;
|
|
7931
8026
|
constructor(dbName = DEFAULT_DB_NAME) {
|
|
7932
|
-
this.
|
|
8027
|
+
this.connection = createManagedConnection(
|
|
8028
|
+
dbName,
|
|
8029
|
+
INTENT_DB_VERSION,
|
|
8030
|
+
initDatabaseWithIntents
|
|
8031
|
+
);
|
|
7933
8032
|
}
|
|
7934
|
-
|
|
7935
|
-
|
|
7936
|
-
db = null;
|
|
7937
|
-
async getDB() {
|
|
7938
|
-
if (!this.db)
|
|
7939
|
-
this.db = await openDatabase(this.dbName, INTENT_DB_VERSION, initDatabaseWithIntents);
|
|
7940
|
-
return this.db;
|
|
8033
|
+
getDB() {
|
|
8034
|
+
return this.connection.get();
|
|
7941
8035
|
}
|
|
7942
8036
|
async clear() {
|
|
7943
8037
|
const db = await this.getDB();
|
|
@@ -8050,24 +8144,23 @@ var IndexedDBVirtualTxRepository = class {
|
|
|
8050
8144
|
await awaitTransaction(transaction);
|
|
8051
8145
|
}
|
|
8052
8146
|
async [Symbol.asyncDispose]() {
|
|
8053
|
-
|
|
8054
|
-
await closeDatabase(this.dbName);
|
|
8055
|
-
this.db = null;
|
|
8147
|
+
await this.connection[Symbol.asyncDispose]();
|
|
8056
8148
|
}
|
|
8057
8149
|
};
|
|
8058
8150
|
|
|
8059
8151
|
// src/repositories/indexedDB/intentRepository.ts
|
|
8060
8152
|
var IndexedDBIntentRepository = class {
|
|
8153
|
+
version = 1;
|
|
8154
|
+
connection;
|
|
8061
8155
|
constructor(dbName = DEFAULT_DB_NAME) {
|
|
8062
|
-
this.
|
|
8156
|
+
this.connection = createManagedConnection(
|
|
8157
|
+
dbName,
|
|
8158
|
+
INTENT_DB_VERSION,
|
|
8159
|
+
initDatabaseWithIntents
|
|
8160
|
+
);
|
|
8063
8161
|
}
|
|
8064
|
-
|
|
8065
|
-
|
|
8066
|
-
db = null;
|
|
8067
|
-
async getDB() {
|
|
8068
|
-
if (!this.db)
|
|
8069
|
-
this.db = await openDatabase(this.dbName, INTENT_DB_VERSION, initDatabaseWithIntents);
|
|
8070
|
-
return this.db;
|
|
8162
|
+
getDB() {
|
|
8163
|
+
return this.connection.get();
|
|
8071
8164
|
}
|
|
8072
8165
|
async clear() {
|
|
8073
8166
|
const db = await this.getDB();
|
|
@@ -8100,9 +8193,7 @@ var IndexedDBIntentRepository = class {
|
|
|
8100
8193
|
return out;
|
|
8101
8194
|
}
|
|
8102
8195
|
async [Symbol.asyncDispose]() {
|
|
8103
|
-
|
|
8104
|
-
await closeDatabase(this.dbName);
|
|
8105
|
-
this.db = null;
|
|
8196
|
+
await this.connection[Symbol.asyncDispose]();
|
|
8106
8197
|
}
|
|
8107
8198
|
};
|
|
8108
8199
|
|
|
@@ -8143,7 +8234,7 @@ function validateVtxosForScript(vtxos, script, context) {
|
|
|
8143
8234
|
}
|
|
8144
8235
|
async function getVtxosForContract(repo, contract) {
|
|
8145
8236
|
const vtxos = repo.getVtxosForScript ? await repo.getVtxosForScript(contract.script) : filterVtxosForScript(await repo.getVtxos(contract.address), contract.script);
|
|
8146
|
-
return vtxos.map(
|
|
8237
|
+
return vtxos.map(chunkG552MISJ_cjs.normalizeVtxo);
|
|
8147
8238
|
}
|
|
8148
8239
|
async function saveVtxosForContract(repo, contract, vtxos) {
|
|
8149
8240
|
if (repo.saveVtxosForScript) {
|
|
@@ -8285,7 +8376,7 @@ function decodeArkContract(encoded) {
|
|
|
8285
8376
|
}
|
|
8286
8377
|
function contractFromArkContract(encoded, options = {}) {
|
|
8287
8378
|
const parsed = decodeArkContract(encoded);
|
|
8288
|
-
const handler =
|
|
8379
|
+
const handler = chunkBABJ77NG_cjs.contractHandlers.get(parsed.type);
|
|
8289
8380
|
if (!handler) {
|
|
8290
8381
|
throw new Error(`No handler registered for contract type '${parsed.type}'`);
|
|
8291
8382
|
}
|
|
@@ -8299,9 +8390,9 @@ function contractFromArkContract(encoded, options = {}) {
|
|
|
8299
8390
|
metadata: options.metadata
|
|
8300
8391
|
};
|
|
8301
8392
|
}
|
|
8302
|
-
function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix =
|
|
8393
|
+
function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunkG552MISJ_cjs.DEFAULT_NETWORK.hrp, options = {}) {
|
|
8303
8394
|
const parsed = decodeArkContract(encoded);
|
|
8304
|
-
const handler =
|
|
8395
|
+
const handler = chunkBABJ77NG_cjs.contractHandlers.getOrThrow(parsed.type);
|
|
8305
8396
|
const params = parsed.data;
|
|
8306
8397
|
const vtxoScript = handler.createScript(params);
|
|
8307
8398
|
return {
|
|
@@ -8555,9 +8646,9 @@ var ContractWatcher = class {
|
|
|
8555
8646
|
this.connectionState = "connected";
|
|
8556
8647
|
this.reconnectAttempts = 0;
|
|
8557
8648
|
this.listenLoop().catch((e) => {
|
|
8558
|
-
if (
|
|
8649
|
+
if (chunkG552MISJ_cjs.isEventSourceError(e)) {
|
|
8559
8650
|
console.debug("ContractWatcher subscription disconnected; reconnecting");
|
|
8560
|
-
} else if (!
|
|
8651
|
+
} else if (!chunkG552MISJ_cjs.isEventSourceUnavailableError(e)) {
|
|
8561
8652
|
console.error(e);
|
|
8562
8653
|
}
|
|
8563
8654
|
this.connectionState = "disconnected";
|
|
@@ -8569,7 +8660,7 @@ var ContractWatcher = class {
|
|
|
8569
8660
|
this.scheduleReconnect();
|
|
8570
8661
|
});
|
|
8571
8662
|
} catch (error) {
|
|
8572
|
-
if (!
|
|
8663
|
+
if (!chunkG552MISJ_cjs.isEventSourceUnavailableError(error)) {
|
|
8573
8664
|
console.error("ContractWatcher connection failed:", error);
|
|
8574
8665
|
}
|
|
8575
8666
|
this.connectionState = "disconnected";
|
|
@@ -8595,7 +8686,7 @@ var ContractWatcher = class {
|
|
|
8595
8686
|
* slower; what it loses is push latency.
|
|
8596
8687
|
*/
|
|
8597
8688
|
reportEventSourceUnavailable(error) {
|
|
8598
|
-
if (!
|
|
8689
|
+
if (!chunkG552MISJ_cjs.isEventSourceUnavailableError(error)) return false;
|
|
8599
8690
|
if (!this.eventSourceReported) {
|
|
8600
8691
|
this.eventSourceReported = true;
|
|
8601
8692
|
console.warn(
|
|
@@ -8811,14 +8902,14 @@ var ContractWatcher = class {
|
|
|
8811
8902
|
const timestamp = Date.now();
|
|
8812
8903
|
if (update.newVtxos?.length) {
|
|
8813
8904
|
this.processSubscriptionVtxos(
|
|
8814
|
-
update.newVtxos.map(
|
|
8905
|
+
update.newVtxos.map(chunkG552MISJ_cjs.normalizeVtxo),
|
|
8815
8906
|
"vtxo_received",
|
|
8816
8907
|
timestamp
|
|
8817
8908
|
);
|
|
8818
8909
|
}
|
|
8819
8910
|
if (update.spentVtxos?.length) {
|
|
8820
8911
|
this.processSubscriptionVtxos(
|
|
8821
|
-
update.spentVtxos.map(
|
|
8912
|
+
update.spentVtxos.map(chunkG552MISJ_cjs.normalizeVtxo),
|
|
8822
8913
|
"vtxo_spent",
|
|
8823
8914
|
timestamp
|
|
8824
8915
|
);
|
|
@@ -8951,7 +9042,7 @@ async function reconcileIntents(deps) {
|
|
|
8951
9042
|
let vtxosByOutpoint = /* @__PURE__ */ new Map();
|
|
8952
9043
|
if (outpoints.length > 0) {
|
|
8953
9044
|
try {
|
|
8954
|
-
const { vtxos } = await
|
|
9045
|
+
const { vtxos } = await chunkG552MISJ_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
|
|
8955
9046
|
vtxosByOutpoint = new Map(vtxos.map((v) => [outpointKey(v), v]));
|
|
8956
9047
|
} catch (e) {
|
|
8957
9048
|
console.error("reconcileIntents: failed to fetch input VTXO state", e);
|
|
@@ -9125,7 +9216,7 @@ var ContractManager = class _ContractManager {
|
|
|
9125
9216
|
await this.reconcileWatched();
|
|
9126
9217
|
this.markSyncOnline();
|
|
9127
9218
|
} catch (err) {
|
|
9128
|
-
if (!
|
|
9219
|
+
if (!chunkG552MISJ_cjs.isRetryableProviderError(err)) throw err;
|
|
9129
9220
|
this.markSyncDegraded(err);
|
|
9130
9221
|
}
|
|
9131
9222
|
this.initialized = true;
|
|
@@ -9257,7 +9348,7 @@ var ContractManager = class _ContractManager {
|
|
|
9257
9348
|
const from = Math.max(0, watermark - lookAhead.size);
|
|
9258
9349
|
const to = watermark + lookAhead.size;
|
|
9259
9350
|
const deps = lookAhead.candidateDeps();
|
|
9260
|
-
const handlers =
|
|
9351
|
+
const handlers = chunkBABJ77NG_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkBABJ77NG_cjs.contractHandlers.get(t)).filter(hasCandidates);
|
|
9261
9352
|
const band = /* @__PURE__ */ new Map();
|
|
9262
9353
|
for (let index = from; index <= to; index++) {
|
|
9263
9354
|
const descriptor = lookAhead.materialize(index);
|
|
@@ -9268,7 +9359,7 @@ var ContractManager = class _ContractManager {
|
|
|
9268
9359
|
index,
|
|
9269
9360
|
params: {
|
|
9270
9361
|
...candidate,
|
|
9271
|
-
...
|
|
9362
|
+
...chunkBABJ77NG_cjs.speculativeReceiveMetadata(descriptor)
|
|
9272
9363
|
}
|
|
9273
9364
|
});
|
|
9274
9365
|
}
|
|
@@ -9330,7 +9421,7 @@ var ContractManager = class _ContractManager {
|
|
|
9330
9421
|
});
|
|
9331
9422
|
for (const entry of pending) entry.catchUpPending = false;
|
|
9332
9423
|
} catch (err) {
|
|
9333
|
-
if (!
|
|
9424
|
+
if (!chunkG552MISJ_cjs.isRetryableProviderError(err)) throw err;
|
|
9334
9425
|
this.markSyncDegraded(err);
|
|
9335
9426
|
}
|
|
9336
9427
|
}
|
|
@@ -9380,7 +9471,7 @@ var ContractManager = class _ContractManager {
|
|
|
9380
9471
|
await this.fetchContractVxosFromIndexer([contract]);
|
|
9381
9472
|
this.markSyncOnline();
|
|
9382
9473
|
} catch (err) {
|
|
9383
|
-
if (!
|
|
9474
|
+
if (!chunkG552MISJ_cjs.isRetryableProviderError(err)) throw err;
|
|
9384
9475
|
this.markSyncDegraded(err);
|
|
9385
9476
|
}
|
|
9386
9477
|
await this.watcher.addContract(contract);
|
|
@@ -9417,7 +9508,7 @@ var ContractManager = class _ContractManager {
|
|
|
9417
9508
|
return result;
|
|
9418
9509
|
}
|
|
9419
9510
|
async upsertContractRow(params) {
|
|
9420
|
-
const handler =
|
|
9511
|
+
const handler = chunkBABJ77NG_cjs.contractHandlers.get(params.type);
|
|
9421
9512
|
if (!handler) {
|
|
9422
9513
|
throw new Error(`No handler registered for contract type '${params.type}'`);
|
|
9423
9514
|
}
|
|
@@ -9517,7 +9608,7 @@ var ContractManager = class _ContractManager {
|
|
|
9517
9608
|
`scanContracts: batchSize must be a positive integer (got ${String(opts.batchSize)})`
|
|
9518
9609
|
);
|
|
9519
9610
|
}
|
|
9520
|
-
const registered =
|
|
9611
|
+
const registered = chunkBABJ77NG_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkBABJ77NG_cjs.contractHandlers.get(t)).filter(isDiscoverable);
|
|
9521
9612
|
const discoverables = [
|
|
9522
9613
|
...registered.filter((h) => h.type === "boarding"),
|
|
9523
9614
|
...registered.filter((h) => h.type !== "boarding")
|
|
@@ -9652,7 +9743,7 @@ var ContractManager = class _ContractManager {
|
|
|
9652
9743
|
await this.syncContracts({ contracts, pageSize });
|
|
9653
9744
|
this.markSyncOnline();
|
|
9654
9745
|
} catch (err) {
|
|
9655
|
-
if (!
|
|
9746
|
+
if (!chunkG552MISJ_cjs.isRetryableProviderError(err)) throw err;
|
|
9656
9747
|
this.markSyncDegraded(err);
|
|
9657
9748
|
}
|
|
9658
9749
|
const vtxos = await this.getVtxosForContracts(contracts);
|
|
@@ -9673,7 +9764,7 @@ var ContractManager = class _ContractManager {
|
|
|
9673
9764
|
}
|
|
9674
9765
|
const tapscriptCache = tapscripts ?? /* @__PURE__ */ new Map();
|
|
9675
9766
|
return vtxos.map(
|
|
9676
|
-
(vtxo) => extendVirtualCoinForContract(
|
|
9767
|
+
(vtxo) => extendVirtualCoinForContract(chunkG552MISJ_cjs.normalizeVtxo(vtxo), byScript, tapscriptCache)
|
|
9677
9768
|
);
|
|
9678
9769
|
}
|
|
9679
9770
|
/** @inheritdoc */
|
|
@@ -9717,14 +9808,14 @@ var ContractManager = class _ContractManager {
|
|
|
9717
9808
|
const byScript = new Map(contracts.map((contract) => [contract.script, contract]));
|
|
9718
9809
|
const asking = vtxos.filter((vtxo) => {
|
|
9719
9810
|
const contract = byScript.get(vtxo.script);
|
|
9720
|
-
return contract !== void 0 &&
|
|
9811
|
+
return contract !== void 0 && chunkBABJ77NG_cjs.contractHandlers.get(contract.type)?.assertSpendableNow !== void 0;
|
|
9721
9812
|
});
|
|
9722
9813
|
if (asking.length === 0) return refused;
|
|
9723
9814
|
const tip = await this.currentChainTip();
|
|
9724
9815
|
const walletKey = await walletPubKey?.();
|
|
9725
9816
|
for (const vtxo of asking) {
|
|
9726
9817
|
const contract = byScript.get(vtxo.script);
|
|
9727
|
-
const handler =
|
|
9818
|
+
const handler = chunkBABJ77NG_cjs.contractHandlers.get(contract.type);
|
|
9728
9819
|
if (!handler?.assertSpendableNow) continue;
|
|
9729
9820
|
const context = {
|
|
9730
9821
|
collaborative: true,
|
|
@@ -9739,7 +9830,7 @@ var ContractManager = class _ContractManager {
|
|
|
9739
9830
|
// the next handler to answer a CSV question would meet a
|
|
9740
9831
|
// TypeError instead of a `false`. Carry the coin only when it
|
|
9741
9832
|
// really is one.
|
|
9742
|
-
vtxo:
|
|
9833
|
+
vtxo: chunkG552MISJ_cjs.isVirtualCoin(vtxo) && "status" in vtxo ? vtxo : void 0
|
|
9743
9834
|
};
|
|
9744
9835
|
try {
|
|
9745
9836
|
await handler.assertSpendableNow(
|
|
@@ -9895,7 +9986,7 @@ var ContractManager = class _ContractManager {
|
|
|
9895
9986
|
const { contractScript, collaborative = true, walletPubKey, vtxo } = options;
|
|
9896
9987
|
const [contract] = await this.getContracts({ script: contractScript });
|
|
9897
9988
|
if (!contract) return [];
|
|
9898
|
-
const handler =
|
|
9989
|
+
const handler = chunkBABJ77NG_cjs.contractHandlers.get(contract.type);
|
|
9899
9990
|
if (!handler) return [];
|
|
9900
9991
|
const script = handler.createScript(contract.params);
|
|
9901
9992
|
const tip = await this.currentChainTip();
|
|
@@ -9923,7 +10014,7 @@ var ContractManager = class _ContractManager {
|
|
|
9923
10014
|
const { contractScript, collaborative = true, walletPubKey } = options;
|
|
9924
10015
|
const [contract] = await this.getContracts({ script: contractScript });
|
|
9925
10016
|
if (!contract) return [];
|
|
9926
|
-
const handler =
|
|
10017
|
+
const handler = chunkBABJ77NG_cjs.contractHandlers.get(contract.type);
|
|
9927
10018
|
if (!handler) return [];
|
|
9928
10019
|
const script = handler.createScript(contract.params);
|
|
9929
10020
|
const context = {
|
|
@@ -9979,7 +10070,7 @@ var ContractManager = class _ContractManager {
|
|
|
9979
10070
|
}
|
|
9980
10071
|
async refreshOutpoints(outpoints) {
|
|
9981
10072
|
if (outpoints.length === 0) return;
|
|
9982
|
-
const { vtxos } = await
|
|
10073
|
+
const { vtxos } = await chunkG552MISJ_cjs.getNormalizedVtxos(this.config.indexerProvider, {
|
|
9983
10074
|
outpoints
|
|
9984
10075
|
});
|
|
9985
10076
|
if (vtxos.length === 0) return;
|
|
@@ -10058,7 +10149,7 @@ var ContractManager = class _ContractManager {
|
|
|
10058
10149
|
break;
|
|
10059
10150
|
}
|
|
10060
10151
|
} catch (err) {
|
|
10061
|
-
if (!
|
|
10152
|
+
if (!chunkG552MISJ_cjs.isRetryableProviderError(err)) throw err;
|
|
10062
10153
|
this.markSyncDegraded(err);
|
|
10063
10154
|
}
|
|
10064
10155
|
this.emitEvent(event);
|
|
@@ -10137,7 +10228,7 @@ var ContractManager = class _ContractManager {
|
|
|
10137
10228
|
*/
|
|
10138
10229
|
async reconcilePendingFrontier(contracts) {
|
|
10139
10230
|
const scriptToContract = new Map(contracts.map((c) => [c.script, c]));
|
|
10140
|
-
const vtxos = await
|
|
10231
|
+
const vtxos = await chunkG552MISJ_cjs.getAllNormalizedVtxos(
|
|
10141
10232
|
this.config.indexerProvider,
|
|
10142
10233
|
contracts.map((c) => c.script),
|
|
10143
10234
|
{ pendingOnly: true }
|
|
@@ -10220,7 +10311,7 @@ var ContractManager = class _ContractManager {
|
|
|
10220
10311
|
}
|
|
10221
10312
|
return result;
|
|
10222
10313
|
}
|
|
10223
|
-
async fetchContractVtxosBulk(contracts, pageSize =
|
|
10314
|
+
async fetchContractVtxosBulk(contracts, pageSize = chunkG552MISJ_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
|
|
10224
10315
|
if (contracts.length === 0) {
|
|
10225
10316
|
return { vtxosByScript: /* @__PURE__ */ new Map(), promoted: /* @__PURE__ */ new Map() };
|
|
10226
10317
|
}
|
|
@@ -10236,7 +10327,7 @@ var ContractManager = class _ContractManager {
|
|
|
10236
10327
|
before: syncWindow.before
|
|
10237
10328
|
}
|
|
10238
10329
|
} : {};
|
|
10239
|
-
const vtxos = await
|
|
10330
|
+
const vtxos = await chunkG552MISJ_cjs.getAllNormalizedVtxos(
|
|
10240
10331
|
this.config.indexerProvider,
|
|
10241
10332
|
contracts.map((c) => c.script),
|
|
10242
10333
|
{ ...windowOpts, pageSize }
|
|
@@ -10381,7 +10472,7 @@ var deserializeTapLeaf = (t) => {
|
|
|
10381
10472
|
const s = base.hex.decode(t.s);
|
|
10382
10473
|
return [cb, s];
|
|
10383
10474
|
};
|
|
10384
|
-
var deserializeVtxo = (o) =>
|
|
10475
|
+
var deserializeVtxo = (o) => chunkG552MISJ_cjs.normalizeVtxo({
|
|
10385
10476
|
...o,
|
|
10386
10477
|
createdAt: new Date(o.createdAt),
|
|
10387
10478
|
tapTree: base.hex.decode(o.tapTree),
|
|
@@ -10404,33 +10495,17 @@ var deserializeTransaction = (o) => ({
|
|
|
10404
10495
|
|
|
10405
10496
|
// src/repositories/indexedDB/contractRepository.ts
|
|
10406
10497
|
var IndexedDBContractRepository = class {
|
|
10498
|
+
version = 2;
|
|
10499
|
+
connection;
|
|
10407
10500
|
constructor(dbName = DEFAULT_DB_NAME) {
|
|
10408
|
-
this.
|
|
10501
|
+
this.connection = createManagedConnection(dbName, DB_VERSION, initDatabase);
|
|
10409
10502
|
}
|
|
10410
|
-
dbName;
|
|
10411
|
-
version = 2;
|
|
10412
|
-
db = null;
|
|
10413
10503
|
async clear() {
|
|
10414
10504
|
try {
|
|
10415
10505
|
const db = await this.getDB();
|
|
10416
|
-
|
|
10417
|
-
|
|
10418
|
-
|
|
10419
|
-
const contractsStore = transaction.objectStore(STORE_CONTRACTS);
|
|
10420
|
-
const contractDataRequest = contractDataStore.clear();
|
|
10421
|
-
const contractsRequest = contractsStore.clear();
|
|
10422
|
-
let completed = 0;
|
|
10423
|
-
const checkComplete = () => {
|
|
10424
|
-
completed++;
|
|
10425
|
-
if (completed === 2) {
|
|
10426
|
-
resolve();
|
|
10427
|
-
}
|
|
10428
|
-
};
|
|
10429
|
-
contractDataRequest.onsuccess = checkComplete;
|
|
10430
|
-
contractsRequest.onsuccess = checkComplete;
|
|
10431
|
-
contractDataRequest.onerror = () => reject(contractDataRequest.error);
|
|
10432
|
-
contractsRequest.onerror = () => reject(contractsRequest.error);
|
|
10433
|
-
});
|
|
10506
|
+
const transaction = db.transaction([STORE_CONTRACTS], "readwrite");
|
|
10507
|
+
transaction.objectStore(STORE_CONTRACTS).clear();
|
|
10508
|
+
await awaitTransaction(transaction);
|
|
10434
10509
|
} catch (error) {
|
|
10435
10510
|
console.error("Failed to clear contract data:", error);
|
|
10436
10511
|
throw error;
|
|
@@ -10441,28 +10516,20 @@ var IndexedDBContractRepository = class {
|
|
|
10441
10516
|
const db = await this.getDB();
|
|
10442
10517
|
const store = db.transaction([STORE_CONTRACTS], "readonly").objectStore(STORE_CONTRACTS);
|
|
10443
10518
|
if (!filter || Object.keys(filter).length === 0) {
|
|
10444
|
-
return
|
|
10445
|
-
const request = store.getAll();
|
|
10446
|
-
request.onerror = () => reject(request.error);
|
|
10447
|
-
request.onsuccess = () => resolve(request.result ?? []);
|
|
10448
|
-
});
|
|
10519
|
+
return await promisifyRequest(store.getAll()) ?? [];
|
|
10449
10520
|
}
|
|
10450
10521
|
const normalizedFilter = normalizeFilter(filter);
|
|
10451
10522
|
if (normalizedFilter.has("script")) {
|
|
10452
10523
|
const scripts = normalizedFilter.get("script");
|
|
10453
10524
|
const contracts = await Promise.all(
|
|
10454
10525
|
scripts.map(
|
|
10455
|
-
(script) =>
|
|
10456
|
-
const req = store.get(script);
|
|
10457
|
-
req.onerror = () => reject(req.error);
|
|
10458
|
-
req.onsuccess = () => resolve(req.result);
|
|
10459
|
-
})
|
|
10526
|
+
(script) => promisifyRequest(store.get(script))
|
|
10460
10527
|
)
|
|
10461
10528
|
);
|
|
10462
10529
|
return this.applyContractFilter(contracts, normalizedFilter);
|
|
10463
10530
|
}
|
|
10464
10531
|
if (normalizedFilter.has("state")) {
|
|
10465
|
-
const contracts = await
|
|
10532
|
+
const contracts = await getAllByIndexValues(
|
|
10466
10533
|
store,
|
|
10467
10534
|
"state",
|
|
10468
10535
|
normalizedFilter.get("state")
|
|
@@ -10470,18 +10537,14 @@ var IndexedDBContractRepository = class {
|
|
|
10470
10537
|
return this.applyContractFilter(contracts, normalizedFilter);
|
|
10471
10538
|
}
|
|
10472
10539
|
if (normalizedFilter.has("type")) {
|
|
10473
|
-
const contracts = await
|
|
10540
|
+
const contracts = await getAllByIndexValues(
|
|
10474
10541
|
store,
|
|
10475
10542
|
"type",
|
|
10476
10543
|
normalizedFilter.get("type")
|
|
10477
10544
|
);
|
|
10478
10545
|
return this.applyContractFilter(contracts, normalizedFilter);
|
|
10479
10546
|
}
|
|
10480
|
-
const allContracts = await
|
|
10481
|
-
const request = store.getAll();
|
|
10482
|
-
request.onerror = () => reject(request.error);
|
|
10483
|
-
request.onsuccess = () => resolve(request.result ?? []);
|
|
10484
|
-
});
|
|
10547
|
+
const allContracts = await promisifyRequest(store.getAll()) ?? [];
|
|
10485
10548
|
return this.applyContractFilter(allContracts, normalizedFilter);
|
|
10486
10549
|
} catch (error) {
|
|
10487
10550
|
console.error("Failed to get contracts:", error);
|
|
@@ -10491,13 +10554,9 @@ var IndexedDBContractRepository = class {
|
|
|
10491
10554
|
async saveContract(contract) {
|
|
10492
10555
|
try {
|
|
10493
10556
|
const db = await this.getDB();
|
|
10494
|
-
|
|
10495
|
-
|
|
10496
|
-
|
|
10497
|
-
const request = store.put(contract);
|
|
10498
|
-
request.onerror = () => reject(request.error);
|
|
10499
|
-
request.onsuccess = () => resolve();
|
|
10500
|
-
});
|
|
10557
|
+
const transaction = db.transaction([STORE_CONTRACTS], "readwrite");
|
|
10558
|
+
transaction.objectStore(STORE_CONTRACTS).put(contract);
|
|
10559
|
+
await awaitTransaction(transaction);
|
|
10501
10560
|
} catch (error) {
|
|
10502
10561
|
console.error("Failed to save contract:", error);
|
|
10503
10562
|
throw error;
|
|
@@ -10506,34 +10565,14 @@ var IndexedDBContractRepository = class {
|
|
|
10506
10565
|
async deleteContract(script) {
|
|
10507
10566
|
try {
|
|
10508
10567
|
const db = await this.getDB();
|
|
10509
|
-
|
|
10510
|
-
|
|
10511
|
-
|
|
10512
|
-
const getRequest = store.get(script);
|
|
10513
|
-
getRequest.onerror = () => reject(getRequest.error);
|
|
10514
|
-
getRequest.onsuccess = () => {
|
|
10515
|
-
const request = store.delete(script);
|
|
10516
|
-
request.onerror = () => reject(request.error);
|
|
10517
|
-
request.onsuccess = () => resolve();
|
|
10518
|
-
};
|
|
10519
|
-
});
|
|
10568
|
+
const transaction = db.transaction([STORE_CONTRACTS], "readwrite");
|
|
10569
|
+
transaction.objectStore(STORE_CONTRACTS).delete(script);
|
|
10570
|
+
await awaitTransaction(transaction);
|
|
10520
10571
|
} catch (error) {
|
|
10521
10572
|
console.error(`Failed to delete contract ${script}:`, error);
|
|
10522
10573
|
throw error;
|
|
10523
10574
|
}
|
|
10524
10575
|
}
|
|
10525
|
-
getContractsByIndexValues(store, indexName, values) {
|
|
10526
|
-
if (values.length === 0) return Promise.resolve([]);
|
|
10527
|
-
const index = store.index(indexName);
|
|
10528
|
-
const requests = values.map(
|
|
10529
|
-
(value) => new Promise((resolve, reject) => {
|
|
10530
|
-
const request = index.getAll(value);
|
|
10531
|
-
request.onerror = () => reject(request.error);
|
|
10532
|
-
request.onsuccess = () => resolve(request.result ?? []);
|
|
10533
|
-
})
|
|
10534
|
-
);
|
|
10535
|
-
return Promise.all(requests).then((results) => results.flatMap((result) => result));
|
|
10536
|
-
}
|
|
10537
10576
|
applyContractFilter(contracts, filter) {
|
|
10538
10577
|
return contracts.filter((contract) => {
|
|
10539
10578
|
if (contract === void 0) return false;
|
|
@@ -10546,15 +10585,11 @@ var IndexedDBContractRepository = class {
|
|
|
10546
10585
|
return true;
|
|
10547
10586
|
});
|
|
10548
10587
|
}
|
|
10549
|
-
|
|
10550
|
-
|
|
10551
|
-
this.db = await openDatabase(this.dbName, DB_VERSION, initDatabase);
|
|
10552
|
-
return this.db;
|
|
10588
|
+
getDB() {
|
|
10589
|
+
return this.connection.get();
|
|
10553
10590
|
}
|
|
10554
10591
|
async [Symbol.asyncDispose]() {
|
|
10555
|
-
|
|
10556
|
-
await closeDatabase(this.dbName);
|
|
10557
|
-
this.db = null;
|
|
10592
|
+
await this.connection[Symbol.asyncDispose]();
|
|
10558
10593
|
}
|
|
10559
10594
|
};
|
|
10560
10595
|
var FILTER_FIELDS = ["script", "state", "type", "watch"];
|
|
@@ -10573,70 +10608,34 @@ function normalizeFilter(filter) {
|
|
|
10573
10608
|
|
|
10574
10609
|
// src/repositories/indexedDB/walletRepository.ts
|
|
10575
10610
|
var IndexedDBWalletRepository = class {
|
|
10611
|
+
version = 1;
|
|
10612
|
+
connection;
|
|
10576
10613
|
constructor(dbName = DEFAULT_DB_NAME) {
|
|
10577
|
-
this.
|
|
10614
|
+
this.connection = createManagedConnection(dbName, DB_VERSION, initDatabase);
|
|
10578
10615
|
}
|
|
10579
|
-
dbName;
|
|
10580
|
-
version = 1;
|
|
10581
|
-
db = null;
|
|
10582
10616
|
async clear() {
|
|
10583
10617
|
try {
|
|
10584
10618
|
const db = await this.getDB();
|
|
10585
|
-
|
|
10586
|
-
|
|
10587
|
-
|
|
10588
|
-
|
|
10589
|
-
);
|
|
10590
|
-
const vtxosStore = transaction.objectStore(STORE_VTXOS);
|
|
10591
|
-
const utxosStore = transaction.objectStore(STORE_UTXOS);
|
|
10592
|
-
const transactionsStore = transaction.objectStore(STORE_TRANSACTIONS);
|
|
10593
|
-
const walletStateStore = transaction.objectStore(STORE_WALLET_STATE);
|
|
10594
|
-
const requests = [
|
|
10595
|
-
vtxosStore.clear(),
|
|
10596
|
-
utxosStore.clear(),
|
|
10597
|
-
transactionsStore.clear(),
|
|
10598
|
-
walletStateStore.clear()
|
|
10599
|
-
];
|
|
10600
|
-
let completed = 0;
|
|
10601
|
-
const checkComplete = () => {
|
|
10602
|
-
completed++;
|
|
10603
|
-
if (completed === requests.length) {
|
|
10604
|
-
resolve();
|
|
10605
|
-
}
|
|
10606
|
-
};
|
|
10607
|
-
requests.forEach((request) => {
|
|
10608
|
-
request.onsuccess = checkComplete;
|
|
10609
|
-
request.onerror = () => reject(request.error);
|
|
10610
|
-
});
|
|
10611
|
-
});
|
|
10619
|
+
const stores = [STORE_VTXOS, STORE_UTXOS, STORE_TRANSACTIONS, STORE_WALLET_STATE];
|
|
10620
|
+
const transaction = db.transaction(stores, "readwrite");
|
|
10621
|
+
for (const name of stores) transaction.objectStore(name).clear();
|
|
10622
|
+
await awaitTransaction(transaction);
|
|
10612
10623
|
} catch (error) {
|
|
10613
10624
|
console.error("Failed to clear wallet data:", error);
|
|
10614
10625
|
throw error;
|
|
10615
10626
|
}
|
|
10616
10627
|
}
|
|
10617
10628
|
async [Symbol.asyncDispose]() {
|
|
10618
|
-
|
|
10619
|
-
await closeDatabase(this.dbName);
|
|
10620
|
-
this.db = null;
|
|
10629
|
+
await this.connection[Symbol.asyncDispose]();
|
|
10621
10630
|
}
|
|
10622
10631
|
async getVtxos(address) {
|
|
10623
10632
|
try {
|
|
10624
10633
|
const db = await this.getDB();
|
|
10625
|
-
|
|
10626
|
-
|
|
10627
|
-
|
|
10628
|
-
|
|
10629
|
-
|
|
10630
|
-
request.onerror = () => reject(request.error);
|
|
10631
|
-
request.onsuccess = () => {
|
|
10632
|
-
const results = request.result || [];
|
|
10633
|
-
try {
|
|
10634
|
-
resolve(results.map(deserializeVtxoWithBackfill));
|
|
10635
|
-
} catch (err) {
|
|
10636
|
-
reject(err);
|
|
10637
|
-
}
|
|
10638
|
-
};
|
|
10639
|
-
});
|
|
10634
|
+
const store = db.transaction([STORE_VTXOS], "readonly").objectStore(STORE_VTXOS);
|
|
10635
|
+
const results = await promisifyRequest(
|
|
10636
|
+
store.index("address").getAll(address)
|
|
10637
|
+
);
|
|
10638
|
+
return (results || []).map(deserializeVtxoWithBackfill);
|
|
10640
10639
|
} catch (error) {
|
|
10641
10640
|
console.error(`Failed to get VTXOs for address ${address}:`, error);
|
|
10642
10641
|
return [];
|
|
@@ -10645,24 +10644,13 @@ var IndexedDBWalletRepository = class {
|
|
|
10645
10644
|
async saveVtxos(address, vtxos) {
|
|
10646
10645
|
try {
|
|
10647
10646
|
const db = await this.getDB();
|
|
10648
|
-
|
|
10649
|
-
|
|
10650
|
-
|
|
10651
|
-
const
|
|
10652
|
-
|
|
10653
|
-
|
|
10654
|
-
|
|
10655
|
-
address,
|
|
10656
|
-
...serialized
|
|
10657
|
-
};
|
|
10658
|
-
const request = store.put(item);
|
|
10659
|
-
request.onerror = () => rejectItem(request.error);
|
|
10660
|
-
request.onsuccess = () => resolveItem();
|
|
10661
|
-
});
|
|
10662
|
-
});
|
|
10663
|
-
Promise.all(promises).then(() => resolve()).catch(reject);
|
|
10664
|
-
transaction.onerror = () => reject(transaction.error);
|
|
10665
|
-
});
|
|
10647
|
+
const transaction = db.transaction([STORE_VTXOS], "readwrite");
|
|
10648
|
+
const store = transaction.objectStore(STORE_VTXOS);
|
|
10649
|
+
for (const vtxo of vtxos) {
|
|
10650
|
+
const serialized = serializeVtxo(vtxo);
|
|
10651
|
+
store.put({ address, ...serialized });
|
|
10652
|
+
}
|
|
10653
|
+
await awaitTransaction(transaction);
|
|
10666
10654
|
} catch (error) {
|
|
10667
10655
|
console.error(`Failed to save VTXOs for address ${address}:`, error);
|
|
10668
10656
|
throw error;
|
|
@@ -10671,22 +10659,9 @@ var IndexedDBWalletRepository = class {
|
|
|
10671
10659
|
async deleteVtxos(address) {
|
|
10672
10660
|
try {
|
|
10673
10661
|
const db = await this.getDB();
|
|
10674
|
-
|
|
10675
|
-
|
|
10676
|
-
|
|
10677
|
-
const index = store.index("address");
|
|
10678
|
-
const request = index.openCursor(IDBKeyRange.only(address));
|
|
10679
|
-
request.onerror = () => reject(request.error);
|
|
10680
|
-
request.onsuccess = () => {
|
|
10681
|
-
const cursor = request.result;
|
|
10682
|
-
if (cursor) {
|
|
10683
|
-
cursor.delete();
|
|
10684
|
-
cursor.continue();
|
|
10685
|
-
} else {
|
|
10686
|
-
resolve();
|
|
10687
|
-
}
|
|
10688
|
-
};
|
|
10689
|
-
});
|
|
10662
|
+
const transaction = db.transaction([STORE_VTXOS], "readwrite");
|
|
10663
|
+
deleteByIndex(transaction.objectStore(STORE_VTXOS), "address", address);
|
|
10664
|
+
await awaitTransaction(transaction);
|
|
10690
10665
|
} catch (error) {
|
|
10691
10666
|
console.error(`Failed to clear VTXOs for address ${address}:`, error);
|
|
10692
10667
|
throw error;
|
|
@@ -10695,34 +10670,24 @@ var IndexedDBWalletRepository = class {
|
|
|
10695
10670
|
async getVtxosForScript(script) {
|
|
10696
10671
|
try {
|
|
10697
10672
|
const db = await this.getDB();
|
|
10698
|
-
|
|
10699
|
-
|
|
10700
|
-
|
|
10701
|
-
|
|
10702
|
-
|
|
10703
|
-
|
|
10704
|
-
|
|
10705
|
-
|
|
10706
|
-
|
|
10707
|
-
|
|
10708
|
-
|
|
10709
|
-
|
|
10710
|
-
|
|
10711
|
-
|
|
10712
|
-
|
|
10713
|
-
|
|
10714
|
-
|
|
10715
|
-
|
|
10716
|
-
if (shouldReplaceVtxo(existing, row)) {
|
|
10717
|
-
byOutpoint.set(outpoint, row);
|
|
10718
|
-
}
|
|
10719
|
-
}
|
|
10720
|
-
resolve(Array.from(byOutpoint.values()).map(deserializeVtxoWithBackfill));
|
|
10721
|
-
} catch (err) {
|
|
10722
|
-
reject(err);
|
|
10723
|
-
}
|
|
10724
|
-
};
|
|
10725
|
-
});
|
|
10673
|
+
const store = db.transaction([STORE_VTXOS], "readonly").objectStore(STORE_VTXOS);
|
|
10674
|
+
const results = await promisifyRequest(
|
|
10675
|
+
store.index("script").getAll(script)
|
|
10676
|
+
);
|
|
10677
|
+
const matching = (results || []).filter((r) => r.script === script);
|
|
10678
|
+
const byOutpoint = /* @__PURE__ */ new Map();
|
|
10679
|
+
for (const row of matching) {
|
|
10680
|
+
const outpoint = `${row.txid}:${row.vout}`;
|
|
10681
|
+
const existing = byOutpoint.get(outpoint);
|
|
10682
|
+
if (!existing) {
|
|
10683
|
+
byOutpoint.set(outpoint, row);
|
|
10684
|
+
continue;
|
|
10685
|
+
}
|
|
10686
|
+
if (shouldReplaceVtxo(existing, row)) {
|
|
10687
|
+
byOutpoint.set(outpoint, row);
|
|
10688
|
+
}
|
|
10689
|
+
}
|
|
10690
|
+
return Array.from(byOutpoint.values()).map(deserializeVtxoWithBackfill);
|
|
10726
10691
|
} catch (error) {
|
|
10727
10692
|
console.error(`Failed to get VTXOs for script ${script}:`, error);
|
|
10728
10693
|
throw error;
|
|
@@ -10744,22 +10709,9 @@ var IndexedDBWalletRepository = class {
|
|
|
10744
10709
|
async deleteVtxosForScript(script) {
|
|
10745
10710
|
try {
|
|
10746
10711
|
const db = await this.getDB();
|
|
10747
|
-
|
|
10748
|
-
|
|
10749
|
-
|
|
10750
|
-
const index = store.index("script");
|
|
10751
|
-
const request = index.openCursor(IDBKeyRange.only(script));
|
|
10752
|
-
request.onerror = () => reject(request.error);
|
|
10753
|
-
request.onsuccess = () => {
|
|
10754
|
-
const cursor = request.result;
|
|
10755
|
-
if (cursor) {
|
|
10756
|
-
cursor.delete();
|
|
10757
|
-
cursor.continue();
|
|
10758
|
-
} else {
|
|
10759
|
-
resolve();
|
|
10760
|
-
}
|
|
10761
|
-
};
|
|
10762
|
-
});
|
|
10712
|
+
const transaction = db.transaction([STORE_VTXOS], "readwrite");
|
|
10713
|
+
deleteByIndex(transaction.objectStore(STORE_VTXOS), "script", script);
|
|
10714
|
+
await awaitTransaction(transaction);
|
|
10763
10715
|
} catch (error) {
|
|
10764
10716
|
console.error(`Failed to clear VTXOs for script ${script}:`, error);
|
|
10765
10717
|
throw error;
|
|
@@ -10768,18 +10720,9 @@ var IndexedDBWalletRepository = class {
|
|
|
10768
10720
|
async getUtxos(address) {
|
|
10769
10721
|
try {
|
|
10770
10722
|
const db = await this.getDB();
|
|
10771
|
-
|
|
10772
|
-
|
|
10773
|
-
|
|
10774
|
-
const index = store.index("address");
|
|
10775
|
-
const request = index.getAll(address);
|
|
10776
|
-
request.onerror = () => reject(request.error);
|
|
10777
|
-
request.onsuccess = () => {
|
|
10778
|
-
const results = request.result || [];
|
|
10779
|
-
const utxos = results.map(deserializeUtxo);
|
|
10780
|
-
resolve(utxos);
|
|
10781
|
-
};
|
|
10782
|
-
});
|
|
10723
|
+
const store = db.transaction([STORE_UTXOS], "readonly").objectStore(STORE_UTXOS);
|
|
10724
|
+
const results = await promisifyRequest(store.index("address").getAll(address));
|
|
10725
|
+
return (results || []).map(deserializeUtxo);
|
|
10783
10726
|
} catch (error) {
|
|
10784
10727
|
console.error(`Failed to get UTXOs for address ${address}:`, error);
|
|
10785
10728
|
return [];
|
|
@@ -10788,24 +10731,10 @@ var IndexedDBWalletRepository = class {
|
|
|
10788
10731
|
async saveUtxos(address, utxos) {
|
|
10789
10732
|
try {
|
|
10790
10733
|
const db = await this.getDB();
|
|
10791
|
-
|
|
10792
|
-
|
|
10793
|
-
|
|
10794
|
-
|
|
10795
|
-
return new Promise((resolveItem, rejectItem) => {
|
|
10796
|
-
const serialized = serializeUtxo(utxo);
|
|
10797
|
-
const item = {
|
|
10798
|
-
address,
|
|
10799
|
-
...serialized
|
|
10800
|
-
};
|
|
10801
|
-
const request = store.put(item);
|
|
10802
|
-
request.onerror = () => rejectItem(request.error);
|
|
10803
|
-
request.onsuccess = () => resolveItem();
|
|
10804
|
-
});
|
|
10805
|
-
});
|
|
10806
|
-
Promise.all(promises).then(() => resolve()).catch(reject);
|
|
10807
|
-
transaction.onerror = () => reject(transaction.error);
|
|
10808
|
-
});
|
|
10734
|
+
const transaction = db.transaction([STORE_UTXOS], "readwrite");
|
|
10735
|
+
const store = transaction.objectStore(STORE_UTXOS);
|
|
10736
|
+
for (const utxo of utxos) store.put({ address, ...serializeUtxo(utxo) });
|
|
10737
|
+
await awaitTransaction(transaction);
|
|
10809
10738
|
} catch (error) {
|
|
10810
10739
|
console.error(`Failed to save UTXOs for address ${address}:`, error);
|
|
10811
10740
|
throw error;
|
|
@@ -10814,22 +10743,9 @@ var IndexedDBWalletRepository = class {
|
|
|
10814
10743
|
async deleteUtxos(address) {
|
|
10815
10744
|
try {
|
|
10816
10745
|
const db = await this.getDB();
|
|
10817
|
-
|
|
10818
|
-
|
|
10819
|
-
|
|
10820
|
-
const index = store.index("address");
|
|
10821
|
-
const request = index.openCursor(IDBKeyRange.only(address));
|
|
10822
|
-
request.onerror = () => reject(request.error);
|
|
10823
|
-
request.onsuccess = () => {
|
|
10824
|
-
const cursor = request.result;
|
|
10825
|
-
if (cursor) {
|
|
10826
|
-
cursor.delete();
|
|
10827
|
-
cursor.continue();
|
|
10828
|
-
} else {
|
|
10829
|
-
resolve();
|
|
10830
|
-
}
|
|
10831
|
-
};
|
|
10832
|
-
});
|
|
10746
|
+
const transaction = db.transaction([STORE_UTXOS], "readwrite");
|
|
10747
|
+
deleteByIndex(transaction.objectStore(STORE_UTXOS), "address", address);
|
|
10748
|
+
await awaitTransaction(transaction);
|
|
10833
10749
|
} catch (error) {
|
|
10834
10750
|
console.error(`Failed to clear UTXOs for address ${address}:`, error);
|
|
10835
10751
|
throw error;
|
|
@@ -10838,17 +10754,11 @@ var IndexedDBWalletRepository = class {
|
|
|
10838
10754
|
async getTransactionHistory(address) {
|
|
10839
10755
|
try {
|
|
10840
10756
|
const db = await this.getDB();
|
|
10841
|
-
|
|
10842
|
-
|
|
10843
|
-
|
|
10844
|
-
|
|
10845
|
-
|
|
10846
|
-
request.onerror = () => reject(request.error);
|
|
10847
|
-
request.onsuccess = () => {
|
|
10848
|
-
const results = request.result || [];
|
|
10849
|
-
resolve(results.sort((a, b) => a.createdAt - b.createdAt));
|
|
10850
|
-
};
|
|
10851
|
-
});
|
|
10757
|
+
const store = db.transaction([STORE_TRANSACTIONS], "readonly").objectStore(STORE_TRANSACTIONS);
|
|
10758
|
+
const results = await promisifyRequest(
|
|
10759
|
+
store.index("address").getAll(address)
|
|
10760
|
+
);
|
|
10761
|
+
return (results || []).sort((a, b) => a.createdAt - b.createdAt);
|
|
10852
10762
|
} catch (error) {
|
|
10853
10763
|
console.error(`Failed to get transaction history for address ${address}:`, error);
|
|
10854
10764
|
return [];
|
|
@@ -10857,23 +10767,18 @@ var IndexedDBWalletRepository = class {
|
|
|
10857
10767
|
async saveTransactions(address, txs) {
|
|
10858
10768
|
try {
|
|
10859
10769
|
const db = await this.getDB();
|
|
10860
|
-
|
|
10861
|
-
|
|
10862
|
-
|
|
10863
|
-
|
|
10864
|
-
|
|
10865
|
-
|
|
10866
|
-
|
|
10867
|
-
|
|
10868
|
-
|
|
10869
|
-
keyArkTxid: tx.key.arkTxid
|
|
10870
|
-
};
|
|
10871
|
-
store.put(item);
|
|
10770
|
+
const transaction = db.transaction([STORE_TRANSACTIONS], "readwrite");
|
|
10771
|
+
const store = transaction.objectStore(STORE_TRANSACTIONS);
|
|
10772
|
+
for (const tx of txs) {
|
|
10773
|
+
store.put({
|
|
10774
|
+
address,
|
|
10775
|
+
...tx,
|
|
10776
|
+
keyBoardingTxid: tx.key.boardingTxid,
|
|
10777
|
+
keyCommitmentTxid: tx.key.commitmentTxid,
|
|
10778
|
+
keyArkTxid: tx.key.arkTxid
|
|
10872
10779
|
});
|
|
10873
|
-
|
|
10874
|
-
|
|
10875
|
-
transaction.onabort = () => reject(new Error("Transaction aborted"));
|
|
10876
|
-
});
|
|
10780
|
+
}
|
|
10781
|
+
await awaitTransaction(transaction);
|
|
10877
10782
|
} catch (error) {
|
|
10878
10783
|
console.error(`Failed to save transactions for address ${address}:`, error);
|
|
10879
10784
|
throw error;
|
|
@@ -10882,22 +10787,9 @@ var IndexedDBWalletRepository = class {
|
|
|
10882
10787
|
async deleteTransactions(address) {
|
|
10883
10788
|
try {
|
|
10884
10789
|
const db = await this.getDB();
|
|
10885
|
-
|
|
10886
|
-
|
|
10887
|
-
|
|
10888
|
-
const index = store.index("address");
|
|
10889
|
-
const request = index.openCursor(IDBKeyRange.only(address));
|
|
10890
|
-
request.onerror = () => reject(request.error);
|
|
10891
|
-
request.onsuccess = () => {
|
|
10892
|
-
const cursor = request.result;
|
|
10893
|
-
if (cursor) {
|
|
10894
|
-
cursor.delete();
|
|
10895
|
-
cursor.continue();
|
|
10896
|
-
} else {
|
|
10897
|
-
resolve();
|
|
10898
|
-
}
|
|
10899
|
-
};
|
|
10900
|
-
});
|
|
10790
|
+
const transaction = db.transaction([STORE_TRANSACTIONS], "readwrite");
|
|
10791
|
+
deleteByIndex(transaction.objectStore(STORE_TRANSACTIONS), "address", address);
|
|
10792
|
+
await awaitTransaction(transaction);
|
|
10901
10793
|
} catch (error) {
|
|
10902
10794
|
console.error(`Failed to clear transactions for address ${address}:`, error);
|
|
10903
10795
|
throw error;
|
|
@@ -10906,20 +10798,11 @@ var IndexedDBWalletRepository = class {
|
|
|
10906
10798
|
async getWalletState() {
|
|
10907
10799
|
try {
|
|
10908
10800
|
const db = await this.getDB();
|
|
10909
|
-
|
|
10910
|
-
|
|
10911
|
-
|
|
10912
|
-
|
|
10913
|
-
|
|
10914
|
-
request.onsuccess = () => {
|
|
10915
|
-
const result = request.result;
|
|
10916
|
-
if (result && result.data) {
|
|
10917
|
-
resolve(result.data);
|
|
10918
|
-
} else {
|
|
10919
|
-
resolve(null);
|
|
10920
|
-
}
|
|
10921
|
-
};
|
|
10922
|
-
});
|
|
10801
|
+
const store = db.transaction([STORE_WALLET_STATE], "readonly").objectStore(STORE_WALLET_STATE);
|
|
10802
|
+
const result = await promisifyRequest(
|
|
10803
|
+
store.get("state")
|
|
10804
|
+
);
|
|
10805
|
+
return result?.data ?? null;
|
|
10923
10806
|
} catch (error) {
|
|
10924
10807
|
console.error("Failed to get wallet state:", error);
|
|
10925
10808
|
return null;
|
|
@@ -10928,26 +10811,16 @@ var IndexedDBWalletRepository = class {
|
|
|
10928
10811
|
async saveWalletState(state) {
|
|
10929
10812
|
try {
|
|
10930
10813
|
const db = await this.getDB();
|
|
10931
|
-
|
|
10932
|
-
|
|
10933
|
-
|
|
10934
|
-
const item = {
|
|
10935
|
-
key: "state",
|
|
10936
|
-
data: state
|
|
10937
|
-
};
|
|
10938
|
-
const request = store.put(item);
|
|
10939
|
-
request.onerror = () => reject(request.error);
|
|
10940
|
-
request.onsuccess = () => resolve();
|
|
10941
|
-
});
|
|
10814
|
+
const transaction = db.transaction([STORE_WALLET_STATE], "readwrite");
|
|
10815
|
+
transaction.objectStore(STORE_WALLET_STATE).put({ key: "state", data: state });
|
|
10816
|
+
await awaitTransaction(transaction);
|
|
10942
10817
|
} catch (error) {
|
|
10943
10818
|
console.error("Failed to save wallet state:", error);
|
|
10944
10819
|
throw error;
|
|
10945
10820
|
}
|
|
10946
10821
|
}
|
|
10947
|
-
|
|
10948
|
-
|
|
10949
|
-
this.db = await openDatabase(this.dbName, DB_VERSION, initDatabase);
|
|
10950
|
-
return this.db;
|
|
10822
|
+
getDB() {
|
|
10823
|
+
return this.connection.get();
|
|
10951
10824
|
}
|
|
10952
10825
|
};
|
|
10953
10826
|
function deserializeVtxoWithBackfill(o) {
|
|
@@ -11422,7 +11295,7 @@ var HDDescriptorProvider = class _HDDescriptorProvider {
|
|
|
11422
11295
|
*/
|
|
11423
11296
|
materializeDescriptorAt(index) {
|
|
11424
11297
|
const descriptor = this.identity.descriptor;
|
|
11425
|
-
const network =
|
|
11298
|
+
const network = chunkBABJ77NG_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
11426
11299
|
const expansion = descriptorsScure.expand({ descriptor, network, index });
|
|
11427
11300
|
const keyInfo = expansion.expansionMap?.["@0"];
|
|
11428
11301
|
if (!keyInfo?.keyExpression) {
|
|
@@ -11570,7 +11443,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
|
|
|
11570
11443
|
const provider = await resolveDescriptorProvider(config, setup.walletRepository);
|
|
11571
11444
|
if (!provider) return void 0;
|
|
11572
11445
|
const allowSilentFallback = (config.walletMode ?? "auto") === "auto";
|
|
11573
|
-
const expectedContractType = setup.offchainTapscript instanceof
|
|
11446
|
+
const expectedContractType = setup.offchainTapscript instanceof chunkBABJ77NG_cjs.DelegateVtxo.Script ? "delegate" : "default";
|
|
11574
11447
|
const factoryOpts = {
|
|
11575
11448
|
walletRepository: setup.walletRepository,
|
|
11576
11449
|
contractRepository: setup.contractRepository,
|
|
@@ -11769,7 +11642,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
|
|
|
11769
11642
|
};
|
|
11770
11643
|
function deriveLeafPubkey(descriptor) {
|
|
11771
11644
|
try {
|
|
11772
|
-
return
|
|
11645
|
+
return chunkBABJ77NG_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
11773
11646
|
} catch (e) {
|
|
11774
11647
|
throw new NonRangeableDescriptorError(
|
|
11775
11648
|
"Cannot derive leaf pubkey: descriptor is not a materialized, parsable tr(...) shape.",
|
|
@@ -11781,7 +11654,7 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
11781
11654
|
const pubKey = deriveLeafPubkey(descriptor);
|
|
11782
11655
|
const tapscript = rebuildTapscript(current, pubKey);
|
|
11783
11656
|
const serverPubKey = tapscript.options.serverPubKey;
|
|
11784
|
-
const csvTimelock =
|
|
11657
|
+
const csvTimelock = chunkG552MISJ_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
|
|
11785
11658
|
const base$1 = {
|
|
11786
11659
|
script: base.hex.encode(tapscript.pkScript),
|
|
11787
11660
|
address: tapscript.address(hrp, serverPubKey).encode(),
|
|
@@ -11792,11 +11665,11 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
11792
11665
|
// index-0 key. Without it, spends produce unsigned PSBTs that the
|
|
11793
11666
|
// server rejects with `INVALID_PSBT_INPUT (5): missing tapscript spend sig`.
|
|
11794
11667
|
metadata: {
|
|
11795
|
-
...{ source:
|
|
11668
|
+
...{ source: chunkBABJ77NG_cjs.WALLET_RECEIVE_SOURCE },
|
|
11796
11669
|
signingDescriptor: descriptor
|
|
11797
11670
|
}
|
|
11798
11671
|
};
|
|
11799
|
-
const params = tapscript instanceof
|
|
11672
|
+
const params = tapscript instanceof chunkBABJ77NG_cjs.DelegateVtxo.Script ? {
|
|
11800
11673
|
...base$1,
|
|
11801
11674
|
type: "delegate",
|
|
11802
11675
|
params: {
|
|
@@ -11817,10 +11690,10 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
11817
11690
|
return { tapscript, params };
|
|
11818
11691
|
}
|
|
11819
11692
|
function rebuildTapscript(current, pubKey) {
|
|
11820
|
-
if (current instanceof
|
|
11821
|
-
return new
|
|
11693
|
+
if (current instanceof chunkBABJ77NG_cjs.DelegateVtxo.Script) {
|
|
11694
|
+
return new chunkBABJ77NG_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
|
|
11822
11695
|
}
|
|
11823
|
-
return new
|
|
11696
|
+
return new chunkBABJ77NG_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
|
|
11824
11697
|
}
|
|
11825
11698
|
async function pickActiveReceive(contractRepository, serverPubKey, expectedType) {
|
|
11826
11699
|
const candidates = await contractRepository.getContracts({
|
|
@@ -11829,7 +11702,7 @@ async function pickActiveReceive(contractRepository, serverPubKey, expectedType)
|
|
|
11829
11702
|
});
|
|
11830
11703
|
const serverPubKeyHex = base.hex.encode(serverPubKey);
|
|
11831
11704
|
const matching = candidates.filter(
|
|
11832
|
-
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source ===
|
|
11705
|
+
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkBABJ77NG_cjs.WALLET_RECEIVE_SOURCE
|
|
11833
11706
|
).sort((a, b) => {
|
|
11834
11707
|
if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
|
|
11835
11708
|
return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
|
|
@@ -11884,17 +11757,17 @@ function computeOffchainBalance(vtxos, caps) {
|
|
|
11884
11757
|
}
|
|
11885
11758
|
};
|
|
11886
11759
|
for (const vtxo of vtxos) {
|
|
11887
|
-
if (
|
|
11760
|
+
if (chunkG552MISJ_cjs.hasTerminalSpend(vtxo)) continue;
|
|
11888
11761
|
addAssets(owned, vtxo);
|
|
11889
11762
|
if (isPendingRecovery(vtxo)) {
|
|
11890
11763
|
pendingRecovery += vtxo.value;
|
|
11891
11764
|
continue;
|
|
11892
11765
|
}
|
|
11893
|
-
if (
|
|
11766
|
+
if (chunkG552MISJ_cjs.canRecoverOnchain(vtxo, now)) {
|
|
11894
11767
|
recoverable += vtxo.value;
|
|
11895
11768
|
continue;
|
|
11896
11769
|
}
|
|
11897
|
-
if (!
|
|
11770
|
+
if (!chunkG552MISJ_cjs.canSpendOffchain(vtxo, now)) continue;
|
|
11898
11771
|
if (vtxo.isPreconfirmed) {
|
|
11899
11772
|
preconfirmed += vtxo.value;
|
|
11900
11773
|
} else {
|
|
@@ -12063,12 +11936,12 @@ var InputSignerRouter = class {
|
|
|
12063
11936
|
};
|
|
12064
11937
|
|
|
12065
11938
|
// src/wallet/wallet.ts
|
|
12066
|
-
var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl ||
|
|
11939
|
+
var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl || chunkG552MISJ_cjs.DEFAULT_ARKADE_SERVER_URL;
|
|
12067
11940
|
function intentProofJobs(coins) {
|
|
12068
11941
|
if (coins.length === 0) return [];
|
|
12069
11942
|
const coinJobs = coins.map((coin, i) => ({
|
|
12070
11943
|
index: i + 1,
|
|
12071
|
-
lookupScript:
|
|
11944
|
+
lookupScript: chunkG552MISJ_cjs.VtxoScript.decode(coin.tapTree).pkScript
|
|
12072
11945
|
}));
|
|
12073
11946
|
return [{ index: 0, lookupScript: coinJobs[0].lookupScript }, ...coinJobs];
|
|
12074
11947
|
}
|
|
@@ -12105,7 +11978,7 @@ function dedupeTimelocks(timelocks) {
|
|
|
12105
11978
|
const seen = /* @__PURE__ */ new Set();
|
|
12106
11979
|
const deduped = [];
|
|
12107
11980
|
for (const timelock of timelocks) {
|
|
12108
|
-
const sequence =
|
|
11981
|
+
const sequence = chunkG552MISJ_cjs.timelockToSequence(timelock).toString();
|
|
12109
11982
|
if (seen.has(sequence)) continue;
|
|
12110
11983
|
seen.add(sequence);
|
|
12111
11984
|
deduped.push(timelock);
|
|
@@ -12122,7 +11995,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
|
|
|
12122
11995
|
state: "active"
|
|
12123
11996
|
});
|
|
12124
11997
|
const newest = candidates.filter(
|
|
12125
|
-
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source ===
|
|
11998
|
+
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkBABJ77NG_cjs.WALLET_RECEIVE_SOURCE
|
|
12126
11999
|
).sort((a, b) => {
|
|
12127
12000
|
if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
|
|
12128
12001
|
return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
|
|
@@ -12130,7 +12003,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
|
|
|
12130
12003
|
if (!newest?.params.pubKey) return baseline;
|
|
12131
12004
|
try {
|
|
12132
12005
|
const pubKey = base.hex.decode(newest.params.pubKey);
|
|
12133
|
-
return new
|
|
12006
|
+
return new chunkBABJ77NG_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
|
|
12134
12007
|
} catch (e) {
|
|
12135
12008
|
console.warn("Skipping malformed boarding contract at boot", newest.script, e);
|
|
12136
12009
|
return baseline;
|
|
@@ -12146,8 +12019,8 @@ function filterSnapshotVtxos(snapshot, filter, pendingSpendOutpoints) {
|
|
|
12146
12019
|
if (pendingSpendOutpoints.has(`${vtxo.txid}:${vtxo.vout}`)) {
|
|
12147
12020
|
return false;
|
|
12148
12021
|
}
|
|
12149
|
-
if (!
|
|
12150
|
-
if (!f.withRecoverable &&
|
|
12022
|
+
if (!chunkG552MISJ_cjs.hasTerminalSpend(vtxo)) {
|
|
12023
|
+
if (!f.withRecoverable && chunkG552MISJ_cjs.canRecoverOnchain(vtxo, now)) {
|
|
12151
12024
|
return false;
|
|
12152
12025
|
}
|
|
12153
12026
|
return true;
|
|
@@ -12488,7 +12361,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12488
12361
|
*/
|
|
12489
12362
|
static async setupWalletConfig(config, pubKey) {
|
|
12490
12363
|
const arkadeServerUrl = getArkadeServerUrl(config);
|
|
12491
|
-
const arkProvider = config.arkProvider || new
|
|
12364
|
+
const arkProvider = config.arkProvider || new chunkG552MISJ_cjs.RestArkProvider(arkadeServerUrl);
|
|
12492
12365
|
let indexerProvider = config.indexerProvider;
|
|
12493
12366
|
if (!indexerProvider) {
|
|
12494
12367
|
let indexerUrl = config.indexerUrl;
|
|
@@ -12505,7 +12378,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12505
12378
|
indexerUrl = arkadeServerUrl;
|
|
12506
12379
|
}
|
|
12507
12380
|
}
|
|
12508
|
-
indexerProvider = new
|
|
12381
|
+
indexerProvider = new chunkXN55B6EP_cjs.RestIndexerProvider(indexerUrl);
|
|
12509
12382
|
}
|
|
12510
12383
|
const walletRepository = config.storage?.walletRepository ?? new IndexedDBWalletRepository();
|
|
12511
12384
|
const contractRepository = config.storage?.contractRepository ?? new IndexedDBContractRepository();
|
|
@@ -12514,7 +12387,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12514
12387
|
source: serverInfoSource,
|
|
12515
12388
|
lastOnlineAt: serverInfoLastOnlineAt
|
|
12516
12389
|
} = await resolveArkInfo(arkProvider, walletRepository);
|
|
12517
|
-
const network =
|
|
12390
|
+
const network = chunkG552MISJ_cjs.getNetwork(info.network);
|
|
12518
12391
|
if ("descriptor" in config.identity) {
|
|
12519
12392
|
const descriptor = config.identity.descriptor;
|
|
12520
12393
|
const identityIsMainnet = !descriptor.includes("tpub");
|
|
@@ -12561,11 +12434,11 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12561
12434
|
serverPubKey,
|
|
12562
12435
|
csvTimelock: exitTimelock
|
|
12563
12436
|
};
|
|
12564
|
-
const offchainTapscript = !delegatePubKey ? new
|
|
12565
|
-
const boardingTapscript =
|
|
12437
|
+
const offchainTapscript = !delegatePubKey ? new chunkBABJ77NG_cjs.DefaultVtxo.Script(offchainOptions) : new chunkBABJ77NG_cjs.DelegateVtxo.Script({ ...offchainOptions, delegatePubKey });
|
|
12438
|
+
const boardingTapscript = chunkBABJ77NG_cjs.BoardingContractHandler.createScript({
|
|
12566
12439
|
pubKey: base.hex.encode(pubKey),
|
|
12567
12440
|
serverPubKey: base.hex.encode(serverPubKey),
|
|
12568
|
-
csvTimelock:
|
|
12441
|
+
csvTimelock: chunkG552MISJ_cjs.timelockToSequence(boardingTimelock).toString()
|
|
12569
12442
|
});
|
|
12570
12443
|
return {
|
|
12571
12444
|
arkProvider,
|
|
@@ -12862,7 +12735,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12862
12735
|
const response = await contractManager.getContractsWithVtxos();
|
|
12863
12736
|
const allVtxos = response.flatMap((_) => _.vtxos);
|
|
12864
12737
|
const { boardingTxs, commitmentsToIgnore } = await this.getBoardingTxs();
|
|
12865
|
-
const resolveTxCreatedAt = (txids) =>
|
|
12738
|
+
const resolveTxCreatedAt = (txids) => chunkG552MISJ_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
|
|
12866
12739
|
return buildTransactionHistory(
|
|
12867
12740
|
allVtxos,
|
|
12868
12741
|
boardingTxs,
|
|
@@ -12956,7 +12829,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12956
12829
|
},
|
|
12957
12830
|
isUnrolled: true,
|
|
12958
12831
|
...boardingFacts,
|
|
12959
|
-
virtualStatus:
|
|
12832
|
+
virtualStatus: chunkG552MISJ_cjs.toVirtualStatus(boardingFacts),
|
|
12960
12833
|
spentBy: "",
|
|
12961
12834
|
createdAt: tx.status.confirmed ? new Date(tx.status.block_time * 1e3) : /* @__PURE__ */ new Date(0),
|
|
12962
12835
|
script: scriptHex
|
|
@@ -13012,9 +12885,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13012
12885
|
async getBoardingTapscripts(allowedSigners) {
|
|
13013
12886
|
const byScript = /* @__PURE__ */ new Map();
|
|
13014
12887
|
const add = (s) => byScript.set(base.hex.encode(s.pkScript), s);
|
|
13015
|
-
const boardingCsv = this.boardingTapscript.options.csvTimelock ??
|
|
12888
|
+
const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunkBABJ77NG_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
13016
12889
|
add(
|
|
13017
|
-
new
|
|
12890
|
+
new chunkBABJ77NG_cjs.DefaultVtxo.Script({
|
|
13018
12891
|
pubKey: await this.identity.xOnlyPublicKey(),
|
|
13019
12892
|
serverPubKey: this.boardingTapscript.options.serverPubKey,
|
|
13020
12893
|
csvTimelock: boardingCsv
|
|
@@ -13029,7 +12902,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13029
12902
|
for (const c of boardingContracts) {
|
|
13030
12903
|
if (!allowed.has(toXOnlySignerHex(c.params.serverPubKey))) continue;
|
|
13031
12904
|
try {
|
|
13032
|
-
add(
|
|
12905
|
+
add(chunkBABJ77NG_cjs.BoardingContractHandler.createScript(c.params));
|
|
13033
12906
|
} catch (e) {
|
|
13034
12907
|
console.warn("Skipping malformed boarding contract", c.script, e);
|
|
13035
12908
|
}
|
|
@@ -13067,7 +12940,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13067
12940
|
// Per-row CSV delay decoded from THIS tapscript's exit leaf —
|
|
13068
12941
|
// not the wallet's current boarding timelock, which a signer
|
|
13069
12942
|
// rotation may have changed.
|
|
13070
|
-
csvTimelock:
|
|
12943
|
+
csvTimelock: chunkG552MISJ_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
|
|
13071
12944
|
coins: utxos
|
|
13072
12945
|
});
|
|
13073
12946
|
}
|
|
@@ -13200,7 +13073,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13200
13073
|
/** Fetch Arkade transaction ids that are still pending final settlement. */
|
|
13201
13074
|
async fetchPendingTxs() {
|
|
13202
13075
|
const scripts = await this.getWalletScripts();
|
|
13203
|
-
const vtxos = await
|
|
13076
|
+
const vtxos = await chunkG552MISJ_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
|
|
13204
13077
|
return vtxos.filter(
|
|
13205
13078
|
(vtxo) => (vtxo.isSpent || vtxo.isPreconfirmed && !vtxo.isSwept) && vtxo.arkTxId !== void 0
|
|
13206
13079
|
).map((_) => _.arkTxId);
|
|
@@ -13231,7 +13104,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13231
13104
|
});
|
|
13232
13105
|
for (const contract of contracts) {
|
|
13233
13106
|
if (map.has(contract.script)) continue;
|
|
13234
|
-
const handler =
|
|
13107
|
+
const handler = chunkBABJ77NG_cjs.contractHandlers.get(contract.type);
|
|
13235
13108
|
if (handler) {
|
|
13236
13109
|
const script = handler.createScript(contract.params);
|
|
13237
13110
|
map.set(contract.script, script);
|
|
@@ -13343,7 +13216,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13343
13216
|
}
|
|
13344
13217
|
});
|
|
13345
13218
|
const baselinePubkey = await this.identity.xOnlyPublicKey();
|
|
13346
|
-
const delegatePubKey = this.offchainTapscript instanceof
|
|
13219
|
+
const delegatePubKey = this.offchainTapscript instanceof chunkBABJ77NG_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
|
|
13347
13220
|
const baselineSigners = [
|
|
13348
13221
|
this.offchainTapscript.options.serverPubKey,
|
|
13349
13222
|
...[...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h))
|
|
@@ -13351,8 +13224,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13351
13224
|
const seenBaselineScripts = /* @__PURE__ */ new Set();
|
|
13352
13225
|
for (const serverPubKey of baselineSigners) {
|
|
13353
13226
|
for (const csvTimelock of this.walletContractTimelocks) {
|
|
13354
|
-
const csvTimelockStr =
|
|
13355
|
-
const defaultScript = new
|
|
13227
|
+
const csvTimelockStr = chunkG552MISJ_cjs.timelockToSequence(csvTimelock).toString();
|
|
13228
|
+
const defaultScript = new chunkBABJ77NG_cjs.DefaultVtxo.Script({
|
|
13356
13229
|
pubKey: baselinePubkey,
|
|
13357
13230
|
serverPubKey,
|
|
13358
13231
|
csvTimelock
|
|
@@ -13373,7 +13246,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13373
13246
|
});
|
|
13374
13247
|
}
|
|
13375
13248
|
if (delegatePubKey) {
|
|
13376
|
-
const delegateScript = new
|
|
13249
|
+
const delegateScript = new chunkBABJ77NG_cjs.DelegateVtxo.Script({
|
|
13377
13250
|
pubKey: baselinePubkey,
|
|
13378
13251
|
serverPubKey,
|
|
13379
13252
|
delegatePubKey,
|
|
@@ -13397,9 +13270,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13397
13270
|
}
|
|
13398
13271
|
}
|
|
13399
13272
|
}
|
|
13400
|
-
const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ??
|
|
13273
|
+
const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunkBABJ77NG_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
13401
13274
|
for (const serverPubKey of baselineSigners) {
|
|
13402
|
-
const baselineBoarding = new
|
|
13275
|
+
const baselineBoarding = new chunkBABJ77NG_cjs.DefaultVtxo.Script({
|
|
13403
13276
|
pubKey: baselinePubkey,
|
|
13404
13277
|
serverPubKey,
|
|
13405
13278
|
csvTimelock: boardingCsvTimelock
|
|
@@ -13412,7 +13285,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13412
13285
|
params: {
|
|
13413
13286
|
pubKey: base.hex.encode(baselineBoarding.options.pubKey),
|
|
13414
13287
|
serverPubKey: base.hex.encode(serverPubKey),
|
|
13415
|
-
csvTimelock:
|
|
13288
|
+
csvTimelock: chunkG552MISJ_cjs.timelockToSequence(boardingCsvTimelock).toString()
|
|
13416
13289
|
},
|
|
13417
13290
|
script: boardingScriptHex,
|
|
13418
13291
|
address: baselineBoarding.address(this.network.hrp, serverPubKey).encode(),
|
|
@@ -13591,7 +13464,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13591
13464
|
serverPubKey: this.offchainTapscript.options.serverPubKey,
|
|
13592
13465
|
deprecatedSignerPubKeys: [...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h)),
|
|
13593
13466
|
csvTimelocks: this.walletContractTimelocks,
|
|
13594
|
-
delegatePubKey: this.offchainTapscript instanceof
|
|
13467
|
+
delegatePubKey: this.offchainTapscript instanceof chunkBABJ77NG_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
|
|
13595
13468
|
};
|
|
13596
13469
|
}
|
|
13597
13470
|
_signerRouter;
|
|
@@ -13685,24 +13558,24 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13685
13558
|
const manager = await this.getContractManager();
|
|
13686
13559
|
const descriptor = await manager.getNextSigningDescriptor();
|
|
13687
13560
|
if (!descriptor) return this.getBoardingAddress();
|
|
13688
|
-
const pubKey =
|
|
13689
|
-
const newBoarding = new
|
|
13561
|
+
const pubKey = chunkBABJ77NG_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
13562
|
+
const newBoarding = new chunkBABJ77NG_cjs.DefaultVtxo.Script({
|
|
13690
13563
|
...this._boardingTapscript.options,
|
|
13691
13564
|
pubKey
|
|
13692
13565
|
});
|
|
13693
|
-
const csvTimelock = newBoarding.options.csvTimelock ??
|
|
13566
|
+
const csvTimelock = newBoarding.options.csvTimelock ?? chunkBABJ77NG_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
13694
13567
|
await manager.createContract({
|
|
13695
13568
|
type: "boarding",
|
|
13696
13569
|
params: {
|
|
13697
13570
|
pubKey: base.hex.encode(pubKey),
|
|
13698
13571
|
serverPubKey: base.hex.encode(newBoarding.options.serverPubKey),
|
|
13699
|
-
csvTimelock:
|
|
13572
|
+
csvTimelock: chunkG552MISJ_cjs.timelockToSequence(csvTimelock).toString()
|
|
13700
13573
|
},
|
|
13701
13574
|
script: base.hex.encode(newBoarding.pkScript),
|
|
13702
13575
|
address: newBoarding.address(this.network.hrp, this.arkServerPublicKey).encode(),
|
|
13703
13576
|
state: "active",
|
|
13704
13577
|
metadata: {
|
|
13705
|
-
source:
|
|
13578
|
+
source: chunkBABJ77NG_cjs.WALLET_RECEIVE_SOURCE,
|
|
13706
13579
|
signingDescriptor: descriptor
|
|
13707
13580
|
}
|
|
13708
13581
|
});
|
|
@@ -13737,7 +13610,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13737
13610
|
if (this._descriptorProvider instanceof HDDescriptorProvider) {
|
|
13738
13611
|
return (await this.getContractManager()).getNextSigningDescriptor();
|
|
13739
13612
|
}
|
|
13740
|
-
return
|
|
13613
|
+
return chunkBABJ77NG_cjs.identityDescriptor(this.identity);
|
|
13741
13614
|
}
|
|
13742
13615
|
/**
|
|
13743
13616
|
* @see HDAllocationCapable.advanceSigningDescriptorWatermark
|
|
@@ -13862,21 +13735,21 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13862
13735
|
const [currentBoardingRow] = await manager.getContracts({
|
|
13863
13736
|
script: currentBoardingScript
|
|
13864
13737
|
});
|
|
13865
|
-
const newOffchain = this.offchainTapscript instanceof
|
|
13738
|
+
const newOffchain = this.offchainTapscript instanceof chunkBABJ77NG_cjs.DelegateVtxo.Script ? new chunkBABJ77NG_cjs.DelegateVtxo.Script({
|
|
13866
13739
|
...this.offchainTapscript.options,
|
|
13867
13740
|
serverPubKey: xonly
|
|
13868
|
-
}) : new
|
|
13741
|
+
}) : new chunkBABJ77NG_cjs.DefaultVtxo.Script({
|
|
13869
13742
|
...this.offchainTapscript.options,
|
|
13870
13743
|
serverPubKey: xonly
|
|
13871
13744
|
});
|
|
13872
|
-
const newBoarding = new
|
|
13745
|
+
const newBoarding = new chunkBABJ77NG_cjs.DefaultVtxo.Script({
|
|
13873
13746
|
...this._boardingTapscript.options,
|
|
13874
13747
|
serverPubKey: xonly
|
|
13875
13748
|
});
|
|
13876
|
-
const offchainCsv =
|
|
13749
|
+
const offchainCsv = chunkG552MISJ_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
|
|
13877
13750
|
const newOffchainScript = base.hex.encode(newOffchain.pkScript);
|
|
13878
13751
|
const newOffchainAddress = newOffchain.address(this.network.hrp, xonly).encode();
|
|
13879
|
-
if (newOffchain instanceof
|
|
13752
|
+
if (newOffchain instanceof chunkBABJ77NG_cjs.DelegateVtxo.Script) {
|
|
13880
13753
|
await manager.createContract({
|
|
13881
13754
|
type: "delegate",
|
|
13882
13755
|
params: {
|
|
@@ -13904,13 +13777,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13904
13777
|
metadata: currentOffchainRow?.metadata
|
|
13905
13778
|
});
|
|
13906
13779
|
}
|
|
13907
|
-
const boardingCsv = newBoarding.options.csvTimelock ??
|
|
13780
|
+
const boardingCsv = newBoarding.options.csvTimelock ?? chunkBABJ77NG_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
13908
13781
|
await manager.createContract({
|
|
13909
13782
|
type: "boarding",
|
|
13910
13783
|
params: {
|
|
13911
13784
|
pubKey: base.hex.encode(newBoarding.options.pubKey),
|
|
13912
13785
|
serverPubKey: base.hex.encode(xonly),
|
|
13913
|
-
csvTimelock:
|
|
13786
|
+
csvTimelock: chunkG552MISJ_cjs.timelockToSequence(boardingCsv).toString()
|
|
13914
13787
|
},
|
|
13915
13788
|
script: base.hex.encode(newBoarding.pkScript),
|
|
13916
13789
|
address: newBoarding.address(this.network.hrp, xonly).encode(),
|
|
@@ -13943,14 +13816,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13943
13816
|
_restoreInFlight;
|
|
13944
13817
|
_addPendingSpends(inputs) {
|
|
13945
13818
|
for (const input of inputs) {
|
|
13946
|
-
if (
|
|
13819
|
+
if (chunkG552MISJ_cjs.isVirtualCoin(input)) {
|
|
13947
13820
|
this._pendingSpendOutpoints.add(`${input.txid}:${input.vout}`);
|
|
13948
13821
|
}
|
|
13949
13822
|
}
|
|
13950
13823
|
}
|
|
13951
13824
|
_removePendingSpends(inputs) {
|
|
13952
13825
|
for (const input of inputs) {
|
|
13953
|
-
if (
|
|
13826
|
+
if (chunkG552MISJ_cjs.isVirtualCoin(input)) {
|
|
13954
13827
|
this._pendingSpendOutpoints.delete(`${input.txid}:${input.vout}`);
|
|
13955
13828
|
}
|
|
13956
13829
|
}
|
|
@@ -14008,9 +13881,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14008
13881
|
const manager = await this.getContractManager();
|
|
14009
13882
|
const provider = this._descriptorProvider;
|
|
14010
13883
|
const hd = provider instanceof HDDescriptorProvider;
|
|
14011
|
-
const staticDescriptor = hd ? void 0 : await
|
|
13884
|
+
const staticDescriptor = hd ? void 0 : await chunkBABJ77NG_cjs.identityDescriptor(this.identity);
|
|
14012
13885
|
const materialize = (index) => hd ? provider.materializeDescriptorAt(index) : staticDescriptor;
|
|
14013
|
-
const delegatePubKey = this.offchainTapscript instanceof
|
|
13886
|
+
const delegatePubKey = this.offchainTapscript instanceof chunkBABJ77NG_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
|
|
14014
13887
|
const arkInfo = await this.arkProvider.getInfo();
|
|
14015
13888
|
const currentSignerPubKey = toXOnlyPubKey(base.hex.decode(arkInfo.signerPubkey));
|
|
14016
13889
|
const deprecatedSignerPubKeys = arkInfo.deprecatedSigners.map(
|
|
@@ -14029,7 +13902,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14029
13902
|
csvTimelocks: this.walletContractTimelocks,
|
|
14030
13903
|
// Boarding-exit CSV so the boarding handler can build its
|
|
14031
13904
|
// candidate script (distinct from the unilateral-exit matrix).
|
|
14032
|
-
boardingTimelock: this.boardingTapscript.options.csvTimelock ??
|
|
13905
|
+
boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunkBABJ77NG_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
|
|
14033
13906
|
delegatePubKey
|
|
14034
13907
|
};
|
|
14035
13908
|
const result = await manager.scanContracts({
|
|
@@ -14292,7 +14165,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14292
14165
|
inputs: params.selectedVtxos,
|
|
14293
14166
|
changeAmount: BigInt(changeAmount)
|
|
14294
14167
|
};
|
|
14295
|
-
const outputAddress =
|
|
14168
|
+
const outputAddress = chunkG552MISJ_cjs.ArkAddress.decode(params.address);
|
|
14296
14169
|
assertRecipientArkAddress(
|
|
14297
14170
|
params.address,
|
|
14298
14171
|
outputAddress,
|
|
@@ -14358,13 +14231,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14358
14231
|
void this.logUngatedInputs("settle({ inputs })", params.inputs);
|
|
14359
14232
|
}
|
|
14360
14233
|
const offchainAddress = await this.getAddress();
|
|
14361
|
-
const offchainPkScript =
|
|
14234
|
+
const offchainPkScript = chunkG552MISJ_cjs.ArkAddress.decode(offchainAddress).pkScript;
|
|
14362
14235
|
const offchainOutputScript = base.hex.encode(offchainPkScript);
|
|
14363
14236
|
if (!params) {
|
|
14364
14237
|
const { fees, vtxoMaxAmount } = await this.arkProvider.getInfo();
|
|
14365
14238
|
const estimator = new Estimator(fees.intentFee);
|
|
14366
14239
|
let amount = 0;
|
|
14367
|
-
const exitScript =
|
|
14240
|
+
const exitScript = chunkG552MISJ_cjs.CSVMultisigTapscript.decode(
|
|
14368
14241
|
base.hex.decode(this.boardingTapscript.exitScript)
|
|
14369
14242
|
);
|
|
14370
14243
|
const boardingTimelock = exitScript.params.timelock;
|
|
@@ -14393,7 +14266,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14393
14266
|
if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
|
|
14394
14267
|
break;
|
|
14395
14268
|
}
|
|
14396
|
-
const inputFee = estimator.evalOffchainInput(
|
|
14269
|
+
const inputFee = estimator.evalOffchainInput(chunkG552MISJ_cjs.toOffchainInputFeeParams(vtxo));
|
|
14397
14270
|
if (inputFee.satoshis >= vtxo.value) {
|
|
14398
14271
|
continue;
|
|
14399
14272
|
}
|
|
@@ -14440,7 +14313,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14440
14313
|
let script;
|
|
14441
14314
|
let arkAddress;
|
|
14442
14315
|
try {
|
|
14443
|
-
arkAddress =
|
|
14316
|
+
arkAddress = chunkG552MISJ_cjs.ArkAddress.decode(output.address);
|
|
14444
14317
|
} catch {
|
|
14445
14318
|
arkAddress = void 0;
|
|
14446
14319
|
}
|
|
@@ -14530,7 +14403,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14530
14403
|
const abortController = new AbortController();
|
|
14531
14404
|
let stream;
|
|
14532
14405
|
let committedTxid;
|
|
14533
|
-
const settleInputVtxos = params.inputs.filter(
|
|
14406
|
+
const settleInputVtxos = params.inputs.filter(chunkG552MISJ_cjs.isVirtualCoin);
|
|
14534
14407
|
const contractManager = await this.getContractManager();
|
|
14535
14408
|
await contractManager.assertAnnotatable(settleInputVtxos);
|
|
14536
14409
|
await contractManager.assertSpendableNow?.(
|
|
@@ -14639,7 +14512,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14639
14512
|
async maybeRotateBoardingAfterBoard(inputs) {
|
|
14640
14513
|
if (!this._descriptorProvider) return;
|
|
14641
14514
|
const consumedBoarding = inputs.some(
|
|
14642
|
-
(input) => typeof input !== "string" && !
|
|
14515
|
+
(input) => typeof input !== "string" && !chunkG552MISJ_cjs.isVirtualCoin(input)
|
|
14643
14516
|
);
|
|
14644
14517
|
if (!consumedBoarding) return;
|
|
14645
14518
|
try {
|
|
@@ -14663,7 +14536,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14663
14536
|
let connectorIndex = 0;
|
|
14664
14537
|
const connectorsLeaves = connectorsGraph?.leaves() || [];
|
|
14665
14538
|
for (const input of inputs) {
|
|
14666
|
-
if (!
|
|
14539
|
+
if (!chunkG552MISJ_cjs.isVirtualCoin(input)) {
|
|
14667
14540
|
for (let i = 0; i < settlementPsbt.inputsLength; i++) {
|
|
14668
14541
|
const settlementInput = settlementPsbt.getInput(i);
|
|
14669
14542
|
if (!settlementInput.txid || settlementInput.index === void 0) {
|
|
@@ -14694,7 +14567,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14694
14567
|
}
|
|
14695
14568
|
continue;
|
|
14696
14569
|
}
|
|
14697
|
-
if (
|
|
14570
|
+
if (chunkG552MISJ_cjs.canRecoverOnchain(input, { timestamp: /* @__PURE__ */ new Date() }) || isSubdust({ value: input.value }, this.dustAmount)) {
|
|
14698
14571
|
continue;
|
|
14699
14572
|
}
|
|
14700
14573
|
if (connectorsLeaves.length === 0) {
|
|
@@ -14722,7 +14595,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14722
14595
|
index: input.vout,
|
|
14723
14596
|
witnessUtxo: {
|
|
14724
14597
|
amount: BigInt(input.value),
|
|
14725
|
-
script:
|
|
14598
|
+
script: chunkG552MISJ_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
14726
14599
|
},
|
|
14727
14600
|
sighashType: btcSigner.SigHash.DEFAULT,
|
|
14728
14601
|
tapLeafScript: [input.forfeitTapLeafScript]
|
|
@@ -14741,7 +14614,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14741
14614
|
forfeitTx = await this._signerRouter.sign(forfeitTx, [
|
|
14742
14615
|
{
|
|
14743
14616
|
index: 0,
|
|
14744
|
-
lookupScript:
|
|
14617
|
+
lookupScript: chunkG552MISJ_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
14745
14618
|
}
|
|
14746
14619
|
]);
|
|
14747
14620
|
signedForfeits.push(base.base64.encode(forfeitTx.toPSBT()));
|
|
@@ -14799,7 +14672,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14799
14672
|
resolveBatchExpiryPolicy(this.network, this.batchExpiryPolicy)
|
|
14800
14673
|
);
|
|
14801
14674
|
await this.arkProvider.confirmRegistration(intentId);
|
|
14802
|
-
const sweepTapscript =
|
|
14675
|
+
const sweepTapscript = chunkG552MISJ_cjs.CSVMultisigTapscript.encode({
|
|
14803
14676
|
timelock,
|
|
14804
14677
|
pubkeys: [this.forfeitPubkey]
|
|
14805
14678
|
}).script;
|
|
@@ -14905,9 +14778,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14905
14778
|
...existing ?? {},
|
|
14906
14779
|
intentTxId,
|
|
14907
14780
|
registerProof: intent.proof,
|
|
14908
|
-
registerProofMessage:
|
|
14781
|
+
registerProofMessage: chunkG552MISJ_cjs.Intent.encodeMessage(intent.message),
|
|
14909
14782
|
deleteProof: deleteIntent.proof,
|
|
14910
|
-
deleteProofMessage:
|
|
14783
|
+
deleteProofMessage: chunkG552MISJ_cjs.Intent.encodeMessage(deleteIntent.message),
|
|
14911
14784
|
intentVtxos: inputs.map((i) => ({
|
|
14912
14785
|
txid: i.txid,
|
|
14913
14786
|
vout: i.vout
|
|
@@ -14939,7 +14812,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14939
14812
|
try {
|
|
14940
14813
|
return await this.arkProvider.registerIntent(intent);
|
|
14941
14814
|
} catch (error) {
|
|
14942
|
-
if (error instanceof
|
|
14815
|
+
if (error instanceof chunkG552MISJ_cjs.ArkError && error.code === 0 && error.message.includes("duplicated input")) {
|
|
14943
14816
|
const deleteIntent = await this.makeDeleteIntentSignature(inputs);
|
|
14944
14817
|
await this.arkProvider.deleteIntent(deleteIntent);
|
|
14945
14818
|
return this.arkProvider.registerIntent(intent);
|
|
@@ -14955,7 +14828,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14955
14828
|
expire_at: 0,
|
|
14956
14829
|
cosigners_public_keys: cosignerPubKeys
|
|
14957
14830
|
};
|
|
14958
|
-
const proof =
|
|
14831
|
+
const proof = chunkG552MISJ_cjs.Intent.create(message, coins, outputs);
|
|
14959
14832
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
14960
14833
|
return {
|
|
14961
14834
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -14967,7 +14840,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14967
14840
|
type: "delete",
|
|
14968
14841
|
expire_at: 0
|
|
14969
14842
|
};
|
|
14970
|
-
const proof =
|
|
14843
|
+
const proof = chunkG552MISJ_cjs.Intent.create(message, coins, []);
|
|
14971
14844
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
14972
14845
|
return {
|
|
14973
14846
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -14979,7 +14852,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14979
14852
|
type: "get-pending-tx",
|
|
14980
14853
|
expire_at: 0
|
|
14981
14854
|
};
|
|
14982
|
-
const proof =
|
|
14855
|
+
const proof = chunkG552MISJ_cjs.Intent.create(message, coins, []);
|
|
14983
14856
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
14984
14857
|
return {
|
|
14985
14858
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -15000,7 +14873,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15000
14873
|
if (!vtxos || vtxos.length === 0) {
|
|
15001
14874
|
const scriptMap = await this.getScriptMap();
|
|
15002
14875
|
const allExtended = [];
|
|
15003
|
-
const fetchedVtxos = await
|
|
14876
|
+
const fetchedVtxos = await chunkG552MISJ_cjs.getAllNormalizedVtxos(this.indexerProvider, [
|
|
15004
14877
|
...scriptMap.keys()
|
|
15005
14878
|
]);
|
|
15006
14879
|
for (const vtxo of fetchedVtxos) {
|
|
@@ -15114,11 +14987,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15114
14987
|
* against the current key alone would leave it pending forever.
|
|
15115
14988
|
*/
|
|
15116
14989
|
checkpointUnrollCandidates(info) {
|
|
15117
|
-
const current =
|
|
14990
|
+
const current = chunkG552MISJ_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
|
|
15118
14991
|
const candidates = [this._serverUnrollScript, current];
|
|
15119
14992
|
for (const deprecated of signerSetFromInfo(info).deprecated.keys()) {
|
|
15120
14993
|
candidates.push(
|
|
15121
|
-
|
|
14994
|
+
chunkG552MISJ_cjs.CSVMultisigTapscript.encode({
|
|
15122
14995
|
...current.params,
|
|
15123
14996
|
pubkeys: [base.hex.decode(deprecated)]
|
|
15124
14997
|
})
|
|
@@ -15209,7 +15082,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15209
15082
|
if (vtxos.length === 0) {
|
|
15210
15083
|
throw new Error("No VTXOs found for this arkadeCash");
|
|
15211
15084
|
}
|
|
15212
|
-
const myPkScript =
|
|
15085
|
+
const myPkScript = chunkG552MISJ_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
|
|
15213
15086
|
let { spendable, unclaimed } = this.classifyCashVtxos(vtxos);
|
|
15214
15087
|
let swept = 0;
|
|
15215
15088
|
const drainable = vtxos.filter((vtxo) => !isSubdust(vtxo, this.dustAmount));
|
|
@@ -15283,7 +15156,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15283
15156
|
const spendable = [];
|
|
15284
15157
|
const unclaimed = [];
|
|
15285
15158
|
for (const vtxo of vtxos) {
|
|
15286
|
-
if (
|
|
15159
|
+
if (chunkG552MISJ_cjs.hasTerminalSpend(vtxo)) {
|
|
15287
15160
|
unclaimed.push(cashReport(vtxo, "already-spent"));
|
|
15288
15161
|
} else if (isSubdust(vtxo, this.dustAmount)) {
|
|
15289
15162
|
unclaimed.push(cashReport(vtxo, "subdust"));
|
|
@@ -15303,7 +15176,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15303
15176
|
const all = [];
|
|
15304
15177
|
const seen = /* @__PURE__ */ new Set();
|
|
15305
15178
|
for (let pageIndex = 0; ; pageIndex++) {
|
|
15306
|
-
const { vtxos, page } = await
|
|
15179
|
+
const { vtxos, page } = await chunkG552MISJ_cjs.getNormalizedVtxos(this.indexerProvider, {
|
|
15307
15180
|
scripts,
|
|
15308
15181
|
pageIndex,
|
|
15309
15182
|
pageSize
|
|
@@ -15350,7 +15223,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15350
15223
|
for (let i = 0; i < inputs.length; i += MAX_INPUTS_PER_INTENT) {
|
|
15351
15224
|
const batch = inputs.slice(i, i + MAX_INPUTS_PER_INTENT);
|
|
15352
15225
|
const message = { type: "get-pending-tx", expire_at: 0 };
|
|
15353
|
-
const proof =
|
|
15226
|
+
const proof = chunkG552MISJ_cjs.Intent.create(message, batch, []);
|
|
15354
15227
|
const signedProof = await identity.sign(
|
|
15355
15228
|
proof,
|
|
15356
15229
|
Array.from({ length: batch.length + 1 }, (_, j) => j)
|
|
@@ -15569,7 +15442,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15569
15442
|
script: recipient.script,
|
|
15570
15443
|
amount: BigInt(recipient.amount),
|
|
15571
15444
|
// Already checked against the recipient address in `validateRecipients`.
|
|
15572
|
-
...recipient.tapTree ? { tapTree:
|
|
15445
|
+
...recipient.tapTree ? { tapTree: chunkG552MISJ_cjs.TapTreeCoder.decode(recipient.tapTree) } : {}
|
|
15573
15446
|
}));
|
|
15574
15447
|
const totalBtcOutput = outputs.reduce((sum, o) => sum + Number(o.amount), 0);
|
|
15575
15448
|
let changeAmount = totalBtcSelected - totalBtcOutput;
|
|
@@ -15713,10 +15586,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15713
15586
|
const serverPubKey = this.arkServerPublicKey;
|
|
15714
15587
|
const serverUnrollScript = this.serverUnrollScript;
|
|
15715
15588
|
const arkAddress = offchainTapscript.address(this.network.hrp, serverPubKey);
|
|
15716
|
-
const normalizedInputs = inputs.map(
|
|
15717
|
-
const at = now ?? await
|
|
15589
|
+
const normalizedInputs = inputs.map(chunkG552MISJ_cjs.normalizeVtxo);
|
|
15590
|
+
const at = now ?? await chunkG552MISJ_cjs.resolveTimeHeight(this.onchainProvider);
|
|
15718
15591
|
for (const input of normalizedInputs) {
|
|
15719
|
-
if (!
|
|
15592
|
+
if (!chunkG552MISJ_cjs.canSpendOffchain(input, at)) {
|
|
15720
15593
|
throw new Error(
|
|
15721
15594
|
`sendSelectedVtxosToSelf: input ${input.txid}:${input.vout} is not cooperatively spendable`
|
|
15722
15595
|
);
|
|
@@ -15786,7 +15659,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15786
15659
|
);
|
|
15787
15660
|
const arkTxJobs = inputs.map((input, index) => ({
|
|
15788
15661
|
index,
|
|
15789
|
-
lookupScript:
|
|
15662
|
+
lookupScript: chunkG552MISJ_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
15790
15663
|
}));
|
|
15791
15664
|
const identity = this.identity;
|
|
15792
15665
|
const signer = {
|
|
@@ -15872,14 +15745,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15872
15745
|
const spentBy = checkpointIdByOutpoint.get(`${vtxo.txid}:${vtxo.vout}`);
|
|
15873
15746
|
spentVtxos.push({
|
|
15874
15747
|
...spentFacts,
|
|
15875
|
-
virtualStatus:
|
|
15748
|
+
virtualStatus: chunkG552MISJ_cjs.toVirtualStatus(spentFacts),
|
|
15876
15749
|
...spentBy ? { spentBy } : {},
|
|
15877
15750
|
arkTxId: arkTxid
|
|
15878
15751
|
});
|
|
15879
15752
|
for (const id of vtxo.commitmentTxIds) {
|
|
15880
15753
|
commitmentTxIds.add(id);
|
|
15881
15754
|
}
|
|
15882
|
-
const vtxoExpiry =
|
|
15755
|
+
const vtxoExpiry = chunkG552MISJ_cjs.toBatchExpiry(vtxo);
|
|
15883
15756
|
if (vtxoExpiry) {
|
|
15884
15757
|
batchExpiry = Math.min(batchExpiry, vtxoExpiry);
|
|
15885
15758
|
}
|
|
@@ -15892,7 +15765,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15892
15765
|
isSwept: false,
|
|
15893
15766
|
isPreconfirmed: true,
|
|
15894
15767
|
commitmentTxIds: Array.from(commitmentTxIds),
|
|
15895
|
-
...
|
|
15768
|
+
...chunkG552MISJ_cjs.parseLegacyExpiry(batchExpiry)
|
|
15896
15769
|
};
|
|
15897
15770
|
changeVtxo = {
|
|
15898
15771
|
txid: arkTxid,
|
|
@@ -15904,7 +15777,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15904
15777
|
tapTree: offchainTapscript.encode(),
|
|
15905
15778
|
value: Number(changeAmount),
|
|
15906
15779
|
...changeFacts,
|
|
15907
|
-
virtualStatus:
|
|
15780
|
+
virtualStatus: chunkG552MISJ_cjs.toVirtualStatus(changeFacts),
|
|
15908
15781
|
spentBy: "",
|
|
15909
15782
|
status: {
|
|
15910
15783
|
confirmed: false
|
|
@@ -15973,12 +15846,12 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15973
15846
|
const spentVtxos = [];
|
|
15974
15847
|
const inputArkTxIds = /* @__PURE__ */ new Set();
|
|
15975
15848
|
const boardingRemovalsByAddress = /* @__PURE__ */ new Map();
|
|
15976
|
-
const vtxoInputs = inputs.filter(
|
|
15849
|
+
const vtxoInputs = inputs.filter(chunkG552MISJ_cjs.isVirtualCoin);
|
|
15977
15850
|
const cm = await this.getContractManager();
|
|
15978
15851
|
const annotatedVtxos = await cm.annotateVtxos(vtxoInputs);
|
|
15979
15852
|
const annotatedByKey = new Map(annotatedVtxos.map((v) => [`${v.txid}:${v.vout}`, v]));
|
|
15980
15853
|
for (const input of inputs) {
|
|
15981
|
-
if (
|
|
15854
|
+
if (chunkG552MISJ_cjs.isVirtualCoin(input)) {
|
|
15982
15855
|
const outpoint = `${input.txid}:${input.vout}`;
|
|
15983
15856
|
const vtxo = annotatedByKey.get(outpoint);
|
|
15984
15857
|
if (!vtxo) {
|
|
@@ -15990,13 +15863,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15990
15863
|
const settledFacts = { ...vtxo, isSpent: true };
|
|
15991
15864
|
spentVtxos.push({
|
|
15992
15865
|
...settledFacts,
|
|
15993
|
-
virtualStatus:
|
|
15866
|
+
virtualStatus: chunkG552MISJ_cjs.toVirtualStatus(settledFacts),
|
|
15994
15867
|
settledBy: commitmentTxid
|
|
15995
15868
|
});
|
|
15996
15869
|
} else {
|
|
15997
15870
|
let sourceAddress;
|
|
15998
15871
|
try {
|
|
15999
|
-
sourceAddress =
|
|
15872
|
+
sourceAddress = chunkG552MISJ_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
|
|
16000
15873
|
this.network
|
|
16001
15874
|
);
|
|
16002
15875
|
} catch {
|
|
@@ -16054,9 +15927,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16054
15927
|
}
|
|
16055
15928
|
};
|
|
16056
15929
|
function selectVirtualCoins(coins, targetAmount) {
|
|
16057
|
-
const sortedCoins = coins.map(
|
|
16058
|
-
const expiryA =
|
|
16059
|
-
const expiryB =
|
|
15930
|
+
const sortedCoins = coins.map(chunkG552MISJ_cjs.normalizeVtxo).sort((a, b) => {
|
|
15931
|
+
const expiryA = chunkG552MISJ_cjs.toBatchExpiry(a) || Number.MAX_SAFE_INTEGER;
|
|
15932
|
+
const expiryB = chunkG552MISJ_cjs.toBatchExpiry(b) || Number.MAX_SAFE_INTEGER;
|
|
16060
15933
|
if (expiryA !== expiryB) {
|
|
16061
15934
|
return expiryA - expiryB;
|
|
16062
15935
|
}
|
|
@@ -16316,7 +16189,7 @@ var MessageBus = class {
|
|
|
16316
16189
|
this.initialized = true;
|
|
16317
16190
|
}
|
|
16318
16191
|
async buildServices(config) {
|
|
16319
|
-
const arkProvider = new
|
|
16192
|
+
const arkProvider = new chunkG552MISJ_cjs.RestArkProvider(config.arkServer.url);
|
|
16320
16193
|
const storage = {
|
|
16321
16194
|
walletRepository: this.walletRepository,
|
|
16322
16195
|
contractRepository: this.contractRepository,
|
|
@@ -16658,7 +16531,7 @@ var offboardNetworkNames = [
|
|
|
16658
16531
|
function offboardDestinationScript(destinationAddress) {
|
|
16659
16532
|
for (const networkName of offboardNetworkNames) {
|
|
16660
16533
|
try {
|
|
16661
|
-
const network =
|
|
16534
|
+
const network = chunkG552MISJ_cjs.networks[networkName];
|
|
16662
16535
|
const addr = btcSigner.Address(network).decode(destinationAddress);
|
|
16663
16536
|
return btcSigner.OutScript.encode(addr);
|
|
16664
16537
|
} catch {
|
|
@@ -16722,7 +16595,7 @@ var Ramps = class {
|
|
|
16722
16595
|
}
|
|
16723
16596
|
amount = amount ?? totalAmount;
|
|
16724
16597
|
const offchainAddress = await this.wallet.getAddress();
|
|
16725
|
-
const offchainAddr =
|
|
16598
|
+
const offchainAddr = chunkG552MISJ_cjs.ArkAddress.decode(offchainAddress);
|
|
16726
16599
|
const offchainScript = base.hex.encode(offchainAddr.pkScript);
|
|
16727
16600
|
const outputFee = estimator.evalOffchainOutput({
|
|
16728
16601
|
amount,
|
|
@@ -16782,7 +16655,7 @@ var Ramps = class {
|
|
|
16782
16655
|
const filteredVtxos = [];
|
|
16783
16656
|
let totalAmount = 0n;
|
|
16784
16657
|
for (const vtxo of vtxos) {
|
|
16785
|
-
const inputFee = estimator.evalOffchainInput(
|
|
16658
|
+
const inputFee = estimator.evalOffchainInput(chunkG552MISJ_cjs.toOffchainInputFeeParams(vtxo));
|
|
16786
16659
|
if (inputFee.satoshis >= vtxo.value) {
|
|
16787
16660
|
continue;
|
|
16788
16661
|
}
|
|
@@ -17549,7 +17422,7 @@ var WalletMessageHandler = class {
|
|
|
17549
17422
|
// Wallet methods
|
|
17550
17423
|
async handleInitWallet({ payload }) {
|
|
17551
17424
|
const { arkServerUrl } = payload;
|
|
17552
|
-
this.indexerProvider = new
|
|
17425
|
+
this.indexerProvider = new chunkXN55B6EP_cjs.RestIndexerProvider(arkServerUrl);
|
|
17553
17426
|
await this.onWalletInitialized();
|
|
17554
17427
|
}
|
|
17555
17428
|
/**
|
|
@@ -17816,17 +17689,17 @@ var WalletMessageHandler = class {
|
|
|
17816
17689
|
throw new WalletNotInitializedError();
|
|
17817
17690
|
}
|
|
17818
17691
|
const allVtxos = await this.getVtxosFromRepo();
|
|
17819
|
-
const vtxos = allVtxos.filter((v) => !
|
|
17692
|
+
const vtxos = allVtxos.filter((v) => !chunkG552MISJ_cjs.hasTerminalSpend(v));
|
|
17820
17693
|
const dustAmount = this.readonlyWallet.dustAmount;
|
|
17821
17694
|
const includeRecoverable = message.payload.filter?.withRecoverable ?? false;
|
|
17822
17695
|
const filteredVtxos = includeRecoverable ? vtxos : vtxos.filter((v) => {
|
|
17823
17696
|
if (dustAmount != null && isSubdust(v, dustAmount)) {
|
|
17824
17697
|
return false;
|
|
17825
17698
|
}
|
|
17826
|
-
if (
|
|
17699
|
+
if (chunkG552MISJ_cjs.isRecoverable(v)) {
|
|
17827
17700
|
return false;
|
|
17828
17701
|
}
|
|
17829
|
-
if (
|
|
17702
|
+
if (chunkG552MISJ_cjs.isExpired(v)) {
|
|
17830
17703
|
return false;
|
|
17831
17704
|
}
|
|
17832
17705
|
return true;
|
|
@@ -17834,7 +17707,7 @@ var WalletMessageHandler = class {
|
|
|
17834
17707
|
if (!message.payload.filter?.withUnrolled) {
|
|
17835
17708
|
return filteredVtxos;
|
|
17836
17709
|
}
|
|
17837
|
-
return filteredVtxos.concat(allVtxos.filter((v) =>
|
|
17710
|
+
return filteredVtxos.concat(allVtxos.filter((v) => chunkG552MISJ_cjs.hasTerminalSpend(v) && v.isUnrolled));
|
|
17838
17711
|
}
|
|
17839
17712
|
/** Tear down handler subscriptions, then delegate the full wipe to the wallet. */
|
|
17840
17713
|
async clear() {
|
|
@@ -17924,7 +17797,7 @@ var WalletMessageHandler = class {
|
|
|
17924
17797
|
if (!this.readonlyWallet) return null;
|
|
17925
17798
|
const { boardingTxs, commitmentsToIgnore } = await this.readonlyWallet.getBoardingTxs();
|
|
17926
17799
|
const indexerProvider = this.indexerProvider;
|
|
17927
|
-
const resolveTxCreatedAt = indexerProvider ? (txids) =>
|
|
17800
|
+
const resolveTxCreatedAt = indexerProvider ? (txids) => chunkG552MISJ_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
|
|
17928
17801
|
return buildTransactionHistory(vtxos, boardingTxs, commitmentsToIgnore, resolveTxCreatedAt);
|
|
17929
17802
|
}
|
|
17930
17803
|
async ensureContractEventBroadcasting() {
|
|
@@ -18613,7 +18486,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
18613
18486
|
};
|
|
18614
18487
|
try {
|
|
18615
18488
|
const response = await this.sendMessage(message);
|
|
18616
|
-
return response.payload.vtxos.map(
|
|
18489
|
+
return response.payload.vtxos.map(chunkG552MISJ_cjs.normalizeVtxo);
|
|
18617
18490
|
} catch (error) {
|
|
18618
18491
|
throw new Error(`Failed to get vtxos: ${error}`);
|
|
18619
18492
|
}
|
|
@@ -18638,7 +18511,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
18638
18511
|
};
|
|
18639
18512
|
try {
|
|
18640
18513
|
const response = await this.sendMessage(message);
|
|
18641
|
-
return response.payload.vtxos.map(
|
|
18514
|
+
return response.payload.vtxos.map(chunkG552MISJ_cjs.normalizeVtxo);
|
|
18642
18515
|
} catch (error) {
|
|
18643
18516
|
throw new Error(`Failed to get spendable vtxos: ${error}`);
|
|
18644
18517
|
}
|
|
@@ -18769,7 +18642,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
18769
18642
|
};
|
|
18770
18643
|
try {
|
|
18771
18644
|
const response = await sendContractMessage(message);
|
|
18772
|
-
return response.payload.vtxos.map(
|
|
18645
|
+
return response.payload.vtxos.map(chunkG552MISJ_cjs.normalizeVtxo);
|
|
18773
18646
|
} catch (e) {
|
|
18774
18647
|
throw new Error("Failed to annotate vtxos");
|
|
18775
18648
|
}
|
|
@@ -19341,7 +19214,7 @@ var ServiceWorkerWallet = class _ServiceWorkerWallet extends ServiceWorkerReadon
|
|
|
19341
19214
|
};
|
|
19342
19215
|
try {
|
|
19343
19216
|
const response = await wallet.sendMessage(message);
|
|
19344
|
-
return response.payload.vtxos.map(
|
|
19217
|
+
return response.payload.vtxos.map(chunkG552MISJ_cjs.normalizeVtxo);
|
|
19345
19218
|
} catch (e) {
|
|
19346
19219
|
throw new Error(`Failed to get expiring vtxos: ${e}`);
|
|
19347
19220
|
}
|
|
@@ -19453,12 +19326,12 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
19453
19326
|
* @returns Configured onchain wallet
|
|
19454
19327
|
* @throws Error if the configured identity cannot produce a valid x-only public key
|
|
19455
19328
|
*/
|
|
19456
|
-
static async create(identity, networkName =
|
|
19329
|
+
static async create(identity, networkName = chunkG552MISJ_cjs.DEFAULT_NETWORK_NAME, provider) {
|
|
19457
19330
|
const pubkey = await identity.xOnlyPublicKey();
|
|
19458
19331
|
if (!pubkey) {
|
|
19459
19332
|
throw new Error("Invalid configured public key");
|
|
19460
19333
|
}
|
|
19461
|
-
const network =
|
|
19334
|
+
const network = chunkG552MISJ_cjs.getNetwork(networkName);
|
|
19462
19335
|
const onchainProvider = provider || new EsploraProvider(ESPLORA_URL[networkName]);
|
|
19463
19336
|
const onchainP2TR = btcSigner.p2tr(pubkey, void 0, network);
|
|
19464
19337
|
return new _OnchainWallet(identity, network, onchainP2TR, onchainProvider);
|
|
@@ -19564,7 +19437,7 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
19564
19437
|
if (!inputs) {
|
|
19565
19438
|
throw new Error("Fee estimation failed");
|
|
19566
19439
|
}
|
|
19567
|
-
let tx = new
|
|
19440
|
+
let tx = new chunkG552MISJ_cjs.Transaction();
|
|
19568
19441
|
for (const input of inputs) {
|
|
19569
19442
|
tx.addInput({
|
|
19570
19443
|
txid: input.txid,
|
|
@@ -19622,7 +19495,7 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
19622
19495
|
* @throws If the parent has no anchor, or funding cannot be selected/signed
|
|
19623
19496
|
*/
|
|
19624
19497
|
async bumpAnchor(parentHex, feeRate) {
|
|
19625
|
-
const parent =
|
|
19498
|
+
const parent = chunkG552MISJ_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
|
|
19626
19499
|
const coins = (await this.getCoins()).filter((c) => c.status.confirmed);
|
|
19627
19500
|
const child = await this.buildBumpPackage(parent, feeRate, coins);
|
|
19628
19501
|
return [parent.hex, child.hex];
|
|
@@ -20387,7 +20260,7 @@ exports.BIP322 = void 0;
|
|
|
20387
20260
|
async function sign2(message, identity, network) {
|
|
20388
20261
|
const xOnlyPubKey = await identity.xOnlyPublicKey();
|
|
20389
20262
|
const payment = btcSigner.p2tr(xOnlyPubKey, void 0, network);
|
|
20390
|
-
const toSpend =
|
|
20263
|
+
const toSpend = chunkG552MISJ_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
|
|
20391
20264
|
const toSign = craftBIP322ToSignP2TR(toSpend, payment.script, xOnlyPubKey);
|
|
20392
20265
|
const signed = await identity.sign(toSign, [0]);
|
|
20393
20266
|
signed.finalizeIdx(0);
|
|
@@ -20445,7 +20318,7 @@ function verifyP2TR(message, witnessItems, pkScript, pubkey) {
|
|
|
20445
20318
|
if (sighashType !== btcSigner.SigHash.DEFAULT && sighashType !== btcSigner.SigHash.ALL) {
|
|
20446
20319
|
return false;
|
|
20447
20320
|
}
|
|
20448
|
-
const toSpend =
|
|
20321
|
+
const toSpend = chunkG552MISJ_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
|
|
20449
20322
|
const toSign = craftBIP322ToSignP2TR(toSpend, pkScript, pubkey);
|
|
20450
20323
|
const sighash = toSign.preimageWitnessV1(0, [pkScript], sighashType, [0n]);
|
|
20451
20324
|
const rawSig = sig.length === 65 ? sig.subarray(0, 64) : sig;
|
|
@@ -20466,7 +20339,7 @@ function verifyP2WPKH(message, witnessItems, pkScript, addressHash) {
|
|
|
20466
20339
|
}
|
|
20467
20340
|
const sighashType = sigWithHash[sigWithHash.length - 1];
|
|
20468
20341
|
const derSig = sigWithHash.subarray(0, sigWithHash.length - 1);
|
|
20469
|
-
const toSpend =
|
|
20342
|
+
const toSpend = chunkG552MISJ_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
|
|
20470
20343
|
const toSign = craftBIP322ToSignSimple(toSpend, pkScript);
|
|
20471
20344
|
const scriptCode = btcSigner.OutScript.encode({ type: "pkh", hash: addressHash });
|
|
20472
20345
|
const sighash = toSign.preimageWitnessV0(0, scriptCode, sighashType, 0n);
|
|
@@ -20519,7 +20392,7 @@ function encodeCompactSize(n) {
|
|
|
20519
20392
|
return buf;
|
|
20520
20393
|
}
|
|
20521
20394
|
function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
|
|
20522
|
-
const tx = new
|
|
20395
|
+
const tx = new chunkG552MISJ_cjs.Transaction({ version: 0 });
|
|
20523
20396
|
tx.addInput({
|
|
20524
20397
|
txid: toSpend.id,
|
|
20525
20398
|
index: 0,
|
|
@@ -20533,12 +20406,12 @@ function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
|
|
|
20533
20406
|
});
|
|
20534
20407
|
tx.addOutput({
|
|
20535
20408
|
amount: 0n,
|
|
20536
|
-
script:
|
|
20409
|
+
script: chunkG552MISJ_cjs.OP_RETURN_EMPTY_PKSCRIPT
|
|
20537
20410
|
});
|
|
20538
20411
|
return tx;
|
|
20539
20412
|
}
|
|
20540
20413
|
function craftBIP322ToSignSimple(toSpend, pkScript) {
|
|
20541
|
-
const tx = new
|
|
20414
|
+
const tx = new chunkG552MISJ_cjs.Transaction({ version: 0 });
|
|
20542
20415
|
tx.addInput({
|
|
20543
20416
|
txid: toSpend.id,
|
|
20544
20417
|
index: 0,
|
|
@@ -20550,7 +20423,7 @@ function craftBIP322ToSignSimple(toSpend, pkScript) {
|
|
|
20550
20423
|
});
|
|
20551
20424
|
tx.addOutput({
|
|
20552
20425
|
amount: 0n,
|
|
20553
|
-
script:
|
|
20426
|
+
script: chunkG552MISJ_cjs.OP_RETURN_EMPTY_PKSCRIPT
|
|
20554
20427
|
});
|
|
20555
20428
|
return tx;
|
|
20556
20429
|
}
|
|
@@ -20681,7 +20554,7 @@ var RestEmulatorProvider = class {
|
|
|
20681
20554
|
}
|
|
20682
20555
|
};
|
|
20683
20556
|
function finalizeVirtualTx(type, psbtBase64) {
|
|
20684
|
-
const tx =
|
|
20557
|
+
const tx = chunkG552MISJ_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
|
|
20685
20558
|
if (type === "INDEXER_CHAINED_TX_TYPE_TREE" /* TREE */) {
|
|
20686
20559
|
const input = tx.getInput(0);
|
|
20687
20560
|
if (!input) {
|
|
@@ -20708,14 +20581,14 @@ var ExitPathError = class extends Error {
|
|
|
20708
20581
|
reason;
|
|
20709
20582
|
};
|
|
20710
20583
|
function delayWeight(sequence) {
|
|
20711
|
-
const t =
|
|
20584
|
+
const t = chunkG552MISJ_cjs.sequenceToTimelock(sequence);
|
|
20712
20585
|
return t.type === "blocks" ? Number(t.value) : Number(t.value) / 600;
|
|
20713
20586
|
}
|
|
20714
20587
|
async function resolveUnilateralPath(params) {
|
|
20715
20588
|
const { vtxo, scriptHex, contractRepository } = params;
|
|
20716
20589
|
const contract = contractRepository ? (await contractRepository.getContracts({ script: scriptHex }))[0] : void 0;
|
|
20717
20590
|
if (contract) {
|
|
20718
|
-
const handler =
|
|
20591
|
+
const handler = chunkBABJ77NG_cjs.contractHandlers.get(contract.type);
|
|
20719
20592
|
if (!handler) {
|
|
20720
20593
|
throw new ExitPathError(
|
|
20721
20594
|
"no-handler",
|
|
@@ -20738,12 +20611,12 @@ async function resolveUnilateralPath(params) {
|
|
|
20738
20611
|
paths.sort((a, b) => delayWeight(a.sequence) - delayWeight(b.sequence));
|
|
20739
20612
|
return { selection: paths[0], label: `${contract.type}:unilateral` };
|
|
20740
20613
|
}
|
|
20741
|
-
const decoded =
|
|
20614
|
+
const decoded = chunkG552MISJ_cjs.VtxoScript.decode(vtxo.tapTree);
|
|
20742
20615
|
let best;
|
|
20743
20616
|
for (const exit of decoded.exitPaths()) {
|
|
20744
20617
|
const leaf = decoded.findLeaf(base.hex.encode(exit.script));
|
|
20745
20618
|
if (!leaf) continue;
|
|
20746
|
-
const sequence =
|
|
20619
|
+
const sequence = chunkG552MISJ_cjs.timelockToSequence(exit.params.timelock);
|
|
20747
20620
|
const weight = delayWeight(sequence);
|
|
20748
20621
|
if (!best || weight < best.weight) {
|
|
20749
20622
|
best = { selection: { leaf, sequence }, weight };
|
|
@@ -20929,14 +20802,14 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
20929
20802
|
}
|
|
20930
20803
|
const resolved = await resolveUnilateralPath({
|
|
20931
20804
|
vtxo,
|
|
20932
|
-
scriptHex: base.hex.encode(
|
|
20805
|
+
scriptHex: base.hex.encode(chunkG552MISJ_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
|
|
20933
20806
|
contractRepository: wallet.contractRepository,
|
|
20934
20807
|
walletPubKeyHex: base.hex.encode(await wallet.identity.xOnlyPublicKey()),
|
|
20935
20808
|
currentTime: Date.now()
|
|
20936
20809
|
});
|
|
20937
20810
|
const spendingLeaf = resolved.selection.leaf;
|
|
20938
20811
|
const sequence = resolved.selection.sequence;
|
|
20939
|
-
const timelock =
|
|
20812
|
+
const timelock = chunkG552MISJ_cjs.sequenceToTimelock(sequence);
|
|
20940
20813
|
const elapsed = timelock.type === "blocks" ? chainTip.height >= txStatus.blockHeight + Number(timelock.value) : chainTip.time >= txStatus.blockTime + Number(timelock.value);
|
|
20941
20814
|
if (!elapsed) {
|
|
20942
20815
|
throw new Error(`no available exit path found for vtxo ${vtxo.txid}:${vtxo.vout}`);
|
|
@@ -20949,7 +20822,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
20949
20822
|
sequence,
|
|
20950
20823
|
witnessUtxo: {
|
|
20951
20824
|
amount: BigInt(vtxo.value),
|
|
20952
|
-
script:
|
|
20825
|
+
script: chunkG552MISJ_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
|
|
20953
20826
|
},
|
|
20954
20827
|
sighashType: btcSigner.SigHash.DEFAULT
|
|
20955
20828
|
});
|
|
@@ -20959,7 +20832,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
20959
20832
|
btcSigner.TaprootControlBlock.encode(spendingLeaf[0]).length
|
|
20960
20833
|
);
|
|
20961
20834
|
}
|
|
20962
|
-
const tx = new
|
|
20835
|
+
const tx = new chunkG552MISJ_cjs.Transaction({ version: 2 });
|
|
20963
20836
|
for (const input of inputs) {
|
|
20964
20837
|
tx.addInput(input);
|
|
20965
20838
|
}
|
|
@@ -21026,7 +20899,7 @@ async function buildSignedSweep(params) {
|
|
|
21026
20899
|
`uneconomic vtxo ${vtxo.txid}:${vtxo.vout}: value ${vtxo.value} - fee ${fee} < dust`
|
|
21027
20900
|
);
|
|
21028
20901
|
}
|
|
21029
|
-
const tx = new
|
|
20902
|
+
const tx = new chunkG552MISJ_cjs.Transaction({ version: 2 });
|
|
21030
20903
|
tx.addInput({
|
|
21031
20904
|
txid: vtxo.txid,
|
|
21032
20905
|
index: vtxo.vout,
|
|
@@ -21051,7 +20924,7 @@ async function buildSignedSweep(params) {
|
|
|
21051
20924
|
finalScriptWitness: [
|
|
21052
20925
|
tapScriptSig[0][1],
|
|
21053
20926
|
...path.extraWitness,
|
|
21054
|
-
|
|
20927
|
+
chunkG552MISJ_cjs.scriptFromTapLeafScript(path.leaf),
|
|
21055
20928
|
btcSigner.TaprootControlBlock.encode(controlBlock)
|
|
21056
20929
|
]
|
|
21057
20930
|
});
|
|
@@ -21081,7 +20954,7 @@ async function resolveFeeRate(opts) {
|
|
|
21081
20954
|
}
|
|
21082
20955
|
async function selectExitVtxos(opts) {
|
|
21083
20956
|
if (!opts.vtxos) return opts.wallet.getVtxos();
|
|
21084
|
-
const res = await
|
|
20957
|
+
const res = await chunkG552MISJ_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
|
|
21085
20958
|
const tapTrees = /* @__PURE__ */ new Map();
|
|
21086
20959
|
const out = [];
|
|
21087
20960
|
for (const vtxo of res.vtxos) {
|
|
@@ -21096,7 +20969,7 @@ async function selectExitVtxos(opts) {
|
|
|
21096
20969
|
`no contract registered for vtxo script ${vtxo.script} \u2014 register the contract before exiting`
|
|
21097
20970
|
);
|
|
21098
20971
|
}
|
|
21099
|
-
const handler =
|
|
20972
|
+
const handler = chunkBABJ77NG_cjs.contractHandlers.get(contract.type);
|
|
21100
20973
|
if (!handler) {
|
|
21101
20974
|
throw new Error(`no contract handler registered for type '${contract.type}'`);
|
|
21102
20975
|
}
|
|
@@ -21126,7 +20999,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
21126
20999
|
if (pendingNodes.length > 0) {
|
|
21127
21000
|
const txs = await resolver.getVirtualTxs(pendingNodes.map((n) => n.txid));
|
|
21128
21001
|
for (const psbt of txs) {
|
|
21129
|
-
psbts.set(
|
|
21002
|
+
psbts.set(chunkG552MISJ_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
21130
21003
|
}
|
|
21131
21004
|
}
|
|
21132
21005
|
const childVsize = Number(
|
|
@@ -21162,7 +21035,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
21162
21035
|
try {
|
|
21163
21036
|
const resolved = await resolveUnilateralPath({
|
|
21164
21037
|
vtxo,
|
|
21165
|
-
scriptHex: base.hex.encode(
|
|
21038
|
+
scriptHex: base.hex.encode(chunkG552MISJ_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
|
|
21166
21039
|
contractRepository: wallet.contractRepository,
|
|
21167
21040
|
walletPubKeyHex,
|
|
21168
21041
|
currentTime: Date.now()
|
|
@@ -21181,7 +21054,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
21181
21054
|
});
|
|
21182
21055
|
continue;
|
|
21183
21056
|
}
|
|
21184
|
-
const t =
|
|
21057
|
+
const t = chunkG552MISJ_cjs.sequenceToTimelock(resolved.selection.sequence);
|
|
21185
21058
|
const delay = { type: t.type, value: Number(t.value) };
|
|
21186
21059
|
infos.push({ outpoint, value: vtxo.value, sweepFee, path: resolved.label, delay });
|
|
21187
21060
|
sweeps.push({ vtxo, resolved, sweepFee, delay });
|
|
@@ -21520,7 +21393,7 @@ async function prepare(opts) {
|
|
|
21520
21393
|
txid: sweep.vtxo.txid,
|
|
21521
21394
|
vout: sweep.vtxo.vout,
|
|
21522
21395
|
value: sweep.vtxo.value,
|
|
21523
|
-
pkScript:
|
|
21396
|
+
pkScript: chunkG552MISJ_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
|
|
21524
21397
|
},
|
|
21525
21398
|
path: sweep.resolved.selection,
|
|
21526
21399
|
outputAddress: opts.sweepAddress,
|
|
@@ -21605,7 +21478,7 @@ async function prepare(opts) {
|
|
|
21605
21478
|
if (newFee <= splitterFee) break;
|
|
21606
21479
|
splitterFee = newFee;
|
|
21607
21480
|
}
|
|
21608
|
-
const splitter = new
|
|
21481
|
+
const splitter = new chunkG552MISJ_cjs.Transaction({ version: 2 });
|
|
21609
21482
|
for (const coin of selected.inputs) {
|
|
21610
21483
|
splitter.addInput({
|
|
21611
21484
|
txid: coin.txid,
|
|
@@ -21748,41 +21621,41 @@ var UnilateralExit = {
|
|
|
21748
21621
|
// src/arkade/index.ts
|
|
21749
21622
|
var arkade_exports = {};
|
|
21750
21623
|
chunk5BLDMQED_cjs.__export(arkade_exports, {
|
|
21751
|
-
ARKADE_OP: () =>
|
|
21752
|
-
ARKADE_OPCODES: () =>
|
|
21753
|
-
ARKADE_OPCODE_NAMES: () =>
|
|
21754
|
-
ARKADE_OPCODE_VALUES: () =>
|
|
21755
|
-
ARKADE_OPS: () =>
|
|
21624
|
+
ARKADE_OP: () => chunkBABJ77NG_cjs.ARKADE_OP,
|
|
21625
|
+
ARKADE_OPCODES: () => chunkBABJ77NG_cjs.ARKADE_OPCODES,
|
|
21626
|
+
ARKADE_OPCODE_NAMES: () => chunkBABJ77NG_cjs.ARKADE_OPCODE_NAMES,
|
|
21627
|
+
ARKADE_OPCODE_VALUES: () => chunkBABJ77NG_cjs.ARKADE_OPCODE_VALUES,
|
|
21628
|
+
ARKADE_OPS: () => chunkBABJ77NG_cjs.ARKADE_OPS,
|
|
21756
21629
|
Arkade: () => Arkade,
|
|
21757
21630
|
ArkadeContract: () => ArkadeContract,
|
|
21758
|
-
ArkadeProgramScript: () =>
|
|
21759
|
-
ArkadeScript: () =>
|
|
21631
|
+
ArkadeProgramScript: () => chunkBABJ77NG_cjs.ArkadeProgramScript,
|
|
21632
|
+
ArkadeScript: () => chunkBABJ77NG_cjs.ArkadeScript,
|
|
21760
21633
|
ArkadeTransactionBuilder: () => ArkadeTransactionBuilder,
|
|
21761
|
-
BigNum: () =>
|
|
21634
|
+
BigNum: () => chunkBABJ77NG_cjs.bignum_exports,
|
|
21762
21635
|
OP: () => btcSigner.OP,
|
|
21763
|
-
OPCODE_NAMES: () =>
|
|
21764
|
-
OPCODE_VALUES: () =>
|
|
21765
|
-
SUPPORTED_PROGRAM_VERSION: () =>
|
|
21636
|
+
OPCODE_NAMES: () => chunkBABJ77NG_cjs.OPCODE_NAMES,
|
|
21637
|
+
OPCODE_VALUES: () => chunkBABJ77NG_cjs.OPCODE_VALUES,
|
|
21638
|
+
SUPPORTED_PROGRAM_VERSION: () => chunkBABJ77NG_cjs.SUPPORTED_PROGRAM_VERSION,
|
|
21766
21639
|
Script: () => btcSigner.Script,
|
|
21767
|
-
arkadeScriptHash: () =>
|
|
21768
|
-
arkadeWitnessHash: () =>
|
|
21769
|
-
asmToBytes: () =>
|
|
21770
|
-
bytesToASM: () =>
|
|
21771
|
-
computeArkadeScriptPublicKey: () =>
|
|
21640
|
+
arkadeScriptHash: () => chunkBABJ77NG_cjs.arkadeScriptHash,
|
|
21641
|
+
arkadeWitnessHash: () => chunkBABJ77NG_cjs.arkadeWitnessHash,
|
|
21642
|
+
asmToBytes: () => chunkBABJ77NG_cjs.asmToBytes,
|
|
21643
|
+
bytesToASM: () => chunkBABJ77NG_cjs.bytesToASM,
|
|
21644
|
+
computeArkadeScriptPublicKey: () => chunkBABJ77NG_cjs.computeArkadeScriptPublicKey,
|
|
21772
21645
|
createArkadeBatchHandler: () => createArkadeBatchHandler,
|
|
21773
|
-
deserializeArkadeContractParams: () =>
|
|
21774
|
-
fromASM: () =>
|
|
21775
|
-
getOpcodeName: () =>
|
|
21776
|
-
getOpcodeValue: () =>
|
|
21777
|
-
parseArtifact: () =>
|
|
21778
|
-
resolveAsm: () =>
|
|
21779
|
-
serializeArkadeContractParams: () =>
|
|
21780
|
-
stringifyArtifact: () =>
|
|
21781
|
-
toASM: () =>
|
|
21782
|
-
validateProgram: () =>
|
|
21783
|
-
witnessRefToBytes: () =>
|
|
21646
|
+
deserializeArkadeContractParams: () => chunkBABJ77NG_cjs.deserializeArkadeContractParams,
|
|
21647
|
+
fromASM: () => chunkBABJ77NG_cjs.fromASM,
|
|
21648
|
+
getOpcodeName: () => chunkBABJ77NG_cjs.getOpcodeName,
|
|
21649
|
+
getOpcodeValue: () => chunkBABJ77NG_cjs.getOpcodeValue,
|
|
21650
|
+
parseArtifact: () => chunkBABJ77NG_cjs.parseArtifact,
|
|
21651
|
+
resolveAsm: () => chunkBABJ77NG_cjs.resolveAsm,
|
|
21652
|
+
serializeArkadeContractParams: () => chunkBABJ77NG_cjs.serializeArkadeContractParams,
|
|
21653
|
+
stringifyArtifact: () => chunkBABJ77NG_cjs.stringifyArtifact,
|
|
21654
|
+
toASM: () => chunkBABJ77NG_cjs.toASM,
|
|
21655
|
+
validateProgram: () => chunkBABJ77NG_cjs.validateProgram,
|
|
21656
|
+
witnessRefToBytes: () => chunkBABJ77NG_cjs.witnessRefToBytes
|
|
21784
21657
|
});
|
|
21785
|
-
var isVtxoCoin = (input) =>
|
|
21658
|
+
var isVtxoCoin = (input) => chunkG552MISJ_cjs.isVirtualCoin(input);
|
|
21786
21659
|
function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message, session, arkProvider, emulator, network, recipients, batchExpiryPolicy) {
|
|
21787
21660
|
let batchId;
|
|
21788
21661
|
let sweepTapTreeRoot;
|
|
@@ -21803,7 +21676,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
21803
21676
|
);
|
|
21804
21677
|
await arkProvider.confirmRegistration(intentId);
|
|
21805
21678
|
batchId = event.id;
|
|
21806
|
-
const sweepTapscript =
|
|
21679
|
+
const sweepTapscript = chunkG552MISJ_cjs.CSVMultisigTapscript.encode({
|
|
21807
21680
|
timelock,
|
|
21808
21681
|
pubkeys: [base.hex.decode(info.forfeitPubkey).subarray(1)]
|
|
21809
21682
|
}).script;
|
|
@@ -21817,7 +21690,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
21817
21690
|
if (!xOnlyPubkeys.includes(base.hex.encode(xonlySignerPubKey))) {
|
|
21818
21691
|
return { skip: true };
|
|
21819
21692
|
}
|
|
21820
|
-
const commitmentTx =
|
|
21693
|
+
const commitmentTx = chunkG552MISJ_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
|
|
21821
21694
|
validateVtxoTxGraph(vtxoTree, commitmentTx, sweepTapTreeRoot);
|
|
21822
21695
|
if (recipients && recipients.length > 0) {
|
|
21823
21696
|
validateBatchRecipients(commitmentTx, vtxoTree.leaves(), recipients, network);
|
|
@@ -21849,7 +21722,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
21849
21722
|
if (connectorTree) {
|
|
21850
21723
|
validateConnectorsTxGraph(event.commitmentTx, connectorTree);
|
|
21851
21724
|
}
|
|
21852
|
-
let commitmentPsbt =
|
|
21725
|
+
let commitmentPsbt = chunkG552MISJ_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
|
|
21853
21726
|
assertFinalCommitmentMatchesValidated(
|
|
21854
21727
|
commitmentPsbt,
|
|
21855
21728
|
validatedCommitmentTxid,
|
|
@@ -21884,7 +21757,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
21884
21757
|
boardingIndices.push(boardingIdx);
|
|
21885
21758
|
continue;
|
|
21886
21759
|
}
|
|
21887
|
-
if (
|
|
21760
|
+
if (chunkG552MISJ_cjs.isRecoverable(input) || isSubdust(input, info.dust)) {
|
|
21888
21761
|
continue;
|
|
21889
21762
|
}
|
|
21890
21763
|
if (connectorIndex >= connectorLeaves.length) {
|
|
@@ -21905,7 +21778,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
21905
21778
|
index: input.vout,
|
|
21906
21779
|
witnessUtxo: {
|
|
21907
21780
|
amount: BigInt(input.value),
|
|
21908
|
-
script:
|
|
21781
|
+
script: chunkG552MISJ_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
21909
21782
|
},
|
|
21910
21783
|
sighashType: btcSigner.SigHash.DEFAULT,
|
|
21911
21784
|
tapLeafScript: [input.forfeitTapLeafScript]
|
|
@@ -21997,11 +21870,11 @@ var Arkade = class _Arkade {
|
|
|
21997
21870
|
static async connect(opts) {
|
|
21998
21871
|
const info = await opts.arkade.getInfo();
|
|
21999
21872
|
const serverKey = base.hex.decode(info.signerPubkey).slice(1);
|
|
22000
|
-
const checkpoint =
|
|
22001
|
-
const network = opts.network ??
|
|
21873
|
+
const checkpoint = chunkG552MISJ_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
|
|
21874
|
+
const network = opts.network ?? chunkG552MISJ_cjs.DEFAULT_NETWORK;
|
|
22002
21875
|
let emulatorKey;
|
|
22003
21876
|
if (opts.emulator) {
|
|
22004
|
-
emulatorKey = base.hex.decode(
|
|
21877
|
+
emulatorKey = base.hex.decode(chunkG552MISJ_cjs.resolveEmulatorPubkey(network, opts.emulatorPubkey));
|
|
22005
21878
|
}
|
|
22006
21879
|
let userKey;
|
|
22007
21880
|
if (opts.identity) {
|
|
@@ -22032,7 +21905,7 @@ var Arkade = class _Arkade {
|
|
|
22032
21905
|
* key respectively; explicit args always win.
|
|
22033
21906
|
*/
|
|
22034
21907
|
contract(program, args = {}) {
|
|
22035
|
-
const declared = (program.params ?? []).map(
|
|
21908
|
+
const declared = (program.params ?? []).map(chunkBABJ77NG_cjs.inputName);
|
|
22036
21909
|
if (declared.includes("server") && args.server === void 0) {
|
|
22037
21910
|
args = { ...args, server: this.serverKey };
|
|
22038
21911
|
}
|
|
@@ -22052,7 +21925,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
22052
21925
|
userKey: client.userKey,
|
|
22053
21926
|
emulatorKey: client.emulatorKey
|
|
22054
21927
|
};
|
|
22055
|
-
this.vtxoScript = new
|
|
21928
|
+
this.vtxoScript = new chunkBABJ77NG_cjs.ArkadeProgramScript(program, args, this.keys);
|
|
22056
21929
|
this.tapTree = this.vtxoScript.encode();
|
|
22057
21930
|
this.compiled = this.vtxoScript.compiled;
|
|
22058
21931
|
}
|
|
@@ -22080,7 +21953,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
22080
21953
|
`ArkadeContract.fromContract: expected contract type 'arkade', got '${contract.type}'`
|
|
22081
21954
|
);
|
|
22082
21955
|
}
|
|
22083
|
-
const typed =
|
|
21956
|
+
const typed = chunkBABJ77NG_cjs.deserializeArkadeContractParams(contract.params);
|
|
22084
21957
|
return new _ArkadeContract(client, typed.program, typed.args, {
|
|
22085
21958
|
serverKey: typed.serverKey,
|
|
22086
21959
|
userKey: typed.userKey,
|
|
@@ -22121,7 +21994,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
22121
21994
|
toContractParams() {
|
|
22122
21995
|
return {
|
|
22123
21996
|
type: "arkade",
|
|
22124
|
-
params:
|
|
21997
|
+
params: chunkBABJ77NG_cjs.serializeArkadeContractParams({
|
|
22125
21998
|
program: this.program,
|
|
22126
21999
|
args: this.args,
|
|
22127
22000
|
serverKey: this.keys.serverKey,
|
|
@@ -22166,13 +22039,13 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
22166
22039
|
const [registered] = await manager.getContracts({ script: scriptHex });
|
|
22167
22040
|
if (registered) {
|
|
22168
22041
|
const [withVtxos] = await manager.getContractsWithVtxos({ script: scriptHex });
|
|
22169
|
-
return (withVtxos?.vtxos ?? []).filter((v) => !
|
|
22042
|
+
return (withVtxos?.vtxos ?? []).filter((v) => !chunkG552MISJ_cjs.hasTerminalSpend(v));
|
|
22170
22043
|
}
|
|
22171
22044
|
}
|
|
22172
22045
|
if (!this.client.indexer) {
|
|
22173
22046
|
throw new Error("ArkadeContract.getUtxos: an indexer is required");
|
|
22174
22047
|
}
|
|
22175
|
-
const { vtxos } = await
|
|
22048
|
+
const { vtxos } = await chunkG552MISJ_cjs.getNormalizedVtxos(this.client.indexer, {
|
|
22176
22049
|
scripts: [scriptHex],
|
|
22177
22050
|
spendableOnly: true
|
|
22178
22051
|
});
|
|
@@ -22274,12 +22147,12 @@ var ArkadeTransactionBuilder = class {
|
|
|
22274
22147
|
this.contract.client.checkpoint
|
|
22275
22148
|
);
|
|
22276
22149
|
if (coin.sourceTx) {
|
|
22277
|
-
|
|
22150
|
+
chunkG552MISJ_cjs.setArkPsbtField(arkTx, 0, chunkG552MISJ_cjs.PrevArkTxField, coin.sourceTx);
|
|
22278
22151
|
}
|
|
22279
22152
|
const condition = (def.tapscript.witness ?? []).map((w) => this.witnessBytes(w));
|
|
22280
22153
|
if (condition.length > 0) {
|
|
22281
|
-
|
|
22282
|
-
|
|
22154
|
+
chunkG552MISJ_cjs.setArkPsbtField(arkTx, 0, chunkG552MISJ_cjs.ConditionWitness, condition);
|
|
22155
|
+
chunkG552MISJ_cjs.setArkPsbtField(checkpoints[0], 0, chunkG552MISJ_cjs.ConditionWitness, condition);
|
|
22283
22156
|
}
|
|
22284
22157
|
const packets = [];
|
|
22285
22158
|
if (this.assetSpecs.length > 0) {
|
|
@@ -22318,7 +22191,7 @@ var ArkadeTransactionBuilder = class {
|
|
|
22318
22191
|
base.base64.encode(signedArk2.toPSBT()),
|
|
22319
22192
|
signedCps.map((c) => base.base64.encode(c.toPSBT()))
|
|
22320
22193
|
);
|
|
22321
|
-
const txid =
|
|
22194
|
+
const txid = chunkG552MISJ_cjs.Transaction.fromPSBT(base.base64.decode(res2.signedArkTx)).id;
|
|
22322
22195
|
return {
|
|
22323
22196
|
txid,
|
|
22324
22197
|
signedArkTx: res2.signedArkTx,
|
|
@@ -22377,23 +22250,23 @@ var ArkadeTransactionBuilder = class {
|
|
|
22377
22250
|
}
|
|
22378
22251
|
buildAssetPacket() {
|
|
22379
22252
|
const groups = this.assetSpecs.map((s) => {
|
|
22380
|
-
const id = typeof s.assetId === "string" ?
|
|
22381
|
-
return
|
|
22253
|
+
const id = typeof s.assetId === "string" ? chunkXN55B6EP_cjs.AssetId.fromString(s.assetId) : chunkXN55B6EP_cjs.AssetId.fromBytes(s.assetId);
|
|
22254
|
+
return chunkXN55B6EP_cjs.AssetGroup.create(
|
|
22382
22255
|
id,
|
|
22383
22256
|
null,
|
|
22384
|
-
s.inputs.map((i) =>
|
|
22385
|
-
s.outputs.map((o) =>
|
|
22386
|
-
(s.metadata ?? []).map((m) =>
|
|
22257
|
+
s.inputs.map((i) => chunkXN55B6EP_cjs.AssetInput.create(i.vin, i.amount)),
|
|
22258
|
+
s.outputs.map((o) => chunkXN55B6EP_cjs.AssetOutput.create(o.vout, o.amount)),
|
|
22259
|
+
(s.metadata ?? []).map((m) => chunkXN55B6EP_cjs.Metadata.create(m.key, m.value))
|
|
22387
22260
|
);
|
|
22388
22261
|
});
|
|
22389
|
-
return
|
|
22262
|
+
return chunkXN55B6EP_cjs.Packet.create(groups);
|
|
22390
22263
|
}
|
|
22391
22264
|
witnessBytes(ref) {
|
|
22392
|
-
return
|
|
22265
|
+
return chunkBABJ77NG_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
|
|
22393
22266
|
}
|
|
22394
22267
|
};
|
|
22395
22268
|
function bindInputs(fn, callArgs) {
|
|
22396
|
-
const names = (fn.def.inputs ?? []).map(
|
|
22269
|
+
const names = (fn.def.inputs ?? []).map(chunkBABJ77NG_cjs.inputName);
|
|
22397
22270
|
if (callArgs.length !== names.length) {
|
|
22398
22271
|
throw new Error(`${fn.name}: expected ${names.length} argument(s), got ${callArgs.length}`);
|
|
22399
22272
|
}
|
|
@@ -22792,7 +22665,9 @@ exports.ArkadeCashCreateError = ArkadeCashCreateError;
|
|
|
22792
22665
|
exports.AssetManager = AssetManager;
|
|
22793
22666
|
exports.BIP21 = BIP21;
|
|
22794
22667
|
exports.BIP21Error = BIP21Error;
|
|
22668
|
+
exports.BLOCKED_UPGRADE_TIMEOUT_MS = BLOCKED_UPGRADE_TIMEOUT_MS;
|
|
22795
22669
|
exports.ChainedTxType = ChainedTxType;
|
|
22670
|
+
exports.ConnectionDisposedError = ConnectionDisposedError;
|
|
22796
22671
|
exports.ContractManager = ContractManager;
|
|
22797
22672
|
exports.ContractRepositoryImpl = ContractRepositoryImpl;
|
|
22798
22673
|
exports.ContractWatcher = ContractWatcher;
|
|
@@ -22800,6 +22675,7 @@ exports.DB_VERSION = DB_VERSION;
|
|
|
22800
22675
|
exports.DEFAULT_MESSAGE_TIMEOUTS = DEFAULT_MESSAGE_TIMEOUTS;
|
|
22801
22676
|
exports.DEFAULT_MIN_BATCH_EXPIRY_SECONDS = DEFAULT_MIN_BATCH_EXPIRY_SECONDS;
|
|
22802
22677
|
exports.DEFAULT_MIN_CHECKPOINT_EXIT_DELAY_SECONDS = DEFAULT_MIN_CHECKPOINT_EXIT_DELAY_SECONDS;
|
|
22678
|
+
exports.DatabaseUpgradeBlockedError = DatabaseUpgradeBlockedError;
|
|
22803
22679
|
exports.DelegateManagerImpl = DelegateManagerImpl;
|
|
22804
22680
|
exports.DelegateNotConfiguredError = DelegateNotConfiguredError;
|
|
22805
22681
|
exports.DelegatorManagerImpl = DelegatorManagerImpl;
|
|
@@ -22881,6 +22757,7 @@ exports.assertSubmittedArkTxid = assertSubmittedArkTxid;
|
|
|
22881
22757
|
exports.assertValidBatchExpiry = assertValidBatchExpiry;
|
|
22882
22758
|
exports.assertValidServerUnrollScript = assertValidServerUnrollScript;
|
|
22883
22759
|
exports.assetMintResolver = assetMintResolver;
|
|
22760
|
+
exports.awaitTransaction = awaitTransaction;
|
|
22884
22761
|
exports.boardingResolver = boardingResolver;
|
|
22885
22762
|
exports.btcTarget = btcTarget;
|
|
22886
22763
|
exports.buildForfeitTx = buildForfeitTx;
|
|
@@ -22901,9 +22778,11 @@ exports.createAssetPacket = createAssetPacket;
|
|
|
22901
22778
|
exports.createDefaultActivityRegistry = createDefaultActivityRegistry;
|
|
22902
22779
|
exports.createDefaultPaymentRouter = createDefaultPaymentRouter;
|
|
22903
22780
|
exports.createExitChainResolver = createExitChainResolver;
|
|
22781
|
+
exports.createManagedConnection = createManagedConnection;
|
|
22904
22782
|
exports.decodeArkContract = decodeArkContract;
|
|
22905
22783
|
exports.defaultBatchExpiryPolicy = defaultBatchExpiryPolicy;
|
|
22906
22784
|
exports.defaultCheckpointExitDelayPolicy = defaultCheckpointExitDelayPolicy;
|
|
22785
|
+
exports.deleteByIndex = deleteByIndex;
|
|
22907
22786
|
exports.deserializeAssets = deserializeAssets;
|
|
22908
22787
|
exports.deserializeExitPackage = deserializeExitPackage;
|
|
22909
22788
|
exports.deserializeUtxo = deserializeUtxo;
|
|
@@ -22912,6 +22791,7 @@ exports.encodeArkContract = encodeArkContract;
|
|
|
22912
22791
|
exports.extendVirtualCoinForContract = extendVirtualCoinForContract;
|
|
22913
22792
|
exports.gateExclusion = gateExclusion;
|
|
22914
22793
|
exports.gatedContracts = gatedContracts;
|
|
22794
|
+
exports.getAllByIndexValues = getAllByIndexValues;
|
|
22915
22795
|
exports.getMigrationStatus = getMigrationStatus;
|
|
22916
22796
|
exports.getRandomId = getRandomId;
|
|
22917
22797
|
exports.hasBoardingTxExpired = hasBoardingTxExpired;
|
|
@@ -22950,6 +22830,7 @@ exports.onchainRail = onchainRail;
|
|
|
22950
22830
|
exports.openDatabase = openDatabase;
|
|
22951
22831
|
exports.outpointExclusion = outpointExclusion;
|
|
22952
22832
|
exports.outpointReasons = outpointReasons;
|
|
22833
|
+
exports.promisifyRequest = promisifyRequest;
|
|
22953
22834
|
exports.provisionClaimSecret = provisionClaimSecret;
|
|
22954
22835
|
exports.provisionRefundKey = provisionRefundKey;
|
|
22955
22836
|
exports.requiresMigration = requiresMigration;
|
|
@@ -22979,5 +22860,5 @@ exports.validateVtxoTxGraph = validateVtxoTxGraph;
|
|
|
22979
22860
|
exports.verifyTapscriptSignatures = verifyTapscriptSignatures;
|
|
22980
22861
|
exports.waitForIncomingFunds = waitForIncomingFunds;
|
|
22981
22862
|
exports.warnAndFilterVtxosForScript = warnAndFilterVtxosForScript;
|
|
22982
|
-
//# sourceMappingURL=chunk-
|
|
22983
|
-
//# sourceMappingURL=chunk-
|
|
22863
|
+
//# sourceMappingURL=chunk-GFZNEMGL.cjs.map
|
|
22864
|
+
//# sourceMappingURL=chunk-GFZNEMGL.cjs.map
|