@xyo-network/xl1-cli 1.19.2 → 1.19.4

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.
Files changed (2) hide show
  1. package/dist/cli-min.mjs +308 -72
  2. package/package.json +4 -4
package/dist/cli-min.mjs CHANGED
@@ -85431,14 +85431,16 @@ var SingleTimeConfigZod = union$1([
85431
85431
  object$4({ months: timeUnitSchema }),
85432
85432
  object$4({ years: timeUnitSchema })
85433
85433
  ]).describe("Time configuration with exactly one time unit");
85434
- tuple([
85434
+ var HydratedBlockZod = tuple([
85435
85435
  BlockBoundWitnessZod,
85436
85436
  array$1(PayloadZodLoose)
85437
85437
  ]);
85438
- tuple([
85438
+ var isHydratedBlock = zodIsFactory(HydratedBlockZod);
85439
+ var HydratedBlockWithHashMetaZod = tuple([
85439
85440
  WithHashMetaZod(BlockBoundWitnessZod),
85440
85441
  array$1(WithHashMetaZod(PayloadZodLoose))
85441
85442
  ]);
85443
+ var isHydratedBlockWithHashMeta = zodIsFactory(HydratedBlockWithHashMetaZod);
85442
85444
  tuple([
85443
85445
  WithStorageMetaZod(BlockBoundWitnessZod),
85444
85446
  array$1(WithStorageMetaZod(PayloadZodLoose))
@@ -86236,14 +86238,10 @@ var ProviderFactory = class _ProviderFactory {
86236
86238
  static withParams(creatableProvider2, dependencies, params, labels = {}) {
86237
86239
  return new _ProviderFactory(creatableProvider2, dependencies, params, labels);
86238
86240
  }
86239
- /** @deprecated use getInstance instead */
86240
- async create(params, start = true) {
86241
- return await this.getInstance(params, start);
86242
- }
86243
86241
  factory(dependencies, params, labels = {}) {
86244
86242
  return new _ProviderFactory(this.creatableProvider, dependencies, params, labels);
86245
86243
  }
86246
- async getInstance(params, start = true) {
86244
+ async getInstance(params, { start = true }) {
86247
86245
  let scopeObject = {};
86248
86246
  switch (this.scope) {
86249
86247
  case "global": {
@@ -86289,9 +86287,9 @@ var ProviderFactory = class _ProviderFactory {
86289
86287
  }
86290
86288
  return result;
86291
86289
  }
86292
- async tryGetInstance(params, start = true) {
86290
+ async tryGetInstance(params, options) {
86293
86291
  try {
86294
- return await this.getInstance(params, start);
86292
+ return await this.getInstance(params, options);
86295
86293
  } catch {
86296
86294
  return;
86297
86295
  }
@@ -86342,7 +86340,10 @@ var AbstractCreatableProvider = class extends AbstractCreatable {
86342
86340
  }
86343
86341
  }
86344
86342
  async locateAndCreate(moniker) {
86345
- return await this.locator?.getInstance(moniker);
86343
+ return await this.locator.getInstance(moniker);
86344
+ }
86345
+ async tryLocateAndCreate(moniker) {
86346
+ return await this.locator.tryGetInstance(moniker);
86346
86347
  }
86347
86348
  };
86348
86349
 
@@ -86354,8 +86355,6 @@ function creatableProvider() {
86354
86355
  var buildProviderFactory = (provider, labels) => {
86355
86356
  const factory = {
86356
86357
  monikers: provider.monikers,
86357
- // Copy static methods
86358
- create: provider.create.bind(provider),
86359
86358
  // Merge module & supplied labels
86360
86359
  labels: { ...provider.labels, ...labels },
86361
86360
  creatableProvider: provider.creatableProvider,
@@ -86426,14 +86425,10 @@ var ProviderFactoryLocator = class _ProviderFactoryLocator {
86426
86425
  static standard(context) {
86427
86426
  return new _ProviderFactoryLocator(context, {});
86428
86427
  }
86429
- /** @deprecated use getInstance instead */
86430
- async create(moniker, params, labels) {
86431
- return await this.getInstance(moniker, params, labels);
86432
- }
86433
86428
  freeze() {
86434
86429
  this._frozen = true;
86435
86430
  }
86436
- async getInstance(moniker, params, labels) {
86431
+ async getInstance(moniker, params, { start = true, labels } = {}) {
86437
86432
  const resolvedParams = {
86438
86433
  ...params,
86439
86434
  context: {
@@ -86442,7 +86437,7 @@ var ProviderFactoryLocator = class _ProviderFactoryLocator {
86442
86437
  }
86443
86438
  };
86444
86439
  const factory = this.locate(moniker, labels);
86445
- const result = await factory.getInstance(resolvedParams);
86440
+ const result = await factory.getInstance(resolvedParams, { start });
86446
86441
  return result;
86447
86442
  }
86448
86443
  /**
@@ -86488,9 +86483,9 @@ var ProviderFactoryLocator = class _ProviderFactoryLocator {
86488
86483
  }
86489
86484
  return this;
86490
86485
  }
86491
- async tryGetInstance(moniker, params, labels) {
86486
+ async tryGetInstance(moniker, params, options) {
86492
86487
  try {
86493
- return await this.getInstance(moniker, params, labels);
86488
+ return await this.getInstance(moniker, params, options);
86494
86489
  } catch {
86495
86490
  return;
86496
86491
  }
@@ -88624,11 +88619,13 @@ var SimpleBlockValidationViewer = class extends AbstractCreatableProvider {
88624
88619
  this._chainContractViewer = await this.locator.getInstance(ChainContractViewerMoniker);
88625
88620
  }
88626
88621
  async qualifiedValidateBlock(block, config) {
88627
- return await this.qualifiedValidateBlocks([block], config);
88622
+ const result = await this.qualifiedValidateBlocks([block], config);
88623
+ return [result[0][0], result[1]];
88628
88624
  }
88629
88625
  async qualifiedValidateBlocks(blocks, config) {
88630
88626
  const { value, state } = config ?? {
88631
88627
  state: true};
88628
+ const blocksWithMeta = await Promise.all(blocks.map((b) => Promise.all([PayloadBuilder.addHashMeta(b[0]), PayloadBuilder.addHashMeta(b[1])])));
88632
88629
  const head = isChainQualifiedHeadConfig(config) ? assertEx(
88633
88630
  (await this.blockViewer.blockByHash(config.head))?.[0],
88634
88631
  () => `Specified a head that is not in the chain [${config.head}]`
@@ -88637,25 +88634,44 @@ var SimpleBlockValidationViewer = class extends AbstractCreatableProvider {
88637
88634
  const validateProtocol = value ? this.doValidateProtocol.bind(this) : void 0;
88638
88635
  const validateState = state ? this.doValidateState.bind(this) : void 0;
88639
88636
  const chainIdAtBlockNumber = (blockNumber) => this.chainContractViewer.chainIdAtBlockNumber(blockNumber);
88640
- return [(await Promise.all([
88641
- validateProtocol?.(blocks, chainIdAtBlockNumber),
88642
- validateState?.(blocks, chainIdAtBlockNumber)
88643
- ].filter(exists$2))).flat(), { head: headBlock._hash, range: asXL1BlockRange([0, headBlock.block], true) }];
88637
+ const qualification = { head: headBlock._hash, range: asXL1BlockRange([0, headBlock.block], true) };
88638
+ const [protocolResults, stateResults] = await Promise.all([
88639
+ validateProtocol?.(blocksWithMeta, chainIdAtBlockNumber),
88640
+ validateState?.(blocksWithMeta, chainIdAtBlockNumber)
88641
+ ]);
88642
+ const blockResults = blocksWithMeta.map((r, i) => {
88643
+ const errors = [];
88644
+ if (protocolResults && !isHydratedBlock(protocolResults[i])) {
88645
+ errors.push(...protocolResults[i]);
88646
+ }
88647
+ if (stateResults && !isHydratedBlock(stateResults[i])) {
88648
+ errors.push(...stateResults[i]);
88649
+ }
88650
+ return errors.length === 0 ? r : errors;
88651
+ });
88652
+ return [blockResults, qualification];
88653
+ }
88654
+ qualifiedValidateUncle(_blocks, _config) {
88655
+ throw new Error("Method not implemented.");
88644
88656
  }
88645
88657
  async validateBlock(block, config) {
88646
- return await this.validateBlocks([block], config);
88658
+ return (await this.validateBlocks([block], config))[0];
88647
88659
  }
88648
88660
  async validateBlocks(blocks, config) {
88649
88661
  return (await this.qualifiedValidateBlocks(blocks, config))[0];
88650
88662
  }
88663
+ async validateUncle(blocks, config) {
88664
+ return (await this.qualifiedValidateUncle(blocks, config))[0];
88665
+ }
88651
88666
  async doValidateProtocol(blocks, chainIdAtBlockNumber) {
88652
- return (await Promise.all(blocks.map(async (block) => {
88653
- return await this.params.protocol(
88667
+ return await Promise.all(blocks.map(async (block) => {
88668
+ const errors = await this.params.protocol(
88654
88669
  this.context,
88655
88670
  block,
88656
88671
  chainIdAtBlockNumber
88657
88672
  );
88658
- }))).flat();
88673
+ return errors.length === 0 ? block : errors;
88674
+ }));
88659
88675
  }
88660
88676
  async doValidateState(blocks, chainIdAtBlockNumber) {
88661
88677
  const windowedUncleChain = await this.updateWindowedChainCache();
@@ -88665,14 +88681,15 @@ var SimpleBlockValidationViewer = class extends AbstractCreatableProvider {
88665
88681
  this.logger?.warn(JSON.stringify(windowedUncleChain, null, 2));
88666
88682
  throw new Error(`No uncles or greater than one uncle found in block validation, which is not supported [${uncles.length}, ${blocks.length}]`);
88667
88683
  }
88668
- return (await Promise.all(uncles[0].map(async (block) => {
88669
- return await this.params.state(
88684
+ return await Promise.all(uncles[0].map(async (block) => {
88685
+ const errors = await this.params.state(
88670
88686
  this.context,
88671
88687
  block,
88672
88688
  chainIdAtBlockNumber,
88673
88689
  { accountBalance: this._accountBalanceViewer }
88674
88690
  );
88675
- }))).flat();
88691
+ return errors.length === 0 ? block : errors;
88692
+ }));
88676
88693
  }
88677
88694
  async updateWindowedChainCache() {
88678
88695
  this._uncleWindowedChainCache = await getWindowedChain(this.context, this.blockViewer, this.maxUncleWindowSize, this._uncleWindowedChainCache ?? []);
@@ -89104,6 +89121,18 @@ var SimpleXyoGatewayRunner = class _SimpleXyoGatewayRunner extends AbstractCreat
89104
89121
  };
89105
89122
  var SimpleMempoolRunner = class extends AbstractCreatableProvider {
89106
89123
  moniker = SimpleMempoolRunner.defaultMoniker;
89124
+ _blockValidationViewer;
89125
+ _chainContractViewer;
89126
+ _finalizationViewer;
89127
+ get blockValidationViewer() {
89128
+ return this._blockValidationViewer;
89129
+ }
89130
+ get chainContractViewer() {
89131
+ return this._chainContractViewer;
89132
+ }
89133
+ get finalizationViewer() {
89134
+ return this._finalizationViewer;
89135
+ }
89107
89136
  get pendingBlocksArchivist() {
89108
89137
  return this.params.pendingBlocksArchivist;
89109
89138
  }
@@ -89117,6 +89146,72 @@ var SimpleMempoolRunner = class extends AbstractCreatableProvider {
89117
89146
  pendingTransactionsArchivist: assertEx(params?.pendingTransactionsArchivist, () => "pendingTransactionsArchivist is required")
89118
89147
  };
89119
89148
  }
89149
+ async createHandler() {
89150
+ await super.createHandler();
89151
+ this._blockValidationViewer = await this.locator.getInstance(BlockValidationViewerMoniker);
89152
+ this._chainContractViewer = await this.locator.getInstance(ChainContractViewerMoniker);
89153
+ this._finalizationViewer = await this.locator.getInstance(FinalizationViewerMoniker);
89154
+ }
89155
+ async prunePendingBlocks({
89156
+ batchSize = 10,
89157
+ maxPrune = 1e3,
89158
+ maxCheck = 1e3
89159
+ } = {}) {
89160
+ let total = 0;
89161
+ let pruned = 0;
89162
+ let cursor;
89163
+ let batch = await this.pendingBlocksArchivist.next({
89164
+ limit: batchSize,
89165
+ cursor,
89166
+ order: "desc"
89167
+ });
89168
+ this.logger?.info(`Starting prunePendingBlocks with batchSize=${batchSize}, maxPrune=${maxPrune}, maxCheck=${maxCheck}`);
89169
+ while (batch.length > 0 && pruned < maxPrune && total < maxCheck) {
89170
+ const blocksAndBundles = await this.simpleValidationCheck(batch);
89171
+ const blocks = blocksAndBundles.map(([b]) => b);
89172
+ const bundles = blocksAndBundles.map(([_, p]) => p);
89173
+ let valid = blocks.map((b) => !!b);
89174
+ let remainingBlockMap = [];
89175
+ let remainingBlocks = blocks.map((b, i) => {
89176
+ if (b) {
89177
+ remainingBlockMap.push(i);
89178
+ return b;
89179
+ }
89180
+ }).filter(exists$2);
89181
+ assertEx(
89182
+ remainingBlockMap.length === remainingBlocks.length,
89183
+ () => `remainingBlockMap length should match remainingBlocks length [${remainingBlockMap.length}/${remainingBlocks.length}]`
89184
+ );
89185
+ const validationResults = remainingBlocks.map((b) => b);
89186
+ for (const [i, r] of validationResults.entries()) {
89187
+ const validated = isHydratedBlockWithHashMeta(r);
89188
+ if (!validated) {
89189
+ this.logger?.info(`Pruning block ${bundles[remainingBlockMap[i]]._hash} during block validation`);
89190
+ this.logger?.info(` - validation result: ${JSON.stringify(r, null, 2)}`);
89191
+ }
89192
+ valid[remainingBlockMap[i]] = validated;
89193
+ }
89194
+ const pruneHashes = bundles.map((p, i) => {
89195
+ if (!valid[i]) {
89196
+ return p._hash;
89197
+ }
89198
+ }).filter(exists$2);
89199
+ pruned += pruneHashes.length;
89200
+ total += batch.length;
89201
+ await this.pendingBlocksArchivist.delete(pruneHashes);
89202
+ cursor = batch.at(-1)?._sequence;
89203
+ batch = cursor ? await this.pendingBlocksArchivist.next({
89204
+ limit: batchSize,
89205
+ cursor,
89206
+ order: "desc"
89207
+ }) : [];
89208
+ }
89209
+ this.logger?.info(`prunePendingBlocks completed: pruned=${pruned}, totalChecked=${total}`);
89210
+ return [pruned, total];
89211
+ }
89212
+ prunePendingTransactions(_options) {
89213
+ throw new Error("Method not implemented.");
89214
+ }
89120
89215
  async submitBlocks(blocks) {
89121
89216
  const bundles = await Promise.all(blocks.map(async ([bw, payloads]) => {
89122
89217
  return hydratedBlockToPayloadBundle([
@@ -89137,9 +89232,27 @@ var SimpleMempoolRunner = class extends AbstractCreatableProvider {
89137
89232
  const inserted = await this.pendingTransactionsArchivist.insert(bundles);
89138
89233
  return inserted.map((p) => p._hash);
89139
89234
  }
89235
+ async simpleValidationCheck(payloads) {
89236
+ const headNumber = await this.finalizationViewer.headNumber();
89237
+ const chainId = await this.chainContractViewer.chainId();
89238
+ const blockBundles = await Promise.all(payloads.map(async (p) => {
89239
+ return [isPayloadBundle(p) ? await bundledPayloadToHydratedBlock(p) : void 0, p];
89240
+ }));
89241
+ return blockBundles.map(([block, bundle3]) => {
89242
+ const result = [block ? block[0].chain === chainId && block[0].block > headNumber && isSignedHydratedBlockWithHashMeta(block) ? block : void 0 : void 0, bundle3];
89243
+ if (result[0] === void 0) {
89244
+ this.logger?.info(`Pruning block bundle ${bundle3._hash} during simpleValidationCheck`);
89245
+ this.logger?.info(` - chainId match: ${block ? block[0].chain === chainId : "n/a"}`);
89246
+ this.logger?.info(` - headNumber check: ${block ? block[0].block > headNumber : "n/a"}`);
89247
+ this.logger?.info(` - isSignedHydratedBlockWithHashMeta: ${block ? isSignedHydratedBlockWithHashMeta(block) : "n/a"}`);
89248
+ this.logger?.info(` - block value: ${block ? JSON.stringify(block, null, 2) : "n/a"}`);
89249
+ }
89250
+ return result;
89251
+ });
89252
+ }
89140
89253
  };
89141
89254
  __publicField$4(SimpleMempoolRunner, "defaultMoniker", MempoolRunnerMoniker);
89142
- __publicField$4(SimpleMempoolRunner, "dependencies", [WindowedBlockViewerMoniker]);
89255
+ __publicField$4(SimpleMempoolRunner, "dependencies", [FinalizationViewerMoniker, BlockValidationViewerMoniker, ChainContractViewerMoniker]);
89143
89256
  __publicField$4(SimpleMempoolRunner, "monikers", [MempoolRunnerMoniker]);
89144
89257
  SimpleMempoolRunner = __decorateClass$4([
89145
89258
  creatableProvider()
@@ -89192,14 +89305,12 @@ var SimpleMempoolViewer = class extends AbstractCreatableProvider {
89192
89305
  });
89193
89306
  this.logger?.info(`Fetched pending transactions: ${bundles.length} bundles`);
89194
89307
  const filteredBundles = bundles.filter(isPayloadBundle).filter(isHashMeta);
89195
- this.logger?.info(`Filtered pending transactions: ${JSON.stringify(filteredBundles, null, 2)} filteredBundles`);
89196
89308
  const hydratedWithBundle = (await Promise.all(
89197
89309
  filteredBundles.map(async (bundle3) => {
89198
89310
  const tx = await bundledPayloadToHydratedTransaction$1(bundle3);
89199
89311
  return isDefined(tx) ? { bundle: bundle3, tx } : void 0;
89200
89312
  })
89201
89313
  )).filter(exists$2);
89202
- this.logger?.info(`Converted pending transactions: ${JSON.stringify(hydratedWithBundle.map((x) => x.tx), null, 2)} results`);
89203
89314
  const currentBlock = await this.windowedBlockViewer.currentBlock();
89204
89315
  const evaluated = await Promise.all(
89205
89316
  hydratedWithBundle.map(async ({ bundle: bundle3, tx }) => ({
@@ -96663,6 +96774,12 @@ var JsonRpcMempoolRunnerMethods = class extends AbstractJsonRpcRunner {
96663
96774
 
96664
96775
  // src/provider/runner/JsonRpcMempoolRunner/JsonRpcMempoolRunner.ts
96665
96776
  var JsonRpcMempoolRunner = class extends JsonRpcMempoolRunnerMethods {
96777
+ prunePendingBlocks(_options) {
96778
+ throw new Error("Method not implemented.");
96779
+ }
96780
+ prunePendingTransactions(_options) {
96781
+ throw new Error("Method not implemented.");
96782
+ }
96666
96783
  };
96667
96784
  __publicField$3(JsonRpcMempoolRunner, "defaultMoniker", MempoolRunnerMoniker);
96668
96785
  __publicField$3(JsonRpcMempoolRunner, "dependencies", []);
@@ -96679,12 +96796,16 @@ var JsonRpcXyoRunner = class extends AbstractJsonRpcRunner {
96679
96796
  async broadcastTransaction(transaction) {
96680
96797
  return await this.transport.sendRequest("xyoRunner_broadcastTransaction", [transaction]);
96681
96798
  }
96799
+ async createHandler() {
96800
+ await super.createHandler();
96801
+ this._mempoolRunner = await this.locateAndCreate(MempoolRunnerMoniker);
96802
+ }
96682
96803
  schemas() {
96683
96804
  return XyoRunnerRpcSchemas;
96684
96805
  }
96685
96806
  };
96686
96807
  __publicField$3(JsonRpcXyoRunner, "defaultMoniker", XyoRunnerMoniker);
96687
- __publicField$3(JsonRpcXyoRunner, "dependencies", []);
96808
+ __publicField$3(JsonRpcXyoRunner, "dependencies", [MempoolRunnerMoniker]);
96688
96809
  __publicField$3(JsonRpcXyoRunner, "monikers", [XyoRunnerMoniker]);
96689
96810
  JsonRpcXyoRunner = __decorateClass$3([
96690
96811
  creatableProvider()
@@ -202271,13 +202392,13 @@ var AbstractEvmProvider = class extends AbstractCreatableProvider {
202271
202392
  this._contract = this.connectContract(toEthAddress(this.params.address));
202272
202393
  }
202273
202394
  };
202274
- function _ts_decorate3$2(decorators, target, key, desc) {
202395
+ function _ts_decorate3$3(decorators, target, key, desc) {
202275
202396
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
202276
202397
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
202277
202398
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
202278
202399
  return c > 3 && r && Object.defineProperty(target, key, r), r;
202279
202400
  }
202280
- __name$e(_ts_decorate3$2, "_ts_decorate");
202401
+ __name$e(_ts_decorate3$3, "_ts_decorate");
202281
202402
  var EvmChainContractViewer = class _EvmChainContractViewer extends AbstractEvmProvider {
202282
202403
  static {
202283
202404
  __name$e(this, "EvmChainContractViewer");
@@ -202358,7 +202479,7 @@ var EvmChainContractViewer = class _EvmChainContractViewer extends AbstractEvmPr
202358
202479
  return IStakedXyoChain__factory.connect(address, this.params.runner);
202359
202480
  }
202360
202481
  };
202361
- EvmChainContractViewer = _ts_decorate3$2([
202482
+ EvmChainContractViewer = _ts_decorate3$3([
202362
202483
  creatableProvider()
202363
202484
  ], EvmChainContractViewer);
202364
202485
  function _ts_decorate4$1(decorators, target, key, desc) {
@@ -203365,13 +203486,13 @@ var BlockValidationDiviner = class extends AbstractDiviner {
203365
203486
  BlockValidationDiviner = _ts_decorate2$2([
203366
203487
  creatableModule()
203367
203488
  ], BlockValidationDiviner);
203368
- function _ts_decorate3$1(decorators, target, key, desc) {
203489
+ function _ts_decorate3$2(decorators, target, key, desc) {
203369
203490
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
203370
203491
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
203371
203492
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
203372
203493
  return c > 3 && r && Object.defineProperty(target, key, r), r;
203373
203494
  }
203374
- __name$b(_ts_decorate3$1, "_ts_decorate");
203495
+ __name$b(_ts_decorate3$2, "_ts_decorate");
203375
203496
  var HeadValidationDivinerConfigSchema = asSchema("network.xyo.diviner.chain.head.validation.config", true);
203376
203497
  var HeadValidationDiviner = class extends AbstractDiviner {
203377
203498
  static {
@@ -203481,7 +203602,7 @@ var HeadValidationDiviner = class extends AbstractDiviner {
203481
203602
  });
203482
203603
  }
203483
203604
  };
203484
- HeadValidationDiviner = _ts_decorate3$1([
203605
+ HeadValidationDiviner = _ts_decorate3$2([
203485
203606
  creatableModule()
203486
203607
  ], HeadValidationDiviner);
203487
203608
  async function processPendingBlocks({ blockViewer, context, finalizedArchivist, logger, mempoolViewer }) {
@@ -204752,13 +204873,13 @@ var createBootstrapHead = /* @__PURE__ */ __name$9(async (account, chainId, gene
204752
204873
  chain.push(producerDeclarationBlock);
204753
204874
  return chain;
204754
204875
  }, "createBootstrapHead");
204755
- function _ts_decorate3(decorators, target, key, desc) {
204876
+ function _ts_decorate3$1(decorators, target, key, desc) {
204756
204877
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
204757
204878
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
204758
204879
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
204759
204880
  return c > 3 && r && Object.defineProperty(target, key, r), r;
204760
204881
  }
204761
- __name$9(_ts_decorate3, "_ts_decorate");
204882
+ __name$9(_ts_decorate3$1, "_ts_decorate");
204762
204883
  var BaseNetworkStakeStepRewardService = class _BaseNetworkStakeStepRewardService extends AbstractCreatableProvider {
204763
204884
  static {
204764
204885
  __name$9(this, "BaseNetworkStakeStepRewardService");
@@ -204824,7 +204945,7 @@ var BaseNetworkStakeStepRewardService = class _BaseNetworkStakeStepRewardService
204824
204945
  throw new Error("Method [networkStakeStepRewardsForStepLevel] not implemented.");
204825
204946
  }
204826
204947
  };
204827
- BaseNetworkStakeStepRewardService = _ts_decorate3([
204948
+ BaseNetworkStakeStepRewardService = _ts_decorate3$1([
204828
204949
  creatableProvider()
204829
204950
  ], BaseNetworkStakeStepRewardService);
204830
204951
  var bundledPayloadToHydratedTransaction = /* @__PURE__ */ __name$9(async (payload) => {
@@ -205373,19 +205494,20 @@ var SimpleBlockRunner = class _SimpleBlockRunner extends AbstractCreatableProvid
205373
205494
  this.logger?.info(`Built block ${block[0].block} in ${Date.now() - startBuild}ms with ${block[1].length} payloads`);
205374
205495
  this.logger?.info(`Validating block ${block[0].block} with ${block[1].length} payloads`);
205375
205496
  const startValidate = Date.now();
205376
- const errors = await this.blockValidationViewer.validateBlock(block, {
205497
+ const validatedBlock = await this.blockValidationViewer.validateBlock(block, {
205377
205498
  head: head._hash
205378
205499
  });
205379
205500
  this.logger?.info(`Validated block ${block[0].block} in ${Date.now() - startValidate}ms with ${block[1].length} payloads`);
205380
- if (errors.length > 0) {
205501
+ if (isSignedHydratedBlockWithHashMeta(validatedBlock)) {
205502
+ await this.mempoolRunner.submitBlocks([
205503
+ validatedBlock
205504
+ ]);
205505
+ return validatedBlock;
205506
+ } else {
205507
+ const errors = validatedBlock;
205381
205508
  this.logger?.warn(`Validation of produced block failed: ${errors.at(0)?.message}`);
205382
205509
  const rejectedTransactions = block[1];
205383
205510
  await this.rejectedTransactionsArchivist.insert(rejectedTransactions);
205384
- } else {
205385
- await this.mempoolRunner.submitBlocks([
205386
- block
205387
- ]);
205388
- return block;
205389
205511
  }
205390
205512
  } catch (error) {
205391
205513
  this.logger?.error(`Error proposing next valid block: ${error.message}`);
@@ -297280,8 +297402,8 @@ var __name$6 = (target, value) => __defProp$6(target, "name", { value, configura
297280
297402
  __name$6(this, "BalanceActor");
297281
297403
  }
297282
297404
  _updateMutex = new Mutex$1();
297283
- get balanceService() {
297284
- return assertEx(this.params.balance, () => "balanceService not set");
297405
+ get accountBalanceViewer() {
297406
+ return assertEx(this.params.accountBalanceViewer, () => "balanceService not set");
297285
297407
  }
297286
297408
  get blockViewer() {
297287
297409
  return assertEx(this.params.blockViewer, () => "blockViewer not set");
@@ -297302,7 +297424,7 @@ var __name$6 = (target, value) => __defProp$6(target, "name", { value, configura
297302
297424
  if (this._updateMutex.isLocked()) return;
297303
297425
  await this._updateMutex.runExclusive(async () => {
297304
297426
  const head = await this.blockViewer.currentBlockHash();
297305
- await this.balanceService.accountBalances([], {
297427
+ await this.accountBalanceViewer.accountBalances([], {
297306
297428
  head
297307
297429
  });
297308
297430
  });
@@ -297315,27 +297437,111 @@ function _ts_decorate$2(decorators, target, key, desc) {
297315
297437
  return c > 3 && r && Object.defineProperty(target, key, r), r;
297316
297438
  }
297317
297439
  __name$6(_ts_decorate$2, "_ts_decorate");
297440
+ var MempoolActor = class extends Actor {
297441
+ static {
297442
+ __name$6(this, "MempoolActor");
297443
+ }
297444
+ _blockTimerId = null;
297445
+ _blockTimerMutex = new Mutex$1();
297446
+ _transactionTimerId = null;
297447
+ _transactionTimerMutex = new Mutex$1();
297448
+ get mempoolRunner() {
297449
+ return this.params.mempoolRunner;
297450
+ }
297451
+ get pendingBlocksArchivist() {
297452
+ return this.params.pendingBlocksArchivist;
297453
+ }
297454
+ get pendingTransactionsArchivist() {
297455
+ return this.params.pendingTransactionsArchivist;
297456
+ }
297457
+ static async paramsHandler(params) {
297458
+ return {
297459
+ ...await super.paramsHandler(params),
297460
+ mempoolRunner: assertEx(params?.mempoolRunner, () => "mempoolRunner is required for MempoolActor"),
297461
+ pendingBlocksArchivist: assertEx(params?.pendingBlocksArchivist, () => "pendingBlocksArchivist is required for MempoolActor"),
297462
+ pendingTransactionsArchivist: assertEx(params?.pendingTransactionsArchivist, () => "pendingTransactionsArchivist is required for MempoolActor")
297463
+ };
297464
+ }
297465
+ async startHandler() {
297466
+ await super.startHandler();
297467
+ this.restartBlockTimer();
297468
+ }
297469
+ async stopHandler() {
297470
+ await super.stopHandler();
297471
+ this.stopBlockTimer();
297472
+ }
297473
+ restartBlockTimer() {
297474
+ this.stopBlockTimer();
297475
+ this._blockTimerId = setInterval(() => {
297476
+ if (this._blockTimerMutex.isLocked()) {
297477
+ return;
297478
+ }
297479
+ void this._blockTimerMutex.runExclusive(async () => {
297480
+ await this.mempoolRunner.prunePendingBlocks({
297481
+ batchSize: 50
297482
+ });
297483
+ });
297484
+ }, 1e3);
297485
+ }
297486
+ restartTransactionTimer() {
297487
+ this.stopTransactionTimer();
297488
+ this._transactionTimerId = setInterval(() => {
297489
+ if (this._transactionTimerMutex.isLocked()) {
297490
+ return;
297491
+ }
297492
+ void this._transactionTimerMutex.runExclusive(async () => {
297493
+ await this.mempoolRunner.prunePendingTransactions({
297494
+ batchSize: 50
297495
+ });
297496
+ });
297497
+ }, 1e3);
297498
+ }
297499
+ stopBlockTimer() {
297500
+ if (this._blockTimerId !== null) {
297501
+ clearInterval(this._blockTimerId);
297502
+ }
297503
+ this._blockTimerId = null;
297504
+ }
297505
+ stopTransactionTimer() {
297506
+ if (this._transactionTimerId !== null) {
297507
+ clearInterval(this._transactionTimerId);
297508
+ }
297509
+ this._transactionTimerId = null;
297510
+ }
297511
+ };
297512
+ MempoolActor = _ts_decorate$2([
297513
+ creatable()
297514
+ ], MempoolActor);
297515
+ function _ts_decorate2(decorators, target, key, desc) {
297516
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
297517
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
297518
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
297519
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
297520
+ }
297521
+ __name$6(_ts_decorate2, "_ts_decorate");
297318
297522
  var ValidatorActor = class extends Actor {
297319
297523
  static {
297320
297524
  __name$6(this, "ValidatorActor");
297321
297525
  }
297322
- _blockViewer;
297323
297526
  _lastValidatedBlock;
297324
297527
  _lastValidatedBlockHash;
297325
- _mempoolViewer;
297326
297528
  get blockViewer() {
297327
- return this._blockViewer;
297529
+ return this.params.blockViewer;
297328
297530
  }
297329
297531
  get finalizedArchivist() {
297330
297532
  return assertEx(this.params.finalizedArchivist, () => "finalizedArchivist not set");
297331
297533
  }
297332
297534
  get mempoolViewer() {
297333
- return this._mempoolViewer;
297535
+ return this.params.mempoolViewer;
297334
297536
  }
297335
- async createHandler() {
297336
- await super.createHandler();
297337
- this._blockViewer = assertEx(this.params.blockViewer ?? await this.locator?.getInstance(BlockViewerMoniker), () => "Unable to locate a BlockViewer");
297338
- this._mempoolViewer = assertEx(this.params.mempoolViewer ?? await this.locator?.getInstance(MempoolViewerMoniker), () => "Unable to locate a MempoolViewer");
297537
+ static async paramsHandler(params) {
297538
+ return {
297539
+ ...await super.paramsHandler(params),
297540
+ mempoolViewer: assertEx(params?.mempoolViewer, () => "mempoolViewer is required for ValidatorActor"),
297541
+ blockViewer: assertEx(params?.blockViewer, () => "blockViewer is required for ValidatorActor"),
297542
+ finalizedArchivist: assertEx(params?.finalizedArchivist, () => "finalizedArchivist is required for ValidatorActor"),
297543
+ account: assertEx(params?.account, () => "account is required for ValidatorActor")
297544
+ };
297339
297545
  }
297340
297546
  async startHandler() {
297341
297547
  await super.startHandler();
@@ -297372,7 +297578,7 @@ var ValidatorActor = class extends Actor {
297372
297578
  return valid;
297373
297579
  }
297374
297580
  };
297375
- ValidatorActor = _ts_decorate$2([
297581
+ ValidatorActor = _ts_decorate2([
297376
297582
  creatable()
297377
297583
  ], ValidatorActor);
297378
297584
  var DEFAULT_STORAGE_ROOT = path.join(process.cwd(), ".store");
@@ -298127,13 +298333,13 @@ async function initRewardsRedemptionApiWallet({ config, logger }) {
298127
298333
  }, mnemonic);
298128
298334
  }
298129
298335
  __name$6(initRewardsRedemptionApiWallet, "initRewardsRedemptionApiWallet");
298130
- function _ts_decorate2(decorators, target, key, desc) {
298336
+ function _ts_decorate3(decorators, target, key, desc) {
298131
298337
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
298132
298338
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
298133
298339
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
298134
298340
  return c > 3 && r && Object.defineProperty(target, key, r), r;
298135
298341
  }
298136
- __name$6(_ts_decorate2, "_ts_decorate");
298342
+ __name$6(_ts_decorate3, "_ts_decorate");
298137
298343
  var Orchestrator = class extends AbstractCreatable {
298138
298344
  static {
298139
298345
  __name$6(this, "Orchestrator");
@@ -298186,7 +298392,7 @@ var Orchestrator = class extends AbstractCreatable {
298186
298392
  this.logger?.log("[Orchestrator] Stopped...");
298187
298393
  }
298188
298394
  };
298189
- Orchestrator = _ts_decorate2([
298395
+ Orchestrator = _ts_decorate3([
298190
298396
  creatable()
298191
298397
  ], Orchestrator);
298192
298398
 
@@ -298551,6 +298757,10 @@ async function getServer$3(params) {
298551
298757
  node,
298552
298758
  chainId
298553
298759
  });
298760
+ locator.register(SimpleBlockValidationViewer.factory(SimpleBlockValidationViewer.dependencies, {
298761
+ state: validateHydratedBlockState,
298762
+ protocol: validateHydratedBlock
298763
+ }));
298554
298764
  if (canUseEvmProvider({
298555
298765
  config
298556
298766
  })) {
@@ -298573,6 +298783,9 @@ async function getServer$3(params) {
298573
298783
  address: asAddress(contractAddress, true),
298574
298784
  runner: provider
298575
298785
  }));
298786
+ locator.register(SimpleTimeSyncViewer.factory(SimpleTimeSyncViewer.dependencies, {
298787
+ ethProvider: provider
298788
+ }));
298576
298789
  }
298577
298790
  const apiContext = {
298578
298791
  ...initContext,
@@ -298590,14 +298803,29 @@ async function getServer$3(params) {
298590
298803
  assertEx(await accountBalanceViewer.start(), () => "Failed to start AccountBalanceViewer");
298591
298804
  const xyoViewer = await locator.getInstance(XyoViewerMoniker);
298592
298805
  assertEx(await xyoViewer.start(), () => "Failed to start XyoViewer");
298806
+ const mempoolViewer = await locator.getInstance(MempoolViewerMoniker);
298807
+ assertEx(await mempoolViewer.start(), () => "Failed to start MempoolViewer");
298808
+ const mempoolRunner = await locator.getInstance(MempoolRunnerMoniker);
298809
+ assertEx(await mempoolRunner.start(), () => "Failed to start MempoolRunner");
298593
298810
  console.info(`[API] Current block after initialization: #${blk[0].block} (${blk[0]._hash})`);
298594
- const actor = config.mempool.enabled ? void 0 : await ValidatorActor.create({
298811
+ const validatorActor = config.mempool.enabled ? void 0 : await ValidatorActor.create({
298595
298812
  id: "validator-mempool-server",
298596
298813
  account: wallet,
298597
298814
  context: locator.context,
298598
- finalizedArchivist: writableChainArchivist
298815
+ finalizedArchivist: writableChainArchivist,
298816
+ mempoolViewer,
298817
+ blockViewer
298599
298818
  });
298600
- await actor?.start();
298819
+ await validatorActor?.start();
298820
+ const mempoolActor = config.mempool.enabled ? void 0 : await MempoolActor.create({
298821
+ id: "mempool-mempool-server",
298822
+ account: wallet,
298823
+ context: locator.context,
298824
+ mempoolRunner,
298825
+ pendingBlocksArchivist,
298826
+ pendingTransactionsArchivist
298827
+ });
298828
+ await mempoolActor?.start();
298601
298829
  const app = await getApp$3(apiContext);
298602
298830
  const server = app.listen(port, hostname$3, () => logger?.log(`[API] Server listening at http://${hostname$3}:${port}`));
298603
298831
  server.setTimeout(2e4);
@@ -342442,6 +342670,10 @@ var getApp$1 = /* @__PURE__ */ __name$2((context) => {
342442
342670
  var hostname$1 = "::";
342443
342671
  var getProviderFactoryLocator = /* @__PURE__ */ __name$2((context, finalizedArchivist, pendingTransactionsArchivist, pendingBlocksArchivist) => {
342444
342672
  const locator = new ProviderFactoryLocator(context);
342673
+ locator.register(SimpleBlockValidationViewer.factory(SimpleBlockValidationViewer.dependencies, {
342674
+ state: validateHydratedBlockState,
342675
+ protocol: validateHydratedBlock
342676
+ }));
342445
342677
  locator.register(SimpleMempoolViewer.factory(SimpleMempoolViewer.dependencies, {
342446
342678
  pendingTransactionsArchivist,
342447
342679
  pendingBlocksArchivist
@@ -342513,12 +342745,16 @@ var getServer$1 = /* @__PURE__ */ __name$2(async (context) => {
342513
342745
  assertEx(await blockViewer.start(), () => "Failed to start BlockViewer");
342514
342746
  const blk = await blockViewer.currentBlock();
342515
342747
  assertEx(blk, () => "No blocks found after initialization");
342748
+ const mempoolViewer = await locator.getInstance(MempoolViewerMoniker);
342749
+ assertEx(await mempoolViewer.start(), () => "Failed to start MempoolViewer");
342516
342750
  console.info(`[Mempool] Current block after initialization: #${blk[0].block} (${blk[0]._hash})`);
342517
342751
  const actor = await ValidatorActor.create({
342518
342752
  id: "validator-mempool-server",
342519
342753
  account: wallet,
342520
342754
  context: locator.context,
342521
- finalizedArchivist: writableChainArchivist
342755
+ finalizedArchivist: writableChainArchivist,
342756
+ blockViewer,
342757
+ mempoolViewer
342522
342758
  });
342523
342759
  await actor.start();
342524
342760
  const app = getApp$1(mempoolContext);
@@ -350214,7 +350450,7 @@ var waitForHostPort = /* @__PURE__ */ __name((host, port) => {
350214
350450
 
350215
350451
  // src/runCLI.ts
350216
350452
  var configuration;
350217
- var version = isDefined("1.19.1") ? "1.19.1" : "unknown";
350453
+ var version = isDefined("1.19.3") ? "1.19.3" : "unknown";
350218
350454
  var getContextFromConfig = /* @__PURE__ */ __name(async (configuration2) => {
350219
350455
  const logger = initLogger(configuration2);
350220
350456
  const orchestrator = await Orchestrator.create({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/xl1-cli",
3
- "version": "1.19.2",
3
+ "version": "1.19.4",
4
4
  "description": "XYO Layer One CLI",
5
5
  "homepage": "https://xylabs.com",
6
6
  "bugs": {
@@ -75,15 +75,15 @@
75
75
  "@xyo-network/payload-model": "~5.3.2",
76
76
  "@xyo-network/wallet": "~5.3.2",
77
77
  "@xyo-network/wallet-model": "~5.3.2",
78
- "@xyo-network/xl1-cli-lib": "~1.19.2",
79
- "@xyo-network/xl1-sdk": "~1.20.9",
78
+ "@xyo-network/xl1-cli-lib": "~1.19.4",
79
+ "@xyo-network/xl1-sdk": "~1.21.9",
80
80
  "async-mutex": "~0.5.0",
81
81
  "dotenv": "~17.2.3",
82
82
  "eslint": "^9.39.2",
83
83
  "ethers": "^6.16.0",
84
84
  "nodemon": "~3.1.11",
85
85
  "rimraf": "~6.1.2",
86
- "rollup": "~4.57.0",
86
+ "rollup": "~4.57.1",
87
87
  "typescript": "~5.9.3",
88
88
  "vitest": "~4.0.18",
89
89
  "vitest-mock-extended": "~3.1.0",