@xyo-network/xl1-cli-lib 1.16.21 → 1.16.23

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 (63) hide show
  1. package/dist/node/index.mjs +254 -167
  2. package/dist/node/index.mjs.map +1 -1
  3. package/dist/node/orchestration/actor/implementation/BalanceActor.d.ts +1 -1
  4. package/dist/node/orchestration/actor/implementation/BalanceActor.d.ts.map +1 -1
  5. package/dist/node/orchestration/actor/implementation/ChainHeadUpdateActor.d.ts +1 -0
  6. package/dist/node/orchestration/actor/implementation/ChainHeadUpdateActor.d.ts.map +1 -1
  7. package/dist/node/orchestration/actor/implementation/ProducerActor.d.ts +2 -1
  8. package/dist/node/orchestration/actor/implementation/ProducerActor.d.ts.map +1 -1
  9. package/dist/node/orchestration/actor/implementation/ValidatorActor.d.ts +1 -1
  10. package/dist/node/orchestration/actor/implementation/ValidatorActor.d.ts.map +1 -1
  11. package/dist/node/orchestration/archivists/ChainFinalized/archivist.d.ts.map +1 -1
  12. package/dist/node/orchestration/archivists/ChainSubmissions/archivist.d.ts +1 -1
  13. package/dist/node/orchestration/archivists/ChainSubmissions/archivist.d.ts.map +1 -1
  14. package/dist/node/orchestration/archivists/PendingTransactions/archivist.d.ts +4 -2
  15. package/dist/node/orchestration/archivists/PendingTransactions/archivist.d.ts.map +1 -1
  16. package/dist/node/orchestration/archivists/RejectedTransactions/archivist.d.ts.map +1 -1
  17. package/dist/node/orchestration/archivists/StakeIntentState/archivist.d.ts.map +1 -1
  18. package/dist/node/orchestration/initServices.d.ts.map +1 -1
  19. package/dist/node/orchestration/map/BalanceSummary/initBalanceSummaryMap.d.ts +1 -1
  20. package/dist/node/orchestration/map/BalanceSummary/initBalanceSummaryMap.d.ts.map +1 -1
  21. package/dist/node/orchestration/map/BalanceSummary/initTransferSummaryMap.d.ts +2 -2
  22. package/dist/node/orchestration/map/BalanceSummary/initTransferSummaryMap.d.ts.map +1 -1
  23. package/dist/node/orchestration/services/implementation/balance.d.ts +2 -2
  24. package/dist/node/orchestration/services/implementation/balance.d.ts.map +1 -1
  25. package/dist/node/orchestration/services/implementation/chain/evm.d.ts.map +1 -1
  26. package/dist/node/orchestration/services/implementation/chain/index.d.ts +1 -0
  27. package/dist/node/orchestration/services/implementation/chain/index.d.ts.map +1 -1
  28. package/dist/node/orchestration/services/implementation/iterator.d.ts +1 -1
  29. package/dist/node/orchestration/services/implementation/iterator.d.ts.map +1 -1
  30. package/dist/node/orchestration/services/implementation/pendingTransactions.d.ts +1 -1
  31. package/dist/node/orchestration/services/implementation/pendingTransactions.d.ts.map +1 -1
  32. package/dist/node/orchestration/services/implementation/producer.d.ts +1 -1
  33. package/dist/node/orchestration/services/implementation/producer.d.ts.map +1 -1
  34. package/dist/node/orchestration/services/implementation/reward.d.ts +1 -1
  35. package/dist/node/orchestration/services/implementation/reward.d.ts.map +1 -1
  36. package/dist/node/orchestration/services/implementation/time.d.ts +1 -1
  37. package/dist/node/orchestration/services/implementation/time.d.ts.map +1 -1
  38. package/dist/node/orchestration/services/implementation/transfer.d.ts +1 -1
  39. package/dist/node/orchestration/services/implementation/transfer.d.ts.map +1 -1
  40. package/dist/node/xl1.mjs +252 -166
  41. package/dist/node/xl1.mjs.map +1 -1
  42. package/package.json +20 -20
  43. package/src/orchestration/actor/implementation/BalanceActor.ts +1 -1
  44. package/src/orchestration/actor/implementation/ChainHeadUpdateActor.ts +11 -2
  45. package/src/orchestration/actor/implementation/ProducerActor.ts +41 -32
  46. package/src/orchestration/actor/implementation/ValidatorActor.ts +1 -1
  47. package/src/orchestration/archivists/ChainFinalized/archivist.ts +13 -10
  48. package/src/orchestration/archivists/ChainSubmissions/archivist.ts +6 -4
  49. package/src/orchestration/archivists/PendingTransactions/archivist.ts +20 -14
  50. package/src/orchestration/archivists/RejectedTransactions/archivist.ts +6 -3
  51. package/src/orchestration/archivists/StakeIntentState/archivist.ts +6 -3
  52. package/src/orchestration/initServices.ts +4 -1
  53. package/src/orchestration/map/BalanceSummary/initBalanceSummaryMap.ts +8 -4
  54. package/src/orchestration/map/BalanceSummary/initTransferSummaryMap.ts +9 -5
  55. package/src/orchestration/services/implementation/balance.ts +8 -6
  56. package/src/orchestration/services/implementation/chain/evm.ts +3 -1
  57. package/src/orchestration/services/implementation/chain/index.ts +29 -8
  58. package/src/orchestration/services/implementation/iterator.ts +15 -8
  59. package/src/orchestration/services/implementation/pendingTransactions.ts +5 -3
  60. package/src/orchestration/services/implementation/producer.ts +5 -3
  61. package/src/orchestration/services/implementation/reward.ts +24 -16
  62. package/src/orchestration/services/implementation/time.ts +9 -7
  63. package/src/orchestration/services/implementation/transfer.ts +5 -3
@@ -223,7 +223,7 @@ var BalanceActor = class _BalanceActor extends Actor {
223
223
  if (this._updateMutex.isLocked()) return;
224
224
  await this._updateMutex.runExclusive(async () => {
225
225
  const head = await PayloadBuilder.hash(await this.chainIterator.head());
226
- await this.balanceService.accountBalances([], head);
226
+ await this.balanceService.accountsBalances([], head);
227
227
  });
228
228
  }
229
229
  };
@@ -232,10 +232,12 @@ var BalanceActor = class _BalanceActor extends Actor {
232
232
  import { assertEx as assertEx2, filterAs, toHex } from "@xylabs/sdk-js";
233
233
  import { findMostRecentBlock, sortBlocks } from "@xyo-network/chain-protocol";
234
234
  import { asBlockBoundWitness } from "@xyo-network/xl1-protocol";
235
+ import { Mutex as Mutex2 } from "async-mutex";
235
236
  var ChainHeadUpdateActor = class _ChainHeadUpdateActor extends Actor {
236
237
  static {
237
238
  __name(this, "ChainHeadUpdateActor");
238
239
  }
240
+ _pollForNewHeadMutex = new Mutex2();
239
241
  constructor(params) {
240
242
  super("ChainHeadUpdate", "ChainHeadUpdate", params);
241
243
  }
@@ -266,8 +268,14 @@ var ChainHeadUpdateActor = class _ChainHeadUpdateActor extends Actor {
266
268
  await this.updateHeadIfNewer(candidateBlock);
267
269
  }
268
270
  async pollForNewHead() {
269
- const candidateBlock = await findMostRecentBlock(this.chainFinalizedArchivist);
270
- await this.updateHeadIfNewer(candidateBlock);
271
+ if (this._pollForNewHeadMutex.isLocked()) {
272
+ this.logger?.log("Skipping poll for new head, previous poll still in progress");
273
+ return;
274
+ }
275
+ await this._pollForNewHeadMutex.runExclusive(async () => {
276
+ const candidateBlock = await findMostRecentBlock(this.chainFinalizedArchivist);
277
+ await this.updateHeadIfNewer(candidateBlock);
278
+ });
271
279
  }
272
280
  async updateHeadIfNewer(candidateBlock) {
273
281
  if (!candidateBlock) return;
@@ -290,6 +298,7 @@ import { BaseBlockProducerService } from "@xyo-network/chain-services";
290
298
  import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
291
299
  import { PayloadBundleSchema } from "@xyo-network/payload-model";
292
300
  import { buildTransaction, flattenHydratedBlock, flattenHydratedTransaction } from "@xyo-network/xl1-protocol-sdk";
301
+ import { Mutex as Mutex3 } from "async-mutex";
293
302
  var SHOULD_REGISTER_REDECLARATION_INTENT_TIMER = true;
294
303
  var TEN_MINUTES = 10 * 60 * 1e3;
295
304
  var ProducerActor = class _ProducerActor extends Actor {
@@ -298,6 +307,7 @@ var ProducerActor = class _ProducerActor extends Actor {
298
307
  }
299
308
  _lastProducedBlock;
300
309
  _lastRedeclarationIntent;
310
+ _produceBlockMutex = new Mutex3();
301
311
  constructor(params) {
302
312
  super(params.producer.address, "Producer", params);
303
313
  }
@@ -335,7 +345,7 @@ var ProducerActor = class _ProducerActor extends Actor {
335
345
  async () => {
336
346
  await this.produceBlock();
337
347
  },
338
- 100,
348
+ 2e3,
339
349
  1500
340
350
  /* 500 */
341
351
  );
@@ -357,30 +367,36 @@ var ProducerActor = class _ProducerActor extends Actor {
357
367
  }
358
368
  async produceBlock() {
359
369
  await this.spanAsync("produceBlock", async () => {
360
- const headStart = Date.now();
361
- const head = await this.chainIterator.head();
362
- const headDuration = Date.now() - headStart;
363
- if (headDuration > 500) {
364
- this.logger?.warn(`[Slow] Fetched head in ${headDuration}ms: 0x${toHex2(head._hash)}`);
370
+ if (this._produceBlockMutex.isLocked()) {
371
+ this.logger?.log("Skipping block production, previous production still in progress");
372
+ return;
365
373
  }
366
- const headHash = head._hash;
367
- if (this._lastProducedBlock && this._lastProducedBlock[0].previous === headHash) {
368
- this.logger?.log("Block already produced:", `0x${toHex2(this._lastProducedBlock[0].block)}`);
369
- } else {
370
- const nextStart = Date.now();
371
- const nextBlock = await this.producer.next(head);
372
- const nextDuration = Date.now() - nextStart;
373
- if (nextDuration > 1e3) {
374
- this.logger?.warn(`[Slow] Generated next block in ${nextDuration}ms, block: ${nextBlock?.[0]._hash}`);
374
+ await this._produceBlockMutex.runExclusive(async () => {
375
+ const headStart = Date.now();
376
+ const head = await this.chainIterator.head();
377
+ const headDuration = Date.now() - headStart;
378
+ if (headDuration > 500) {
379
+ this.logger?.warn(`[Slow] Fetched head in ${headDuration}ms: 0x${toHex2(head._hash)}`);
375
380
  }
376
- if (nextBlock) {
377
- const displayBlockNumber = `0x${toHex2(nextBlock[0].block)}`;
378
- this.logger?.log("Produced block:", displayBlockNumber);
379
- await this.chainSubmissionsArchivistWrite.insert(flattenHydratedBlock(nextBlock));
380
- this.logger?.log("Published block:", displayBlockNumber);
381
- this._lastProducedBlock = nextBlock;
381
+ const headHash = head._hash;
382
+ if (this._lastProducedBlock && this._lastProducedBlock[0].previous === headHash) {
383
+ this.logger?.log("Block already produced:", `0x${toHex2(this._lastProducedBlock[0].block)}`, this._lastProducedBlock[0].block);
384
+ } else {
385
+ const nextStart = Date.now();
386
+ const nextBlock = await this.producer.next(head);
387
+ const nextDuration = Date.now() - nextStart;
388
+ if (nextDuration > 1e3) {
389
+ this.logger?.warn(`[Slow] Generated next block in ${nextDuration}ms, block: ${nextBlock?.[0]._hash}`);
390
+ }
391
+ if (nextBlock) {
392
+ const displayBlockNumber = `0x${toHex2(nextBlock[0].block)}`;
393
+ this.logger?.log("Produced block:", displayBlockNumber);
394
+ await this.chainSubmissionsArchivistWrite.insert(flattenHydratedBlock(nextBlock));
395
+ this.logger?.log("Published block:", displayBlockNumber, nextBlock[0].block);
396
+ this._lastProducedBlock = nextBlock;
397
+ }
382
398
  }
383
- }
399
+ });
384
400
  });
385
401
  }
386
402
  async redeclareIntent() {
@@ -433,7 +449,7 @@ var ProducerActor = class _ProducerActor extends Actor {
433
449
  async validateCurrentBalance() {
434
450
  const head = this._lastProducedBlock?.[0]._hash;
435
451
  if (isDefined(head)) {
436
- const balances = await this.balanceService.accountBalances([
452
+ const balances = await this.balanceService.accountsBalances([
437
453
  this.account.address
438
454
  ], head);
439
455
  const currentBalance = balances[this.account.address] ?? 0n;
@@ -518,7 +534,7 @@ var ValidatorActor = class _ValidatorActor extends Actor {
518
534
  }
519
535
  });
520
536
  },
521
- 100,
537
+ 2e3,
522
538
  1500
523
539
  /* 500 */
524
540
  );
@@ -592,7 +608,7 @@ var initHealthEndpoints = /* @__PURE__ */ __name((params) => {
592
608
  }, "initHealthEndpoints");
593
609
 
594
610
  // src/orchestration/initServices.ts
595
- import { asAddress as asAddress2, assertEx as assertEx18, isDefined as isDefined14 } from "@xylabs/sdk-js";
611
+ import { asAddress as asAddress2, assertEx as assertEx19, isDefined as isDefined14 } from "@xylabs/sdk-js";
596
612
  import { initProducerAccount } from "@xyo-network/chain-orchestration";
597
613
  import { initTelemetry } from "@xyo-network/chain-telemetry";
598
614
  import { startupSpanAsync as startupSpanAsync8 } from "@xyo-network/chain-utils";
@@ -605,10 +621,11 @@ import { Semaphore as Semaphore2 } from "async-mutex";
605
621
  // src/orchestration/archivists/ChainFinalized/archivist.ts
606
622
  import { initArchivistSync } from "@xyo-network/chain-orchestration";
607
623
  import { startupSpanAsync } from "@xyo-network/chain-utils";
608
- import { Mutex as Mutex4 } from "async-mutex";
624
+ import { timeBudget } from "@xyo-network/xl1-protocol-sdk";
625
+ import { Mutex as Mutex6 } from "async-mutex";
609
626
 
610
627
  // src/orchestration/archivists/ChainFinalized/local.ts
611
- import { Mutex as Mutex2 } from "async-mutex";
628
+ import { Mutex as Mutex4 } from "async-mutex";
612
629
 
613
630
  // src/orchestration/archivists/lib/localPersistentArchivist.ts
614
631
  import { rm } from "fs/promises";
@@ -636,7 +653,7 @@ var getLocalPersistentArchivist = /* @__PURE__ */ __name((name, dbName, storeNam
636
653
  }, "getLocalPersistentArchivist");
637
654
 
638
655
  // src/orchestration/archivists/ChainFinalized/local.ts
639
- var mutex = new Mutex2();
656
+ var mutex = new Mutex4();
640
657
  var singleton;
641
658
  var initLocalChainFinalizedArchivist = /* @__PURE__ */ __name(async ({ config: config2 }) => {
642
659
  return await mutex.runExclusive(async () => {
@@ -651,8 +668,8 @@ var initLocalChainFinalizedArchivist = /* @__PURE__ */ __name(async ({ config: c
651
668
  import { assertEx as assertEx5 } from "@xylabs/sdk-js";
652
669
  import { initBridge, initBridgedArchivistModule } from "@xyo-network/chain-orchestration";
653
670
  import { getUrl } from "@xyo-network/xl1-protocol-sdk";
654
- import { Mutex as Mutex3 } from "async-mutex";
655
- var mutex2 = new Mutex3();
671
+ import { Mutex as Mutex5 } from "async-mutex";
672
+ var mutex2 = new Mutex5();
656
673
  var singleton2;
657
674
  var initRemoteChainFinalizedArchivist = /* @__PURE__ */ __name(async ({ config: config2 }) => {
658
675
  return await mutex2.runExclusive(async () => {
@@ -669,24 +686,26 @@ var initRemoteChainFinalizedArchivist = /* @__PURE__ */ __name(async ({ config:
669
686
  }, "initRemoteChainFinalizedArchivist");
670
687
 
671
688
  // src/orchestration/archivists/ChainFinalized/archivist.ts
672
- var mutex3 = new Mutex4();
689
+ var mutex3 = new Mutex6();
673
690
  var singleton3;
674
691
  async function initChainFinalizedArchivist({ config: config2, logger, traceProvider }) {
675
692
  return await mutex3.runExclusive(async () => {
676
693
  if (singleton3) return singleton3;
677
- const [remote, local] = await Promise.all([
678
- startupSpanAsync("ChainFinalizedArchivist:initRemote", () => initRemoteChainFinalizedArchivist({
679
- config: config2,
680
- logger
681
- })),
682
- startupSpanAsync("ChainFinalizedArchivist:initLocal", () => initLocalChainFinalizedArchivist({
683
- config: config2,
684
- logger
685
- }))
686
- ]);
687
- await startupSpanAsync("ChainFinalizedArchivist:initArchivistSync", () => initArchivistSync("ChainFinalizedArchivist", remote, local, 200, Number.MAX_SAFE_INTEGER, traceProvider));
688
- singleton3 = local;
689
- return singleton3;
694
+ return await timeBudget("initChainFinalizedArchivist", logger, async () => {
695
+ const [remote, local] = await Promise.all([
696
+ startupSpanAsync("ChainFinalizedArchivist:initRemote", () => initRemoteChainFinalizedArchivist({
697
+ config: config2,
698
+ logger
699
+ })),
700
+ startupSpanAsync("ChainFinalizedArchivist:initLocal", () => initLocalChainFinalizedArchivist({
701
+ config: config2,
702
+ logger
703
+ }))
704
+ ]);
705
+ await startupSpanAsync("ChainFinalizedArchivist:initArchivistSync", () => initArchivistSync("ChainFinalizedArchivist", remote, local, 200, Number.MAX_SAFE_INTEGER, traceProvider));
706
+ singleton3 = local;
707
+ return singleton3;
708
+ }, 2e3, true);
690
709
  });
691
710
  }
692
711
  __name(initChainFinalizedArchivist, "initChainFinalizedArchivist");
@@ -694,14 +713,15 @@ __name(initChainFinalizedArchivist, "initChainFinalizedArchivist");
694
713
  // src/orchestration/archivists/ChainSubmissions/archivist.ts
695
714
  import { assertEx as assertEx7 } from "@xylabs/sdk-js";
696
715
  import { startupSpanAsync as startupSpanAsync2 } from "@xyo-network/chain-utils";
697
- import { Mutex as Mutex6 } from "async-mutex";
716
+ import { timeBudget as timeBudget2 } from "@xyo-network/xl1-protocol-sdk";
717
+ import { Mutex as Mutex8 } from "async-mutex";
698
718
 
699
719
  // src/orchestration/archivists/ChainSubmissions/remote.ts
700
720
  import { assertEx as assertEx6 } from "@xylabs/sdk-js";
701
721
  import { initBridge as initBridge2, initBridgedArchivistModule as initBridgedArchivistModule2 } from "@xyo-network/chain-orchestration";
702
722
  import { getUrl as getUrl2 } from "@xyo-network/xl1-protocol-sdk";
703
- import { Mutex as Mutex5 } from "async-mutex";
704
- var mutex4 = new Mutex5();
723
+ import { Mutex as Mutex7 } from "async-mutex";
724
+ var mutex4 = new Mutex7();
705
725
  var singleton4;
706
726
  var initRemoteChainSubmissionsArchivist = /* @__PURE__ */ __name(async ({ config: config2 }) => {
707
727
  return await mutex4.runExclusive(async () => {
@@ -718,26 +738,29 @@ var initRemoteChainSubmissionsArchivist = /* @__PURE__ */ __name(async ({ config
718
738
  }, "initRemoteChainSubmissionsArchivist");
719
739
 
720
740
  // src/orchestration/archivists/ChainSubmissions/archivist.ts
721
- var mutex5 = new Mutex6();
741
+ var mutex5 = new Mutex8();
722
742
  var singleton5;
723
743
  var initChainSubmissionsArchivist = /* @__PURE__ */ __name(async (params) => {
724
744
  return await mutex5.runExclusive(async () => {
725
745
  if (singleton5) return singleton5;
726
- const remote = await startupSpanAsync2("ChainSubmissionsArchivist:initRemote", () => initRemoteChainSubmissionsArchivist(params));
727
- singleton5 = remote;
728
- return assertEx7(singleton5, () => new Error("Failed to initialize ChainSubmissionsArchivist"));
746
+ return await timeBudget2("initChainSubmissionsArchivist", params.logger, async () => {
747
+ const remote = await startupSpanAsync2("ChainSubmissionsArchivist:initRemote", () => initRemoteChainSubmissionsArchivist(params));
748
+ singleton5 = remote;
749
+ return assertEx7(singleton5, () => new Error("Failed to initialize ChainSubmissionsArchivist"));
750
+ }, 2e3, true);
729
751
  });
730
752
  }, "initChainSubmissionsArchivist");
731
753
 
732
754
  // src/orchestration/archivists/PendingTransactions/archivist.ts
733
755
  import { initArchivistSync as initArchivistSync2 } from "@xyo-network/chain-orchestration";
734
756
  import { startupSpanAsync as startupSpanAsync3 } from "@xyo-network/chain-utils";
735
- import { Mutex as Mutex9 } from "async-mutex";
757
+ import { timeBudget as timeBudget3 } from "@xyo-network/xl1-protocol-sdk";
758
+ import { Mutex as Mutex11 } from "async-mutex";
736
759
 
737
760
  // src/orchestration/archivists/PendingTransactions/local.ts
738
761
  import { MemoryArchivist, MemoryArchivistConfigSchema } from "@xyo-network/archivist-memory";
739
- import { Mutex as Mutex7 } from "async-mutex";
740
- var mutex6 = new Mutex7();
762
+ import { Mutex as Mutex9 } from "async-mutex";
763
+ var mutex6 = new Mutex9();
741
764
  var singleton6;
742
765
  var initLocalPendingTransactionsArchivist = /* @__PURE__ */ __name(async () => {
743
766
  return await mutex6.runExclusive(async () => {
@@ -758,8 +781,8 @@ var initLocalPendingTransactionsArchivist = /* @__PURE__ */ __name(async () => {
758
781
  import { assertEx as assertEx8 } from "@xylabs/sdk-js";
759
782
  import { initBridge as initBridge3, initBridgedArchivistModule as initBridgedArchivistModule3 } from "@xyo-network/chain-orchestration";
760
783
  import { getUrl as getUrl3 } from "@xyo-network/xl1-protocol-sdk";
761
- import { Mutex as Mutex8 } from "async-mutex";
762
- var mutex7 = new Mutex8();
784
+ import { Mutex as Mutex10 } from "async-mutex";
785
+ var mutex7 = new Mutex10();
763
786
  var singleton7;
764
787
  var initRemotePendingTransactionsArchivist = /* @__PURE__ */ __name(async ({ config: config2 }) => {
765
788
  return await mutex7.runExclusive(async () => {
@@ -776,35 +799,44 @@ var initRemotePendingTransactionsArchivist = /* @__PURE__ */ __name(async ({ con
776
799
  }, "initRemotePendingTransactionsArchivist");
777
800
 
778
801
  // src/orchestration/archivists/PendingTransactions/archivist.ts
779
- var mutex8 = new Mutex9();
802
+ var mutex8 = new Mutex11();
780
803
  var singleton8;
781
- var initPendingBundledTransactionsArchivist = /* @__PURE__ */ __name(async (params) => {
804
+ var initPendingBundledTransactionsArchivist = /* @__PURE__ */ __name(async ({ config: config2, logger }) => {
782
805
  return await mutex8.runExclusive(async () => {
783
806
  if (singleton8) return singleton8;
784
- const remote = await startupSpanAsync3("PendingBundledTransactionsArchivist:initRemote", () => initRemotePendingTransactionsArchivist(params));
785
- const local = await startupSpanAsync3("PendingBundledTransactionsArchivist:initLocal", () => initLocalPendingTransactionsArchivist(params));
786
- const start2 = await remote.next({
787
- limit: 1,
788
- order: "desc"
789
- });
790
- await local.insert(start2);
791
- await startupSpanAsync3("PendingBundledTransactionsArchivist:initArchivistSync", () => initArchivistSync2("PendingBundledTransactionsArchivist", remote, local));
792
- singleton8 = [
793
- local,
794
- remote
795
- ];
796
- return singleton8;
807
+ return await timeBudget3("initPendingBundledTransactionsArchivist", logger, async () => {
808
+ const remote = await startupSpanAsync3("PendingBundledTransactionsArchivist:initRemote", () => initRemotePendingTransactionsArchivist({
809
+ config: config2,
810
+ logger
811
+ }));
812
+ const local = await startupSpanAsync3("PendingBundledTransactionsArchivist:initLocal", () => initLocalPendingTransactionsArchivist({
813
+ config: config2,
814
+ logger
815
+ }));
816
+ const start2 = await remote.next({
817
+ limit: 1,
818
+ order: "desc"
819
+ });
820
+ await local.insert(start2);
821
+ await startupSpanAsync3("PendingBundledTransactionsArchivist:initArchivistSync", () => initArchivistSync2("PendingBundledTransactionsArchivist", remote, local));
822
+ singleton8 = [
823
+ local,
824
+ remote
825
+ ];
826
+ return singleton8;
827
+ }, 2e3, true);
797
828
  });
798
829
  }, "initPendingBundledTransactionsArchivist");
799
830
 
800
831
  // src/orchestration/archivists/RejectedTransactions/archivist.ts
801
832
  import { startupSpanAsync as startupSpanAsync4 } from "@xyo-network/chain-utils";
802
- import { Mutex as Mutex11 } from "async-mutex";
833
+ import { timeBudget as timeBudget4 } from "@xyo-network/xl1-protocol-sdk";
834
+ import { Mutex as Mutex13 } from "async-mutex";
803
835
 
804
836
  // src/orchestration/archivists/RejectedTransactions/local.ts
805
837
  import { MemoryArchivist as MemoryArchivist2, MemoryArchivistConfigSchema as MemoryArchivistConfigSchema2 } from "@xyo-network/archivist-memory";
806
- import { Mutex as Mutex10 } from "async-mutex";
807
- var mutex9 = new Mutex10();
838
+ import { Mutex as Mutex12 } from "async-mutex";
839
+ var mutex9 = new Mutex12();
808
840
  var singleton9;
809
841
  var initLocalRejectedTransactionsArchivist = /* @__PURE__ */ __name(async () => {
810
842
  return await mutex9.runExclusive(async () => {
@@ -822,14 +854,16 @@ var initLocalRejectedTransactionsArchivist = /* @__PURE__ */ __name(async () =>
822
854
  }, "initLocalRejectedTransactionsArchivist");
823
855
 
824
856
  // src/orchestration/archivists/RejectedTransactions/archivist.ts
825
- var mutex10 = new Mutex11();
857
+ var mutex10 = new Mutex13();
826
858
  var singleton10;
827
859
  async function initRejectedTransactionsArchivist(params) {
828
860
  return await mutex10.runExclusive(async () => {
829
861
  if (singleton10) return singleton10;
830
- const local = await startupSpanAsync4("RejectedTransactionsArchivist:initLocal", () => initLocalRejectedTransactionsArchivist(params));
831
- singleton10 = local;
832
- return singleton10;
862
+ return await timeBudget4("initRejectedTransactionsArchivist", params.logger, async () => {
863
+ const local = await startupSpanAsync4("RejectedTransactionsArchivist:initLocal", () => initLocalRejectedTransactionsArchivist(params));
864
+ singleton10 = local;
865
+ return singleton10;
866
+ }, 2e3, true);
833
867
  });
834
868
  }
835
869
  __name(initRejectedTransactionsArchivist, "initRejectedTransactionsArchivist");
@@ -837,12 +871,13 @@ __name(initRejectedTransactionsArchivist, "initRejectedTransactionsArchivist");
837
871
  // src/orchestration/archivists/StakeIntentState/archivist.ts
838
872
  import { assertEx as assertEx10 } from "@xylabs/sdk-js";
839
873
  import { startupSpanAsync as startupSpanAsync5 } from "@xyo-network/chain-utils";
840
- import { Mutex as Mutex13 } from "async-mutex";
874
+ import { timeBudget as timeBudget5 } from "@xyo-network/xl1-protocol-sdk";
875
+ import { Mutex as Mutex15 } from "async-mutex";
841
876
 
842
877
  // src/orchestration/archivists/StakeIntentState/local.ts
843
878
  import { assertEx as assertEx9 } from "@xylabs/sdk-js";
844
- import { Mutex as Mutex12 } from "async-mutex";
845
- var mutex11 = new Mutex12();
879
+ import { Mutex as Mutex14 } from "async-mutex";
880
+ var mutex11 = new Mutex14();
846
881
  var singleton11;
847
882
  var initLocalStakeIntentStateArchivist = /* @__PURE__ */ __name(async ({ config: config2 }) => {
848
883
  return await mutex11.runExclusive(async () => {
@@ -854,27 +889,30 @@ var initLocalStakeIntentStateArchivist = /* @__PURE__ */ __name(async ({ config:
854
889
  }, "initLocalStakeIntentStateArchivist");
855
890
 
856
891
  // src/orchestration/archivists/StakeIntentState/archivist.ts
857
- var mutex12 = new Mutex13();
892
+ var mutex12 = new Mutex15();
858
893
  var singleton12;
859
894
  var initStakeIntentStateArchivist = /* @__PURE__ */ __name(async (params) => {
860
895
  return await mutex12.runExclusive(async () => {
861
896
  if (singleton12) return singleton12;
862
- const local = await startupSpanAsync5("StakeIntentStateArchivist:initLocal", () => initLocalStakeIntentStateArchivist(params));
863
- singleton12 = local;
864
- return assertEx10(singleton12, () => "StakeIntentStateArchivist is undefined");
897
+ return await timeBudget5("initStakeIntentStateArchivist", params.logger, async () => {
898
+ const local = await startupSpanAsync5("StakeIntentStateArchivist:initLocal", () => initLocalStakeIntentStateArchivist(params));
899
+ singleton12 = local;
900
+ return assertEx10(singleton12, () => "StakeIntentStateArchivist is undefined");
901
+ }, 2e3, true);
865
902
  });
866
903
  }, "initStakeIntentStateArchivist");
867
904
 
868
905
  // src/orchestration/map/BalanceSummary/initBalanceSummaryMap.ts
869
906
  import { isDefined as isDefined5 } from "@xylabs/sdk-js";
870
907
  import { startupSpanAsync as startupSpanAsync6 } from "@xyo-network/chain-utils";
871
- import { Mutex as Mutex15 } from "async-mutex";
908
+ import { timeBudget as timeBudget6 } from "@xyo-network/xl1-protocol-sdk";
909
+ import { Mutex as Mutex17 } from "async-mutex";
872
910
 
873
911
  // src/orchestration/map/BalanceSummary/initLocalBalanceSummaryMap.ts
874
912
  import { isDefined as isDefined4 } from "@xylabs/sdk-js";
875
913
  import { getLocalPersistentMap } from "@xyo-network/chain-protocol";
876
- import { Mutex as Mutex14 } from "async-mutex";
877
- var mutex13 = new Mutex14();
914
+ import { Mutex as Mutex16 } from "async-mutex";
915
+ var mutex13 = new Mutex16();
878
916
  var singleton13;
879
917
  var initLocalBalanceSummaryMap = /* @__PURE__ */ __name(async (params) => {
880
918
  return await mutex13.runExclusive(async () => {
@@ -886,14 +924,16 @@ var initLocalBalanceSummaryMap = /* @__PURE__ */ __name(async (params) => {
886
924
  }, "initLocalBalanceSummaryMap");
887
925
 
888
926
  // src/orchestration/map/BalanceSummary/initBalanceSummaryMap.ts
889
- var mutex14 = new Mutex15();
927
+ var mutex14 = new Mutex17();
890
928
  var singleton14;
891
929
  async function initBalanceSummaryMap(params) {
892
930
  return await mutex14.runExclusive(async () => {
893
931
  if (isDefined5(singleton14)) return singleton14;
894
- const local = await startupSpanAsync6("BalanceSummaryMap:initLocal", () => initLocalBalanceSummaryMap(params));
895
- singleton14 = local;
896
- return singleton14;
932
+ return await timeBudget6("initBalanceSummaryMap", params.logger, async () => {
933
+ const local = await startupSpanAsync6("BalanceSummaryMap:initLocal", () => initLocalBalanceSummaryMap(params));
934
+ singleton14 = local;
935
+ return singleton14;
936
+ }, 2e3, true);
897
937
  });
898
938
  }
899
939
  __name(initBalanceSummaryMap, "initBalanceSummaryMap");
@@ -901,13 +941,14 @@ __name(initBalanceSummaryMap, "initBalanceSummaryMap");
901
941
  // src/orchestration/map/BalanceSummary/initTransferSummaryMap.ts
902
942
  import { isDefined as isDefined7 } from "@xylabs/sdk-js";
903
943
  import { startupSpanAsync as startupSpanAsync7 } from "@xyo-network/chain-utils";
904
- import { Mutex as Mutex17 } from "async-mutex";
944
+ import { timeBudget as timeBudget7 } from "@xyo-network/xl1-protocol-sdk";
945
+ import { Mutex as Mutex19 } from "async-mutex";
905
946
 
906
947
  // src/orchestration/map/BalanceSummary/initLocalTransferSummaryMap.ts
907
948
  import { isDefined as isDefined6 } from "@xylabs/sdk-js";
908
949
  import { getLocalPersistentMap as getLocalPersistentMap2 } from "@xyo-network/chain-protocol";
909
- import { Mutex as Mutex16 } from "async-mutex";
910
- var mutex15 = new Mutex16();
950
+ import { Mutex as Mutex18 } from "async-mutex";
951
+ var mutex15 = new Mutex18();
911
952
  var singleton15;
912
953
  var initLocalTransferSummaryMap = /* @__PURE__ */ __name(async (params) => {
913
954
  return await mutex15.runExclusive(async () => {
@@ -919,28 +960,34 @@ var initLocalTransferSummaryMap = /* @__PURE__ */ __name(async (params) => {
919
960
  }, "initLocalTransferSummaryMap");
920
961
 
921
962
  // src/orchestration/map/BalanceSummary/initTransferSummaryMap.ts
922
- var mutex16 = new Mutex17();
963
+ var mutex16 = new Mutex19();
923
964
  var singleton16;
924
965
  async function initTransferSummaryMap(params) {
925
966
  return await mutex16.runExclusive(async () => {
926
967
  if (isDefined7(singleton16)) return singleton16;
927
- const local = await startupSpanAsync7("TransferSummaryMap:initLocal", () => initLocalTransferSummaryMap(params));
928
- singleton16 = local;
929
- return singleton16;
968
+ return await timeBudget7("initTransferSummaryMap:Init", params.logger, async () => {
969
+ const local = await startupSpanAsync7("TransferSummaryMap:initLocal", () => initLocalTransferSummaryMap(params));
970
+ singleton16 = local;
971
+ return singleton16;
972
+ }, 2e3, true);
930
973
  });
931
974
  }
932
975
  __name(initTransferSummaryMap, "initTransferSummaryMap");
933
976
 
934
977
  // src/orchestration/services/implementation/balance.ts
935
978
  import { BaseAccountBalanceService } from "@xyo-network/chain-services";
979
+ import { timeBudget as timeBudget8 } from "@xyo-network/xl1-protocol-sdk";
936
980
  var balanceServiceSingleton;
937
981
  var initBalanceService = /* @__PURE__ */ __name(async (params) => {
938
982
  if (balanceServiceSingleton) return balanceServiceSingleton;
939
- balanceServiceSingleton = await BaseAccountBalanceService.create(params);
940
- return balanceServiceSingleton;
983
+ return await timeBudget8("initBalanceService", params.logger, async () => {
984
+ balanceServiceSingleton = await BaseAccountBalanceService.create(params);
985
+ return balanceServiceSingleton;
986
+ }, 2e3, true);
941
987
  }, "initBalanceService");
942
988
 
943
989
  // src/orchestration/services/implementation/chain/index.ts
990
+ import { assertEx as assertEx16 } from "@xylabs/sdk-js";
944
991
  import { MemoryChainService } from "@xyo-network/chain-services";
945
992
 
946
993
  // src/orchestration/services/implementation/chain/evm.ts
@@ -1052,31 +1099,43 @@ var initEvmContractChainService = /* @__PURE__ */ __name(async ({ account, confi
1052
1099
  meterProvider,
1053
1100
  logger
1054
1101
  });
1055
- return await chainStakeServiceSingleton;
1102
+ const result = await chainStakeServiceSingleton;
1103
+ await result.start();
1104
+ return result;
1056
1105
  }, "initEvmContractChainService");
1057
1106
 
1058
1107
  // src/orchestration/services/implementation/chain/index.ts
1059
1108
  var chainStakeServiceSingleton2;
1060
- var initChainService = /* @__PURE__ */ __name(({ account, config: config2 }) => init({
1061
- config: config2,
1062
- name: "ChainService",
1063
- account
1064
- }), "initChainService");
1065
- var init = /* @__PURE__ */ __name((params) => {
1109
+ var initChainService = /* @__PURE__ */ __name(({ account, config: config2, logger }) => {
1110
+ logger?.log("ChainService: Initializing...");
1111
+ const result = init({
1112
+ config: config2,
1113
+ name: "ChainService",
1114
+ account
1115
+ });
1116
+ logger?.log("ChainService: Initialized");
1117
+ return result;
1118
+ }, "initChainService");
1119
+ var initMemoryChainService = /* @__PURE__ */ __name(async ({ config: config2 }) => {
1120
+ const result = await MemoryChainService.create({
1121
+ config: config2,
1122
+ name: "MemoryChainService"
1123
+ });
1124
+ assertEx16(await result.start(), () => "Failed to start MemoryChainService");
1125
+ return result;
1126
+ }, "initMemoryChainService");
1127
+ var init = /* @__PURE__ */ __name(async (params) => {
1066
1128
  if (chainStakeServiceSingleton2) return chainStakeServiceSingleton2;
1067
1129
  const { config: config2 } = params;
1068
- chainStakeServiceSingleton2 = canUseEvmContractChainService(config2) ? initEvmContractChainService({
1130
+ chainStakeServiceSingleton2 = canUseEvmContractChainService(config2) ? await initEvmContractChainService({
1069
1131
  ...params,
1070
1132
  name: "ChainStakeService"
1071
- }) : MemoryChainService.create({
1072
- ...params,
1073
- name: "ChainStakeService"
1074
- });
1133
+ }) : await initMemoryChainService(params);
1075
1134
  return chainStakeServiceSingleton2;
1076
1135
  }, "init");
1077
1136
 
1078
1137
  // src/orchestration/services/implementation/head/head.ts
1079
- import { assertEx as assertEx16, isDefined as isDefined13 } from "@xylabs/sdk-js";
1138
+ import { assertEx as assertEx17, isDefined as isDefined13 } from "@xylabs/sdk-js";
1080
1139
  import { findMostRecentBlock as findMostRecentBlock2 } from "@xyo-network/chain-protocol";
1081
1140
 
1082
1141
  // src/orchestration/services/implementation/head/createBootstrapHead.ts
@@ -1297,13 +1356,13 @@ var initHead = /* @__PURE__ */ __name(async (params) => {
1297
1356
  if (isDefined13(forkFromBlock)) {
1298
1357
  const chain = await createForkedHead(forkFromBlock, account, chainService);
1299
1358
  await submitNewChain(chain, chainArchivist, chainSubmissionsArchivistWrite);
1300
- const newBlock = assertEx16(chain.at(-1), () => new Error("Failed to get new head after forking"));
1359
+ const newBlock = assertEx17(chain.at(-1), () => new Error("Failed to get new head after forking"));
1301
1360
  head = newBlock[0];
1302
1361
  }
1303
1362
  } else {
1304
1363
  const chain = await createBootstrapHead(account, chainService);
1305
1364
  await submitNewChain(chain, chainArchivist, chainSubmissionsArchivistWrite);
1306
- const newBlock = assertEx16(chain.at(-1), () => new Error("Failed to get new head after genesis"));
1365
+ const newBlock = assertEx17(chain.at(-1), () => new Error("Failed to get new head after genesis"));
1307
1366
  head = newBlock[0];
1308
1367
  }
1309
1368
  headSingleton = head;
@@ -1312,105 +1371,131 @@ var initHead = /* @__PURE__ */ __name(async (params) => {
1312
1371
 
1313
1372
  // src/orchestration/services/implementation/iterator.ts
1314
1373
  import { BaseElectionService, ChainBlockNumberIterationService, XyoStakeIntentService } from "@xyo-network/chain-services";
1374
+ import { timeBudget as timeBudget9 } from "@xyo-network/xl1-protocol-sdk";
1315
1375
  var chainIteratorServiceSingleton;
1316
1376
  var stakeIntentServiceSingleton;
1317
1377
  var electionServiceSingleton;
1318
1378
  var initChainIterator = /* @__PURE__ */ __name((params) => {
1319
1379
  if (chainIteratorServiceSingleton) return chainIteratorServiceSingleton;
1320
- chainIteratorServiceSingleton = ChainBlockNumberIterationService.create(params);
1321
- return chainIteratorServiceSingleton;
1380
+ return timeBudget9("initChainIterator", params.logger, () => {
1381
+ chainIteratorServiceSingleton = ChainBlockNumberIterationService.create(params);
1382
+ return chainIteratorServiceSingleton;
1383
+ }, 2e3, true);
1322
1384
  }, "initChainIterator");
1323
1385
  var initStakeIntentService = /* @__PURE__ */ __name((params) => {
1324
1386
  if (stakeIntentServiceSingleton) return stakeIntentServiceSingleton;
1325
- stakeIntentServiceSingleton = XyoStakeIntentService.create(params);
1326
- return stakeIntentServiceSingleton;
1387
+ return timeBudget9("initStakeIntentService", params.logger, () => {
1388
+ stakeIntentServiceSingleton = XyoStakeIntentService.create(params);
1389
+ return stakeIntentServiceSingleton;
1390
+ }, 2e3, true);
1327
1391
  }, "initStakeIntentService");
1328
1392
  var initElectionService = /* @__PURE__ */ __name((params) => {
1329
1393
  if (electionServiceSingleton) return electionServiceSingleton;
1330
- electionServiceSingleton = BaseElectionService.create(params);
1331
- return electionServiceSingleton;
1394
+ return timeBudget9("initElectionService", params.logger, () => {
1395
+ electionServiceSingleton = BaseElectionService.create(params);
1396
+ return electionServiceSingleton;
1397
+ }, 2e3, true);
1332
1398
  }, "initElectionService");
1333
1399
 
1334
1400
  // src/orchestration/services/implementation/pendingTransactions.ts
1335
1401
  import { BasePendingTransactionsService } from "@xyo-network/chain-services";
1402
+ import { timeBudget as timeBudget10 } from "@xyo-network/xl1-protocol-sdk";
1336
1403
  var serviceSingleton;
1337
1404
  var initPendingTransactions = /* @__PURE__ */ __name(async (params) => {
1338
1405
  if (serviceSingleton) return serviceSingleton;
1339
- serviceSingleton = await BasePendingTransactionsService.create(params);
1340
- return serviceSingleton;
1406
+ return await timeBudget10("initPendingTransactions", params.logger, async () => {
1407
+ serviceSingleton = await BasePendingTransactionsService.create(params);
1408
+ return serviceSingleton;
1409
+ }, 2e3, true);
1341
1410
  }, "initPendingTransactions");
1342
1411
 
1343
1412
  // src/orchestration/services/implementation/producer.ts
1344
1413
  import { BaseBlockProducerService as BaseBlockProducerService2 } from "@xyo-network/chain-services";
1414
+ import { timeBudget as timeBudget11 } from "@xyo-network/xl1-protocol-sdk";
1345
1415
  var serviceSingleton2;
1346
1416
  var initBlockProducer = /* @__PURE__ */ __name(async (params) => {
1347
1417
  if (serviceSingleton2) return serviceSingleton2;
1348
- serviceSingleton2 = await BaseBlockProducerService2.create(params);
1349
- return serviceSingleton2;
1418
+ return await timeBudget11("initBlockProducer", params.logger, async () => {
1419
+ serviceSingleton2 = await BaseBlockProducerService2.create(params);
1420
+ return serviceSingleton2;
1421
+ }, 2e3, true);
1350
1422
  }, "initBlockProducer");
1351
1423
 
1352
1424
  // src/orchestration/services/implementation/reward.ts
1353
- import { assertEx as assertEx17 } from "@xylabs/sdk-js";
1425
+ import { assertEx as assertEx18 } from "@xylabs/sdk-js";
1354
1426
  import { EvmBlockRewardService, MemoryBlockRewardService } from "@xyo-network/chain-services";
1427
+ import { timeBudget as timeBudget12 } from "@xyo-network/xl1-protocol-sdk";
1355
1428
  var rewardServiceSingleton;
1356
1429
  var initBlockRewardService = /* @__PURE__ */ __name((params) => {
1357
1430
  if (rewardServiceSingleton) return rewardServiceSingleton;
1358
- const { config: config2 } = params;
1359
- rewardServiceSingleton = canUseEvmBlockRewardService({
1360
- config: config2
1361
- }) ? initEvmBlockRewardService(params) : initXyoBlockRewardService(params);
1362
- return rewardServiceSingleton;
1431
+ return timeBudget12("initBlockRewardService", params.logger, () => {
1432
+ const { config: config2 } = params;
1433
+ rewardServiceSingleton = canUseEvmBlockRewardService({
1434
+ config: config2
1435
+ }) ? initEvmBlockRewardService(params) : initXyoBlockRewardService(params);
1436
+ return rewardServiceSingleton;
1437
+ }, 2e3, true);
1363
1438
  }, "initBlockRewardService");
1364
1439
  var initXyoBlockRewardService = /* @__PURE__ */ __name((params) => {
1365
1440
  if (rewardServiceSingleton) return rewardServiceSingleton;
1366
- rewardServiceSingleton = MemoryBlockRewardService.create(params);
1367
- return rewardServiceSingleton;
1441
+ return timeBudget12("initXyoBlockRewardService", params.logger, () => {
1442
+ rewardServiceSingleton = MemoryBlockRewardService.create(params);
1443
+ return rewardServiceSingleton;
1444
+ }, 2e3, true);
1368
1445
  }, "initXyoBlockRewardService");
1369
1446
  var canUseEvmBlockRewardService = /* @__PURE__ */ __name((params) => canUseEvmProvider({
1370
1447
  config: params.config
1371
1448
  }), "canUseEvmBlockRewardService");
1372
1449
  var initEvmBlockRewardService = /* @__PURE__ */ __name(async (params) => {
1373
1450
  if (rewardServiceSingleton) return rewardServiceSingleton;
1374
- const { account: paramsAccount } = params;
1375
- const account = assertEx17(paramsAccount, () => "Account is required");
1376
- const provider2 = assertEx17(await initEvmProvider(params));
1377
- const evmBlockRewardServiceParams = {
1378
- ...params,
1379
- provider: provider2,
1380
- account
1381
- };
1382
- rewardServiceSingleton = EvmBlockRewardService.create(evmBlockRewardServiceParams);
1383
- return rewardServiceSingleton;
1451
+ return await timeBudget12("initEvmBlockRewardService", params.logger, async () => {
1452
+ const { account: paramsAccount } = params;
1453
+ const account = assertEx18(paramsAccount, () => "Account is required");
1454
+ const provider2 = assertEx18(await initEvmProvider(params));
1455
+ const evmBlockRewardServiceParams = {
1456
+ ...params,
1457
+ provider: provider2,
1458
+ account
1459
+ };
1460
+ rewardServiceSingleton = EvmBlockRewardService.create(evmBlockRewardServiceParams);
1461
+ return rewardServiceSingleton;
1462
+ }, 2e3, true);
1384
1463
  }, "initEvmBlockRewardService");
1385
1464
 
1386
1465
  // src/orchestration/services/implementation/time.ts
1387
1466
  import { BaseTimeSyncService } from "@xyo-network/chain-services";
1467
+ import { timeBudget as timeBudget13 } from "@xyo-network/xl1-protocol-sdk";
1388
1468
  var timeSyncServiceSingleton;
1389
1469
  var initTimeService = /* @__PURE__ */ __name(async ({ chainArchivist, chainIterator, config: config2, logger, meterProvider, traceProvider }) => {
1390
1470
  if (timeSyncServiceSingleton) return timeSyncServiceSingleton;
1391
- const ethProvider = canUseEvmProvider({
1392
- config: config2
1393
- }) ? await initEvmProvider({
1394
- config: config2
1395
- }) : void 0;
1396
- timeSyncServiceSingleton = BaseTimeSyncService.create({
1397
- chainArchivist,
1398
- chainIterator,
1399
- ethProvider,
1400
- logger,
1401
- meterProvider,
1402
- traceProvider
1403
- });
1404
- return await timeSyncServiceSingleton;
1471
+ return await timeBudget13("initTimeService", logger, async () => {
1472
+ const ethProvider = canUseEvmProvider({
1473
+ config: config2
1474
+ }) ? await initEvmProvider({
1475
+ config: config2
1476
+ }) : void 0;
1477
+ timeSyncServiceSingleton = BaseTimeSyncService.create({
1478
+ chainArchivist,
1479
+ chainIterator,
1480
+ ethProvider,
1481
+ logger,
1482
+ meterProvider,
1483
+ traceProvider
1484
+ });
1485
+ return await timeSyncServiceSingleton;
1486
+ }, 2e3, true);
1405
1487
  }, "initTimeService");
1406
1488
 
1407
1489
  // src/orchestration/services/implementation/transfer.ts
1408
1490
  import { BaseAccountTransfersService } from "@xyo-network/chain-services";
1491
+ import { timeBudget as timeBudget14 } from "@xyo-network/xl1-protocol-sdk";
1409
1492
  var transferServiceSingleton;
1410
1493
  var initTransferService = /* @__PURE__ */ __name(async (params) => {
1411
1494
  if (transferServiceSingleton) return transferServiceSingleton;
1412
- transferServiceSingleton = await BaseAccountTransfersService.create(params);
1413
- return transferServiceSingleton;
1495
+ return await timeBudget14("initTransferService", params.logger, async () => {
1496
+ transferServiceSingleton = await BaseAccountTransfersService.create(params);
1497
+ return transferServiceSingleton;
1498
+ }, 2e3, true);
1414
1499
  }, "initTransferService");
1415
1500
 
1416
1501
  // src/orchestration/services/implementation/validator.ts
@@ -1513,7 +1598,8 @@ var RuntimeStatusMonitor = class extends LoggerStatusReporter {
1513
1598
 
1514
1599
  // src/orchestration/initServices.ts
1515
1600
  var isStartable = /* @__PURE__ */ __name((value) => {
1516
- return isDefined14(value.start) && typeof value.start === "function";
1601
+ const possibleStartable = value;
1602
+ return isDefined14(possibleStartable.start) && typeof possibleStartable.start === "function" && possibleStartable.status === "created";
1517
1603
  }, "isStartable");
1518
1604
  var initServices = /* @__PURE__ */ __name(async (context) => {
1519
1605
  const { config: config2, logger } = context;
@@ -1694,7 +1780,7 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
1694
1780
  validateHydratedBlockState,
1695
1781
  ...initParams
1696
1782
  };
1697
- const rewardAddress = isDefined14(config2.producer.rewardAddress) ? assertEx18(asAddress2(config2.producer.rewardAddress), () => "Invalid block reward address provided") : account.address;
1783
+ const rewardAddress = isDefined14(config2.producer.rewardAddress) ? assertEx19(asAddress2(config2.producer.rewardAddress), () => "Invalid block reward address provided") : account.address;
1698
1784
  const producerParams = {
1699
1785
  ...validatorParams,
1700
1786
  name: "Producer",
@@ -1729,7 +1815,7 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
1729
1815
  balanceSummaryMap,
1730
1816
  ...Object.values(result)
1731
1817
  ].filter(isStartable);
1732
- assertEx18((await Promise.all(startableServices.map((service) => service.start()))).every(Boolean), () => "One or more services failed to start");
1818
+ assertEx19((await Promise.all(startableServices.map((service) => service.start()))).every(Boolean), () => "One or more services failed to start");
1733
1819
  logger?.log("All services started successfully.");
1734
1820
  return result;
1735
1821
  }, "initServices");
@@ -1897,7 +1983,7 @@ var waitForHostPort = /* @__PURE__ */ __name((host, port) => {
1897
1983
 
1898
1984
  // src/runCLI.ts
1899
1985
  var configuration;
1900
- var version = isDefined17("1.16.20") ? "1.16.20" : "unknown";
1986
+ var version = isDefined17("1.16.22") ? "1.16.22" : "unknown";
1901
1987
  var getContextFromConfig = /* @__PURE__ */ __name((configuration2) => {
1902
1988
  const logger = initLogger(configuration2);
1903
1989
  const orchestrator = new Orchestrator(logger);
@@ -2039,6 +2125,7 @@ export {
2039
2125
  initEvmProvider,
2040
2126
  initHead,
2041
2127
  initHealthEndpoints,
2128
+ initMemoryChainService,
2042
2129
  initPendingTransactions,
2043
2130
  initServices,
2044
2131
  initStakeIntentService,