@arkade-os/sdk 0.4.77 → 0.4.79
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/adapters/expo.cjs +5 -5
- package/dist/adapters/expo.d.cts +3 -3
- package/dist/adapters/expo.d.ts +3 -3
- package/dist/adapters/expo.js +3 -3
- package/dist/{asyncStorageTaskQueue-DTl0WM7E.d.ts → asyncStorageTaskQueue-C5yQLJhm.d.ts} +2 -2
- package/dist/{asyncStorageTaskQueue-MmJyAnu-.d.cts → asyncStorageTaskQueue-Shsih-1l.d.cts} +2 -2
- package/dist/{chunk-ACPANSOX.js → chunk-4MXW2NDN.js} +10 -515
- package/dist/chunk-4MXW2NDN.js.map +1 -0
- package/dist/{chunk-Y4YK44IM.cjs → chunk-54FXLZ3T.cjs} +10 -10
- package/dist/{chunk-Y4YK44IM.cjs.map → chunk-54FXLZ3T.cjs.map} +1 -1
- package/dist/{chunk-CJN4CUEU.cjs → chunk-DAYCCIRO.cjs} +377 -198
- package/dist/chunk-DAYCCIRO.cjs.map +1 -0
- package/dist/{chunk-LUWSY2QO.cjs → chunk-FUW3OM5X.cjs} +76 -561
- package/dist/chunk-FUW3OM5X.cjs.map +1 -0
- package/dist/{chunk-YJEWWLOQ.cjs → chunk-HAM3SHBV.cjs} +650 -548
- package/dist/chunk-HAM3SHBV.cjs.map +1 -0
- package/dist/{chunk-52OA3UIC.js → chunk-JCPVP7TJ.js} +377 -201
- package/dist/chunk-JCPVP7TJ.js.map +1 -0
- package/dist/{chunk-4LP6XOMW.cjs → chunk-LASRYLMQ.cjs} +17 -17
- package/dist/{chunk-4LP6XOMW.cjs.map → chunk-LASRYLMQ.cjs.map} +1 -1
- package/dist/{chunk-HKOFYHZP.js → chunk-QDXOTONI.js} +3 -3
- package/dist/{chunk-HKOFYHZP.js.map → chunk-QDXOTONI.js.map} +1 -1
- package/dist/{chunk-H62OOAS4.cjs → chunk-SJPPBR2V.cjs} +17 -17
- package/dist/{chunk-H62OOAS4.cjs.map → chunk-SJPPBR2V.cjs.map} +1 -1
- package/dist/{chunk-T6MGH4V4.js → chunk-SK4OZRMB.js} +4 -4
- package/dist/{chunk-T6MGH4V4.js.map → chunk-SK4OZRMB.js.map} +1 -1
- package/dist/{chunk-YKNTUOUG.js → chunk-VAFNWP3I.js} +4 -4
- package/dist/{chunk-YKNTUOUG.js.map → chunk-VAFNWP3I.js.map} +1 -1
- package/dist/{chunk-MLOZHTBN.js → chunk-YPQ37P3H.js} +210 -108
- package/dist/chunk-YPQ37P3H.js.map +1 -0
- package/dist/contracts/handlers/index.cjs +9 -9
- package/dist/contracts/handlers/index.d.cts +4 -4
- package/dist/contracts/handlers/index.d.ts +4 -4
- package/dist/contracts/handlers/index.js +2 -2
- package/dist/{delegate-QPCGaD_z.d.cts → delegate-B4bKASut.d.cts} +1 -1
- package/dist/{delegate-CjcysR7s.d.ts → delegate-C9lpdrb0.d.ts} +1 -1
- package/dist/{hdWalletCapable--pMncWbC.d.ts → hdWalletCapable-CUJDKRKO.d.cts} +2 -3
- package/dist/{hdWalletCapable-Bp_p0WLj.d.cts → hdWalletCapable-DJClhYMC.d.ts} +2 -3
- package/dist/{index-Ie_ak2zY.d.ts → index-Ctul0N3Y.d.cts} +28 -6
- package/dist/{index-Ie_ak2zY.d.cts → index-Ctul0N3Y.d.ts} +28 -6
- package/dist/{index-m-EM-e8D.d.ts → index-D0qe2qVY.d.ts} +2 -2
- package/dist/{index-BMY272ns.d.cts → index-YBFmScVS.d.cts} +2 -2
- package/dist/index.cjs +304 -304
- package/dist/index.d.cts +123 -123
- package/dist/index.d.ts +123 -123
- package/dist/index.js +4 -4
- package/dist/repositories/realm/index.cjs +20 -20
- package/dist/repositories/realm/index.d.cts +3 -3
- package/dist/repositories/realm/index.d.ts +3 -3
- package/dist/repositories/realm/index.js +5 -5
- package/dist/repositories/sqlite/index.cjs +19 -19
- package/dist/repositories/sqlite/index.d.cts +3 -3
- package/dist/repositories/sqlite/index.d.ts +3 -3
- package/dist/repositories/sqlite/index.js +5 -5
- package/dist/{taskRunner-CqrlrJEt.d.ts → taskRunner-C08egG5a.d.ts} +2 -2
- package/dist/{taskRunner-BgRowCqB.d.cts → taskRunner-DB17db5n.d.cts} +2 -2
- package/dist/wallet/expo/background.cjs +14 -14
- package/dist/wallet/expo/background.d.cts +4 -4
- package/dist/wallet/expo/background.d.ts +4 -4
- package/dist/wallet/expo/background.js +6 -6
- package/dist/wallet/expo/index.cjs +14 -14
- package/dist/wallet/expo/index.d.cts +5 -5
- package/dist/wallet/expo/index.d.ts +5 -5
- package/dist/wallet/expo/index.js +5 -5
- package/dist/worker/expo/index.cjs +9 -9
- package/dist/worker/expo/index.d.cts +5 -5
- package/dist/worker/expo/index.d.ts +5 -5
- package/dist/worker/expo/index.js +5 -5
- package/package.json +6 -5
- package/dist/chunk-52OA3UIC.js.map +0 -1
- package/dist/chunk-ACPANSOX.js.map +0 -1
- package/dist/chunk-CJN4CUEU.cjs.map +0 -1
- package/dist/chunk-LUWSY2QO.cjs.map +0 -1
- package/dist/chunk-MLOZHTBN.js.map +0 -1
- package/dist/chunk-YJEWWLOQ.cjs.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunkSJPPBR2V_cjs = require('./chunk-SJPPBR2V.cjs');
|
|
4
|
+
var chunkFUW3OM5X_cjs = require('./chunk-FUW3OM5X.cjs');
|
|
5
|
+
var chunkDAYCCIRO_cjs = require('./chunk-DAYCCIRO.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 = chunkDAYCCIRO_cjs.getArkPsbtFields(tx.root, 0, chunkDAYCCIRO_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 = chunkDAYCCIRO_cjs.getArkPsbtFields(g.root, 0, chunkDAYCCIRO_cjs.CosignerPublicKey).map((c) => c.key);
|
|
244
244
|
const { finalKey } = aggregateKeys(cosigners, true, {
|
|
245
245
|
taprootTweak: this.scriptRoot
|
|
246
246
|
});
|
|
@@ -323,7 +323,7 @@ var SingleKey = class _SingleKey {
|
|
|
323
323
|
async sign(tx, inputIndexes) {
|
|
324
324
|
const txCpy = tx.clone();
|
|
325
325
|
if (!inputIndexes) {
|
|
326
|
-
|
|
326
|
+
chunkDAYCCIRO_cjs.assertAllowedSighashTypes(txCpy, ALLOWED_SIGHASH);
|
|
327
327
|
try {
|
|
328
328
|
if (!txCpy.sign(this.key, ALLOWED_SIGHASH)) {
|
|
329
329
|
throw new Error("Failed to sign transaction");
|
|
@@ -432,7 +432,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
432
432
|
let network;
|
|
433
433
|
if ("descriptor" in opts && typeof opts.descriptor === "string") {
|
|
434
434
|
descriptor = opts.descriptor;
|
|
435
|
-
network =
|
|
435
|
+
network = chunkFUW3OM5X_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
436
436
|
} else {
|
|
437
437
|
network = opts.isMainnet ?? true ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
438
438
|
descriptor = descriptorsScure.scriptExpressions.trBIP32({
|
|
@@ -530,7 +530,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
530
530
|
* `StaticDescriptorProvider` for legacy single-key wallets.
|
|
531
531
|
*/
|
|
532
532
|
isOurs(descriptor) {
|
|
533
|
-
return
|
|
533
|
+
return chunkFUW3OM5X_cjs.descriptorIsOurs(descriptor, this.descriptor, utils_js.pubSchnorr(this.derivedKey));
|
|
534
534
|
}
|
|
535
535
|
/**
|
|
536
536
|
* Signs each request with the key derived from its descriptor.
|
|
@@ -579,7 +579,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
579
579
|
}
|
|
580
580
|
// ── internal helpers ─────────────────────────────────────────────
|
|
581
581
|
derivePrivateKeyForDescriptor(descriptor) {
|
|
582
|
-
const network =
|
|
582
|
+
const network = chunkFUW3OM5X_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
583
583
|
const expansion = descriptorsScure.expand({ descriptor, network });
|
|
584
584
|
if (expansion.isRanged) {
|
|
585
585
|
throw new Error(
|
|
@@ -604,7 +604,7 @@ var SeedIdentity = class _SeedIdentity {
|
|
|
604
604
|
signTxWithKey(tx, key, inputIndexes) {
|
|
605
605
|
const txCpy = tx.clone();
|
|
606
606
|
if (!inputIndexes) {
|
|
607
|
-
|
|
607
|
+
chunkDAYCCIRO_cjs.assertAllowedSighashTypes(txCpy, ALLOWED_SIGHASH2);
|
|
608
608
|
try {
|
|
609
609
|
if (!txCpy.sign(key, ALLOWED_SIGHASH2)) {
|
|
610
610
|
throw new Error("Failed to sign transaction");
|
|
@@ -666,7 +666,7 @@ var ReadonlyDescriptorIdentity = class _ReadonlyDescriptorIdentity {
|
|
|
666
666
|
*/
|
|
667
667
|
descriptor;
|
|
668
668
|
constructor(descriptor) {
|
|
669
|
-
const network =
|
|
669
|
+
const network = chunkFUW3OM5X_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
670
670
|
let expansion;
|
|
671
671
|
try {
|
|
672
672
|
expansion = descriptorsScure.expand({ descriptor, network, index: 0 });
|
|
@@ -716,7 +716,7 @@ var ReadonlyDescriptorIdentity = class _ReadonlyDescriptorIdentity {
|
|
|
716
716
|
* `StaticDescriptorProvider` for legacy single-key wallets.
|
|
717
717
|
*/
|
|
718
718
|
isOurs(descriptor) {
|
|
719
|
-
return
|
|
719
|
+
return chunkFUW3OM5X_cjs.descriptorIsOurs(descriptor, this.descriptor, this.indexZero.pubkey);
|
|
720
720
|
}
|
|
721
721
|
};
|
|
722
722
|
function serializeSeedOwnedSigningIdentity(identity) {
|
|
@@ -878,10 +878,10 @@ var DescriptorIdentity = class {
|
|
|
878
878
|
this.base = base;
|
|
879
879
|
}
|
|
880
880
|
async xOnlyPublicKey() {
|
|
881
|
-
return
|
|
881
|
+
return chunkFUW3OM5X_cjs.deriveDescriptorLeafPubKey(this.descriptor);
|
|
882
882
|
}
|
|
883
883
|
async compressedPublicKey() {
|
|
884
|
-
return
|
|
884
|
+
return chunkFUW3OM5X_cjs.deriveDescriptorLeafCompressedPubKey(this.descriptor);
|
|
885
885
|
}
|
|
886
886
|
async sign(tx, inputIndexes) {
|
|
887
887
|
const [signed] = await this.signer.signWithDescriptor([
|
|
@@ -949,12 +949,12 @@ var WalletCannotAllocateAddressError = class extends Error {
|
|
|
949
949
|
};
|
|
950
950
|
async function resolveDescriptorSigner(descriptor, identity, provider) {
|
|
951
951
|
const owner = provider?.isOurs(descriptor) ? provider : isHDCapableIdentity(identity) && identity.isOurs(descriptor) ? identity : void 0;
|
|
952
|
-
if (owner &&
|
|
952
|
+
if (owner && chunkFUW3OM5X_cjs.parseHDDescriptor(descriptor)) {
|
|
953
953
|
return new DescriptorIdentity({ descriptor, signer: owner, base: identity });
|
|
954
954
|
}
|
|
955
955
|
let key;
|
|
956
956
|
try {
|
|
957
|
-
key =
|
|
957
|
+
key = chunkFUW3OM5X_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
958
958
|
} catch {
|
|
959
959
|
throw new ForeignDescriptorError(descriptor);
|
|
960
960
|
}
|
|
@@ -976,33 +976,62 @@ function isAddressAllocationCapable(value) {
|
|
|
976
976
|
return typeof value.getNewAddresses === "function";
|
|
977
977
|
}
|
|
978
978
|
|
|
979
|
+
// ../../node_modules/@noble/hashes/_u64.js
|
|
980
|
+
var fromNumH = (n) => n / 2 ** 32 | 0;
|
|
981
|
+
var fromNumL = (n) => n >>> 0;
|
|
982
|
+
function setU64FromNum(view, byteOffset, n, isLE) {
|
|
983
|
+
const h = fromNumH(n);
|
|
984
|
+
const l = fromNumL(n);
|
|
985
|
+
view.setUint32(byteOffset, isLE ? l : h, isLE);
|
|
986
|
+
view.setUint32(byteOffset + 4, isLE ? h : l, isLE);
|
|
987
|
+
}
|
|
988
|
+
|
|
979
989
|
// ../../node_modules/@noble/hashes/utils.js
|
|
980
990
|
function isBytes(a) {
|
|
981
|
-
return a instanceof Uint8Array || ArrayBuffer.isView(a) && a.constructor.name === "Uint8Array";
|
|
991
|
+
return a instanceof Uint8Array || ArrayBuffer.isView(a) && a.constructor.name === "Uint8Array" && "BYTES_PER_ELEMENT" in a && a.BYTES_PER_ELEMENT === 1;
|
|
992
|
+
}
|
|
993
|
+
var atitle = (title) => title ? `"${title}" ` : "";
|
|
994
|
+
function anumber(n, title = "") {
|
|
995
|
+
if (typeof n !== "number")
|
|
996
|
+
throw new TypeError(atitle(title) + "expected number, got " + typeof n);
|
|
997
|
+
if (!Number.isSafeInteger(n) || n < 0)
|
|
998
|
+
throw new RangeError(atitle(title) + "expected integer >= 0, got " + n);
|
|
999
|
+
return n;
|
|
982
1000
|
}
|
|
983
1001
|
function abytes(value, length, title = "") {
|
|
1002
|
+
if (isBytes(value) && (length === void 0))
|
|
1003
|
+
return value;
|
|
984
1004
|
const bytes = isBytes(value);
|
|
985
|
-
const
|
|
986
|
-
const
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
}
|
|
1005
|
+
const ofLen = "";
|
|
1006
|
+
const got = bytes ? `length=${value.length}` : `type=${typeof value}`;
|
|
1007
|
+
const message = atitle(title) + "expected Uint8Array" + ofLen + ", got " + got;
|
|
1008
|
+
if (!bytes)
|
|
1009
|
+
throw new TypeError(message);
|
|
1010
|
+
throw new RangeError(message);
|
|
1011
|
+
}
|
|
1012
|
+
var aobject = (value, label) => {
|
|
1013
|
+
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
1014
|
+
throw new TypeError((label === "object" ? "" : `"${label}" `) + "expected object, got type=" + typeof value);
|
|
1015
|
+
};
|
|
1016
|
+
var aopts = (value, label) => {
|
|
1017
|
+
aobject(value, label);
|
|
1018
|
+
const proto = Object.getPrototypeOf(value);
|
|
1019
|
+
if (proto !== Object.prototype && proto !== null)
|
|
1020
|
+
throw new TypeError(`"${label}" expected plain object`);
|
|
1021
|
+
if (Object.hasOwn(value, "__proto__"))
|
|
1022
|
+
throw new TypeError(`"${label}.__proto__" is not allowed`);
|
|
1023
|
+
};
|
|
995
1024
|
function aexists(instance, checkFinished = true) {
|
|
996
1025
|
if (instance.destroyed)
|
|
997
|
-
throw new Error("
|
|
1026
|
+
throw new Error("hash was destroyed");
|
|
998
1027
|
if (checkFinished && instance.finished)
|
|
999
|
-
throw new Error("
|
|
1028
|
+
throw new Error("digest() was already called");
|
|
1000
1029
|
}
|
|
1001
1030
|
function aoutput(out, instance) {
|
|
1002
|
-
abytes(out, void 0, "
|
|
1031
|
+
abytes(out, void 0, "output");
|
|
1003
1032
|
const min = instance.outputLen;
|
|
1004
|
-
if (out.length
|
|
1005
|
-
throw new
|
|
1033
|
+
if (!(out.length >= min)) {
|
|
1034
|
+
throw new RangeError('"output" expected length >= ' + min);
|
|
1006
1035
|
}
|
|
1007
1036
|
}
|
|
1008
1037
|
function clean(...arrays) {
|
|
@@ -1016,22 +1045,38 @@ function createView(arr) {
|
|
|
1016
1045
|
function rotr(word, shift) {
|
|
1017
1046
|
return word << 32 - shift | word >>> shift;
|
|
1018
1047
|
}
|
|
1048
|
+
function checkOpts(defaults, opts, title = "opts") {
|
|
1049
|
+
aopts(defaults, "defaults");
|
|
1050
|
+
if (opts !== void 0)
|
|
1051
|
+
aopts(opts, title);
|
|
1052
|
+
const merged = Object.assign(/* @__PURE__ */ Object.create(null), defaults, opts);
|
|
1053
|
+
return merged;
|
|
1054
|
+
}
|
|
1019
1055
|
function createHasher(hashCons, info = {}) {
|
|
1056
|
+
if (typeof hashCons !== "function")
|
|
1057
|
+
throw new TypeError('"hashCons" expected function, got type=' + typeof hashCons);
|
|
1058
|
+
info = checkOpts({}, info, "info");
|
|
1020
1059
|
const hashC = (msg, opts) => hashCons(opts).update(msg).digest();
|
|
1021
1060
|
const tmp = hashCons(void 0);
|
|
1022
1061
|
hashC.outputLen = tmp.outputLen;
|
|
1023
1062
|
hashC.blockLen = tmp.blockLen;
|
|
1063
|
+
hashC.canXOF = tmp.canXOF;
|
|
1024
1064
|
hashC.create = (opts) => hashCons(opts);
|
|
1025
1065
|
Object.assign(hashC, info);
|
|
1026
1066
|
return Object.freeze(hashC);
|
|
1027
1067
|
}
|
|
1028
1068
|
function randomBytes(bytesLength = 32) {
|
|
1069
|
+
anumber(bytesLength, "bytesLength");
|
|
1029
1070
|
const cr = typeof globalThis === "object" ? globalThis.crypto : null;
|
|
1030
1071
|
if (typeof cr?.getRandomValues !== "function")
|
|
1031
1072
|
throw new Error("crypto.getRandomValues must be defined");
|
|
1073
|
+
if (bytesLength > 65536)
|
|
1074
|
+
throw new RangeError(`"bytesLength" expected <= 65536, got ${bytesLength}`);
|
|
1032
1075
|
return cr.getRandomValues(new Uint8Array(bytesLength));
|
|
1033
1076
|
}
|
|
1034
1077
|
var oidNist = (suffix) => ({
|
|
1078
|
+
// Current NIST hashAlgs suffixes used here fit in one DER subidentifier octet.
|
|
1079
|
+
// Larger suffix values would need base-128 OID encoding and a different length byte.
|
|
1035
1080
|
oid: Uint8Array.from([6, 9, 96, 134, 72, 1, 101, 3, 4, 2, suffix])
|
|
1036
1081
|
});
|
|
1037
1082
|
|
|
@@ -1045,6 +1090,7 @@ function Maj(a, b, c) {
|
|
|
1045
1090
|
var HashMD = class {
|
|
1046
1091
|
blockLen;
|
|
1047
1092
|
outputLen;
|
|
1093
|
+
canXOF = false;
|
|
1048
1094
|
padOffset;
|
|
1049
1095
|
isLE;
|
|
1050
1096
|
// For partial updates less than block size
|
|
@@ -1067,24 +1113,28 @@ var HashMD = class {
|
|
|
1067
1113
|
abytes(data);
|
|
1068
1114
|
const { view, buffer, blockLen } = this;
|
|
1069
1115
|
const len = data.length;
|
|
1116
|
+
let processed = false;
|
|
1070
1117
|
for (let pos = 0; pos < len; ) {
|
|
1071
1118
|
const take = Math.min(blockLen - this.pos, len - pos);
|
|
1072
1119
|
if (take === blockLen) {
|
|
1073
1120
|
const dataView = createView(data);
|
|
1074
1121
|
for (; blockLen <= len - pos; pos += blockLen)
|
|
1075
1122
|
this.process(dataView, pos);
|
|
1123
|
+
processed = true;
|
|
1076
1124
|
continue;
|
|
1077
1125
|
}
|
|
1078
|
-
buffer.set(data.subarray(pos, pos + take), this.pos);
|
|
1126
|
+
buffer.set(pos === 0 && take === len ? data : data.subarray(pos, pos + take), this.pos);
|
|
1079
1127
|
this.pos += take;
|
|
1080
1128
|
pos += take;
|
|
1081
1129
|
if (this.pos === blockLen) {
|
|
1082
1130
|
this.process(view, 0);
|
|
1083
1131
|
this.pos = 0;
|
|
1132
|
+
processed = true;
|
|
1084
1133
|
}
|
|
1085
1134
|
}
|
|
1086
1135
|
this.length += data.length;
|
|
1087
|
-
|
|
1136
|
+
if (processed)
|
|
1137
|
+
this.roundClean();
|
|
1088
1138
|
return this;
|
|
1089
1139
|
}
|
|
1090
1140
|
digestInto(out) {
|
|
@@ -1094,23 +1144,20 @@ var HashMD = class {
|
|
|
1094
1144
|
const { buffer, view, blockLen, isLE } = this;
|
|
1095
1145
|
let { pos } = this;
|
|
1096
1146
|
buffer[pos++] = 128;
|
|
1097
|
-
|
|
1147
|
+
buffer.fill(0, pos);
|
|
1098
1148
|
if (this.padOffset > blockLen - pos) {
|
|
1099
1149
|
this.process(view, 0);
|
|
1100
|
-
|
|
1150
|
+
buffer.fill(0);
|
|
1101
1151
|
}
|
|
1102
|
-
|
|
1103
|
-
buffer[i] = 0;
|
|
1104
|
-
view.setBigUint64(blockLen - 8, BigInt(this.length * 8), isLE);
|
|
1152
|
+
setU64FromNum(view, blockLen - 8, this.length * 8, isLE);
|
|
1105
1153
|
this.process(view, 0);
|
|
1106
|
-
|
|
1154
|
+
this.roundClean();
|
|
1155
|
+
const oview = out === buffer ? view : createView(out);
|
|
1107
1156
|
const len = this.outputLen;
|
|
1108
|
-
if (len % 4)
|
|
1109
|
-
throw new Error("_sha2: outputLen must be aligned to 32bit");
|
|
1110
1157
|
const outLen = len / 4;
|
|
1111
1158
|
const state = this.get();
|
|
1112
|
-
if (outLen > state.length)
|
|
1113
|
-
throw new Error("
|
|
1159
|
+
if (len % 4 || outLen > state.length)
|
|
1160
|
+
throw new Error("invalid outputLen");
|
|
1114
1161
|
for (let i = 0; i < outLen; i++)
|
|
1115
1162
|
oview.setUint32(4 * i, state[i], isLE);
|
|
1116
1163
|
}
|
|
@@ -1121,15 +1168,13 @@ var HashMD = class {
|
|
|
1121
1168
|
this.destroy();
|
|
1122
1169
|
return res;
|
|
1123
1170
|
}
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
to.set(...this.get());
|
|
1127
|
-
const { blockLen, buffer, length, finished, destroyed, pos } = this;
|
|
1171
|
+
_cloneIntoMeta(to) {
|
|
1172
|
+
const { buffer, length, finished, destroyed, pos } = this;
|
|
1128
1173
|
to.destroyed = destroyed;
|
|
1129
1174
|
to.finished = finished;
|
|
1130
1175
|
to.length = length;
|
|
1131
1176
|
to.pos = pos;
|
|
1132
|
-
if (
|
|
1177
|
+
if (pos)
|
|
1133
1178
|
to.buffer.set(buffer);
|
|
1134
1179
|
return to;
|
|
1135
1180
|
}
|
|
@@ -1217,8 +1262,28 @@ var SHA256_K = /* @__PURE__ */ Uint32Array.from([
|
|
|
1217
1262
|
]);
|
|
1218
1263
|
var SHA256_W = /* @__PURE__ */ new Uint32Array(64);
|
|
1219
1264
|
var SHA2_32B = class extends HashMD {
|
|
1220
|
-
|
|
1265
|
+
// We cannot use array here since array allows indexing by variable
|
|
1266
|
+
// which means optimizer/compiler cannot use registers.
|
|
1267
|
+
// Numeric initializers matter: starting the fields as `undefined` changes
|
|
1268
|
+
// V8's field representation and makes sha256 3x slower (measured).
|
|
1269
|
+
A = 0;
|
|
1270
|
+
B = 0;
|
|
1271
|
+
C = 0;
|
|
1272
|
+
D = 0;
|
|
1273
|
+
E = 0;
|
|
1274
|
+
F = 0;
|
|
1275
|
+
G = 0;
|
|
1276
|
+
H = 0;
|
|
1277
|
+
constructor(outputLen, IV) {
|
|
1221
1278
|
super(64, outputLen, 8, false);
|
|
1279
|
+
this.A = IV[0] | 0;
|
|
1280
|
+
this.B = IV[1] | 0;
|
|
1281
|
+
this.C = IV[2] | 0;
|
|
1282
|
+
this.D = IV[3] | 0;
|
|
1283
|
+
this.E = IV[4] | 0;
|
|
1284
|
+
this.F = IV[5] | 0;
|
|
1285
|
+
this.G = IV[6] | 0;
|
|
1286
|
+
this.H = IV[7] | 0;
|
|
1222
1287
|
}
|
|
1223
1288
|
get() {
|
|
1224
1289
|
const { A, B, C, D, E, F, G, H } = this;
|
|
@@ -1235,6 +1300,10 @@ var SHA2_32B = class extends HashMD {
|
|
|
1235
1300
|
this.G = G | 0;
|
|
1236
1301
|
this.H = H | 0;
|
|
1237
1302
|
}
|
|
1303
|
+
_cloneInto(to) {
|
|
1304
|
+
(to ||= new this.constructor()).set(...this.get());
|
|
1305
|
+
return this._cloneIntoMeta(to);
|
|
1306
|
+
}
|
|
1238
1307
|
process(view, offset) {
|
|
1239
1308
|
for (let i = 0; i < 16; i++, offset += 4)
|
|
1240
1309
|
SHA256_W[i] = view.getUint32(offset, false);
|
|
@@ -1274,23 +1343,14 @@ var SHA2_32B = class extends HashMD {
|
|
|
1274
1343
|
clean(SHA256_W);
|
|
1275
1344
|
}
|
|
1276
1345
|
destroy() {
|
|
1346
|
+
this.destroyed = true;
|
|
1277
1347
|
this.set(0, 0, 0, 0, 0, 0, 0, 0);
|
|
1278
1348
|
clean(this.buffer);
|
|
1279
1349
|
}
|
|
1280
1350
|
};
|
|
1281
1351
|
var _SHA256 = class extends SHA2_32B {
|
|
1282
|
-
// We cannot use array here since array allows indexing by variable
|
|
1283
|
-
// which means optimizer/compiler cannot use registers.
|
|
1284
|
-
A = SHA256_IV[0] | 0;
|
|
1285
|
-
B = SHA256_IV[1] | 0;
|
|
1286
|
-
C = SHA256_IV[2] | 0;
|
|
1287
|
-
D = SHA256_IV[3] | 0;
|
|
1288
|
-
E = SHA256_IV[4] | 0;
|
|
1289
|
-
F = SHA256_IV[5] | 0;
|
|
1290
|
-
G = SHA256_IV[6] | 0;
|
|
1291
|
-
H = SHA256_IV[7] | 0;
|
|
1292
1352
|
constructor() {
|
|
1293
|
-
super(32);
|
|
1353
|
+
super(32, SHA256_IV);
|
|
1294
1354
|
}
|
|
1295
1355
|
};
|
|
1296
1356
|
var sha256 = /* @__PURE__ */ createHasher(
|
|
@@ -1329,14 +1389,14 @@ function buildSaltedPreimageMessage(xonly, salt) {
|
|
|
1329
1389
|
}
|
|
1330
1390
|
var PREIMAGE_INDEX = 0;
|
|
1331
1391
|
function isPerArtifactDescriptor(descriptor) {
|
|
1332
|
-
return
|
|
1392
|
+
return chunkFUW3OM5X_cjs.parseHDDescriptor(descriptor) !== null;
|
|
1333
1393
|
}
|
|
1334
1394
|
async function provisionDescriptor(wallet) {
|
|
1335
1395
|
const allocated = isHDAllocationCapable(wallet) ? await wallet.getNextSigningDescriptor() : void 0;
|
|
1336
|
-
return allocated ?? await
|
|
1396
|
+
return allocated ?? await chunkFUW3OM5X_cjs.identityDescriptor(wallet.identity);
|
|
1337
1397
|
}
|
|
1338
1398
|
async function provisionRefundKey(wallet) {
|
|
1339
|
-
const descriptor = await
|
|
1399
|
+
const descriptor = await chunkFUW3OM5X_cjs.identityDescriptor(wallet.identity);
|
|
1340
1400
|
const signer = await contractSigner(wallet, descriptor);
|
|
1341
1401
|
const pubkey = await signer.xOnlyPublicKey();
|
|
1342
1402
|
const identityPubkey = await wallet.identity.xOnlyPublicKey();
|
|
@@ -1346,7 +1406,7 @@ async function provisionRefundKey(wallet) {
|
|
|
1346
1406
|
);
|
|
1347
1407
|
}
|
|
1348
1408
|
const address = await wallet.getAddress();
|
|
1349
|
-
const { pkScript } =
|
|
1409
|
+
const { pkScript } = chunkDAYCCIRO_cjs.ArkAddress.decode(address);
|
|
1350
1410
|
return { descriptor, pubkey, pkScript, address };
|
|
1351
1411
|
}
|
|
1352
1412
|
async function provisionClaimSecret(wallet, opts = {}) {
|
|
@@ -1392,7 +1452,7 @@ async function contractSigner(wallet, descriptor) {
|
|
|
1392
1452
|
const signer = isHDWalletCapable(wallet) ? await wallet.signerForDescriptor(descriptor) : wallet.identity;
|
|
1393
1453
|
let expected;
|
|
1394
1454
|
try {
|
|
1395
|
-
expected =
|
|
1455
|
+
expected = chunkFUW3OM5X_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
1396
1456
|
} catch (cause) {
|
|
1397
1457
|
throw new ForeignDescriptorError(descriptor, { cause });
|
|
1398
1458
|
}
|
|
@@ -1611,14 +1671,14 @@ var RestDelegateProvider = class {
|
|
|
1611
1671
|
*/
|
|
1612
1672
|
async delegate(intent, forfeitTxs, options) {
|
|
1613
1673
|
const url = `${this.url}/v1/delegate`;
|
|
1614
|
-
const response = await
|
|
1674
|
+
const response = await chunkDAYCCIRO_cjs.baseFetch(url, {
|
|
1615
1675
|
method: "POST",
|
|
1616
1676
|
headers: {
|
|
1617
1677
|
"Content-Type": "application/json"
|
|
1618
1678
|
},
|
|
1619
1679
|
body: JSON.stringify({
|
|
1620
1680
|
intent: {
|
|
1621
|
-
message:
|
|
1681
|
+
message: chunkDAYCCIRO_cjs.Intent.encodeMessage(intent.message),
|
|
1622
1682
|
proof: intent.proof
|
|
1623
1683
|
},
|
|
1624
1684
|
forfeit_txs: forfeitTxs,
|
|
@@ -1638,7 +1698,7 @@ var RestDelegateProvider = class {
|
|
|
1638
1698
|
*/
|
|
1639
1699
|
async getDelegateInfo() {
|
|
1640
1700
|
const url = `${this.url}/v1/delegator/info`;
|
|
1641
|
-
const response = await
|
|
1701
|
+
const response = await chunkDAYCCIRO_cjs.rateGate.runHttp(url, () => chunkDAYCCIRO_cjs.baseFetch(url));
|
|
1642
1702
|
if (!response.ok) {
|
|
1643
1703
|
const errorText2 = await response.text();
|
|
1644
1704
|
throw new Error(`Failed to get delegate info: ${errorText2}`);
|
|
@@ -1663,7 +1723,7 @@ var ESPLORA_URL = {
|
|
|
1663
1723
|
regtest: "http://localhost:3000/api"
|
|
1664
1724
|
};
|
|
1665
1725
|
var EsploraProvider = class {
|
|
1666
|
-
constructor(baseUrl = ESPLORA_URL[
|
|
1726
|
+
constructor(baseUrl = ESPLORA_URL[chunkDAYCCIRO_cjs.DEFAULT_NETWORK_NAME], opts) {
|
|
1667
1727
|
this.baseUrl = baseUrl;
|
|
1668
1728
|
this.pollingInterval = opts?.pollingInterval ?? 15e3;
|
|
1669
1729
|
this.forcePolling = opts?.forcePolling ?? false;
|
|
@@ -1682,14 +1742,14 @@ var EsploraProvider = class {
|
|
|
1682
1742
|
*/
|
|
1683
1743
|
addressWatches = /* @__PURE__ */ new Map();
|
|
1684
1744
|
async getCoins(address) {
|
|
1685
|
-
const response = await
|
|
1745
|
+
const response = await chunkDAYCCIRO_cjs.baseFetch(`${this.baseUrl}/address/${address}/utxo`);
|
|
1686
1746
|
if (!response.ok) {
|
|
1687
1747
|
throw new Error(`Failed to fetch UTXOs: ${response.statusText}`);
|
|
1688
1748
|
}
|
|
1689
1749
|
return response.json();
|
|
1690
1750
|
}
|
|
1691
1751
|
async getFeeRate() {
|
|
1692
|
-
const response = await
|
|
1752
|
+
const response = await chunkDAYCCIRO_cjs.baseFetch(`${this.baseUrl}/fee-estimates`);
|
|
1693
1753
|
if (response.status === 404) {
|
|
1694
1754
|
return void 0;
|
|
1695
1755
|
}
|
|
@@ -1710,7 +1770,7 @@ var EsploraProvider = class {
|
|
|
1710
1770
|
}
|
|
1711
1771
|
}
|
|
1712
1772
|
async getTxOutspends(txid) {
|
|
1713
|
-
const response = await
|
|
1773
|
+
const response = await chunkDAYCCIRO_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/outspends`);
|
|
1714
1774
|
if (!response.ok) {
|
|
1715
1775
|
const error = await response.text();
|
|
1716
1776
|
throw new Error(`Failed to get transaction outspends: ${error}`);
|
|
@@ -1718,7 +1778,7 @@ var EsploraProvider = class {
|
|
|
1718
1778
|
return response.json();
|
|
1719
1779
|
}
|
|
1720
1780
|
async getTransactions(address) {
|
|
1721
|
-
const response = await
|
|
1781
|
+
const response = await chunkDAYCCIRO_cjs.baseFetch(`${this.baseUrl}/address/${address}/txs`);
|
|
1722
1782
|
if (!response.ok) {
|
|
1723
1783
|
const error = await response.text();
|
|
1724
1784
|
throw new Error(`Failed to get transactions: ${error}`);
|
|
@@ -1731,14 +1791,14 @@ var EsploraProvider = class {
|
|
|
1731
1791
|
* usable as a change probe for the polling fallback.
|
|
1732
1792
|
*/
|
|
1733
1793
|
async getAddressStats(address) {
|
|
1734
|
-
const response = await
|
|
1794
|
+
const response = await chunkDAYCCIRO_cjs.baseFetch(`${this.baseUrl}/address/${address}`);
|
|
1735
1795
|
if (!response.ok) {
|
|
1736
1796
|
throw new Error(`Failed to get address stats: ${response.statusText}`);
|
|
1737
1797
|
}
|
|
1738
1798
|
return response.json();
|
|
1739
1799
|
}
|
|
1740
1800
|
async getRawTransaction(txid) {
|
|
1741
|
-
const response = await
|
|
1801
|
+
const response = await chunkDAYCCIRO_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/hex`);
|
|
1742
1802
|
if (!response.ok) {
|
|
1743
1803
|
const error = await response.text();
|
|
1744
1804
|
throw new Error(`Failed to get raw transaction ${txid}: ${error}`);
|
|
@@ -1746,7 +1806,7 @@ var EsploraProvider = class {
|
|
|
1746
1806
|
return base.hex.decode((await response.text()).trim());
|
|
1747
1807
|
}
|
|
1748
1808
|
async getTxStatus(txid) {
|
|
1749
|
-
const txresponse = await
|
|
1809
|
+
const txresponse = await chunkDAYCCIRO_cjs.baseFetch(`${this.baseUrl}/tx/${txid}`);
|
|
1750
1810
|
if (!txresponse.ok) {
|
|
1751
1811
|
throw new Error(txresponse.statusText);
|
|
1752
1812
|
}
|
|
@@ -1754,7 +1814,7 @@ var EsploraProvider = class {
|
|
|
1754
1814
|
if (!tx.status.confirmed) {
|
|
1755
1815
|
return { confirmed: false };
|
|
1756
1816
|
}
|
|
1757
|
-
const response = await
|
|
1817
|
+
const response = await chunkDAYCCIRO_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/status`);
|
|
1758
1818
|
if (!response.ok) {
|
|
1759
1819
|
throw new Error(`Failed to get transaction status: ${response.statusText}`);
|
|
1760
1820
|
}
|
|
@@ -2038,9 +2098,9 @@ var EsploraProvider = class {
|
|
|
2038
2098
|
return { subscribers, teardown, started };
|
|
2039
2099
|
}
|
|
2040
2100
|
async getChainTip() {
|
|
2041
|
-
let tipBlocks = await
|
|
2101
|
+
let tipBlocks = await chunkDAYCCIRO_cjs.baseFetch(`${this.baseUrl}/blocks`);
|
|
2042
2102
|
if (tipBlocks.status === 404) {
|
|
2043
|
-
tipBlocks = await
|
|
2103
|
+
tipBlocks = await chunkDAYCCIRO_cjs.baseFetch(`${this.baseUrl}/v1/blocks`);
|
|
2044
2104
|
}
|
|
2045
2105
|
if (!tipBlocks.ok) {
|
|
2046
2106
|
throw new Error(`Failed to get chain tip: ${tipBlocks.statusText}`);
|
|
@@ -2062,7 +2122,7 @@ var EsploraProvider = class {
|
|
|
2062
2122
|
};
|
|
2063
2123
|
}
|
|
2064
2124
|
async broadcastPackage(parent, child) {
|
|
2065
|
-
const response = await
|
|
2125
|
+
const response = await chunkDAYCCIRO_cjs.baseFetch(`${this.baseUrl}/txs/package`, {
|
|
2066
2126
|
method: "POST",
|
|
2067
2127
|
headers: {
|
|
2068
2128
|
"Content-Type": "application/json"
|
|
@@ -2078,7 +2138,7 @@ var EsploraProvider = class {
|
|
|
2078
2138
|
return result;
|
|
2079
2139
|
}
|
|
2080
2140
|
async broadcastTx(tx) {
|
|
2081
|
-
const response = await
|
|
2141
|
+
const response = await chunkDAYCCIRO_cjs.baseFetch(`${this.baseUrl}/tx`, {
|
|
2082
2142
|
method: "POST",
|
|
2083
2143
|
headers: {
|
|
2084
2144
|
"Content-Type": "text/plain"
|
|
@@ -2261,7 +2321,7 @@ function findP2AOutput(tx) {
|
|
|
2261
2321
|
var CHILD_DUST_AMOUNT = 546;
|
|
2262
2322
|
function buildAnchorChild(params) {
|
|
2263
2323
|
const { parent, feeRate, fundingCoins, changeAddress, tapInternalKey, network } = params;
|
|
2264
|
-
const child = new
|
|
2324
|
+
const child = new chunkDAYCCIRO_cjs.Transaction({ version: 3, allowLegacyWitnessUtxo: true });
|
|
2265
2325
|
child.addInput(findP2AOutput(parent));
|
|
2266
2326
|
const estimator = TxWeightEstimator.create().addP2AInput();
|
|
2267
2327
|
for (const _ of fundingCoins) {
|
|
@@ -2309,7 +2369,7 @@ function buildForfeitTx(inputs, forfeitPkScript, txLocktime) {
|
|
|
2309
2369
|
);
|
|
2310
2370
|
}
|
|
2311
2371
|
function buildForfeitTxWithOutput(inputs, output, txLocktime) {
|
|
2312
|
-
const tx = new
|
|
2372
|
+
const tx = new chunkDAYCCIRO_cjs.Transaction({
|
|
2313
2373
|
version: 3,
|
|
2314
2374
|
lockTime: txLocktime
|
|
2315
2375
|
});
|
|
@@ -2336,7 +2396,7 @@ function validateConnectorsTxGraph(settlementTxB64, connectorsGraph) {
|
|
|
2336
2396
|
connectorsGraph.validate();
|
|
2337
2397
|
if (connectorsGraph.root.inputsLength !== 1) throw ErrNumberOfInputs;
|
|
2338
2398
|
const rootInput = connectorsGraph.root.getInput(0);
|
|
2339
|
-
const settlementTx =
|
|
2399
|
+
const settlementTx = chunkDAYCCIRO_cjs.Transaction.fromPSBT(base.base64.decode(settlementTxB64));
|
|
2340
2400
|
if (settlementTx.outputsLength <= BATCH_OUTPUT_CONNECTORS_INDEX)
|
|
2341
2401
|
throw ErrInvalidSettlementTxOutputs;
|
|
2342
2402
|
const expectedRootTxid = settlementTx.id;
|
|
@@ -2385,7 +2445,7 @@ function validateVtxoTxGraph(graph, roundTransaction, sweepTapTreeRoot) {
|
|
|
2385
2445
|
if (previousScriptKey.length !== 32) {
|
|
2386
2446
|
throw new Error(`parent output ${childIndex} has invalid script`);
|
|
2387
2447
|
}
|
|
2388
|
-
const cosigners =
|
|
2448
|
+
const cosigners = chunkDAYCCIRO_cjs.getArkPsbtFields(child.root, 0, chunkDAYCCIRO_cjs.CosignerPublicKey);
|
|
2389
2449
|
if (cosigners.length === 0) {
|
|
2390
2450
|
throw ErrMissingCosignersPublicKeys;
|
|
2391
2451
|
}
|
|
@@ -2443,7 +2503,7 @@ var EmulatorPacket = class _EmulatorPacket {
|
|
|
2443
2503
|
return new _EmulatorPacket(entries);
|
|
2444
2504
|
}
|
|
2445
2505
|
static fromBytes(data) {
|
|
2446
|
-
const reader = new
|
|
2506
|
+
const reader = new chunkSJPPBR2V_cjs.BufferReader(data);
|
|
2447
2507
|
const entryCount = reader.readCompactSize();
|
|
2448
2508
|
const entries = [];
|
|
2449
2509
|
for (let i = 0; i < entryCount; i++) {
|
|
@@ -2461,7 +2521,7 @@ var EmulatorPacket = class _EmulatorPacket {
|
|
|
2461
2521
|
return _EmulatorPacket.PACKET_TYPE;
|
|
2462
2522
|
}
|
|
2463
2523
|
serialize() {
|
|
2464
|
-
const writer = new
|
|
2524
|
+
const writer = new chunkSJPPBR2V_cjs.BufferWriter();
|
|
2465
2525
|
writer.writeCompactSize(this.entries.length);
|
|
2466
2526
|
for (const entry of this.entries) {
|
|
2467
2527
|
writer.writeUint16LE(entry.vin);
|
|
@@ -2548,7 +2608,7 @@ var Extension = class _Extension {
|
|
|
2548
2608
|
`expected magic prefix ${base.hex.encode(ARKADE_MAGIC)}, got ${base.hex.encode(payload.slice(0, Math.min(payload.length, ARKADE_MAGIC.length)))}`
|
|
2549
2609
|
);
|
|
2550
2610
|
}
|
|
2551
|
-
const reader = new
|
|
2611
|
+
const reader = new chunkSJPPBR2V_cjs.BufferReader(payload.slice(ARKADE_MAGIC.length));
|
|
2552
2612
|
const packets = [];
|
|
2553
2613
|
while (reader.remaining() > 0) {
|
|
2554
2614
|
const packetType = reader.readByte();
|
|
@@ -2622,7 +2682,7 @@ var Extension = class _Extension {
|
|
|
2622
2682
|
*/
|
|
2623
2683
|
getAssetPacket() {
|
|
2624
2684
|
for (const p of this.packets) {
|
|
2625
|
-
if (p instanceof
|
|
2685
|
+
if (p instanceof chunkSJPPBR2V_cjs.Packet) {
|
|
2626
2686
|
return p;
|
|
2627
2687
|
}
|
|
2628
2688
|
}
|
|
@@ -2660,8 +2720,8 @@ var Extension = class _Extension {
|
|
|
2660
2720
|
};
|
|
2661
2721
|
function parsePacket(packetType, data) {
|
|
2662
2722
|
switch (packetType) {
|
|
2663
|
-
case
|
|
2664
|
-
return
|
|
2723
|
+
case chunkSJPPBR2V_cjs.Packet.PACKET_TYPE:
|
|
2724
|
+
return chunkSJPPBR2V_cjs.Packet.fromBytes(data);
|
|
2665
2725
|
case EmulatorPacket.PACKET_TYPE:
|
|
2666
2726
|
return EmulatorPacket.fromBytes(data);
|
|
2667
2727
|
default:
|
|
@@ -2708,22 +2768,22 @@ function buildOpReturnScript(data) {
|
|
|
2708
2768
|
}
|
|
2709
2769
|
return script;
|
|
2710
2770
|
}
|
|
2711
|
-
var ErrOffchainOutputNotFound = (address) => new
|
|
2712
|
-
var ErrInvalidAssetOutputAmount = (got, want, assetId) => new
|
|
2771
|
+
var ErrOffchainOutputNotFound = (address) => new chunkDAYCCIRO_cjs.ServerResponseMismatchError(`offchain send output not found: ${address}`);
|
|
2772
|
+
var ErrInvalidAssetOutputAmount = (got, want, assetId) => new chunkDAYCCIRO_cjs.ServerResponseMismatchError(
|
|
2713
2773
|
`invalid asset output amount for ${assetId}: got ${got}, want ${want}`
|
|
2714
2774
|
);
|
|
2715
|
-
var ErrAssetGroupNotFound = (assetId) => new
|
|
2716
|
-
var ErrAssetOutputNotFound = (assetId, outputIndex) => new
|
|
2775
|
+
var ErrAssetGroupNotFound = (assetId) => new chunkDAYCCIRO_cjs.ServerResponseMismatchError(`asset group not found in batch leaf: ${assetId}`);
|
|
2776
|
+
var ErrAssetOutputNotFound = (assetId, outputIndex) => new chunkDAYCCIRO_cjs.ServerResponseMismatchError(
|
|
2717
2777
|
`asset output not found in asset group ${assetId} at index ${outputIndex}`
|
|
2718
2778
|
);
|
|
2719
|
-
var ErrOnchainOutputNotFound = (address) => new
|
|
2720
|
-
var ErrUnvalidatedOffchainOutput = (address) => new
|
|
2779
|
+
var ErrOnchainOutputNotFound = (address) => new chunkDAYCCIRO_cjs.ServerResponseMismatchError(`onchain output not found: ${address}`);
|
|
2780
|
+
var ErrUnvalidatedOffchainOutput = (address) => new chunkDAYCCIRO_cjs.ServerResponseMismatchError(
|
|
2721
2781
|
`offchain output ${address} cannot be validated: virtual output tree signing did not run`
|
|
2722
2782
|
);
|
|
2723
|
-
var ErrIntentOutputNotFound = (index, kind) => new
|
|
2783
|
+
var ErrIntentOutputNotFound = (index, kind) => new chunkDAYCCIRO_cjs.ServerResponseMismatchError(
|
|
2724
2784
|
`${kind} output ${index} of the intent proof is not present in what the server built`
|
|
2725
2785
|
);
|
|
2726
|
-
var ErrUnvalidatedIntentOutput = (index) => new
|
|
2786
|
+
var ErrUnvalidatedIntentOutput = (index) => new chunkDAYCCIRO_cjs.ServerResponseMismatchError(
|
|
2727
2787
|
`offchain output ${index} of the intent proof cannot be validated: virtual output tree signing did not run`
|
|
2728
2788
|
);
|
|
2729
2789
|
var ErrInvalidOnchainOutputAmount = (address) => new Error(`invalid onchain output amount: ${address}`);
|
|
@@ -2732,7 +2792,7 @@ var ErrInvalidOffchainOutputAmount = (address) => new Error(`invalid offchain ou
|
|
|
2732
2792
|
function assertFinalCommitmentMatchesValidated(finalCommitmentTx, validatedCommitmentTxid, context) {
|
|
2733
2793
|
if (!validatedCommitmentTxid) return;
|
|
2734
2794
|
if (finalCommitmentTx.id === validatedCommitmentTxid) return;
|
|
2735
|
-
throw new
|
|
2795
|
+
throw new chunkDAYCCIRO_cjs.ServerResponseMismatchError(
|
|
2736
2796
|
`${context}: finalization commitment tx ${finalCommitmentTx.id} differs from the validated commitment tx ${validatedCommitmentTxid}`
|
|
2737
2797
|
);
|
|
2738
2798
|
}
|
|
@@ -2742,7 +2802,7 @@ function validateBatchRecipients(commitmentTx, vtxoTreeLeaves, recipients, netwo
|
|
|
2742
2802
|
for (const recipient of recipients) {
|
|
2743
2803
|
let arkAddress;
|
|
2744
2804
|
try {
|
|
2745
|
-
arkAddress =
|
|
2805
|
+
arkAddress = chunkDAYCCIRO_cjs.ArkAddress.decode(recipient.address);
|
|
2746
2806
|
} catch {
|
|
2747
2807
|
validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
|
|
2748
2808
|
continue;
|
|
@@ -2754,7 +2814,7 @@ function validateBatchRecipientsWithoutTree(commitmentTx, recipients, network) {
|
|
|
2754
2814
|
const usedOnchainOutputs = /* @__PURE__ */ new Set();
|
|
2755
2815
|
for (const recipient of recipients) {
|
|
2756
2816
|
try {
|
|
2757
|
-
|
|
2817
|
+
chunkDAYCCIRO_cjs.ArkAddress.decode(recipient.address);
|
|
2758
2818
|
} catch {
|
|
2759
2819
|
validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
|
|
2760
2820
|
continue;
|
|
@@ -2763,7 +2823,7 @@ function validateBatchRecipientsWithoutTree(commitmentTx, recipients, network) {
|
|
|
2763
2823
|
}
|
|
2764
2824
|
}
|
|
2765
2825
|
function declaredIntentOutputs(signedProof, onchainOutputIndexes) {
|
|
2766
|
-
const proof =
|
|
2826
|
+
const proof = chunkDAYCCIRO_cjs.Transaction.fromPSBT(base.base64.decode(signedProof));
|
|
2767
2827
|
const onchain = new Set(onchainOutputIndexes);
|
|
2768
2828
|
const declared = [];
|
|
2769
2829
|
for (let i = 0; i < proof.outputsLength; i++) {
|
|
@@ -3055,7 +3115,7 @@ function assetMintResolver() {
|
|
|
3055
3115
|
if (!tx.assets?.length || !tx.key.arkTxid) return void 0;
|
|
3056
3116
|
const minted = tx.assets.filter((a) => {
|
|
3057
3117
|
try {
|
|
3058
|
-
return base.hex.encode(
|
|
3118
|
+
return base.hex.encode(chunkSJPPBR2V_cjs.AssetId.fromString(a.assetId).txid) === tx.key.arkTxid;
|
|
3059
3119
|
} catch {
|
|
3060
3120
|
return false;
|
|
3061
3121
|
}
|
|
@@ -3131,7 +3191,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
3131
3191
|
const existing = inputsByAssetId.get(asset.assetId);
|
|
3132
3192
|
inputsByAssetId.set(asset.assetId, [
|
|
3133
3193
|
...existing ?? [],
|
|
3134
|
-
|
|
3194
|
+
chunkSJPPBR2V_cjs.AssetInput.create(inputIndex, asset.amount)
|
|
3135
3195
|
]);
|
|
3136
3196
|
}
|
|
3137
3197
|
}
|
|
@@ -3143,7 +3203,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
3143
3203
|
const existing = outputsByAssetId.get(asset.assetId);
|
|
3144
3204
|
outputsByAssetId.set(asset.assetId, [
|
|
3145
3205
|
...existing ?? [],
|
|
3146
|
-
|
|
3206
|
+
chunkSJPPBR2V_cjs.AssetOutput.create(outputIndex, asset.amount)
|
|
3147
3207
|
]);
|
|
3148
3208
|
}
|
|
3149
3209
|
}
|
|
@@ -3154,7 +3214,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
3154
3214
|
const existing = outputsByAssetId.get(asset.assetId);
|
|
3155
3215
|
outputsByAssetId.set(asset.assetId, [
|
|
3156
3216
|
...existing ?? [],
|
|
3157
|
-
|
|
3217
|
+
chunkSJPPBR2V_cjs.AssetOutput.create(outputIndex, asset.amount)
|
|
3158
3218
|
]);
|
|
3159
3219
|
}
|
|
3160
3220
|
}
|
|
@@ -3163,11 +3223,11 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
|
|
|
3163
3223
|
for (const assetIdStr of allAssetIds) {
|
|
3164
3224
|
const inputs = inputsByAssetId.get(assetIdStr);
|
|
3165
3225
|
const outputs = outputsByAssetId.get(assetIdStr);
|
|
3166
|
-
const assetId =
|
|
3167
|
-
const group =
|
|
3226
|
+
const assetId = chunkSJPPBR2V_cjs.AssetId.fromString(assetIdStr);
|
|
3227
|
+
const group = chunkSJPPBR2V_cjs.AssetGroup.create(assetId, null, inputs ?? [], outputs ?? [], []);
|
|
3168
3228
|
groups.push(group);
|
|
3169
3229
|
}
|
|
3170
|
-
return
|
|
3230
|
+
return chunkSJPPBR2V_cjs.Packet.create(groups);
|
|
3171
3231
|
}
|
|
3172
3232
|
function selectCoinsWithAsset(coins, assetId, requiredAmount) {
|
|
3173
3233
|
const coinsWithAsset = coins.filter((coin) => coin.assets?.some((a) => a.assetId === assetId));
|
|
@@ -3204,7 +3264,7 @@ function selectedCoinsToAssetInputs(selectedCoins) {
|
|
|
3204
3264
|
}
|
|
3205
3265
|
function toXOnlySignerHex(pubkeyHex) {
|
|
3206
3266
|
const bytes = base.hex.decode(pubkeyHex);
|
|
3207
|
-
if (bytes.length === 32 || bytes.length === 33) return base.hex.encode(
|
|
3267
|
+
if (bytes.length === 32 || bytes.length === 33) return base.hex.encode(chunkFUW3OM5X_cjs.toXOnly(bytes, "signer key"));
|
|
3208
3268
|
throw new Error(`invalid signer pubkey length: expected 32 or 33 bytes, got ${bytes.length}`);
|
|
3209
3269
|
}
|
|
3210
3270
|
function signerSetFromInfo(info) {
|
|
@@ -3251,13 +3311,13 @@ var toTimelock = (value) => ({
|
|
|
3251
3311
|
var toSeconds = (t) => t.type === "seconds" ? t.value : t.value * NOMINAL_BLOCK_SECONDS;
|
|
3252
3312
|
function assertTimelockInPolicy(timelock, policy, label, overrideOption) {
|
|
3253
3313
|
if (policy.requireSeconds && timelock.type === "blocks") {
|
|
3254
|
-
throw new
|
|
3314
|
+
throw new chunkDAYCCIRO_cjs.ServerResponseMismatchError(
|
|
3255
3315
|
`${label} rejected: block-typed timelocks are not accepted (got ${timelock.value})`
|
|
3256
3316
|
);
|
|
3257
3317
|
}
|
|
3258
3318
|
const seconds = toSeconds(timelock);
|
|
3259
3319
|
if (seconds < policy.minSeconds) {
|
|
3260
|
-
throw new
|
|
3320
|
+
throw new chunkDAYCCIRO_cjs.ServerResponseMismatchError(
|
|
3261
3321
|
`${label} rejected: ${timelock.value} ${timelock.type} is below the ${policy.minSeconds}s floor; pass ${overrideOption}: ${seconds}n to Wallet.create to lower it`
|
|
3262
3322
|
);
|
|
3263
3323
|
}
|
|
@@ -3278,7 +3338,7 @@ function resolveBatchExpiryPolicy(network, overrides) {
|
|
|
3278
3338
|
}
|
|
3279
3339
|
function assertValidBatchExpiry(batchExpiry, policy) {
|
|
3280
3340
|
if (policy.advertisedVtxoTreeExpiry !== void 0 && batchExpiry !== policy.advertisedVtxoTreeExpiry) {
|
|
3281
|
-
throw new
|
|
3341
|
+
throw new chunkDAYCCIRO_cjs.ServerResponseMismatchError(
|
|
3282
3342
|
`batch expiry rejected: ${batchExpiry} does not match the advertised vtxoTreeExpiry ${policy.advertisedVtxoTreeExpiry}`
|
|
3283
3343
|
);
|
|
3284
3344
|
}
|
|
@@ -3308,21 +3368,21 @@ function resolveCheckpointExitDelayPolicy(network, overrides) {
|
|
|
3308
3368
|
function assertValidServerUnrollScript(checkpointTapscript, policy) {
|
|
3309
3369
|
let script;
|
|
3310
3370
|
try {
|
|
3311
|
-
script =
|
|
3371
|
+
script = chunkDAYCCIRO_cjs.CSVMultisigTapscript.decode(base.hex.decode(checkpointTapscript));
|
|
3312
3372
|
} catch (e) {
|
|
3313
|
-
throw new
|
|
3373
|
+
throw new chunkDAYCCIRO_cjs.ServerResponseMismatchError(
|
|
3314
3374
|
`checkpoint exit delay rejected: invalid checkpointTapscript from server (${e instanceof Error ? e.message : String(e)})`
|
|
3315
3375
|
);
|
|
3316
3376
|
}
|
|
3317
3377
|
if (policy.advertisedForfeitPubkey !== void 0) {
|
|
3318
3378
|
const { pubkeys } = script.params;
|
|
3319
3379
|
if (pubkeys.length !== 1) {
|
|
3320
|
-
throw new
|
|
3380
|
+
throw new chunkDAYCCIRO_cjs.ServerResponseMismatchError(
|
|
3321
3381
|
`checkpoint exit delay rejected: checkpointTapscript must commit to exactly one pubkey, got ${pubkeys.length} [${pubkeys.map(base.hex.encode).join(", ")}]`
|
|
3322
3382
|
);
|
|
3323
3383
|
}
|
|
3324
3384
|
if (!utils_js.equalBytes(pubkeys[0], policy.advertisedForfeitPubkey)) {
|
|
3325
|
-
throw new
|
|
3385
|
+
throw new chunkDAYCCIRO_cjs.ServerResponseMismatchError(
|
|
3326
3386
|
`checkpoint exit delay rejected: checkpointTapscript pubkey ${base.hex.encode(pubkeys[0])} does not match the advertised forfeitPubkey ${base.hex.encode(policy.advertisedForfeitPubkey)}`
|
|
3327
3387
|
);
|
|
3328
3388
|
}
|
|
@@ -3366,8 +3426,8 @@ function buildOffchainTx(inputs, outputs, serverUnrollScript) {
|
|
|
3366
3426
|
function buildVirtualTx(inputs, outputs) {
|
|
3367
3427
|
let lockTime = 0n;
|
|
3368
3428
|
for (const input of inputs) {
|
|
3369
|
-
const tapscript =
|
|
3370
|
-
if (
|
|
3429
|
+
const tapscript = chunkDAYCCIRO_cjs.decodeTapscript(chunkDAYCCIRO_cjs.scriptFromTapLeafScript(input.tapLeafScript));
|
|
3430
|
+
if (chunkDAYCCIRO_cjs.CLTVMultisigTapscript.is(tapscript)) {
|
|
3371
3431
|
if (lockTime !== 0n) {
|
|
3372
3432
|
if (isSeconds(lockTime) !== isSeconds(tapscript.params.absoluteTimelock)) {
|
|
3373
3433
|
throw new Error("cannot mix seconds and blocks locktime");
|
|
@@ -3378,7 +3438,7 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
3378
3438
|
}
|
|
3379
3439
|
}
|
|
3380
3440
|
}
|
|
3381
|
-
const tx = new
|
|
3441
|
+
const tx = new chunkDAYCCIRO_cjs.Transaction({
|
|
3382
3442
|
version: 3,
|
|
3383
3443
|
lockTime: Number(lockTime)
|
|
3384
3444
|
});
|
|
@@ -3388,12 +3448,12 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
3388
3448
|
index: input.vout,
|
|
3389
3449
|
sequence: lockTime ? btcSigner.DEFAULT_SEQUENCE - 1 : void 0,
|
|
3390
3450
|
witnessUtxo: {
|
|
3391
|
-
script:
|
|
3451
|
+
script: chunkDAYCCIRO_cjs.VtxoScript.decode(input.tapTree).pkScript,
|
|
3392
3452
|
amount: BigInt(input.value)
|
|
3393
3453
|
},
|
|
3394
3454
|
tapLeafScript: [input.tapLeafScript]
|
|
3395
3455
|
});
|
|
3396
|
-
|
|
3456
|
+
chunkDAYCCIRO_cjs.setArkPsbtField(tx, i, chunkDAYCCIRO_cjs.VtxoTaprootTree, input.tapTree);
|
|
3397
3457
|
}
|
|
3398
3458
|
for (const output of outputs) {
|
|
3399
3459
|
tx.addOutput(output);
|
|
@@ -3402,8 +3462,8 @@ function buildVirtualTx(inputs, outputs) {
|
|
|
3402
3462
|
return tx;
|
|
3403
3463
|
}
|
|
3404
3464
|
function buildCheckpointTx(vtxo, serverUnrollScript) {
|
|
3405
|
-
const collaborativeClosure =
|
|
3406
|
-
const checkpointVtxoScript = new
|
|
3465
|
+
const collaborativeClosure = chunkDAYCCIRO_cjs.decodeTapscript(chunkDAYCCIRO_cjs.scriptFromTapLeafScript(vtxo.tapLeafScript));
|
|
3466
|
+
const checkpointVtxoScript = new chunkDAYCCIRO_cjs.VtxoScript([
|
|
3407
3467
|
serverUnrollScript.script,
|
|
3408
3468
|
collaborativeClosure.script
|
|
3409
3469
|
]);
|
|
@@ -3479,7 +3539,7 @@ function verifyTapscriptSignatures(tx, inputIndex, requiredSigners, excludePubke
|
|
|
3479
3539
|
const sighashType = signature.length === 65 ? signature[64] : btcSigner.SigHash.DEFAULT;
|
|
3480
3540
|
const sig = signature.subarray(0, 64);
|
|
3481
3541
|
if (!allowedSighashTypes.includes(sighashType)) {
|
|
3482
|
-
const sighashName =
|
|
3542
|
+
const sighashName = chunkDAYCCIRO_cjs.formatSighash(sighashType);
|
|
3483
3543
|
throw new Error(
|
|
3484
3544
|
`Unallowed sighash type ${sighashName} for input ${inputIndex}, pubkey ${pubKeyHex}.`
|
|
3485
3545
|
);
|
|
@@ -3553,7 +3613,7 @@ function combineTapscriptSigs(signedTx, originalTx) {
|
|
|
3553
3613
|
}
|
|
3554
3614
|
function isValidArkAddress(address) {
|
|
3555
3615
|
try {
|
|
3556
|
-
|
|
3616
|
+
chunkDAYCCIRO_cjs.ArkAddress.decode(address);
|
|
3557
3617
|
return true;
|
|
3558
3618
|
} catch (e) {
|
|
3559
3619
|
return false;
|
|
@@ -3561,16 +3621,16 @@ function isValidArkAddress(address) {
|
|
|
3561
3621
|
}
|
|
3562
3622
|
function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, context) {
|
|
3563
3623
|
if (serverCheckpointTxs.length !== expectedCheckpoints.length) {
|
|
3564
|
-
throw new
|
|
3624
|
+
throw new chunkDAYCCIRO_cjs.ServerResponseMismatchError(
|
|
3565
3625
|
`${context} returned ${serverCheckpointTxs.length} checkpoints, expected ${expectedCheckpoints.length}`
|
|
3566
3626
|
);
|
|
3567
3627
|
}
|
|
3568
3628
|
const byTxid = new Map(expectedCheckpoints.map((c) => [c.id, c]));
|
|
3569
3629
|
return serverCheckpointTxs.map((encoded, index) => {
|
|
3570
|
-
const server =
|
|
3630
|
+
const server = chunkDAYCCIRO_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
|
|
3571
3631
|
const local = byTxid.get(server.id);
|
|
3572
3632
|
if (!local) {
|
|
3573
|
-
throw new
|
|
3633
|
+
throw new chunkDAYCCIRO_cjs.ServerResponseMismatchError(
|
|
3574
3634
|
`${context} checkpoint ${index} txid ${server.id} does not match any submitted checkpoint`
|
|
3575
3635
|
);
|
|
3576
3636
|
}
|
|
@@ -3580,14 +3640,14 @@ function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, contex
|
|
|
3580
3640
|
}
|
|
3581
3641
|
function assertSubmittedArkTxid(response, signedArkTx, context) {
|
|
3582
3642
|
if (response.arkTxid !== signedArkTx.id) {
|
|
3583
|
-
throw new
|
|
3643
|
+
throw new chunkDAYCCIRO_cjs.ServerResponseMismatchError(
|
|
3584
3644
|
`${context} returned ark txid ${response.arkTxid}, expected ${signedArkTx.id}`
|
|
3585
3645
|
);
|
|
3586
3646
|
}
|
|
3587
3647
|
if (response.finalArkTx === void 0) return;
|
|
3588
|
-
const finalTxid =
|
|
3648
|
+
const finalTxid = chunkDAYCCIRO_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx)).id;
|
|
3589
3649
|
if (finalTxid !== signedArkTx.id) {
|
|
3590
|
-
throw new
|
|
3650
|
+
throw new chunkDAYCCIRO_cjs.ServerResponseMismatchError(
|
|
3591
3651
|
`${context} returned final ark tx ${finalTxid}, expected ${signedArkTx.id}`
|
|
3592
3652
|
);
|
|
3593
3653
|
}
|
|
@@ -3599,20 +3659,20 @@ function assertServerSignedLeaf(serverTx, localTx, inputIndex, serverPubkeys, co
|
|
|
3599
3659
|
`${context}: input ${inputIndex} carries no spend leaf to verify the server signature against`
|
|
3600
3660
|
);
|
|
3601
3661
|
}
|
|
3602
|
-
const script =
|
|
3662
|
+
const script = chunkDAYCCIRO_cjs.scriptFromTapLeafScript(leaf);
|
|
3603
3663
|
let leafPubkeys;
|
|
3604
3664
|
try {
|
|
3605
|
-
leafPubkeys =
|
|
3606
|
-
(key) => base.hex.encode(
|
|
3665
|
+
leafPubkeys = chunkDAYCCIRO_cjs.decodeTapscript(script).params.pubkeys.map(
|
|
3666
|
+
(key) => base.hex.encode(chunkFUW3OM5X_cjs.toXOnly(key, "leaf key"))
|
|
3607
3667
|
);
|
|
3608
3668
|
} catch (error) {
|
|
3609
|
-
throw new
|
|
3669
|
+
throw new chunkDAYCCIRO_cjs.ServerResponseMismatchError(
|
|
3610
3670
|
`${context}: input ${inputIndex} spend leaf cannot be decoded (${error instanceof Error ? error.message : String(error)})`
|
|
3611
3671
|
);
|
|
3612
3672
|
}
|
|
3613
3673
|
const signer = leafPubkeys.find((key) => serverPubkeys.has(key));
|
|
3614
3674
|
if (!signer) {
|
|
3615
|
-
throw new
|
|
3675
|
+
throw new chunkDAYCCIRO_cjs.ServerResponseMismatchError(
|
|
3616
3676
|
`${context}: input ${inputIndex} spend leaf names no signer key the server advertises`
|
|
3617
3677
|
);
|
|
3618
3678
|
}
|
|
@@ -3626,7 +3686,7 @@ function assertServerSignedLeaf(serverTx, localTx, inputIndex, serverPubkeys, co
|
|
|
3626
3686
|
payment_js.tapLeafHash(script)
|
|
3627
3687
|
);
|
|
3628
3688
|
} catch (error) {
|
|
3629
|
-
throw new
|
|
3689
|
+
throw new chunkDAYCCIRO_cjs.ServerResponseMismatchError(
|
|
3630
3690
|
`${context}: input ${inputIndex} is not signed by the server on the leaf being spent (${error instanceof Error ? error.message : String(error)})`
|
|
3631
3691
|
);
|
|
3632
3692
|
}
|
|
@@ -3635,20 +3695,20 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
|
|
|
3635
3695
|
const byOutpoint = new Map(inputs.map((input) => [`${input.txid}:${input.vout}`, input]));
|
|
3636
3696
|
for (const [index, checkpoint] of checkpoints.entries()) {
|
|
3637
3697
|
if (checkpoint.inputsLength !== 1) {
|
|
3638
|
-
throw new
|
|
3698
|
+
throw new chunkDAYCCIRO_cjs.ServerResponseMismatchError(
|
|
3639
3699
|
`${context}: checkpoint ${index} spends ${checkpoint.inputsLength} inputs, expected 1`
|
|
3640
3700
|
);
|
|
3641
3701
|
}
|
|
3642
3702
|
const spent = checkpoint.getInput(0);
|
|
3643
3703
|
if (!spent.txid || spent.index === void 0) {
|
|
3644
|
-
throw new
|
|
3704
|
+
throw new chunkDAYCCIRO_cjs.ServerResponseMismatchError(
|
|
3645
3705
|
`${context}: checkpoint ${index} has no input outpoint`
|
|
3646
3706
|
);
|
|
3647
3707
|
}
|
|
3648
3708
|
const outpoint = `${base.hex.encode(spent.txid)}:${spent.index}`;
|
|
3649
3709
|
const input = byOutpoint.get(outpoint);
|
|
3650
3710
|
if (!input) {
|
|
3651
|
-
throw new
|
|
3711
|
+
throw new chunkDAYCCIRO_cjs.ServerResponseMismatchError(
|
|
3652
3712
|
`${context}: checkpoint ${index} spends ${outpoint}, which is not one of the requested virtual outputs`
|
|
3653
3713
|
);
|
|
3654
3714
|
}
|
|
@@ -3656,7 +3716,7 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
|
|
|
3656
3716
|
(unroll) => buildCheckpointTx(input, unroll).tx.id === checkpoint.id
|
|
3657
3717
|
);
|
|
3658
3718
|
if (!rebuilt) {
|
|
3659
|
-
throw new
|
|
3719
|
+
throw new chunkDAYCCIRO_cjs.ServerResponseMismatchError(
|
|
3660
3720
|
`${context}: checkpoint ${index} txid ${checkpoint.id} differs from the checkpoint built locally for ${outpoint}`
|
|
3661
3721
|
);
|
|
3662
3722
|
}
|
|
@@ -3682,9 +3742,9 @@ async function submitOffchainTx(provider, offchainTx, signer, hooks, options) {
|
|
|
3682
3742
|
const matched = matchServerCheckpoints(signedCheckpointTxs, offchainTx.checkpoints, "submitTx");
|
|
3683
3743
|
matched.forEach(({ server }, index) => {
|
|
3684
3744
|
try {
|
|
3685
|
-
|
|
3745
|
+
chunkDAYCCIRO_cjs.assertAllowedSighashTypes(server);
|
|
3686
3746
|
} catch (error) {
|
|
3687
|
-
throw new
|
|
3747
|
+
throw new chunkDAYCCIRO_cjs.ServerResponseMismatchError(
|
|
3688
3748
|
`submitTx checkpoint ${index}: ${error instanceof Error ? error.message : String(error)}`
|
|
3689
3749
|
);
|
|
3690
3750
|
}
|
|
@@ -3692,14 +3752,14 @@ async function submitOffchainTx(provider, offchainTx, signer, hooks, options) {
|
|
|
3692
3752
|
const verify = options?.verifyServerSignatures;
|
|
3693
3753
|
if (verify) {
|
|
3694
3754
|
if (response.finalArkTx === void 0) {
|
|
3695
|
-
throw new
|
|
3755
|
+
throw new chunkDAYCCIRO_cjs.ServerResponseMismatchError(
|
|
3696
3756
|
"submitTx: server returned no final ark tx to verify its signatures against"
|
|
3697
3757
|
);
|
|
3698
3758
|
}
|
|
3699
|
-
const finalArkTx =
|
|
3759
|
+
const finalArkTx = chunkDAYCCIRO_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx));
|
|
3700
3760
|
const serverPubkeys = new Set(
|
|
3701
3761
|
[verify.serverPubkey, ...verify.deprecatedServerPubkeys ?? []].map(
|
|
3702
|
-
(key) => base.hex.encode(
|
|
3762
|
+
(key) => base.hex.encode(chunkFUW3OM5X_cjs.toXOnly(key, "server key"))
|
|
3703
3763
|
)
|
|
3704
3764
|
);
|
|
3705
3765
|
for (let i = 0; i < offchainTx.arkTx.inputsLength; i++) {
|
|
@@ -3751,12 +3811,12 @@ function claimWithPreimageIdentity(identity, preimage) {
|
|
|
3751
3811
|
return {
|
|
3752
3812
|
...identity,
|
|
3753
3813
|
sign: async (tx, inputIndexes) => {
|
|
3754
|
-
const signed =
|
|
3814
|
+
const signed = chunkDAYCCIRO_cjs.Transaction.fromPSBT(
|
|
3755
3815
|
(await identity.sign(tx.clone(), inputIndexes)).toPSBT()
|
|
3756
3816
|
);
|
|
3757
3817
|
const indexes = inputIndexes ?? Array.from({ length: signed.inputsLength }, (_, i) => i);
|
|
3758
3818
|
for (const index of indexes) {
|
|
3759
|
-
|
|
3819
|
+
chunkDAYCCIRO_cjs.setArkPsbtField(signed, index, chunkDAYCCIRO_cjs.ConditionWitness, [preimage]);
|
|
3760
3820
|
}
|
|
3761
3821
|
return signed;
|
|
3762
3822
|
}
|
|
@@ -3951,7 +4011,7 @@ function extendCoinWithTapscript(boardingTapscript, utxo) {
|
|
|
3951
4011
|
};
|
|
3952
4012
|
}
|
|
3953
4013
|
function deriveContractTapscripts(contract) {
|
|
3954
|
-
const handler =
|
|
4014
|
+
const handler = chunkFUW3OM5X_cjs.contractHandlers.get(contract.type);
|
|
3955
4015
|
if (!handler) {
|
|
3956
4016
|
throw new Error(`No handler for contract type '${contract.type}'`);
|
|
3957
4017
|
}
|
|
@@ -4022,7 +4082,7 @@ function getRandomId() {
|
|
|
4022
4082
|
}
|
|
4023
4083
|
function isValidArkAddress2(address) {
|
|
4024
4084
|
try {
|
|
4025
|
-
|
|
4085
|
+
chunkDAYCCIRO_cjs.ArkAddress.decode(address);
|
|
4026
4086
|
return true;
|
|
4027
4087
|
} catch (e) {
|
|
4028
4088
|
return false;
|
|
@@ -4050,7 +4110,7 @@ function assertRecipientArkAddress(encoded, address, context) {
|
|
|
4050
4110
|
function assertTapTreeDerivesAddress(encoded, tapTree, address) {
|
|
4051
4111
|
let derived;
|
|
4052
4112
|
try {
|
|
4053
|
-
derived =
|
|
4113
|
+
derived = chunkDAYCCIRO_cjs.VtxoScript.decode(tapTree).pkScript;
|
|
4054
4114
|
} catch (e) {
|
|
4055
4115
|
throw new Error(
|
|
4056
4116
|
`Invalid tapTree for ${encoded}: ${e instanceof Error ? e.message : String(e)}`
|
|
@@ -4067,7 +4127,7 @@ function validateRecipients(recipients, dustAmount, context) {
|
|
|
4067
4127
|
for (const recipient of recipients) {
|
|
4068
4128
|
let address;
|
|
4069
4129
|
try {
|
|
4070
|
-
address =
|
|
4130
|
+
address = chunkDAYCCIRO_cjs.ArkAddress.decode(recipient.address);
|
|
4071
4131
|
} catch (e) {
|
|
4072
4132
|
throw new Error(`Invalid Arkade address: ${recipient.address}`);
|
|
4073
4133
|
}
|
|
@@ -4092,7 +4152,7 @@ function validateRecipients(recipients, dustAmount, context) {
|
|
|
4092
4152
|
|
|
4093
4153
|
// src/contracts/spendability.ts
|
|
4094
4154
|
function isContractGenericallySpendable(contract) {
|
|
4095
|
-
return
|
|
4155
|
+
return chunkFUW3OM5X_cjs.contractHandlers.get(contract.type)?.isGenericallySpendable?.(contract) === true;
|
|
4096
4156
|
}
|
|
4097
4157
|
function gatedContracts(contracts) {
|
|
4098
4158
|
const gated = /* @__PURE__ */ new Map();
|
|
@@ -4114,7 +4174,7 @@ function gateExclusion(gated) {
|
|
|
4114
4174
|
return (vtxo) => {
|
|
4115
4175
|
const type = gatedTypeOf(vtxo, gated);
|
|
4116
4176
|
if (type === void 0) return void 0;
|
|
4117
|
-
if (!
|
|
4177
|
+
if (!chunkFUW3OM5X_cjs.contractHandlers.has(type)) {
|
|
4118
4178
|
return `at ${vtxo.script} (contract type '${type}') has no handler registered in this build`;
|
|
4119
4179
|
}
|
|
4120
4180
|
return `at ${vtxo.script} (contract type '${type}') is not generically spendable`;
|
|
@@ -4150,7 +4210,7 @@ function selectPendingRecoveryOutpoints(contractsWithVtxos, signerSet, nowSecond
|
|
|
4150
4210
|
continue;
|
|
4151
4211
|
}
|
|
4152
4212
|
for (const v of vtxos) {
|
|
4153
|
-
if (!
|
|
4213
|
+
if (!chunkDAYCCIRO_cjs.isVtxoSpent(v) && !v.isSwept && !v.isUnrolled) {
|
|
4154
4214
|
out.add(`${v.txid}:${v.vout}`);
|
|
4155
4215
|
}
|
|
4156
4216
|
}
|
|
@@ -4185,10 +4245,10 @@ function byValueDescending(vtxos) {
|
|
|
4185
4245
|
return [...vtxos].sort((a, b) => b.value - a.value);
|
|
4186
4246
|
}
|
|
4187
4247
|
async function fetchTimeHeight(wallet) {
|
|
4188
|
-
return
|
|
4248
|
+
return chunkDAYCCIRO_cjs.resolveTimeHeight(wallet.onchainProvider);
|
|
4189
4249
|
}
|
|
4190
4250
|
function canMigrateBySend(vtxo, now) {
|
|
4191
|
-
if (!
|
|
4251
|
+
if (!chunkDAYCCIRO_cjs.canSpendOffchain(vtxo, now)) return false;
|
|
4192
4252
|
return vtxo.expiresAt !== void 0 || vtxo.expiresAtHeight !== void 0;
|
|
4193
4253
|
}
|
|
4194
4254
|
function byExpiryAscending(vtxos, now) {
|
|
@@ -4196,7 +4256,7 @@ function byExpiryAscending(vtxos, now) {
|
|
|
4196
4256
|
if (vtxo.isSwept) return -Infinity;
|
|
4197
4257
|
if (vtxo.expiresAt !== void 0) return vtxo.expiresAt.getTime();
|
|
4198
4258
|
if (vtxo.expiresAtHeight !== void 0) {
|
|
4199
|
-
return
|
|
4259
|
+
return chunkDAYCCIRO_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
|
|
4200
4260
|
}
|
|
4201
4261
|
return Infinity;
|
|
4202
4262
|
};
|
|
@@ -4223,7 +4283,7 @@ function priceSettlementInputs(vtxos, estimator) {
|
|
|
4223
4283
|
const payable = [];
|
|
4224
4284
|
const net = /* @__PURE__ */ new Map();
|
|
4225
4285
|
for (const vtxo of vtxos) {
|
|
4226
|
-
const inputFee = estimator.evalOffchainInput(
|
|
4286
|
+
const inputFee = estimator.evalOffchainInput(chunkDAYCCIRO_cjs.toOffchainInputFeeParams(vtxo));
|
|
4227
4287
|
if (inputFee.satoshis >= vtxo.value) {
|
|
4228
4288
|
continue;
|
|
4229
4289
|
}
|
|
@@ -4249,7 +4309,7 @@ function deductOffchainOutputFee(subtotal, estimator, arkAddress) {
|
|
|
4249
4309
|
}
|
|
4250
4310
|
const outputFee = estimator.evalOffchainOutput({
|
|
4251
4311
|
amount: subtotal,
|
|
4252
|
-
script: base.hex.encode(
|
|
4312
|
+
script: base.hex.encode(chunkDAYCCIRO_cjs.ArkAddress.decode(arkAddress).pkScript)
|
|
4253
4313
|
});
|
|
4254
4314
|
return subtotal - BigInt(outputFee.satoshis);
|
|
4255
4315
|
}
|
|
@@ -4267,10 +4327,10 @@ var DEFAULT_SETTLEMENT_CONFIG = {
|
|
|
4267
4327
|
};
|
|
4268
4328
|
function getRecoverableVtxos(vtxos, dustAmount, now) {
|
|
4269
4329
|
return vtxos.filter((vtxo) => {
|
|
4270
|
-
if (
|
|
4330
|
+
if (chunkDAYCCIRO_cjs.canRecoverOnchain(vtxo, now)) {
|
|
4271
4331
|
return true;
|
|
4272
4332
|
}
|
|
4273
|
-
if (
|
|
4333
|
+
if (chunkDAYCCIRO_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
|
|
4274
4334
|
return true;
|
|
4275
4335
|
}
|
|
4276
4336
|
return false;
|
|
@@ -4302,7 +4362,7 @@ function getRecoverableWithSubdust(vtxos, dustAmount, now) {
|
|
|
4302
4362
|
function isVtxoExpiringSoon(vtxo, thresholdMs) {
|
|
4303
4363
|
if (vtxo.isUnrolled) return false;
|
|
4304
4364
|
const realThresholdMs = thresholdMs <= 100 ? DEFAULT_THRESHOLD_MS : thresholdMs;
|
|
4305
|
-
const expiresAt =
|
|
4365
|
+
const expiresAt = chunkDAYCCIRO_cjs.normalizeVtxo(vtxo).expiresAt;
|
|
4306
4366
|
if (expiresAt === void 0) return false;
|
|
4307
4367
|
const now = Date.now();
|
|
4308
4368
|
const batchExpiry = expiresAt.getTime();
|
|
@@ -4313,7 +4373,7 @@ function getExpiringAndRecoverableVtxos(vtxos, thresholdMs, dustAmount, now) {
|
|
|
4313
4373
|
return vtxos.filter(
|
|
4314
4374
|
// The leading exclusion covers the `isSubdust` arm too, which is a value
|
|
4315
4375
|
// property and would otherwise re-admit an exited coin on its own.
|
|
4316
|
-
(vtxo) => !vtxo.isUnrolled && (isVtxoExpiringSoon(vtxo, thresholdMs) ||
|
|
4376
|
+
(vtxo) => !vtxo.isUnrolled && (isVtxoExpiringSoon(vtxo, thresholdMs) || chunkDAYCCIRO_cjs.canRecoverOnchain(vtxo, now) || isSubdust(vtxo, dustAmount))
|
|
4317
4377
|
);
|
|
4318
4378
|
}
|
|
4319
4379
|
function isMigrationCapable(wallet) {
|
|
@@ -4915,11 +4975,11 @@ var VtxoManager = class _VtxoManager {
|
|
|
4915
4975
|
`Sweep not economical: output ${outputAmount} sats after ${fee} sats fee is below dust (${dustAmount} sats)`
|
|
4916
4976
|
);
|
|
4917
4977
|
}
|
|
4918
|
-
const tx = new
|
|
4978
|
+
const tx = new chunkDAYCCIRO_cjs.Transaction();
|
|
4919
4979
|
for (const utxo of expiredUtxos) {
|
|
4920
|
-
const utxoScript =
|
|
4980
|
+
const utxoScript = chunkDAYCCIRO_cjs.VtxoScript.decode(utxo.tapTree);
|
|
4921
4981
|
const utxoExitLeaf = utxoScript.leaves.find(
|
|
4922
|
-
(leaf) =>
|
|
4982
|
+
(leaf) => chunkDAYCCIRO_cjs.CSVMultisigTapscript.isScriptValid(chunkDAYCCIRO_cjs.scriptFromTapLeafScript(leaf)) === true
|
|
4923
4983
|
);
|
|
4924
4984
|
if (!utxoExitLeaf) {
|
|
4925
4985
|
throw new Error(
|
|
@@ -4934,7 +4994,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4934
4994
|
amount: BigInt(utxo.value)
|
|
4935
4995
|
},
|
|
4936
4996
|
tapLeafScript: [utxoExitLeaf],
|
|
4937
|
-
sequence:
|
|
4997
|
+
sequence: chunkDAYCCIRO_cjs.getSequence(utxoExitLeaf)
|
|
4938
4998
|
});
|
|
4939
4999
|
}
|
|
4940
5000
|
tx.addOutputAddress(boardingAddress, outputAmount, this.getNetwork());
|
|
@@ -5177,8 +5237,8 @@ var VtxoManager = class _VtxoManager {
|
|
|
5177
5237
|
const cls = classifyAgainstSignerSet(serverPubKey, signerSet, nowSeconds);
|
|
5178
5238
|
if (cls.status === "CURRENT") continue;
|
|
5179
5239
|
const live = vtxos.filter((v) => !v.isUnrolled);
|
|
5180
|
-
const recoverable = live.filter((v) => v.isSwept && !
|
|
5181
|
-
const spendable = live.filter((v) => !
|
|
5240
|
+
const recoverable = live.filter((v) => v.isSwept && !chunkDAYCCIRO_cjs.isVtxoSpent(v));
|
|
5241
|
+
const spendable = live.filter((v) => !chunkDAYCCIRO_cjs.isVtxoSpent(v) && !v.isSwept);
|
|
5182
5242
|
const value = spendable.reduce((sum, v) => sum + v.value, 0);
|
|
5183
5243
|
let recoverableCount = 0;
|
|
5184
5244
|
let recoverableValue = 0;
|
|
@@ -5191,7 +5251,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5191
5251
|
awaitingSweepCount = spendable.length;
|
|
5192
5252
|
awaitingSweepValue = value;
|
|
5193
5253
|
for (const v of spendable) {
|
|
5194
|
-
const exp =
|
|
5254
|
+
const exp = chunkDAYCCIRO_cjs.toBatchExpiry(v);
|
|
5195
5255
|
if (exp !== void 0 && (nextSweepEta === void 0 || exp < nextSweepEta)) {
|
|
5196
5256
|
nextSweepEta = exp;
|
|
5197
5257
|
}
|
|
@@ -5452,7 +5512,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5452
5512
|
/** Decodes the boarding tapscript exit path to extract the CSV timelock. */
|
|
5453
5513
|
getBoardingTimelock() {
|
|
5454
5514
|
const wallet = this.getSweepWallet();
|
|
5455
|
-
const exitScript =
|
|
5515
|
+
const exitScript = chunkDAYCCIRO_cjs.CSVMultisigTapscript.decode(
|
|
5456
5516
|
base.hex.decode(wallet.boardingTapscript.exitScript)
|
|
5457
5517
|
);
|
|
5458
5518
|
return exitScript.params.timelock;
|
|
@@ -5583,8 +5643,8 @@ var VtxoManager = class _VtxoManager {
|
|
|
5583
5643
|
* or doesn't carry the metadata.
|
|
5584
5644
|
*/
|
|
5585
5645
|
extractSpentOutpoint(error) {
|
|
5586
|
-
const ark =
|
|
5587
|
-
if (!
|
|
5646
|
+
const ark = chunkDAYCCIRO_cjs.maybeArkError(error);
|
|
5647
|
+
if (!chunkDAYCCIRO_cjs.isArkError(ark, chunkDAYCCIRO_cjs.ArkErrorName.VTXO_ALREADY_SPENT)) return void 0;
|
|
5588
5648
|
const raw = ark.metadata?.vtxo_outpoint;
|
|
5589
5649
|
if (typeof raw !== "string") return void 0;
|
|
5590
5650
|
const [txid, voutStr] = raw.split(":");
|
|
@@ -5774,7 +5834,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5774
5834
|
if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
|
|
5775
5835
|
break;
|
|
5776
5836
|
}
|
|
5777
|
-
const inputFee = estimator.evalOffchainInput(
|
|
5837
|
+
const inputFee = estimator.evalOffchainInput(chunkDAYCCIRO_cjs.toOffchainInputFeeParams(v));
|
|
5778
5838
|
if (inputFee.satoshis >= v.value) {
|
|
5779
5839
|
continue;
|
|
5780
5840
|
}
|
|
@@ -5794,7 +5854,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
5794
5854
|
const arkAddress = await this.wallet.getAddress();
|
|
5795
5855
|
const outputFee = estimator.evalOffchainOutput({
|
|
5796
5856
|
amount: totalAmount,
|
|
5797
|
-
script: base.hex.encode(
|
|
5857
|
+
script: base.hex.encode(chunkDAYCCIRO_cjs.ArkAddress.decode(arkAddress).pkScript)
|
|
5798
5858
|
});
|
|
5799
5859
|
totalAmount -= BigInt(outputFee.satoshis);
|
|
5800
5860
|
if (totalAmount < dustAmount) return;
|
|
@@ -5874,7 +5934,7 @@ var ArkNote = class _ArkNote {
|
|
|
5874
5934
|
this.value = value;
|
|
5875
5935
|
this.HRP = HRP;
|
|
5876
5936
|
const preimageHash = utils_js.sha256(this.preimage);
|
|
5877
|
-
this.vtxoScript = new
|
|
5937
|
+
this.vtxoScript = new chunkDAYCCIRO_cjs.VtxoScript([noteTapscript(preimageHash)]);
|
|
5878
5938
|
const leaf = this.vtxoScript.leaves[0];
|
|
5879
5939
|
this.txid = base.hex.encode(new Uint8Array(preimageHash).reverse());
|
|
5880
5940
|
this.tapTree = this.vtxoScript.encode();
|
|
@@ -5979,8 +6039,8 @@ function noteTapscript(preimageHash) {
|
|
|
5979
6039
|
return btcSigner.Script.encode(["SHA256", preimageHash, "EQUAL"]);
|
|
5980
6040
|
}
|
|
5981
6041
|
var ArkadeCash = class _ArkadeCash {
|
|
5982
|
-
constructor(privateKey, serverPubKey,
|
|
5983
|
-
this.csvTimelock =
|
|
6042
|
+
constructor(privateKey, serverPubKey, csvTimelock2, hrp = _ArkadeCash.DefaultHRP) {
|
|
6043
|
+
this.csvTimelock = csvTimelock2;
|
|
5984
6044
|
this.hrp = hrp;
|
|
5985
6045
|
if (privateKey.length !== 32) {
|
|
5986
6046
|
throw new Error(
|
|
@@ -6020,8 +6080,8 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
6020
6080
|
get publicKey() {
|
|
6021
6081
|
return this._publicKey.slice();
|
|
6022
6082
|
}
|
|
6023
|
-
static generate(serverPubKey,
|
|
6024
|
-
return new _ArkadeCash(utils_js.randomPrivateKeyBytes(), serverPubKey,
|
|
6083
|
+
static generate(serverPubKey, csvTimelock2, hrp) {
|
|
6084
|
+
return new _ArkadeCash(utils_js.randomPrivateKeyBytes(), serverPubKey, csvTimelock2, hrp);
|
|
6025
6085
|
}
|
|
6026
6086
|
static fromString(encoded) {
|
|
6027
6087
|
const decoded = base.bech32m.decodeUnsafe(encoded.trim().toLowerCase(), 1023);
|
|
@@ -6041,15 +6101,15 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
6041
6101
|
const privateKey = data.slice(1, 33);
|
|
6042
6102
|
const serverPubKey = data.slice(33, 65);
|
|
6043
6103
|
const sequence = new DataView(data.buffer, data.byteOffset + 65, 4).getUint32(0, false);
|
|
6044
|
-
const
|
|
6045
|
-
return new _ArkadeCash(privateKey, serverPubKey,
|
|
6104
|
+
const csvTimelock2 = chunkDAYCCIRO_cjs.sequenceToTimelock(sequence);
|
|
6105
|
+
return new _ArkadeCash(privateKey, serverPubKey, csvTimelock2, decoded.prefix);
|
|
6046
6106
|
}
|
|
6047
6107
|
toString() {
|
|
6048
6108
|
const data = new Uint8Array(_ArkadeCash.PayloadLength);
|
|
6049
6109
|
data[0] = _ArkadeCash.Version;
|
|
6050
6110
|
data.set(this._privateKey, 1);
|
|
6051
6111
|
data.set(this._serverPubKey, 33);
|
|
6052
|
-
const sequence =
|
|
6112
|
+
const sequence = chunkDAYCCIRO_cjs.timelockToSequence(this.csvTimelock);
|
|
6053
6113
|
new DataView(data.buffer, data.byteOffset + 65, 4).setUint32(0, sequence, false);
|
|
6054
6114
|
const words = base.bech32m.toWords(data);
|
|
6055
6115
|
return base.bech32m.encode(this.hrp, words, 1023);
|
|
@@ -6058,7 +6118,7 @@ var ArkadeCash = class _ArkadeCash {
|
|
|
6058
6118
|
return SingleKey.fromPrivateKey(this._privateKey);
|
|
6059
6119
|
}
|
|
6060
6120
|
get vtxoScript() {
|
|
6061
|
-
return new
|
|
6121
|
+
return new chunkFUW3OM5X_cjs.DefaultVtxo.Script({
|
|
6062
6122
|
pubKey: this._publicKey,
|
|
6063
6123
|
serverPubKey: this._serverPubKey,
|
|
6064
6124
|
csvTimelock: this.csvTimelock
|
|
@@ -6319,7 +6379,7 @@ async function captureExitBranch(params) {
|
|
|
6319
6379
|
const nonCommitment = ordered.filter((c) => chainTxTypeToChainedExit(c.type) !== 1 /* Commitment */).map((c) => c.txid);
|
|
6320
6380
|
if (nonCommitment.length > 0) {
|
|
6321
6381
|
for (const psbt of await resolver.getVirtualTxs(nonCommitment)) {
|
|
6322
|
-
psbtByTxid.set(
|
|
6382
|
+
psbtByTxid.set(chunkDAYCCIRO_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
6323
6383
|
}
|
|
6324
6384
|
}
|
|
6325
6385
|
}
|
|
@@ -6362,10 +6422,10 @@ var IndexerExitDataSource = class {
|
|
|
6362
6422
|
while (hasMore) {
|
|
6363
6423
|
const { chain: page, page: meta } = await this.indexer.getVtxoChain(
|
|
6364
6424
|
{ txid: vtxo.txid, vout: vtxo.vout },
|
|
6365
|
-
{ pageIndex, pageSize:
|
|
6425
|
+
{ pageIndex, pageSize: chunkDAYCCIRO_cjs.DEFAULT_PAGE_SIZE }
|
|
6366
6426
|
);
|
|
6367
6427
|
chain.push(...page);
|
|
6368
|
-
hasMore = meta ? page.length ===
|
|
6428
|
+
hasMore = meta ? page.length === chunkDAYCCIRO_cjs.DEFAULT_PAGE_SIZE : false;
|
|
6369
6429
|
pageIndex++;
|
|
6370
6430
|
}
|
|
6371
6431
|
return chain;
|
|
@@ -6377,12 +6437,12 @@ var IndexerExitDataSource = class {
|
|
|
6377
6437
|
while (hasMore) {
|
|
6378
6438
|
const { txs, page } = await this.indexer.getVirtualTxs(txids, {
|
|
6379
6439
|
pageIndex,
|
|
6380
|
-
pageSize:
|
|
6440
|
+
pageSize: chunkDAYCCIRO_cjs.DEFAULT_PAGE_SIZE
|
|
6381
6441
|
});
|
|
6382
6442
|
for (const psbt of txs) {
|
|
6383
|
-
out.set(
|
|
6443
|
+
out.set(chunkDAYCCIRO_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
6384
6444
|
}
|
|
6385
|
-
hasMore = page ? txs.length ===
|
|
6445
|
+
hasMore = page ? txs.length === chunkDAYCCIRO_cjs.DEFAULT_PAGE_SIZE : false;
|
|
6386
6446
|
pageIndex++;
|
|
6387
6447
|
}
|
|
6388
6448
|
return out;
|
|
@@ -6403,7 +6463,7 @@ function chainedTxTypeToChainTxType(t) {
|
|
|
6403
6463
|
}
|
|
6404
6464
|
}
|
|
6405
6465
|
function psbtInputTxids(psbtBase64) {
|
|
6406
|
-
const tx =
|
|
6466
|
+
const tx = chunkDAYCCIRO_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
|
|
6407
6467
|
const ids = [];
|
|
6408
6468
|
for (let i = 0; i < tx.inputsLength; i++) {
|
|
6409
6469
|
const txid = tx.getInput(i).txid;
|
|
@@ -6762,10 +6822,10 @@ async function resolveArkInfo(arkProvider, walletRepository) {
|
|
|
6762
6822
|
try {
|
|
6763
6823
|
info = await arkProvider.getInfo();
|
|
6764
6824
|
} catch (err) {
|
|
6765
|
-
if (!
|
|
6825
|
+
if (!chunkDAYCCIRO_cjs.isRetryableProviderError(err)) throw err;
|
|
6766
6826
|
const snapshot = await loadArkInfoSnapshot(walletRepository);
|
|
6767
6827
|
if (!snapshot) {
|
|
6768
|
-
throw new
|
|
6828
|
+
throw new chunkDAYCCIRO_cjs.ProviderUnavailableError(
|
|
6769
6829
|
"Arkade server info is unavailable and no cached snapshot exists",
|
|
6770
6830
|
{ cause: err }
|
|
6771
6831
|
);
|
|
@@ -6957,7 +7017,7 @@ function buildGraph(rootTxid, chunksByTxid) {
|
|
|
6957
7017
|
return new TxTree(rootTx, children);
|
|
6958
7018
|
}
|
|
6959
7019
|
function decodeNode(chunk) {
|
|
6960
|
-
const tx =
|
|
7020
|
+
const tx = chunkDAYCCIRO_cjs.Transaction.fromPSBT(base.base64.decode(chunk.tx));
|
|
6961
7021
|
return { tx, children: chunk.children };
|
|
6962
7022
|
}
|
|
6963
7023
|
exports.Batch = void 0;
|
|
@@ -7172,7 +7232,7 @@ function collectArkTxidsNeedingCreatedAt(vtxos, localCreatedAt) {
|
|
|
7172
7232
|
return [...txids];
|
|
7173
7233
|
}
|
|
7174
7234
|
async function buildTransactionHistory(vtxos, allBoardingTxs, commitmentsToIgnore, resolveTxCreatedAt, gatedScripts = /* @__PURE__ */ new Map()) {
|
|
7175
|
-
const normalized = vtxos.map(
|
|
7235
|
+
const normalized = vtxos.map(chunkDAYCCIRO_cjs.normalizeVtxo).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
|
|
7176
7236
|
const localCreatedAt = localCreatedAtByTxid(normalized);
|
|
7177
7237
|
const gatedVtxos = normalized.filter((vtxo) => isGatedVtxo(vtxo, gatedScripts));
|
|
7178
7238
|
const ownVtxos = normalized.filter((vtxo) => !isGatedVtxo(vtxo, gatedScripts));
|
|
@@ -7347,7 +7407,7 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7347
7407
|
withRecoverable: false,
|
|
7348
7408
|
genericallySpendableOnly: true
|
|
7349
7409
|
});
|
|
7350
|
-
const controlAssetRef = params.controlAssetId ?
|
|
7410
|
+
const controlAssetRef = params.controlAssetId ? chunkSJPPBR2V_cjs.AssetRef.fromId(chunkSJPPBR2V_cjs.AssetId.fromString(params.controlAssetId)) : null;
|
|
7351
7411
|
const coinSelection = selectVirtualCoins(virtualCoins, Number(this.wallet.dustAmount));
|
|
7352
7412
|
let totalBtcSelected = 0n;
|
|
7353
7413
|
const assetChanges = /* @__PURE__ */ new Map();
|
|
@@ -7360,8 +7420,8 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7360
7420
|
}
|
|
7361
7421
|
}
|
|
7362
7422
|
const groups = [];
|
|
7363
|
-
const issuedAssetOutput =
|
|
7364
|
-
const issuedAssetGroup =
|
|
7423
|
+
const issuedAssetOutput = chunkSJPPBR2V_cjs.AssetOutput.create(0, params.amount);
|
|
7424
|
+
const issuedAssetGroup = chunkSJPPBR2V_cjs.AssetGroup.create(
|
|
7365
7425
|
null,
|
|
7366
7426
|
controlAssetRef,
|
|
7367
7427
|
[],
|
|
@@ -7376,28 +7436,28 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7376
7436
|
for (const [inputIndex, assets] of assetInputs) {
|
|
7377
7437
|
for (const asset of assets) {
|
|
7378
7438
|
if (asset.assetId !== assetId) continue;
|
|
7379
|
-
changeInputs.push(
|
|
7439
|
+
changeInputs.push(chunkSJPPBR2V_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
7380
7440
|
}
|
|
7381
7441
|
}
|
|
7382
7442
|
groups.push(
|
|
7383
|
-
|
|
7384
|
-
|
|
7443
|
+
chunkSJPPBR2V_cjs.AssetGroup.create(
|
|
7444
|
+
chunkSJPPBR2V_cjs.AssetId.fromString(assetId),
|
|
7385
7445
|
null,
|
|
7386
7446
|
changeInputs,
|
|
7387
|
-
[
|
|
7447
|
+
[chunkSJPPBR2V_cjs.AssetOutput.create(0, amount)],
|
|
7388
7448
|
[]
|
|
7389
7449
|
)
|
|
7390
7450
|
);
|
|
7391
7451
|
}
|
|
7392
7452
|
}
|
|
7393
7453
|
const address = await this.wallet.getAddress();
|
|
7394
|
-
const outputAddress =
|
|
7454
|
+
const outputAddress = chunkDAYCCIRO_cjs.ArkAddress.decode(address);
|
|
7395
7455
|
const outputs = [
|
|
7396
7456
|
{
|
|
7397
7457
|
script: outputAddress.pkScript,
|
|
7398
7458
|
amount: BigInt(totalBtcSelected)
|
|
7399
7459
|
},
|
|
7400
|
-
Extension.create([
|
|
7460
|
+
Extension.create([chunkSJPPBR2V_cjs.Packet.create(groups)]).txOut()
|
|
7401
7461
|
];
|
|
7402
7462
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(
|
|
7403
7463
|
coinSelection.inputs,
|
|
@@ -7405,7 +7465,7 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7405
7465
|
);
|
|
7406
7466
|
return {
|
|
7407
7467
|
arkTxId: arkTxid,
|
|
7408
|
-
assetId:
|
|
7468
|
+
assetId: chunkSJPPBR2V_cjs.AssetId.create(arkTxid, 0).toString()
|
|
7409
7469
|
};
|
|
7410
7470
|
}
|
|
7411
7471
|
/**
|
|
@@ -7478,16 +7538,16 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7478
7538
|
for (const [inputIndex, assets] of assetInputs) {
|
|
7479
7539
|
for (const asset of assets) {
|
|
7480
7540
|
if (asset.assetId !== params.assetId) continue;
|
|
7481
|
-
reissueInputs.push(
|
|
7541
|
+
reissueInputs.push(chunkSJPPBR2V_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
7482
7542
|
}
|
|
7483
7543
|
}
|
|
7484
7544
|
const totalAssetAmount = assetToReissueAmount + params.amount;
|
|
7485
|
-
const reissueAssetIdObj =
|
|
7486
|
-
const reissueAssetGroup =
|
|
7545
|
+
const reissueAssetIdObj = chunkSJPPBR2V_cjs.AssetId.fromString(params.assetId);
|
|
7546
|
+
const reissueAssetGroup = chunkSJPPBR2V_cjs.AssetGroup.create(
|
|
7487
7547
|
reissueAssetIdObj,
|
|
7488
7548
|
null,
|
|
7489
7549
|
reissueInputs,
|
|
7490
|
-
[
|
|
7550
|
+
[chunkSJPPBR2V_cjs.AssetOutput.create(0, totalAssetAmount)],
|
|
7491
7551
|
[]
|
|
7492
7552
|
);
|
|
7493
7553
|
const groups = [reissueAssetGroup];
|
|
@@ -7496,27 +7556,27 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7496
7556
|
for (const [inputIndex, assets] of assetInputs) {
|
|
7497
7557
|
for (const asset of assets) {
|
|
7498
7558
|
if (asset.assetId !== assetId) continue;
|
|
7499
|
-
changeInputs.push(
|
|
7559
|
+
changeInputs.push(chunkSJPPBR2V_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
7500
7560
|
}
|
|
7501
7561
|
}
|
|
7502
7562
|
groups.push(
|
|
7503
|
-
|
|
7504
|
-
|
|
7563
|
+
chunkSJPPBR2V_cjs.AssetGroup.create(
|
|
7564
|
+
chunkSJPPBR2V_cjs.AssetId.fromString(assetId),
|
|
7505
7565
|
null,
|
|
7506
7566
|
changeInputs,
|
|
7507
|
-
[
|
|
7567
|
+
[chunkSJPPBR2V_cjs.AssetOutput.create(0, amount)],
|
|
7508
7568
|
[]
|
|
7509
7569
|
)
|
|
7510
7570
|
);
|
|
7511
7571
|
}
|
|
7512
7572
|
const address = await this.wallet.getAddress();
|
|
7513
|
-
const outputAddress =
|
|
7573
|
+
const outputAddress = chunkDAYCCIRO_cjs.ArkAddress.decode(address);
|
|
7514
7574
|
const outputs = [
|
|
7515
7575
|
{
|
|
7516
7576
|
script: outputAddress.pkScript,
|
|
7517
7577
|
amount: BigInt(totalBtcSelected)
|
|
7518
7578
|
},
|
|
7519
|
-
Extension.create([
|
|
7579
|
+
Extension.create([chunkSJPPBR2V_cjs.Packet.create(groups)]).txOut()
|
|
7520
7580
|
];
|
|
7521
7581
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
|
|
7522
7582
|
return arkTxid;
|
|
@@ -7584,27 +7644,27 @@ var AssetManager = class extends ReadonlyAssetManager {
|
|
|
7584
7644
|
for (const [inputIndex, assets] of assetInputs) {
|
|
7585
7645
|
for (const asset of assets) {
|
|
7586
7646
|
if (asset.assetId !== assetId) continue;
|
|
7587
|
-
changeInputs.push(
|
|
7647
|
+
changeInputs.push(chunkSJPPBR2V_cjs.AssetInput.create(inputIndex, asset.amount));
|
|
7588
7648
|
}
|
|
7589
7649
|
}
|
|
7590
7650
|
groups.push(
|
|
7591
|
-
|
|
7592
|
-
|
|
7651
|
+
chunkSJPPBR2V_cjs.AssetGroup.create(
|
|
7652
|
+
chunkSJPPBR2V_cjs.AssetId.fromString(assetId),
|
|
7593
7653
|
null,
|
|
7594
7654
|
changeInputs,
|
|
7595
|
-
amount > 0n ? [
|
|
7655
|
+
amount > 0n ? [chunkSJPPBR2V_cjs.AssetOutput.create(0, amount)] : [],
|
|
7596
7656
|
[]
|
|
7597
7657
|
)
|
|
7598
7658
|
);
|
|
7599
7659
|
}
|
|
7600
7660
|
const address = await this.wallet.getAddress();
|
|
7601
|
-
const outputAddress =
|
|
7661
|
+
const outputAddress = chunkDAYCCIRO_cjs.ArkAddress.decode(address);
|
|
7602
7662
|
const outputs = [
|
|
7603
7663
|
{
|
|
7604
7664
|
script: outputAddress.pkScript,
|
|
7605
7665
|
amount: BigInt(totalBtcSelected)
|
|
7606
7666
|
},
|
|
7607
|
-
Extension.create([
|
|
7667
|
+
Extension.create([chunkSJPPBR2V_cjs.Packet.create(groups)]).txOut()
|
|
7608
7668
|
];
|
|
7609
7669
|
const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
|
|
7610
7670
|
return arkTxid;
|
|
@@ -7629,7 +7689,7 @@ function castMetadata(metadata) {
|
|
|
7629
7689
|
} else {
|
|
7630
7690
|
throw new Error("Invalid metadata value type");
|
|
7631
7691
|
}
|
|
7632
|
-
md.push(
|
|
7692
|
+
md.push(chunkSJPPBR2V_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
|
|
7633
7693
|
}
|
|
7634
7694
|
return md;
|
|
7635
7695
|
}
|
|
@@ -7650,10 +7710,10 @@ var DelegateManagerImpl = class {
|
|
|
7650
7710
|
if (vtxos.length === 0) {
|
|
7651
7711
|
return { delegated: [], failed: [] };
|
|
7652
7712
|
}
|
|
7653
|
-
const destinationScript =
|
|
7713
|
+
const destinationScript = chunkDAYCCIRO_cjs.ArkAddress.decode(destination).pkScript;
|
|
7654
7714
|
const arkInfo = await this.arkInfoProvider.getInfo();
|
|
7655
7715
|
const delegateInfo = await this.delegateProvider.getDelegateInfo();
|
|
7656
|
-
const eligible = vtxos.map(
|
|
7716
|
+
const eligible = vtxos.map(chunkDAYCCIRO_cjs.normalizeVtxo).filter(
|
|
7657
7717
|
(v) => isAnnotated(v) && findDelegateTapLeaf(v, delegateInfo.pubkey) !== void 0
|
|
7658
7718
|
);
|
|
7659
7719
|
if (eligible.length === 0) {
|
|
@@ -7682,11 +7742,11 @@ var DelegateManagerImpl = class {
|
|
|
7682
7742
|
const groupByExpiry = /* @__PURE__ */ new Map();
|
|
7683
7743
|
let recoverableVtxos = [];
|
|
7684
7744
|
for (const vtxo of eligible) {
|
|
7685
|
-
if (
|
|
7745
|
+
if (chunkDAYCCIRO_cjs.canRecoverOnchain(vtxo, now)) {
|
|
7686
7746
|
recoverableVtxos.push(vtxo);
|
|
7687
7747
|
continue;
|
|
7688
7748
|
}
|
|
7689
|
-
const expiry =
|
|
7749
|
+
const expiry = chunkDAYCCIRO_cjs.toBatchExpiry(vtxo);
|
|
7690
7750
|
if (!expiry) continue;
|
|
7691
7751
|
const dayKey = getDayTimestamp(expiry);
|
|
7692
7752
|
groupByExpiry.set(dayKey, [...groupByExpiry.get(dayKey) ?? [], vtxo]);
|
|
@@ -7751,7 +7811,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7751
7811
|
}
|
|
7752
7812
|
if (!delegateAt) {
|
|
7753
7813
|
const now = { timestamp: /* @__PURE__ */ new Date() };
|
|
7754
|
-
const expiryTimestamp = vtxos.filter((coin) => !
|
|
7814
|
+
const expiryTimestamp = vtxos.filter((coin) => !chunkDAYCCIRO_cjs.canRecoverOnchain(coin, now) && chunkDAYCCIRO_cjs.toBatchExpiry(coin)).reduce((min, coin) => Math.min(min, chunkDAYCCIRO_cjs.toBatchExpiry(coin)), Number.MAX_SAFE_INTEGER);
|
|
7755
7815
|
if (!expiryTimestamp || expiryTimestamp === Number.MAX_SAFE_INTEGER) {
|
|
7756
7816
|
delegateAt = new Date(Date.now() + 1 * 60 * 1e3);
|
|
7757
7817
|
} else {
|
|
@@ -7775,7 +7835,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7775
7835
|
let amount = 0n;
|
|
7776
7836
|
for (const coin of vtxos) {
|
|
7777
7837
|
const inputFee = estimator.evalOffchainInput({
|
|
7778
|
-
...
|
|
7838
|
+
...chunkDAYCCIRO_cjs.toOffchainInputFeeParams(coin),
|
|
7779
7839
|
type: "vtxo"
|
|
7780
7840
|
});
|
|
7781
7841
|
if (inputFee.value >= coin.value) {
|
|
@@ -7789,7 +7849,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7789
7849
|
const delegateFee = BigInt(Number(fee));
|
|
7790
7850
|
if (delegateFee > 0n) {
|
|
7791
7851
|
outputs.push({
|
|
7792
|
-
script:
|
|
7852
|
+
script: chunkDAYCCIRO_cjs.ArkAddress.decode(delegateAddress).pkScript,
|
|
7793
7853
|
amount: delegateFee
|
|
7794
7854
|
});
|
|
7795
7855
|
}
|
|
@@ -7822,10 +7882,10 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
|
|
|
7822
7882
|
destinationScript
|
|
7823
7883
|
);
|
|
7824
7884
|
const forfeitOutputScript = btcSigner.OutScript.encode(
|
|
7825
|
-
btcSigner.Address(
|
|
7885
|
+
btcSigner.Address(chunkDAYCCIRO_cjs.getNetwork(network)).decode(forfeitAddress)
|
|
7826
7886
|
);
|
|
7827
7887
|
const forfeits = await Promise.all(
|
|
7828
|
-
vtxos.filter((v) =>
|
|
7888
|
+
vtxos.filter((v) => chunkDAYCCIRO_cjs.requiresForfeit(v)).map(async (coin) => {
|
|
7829
7889
|
const forfeit = await makeDelegateForfeitTx(
|
|
7830
7890
|
coin,
|
|
7831
7891
|
dust,
|
|
@@ -7850,7 +7910,7 @@ async function makeDelegateForfeitTx(input, connectorAmount, delegatePubkey, for
|
|
|
7850
7910
|
index: input.vout,
|
|
7851
7911
|
witnessUtxo: {
|
|
7852
7912
|
amount: BigInt(input.value),
|
|
7853
|
-
script:
|
|
7913
|
+
script: chunkDAYCCIRO_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
7854
7914
|
},
|
|
7855
7915
|
sighashType: btcSigner.SigHash.ALL_ANYONECANPAY,
|
|
7856
7916
|
tapLeafScript: [delegateTapLeaf]
|
|
@@ -7908,7 +7968,7 @@ async function makeSignedDelegateIntent(identity, coins, outputs, onchainOutputs
|
|
|
7908
7968
|
expire_at: 0,
|
|
7909
7969
|
cosigners_public_keys: cosignerPubKeys
|
|
7910
7970
|
};
|
|
7911
|
-
const proof =
|
|
7971
|
+
const proof = chunkDAYCCIRO_cjs.Intent.create(message, coins, outputs);
|
|
7912
7972
|
const signedProof = await identity.sign(proof);
|
|
7913
7973
|
return {
|
|
7914
7974
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -7934,10 +7994,10 @@ function getDayTimestamp(timestamp) {
|
|
|
7934
7994
|
function findDelegateTapLeaf(vtxo, delegatePubkey) {
|
|
7935
7995
|
if (!vtxo.tapTree) return void 0;
|
|
7936
7996
|
const pk = delegatePubkey.length === 66 ? delegatePubkey.slice(2) : delegatePubkey;
|
|
7937
|
-
const vtxoScript =
|
|
7997
|
+
const vtxoScript = chunkDAYCCIRO_cjs.VtxoScript.decode(vtxo.tapTree);
|
|
7938
7998
|
return vtxoScript.leaves.find((tapLeaf) => {
|
|
7939
|
-
const arkTapscript =
|
|
7940
|
-
if (!
|
|
7999
|
+
const arkTapscript = chunkDAYCCIRO_cjs.decodeTapscript(chunkDAYCCIRO_cjs.scriptFromTapLeafScript(tapLeaf));
|
|
8000
|
+
if (!chunkDAYCCIRO_cjs.MultisigTapscript.is(arkTapscript)) return false;
|
|
7941
8001
|
return arkTapscript.params.pubkeys.map(base.hex.encode).includes(pk);
|
|
7942
8002
|
});
|
|
7943
8003
|
}
|
|
@@ -8218,7 +8278,7 @@ function createManagedConnection(dbName, version, initDatabase2) {
|
|
|
8218
8278
|
};
|
|
8219
8279
|
}
|
|
8220
8280
|
function scriptFromArkAddress(address) {
|
|
8221
|
-
return base.hex.encode(
|
|
8281
|
+
return base.hex.encode(chunkDAYCCIRO_cjs.ArkAddress.decode(address).pkScript);
|
|
8222
8282
|
}
|
|
8223
8283
|
|
|
8224
8284
|
// src/repositories/indexedDB/schema.ts
|
|
@@ -8388,7 +8448,7 @@ function initDatabase(db, oldVersion, transaction) {
|
|
|
8388
8448
|
backfillVtxoIndexFields(transaction);
|
|
8389
8449
|
}
|
|
8390
8450
|
}
|
|
8391
|
-
var unspentFlag = (vtxo) =>
|
|
8451
|
+
var unspentFlag = (vtxo) => chunkDAYCCIRO_cjs.isVtxoSpent(vtxo) ? {} : { unspent: 1 };
|
|
8392
8452
|
function initDatabaseWithIntents(db, oldVersion, transaction) {
|
|
8393
8453
|
initDatabase(db, oldVersion, transaction);
|
|
8394
8454
|
if (!db.objectStoreNames.contains(STORE_INTENTS)) {
|
|
@@ -8725,9 +8785,10 @@ function validateVtxosForScript(vtxos, script, context) {
|
|
|
8725
8785
|
`${context}: refusing to persist ${mismatches.length} VTXO(s) whose script does not match ${script}: ${detail}`
|
|
8726
8786
|
);
|
|
8727
8787
|
}
|
|
8728
|
-
async function getVtxosForContract(repo, contract) {
|
|
8729
|
-
const vtxos = repo.getVtxosForScript ? await repo.getVtxosForScript(contract.script) : filterVtxosForScript(await repo.getVtxos(contract.address), contract.script);
|
|
8730
|
-
|
|
8788
|
+
async function getVtxosForContract(repo, contract, options) {
|
|
8789
|
+
const vtxos = options?.unspentOnly && repo.getVtxosForScripts ? await repo.getVtxosForScripts([contract.script], options) : repo.getVtxosForScript ? await repo.getVtxosForScript(contract.script) : filterVtxosForScript(await repo.getVtxos(contract.address), contract.script);
|
|
8790
|
+
const normalized = vtxos.map(chunkDAYCCIRO_cjs.normalizeVtxo);
|
|
8791
|
+
return options?.unspentOnly ? normalized.filter((vtxo) => !chunkDAYCCIRO_cjs.isVtxoSpent(vtxo)) : normalized;
|
|
8731
8792
|
}
|
|
8732
8793
|
function hasRecordedSpend(vtxo) {
|
|
8733
8794
|
return vtxo.isSpent === true && (!!vtxo.spentBy || !!vtxo.arkTxId || !!vtxo.settledBy);
|
|
@@ -8832,7 +8893,7 @@ var InMemoryWalletRepository = class {
|
|
|
8832
8893
|
}
|
|
8833
8894
|
}
|
|
8834
8895
|
const rows = [...byOutpoint.values()];
|
|
8835
|
-
return options?.unspentOnly ? rows.filter((vtxo) => !
|
|
8896
|
+
return options?.unspentOnly ? rows.filter((vtxo) => !chunkDAYCCIRO_cjs.isVtxoSpent(vtxo)) : rows;
|
|
8836
8897
|
}
|
|
8837
8898
|
async saveVtxosForScript(key, vtxos) {
|
|
8838
8899
|
if (!key.address) {
|
|
@@ -8934,7 +8995,7 @@ function decodeArkContract(encoded) {
|
|
|
8934
8995
|
}
|
|
8935
8996
|
function contractFromArkContract(encoded, options = {}) {
|
|
8936
8997
|
const parsed = decodeArkContract(encoded);
|
|
8937
|
-
const handler =
|
|
8998
|
+
const handler = chunkFUW3OM5X_cjs.contractHandlers.get(parsed.type);
|
|
8938
8999
|
if (!handler) {
|
|
8939
9000
|
throw new Error(`No handler registered for contract type '${parsed.type}'`);
|
|
8940
9001
|
}
|
|
@@ -8948,9 +9009,9 @@ function contractFromArkContract(encoded, options = {}) {
|
|
|
8948
9009
|
metadata: options.metadata
|
|
8949
9010
|
};
|
|
8950
9011
|
}
|
|
8951
|
-
function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix =
|
|
9012
|
+
function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunkDAYCCIRO_cjs.DEFAULT_NETWORK.hrp, options = {}) {
|
|
8952
9013
|
const parsed = decodeArkContract(encoded);
|
|
8953
|
-
const handler =
|
|
9014
|
+
const handler = chunkFUW3OM5X_cjs.contractHandlers.getOrThrow(parsed.type);
|
|
8954
9015
|
const params = parsed.data;
|
|
8955
9016
|
const vtxoScript = handler.createScript(params);
|
|
8956
9017
|
return {
|
|
@@ -9256,9 +9317,9 @@ var ContractWatcher = class {
|
|
|
9256
9317
|
this.connectionState = "connected";
|
|
9257
9318
|
this.reconnectAttempts = 0;
|
|
9258
9319
|
this.listenLoop().catch((e) => {
|
|
9259
|
-
if (
|
|
9320
|
+
if (chunkDAYCCIRO_cjs.isEventSourceError(e)) {
|
|
9260
9321
|
console.debug("ContractWatcher subscription disconnected; reconnecting");
|
|
9261
|
-
} else if (!
|
|
9322
|
+
} else if (!chunkDAYCCIRO_cjs.isEventSourceUnavailableError(e)) {
|
|
9262
9323
|
console.error(e);
|
|
9263
9324
|
}
|
|
9264
9325
|
this.connectionState = "disconnected";
|
|
@@ -9270,7 +9331,7 @@ var ContractWatcher = class {
|
|
|
9270
9331
|
this.scheduleReconnect();
|
|
9271
9332
|
});
|
|
9272
9333
|
} catch (error) {
|
|
9273
|
-
if (!
|
|
9334
|
+
if (!chunkDAYCCIRO_cjs.isEventSourceUnavailableError(error)) {
|
|
9274
9335
|
console.error("ContractWatcher connection failed:", error);
|
|
9275
9336
|
}
|
|
9276
9337
|
this.connectionState = "disconnected";
|
|
@@ -9296,7 +9357,7 @@ var ContractWatcher = class {
|
|
|
9296
9357
|
* slower; what it loses is push latency.
|
|
9297
9358
|
*/
|
|
9298
9359
|
reportEventSourceUnavailable(error) {
|
|
9299
|
-
if (!
|
|
9360
|
+
if (!chunkDAYCCIRO_cjs.isEventSourceUnavailableError(error)) return false;
|
|
9300
9361
|
if (!this.eventSourceReported) {
|
|
9301
9362
|
this.eventSourceReported = true;
|
|
9302
9363
|
console.warn(
|
|
@@ -9368,7 +9429,7 @@ var ContractWatcher = class {
|
|
|
9368
9429
|
const now = Date.now();
|
|
9369
9430
|
let current;
|
|
9370
9431
|
try {
|
|
9371
|
-
current = await
|
|
9432
|
+
current = await chunkDAYCCIRO_cjs.getAllNormalizedVtxos(this.config.indexerProvider, scripts, {
|
|
9372
9433
|
spendableOnly: true
|
|
9373
9434
|
});
|
|
9374
9435
|
} catch (error) {
|
|
@@ -9577,14 +9638,14 @@ var ContractWatcher = class {
|
|
|
9577
9638
|
const timestamp = Date.now();
|
|
9578
9639
|
if (update.newVtxos?.length) {
|
|
9579
9640
|
this.processSubscriptionVtxos(
|
|
9580
|
-
update.newVtxos.map(
|
|
9641
|
+
update.newVtxos.map(chunkDAYCCIRO_cjs.normalizeVtxo),
|
|
9581
9642
|
"vtxo_received",
|
|
9582
9643
|
timestamp
|
|
9583
9644
|
);
|
|
9584
9645
|
}
|
|
9585
9646
|
if (update.spentVtxos?.length) {
|
|
9586
9647
|
this.processSubscriptionVtxos(
|
|
9587
|
-
update.spentVtxos.map(
|
|
9648
|
+
update.spentVtxos.map(chunkDAYCCIRO_cjs.normalizeVtxo),
|
|
9588
9649
|
"vtxo_spent",
|
|
9589
9650
|
timestamp
|
|
9590
9651
|
);
|
|
@@ -9612,8 +9673,8 @@ var ContractWatcher = class {
|
|
|
9612
9673
|
continue;
|
|
9613
9674
|
}
|
|
9614
9675
|
if (target === byWatchedScript && eventType === "vtxo_received") {
|
|
9615
|
-
const n =
|
|
9616
|
-
if (
|
|
9676
|
+
const n = chunkDAYCCIRO_cjs.normalizeVtxo(vtxo);
|
|
9677
|
+
if (chunkDAYCCIRO_cjs.isVtxoSpent(n) || n.isSwept || chunkDAYCCIRO_cjs.isPastExpiry(n, now)) continue;
|
|
9617
9678
|
}
|
|
9618
9679
|
let bucket = target.get(vtxo.script);
|
|
9619
9680
|
if (!bucket) {
|
|
@@ -9712,7 +9773,7 @@ var NON_TERMINAL_INTENT_STATES = ALL_INTENT_STATES.filter(
|
|
|
9712
9773
|
(s) => !isTerminalIntentState(s)
|
|
9713
9774
|
);
|
|
9714
9775
|
function isConsumed(vtxo) {
|
|
9715
|
-
return vtxo !== void 0 &&
|
|
9776
|
+
return vtxo !== void 0 && chunkDAYCCIRO_cjs.isVtxoSpent(vtxo);
|
|
9716
9777
|
}
|
|
9717
9778
|
async function classifyIntent(intent, vtxosByOutpoint, now) {
|
|
9718
9779
|
if (isTerminalIntentState(intent.state)) return void 0;
|
|
@@ -9755,7 +9816,7 @@ async function reconcileIntents(deps) {
|
|
|
9755
9816
|
let vtxosByOutpoint = /* @__PURE__ */ new Map();
|
|
9756
9817
|
if (outpoints.length > 0) {
|
|
9757
9818
|
try {
|
|
9758
|
-
const { vtxos } = await
|
|
9819
|
+
const { vtxos } = await chunkDAYCCIRO_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
|
|
9759
9820
|
vtxosByOutpoint = new Map(vtxos.map((v) => [outpointKey(v), v]));
|
|
9760
9821
|
} catch (e) {
|
|
9761
9822
|
console.error("reconcileIntents: failed to fetch input VTXO state", e);
|
|
@@ -9812,7 +9873,7 @@ function annotatableIn(scriptToContract, vtxos, memo) {
|
|
|
9812
9873
|
if (!contract) continue;
|
|
9813
9874
|
try {
|
|
9814
9875
|
const key = `${contract.type}\0${script}\0${JSON.stringify(contract.params)}`;
|
|
9815
|
-
const handler =
|
|
9876
|
+
const handler = chunkFUW3OM5X_cjs.contractHandlers.get(contract.type);
|
|
9816
9877
|
const hit = memo?.get(script);
|
|
9817
9878
|
let tapscripts;
|
|
9818
9879
|
if (hit && hit.key === key && hit.handler === handler) {
|
|
@@ -9967,7 +10028,7 @@ var ContractManager = class _ContractManager {
|
|
|
9967
10028
|
try {
|
|
9968
10029
|
await this.scheduleLookAheadDrain();
|
|
9969
10030
|
} catch (err) {
|
|
9970
|
-
if (!
|
|
10031
|
+
if (!chunkDAYCCIRO_cjs.isRetryableProviderError(err)) throw err;
|
|
9971
10032
|
this.lookAheadRefillOwed = true;
|
|
9972
10033
|
this.markSyncDegraded(err);
|
|
9973
10034
|
}
|
|
@@ -9975,7 +10036,7 @@ var ContractManager = class _ContractManager {
|
|
|
9975
10036
|
await this.reconcileWatched();
|
|
9976
10037
|
this.markSyncOnline();
|
|
9977
10038
|
} catch (err) {
|
|
9978
|
-
if (!
|
|
10039
|
+
if (!chunkDAYCCIRO_cjs.isRetryableProviderError(err)) throw err;
|
|
9979
10040
|
this.markSyncDegraded(err);
|
|
9980
10041
|
}
|
|
9981
10042
|
this.initialized = true;
|
|
@@ -10107,7 +10168,7 @@ var ContractManager = class _ContractManager {
|
|
|
10107
10168
|
const from = Math.max(0, watermark - lookAhead.size);
|
|
10108
10169
|
const to = watermark + lookAhead.size;
|
|
10109
10170
|
const deps = lookAhead.candidateDeps();
|
|
10110
|
-
const handlers =
|
|
10171
|
+
const handlers = chunkFUW3OM5X_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkFUW3OM5X_cjs.contractHandlers.get(t)).filter(hasCandidates);
|
|
10111
10172
|
const band = /* @__PURE__ */ new Map();
|
|
10112
10173
|
for (let index = from; index <= to; index++) {
|
|
10113
10174
|
const descriptor = lookAhead.materialize(index);
|
|
@@ -10118,7 +10179,7 @@ var ContractManager = class _ContractManager {
|
|
|
10118
10179
|
index,
|
|
10119
10180
|
params: {
|
|
10120
10181
|
...candidate,
|
|
10121
|
-
...
|
|
10182
|
+
...chunkFUW3OM5X_cjs.speculativeReceiveMetadata(descriptor)
|
|
10122
10183
|
}
|
|
10123
10184
|
});
|
|
10124
10185
|
}
|
|
@@ -10180,7 +10241,7 @@ var ContractManager = class _ContractManager {
|
|
|
10180
10241
|
});
|
|
10181
10242
|
for (const entry of pending) entry.catchUpPending = false;
|
|
10182
10243
|
} catch (err) {
|
|
10183
|
-
if (!
|
|
10244
|
+
if (!chunkDAYCCIRO_cjs.isRetryableProviderError(err)) throw err;
|
|
10184
10245
|
this.markSyncDegraded(err);
|
|
10185
10246
|
}
|
|
10186
10247
|
}
|
|
@@ -10230,7 +10291,7 @@ var ContractManager = class _ContractManager {
|
|
|
10230
10291
|
await this.fetchContractVxosFromIndexer([contract]);
|
|
10231
10292
|
this.markSyncOnline();
|
|
10232
10293
|
} catch (err) {
|
|
10233
|
-
if (!
|
|
10294
|
+
if (!chunkDAYCCIRO_cjs.isRetryableProviderError(err)) throw err;
|
|
10234
10295
|
this.markSyncDegraded(err);
|
|
10235
10296
|
}
|
|
10236
10297
|
await this.watcher.addContract(contract);
|
|
@@ -10264,7 +10325,7 @@ var ContractManager = class _ContractManager {
|
|
|
10264
10325
|
await this.fetchContractVxosFromIndexer(fresh);
|
|
10265
10326
|
this.markSyncOnline();
|
|
10266
10327
|
} catch (err) {
|
|
10267
|
-
if (!
|
|
10328
|
+
if (!chunkDAYCCIRO_cjs.isRetryableProviderError(err)) throw err;
|
|
10268
10329
|
this.markSyncDegraded(err);
|
|
10269
10330
|
}
|
|
10270
10331
|
for (const contract of fresh) await this.watcher.addContract(contract);
|
|
@@ -10302,7 +10363,7 @@ var ContractManager = class _ContractManager {
|
|
|
10302
10363
|
return result;
|
|
10303
10364
|
}
|
|
10304
10365
|
async upsertContractRow(params) {
|
|
10305
|
-
const handler =
|
|
10366
|
+
const handler = chunkFUW3OM5X_cjs.contractHandlers.get(params.type);
|
|
10306
10367
|
if (!handler) {
|
|
10307
10368
|
throw new Error(`No handler registered for contract type '${params.type}'`);
|
|
10308
10369
|
}
|
|
@@ -10402,7 +10463,7 @@ var ContractManager = class _ContractManager {
|
|
|
10402
10463
|
`scanContracts: batchSize must be a positive integer (got ${String(opts.batchSize)})`
|
|
10403
10464
|
);
|
|
10404
10465
|
}
|
|
10405
|
-
const registered =
|
|
10466
|
+
const registered = chunkFUW3OM5X_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkFUW3OM5X_cjs.contractHandlers.get(t)).filter(isDiscoverable);
|
|
10406
10467
|
const discoverables = [
|
|
10407
10468
|
...registered.filter((h) => h.type === "boarding"),
|
|
10408
10469
|
...registered.filter((h) => h.type !== "boarding")
|
|
@@ -10546,7 +10607,7 @@ var ContractManager = class _ContractManager {
|
|
|
10546
10607
|
await this.syncContracts({ contracts, pageSize });
|
|
10547
10608
|
this.markSyncOnline();
|
|
10548
10609
|
} catch (err) {
|
|
10549
|
-
if (!
|
|
10610
|
+
if (!chunkDAYCCIRO_cjs.isRetryableProviderError(err)) throw err;
|
|
10550
10611
|
this.markSyncDegraded(err);
|
|
10551
10612
|
if (options?.requireSynced) {
|
|
10552
10613
|
throw new Error("Spendable VTXO read requires an online contract sync", {
|
|
@@ -10579,7 +10640,7 @@ var ContractManager = class _ContractManager {
|
|
|
10579
10640
|
}
|
|
10580
10641
|
const tapscriptCache = tapscripts ?? /* @__PURE__ */ new Map();
|
|
10581
10642
|
return vtxos.map(
|
|
10582
|
-
(vtxo) => extendVirtualCoinForContract(
|
|
10643
|
+
(vtxo) => extendVirtualCoinForContract(chunkDAYCCIRO_cjs.normalizeVtxo(vtxo), byScript, tapscriptCache)
|
|
10583
10644
|
);
|
|
10584
10645
|
}
|
|
10585
10646
|
/** @inheritdoc */
|
|
@@ -10624,14 +10685,14 @@ var ContractManager = class _ContractManager {
|
|
|
10624
10685
|
const byScript = new Map(contracts.map((contract) => [contract.script, contract]));
|
|
10625
10686
|
const asking = vtxos.filter((vtxo) => {
|
|
10626
10687
|
const contract = byScript.get(vtxo.script);
|
|
10627
|
-
return contract !== void 0 &&
|
|
10688
|
+
return contract !== void 0 && chunkFUW3OM5X_cjs.contractHandlers.get(contract.type)?.assertSpendableNow !== void 0;
|
|
10628
10689
|
});
|
|
10629
10690
|
if (asking.length === 0) return refused;
|
|
10630
10691
|
const tip = await this.currentChainTip();
|
|
10631
10692
|
const walletKey = await walletPubKey?.();
|
|
10632
10693
|
for (const vtxo of asking) {
|
|
10633
10694
|
const contract = byScript.get(vtxo.script);
|
|
10634
|
-
const handler =
|
|
10695
|
+
const handler = chunkFUW3OM5X_cjs.contractHandlers.get(contract.type);
|
|
10635
10696
|
if (!handler?.assertSpendableNow) continue;
|
|
10636
10697
|
const context = {
|
|
10637
10698
|
collaborative: true,
|
|
@@ -10646,7 +10707,7 @@ var ContractManager = class _ContractManager {
|
|
|
10646
10707
|
// the next handler to answer a CSV question would meet a
|
|
10647
10708
|
// TypeError instead of a `false`. Carry the coin only when it
|
|
10648
10709
|
// really is one.
|
|
10649
|
-
vtxo:
|
|
10710
|
+
vtxo: chunkDAYCCIRO_cjs.isVirtualCoin(vtxo) && "status" in vtxo ? vtxo : void 0
|
|
10650
10711
|
};
|
|
10651
10712
|
try {
|
|
10652
10713
|
await handler.assertSpendableNow(
|
|
@@ -10803,7 +10864,7 @@ var ContractManager = class _ContractManager {
|
|
|
10803
10864
|
const { contractScript, collaborative = true, walletPubKey, vtxo } = options;
|
|
10804
10865
|
const [contract] = await this.getContracts({ script: contractScript });
|
|
10805
10866
|
if (!contract) return [];
|
|
10806
|
-
const handler =
|
|
10867
|
+
const handler = chunkFUW3OM5X_cjs.contractHandlers.get(contract.type);
|
|
10807
10868
|
if (!handler) return [];
|
|
10808
10869
|
const script = handler.createScript(contract.params);
|
|
10809
10870
|
const tip = await this.currentChainTip();
|
|
@@ -10831,7 +10892,7 @@ var ContractManager = class _ContractManager {
|
|
|
10831
10892
|
const { contractScript, collaborative = true, walletPubKey } = options;
|
|
10832
10893
|
const [contract] = await this.getContracts({ script: contractScript });
|
|
10833
10894
|
if (!contract) return [];
|
|
10834
|
-
const handler =
|
|
10895
|
+
const handler = chunkFUW3OM5X_cjs.contractHandlers.get(contract.type);
|
|
10835
10896
|
if (!handler) return [];
|
|
10836
10897
|
const script = handler.createScript(contract.params);
|
|
10837
10898
|
const context = {
|
|
@@ -10887,7 +10948,7 @@ var ContractManager = class _ContractManager {
|
|
|
10887
10948
|
}
|
|
10888
10949
|
async refreshOutpoints(outpoints) {
|
|
10889
10950
|
if (outpoints.length === 0) return;
|
|
10890
|
-
const { vtxos } = await
|
|
10951
|
+
const { vtxos } = await chunkDAYCCIRO_cjs.getNormalizedVtxos(this.config.indexerProvider, {
|
|
10891
10952
|
outpoints
|
|
10892
10953
|
});
|
|
10893
10954
|
if (vtxos.length === 0) return;
|
|
@@ -10989,7 +11050,7 @@ var ContractManager = class _ContractManager {
|
|
|
10989
11050
|
break;
|
|
10990
11051
|
}
|
|
10991
11052
|
} catch (err) {
|
|
10992
|
-
if (!
|
|
11053
|
+
if (!chunkDAYCCIRO_cjs.isRetryableProviderError(err)) throw err;
|
|
10993
11054
|
this.markSyncDegraded(err);
|
|
10994
11055
|
}
|
|
10995
11056
|
this.emitEvent(event);
|
|
@@ -10999,7 +11060,7 @@ var ContractManager = class _ContractManager {
|
|
|
10999
11060
|
let rows;
|
|
11000
11061
|
if (this.config.walletRepository.getVtxosForScripts) {
|
|
11001
11062
|
const byScript = new Set(contracts.map((contract) => contract.script));
|
|
11002
|
-
rows = (await this.config.walletRepository.getVtxosForScripts([...byScript], options)).filter((vtxo) => vtxo.script !== void 0 && byScript.has(vtxo.script)).map((vtxo) => ({ ...
|
|
11063
|
+
rows = (await this.config.walletRepository.getVtxosForScripts([...byScript], options)).filter((vtxo) => vtxo.script !== void 0 && byScript.has(vtxo.script)).map((vtxo) => ({ ...chunkDAYCCIRO_cjs.normalizeVtxo(vtxo), contractScript: vtxo.script }));
|
|
11003
11064
|
} else {
|
|
11004
11065
|
const res = await Promise.all(
|
|
11005
11066
|
contracts.map(
|
|
@@ -11015,7 +11076,7 @@ var ContractManager = class _ContractManager {
|
|
|
11015
11076
|
);
|
|
11016
11077
|
rows = res.flat();
|
|
11017
11078
|
}
|
|
11018
|
-
return options?.unspentOnly ? rows.filter((vtxo) => !
|
|
11079
|
+
return options?.unspentOnly ? rows.filter((vtxo) => !chunkDAYCCIRO_cjs.isVtxoSpent(vtxo)) : rows;
|
|
11019
11080
|
}
|
|
11020
11081
|
/**
|
|
11021
11082
|
* Sync virtual outputs for the given contracts against the indexer.
|
|
@@ -11088,7 +11149,7 @@ var ContractManager = class _ContractManager {
|
|
|
11088
11149
|
*/
|
|
11089
11150
|
async reconcilePendingFrontier(contracts) {
|
|
11090
11151
|
const scriptToContract = new Map(contracts.map((c) => [c.script, c]));
|
|
11091
|
-
const vtxos = await
|
|
11152
|
+
const vtxos = await chunkDAYCCIRO_cjs.getAllNormalizedVtxos(
|
|
11092
11153
|
this.config.indexerProvider,
|
|
11093
11154
|
contracts.map((c) => c.script),
|
|
11094
11155
|
{ pendingOnly: true }
|
|
@@ -11175,7 +11236,7 @@ var ContractManager = class _ContractManager {
|
|
|
11175
11236
|
}
|
|
11176
11237
|
return result;
|
|
11177
11238
|
}
|
|
11178
|
-
async fetchContractVtxosBulk(contracts, pageSize =
|
|
11239
|
+
async fetchContractVtxosBulk(contracts, pageSize = chunkDAYCCIRO_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
|
|
11179
11240
|
if (contracts.length === 0) {
|
|
11180
11241
|
return { vtxosByScript: /* @__PURE__ */ new Map(), promoted: /* @__PURE__ */ new Map() };
|
|
11181
11242
|
}
|
|
@@ -11191,7 +11252,7 @@ var ContractManager = class _ContractManager {
|
|
|
11191
11252
|
before: syncWindow.before
|
|
11192
11253
|
}
|
|
11193
11254
|
} : {};
|
|
11194
|
-
const vtxos = await
|
|
11255
|
+
const vtxos = await chunkDAYCCIRO_cjs.getAllNormalizedVtxos(
|
|
11195
11256
|
this.config.indexerProvider,
|
|
11196
11257
|
contracts.map((c) => c.script),
|
|
11197
11258
|
{ ...windowOpts, pageSize }
|
|
@@ -11340,7 +11401,7 @@ var deserializeTapLeaf = (t) => {
|
|
|
11340
11401
|
const s = base.hex.decode(t.s);
|
|
11341
11402
|
return [cb, s];
|
|
11342
11403
|
};
|
|
11343
|
-
var deserializeVtxo = (o) =>
|
|
11404
|
+
var deserializeVtxo = (o) => chunkDAYCCIRO_cjs.normalizeVtxo({
|
|
11344
11405
|
...o,
|
|
11345
11406
|
createdAt: new Date(o.createdAt),
|
|
11346
11407
|
tapTree: base.hex.decode(o.tapTree),
|
|
@@ -11571,7 +11632,7 @@ var IndexedDBWalletRepository = class {
|
|
|
11571
11632
|
continue;
|
|
11572
11633
|
}
|
|
11573
11634
|
const vtxo = deserializeVtxoWithBackfill(row);
|
|
11574
|
-
if (!options?.unspentOnly || !
|
|
11635
|
+
if (!options?.unspentOnly || !chunkDAYCCIRO_cjs.isVtxoSpent(vtxo)) result.push(vtxo);
|
|
11575
11636
|
}
|
|
11576
11637
|
return result;
|
|
11577
11638
|
} catch (error) {
|
|
@@ -12184,7 +12245,7 @@ var HDDescriptorProvider = class _HDDescriptorProvider {
|
|
|
12184
12245
|
*/
|
|
12185
12246
|
materializeDescriptorAt(index) {
|
|
12186
12247
|
const descriptor = this.identity.descriptor;
|
|
12187
|
-
const network =
|
|
12248
|
+
const network = chunkFUW3OM5X_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
|
|
12188
12249
|
const expansion = descriptorsScure.expand({ descriptor, network, index });
|
|
12189
12250
|
const keyInfo = expansion.expansionMap?.["@0"];
|
|
12190
12251
|
if (!keyInfo?.keyExpression) {
|
|
@@ -12332,7 +12393,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
|
|
|
12332
12393
|
const provider = await resolveDescriptorProvider(config, setup.walletRepository);
|
|
12333
12394
|
if (!provider) return void 0;
|
|
12334
12395
|
const allowSilentFallback = (config.walletMode ?? "auto") === "auto";
|
|
12335
|
-
const expectedContractType = setup.offchainTapscript instanceof
|
|
12396
|
+
const expectedContractType = setup.offchainTapscript instanceof chunkFUW3OM5X_cjs.DelegateVtxo.Script ? "delegate" : "default";
|
|
12336
12397
|
const factoryOpts = {
|
|
12337
12398
|
walletRepository: setup.walletRepository,
|
|
12338
12399
|
contractRepository: setup.contractRepository,
|
|
@@ -12533,7 +12594,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
|
|
|
12533
12594
|
};
|
|
12534
12595
|
function deriveLeafPubkey(descriptor) {
|
|
12535
12596
|
try {
|
|
12536
|
-
return
|
|
12597
|
+
return chunkFUW3OM5X_cjs.deriveDescriptorLeafPubKey(descriptor);
|
|
12537
12598
|
} catch (e) {
|
|
12538
12599
|
throw new NonRangeableDescriptorError(
|
|
12539
12600
|
"Cannot derive leaf pubkey: descriptor is not a materialized, parsable tr(...) shape.",
|
|
@@ -12545,7 +12606,7 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
12545
12606
|
const pubKey = deriveLeafPubkey(descriptor);
|
|
12546
12607
|
const tapscript = rebuildTapscript(current, pubKey);
|
|
12547
12608
|
const serverPubKey = tapscript.options.serverPubKey;
|
|
12548
|
-
const
|
|
12609
|
+
const csvTimelock2 = chunkDAYCCIRO_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
|
|
12549
12610
|
const base$1 = {
|
|
12550
12611
|
script: base.hex.encode(tapscript.pkScript),
|
|
12551
12612
|
address: tapscript.address(hrp, serverPubKey).encode(),
|
|
@@ -12556,18 +12617,18 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
12556
12617
|
// index-0 key. Without it, spends produce unsigned PSBTs that the
|
|
12557
12618
|
// server rejects with `INVALID_PSBT_INPUT (5): missing tapscript spend sig`.
|
|
12558
12619
|
metadata: {
|
|
12559
|
-
...tagSource && { source:
|
|
12620
|
+
...tagSource && { source: chunkFUW3OM5X_cjs.WALLET_RECEIVE_SOURCE },
|
|
12560
12621
|
signingDescriptor: descriptor
|
|
12561
12622
|
}
|
|
12562
12623
|
};
|
|
12563
|
-
const params = tapscript instanceof
|
|
12624
|
+
const params = tapscript instanceof chunkFUW3OM5X_cjs.DelegateVtxo.Script ? {
|
|
12564
12625
|
...base$1,
|
|
12565
12626
|
type: "delegate",
|
|
12566
12627
|
params: {
|
|
12567
12628
|
pubKey: base.hex.encode(pubKey),
|
|
12568
12629
|
serverPubKey: base.hex.encode(serverPubKey),
|
|
12569
12630
|
delegatePubKey: base.hex.encode(tapscript.options.delegatePubKey),
|
|
12570
|
-
csvTimelock
|
|
12631
|
+
csvTimelock: csvTimelock2
|
|
12571
12632
|
}
|
|
12572
12633
|
} : {
|
|
12573
12634
|
...base$1,
|
|
@@ -12575,16 +12636,16 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
|
|
|
12575
12636
|
params: {
|
|
12576
12637
|
pubKey: base.hex.encode(pubKey),
|
|
12577
12638
|
serverPubKey: base.hex.encode(serverPubKey),
|
|
12578
|
-
csvTimelock
|
|
12639
|
+
csvTimelock: csvTimelock2
|
|
12579
12640
|
}
|
|
12580
12641
|
};
|
|
12581
12642
|
return { tapscript, params };
|
|
12582
12643
|
}
|
|
12583
12644
|
function rebuildTapscript(current, pubKey) {
|
|
12584
|
-
if (current instanceof
|
|
12585
|
-
return new
|
|
12645
|
+
if (current instanceof chunkFUW3OM5X_cjs.DelegateVtxo.Script) {
|
|
12646
|
+
return new chunkFUW3OM5X_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
|
|
12586
12647
|
}
|
|
12587
|
-
return new
|
|
12648
|
+
return new chunkFUW3OM5X_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
|
|
12588
12649
|
}
|
|
12589
12650
|
async function pickActiveReceive(contractRepository, serverPubKey, expectedType) {
|
|
12590
12651
|
const candidates = await contractRepository.getContracts({
|
|
@@ -12593,7 +12654,7 @@ async function pickActiveReceive(contractRepository, serverPubKey, expectedType)
|
|
|
12593
12654
|
});
|
|
12594
12655
|
const serverPubKeyHex = base.hex.encode(serverPubKey);
|
|
12595
12656
|
const matching = candidates.filter(
|
|
12596
|
-
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source ===
|
|
12657
|
+
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkFUW3OM5X_cjs.WALLET_RECEIVE_SOURCE
|
|
12597
12658
|
).sort((a, b) => {
|
|
12598
12659
|
if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
|
|
12599
12660
|
return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
|
|
@@ -12649,7 +12710,7 @@ function computeOffchainBalance(vtxos, caps) {
|
|
|
12649
12710
|
}
|
|
12650
12711
|
};
|
|
12651
12712
|
for (const vtxo of vtxos) {
|
|
12652
|
-
if (
|
|
12713
|
+
if (chunkDAYCCIRO_cjs.isVtxoSpent(vtxo)) continue;
|
|
12653
12714
|
addAssets(owned, vtxo);
|
|
12654
12715
|
if (vtxo.isUnrolled) {
|
|
12655
12716
|
unrolled += vtxo.value;
|
|
@@ -12659,11 +12720,11 @@ function computeOffchainBalance(vtxos, caps) {
|
|
|
12659
12720
|
pendingRecovery += vtxo.value;
|
|
12660
12721
|
continue;
|
|
12661
12722
|
}
|
|
12662
|
-
if (
|
|
12723
|
+
if (chunkDAYCCIRO_cjs.canRecoverOnchain(vtxo, now)) {
|
|
12663
12724
|
recoverable += vtxo.value;
|
|
12664
12725
|
continue;
|
|
12665
12726
|
}
|
|
12666
|
-
if (!
|
|
12727
|
+
if (!chunkDAYCCIRO_cjs.canSpendOffchain(vtxo, now)) continue;
|
|
12667
12728
|
if (vtxo.isPreconfirmed) {
|
|
12668
12729
|
preconfirmed += vtxo.value;
|
|
12669
12730
|
} else {
|
|
@@ -12840,12 +12901,12 @@ var InputSignerRouter = class {
|
|
|
12840
12901
|
};
|
|
12841
12902
|
|
|
12842
12903
|
// src/wallet/wallet.ts
|
|
12843
|
-
var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl ||
|
|
12904
|
+
var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl || chunkDAYCCIRO_cjs.DEFAULT_ARKADE_SERVER_URL;
|
|
12844
12905
|
function intentProofJobs(coins) {
|
|
12845
12906
|
if (coins.length === 0) return [];
|
|
12846
12907
|
const coinJobs = coins.map((coin, i) => ({
|
|
12847
12908
|
index: i + 1,
|
|
12848
|
-
lookupScript:
|
|
12909
|
+
lookupScript: chunkDAYCCIRO_cjs.VtxoScript.decode(coin.tapTree).pkScript
|
|
12849
12910
|
}));
|
|
12850
12911
|
return [{ index: 0, lookupScript: coinJobs[0].lookupScript }, ...coinJobs];
|
|
12851
12912
|
}
|
|
@@ -12877,7 +12938,7 @@ function dedupeTimelocks(timelocks) {
|
|
|
12877
12938
|
const seen = /* @__PURE__ */ new Set();
|
|
12878
12939
|
const deduped = [];
|
|
12879
12940
|
for (const timelock of timelocks) {
|
|
12880
|
-
const sequence =
|
|
12941
|
+
const sequence = chunkDAYCCIRO_cjs.timelockToSequence(timelock).toString();
|
|
12881
12942
|
if (seen.has(sequence)) continue;
|
|
12882
12943
|
seen.add(sequence);
|
|
12883
12944
|
deduped.push(timelock);
|
|
@@ -12894,7 +12955,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
|
|
|
12894
12955
|
state: "active"
|
|
12895
12956
|
});
|
|
12896
12957
|
const newest = candidates.filter(
|
|
12897
|
-
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source ===
|
|
12958
|
+
(c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkFUW3OM5X_cjs.WALLET_RECEIVE_SOURCE
|
|
12898
12959
|
).sort((a, b) => {
|
|
12899
12960
|
if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
|
|
12900
12961
|
return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
|
|
@@ -12902,7 +12963,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
|
|
|
12902
12963
|
if (!newest?.params.pubKey) return baseline;
|
|
12903
12964
|
try {
|
|
12904
12965
|
const pubKey = base.hex.decode(newest.params.pubKey);
|
|
12905
|
-
return new
|
|
12966
|
+
return new chunkFUW3OM5X_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
|
|
12906
12967
|
} catch (e) {
|
|
12907
12968
|
console.warn("Skipping malformed boarding contract at boot", newest.script, e);
|
|
12908
12969
|
return baseline;
|
|
@@ -12921,15 +12982,43 @@ function filterSnapshotVtxos(snapshot, filter, pendingSpendOutpoints) {
|
|
|
12921
12982
|
if (vtxo.isUnrolled) {
|
|
12922
12983
|
return !!f.withUnrolled;
|
|
12923
12984
|
}
|
|
12924
|
-
if (
|
|
12985
|
+
if (chunkDAYCCIRO_cjs.isVtxoSpent(vtxo)) {
|
|
12925
12986
|
return false;
|
|
12926
12987
|
}
|
|
12927
|
-
if (!f.withRecoverable &&
|
|
12988
|
+
if (!f.withRecoverable && chunkDAYCCIRO_cjs.canRecoverOnchain(vtxo, now)) {
|
|
12928
12989
|
return false;
|
|
12929
12990
|
}
|
|
12930
12991
|
return true;
|
|
12931
12992
|
});
|
|
12932
12993
|
}
|
|
12994
|
+
async function refreshSweptStateOfExpiredInputs(wallet, inputs) {
|
|
12995
|
+
const candidates = inputs.filter(chunkDAYCCIRO_cjs.isVirtualCoin).map(chunkDAYCCIRO_cjs.normalizeVtxo).filter((v) => !v.isSwept);
|
|
12996
|
+
if (candidates.length === 0) return inputs;
|
|
12997
|
+
const now = candidates.some((v) => v.expiresAtHeight !== void 0) ? await chunkDAYCCIRO_cjs.resolveTimeHeight(wallet.onchainProvider) : { timestamp: /* @__PURE__ */ new Date() };
|
|
12998
|
+
const suspects = candidates.filter(
|
|
12999
|
+
(v) => chunkDAYCCIRO_cjs.isPastExpiry(v, now) || v.expiresAtHeight !== void 0 && now.height === void 0
|
|
13000
|
+
);
|
|
13001
|
+
if (suspects.length === 0) return inputs;
|
|
13002
|
+
let sweptNow;
|
|
13003
|
+
try {
|
|
13004
|
+
const manager = await wallet.getContractManager();
|
|
13005
|
+
await manager.refreshOutpoints(suspects.map(({ txid, vout }) => ({ txid, vout })));
|
|
13006
|
+
const suspectKeys = new Set(suspects.map((v) => `${v.txid}:${v.vout}`));
|
|
13007
|
+
const fresh = await wallet.getVtxos({ withRecoverable: true });
|
|
13008
|
+
sweptNow = new Set(
|
|
13009
|
+
fresh.filter((v) => v.isSwept && suspectKeys.has(`${v.txid}:${v.vout}`)).map((v) => `${v.txid}:${v.vout}`)
|
|
13010
|
+
);
|
|
13011
|
+
} catch (e) {
|
|
13012
|
+
const message = "could not confirm the swept state of expired settlement inputs; retry the settlement";
|
|
13013
|
+
throw chunkDAYCCIRO_cjs.isRetryableProviderError(e) ? new chunkDAYCCIRO_cjs.ProviderUnavailableError(message, { cause: e }) : new Error(message, { cause: e });
|
|
13014
|
+
}
|
|
13015
|
+
if (sweptNow.size === 0) return inputs;
|
|
13016
|
+
return inputs.map((input) => {
|
|
13017
|
+
if (!chunkDAYCCIRO_cjs.isVirtualCoin(input) || !sweptNow.has(`${input.txid}:${input.vout}`)) return input;
|
|
13018
|
+
const swept = { ...chunkDAYCCIRO_cjs.normalizeVtxo(input), isSwept: true };
|
|
13019
|
+
return { ...swept, virtualStatus: chunkDAYCCIRO_cjs.toVirtualStatus(swept) };
|
|
13020
|
+
});
|
|
13021
|
+
}
|
|
12933
13022
|
var PENDING_RECOVERY_REASON = "is past its operator signer's rotation cutoff \u2014 the operator will not co-sign it until it recovers";
|
|
12934
13023
|
var UNROLLED_REASON = "was unilaterally exited and lives onchain \u2014 `Unroll.completeUnroll` is the only spend that reaches it";
|
|
12935
13024
|
function omittedOutpoints(before, after) {
|
|
@@ -13264,7 +13353,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13264
13353
|
*/
|
|
13265
13354
|
static async setupWalletConfig(config, pubKey) {
|
|
13266
13355
|
const arkadeServerUrl = getArkadeServerUrl(config);
|
|
13267
|
-
const arkProvider = config.arkProvider || new
|
|
13356
|
+
const arkProvider = config.arkProvider || new chunkDAYCCIRO_cjs.RestArkProvider(arkadeServerUrl);
|
|
13268
13357
|
let indexerProvider = config.indexerProvider;
|
|
13269
13358
|
if (!indexerProvider) {
|
|
13270
13359
|
let indexerUrl = config.indexerUrl;
|
|
@@ -13281,7 +13370,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13281
13370
|
indexerUrl = arkadeServerUrl;
|
|
13282
13371
|
}
|
|
13283
13372
|
}
|
|
13284
|
-
indexerProvider = new
|
|
13373
|
+
indexerProvider = new chunkSJPPBR2V_cjs.RestIndexerProvider(indexerUrl);
|
|
13285
13374
|
}
|
|
13286
13375
|
const walletRepository = config.storage?.walletRepository ?? new IndexedDBWalletRepository();
|
|
13287
13376
|
const contractRepository = config.storage?.contractRepository ?? new IndexedDBContractRepository();
|
|
@@ -13290,7 +13379,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13290
13379
|
source: serverInfoSource,
|
|
13291
13380
|
lastOnlineAt: serverInfoLastOnlineAt
|
|
13292
13381
|
} = await resolveArkInfo(arkProvider, walletRepository);
|
|
13293
|
-
const network =
|
|
13382
|
+
const network = chunkDAYCCIRO_cjs.getNetwork(info.network);
|
|
13294
13383
|
if ("descriptor" in config.identity) {
|
|
13295
13384
|
const descriptor = config.identity.descriptor;
|
|
13296
13385
|
const identityIsMainnet = !descriptor.includes("tpub");
|
|
@@ -13330,18 +13419,18 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13330
13419
|
value: info.boardingExitDelay,
|
|
13331
13420
|
type: info.boardingExitDelay < 512n ? "blocks" : "seconds"
|
|
13332
13421
|
};
|
|
13333
|
-
const serverPubKey =
|
|
13334
|
-
const delegatePubKey = config.delegateProvider ? await config.delegateProvider.getDelegateInfo().then((info2) =>
|
|
13422
|
+
const serverPubKey = chunkFUW3OM5X_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
|
|
13423
|
+
const delegatePubKey = config.delegateProvider ? await config.delegateProvider.getDelegateInfo().then((info2) => chunkFUW3OM5X_cjs.toXOnly(base.hex.decode(info2.pubkey), "delegate key")).catch(() => void 0) : config.delegatorProvider ? await config.delegatorProvider.getDelegateInfo().then((info2) => chunkFUW3OM5X_cjs.toXOnly(base.hex.decode(info2.pubkey), "delegate key")).catch(() => void 0) : void 0;
|
|
13335
13424
|
const offchainOptions = {
|
|
13336
13425
|
pubKey,
|
|
13337
13426
|
serverPubKey,
|
|
13338
13427
|
csvTimelock: exitTimelock
|
|
13339
13428
|
};
|
|
13340
|
-
const offchainTapscript = !delegatePubKey ? new
|
|
13341
|
-
const boardingTapscript =
|
|
13429
|
+
const offchainTapscript = !delegatePubKey ? new chunkFUW3OM5X_cjs.DefaultVtxo.Script(offchainOptions) : new chunkFUW3OM5X_cjs.DelegateVtxo.Script({ ...offchainOptions, delegatePubKey });
|
|
13430
|
+
const boardingTapscript = chunkFUW3OM5X_cjs.BoardingContractHandler.createScript({
|
|
13342
13431
|
pubKey: base.hex.encode(pubKey),
|
|
13343
13432
|
serverPubKey: base.hex.encode(serverPubKey),
|
|
13344
|
-
csvTimelock:
|
|
13433
|
+
csvTimelock: chunkDAYCCIRO_cjs.timelockToSequence(boardingTimelock).toString()
|
|
13345
13434
|
});
|
|
13346
13435
|
return {
|
|
13347
13436
|
arkProvider,
|
|
@@ -13429,7 +13518,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13429
13518
|
async getBalance() {
|
|
13430
13519
|
const [boardingUtxos, snapshot] = await Promise.all([
|
|
13431
13520
|
this.getBoardingUtxos(),
|
|
13432
|
-
|
|
13521
|
+
// The bucketer drops every spent coin and the gate reads contracts only.
|
|
13522
|
+
this.contractSnapshot(void 0, { unspentOnly: true })
|
|
13433
13523
|
]);
|
|
13434
13524
|
const vtxos = filterSnapshotVtxos(
|
|
13435
13525
|
snapshot,
|
|
@@ -13482,7 +13572,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13482
13572
|
*/
|
|
13483
13573
|
async getVtxos(filter) {
|
|
13484
13574
|
return filterSnapshotVtxos(
|
|
13485
|
-
|
|
13575
|
+
// Only an unrolled coin is returned spent, so no other read needs spent rows.
|
|
13576
|
+
await this.contractSnapshot(void 0, { unspentOnly: !filter?.withUnrolled }),
|
|
13486
13577
|
filter,
|
|
13487
13578
|
this._pendingSpendOutpoints
|
|
13488
13579
|
);
|
|
@@ -13509,7 +13600,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13509
13600
|
if (!filter?.withUnrolled) {
|
|
13510
13601
|
logExcludedVtxos(
|
|
13511
13602
|
"getSpendableVtxos",
|
|
13512
|
-
snapshot.flatMap((contract) => contract.vtxos).filter((vtxo) => vtxo.isUnrolled && !
|
|
13603
|
+
snapshot.flatMap((contract) => contract.vtxos).filter((vtxo) => vtxo.isUnrolled && !chunkDAYCCIRO_cjs.isVtxoSpent(vtxo)),
|
|
13513
13604
|
[() => UNROLLED_REASON]
|
|
13514
13605
|
);
|
|
13515
13606
|
}
|
|
@@ -13670,7 +13761,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13670
13761
|
this.getBoardingTxs()
|
|
13671
13762
|
]);
|
|
13672
13763
|
const allVtxos = snapshot.flatMap((_) => _.vtxos);
|
|
13673
|
-
const resolveTxCreatedAt = (txids) =>
|
|
13764
|
+
const resolveTxCreatedAt = (txids) => chunkDAYCCIRO_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
|
|
13674
13765
|
return buildTransactionHistory(
|
|
13675
13766
|
allVtxos,
|
|
13676
13767
|
boardingTxs,
|
|
@@ -13765,7 +13856,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13765
13856
|
},
|
|
13766
13857
|
isUnrolled: true,
|
|
13767
13858
|
...boardingFacts,
|
|
13768
|
-
virtualStatus:
|
|
13859
|
+
virtualStatus: chunkDAYCCIRO_cjs.toVirtualStatus(boardingFacts),
|
|
13769
13860
|
spentBy: "",
|
|
13770
13861
|
createdAt: tx.status.confirmed ? new Date(tx.status.block_time * 1e3) : /* @__PURE__ */ new Date(0),
|
|
13771
13862
|
script: scriptHex
|
|
@@ -13821,9 +13912,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13821
13912
|
async getBoardingTapscripts(allowedSigners) {
|
|
13822
13913
|
const byScript = /* @__PURE__ */ new Map();
|
|
13823
13914
|
const add = (s) => byScript.set(base.hex.encode(s.pkScript), s);
|
|
13824
|
-
const boardingCsv = this.boardingTapscript.options.csvTimelock ??
|
|
13915
|
+
const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunkFUW3OM5X_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
13825
13916
|
add(
|
|
13826
|
-
new
|
|
13917
|
+
new chunkFUW3OM5X_cjs.DefaultVtxo.Script({
|
|
13827
13918
|
pubKey: await this.identity.xOnlyPublicKey(),
|
|
13828
13919
|
serverPubKey: this.boardingTapscript.options.serverPubKey,
|
|
13829
13920
|
csvTimelock: boardingCsv
|
|
@@ -13838,7 +13929,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13838
13929
|
for (const c of boardingContracts) {
|
|
13839
13930
|
if (!allowed.has(toXOnlySignerHex(c.params.serverPubKey))) continue;
|
|
13840
13931
|
try {
|
|
13841
|
-
add(
|
|
13932
|
+
add(chunkFUW3OM5X_cjs.BoardingContractHandler.createScript(c.params));
|
|
13842
13933
|
} catch (e) {
|
|
13843
13934
|
console.warn("Skipping malformed boarding contract", c.script, e);
|
|
13844
13935
|
}
|
|
@@ -13875,7 +13966,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
13875
13966
|
// Per-row CSV delay decoded from THIS tapscript's exit leaf —
|
|
13876
13967
|
// not the wallet's current boarding timelock, which a signer
|
|
13877
13968
|
// rotation may have changed.
|
|
13878
|
-
csvTimelock:
|
|
13969
|
+
csvTimelock: chunkDAYCCIRO_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
|
|
13879
13970
|
coins: utxos
|
|
13880
13971
|
};
|
|
13881
13972
|
})
|
|
@@ -14012,7 +14103,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
14012
14103
|
/** Fetch Arkade transaction ids that are still pending final settlement. */
|
|
14013
14104
|
async fetchPendingTxs() {
|
|
14014
14105
|
const scripts = await this.getWalletScripts();
|
|
14015
|
-
const vtxos = await
|
|
14106
|
+
const vtxos = await chunkDAYCCIRO_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
|
|
14016
14107
|
return vtxos.filter(
|
|
14017
14108
|
(vtxo) => (vtxo.isSpent || vtxo.isPreconfirmed && !vtxo.isSwept) && vtxo.arkTxId !== void 0
|
|
14018
14109
|
).map((_) => _.arkTxId);
|
|
@@ -14043,7 +14134,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
14043
14134
|
});
|
|
14044
14135
|
for (const contract of contracts) {
|
|
14045
14136
|
if (map.has(contract.script)) continue;
|
|
14046
|
-
const handler =
|
|
14137
|
+
const handler = chunkFUW3OM5X_cjs.contractHandlers.get(contract.type);
|
|
14047
14138
|
if (handler) {
|
|
14048
14139
|
const script = handler.createScript(contract.params);
|
|
14049
14140
|
map.set(contract.script, script);
|
|
@@ -14155,19 +14246,19 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
14155
14246
|
}
|
|
14156
14247
|
});
|
|
14157
14248
|
const baselinePubkey = await this.identity.xOnlyPublicKey();
|
|
14158
|
-
const delegatePubKey = this.offchainTapscript instanceof
|
|
14249
|
+
const delegatePubKey = this.offchainTapscript instanceof chunkFUW3OM5X_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
|
|
14159
14250
|
const baselineSigners = [
|
|
14160
14251
|
this.offchainTapscript.options.serverPubKey,
|
|
14161
14252
|
...[...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h))
|
|
14162
14253
|
];
|
|
14163
14254
|
const seenBaselineScripts = /* @__PURE__ */ new Set();
|
|
14164
14255
|
for (const serverPubKey of baselineSigners) {
|
|
14165
|
-
for (const
|
|
14166
|
-
const csvTimelockStr =
|
|
14167
|
-
const defaultScript = new
|
|
14256
|
+
for (const csvTimelock2 of this.walletContractTimelocks) {
|
|
14257
|
+
const csvTimelockStr = chunkDAYCCIRO_cjs.timelockToSequence(csvTimelock2).toString();
|
|
14258
|
+
const defaultScript = new chunkFUW3OM5X_cjs.DefaultVtxo.Script({
|
|
14168
14259
|
pubKey: baselinePubkey,
|
|
14169
14260
|
serverPubKey,
|
|
14170
|
-
csvTimelock
|
|
14261
|
+
csvTimelock: csvTimelock2
|
|
14171
14262
|
});
|
|
14172
14263
|
const defaultScriptHex = base.hex.encode(defaultScript.pkScript);
|
|
14173
14264
|
if (!seenBaselineScripts.has(defaultScriptHex)) {
|
|
@@ -14185,11 +14276,11 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
14185
14276
|
});
|
|
14186
14277
|
}
|
|
14187
14278
|
if (delegatePubKey) {
|
|
14188
|
-
const delegateScript = new
|
|
14279
|
+
const delegateScript = new chunkFUW3OM5X_cjs.DelegateVtxo.Script({
|
|
14189
14280
|
pubKey: baselinePubkey,
|
|
14190
14281
|
serverPubKey,
|
|
14191
14282
|
delegatePubKey,
|
|
14192
|
-
csvTimelock
|
|
14283
|
+
csvTimelock: csvTimelock2
|
|
14193
14284
|
});
|
|
14194
14285
|
const delegateScriptHex = base.hex.encode(delegateScript.pkScript);
|
|
14195
14286
|
if (seenBaselineScripts.has(delegateScriptHex)) continue;
|
|
@@ -14209,9 +14300,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
14209
14300
|
}
|
|
14210
14301
|
}
|
|
14211
14302
|
}
|
|
14212
|
-
const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ??
|
|
14303
|
+
const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunkFUW3OM5X_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
14213
14304
|
for (const serverPubKey of baselineSigners) {
|
|
14214
|
-
const baselineBoarding = new
|
|
14305
|
+
const baselineBoarding = new chunkFUW3OM5X_cjs.DefaultVtxo.Script({
|
|
14215
14306
|
pubKey: baselinePubkey,
|
|
14216
14307
|
serverPubKey,
|
|
14217
14308
|
csvTimelock: boardingCsvTimelock
|
|
@@ -14224,7 +14315,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
14224
14315
|
params: {
|
|
14225
14316
|
pubKey: base.hex.encode(baselineBoarding.options.pubKey),
|
|
14226
14317
|
serverPubKey: base.hex.encode(serverPubKey),
|
|
14227
|
-
csvTimelock:
|
|
14318
|
+
csvTimelock: chunkDAYCCIRO_cjs.timelockToSequence(boardingCsvTimelock).toString()
|
|
14228
14319
|
},
|
|
14229
14320
|
script: boardingScriptHex,
|
|
14230
14321
|
address: baselineBoarding.address(this.network.hrp, serverPubKey).encode(),
|
|
@@ -14424,7 +14515,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14424
14515
|
serverPubKey: this.offchainTapscript.options.serverPubKey,
|
|
14425
14516
|
deprecatedSignerPubKeys: [...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h)),
|
|
14426
14517
|
csvTimelocks: this.walletContractTimelocks,
|
|
14427
|
-
delegatePubKey: this.offchainTapscript instanceof
|
|
14518
|
+
delegatePubKey: this.offchainTapscript instanceof chunkFUW3OM5X_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
|
|
14428
14519
|
};
|
|
14429
14520
|
}
|
|
14430
14521
|
_signerRouter;
|
|
@@ -14669,7 +14760,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14669
14760
|
const [row] = await manager.getContracts({ script: base.hex.encode(display.pkScript) });
|
|
14670
14761
|
const persisted = row?.metadata?.signingDescriptor;
|
|
14671
14762
|
if (typeof persisted === "string") return persisted;
|
|
14672
|
-
return
|
|
14763
|
+
return chunkFUW3OM5X_cjs.identityDescriptor(this.identity);
|
|
14673
14764
|
}
|
|
14674
14765
|
/**
|
|
14675
14766
|
* Build, persist and shape one address of `type` owned by `descriptor` —
|
|
@@ -14685,7 +14776,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14685
14776
|
async mintAddress(manager, type, descriptor, tagSource, allocated) {
|
|
14686
14777
|
if (type === "boarding") {
|
|
14687
14778
|
const built2 = this.buildBoardingContract(
|
|
14688
|
-
|
|
14779
|
+
chunkFUW3OM5X_cjs.deriveDescriptorLeafPubKey(descriptor),
|
|
14689
14780
|
descriptor,
|
|
14690
14781
|
tagSource
|
|
14691
14782
|
);
|
|
@@ -14730,11 +14821,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14730
14821
|
* {@link buildReceiveContract}.
|
|
14731
14822
|
*/
|
|
14732
14823
|
buildBoardingContract(pubKey, descriptor, tagSource) {
|
|
14733
|
-
const tapscript = new
|
|
14824
|
+
const tapscript = new chunkFUW3OM5X_cjs.DefaultVtxo.Script({
|
|
14734
14825
|
...this._boardingTapscript.options,
|
|
14735
14826
|
pubKey
|
|
14736
14827
|
});
|
|
14737
|
-
const
|
|
14828
|
+
const csvTimelock2 = tapscript.options.csvTimelock ?? chunkFUW3OM5X_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
14738
14829
|
return {
|
|
14739
14830
|
tapscript,
|
|
14740
14831
|
params: {
|
|
@@ -14742,13 +14833,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14742
14833
|
params: {
|
|
14743
14834
|
pubKey: base.hex.encode(pubKey),
|
|
14744
14835
|
serverPubKey: base.hex.encode(tapscript.options.serverPubKey),
|
|
14745
|
-
csvTimelock:
|
|
14836
|
+
csvTimelock: chunkDAYCCIRO_cjs.timelockToSequence(csvTimelock2).toString()
|
|
14746
14837
|
},
|
|
14747
14838
|
script: base.hex.encode(tapscript.pkScript),
|
|
14748
14839
|
address: tapscript.address(this.network.hrp, this.arkServerPublicKey).encode(),
|
|
14749
14840
|
state: "active",
|
|
14750
14841
|
metadata: {
|
|
14751
|
-
...tagSource && { source:
|
|
14842
|
+
...tagSource && { source: chunkFUW3OM5X_cjs.WALLET_RECEIVE_SOURCE },
|
|
14752
14843
|
signingDescriptor: descriptor
|
|
14753
14844
|
}
|
|
14754
14845
|
}
|
|
@@ -14777,7 +14868,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14777
14868
|
if (this._descriptorProvider instanceof HDDescriptorProvider) {
|
|
14778
14869
|
return (await this.getContractManager()).getNextSigningDescriptor();
|
|
14779
14870
|
}
|
|
14780
|
-
return
|
|
14871
|
+
return chunkFUW3OM5X_cjs.identityDescriptor(this.identity);
|
|
14781
14872
|
}
|
|
14782
14873
|
/**
|
|
14783
14874
|
* @see HDAllocationCapable.advanceSigningDescriptorWatermark
|
|
@@ -14873,7 +14964,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14873
14964
|
* the stable public API.
|
|
14874
14965
|
*/
|
|
14875
14966
|
async rotateServerSigner(newServerPubKey, checkpointTapscript) {
|
|
14876
|
-
const xonly =
|
|
14967
|
+
const xonly = chunkFUW3OM5X_cjs.toXOnly(newServerPubKey, "ark signer key");
|
|
14877
14968
|
const newServerUnrollScript = assertValidServerUnrollScript(
|
|
14878
14969
|
checkpointTapscript,
|
|
14879
14970
|
resolveCheckpointExitDelayPolicy(this.network, this.checkpointExitDelayPolicy)
|
|
@@ -14902,21 +14993,21 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14902
14993
|
const [currentBoardingRow] = await manager.getContracts({
|
|
14903
14994
|
script: currentBoardingScript
|
|
14904
14995
|
});
|
|
14905
|
-
const newOffchain = this.offchainTapscript instanceof
|
|
14996
|
+
const newOffchain = this.offchainTapscript instanceof chunkFUW3OM5X_cjs.DelegateVtxo.Script ? new chunkFUW3OM5X_cjs.DelegateVtxo.Script({
|
|
14906
14997
|
...this.offchainTapscript.options,
|
|
14907
14998
|
serverPubKey: xonly
|
|
14908
|
-
}) : new
|
|
14999
|
+
}) : new chunkFUW3OM5X_cjs.DefaultVtxo.Script({
|
|
14909
15000
|
...this.offchainTapscript.options,
|
|
14910
15001
|
serverPubKey: xonly
|
|
14911
15002
|
});
|
|
14912
|
-
const newBoarding = new
|
|
15003
|
+
const newBoarding = new chunkFUW3OM5X_cjs.DefaultVtxo.Script({
|
|
14913
15004
|
...this._boardingTapscript.options,
|
|
14914
15005
|
serverPubKey: xonly
|
|
14915
15006
|
});
|
|
14916
|
-
const offchainCsv =
|
|
15007
|
+
const offchainCsv = chunkDAYCCIRO_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
|
|
14917
15008
|
const newOffchainScript = base.hex.encode(newOffchain.pkScript);
|
|
14918
15009
|
const newOffchainAddress = newOffchain.address(this.network.hrp, xonly).encode();
|
|
14919
|
-
if (newOffchain instanceof
|
|
15010
|
+
if (newOffchain instanceof chunkFUW3OM5X_cjs.DelegateVtxo.Script) {
|
|
14920
15011
|
await manager.createContract({
|
|
14921
15012
|
type: "delegate",
|
|
14922
15013
|
params: {
|
|
@@ -14944,13 +15035,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14944
15035
|
metadata: currentOffchainRow?.metadata
|
|
14945
15036
|
});
|
|
14946
15037
|
}
|
|
14947
|
-
const boardingCsv = newBoarding.options.csvTimelock ??
|
|
15038
|
+
const boardingCsv = newBoarding.options.csvTimelock ?? chunkFUW3OM5X_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
14948
15039
|
await manager.createContract({
|
|
14949
15040
|
type: "boarding",
|
|
14950
15041
|
params: {
|
|
14951
15042
|
pubKey: base.hex.encode(newBoarding.options.pubKey),
|
|
14952
15043
|
serverPubKey: base.hex.encode(xonly),
|
|
14953
|
-
csvTimelock:
|
|
15044
|
+
csvTimelock: chunkDAYCCIRO_cjs.timelockToSequence(boardingCsv).toString()
|
|
14954
15045
|
},
|
|
14955
15046
|
script: base.hex.encode(newBoarding.pkScript),
|
|
14956
15047
|
address: newBoarding.address(this.network.hrp, xonly).encode(),
|
|
@@ -14983,14 +15074,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14983
15074
|
_restoreInFlight;
|
|
14984
15075
|
_addPendingSpends(inputs) {
|
|
14985
15076
|
for (const input of inputs) {
|
|
14986
|
-
if (
|
|
15077
|
+
if (chunkDAYCCIRO_cjs.isVirtualCoin(input)) {
|
|
14987
15078
|
this._pendingSpendOutpoints.add(`${input.txid}:${input.vout}`);
|
|
14988
15079
|
}
|
|
14989
15080
|
}
|
|
14990
15081
|
}
|
|
14991
15082
|
_removePendingSpends(inputs) {
|
|
14992
15083
|
for (const input of inputs) {
|
|
14993
|
-
if (
|
|
15084
|
+
if (chunkDAYCCIRO_cjs.isVirtualCoin(input)) {
|
|
14994
15085
|
this._pendingSpendOutpoints.delete(`${input.txid}:${input.vout}`);
|
|
14995
15086
|
}
|
|
14996
15087
|
}
|
|
@@ -15051,13 +15142,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15051
15142
|
const manager = await this.getContractManager();
|
|
15052
15143
|
const provider = this._descriptorProvider;
|
|
15053
15144
|
const hd = provider instanceof HDDescriptorProvider;
|
|
15054
|
-
const staticDescriptor = hd ? void 0 : await
|
|
15145
|
+
const staticDescriptor = hd ? void 0 : await chunkFUW3OM5X_cjs.identityDescriptor(this.identity);
|
|
15055
15146
|
const materialize = (index) => hd ? provider.materializeDescriptorAt(index) : staticDescriptor;
|
|
15056
|
-
const delegatePubKey = this.offchainTapscript instanceof
|
|
15147
|
+
const delegatePubKey = this.offchainTapscript instanceof chunkFUW3OM5X_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
|
|
15057
15148
|
const arkInfo = await this.arkProvider.getInfo();
|
|
15058
|
-
const currentSignerPubKey =
|
|
15149
|
+
const currentSignerPubKey = chunkFUW3OM5X_cjs.toXOnly(base.hex.decode(arkInfo.signerPubkey), "ark signer key");
|
|
15059
15150
|
const deprecatedSignerPubKeys = arkInfo.deprecatedSigners.map(
|
|
15060
|
-
(s) =>
|
|
15151
|
+
(s) => chunkFUW3OM5X_cjs.toXOnly(base.hex.decode(s.pubkey), "deprecated signer key")
|
|
15061
15152
|
);
|
|
15062
15153
|
const deps = {
|
|
15063
15154
|
indexerProvider: this.indexerProvider,
|
|
@@ -15072,7 +15163,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15072
15163
|
csvTimelocks: this.walletContractTimelocks,
|
|
15073
15164
|
// Boarding-exit CSV so the boarding handler can build its
|
|
15074
15165
|
// candidate script (distinct from the unilateral-exit matrix).
|
|
15075
|
-
boardingTimelock: this.boardingTapscript.options.csvTimelock ??
|
|
15166
|
+
boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunkFUW3OM5X_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
|
|
15076
15167
|
delegatePubKey
|
|
15077
15168
|
};
|
|
15078
15169
|
const result = await manager.scanContracts({
|
|
@@ -15186,7 +15277,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15186
15277
|
throw new Error("Invalid configured public key");
|
|
15187
15278
|
}
|
|
15188
15279
|
const setup = await ReadonlyWallet.setupWalletConfig(config, pubkey);
|
|
15189
|
-
const forfeitPubkey =
|
|
15280
|
+
const forfeitPubkey = chunkFUW3OM5X_cjs.toXOnly(base.hex.decode(setup.info.forfeitPubkey), "forfeit key");
|
|
15190
15281
|
const forfeitAddress = btcSigner.Address(setup.network).decode(setup.info.forfeitAddress);
|
|
15191
15282
|
const forfeitOutputScript = btcSigner.OutScript.encode(forfeitAddress);
|
|
15192
15283
|
const checkpointExitDelayOverrides = {
|
|
@@ -15335,7 +15426,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15335
15426
|
inputs: params.selectedVtxos,
|
|
15336
15427
|
changeAmount: BigInt(changeAmount)
|
|
15337
15428
|
};
|
|
15338
|
-
const outputAddress =
|
|
15429
|
+
const outputAddress = chunkDAYCCIRO_cjs.ArkAddress.decode(params.address);
|
|
15339
15430
|
assertRecipientArkAddress(
|
|
15340
15431
|
params.address,
|
|
15341
15432
|
outputAddress,
|
|
@@ -15401,13 +15492,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15401
15492
|
void this.logUngatedInputs("settle({ inputs })", params.inputs);
|
|
15402
15493
|
}
|
|
15403
15494
|
const offchainAddress = await this.getAddress();
|
|
15404
|
-
const offchainPkScript =
|
|
15495
|
+
const offchainPkScript = chunkDAYCCIRO_cjs.ArkAddress.decode(offchainAddress).pkScript;
|
|
15405
15496
|
const offchainOutputScript = base.hex.encode(offchainPkScript);
|
|
15406
15497
|
if (!params) {
|
|
15407
15498
|
const { fees, vtxoMaxAmount } = await this.arkProvider.getInfo();
|
|
15408
15499
|
const estimator = new Estimator(fees.intentFee);
|
|
15409
15500
|
let amount = 0;
|
|
15410
|
-
const exitScript =
|
|
15501
|
+
const exitScript = chunkDAYCCIRO_cjs.CSVMultisigTapscript.decode(
|
|
15411
15502
|
base.hex.decode(this.boardingTapscript.exitScript)
|
|
15412
15503
|
);
|
|
15413
15504
|
const boardingTimelock = exitScript.params.timelock;
|
|
@@ -15439,7 +15530,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15439
15530
|
if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
|
|
15440
15531
|
break;
|
|
15441
15532
|
}
|
|
15442
|
-
const inputFee = estimator.evalOffchainInput(
|
|
15533
|
+
const inputFee = estimator.evalOffchainInput(chunkDAYCCIRO_cjs.toOffchainInputFeeParams(vtxo));
|
|
15443
15534
|
if (inputFee.satoshis >= vtxo.value) {
|
|
15444
15535
|
continue;
|
|
15445
15536
|
}
|
|
@@ -15478,6 +15569,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15478
15569
|
outputs: [output]
|
|
15479
15570
|
};
|
|
15480
15571
|
}
|
|
15572
|
+
params = {
|
|
15573
|
+
...params,
|
|
15574
|
+
inputs: await refreshSweptStateOfExpiredInputs(this, params.inputs)
|
|
15575
|
+
};
|
|
15481
15576
|
const onchainOutputIndexes = [];
|
|
15482
15577
|
const outputs = [];
|
|
15483
15578
|
let hasOffchainOutputs = false;
|
|
@@ -15486,7 +15581,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15486
15581
|
let script;
|
|
15487
15582
|
let arkAddress;
|
|
15488
15583
|
try {
|
|
15489
|
-
arkAddress =
|
|
15584
|
+
arkAddress = chunkDAYCCIRO_cjs.ArkAddress.decode(output.address);
|
|
15490
15585
|
} catch {
|
|
15491
15586
|
arkAddress = void 0;
|
|
15492
15587
|
}
|
|
@@ -15558,7 +15653,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15558
15653
|
]);
|
|
15559
15654
|
let intentTxId;
|
|
15560
15655
|
try {
|
|
15561
|
-
intentTxId =
|
|
15656
|
+
intentTxId = chunkDAYCCIRO_cjs.Transaction.fromPSBT(base.base64.decode(intent.proof)).id;
|
|
15562
15657
|
} catch {
|
|
15563
15658
|
intentTxId = params.inputs.map((i) => `${i.txid}:${i.vout}`).sort().join("|");
|
|
15564
15659
|
}
|
|
@@ -15576,7 +15671,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15576
15671
|
const abortController = new AbortController();
|
|
15577
15672
|
let stream;
|
|
15578
15673
|
let committedTxid;
|
|
15579
|
-
const settleInputVtxos = params.inputs.filter(
|
|
15674
|
+
const settleInputVtxos = params.inputs.filter(chunkDAYCCIRO_cjs.isVirtualCoin);
|
|
15580
15675
|
const contractManager = await this.getContractManager();
|
|
15581
15676
|
await contractManager.assertAnnotatable(settleInputVtxos);
|
|
15582
15677
|
await contractManager.assertSpendableNow?.(
|
|
@@ -15688,7 +15783,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15688
15783
|
async maybeRotateBoardingAfterBoard(inputs) {
|
|
15689
15784
|
if (!this._descriptorProvider) return;
|
|
15690
15785
|
const consumedBoarding = inputs.some(
|
|
15691
|
-
(input) => typeof input !== "string" && !
|
|
15786
|
+
(input) => typeof input !== "string" && !chunkDAYCCIRO_cjs.isVirtualCoin(input)
|
|
15692
15787
|
);
|
|
15693
15788
|
if (!consumedBoarding) return;
|
|
15694
15789
|
try {
|
|
@@ -15699,7 +15794,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15699
15794
|
}
|
|
15700
15795
|
async handleSettlementFinalizationEvent(event, inputs, forfeitOutputScript, expectedRecipients, connectorsGraph, validatedCommitmentTxid) {
|
|
15701
15796
|
const signedForfeits = [];
|
|
15702
|
-
let settlementPsbt =
|
|
15797
|
+
let settlementPsbt = chunkDAYCCIRO_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
|
|
15703
15798
|
assertFinalCommitmentMatchesValidated(
|
|
15704
15799
|
settlementPsbt,
|
|
15705
15800
|
validatedCommitmentTxid,
|
|
@@ -15712,7 +15807,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15712
15807
|
let connectorIndex = 0;
|
|
15713
15808
|
const connectorsLeaves = connectorsGraph?.leaves() || [];
|
|
15714
15809
|
for (const input of inputs) {
|
|
15715
|
-
if (!
|
|
15810
|
+
if (!chunkDAYCCIRO_cjs.isVirtualCoin(input)) {
|
|
15716
15811
|
let matched = false;
|
|
15717
15812
|
for (let i = 0; i < settlementPsbt.inputsLength; i++) {
|
|
15718
15813
|
const settlementInput = settlementPsbt.getInput(i);
|
|
@@ -15750,7 +15845,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15750
15845
|
}
|
|
15751
15846
|
continue;
|
|
15752
15847
|
}
|
|
15753
|
-
if (
|
|
15848
|
+
if (!chunkDAYCCIRO_cjs.requiresForfeit(input) || isSubdust({ value: input.value }, this.dustAmount)) {
|
|
15754
15849
|
continue;
|
|
15755
15850
|
}
|
|
15756
15851
|
if (connectorsLeaves.length === 0) {
|
|
@@ -15778,7 +15873,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15778
15873
|
index: input.vout,
|
|
15779
15874
|
witnessUtxo: {
|
|
15780
15875
|
amount: BigInt(input.value),
|
|
15781
|
-
script:
|
|
15876
|
+
script: chunkDAYCCIRO_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
15782
15877
|
},
|
|
15783
15878
|
sighashType: btcSigner.SigHash.DEFAULT,
|
|
15784
15879
|
tapLeafScript: [input.forfeitTapLeafScript]
|
|
@@ -15797,7 +15892,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15797
15892
|
forfeitTx = await this._signerRouter.sign(forfeitTx, [
|
|
15798
15893
|
{
|
|
15799
15894
|
index: 0,
|
|
15800
|
-
lookupScript:
|
|
15895
|
+
lookupScript: chunkDAYCCIRO_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
15801
15896
|
}
|
|
15802
15897
|
]);
|
|
15803
15898
|
signedForfeits.push(base.base64.encode(forfeitTx.toPSBT()));
|
|
@@ -15855,7 +15950,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15855
15950
|
resolveBatchExpiryPolicy(this.network, this.batchExpiryPolicy)
|
|
15856
15951
|
);
|
|
15857
15952
|
await this.arkProvider.confirmRegistration(intentId);
|
|
15858
|
-
const sweepTapscript =
|
|
15953
|
+
const sweepTapscript = chunkDAYCCIRO_cjs.CSVMultisigTapscript.encode({
|
|
15859
15954
|
timelock,
|
|
15860
15955
|
pubkeys: [this.forfeitPubkey]
|
|
15861
15956
|
}).script;
|
|
@@ -15870,14 +15965,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15870
15965
|
throw new Error("Sweep tap tree root not set");
|
|
15871
15966
|
}
|
|
15872
15967
|
const xOnlyPublicKeys = event.cosignersPublicKeys.map(
|
|
15873
|
-
(k) => base.hex.encode(
|
|
15968
|
+
(k) => base.hex.encode(chunkFUW3OM5X_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
|
|
15874
15969
|
);
|
|
15875
15970
|
const signerPublicKey = await session.getPublicKey();
|
|
15876
|
-
const xonlySignerPublicKey =
|
|
15971
|
+
const xonlySignerPublicKey = chunkFUW3OM5X_cjs.toXOnly(signerPublicKey, "signer key");
|
|
15877
15972
|
if (!xOnlyPublicKeys.includes(base.hex.encode(xonlySignerPublicKey))) {
|
|
15878
15973
|
return { skip: true };
|
|
15879
15974
|
}
|
|
15880
|
-
const commitmentTx =
|
|
15975
|
+
const commitmentTx = chunkDAYCCIRO_cjs.Transaction.fromPSBT(
|
|
15881
15976
|
base.base64.decode(event.unsignedCommitmentTx)
|
|
15882
15977
|
);
|
|
15883
15978
|
validateVtxoTxGraph(vtxoTree, commitmentTx, sweepTapTreeRoot);
|
|
@@ -15963,9 +16058,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15963
16058
|
...existing ?? {},
|
|
15964
16059
|
intentTxId,
|
|
15965
16060
|
registerProof: intent.proof,
|
|
15966
|
-
registerProofMessage:
|
|
16061
|
+
registerProofMessage: chunkDAYCCIRO_cjs.Intent.encodeMessage(intent.message),
|
|
15967
16062
|
deleteProof: deleteIntent.proof,
|
|
15968
|
-
deleteProofMessage:
|
|
16063
|
+
deleteProofMessage: chunkDAYCCIRO_cjs.Intent.encodeMessage(deleteIntent.message),
|
|
15969
16064
|
intentVtxos: inputs.map((i) => ({
|
|
15970
16065
|
txid: i.txid,
|
|
15971
16066
|
vout: i.vout
|
|
@@ -15998,7 +16093,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
15998
16093
|
try {
|
|
15999
16094
|
return await this.arkProvider.registerIntent(intent);
|
|
16000
16095
|
} catch (error) {
|
|
16001
|
-
if (error instanceof
|
|
16096
|
+
if (error instanceof chunkDAYCCIRO_cjs.ArkError && error.code === 0 && error.message.includes("duplicated input")) {
|
|
16002
16097
|
const deleteIntent = await this.makeDeleteIntentSignature(inputs);
|
|
16003
16098
|
await this.arkProvider.deleteIntent(deleteIntent);
|
|
16004
16099
|
return this.arkProvider.registerIntent(intent);
|
|
@@ -16014,7 +16109,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16014
16109
|
expire_at: 0,
|
|
16015
16110
|
cosigners_public_keys: cosignerPubKeys
|
|
16016
16111
|
};
|
|
16017
|
-
const proof =
|
|
16112
|
+
const proof = chunkDAYCCIRO_cjs.Intent.create(message, coins, outputs);
|
|
16018
16113
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
16019
16114
|
return {
|
|
16020
16115
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -16026,7 +16121,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16026
16121
|
type: "delete",
|
|
16027
16122
|
expire_at: 0
|
|
16028
16123
|
};
|
|
16029
|
-
const proof =
|
|
16124
|
+
const proof = chunkDAYCCIRO_cjs.Intent.create(message, coins, []);
|
|
16030
16125
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
16031
16126
|
return {
|
|
16032
16127
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -16038,7 +16133,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16038
16133
|
type: "get-pending-tx",
|
|
16039
16134
|
expire_at: 0
|
|
16040
16135
|
};
|
|
16041
|
-
const proof =
|
|
16136
|
+
const proof = chunkDAYCCIRO_cjs.Intent.create(message, coins, []);
|
|
16042
16137
|
const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
|
|
16043
16138
|
return {
|
|
16044
16139
|
proof: base.base64.encode(signedProof.toPSBT()),
|
|
@@ -16059,7 +16154,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16059
16154
|
if (!vtxos || vtxos.length === 0) {
|
|
16060
16155
|
const scriptMap = await this.getScriptMap();
|
|
16061
16156
|
const allExtended = [];
|
|
16062
|
-
const fetchedVtxos = await
|
|
16157
|
+
const fetchedVtxos = await chunkDAYCCIRO_cjs.getAllNormalizedVtxos(this.indexerProvider, [
|
|
16063
16158
|
...scriptMap.keys()
|
|
16064
16159
|
]);
|
|
16065
16160
|
for (const vtxo of fetchedVtxos) {
|
|
@@ -16102,8 +16197,8 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16102
16197
|
batchPending.push(pendingTx.arkTxid);
|
|
16103
16198
|
try {
|
|
16104
16199
|
const checkpointTxs = pendingTx.signedCheckpointTxs.map((c) => {
|
|
16105
|
-
const tx =
|
|
16106
|
-
|
|
16200
|
+
const tx = chunkDAYCCIRO_cjs.Transaction.fromPSBT(base.base64.decode(c));
|
|
16201
|
+
chunkDAYCCIRO_cjs.assertAllowedSighashTypes(tx);
|
|
16107
16202
|
return tx;
|
|
16108
16203
|
});
|
|
16109
16204
|
assertCheckpointsMatchInputs(
|
|
@@ -16175,11 +16270,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16175
16270
|
* against the current key alone would leave it pending forever.
|
|
16176
16271
|
*/
|
|
16177
16272
|
checkpointUnrollCandidates(info) {
|
|
16178
|
-
const current =
|
|
16273
|
+
const current = chunkDAYCCIRO_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
|
|
16179
16274
|
const candidates = [this._serverUnrollScript, current];
|
|
16180
16275
|
for (const deprecated of signerSetFromInfo(info).deprecated.keys()) {
|
|
16181
16276
|
candidates.push(
|
|
16182
|
-
|
|
16277
|
+
chunkDAYCCIRO_cjs.CSVMultisigTapscript.encode({
|
|
16183
16278
|
...current.params,
|
|
16184
16279
|
pubkeys: [base.hex.decode(deprecated)]
|
|
16185
16280
|
})
|
|
@@ -16270,7 +16365,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16270
16365
|
if (vtxos.length === 0) {
|
|
16271
16366
|
throw new Error("No VTXOs found for this arkadeCash");
|
|
16272
16367
|
}
|
|
16273
|
-
const myPkScript =
|
|
16368
|
+
const myPkScript = chunkDAYCCIRO_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
|
|
16274
16369
|
let { spendable, unclaimed } = this.classifyCashVtxos(vtxos);
|
|
16275
16370
|
let swept = 0;
|
|
16276
16371
|
const drainable = vtxos.filter(
|
|
@@ -16346,7 +16441,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16346
16441
|
const spendable = [];
|
|
16347
16442
|
const unclaimed = [];
|
|
16348
16443
|
for (const vtxo of vtxos) {
|
|
16349
|
-
if (
|
|
16444
|
+
if (chunkDAYCCIRO_cjs.isVtxoSpent(vtxo)) {
|
|
16350
16445
|
unclaimed.push(cashReport(vtxo, "already-spent"));
|
|
16351
16446
|
} else if (vtxo.isUnrolled) {
|
|
16352
16447
|
unclaimed.push(cashReport(vtxo, "exited"));
|
|
@@ -16368,7 +16463,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16368
16463
|
const all = [];
|
|
16369
16464
|
const seen = /* @__PURE__ */ new Set();
|
|
16370
16465
|
for (let pageIndex = 0; ; pageIndex++) {
|
|
16371
|
-
const { vtxos, page } = await
|
|
16466
|
+
const { vtxos, page } = await chunkDAYCCIRO_cjs.getNormalizedVtxos(this.indexerProvider, {
|
|
16372
16467
|
scripts,
|
|
16373
16468
|
pageIndex,
|
|
16374
16469
|
pageSize
|
|
@@ -16415,7 +16510,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16415
16510
|
for (let i = 0; i < inputs.length; i += MAX_INPUTS_PER_INTENT) {
|
|
16416
16511
|
const batch = inputs.slice(i, i + MAX_INPUTS_PER_INTENT);
|
|
16417
16512
|
const message = { type: "get-pending-tx", expire_at: 0 };
|
|
16418
|
-
const proof =
|
|
16513
|
+
const proof = chunkDAYCCIRO_cjs.Intent.create(message, batch, []);
|
|
16419
16514
|
const signedProof = await identity.sign(
|
|
16420
16515
|
proof,
|
|
16421
16516
|
Array.from({ length: batch.length + 1 }, (_, j) => j)
|
|
@@ -16436,8 +16531,8 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16436
16531
|
for (const pendingTx of pendingTxs) {
|
|
16437
16532
|
try {
|
|
16438
16533
|
const checkpointTxs = pendingTx.signedCheckpointTxs.map((checkpoint) => {
|
|
16439
|
-
const tx =
|
|
16440
|
-
|
|
16534
|
+
const tx = chunkDAYCCIRO_cjs.Transaction.fromPSBT(base.base64.decode(checkpoint));
|
|
16535
|
+
chunkDAYCCIRO_cjs.assertAllowedSighashTypes(tx);
|
|
16441
16536
|
return tx;
|
|
16442
16537
|
});
|
|
16443
16538
|
assertCheckpointsMatchInputs(
|
|
@@ -16477,7 +16572,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16477
16572
|
}
|
|
16478
16573
|
/** Sum the outputs of an ark tx PSBT that pay the given scriptPubKey. */
|
|
16479
16574
|
arkTxAmountPaidTo(arkTxPsbt, pkScriptHex) {
|
|
16480
|
-
const arkTx =
|
|
16575
|
+
const arkTx = chunkDAYCCIRO_cjs.Transaction.fromPSBT(base.base64.decode(arkTxPsbt));
|
|
16481
16576
|
let total = 0;
|
|
16482
16577
|
for (let i = 0; i < arkTx.outputsLength; i++) {
|
|
16483
16578
|
const output = arkTx.getOutput(i);
|
|
@@ -16648,7 +16743,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16648
16743
|
script: recipient.script,
|
|
16649
16744
|
amount: BigInt(recipient.amount),
|
|
16650
16745
|
// Already checked against the recipient address in `validateRecipients`.
|
|
16651
|
-
...recipient.tapTree ? { tapTree:
|
|
16746
|
+
...recipient.tapTree ? { tapTree: chunkDAYCCIRO_cjs.toBIP371TapTree(recipient.tapTree) } : {}
|
|
16652
16747
|
}));
|
|
16653
16748
|
const totalBtcOutput = outputs.reduce((sum, o) => sum + Number(o.amount), 0);
|
|
16654
16749
|
let changeAmount = totalBtcSelected - totalBtcOutput;
|
|
@@ -16832,10 +16927,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16832
16927
|
const serverPubKey = this.arkServerPublicKey;
|
|
16833
16928
|
const serverUnrollScript = this.serverUnrollScript;
|
|
16834
16929
|
const arkAddress = offchainTapscript.address(this.network.hrp, serverPubKey);
|
|
16835
|
-
const normalizedInputs = inputs.map(
|
|
16836
|
-
const at = now ?? await
|
|
16930
|
+
const normalizedInputs = inputs.map(chunkDAYCCIRO_cjs.normalizeVtxo);
|
|
16931
|
+
const at = now ?? await chunkDAYCCIRO_cjs.resolveTimeHeight(this.onchainProvider);
|
|
16837
16932
|
for (const input of normalizedInputs) {
|
|
16838
|
-
if (!
|
|
16933
|
+
if (!chunkDAYCCIRO_cjs.canSpendOffchain(input, at)) {
|
|
16839
16934
|
throw new Error(
|
|
16840
16935
|
`sendSelectedVtxosToSelf: input ${input.txid}:${input.vout} is not cooperatively spendable`
|
|
16841
16936
|
);
|
|
@@ -16905,7 +17000,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16905
17000
|
);
|
|
16906
17001
|
const arkTxJobs = inputs.map((input, index) => ({
|
|
16907
17002
|
index,
|
|
16908
|
-
lookupScript:
|
|
17003
|
+
lookupScript: chunkDAYCCIRO_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
16909
17004
|
}));
|
|
16910
17005
|
const identity = this.identity;
|
|
16911
17006
|
const signer = {
|
|
@@ -16989,7 +17084,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
16989
17084
|
}
|
|
16990
17085
|
const checkpointIdByOutpoint = /* @__PURE__ */ new Map();
|
|
16991
17086
|
for (const encoded of signedCheckpointTxs) {
|
|
16992
|
-
const checkpoint =
|
|
17087
|
+
const checkpoint = chunkDAYCCIRO_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
|
|
16993
17088
|
for (let i = 0; i < checkpoint.inputsLength; i++) {
|
|
16994
17089
|
const input = checkpoint.getInput(i);
|
|
16995
17090
|
if (!input.txid) continue;
|
|
@@ -17006,14 +17101,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
17006
17101
|
const spentBy = checkpointIdByOutpoint.get(`${vtxo.txid}:${vtxo.vout}`);
|
|
17007
17102
|
spentVtxos.push({
|
|
17008
17103
|
...spentFacts,
|
|
17009
|
-
virtualStatus:
|
|
17104
|
+
virtualStatus: chunkDAYCCIRO_cjs.toVirtualStatus(spentFacts),
|
|
17010
17105
|
...spentBy ? { spentBy } : {},
|
|
17011
17106
|
arkTxId: arkTxid
|
|
17012
17107
|
});
|
|
17013
17108
|
for (const id of vtxo.commitmentTxIds) {
|
|
17014
17109
|
commitmentTxIds.add(id);
|
|
17015
17110
|
}
|
|
17016
|
-
const vtxoExpiry =
|
|
17111
|
+
const vtxoExpiry = chunkDAYCCIRO_cjs.toBatchExpiry(vtxo);
|
|
17017
17112
|
if (vtxoExpiry) {
|
|
17018
17113
|
batchExpiry = Math.min(batchExpiry, vtxoExpiry);
|
|
17019
17114
|
}
|
|
@@ -17026,7 +17121,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
17026
17121
|
isSwept: false,
|
|
17027
17122
|
isPreconfirmed: true,
|
|
17028
17123
|
commitmentTxIds: Array.from(commitmentTxIds),
|
|
17029
|
-
...
|
|
17124
|
+
...chunkDAYCCIRO_cjs.parseLegacyExpiry(batchExpiry)
|
|
17030
17125
|
};
|
|
17031
17126
|
changeVtxo = {
|
|
17032
17127
|
txid: arkTxid,
|
|
@@ -17038,7 +17133,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
17038
17133
|
tapTree: offchainTapscript.encode(),
|
|
17039
17134
|
value: Number(changeAmount),
|
|
17040
17135
|
...changeFacts,
|
|
17041
|
-
virtualStatus:
|
|
17136
|
+
virtualStatus: chunkDAYCCIRO_cjs.toVirtualStatus(changeFacts),
|
|
17042
17137
|
spentBy: "",
|
|
17043
17138
|
status: {
|
|
17044
17139
|
confirmed: false
|
|
@@ -17107,12 +17202,12 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
17107
17202
|
const spentVtxos = [];
|
|
17108
17203
|
const inputArkTxIds = /* @__PURE__ */ new Set();
|
|
17109
17204
|
const boardingRemovalsByAddress = /* @__PURE__ */ new Map();
|
|
17110
|
-
const vtxoInputs = inputs.filter(
|
|
17205
|
+
const vtxoInputs = inputs.filter(chunkDAYCCIRO_cjs.isVirtualCoin);
|
|
17111
17206
|
const cm = await this.getContractManager();
|
|
17112
17207
|
const annotatedVtxos = await cm.annotateVtxos(vtxoInputs);
|
|
17113
17208
|
const annotatedByKey = new Map(annotatedVtxos.map((v) => [`${v.txid}:${v.vout}`, v]));
|
|
17114
17209
|
for (const input of inputs) {
|
|
17115
|
-
if (
|
|
17210
|
+
if (chunkDAYCCIRO_cjs.isVirtualCoin(input)) {
|
|
17116
17211
|
const outpoint = `${input.txid}:${input.vout}`;
|
|
17117
17212
|
const vtxo = annotatedByKey.get(outpoint);
|
|
17118
17213
|
if (!vtxo) {
|
|
@@ -17124,13 +17219,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
17124
17219
|
const settledFacts = { ...vtxo, isSpent: true };
|
|
17125
17220
|
spentVtxos.push({
|
|
17126
17221
|
...settledFacts,
|
|
17127
|
-
virtualStatus:
|
|
17222
|
+
virtualStatus: chunkDAYCCIRO_cjs.toVirtualStatus(settledFacts),
|
|
17128
17223
|
settledBy: commitmentTxid
|
|
17129
17224
|
});
|
|
17130
17225
|
} else {
|
|
17131
17226
|
let sourceAddress;
|
|
17132
17227
|
try {
|
|
17133
|
-
sourceAddress =
|
|
17228
|
+
sourceAddress = chunkDAYCCIRO_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
|
|
17134
17229
|
this.network
|
|
17135
17230
|
);
|
|
17136
17231
|
} catch {
|
|
@@ -17188,9 +17283,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
17188
17283
|
}
|
|
17189
17284
|
};
|
|
17190
17285
|
function selectVirtualCoins(coins, targetAmount) {
|
|
17191
|
-
const sortedCoins = coins.map(
|
|
17192
|
-
const expiryA =
|
|
17193
|
-
const expiryB =
|
|
17286
|
+
const sortedCoins = coins.map(chunkDAYCCIRO_cjs.normalizeVtxo).sort((a, b) => {
|
|
17287
|
+
const expiryA = chunkDAYCCIRO_cjs.toBatchExpiry(a) || Number.MAX_SAFE_INTEGER;
|
|
17288
|
+
const expiryB = chunkDAYCCIRO_cjs.toBatchExpiry(b) || Number.MAX_SAFE_INTEGER;
|
|
17194
17289
|
if (expiryA !== expiryB) {
|
|
17195
17290
|
return expiryA - expiryB;
|
|
17196
17291
|
}
|
|
@@ -17559,7 +17654,7 @@ var MessageBus = class {
|
|
|
17559
17654
|
this.initialized = true;
|
|
17560
17655
|
}
|
|
17561
17656
|
async buildServices(config) {
|
|
17562
|
-
const arkProvider = new
|
|
17657
|
+
const arkProvider = new chunkDAYCCIRO_cjs.RestArkProvider(config.arkServer.url);
|
|
17563
17658
|
const storage = {
|
|
17564
17659
|
walletRepository: this.walletRepository,
|
|
17565
17660
|
contractRepository: this.contractRepository,
|
|
@@ -17913,7 +18008,7 @@ var offboardNetworkNames = [
|
|
|
17913
18008
|
function offboardDestinationScript(destinationAddress) {
|
|
17914
18009
|
for (const networkName of offboardNetworkNames) {
|
|
17915
18010
|
try {
|
|
17916
|
-
const network =
|
|
18011
|
+
const network = chunkDAYCCIRO_cjs.networks[networkName];
|
|
17917
18012
|
const addr = btcSigner.Address(network).decode(destinationAddress);
|
|
17918
18013
|
return btcSigner.OutScript.encode(addr);
|
|
17919
18014
|
} catch {
|
|
@@ -17949,7 +18044,7 @@ function filterOffboardInputs(vtxos, feeInfo, named) {
|
|
|
17949
18044
|
const inputs = [];
|
|
17950
18045
|
let subtotal = 0n;
|
|
17951
18046
|
for (const vtxo of vtxos) {
|
|
17952
|
-
const inputFee = estimator.evalOffchainInput(
|
|
18047
|
+
const inputFee = estimator.evalOffchainInput(chunkDAYCCIRO_cjs.toOffchainInputFeeParams(vtxo));
|
|
17953
18048
|
if (inputFee.satoshis >= vtxo.value) {
|
|
17954
18049
|
if (named) {
|
|
17955
18050
|
throw new Error(
|
|
@@ -18046,7 +18141,7 @@ var Ramps = class {
|
|
|
18046
18141
|
}
|
|
18047
18142
|
amount = amount ?? totalAmount;
|
|
18048
18143
|
const offchainAddress = await this.wallet.getAddress();
|
|
18049
|
-
const offchainAddr =
|
|
18144
|
+
const offchainAddr = chunkDAYCCIRO_cjs.ArkAddress.decode(offchainAddress);
|
|
18050
18145
|
const offchainScript = base.hex.encode(offchainAddr.pkScript);
|
|
18051
18146
|
const outputFee = estimator.evalOffchainOutput({
|
|
18052
18147
|
amount,
|
|
@@ -18175,7 +18270,7 @@ var Ramps = class {
|
|
|
18175
18270
|
async fundChange(left, estimator) {
|
|
18176
18271
|
if (left <= 0n) return { change: 0n };
|
|
18177
18272
|
const changeAddress = await this.wallet.getAddress();
|
|
18178
|
-
const changeScript = base.hex.encode(
|
|
18273
|
+
const changeScript = base.hex.encode(chunkDAYCCIRO_cjs.ArkAddress.decode(changeAddress).pkScript);
|
|
18179
18274
|
const { change } = changeAfterOutputFee(
|
|
18180
18275
|
left,
|
|
18181
18276
|
(amount) => BigInt(estimator.evalOffchainOutput({ amount, script: changeScript }).satoshis)
|
|
@@ -19008,7 +19103,7 @@ var WalletMessageHandler = class {
|
|
|
19008
19103
|
// Wallet methods
|
|
19009
19104
|
async handleInitWallet({ payload }) {
|
|
19010
19105
|
const { arkServerUrl } = payload;
|
|
19011
|
-
this.indexerProvider = new
|
|
19106
|
+
this.indexerProvider = new chunkSJPPBR2V_cjs.RestIndexerProvider(arkServerUrl);
|
|
19012
19107
|
await this.onWalletInitialized();
|
|
19013
19108
|
}
|
|
19014
19109
|
/**
|
|
@@ -19022,7 +19117,8 @@ var WalletMessageHandler = class {
|
|
|
19022
19117
|
async handleGetBalance() {
|
|
19023
19118
|
const [boardingUtxos, { snapshot, vtxos: allVtxos }] = await Promise.all([
|
|
19024
19119
|
this.getAllBoardingUtxos(),
|
|
19025
|
-
|
|
19120
|
+
// The bucketer drops every spent coin and the gate reads contracts only.
|
|
19121
|
+
this.repoSnapshot({ unspentOnly: true })
|
|
19026
19122
|
]);
|
|
19027
19123
|
const pendingOutpoints = this.readonlyWallet?.pendingRecoveryOutpointsIn(snapshot) ?? /* @__PURE__ */ new Set();
|
|
19028
19124
|
let confirmed = 0;
|
|
@@ -19289,15 +19385,15 @@ var WalletMessageHandler = class {
|
|
|
19289
19385
|
if (!this.readonlyWallet) {
|
|
19290
19386
|
throw new WalletNotInitializedError();
|
|
19291
19387
|
}
|
|
19292
|
-
const allVtxos = await this.getVtxosFromRepo();
|
|
19293
|
-
const dustAmount = this.readonlyWallet.dustAmount;
|
|
19294
19388
|
const withUnrolled = message.payload.filter?.withUnrolled ?? false;
|
|
19389
|
+
const allVtxos = await this.getVtxosFromRepo({ unspentOnly: !withUnrolled });
|
|
19390
|
+
const dustAmount = this.readonlyWallet.dustAmount;
|
|
19295
19391
|
const includeRecoverable = message.payload.filter?.withRecoverable ?? false;
|
|
19296
19392
|
return allVtxos.filter((v) => {
|
|
19297
19393
|
if (v.isUnrolled) {
|
|
19298
19394
|
return withUnrolled;
|
|
19299
19395
|
}
|
|
19300
|
-
if (
|
|
19396
|
+
if (chunkDAYCCIRO_cjs.isVtxoSpent(v)) {
|
|
19301
19397
|
return false;
|
|
19302
19398
|
}
|
|
19303
19399
|
if (includeRecoverable) {
|
|
@@ -19306,10 +19402,10 @@ var WalletMessageHandler = class {
|
|
|
19306
19402
|
if (dustAmount != null && isSubdust(v, dustAmount)) {
|
|
19307
19403
|
return false;
|
|
19308
19404
|
}
|
|
19309
|
-
if (
|
|
19405
|
+
if (chunkDAYCCIRO_cjs.isRecoverable(v)) {
|
|
19310
19406
|
return false;
|
|
19311
19407
|
}
|
|
19312
|
-
if (
|
|
19408
|
+
if (chunkDAYCCIRO_cjs.isExpired(v)) {
|
|
19313
19409
|
return false;
|
|
19314
19410
|
}
|
|
19315
19411
|
return true;
|
|
@@ -19341,8 +19437,8 @@ var WalletMessageHandler = class {
|
|
|
19341
19437
|
* Read all virtual outputs from the repository, aggregated across all contract
|
|
19342
19438
|
* addresses and the wallet's primary address, with deduplication.
|
|
19343
19439
|
*/
|
|
19344
|
-
async getVtxosFromRepo() {
|
|
19345
|
-
return (await this.repoSnapshot()).vtxos;
|
|
19440
|
+
async getVtxosFromRepo(options) {
|
|
19441
|
+
return (await this.repoSnapshot(options)).vtxos;
|
|
19346
19442
|
}
|
|
19347
19443
|
/**
|
|
19348
19444
|
* The worker's equivalent of `ReadonlyWallet.contractSnapshot`: contracts
|
|
@@ -19357,7 +19453,7 @@ var WalletMessageHandler = class {
|
|
|
19357
19453
|
* what it knows is closed — so the coins of a just-registered escrowed
|
|
19358
19454
|
* contract would count as available until the next poll.
|
|
19359
19455
|
*/
|
|
19360
|
-
async repoSnapshot() {
|
|
19456
|
+
async repoSnapshot(options) {
|
|
19361
19457
|
if (!this.walletRepository || !this.readonlyWallet) return { snapshot: [], vtxos: [] };
|
|
19362
19458
|
const seen = /* @__PURE__ */ new Set();
|
|
19363
19459
|
const allVtxos = [];
|
|
@@ -19379,7 +19475,9 @@ var WalletMessageHandler = class {
|
|
|
19379
19475
|
for (const contract of contracts) {
|
|
19380
19476
|
snapshot.push({
|
|
19381
19477
|
contract,
|
|
19382
|
-
vtxos: addVtxos(
|
|
19478
|
+
vtxos: addVtxos(
|
|
19479
|
+
await getVtxosForContract(this.walletRepository, contract, options)
|
|
19480
|
+
)
|
|
19383
19481
|
});
|
|
19384
19482
|
}
|
|
19385
19483
|
const walletAddress = await this.readonlyWallet.getAddress();
|
|
@@ -19392,10 +19490,11 @@ var WalletMessageHandler = class {
|
|
|
19392
19490
|
);
|
|
19393
19491
|
}
|
|
19394
19492
|
addVtxos(
|
|
19395
|
-
await getVtxosForContract(
|
|
19396
|
-
|
|
19397
|
-
address: walletAddress
|
|
19398
|
-
|
|
19493
|
+
await getVtxosForContract(
|
|
19494
|
+
this.walletRepository,
|
|
19495
|
+
{ script: walletScript, address: walletAddress },
|
|
19496
|
+
options
|
|
19497
|
+
)
|
|
19399
19498
|
);
|
|
19400
19499
|
return { snapshot, vtxos: allVtxos };
|
|
19401
19500
|
}
|
|
@@ -19417,7 +19516,7 @@ var WalletMessageHandler = class {
|
|
|
19417
19516
|
this.readonlyWallet.getBoardingTxs()
|
|
19418
19517
|
]);
|
|
19419
19518
|
const indexerProvider = this.indexerProvider;
|
|
19420
|
-
const resolveTxCreatedAt = indexerProvider ? (txids) =>
|
|
19519
|
+
const resolveTxCreatedAt = indexerProvider ? (txids) => chunkDAYCCIRO_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
|
|
19421
19520
|
return buildTransactionHistory(
|
|
19422
19521
|
vtxos,
|
|
19423
19522
|
boardingTxs,
|
|
@@ -20125,7 +20224,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
20125
20224
|
};
|
|
20126
20225
|
try {
|
|
20127
20226
|
const response = await this.sendMessage(message);
|
|
20128
|
-
return response.payload.vtxos.map(
|
|
20227
|
+
return response.payload.vtxos.map(chunkDAYCCIRO_cjs.normalizeVtxo);
|
|
20129
20228
|
} catch (error) {
|
|
20130
20229
|
throw new Error(`Failed to get vtxos: ${error}`);
|
|
20131
20230
|
}
|
|
@@ -20156,7 +20255,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
20156
20255
|
"Service worker does not support the requested contract scope or freshness check"
|
|
20157
20256
|
);
|
|
20158
20257
|
}
|
|
20159
|
-
return payload.vtxos.map(
|
|
20258
|
+
return payload.vtxos.map(chunkDAYCCIRO_cjs.normalizeVtxo);
|
|
20160
20259
|
} catch (error) {
|
|
20161
20260
|
throw new Error(`Failed to get spendable vtxos: ${error}`);
|
|
20162
20261
|
}
|
|
@@ -20332,7 +20431,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
20332
20431
|
};
|
|
20333
20432
|
try {
|
|
20334
20433
|
const response = await sendContractMessage(message);
|
|
20335
|
-
return response.payload.vtxos.map(
|
|
20434
|
+
return response.payload.vtxos.map(chunkDAYCCIRO_cjs.normalizeVtxo);
|
|
20336
20435
|
} catch (e) {
|
|
20337
20436
|
throw new Error("Failed to annotate vtxos");
|
|
20338
20437
|
}
|
|
@@ -20944,7 +21043,7 @@ var ServiceWorkerWallet = class _ServiceWorkerWallet extends ServiceWorkerReadon
|
|
|
20944
21043
|
};
|
|
20945
21044
|
try {
|
|
20946
21045
|
const response = await wallet.sendMessage(message);
|
|
20947
|
-
return response.payload.vtxos.map(
|
|
21046
|
+
return response.payload.vtxos.map(chunkDAYCCIRO_cjs.normalizeVtxo);
|
|
20948
21047
|
} catch (e) {
|
|
20949
21048
|
throw new Error(`Failed to get expiring vtxos: ${e}`);
|
|
20950
21049
|
}
|
|
@@ -21056,12 +21155,12 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
21056
21155
|
* @returns Configured onchain wallet
|
|
21057
21156
|
* @throws Error if the configured identity cannot produce a valid x-only public key
|
|
21058
21157
|
*/
|
|
21059
|
-
static async create(identity, networkName =
|
|
21158
|
+
static async create(identity, networkName = chunkDAYCCIRO_cjs.DEFAULT_NETWORK_NAME, provider) {
|
|
21060
21159
|
const pubkey = await identity.xOnlyPublicKey();
|
|
21061
21160
|
if (!pubkey) {
|
|
21062
21161
|
throw new Error("Invalid configured public key");
|
|
21063
21162
|
}
|
|
21064
|
-
const network =
|
|
21163
|
+
const network = chunkDAYCCIRO_cjs.getNetwork(networkName);
|
|
21065
21164
|
const onchainProvider = provider || new EsploraProvider(ESPLORA_URL[networkName]);
|
|
21066
21165
|
const onchainP2TR = btcSigner.p2tr(pubkey, void 0, network);
|
|
21067
21166
|
return new _OnchainWallet(identity, network, onchainP2TR, onchainProvider);
|
|
@@ -21167,7 +21266,7 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
21167
21266
|
if (!inputs) {
|
|
21168
21267
|
throw new Error("Fee estimation failed");
|
|
21169
21268
|
}
|
|
21170
|
-
let tx = new
|
|
21269
|
+
let tx = new chunkDAYCCIRO_cjs.Transaction();
|
|
21171
21270
|
for (const input of inputs) {
|
|
21172
21271
|
tx.addInput({
|
|
21173
21272
|
txid: input.txid,
|
|
@@ -21225,7 +21324,7 @@ var OnchainWallet = class _OnchainWallet {
|
|
|
21225
21324
|
* @throws If the parent has no anchor, or funding cannot be selected/signed
|
|
21226
21325
|
*/
|
|
21227
21326
|
async bumpAnchor(parentHex, feeRate) {
|
|
21228
|
-
const parent =
|
|
21327
|
+
const parent = chunkDAYCCIRO_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
|
|
21229
21328
|
const coins = (await this.getCoins()).filter((c) => c.status.confirmed);
|
|
21230
21329
|
const child = await this.buildBumpPackage(parent, feeRate, coins);
|
|
21231
21330
|
return [parent.hex, child.hex];
|
|
@@ -22132,7 +22231,7 @@ async function resolvePrevTxs(txids, source, onchain) {
|
|
|
22132
22231
|
try {
|
|
22133
22232
|
const { txs } = await source.getVirtualTxs(wanted);
|
|
22134
22233
|
for (const psbt of txs) {
|
|
22135
|
-
const tx =
|
|
22234
|
+
const tx = chunkDAYCCIRO_cjs.Transaction.fromPSBT(base.base64.decode(psbt));
|
|
22136
22235
|
resolved.set(tx.id, tx.toBytes());
|
|
22137
22236
|
}
|
|
22138
22237
|
} catch (err) {
|
|
@@ -22165,7 +22264,7 @@ async function resolvePrevTxs(txids, source, onchain) {
|
|
|
22165
22264
|
async function attachPrevArkTxs(tx, txids, source, onchain) {
|
|
22166
22265
|
const pending = [];
|
|
22167
22266
|
for (let i = 0; i < tx.inputsLength; i++) {
|
|
22168
|
-
if (
|
|
22267
|
+
if (chunkDAYCCIRO_cjs.getArkPsbtFields(tx, i, chunkDAYCCIRO_cjs.PrevArkTxField).length === 0) pending.push(i);
|
|
22169
22268
|
}
|
|
22170
22269
|
if (pending.length === 0) return;
|
|
22171
22270
|
const resolved = await resolvePrevTxs(
|
|
@@ -22174,13 +22273,13 @@ async function attachPrevArkTxs(tx, txids, source, onchain) {
|
|
|
22174
22273
|
onchain
|
|
22175
22274
|
);
|
|
22176
22275
|
for (const i of pending) {
|
|
22177
|
-
|
|
22276
|
+
chunkDAYCCIRO_cjs.setArkPsbtField(tx, i, chunkDAYCCIRO_cjs.PrevArkTxField, resolved.get(txidAt(txids, i)));
|
|
22178
22277
|
}
|
|
22179
22278
|
}
|
|
22180
22279
|
async function attachPrevoutTxs(tx, source) {
|
|
22181
22280
|
const pending = [];
|
|
22182
22281
|
for (let i = 0; i < tx.inputsLength; i++) {
|
|
22183
|
-
if (
|
|
22282
|
+
if (chunkDAYCCIRO_cjs.getArkPsbtFields(tx, i, chunkDAYCCIRO_cjs.PrevoutTxField).length > 0) continue;
|
|
22184
22283
|
const input = tx.getInput(i);
|
|
22185
22284
|
if (!input?.txid) throw new PrevTxUnavailableError(`input ${i} has no outpoint`);
|
|
22186
22285
|
pending.push({ index: i, txid: base.hex.encode(input.txid) });
|
|
@@ -22191,7 +22290,7 @@ async function attachPrevoutTxs(tx, source) {
|
|
|
22191
22290
|
resolved.set(txid, await source.getRawTransaction(txid));
|
|
22192
22291
|
}
|
|
22193
22292
|
for (const { index, txid } of pending) {
|
|
22194
|
-
|
|
22293
|
+
chunkDAYCCIRO_cjs.setArkPsbtField(tx, index, chunkDAYCCIRO_cjs.PrevoutTxField, resolved.get(txid));
|
|
22195
22294
|
}
|
|
22196
22295
|
}
|
|
22197
22296
|
async function withPrevTxs(coins, source, onchain) {
|
|
@@ -22217,7 +22316,7 @@ exports.BIP322 = void 0;
|
|
|
22217
22316
|
async function sign2(message, identity, network) {
|
|
22218
22317
|
const xOnlyPubKey = await identity.xOnlyPublicKey();
|
|
22219
22318
|
const payment = btcSigner.p2tr(xOnlyPubKey, void 0, network);
|
|
22220
|
-
const toSpend =
|
|
22319
|
+
const toSpend = chunkDAYCCIRO_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
|
|
22221
22320
|
const toSign = craftBIP322ToSignP2TR(toSpend, payment.script, xOnlyPubKey);
|
|
22222
22321
|
const signed = await identity.sign(toSign, [0]);
|
|
22223
22322
|
signed.finalizeIdx(0);
|
|
@@ -22275,8 +22374,8 @@ function verifyP2TR(message, witnessItems, pkScript, pubkey) {
|
|
|
22275
22374
|
if (sighashType !== btcSigner.SigHash.DEFAULT && sighashType !== btcSigner.SigHash.ALL) {
|
|
22276
22375
|
return false;
|
|
22277
22376
|
}
|
|
22278
|
-
const toSpend =
|
|
22279
|
-
const toSign = craftBIP322ToSignP2TR(toSpend, pkScript
|
|
22377
|
+
const toSpend = chunkDAYCCIRO_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
|
|
22378
|
+
const toSign = craftBIP322ToSignP2TR(toSpend, pkScript);
|
|
22280
22379
|
const sighash = toSign.preimageWitnessV1(0, [pkScript], sighashType, [0n]);
|
|
22281
22380
|
const rawSig = sig.length === 65 ? sig.subarray(0, 64) : sig;
|
|
22282
22381
|
return secp256k1_js.schnorr.verify(rawSig, sighash, pubkey);
|
|
@@ -22296,7 +22395,7 @@ function verifyP2WPKH(message, witnessItems, pkScript, addressHash) {
|
|
|
22296
22395
|
}
|
|
22297
22396
|
const sighashType = sigWithHash[sigWithHash.length - 1];
|
|
22298
22397
|
const derSig = sigWithHash.subarray(0, sigWithHash.length - 1);
|
|
22299
|
-
const toSpend =
|
|
22398
|
+
const toSpend = chunkDAYCCIRO_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
|
|
22300
22399
|
const toSign = craftBIP322ToSignSimple(toSpend, pkScript);
|
|
22301
22400
|
const scriptCode = btcSigner.OutScript.encode({ type: "pkh", hash: addressHash });
|
|
22302
22401
|
const sighash = toSign.preimageWitnessV0(0, scriptCode, sighashType, 0n);
|
|
@@ -22349,7 +22448,7 @@ function encodeCompactSize(n) {
|
|
|
22349
22448
|
return buf;
|
|
22350
22449
|
}
|
|
22351
22450
|
function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
|
|
22352
|
-
const tx = new
|
|
22451
|
+
const tx = new chunkDAYCCIRO_cjs.Transaction({ version: 0 });
|
|
22353
22452
|
tx.addInput({
|
|
22354
22453
|
txid: toSpend.id,
|
|
22355
22454
|
index: 0,
|
|
@@ -22363,12 +22462,12 @@ function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
|
|
|
22363
22462
|
});
|
|
22364
22463
|
tx.addOutput({
|
|
22365
22464
|
amount: 0n,
|
|
22366
|
-
script:
|
|
22465
|
+
script: chunkDAYCCIRO_cjs.OP_RETURN_EMPTY_PKSCRIPT
|
|
22367
22466
|
});
|
|
22368
22467
|
return tx;
|
|
22369
22468
|
}
|
|
22370
22469
|
function craftBIP322ToSignSimple(toSpend, pkScript) {
|
|
22371
|
-
const tx = new
|
|
22470
|
+
const tx = new chunkDAYCCIRO_cjs.Transaction({ version: 0 });
|
|
22372
22471
|
tx.addInput({
|
|
22373
22472
|
txid: toSpend.id,
|
|
22374
22473
|
index: 0,
|
|
@@ -22380,7 +22479,7 @@ function craftBIP322ToSignSimple(toSpend, pkScript) {
|
|
|
22380
22479
|
});
|
|
22381
22480
|
tx.addOutput({
|
|
22382
22481
|
amount: 0n,
|
|
22383
|
-
script:
|
|
22482
|
+
script: chunkDAYCCIRO_cjs.OP_RETURN_EMPTY_PKSCRIPT
|
|
22384
22483
|
});
|
|
22385
22484
|
return tx;
|
|
22386
22485
|
}
|
|
@@ -22393,7 +22492,7 @@ var RestEmulatorProvider = class {
|
|
|
22393
22492
|
serverUrl;
|
|
22394
22493
|
async getInfo() {
|
|
22395
22494
|
const url = `${this.serverUrl}/v1/info`;
|
|
22396
|
-
const response = await
|
|
22495
|
+
const response = await chunkDAYCCIRO_cjs.baseFetch(url);
|
|
22397
22496
|
if (!response.ok) {
|
|
22398
22497
|
const errorText2 = await response.text();
|
|
22399
22498
|
throw new Error(`Failed to get emulator info: ${errorText2}`);
|
|
@@ -22511,7 +22610,7 @@ var RestEmulatorProvider = class {
|
|
|
22511
22610
|
}
|
|
22512
22611
|
};
|
|
22513
22612
|
function finalizeVirtualTx(type, psbtBase64) {
|
|
22514
|
-
const tx =
|
|
22613
|
+
const tx = chunkDAYCCIRO_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
|
|
22515
22614
|
if (type === "INDEXER_CHAINED_TX_TYPE_TREE" /* TREE */) {
|
|
22516
22615
|
const input = tx.getInput(0);
|
|
22517
22616
|
if (!input) {
|
|
@@ -22538,14 +22637,14 @@ var ExitPathError = class extends Error {
|
|
|
22538
22637
|
reason;
|
|
22539
22638
|
};
|
|
22540
22639
|
function delayWeight(sequence) {
|
|
22541
|
-
const t =
|
|
22640
|
+
const t = chunkDAYCCIRO_cjs.sequenceToTimelock(sequence);
|
|
22542
22641
|
return t.type === "blocks" ? Number(t.value) : Number(t.value) / 600;
|
|
22543
22642
|
}
|
|
22544
22643
|
async function resolveUnilateralPath(params) {
|
|
22545
22644
|
const { vtxo, scriptHex, contractRepository } = params;
|
|
22546
22645
|
const contract = contractRepository ? (await contractRepository.getContracts({ script: scriptHex }))[0] : void 0;
|
|
22547
22646
|
if (contract) {
|
|
22548
|
-
const handler =
|
|
22647
|
+
const handler = chunkFUW3OM5X_cjs.contractHandlers.get(contract.type);
|
|
22549
22648
|
if (!handler) {
|
|
22550
22649
|
throw new ExitPathError(
|
|
22551
22650
|
"no-handler",
|
|
@@ -22568,12 +22667,12 @@ async function resolveUnilateralPath(params) {
|
|
|
22568
22667
|
paths.sort((a, b) => delayWeight(a.sequence) - delayWeight(b.sequence));
|
|
22569
22668
|
return { selection: paths[0], label: `${contract.type}:unilateral` };
|
|
22570
22669
|
}
|
|
22571
|
-
const decoded =
|
|
22670
|
+
const decoded = chunkDAYCCIRO_cjs.VtxoScript.decode(vtxo.tapTree);
|
|
22572
22671
|
let best;
|
|
22573
22672
|
for (const exit of decoded.exitPaths()) {
|
|
22574
22673
|
const leaf = decoded.findLeaf(base.hex.encode(exit.script));
|
|
22575
22674
|
if (!leaf) continue;
|
|
22576
|
-
const sequence =
|
|
22675
|
+
const sequence = chunkDAYCCIRO_cjs.timelockToSequence(exit.params.timelock);
|
|
22577
22676
|
const weight = delayWeight(sequence);
|
|
22578
22677
|
if (!best || weight < best.weight) {
|
|
22579
22678
|
best = { selection: { leaf, sequence }, weight };
|
|
@@ -22793,7 +22892,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
22793
22892
|
let totalAmount = 0n;
|
|
22794
22893
|
const txWeightEstimator = TxWeightEstimator.create();
|
|
22795
22894
|
for (const vtxo of vtxos) {
|
|
22796
|
-
if (!
|
|
22895
|
+
if (!chunkDAYCCIRO_cjs.canSweepOnchain(vtxo)) {
|
|
22797
22896
|
throw new Error(
|
|
22798
22897
|
`Vtxo ${vtxo.txid}:${vtxo.vout} cannot be swept onchain: it is not fully unrolled (use unroll first), or its exit output was already spent`
|
|
22799
22898
|
);
|
|
@@ -22804,14 +22903,14 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
22804
22903
|
}
|
|
22805
22904
|
const resolved = await resolveUnilateralPath({
|
|
22806
22905
|
vtxo,
|
|
22807
|
-
scriptHex: base.hex.encode(
|
|
22906
|
+
scriptHex: base.hex.encode(chunkDAYCCIRO_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
|
|
22808
22907
|
contractRepository: wallet.contractRepository,
|
|
22809
22908
|
walletPubKeyHex: base.hex.encode(await wallet.identity.xOnlyPublicKey()),
|
|
22810
22909
|
currentTime: Date.now()
|
|
22811
22910
|
});
|
|
22812
22911
|
const spendingLeaf = resolved.selection.leaf;
|
|
22813
22912
|
const sequence = resolved.selection.sequence;
|
|
22814
|
-
const timelock =
|
|
22913
|
+
const timelock = chunkDAYCCIRO_cjs.sequenceToTimelock(sequence);
|
|
22815
22914
|
const elapsed = timelock.type === "blocks" ? chainTip.height >= txStatus.blockHeight + Number(timelock.value) : chainTip.time >= txStatus.blockTime + Number(timelock.value);
|
|
22816
22915
|
if (!elapsed) {
|
|
22817
22916
|
throw new Error(`no available exit path found for vtxo ${vtxo.txid}:${vtxo.vout}`);
|
|
@@ -22824,7 +22923,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
22824
22923
|
sequence,
|
|
22825
22924
|
witnessUtxo: {
|
|
22826
22925
|
amount: BigInt(vtxo.value),
|
|
22827
|
-
script:
|
|
22926
|
+
script: chunkDAYCCIRO_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
|
|
22828
22927
|
},
|
|
22829
22928
|
sighashType: btcSigner.SigHash.DEFAULT
|
|
22830
22929
|
});
|
|
@@ -22834,7 +22933,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
|
|
|
22834
22933
|
btcSigner.TaprootControlBlock.encode(spendingLeaf[0]).length
|
|
22835
22934
|
);
|
|
22836
22935
|
}
|
|
22837
|
-
const tx = new
|
|
22936
|
+
const tx = new chunkDAYCCIRO_cjs.Transaction({ version: 2 });
|
|
22838
22937
|
for (const input of inputs) {
|
|
22839
22938
|
tx.addInput(input);
|
|
22840
22939
|
}
|
|
@@ -22917,7 +23016,7 @@ async function buildSignedSweep(params) {
|
|
|
22917
23016
|
`uneconomic vtxo ${vtxo.txid}:${vtxo.vout}: value ${vtxo.value} - fee ${fee} < dust`
|
|
22918
23017
|
);
|
|
22919
23018
|
}
|
|
22920
|
-
const tx = new
|
|
23019
|
+
const tx = new chunkDAYCCIRO_cjs.Transaction({ version: 2 });
|
|
22921
23020
|
tx.addInput({
|
|
22922
23021
|
txid: vtxo.txid,
|
|
22923
23022
|
index: vtxo.vout,
|
|
@@ -22942,7 +23041,7 @@ async function buildSignedSweep(params) {
|
|
|
22942
23041
|
finalScriptWitness: [
|
|
22943
23042
|
tapScriptSig[0][1],
|
|
22944
23043
|
...path.extraWitness,
|
|
22945
|
-
|
|
23044
|
+
chunkDAYCCIRO_cjs.scriptFromTapLeafScript(path.leaf),
|
|
22946
23045
|
btcSigner.TaprootControlBlock.encode(controlBlock)
|
|
22947
23046
|
]
|
|
22948
23047
|
});
|
|
@@ -22972,7 +23071,7 @@ async function resolveFeeRate(opts) {
|
|
|
22972
23071
|
}
|
|
22973
23072
|
async function selectExitVtxos(opts) {
|
|
22974
23073
|
if (!opts.vtxos) return opts.wallet.getVtxos();
|
|
22975
|
-
const res = await
|
|
23074
|
+
const res = await chunkDAYCCIRO_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
|
|
22976
23075
|
const tapTrees = /* @__PURE__ */ new Map();
|
|
22977
23076
|
const out = [];
|
|
22978
23077
|
for (const vtxo of res.vtxos) {
|
|
@@ -22987,7 +23086,7 @@ async function selectExitVtxos(opts) {
|
|
|
22987
23086
|
`no contract registered for vtxo script ${vtxo.script} \u2014 register the contract before exiting`
|
|
22988
23087
|
);
|
|
22989
23088
|
}
|
|
22990
|
-
const handler =
|
|
23089
|
+
const handler = chunkFUW3OM5X_cjs.contractHandlers.get(contract.type);
|
|
22991
23090
|
if (!handler) {
|
|
22992
23091
|
throw new Error(`no contract handler registered for type '${contract.type}'`);
|
|
22993
23092
|
}
|
|
@@ -23017,7 +23116,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
23017
23116
|
if (pendingNodes.length > 0) {
|
|
23018
23117
|
const txs = await resolver.getVirtualTxs(pendingNodes.map((n) => n.txid));
|
|
23019
23118
|
for (const psbt of txs) {
|
|
23020
|
-
psbts.set(
|
|
23119
|
+
psbts.set(chunkDAYCCIRO_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
|
|
23021
23120
|
}
|
|
23022
23121
|
}
|
|
23023
23122
|
const childVsize = Number(
|
|
@@ -23053,7 +23152,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
23053
23152
|
try {
|
|
23054
23153
|
const resolved = await resolveUnilateralPath({
|
|
23055
23154
|
vtxo,
|
|
23056
|
-
scriptHex: base.hex.encode(
|
|
23155
|
+
scriptHex: base.hex.encode(chunkDAYCCIRO_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
|
|
23057
23156
|
contractRepository: wallet.contractRepository,
|
|
23058
23157
|
walletPubKeyHex,
|
|
23059
23158
|
currentTime: Date.now()
|
|
@@ -23072,7 +23171,7 @@ async function computeExitLayout(opts, feeRate) {
|
|
|
23072
23171
|
});
|
|
23073
23172
|
continue;
|
|
23074
23173
|
}
|
|
23075
|
-
const t =
|
|
23174
|
+
const t = chunkDAYCCIRO_cjs.sequenceToTimelock(resolved.selection.sequence);
|
|
23076
23175
|
const delay = { type: t.type, value: Number(t.value) };
|
|
23077
23176
|
infos.push({ outpoint, value: vtxo.value, sweepFee, path: resolved.label, delay });
|
|
23078
23177
|
sweeps.push({ vtxo, resolved, sweepFee, delay });
|
|
@@ -23473,7 +23572,7 @@ async function prepare(opts) {
|
|
|
23473
23572
|
txid: sweep.vtxo.txid,
|
|
23474
23573
|
vout: sweep.vtxo.vout,
|
|
23475
23574
|
value: sweep.vtxo.value,
|
|
23476
|
-
pkScript:
|
|
23575
|
+
pkScript: chunkDAYCCIRO_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
|
|
23477
23576
|
},
|
|
23478
23577
|
path: sweep.resolved.selection,
|
|
23479
23578
|
outputAddress: opts.sweepAddress,
|
|
@@ -23562,7 +23661,7 @@ async function prepare(opts) {
|
|
|
23562
23661
|
if (newFee <= splitterFee) break;
|
|
23563
23662
|
splitterFee = newFee;
|
|
23564
23663
|
}
|
|
23565
|
-
const splitter = new
|
|
23664
|
+
const splitter = new chunkDAYCCIRO_cjs.Transaction({ version: 2 });
|
|
23566
23665
|
for (const coin of selected.inputs) {
|
|
23567
23666
|
splitter.addInput({
|
|
23568
23667
|
txid: coin.txid,
|
|
@@ -23706,43 +23805,43 @@ var UnilateralExit = {
|
|
|
23706
23805
|
// src/arkade/index.ts
|
|
23707
23806
|
var arkade_exports = {};
|
|
23708
23807
|
chunk5BLDMQED_cjs.__export(arkade_exports, {
|
|
23709
|
-
ARKADE_OP: () =>
|
|
23710
|
-
ARKADE_OPCODES: () =>
|
|
23711
|
-
ARKADE_OPCODE_NAMES: () =>
|
|
23712
|
-
ARKADE_OPCODE_VALUES: () =>
|
|
23713
|
-
ARKADE_OPS: () =>
|
|
23808
|
+
ARKADE_OP: () => chunkFUW3OM5X_cjs.ARKADE_OP,
|
|
23809
|
+
ARKADE_OPCODES: () => chunkFUW3OM5X_cjs.ARKADE_OPCODES,
|
|
23810
|
+
ARKADE_OPCODE_NAMES: () => chunkFUW3OM5X_cjs.ARKADE_OPCODE_NAMES,
|
|
23811
|
+
ARKADE_OPCODE_VALUES: () => chunkFUW3OM5X_cjs.ARKADE_OPCODE_VALUES,
|
|
23812
|
+
ARKADE_OPS: () => chunkFUW3OM5X_cjs.ARKADE_OPS,
|
|
23714
23813
|
Arkade: () => Arkade,
|
|
23715
23814
|
ArkadeContract: () => ArkadeContract,
|
|
23716
|
-
ArkadeProgramScript: () =>
|
|
23717
|
-
ArkadeScript: () =>
|
|
23815
|
+
ArkadeProgramScript: () => chunkFUW3OM5X_cjs.ArkadeProgramScript,
|
|
23816
|
+
ArkadeScript: () => chunkFUW3OM5X_cjs.ArkadeScript,
|
|
23718
23817
|
ArkadeTransactionBuilder: () => ArkadeTransactionBuilder,
|
|
23719
|
-
BigNum: () =>
|
|
23818
|
+
BigNum: () => chunkFUW3OM5X_cjs.bignum_exports,
|
|
23720
23819
|
OP: () => btcSigner.OP,
|
|
23721
|
-
OPCODE_NAMES: () =>
|
|
23722
|
-
OPCODE_VALUES: () =>
|
|
23723
|
-
SUPPORTED_PROGRAM_VERSION: () =>
|
|
23820
|
+
OPCODE_NAMES: () => chunkFUW3OM5X_cjs.OPCODE_NAMES,
|
|
23821
|
+
OPCODE_VALUES: () => chunkFUW3OM5X_cjs.OPCODE_VALUES,
|
|
23822
|
+
SUPPORTED_PROGRAM_VERSION: () => chunkFUW3OM5X_cjs.SUPPORTED_PROGRAM_VERSION,
|
|
23724
23823
|
Script: () => btcSigner.Script,
|
|
23725
|
-
arkadeScriptHash: () =>
|
|
23726
|
-
arkadeWitnessHash: () =>
|
|
23727
|
-
asmToBytes: () =>
|
|
23728
|
-
bytesToASM: () =>
|
|
23729
|
-
computeArkadeScriptPublicKey: () =>
|
|
23824
|
+
arkadeScriptHash: () => chunkFUW3OM5X_cjs.arkadeScriptHash,
|
|
23825
|
+
arkadeWitnessHash: () => chunkFUW3OM5X_cjs.arkadeWitnessHash,
|
|
23826
|
+
asmToBytes: () => chunkFUW3OM5X_cjs.asmToBytes,
|
|
23827
|
+
bytesToASM: () => chunkFUW3OM5X_cjs.bytesToASM,
|
|
23828
|
+
computeArkadeScriptPublicKey: () => chunkFUW3OM5X_cjs.computeArkadeScriptPublicKey,
|
|
23730
23829
|
createArkadeBatchHandler: () => createArkadeBatchHandler,
|
|
23731
|
-
deserializeArkadeContractParams: () =>
|
|
23732
|
-
fromASM: () =>
|
|
23733
|
-
getOpcodeName: () =>
|
|
23734
|
-
getOpcodeValue: () =>
|
|
23830
|
+
deserializeArkadeContractParams: () => chunkFUW3OM5X_cjs.deserializeArkadeContractParams,
|
|
23831
|
+
fromASM: () => chunkFUW3OM5X_cjs.fromASM,
|
|
23832
|
+
getOpcodeName: () => chunkFUW3OM5X_cjs.getOpcodeName,
|
|
23833
|
+
getOpcodeValue: () => chunkFUW3OM5X_cjs.getOpcodeValue,
|
|
23735
23834
|
isContractArtifact: () => isContractArtifact,
|
|
23736
|
-
parseArtifact: () =>
|
|
23835
|
+
parseArtifact: () => chunkFUW3OM5X_cjs.parseArtifact,
|
|
23737
23836
|
programFromArtifact: () => programFromArtifact,
|
|
23738
|
-
resolveAsm: () =>
|
|
23739
|
-
serializeArkadeContractParams: () =>
|
|
23740
|
-
stringifyArtifact: () =>
|
|
23741
|
-
toASM: () =>
|
|
23742
|
-
validateProgram: () =>
|
|
23743
|
-
witnessRefToBytes: () =>
|
|
23837
|
+
resolveAsm: () => chunkFUW3OM5X_cjs.resolveAsm,
|
|
23838
|
+
serializeArkadeContractParams: () => chunkFUW3OM5X_cjs.serializeArkadeContractParams,
|
|
23839
|
+
stringifyArtifact: () => chunkFUW3OM5X_cjs.stringifyArtifact,
|
|
23840
|
+
toASM: () => chunkFUW3OM5X_cjs.toASM,
|
|
23841
|
+
validateProgram: () => chunkFUW3OM5X_cjs.validateProgram,
|
|
23842
|
+
witnessRefToBytes: () => chunkFUW3OM5X_cjs.witnessRefToBytes
|
|
23744
23843
|
});
|
|
23745
|
-
var isVtxoCoin = (input) =>
|
|
23844
|
+
var isVtxoCoin = (input) => chunkDAYCCIRO_cjs.isVirtualCoin(input);
|
|
23746
23845
|
function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message, session, arkProvider, emulator, network, recipients, batchExpiryPolicy) {
|
|
23747
23846
|
let batchId;
|
|
23748
23847
|
let sweepTapTreeRoot;
|
|
@@ -23763,23 +23862,23 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
23763
23862
|
);
|
|
23764
23863
|
await arkProvider.confirmRegistration(intentId);
|
|
23765
23864
|
batchId = event.id;
|
|
23766
|
-
const sweepTapscript =
|
|
23865
|
+
const sweepTapscript = chunkDAYCCIRO_cjs.CSVMultisigTapscript.encode({
|
|
23767
23866
|
timelock,
|
|
23768
|
-
pubkeys: [
|
|
23867
|
+
pubkeys: [chunkFUW3OM5X_cjs.toXOnly(base.hex.decode(info.forfeitPubkey), "forfeit key")]
|
|
23769
23868
|
}).script;
|
|
23770
23869
|
sweepTapTreeRoot = payment_js.tapLeafHash(sweepTapscript);
|
|
23771
23870
|
return { skip: false };
|
|
23772
23871
|
},
|
|
23773
23872
|
onTreeSigningStarted: async (event, vtxoTree) => {
|
|
23774
23873
|
const signerPubKey = await session.getPublicKey();
|
|
23775
|
-
const xonlySignerPubKey =
|
|
23874
|
+
const xonlySignerPubKey = chunkFUW3OM5X_cjs.toXOnly(signerPubKey, "signer key");
|
|
23776
23875
|
const xOnlyPubkeys = event.cosignersPublicKeys.map(
|
|
23777
|
-
(k) => base.hex.encode(
|
|
23876
|
+
(k) => base.hex.encode(chunkFUW3OM5X_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
|
|
23778
23877
|
);
|
|
23779
23878
|
if (!xOnlyPubkeys.includes(base.hex.encode(xonlySignerPubKey))) {
|
|
23780
23879
|
return { skip: true };
|
|
23781
23880
|
}
|
|
23782
|
-
const commitmentTx =
|
|
23881
|
+
const commitmentTx = chunkDAYCCIRO_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
|
|
23783
23882
|
validateVtxoTxGraph(vtxoTree, commitmentTx, sweepTapTreeRoot);
|
|
23784
23883
|
if (recipients && recipients.length > 0) {
|
|
23785
23884
|
validateBatchRecipients(commitmentTx, vtxoTree.leaves(), recipients, network);
|
|
@@ -23817,7 +23916,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
23817
23916
|
if (connectorTree) {
|
|
23818
23917
|
validateConnectorsTxGraph(event.commitmentTx, connectorTree);
|
|
23819
23918
|
}
|
|
23820
|
-
let commitmentPsbt =
|
|
23919
|
+
let commitmentPsbt = chunkDAYCCIRO_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
|
|
23821
23920
|
assertFinalCommitmentMatchesValidated(
|
|
23822
23921
|
commitmentPsbt,
|
|
23823
23922
|
validatedCommitmentTxid,
|
|
@@ -23859,7 +23958,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
23859
23958
|
boardingIndices.push(boardingIdx);
|
|
23860
23959
|
continue;
|
|
23861
23960
|
}
|
|
23862
|
-
if (
|
|
23961
|
+
if (!chunkDAYCCIRO_cjs.requiresForfeit(input) || isSubdust(input, info.dust)) {
|
|
23863
23962
|
continue;
|
|
23864
23963
|
}
|
|
23865
23964
|
if (connectorIndex >= connectorLeaves.length) {
|
|
@@ -23880,7 +23979,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
|
|
|
23880
23979
|
index: input.vout,
|
|
23881
23980
|
witnessUtxo: {
|
|
23882
23981
|
amount: BigInt(input.value),
|
|
23883
|
-
script:
|
|
23982
|
+
script: chunkDAYCCIRO_cjs.VtxoScript.decode(input.tapTree).pkScript
|
|
23884
23983
|
},
|
|
23885
23984
|
sighashType: btcSigner.SigHash.DEFAULT,
|
|
23886
23985
|
tapLeafScript: [input.forfeitTapLeafScript]
|
|
@@ -24025,7 +24124,7 @@ function flatten(param, structs, stack = []) {
|
|
|
24025
24124
|
function opcodeToken(token) {
|
|
24026
24125
|
const base = token.slice(3);
|
|
24027
24126
|
const name = base === "0" || /^([1-9]|1[0-6])$/.test(base) ? token : base;
|
|
24028
|
-
if (!Object.hasOwn(
|
|
24127
|
+
if (!Object.hasOwn(chunkFUW3OM5X_cjs.ARKADE_OPS, name)) {
|
|
24029
24128
|
fail(`opcode '${token}' is not in this SDK's table`);
|
|
24030
24129
|
}
|
|
24031
24130
|
return name;
|
|
@@ -24070,6 +24169,14 @@ function providedWitness(witness) {
|
|
|
24070
24169
|
return !item.injected && item.type !== "signature";
|
|
24071
24170
|
});
|
|
24072
24171
|
}
|
|
24172
|
+
function csvTimelock(leafName, operand) {
|
|
24173
|
+
if (typeof operand === "string") return { type: "blocks", value: operand };
|
|
24174
|
+
const timelock = operand >= 0n && operand < 0x80000000n ? chunkDAYCCIRO_cjs.sequenceToTimelock(Number(operand)) : void 0;
|
|
24175
|
+
if (!timelock || BigInt(chunkDAYCCIRO_cjs.timelockToSequence(timelock)) !== operand) {
|
|
24176
|
+
fail(`leaf '${leafName}': CSV literal ${operand} is not a canonical BIP68 sequence`);
|
|
24177
|
+
}
|
|
24178
|
+
return timelock;
|
|
24179
|
+
}
|
|
24073
24180
|
function parseLeaf(leaf, hasCovenant, instantiations, extras) {
|
|
24074
24181
|
const asm = leaf.asm;
|
|
24075
24182
|
let index = 0;
|
|
@@ -24084,7 +24191,7 @@ function parseLeaf(leaf, hasCovenant, instantiations, extras) {
|
|
|
24084
24191
|
let cltv;
|
|
24085
24192
|
if (asm.length >= index + 3 && asm[index + 2] === "OP_DROP") {
|
|
24086
24193
|
const operand = asm[index].startsWith("<") && asm[index].endsWith(">") ? `$${asm[index].slice(1, -1)}` : BigInt(asm[index]);
|
|
24087
|
-
if (asm[index + 1] === "OP_CHECKSEQUENCEVERIFY") csv =
|
|
24194
|
+
if (asm[index + 1] === "OP_CHECKSEQUENCEVERIFY") csv = csvTimelock(leaf.name, operand);
|
|
24088
24195
|
else if (asm[index + 1] === "OP_CHECKLOCKTIMEVERIFY") cltv = operand;
|
|
24089
24196
|
else fail(`leaf '${leaf.name}': unexpected timelock opcode ${asm[index + 1]}`);
|
|
24090
24197
|
index += 3;
|
|
@@ -24183,7 +24290,7 @@ function programFromArtifact(artifact) {
|
|
|
24183
24290
|
const paramNames = /* @__PURE__ */ new Set();
|
|
24184
24291
|
for (const param of params) claim(paramNames, param.name, "program parameter");
|
|
24185
24292
|
return {
|
|
24186
|
-
version:
|
|
24293
|
+
version: chunkFUW3OM5X_cjs.SUPPORTED_PROGRAM_VERSION,
|
|
24187
24294
|
name: artifact.contractName,
|
|
24188
24295
|
params,
|
|
24189
24296
|
functions
|
|
@@ -24228,16 +24335,16 @@ var Arkade = class _Arkade {
|
|
|
24228
24335
|
/** Connect and resolve the server key, checkpoint closure and (if present) the co-signer key. */
|
|
24229
24336
|
static async connect(opts) {
|
|
24230
24337
|
const info = await opts.arkade.getInfo();
|
|
24231
|
-
const serverKey =
|
|
24232
|
-
const checkpoint =
|
|
24233
|
-
const network = opts.network ?? (Object.hasOwn(
|
|
24338
|
+
const serverKey = chunkFUW3OM5X_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
|
|
24339
|
+
const checkpoint = chunkDAYCCIRO_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
|
|
24340
|
+
const network = opts.network ?? (Object.hasOwn(chunkDAYCCIRO_cjs.networks, info.network) ? chunkDAYCCIRO_cjs.getNetwork(info.network) : chunkDAYCCIRO_cjs.DEFAULT_NETWORK);
|
|
24234
24341
|
let emulatorKey;
|
|
24235
24342
|
if (opts.emulator) {
|
|
24236
|
-
emulatorKey = base.hex.decode(
|
|
24343
|
+
emulatorKey = base.hex.decode(chunkDAYCCIRO_cjs.resolveEmulatorPubkey(network, opts.emulatorPubkey));
|
|
24237
24344
|
}
|
|
24238
24345
|
let userKey;
|
|
24239
24346
|
if (opts.identity) {
|
|
24240
|
-
userKey =
|
|
24347
|
+
userKey = chunkFUW3OM5X_cjs.toXOnly(await opts.identity.xOnlyPublicKey(), "identity key");
|
|
24241
24348
|
}
|
|
24242
24349
|
return new _Arkade({
|
|
24243
24350
|
arkProvider: opts.arkade,
|
|
@@ -24263,7 +24370,7 @@ var Arkade = class _Arkade {
|
|
|
24263
24370
|
* key respectively; explicit args always win.
|
|
24264
24371
|
*/
|
|
24265
24372
|
contract(program, args = {}) {
|
|
24266
|
-
const declared = (program.params ?? []).map(
|
|
24373
|
+
const declared = (program.params ?? []).map(chunkFUW3OM5X_cjs.inputName);
|
|
24267
24374
|
if (declared.includes("server") && args.server === void 0) {
|
|
24268
24375
|
args = { ...args, server: this.serverKey };
|
|
24269
24376
|
}
|
|
@@ -24283,7 +24390,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
24283
24390
|
userKey: client.userKey,
|
|
24284
24391
|
emulatorKey: client.emulatorKey
|
|
24285
24392
|
};
|
|
24286
|
-
this.vtxoScript = new
|
|
24393
|
+
this.vtxoScript = new chunkFUW3OM5X_cjs.ArkadeProgramScript(program, args, this.keys);
|
|
24287
24394
|
this.tapTree = this.vtxoScript.encode();
|
|
24288
24395
|
this.compiled = this.vtxoScript.compiled;
|
|
24289
24396
|
}
|
|
@@ -24311,7 +24418,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
24311
24418
|
`ArkadeContract.fromContract: expected contract type 'arkade', got '${contract.type}'`
|
|
24312
24419
|
);
|
|
24313
24420
|
}
|
|
24314
|
-
const typed =
|
|
24421
|
+
const typed = chunkFUW3OM5X_cjs.deserializeArkadeContractParams(contract.params);
|
|
24315
24422
|
return new _ArkadeContract(client, typed.program, typed.args, {
|
|
24316
24423
|
serverKey: typed.serverKey,
|
|
24317
24424
|
userKey: typed.userKey,
|
|
@@ -24352,7 +24459,7 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
24352
24459
|
toContractParams() {
|
|
24353
24460
|
return {
|
|
24354
24461
|
type: "arkade",
|
|
24355
|
-
params:
|
|
24462
|
+
params: chunkFUW3OM5X_cjs.serializeArkadeContractParams({
|
|
24356
24463
|
program: this.program,
|
|
24357
24464
|
args: this.args,
|
|
24358
24465
|
serverKey: this.keys.serverKey,
|
|
@@ -24401,17 +24508,17 @@ var ArkadeContract = class _ArkadeContract {
|
|
|
24401
24508
|
const [registered] = await manager.getContracts({ script: scriptHex });
|
|
24402
24509
|
if (registered) {
|
|
24403
24510
|
const [withVtxos] = await manager.getContractsWithVtxos({ script: scriptHex });
|
|
24404
|
-
return (withVtxos?.vtxos ?? []).filter((v) => !
|
|
24511
|
+
return (withVtxos?.vtxos ?? []).filter((v) => !chunkDAYCCIRO_cjs.isVtxoSpent(v) && !v.isUnrolled);
|
|
24405
24512
|
}
|
|
24406
24513
|
}
|
|
24407
24514
|
if (!this.client.indexer) {
|
|
24408
24515
|
throw new Error("ArkadeContract.getUtxos: an indexer is required");
|
|
24409
24516
|
}
|
|
24410
|
-
const { vtxos } = await
|
|
24517
|
+
const { vtxos } = await chunkDAYCCIRO_cjs.getNormalizedVtxos(this.client.indexer, {
|
|
24411
24518
|
scripts: [scriptHex],
|
|
24412
24519
|
spendableOnly: true
|
|
24413
24520
|
});
|
|
24414
|
-
return vtxos.filter((v) => !
|
|
24521
|
+
return vtxos.filter((v) => !chunkDAYCCIRO_cjs.isVtxoSpent(v) && !v.isUnrolled);
|
|
24415
24522
|
}
|
|
24416
24523
|
/** Total spendable balance (requires an indexer). */
|
|
24417
24524
|
async getBalance() {
|
|
@@ -24509,7 +24616,7 @@ var ArkadeTransactionBuilder = class {
|
|
|
24509
24616
|
this.contract.client.checkpoint
|
|
24510
24617
|
);
|
|
24511
24618
|
if (coin.sourceTx) {
|
|
24512
|
-
|
|
24619
|
+
chunkDAYCCIRO_cjs.setArkPsbtField(arkTx, 0, chunkDAYCCIRO_cjs.PrevArkTxField, coin.sourceTx);
|
|
24513
24620
|
}
|
|
24514
24621
|
if (this.fn.arkadeScript) {
|
|
24515
24622
|
const indexer = this.contract.client.indexer;
|
|
@@ -24526,8 +24633,8 @@ var ArkadeTransactionBuilder = class {
|
|
|
24526
24633
|
}
|
|
24527
24634
|
const condition = (def.tapscript.witness ?? []).map((w) => this.witnessBytes(w));
|
|
24528
24635
|
if (condition.length > 0) {
|
|
24529
|
-
|
|
24530
|
-
|
|
24636
|
+
chunkDAYCCIRO_cjs.setArkPsbtField(arkTx, 0, chunkDAYCCIRO_cjs.ConditionWitness, condition);
|
|
24637
|
+
chunkDAYCCIRO_cjs.setArkPsbtField(checkpoints[0], 0, chunkDAYCCIRO_cjs.ConditionWitness, condition);
|
|
24531
24638
|
}
|
|
24532
24639
|
const packets = [];
|
|
24533
24640
|
if (this.assetSpecs.length > 0) {
|
|
@@ -24566,7 +24673,7 @@ var ArkadeTransactionBuilder = class {
|
|
|
24566
24673
|
base.base64.encode(signedArk2.toPSBT()),
|
|
24567
24674
|
signedCps.map((c) => base.base64.encode(c.toPSBT()))
|
|
24568
24675
|
);
|
|
24569
|
-
const txid =
|
|
24676
|
+
const txid = chunkDAYCCIRO_cjs.Transaction.fromPSBT(base.base64.decode(res2.signedArkTx)).id;
|
|
24570
24677
|
return {
|
|
24571
24678
|
txid,
|
|
24572
24679
|
signedArkTx: res2.signedArkTx,
|
|
@@ -24625,23 +24732,23 @@ var ArkadeTransactionBuilder = class {
|
|
|
24625
24732
|
}
|
|
24626
24733
|
buildAssetPacket() {
|
|
24627
24734
|
const groups = this.assetSpecs.map((s) => {
|
|
24628
|
-
const id = typeof s.assetId === "string" ?
|
|
24629
|
-
return
|
|
24735
|
+
const id = typeof s.assetId === "string" ? chunkSJPPBR2V_cjs.AssetId.fromString(s.assetId) : chunkSJPPBR2V_cjs.AssetId.fromBytes(s.assetId);
|
|
24736
|
+
return chunkSJPPBR2V_cjs.AssetGroup.create(
|
|
24630
24737
|
id,
|
|
24631
24738
|
null,
|
|
24632
|
-
s.inputs.map((i) =>
|
|
24633
|
-
s.outputs.map((o) =>
|
|
24634
|
-
(s.metadata ?? []).map((m) =>
|
|
24739
|
+
s.inputs.map((i) => chunkSJPPBR2V_cjs.AssetInput.create(i.vin, i.amount)),
|
|
24740
|
+
s.outputs.map((o) => chunkSJPPBR2V_cjs.AssetOutput.create(o.vout, o.amount)),
|
|
24741
|
+
(s.metadata ?? []).map((m) => chunkSJPPBR2V_cjs.Metadata.create(m.key, m.value))
|
|
24635
24742
|
);
|
|
24636
24743
|
});
|
|
24637
|
-
return
|
|
24744
|
+
return chunkSJPPBR2V_cjs.Packet.create(groups);
|
|
24638
24745
|
}
|
|
24639
24746
|
witnessBytes(ref) {
|
|
24640
|
-
return
|
|
24747
|
+
return chunkFUW3OM5X_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
|
|
24641
24748
|
}
|
|
24642
24749
|
};
|
|
24643
24750
|
function bindInputs(fn, callArgs) {
|
|
24644
|
-
const names = (fn.def.inputs ?? []).map(
|
|
24751
|
+
const names = (fn.def.inputs ?? []).map(chunkFUW3OM5X_cjs.inputName);
|
|
24645
24752
|
if (callArgs.length !== names.length) {
|
|
24646
24753
|
throw new Error(`${fn.name}: expected ${names.length} argument(s), got ${callArgs.length}`);
|
|
24647
24754
|
}
|
|
@@ -25054,17 +25161,17 @@ var walletFeeSource = (wallet) => async () => (await wallet.arkProvider.getInfo(
|
|
|
25054
25161
|
function offchainInputFees(vtxos, fees) {
|
|
25055
25162
|
const estimator = new Estimator(fees?.intentFee ?? {});
|
|
25056
25163
|
return vtxos.reduce(
|
|
25057
|
-
(total, vtxo) => total + estimator.evalOffchainInput(
|
|
25164
|
+
(total, vtxo) => total + estimator.evalOffchainInput(chunkDAYCCIRO_cjs.toOffchainInputFeeParams(vtxo)).satoshis,
|
|
25058
25165
|
0
|
|
25059
25166
|
);
|
|
25060
25167
|
}
|
|
25061
25168
|
async function changeOutputFee(wallet, inputs, needed, fees) {
|
|
25062
25169
|
const estimator = new Estimator(fees?.intentFee ?? {});
|
|
25063
25170
|
const net = inputs.reduce(
|
|
25064
|
-
(total, vtxo) => total + BigInt(vtxo.value) - BigInt(estimator.evalOffchainInput(
|
|
25171
|
+
(total, vtxo) => total + BigInt(vtxo.value) - BigInt(estimator.evalOffchainInput(chunkDAYCCIRO_cjs.toOffchainInputFeeParams(vtxo)).satoshis),
|
|
25065
25172
|
0n
|
|
25066
25173
|
);
|
|
25067
|
-
const script = base.hex.encode(
|
|
25174
|
+
const script = base.hex.encode(chunkDAYCCIRO_cjs.ArkAddress.decode(await wallet.getAddress()).pkScript);
|
|
25068
25175
|
return changeAfterOutputFee(
|
|
25069
25176
|
net - needed,
|
|
25070
25177
|
(amount) => BigInt(estimator.evalOffchainOutput({ amount, script }).satoshis)
|
|
@@ -25129,11 +25236,6 @@ function createDefaultPaymentRouter(wallet) {
|
|
|
25129
25236
|
prefs: { priority: ["ark", "ark-asset", "lightning", "onchain"] }
|
|
25130
25237
|
}).use(arkRail()).use(arkAssetRail()).use(onchainRail({ feeInfo: walletFeeSource(wallet) }));
|
|
25131
25238
|
}
|
|
25132
|
-
/*! Bundled license information:
|
|
25133
|
-
|
|
25134
|
-
@noble/hashes/utils.js:
|
|
25135
|
-
(*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
|
|
25136
|
-
*/
|
|
25137
25239
|
|
|
25138
25240
|
exports.ARKADE_MAGIC = ARKADE_MAGIC;
|
|
25139
25241
|
exports.ARKADE_SALTED_PREIMAGE_TAG = ARKADE_SALTED_PREIMAGE_TAG;
|
|
@@ -25363,5 +25465,5 @@ exports.waitForIncomingFunds = waitForIncomingFunds;
|
|
|
25363
25465
|
exports.walletFeeSource = walletFeeSource;
|
|
25364
25466
|
exports.warnAndFilterVtxosForScript = warnAndFilterVtxosForScript;
|
|
25365
25467
|
exports.withPrevTxs = withPrevTxs;
|
|
25366
|
-
//# sourceMappingURL=chunk-
|
|
25367
|
-
//# sourceMappingURL=chunk-
|
|
25468
|
+
//# sourceMappingURL=chunk-HAM3SHBV.cjs.map
|
|
25469
|
+
//# sourceMappingURL=chunk-HAM3SHBV.cjs.map
|