@xyo-network/xl1-protocol-sdk 2.0.5 → 2.0.7
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/block/hydrate/createBoundWitnessHydrator.d.ts +20 -20
- package/dist/neutral/eip-712/Payloads/EIP712Data.d.ts +1 -1
- package/dist/neutral/eip-712/Payloads/EIP712Data.d.ts.map +1 -1
- package/dist/neutral/eip-712/Payloads/EIP712Signature.d.ts +1 -1
- package/dist/neutral/eip-712/Payloads/EIP712Signature.d.ts.map +1 -1
- package/dist/neutral/index.mjs +189 -132
- package/dist/neutral/index.mjs.map +4 -4
- package/dist/neutral/payloads/AddressPairPayload.d.ts +1 -1
- package/dist/neutral/payloads/AddressPairPayload.d.ts.map +1 -1
- package/dist/neutral/primitives/uncle/findUncles.d.ts +5 -5
- package/dist/neutral/simple/accountBalance/SimpleAccountBalanceViewer.d.ts +6 -6
- package/dist/neutral/simple/block/SimpleBlockViewer.d.ts +3 -3
- package/dist/neutral/simple/datalake/AbstractRestDataLake.d.ts +1 -1
- package/dist/neutral/simple/datalake/AbstractRestDataLake.d.ts.map +1 -1
- package/dist/neutral/simple/finalization/SimpleFinalizationViewer.d.ts +3 -3
- package/dist/neutral/simple/index.d.ts +1 -0
- package/dist/neutral/simple/index.d.ts.map +1 -1
- package/dist/neutral/simple/network/SimpleXyoNetwork.d.ts.map +1 -1
- package/dist/neutral/simple/signer/SimpleXyoSigner.d.ts.map +1 -1
- package/dist/neutral/simple/sync/RestSyncViewer.d.ts +22 -0
- package/dist/neutral/simple/sync/RestSyncViewer.d.ts.map +1 -0
- package/dist/neutral/simple/sync/index.d.ts +2 -0
- package/dist/neutral/simple/sync/index.d.ts.map +1 -0
- package/dist/neutral/simple/windowedBlock/SimpleWindowedBlockViewer.d.ts +15 -15
- package/dist/neutral/summary/model/BalancesStepSummary.d.ts +1 -1
- package/dist/neutral/summary/model/BalancesStepSummary.d.ts.map +1 -1
- package/dist/neutral/summary/model/SchemasStepSummary.d.ts +1 -1
- package/dist/neutral/summary/model/SchemasStepSummary.d.ts.map +1 -1
- package/dist/neutral/summary/model/TransfersSummary.d.ts +1 -1
- package/dist/neutral/summary/model/TransfersSummary.d.ts.map +1 -1
- package/dist/neutral/test/buildRandomTransaction.d.ts.map +1 -1
- package/dist/neutral/test/createGenesisBlock.d.ts.map +1 -1
- package/dist/neutral/test/createProducerChainStakeIntentTransaction.d.ts.map +1 -1
- package/dist/neutral/test/index.mjs +73 -70
- package/dist/neutral/test/index.mjs.map +3 -3
- package/dist/neutral/transaction/TransactionBuilder.d.ts +6 -6
- package/dist/neutral/transaction/TransactionBuilder.d.ts.map +1 -1
- package/dist/neutral/transaction/signTransaction.d.ts +3 -3
- package/package.json +19 -61
|
@@ -12,6 +12,7 @@ var __decorateClass = (decorators, target, key, kind) => {
|
|
|
12
12
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
13
13
|
|
|
14
14
|
// src/test/buildRandomTransaction.ts
|
|
15
|
+
import { asAddress as asAddress2 } from "@xylabs/sdk-js";
|
|
15
16
|
import { Account } from "@xyo-network/sdk-js";
|
|
16
17
|
import { asXL1BlockNumber, isAllowedBlockPayload } from "@xyo-network/xl1-protocol-lib";
|
|
17
18
|
|
|
@@ -29,7 +30,7 @@ function createTransferPayload(from, transfers, context) {
|
|
|
29
30
|
}
|
|
30
31
|
|
|
31
32
|
// src/transaction/buildTransaction.ts
|
|
32
|
-
import {
|
|
33
|
+
import { asAddress, toHex as toHex2 } from "@xylabs/sdk-js";
|
|
33
34
|
import {
|
|
34
35
|
asAnyPayload,
|
|
35
36
|
BoundWitnessBuilder,
|
|
@@ -58,7 +59,7 @@ async function buildTransaction(chain, onChainPayloads, offChainPayloads, signer
|
|
|
58
59
|
}
|
|
59
60
|
const fields = {
|
|
60
61
|
...txBoundWitnessFields,
|
|
61
|
-
from: from ?? (Array.isArray(signer) ?
|
|
62
|
+
from: from ?? asAddress(Array.isArray(signer) ? signer.at(0)?.address : signer.address, true)
|
|
62
63
|
};
|
|
63
64
|
if (script.length > 0) {
|
|
64
65
|
fields.script = script;
|
|
@@ -74,7 +75,7 @@ var buildRandomTransaction = async (chain, payloads, account, nbf = asXL1BlockNu
|
|
|
74
75
|
const sender = account ?? await Account.random();
|
|
75
76
|
if (elevatedPayloads.length === 0) {
|
|
76
77
|
const receiver = receiverAddress ?? (await Account.random()).address;
|
|
77
|
-
const transferPayload = createTransferPayload(sender.address, { [receiver]: 1n });
|
|
78
|
+
const transferPayload = createTransferPayload(asAddress2(sender.address, true), { [receiver]: 1n });
|
|
78
79
|
elevatedPayloads.push(transferPayload);
|
|
79
80
|
}
|
|
80
81
|
const hydratedTransaction = await buildTransaction(chain, elevatedPayloads, additionalPayloads, sender, nbf, exp);
|
|
@@ -87,12 +88,12 @@ import { XYO_ZERO_ADDRESS as XYO_ZERO_ADDRESS3 } from "@xyo-network/xl1-protocol
|
|
|
87
88
|
// src/CreatableProvider/AbstractCreatableProvider.ts
|
|
88
89
|
import {
|
|
89
90
|
AbstractCreatable,
|
|
90
|
-
assertEx as
|
|
91
|
+
assertEx as assertEx2,
|
|
91
92
|
IdLogger
|
|
92
93
|
} from "@xylabs/sdk-js";
|
|
93
94
|
|
|
94
95
|
// src/CreatableProvider/ProviderFactory.ts
|
|
95
|
-
import { assertEx
|
|
96
|
+
import { assertEx } from "@xylabs/sdk-js";
|
|
96
97
|
function providerFactoryDescription(factory, labels) {
|
|
97
98
|
return `${factory.providerName}:${factory.defaultMoniker}:${JSON.stringify(labels ?? factory.labels ?? {})}`;
|
|
98
99
|
}
|
|
@@ -113,7 +114,7 @@ var ProviderFactory = class _ProviderFactory {
|
|
|
113
114
|
this.dependencies = dependencies;
|
|
114
115
|
this.monikers = creatableProvider2.monikers;
|
|
115
116
|
this.scope = scope;
|
|
116
|
-
|
|
117
|
+
assertEx(this.monikers.includes(this.defaultMoniker), () => "defaultMoniker must be in monikers");
|
|
117
118
|
this.labels = Object.assign({}, creatableProvider2.labels ?? {}, labels ?? {});
|
|
118
119
|
this.providerName = creatableProvider2.name;
|
|
119
120
|
this._uniqueId = Symbol(providerFactoryDescription(this));
|
|
@@ -141,7 +142,7 @@ var ProviderFactory = class _ProviderFactory {
|
|
|
141
142
|
break;
|
|
142
143
|
}
|
|
143
144
|
case "context": {
|
|
144
|
-
const context =
|
|
145
|
+
const context = assertEx(
|
|
145
146
|
params?.context,
|
|
146
147
|
() => "Context is required for context-scoped providers"
|
|
147
148
|
);
|
|
@@ -162,7 +163,7 @@ var ProviderFactory = class _ProviderFactory {
|
|
|
162
163
|
scopeObject[this.resolvedMoniker] = resultPromise;
|
|
163
164
|
const result = await resultPromise;
|
|
164
165
|
if (start) {
|
|
165
|
-
|
|
166
|
+
assertEx(await result.start(), () => `Failed to start provider instance [${this.resolvedMoniker}]`);
|
|
166
167
|
}
|
|
167
168
|
return result;
|
|
168
169
|
}
|
|
@@ -207,9 +208,9 @@ var AbstractCreatableProvider = class extends AbstractCreatable {
|
|
|
207
208
|
return factory;
|
|
208
209
|
}
|
|
209
210
|
static async paramsHandler(params = {}) {
|
|
210
|
-
const context =
|
|
211
|
-
const config =
|
|
212
|
-
const locator =
|
|
211
|
+
const context = assertEx2(params.context, () => new Error("Context is required"));
|
|
212
|
+
const config = assertEx2(context.config, () => new Error("Context config is required"));
|
|
213
|
+
const locator = assertEx2(context.locator, () => new Error("Context locator is required"));
|
|
213
214
|
return await super.paramsHandler({
|
|
214
215
|
...params,
|
|
215
216
|
statusReporter: params.statusReporter ?? context.statusReporter,
|
|
@@ -305,7 +306,7 @@ var hasLabels = (factory) => {
|
|
|
305
306
|
|
|
306
307
|
// src/CreatableProvider/ProviderFactoryLocator.ts
|
|
307
308
|
import { hasAllLabels } from "@xylabs/sdk-js";
|
|
308
|
-
import { assertEx as
|
|
309
|
+
import { assertEx as assertEx3 } from "@xylabs/sdk-js";
|
|
309
310
|
var ProviderFactoryLocator = class _ProviderFactoryLocator {
|
|
310
311
|
_context;
|
|
311
312
|
_registry;
|
|
@@ -337,7 +338,7 @@ var ProviderFactoryLocator = class _ProviderFactoryLocator {
|
|
|
337
338
|
this._frozen = true;
|
|
338
339
|
}
|
|
339
340
|
async getInstance(moniker, { start = true, labels } = {}) {
|
|
340
|
-
return
|
|
341
|
+
return assertEx3(
|
|
341
342
|
await this.tryGetInstance(moniker, { start, labels }),
|
|
342
343
|
() => `No provider instance for the supplied config moniker [${moniker}]${labels ? ` & labels [${JSON.stringify(labels)}]` : ""} could be created`
|
|
343
344
|
);
|
|
@@ -352,7 +353,7 @@ var ProviderFactoryLocator = class _ProviderFactoryLocator {
|
|
|
352
353
|
* @returns A provider factory that matches the supplied moniker and labels or throws if one is not found
|
|
353
354
|
*/
|
|
354
355
|
locate(moniker, labels) {
|
|
355
|
-
return
|
|
356
|
+
return assertEx3(
|
|
356
357
|
this.tryLocate(moniker, labels),
|
|
357
358
|
() => `No module factory for the supplied config moniker [${moniker}]${labels ? ` & labels [${JSON.stringify(labels)}]` : ""} registered`
|
|
358
359
|
);
|
|
@@ -374,10 +375,10 @@ var ProviderFactoryLocator = class _ProviderFactoryLocator {
|
|
|
374
375
|
* @param labels The labels for the module factory
|
|
375
376
|
*/
|
|
376
377
|
register(factory, labels, primary = false) {
|
|
377
|
-
|
|
378
|
+
assertEx3(!this._frozen, () => "Cannot register a module factory after the locator has been frozen");
|
|
378
379
|
if (this.validateDepsOnRegister) {
|
|
379
380
|
const missingDeps = factory.dependencies.filter((dep) => !this.registered(dep));
|
|
380
|
-
|
|
381
|
+
assertEx3(missingDeps.length === 0, () => `Cannot register module factory [${factory.uniqueId.description}] due to missing dependencies: ${missingDeps.join(", ")}`);
|
|
381
382
|
}
|
|
382
383
|
registerCreatableProviderFactory(this._registry, factory, labels, primary);
|
|
383
384
|
return this;
|
|
@@ -425,7 +426,7 @@ var ProviderFactoryLocator = class _ProviderFactoryLocator {
|
|
|
425
426
|
for (const moniker in this.registry) {
|
|
426
427
|
for (const factory of this.registry[moniker] ?? []) {
|
|
427
428
|
const missingDeps = factory.dependencies.filter((dep) => !this.registered(dep));
|
|
428
|
-
|
|
429
|
+
assertEx3(missingDeps.length === 0, () => `Module factory [${factory.uniqueId.description}] is missing dependencies: ${missingDeps.join(", ")}`);
|
|
429
430
|
}
|
|
430
431
|
}
|
|
431
432
|
}
|
|
@@ -704,7 +705,7 @@ import { isDefined as isDefined3, isFalsy } from "@xylabs/sdk-js";
|
|
|
704
705
|
import { asXL1BlockRange } from "@xyo-network/xl1-protocol-lib";
|
|
705
706
|
|
|
706
707
|
// src/primitives/block/rate/timeHelpers.ts
|
|
707
|
-
import { assertEx as
|
|
708
|
+
import { assertEx as assertEx4, isDefined as isDefined2 } from "@xylabs/sdk-js";
|
|
708
709
|
var rateMultipliers = {
|
|
709
710
|
millis: 1,
|
|
710
711
|
seconds: 1e3,
|
|
@@ -722,7 +723,7 @@ var timeDurations = (timeInMs) => ({
|
|
|
722
723
|
weeks: timeInMs / (1e3 * 60 * 60 * 24 * 7)
|
|
723
724
|
});
|
|
724
725
|
var getTimeConfigInMilliseconds = (timeConfig) => {
|
|
725
|
-
const assertedTimeConfig =
|
|
726
|
+
const assertedTimeConfig = assertEx4(isDefined2(timeConfig) ? timeConfig : void 0, () => "Time configuration must be provided");
|
|
726
727
|
let totalMilliseconds = 0;
|
|
727
728
|
if ("years" in assertedTimeConfig) {
|
|
728
729
|
totalMilliseconds += assertedTimeConfig.years * 31536e6;
|
|
@@ -795,7 +796,7 @@ var calculateBlockRate = async (viewer, range, timeUnit) => {
|
|
|
795
796
|
};
|
|
796
797
|
|
|
797
798
|
// src/primitives/block/rate/stepRate.ts
|
|
798
|
-
import { assertEx as
|
|
799
|
+
import { assertEx as assertEx5 } from "@xylabs/sdk-js";
|
|
799
800
|
import {
|
|
800
801
|
asXL1BlockRange as asXL1BlockRange2,
|
|
801
802
|
isValidStep,
|
|
@@ -807,14 +808,14 @@ var stepRate = async (viewer, start, step, count = 1, timeUnit) => {
|
|
|
807
808
|
return await calculateBlockRate(viewer, range, timeUnit);
|
|
808
809
|
};
|
|
809
810
|
var calculateStepSizeRate = async (viewer, start, stepIndex, count = 1, timeUnit) => {
|
|
810
|
-
|
|
811
|
+
assertEx5(isValidStep(stepIndex), () => `Invalid step index: ${stepIndex}`);
|
|
811
812
|
const step = StepSizes[stepIndex];
|
|
812
813
|
return await stepRate(viewer, start, step, count, timeUnit);
|
|
813
814
|
};
|
|
814
815
|
|
|
815
816
|
// src/primitives/block/rate/timeRate.ts
|
|
816
817
|
import {
|
|
817
|
-
assertEx as
|
|
818
|
+
assertEx as assertEx6,
|
|
818
819
|
isDefined as isDefined4,
|
|
819
820
|
isDefinedNotNull
|
|
820
821
|
} from "@xylabs/sdk-js";
|
|
@@ -822,11 +823,11 @@ import { asXL1BlockNumber as asXL1BlockNumber2, asXL1BlockRange as asXL1BlockRan
|
|
|
822
823
|
var DEFAULT_TOLERANCE_MS = 3e4;
|
|
823
824
|
var DEFAULT_MAX_ATTEMPTS = 10;
|
|
824
825
|
var calculateTimeRate = async (viewer, timeConfig, startBlockNumber, timeUnit, toleranceMs = DEFAULT_TOLERANCE_MS, maxAttempts = DEFAULT_MAX_ATTEMPTS) => {
|
|
825
|
-
|
|
826
|
+
assertEx6(Object.keys(timeConfig ?? {}).length === 1, () => "Only one time unit should be specified in timeConfig");
|
|
826
827
|
const startBlock = isDefinedNotNull(startBlockNumber) ? await viewer.blockByNumber(startBlockNumber) : null;
|
|
827
828
|
const resolvedStartBlock = isDefinedNotNull(startBlock) ? startBlock[0] : (await viewer.currentBlock())[0];
|
|
828
829
|
const timeInMilliseconds = getTimeConfigInMilliseconds(timeConfig);
|
|
829
|
-
|
|
830
|
+
assertEx6(timeInMilliseconds > 0, () => "Time duration must be greater than zero");
|
|
830
831
|
const blocksPerMillisecondRate = 1 / (12 * 1e3);
|
|
831
832
|
const initialBlocksInDuration = Math.floor(blocksPerMillisecondRate * timeInMilliseconds);
|
|
832
833
|
const endBlockNumber = await findEndBlockRecursive(
|
|
@@ -844,14 +845,14 @@ var calculateTimeRate = async (viewer, timeConfig, startBlockNumber, timeUnit, t
|
|
|
844
845
|
);
|
|
845
846
|
};
|
|
846
847
|
var findEndBlockRecursive = async (viewer, startBlock, targetTimeMs, estimatedBlocksBack, toleranceMs, attemptsRemaining) => {
|
|
847
|
-
|
|
848
|
+
assertEx6(attemptsRemaining >= 0, () => "Maximum attempts reached while searching for end block");
|
|
848
849
|
const startBlockEpoch = startBlock.$epoch;
|
|
849
850
|
const estimatedEndBlockNumber = asXL1BlockNumber2(startBlock.block - estimatedBlocksBack, true);
|
|
850
851
|
if (estimatedEndBlockNumber < 0) {
|
|
851
852
|
throw new Error("Estimated end block number is less than zero");
|
|
852
853
|
}
|
|
853
854
|
const endBlock = await viewer.blockByNumber(estimatedEndBlockNumber);
|
|
854
|
-
const resolvedEndBlock =
|
|
855
|
+
const resolvedEndBlock = assertEx6(
|
|
855
856
|
isDefined4(endBlock?.[0]) ? endBlock[0] : void 0,
|
|
856
857
|
() => `Could not retrieve block ${estimatedEndBlockNumber} for time rate calculation`
|
|
857
858
|
);
|
|
@@ -1015,30 +1016,30 @@ var flattenHydratedBlock = (hydratedBlock) => {
|
|
|
1015
1016
|
var flattenHydratedBlocks = (hydratedBlocks) => hydratedBlocks.flatMap((blk) => flattenHydratedBlock(blk));
|
|
1016
1017
|
|
|
1017
1018
|
// src/block/hydrate/hydrateBlock.ts
|
|
1018
|
-
import { assertEx as
|
|
1019
|
+
import { assertEx as assertEx7 } from "@xylabs/sdk-js";
|
|
1019
1020
|
import { asAnyPayload as asAnyPayload2 } from "@xyo-network/sdk-js";
|
|
1020
1021
|
import { asBlockBoundWitnessWithStorageMeta, isTransactionBoundWitnessWithStorageMeta } from "@xyo-network/xl1-protocol-lib";
|
|
1021
1022
|
var hydrateBlock = async (context, hash, maxDepth = 1, minDepth = maxDepth) => {
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1023
|
+
assertEx7(maxDepth >= 0, () => "maxDepth must be greater than or equal to 0");
|
|
1024
|
+
assertEx7(minDepth >= 0, () => "minDepth must be greater than or equal to 0");
|
|
1025
|
+
assertEx7(maxDepth >= minDepth, () => "maxDepth must be greater than or equal to minDepth");
|
|
1025
1026
|
const { chainMap } = context;
|
|
1026
1027
|
const [block] = await chainMap.get([hash]);
|
|
1027
|
-
const bw =
|
|
1028
|
-
|
|
1028
|
+
const bw = assertEx7(asBlockBoundWitnessWithStorageMeta(
|
|
1029
|
+
assertEx7(block, () => `block ${hash} not found`)
|
|
1029
1030
|
), () => `hash ${hash} is not a BlockBoundWitness`);
|
|
1030
1031
|
if (maxDepth === 0) return [bw, []];
|
|
1031
1032
|
const blkPayloads = (await chainMap.get(bw.payload_hashes)).map((p) => asAnyPayload2(p, true));
|
|
1032
|
-
if (minDepth === 1)
|
|
1033
|
+
if (minDepth === 1) assertEx7(allHashesPresent(bw.payload_hashes, blkPayloads), () => `Unable to find all payloads for block ${hash}`);
|
|
1033
1034
|
if (maxDepth === 1) return [bw, blkPayloads];
|
|
1034
1035
|
const transactions = blkPayloads.filter(isTransactionBoundWitnessWithStorageMeta);
|
|
1035
1036
|
const transactionsPayloadHashes = transactions.flatMap((tx) => tx.payload_hashes);
|
|
1036
1037
|
const transactionsPayloads = (await chainMap.get(transactionsPayloadHashes)).map((p) => asAnyPayload2(p, true));
|
|
1037
|
-
|
|
1038
|
+
assertEx7(allHashesPresent(transactionsPayloadHashes, transactionsPayloads), () => `Unable to find all payloads for transactions in block ${hash}`);
|
|
1038
1039
|
const allPayloadsHashes = new Set([...blkPayloads, ...transactionsPayloads].flatMap((p) => p._hash));
|
|
1039
1040
|
const allPayloads = (await chainMap.get([...allPayloadsHashes])).map((p) => asAnyPayload2(p, true));
|
|
1040
1041
|
const allPayloadsFiltered = allPayloads.filter((p) => allPayloadsHashes.has(p._hash));
|
|
1041
|
-
if (maxDepth === 2)
|
|
1042
|
+
if (maxDepth === 2) assertEx7(allHashesPresent(
|
|
1042
1043
|
[...allPayloadsHashes],
|
|
1043
1044
|
allPayloadsFiltered
|
|
1044
1045
|
), () => `Unable to find all payloads for transactions in block ${hash}`);
|
|
@@ -1110,7 +1111,7 @@ async function blockFromBlockNumber(context, blockNumber) {
|
|
|
1110
1111
|
|
|
1111
1112
|
// src/block/primitives/validateTransactionOpcodes.ts
|
|
1112
1113
|
import {
|
|
1113
|
-
assertEx as
|
|
1114
|
+
assertEx as assertEx8,
|
|
1114
1115
|
isHash,
|
|
1115
1116
|
toSafeJsonString as toSafeJsonString2
|
|
1116
1117
|
} from "@xylabs/sdk-js";
|
|
@@ -1128,13 +1129,13 @@ async function validateTransactionsOpcodes(txs) {
|
|
|
1128
1129
|
case "elevate": {
|
|
1129
1130
|
const [hash, ...rest] = args;
|
|
1130
1131
|
const txPayloadsWithStorageMeta = await PayloadBuilder3.addStorageMeta(txPayloads);
|
|
1131
|
-
|
|
1132
|
+
assertEx8(rest.length === 0, () => `Invalid elevate operation ${opCode} ${args.join(", ")} - Too many Arguments`);
|
|
1132
1133
|
if (isHash(hash)) {
|
|
1133
|
-
|
|
1134
|
+
assertEx8(
|
|
1134
1135
|
txBw.payload_hashes.includes(hash),
|
|
1135
1136
|
() => `Invalid elevate operation ${opCode} ${args.join(", ")} - Hash not in payload hashes => ${toSafeJsonString2(txBw, 20)}`
|
|
1136
1137
|
);
|
|
1137
|
-
const txPayload =
|
|
1138
|
+
const txPayload = assertEx8(
|
|
1138
1139
|
txPayloadsWithStorageMeta.find((p) => p._hash === hash),
|
|
1139
1140
|
() => `Invalid elevate operation ${opCode} ${args.join(", ")} - Payload not found`
|
|
1140
1141
|
);
|
|
@@ -1182,7 +1183,7 @@ var findMostRecentBlock = async (chainArchivist, nextOptions = DEFAULT_NEXT_OPTI
|
|
|
1182
1183
|
};
|
|
1183
1184
|
|
|
1184
1185
|
// src/primitives/state/hydratedBlockByNumber.ts
|
|
1185
|
-
import { assertEx as
|
|
1186
|
+
import { assertEx as assertEx9, spanAsync as spanAsync2 } from "@xylabs/sdk-js";
|
|
1186
1187
|
async function hydratedBlockByNumber(context, blockNumber) {
|
|
1187
1188
|
return await spanAsync2("hydratedBlockByNumber", async () => {
|
|
1188
1189
|
if (blockNumber < 0) throw new Error(`Block number ${blockNumber} is less than 0`);
|
|
@@ -1190,7 +1191,7 @@ async function hydratedBlockByNumber(context, blockNumber) {
|
|
|
1190
1191
|
if (blockNumber % 1 !== 0) throw new Error(`Block number ${blockNumber} is not an integer`);
|
|
1191
1192
|
const cacheKey = `${blockNumber}`;
|
|
1192
1193
|
return await withContextCacheResponse(context, "hydratedBlockByNumber", cacheKey, async () => {
|
|
1193
|
-
const block =
|
|
1194
|
+
const block = assertEx9(
|
|
1194
1195
|
await blockFromBlockNumber(context, blockNumber),
|
|
1195
1196
|
() => `Could not find block for block number ${blockNumber}`
|
|
1196
1197
|
);
|
|
@@ -1279,7 +1280,7 @@ var ConfigZod = z18.extend(BaseConfigZod, {
|
|
|
1279
1280
|
|
|
1280
1281
|
// src/simple/block/SimpleBlockViewer.ts
|
|
1281
1282
|
import {
|
|
1282
|
-
assertEx as
|
|
1283
|
+
assertEx as assertEx10,
|
|
1283
1284
|
exists,
|
|
1284
1285
|
isUndefined as isUndefined3
|
|
1285
1286
|
} from "@xylabs/sdk-js";
|
|
@@ -1347,11 +1348,11 @@ var SimpleBlockViewer = class extends AbstractCreatableProvider {
|
|
|
1347
1348
|
static async paramsHandler(params) {
|
|
1348
1349
|
const headPollIntervalMs = params.headPollIntervalMs;
|
|
1349
1350
|
if (headPollIntervalMs !== void 0) {
|
|
1350
|
-
|
|
1351
|
+
assertEx10(headPollIntervalMs >= MIN_HEAD_POLL_INTERVAL_MS, () => `headPollIntervalMs must be at least ${MIN_HEAD_POLL_INTERVAL_MS}ms`);
|
|
1351
1352
|
}
|
|
1352
1353
|
return {
|
|
1353
1354
|
...await super.paramsHandler(params),
|
|
1354
|
-
finalizedArchivist:
|
|
1355
|
+
finalizedArchivist: assertEx10(params.finalizedArchivist, () => "finalizedArchivist is required"),
|
|
1355
1356
|
headPollIntervalMs
|
|
1356
1357
|
};
|
|
1357
1358
|
}
|
|
@@ -1380,8 +1381,8 @@ var SimpleBlockViewer = class extends AbstractCreatableProvider {
|
|
|
1380
1381
|
}
|
|
1381
1382
|
async blocksByHash(hash, limit = 50) {
|
|
1382
1383
|
return await this.spanAsync("blocksByHash", async () => {
|
|
1383
|
-
|
|
1384
|
-
|
|
1384
|
+
assertEx10(limit > 0, () => "limit must be greater than 0");
|
|
1385
|
+
assertEx10(limit <= 100, () => "limit must be less than 100");
|
|
1385
1386
|
const blocks = [];
|
|
1386
1387
|
let current = await this.blockByHash(hash);
|
|
1387
1388
|
while (current && blocks.length < limit) {
|
|
@@ -1395,8 +1396,8 @@ var SimpleBlockViewer = class extends AbstractCreatableProvider {
|
|
|
1395
1396
|
}
|
|
1396
1397
|
async blocksByNumber(blockNumber, limit = 50) {
|
|
1397
1398
|
return await this.spanAsync("blocksByNumber", async () => {
|
|
1398
|
-
|
|
1399
|
-
|
|
1399
|
+
assertEx10(limit > 0, () => "limit must be greater than 0");
|
|
1400
|
+
assertEx10(limit <= 100, () => "limit must be less than 100");
|
|
1400
1401
|
const chainContext = await this.getChainContextRead();
|
|
1401
1402
|
if (isUndefined3(chainContext.head)) {
|
|
1402
1403
|
return [];
|
|
@@ -1414,7 +1415,7 @@ var SimpleBlockViewer = class extends AbstractCreatableProvider {
|
|
|
1414
1415
|
}
|
|
1415
1416
|
async chainId(blockNumber = "latest") {
|
|
1416
1417
|
return await this.spanAsync("chainId", async () => {
|
|
1417
|
-
return blockNumber === "latest" ? (await this.finalizationViewer.headBlock()).chain :
|
|
1418
|
+
return blockNumber === "latest" ? (await this.finalizationViewer.headBlock()).chain : assertEx10(await this.blockByNumber(blockNumber), () => `Block not found [${blockNumber}]`)[0].chain;
|
|
1418
1419
|
}, this.context);
|
|
1419
1420
|
}
|
|
1420
1421
|
async createHandler() {
|
|
@@ -1527,7 +1528,7 @@ SimpleBlockViewer = __decorateClass([
|
|
|
1527
1528
|
|
|
1528
1529
|
// src/simple/chainContractViewer/SimpleChainContractViewer.ts
|
|
1529
1530
|
import {
|
|
1530
|
-
assertEx as
|
|
1531
|
+
assertEx as assertEx11
|
|
1531
1532
|
} from "@xylabs/sdk-js";
|
|
1532
1533
|
import { ChainContractViewerMoniker, FinalizationViewerMoniker as FinalizationViewerMoniker2 } from "@xyo-network/xl1-protocol-lib";
|
|
1533
1534
|
var SimpleChainContractViewer = class extends AbstractCreatableProvider {
|
|
@@ -1545,7 +1546,7 @@ var SimpleChainContractViewer = class extends AbstractCreatableProvider {
|
|
|
1545
1546
|
let contractViewer = this;
|
|
1546
1547
|
let forkedAtBlockNumber = await contractViewer.forkedAtBlockNumber();
|
|
1547
1548
|
while (forkedAtBlockNumber !== null && blockNumber <= forkedAtBlockNumber) {
|
|
1548
|
-
contractViewer =
|
|
1549
|
+
contractViewer = assertEx11(await contractViewer.forkedChainContractViewer());
|
|
1549
1550
|
forkedAtBlockNumber = await contractViewer.forkedAtBlockNumber();
|
|
1550
1551
|
chainId = await contractViewer.chainId();
|
|
1551
1552
|
}
|
|
@@ -1586,7 +1587,7 @@ SimpleChainContractViewer = __decorateClass([
|
|
|
1586
1587
|
], SimpleChainContractViewer);
|
|
1587
1588
|
|
|
1588
1589
|
// src/simple/finalization/SimpleFinalizationViewer.ts
|
|
1589
|
-
import { assertEx as
|
|
1590
|
+
import { assertEx as assertEx12 } from "@xylabs/sdk-js";
|
|
1590
1591
|
import {
|
|
1591
1592
|
asSignedHydratedBlockWithStorageMeta as asSignedHydratedBlockWithStorageMeta2,
|
|
1592
1593
|
ChainContractViewerMoniker as ChainContractViewerMoniker2,
|
|
@@ -1615,7 +1616,7 @@ var SimpleFinalizationViewer = class extends AbstractCreatableProvider {
|
|
|
1615
1616
|
static async paramsHandler(params) {
|
|
1616
1617
|
return {
|
|
1617
1618
|
...await super.paramsHandler(params),
|
|
1618
|
-
finalizedArchivist:
|
|
1619
|
+
finalizedArchivist: assertEx12(params.finalizedArchivist, () => "finalizedArchivist is required")
|
|
1619
1620
|
};
|
|
1620
1621
|
}
|
|
1621
1622
|
chainId() {
|
|
@@ -1623,18 +1624,18 @@ var SimpleFinalizationViewer = class extends AbstractCreatableProvider {
|
|
|
1623
1624
|
}
|
|
1624
1625
|
async createHandler() {
|
|
1625
1626
|
await super.createHandler();
|
|
1626
|
-
this._chainId =
|
|
1627
|
+
this._chainId = assertEx12(this.config.chain.id ?? (await findMostRecentBlock(this.params.finalizedArchivist))?.chain, () => "chain.id is required if empty archivist");
|
|
1627
1628
|
this._store = { chainMap: this.params.finalizedArchivist };
|
|
1628
1629
|
}
|
|
1629
1630
|
async head() {
|
|
1630
1631
|
return await this.spanAsync("head", async () => {
|
|
1631
|
-
const currentHead =
|
|
1632
|
+
const currentHead = assertEx12(await this.getCurrentHead(), () => "Could not find most recent block [currentBlock]");
|
|
1632
1633
|
const cache = this.hydratedBlockCache;
|
|
1633
1634
|
const block = await cache.get(currentHead._hash);
|
|
1634
1635
|
if (!block) {
|
|
1635
1636
|
this.logger?.error(`Could not find current block with hash ${currentHead._hash}`);
|
|
1636
1637
|
}
|
|
1637
|
-
return
|
|
1638
|
+
return assertEx12(block, () => "Could not find current block");
|
|
1638
1639
|
}, this.context);
|
|
1639
1640
|
}
|
|
1640
1641
|
async headBlock() {
|
|
@@ -1660,8 +1661,8 @@ var SimpleFinalizationViewer = class extends AbstractCreatableProvider {
|
|
|
1660
1661
|
}
|
|
1661
1662
|
async getCurrentHead() {
|
|
1662
1663
|
const chainArchivist = this.finalizedArchivist;
|
|
1663
|
-
const result =
|
|
1664
|
-
|
|
1664
|
+
const result = assertEx12(await findMostRecentBlock(chainArchivist), () => "Could not find most recent block [getCurrentHead]");
|
|
1665
|
+
assertEx12(result?.chain === this._chainId, () => "Chain ID does not match head block chain ID");
|
|
1665
1666
|
return result;
|
|
1666
1667
|
}
|
|
1667
1668
|
};
|
|
@@ -1673,7 +1674,7 @@ SimpleFinalizationViewer = __decorateClass([
|
|
|
1673
1674
|
], SimpleFinalizationViewer);
|
|
1674
1675
|
|
|
1675
1676
|
// src/test/buildRandomChain.ts
|
|
1676
|
-
import { asAddress as
|
|
1677
|
+
import { asAddress as asAddress6, assertEx as assertEx15 } from "@xylabs/sdk-js";
|
|
1677
1678
|
import {
|
|
1678
1679
|
Account as Account3,
|
|
1679
1680
|
asSchema as asSchema2,
|
|
@@ -1692,7 +1693,7 @@ import {
|
|
|
1692
1693
|
} from "@xyo-network/xl1-protocol-lib";
|
|
1693
1694
|
|
|
1694
1695
|
// src/test/buildBlock.ts
|
|
1695
|
-
import { assertEx as
|
|
1696
|
+
import { assertEx as assertEx13, isDefined as isDefined8 } from "@xylabs/sdk-js";
|
|
1696
1697
|
import {
|
|
1697
1698
|
asAnyPayload as asAnyPayload3,
|
|
1698
1699
|
BoundWitnessBuilder as BoundWitnessBuilder2,
|
|
@@ -1796,7 +1797,7 @@ async function buildBlock(options) {
|
|
|
1796
1797
|
const completedStepReward = calculateCompletedStepReward(i, stepRewardPoolBalance);
|
|
1797
1798
|
completedStepRewardTransfers.push(createTransferPayload(chainStepRewardAddress, { [completedStepRewardHolderAddress]: completedStepReward }));
|
|
1798
1799
|
}
|
|
1799
|
-
step_hashes.push(
|
|
1800
|
+
step_hashes.push(assertEx13(previousBlockHash, () => `Previous block hash is required for step ${step} at block ${blockNumber}`));
|
|
1800
1801
|
} else {
|
|
1801
1802
|
if (isDefined8(inStepHashes.at(i))) {
|
|
1802
1803
|
step_hashes.push(inStepHashes[i]);
|
|
@@ -1819,7 +1820,7 @@ async function buildBlock(options) {
|
|
|
1819
1820
|
step_hashes,
|
|
1820
1821
|
protocol
|
|
1821
1822
|
}).meta({ $epoch: Date.now(), $signatures: [] }).signers(signers).payloads(await PayloadBuilder4.addStorageMeta(payloads)).build();
|
|
1822
|
-
|
|
1823
|
+
assertEx13(isBlockBoundWitness(bw), () => "Build of BlockBoundWitness failed");
|
|
1823
1824
|
return [await PayloadBuilder4.addStorageMeta(bw), txPayloads.map((p) => asAnyPayload3(p, true))];
|
|
1824
1825
|
}
|
|
1825
1826
|
|
|
@@ -1840,7 +1841,7 @@ async function buildNextBlock(previousBlock, txs, blockPayloads, signers, chainS
|
|
|
1840
1841
|
}
|
|
1841
1842
|
|
|
1842
1843
|
// src/test/buildRandomGenesisBlock.ts
|
|
1843
|
-
import { asAddress, assertEx as
|
|
1844
|
+
import { asAddress as asAddress3, assertEx as assertEx14 } from "@xylabs/sdk-js";
|
|
1844
1845
|
import {
|
|
1845
1846
|
Account as Account2,
|
|
1846
1847
|
asAnyPayload as asAnyPayload4,
|
|
@@ -1867,9 +1868,10 @@ async function buildGenesisBlock(chainId, txs, blockPayloads, signers, chainStep
|
|
|
1867
1868
|
}
|
|
1868
1869
|
|
|
1869
1870
|
// src/test/buildRandomGenesisBlock.ts
|
|
1870
|
-
var TestChainId =
|
|
1871
|
+
var TestChainId = assertEx14(asAddress3("c5fe2e6F6841Cbab12d8C0618Be2DF8C6156cC44"));
|
|
1871
1872
|
|
|
1872
1873
|
// src/test/createGenesisBlock.ts
|
|
1874
|
+
import { asAddress as asAddress5 } from "@xylabs/sdk-js";
|
|
1873
1875
|
import { PayloadBuilder as PayloadBuilder7 } from "@xyo-network/sdk-js";
|
|
1874
1876
|
import {
|
|
1875
1877
|
BlockBoundWitnessSchemaPayload,
|
|
@@ -1882,6 +1884,7 @@ import {
|
|
|
1882
1884
|
} from "@xyo-network/xl1-schema";
|
|
1883
1885
|
|
|
1884
1886
|
// src/test/createProducerChainStakeIntentTransaction.ts
|
|
1887
|
+
import { asAddress as asAddress4 } from "@xylabs/sdk-js";
|
|
1885
1888
|
import { PayloadBuilder as PayloadBuilder6 } from "@xyo-network/sdk-js";
|
|
1886
1889
|
import {
|
|
1887
1890
|
asXL1BlockNumber as asXL1BlockNumber6,
|
|
@@ -1908,7 +1911,7 @@ var createGenesisBlock = async (initialBlockProducer, nextContractAddress, genes
|
|
|
1908
1911
|
ChainStakeIntentPayloadJsonSchemaPayload,
|
|
1909
1912
|
HashPayloadJsonSchemaPayload
|
|
1910
1913
|
]);
|
|
1911
|
-
const intentPayload = await createProducerChainStakeIntent(initialBlockProducer.address, 1, 0);
|
|
1914
|
+
const intentPayload = await createProducerChainStakeIntent(asAddress5(initialBlockProducer.address, true), 1, 0);
|
|
1912
1915
|
blockPayloads.push(intentPayload);
|
|
1913
1916
|
if (genesisBlockRewardAmount > 0n) {
|
|
1914
1917
|
blockPayloads.push(await PayloadBuilder7.addHashMeta(createTransferPayload(
|
|
@@ -1920,7 +1923,7 @@ var createGenesisBlock = async (initialBlockProducer, nextContractAddress, genes
|
|
|
1920
1923
|
};
|
|
1921
1924
|
|
|
1922
1925
|
// src/test/buildRandomChain.ts
|
|
1923
|
-
var TestGenesisBlockRewardAddress =
|
|
1926
|
+
var TestGenesisBlockRewardAddress = assertEx15(asAddress6("fa7f0bb865a4bfff3d5e2c726d3e063297014da9"));
|
|
1924
1927
|
var buildRandomChain = async (blockProducer, count = 10, previousBlock, chainId, transactionAccount, receiverAddresses) => {
|
|
1925
1928
|
const chainIdToUse = chainId ?? TestChainId;
|
|
1926
1929
|
const blocks = [];
|
|
@@ -1932,13 +1935,13 @@ var buildRandomChain = async (blockProducer, count = 10, previousBlock, chainId,
|
|
|
1932
1935
|
blockProducer,
|
|
1933
1936
|
chainIdToUse,
|
|
1934
1937
|
1000000000n * 10n ** 18n,
|
|
1935
|
-
transactionAccountToUse.address
|
|
1938
|
+
asAddress6(transactionAccountToUse.address, true)
|
|
1936
1939
|
);
|
|
1937
1940
|
blocks.push(block);
|
|
1938
1941
|
remaining = remaining - 1;
|
|
1939
1942
|
lastBlock = block;
|
|
1940
1943
|
}
|
|
1941
|
-
const resolvedReceiverAddresses = receiverAddresses ?? [(await Account3.random()).address];
|
|
1944
|
+
const resolvedReceiverAddresses = receiverAddresses ?? [asAddress6((await Account3.random()).address, true)];
|
|
1942
1945
|
let saltCounter = 0;
|
|
1943
1946
|
while (remaining > 0) {
|
|
1944
1947
|
saltCounter += 1;
|
|
@@ -1957,8 +1960,8 @@ var buildRandomChain = async (blockProducer, count = 10, previousBlock, chainId,
|
|
|
1957
1960
|
receiverAddress
|
|
1958
1961
|
));
|
|
1959
1962
|
}
|
|
1960
|
-
const previousBlock2 =
|
|
1961
|
-
const block = await buildNextBlock(previousBlock2, txs, [], [blockProducer], transactionAccountToUse.address);
|
|
1963
|
+
const previousBlock2 = assertEx15(lastBlock?.[0], () => new Error("No last block"));
|
|
1964
|
+
const block = await buildNextBlock(previousBlock2, txs, [], [blockProducer], asAddress6(transactionAccountToUse.address, true));
|
|
1962
1965
|
blocks.push(block);
|
|
1963
1966
|
remaining = remaining - 1;
|
|
1964
1967
|
lastBlock = block;
|