@xyo-network/xl1-protocol-sdk 1.9.0 → 1.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/neutral/index.mjs
CHANGED
|
@@ -1,97 +1,69 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
-
|
|
4
1
|
// src/block/hydrateBlock.ts
|
|
5
2
|
import { filterAs } from "@xylabs/array";
|
|
6
3
|
import { assertEx } from "@xylabs/assert";
|
|
7
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
asTransactionBoundWitnessWithStorageMeta,
|
|
6
|
+
isBlockBoundWitnessWithStorageMeta,
|
|
7
|
+
isTransactionBoundWitnessWithStorageMeta
|
|
8
|
+
} from "@xyo-network/xl1-protocol";
|
|
8
9
|
function allHashesPresent(hashes, payloads) {
|
|
9
10
|
const payloadHashes = new Set(payloads.map((p) => p._hash));
|
|
10
11
|
return hashes.every((hash) => payloadHashes.has(hash));
|
|
11
12
|
}
|
|
12
|
-
|
|
13
|
-
var tryHydrateBlock = /* @__PURE__ */ __name(async (archivist, hash, maxDepth = 1) => {
|
|
13
|
+
var tryHydrateBlock = async (archivist, hash, maxDepth = 1) => {
|
|
14
14
|
assertEx(maxDepth >= 0, () => "maxDepth must be greater than or equal to 0");
|
|
15
|
-
const bw = (await archivist.get([
|
|
16
|
-
hash
|
|
17
|
-
])).find(isBlockBoundWitnessWithStorageMeta);
|
|
15
|
+
const bw = (await archivist.get([hash])).find(isBlockBoundWitnessWithStorageMeta);
|
|
18
16
|
if (!bw) return void 0;
|
|
19
|
-
if (maxDepth === 0) return [
|
|
20
|
-
bw,
|
|
21
|
-
[]
|
|
22
|
-
];
|
|
17
|
+
if (maxDepth === 0) return [bw, []];
|
|
23
18
|
const blkPayloads = await archivist.get(bw.payload_hashes);
|
|
24
|
-
if (maxDepth === 1) return [
|
|
25
|
-
bw,
|
|
26
|
-
blkPayloads
|
|
27
|
-
];
|
|
19
|
+
if (maxDepth === 1) return [bw, blkPayloads];
|
|
28
20
|
const transactions = blkPayloads.filter(isTransactionBoundWitnessWithStorageMeta);
|
|
29
21
|
const transactionsPayloadHashes = transactions.flatMap((tx) => tx.payload_hashes);
|
|
30
22
|
const transactionsPayloads = await archivist.get(transactionsPayloadHashes);
|
|
31
|
-
const allPayloadsHashes = new Set([
|
|
32
|
-
|
|
33
|
-
...transactionsPayloads
|
|
34
|
-
].flatMap((p) => p._hash));
|
|
35
|
-
const allPayloads = await archivist.get([
|
|
36
|
-
...allPayloadsHashes
|
|
37
|
-
]);
|
|
23
|
+
const allPayloadsHashes = new Set([...blkPayloads, ...transactionsPayloads].flatMap((p) => p._hash));
|
|
24
|
+
const allPayloads = await archivist.get([...allPayloadsHashes]);
|
|
38
25
|
const allPayloadsFiltered = allPayloads.filter((p) => allPayloadsHashes.has(p._hash));
|
|
39
|
-
return [
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
];
|
|
43
|
-
}, "tryHydrateBlock");
|
|
44
|
-
var hydrateBlock = /* @__PURE__ */ __name(async (archivist, hash, maxDepth = 1, minDepth = maxDepth) => {
|
|
26
|
+
return [bw, allPayloadsFiltered];
|
|
27
|
+
};
|
|
28
|
+
var hydrateBlock = async (archivist, hash, maxDepth = 1, minDepth = maxDepth) => {
|
|
45
29
|
assertEx(maxDepth >= 0, () => "maxDepth must be greater than or equal to 0");
|
|
46
30
|
assertEx(minDepth >= 0, () => "minDepth must be greater than or equal to 0");
|
|
47
31
|
assertEx(maxDepth >= minDepth, () => "maxDepth must be greater than or equal to minDepth");
|
|
48
|
-
const bw = assertEx(
|
|
49
|
-
hash
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
[]
|
|
54
|
-
];
|
|
32
|
+
const bw = assertEx(
|
|
33
|
+
(await archivist.get([hash])).find(isBlockBoundWitnessWithStorageMeta),
|
|
34
|
+
() => `block ${hash} not found`
|
|
35
|
+
);
|
|
36
|
+
if (maxDepth === 0) return [bw, []];
|
|
55
37
|
const blkPayloads = await archivist.get(bw.payload_hashes);
|
|
56
38
|
if (minDepth === 1) assertEx(allHashesPresent(bw.payload_hashes, blkPayloads), () => `Unable to find all payloads for block ${hash}`);
|
|
57
|
-
if (maxDepth === 1) return [
|
|
58
|
-
bw,
|
|
59
|
-
blkPayloads
|
|
60
|
-
];
|
|
39
|
+
if (maxDepth === 1) return [bw, blkPayloads];
|
|
61
40
|
const transactions = blkPayloads.filter(isTransactionBoundWitnessWithStorageMeta);
|
|
62
41
|
const transactionsPayloadHashes = transactions.flatMap((tx) => tx.payload_hashes);
|
|
63
42
|
const transactionsPayloads = await archivist.get(transactionsPayloadHashes);
|
|
64
43
|
assertEx(allHashesPresent(transactionsPayloadHashes, transactionsPayloads), () => `Unable to find all payloads for transactions in block ${hash}`);
|
|
65
|
-
const allPayloadsHashes = new Set([
|
|
66
|
-
|
|
67
|
-
...transactionsPayloads
|
|
68
|
-
].flatMap((p) => p._hash));
|
|
69
|
-
const allPayloads = await archivist.get([
|
|
70
|
-
...allPayloadsHashes
|
|
71
|
-
]);
|
|
44
|
+
const allPayloadsHashes = new Set([...blkPayloads, ...transactionsPayloads].flatMap((p) => p._hash));
|
|
45
|
+
const allPayloads = await archivist.get([...allPayloadsHashes]);
|
|
72
46
|
const allPayloadsFiltered = allPayloads.filter((p) => allPayloadsHashes.has(p._hash));
|
|
73
|
-
if (maxDepth === 2) assertEx(allHashesPresent(
|
|
74
|
-
...allPayloadsHashes
|
|
75
|
-
], allPayloadsFiltered), () => `Unable to find all payloads for transactions in block ${hash}`);
|
|
76
|
-
return [
|
|
77
|
-
bw,
|
|
47
|
+
if (maxDepth === 2) assertEx(allHashesPresent(
|
|
48
|
+
[...allPayloadsHashes],
|
|
78
49
|
allPayloadsFiltered
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
50
|
+
), () => `Unable to find all payloads for transactions in block ${hash}`);
|
|
51
|
+
return [bw, allPayloadsFiltered];
|
|
52
|
+
};
|
|
53
|
+
var flattenHydratedBlock = (hydratedBlock) => {
|
|
82
54
|
const [blk, blkPayloads] = hydratedBlock;
|
|
83
|
-
return [
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
}, "flattenHydratedBlock");
|
|
88
|
-
var flattenHydratedBlocks = /* @__PURE__ */ __name((hydratedBlocks) => hydratedBlocks.flatMap((blk) => flattenHydratedBlock(blk)), "flattenHydratedBlocks");
|
|
89
|
-
var transactionsFromHydratedBlock = /* @__PURE__ */ __name((block) => {
|
|
55
|
+
return [...blkPayloads, blk];
|
|
56
|
+
};
|
|
57
|
+
var flattenHydratedBlocks = (hydratedBlocks) => hydratedBlocks.flatMap((blk) => flattenHydratedBlock(blk));
|
|
58
|
+
var transactionsFromHydratedBlock = (block) => {
|
|
90
59
|
return filterAs(block[1], asTransactionBoundWitnessWithStorageMeta);
|
|
91
|
-
}
|
|
92
|
-
var blockPayloadsFromHydratedBlock =
|
|
93
|
-
return block[0].payload_hashes.map((hash) => assertEx(
|
|
94
|
-
|
|
60
|
+
};
|
|
61
|
+
var blockPayloadsFromHydratedBlock = (block) => {
|
|
62
|
+
return block[0].payload_hashes.map((hash) => assertEx(
|
|
63
|
+
block[1].find((p) => p._hash === hash),
|
|
64
|
+
() => `missing payload ${hash}`
|
|
65
|
+
)).filter((x) => !isTransactionBoundWitnessWithStorageMeta(x));
|
|
66
|
+
};
|
|
95
67
|
|
|
96
68
|
// src/block/primitives/balanceStepSummaryFromRange.ts
|
|
97
69
|
import { assertEx as assertEx2 } from "@xylabs/assert";
|
|
@@ -100,9 +72,12 @@ import { isAnyPayload } from "@xyo-network/payload-model";
|
|
|
100
72
|
import { StepSizes as StepSizes3 } from "@xyo-network/xl1-protocol";
|
|
101
73
|
|
|
102
74
|
// src/payload/netBalancesForPayloads.ts
|
|
103
|
-
import {
|
|
75
|
+
import {
|
|
76
|
+
hexToBigInt,
|
|
77
|
+
toAddress
|
|
78
|
+
} from "@xylabs/hex";
|
|
104
79
|
import { isTransfer } from "@xyo-network/xl1-protocol";
|
|
105
|
-
var netBalancesForPayloads =
|
|
80
|
+
var netBalancesForPayloads = (payloads) => {
|
|
106
81
|
const balances = {};
|
|
107
82
|
for (const payload of payloads) {
|
|
108
83
|
if (isTransfer(payload)) {
|
|
@@ -114,18 +89,21 @@ var netBalancesForPayloads = /* @__PURE__ */ __name((payloads) => {
|
|
|
114
89
|
}
|
|
115
90
|
}
|
|
116
91
|
return balances;
|
|
117
|
-
}
|
|
92
|
+
};
|
|
118
93
|
|
|
119
94
|
// src/SignedBigInt.ts
|
|
120
|
-
import {
|
|
95
|
+
import {
|
|
96
|
+
hexToBigInt as hexToBigInt2,
|
|
97
|
+
toHex
|
|
98
|
+
} from "@xylabs/hex";
|
|
121
99
|
import { isObject } from "@xylabs/object";
|
|
122
|
-
var isNegativeBigInt =
|
|
100
|
+
var isNegativeBigInt = (value) => {
|
|
123
101
|
return isObject(value) && "negative" in value && typeof value.negative === "string";
|
|
124
|
-
}
|
|
125
|
-
var isPositiveBigInt =
|
|
102
|
+
};
|
|
103
|
+
var isPositiveBigInt = (value) => {
|
|
126
104
|
return isObject(value) && "positive" in value && typeof value.positive === "string";
|
|
127
|
-
}
|
|
128
|
-
var parseSignedBigInt =
|
|
105
|
+
};
|
|
106
|
+
var parseSignedBigInt = (value) => {
|
|
129
107
|
if (isNegativeBigInt(value)) {
|
|
130
108
|
return -hexToBigInt2(value.negative);
|
|
131
109
|
} else if (isPositiveBigInt(value)) {
|
|
@@ -133,32 +111,22 @@ var parseSignedBigInt = /* @__PURE__ */ __name((value) => {
|
|
|
133
111
|
} else {
|
|
134
112
|
throw new Error("Invalid balance type");
|
|
135
113
|
}
|
|
136
|
-
}
|
|
137
|
-
var toSignedBigInt =
|
|
138
|
-
return value < 0n ? {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
positive: toHex(value)
|
|
142
|
-
};
|
|
143
|
-
}, "toSignedBigInt");
|
|
144
|
-
var toPositiveBigInt = /* @__PURE__ */ __name((value) => {
|
|
114
|
+
};
|
|
115
|
+
var toSignedBigInt = (value) => {
|
|
116
|
+
return value < 0n ? { negative: toHex(-value) } : { positive: toHex(value) };
|
|
117
|
+
};
|
|
118
|
+
var toPositiveBigInt = (value) => {
|
|
145
119
|
if (isNegativeBigInt(value)) {
|
|
146
|
-
return {
|
|
147
|
-
positive: toHex(0n)
|
|
148
|
-
};
|
|
120
|
+
return { positive: toHex(0n) };
|
|
149
121
|
}
|
|
150
122
|
if (isPositiveBigInt(value)) {
|
|
151
|
-
return {
|
|
152
|
-
positive: value.positive
|
|
153
|
-
};
|
|
123
|
+
return { positive: value.positive };
|
|
154
124
|
}
|
|
155
125
|
if (typeof value === "bigint") {
|
|
156
|
-
return {
|
|
157
|
-
positive: toHex(value)
|
|
158
|
-
};
|
|
126
|
+
return { positive: toHex(value) };
|
|
159
127
|
}
|
|
160
128
|
throw new Error("Invalid value for positive big int");
|
|
161
|
-
}
|
|
129
|
+
};
|
|
162
130
|
|
|
163
131
|
// src/block/primitives/frames/calculateFramesFromRange.ts
|
|
164
132
|
import { stepSize } from "@xyo-network/xl1-protocol";
|
|
@@ -169,38 +137,23 @@ function calculateFramesFromRange(range, step) {
|
|
|
169
137
|
const remaining = [];
|
|
170
138
|
if (start !== range[0]) {
|
|
171
139
|
start += size;
|
|
172
|
-
remaining.push([
|
|
173
|
-
range[0],
|
|
174
|
-
Math.min(start - 1, range[1])
|
|
175
|
-
]);
|
|
140
|
+
remaining.push([range[0], Math.min(start - 1, range[1])]);
|
|
176
141
|
}
|
|
177
142
|
for (let i = start; i <= range[1]; i += size) {
|
|
178
143
|
if (i + size - 1 <= range[1]) {
|
|
179
|
-
fitted.push([
|
|
180
|
-
i,
|
|
181
|
-
Math.min(i + size - 1, range[1])
|
|
182
|
-
]);
|
|
144
|
+
fitted.push([i, Math.min(i + size - 1, range[1])]);
|
|
183
145
|
} else {
|
|
184
|
-
remaining.push([
|
|
185
|
-
i,
|
|
186
|
-
range[1]
|
|
187
|
-
]);
|
|
146
|
+
remaining.push([i, range[1]]);
|
|
188
147
|
}
|
|
189
148
|
}
|
|
190
|
-
return [
|
|
191
|
-
fitted,
|
|
192
|
-
remaining
|
|
193
|
-
];
|
|
149
|
+
return [fitted, remaining];
|
|
194
150
|
}
|
|
195
|
-
__name(calculateFramesFromRange, "calculateFramesFromRange");
|
|
196
151
|
|
|
197
152
|
// src/block/primitives/frames/deepCalculateFramesFromRange.ts
|
|
198
153
|
import { StepSizes } from "@xyo-network/xl1-protocol";
|
|
199
154
|
function deepCalculateFramesFromRange(range, startingStep = StepSizes.length - 1) {
|
|
200
155
|
const fitted = [];
|
|
201
|
-
let remaining = [
|
|
202
|
-
range
|
|
203
|
-
];
|
|
156
|
+
let remaining = [range];
|
|
204
157
|
for (let step = startingStep; step >= 0; step--) {
|
|
205
158
|
const newRemaining = [];
|
|
206
159
|
for (const range2 of remaining) {
|
|
@@ -212,27 +165,19 @@ function deepCalculateFramesFromRange(range, startingStep = StepSizes.length - 1
|
|
|
212
165
|
}
|
|
213
166
|
for (const range2 of remaining) {
|
|
214
167
|
for (let i = range2[0]; i <= range2[1]; i++) {
|
|
215
|
-
fitted.push([
|
|
216
|
-
i,
|
|
217
|
-
i
|
|
218
|
-
]);
|
|
168
|
+
fitted.push([i, i]);
|
|
219
169
|
}
|
|
220
170
|
}
|
|
221
171
|
return fitted.toSorted((a, b) => a[0] - b[0]);
|
|
222
172
|
}
|
|
223
|
-
__name(deepCalculateFramesFromRange, "deepCalculateFramesFromRange");
|
|
224
173
|
|
|
225
174
|
// src/block/primitives/hashFromBlockNumber.ts
|
|
226
175
|
import { asHash } from "@xylabs/hex";
|
|
227
176
|
import { toSafeJsonString } from "@xylabs/object";
|
|
228
177
|
import { asBlockBoundWitnessWithStorageMeta, StepSizes as StepSizes2 } from "@xyo-network/xl1-protocol";
|
|
229
178
|
async function hashFromBlockNumber(context, blockNumber) {
|
|
230
|
-
const result = await context.chainArchivist.get([
|
|
231
|
-
|
|
232
|
-
]);
|
|
233
|
-
let currentBlock = asBlockBoundWitnessWithStorageMeta(result.at(0), () => `Head block not found for hash: ${context.head}`, {
|
|
234
|
-
required: true
|
|
235
|
-
});
|
|
179
|
+
const result = await context.chainArchivist.get([context.head]);
|
|
180
|
+
let currentBlock = asBlockBoundWitnessWithStorageMeta(result.at(0), () => `Head block not found for hash: ${context.head}`, { required: true });
|
|
236
181
|
while (currentBlock.block > blockNumber) {
|
|
237
182
|
let jumpHash = currentBlock.previous;
|
|
238
183
|
let jumpBlockNumber = currentBlock.block - 1;
|
|
@@ -246,9 +191,7 @@ async function hashFromBlockNumber(context, blockNumber) {
|
|
|
246
191
|
const [newBlock] = await context.chainArchivist.get([
|
|
247
192
|
asHash(jumpHash, () => `Jump hash not found for block number [${blockNumber}]: ${jumpBlockNumber} ${toSafeJsonString(currentBlock, 10)}`)
|
|
248
193
|
]);
|
|
249
|
-
currentBlock = asBlockBoundWitnessWithStorageMeta(newBlock, () => `Block not found for hash: ${jumpHash}`, {
|
|
250
|
-
required: true
|
|
251
|
-
});
|
|
194
|
+
currentBlock = asBlockBoundWitnessWithStorageMeta(newBlock, () => `Block not found for hash: ${jumpHash}`, { required: true });
|
|
252
195
|
if (currentBlock.block === blockNumber) {
|
|
253
196
|
break;
|
|
254
197
|
}
|
|
@@ -258,7 +201,6 @@ async function hashFromBlockNumber(context, blockNumber) {
|
|
|
258
201
|
}
|
|
259
202
|
return currentBlock._hash;
|
|
260
203
|
}
|
|
261
|
-
__name(hashFromBlockNumber, "hashFromBlockNumber");
|
|
262
204
|
|
|
263
205
|
// src/block/primitives/payloads.ts
|
|
264
206
|
import { AsObjectFactory } from "@xylabs/object";
|
|
@@ -267,9 +209,9 @@ var StepSummarySchema = "network.xyo.step.summary";
|
|
|
267
209
|
var BalancesStepSummarySchema = "network.xyo.step.summary.balances";
|
|
268
210
|
var isBalancesStepSummary = isPayloadOfSchemaType(BalancesStepSummarySchema);
|
|
269
211
|
var asBalancesStepSummary = AsObjectFactory.create(isBalancesStepSummary);
|
|
270
|
-
var isBalancesStepSummaryWithStorageMeta =
|
|
212
|
+
var isBalancesStepSummaryWithStorageMeta = (value) => {
|
|
271
213
|
return isBalancesStepSummary(value) && isStorageMeta(value);
|
|
272
|
-
}
|
|
214
|
+
};
|
|
273
215
|
var asBalancesStepSummaryWithStorageMeta = AsObjectFactory.create(isBalancesStepSummaryWithStorageMeta);
|
|
274
216
|
|
|
275
217
|
// src/block/primitives/balanceStepSummaryFromRange.ts
|
|
@@ -293,14 +235,15 @@ async function balanceStepSummaryFromRange(context, range) {
|
|
|
293
235
|
} else {
|
|
294
236
|
const step = StepSizes3.indexOf(frameSize);
|
|
295
237
|
assertEx2(step !== -1, () => `Invalid step size: ${frameSize}. Must be one of ${StepSizes3.join(", ")}`);
|
|
296
|
-
const [summaryResult] = await context.summaryRepository.get([
|
|
297
|
-
frameHeadHash
|
|
298
|
-
]);
|
|
238
|
+
const [summaryResult] = await context.summaryRepository.get([frameHeadHash]);
|
|
299
239
|
if (isAnyPayload(summaryResult)) {
|
|
300
240
|
result = summaryResult;
|
|
301
241
|
} else {
|
|
302
242
|
const subRanges = deepCalculateFramesFromRange(range, step - 1);
|
|
303
|
-
const promises = subRanges.map((subRange) => balanceStepSummaryFromRange(
|
|
243
|
+
const promises = subRanges.map((subRange) => balanceStepSummaryFromRange(
|
|
244
|
+
context,
|
|
245
|
+
subRange
|
|
246
|
+
));
|
|
304
247
|
const subResults = await Promise.all(promises);
|
|
305
248
|
const bigIntBalances = {};
|
|
306
249
|
for (const subResult of subResults) {
|
|
@@ -318,32 +261,22 @@ async function balanceStepSummaryFromRange(context, range) {
|
|
|
318
261
|
stepSize: frameSize,
|
|
319
262
|
balances
|
|
320
263
|
};
|
|
321
|
-
await context.summaryRepository.insert([
|
|
322
|
-
result
|
|
323
|
-
]);
|
|
264
|
+
await context.summaryRepository.insert([result]);
|
|
324
265
|
}
|
|
325
266
|
}
|
|
326
267
|
const finalResult = await PayloadBuilder.addStorageMeta(result);
|
|
327
268
|
return finalResult;
|
|
328
269
|
}
|
|
329
|
-
__name(balanceStepSummaryFromRange, "balanceStepSummaryFromRange");
|
|
330
270
|
|
|
331
271
|
// src/block/primitives/balanceSummary.ts
|
|
332
272
|
import { asAddress } from "@xylabs/hex";
|
|
333
273
|
import { isDefined } from "@xylabs/typeof";
|
|
334
274
|
import { asBlockBoundWitnessWithStorageMeta as asBlockBoundWitnessWithStorageMeta2 } from "@xyo-network/xl1-protocol";
|
|
335
275
|
async function balanceSummary(context) {
|
|
336
|
-
const headResult = await context.chainArchivist.get([
|
|
337
|
-
|
|
338
|
-
]);
|
|
339
|
-
const headBoundWitness = asBlockBoundWitnessWithStorageMeta2(headResult.at(0), () => `Head block not found for hash: ${context.head}`, {
|
|
340
|
-
required: true
|
|
341
|
-
});
|
|
276
|
+
const headResult = await context.chainArchivist.get([context.head]);
|
|
277
|
+
const headBoundWitness = asBlockBoundWitnessWithStorageMeta2(headResult.at(0), () => `Head block not found for hash: ${context.head}`, { required: true });
|
|
342
278
|
const rangeStart = isDefined(context.windowSize) ? Math.max(headBoundWitness.block - context.windowSize + 1, 0) : 0;
|
|
343
|
-
const ranges = deepCalculateFramesFromRange([
|
|
344
|
-
rangeStart,
|
|
345
|
-
headBoundWitness.block
|
|
346
|
-
]);
|
|
279
|
+
const ranges = deepCalculateFramesFromRange([rangeStart, headBoundWitness.block]);
|
|
347
280
|
const summaries = await Promise.all(ranges.map((range) => balanceStepSummaryFromRange(context, range)));
|
|
348
281
|
const balances = {};
|
|
349
282
|
for (let summary of summaries) {
|
|
@@ -354,7 +287,6 @@ async function balanceSummary(context) {
|
|
|
354
287
|
}
|
|
355
288
|
return balances;
|
|
356
289
|
}
|
|
357
|
-
__name(balanceSummary, "balanceSummary");
|
|
358
290
|
|
|
359
291
|
// src/config/Config.ts
|
|
360
292
|
import { LogLevel } from "@xylabs/logger";
|
|
@@ -364,30 +296,25 @@ import z10 from "zod";
|
|
|
364
296
|
import z2 from "zod";
|
|
365
297
|
|
|
366
298
|
// src/validation/lib/isLocalhost.ts
|
|
367
|
-
var isLocalhost =
|
|
299
|
+
var isLocalhost = (hostname) => {
|
|
368
300
|
return hostname === "localhost" || hostname === "127.0.0.1" || hostname === "::1" || hostname.endsWith(".localhost");
|
|
369
|
-
}
|
|
301
|
+
};
|
|
370
302
|
|
|
371
303
|
// src/validation/lib/getUrl.ts
|
|
372
|
-
var getUrl =
|
|
304
|
+
var getUrl = (host, port) => {
|
|
373
305
|
const scheme = isLocalhost(host) ? "http" : "https";
|
|
374
306
|
return `${scheme}://${host}:${port}`;
|
|
375
|
-
}
|
|
307
|
+
};
|
|
376
308
|
|
|
377
309
|
// src/validation/schema/Address.ts
|
|
378
310
|
var TODO = true;
|
|
379
311
|
|
|
380
312
|
// src/validation/schema/Mnemonic.ts
|
|
381
313
|
import { z } from "zod";
|
|
382
|
-
var MnemonicStringSchema = z.string().transform((s) => s.trim().replaceAll(/\s+/g, " ")).refine(
|
|
383
|
-
12,
|
|
384
|
-
15,
|
|
385
|
-
|
|
386
|
-
21,
|
|
387
|
-
24
|
|
388
|
-
].includes(s.split(" ").length), {
|
|
389
|
-
message: "Mnemonic must contain 12, 15, 18, 21, or 24 words."
|
|
390
|
-
}).describe("BIP-39 mnemonic string");
|
|
314
|
+
var MnemonicStringSchema = z.string().transform((s) => s.trim().replaceAll(/\s+/g, " ")).refine(
|
|
315
|
+
(s) => [12, 15, 18, 21, 24].includes(s.split(" ").length),
|
|
316
|
+
{ message: "Mnemonic must contain 12, 15, 18, 21, or 24 words." }
|
|
317
|
+
).describe("BIP-39 mnemonic string");
|
|
391
318
|
|
|
392
319
|
// src/config/Api.ts
|
|
393
320
|
var ApiConfigSchema = z2.object({
|
|
@@ -398,9 +325,7 @@ var ApiConfigSchema = z2.object({
|
|
|
398
325
|
|
|
399
326
|
// src/config/App.ts
|
|
400
327
|
import z3 from "zod";
|
|
401
|
-
var AppConfigSchema = z3.object({
|
|
402
|
-
port: z3.coerce.number().default(3e3).describe("Port for the application")
|
|
403
|
-
});
|
|
328
|
+
var AppConfigSchema = z3.object({ port: z3.coerce.number().default(3e3).describe("Port for the application") });
|
|
404
329
|
|
|
405
330
|
// src/config/Chain.ts
|
|
406
331
|
import z4 from "zod";
|
|
@@ -442,10 +367,10 @@ var ProducerConfigSchema = z6.object({
|
|
|
442
367
|
// src/config/storage/driver/Mongo.ts
|
|
443
368
|
import { isDefined as isDefined2, isUndefined } from "@xylabs/typeof";
|
|
444
369
|
import z7 from "zod";
|
|
445
|
-
var hasMongoConfig =
|
|
370
|
+
var hasMongoConfig = (config) => {
|
|
446
371
|
if (isUndefined(config)) return false;
|
|
447
372
|
return isDefined2(config.connectionString) && isDefined2(config.database) && isDefined2(config.domain) && isDefined2(config.password) && isDefined2(config.username);
|
|
448
|
-
}
|
|
373
|
+
};
|
|
449
374
|
var MongoConfigSchema = z7.object({
|
|
450
375
|
// TODO: Create from other arguments
|
|
451
376
|
connectionString: z7.string().min(1).optional().describe("MongoDB connection string"),
|
|
@@ -489,7 +414,7 @@ var ConfigSchema = z10.object({
|
|
|
489
414
|
storage: StorageConfigSchema.default(StorageConfigSchema.parse({})).describe("Configuration for the storage"),
|
|
490
415
|
telemetry: TelemetryConfigSchema.default(TelemetryConfigSchema.parse({})).describe("Configuration for telemetry")
|
|
491
416
|
});
|
|
492
|
-
var getDefaultConfig =
|
|
417
|
+
var getDefaultConfig = () => ConfigSchema.parse({});
|
|
493
418
|
|
|
494
419
|
// src/transaction/buildTransaction.ts
|
|
495
420
|
import { assertEx as assertEx3 } from "@xylabs/assert";
|
|
@@ -524,20 +449,9 @@ async function buildTransaction(chain, onChainPayloads, offChainPayloads, signer
|
|
|
524
449
|
if (script.length > 0) {
|
|
525
450
|
fields.script = script;
|
|
526
451
|
}
|
|
527
|
-
const [tx, txPayloads] = await new BoundWitnessBuilder().fields(fields).meta({
|
|
528
|
-
|
|
529
|
-
}).payloads([
|
|
530
|
-
...onChainPayloads,
|
|
531
|
-
...offChainPayloads
|
|
532
|
-
]).signers(Array.isArray(signer) ? signer : [
|
|
533
|
-
signer
|
|
534
|
-
]).build();
|
|
535
|
-
return [
|
|
536
|
-
await PayloadBuilder2.addStorageMeta(tx),
|
|
537
|
-
await PayloadBuilder2.addStorageMeta(txPayloads)
|
|
538
|
-
];
|
|
452
|
+
const [tx, txPayloads] = await new BoundWitnessBuilder().fields(fields).meta({ $signatures: [] }).payloads([...onChainPayloads, ...offChainPayloads]).signers(Array.isArray(signer) ? signer : [signer]).build();
|
|
453
|
+
return [await PayloadBuilder2.addStorageMeta(tx), await PayloadBuilder2.addStorageMeta(txPayloads)];
|
|
539
454
|
}
|
|
540
|
-
__name(buildTransaction, "buildTransaction");
|
|
541
455
|
|
|
542
456
|
// src/transaction/buildUnsignedTransaction.ts
|
|
543
457
|
import { toHex as toHex3 } from "@xylabs/hex";
|
|
@@ -568,18 +482,9 @@ async function buildUnsignedTransaction(chain, onChainPayloads, offChainPayloads
|
|
|
568
482
|
if (script.length > 0) {
|
|
569
483
|
fields.script = script;
|
|
570
484
|
}
|
|
571
|
-
const [tx, txPayloads] = await new BoundWitnessBuilder2().fields(fields).meta({
|
|
572
|
-
|
|
573
|
-
}).payloads([
|
|
574
|
-
...onChainPayloads,
|
|
575
|
-
...offChainPayloads
|
|
576
|
-
]).build();
|
|
577
|
-
return [
|
|
578
|
-
await PayloadBuilder3.addStorageMeta(tx),
|
|
579
|
-
await PayloadBuilder3.addStorageMeta(txPayloads)
|
|
580
|
-
];
|
|
485
|
+
const [tx, txPayloads] = await new BoundWitnessBuilder2().fields(fields).meta({ $signatures: [] }).payloads([...onChainPayloads, ...offChainPayloads]).build();
|
|
486
|
+
return [await PayloadBuilder3.addStorageMeta(tx), await PayloadBuilder3.addStorageMeta(txPayloads)];
|
|
581
487
|
}
|
|
582
|
-
__name(buildUnsignedTransaction, "buildUnsignedTransaction");
|
|
583
488
|
|
|
584
489
|
// src/transaction/confirmSubmittedTransaction.ts
|
|
585
490
|
import { delay } from "@xylabs/delay";
|
|
@@ -587,15 +492,15 @@ import { isDefined as isDefined3 } from "@xylabs/typeof";
|
|
|
587
492
|
import { PayloadBuilder as PayloadBuilder4 } from "@xyo-network/payload-builder";
|
|
588
493
|
var DEFAULT_CONFIRMATION_ATTEMPTS = 20;
|
|
589
494
|
var DEFAULT_DELAY_BETWEEN_ATTEMPTS = 1e3;
|
|
590
|
-
var confirmSubmittedTransaction =
|
|
495
|
+
var confirmSubmittedTransaction = async (viewer, transaction, options) => {
|
|
591
496
|
const { attempts: maxAttempts = DEFAULT_CONFIRMATION_ATTEMPTS, delay: attemptDelay = DEFAULT_DELAY_BETWEEN_ATTEMPTS } = options || {};
|
|
592
497
|
const txBWHash = await PayloadBuilder4.hash(transaction);
|
|
593
|
-
options?.logger?.log("\
|
|
498
|
+
options?.logger?.log("\u{1F680} confirming transaction:", txBWHash, "\n");
|
|
594
499
|
let attempts = 0;
|
|
595
500
|
while (true) {
|
|
596
501
|
const tx = await viewer.transactionByHash(txBWHash) ?? void 0;
|
|
597
502
|
if (isDefined3(tx)) {
|
|
598
|
-
options?.logger?.log("\
|
|
503
|
+
options?.logger?.log("\u2705 Transaction confirmed:", txBWHash, "\n");
|
|
599
504
|
return tx;
|
|
600
505
|
} else {
|
|
601
506
|
attempts++;
|
|
@@ -608,27 +513,32 @@ var confirmSubmittedTransaction = /* @__PURE__ */ __name(async (viewer, transact
|
|
|
608
513
|
}
|
|
609
514
|
}
|
|
610
515
|
}
|
|
611
|
-
}
|
|
516
|
+
};
|
|
612
517
|
|
|
613
518
|
// src/transaction/hydrateTransaction.ts
|
|
614
519
|
import { assertEx as assertEx4 } from "@xylabs/assert";
|
|
615
520
|
import { hydrateTypedBoundWitness, tryHydrateTypedBoundWitness } from "@xyo-network/archivist-model";
|
|
616
521
|
import { isAllowedBlockPayload, isTransactionBoundWitnessWithStorageMeta as isTransactionBoundWitnessWithStorageMeta2 } from "@xyo-network/xl1-protocol";
|
|
617
|
-
var tryHydrateTransaction =
|
|
618
|
-
return await tryHydrateTypedBoundWitness(
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
522
|
+
var tryHydrateTransaction = async (archivist, hash) => {
|
|
523
|
+
return await tryHydrateTypedBoundWitness(
|
|
524
|
+
archivist,
|
|
525
|
+
hash,
|
|
526
|
+
isTransactionBoundWitnessWithStorageMeta2
|
|
527
|
+
);
|
|
528
|
+
};
|
|
529
|
+
var hydrateTransaction = async (archivist, hash) => {
|
|
530
|
+
return await hydrateTypedBoundWitness(
|
|
531
|
+
archivist,
|
|
532
|
+
hash,
|
|
533
|
+
isTransactionBoundWitnessWithStorageMeta2
|
|
534
|
+
);
|
|
535
|
+
};
|
|
536
|
+
var flattenHydratedTransaction = (hydratedTransaction) => {
|
|
624
537
|
const [tx, txPayloads] = hydratedTransaction;
|
|
625
|
-
return [
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
}, "flattenHydratedTransaction");
|
|
630
|
-
var flattenHydratedTransactions = /* @__PURE__ */ __name((hydratedTransactions) => hydratedTransactions.flatMap((tx) => flattenHydratedTransaction(tx)), "flattenHydratedTransactions");
|
|
631
|
-
var tryHydrateElevatedTransaction = /* @__PURE__ */ __name(async (archivist, hash) => {
|
|
538
|
+
return [...txPayloads, tx];
|
|
539
|
+
};
|
|
540
|
+
var flattenHydratedTransactions = (hydratedTransactions) => hydratedTransactions.flatMap((tx) => flattenHydratedTransaction(tx));
|
|
541
|
+
var tryHydrateElevatedTransaction = async (archivist, hash) => {
|
|
632
542
|
const hydratedTransaction = await tryHydrateTransaction(archivist, hash);
|
|
633
543
|
if (!hydratedTransaction) {
|
|
634
544
|
return void 0;
|
|
@@ -646,16 +556,13 @@ var tryHydrateElevatedTransaction = /* @__PURE__ */ __name(async (archivist, has
|
|
|
646
556
|
}
|
|
647
557
|
}
|
|
648
558
|
if (opCodes.length === elevatedPayloads.length) {
|
|
649
|
-
return [
|
|
650
|
-
transaction,
|
|
651
|
-
elevatedPayloads
|
|
652
|
-
];
|
|
559
|
+
return [transaction, elevatedPayloads];
|
|
653
560
|
}
|
|
654
561
|
return void 0;
|
|
655
|
-
}
|
|
656
|
-
var hydrateElevatedTransaction =
|
|
562
|
+
};
|
|
563
|
+
var hydrateElevatedTransaction = async (archivist, hash) => {
|
|
657
564
|
return assertEx4(await tryHydrateElevatedTransaction(archivist, hash), () => "Hydration failed");
|
|
658
|
-
}
|
|
565
|
+
};
|
|
659
566
|
|
|
660
567
|
// src/transaction/primitives/transactionBlockByteCount.ts
|
|
661
568
|
import { PayloadBuilder as PayloadBuilder5 } from "@xyo-network/payload-builder";
|
|
@@ -665,7 +572,6 @@ function transactionBlockByteCount([transaction, payloads]) {
|
|
|
665
572
|
const cleanPayloads = PayloadBuilder5.omitStorageMeta(payloads);
|
|
666
573
|
return cleanPayloads.reduce((acc, payload) => acc + JSON.stringify(payload).length, 0) + transactionBytes;
|
|
667
574
|
}
|
|
668
|
-
__name(transactionBlockByteCount, "transactionBlockByteCount");
|
|
669
575
|
|
|
670
576
|
// src/transaction/primitives/transactionElevatedPayloads.ts
|
|
671
577
|
import { asHash as asHash2 } from "@xylabs/hex";
|
|
@@ -676,77 +582,65 @@ function crackOperation(operation) {
|
|
|
676
582
|
if (parts.length < 2) {
|
|
677
583
|
throw new Error(`Invalid operation format: ${operation}`);
|
|
678
584
|
}
|
|
679
|
-
return [
|
|
680
|
-
parts[0],
|
|
681
|
-
parts.slice(1)
|
|
682
|
-
];
|
|
585
|
+
return [parts[0], parts.slice(1)];
|
|
683
586
|
}
|
|
684
|
-
__name(crackOperation, "crackOperation");
|
|
685
587
|
function crackOperations(operations) {
|
|
686
588
|
return operations.map((op) => crackOperation(op));
|
|
687
589
|
}
|
|
688
|
-
__name(crackOperations, "crackOperations");
|
|
689
590
|
|
|
690
591
|
// src/transaction/primitives/transactionElevatedPayloads.ts
|
|
691
592
|
function transactionElevatedPayloadHashes(transaction) {
|
|
692
593
|
const elevateOperations = crackOperations(transaction.script ?? []).filter((op) => op[0] === "elevate");
|
|
693
594
|
return elevateOperations.map((op) => asHash2(op[1][0], true));
|
|
694
595
|
}
|
|
695
|
-
__name(transactionElevatedPayloadHashes, "transactionElevatedPayloadHashes");
|
|
696
596
|
function transactionElevatedPayloads([transaction, payloads]) {
|
|
697
597
|
const hashes = transactionElevatedPayloadHashes(transaction);
|
|
698
598
|
const elevatedPayloads = payloads.filter((payload) => hashes.includes(payload._hash));
|
|
699
599
|
return elevatedPayloads;
|
|
700
600
|
}
|
|
701
|
-
__name(transactionElevatedPayloads, "transactionElevatedPayloads");
|
|
702
601
|
|
|
703
602
|
// src/transaction/primitives/transactionRequiredGas.ts
|
|
704
603
|
import { AttoXL1, TransactionGasCosts } from "@xyo-network/xl1-protocol";
|
|
705
604
|
function transactionBytesRequiredGas([transaction, payloads]) {
|
|
706
|
-
const transactionBlockBytes = transactionBlockByteCount([
|
|
707
|
-
transaction,
|
|
708
|
-
payloads
|
|
709
|
-
]);
|
|
605
|
+
const transactionBlockBytes = transactionBlockByteCount([transaction, payloads]);
|
|
710
606
|
return AttoXL1(TransactionGasCosts.characterStorage * BigInt(transactionBlockBytes));
|
|
711
607
|
}
|
|
712
|
-
__name(transactionBytesRequiredGas, "transactionBytesRequiredGas");
|
|
713
608
|
function transactionRequiredGas(hydratedTransaction) {
|
|
714
609
|
const elevatedPayloads = transactionElevatedPayloads(hydratedTransaction);
|
|
715
610
|
const hashes = elevatedPayloads.length + 1;
|
|
716
611
|
const signatures = hydratedTransaction[0].addresses.length;
|
|
717
612
|
return AttoXL1(transactionBytesRequiredGas(hydratedTransaction) + TransactionGasCosts.hashValidation * BigInt(hashes) + TransactionGasCosts.signatureValidation * BigInt(signatures) + TransactionGasCosts.payloadValidation * BigInt(elevatedPayloads.length));
|
|
718
613
|
}
|
|
719
|
-
__name(transactionRequiredGas, "transactionRequiredGas");
|
|
720
614
|
|
|
721
615
|
// src/transaction/script.ts
|
|
722
616
|
import { filterAs as filterAs2 } from "@xylabs/array";
|
|
723
617
|
import { assertEx as assertEx5 } from "@xylabs/assert";
|
|
724
618
|
import { asHash as asHash3 } from "@xylabs/hex";
|
|
725
619
|
import { isAllowedBlockPayloadWithHashStorageMeta } from "@xyo-network/xl1-protocol";
|
|
726
|
-
var tryExtractElevatedHashesFromScript =
|
|
620
|
+
var tryExtractElevatedHashesFromScript = (strings) => {
|
|
727
621
|
const hashes = strings.filter((str) => str.startsWith("elevate|")).map((str) => str.split("|")[1]);
|
|
728
622
|
return filterAs2(hashes, (h) => asHash3(h));
|
|
729
|
-
}
|
|
730
|
-
var extractElevatedHashesFromScript =
|
|
623
|
+
};
|
|
624
|
+
var extractElevatedHashesFromScript = (strings) => {
|
|
731
625
|
const hashes = strings.filter((str) => str.startsWith("elevate|")).map((str) => str.split("|")[1]);
|
|
732
626
|
const filtered = filterAs2(hashes, (h) => asHash3(h));
|
|
733
627
|
assertEx5(filtered.length === hashes.length, () => "Invalid elevated hashes");
|
|
734
628
|
return filtered;
|
|
735
|
-
}
|
|
736
|
-
var tryExtractElevatedHashes =
|
|
629
|
+
};
|
|
630
|
+
var tryExtractElevatedHashes = (tx) => {
|
|
737
631
|
const [bw, payloads] = tx;
|
|
738
632
|
const { script } = bw;
|
|
739
633
|
const hashes = script ? tryExtractElevatedHashesFromScript(script) : [];
|
|
740
634
|
return payloads.filter((p) => hashes.includes(p._hash)).filter(isAllowedBlockPayloadWithHashStorageMeta);
|
|
741
|
-
}
|
|
742
|
-
var extractElevatedHashes =
|
|
635
|
+
};
|
|
636
|
+
var extractElevatedHashes = (tx) => {
|
|
743
637
|
const [bw, payloads] = tx;
|
|
744
638
|
const { script } = bw;
|
|
745
639
|
const hashes = script ? tryExtractElevatedHashesFromScript(script) : [];
|
|
746
640
|
const filtered = payloads.filter((p) => hashes.includes(p._hash)).filter(isAllowedBlockPayloadWithHashStorageMeta);
|
|
747
641
|
assertEx5(filtered.length === hashes.length, () => "Invalid elevated hashes");
|
|
748
642
|
return filtered;
|
|
749
|
-
}
|
|
643
|
+
};
|
|
750
644
|
|
|
751
645
|
// src/transaction/signTransaction.ts
|
|
752
646
|
import { toArrayBuffer } from "@xylabs/arraybuffer";
|
|
@@ -756,49 +650,31 @@ import { PayloadBuilder as PayloadBuilder6 } from "@xyo-network/payload-builder"
|
|
|
756
650
|
async function signTransaction(tx, signer) {
|
|
757
651
|
assertEx6(tx.from === signer.address, () => "Signer address does not match transaction from address");
|
|
758
652
|
const signedTx = structuredClone(tx);
|
|
759
|
-
signedTx.addresses = [
|
|
760
|
-
|
|
761
|
-
];
|
|
762
|
-
signedTx.previous_hashes = [
|
|
763
|
-
signer.previousHash ?? null
|
|
764
|
-
];
|
|
653
|
+
signedTx.addresses = [signer.address];
|
|
654
|
+
signedTx.previous_hashes = [signer.previousHash ?? null];
|
|
765
655
|
const hash = await PayloadBuilder6.hash(signedTx);
|
|
766
656
|
const hashBytes = toArrayBuffer(hash);
|
|
767
657
|
const [signature] = await signer.sign(hashBytes);
|
|
768
|
-
signedTx.$signatures = [
|
|
769
|
-
hexFromArrayBuffer(signature)
|
|
770
|
-
];
|
|
658
|
+
signedTx.$signatures = [hexFromArrayBuffer(signature)];
|
|
771
659
|
return signedTx;
|
|
772
660
|
}
|
|
773
|
-
__name(signTransaction, "signTransaction");
|
|
774
661
|
|
|
775
662
|
// src/wallet/generateXyoBaseWalletFromPhrase.ts
|
|
776
663
|
import { HDWallet } from "@xyo-network/wallet";
|
|
777
664
|
|
|
778
665
|
// src/wallet/paths.ts
|
|
779
666
|
var WALLET_COMPLIANCE = "44'";
|
|
780
|
-
var COIN_TYPES = {
|
|
781
|
-
|
|
782
|
-
};
|
|
783
|
-
var
|
|
784
|
-
GANACHE: "0'",
|
|
785
|
-
XYO: "0'"
|
|
786
|
-
};
|
|
787
|
-
var CHANGE_ADDRESS = {
|
|
788
|
-
META_MASK: "0",
|
|
789
|
-
XYO: "0"
|
|
790
|
-
};
|
|
791
|
-
var ADDRESS_INDEX = {
|
|
792
|
-
META_MASK: "0",
|
|
793
|
-
XYO: "0"
|
|
794
|
-
};
|
|
667
|
+
var COIN_TYPES = { Ethereum: "60'" };
|
|
668
|
+
var ACCOUNT_TYPE = { GANACHE: "0'", XYO: "0'" };
|
|
669
|
+
var CHANGE_ADDRESS = { META_MASK: "0", XYO: "0" };
|
|
670
|
+
var ADDRESS_INDEX = { META_MASK: "0", XYO: "0" };
|
|
795
671
|
var DEFAULT_WALLET_PATH = `m/${WALLET_COMPLIANCE}/${COIN_TYPES.Ethereum}/${ACCOUNT_TYPE.XYO}/${CHANGE_ADDRESS.XYO}`;
|
|
796
672
|
|
|
797
673
|
// src/wallet/generateXyoBaseWalletFromPhrase.ts
|
|
798
|
-
var generateXyoBaseWalletFromPhrase =
|
|
674
|
+
var generateXyoBaseWalletFromPhrase = (walletPhrase) => {
|
|
799
675
|
const wallet = HDWallet.fromPhrase(walletPhrase, DEFAULT_WALLET_PATH);
|
|
800
676
|
return wallet;
|
|
801
|
-
}
|
|
677
|
+
};
|
|
802
678
|
export {
|
|
803
679
|
ACCOUNT_TYPE,
|
|
804
680
|
ADDRESS_INDEX,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/block/hydrateBlock.ts","../../src/block/primitives/balanceStepSummaryFromRange.ts","../../src/payload/netBalancesForPayloads.ts","../../src/SignedBigInt.ts","../../src/block/primitives/frames/calculateFramesFromRange.ts","../../src/block/primitives/frames/deepCalculateFramesFromRange.ts","../../src/block/primitives/hashFromBlockNumber.ts","../../src/block/primitives/payloads.ts","../../src/block/primitives/balanceSummary.ts","../../src/config/Config.ts","../../src/config/Api.ts","../../src/validation/lib/isLocalhost.ts","../../src/validation/lib/getUrl.ts","../../src/validation/schema/Address.ts","../../src/validation/schema/Mnemonic.ts","../../src/config/App.ts","../../src/config/Chain.ts","../../src/config/Evm.ts","../../src/config/Producer.ts","../../src/config/storage/driver/Mongo.ts","../../src/config/storage/Storage.ts","../../src/config/Telemetry.ts","../../src/transaction/buildTransaction.ts","../../src/transaction/buildUnsignedTransaction.ts","../../src/transaction/confirmSubmittedTransaction.ts","../../src/transaction/hydrateTransaction.ts","../../src/transaction/primitives/transactionBlockByteCount.ts","../../src/transaction/primitives/transactionElevatedPayloads.ts","../../src/transaction/primitives/transactionOperations.ts","../../src/transaction/primitives/transactionRequiredGas.ts","../../src/transaction/script.ts","../../src/transaction/signTransaction.ts","../../src/wallet/generateXyoBaseWalletFromPhrase.ts","../../src/wallet/paths.ts"],"sourcesContent":["import { filterAs } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport type { Hash } from '@xylabs/hex'\nimport type { ReadArchivist } from '@xyo-network/archivist-model'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport type { HydratedBlock, TransactionBoundWitness } from '@xyo-network/xl1-protocol'\nimport {\n asTransactionBoundWitnessWithStorageMeta, isBlockBoundWitnessWithStorageMeta, isTransactionBoundWitnessWithStorageMeta,\n} from '@xyo-network/xl1-protocol'\n\nexport function allHashesPresent(hashes: Hash[], payloads: WithStorageMeta<Payload>[]): boolean {\n const payloadHashes = new Set(payloads.map(p => p._hash))\n return hashes.every(hash => payloadHashes.has(hash))\n}\n\nexport const tryHydrateBlock = async (\n archivist: ReadArchivist,\n hash: Hash,\n maxDepth: number = 1,\n): Promise<HydratedBlock | undefined> => {\n assertEx(maxDepth >= 0, () => 'maxDepth must be greater than or equal to 0')\n const bw = (await archivist.get([hash])).find(isBlockBoundWitnessWithStorageMeta)\n if (!bw) return undefined\n if (maxDepth === 0) return [bw, []]\n const blkPayloads = await archivist.get(bw.payload_hashes)\n if (maxDepth === 1) return [bw, blkPayloads]\n const transactions = blkPayloads.filter(isTransactionBoundWitnessWithStorageMeta)\n const transactionsPayloadHashes = transactions.flatMap(tx => tx.payload_hashes)\n const transactionsPayloads = await archivist.get(transactionsPayloadHashes)\n const allPayloadsHashes = new Set([...blkPayloads, ...transactionsPayloads].flatMap(p => p._hash))\n const allPayloads = await archivist.get([...allPayloadsHashes])\n const allPayloadsFiltered = allPayloads.filter(p => allPayloadsHashes.has(p._hash))\n return [bw, allPayloadsFiltered]\n}\n\nexport const hydrateBlock = async (\n archivist: ReadArchivist,\n hash: Hash,\n maxDepth: number = 1,\n minDepth = maxDepth,\n): Promise<HydratedBlock> => {\n assertEx(maxDepth >= 0, () => 'maxDepth must be greater than or equal to 0')\n assertEx(minDepth >= 0, () => 'minDepth must be greater than or equal to 0')\n assertEx(maxDepth >= minDepth, () => 'maxDepth must be greater than or equal to minDepth')\n const bw = assertEx(\n (await archivist.get([hash])).find(isBlockBoundWitnessWithStorageMeta),\n () => `block ${hash} not found`,\n )\n if (maxDepth === 0) return [bw, []]\n const blkPayloads = await archivist.get(bw.payload_hashes)\n if (minDepth === 1) assertEx(allHashesPresent(bw.payload_hashes, blkPayloads), () => `Unable to find all payloads for block ${hash}`)\n if (maxDepth === 1) return [bw, blkPayloads]\n const transactions = blkPayloads.filter(isTransactionBoundWitnessWithStorageMeta)\n const transactionsPayloadHashes = transactions.flatMap(tx => tx.payload_hashes)\n const transactionsPayloads = await archivist.get(transactionsPayloadHashes)\n assertEx(allHashesPresent(transactionsPayloadHashes, transactionsPayloads), () => `Unable to find all payloads for transactions in block ${hash}`)\n const allPayloadsHashes = new Set([...blkPayloads, ...transactionsPayloads].flatMap(p => p._hash))\n const allPayloads = await archivist.get([...allPayloadsHashes])\n const allPayloadsFiltered = allPayloads.filter(p => allPayloadsHashes.has(p._hash))\n if (maxDepth === 2) assertEx(allHashesPresent(\n [...allPayloadsHashes],\n allPayloadsFiltered,\n ), () => `Unable to find all payloads for transactions in block ${hash}`)\n return [bw, allPayloadsFiltered]\n}\n\nexport const flattenHydratedBlock = (hydratedBlock: HydratedBlock): WithStorageMeta<Payload>[] => {\n const [blk, blkPayloads] = hydratedBlock\n return [...blkPayloads, blk]\n}\n\nexport const flattenHydratedBlocks = (hydratedBlocks: HydratedBlock[]): WithStorageMeta<Payload>[] =>\n hydratedBlocks.flatMap(blk => flattenHydratedBlock(blk))\n\nexport const transactionsFromHydratedBlock = (block: HydratedBlock): WithStorageMeta<TransactionBoundWitness>[] => {\n return filterAs(block[1], asTransactionBoundWitnessWithStorageMeta)\n}\n\nexport const blockPayloadsFromHydratedBlock = (block: HydratedBlock): WithStorageMeta<Payload>[] => {\n return block[0].payload_hashes.map(hash => assertEx(\n block[1].find(p => p._hash === hash),\n () => `missing payload ${hash}`,\n )).filter(x => !isTransactionBoundWitnessWithStorageMeta(x))\n}\n","import { assertEx } from '@xylabs/assert'\nimport { type Address } from '@xylabs/hex'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport { isAnyPayload } from '@xyo-network/payload-model'\nimport { StepSizes } from '@xyo-network/xl1-protocol'\n\nimport { netBalancesForPayloads } from '../../payload/index.ts'\nimport {\n parseSignedBigInt, type SignedBigInt, toSignedBigInt,\n} from '../../SignedBigInt.ts'\nimport { hydrateBlock } from '../hydrateBlock.ts'\nimport type { BlockNumberRange } from './frames/index.ts'\nimport { deepCalculateFramesFromRange } from './frames/index.ts'\nimport { hashFromBlockNumber } from './hashFromBlockNumber.ts'\nimport type { BalanceStepSummaryContext } from './model.ts'\nimport { type BalancesStepSummary, BalancesStepSummarySchema } from './payloads.ts'\n\nexport async function balanceStepSummaryFromRange(\n context: BalanceStepSummaryContext,\n range: BlockNumberRange,\n): Promise<WithStorageMeta<BalancesStepSummary>> {\n // console.log(`balanceStepSummaryFromRange: head=${head}, range=${range[0]}-${range[1]}`)\n const frameHeadHash = await hashFromBlockNumber(context, range[1])\n const frameSize = range[1] - range[0] + 1\n\n let result: BalancesStepSummary | undefined = undefined\n\n if (frameSize === 1) {\n const hash = await hashFromBlockNumber(context, range[0])\n const [, payloads] = await hydrateBlock(context.chainArchivist, hash)\n const balances: Record<Address, SignedBigInt> = {}\n for (const [address, balance] of Object.entries(netBalancesForPayloads(payloads))) {\n balances[address as Address] = toSignedBigInt(balance)\n }\n result = {\n schema: BalancesStepSummarySchema, hash: context.head, stepSize: -1, balances,\n }\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const step = (StepSizes as any).indexOf(frameSize)\n assertEx(step !== -1, () => `Invalid step size: ${frameSize}. Must be one of ${StepSizes.join(', ')}`)\n\n const [summaryResult] = await context.summaryRepository.get([frameHeadHash])\n if (isAnyPayload(summaryResult)) {\n result = summaryResult as WithStorageMeta<BalancesStepSummary>\n } else {\n // We do not have it, so lets build it\n const subRanges = deepCalculateFramesFromRange(range, step - 1)\n const promises = subRanges.map(subRange => balanceStepSummaryFromRange(\n context,\n subRange,\n ))\n const subResults = await Promise.all(promises)\n\n // add them all up\n const bigIntBalances: Record<Address, bigint> = {}\n for (const subResult of subResults) {\n for (const [address, balance] of Object.entries(subResult.balances)) {\n bigIntBalances[address as Address] = (bigIntBalances[address as Address] ?? 0n) + parseSignedBigInt(balance)\n }\n }\n\n const balances: Record<Address, SignedBigInt> = {}\n for (const [address, balance] of Object.entries(bigIntBalances)) {\n balances[address as Address] = toSignedBigInt(balance)\n }\n\n result = {\n schema: BalancesStepSummarySchema, hash: frameHeadHash, stepSize: frameSize, balances,\n }\n\n await context.summaryRepository.insert([result])\n }\n }\n // console.log(`balanceStepSummaryFromRange-result: head=${head}, range=${range[0]}-${range[1]}: ${toSafeJsonString(result, 10)}`)\n const finalResult = await PayloadBuilder.addStorageMeta(result)\n return finalResult\n}\n","import {\n type Address, type Hex, hexToBigInt, toAddress,\n} from '@xylabs/hex'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isTransfer } from '@xyo-network/xl1-protocol'\n\nexport const netBalancesForPayloads = (payloads: Payload[]) => {\n const balances: Record<Address, bigint> = {}\n for (const payload of payloads) {\n if (isTransfer(payload)) {\n const { from } = payload\n for (let [address, amount] of Object.entries(payload.transfers) as [Address, Hex][]) {\n balances[toAddress(address)] = (balances[toAddress(address)] ?? 0n) + hexToBigInt(amount)\n balances[toAddress(from)] = (balances[toAddress(from)] ?? 0n) - hexToBigInt(amount)\n }\n }\n }\n return balances\n}\n","import {\n type Hex,\n hexToBigInt,\n toHex,\n} from '@xylabs/hex'\nimport { isObject } from '@xylabs/object'\n\nexport interface NegativeBigInt {\n negative: Hex\n}\n\nexport interface PositiveBigInt {\n positive: Hex\n}\n\nexport type SignedBigInt = NegativeBigInt | PositiveBigInt\n\nexport const isNegativeBigInt = (value: unknown): value is NegativeBigInt => {\n return isObject(value) && 'negative' in value && typeof value.negative === 'string'\n}\n\nexport const isPositiveBigInt = (value: unknown): value is PositiveBigInt => {\n return isObject(value) && 'positive' in value && typeof value.positive === 'string'\n}\n\nexport const parseSignedBigInt = (value: SignedBigInt): bigint => {\n if (isNegativeBigInt(value)) {\n return -hexToBigInt(value.negative)\n } else if (isPositiveBigInt(value)) {\n return hexToBigInt(value.positive)\n } else {\n throw new Error('Invalid balance type')\n }\n}\n\nexport const toSignedBigInt = (value: bigint): SignedBigInt => {\n return value < 0n ? { negative: toHex(-value) } : { positive: toHex(value) }\n}\n\nexport const toPositiveBigInt = (value: unknown): PositiveBigInt => {\n if (isNegativeBigInt(value)) {\n return { positive: toHex(0n) }\n }\n if (isPositiveBigInt(value)) {\n return { positive: value.positive }\n }\n if (typeof value === 'bigint') {\n return { positive: toHex(value) }\n }\n throw new Error('Invalid value for positive big int')\n}\n","import { stepSize } from '@xyo-network/xl1-protocol'\n\nimport type { BlockNumberRange } from './BlockNumberRange.ts'\n\nexport function calculateFramesFromRange(range: BlockNumberRange, step: number): [\n // ranges of fitted frames\n BlockNumberRange[],\n // ranges of remaining blocks\n BlockNumberRange[]] {\n const size = stepSize(step)\n let start = (Math.trunc(range[0] / size)) * size\n const fitted: BlockNumberRange[] = []\n const remaining: BlockNumberRange[] = []\n\n // if the start is not aligned with the range, add a remaining block\n if (start !== range[0]) {\n start += size\n remaining.push([range[0], Math.min(start - 1, range[1])])\n }\n\n for (let i = start; i <= range[1]; i += size) {\n if ((i + size - 1) <= range[1]) {\n fitted.push([i, Math.min(i + size - 1, range[1])])\n } else {\n remaining.push([i, range[1]])\n }\n }\n return [fitted, remaining]\n}\n","import { StepSizes } from '@xyo-network/xl1-protocol'\n\nimport type { BlockNumberRange } from './BlockNumberRange.ts'\nimport { calculateFramesFromRange } from './calculateFramesFromRange.ts'\n\nexport function deepCalculateFramesFromRange(range: BlockNumberRange, startingStep = StepSizes.length - 1): BlockNumberRange[] {\n const fitted: BlockNumberRange[] = []\n let remaining: BlockNumberRange[] = [range]\n\n for (let step = startingStep; step >= 0; step--) {\n const newRemaining: BlockNumberRange[] = []\n for (const range of remaining) {\n const [newFittedFrames, newRemainingFrames] = calculateFramesFromRange(range, step)\n fitted.push(...newFittedFrames)\n newRemaining.push(...newRemainingFrames)\n }\n remaining = newRemaining\n }\n\n for (const range of remaining) {\n for (let i = range[0]; i <= range[1]; i++) {\n fitted.push([i, i]) // Add individual frames for remaining ranges\n }\n }\n\n return fitted.toSorted((a, b) => a[0] - b[0]) // Sort by start of range\n}\n","import { asHash, type Hash } from '@xylabs/hex'\nimport { toSafeJsonString } from '@xylabs/object'\nimport { asBlockBoundWitnessWithStorageMeta, StepSizes } from '@xyo-network/xl1-protocol'\n\nimport type { ChainContext } from './model.ts'\n\nexport async function hashFromBlockNumber(context: ChainContext, blockNumber: number): Promise<Hash> {\n const result = await context.chainArchivist.get([context.head])\n let currentBlock = asBlockBoundWitnessWithStorageMeta(result.at(0), () => `Head block not found for hash: ${context.head}`, { required: true })\n while (currentBlock.block > blockNumber) {\n let jumpHash: Hash | null = currentBlock.previous\n let jumpBlockNumber = currentBlock.block - 1\n for (const [step, stepSize] of StepSizes.entries()) {\n const possibleJumpBlockNumber = currentBlock.block - stepSize\n if (possibleJumpBlockNumber >= blockNumber && possibleJumpBlockNumber <= jumpBlockNumber) {\n jumpBlockNumber = possibleJumpBlockNumber\n jumpHash = asHash(currentBlock.step_hashes.at(step), () => `Step hash not found for step ${step} in block ${currentBlock.block}`)\n }\n }\n const [newBlock] = await context.chainArchivist.get([\n asHash(jumpHash, () => `Jump hash not found for block number [${blockNumber}]: ${jumpBlockNumber} ${toSafeJsonString(currentBlock, 10)}`)])\n currentBlock = asBlockBoundWitnessWithStorageMeta(newBlock, () => `Block not found for hash: ${jumpHash}`, { required: true })\n if (currentBlock.block === blockNumber) {\n break\n }\n if (currentBlock.block < blockNumber) {\n throw new Error(`Block number ${blockNumber} is not a valid step block number for block ${context.head}.`)\n }\n }\n return currentBlock._hash\n}\n","import type { Address, Hash } from '@xylabs/hex'\nimport type { EmptyObject } from '@xylabs/object'\nimport { AsObjectFactory } from '@xylabs/object'\nimport type {\n Payload, Schema, WithStorageMeta,\n} from '@xyo-network/payload-model'\nimport { isPayloadOfSchemaType, isStorageMeta } from '@xyo-network/payload-model'\n\nimport type { SignedBigInt } from '../../SignedBigInt.ts'\n\nexport const StepSummarySchema: Schema = 'network.xyo.step.summary'\nexport type StepSummarySchema = typeof StepSummarySchema\n\nexport interface StepSummaryFields {\n hash: Hash // the stepHash - the hash of the last block in the step frame\n stepSize: number // the stepSize in blocks\n}\n\nexport interface ChainWindow {\n depth: number // number of blocks the window covers, including the head\n head: Hash // the head of the chain\n}\n\nexport type StepSummary<TAdditionalFields extends EmptyObject | void = void,\n TSchema extends Schema | void = void> = Payload<TAdditionalFields extends void ? StepSummaryFields : TAdditionalFields & StepSummaryFields,\n TSchema extends void ? StepSummarySchema : TSchema>\n\nexport const BalancesStepSummarySchema: Schema = 'network.xyo.step.summary.balances'\nexport type BalancesStepSummarySchema = typeof BalancesStepSummarySchema\n\nexport type BalancesStepSummary = StepSummary<{\n balances: Record<Address, SignedBigInt>\n}, BalancesStepSummarySchema>\n\n/**\n * Identity function for determining if an object is an BalancesStepSummary\n */\nexport const isBalancesStepSummary = isPayloadOfSchemaType<BalancesStepSummary>(BalancesStepSummarySchema)\nexport const asBalancesStepSummary = AsObjectFactory.create<BalancesStepSummary>(isBalancesStepSummary)\n\n/**\n * Identity function for determining if an object is an BalancesStepSummary with Storage Meta\n */\nexport const isBalancesStepSummaryWithStorageMeta = (value: unknown): value is WithStorageMeta<BalancesStepSummary> => {\n return isBalancesStepSummary(value) && isStorageMeta(value)\n}\nexport const asBalancesStepSummaryWithStorageMeta = AsObjectFactory.create<WithStorageMeta<BalancesStepSummary>>(isBalancesStepSummaryWithStorageMeta)\n","import type { Address } from '@xylabs/hex'\nimport { asAddress } from '@xylabs/hex'\nimport { isDefined } from '@xylabs/typeof'\nimport { asBlockBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'\n\nimport { parseSignedBigInt } from '../../SignedBigInt.ts'\nimport { balanceStepSummaryFromRange } from './balanceStepSummaryFromRange.ts'\nimport { deepCalculateFramesFromRange } from './frames/index.ts'\nimport type { BalanceStepSummaryContext } from './model.ts'\n\nexport async function balanceSummary(\n context: BalanceStepSummaryContext,\n): Promise<Partial<Record<Address, bigint>>> {\n const headResult = await context.chainArchivist.get([context.head])\n const headBoundWitness = asBlockBoundWitnessWithStorageMeta(headResult.at(0), () => `Head block not found for hash: ${context.head}`, { required: true })\n const rangeStart = isDefined(context.windowSize) ? Math.max(headBoundWitness.block - context.windowSize + 1, 0) : 0\n const ranges = deepCalculateFramesFromRange([rangeStart, headBoundWitness.block])\n const summaries = await Promise.all(ranges.map(range => balanceStepSummaryFromRange(context, range)))\n const balances: Partial<Record<Address, bigint>> = {}\n for (let summary of summaries) {\n for (const [address, balance] of Object.entries(summary.balances)) {\n const validAddress = asAddress(address, () => `Invalid address: ${address}`)\n balances[validAddress] = (balances[validAddress] ?? 0n) + parseSignedBigInt(balance)\n }\n }\n return balances\n}\n","import type { LogLevelKey } from '@xylabs/logger'\nimport { LogLevel } from '@xylabs/logger'\nimport z from 'zod'\n\nimport { ApiConfigSchema } from './Api.ts'\nimport { AppConfigSchema } from './App.ts'\nimport { ChainConfigSchema } from './Chain.ts'\nimport { EvmConfigSchema } from './Evm.ts'\nimport { ProducerConfigSchema } from './Producer.ts'\nimport { StorageConfigSchema } from './storage/index.ts'\nimport { TelemetryConfigSchema } from './Telemetry.ts'\n\nconst LogLevels = Object.keys(LogLevel) as [LogLevelKey, ...LogLevelKey[]]\n\nexport const Xl1CommonConfigSchema = z.object({\n silent: z.boolean().default(false).describe('Whether to run in silent mode'),\n logLevel: z.enum(LogLevels).default('info').describe('Desired process verbosity'),\n}).describe('XL1 common configuration options')\n\nexport const ConfigSchema = z.object({\n ...Xl1CommonConfigSchema.shape,\n api: ApiConfigSchema.default(ApiConfigSchema.parse({})).describe('Configuration for the API node'),\n app: AppConfigSchema.default(AppConfigSchema.parse({})).describe('Configuration for the application'),\n chain: ChainConfigSchema.default(ChainConfigSchema.parse({})).describe('Configuration for the chain'),\n evm: EvmConfigSchema.default(EvmConfigSchema.parse({})).describe('Configuration for EVM-backed services'),\n producer: ProducerConfigSchema.default(ProducerConfigSchema.parse({})).describe('Configuration for the producer'),\n storage: StorageConfigSchema.default(StorageConfigSchema.parse({})).describe('Configuration for the storage'),\n telemetry: TelemetryConfigSchema.default(TelemetryConfigSchema.parse({})).describe('Configuration for telemetry'),\n})\n\nexport type Config = z.infer<typeof ConfigSchema>\n\nexport const getDefaultConfig = (): Config => ConfigSchema.parse({})\n","import z from 'zod'\n\nimport { MnemonicStringSchema } from '../validation/index.ts'\n\nexport const ApiConfigSchema = z.object({\n mnemonic: MnemonicStringSchema.optional().describe('Mnemonic for the API wallet'),\n host: z.string().default('localhost').describe('Host for the API'),\n port: z.coerce.number().default(8080).describe('Port for the API'),\n})\n\nexport type ApiConfig = z.infer<typeof ApiConfigSchema>\n","export const isLocalhost = (hostname: string): boolean => {\n return (\n hostname === 'localhost'\n || hostname === '127.0.0.1'\n || hostname === '::1' // IPv6 localhost\n || hostname.endsWith('.localhost')\n )\n}\n","import { isLocalhost } from './isLocalhost.ts'\n\nexport const getUrl = (host: string, port: number): string => {\n const scheme = isLocalhost(host) ? 'http' : 'https'\n return `${scheme}://${host}:${port}`\n}\n","export const TODO = true\n","import { z } from 'zod'\n\n/**\n * Validates a single string containing a BIP-39 mnemonic.\n *\n * • Trims leading/trailing whitespace.\n * • Collapses any run of whitespace (spaces, tabs, new-lines) to a single space.\n * • Splits on spaces → array of words.\n * • Checks that the word-count is 12, 15, 18, 21, or 24.\n *\n */\nexport const MnemonicStringSchema = z\n .string()\n .transform(s => s.trim().replaceAll(/\\s+/g, ' ')) // normalize spacing\n .refine(\n s => [12, 15, 18, 21, 24].includes(s.split(' ').length),\n { message: 'Mnemonic must contain 12, 15, 18, 21, or 24 words.' },\n ).describe('BIP-39 mnemonic string')\n\nexport type MnemonicString = z.infer<typeof MnemonicStringSchema>\n","import z from 'zod'\n\nexport const AppConfigSchema = z.object({ port: z.coerce.number().default(3000).describe('Port for the application') })\n","import z from 'zod'\n\nexport const ChainConfigSchema = z.object({\n id: z.string().optional()\n .describe('The unique identifier for the chain. Should be the staking contract address for contract-backed chains.'),\n})\n","import z from 'zod'\n\nexport const EvmJsonRpcConfigSchema = z.object({\n //\n url: z.string().optional().describe('JSON-RPC URL'),\n})\nexport const EvmInfuraConfigSchema = z.object({\n projectId: z.string().optional().describe('Infura project ID'),\n projectSecret: z.string().optional().describe('Infura project secret'),\n})\nexport const EvmConfigSchema = z.object({\n chainId: z.string().optional().describe('EVM chain ID'),\n infura: EvmInfuraConfigSchema.optional().describe('Infura Provider configuration'),\n jsonRpc: EvmJsonRpcConfigSchema.optional().describe('JSON-RPC Provider configuration'),\n})\n\nexport type EvmConfig = z.infer<typeof EvmConfigSchema>\n","import z from 'zod'\n\nimport { MnemonicStringSchema } from '../validation/index.ts'\n\nexport const ProducerConfigSchema = z.object({\n // TODO: Port schema\n healthCheckPort: z.coerce.number().optional().describe('Port for the Producer health checks'),\n // TODO: BigInt schema\n minStake: z.coerce.number().default(1).describe('Minimum stake required to be a Producer'),\n mnemonic: MnemonicStringSchema.optional().describe('Mnemonic for the Producer wallet'),\n // TODO: Port schema\n port: z.coerce.number().default(8081).describe('Port for the Producer'),\n disableIntentRedeclaration: z.boolean().optional().describe('Should the producer skip redeclaring their intent to continue producing blocks'),\n // TODO: Address schema\n rewardAddress: z.string().optional().describe('Address to receive block rewards'),\n})\n","import { isDefined, isUndefined } from '@xylabs/typeof'\nimport z from 'zod'\n\n/**\n * Checks if the provided MongoDB configuration contains all necessary fields\n * for establishing a connection.\n * @param config MongoDB configuration object\n * @returns True if the configuration contains all necessary fields for\n * establishing a connection\n */\nexport const hasMongoConfig = (config?: MongoConfig): config is Required<MongoConfig> => {\n if (isUndefined(config)) return false\n return (\n isDefined(config.connectionString)\n && isDefined(config.database)\n && isDefined(config.domain)\n && isDefined(config.password)\n && isDefined(config.username)\n )\n}\n\nexport const MongoConfigSchema = z.object({\n // TODO: Create from other arguments\n connectionString: z.string().min(1).optional().describe('MongoDB connection string'),\n database: z.string().min(1).optional().describe('MongoDB database name'),\n domain: z.string().min(1).optional().describe('MongoDB domain'),\n password: z.string().min(1).optional().describe('MongoDB password'),\n username: z.string().min(1).optional().describe('MongoDB username'),\n})\n\nexport type MongoConfig = z.infer<typeof MongoConfigSchema>\n","import z from 'zod'\n\nimport { MongoConfigSchema } from './driver/index.ts'\n\nexport const StorageConfigSchema = z.object({\n mongo: MongoConfigSchema.optional().describe('Configuration for the MongoDBstorage driver'),\n root: z.string().optional().describe('Root directory for local storage'),\n}).describe('Storage configuration options')\n\nexport type StorageConfig = z.infer<typeof StorageConfigSchema>\n","import z from 'zod'\n\nexport const OpenTelemetryConfigSchema = z.object({\n // OpenTelemetry options\n otlpEndpoint: z.string().optional().describe('OTLP endpoint for exporting telemetry data'),\n})\n\nexport const TelemetryConfigSchema = z.object({\n // OpenTelemetry configuration\n otel: OpenTelemetryConfigSchema.optional().describe('OpenTelemetry configuration'),\n}).describe('Telemetry configuration options')\n\nexport type TelemetryConfig = z.infer<typeof TelemetryConfigSchema>\n","import { assertEx } from '@xylabs/assert'\nimport type { Address, Hex } from '@xylabs/hex'\nimport { toHex } from '@xylabs/hex'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload,\n ExecutableFields,\n FromFields,\n HydratedTransaction, TransactionBoundWitness, TransactionBoundWitnessFields, TransactionFeesBigInt,\n} from '@xyo-network/xl1-protocol'\nimport { defaultTransactionFees } from '@xyo-network/xl1-protocol'\n\nexport async function buildTransaction(\n chain: Hex,\n onChainPayloads: AllowedBlockPayload[],\n offChainPayloads: Payload[],\n signer: AccountInstance | AccountInstance[],\n nbf: number,\n exp: number,\n from?: Address,\n fees: TransactionFeesBigInt = defaultTransactionFees,\n): Promise<HydratedTransaction> {\n if (from === undefined && Array.isArray(signer)) {\n throw new Error('from is required when signer is an array')\n }\n\n const txBoundWitnessFields: TransactionBoundWitnessFields = {\n chain,\n fees: {\n base: toHex(fees.base),\n gasLimit: toHex(fees.gasLimit),\n gasPrice: toHex(fees.gasPrice),\n priority: toHex(fees.priority),\n },\n nbf,\n exp,\n }\n\n const elevatedHashes = await PayloadBuilder.hashes(onChainPayloads)\n const script: string[] = []\n for (const elevatedHash of elevatedHashes) {\n script.push(`elevate|${elevatedHash}`)\n }\n\n const fields: TransactionBoundWitnessFields & FromFields & Partial<ExecutableFields> = {\n ...txBoundWitnessFields,\n from: from ?? (Array.isArray(signer) ? assertEx(signer.at(0)?.address) : signer.address),\n }\n\n if (script.length > 0) {\n fields.script = script\n }\n\n const [tx, txPayloads] = await new BoundWitnessBuilder<TransactionBoundWitness>()\n .fields(fields)\n .meta({ $signatures: [] })\n .payloads([...onChainPayloads, ...offChainPayloads])\n .signers(Array.isArray(signer) ? signer : [signer])\n .build()\n\n return [await PayloadBuilder.addStorageMeta(tx), await PayloadBuilder.addStorageMeta(txPayloads)]\n}\n","import type { Address, Hex } from '@xylabs/hex'\nimport { toHex } from '@xylabs/hex'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload,\n ExecutableFields,\n FromFields,\n HydratedTransaction, TransactionBoundWitness, TransactionBoundWitnessFields, TransactionFeesBigInt,\n} from '@xyo-network/xl1-protocol'\nimport { defaultTransactionFees } from '@xyo-network/xl1-protocol'\n\nexport async function buildUnsignedTransaction(\n chain: Hex,\n onChainPayloads: AllowedBlockPayload[],\n offChainPayloads: Payload[],\n nbf: number,\n exp: number,\n from: Address,\n fees: TransactionFeesBigInt = defaultTransactionFees,\n): Promise<HydratedTransaction> {\n const txBoundWitnessFields: TransactionBoundWitnessFields = {\n chain,\n fees: {\n base: toHex(fees.base),\n gasLimit: toHex(fees.gasLimit),\n gasPrice: toHex(fees.gasPrice),\n priority: toHex(fees.priority),\n },\n nbf,\n exp,\n }\n\n const elevatedHashes = await PayloadBuilder.hashes(onChainPayloads)\n const script: string[] = []\n for (const elevatedHash of elevatedHashes) {\n script.push(`elevate|${elevatedHash}`)\n }\n\n const fields: TransactionBoundWitnessFields & FromFields & Partial<ExecutableFields> = {\n ...txBoundWitnessFields,\n from,\n }\n\n if (script.length > 0) {\n fields.script = script\n }\n\n const [tx, txPayloads] = await new BoundWitnessBuilder<TransactionBoundWitness>()\n .fields(fields)\n .meta({ $signatures: [] })\n .payloads([...onChainPayloads, ...offChainPayloads])\n .build()\n\n return [await PayloadBuilder.addStorageMeta(tx), await PayloadBuilder.addStorageMeta(txPayloads)]\n}\n","import { delay } from '@xylabs/delay'\nimport type { Logger } from '@xylabs/logger'\nimport { isDefined } from '@xylabs/typeof'\nimport type { Signed } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n HydratedTransaction, TransactionBoundWitness, XyoViewer,\n} from '@xyo-network/xl1-protocol'\n\nconst DEFAULT_CONFIRMATION_ATTEMPTS = 20\nconst DEFAULT_DELAY_BETWEEN_ATTEMPTS = 1000 // milliseconds\n\nexport type ConfirmSubmittedTransactionOptions = {\n /**\n * Number of attempts to confirm the transaction.\n * Defaults to 20.\n */\n attempts?: number\n /**\n * Delay in milliseconds between confirmation attempts.\n * Defaults to 1000 (1 second).\n */\n delay?: number\n /**\n * Optional logger instance for logging progress.\n */\n logger?: Logger\n}\n\n/**\n * Confirms a submitted transaction by checking if it has been included in the blockchain.\n * @param viewer The viewer\n * @param transaction The transaction to confirm\n * @param options Options for confirmation\n * @returns The confirmed transaction or throws an error if not confirmed\n */\nexport const confirmSubmittedTransaction = async (\n viewer: XyoViewer,\n transaction: Signed<TransactionBoundWitness>,\n options?: ConfirmSubmittedTransactionOptions,\n): Promise<HydratedTransaction> => {\n const { attempts: maxAttempts = DEFAULT_CONFIRMATION_ATTEMPTS, delay: attemptDelay = DEFAULT_DELAY_BETWEEN_ATTEMPTS } = options || {}\n const txBWHash = await PayloadBuilder.hash(transaction)\n options?.logger?.log('✅ confirming transaction:', txBWHash, '\\n')\n let attempts = 0\n while (true) {\n const tx = await viewer.transactionByHash(txBWHash) ?? undefined\n if (isDefined(tx)) {\n options?.logger?.log('🍻 Transaction confirmed:', txBWHash, '\\n')\n return tx\n } else {\n attempts++\n if (attempts > maxAttempts) {\n options?.logger?.error(`⚠️ Transaction not confirmed after ${maxAttempts} attempts`)\n throw new Error(`Transaction ${txBWHash} not confirmed after ${maxAttempts} attempts`)\n } else {\n options?.logger?.log(`🔄 Transaction not confirmed yet, attempt ${attempts}. Retrying...`, '\\n')\n await delay(attemptDelay)\n }\n }\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Hash } from '@xylabs/hex'\nimport type { ReadArchivist } from '@xyo-network/archivist-model'\nimport { hydrateTypedBoundWitness, tryHydrateTypedBoundWitness } from '@xyo-network/archivist-model'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload,\n HydratedTransaction, TransactionBoundWitness,\n} from '@xyo-network/xl1-protocol'\nimport { isAllowedBlockPayload, isTransactionBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'\n\nexport const tryHydrateTransaction = async (\n archivist: ReadArchivist,\n hash: Hash,\n): Promise<HydratedTransaction | undefined> => {\n return (await tryHydrateTypedBoundWitness<TransactionBoundWitness>(\n archivist,\n hash,\n isTransactionBoundWitnessWithStorageMeta,\n )) as HydratedTransaction | undefined\n}\n\nexport const hydrateTransaction = async (\n archivist: ReadArchivist,\n hash: Hash,\n): Promise<HydratedTransaction> => {\n return await hydrateTypedBoundWitness<TransactionBoundWitness>(\n archivist,\n hash,\n isTransactionBoundWitnessWithStorageMeta,\n ) as HydratedTransaction\n}\n\nexport const flattenHydratedTransaction = (hydratedTransaction: HydratedTransaction): Payload[] => {\n const [tx, txPayloads] = hydratedTransaction\n return [...txPayloads, tx]\n}\n\nexport const flattenHydratedTransactions = (hydratedTransactions: HydratedTransaction[]): Payload[] =>\n hydratedTransactions.flatMap(tx => flattenHydratedTransaction(tx))\n\nexport const tryHydrateElevatedTransaction = async (\n archivist: ReadArchivist,\n hash: Hash,\n): Promise<HydratedTransaction | undefined> => {\n const hydratedTransaction = await tryHydrateTransaction(archivist, hash)\n if (!hydratedTransaction) {\n return undefined\n }\n const [transaction, payloads] = hydratedTransaction\n const opCodes = (transaction.script ?? []).filter(operation => operation.startsWith('elevate|'))\n const elevatedPayloads: WithStorageMeta<AllowedBlockPayload>[] = []\n for (const opCode of opCodes) {\n const [code, hash] = opCode.split('|')\n if (code === 'elevated') {\n const elevatedPayload = payloads.find(payload => payload._hash === hash)\n if (isAllowedBlockPayload(elevatedPayload)) {\n elevatedPayloads.push(elevatedPayload)\n }\n }\n }\n if (opCodes.length === elevatedPayloads.length) {\n return [transaction, elevatedPayloads]\n }\n return undefined\n}\n\nexport const hydrateElevatedTransaction = async (\n archivist: ReadArchivist,\n hash: Hash,\n): Promise<HydratedTransaction> => {\n return assertEx(await tryHydrateElevatedTransaction(archivist, hash), () => 'Hydration failed')\n}\n","import { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { HydratedTransaction } from '@xyo-network/xl1-protocol'\n\n/** The number of bytes that a transaction and its payloads will take up in a block */\nexport function transactionBlockByteCount([transaction, payloads]: HydratedTransaction): number {\n const cleanTransaction = PayloadBuilder.omitStorageMeta(transaction)\n const transactionBytes = JSON.stringify(cleanTransaction).length\n const cleanPayloads = PayloadBuilder.omitStorageMeta(payloads)\n return cleanPayloads.reduce((acc: number, payload) => acc + JSON.stringify(payload).length, 0) + transactionBytes\n}\n","import { asHash, type Hash } from '@xylabs/hex'\nimport type { Payload, WithHashStorageMeta } from '@xyo-network/payload-model'\nimport type { HydratedTransaction, TransactionBoundWitness } from '@xyo-network/xl1-protocol'\n\nimport { crackOperations } from './transactionOperations.ts'\n\nexport function transactionElevatedPayloadHashes(transaction: TransactionBoundWitness): Hash[] {\n const elevateOperations = crackOperations(transaction.script ?? []).filter(op => op[0] === 'elevate')\n return elevateOperations.map(op => asHash(op[1][0], true))\n}\n\nexport function transactionElevatedPayloads([transaction, payloads]: HydratedTransaction): WithHashStorageMeta<Payload>[] {\n const hashes = transactionElevatedPayloadHashes(transaction)\n const elevatedPayloads = payloads.filter(payload => hashes.includes(payload._hash))\n return elevatedPayloads\n}\n","export function crackOperation(operation: string): [string, string[]] {\n const parts = operation.split('|')\n if (parts.length < 2) {\n throw new Error(`Invalid operation format: ${operation}`)\n }\n return [parts[0], parts.slice(1)]\n}\n\nexport function crackOperations(operations: string[]): [string, string[]][] {\n return operations.map(op => crackOperation(op))\n}\n","import type { HydratedTransaction } from '@xyo-network/xl1-protocol'\nimport { AttoXL1, TransactionGasCosts } from '@xyo-network/xl1-protocol'\n\nimport { transactionBlockByteCount } from './transactionBlockByteCount.ts'\nimport { transactionElevatedPayloads } from './transactionElevatedPayloads.ts'\n\n/** The required gas for the byte storage on the block chain for a transaction */\nexport function transactionBytesRequiredGas([transaction, payloads]: HydratedTransaction): AttoXL1 {\n const transactionBlockBytes = transactionBlockByteCount([transaction, payloads])\n return AttoXL1(TransactionGasCosts.characterStorage * BigInt(transactionBlockBytes))\n}\n\nexport function transactionRequiredGas(hydratedTransaction: HydratedTransaction): AttoXL1 {\n const elevatedPayloads = transactionElevatedPayloads(hydratedTransaction)\n const hashes = elevatedPayloads.length + 1 /* for transaction itself */\n const signatures = hydratedTransaction[0].addresses.length\n return AttoXL1(transactionBytesRequiredGas(hydratedTransaction)\n + TransactionGasCosts.hashValidation * BigInt(hashes)\n + TransactionGasCosts.signatureValidation * BigInt(signatures)\n + TransactionGasCosts.payloadValidation * BigInt(elevatedPayloads.length))\n}\n","import { filterAs } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { asHash, type Hash } from '@xylabs/hex'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { AllowedBlockPayload, HydratedTransaction } from '@xyo-network/xl1-protocol'\nimport { isAllowedBlockPayloadWithHashStorageMeta } from '@xyo-network/xl1-protocol'\n\nexport const tryExtractElevatedHashesFromScript = (strings: string[]): Hash[] => {\n const hashes = strings\n .filter(str => str.startsWith('elevate|'))\n .map(str => str.split('|')[1])\n return filterAs(hashes, h => asHash(h))\n}\n\nexport const extractElevatedHashesFromScript = (strings: string[]): Hash[] => {\n const hashes = strings\n .filter(str => str.startsWith('elevate|'))\n .map(str => str.split('|')[1])\n const filtered = filterAs(hashes, h => asHash(h))\n assertEx(filtered.length === hashes.length, () => 'Invalid elevated hashes')\n return filtered\n}\n\nexport const tryExtractElevatedHashes = (tx: HydratedTransaction): WithStorageMeta<AllowedBlockPayload>[] => {\n const [bw, payloads] = tx\n const { script } = bw\n const hashes = script ? tryExtractElevatedHashesFromScript(script) : []\n return payloads\n .filter(p => hashes.includes(p._hash))\n .filter(isAllowedBlockPayloadWithHashStorageMeta)\n}\n\nexport const extractElevatedHashes = (tx: HydratedTransaction): WithStorageMeta<AllowedBlockPayload>[] => {\n const [bw, payloads] = tx\n const { script } = bw\n const hashes = script ? tryExtractElevatedHashesFromScript(script) : []\n const filtered = payloads\n .filter(p => hashes.includes(p._hash))\n .filter(isAllowedBlockPayloadWithHashStorageMeta)\n assertEx(filtered.length === hashes.length, () => 'Invalid elevated hashes')\n return filtered\n}\n","import { toArrayBuffer } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { hexFromArrayBuffer } from '@xylabs/hex'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { TransactionBoundWitness } from '@xyo-network/xl1-protocol'\n\nexport async function signTransaction(tx: TransactionBoundWitness, signer: AccountInstance) {\n assertEx(tx.from === signer.address, () => 'Signer address does not match transaction from address')\n const signedTx = structuredClone(tx)\n signedTx.addresses = [signer.address]\n signedTx.previous_hashes = [signer.previousHash ?? null]\n const hash = await PayloadBuilder.hash(signedTx)\n const hashBytes = toArrayBuffer(hash)\n const [signature] = await signer.sign(hashBytes)\n signedTx.$signatures = [hexFromArrayBuffer(signature)]\n return signedTx\n}\n","import { HDWallet } from '@xyo-network/wallet'\n\nimport { DEFAULT_WALLET_PATH } from './paths.ts'\n\n/**\n * Initializes a wallet to the default XYO path from a mnemonic phrase\n * @param walletPhrase The mnemonic phrase for the wallet\n * @returns A wallet initialized to the default XYO path using the provided phrase\n */\nexport const generateXyoBaseWalletFromPhrase = (walletPhrase: string) => {\n const wallet = HDWallet.fromPhrase(walletPhrase, DEFAULT_WALLET_PATH)\n return wallet\n}\n","export const WALLET_COMPLIANCE = '44\\'' as const\n\nexport const COIN_TYPES = { Ethereum: '60\\'' } as const\n\nexport const ACCOUNT_TYPE = { GANACHE: '0\\'', XYO: '0\\'' } as const\n\nexport const CHANGE_ADDRESS = { META_MASK: '0', XYO: '0' } as const\n\nexport const ADDRESS_INDEX = { META_MASK: '0', XYO: '0' } as const\n\nexport const DEFAULT_WALLET_PATH = `m/${WALLET_COMPLIANCE}/${COIN_TYPES.Ethereum}/${ACCOUNT_TYPE.XYO}/${CHANGE_ADDRESS.XYO}`\n"],"mappings":";;;;AAAA,SAASA,gBAAgB;AACzB,SAASC,gBAAgB;AAKzB,SACEC,0CAA0CC,oCAAoCC,gDACzE;AAEA,SAASC,iBAAiBC,QAAgBC,UAAoC;AACnF,QAAMC,gBAAgB,IAAIC,IAAIF,SAASG,IAAIC,CAAAA,MAAKA,EAAEC,KAAK,CAAA;AACvD,SAAON,OAAOO,MAAMC,CAAAA,SAAQN,cAAcO,IAAID,IAAAA,CAAAA;AAChD;AAHgBT;AAKT,IAAMW,kBAAkB,8BAC7BC,WACAH,MACAI,WAAmB,MAAC;AAEpBC,WAASD,YAAY,GAAG,MAAM,6CAAA;AAC9B,QAAME,MAAM,MAAMH,UAAUI,IAAI;IAACP;GAAK,GAAGQ,KAAKC,kCAAAA;AAC9C,MAAI,CAACH,GAAI,QAAOI;AAChB,MAAIN,aAAa,EAAG,QAAO;IAACE;IAAI,CAAA;;AAChC,QAAMK,cAAc,MAAMR,UAAUI,IAAID,GAAGM,cAAc;AACzD,MAAIR,aAAa,EAAG,QAAO;IAACE;IAAIK;;AAChC,QAAME,eAAeF,YAAYG,OAAOC,wCAAAA;AACxC,QAAMC,4BAA4BH,aAAaI,QAAQC,CAAAA,OAAMA,GAAGN,cAAc;AAC9E,QAAMO,uBAAuB,MAAMhB,UAAUI,IAAIS,yBAAAA;AACjD,QAAMI,oBAAoB,IAAIzB,IAAI;OAAIgB;OAAgBQ;IAAsBF,QAAQpB,CAAAA,MAAKA,EAAEC,KAAK,CAAA;AAChG,QAAMuB,cAAc,MAAMlB,UAAUI,IAAI;OAAIa;GAAkB;AAC9D,QAAME,sBAAsBD,YAAYP,OAAOjB,CAAAA,MAAKuB,kBAAkBnB,IAAIJ,EAAEC,KAAK,CAAA;AACjF,SAAO;IAACQ;IAAIgB;;AACd,GAlB+B;AAoBxB,IAAMC,eAAe,8BAC1BpB,WACAH,MACAI,WAAmB,GACnBoB,WAAWpB,aAAQ;AAEnBC,WAASD,YAAY,GAAG,MAAM,6CAAA;AAC9BC,WAASmB,YAAY,GAAG,MAAM,6CAAA;AAC9BnB,WAASD,YAAYoB,UAAU,MAAM,oDAAA;AACrC,QAAMlB,KAAKD,UACR,MAAMF,UAAUI,IAAI;IAACP;GAAK,GAAGQ,KAAKC,kCAAAA,GACnC,MAAM,SAAST,IAAAA,YAAgB;AAEjC,MAAII,aAAa,EAAG,QAAO;IAACE;IAAI,CAAA;;AAChC,QAAMK,cAAc,MAAMR,UAAUI,IAAID,GAAGM,cAAc;AACzD,MAAIY,aAAa,EAAGnB,UAASd,iBAAiBe,GAAGM,gBAAgBD,WAAAA,GAAc,MAAM,yCAAyCX,IAAAA,EAAM;AACpI,MAAII,aAAa,EAAG,QAAO;IAACE;IAAIK;;AAChC,QAAME,eAAeF,YAAYG,OAAOC,wCAAAA;AACxC,QAAMC,4BAA4BH,aAAaI,QAAQC,CAAAA,OAAMA,GAAGN,cAAc;AAC9E,QAAMO,uBAAuB,MAAMhB,UAAUI,IAAIS,yBAAAA;AACjDX,WAASd,iBAAiByB,2BAA2BG,oBAAAA,GAAuB,MAAM,yDAAyDnB,IAAAA,EAAM;AACjJ,QAAMoB,oBAAoB,IAAIzB,IAAI;OAAIgB;OAAgBQ;IAAsBF,QAAQpB,CAAAA,MAAKA,EAAEC,KAAK,CAAA;AAChG,QAAMuB,cAAc,MAAMlB,UAAUI,IAAI;OAAIa;GAAkB;AAC9D,QAAME,sBAAsBD,YAAYP,OAAOjB,CAAAA,MAAKuB,kBAAkBnB,IAAIJ,EAAEC,KAAK,CAAA;AACjF,MAAIM,aAAa,EAAGC,UAASd,iBAC3B;OAAI6B;KACJE,mBAAAA,GACC,MAAM,yDAAyDtB,IAAAA,EAAM;AACxE,SAAO;IAACM;IAAIgB;;AACd,GA7B4B;AA+BrB,IAAMG,uBAAuB,wBAACC,kBAAAA;AACnC,QAAM,CAACC,KAAKhB,WAAAA,IAAee;AAC3B,SAAO;OAAIf;IAAagB;;AAC1B,GAHoC;AAK7B,IAAMC,wBAAwB,wBAACC,mBACpCA,eAAeZ,QAAQU,CAAAA,QAAOF,qBAAqBE,GAAAA,CAAAA,GADhB;AAG9B,IAAMG,gCAAgC,wBAACC,UAAAA;AAC5C,SAAOC,SAASD,MAAM,CAAA,GAAIE,wCAAAA;AAC5B,GAF6C;AAItC,IAAMC,iCAAiC,wBAACH,UAAAA;AAC7C,SAAOA,MAAM,CAAA,EAAGnB,eAAehB,IAAII,CAAAA,SAAQK,SACzC0B,MAAM,CAAA,EAAGvB,KAAKX,CAAAA,MAAKA,EAAEC,UAAUE,IAAAA,GAC/B,MAAM,mBAAmBA,IAAAA,EAAM,CAAA,EAC9Bc,OAAOqB,CAAAA,MAAK,CAACpB,yCAAyCoB,CAAAA,CAAAA;AAC3D,GAL8C;;;AC9E9C,SAASC,YAAAA,iBAAgB;AAEzB,SAASC,sBAAsB;AAE/B,SAASC,oBAAoB;AAC7B,SAASC,aAAAA,kBAAiB;;;ACL1B,SAC0BC,aAAaC,iBAChC;AAEP,SAASC,kBAAkB;AAEpB,IAAMC,yBAAyB,wBAACC,aAAAA;AACrC,QAAMC,WAAoC,CAAC;AAC3C,aAAWC,WAAWF,UAAU;AAC9B,QAAIG,WAAWD,OAAAA,GAAU;AACvB,YAAM,EAAEE,KAAI,IAAKF;AACjB,eAAS,CAACG,SAASC,MAAAA,KAAWC,OAAOC,QAAQN,QAAQO,SAAS,GAAuB;AACnFR,iBAASS,UAAUL,OAAAA,CAAAA,KAAaJ,SAASS,UAAUL,OAAAA,CAAAA,KAAa,MAAMM,YAAYL,MAAAA;AAClFL,iBAASS,UAAUN,IAAAA,CAAAA,KAAUH,SAASS,UAAUN,IAAAA,CAAAA,KAAU,MAAMO,YAAYL,MAAAA;MAC9E;IACF;EACF;AACA,SAAOL;AACT,GAZsC;;;ACNtC,SAEEW,eAAAA,cACAC,aACK;AACP,SAASC,gBAAgB;AAYlB,IAAMC,mBAAmB,wBAACC,UAAAA;AAC/B,SAAOC,SAASD,KAAAA,KAAU,cAAcA,SAAS,OAAOA,MAAME,aAAa;AAC7E,GAFgC;AAIzB,IAAMC,mBAAmB,wBAACH,UAAAA;AAC/B,SAAOC,SAASD,KAAAA,KAAU,cAAcA,SAAS,OAAOA,MAAMI,aAAa;AAC7E,GAFgC;AAIzB,IAAMC,oBAAoB,wBAACL,UAAAA;AAChC,MAAID,iBAAiBC,KAAAA,GAAQ;AAC3B,WAAO,CAACM,aAAYN,MAAME,QAAQ;EACpC,WAAWC,iBAAiBH,KAAAA,GAAQ;AAClC,WAAOM,aAAYN,MAAMI,QAAQ;EACnC,OAAO;AACL,UAAM,IAAIG,MAAM,sBAAA;EAClB;AACF,GARiC;AAU1B,IAAMC,iBAAiB,wBAACR,UAAAA;AAC7B,SAAOA,QAAQ,KAAK;IAAEE,UAAUO,MAAM,CAACT,KAAAA;EAAO,IAAI;IAAEI,UAAUK,MAAMT,KAAAA;EAAO;AAC7E,GAF8B;AAIvB,IAAMU,mBAAmB,wBAACV,UAAAA;AAC/B,MAAID,iBAAiBC,KAAAA,GAAQ;AAC3B,WAAO;MAAEI,UAAUK,MAAM,EAAE;IAAE;EAC/B;AACA,MAAIN,iBAAiBH,KAAAA,GAAQ;AAC3B,WAAO;MAAEI,UAAUJ,MAAMI;IAAS;EACpC;AACA,MAAI,OAAOJ,UAAU,UAAU;AAC7B,WAAO;MAAEI,UAAUK,MAAMT,KAAAA;IAAO;EAClC;AACA,QAAM,IAAIO,MAAM,oCAAA;AAClB,GAXgC;;;ACvChC,SAASI,gBAAgB;AAIlB,SAASC,yBAAyBC,OAAyBC,MAAY;AAK5E,QAAMC,OAAOC,SAASF,IAAAA;AACtB,MAAIG,QAASC,KAAKC,MAAMN,MAAM,CAAA,IAAKE,IAAAA,IAASA;AAC5C,QAAMK,SAA6B,CAAA;AACnC,QAAMC,YAAgC,CAAA;AAGtC,MAAIJ,UAAUJ,MAAM,CAAA,GAAI;AACtBI,aAASF;AACTM,cAAUC,KAAK;MAACT,MAAM,CAAA;MAAIK,KAAKK,IAAIN,QAAQ,GAAGJ,MAAM,CAAA,CAAE;KAAE;EAC1D;AAEA,WAASW,IAAIP,OAAOO,KAAKX,MAAM,CAAA,GAAIW,KAAKT,MAAM;AAC5C,QAAKS,IAAIT,OAAO,KAAMF,MAAM,CAAA,GAAI;AAC9BO,aAAOE,KAAK;QAACE;QAAGN,KAAKK,IAAIC,IAAIT,OAAO,GAAGF,MAAM,CAAA,CAAE;OAAE;IACnD,OAAO;AACLQ,gBAAUC,KAAK;QAACE;QAAGX,MAAM,CAAA;OAAG;IAC9B;EACF;AACA,SAAO;IAACO;IAAQC;;AAClB;AAxBgBT;;;ACJhB,SAASa,iBAAiB;AAKnB,SAASC,6BAA6BC,OAAyBC,eAAeC,UAAUC,SAAS,GAAC;AACvG,QAAMC,SAA6B,CAAA;AACnC,MAAIC,YAAgC;IAACL;;AAErC,WAASM,OAAOL,cAAcK,QAAQ,GAAGA,QAAQ;AAC/C,UAAMC,eAAmC,CAAA;AACzC,eAAWP,UAASK,WAAW;AAC7B,YAAM,CAACG,iBAAiBC,kBAAAA,IAAsBC,yBAAyBV,QAAOM,IAAAA;AAC9EF,aAAOO,KAAI,GAAIH,eAAAA;AACfD,mBAAaI,KAAI,GAAIF,kBAAAA;IACvB;AACAJ,gBAAYE;EACd;AAEA,aAAWP,UAASK,WAAW;AAC7B,aAASO,IAAIZ,OAAM,CAAA,GAAIY,KAAKZ,OAAM,CAAA,GAAIY,KAAK;AACzCR,aAAOO,KAAK;QAACC;QAAGA;OAAE;IACpB;EACF;AAEA,SAAOR,OAAOS,SAAS,CAACC,GAAGC,MAAMD,EAAE,CAAA,IAAKC,EAAE,CAAA,CAAE;AAC9C;AArBgBhB;;;ACLhB,SAASiB,cAAyB;AAClC,SAASC,wBAAwB;AACjC,SAASC,oCAAoCC,aAAAA,kBAAiB;AAI9D,eAAsBC,oBAAoBC,SAAuBC,aAAmB;AAClF,QAAMC,SAAS,MAAMF,QAAQG,eAAeC,IAAI;IAACJ,QAAQK;GAAK;AAC9D,MAAIC,eAAeC,mCAAmCL,OAAOM,GAAG,CAAA,GAAI,MAAM,kCAAkCR,QAAQK,IAAI,IAAI;IAAEI,UAAU;EAAK,CAAA;AAC7I,SAAOH,aAAaI,QAAQT,aAAa;AACvC,QAAIU,WAAwBL,aAAaM;AACzC,QAAIC,kBAAkBP,aAAaI,QAAQ;AAC3C,eAAW,CAACI,MAAMC,SAAAA,KAAaC,WAAUC,QAAO,GAAI;AAClD,YAAMC,0BAA0BZ,aAAaI,QAAQK;AACrD,UAAIG,2BAA2BjB,eAAeiB,2BAA2BL,iBAAiB;AACxFA,0BAAkBK;AAClBP,mBAAWQ,OAAOb,aAAac,YAAYZ,GAAGM,IAAAA,GAAO,MAAM,gCAAgCA,IAAAA,aAAiBR,aAAaI,KAAK,EAAE;MAClI;IACF;AACA,UAAM,CAACW,QAAAA,IAAY,MAAMrB,QAAQG,eAAeC,IAAI;MAClDe,OAAOR,UAAU,MAAM,yCAAyCV,WAAAA,MAAiBY,eAAAA,IAAmBS,iBAAiBhB,cAAc,EAAA,CAAA,EAAK;KAAE;AAC5IA,mBAAeC,mCAAmCc,UAAU,MAAM,6BAA6BV,QAAAA,IAAY;MAAEF,UAAU;IAAK,CAAA;AAC5H,QAAIH,aAAaI,UAAUT,aAAa;AACtC;IACF;AACA,QAAIK,aAAaI,QAAQT,aAAa;AACpC,YAAM,IAAIsB,MAAM,gBAAgBtB,WAAAA,+CAA0DD,QAAQK,IAAI,GAAG;IAC3G;EACF;AACA,SAAOC,aAAakB;AACtB;AAxBsBzB;;;ACJtB,SAAS0B,uBAAuB;AAIhC,SAASC,uBAAuBC,qBAAqB;AAI9C,IAAMC,oBAA4B;AAiBlC,IAAMC,4BAAoC;AAU1C,IAAMC,wBAAwBC,sBAA2CF,yBAAAA;AACzE,IAAMG,wBAAwBC,gBAAgBC,OAA4BJ,qBAAAA;AAK1E,IAAMK,uCAAuC,wBAACC,UAAAA;AACnD,SAAON,sBAAsBM,KAAAA,KAAUC,cAAcD,KAAAA;AACvD,GAFoD;AAG7C,IAAME,uCAAuCL,gBAAgBC,OAA6CC,oCAAAA;;;AN5BjH,eAAsBI,4BACpBC,SACAC,OAAuB;AAGvB,QAAMC,gBAAgB,MAAMC,oBAAoBH,SAASC,MAAM,CAAA,CAAE;AACjE,QAAMG,YAAYH,MAAM,CAAA,IAAKA,MAAM,CAAA,IAAK;AAExC,MAAII,SAA0CC;AAE9C,MAAIF,cAAc,GAAG;AACnB,UAAMG,OAAO,MAAMJ,oBAAoBH,SAASC,MAAM,CAAA,CAAE;AACxD,UAAM,CAAA,EAAGO,QAAAA,IAAY,MAAMC,aAAaT,QAAQU,gBAAgBH,IAAAA;AAChE,UAAMI,WAA0C,CAAC;AACjD,eAAW,CAACC,SAASC,OAAAA,KAAYC,OAAOC,QAAQC,uBAAuBR,QAAAA,CAAAA,GAAY;AACjFG,eAASC,OAAAA,IAAsBK,eAAeJ,OAAAA;IAChD;AACAR,aAAS;MACPa,QAAQC;MAA2BZ,MAAMP,QAAQoB;MAAMC,UAAU;MAAIV;IACvE;EACF,OAAO;AAEL,UAAMW,OAAQC,WAAkBC,QAAQpB,SAAAA;AACxCqB,IAAAA,UAASH,SAAS,IAAI,MAAM,sBAAsBlB,SAAAA,oBAA6BmB,WAAUG,KAAK,IAAA,CAAA,EAAO;AAErG,UAAM,CAACC,aAAAA,IAAiB,MAAM3B,QAAQ4B,kBAAkBC,IAAI;MAAC3B;KAAc;AAC3E,QAAI4B,aAAaH,aAAAA,GAAgB;AAC/BtB,eAASsB;IACX,OAAO;AAEL,YAAMI,YAAYC,6BAA6B/B,OAAOqB,OAAO,CAAA;AAC7D,YAAMW,WAAWF,UAAUG,IAAIC,CAAAA,aAAYpC,4BACzCC,SACAmC,QAAAA,CAAAA;AAEF,YAAMC,aAAa,MAAMC,QAAQC,IAAIL,QAAAA;AAGrC,YAAMM,iBAA0C,CAAC;AACjD,iBAAWC,aAAaJ,YAAY;AAClC,mBAAW,CAACxB,SAASC,OAAAA,KAAYC,OAAOC,QAAQyB,UAAU7B,QAAQ,GAAG;AACnE4B,yBAAe3B,OAAAA,KAAuB2B,eAAe3B,OAAAA,KAAuB,MAAM6B,kBAAkB5B,OAAAA;QACtG;MACF;AAEA,YAAMF,WAA0C,CAAC;AACjD,iBAAW,CAACC,SAASC,OAAAA,KAAYC,OAAOC,QAAQwB,cAAAA,GAAiB;AAC/D5B,iBAASC,OAAAA,IAAsBK,eAAeJ,OAAAA;MAChD;AAEAR,eAAS;QACPa,QAAQC;QAA2BZ,MAAML;QAAemB,UAAUjB;QAAWO;MAC/E;AAEA,YAAMX,QAAQ4B,kBAAkBc,OAAO;QAACrC;OAAO;IACjD;EACF;AAEA,QAAMsC,cAAc,MAAMC,eAAeC,eAAexC,MAAAA;AACxD,SAAOsC;AACT;AA5DsB5C;;;AOjBtB,SAAS+C,iBAAiB;AAC1B,SAASC,iBAAiB;AAC1B,SAASC,sCAAAA,2CAA0C;AAOnD,eAAsBC,eACpBC,SAAkC;AAElC,QAAMC,aAAa,MAAMD,QAAQE,eAAeC,IAAI;IAACH,QAAQI;GAAK;AAClE,QAAMC,mBAAmBC,oCAAmCL,WAAWM,GAAG,CAAA,GAAI,MAAM,kCAAkCP,QAAQI,IAAI,IAAI;IAAEI,UAAU;EAAK,CAAA;AACvJ,QAAMC,aAAaC,UAAUV,QAAQW,UAAU,IAAIC,KAAKC,IAAIR,iBAAiBS,QAAQd,QAAQW,aAAa,GAAG,CAAA,IAAK;AAClH,QAAMI,SAASC,6BAA6B;IAACP;IAAYJ,iBAAiBS;GAAM;AAChF,QAAMG,YAAY,MAAMC,QAAQC,IAAIJ,OAAOK,IAAIC,CAAAA,UAASC,4BAA4BtB,SAASqB,KAAAA,CAAAA,CAAAA;AAC7F,QAAME,WAA6C,CAAC;AACpD,WAASC,WAAWP,WAAW;AAC7B,eAAW,CAACQ,SAASC,OAAAA,KAAYC,OAAOC,QAAQJ,QAAQD,QAAQ,GAAG;AACjE,YAAMM,eAAeC,UAAUL,SAAS,MAAM,oBAAoBA,OAAAA,EAAS;AAC3EF,eAASM,YAAAA,KAAiBN,SAASM,YAAAA,KAAiB,MAAME,kBAAkBL,OAAAA;IAC9E;EACF;AACA,SAAOH;AACT;AAhBsBxB;;;ACTtB,SAASiC,gBAAgB;AACzB,OAAOC,SAAO;;;ACFd,OAAOC,QAAO;;;ACAP,IAAMC,cAAc,wBAACC,aAAAA;AAC1B,SACEA,aAAa,eACVA,aAAa,eACbA,aAAa,SACbA,SAASC,SAAS,YAAA;AAEzB,GAP2B;;;ACEpB,IAAMC,SAAS,wBAACC,MAAcC,SAAAA;AACnC,QAAMC,SAASC,YAAYH,IAAAA,IAAQ,SAAS;AAC5C,SAAO,GAAGE,MAAAA,MAAYF,IAAAA,IAAQC,IAAAA;AAChC,GAHsB;;;ACFf,IAAMG,OAAO;;;ACApB,SAASC,SAAS;AAWX,IAAMC,uBAAuBD,EACjCE,OAAM,EACNC,UAAUC,CAAAA,MAAKA,EAAEC,KAAI,EAAGC,WAAW,QAAQ,GAAA,CAAA,EAC3CC,OACCH,CAAAA,MAAK;EAAC;EAAI;EAAI;EAAI;EAAI;EAAII,SAASJ,EAAEK,MAAM,GAAA,EAAKC,MAAM,GACtD;EAAEC,SAAS;AAAqD,CAAA,EAChEC,SAAS,wBAAA;;;AJbN,IAAMC,kBAAkBC,GAAEC,OAAO;EACtCC,UAAUC,qBAAqBC,SAAQ,EAAGC,SAAS,6BAAA;EACnDC,MAAMN,GAAEO,OAAM,EAAGC,QAAQ,WAAA,EAAaH,SAAS,kBAAA;EAC/CI,MAAMT,GAAEU,OAAOC,OAAM,EAAGH,QAAQ,IAAA,EAAMH,SAAS,kBAAA;AACjD,CAAA;;;AKRA,OAAOO,QAAO;AAEP,IAAMC,kBAAkBD,GAAEE,OAAO;EAAEC,MAAMH,GAAEI,OAAOC,OAAM,EAAGC,QAAQ,GAAA,EAAMC,SAAS,0BAAA;AAA4B,CAAA;;;ACFrH,OAAOC,QAAO;AAEP,IAAMC,oBAAoBD,GAAEE,OAAO;EACxCC,IAAIH,GAAEI,OAAM,EAAGC,SAAQ,EACpBC,SAAS,yGAAA;AACd,CAAA;;;ACLA,OAAOC,QAAO;AAEP,IAAMC,yBAAyBD,GAAEE,OAAO;;EAE7CC,KAAKH,GAAEI,OAAM,EAAGC,SAAQ,EAAGC,SAAS,cAAA;AACtC,CAAA;AACO,IAAMC,wBAAwBP,GAAEE,OAAO;EAC5CM,WAAWR,GAAEI,OAAM,EAAGC,SAAQ,EAAGC,SAAS,mBAAA;EAC1CG,eAAeT,GAAEI,OAAM,EAAGC,SAAQ,EAAGC,SAAS,uBAAA;AAChD,CAAA;AACO,IAAMI,kBAAkBV,GAAEE,OAAO;EACtCS,SAASX,GAAEI,OAAM,EAAGC,SAAQ,EAAGC,SAAS,cAAA;EACxCM,QAAQL,sBAAsBF,SAAQ,EAAGC,SAAS,+BAAA;EAClDO,SAASZ,uBAAuBI,SAAQ,EAAGC,SAAS,iCAAA;AACtD,CAAA;;;ACdA,OAAOQ,QAAO;AAIP,IAAMC,uBAAuBC,GAAEC,OAAO;;EAE3CC,iBAAiBF,GAAEG,OAAOC,OAAM,EAAGC,SAAQ,EAAGC,SAAS,qCAAA;;EAEvDC,UAAUP,GAAEG,OAAOC,OAAM,EAAGI,QAAQ,CAAA,EAAGF,SAAS,yCAAA;EAChDG,UAAUC,qBAAqBL,SAAQ,EAAGC,SAAS,kCAAA;;EAEnDK,MAAMX,GAAEG,OAAOC,OAAM,EAAGI,QAAQ,IAAA,EAAMF,SAAS,uBAAA;EAC/CM,4BAA4BZ,GAAEa,QAAO,EAAGR,SAAQ,EAAGC,SAAS,gFAAA;;EAE5DQ,eAAed,GAAEe,OAAM,EAAGV,SAAQ,EAAGC,SAAS,kCAAA;AAChD,CAAA;;;ACfA,SAASU,aAAAA,YAAWC,mBAAmB;AACvC,OAAOC,QAAO;AASP,IAAMC,iBAAiB,wBAACC,WAAAA;AAC7B,MAAIC,YAAYD,MAAAA,EAAS,QAAO;AAChC,SACEE,WAAUF,OAAOG,gBAAgB,KAC9BD,WAAUF,OAAOI,QAAQ,KACzBF,WAAUF,OAAOK,MAAM,KACvBH,WAAUF,OAAOM,QAAQ,KACzBJ,WAAUF,OAAOO,QAAQ;AAEhC,GAT8B;AAWvB,IAAMC,oBAAoBC,GAAEC,OAAO;;EAExCP,kBAAkBM,GAAEE,OAAM,EAAGC,IAAI,CAAA,EAAGC,SAAQ,EAAGC,SAAS,2BAAA;EACxDV,UAAUK,GAAEE,OAAM,EAAGC,IAAI,CAAA,EAAGC,SAAQ,EAAGC,SAAS,uBAAA;EAChDT,QAAQI,GAAEE,OAAM,EAAGC,IAAI,CAAA,EAAGC,SAAQ,EAAGC,SAAS,gBAAA;EAC9CR,UAAUG,GAAEE,OAAM,EAAGC,IAAI,CAAA,EAAGC,SAAQ,EAAGC,SAAS,kBAAA;EAChDP,UAAUE,GAAEE,OAAM,EAAGC,IAAI,CAAA,EAAGC,SAAQ,EAAGC,SAAS,kBAAA;AAClD,CAAA;;;AC5BA,OAAOC,QAAO;AAIP,IAAMC,sBAAsBC,GAAEC,OAAO;EAC1CC,OAAOC,kBAAkBC,SAAQ,EAAGC,SAAS,6CAAA;EAC7CC,MAAMN,GAAEO,OAAM,EAAGH,SAAQ,EAAGC,SAAS,kCAAA;AACvC,CAAA,EAAGA,SAAS,+BAAA;;;ACPZ,OAAOG,QAAO;AAEP,IAAMC,4BAA4BD,GAAEE,OAAO;;EAEhDC,cAAcH,GAAEI,OAAM,EAAGC,SAAQ,EAAGC,SAAS,4CAAA;AAC/C,CAAA;AAEO,IAAMC,wBAAwBP,GAAEE,OAAO;;EAE5CM,MAAMP,0BAA0BI,SAAQ,EAAGC,SAAS,6BAAA;AACtD,CAAA,EAAGA,SAAS,iCAAA;;;AZEZ,IAAMG,YAAYC,OAAOC,KAAKC,QAAAA;AAEvB,IAAMC,wBAAwBC,IAAEC,OAAO;EAC5CC,QAAQF,IAAEG,QAAO,EAAGC,QAAQ,KAAA,EAAOC,SAAS,+BAAA;EAC5CC,UAAUN,IAAEO,KAAKZ,SAAAA,EAAWS,QAAQ,MAAA,EAAQC,SAAS,2BAAA;AACvD,CAAA,EAAGA,SAAS,kCAAA;AAEL,IAAMG,eAAeR,IAAEC,OAAO;EACnC,GAAGF,sBAAsBU;EACzBC,KAAKC,gBAAgBP,QAAQO,gBAAgBC,MAAM,CAAC,CAAA,CAAA,EAAIP,SAAS,gCAAA;EACjEQ,KAAKC,gBAAgBV,QAAQU,gBAAgBF,MAAM,CAAC,CAAA,CAAA,EAAIP,SAAS,mCAAA;EACjEU,OAAOC,kBAAkBZ,QAAQY,kBAAkBJ,MAAM,CAAC,CAAA,CAAA,EAAIP,SAAS,6BAAA;EACvEY,KAAKC,gBAAgBd,QAAQc,gBAAgBN,MAAM,CAAC,CAAA,CAAA,EAAIP,SAAS,uCAAA;EACjEc,UAAUC,qBAAqBhB,QAAQgB,qBAAqBR,MAAM,CAAC,CAAA,CAAA,EAAIP,SAAS,gCAAA;EAChFgB,SAASC,oBAAoBlB,QAAQkB,oBAAoBV,MAAM,CAAC,CAAA,CAAA,EAAIP,SAAS,+BAAA;EAC7EkB,WAAWC,sBAAsBpB,QAAQoB,sBAAsBZ,MAAM,CAAC,CAAA,CAAA,EAAIP,SAAS,6BAAA;AACrF,CAAA;AAIO,IAAMoB,mBAAmB,6BAAcjB,aAAaI,MAAM,CAAC,CAAA,GAAlC;;;AahChC,SAASc,YAAAA,iBAAgB;AAEzB,SAASC,SAAAA,cAAa;AAEtB,SAASC,2BAA2B;AACpC,SAASC,kBAAAA,uBAAsB;AAQ/B,SAASC,8BAA8B;AAEvC,eAAsBC,iBACpBC,OACAC,iBACAC,kBACAC,QACAC,KACAC,KACAC,MACAC,OAA8BC,wBAAsB;AAEpD,MAAIF,SAASG,UAAaC,MAAMC,QAAQR,MAAAA,GAAS;AAC/C,UAAM,IAAIS,MAAM,0CAAA;EAClB;AAEA,QAAMC,uBAAsD;IAC1Db;IACAO,MAAM;MACJO,MAAMC,OAAMR,KAAKO,IAAI;MACrBE,UAAUD,OAAMR,KAAKS,QAAQ;MAC7BC,UAAUF,OAAMR,KAAKU,QAAQ;MAC7BC,UAAUH,OAAMR,KAAKW,QAAQ;IAC/B;IACAd;IACAC;EACF;AAEA,QAAMc,iBAAiB,MAAMC,gBAAeC,OAAOpB,eAAAA;AACnD,QAAMqB,SAAmB,CAAA;AACzB,aAAWC,gBAAgBJ,gBAAgB;AACzCG,WAAOE,KAAK,WAAWD,YAAAA,EAAc;EACvC;AAEA,QAAME,SAAiF;IACrF,GAAGZ;IACHP,MAAMA,SAASI,MAAMC,QAAQR,MAAAA,IAAUuB,UAASvB,OAAOwB,GAAG,CAAA,GAAIC,OAAAA,IAAWzB,OAAOyB;EAClF;AAEA,MAAIN,OAAOO,SAAS,GAAG;AACrBJ,WAAOH,SAASA;EAClB;AAEA,QAAM,CAACQ,IAAIC,UAAAA,IAAc,MAAM,IAAIC,oBAAAA,EAChCP,OAAOA,MAAAA,EACPQ,KAAK;IAAEC,aAAa,CAAA;EAAG,CAAA,EACvBC,SAAS;OAAIlC;OAAoBC;GAAiB,EAClDkC,QAAQ1B,MAAMC,QAAQR,MAAAA,IAAUA,SAAS;IAACA;GAAO,EACjDkC,MAAK;AAER,SAAO;IAAC,MAAMjB,gBAAekB,eAAeR,EAAAA;IAAK,MAAMV,gBAAekB,eAAeP,UAAAA;;AACvF;AAjDsBhC;;;ACdtB,SAASwC,SAAAA,cAAa;AACtB,SAASC,uBAAAA,4BAA2B;AACpC,SAASC,kBAAAA,uBAAsB;AAQ/B,SAASC,0BAAAA,+BAA8B;AAEvC,eAAsBC,yBACpBC,OACAC,iBACAC,kBACAC,KACAC,KACAC,MACAC,OAA8BC,yBAAsB;AAEpD,QAAMC,uBAAsD;IAC1DR;IACAM,MAAM;MACJG,MAAMC,OAAMJ,KAAKG,IAAI;MACrBE,UAAUD,OAAMJ,KAAKK,QAAQ;MAC7BC,UAAUF,OAAMJ,KAAKM,QAAQ;MAC7BC,UAAUH,OAAMJ,KAAKO,QAAQ;IAC/B;IACAV;IACAC;EACF;AAEA,QAAMU,iBAAiB,MAAMC,gBAAeC,OAAOf,eAAAA;AACnD,QAAMgB,SAAmB,CAAA;AACzB,aAAWC,gBAAgBJ,gBAAgB;AACzCG,WAAOE,KAAK,WAAWD,YAAAA,EAAc;EACvC;AAEA,QAAME,SAAiF;IACrF,GAAGZ;IACHH;EACF;AAEA,MAAIY,OAAOI,SAAS,GAAG;AACrBD,WAAOH,SAASA;EAClB;AAEA,QAAM,CAACK,IAAIC,UAAAA,IAAc,MAAM,IAAIC,qBAAAA,EAChCJ,OAAOA,MAAAA,EACPK,KAAK;IAAEC,aAAa,CAAA;EAAG,CAAA,EACvBC,SAAS;OAAI1B;OAAoBC;GAAiB,EAClD0B,MAAK;AAER,SAAO;IAAC,MAAMb,gBAAec,eAAeP,EAAAA;IAAK,MAAMP,gBAAec,eAAeN,UAAAA;;AACvF;AA3CsBxB;;;ACbtB,SAAS+B,aAAa;AAEtB,SAASC,aAAAA,kBAAiB;AAE1B,SAASC,kBAAAA,uBAAsB;AAK/B,IAAMC,gCAAgC;AACtC,IAAMC,iCAAiC;AA0BhC,IAAMC,8BAA8B,8BACzCC,QACAC,aACAC,YAAAA;AAEA,QAAM,EAAEC,UAAUC,cAAcP,+BAA+BQ,OAAOC,eAAeR,+BAA8B,IAAKI,WAAW,CAAC;AACpI,QAAMK,WAAW,MAAMC,gBAAeC,KAAKR,WAAAA;AAC3CC,WAASQ,QAAQC,IAAI,kCAA6BJ,UAAU,IAAA;AAC5D,MAAIJ,WAAW;AACf,SAAO,MAAM;AACX,UAAMS,KAAK,MAAMZ,OAAOa,kBAAkBN,QAAAA,KAAaO;AACvD,QAAIC,WAAUH,EAAAA,GAAK;AACjBV,eAASQ,QAAQC,IAAI,oCAA6BJ,UAAU,IAAA;AAC5D,aAAOK;IACT,OAAO;AACLT;AACA,UAAIA,WAAWC,aAAa;AAC1BF,iBAASQ,QAAQM,MAAM,gDAAsCZ,WAAAA,WAAsB;AACnF,cAAM,IAAIa,MAAM,eAAeV,QAAAA,wBAAgCH,WAAAA,WAAsB;MACvF,OAAO;AACLF,iBAASQ,QAAQC,IAAI,oDAA6CR,QAAAA,iBAAyB,IAAA;AAC3F,cAAME,MAAMC,YAAAA;MACd;IACF;EACF;AACF,GAzB2C;;;ACpC3C,SAASY,YAAAA,iBAAgB;AAGzB,SAASC,0BAA0BC,mCAAmC;AAMtE,SAASC,uBAAuBC,4CAAAA,iDAAgD;AAEzE,IAAMC,wBAAwB,8BACnCC,WACAC,SAAAA;AAEA,SAAQ,MAAMC,4BACZF,WACAC,MACAE,yCAAAA;AAEJ,GATqC;AAW9B,IAAMC,qBAAqB,8BAChCJ,WACAC,SAAAA;AAEA,SAAO,MAAMI,yBACXL,WACAC,MACAE,yCAAAA;AAEJ,GATkC;AAW3B,IAAMG,6BAA6B,wBAACC,wBAAAA;AACzC,QAAM,CAACC,IAAIC,UAAAA,IAAcF;AACzB,SAAO;OAAIE;IAAYD;;AACzB,GAH0C;AAKnC,IAAME,8BAA8B,wBAACC,yBAC1CA,qBAAqBC,QAAQJ,CAAAA,OAAMF,2BAA2BE,EAAAA,CAAAA,GADrB;AAGpC,IAAMK,gCAAgC,8BAC3Cb,WACAC,SAAAA;AAEA,QAAMM,sBAAsB,MAAMR,sBAAsBC,WAAWC,IAAAA;AACnE,MAAI,CAACM,qBAAqB;AACxB,WAAOO;EACT;AACA,QAAM,CAACC,aAAaC,QAAAA,IAAYT;AAChC,QAAMU,WAAWF,YAAYG,UAAU,CAAA,GAAIC,OAAOC,CAAAA,cAAaA,UAAUC,WAAW,UAAA,CAAA;AACpF,QAAMC,mBAA2D,CAAA;AACjE,aAAWC,UAAUN,SAAS;AAC5B,UAAM,CAACO,MAAMvB,KAAAA,IAAQsB,OAAOE,MAAM,GAAA;AAClC,QAAID,SAAS,YAAY;AACvB,YAAME,kBAAkBV,SAASW,KAAKC,CAAAA,YAAWA,QAAQC,UAAU5B,KAAAA;AACnE,UAAI6B,sBAAsBJ,eAAAA,GAAkB;AAC1CJ,yBAAiBS,KAAKL,eAAAA;MACxB;IACF;EACF;AACA,MAAIT,QAAQe,WAAWV,iBAAiBU,QAAQ;AAC9C,WAAO;MAACjB;MAAaO;;EACvB;AACA,SAAOR;AACT,GAxB6C;AA0BtC,IAAMmB,6BAA6B,8BACxCjC,WACAC,SAAAA;AAEA,SAAOiC,UAAS,MAAMrB,8BAA8Bb,WAAWC,IAAAA,GAAO,MAAM,kBAAA;AAC9E,GAL0C;;;ACnE1C,SAASkC,kBAAAA,uBAAsB;AAIxB,SAASC,0BAA0B,CAACC,aAAaC,QAAAA,GAA8B;AACpF,QAAMC,mBAAmBC,gBAAeC,gBAAgBJ,WAAAA;AACxD,QAAMK,mBAAmBC,KAAKC,UAAUL,gBAAAA,EAAkBM;AAC1D,QAAMC,gBAAgBN,gBAAeC,gBAAgBH,QAAAA;AACrD,SAAOQ,cAAcC,OAAO,CAACC,KAAaC,YAAYD,MAAML,KAAKC,UAAUK,OAAAA,EAASJ,QAAQ,CAAA,IAAKH;AACnG;AALgBN;;;ACJhB,SAASc,UAAAA,eAAyB;;;ACA3B,SAASC,eAAeC,WAAiB;AAC9C,QAAMC,QAAQD,UAAUE,MAAM,GAAA;AAC9B,MAAID,MAAME,SAAS,GAAG;AACpB,UAAM,IAAIC,MAAM,6BAA6BJ,SAAAA,EAAW;EAC1D;AACA,SAAO;IAACC,MAAM,CAAA;IAAIA,MAAMI,MAAM,CAAA;;AAChC;AANgBN;AAQT,SAASO,gBAAgBC,YAAoB;AAClD,SAAOA,WAAWC,IAAIC,CAAAA,OAAMV,eAAeU,EAAAA,CAAAA;AAC7C;AAFgBH;;;ADFT,SAASI,iCAAiCC,aAAoC;AACnF,QAAMC,oBAAoBC,gBAAgBF,YAAYG,UAAU,CAAA,CAAE,EAAEC,OAAOC,CAAAA,OAAMA,GAAG,CAAA,MAAO,SAAA;AAC3F,SAAOJ,kBAAkBK,IAAID,CAAAA,OAAME,QAAOF,GAAG,CAAA,EAAG,CAAA,GAAI,IAAA,CAAA;AACtD;AAHgBN;AAKT,SAASS,4BAA4B,CAACR,aAAaS,QAAAA,GAA8B;AACtF,QAAMC,SAASX,iCAAiCC,WAAAA;AAChD,QAAMW,mBAAmBF,SAASL,OAAOQ,CAAAA,YAAWF,OAAOG,SAASD,QAAQE,KAAK,CAAA;AACjF,SAAOH;AACT;AAJgBH;;;AEVhB,SAASO,SAASC,2BAA2B;AAMtC,SAASC,4BAA4B,CAACC,aAAaC,QAAAA,GAA8B;AACtF,QAAMC,wBAAwBC,0BAA0B;IAACH;IAAaC;GAAS;AAC/E,SAAOG,QAAQC,oBAAoBC,mBAAmBC,OAAOL,qBAAAA,CAAAA;AAC/D;AAHgBH;AAKT,SAASS,uBAAuBC,qBAAwC;AAC7E,QAAMC,mBAAmBC,4BAA4BF,mBAAAA;AACrD,QAAMG,SAASF,iBAAiBG,SAAS;AACzC,QAAMC,aAAaL,oBAAoB,CAAA,EAAGM,UAAUF;AACpD,SAAOT,QAAQL,4BAA4BU,mBAAAA,IACvCJ,oBAAoBW,iBAAiBT,OAAOK,MAAAA,IAC5CP,oBAAoBY,sBAAsBV,OAAOO,UAAAA,IACjDT,oBAAoBa,oBAAoBX,OAAOG,iBAAiBG,MAAM,CAAA;AAC5E;AARgBL;;;ACZhB,SAASW,YAAAA,iBAAgB;AACzB,SAASC,YAAAA,iBAAgB;AACzB,SAASC,UAAAA,eAAyB;AAGlC,SAASC,gDAAgD;AAElD,IAAMC,qCAAqC,wBAACC,YAAAA;AACjD,QAAMC,SAASD,QACZE,OAAOC,CAAAA,QAAOA,IAAIC,WAAW,UAAA,CAAA,EAC7BC,IAAIF,CAAAA,QAAOA,IAAIG,MAAM,GAAA,EAAK,CAAA,CAAE;AAC/B,SAAOC,UAASN,QAAQO,CAAAA,MAAKC,QAAOD,CAAAA,CAAAA;AACtC,GALkD;AAO3C,IAAME,kCAAkC,wBAACV,YAAAA;AAC9C,QAAMC,SAASD,QACZE,OAAOC,CAAAA,QAAOA,IAAIC,WAAW,UAAA,CAAA,EAC7BC,IAAIF,CAAAA,QAAOA,IAAIG,MAAM,GAAA,EAAK,CAAA,CAAE;AAC/B,QAAMK,WAAWJ,UAASN,QAAQO,CAAAA,MAAKC,QAAOD,CAAAA,CAAAA;AAC9CI,EAAAA,UAASD,SAASE,WAAWZ,OAAOY,QAAQ,MAAM,yBAAA;AAClD,SAAOF;AACT,GAP+C;AASxC,IAAMG,2BAA2B,wBAACC,OAAAA;AACvC,QAAM,CAACC,IAAIC,QAAAA,IAAYF;AACvB,QAAM,EAAEG,OAAM,IAAKF;AACnB,QAAMf,SAASiB,SAASnB,mCAAmCmB,MAAAA,IAAU,CAAA;AACrE,SAAOD,SACJf,OAAOiB,CAAAA,MAAKlB,OAAOmB,SAASD,EAAEE,KAAK,CAAA,EACnCnB,OAAOoB,wCAAAA;AACZ,GAPwC;AASjC,IAAMC,wBAAwB,wBAACR,OAAAA;AACpC,QAAM,CAACC,IAAIC,QAAAA,IAAYF;AACvB,QAAM,EAAEG,OAAM,IAAKF;AACnB,QAAMf,SAASiB,SAASnB,mCAAmCmB,MAAAA,IAAU,CAAA;AACrE,QAAMP,WAAWM,SACdf,OAAOiB,CAAAA,MAAKlB,OAAOmB,SAASD,EAAEE,KAAK,CAAA,EACnCnB,OAAOoB,wCAAAA;AACVV,EAAAA,UAASD,SAASE,WAAWZ,OAAOY,QAAQ,MAAM,yBAAA;AAClD,SAAOF;AACT,GATqC;;;AChCrC,SAASa,qBAAqB;AAC9B,SAASC,YAAAA,iBAAgB;AACzB,SAASC,0BAA0B;AAEnC,SAASC,kBAAAA,uBAAsB;AAG/B,eAAsBC,gBAAgBC,IAA6BC,QAAuB;AACxFC,EAAAA,UAASF,GAAGG,SAASF,OAAOG,SAAS,MAAM,wDAAA;AAC3C,QAAMC,WAAWC,gBAAgBN,EAAAA;AACjCK,WAASE,YAAY;IAACN,OAAOG;;AAC7BC,WAASG,kBAAkB;IAACP,OAAOQ,gBAAgB;;AACnD,QAAMC,OAAO,MAAMC,gBAAeD,KAAKL,QAAAA;AACvC,QAAMO,YAAYC,cAAcH,IAAAA;AAChC,QAAM,CAACI,SAAAA,IAAa,MAAMb,OAAOc,KAAKH,SAAAA;AACtCP,WAASW,cAAc;IAACC,mBAAmBH,SAAAA;;AAC3C,SAAOT;AACT;AAVsBN;;;ACPtB,SAASmB,gBAAgB;;;ACAlB,IAAMC,oBAAoB;AAE1B,IAAMC,aAAa;EAAEC,UAAU;AAAO;AAEtC,IAAMC,eAAe;EAAEC,SAAS;EAAOC,KAAK;AAAM;AAElD,IAAMC,iBAAiB;EAAEC,WAAW;EAAKF,KAAK;AAAI;AAElD,IAAMG,gBAAgB;EAAED,WAAW;EAAKF,KAAK;AAAI;AAEjD,IAAMI,sBAAsB,KAAKT,iBAAAA,IAAqBC,WAAWC,QAAQ,IAAIC,aAAaE,GAAG,IAAIC,eAAeD,GAAG;;;ADDnH,IAAMK,kCAAkC,wBAACC,iBAAAA;AAC9C,QAAMC,SAASC,SAASC,WAAWH,cAAcI,mBAAAA;AACjD,SAAOH;AACT,GAH+C;","names":["filterAs","assertEx","asTransactionBoundWitnessWithStorageMeta","isBlockBoundWitnessWithStorageMeta","isTransactionBoundWitnessWithStorageMeta","allHashesPresent","hashes","payloads","payloadHashes","Set","map","p","_hash","every","hash","has","tryHydrateBlock","archivist","maxDepth","assertEx","bw","get","find","isBlockBoundWitnessWithStorageMeta","undefined","blkPayloads","payload_hashes","transactions","filter","isTransactionBoundWitnessWithStorageMeta","transactionsPayloadHashes","flatMap","tx","transactionsPayloads","allPayloadsHashes","allPayloads","allPayloadsFiltered","hydrateBlock","minDepth","flattenHydratedBlock","hydratedBlock","blk","flattenHydratedBlocks","hydratedBlocks","transactionsFromHydratedBlock","block","filterAs","asTransactionBoundWitnessWithStorageMeta","blockPayloadsFromHydratedBlock","x","assertEx","PayloadBuilder","isAnyPayload","StepSizes","hexToBigInt","toAddress","isTransfer","netBalancesForPayloads","payloads","balances","payload","isTransfer","from","address","amount","Object","entries","transfers","toAddress","hexToBigInt","hexToBigInt","toHex","isObject","isNegativeBigInt","value","isObject","negative","isPositiveBigInt","positive","parseSignedBigInt","hexToBigInt","Error","toSignedBigInt","toHex","toPositiveBigInt","stepSize","calculateFramesFromRange","range","step","size","stepSize","start","Math","trunc","fitted","remaining","push","min","i","StepSizes","deepCalculateFramesFromRange","range","startingStep","StepSizes","length","fitted","remaining","step","newRemaining","newFittedFrames","newRemainingFrames","calculateFramesFromRange","push","i","toSorted","a","b","asHash","toSafeJsonString","asBlockBoundWitnessWithStorageMeta","StepSizes","hashFromBlockNumber","context","blockNumber","result","chainArchivist","get","head","currentBlock","asBlockBoundWitnessWithStorageMeta","at","required","block","jumpHash","previous","jumpBlockNumber","step","stepSize","StepSizes","entries","possibleJumpBlockNumber","asHash","step_hashes","newBlock","toSafeJsonString","Error","_hash","AsObjectFactory","isPayloadOfSchemaType","isStorageMeta","StepSummarySchema","BalancesStepSummarySchema","isBalancesStepSummary","isPayloadOfSchemaType","asBalancesStepSummary","AsObjectFactory","create","isBalancesStepSummaryWithStorageMeta","value","isStorageMeta","asBalancesStepSummaryWithStorageMeta","balanceStepSummaryFromRange","context","range","frameHeadHash","hashFromBlockNumber","frameSize","result","undefined","hash","payloads","hydrateBlock","chainArchivist","balances","address","balance","Object","entries","netBalancesForPayloads","toSignedBigInt","schema","BalancesStepSummarySchema","head","stepSize","step","StepSizes","indexOf","assertEx","join","summaryResult","summaryRepository","get","isAnyPayload","subRanges","deepCalculateFramesFromRange","promises","map","subRange","subResults","Promise","all","bigIntBalances","subResult","parseSignedBigInt","insert","finalResult","PayloadBuilder","addStorageMeta","asAddress","isDefined","asBlockBoundWitnessWithStorageMeta","balanceSummary","context","headResult","chainArchivist","get","head","headBoundWitness","asBlockBoundWitnessWithStorageMeta","at","required","rangeStart","isDefined","windowSize","Math","max","block","ranges","deepCalculateFramesFromRange","summaries","Promise","all","map","range","balanceStepSummaryFromRange","balances","summary","address","balance","Object","entries","validAddress","asAddress","parseSignedBigInt","LogLevel","z","z","isLocalhost","hostname","endsWith","getUrl","host","port","scheme","isLocalhost","TODO","z","MnemonicStringSchema","string","transform","s","trim","replaceAll","refine","includes","split","length","message","describe","ApiConfigSchema","z","object","mnemonic","MnemonicStringSchema","optional","describe","host","string","default","port","coerce","number","z","AppConfigSchema","object","port","coerce","number","default","describe","z","ChainConfigSchema","object","id","string","optional","describe","z","EvmJsonRpcConfigSchema","object","url","string","optional","describe","EvmInfuraConfigSchema","projectId","projectSecret","EvmConfigSchema","chainId","infura","jsonRpc","z","ProducerConfigSchema","z","object","healthCheckPort","coerce","number","optional","describe","minStake","default","mnemonic","MnemonicStringSchema","port","disableIntentRedeclaration","boolean","rewardAddress","string","isDefined","isUndefined","z","hasMongoConfig","config","isUndefined","isDefined","connectionString","database","domain","password","username","MongoConfigSchema","z","object","string","min","optional","describe","z","StorageConfigSchema","z","object","mongo","MongoConfigSchema","optional","describe","root","string","z","OpenTelemetryConfigSchema","object","otlpEndpoint","string","optional","describe","TelemetryConfigSchema","otel","LogLevels","Object","keys","LogLevel","Xl1CommonConfigSchema","z","object","silent","boolean","default","describe","logLevel","enum","ConfigSchema","shape","api","ApiConfigSchema","parse","app","AppConfigSchema","chain","ChainConfigSchema","evm","EvmConfigSchema","producer","ProducerConfigSchema","storage","StorageConfigSchema","telemetry","TelemetryConfigSchema","getDefaultConfig","assertEx","toHex","BoundWitnessBuilder","PayloadBuilder","defaultTransactionFees","buildTransaction","chain","onChainPayloads","offChainPayloads","signer","nbf","exp","from","fees","defaultTransactionFees","undefined","Array","isArray","Error","txBoundWitnessFields","base","toHex","gasLimit","gasPrice","priority","elevatedHashes","PayloadBuilder","hashes","script","elevatedHash","push","fields","assertEx","at","address","length","tx","txPayloads","BoundWitnessBuilder","meta","$signatures","payloads","signers","build","addStorageMeta","toHex","BoundWitnessBuilder","PayloadBuilder","defaultTransactionFees","buildUnsignedTransaction","chain","onChainPayloads","offChainPayloads","nbf","exp","from","fees","defaultTransactionFees","txBoundWitnessFields","base","toHex","gasLimit","gasPrice","priority","elevatedHashes","PayloadBuilder","hashes","script","elevatedHash","push","fields","length","tx","txPayloads","BoundWitnessBuilder","meta","$signatures","payloads","build","addStorageMeta","delay","isDefined","PayloadBuilder","DEFAULT_CONFIRMATION_ATTEMPTS","DEFAULT_DELAY_BETWEEN_ATTEMPTS","confirmSubmittedTransaction","viewer","transaction","options","attempts","maxAttempts","delay","attemptDelay","txBWHash","PayloadBuilder","hash","logger","log","tx","transactionByHash","undefined","isDefined","error","Error","assertEx","hydrateTypedBoundWitness","tryHydrateTypedBoundWitness","isAllowedBlockPayload","isTransactionBoundWitnessWithStorageMeta","tryHydrateTransaction","archivist","hash","tryHydrateTypedBoundWitness","isTransactionBoundWitnessWithStorageMeta","hydrateTransaction","hydrateTypedBoundWitness","flattenHydratedTransaction","hydratedTransaction","tx","txPayloads","flattenHydratedTransactions","hydratedTransactions","flatMap","tryHydrateElevatedTransaction","undefined","transaction","payloads","opCodes","script","filter","operation","startsWith","elevatedPayloads","opCode","code","split","elevatedPayload","find","payload","_hash","isAllowedBlockPayload","push","length","hydrateElevatedTransaction","assertEx","PayloadBuilder","transactionBlockByteCount","transaction","payloads","cleanTransaction","PayloadBuilder","omitStorageMeta","transactionBytes","JSON","stringify","length","cleanPayloads","reduce","acc","payload","asHash","crackOperation","operation","parts","split","length","Error","slice","crackOperations","operations","map","op","transactionElevatedPayloadHashes","transaction","elevateOperations","crackOperations","script","filter","op","map","asHash","transactionElevatedPayloads","payloads","hashes","elevatedPayloads","payload","includes","_hash","AttoXL1","TransactionGasCosts","transactionBytesRequiredGas","transaction","payloads","transactionBlockBytes","transactionBlockByteCount","AttoXL1","TransactionGasCosts","characterStorage","BigInt","transactionRequiredGas","hydratedTransaction","elevatedPayloads","transactionElevatedPayloads","hashes","length","signatures","addresses","hashValidation","signatureValidation","payloadValidation","filterAs","assertEx","asHash","isAllowedBlockPayloadWithHashStorageMeta","tryExtractElevatedHashesFromScript","strings","hashes","filter","str","startsWith","map","split","filterAs","h","asHash","extractElevatedHashesFromScript","filtered","assertEx","length","tryExtractElevatedHashes","tx","bw","payloads","script","p","includes","_hash","isAllowedBlockPayloadWithHashStorageMeta","extractElevatedHashes","toArrayBuffer","assertEx","hexFromArrayBuffer","PayloadBuilder","signTransaction","tx","signer","assertEx","from","address","signedTx","structuredClone","addresses","previous_hashes","previousHash","hash","PayloadBuilder","hashBytes","toArrayBuffer","signature","sign","$signatures","hexFromArrayBuffer","HDWallet","WALLET_COMPLIANCE","COIN_TYPES","Ethereum","ACCOUNT_TYPE","GANACHE","XYO","CHANGE_ADDRESS","META_MASK","ADDRESS_INDEX","DEFAULT_WALLET_PATH","generateXyoBaseWalletFromPhrase","walletPhrase","wallet","HDWallet","fromPhrase","DEFAULT_WALLET_PATH"]}
|
|
1
|
+
{"version":3,"sources":["../../src/block/hydrateBlock.ts","../../src/block/primitives/balanceStepSummaryFromRange.ts","../../src/payload/netBalancesForPayloads.ts","../../src/SignedBigInt.ts","../../src/block/primitives/frames/calculateFramesFromRange.ts","../../src/block/primitives/frames/deepCalculateFramesFromRange.ts","../../src/block/primitives/hashFromBlockNumber.ts","../../src/block/primitives/payloads.ts","../../src/block/primitives/balanceSummary.ts","../../src/config/Config.ts","../../src/config/Api.ts","../../src/validation/lib/isLocalhost.ts","../../src/validation/lib/getUrl.ts","../../src/validation/schema/Address.ts","../../src/validation/schema/Mnemonic.ts","../../src/config/App.ts","../../src/config/Chain.ts","../../src/config/Evm.ts","../../src/config/Producer.ts","../../src/config/storage/driver/Mongo.ts","../../src/config/storage/Storage.ts","../../src/config/Telemetry.ts","../../src/transaction/buildTransaction.ts","../../src/transaction/buildUnsignedTransaction.ts","../../src/transaction/confirmSubmittedTransaction.ts","../../src/transaction/hydrateTransaction.ts","../../src/transaction/primitives/transactionBlockByteCount.ts","../../src/transaction/primitives/transactionElevatedPayloads.ts","../../src/transaction/primitives/transactionOperations.ts","../../src/transaction/primitives/transactionRequiredGas.ts","../../src/transaction/script.ts","../../src/transaction/signTransaction.ts","../../src/wallet/generateXyoBaseWalletFromPhrase.ts","../../src/wallet/paths.ts"],"sourcesContent":["import { filterAs } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport type { Hash } from '@xylabs/hex'\nimport type { ReadArchivist } from '@xyo-network/archivist-model'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport type { HydratedBlock, TransactionBoundWitness } from '@xyo-network/xl1-protocol'\nimport {\n asTransactionBoundWitnessWithStorageMeta, isBlockBoundWitnessWithStorageMeta, isTransactionBoundWitnessWithStorageMeta,\n} from '@xyo-network/xl1-protocol'\n\nexport function allHashesPresent(hashes: Hash[], payloads: WithStorageMeta<Payload>[]): boolean {\n const payloadHashes = new Set(payloads.map(p => p._hash))\n return hashes.every(hash => payloadHashes.has(hash))\n}\n\nexport const tryHydrateBlock = async (\n archivist: ReadArchivist,\n hash: Hash,\n maxDepth: number = 1,\n): Promise<HydratedBlock | undefined> => {\n assertEx(maxDepth >= 0, () => 'maxDepth must be greater than or equal to 0')\n const bw = (await archivist.get([hash])).find(isBlockBoundWitnessWithStorageMeta)\n if (!bw) return undefined\n if (maxDepth === 0) return [bw, []]\n const blkPayloads = await archivist.get(bw.payload_hashes)\n if (maxDepth === 1) return [bw, blkPayloads]\n const transactions = blkPayloads.filter(isTransactionBoundWitnessWithStorageMeta)\n const transactionsPayloadHashes = transactions.flatMap(tx => tx.payload_hashes)\n const transactionsPayloads = await archivist.get(transactionsPayloadHashes)\n const allPayloadsHashes = new Set([...blkPayloads, ...transactionsPayloads].flatMap(p => p._hash))\n const allPayloads = await archivist.get([...allPayloadsHashes])\n const allPayloadsFiltered = allPayloads.filter(p => allPayloadsHashes.has(p._hash))\n return [bw, allPayloadsFiltered]\n}\n\nexport const hydrateBlock = async (\n archivist: ReadArchivist,\n hash: Hash,\n maxDepth: number = 1,\n minDepth = maxDepth,\n): Promise<HydratedBlock> => {\n assertEx(maxDepth >= 0, () => 'maxDepth must be greater than or equal to 0')\n assertEx(minDepth >= 0, () => 'minDepth must be greater than or equal to 0')\n assertEx(maxDepth >= minDepth, () => 'maxDepth must be greater than or equal to minDepth')\n const bw = assertEx(\n (await archivist.get([hash])).find(isBlockBoundWitnessWithStorageMeta),\n () => `block ${hash} not found`,\n )\n if (maxDepth === 0) return [bw, []]\n const blkPayloads = await archivist.get(bw.payload_hashes)\n if (minDepth === 1) assertEx(allHashesPresent(bw.payload_hashes, blkPayloads), () => `Unable to find all payloads for block ${hash}`)\n if (maxDepth === 1) return [bw, blkPayloads]\n const transactions = blkPayloads.filter(isTransactionBoundWitnessWithStorageMeta)\n const transactionsPayloadHashes = transactions.flatMap(tx => tx.payload_hashes)\n const transactionsPayloads = await archivist.get(transactionsPayloadHashes)\n assertEx(allHashesPresent(transactionsPayloadHashes, transactionsPayloads), () => `Unable to find all payloads for transactions in block ${hash}`)\n const allPayloadsHashes = new Set([...blkPayloads, ...transactionsPayloads].flatMap(p => p._hash))\n const allPayloads = await archivist.get([...allPayloadsHashes])\n const allPayloadsFiltered = allPayloads.filter(p => allPayloadsHashes.has(p._hash))\n if (maxDepth === 2) assertEx(allHashesPresent(\n [...allPayloadsHashes],\n allPayloadsFiltered,\n ), () => `Unable to find all payloads for transactions in block ${hash}`)\n return [bw, allPayloadsFiltered]\n}\n\nexport const flattenHydratedBlock = (hydratedBlock: HydratedBlock): WithStorageMeta<Payload>[] => {\n const [blk, blkPayloads] = hydratedBlock\n return [...blkPayloads, blk]\n}\n\nexport const flattenHydratedBlocks = (hydratedBlocks: HydratedBlock[]): WithStorageMeta<Payload>[] =>\n hydratedBlocks.flatMap(blk => flattenHydratedBlock(blk))\n\nexport const transactionsFromHydratedBlock = (block: HydratedBlock): WithStorageMeta<TransactionBoundWitness>[] => {\n return filterAs(block[1], asTransactionBoundWitnessWithStorageMeta)\n}\n\nexport const blockPayloadsFromHydratedBlock = (block: HydratedBlock): WithStorageMeta<Payload>[] => {\n return block[0].payload_hashes.map(hash => assertEx(\n block[1].find(p => p._hash === hash),\n () => `missing payload ${hash}`,\n )).filter(x => !isTransactionBoundWitnessWithStorageMeta(x))\n}\n","import { assertEx } from '@xylabs/assert'\nimport { type Address } from '@xylabs/hex'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport { isAnyPayload } from '@xyo-network/payload-model'\nimport { StepSizes } from '@xyo-network/xl1-protocol'\n\nimport { netBalancesForPayloads } from '../../payload/index.ts'\nimport {\n parseSignedBigInt, type SignedBigInt, toSignedBigInt,\n} from '../../SignedBigInt.ts'\nimport { hydrateBlock } from '../hydrateBlock.ts'\nimport type { BlockNumberRange } from './frames/index.ts'\nimport { deepCalculateFramesFromRange } from './frames/index.ts'\nimport { hashFromBlockNumber } from './hashFromBlockNumber.ts'\nimport type { BalanceStepSummaryContext } from './model.ts'\nimport { type BalancesStepSummary, BalancesStepSummarySchema } from './payloads.ts'\n\nexport async function balanceStepSummaryFromRange(\n context: BalanceStepSummaryContext,\n range: BlockNumberRange,\n): Promise<WithStorageMeta<BalancesStepSummary>> {\n // console.log(`balanceStepSummaryFromRange: head=${head}, range=${range[0]}-${range[1]}`)\n const frameHeadHash = await hashFromBlockNumber(context, range[1])\n const frameSize = range[1] - range[0] + 1\n\n let result: BalancesStepSummary | undefined = undefined\n\n if (frameSize === 1) {\n const hash = await hashFromBlockNumber(context, range[0])\n const [, payloads] = await hydrateBlock(context.chainArchivist, hash)\n const balances: Record<Address, SignedBigInt> = {}\n for (const [address, balance] of Object.entries(netBalancesForPayloads(payloads))) {\n balances[address as Address] = toSignedBigInt(balance)\n }\n result = {\n schema: BalancesStepSummarySchema, hash: context.head, stepSize: -1, balances,\n }\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const step = (StepSizes as any).indexOf(frameSize)\n assertEx(step !== -1, () => `Invalid step size: ${frameSize}. Must be one of ${StepSizes.join(', ')}`)\n\n const [summaryResult] = await context.summaryRepository.get([frameHeadHash])\n if (isAnyPayload(summaryResult)) {\n result = summaryResult as WithStorageMeta<BalancesStepSummary>\n } else {\n // We do not have it, so lets build it\n const subRanges = deepCalculateFramesFromRange(range, step - 1)\n const promises = subRanges.map(subRange => balanceStepSummaryFromRange(\n context,\n subRange,\n ))\n const subResults = await Promise.all(promises)\n\n // add them all up\n const bigIntBalances: Record<Address, bigint> = {}\n for (const subResult of subResults) {\n for (const [address, balance] of Object.entries(subResult.balances)) {\n bigIntBalances[address as Address] = (bigIntBalances[address as Address] ?? 0n) + parseSignedBigInt(balance)\n }\n }\n\n const balances: Record<Address, SignedBigInt> = {}\n for (const [address, balance] of Object.entries(bigIntBalances)) {\n balances[address as Address] = toSignedBigInt(balance)\n }\n\n result = {\n schema: BalancesStepSummarySchema, hash: frameHeadHash, stepSize: frameSize, balances,\n }\n\n await context.summaryRepository.insert([result])\n }\n }\n // console.log(`balanceStepSummaryFromRange-result: head=${head}, range=${range[0]}-${range[1]}: ${toSafeJsonString(result, 10)}`)\n const finalResult = await PayloadBuilder.addStorageMeta(result)\n return finalResult\n}\n","import {\n type Address, type Hex, hexToBigInt, toAddress,\n} from '@xylabs/hex'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isTransfer } from '@xyo-network/xl1-protocol'\n\nexport const netBalancesForPayloads = (payloads: Payload[]) => {\n const balances: Record<Address, bigint> = {}\n for (const payload of payloads) {\n if (isTransfer(payload)) {\n const { from } = payload\n for (let [address, amount] of Object.entries(payload.transfers) as [Address, Hex][]) {\n balances[toAddress(address)] = (balances[toAddress(address)] ?? 0n) + hexToBigInt(amount)\n balances[toAddress(from)] = (balances[toAddress(from)] ?? 0n) - hexToBigInt(amount)\n }\n }\n }\n return balances\n}\n","import {\n type Hex,\n hexToBigInt,\n toHex,\n} from '@xylabs/hex'\nimport { isObject } from '@xylabs/object'\n\nexport interface NegativeBigInt {\n negative: Hex\n}\n\nexport interface PositiveBigInt {\n positive: Hex\n}\n\nexport type SignedBigInt = NegativeBigInt | PositiveBigInt\n\nexport const isNegativeBigInt = (value: unknown): value is NegativeBigInt => {\n return isObject(value) && 'negative' in value && typeof value.negative === 'string'\n}\n\nexport const isPositiveBigInt = (value: unknown): value is PositiveBigInt => {\n return isObject(value) && 'positive' in value && typeof value.positive === 'string'\n}\n\nexport const parseSignedBigInt = (value: SignedBigInt): bigint => {\n if (isNegativeBigInt(value)) {\n return -hexToBigInt(value.negative)\n } else if (isPositiveBigInt(value)) {\n return hexToBigInt(value.positive)\n } else {\n throw new Error('Invalid balance type')\n }\n}\n\nexport const toSignedBigInt = (value: bigint): SignedBigInt => {\n return value < 0n ? { negative: toHex(-value) } : { positive: toHex(value) }\n}\n\nexport const toPositiveBigInt = (value: unknown): PositiveBigInt => {\n if (isNegativeBigInt(value)) {\n return { positive: toHex(0n) }\n }\n if (isPositiveBigInt(value)) {\n return { positive: value.positive }\n }\n if (typeof value === 'bigint') {\n return { positive: toHex(value) }\n }\n throw new Error('Invalid value for positive big int')\n}\n","import { stepSize } from '@xyo-network/xl1-protocol'\n\nimport type { BlockNumberRange } from './BlockNumberRange.ts'\n\nexport function calculateFramesFromRange(range: BlockNumberRange, step: number): [\n // ranges of fitted frames\n BlockNumberRange[],\n // ranges of remaining blocks\n BlockNumberRange[]] {\n const size = stepSize(step)\n let start = (Math.trunc(range[0] / size)) * size\n const fitted: BlockNumberRange[] = []\n const remaining: BlockNumberRange[] = []\n\n // if the start is not aligned with the range, add a remaining block\n if (start !== range[0]) {\n start += size\n remaining.push([range[0], Math.min(start - 1, range[1])])\n }\n\n for (let i = start; i <= range[1]; i += size) {\n if ((i + size - 1) <= range[1]) {\n fitted.push([i, Math.min(i + size - 1, range[1])])\n } else {\n remaining.push([i, range[1]])\n }\n }\n return [fitted, remaining]\n}\n","import { StepSizes } from '@xyo-network/xl1-protocol'\n\nimport type { BlockNumberRange } from './BlockNumberRange.ts'\nimport { calculateFramesFromRange } from './calculateFramesFromRange.ts'\n\nexport function deepCalculateFramesFromRange(range: BlockNumberRange, startingStep = StepSizes.length - 1): BlockNumberRange[] {\n const fitted: BlockNumberRange[] = []\n let remaining: BlockNumberRange[] = [range]\n\n for (let step = startingStep; step >= 0; step--) {\n const newRemaining: BlockNumberRange[] = []\n for (const range of remaining) {\n const [newFittedFrames, newRemainingFrames] = calculateFramesFromRange(range, step)\n fitted.push(...newFittedFrames)\n newRemaining.push(...newRemainingFrames)\n }\n remaining = newRemaining\n }\n\n for (const range of remaining) {\n for (let i = range[0]; i <= range[1]; i++) {\n fitted.push([i, i]) // Add individual frames for remaining ranges\n }\n }\n\n return fitted.toSorted((a, b) => a[0] - b[0]) // Sort by start of range\n}\n","import { asHash, type Hash } from '@xylabs/hex'\nimport { toSafeJsonString } from '@xylabs/object'\nimport { asBlockBoundWitnessWithStorageMeta, StepSizes } from '@xyo-network/xl1-protocol'\n\nimport type { ChainContext } from './model.ts'\n\nexport async function hashFromBlockNumber(context: ChainContext, blockNumber: number): Promise<Hash> {\n const result = await context.chainArchivist.get([context.head])\n let currentBlock = asBlockBoundWitnessWithStorageMeta(result.at(0), () => `Head block not found for hash: ${context.head}`, { required: true })\n while (currentBlock.block > blockNumber) {\n let jumpHash: Hash | null = currentBlock.previous\n let jumpBlockNumber = currentBlock.block - 1\n for (const [step, stepSize] of StepSizes.entries()) {\n const possibleJumpBlockNumber = currentBlock.block - stepSize\n if (possibleJumpBlockNumber >= blockNumber && possibleJumpBlockNumber <= jumpBlockNumber) {\n jumpBlockNumber = possibleJumpBlockNumber\n jumpHash = asHash(currentBlock.step_hashes.at(step), () => `Step hash not found for step ${step} in block ${currentBlock.block}`)\n }\n }\n const [newBlock] = await context.chainArchivist.get([\n asHash(jumpHash, () => `Jump hash not found for block number [${blockNumber}]: ${jumpBlockNumber} ${toSafeJsonString(currentBlock, 10)}`)])\n currentBlock = asBlockBoundWitnessWithStorageMeta(newBlock, () => `Block not found for hash: ${jumpHash}`, { required: true })\n if (currentBlock.block === blockNumber) {\n break\n }\n if (currentBlock.block < blockNumber) {\n throw new Error(`Block number ${blockNumber} is not a valid step block number for block ${context.head}.`)\n }\n }\n return currentBlock._hash\n}\n","import type { Address, Hash } from '@xylabs/hex'\nimport type { EmptyObject } from '@xylabs/object'\nimport { AsObjectFactory } from '@xylabs/object'\nimport type {\n Payload, Schema, WithStorageMeta,\n} from '@xyo-network/payload-model'\nimport { isPayloadOfSchemaType, isStorageMeta } from '@xyo-network/payload-model'\n\nimport type { SignedBigInt } from '../../SignedBigInt.ts'\n\nexport const StepSummarySchema: Schema = 'network.xyo.step.summary'\nexport type StepSummarySchema = typeof StepSummarySchema\n\nexport interface StepSummaryFields {\n hash: Hash // the stepHash - the hash of the last block in the step frame\n stepSize: number // the stepSize in blocks\n}\n\nexport interface ChainWindow {\n depth: number // number of blocks the window covers, including the head\n head: Hash // the head of the chain\n}\n\nexport type StepSummary<TAdditionalFields extends EmptyObject | void = void,\n TSchema extends Schema | void = void> = Payload<TAdditionalFields extends void ? StepSummaryFields : TAdditionalFields & StepSummaryFields,\n TSchema extends void ? StepSummarySchema : TSchema>\n\nexport const BalancesStepSummarySchema: Schema = 'network.xyo.step.summary.balances'\nexport type BalancesStepSummarySchema = typeof BalancesStepSummarySchema\n\nexport type BalancesStepSummary = StepSummary<{\n balances: Record<Address, SignedBigInt>\n}, BalancesStepSummarySchema>\n\n/**\n * Identity function for determining if an object is an BalancesStepSummary\n */\nexport const isBalancesStepSummary = isPayloadOfSchemaType<BalancesStepSummary>(BalancesStepSummarySchema)\nexport const asBalancesStepSummary = AsObjectFactory.create<BalancesStepSummary>(isBalancesStepSummary)\n\n/**\n * Identity function for determining if an object is an BalancesStepSummary with Storage Meta\n */\nexport const isBalancesStepSummaryWithStorageMeta = (value: unknown): value is WithStorageMeta<BalancesStepSummary> => {\n return isBalancesStepSummary(value) && isStorageMeta(value)\n}\nexport const asBalancesStepSummaryWithStorageMeta = AsObjectFactory.create<WithStorageMeta<BalancesStepSummary>>(isBalancesStepSummaryWithStorageMeta)\n","import type { Address } from '@xylabs/hex'\nimport { asAddress } from '@xylabs/hex'\nimport { isDefined } from '@xylabs/typeof'\nimport { asBlockBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'\n\nimport { parseSignedBigInt } from '../../SignedBigInt.ts'\nimport { balanceStepSummaryFromRange } from './balanceStepSummaryFromRange.ts'\nimport { deepCalculateFramesFromRange } from './frames/index.ts'\nimport type { BalanceStepSummaryContext } from './model.ts'\n\nexport async function balanceSummary(\n context: BalanceStepSummaryContext,\n): Promise<Partial<Record<Address, bigint>>> {\n const headResult = await context.chainArchivist.get([context.head])\n const headBoundWitness = asBlockBoundWitnessWithStorageMeta(headResult.at(0), () => `Head block not found for hash: ${context.head}`, { required: true })\n const rangeStart = isDefined(context.windowSize) ? Math.max(headBoundWitness.block - context.windowSize + 1, 0) : 0\n const ranges = deepCalculateFramesFromRange([rangeStart, headBoundWitness.block])\n const summaries = await Promise.all(ranges.map(range => balanceStepSummaryFromRange(context, range)))\n const balances: Partial<Record<Address, bigint>> = {}\n for (let summary of summaries) {\n for (const [address, balance] of Object.entries(summary.balances)) {\n const validAddress = asAddress(address, () => `Invalid address: ${address}`)\n balances[validAddress] = (balances[validAddress] ?? 0n) + parseSignedBigInt(balance)\n }\n }\n return balances\n}\n","import type { LogLevelKey } from '@xylabs/logger'\nimport { LogLevel } from '@xylabs/logger'\nimport z from 'zod'\n\nimport { ApiConfigSchema } from './Api.ts'\nimport { AppConfigSchema } from './App.ts'\nimport { ChainConfigSchema } from './Chain.ts'\nimport { EvmConfigSchema } from './Evm.ts'\nimport { ProducerConfigSchema } from './Producer.ts'\nimport { StorageConfigSchema } from './storage/index.ts'\nimport { TelemetryConfigSchema } from './Telemetry.ts'\n\nconst LogLevels = Object.keys(LogLevel) as [LogLevelKey, ...LogLevelKey[]]\n\nexport const Xl1CommonConfigSchema = z.object({\n silent: z.boolean().default(false).describe('Whether to run in silent mode'),\n logLevel: z.enum(LogLevels).default('info').describe('Desired process verbosity'),\n}).describe('XL1 common configuration options')\n\nexport const ConfigSchema = z.object({\n ...Xl1CommonConfigSchema.shape,\n api: ApiConfigSchema.default(ApiConfigSchema.parse({})).describe('Configuration for the API node'),\n app: AppConfigSchema.default(AppConfigSchema.parse({})).describe('Configuration for the application'),\n chain: ChainConfigSchema.default(ChainConfigSchema.parse({})).describe('Configuration for the chain'),\n evm: EvmConfigSchema.default(EvmConfigSchema.parse({})).describe('Configuration for EVM-backed services'),\n producer: ProducerConfigSchema.default(ProducerConfigSchema.parse({})).describe('Configuration for the producer'),\n storage: StorageConfigSchema.default(StorageConfigSchema.parse({})).describe('Configuration for the storage'),\n telemetry: TelemetryConfigSchema.default(TelemetryConfigSchema.parse({})).describe('Configuration for telemetry'),\n})\n\nexport type Config = z.infer<typeof ConfigSchema>\n\nexport const getDefaultConfig = (): Config => ConfigSchema.parse({})\n","import z from 'zod'\n\nimport { MnemonicStringSchema } from '../validation/index.ts'\n\nexport const ApiConfigSchema = z.object({\n mnemonic: MnemonicStringSchema.optional().describe('Mnemonic for the API wallet'),\n host: z.string().default('localhost').describe('Host for the API'),\n port: z.coerce.number().default(8080).describe('Port for the API'),\n})\n\nexport type ApiConfig = z.infer<typeof ApiConfigSchema>\n","export const isLocalhost = (hostname: string): boolean => {\n return (\n hostname === 'localhost'\n || hostname === '127.0.0.1'\n || hostname === '::1' // IPv6 localhost\n || hostname.endsWith('.localhost')\n )\n}\n","import { isLocalhost } from './isLocalhost.ts'\n\nexport const getUrl = (host: string, port: number): string => {\n const scheme = isLocalhost(host) ? 'http' : 'https'\n return `${scheme}://${host}:${port}`\n}\n","export const TODO = true\n","import { z } from 'zod'\n\n/**\n * Validates a single string containing a BIP-39 mnemonic.\n *\n * • Trims leading/trailing whitespace.\n * • Collapses any run of whitespace (spaces, tabs, new-lines) to a single space.\n * • Splits on spaces → array of words.\n * • Checks that the word-count is 12, 15, 18, 21, or 24.\n *\n */\nexport const MnemonicStringSchema = z\n .string()\n .transform(s => s.trim().replaceAll(/\\s+/g, ' ')) // normalize spacing\n .refine(\n s => [12, 15, 18, 21, 24].includes(s.split(' ').length),\n { message: 'Mnemonic must contain 12, 15, 18, 21, or 24 words.' },\n ).describe('BIP-39 mnemonic string')\n\nexport type MnemonicString = z.infer<typeof MnemonicStringSchema>\n","import z from 'zod'\n\nexport const AppConfigSchema = z.object({ port: z.coerce.number().default(3000).describe('Port for the application') })\n","import z from 'zod'\n\nexport const ChainConfigSchema = z.object({\n id: z.string().optional()\n .describe('The unique identifier for the chain. Should be the staking contract address for contract-backed chains.'),\n})\n","import z from 'zod'\n\nexport const EvmJsonRpcConfigSchema = z.object({\n //\n url: z.string().optional().describe('JSON-RPC URL'),\n})\nexport const EvmInfuraConfigSchema = z.object({\n projectId: z.string().optional().describe('Infura project ID'),\n projectSecret: z.string().optional().describe('Infura project secret'),\n})\nexport const EvmConfigSchema = z.object({\n chainId: z.string().optional().describe('EVM chain ID'),\n infura: EvmInfuraConfigSchema.optional().describe('Infura Provider configuration'),\n jsonRpc: EvmJsonRpcConfigSchema.optional().describe('JSON-RPC Provider configuration'),\n})\n\nexport type EvmConfig = z.infer<typeof EvmConfigSchema>\n","import z from 'zod'\n\nimport { MnemonicStringSchema } from '../validation/index.ts'\n\nexport const ProducerConfigSchema = z.object({\n // TODO: Port schema\n healthCheckPort: z.coerce.number().optional().describe('Port for the Producer health checks'),\n // TODO: BigInt schema\n minStake: z.coerce.number().default(1).describe('Minimum stake required to be a Producer'),\n mnemonic: MnemonicStringSchema.optional().describe('Mnemonic for the Producer wallet'),\n // TODO: Port schema\n port: z.coerce.number().default(8081).describe('Port for the Producer'),\n disableIntentRedeclaration: z.boolean().optional().describe('Should the producer skip redeclaring their intent to continue producing blocks'),\n // TODO: Address schema\n rewardAddress: z.string().optional().describe('Address to receive block rewards'),\n})\n","import { isDefined, isUndefined } from '@xylabs/typeof'\nimport z from 'zod'\n\n/**\n * Checks if the provided MongoDB configuration contains all necessary fields\n * for establishing a connection.\n * @param config MongoDB configuration object\n * @returns True if the configuration contains all necessary fields for\n * establishing a connection\n */\nexport const hasMongoConfig = (config?: MongoConfig): config is Required<MongoConfig> => {\n if (isUndefined(config)) return false\n return (\n isDefined(config.connectionString)\n && isDefined(config.database)\n && isDefined(config.domain)\n && isDefined(config.password)\n && isDefined(config.username)\n )\n}\n\nexport const MongoConfigSchema = z.object({\n // TODO: Create from other arguments\n connectionString: z.string().min(1).optional().describe('MongoDB connection string'),\n database: z.string().min(1).optional().describe('MongoDB database name'),\n domain: z.string().min(1).optional().describe('MongoDB domain'),\n password: z.string().min(1).optional().describe('MongoDB password'),\n username: z.string().min(1).optional().describe('MongoDB username'),\n})\n\nexport type MongoConfig = z.infer<typeof MongoConfigSchema>\n","import z from 'zod'\n\nimport { MongoConfigSchema } from './driver/index.ts'\n\nexport const StorageConfigSchema = z.object({\n mongo: MongoConfigSchema.optional().describe('Configuration for the MongoDBstorage driver'),\n root: z.string().optional().describe('Root directory for local storage'),\n}).describe('Storage configuration options')\n\nexport type StorageConfig = z.infer<typeof StorageConfigSchema>\n","import z from 'zod'\n\nexport const OpenTelemetryConfigSchema = z.object({\n // OpenTelemetry options\n otlpEndpoint: z.string().optional().describe('OTLP endpoint for exporting telemetry data'),\n})\n\nexport const TelemetryConfigSchema = z.object({\n // OpenTelemetry configuration\n otel: OpenTelemetryConfigSchema.optional().describe('OpenTelemetry configuration'),\n}).describe('Telemetry configuration options')\n\nexport type TelemetryConfig = z.infer<typeof TelemetryConfigSchema>\n","import { assertEx } from '@xylabs/assert'\nimport type { Address, Hex } from '@xylabs/hex'\nimport { toHex } from '@xylabs/hex'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload,\n ExecutableFields,\n FromFields,\n HydratedTransaction, TransactionBoundWitness, TransactionBoundWitnessFields, TransactionFeesBigInt,\n} from '@xyo-network/xl1-protocol'\nimport { defaultTransactionFees } from '@xyo-network/xl1-protocol'\n\nexport async function buildTransaction(\n chain: Hex,\n onChainPayloads: AllowedBlockPayload[],\n offChainPayloads: Payload[],\n signer: AccountInstance | AccountInstance[],\n nbf: number,\n exp: number,\n from?: Address,\n fees: TransactionFeesBigInt = defaultTransactionFees,\n): Promise<HydratedTransaction> {\n if (from === undefined && Array.isArray(signer)) {\n throw new Error('from is required when signer is an array')\n }\n\n const txBoundWitnessFields: TransactionBoundWitnessFields = {\n chain,\n fees: {\n base: toHex(fees.base),\n gasLimit: toHex(fees.gasLimit),\n gasPrice: toHex(fees.gasPrice),\n priority: toHex(fees.priority),\n },\n nbf,\n exp,\n }\n\n const elevatedHashes = await PayloadBuilder.hashes(onChainPayloads)\n const script: string[] = []\n for (const elevatedHash of elevatedHashes) {\n script.push(`elevate|${elevatedHash}`)\n }\n\n const fields: TransactionBoundWitnessFields & FromFields & Partial<ExecutableFields> = {\n ...txBoundWitnessFields,\n from: from ?? (Array.isArray(signer) ? assertEx(signer.at(0)?.address) : signer.address),\n }\n\n if (script.length > 0) {\n fields.script = script\n }\n\n const [tx, txPayloads] = await new BoundWitnessBuilder<TransactionBoundWitness>()\n .fields(fields)\n .meta({ $signatures: [] })\n .payloads([...onChainPayloads, ...offChainPayloads])\n .signers(Array.isArray(signer) ? signer : [signer])\n .build()\n\n return [await PayloadBuilder.addStorageMeta(tx), await PayloadBuilder.addStorageMeta(txPayloads)]\n}\n","import type { Address, Hex } from '@xylabs/hex'\nimport { toHex } from '@xylabs/hex'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload,\n ExecutableFields,\n FromFields,\n HydratedTransaction, TransactionBoundWitness, TransactionBoundWitnessFields, TransactionFeesBigInt,\n} from '@xyo-network/xl1-protocol'\nimport { defaultTransactionFees } from '@xyo-network/xl1-protocol'\n\nexport async function buildUnsignedTransaction(\n chain: Hex,\n onChainPayloads: AllowedBlockPayload[],\n offChainPayloads: Payload[],\n nbf: number,\n exp: number,\n from: Address,\n fees: TransactionFeesBigInt = defaultTransactionFees,\n): Promise<HydratedTransaction> {\n const txBoundWitnessFields: TransactionBoundWitnessFields = {\n chain,\n fees: {\n base: toHex(fees.base),\n gasLimit: toHex(fees.gasLimit),\n gasPrice: toHex(fees.gasPrice),\n priority: toHex(fees.priority),\n },\n nbf,\n exp,\n }\n\n const elevatedHashes = await PayloadBuilder.hashes(onChainPayloads)\n const script: string[] = []\n for (const elevatedHash of elevatedHashes) {\n script.push(`elevate|${elevatedHash}`)\n }\n\n const fields: TransactionBoundWitnessFields & FromFields & Partial<ExecutableFields> = {\n ...txBoundWitnessFields,\n from,\n }\n\n if (script.length > 0) {\n fields.script = script\n }\n\n const [tx, txPayloads] = await new BoundWitnessBuilder<TransactionBoundWitness>()\n .fields(fields)\n .meta({ $signatures: [] })\n .payloads([...onChainPayloads, ...offChainPayloads])\n .build()\n\n return [await PayloadBuilder.addStorageMeta(tx), await PayloadBuilder.addStorageMeta(txPayloads)]\n}\n","import { delay } from '@xylabs/delay'\nimport type { Logger } from '@xylabs/logger'\nimport { isDefined } from '@xylabs/typeof'\nimport type { Signed } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n HydratedTransaction, TransactionBoundWitness, XyoViewer,\n} from '@xyo-network/xl1-protocol'\n\nconst DEFAULT_CONFIRMATION_ATTEMPTS = 20\nconst DEFAULT_DELAY_BETWEEN_ATTEMPTS = 1000 // milliseconds\n\nexport type ConfirmSubmittedTransactionOptions = {\n /**\n * Number of attempts to confirm the transaction.\n * Defaults to 20.\n */\n attempts?: number\n /**\n * Delay in milliseconds between confirmation attempts.\n * Defaults to 1000 (1 second).\n */\n delay?: number\n /**\n * Optional logger instance for logging progress.\n */\n logger?: Logger\n}\n\n/**\n * Confirms a submitted transaction by checking if it has been included in the blockchain.\n * @param viewer The viewer\n * @param transaction The transaction to confirm\n * @param options Options for confirmation\n * @returns The confirmed transaction or throws an error if not confirmed\n */\nexport const confirmSubmittedTransaction = async (\n viewer: XyoViewer,\n transaction: Signed<TransactionBoundWitness>,\n options?: ConfirmSubmittedTransactionOptions,\n): Promise<HydratedTransaction> => {\n const { attempts: maxAttempts = DEFAULT_CONFIRMATION_ATTEMPTS, delay: attemptDelay = DEFAULT_DELAY_BETWEEN_ATTEMPTS } = options || {}\n const txBWHash = await PayloadBuilder.hash(transaction)\n options?.logger?.log('🚀 confirming transaction:', txBWHash, '\\n')\n let attempts = 0\n while (true) {\n const tx = await viewer.transactionByHash(txBWHash) ?? undefined\n if (isDefined(tx)) {\n options?.logger?.log('✅ Transaction confirmed:', txBWHash, '\\n')\n return tx\n } else {\n attempts++\n if (attempts > maxAttempts) {\n options?.logger?.error(`⚠️ Transaction not confirmed after ${maxAttempts} attempts`)\n throw new Error(`Transaction ${txBWHash} not confirmed after ${maxAttempts} attempts`)\n } else {\n options?.logger?.log(`🔄 Transaction not confirmed yet, attempt ${attempts}. Retrying...`, '\\n')\n await delay(attemptDelay)\n }\n }\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Hash } from '@xylabs/hex'\nimport type { ReadArchivist } from '@xyo-network/archivist-model'\nimport { hydrateTypedBoundWitness, tryHydrateTypedBoundWitness } from '@xyo-network/archivist-model'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload,\n HydratedTransaction, TransactionBoundWitness,\n} from '@xyo-network/xl1-protocol'\nimport { isAllowedBlockPayload, isTransactionBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'\n\nexport const tryHydrateTransaction = async (\n archivist: ReadArchivist,\n hash: Hash,\n): Promise<HydratedTransaction | undefined> => {\n return (await tryHydrateTypedBoundWitness<TransactionBoundWitness>(\n archivist,\n hash,\n isTransactionBoundWitnessWithStorageMeta,\n )) as HydratedTransaction | undefined\n}\n\nexport const hydrateTransaction = async (\n archivist: ReadArchivist,\n hash: Hash,\n): Promise<HydratedTransaction> => {\n return await hydrateTypedBoundWitness<TransactionBoundWitness>(\n archivist,\n hash,\n isTransactionBoundWitnessWithStorageMeta,\n ) as HydratedTransaction\n}\n\nexport const flattenHydratedTransaction = (hydratedTransaction: HydratedTransaction): Payload[] => {\n const [tx, txPayloads] = hydratedTransaction\n return [...txPayloads, tx]\n}\n\nexport const flattenHydratedTransactions = (hydratedTransactions: HydratedTransaction[]): Payload[] =>\n hydratedTransactions.flatMap(tx => flattenHydratedTransaction(tx))\n\nexport const tryHydrateElevatedTransaction = async (\n archivist: ReadArchivist,\n hash: Hash,\n): Promise<HydratedTransaction | undefined> => {\n const hydratedTransaction = await tryHydrateTransaction(archivist, hash)\n if (!hydratedTransaction) {\n return undefined\n }\n const [transaction, payloads] = hydratedTransaction\n const opCodes = (transaction.script ?? []).filter(operation => operation.startsWith('elevate|'))\n const elevatedPayloads: WithStorageMeta<AllowedBlockPayload>[] = []\n for (const opCode of opCodes) {\n const [code, hash] = opCode.split('|')\n if (code === 'elevated') {\n const elevatedPayload = payloads.find(payload => payload._hash === hash)\n if (isAllowedBlockPayload(elevatedPayload)) {\n elevatedPayloads.push(elevatedPayload)\n }\n }\n }\n if (opCodes.length === elevatedPayloads.length) {\n return [transaction, elevatedPayloads]\n }\n return undefined\n}\n\nexport const hydrateElevatedTransaction = async (\n archivist: ReadArchivist,\n hash: Hash,\n): Promise<HydratedTransaction> => {\n return assertEx(await tryHydrateElevatedTransaction(archivist, hash), () => 'Hydration failed')\n}\n","import { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { HydratedTransaction } from '@xyo-network/xl1-protocol'\n\n/** The number of bytes that a transaction and its payloads will take up in a block */\nexport function transactionBlockByteCount([transaction, payloads]: HydratedTransaction): number {\n const cleanTransaction = PayloadBuilder.omitStorageMeta(transaction)\n const transactionBytes = JSON.stringify(cleanTransaction).length\n const cleanPayloads = PayloadBuilder.omitStorageMeta(payloads)\n return cleanPayloads.reduce((acc: number, payload) => acc + JSON.stringify(payload).length, 0) + transactionBytes\n}\n","import { asHash, type Hash } from '@xylabs/hex'\nimport type { Payload, WithHashStorageMeta } from '@xyo-network/payload-model'\nimport type { HydratedTransaction, TransactionBoundWitness } from '@xyo-network/xl1-protocol'\n\nimport { crackOperations } from './transactionOperations.ts'\n\nexport function transactionElevatedPayloadHashes(transaction: TransactionBoundWitness): Hash[] {\n const elevateOperations = crackOperations(transaction.script ?? []).filter(op => op[0] === 'elevate')\n return elevateOperations.map(op => asHash(op[1][0], true))\n}\n\nexport function transactionElevatedPayloads([transaction, payloads]: HydratedTransaction): WithHashStorageMeta<Payload>[] {\n const hashes = transactionElevatedPayloadHashes(transaction)\n const elevatedPayloads = payloads.filter(payload => hashes.includes(payload._hash))\n return elevatedPayloads\n}\n","export function crackOperation(operation: string): [string, string[]] {\n const parts = operation.split('|')\n if (parts.length < 2) {\n throw new Error(`Invalid operation format: ${operation}`)\n }\n return [parts[0], parts.slice(1)]\n}\n\nexport function crackOperations(operations: string[]): [string, string[]][] {\n return operations.map(op => crackOperation(op))\n}\n","import type { HydratedTransaction } from '@xyo-network/xl1-protocol'\nimport { AttoXL1, TransactionGasCosts } from '@xyo-network/xl1-protocol'\n\nimport { transactionBlockByteCount } from './transactionBlockByteCount.ts'\nimport { transactionElevatedPayloads } from './transactionElevatedPayloads.ts'\n\n/** The required gas for the byte storage on the block chain for a transaction */\nexport function transactionBytesRequiredGas([transaction, payloads]: HydratedTransaction): AttoXL1 {\n const transactionBlockBytes = transactionBlockByteCount([transaction, payloads])\n return AttoXL1(TransactionGasCosts.characterStorage * BigInt(transactionBlockBytes))\n}\n\nexport function transactionRequiredGas(hydratedTransaction: HydratedTransaction): AttoXL1 {\n const elevatedPayloads = transactionElevatedPayloads(hydratedTransaction)\n const hashes = elevatedPayloads.length + 1 /* for transaction itself */\n const signatures = hydratedTransaction[0].addresses.length\n return AttoXL1(transactionBytesRequiredGas(hydratedTransaction)\n + TransactionGasCosts.hashValidation * BigInt(hashes)\n + TransactionGasCosts.signatureValidation * BigInt(signatures)\n + TransactionGasCosts.payloadValidation * BigInt(elevatedPayloads.length))\n}\n","import { filterAs } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { asHash, type Hash } from '@xylabs/hex'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { AllowedBlockPayload, HydratedTransaction } from '@xyo-network/xl1-protocol'\nimport { isAllowedBlockPayloadWithHashStorageMeta } from '@xyo-network/xl1-protocol'\n\nexport const tryExtractElevatedHashesFromScript = (strings: string[]): Hash[] => {\n const hashes = strings\n .filter(str => str.startsWith('elevate|'))\n .map(str => str.split('|')[1])\n return filterAs(hashes, h => asHash(h))\n}\n\nexport const extractElevatedHashesFromScript = (strings: string[]): Hash[] => {\n const hashes = strings\n .filter(str => str.startsWith('elevate|'))\n .map(str => str.split('|')[1])\n const filtered = filterAs(hashes, h => asHash(h))\n assertEx(filtered.length === hashes.length, () => 'Invalid elevated hashes')\n return filtered\n}\n\nexport const tryExtractElevatedHashes = (tx: HydratedTransaction): WithStorageMeta<AllowedBlockPayload>[] => {\n const [bw, payloads] = tx\n const { script } = bw\n const hashes = script ? tryExtractElevatedHashesFromScript(script) : []\n return payloads\n .filter(p => hashes.includes(p._hash))\n .filter(isAllowedBlockPayloadWithHashStorageMeta)\n}\n\nexport const extractElevatedHashes = (tx: HydratedTransaction): WithStorageMeta<AllowedBlockPayload>[] => {\n const [bw, payloads] = tx\n const { script } = bw\n const hashes = script ? tryExtractElevatedHashesFromScript(script) : []\n const filtered = payloads\n .filter(p => hashes.includes(p._hash))\n .filter(isAllowedBlockPayloadWithHashStorageMeta)\n assertEx(filtered.length === hashes.length, () => 'Invalid elevated hashes')\n return filtered\n}\n","import { toArrayBuffer } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { hexFromArrayBuffer } from '@xylabs/hex'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { TransactionBoundWitness } from '@xyo-network/xl1-protocol'\n\nexport async function signTransaction(tx: TransactionBoundWitness, signer: AccountInstance) {\n assertEx(tx.from === signer.address, () => 'Signer address does not match transaction from address')\n const signedTx = structuredClone(tx)\n signedTx.addresses = [signer.address]\n signedTx.previous_hashes = [signer.previousHash ?? null]\n const hash = await PayloadBuilder.hash(signedTx)\n const hashBytes = toArrayBuffer(hash)\n const [signature] = await signer.sign(hashBytes)\n signedTx.$signatures = [hexFromArrayBuffer(signature)]\n return signedTx\n}\n","import { HDWallet } from '@xyo-network/wallet'\n\nimport { DEFAULT_WALLET_PATH } from './paths.ts'\n\n/**\n * Initializes a wallet to the default XYO path from a mnemonic phrase\n * @param walletPhrase The mnemonic phrase for the wallet\n * @returns A wallet initialized to the default XYO path using the provided phrase\n */\nexport const generateXyoBaseWalletFromPhrase = (walletPhrase: string) => {\n const wallet = HDWallet.fromPhrase(walletPhrase, DEFAULT_WALLET_PATH)\n return wallet\n}\n","export const WALLET_COMPLIANCE = '44\\'' as const\n\nexport const COIN_TYPES = { Ethereum: '60\\'' } as const\n\nexport const ACCOUNT_TYPE = { GANACHE: '0\\'', XYO: '0\\'' } as const\n\nexport const CHANGE_ADDRESS = { META_MASK: '0', XYO: '0' } as const\n\nexport const ADDRESS_INDEX = { META_MASK: '0', XYO: '0' } as const\n\nexport const DEFAULT_WALLET_PATH = `m/${WALLET_COMPLIANCE}/${COIN_TYPES.Ethereum}/${ACCOUNT_TYPE.XYO}/${CHANGE_ADDRESS.XYO}`\n"],"mappings":"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","names":["assertEx","StepSizes","hexToBigInt","range","StepSizes","stepSize","StepSizes","assertEx","asBlockBoundWitnessWithStorageMeta","asBlockBoundWitnessWithStorageMeta","z","z","z","z","z","z","z","z","isDefined","z","z","z","z","z","assertEx","toHex","PayloadBuilder","toHex","BoundWitnessBuilder","PayloadBuilder","defaultTransactionFees","isDefined","PayloadBuilder","assertEx","isTransactionBoundWitnessWithStorageMeta","hash","PayloadBuilder","asHash","asHash","filterAs","assertEx","asHash","assertEx","PayloadBuilder"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "http://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@xyo-network/xl1-protocol-sdk",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.10.1",
|
|
5
5
|
"description": "XYO Layer One SDK Protocol",
|
|
6
6
|
"homepage": "https://xylabs.com",
|
|
7
7
|
"bugs": {
|
|
@@ -36,33 +36,32 @@
|
|
|
36
36
|
"src"
|
|
37
37
|
],
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@xylabs/array": "
|
|
40
|
-
"@xylabs/arraybuffer": "
|
|
41
|
-
"@xylabs/assert": "
|
|
42
|
-
"@xylabs/delay": "
|
|
43
|
-
"@xylabs/hex": "
|
|
44
|
-
"@xylabs/logger": "
|
|
45
|
-
"@xylabs/object": "
|
|
46
|
-
"@xylabs/promise": "
|
|
47
|
-
"@xylabs/typeof": "
|
|
48
|
-
"@xyo-network/account-model": "
|
|
49
|
-
"@xyo-network/archivist-model": "
|
|
50
|
-
"@xyo-network/boundwitness-builder": "
|
|
51
|
-
"@xyo-network/boundwitness-model": "
|
|
52
|
-
"@xyo-network/payload-builder": "
|
|
53
|
-
"@xyo-network/payload-model": "
|
|
54
|
-
"@xyo-network/wallet": "
|
|
55
|
-
"@xyo-network/wallet-model": "
|
|
56
|
-
"@xyo-network/xl1-protocol": "
|
|
57
|
-
"zod": "
|
|
39
|
+
"@xylabs/array": "~5.0.3",
|
|
40
|
+
"@xylabs/arraybuffer": "~5.0.3",
|
|
41
|
+
"@xylabs/assert": "~5.0.3",
|
|
42
|
+
"@xylabs/delay": "~5.0.3",
|
|
43
|
+
"@xylabs/hex": "~5.0.3",
|
|
44
|
+
"@xylabs/logger": "~5.0.3",
|
|
45
|
+
"@xylabs/object": "~5.0.3",
|
|
46
|
+
"@xylabs/promise": "~5.0.3",
|
|
47
|
+
"@xylabs/typeof": "~5.0.3",
|
|
48
|
+
"@xyo-network/account-model": "~5.0.1",
|
|
49
|
+
"@xyo-network/archivist-model": "~5.0.1",
|
|
50
|
+
"@xyo-network/boundwitness-builder": "~5.0.1",
|
|
51
|
+
"@xyo-network/boundwitness-model": "~5.0.1",
|
|
52
|
+
"@xyo-network/payload-builder": "~5.0.1",
|
|
53
|
+
"@xyo-network/payload-model": "~5.0.1",
|
|
54
|
+
"@xyo-network/wallet": "~5.0.1",
|
|
55
|
+
"@xyo-network/wallet-model": "~5.0.1",
|
|
56
|
+
"@xyo-network/xl1-protocol": "~1.9.3",
|
|
57
|
+
"zod": "~3.25.76"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
|
-
"@types/node": "
|
|
61
|
-
"@xylabs/ts-scripts-yarn3": "
|
|
62
|
-
"@xylabs/tsconfig": "
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
"vitest": "^3.2.4"
|
|
60
|
+
"@types/node": "~24.2.0",
|
|
61
|
+
"@xylabs/ts-scripts-yarn3": "~7.1.0",
|
|
62
|
+
"@xylabs/tsconfig": "~7.1.0",
|
|
63
|
+
"typescript": "~5.9.2",
|
|
64
|
+
"vitest": "~3.2.4"
|
|
66
65
|
},
|
|
67
66
|
"engines": {
|
|
68
67
|
"node": ">=22.3 <23"
|
|
@@ -41,12 +41,12 @@ export const confirmSubmittedTransaction = async (
|
|
|
41
41
|
): Promise<HydratedTransaction> => {
|
|
42
42
|
const { attempts: maxAttempts = DEFAULT_CONFIRMATION_ATTEMPTS, delay: attemptDelay = DEFAULT_DELAY_BETWEEN_ATTEMPTS } = options || {}
|
|
43
43
|
const txBWHash = await PayloadBuilder.hash(transaction)
|
|
44
|
-
options?.logger?.log('
|
|
44
|
+
options?.logger?.log('🚀 confirming transaction:', txBWHash, '\n')
|
|
45
45
|
let attempts = 0
|
|
46
46
|
while (true) {
|
|
47
47
|
const tx = await viewer.transactionByHash(txBWHash) ?? undefined
|
|
48
48
|
if (isDefined(tx)) {
|
|
49
|
-
options?.logger?.log('
|
|
49
|
+
options?.logger?.log('✅ Transaction confirmed:', txBWHash, '\n')
|
|
50
50
|
return tx
|
|
51
51
|
} else {
|
|
52
52
|
attempts++
|