@xyo-network/xl1-protocol-sdk 1.29.8 → 1.30.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 +157 -38
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/neutral/simple/block/SimpleBlockViewer.d.ts +2 -3
- package/dist/neutral/simple/block/SimpleBlockViewer.d.ts.map +1 -1
- package/dist/neutral/simple/mempool/SimpleMempoolRunner.d.ts +14 -0
- package/dist/neutral/simple/mempool/SimpleMempoolRunner.d.ts.map +1 -1
- package/dist/neutral/simple/mempool/SimpleMempoolViewer.d.ts +28 -0
- package/dist/neutral/simple/mempool/SimpleMempoolViewer.d.ts.map +1 -1
- package/dist/neutral/test/index.mjs +25 -56
- package/dist/neutral/test/index.mjs.map +1 -1
- package/package.json +5 -5
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Hash } from '@xylabs/sdk-js';
|
|
2
2
|
import type { Payload, ReadArchivist, WithHashMeta } from '@xyo-network/sdk-js';
|
|
3
|
-
import { BlockContextRead, BlockRate, BlockViewer, ChainContextRead, ChainId,
|
|
3
|
+
import { BlockContextRead, BlockRate, BlockViewer, ChainContextRead, ChainId, FinalizationViewer, type SignedHydratedBlockWithHashMeta, SignedHydratedBlockWithStorageMeta, SingleTimeConfig, TimeDurations, type XL1BlockNumber, XL1BlockRange } from '@xyo-network/xl1-protocol-lib';
|
|
4
4
|
import type { CreatableProviderParams } from '../../CreatableProvider/index.ts';
|
|
5
5
|
import { AbstractCreatableProvider } from '../../CreatableProvider/index.ts';
|
|
6
6
|
import { LruCacheMap } from '../../driver/index.ts';
|
|
@@ -18,10 +18,9 @@ export declare class SimpleBlockViewer extends AbstractCreatableProvider<SimpleB
|
|
|
18
18
|
static readonly monikers: "BlockViewer"[];
|
|
19
19
|
moniker: "BlockViewer";
|
|
20
20
|
protected _store?: ChainStoreRead;
|
|
21
|
-
protected dataLakeViewer?: DataLakeViewer;
|
|
22
21
|
protected finalizationViewer: FinalizationViewer;
|
|
23
22
|
protected payloadCache: LruCacheMap<import("@xylabs/sdk-js").BrandedHash, WithHashMeta<Payload>, () => void>;
|
|
24
|
-
protected
|
|
23
|
+
protected signedHydratedBlockWithHashMetaCache: LruCacheMap<import("@xylabs/sdk-js").BrandedHash, [{
|
|
25
24
|
schema: "network.xyo.boundwitness" & {
|
|
26
25
|
readonly __schema: true;
|
|
27
26
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SimpleBlockViewer.d.ts","sourceRoot":"","sources":["../../../../src/simple/block/SimpleBlockViewer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAI1C,OAAO,KAAK,EACV,OAAO,EAAE,aAAa,EAAE,YAAY,EACrC,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAEL,gBAAgB,EAChB,SAAS,EAAE,WAAW,EAAsB,gBAAgB,EAC5D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"SimpleBlockViewer.d.ts","sourceRoot":"","sources":["../../../../src/simple/block/SimpleBlockViewer.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,13 @@ import { AbstractCreatableProvider, CreatableProviderParams } from '../../Creata
|
|
|
7
7
|
export interface SimpleMempoolRunnerParams extends CreatableProviderParams {
|
|
8
8
|
externalMempools?: MempoolViewer[];
|
|
9
9
|
maxExpAhead?: number;
|
|
10
|
+
/**
|
|
11
|
+
* Maximum number of pending transactions allowed in the pool. When exceeded after
|
|
12
|
+
* `submitTransactions` or `prunePendingTransactions`, the runner evicts the excess —
|
|
13
|
+
* demoted transactions first (when the resolved viewer supports it), then oldest
|
|
14
|
+
* by sequence. `0` (default) disables the cap.
|
|
15
|
+
*/
|
|
16
|
+
maxPendingTransactions?: number;
|
|
10
17
|
pendingBlocksArchivist: ArchivistInstance;
|
|
11
18
|
pendingTransactionsArchivist: ArchivistInstance;
|
|
12
19
|
syncInterval?: number;
|
|
@@ -33,6 +40,7 @@ export declare class SimpleMempoolRunner extends AbstractCreatableProvider<Simpl
|
|
|
33
40
|
protected _chainContractViewer: ChainContractViewer;
|
|
34
41
|
protected _deadLetterQueueRunner?: DeadLetterQueueRunner;
|
|
35
42
|
protected _finalizationViewer: FinalizationViewer;
|
|
43
|
+
protected _mempoolViewer?: MempoolViewer;
|
|
36
44
|
protected _transactionValidationViewer: TransactionValidationViewer;
|
|
37
45
|
private _syncMutex;
|
|
38
46
|
private _syncTimerId;
|
|
@@ -41,6 +49,7 @@ export declare class SimpleMempoolRunner extends AbstractCreatableProvider<Simpl
|
|
|
41
49
|
protected get externalMempools(): MempoolViewer[];
|
|
42
50
|
protected get finalizationViewer(): FinalizationViewer;
|
|
43
51
|
protected get maxExpAhead(): number;
|
|
52
|
+
protected get maxPendingTransactions(): number;
|
|
44
53
|
protected get pendingBlocksArchivist(): ArchivistInstance<import("@xyo-network/sdk-js").ArchivistParams<import("@xyo-network/sdk-js").AnyConfigSchema<import("@xyo-network/sdk-js").ArchivistConfig>>, import("@xyo-network/sdk-js").ArchivistModuleEventData, Payload>;
|
|
45
54
|
protected get pendingTransactionsArchivist(): ArchivistInstance<import("@xyo-network/sdk-js").ArchivistParams<import("@xyo-network/sdk-js").AnyConfigSchema<import("@xyo-network/sdk-js").ArchivistConfig>>, import("@xyo-network/sdk-js").ArchivistModuleEventData, Payload>;
|
|
46
55
|
protected get syncInterval(): number;
|
|
@@ -55,6 +64,11 @@ export declare class SimpleMempoolRunner extends AbstractCreatableProvider<Simpl
|
|
|
55
64
|
submitTransactions(transactions: SignedHydratedTransaction[]): Promise<Hash[]>;
|
|
56
65
|
protected startHandler(): Promise<void>;
|
|
57
66
|
protected stopHandler(): Promise<void>;
|
|
67
|
+
private collectAllPendingTransactionBundles;
|
|
68
|
+
private enforceCap;
|
|
69
|
+
private finalizePruneTransactionsResult;
|
|
70
|
+
private forgetBundleHashes;
|
|
71
|
+
private orderForEviction;
|
|
58
72
|
private routeRejectedTransaction;
|
|
59
73
|
private simpleBlockValidationCheck;
|
|
60
74
|
private simpleTransactionValidationCheck;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SimpleMempoolRunner.d.ts","sourceRoot":"","sources":["../../../../src/simple/mempool/SimpleMempoolRunner.ts"],"names":[],"mappings":"AAAA,OAAO,EACa,KAAK,IAAI,EAC5B,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EACY,OAAO,EAGzB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,qBAAqB,EAErB,mBAAmB,EAEnB,qBAAqB,EAGrB,kBAAkB,EAG0D,mBAAmB,EAAE,aAAa,EACxF,KAAK,aAAa,
|
|
1
|
+
{"version":3,"file":"SimpleMempoolRunner.d.ts","sourceRoot":"","sources":["../../../../src/simple/mempool/SimpleMempoolRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,20 @@
|
|
|
1
|
+
import { type Hash } from '@xylabs/sdk-js';
|
|
1
2
|
import type { ArchivistInstance } from '@xyo-network/sdk-js';
|
|
2
3
|
import { type MempoolViewer, PendingTransactionsOptions, type SignedHydratedBlockWithHashMeta, type SignedHydratedTransactionWithHashMeta, WindowedBlockViewer } from '@xyo-network/xl1-protocol-lib';
|
|
3
4
|
import { AbstractCreatableProvider, CreatableProviderParams } from '../../CreatableProvider/index.ts';
|
|
5
|
+
/** Per-bundle handout statistics used to demote transactions that producers keep rejecting. */
|
|
6
|
+
export interface HandoutStats {
|
|
7
|
+
firstHandoutAt: number;
|
|
8
|
+
handouts: number;
|
|
9
|
+
}
|
|
4
10
|
/** Parameters for SimpleMempoolViewer. */
|
|
5
11
|
export interface SimpleMempoolViewerParams extends CreatableProviderParams {
|
|
12
|
+
/** Number of handouts before a transaction is considered demoted. Defaults to 3. */
|
|
13
|
+
demotionThreshold?: number;
|
|
6
14
|
/** External mempool viewers (reserved for future use). */
|
|
7
15
|
externalMempools?: MempoolViewer[];
|
|
16
|
+
/** Maximum age (in blocks) of a handout-stats entry before it is garbage collected. Defaults to 1000. */
|
|
17
|
+
handoutStatsTtlBlocks?: number;
|
|
8
18
|
/** Maximum fraction (0–1) of mempool inclusion candidates to return. Defaults to 0.66. */
|
|
9
19
|
mempoolSelectionRatio?: number;
|
|
10
20
|
pendingBlocksArchivist: ArchivistInstance;
|
|
@@ -16,14 +26,30 @@ export declare class SimpleMempoolViewer extends AbstractCreatableProvider<Simpl
|
|
|
16
26
|
static readonly dependencies: "WindowedBlockViewer"[];
|
|
17
27
|
static readonly monikers: "MempoolViewer"[];
|
|
18
28
|
moniker: "MempoolViewer";
|
|
29
|
+
private _handoutStats;
|
|
19
30
|
private _windowedBlockViewer?;
|
|
31
|
+
protected get demotionThreshold(): number;
|
|
32
|
+
protected get handoutStatsTtlBlocks(): number;
|
|
20
33
|
protected get pendingBlocksArchivist(): ArchivistInstance<import("@xyo-network/sdk-js").ArchivistParams<import("@xyo-network/sdk-js").AnyConfigSchema<import("@xyo-network/sdk-js").ArchivistConfig>>, import("@xyo-network/sdk-js").ArchivistModuleEventData, import("@xyo-network/sdk-js").Payload>;
|
|
21
34
|
protected get pendingTransactionsArchivist(): ArchivistInstance<import("@xyo-network/sdk-js").ArchivistParams<import("@xyo-network/sdk-js").AnyConfigSchema<import("@xyo-network/sdk-js").ArchivistConfig>>, import("@xyo-network/sdk-js").ArchivistModuleEventData, import("@xyo-network/sdk-js").Payload>;
|
|
22
35
|
protected get windowedBlockViewer(): WindowedBlockViewer<"WindowedBlockViewer">;
|
|
23
36
|
createHandler(): Promise<void>;
|
|
37
|
+
/** Drop handout stats for the given bundle hashes. Called when a bundle has been evicted or otherwise removed from the pool. */
|
|
38
|
+
forget(bundleHashes: Hash[]): void;
|
|
39
|
+
/** Return the subset of the given bundle hashes that are currently considered demoted. */
|
|
40
|
+
getDemotedBundleHashes(bundleHashes: Hash[]): Hash[];
|
|
41
|
+
/**
|
|
42
|
+
* Return the bundle hashes in the order they should be evicted under size pressure.
|
|
43
|
+
* Demoted entries come first, sorted by handouts descending; the remainder is left as-is
|
|
44
|
+
* so the caller can append by FIFO sequence order.
|
|
45
|
+
*/
|
|
46
|
+
getEvictionPriorityOrder(bundleHashes: Hash[]): Hash[];
|
|
47
|
+
getHandoutStats(bundleHash: Hash): HandoutStats | undefined;
|
|
24
48
|
pendingBlocks({ cursor: providedCursor }?: PendingTransactionsOptions): Promise<SignedHydratedBlockWithHashMeta[]>;
|
|
25
49
|
pendingTransactions({ cursor: providedCursor, limit, }?: PendingTransactionsOptions): Promise<SignedHydratedTransactionWithHashMeta[]>;
|
|
50
|
+
protected isDemoted(bundleHash: Hash): boolean;
|
|
26
51
|
private deleteBundledTransaction;
|
|
52
|
+
private gcHandoutStats;
|
|
27
53
|
/**
|
|
28
54
|
* Evaluates a transaction to determine if it should be purged from the mempool.
|
|
29
55
|
* @param tx The transaction to evaluate
|
|
@@ -41,5 +67,7 @@ export declare class SimpleMempoolViewer extends AbstractCreatableProvider<Simpl
|
|
|
41
67
|
* @returns True if the transaction is valid for inclusion in the next block, false otherwise
|
|
42
68
|
*/
|
|
43
69
|
private isInclusionCandidate;
|
|
70
|
+
private recordHandout;
|
|
71
|
+
private selectWithRatio;
|
|
44
72
|
}
|
|
45
73
|
//# sourceMappingURL=SimpleMempoolViewer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SimpleMempoolViewer.d.ts","sourceRoot":"","sources":["../../../../src/simple/mempool/SimpleMempoolViewer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SimpleMempoolViewer.d.ts","sourceRoot":"","sources":["../../../../src/simple/mempool/SimpleMempoolViewer.ts"],"names":[],"mappings":"AAAA,OAAO,EACG,KAAK,IAAI,EAClB,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EACV,iBAAiB,EAGlB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EACiC,KAAK,aAAa,EACxD,0BAA0B,EAC1B,KAAK,+BAA+B,EAAE,KAAK,qCAAqC,EAChF,mBAAmB,EAEpB,MAAM,+BAA+B,CAAA;AAEtC,OAAO,EACL,yBAAyB,EAAqB,uBAAuB,EACtE,MAAM,kCAAkC,CAAA;AAUzC,+FAA+F;AAC/F,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;CACjB;AASD,0CAA0C;AAC1C,MAAM,WAAW,yBAA0B,SAAQ,uBAAuB;IACxE,oFAAoF;IACpF,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,0DAA0D;IAC1D,gBAAgB,CAAC,EAAE,aAAa,EAAE,CAAA;IAClC,yGAAyG;IACzG,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,0FAA0F;IAC1F,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,sBAAsB,EAAE,iBAAiB,CAAA;IACzC,4BAA4B,EAAE,iBAAiB,CAAA;CAChD;AAED,0CAA0C;AAC1C,qBACa,mBAAoB,SAAQ,yBAAyB,CAAC,yBAAyB,CAAE,YAAW,aAAa;IACpH,MAAM,CAAC,QAAQ,CAAC,cAAc,kBAAuB;IACrD,MAAM,CAAC,QAAQ,CAAC,YAAY,0BAA+B;IAC3D,MAAM,CAAC,QAAQ,CAAC,QAAQ,oBAAyB;IACjD,OAAO,kBAAqC;IAE5C,OAAO,CAAC,aAAa,CAAgC;IACrD,OAAO,CAAC,oBAAoB,CAAC,CAAqB;IAElD,SAAS,KAAK,iBAAiB,IAAI,MAAM,CAExC;IAED,SAAS,KAAK,qBAAqB,IAAI,MAAM,CAE5C;IAED,SAAS,KAAK,sBAAsB,kQAEnC;IAED,SAAS,KAAK,4BAA4B,kQAEzC;IAED,SAAS,KAAK,mBAAmB,+CAEhC;IAEc,aAAa;IAK5B,gIAAgI;IAChI,MAAM,CAAC,YAAY,EAAE,IAAI,EAAE,GAAG,IAAI;IAIlC,0FAA0F;IAC1F,sBAAsB,CAAC,YAAY,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE;IAIpD;;;;OAIG;IACH,wBAAwB,CAAC,YAAY,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE;IAWtD,eAAe,CAAC,UAAU,EAAE,IAAI,GAAG,YAAY,GAAG,SAAS;IAIrD,aAAa,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,GAAE,0BAA+B,GAAG,OAAO,CAAC,+BAA+B,EAAE,CAAC;IAetH,mBAAmB,CAAC,EACxB,MAAM,EAAE,cAAc,EACtB,KAAW,GACZ,GAAE,0BAA+B,GAAG,OAAO,CAAC,qCAAqC,EAAE,CAAC;IAuErF,SAAS,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,GAAG,OAAO;YAKhC,wBAAwB;IAItC,OAAO,CAAC,cAAc;IAOtB;;;;;OAKG;YACW,WAAW;IAazB;;;;;;;;OAQG;YACW,oBAAoB;IAgBlC,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,eAAe;CAWxB"}
|
|
@@ -1154,30 +1154,6 @@ async function validateTransactionsOpcodes(txs) {
|
|
|
1154
1154
|
return txElevatedPayloads;
|
|
1155
1155
|
}
|
|
1156
1156
|
|
|
1157
|
-
// src/primitives/datalake/addDataLakePayloadsToPayloads.ts
|
|
1158
|
-
import { isUndefined as isUndefined3 } from "@xylabs/sdk-js";
|
|
1159
|
-
import { isAnyPayload, PayloadBuilder as PayloadBuilder4 } from "@xyo-network/sdk-js";
|
|
1160
|
-
async function addDataLakePayloadsToPayloads(hashes, payloads, dataLakeViewer) {
|
|
1161
|
-
if (isUndefined3(dataLakeViewer)) return [payloads, []];
|
|
1162
|
-
const missingPayloadHashes = hashes.filter((hash) => !payloads.some((p) => p._hash === hash));
|
|
1163
|
-
const payloadsFromDataLake = await PayloadBuilder4.addHashMeta(
|
|
1164
|
-
await PayloadBuilder4.addHashMeta((await dataLakeViewer.get(missingPayloadHashes)).filter(isAnyPayload))
|
|
1165
|
-
);
|
|
1166
|
-
return [[...payloads, ...payloadsFromDataLake], payloadsFromDataLake.map((p) => p._hash)];
|
|
1167
|
-
}
|
|
1168
|
-
|
|
1169
|
-
// src/primitives/datalake/addDataLakePayloads.ts
|
|
1170
|
-
async function addDataLakePayloads([boundWitness, payloads], dataLakeViewer) {
|
|
1171
|
-
const [updatedPayloads, foundHashes] = await addDataLakePayloadsToPayloads(boundWitness.payload_hashes, payloads, dataLakeViewer);
|
|
1172
|
-
return [
|
|
1173
|
-
[
|
|
1174
|
-
boundWitness,
|
|
1175
|
-
updatedPayloads
|
|
1176
|
-
],
|
|
1177
|
-
foundHashes
|
|
1178
|
-
];
|
|
1179
|
-
}
|
|
1180
|
-
|
|
1181
1157
|
// src/primitives/state/findMostRecentBlock.ts
|
|
1182
1158
|
import { isSignedBlockBoundWitnessWithStorageMeta } from "@xyo-network/xl1-protocol-lib";
|
|
1183
1159
|
var DEFAULT_NEXT_OPTIONS = { limit: 50 };
|
|
@@ -1312,14 +1288,13 @@ var ConfigZod = BaseConfigZod.extend({
|
|
|
1312
1288
|
import {
|
|
1313
1289
|
assertEx as assertEx11,
|
|
1314
1290
|
exists,
|
|
1315
|
-
isUndefined as
|
|
1291
|
+
isUndefined as isUndefined3
|
|
1316
1292
|
} from "@xylabs/sdk-js";
|
|
1317
1293
|
import {
|
|
1318
1294
|
asSignedHydratedBlockWithHashMeta,
|
|
1319
1295
|
asSignedHydratedBlockWithStorageMeta,
|
|
1320
1296
|
asXL1BlockNumber as asXL1BlockNumber3,
|
|
1321
1297
|
BlockViewerMoniker,
|
|
1322
|
-
DataLakeViewerMoniker,
|
|
1323
1298
|
FinalizationViewerMoniker
|
|
1324
1299
|
} from "@xyo-network/xl1-protocol-lib";
|
|
1325
1300
|
|
|
@@ -1351,10 +1326,9 @@ var MIN_HEAD_POLL_INTERVAL_MS = 5e3;
|
|
|
1351
1326
|
var SimpleBlockViewer = class extends AbstractCreatableProvider {
|
|
1352
1327
|
moniker = SimpleBlockViewer.defaultMoniker;
|
|
1353
1328
|
_store;
|
|
1354
|
-
dataLakeViewer;
|
|
1355
1329
|
finalizationViewer;
|
|
1356
1330
|
payloadCache = new LruCacheMap({ max: 1e4 });
|
|
1357
|
-
|
|
1331
|
+
signedHydratedBlockWithHashMetaCache = new LruCacheMap({ max: 2e3, ttl: 1e3 * 60 * 60 });
|
|
1358
1332
|
_headPollHash;
|
|
1359
1333
|
_headPollInProgress = false;
|
|
1360
1334
|
_headPollTimer = null;
|
|
@@ -1390,23 +1364,22 @@ var SimpleBlockViewer = class extends AbstractCreatableProvider {
|
|
|
1390
1364
|
}
|
|
1391
1365
|
async blockByHash(hash) {
|
|
1392
1366
|
return await this.spanAsync("blockByHash", async () => {
|
|
1393
|
-
const cachedBlock = this.
|
|
1367
|
+
const cachedBlock = this.signedHydratedBlockWithHashMetaCache.get(hash);
|
|
1394
1368
|
if (cachedBlock) {
|
|
1395
1369
|
return cachedBlock;
|
|
1396
1370
|
}
|
|
1397
1371
|
const cache = this.hydratedBlockCache;
|
|
1398
1372
|
const block = await cache.get(hash);
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
this.signedHydratedBlockWithDataLakePayloadsCache.set(hash, result);
|
|
1373
|
+
if (block) {
|
|
1374
|
+
this.signedHydratedBlockWithHashMetaCache.set(hash, block);
|
|
1402
1375
|
}
|
|
1403
|
-
return
|
|
1376
|
+
return block ?? null;
|
|
1404
1377
|
}, { ...this.context, timeBudgetLimit: 100 });
|
|
1405
1378
|
}
|
|
1406
1379
|
async blockByNumber(blockNumber) {
|
|
1407
1380
|
return await this.spanAsync("blockByNumber", async () => {
|
|
1408
1381
|
const chainContext = await this.getChainContextRead();
|
|
1409
|
-
if (
|
|
1382
|
+
if (isUndefined3(chainContext.head)) {
|
|
1410
1383
|
return null;
|
|
1411
1384
|
}
|
|
1412
1385
|
return await this.blockByNumberWithContext(chainContext, blockNumber);
|
|
@@ -1432,7 +1405,7 @@ var SimpleBlockViewer = class extends AbstractCreatableProvider {
|
|
|
1432
1405
|
assertEx11(limit > 0, () => "limit must be greater than 0");
|
|
1433
1406
|
assertEx11(limit <= 100, () => "limit must be less than 100");
|
|
1434
1407
|
const chainContext = await this.getChainContextRead();
|
|
1435
|
-
if (
|
|
1408
|
+
if (isUndefined3(chainContext.head)) {
|
|
1436
1409
|
return [];
|
|
1437
1410
|
}
|
|
1438
1411
|
const blocks = [];
|
|
@@ -1453,13 +1426,11 @@ var SimpleBlockViewer = class extends AbstractCreatableProvider {
|
|
|
1453
1426
|
}
|
|
1454
1427
|
async createHandler() {
|
|
1455
1428
|
await super.createHandler();
|
|
1456
|
-
this.dataLakeViewer = await this.locator.tryGetInstance(DataLakeViewerMoniker);
|
|
1457
1429
|
this.finalizationViewer = await this.locator.getInstance(FinalizationViewerMoniker);
|
|
1458
1430
|
this._store = { chainMap: this.params.finalizedArchivist };
|
|
1459
1431
|
}
|
|
1460
1432
|
async currentBlock() {
|
|
1461
|
-
|
|
1462
|
-
return result;
|
|
1433
|
+
return await this.finalizationViewer.head();
|
|
1463
1434
|
}
|
|
1464
1435
|
async currentBlockHash() {
|
|
1465
1436
|
return await this.finalizationViewer.headHash();
|
|
@@ -1477,7 +1448,7 @@ var SimpleBlockViewer = class extends AbstractCreatableProvider {
|
|
|
1477
1448
|
const cachedHashes = new Set(cachedPayloads.map((p) => p._hash));
|
|
1478
1449
|
remainingHashes = remainingHashes.filter((h) => !cachedHashes.has(h));
|
|
1479
1450
|
const finalizedPayloads = remainingHashes.length > 0 ? await this.finalizedArchivist.get(remainingHashes) : [];
|
|
1480
|
-
const
|
|
1451
|
+
const resultPayloads = [...cachedPayloads, ...finalizedPayloads.filter(exists)];
|
|
1481
1452
|
resultPayloads.map((payload) => {
|
|
1482
1453
|
this.payloadCache.set(payload._hash, payload);
|
|
1483
1454
|
});
|
|
@@ -1516,9 +1487,7 @@ var SimpleBlockViewer = class extends AbstractCreatableProvider {
|
|
|
1516
1487
|
await super.stopHandler();
|
|
1517
1488
|
}
|
|
1518
1489
|
async blockByNumberWithContext(chainContext, blockNumber) {
|
|
1519
|
-
|
|
1520
|
-
const [result] = block ? await addDataLakePayloads(block, this.dataLakeViewer) : [null, []];
|
|
1521
|
-
return result;
|
|
1490
|
+
return asSignedHydratedBlockWithHashMeta(await hydratedBlockByNumber(chainContext, blockNumber)) ?? null;
|
|
1522
1491
|
}
|
|
1523
1492
|
async pollHead(emitOnChange) {
|
|
1524
1493
|
if (this._headPollInProgress) return;
|
|
@@ -1722,7 +1691,7 @@ import {
|
|
|
1722
1691
|
asSchema as asSchema2,
|
|
1723
1692
|
IdSchema as IdSchema2,
|
|
1724
1693
|
MemoryArchivist,
|
|
1725
|
-
PayloadBuilder as
|
|
1694
|
+
PayloadBuilder as PayloadBuilder8
|
|
1726
1695
|
} from "@xyo-network/sdk-js";
|
|
1727
1696
|
import {
|
|
1728
1697
|
asXL1BlockNumber as asXL1BlockNumber7
|
|
@@ -1739,7 +1708,7 @@ import { assertEx as assertEx14, isDefined as isDefined8 } from "@xylabs/sdk-js"
|
|
|
1739
1708
|
import {
|
|
1740
1709
|
asAnyPayload as asAnyPayload3,
|
|
1741
1710
|
BoundWitnessBuilder as BoundWitnessBuilder2,
|
|
1742
|
-
PayloadBuilder as
|
|
1711
|
+
PayloadBuilder as PayloadBuilder4
|
|
1743
1712
|
} from "@xyo-network/sdk-js";
|
|
1744
1713
|
import {
|
|
1745
1714
|
asXL1BlockNumber as asXL1BlockNumber4,
|
|
@@ -1822,10 +1791,10 @@ async function buildBlock(options) {
|
|
|
1822
1791
|
const step_hashes = [];
|
|
1823
1792
|
for (const [tx] of txs) {
|
|
1824
1793
|
if (tx.nbf > blockNumber) {
|
|
1825
|
-
throw new Error(`Transaction ${await
|
|
1794
|
+
throw new Error(`Transaction ${await PayloadBuilder4.hash(tx)} not valid for block ${blockNumber} - NBF is ${tx.nbf}`);
|
|
1826
1795
|
}
|
|
1827
1796
|
if (tx.exp < blockNumber) {
|
|
1828
|
-
throw new Error(`Transaction ${await
|
|
1797
|
+
throw new Error(`Transaction ${await PayloadBuilder4.hash(tx)} not valid for block ${blockNumber} - EXP is ${tx.exp}`);
|
|
1829
1798
|
}
|
|
1830
1799
|
}
|
|
1831
1800
|
const completedStepRewardTransfers = [];
|
|
@@ -1861,9 +1830,9 @@ async function buildBlock(options) {
|
|
|
1861
1830
|
previous,
|
|
1862
1831
|
step_hashes,
|
|
1863
1832
|
protocol
|
|
1864
|
-
}).meta({ $epoch: Date.now(), $signatures: [] }).signers(signers).payloads(await
|
|
1833
|
+
}).meta({ $epoch: Date.now(), $signatures: [] }).signers(signers).payloads(await PayloadBuilder4.addStorageMeta(payloads)).build();
|
|
1865
1834
|
assertEx14(isBlockBoundWitness(bw), () => "Build of BlockBoundWitness failed");
|
|
1866
|
-
return [await
|
|
1835
|
+
return [await PayloadBuilder4.addStorageMeta(bw), txPayloads.map((p) => asAnyPayload3(p, true))];
|
|
1867
1836
|
}
|
|
1868
1837
|
|
|
1869
1838
|
// src/test/buildNextBlock.ts
|
|
@@ -1889,7 +1858,7 @@ import {
|
|
|
1889
1858
|
asAnyPayload as asAnyPayload4,
|
|
1890
1859
|
asSchema,
|
|
1891
1860
|
IdSchema,
|
|
1892
|
-
PayloadBuilder as
|
|
1861
|
+
PayloadBuilder as PayloadBuilder5
|
|
1893
1862
|
} from "@xyo-network/sdk-js";
|
|
1894
1863
|
import {
|
|
1895
1864
|
asXL1BlockNumber as asXL1BlockNumber5
|
|
@@ -1913,7 +1882,7 @@ async function buildGenesisBlock(chainId, txs, blockPayloads, signers, chainStep
|
|
|
1913
1882
|
var TestChainId = assertEx15(asAddress("c5fe2e6F6841Cbab12d8C0618Be2DF8C6156cC44"));
|
|
1914
1883
|
|
|
1915
1884
|
// src/test/createGenesisBlock.ts
|
|
1916
|
-
import { PayloadBuilder as
|
|
1885
|
+
import { PayloadBuilder as PayloadBuilder7 } from "@xyo-network/sdk-js";
|
|
1917
1886
|
import {
|
|
1918
1887
|
BlockBoundWitnessSchemaPayload,
|
|
1919
1888
|
BlockBoundWitnessWithStorageMetaSchemaPayload,
|
|
@@ -1925,14 +1894,14 @@ import {
|
|
|
1925
1894
|
} from "@xyo-network/xl1-schema";
|
|
1926
1895
|
|
|
1927
1896
|
// src/test/createProducerChainStakeIntentTransaction.ts
|
|
1928
|
-
import { PayloadBuilder as
|
|
1897
|
+
import { PayloadBuilder as PayloadBuilder6 } from "@xyo-network/sdk-js";
|
|
1929
1898
|
import {
|
|
1930
1899
|
asXL1BlockNumber as asXL1BlockNumber6,
|
|
1931
1900
|
ChainStakeIntentSchema,
|
|
1932
1901
|
defaultTransactionFees as defaultTransactionFees2
|
|
1933
1902
|
} from "@xyo-network/xl1-protocol-lib";
|
|
1934
1903
|
async function createProducerChainStakeIntent(from, exp, nbf = 0) {
|
|
1935
|
-
return await
|
|
1904
|
+
return await PayloadBuilder6.addHashMeta(new PayloadBuilder6({ schema: ChainStakeIntentSchema }).fields({
|
|
1936
1905
|
from,
|
|
1937
1906
|
exp,
|
|
1938
1907
|
nbf,
|
|
@@ -1942,7 +1911,7 @@ async function createProducerChainStakeIntent(from, exp, nbf = 0) {
|
|
|
1942
1911
|
|
|
1943
1912
|
// src/test/createGenesisBlock.ts
|
|
1944
1913
|
var createGenesisBlock = async (initialBlockProducer, nextContractAddress, genesisBlockRewardAmount, genesisBlockRewardAddress) => {
|
|
1945
|
-
const blockPayloads = await
|
|
1914
|
+
const blockPayloads = await PayloadBuilder7.addHashMeta([
|
|
1946
1915
|
TransferPayloadJsonSchemaPayload,
|
|
1947
1916
|
BlockBoundWitnessSchemaPayload,
|
|
1948
1917
|
BlockBoundWitnessWithStorageMetaSchemaPayload,
|
|
@@ -1954,7 +1923,7 @@ var createGenesisBlock = async (initialBlockProducer, nextContractAddress, genes
|
|
|
1954
1923
|
const intentPayload = await createProducerChainStakeIntent(initialBlockProducer.address, 1, 0);
|
|
1955
1924
|
blockPayloads.push(intentPayload);
|
|
1956
1925
|
if (genesisBlockRewardAmount > 0n) {
|
|
1957
|
-
blockPayloads.push(await
|
|
1926
|
+
blockPayloads.push(await PayloadBuilder7.addHashMeta(createTransferPayload(
|
|
1958
1927
|
nextContractAddress,
|
|
1959
1928
|
{ [genesisBlockRewardAddress]: genesisBlockRewardAmount }
|
|
1960
1929
|
)));
|
|
@@ -1985,9 +1954,9 @@ var buildRandomChain = async (blockProducer, count = 10, previousBlock, chainId,
|
|
|
1985
1954
|
let saltCounter = 0;
|
|
1986
1955
|
while (remaining > 0) {
|
|
1987
1956
|
saltCounter += 1;
|
|
1988
|
-
const payloads = [new
|
|
1957
|
+
const payloads = [new PayloadBuilder8({ schema: IdSchema2 }).fields({ salt: `${Date.now()}-${saltCounter}` }).build()];
|
|
1989
1958
|
saltCounter += 1;
|
|
1990
|
-
const additionalPrivatePayloads = remaining % 2 === 0 ? [new
|
|
1959
|
+
const additionalPrivatePayloads = remaining % 2 === 0 ? [new PayloadBuilder8({ schema: asSchema2("network.xyo.private", true) }).fields({ salt: `${Date.now()}-${saltCounter}` }).build()] : [];
|
|
1991
1960
|
const txs = [];
|
|
1992
1961
|
for (const receiverAddress of resolvedReceiverAddresses) {
|
|
1993
1962
|
txs.push(await buildRandomTransaction(
|