@xyo-network/xl1-cli-lib 1.16.26 → 1.17.0

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 (52) hide show
  1. package/dist/node/commands/producer/runProducer.d.ts +1 -1
  2. package/dist/node/commands/producer/runProducer.d.ts.map +1 -1
  3. package/dist/node/commands/validator/runValidator.d.ts.map +1 -1
  4. package/dist/node/index.mjs +345 -509
  5. package/dist/node/index.mjs.map +1 -1
  6. package/dist/node/orchestration/actor/implementation/BalanceActor.d.ts +2 -2
  7. package/dist/node/orchestration/actor/implementation/BalanceActor.d.ts.map +1 -1
  8. package/dist/node/orchestration/actor/implementation/ProducerActor.d.ts +2 -2
  9. package/dist/node/orchestration/actor/implementation/ProducerActor.d.ts.map +1 -1
  10. package/dist/node/orchestration/actor/implementation/ValidatorActor.d.ts +2 -2
  11. package/dist/node/orchestration/actor/implementation/ValidatorActor.d.ts.map +1 -1
  12. package/dist/node/orchestration/actor/implementation/index.d.ts +0 -1
  13. package/dist/node/orchestration/actor/implementation/index.d.ts.map +1 -1
  14. package/dist/node/orchestration/initServices.d.ts.map +1 -1
  15. package/dist/node/orchestration/services/implementation/accountBalance.d.ts +0 -2
  16. package/dist/node/orchestration/services/implementation/accountBalance.d.ts.map +1 -1
  17. package/dist/node/orchestration/services/implementation/blockViewer.d.ts +7 -0
  18. package/dist/node/orchestration/services/implementation/blockViewer.d.ts.map +1 -0
  19. package/dist/node/orchestration/services/implementation/head/createForkedHead/config/getBridgeSourceDetails.d.ts +3 -3
  20. package/dist/node/orchestration/services/implementation/head/createForkedHead/config/getBridgeSourceDetails.d.ts.map +1 -1
  21. package/dist/node/orchestration/services/implementation/head/head.d.ts +1 -1
  22. package/dist/node/orchestration/services/implementation/head/head.d.ts.map +1 -1
  23. package/dist/node/orchestration/services/implementation/index.d.ts +1 -0
  24. package/dist/node/orchestration/services/implementation/index.d.ts.map +1 -1
  25. package/dist/node/orchestration/services/implementation/pendingTransactions.d.ts +7 -3
  26. package/dist/node/orchestration/services/implementation/pendingTransactions.d.ts.map +1 -1
  27. package/dist/node/xl1.mjs +295 -704
  28. package/dist/node/xl1.mjs.map +1 -1
  29. package/package.json +18 -16
  30. package/src/commands/producer/runProducer.ts +7 -5
  31. package/src/commands/validator/runValidator.ts +2 -3
  32. package/src/orchestration/actor/implementation/BalanceActor.ts +4 -7
  33. package/src/orchestration/actor/implementation/ProducerActor.ts +6 -6
  34. package/src/orchestration/actor/implementation/ValidatorActor.ts +4 -4
  35. package/src/orchestration/actor/implementation/index.ts +0 -1
  36. package/src/orchestration/initServices.ts +30 -101
  37. package/src/orchestration/services/implementation/accountBalance.ts +10 -17
  38. package/src/orchestration/services/implementation/blockViewer.ts +29 -0
  39. package/src/orchestration/services/implementation/head/createBootstrapHead.ts +1 -1
  40. package/src/orchestration/services/implementation/head/createForkedHead/config/getBridgeSourceDetails.ts +5 -5
  41. package/src/orchestration/services/implementation/head/createForkedHead/getBridgeDestinationObservation.ts +1 -1
  42. package/src/orchestration/services/implementation/head/createForkedHead/getBridgeIntent.ts +1 -1
  43. package/src/orchestration/services/implementation/head/createForkedHead/getBridgeSourceObservation.ts +1 -1
  44. package/src/orchestration/services/implementation/head/createForkedHead/getFirstBlockForNewChain.ts +1 -1
  45. package/src/orchestration/services/implementation/head/getForkFromBlock.ts +1 -1
  46. package/src/orchestration/services/implementation/head/head.ts +1 -2
  47. package/src/orchestration/services/implementation/index.ts +1 -0
  48. package/src/orchestration/services/implementation/pendingTransactions.ts +28 -9
  49. package/src/orchestration/services/implementation/time.ts +2 -2
  50. package/dist/node/orchestration/actor/implementation/ChainHeadUpdateActor.d.ts +0 -20
  51. package/dist/node/orchestration/actor/implementation/ChainHeadUpdateActor.d.ts.map +0 -1
  52. package/src/orchestration/actor/implementation/ChainHeadUpdateActor.ts +0 -72
package/dist/node/xl1.mjs CHANGED
@@ -5,7 +5,7 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
5
5
  import { config } from "dotenv";
6
6
 
7
7
  // src/runCLI.ts
8
- import { deepMerge, isDefined as isDefined16 } from "@xylabs/sdk-js";
8
+ import { deepMerge, isDefined as isDefined18 } from "@xylabs/sdk-js";
9
9
  import { ConfigZod } from "@xyo-network/xl1-protocol-sdk";
10
10
  import yargs from "yargs";
11
11
  import { hideBin } from "yargs/helpers";
@@ -32,9 +32,11 @@ function runMempool(context) {
32
32
  }
33
33
  __name(runMempool, "runMempool");
34
34
 
35
+ // src/commands/producer/runProducer.ts
36
+ import { exists, isDefined as isDefined15 } from "@xylabs/sdk-js";
37
+
35
38
  // src/orchestration/actor/implementation/BalanceActor.ts
36
39
  import { assertEx } from "@xylabs/sdk-js";
37
- import { PayloadBuilder } from "@xyo-network/payload-builder";
38
40
  import { Mutex } from "async-mutex";
39
41
 
40
42
  // src/orchestration/actor/model/Actor.ts
@@ -229,17 +231,14 @@ var BalanceActor = class _BalanceActor extends Actor {
229
231
  get balanceService() {
230
232
  return assertEx(this.params.balance, () => "balanceService not set");
231
233
  }
232
- get chainIterator() {
233
- return assertEx(this.params.chainIterator, () => "chainIterator not set");
234
+ get blockViewer() {
235
+ return assertEx(this.params.blockViewer, () => "blockViewer not set");
234
236
  }
235
237
  static create(params) {
236
238
  return new _BalanceActor(params);
237
239
  }
238
240
  async start() {
239
241
  await super.start();
240
- this.chainIterator.on("headUpdate", async () => {
241
- await this.updateBalance();
242
- });
243
242
  this.registerTimer(
244
243
  "BalanceTimer",
245
244
  async () => {
@@ -253,84 +252,21 @@ var BalanceActor = class _BalanceActor extends Actor {
253
252
  async updateBalance() {
254
253
  if (this._updateMutex.isLocked()) return;
255
254
  await this._updateMutex.runExclusive(async () => {
256
- const head = await PayloadBuilder.hash(await this.chainIterator.head());
255
+ const head = await this.blockViewer.currentBlockHash();
257
256
  await this.balanceService.accountsBalances([], head);
258
257
  });
259
258
  }
260
259
  };
261
260
 
262
- // src/orchestration/actor/implementation/ChainHeadUpdateActor.ts
263
- import { assertEx as assertEx2, toHex } from "@xylabs/sdk-js";
264
- import { findMostRecentBlock, sortBlocks } from "@xyo-network/chain-protocol";
265
- import { isBlockBoundWitness } from "@xyo-network/xl1-protocol";
266
- import { Mutex as Mutex2 } from "async-mutex";
267
- var ChainHeadUpdateActor = class _ChainHeadUpdateActor extends Actor {
268
- static {
269
- __name(this, "ChainHeadUpdateActor");
270
- }
271
- _pollForNewHeadMutex = new Mutex2();
272
- constructor(params) {
273
- super("ChainHeadUpdate", "ChainHeadUpdate", params);
274
- }
275
- get chainFinalizedArchivist() {
276
- return assertEx2(this.params.chainArchivist, () => "ChainArchivist not set");
277
- }
278
- get chainIterator() {
279
- return assertEx2(this.params.chainIterator, () => "chainIterator not set");
280
- }
281
- static create(params) {
282
- return new _ChainHeadUpdateActor(params);
283
- }
284
- async start() {
285
- await super.start();
286
- this.chainFinalizedArchivist.on("inserted", async (data) => {
287
- await this.checkInsertedForNewHead(data);
288
- });
289
- this.registerTimer(
290
- "ChainHeadUpdateTimer",
291
- async () => await this.pollForNewHead(),
292
- 0,
293
- 2500
294
- /* 250 */
295
- );
296
- }
297
- async checkInsertedForNewHead(data) {
298
- const candidateBlock = sortBlocks(data.payloads.filter(isBlockBoundWitness)).at(-1);
299
- await this.updateHeadIfNewer(candidateBlock);
300
- }
301
- async pollForNewHead() {
302
- if (this._pollForNewHeadMutex.isLocked()) {
303
- this.logger?.log("Skipping poll for new head, previous poll still in progress");
304
- return;
305
- }
306
- await this._pollForNewHeadMutex.runExclusive(async () => {
307
- const candidateBlock = await findMostRecentBlock(this.chainFinalizedArchivist);
308
- await this.updateHeadIfNewer(candidateBlock);
309
- });
310
- }
311
- async updateHeadIfNewer(candidateBlock) {
312
- if (!candidateBlock) return;
313
- const currentHead = await this.chainIterator.head();
314
- const candidateBlockNumber = candidateBlock.block;
315
- const candidateBlockNumberDisplay = `0x${toHex(candidateBlockNumber)}`;
316
- const currentBlockNumber = currentHead?.block ?? -1;
317
- if (candidateBlockNumber > currentBlockNumber) {
318
- this.logger?.log("Found more recent head:", candidateBlockNumber, candidateBlockNumberDisplay);
319
- await this.chainIterator.updateHead(candidateBlock);
320
- this.logger?.log("Updated head:", candidateBlockNumber, candidateBlockNumberDisplay);
321
- }
322
- }
323
- };
324
-
325
261
  // src/orchestration/actor/implementation/ProducerActor.ts
326
- import { assertEx as assertEx3, isDefined, isUndefined, toHex as toHex2 } from "@xylabs/sdk-js";
262
+ import { assertEx as assertEx2, isDefined, isUndefined, toHex } from "@xylabs/sdk-js";
327
263
  import { createDeclarationIntent } from "@xyo-network/chain-protocol";
328
264
  import { BaseBlockProducerService } from "@xyo-network/chain-services";
329
- import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
265
+ import { PayloadBuilder } from "@xyo-network/payload-builder";
330
266
  import { PayloadBundleSchema } from "@xyo-network/payload-model";
331
267
  import { asXL1BlockNumber } from "@xyo-network/xl1-protocol";
332
268
  import { buildTransaction, flattenHydratedBlock, flattenHydratedTransaction } from "@xyo-network/xl1-protocol-sdk";
333
- import { Mutex as Mutex3 } from "async-mutex";
269
+ import { Mutex as Mutex2 } from "async-mutex";
334
270
  var SHOULD_REGISTER_REDECLARATION_INTENT_TIMER = true;
335
271
  var TEN_MINUTES = 10 * 60 * 1e3;
336
272
  var ProducerActor = class _ProducerActor extends Actor {
@@ -344,7 +280,7 @@ var ProducerActor = class _ProducerActor extends Actor {
344
280
  _producerActorBlockProductionChecks;
345
281
  _producerActorBlocksProduced;
346
282
  _producerActorBlocksPublished;
347
- _produceBlockMutex = new Mutex3();
283
+ _produceBlockMutex = new Mutex2();
348
284
  constructor(params) {
349
285
  super(params.producer.address, "Producer", params);
350
286
  this._metricAttributes = {
@@ -364,28 +300,28 @@ var ProducerActor = class _ProducerActor extends Actor {
364
300
  });
365
301
  }
366
302
  get account() {
367
- return assertEx3(this.params.account, () => "account not set");
303
+ return assertEx2(this.params.account, () => "account not set");
368
304
  }
369
305
  get balanceService() {
370
- return assertEx3(this.params.balance, () => "balanceService not set");
306
+ return assertEx2(this.params.balance, () => "balanceService not set");
371
307
  }
372
- get chainIterator() {
373
- return assertEx3(this.params.chainIterator, () => "chainIterator not set");
308
+ get blockViewer() {
309
+ return assertEx2(this.params.blockViewer, () => "blockViewer not set");
374
310
  }
375
311
  get chainStakeViewer() {
376
- return assertEx3(this.params.chainStakeViewer, () => "chainStakeViewer not set");
312
+ return assertEx2(this.params.chainStakeViewer, () => "chainStakeViewer not set");
377
313
  }
378
314
  get chainSubmissionsArchivistWrite() {
379
- return assertEx3(this.params.chainSubmissionsArchivistWrite, () => "chainSubmissionsArchivistWrite not set");
315
+ return assertEx2(this.params.chainSubmissionsArchivistWrite, () => "chainSubmissionsArchivistWrite not set");
380
316
  }
381
317
  get pendingBundledTransactionsArchivistWrite() {
382
- return assertEx3(this.params.pendingBundledTransactionsArchivistWrite, () => "pendingBundledTransactionsArchivistWrite not set");
318
+ return assertEx2(this.params.pendingBundledTransactionsArchivistWrite, () => "pendingBundledTransactionsArchivistWrite not set");
383
319
  }
384
320
  get producer() {
385
- return assertEx3(this.params.producer, () => "producer not set");
321
+ return assertEx2(this.params.producer, () => "producer not set");
386
322
  }
387
323
  get stakeIntentService() {
388
- return assertEx3(this.params.stakeIntent, () => "stakeIntentService not set");
324
+ return assertEx2(this.params.stakeIntent, () => "stakeIntentService not set");
389
325
  }
390
326
  static create(params) {
391
327
  return new _ProducerActor(params);
@@ -426,12 +362,12 @@ var ProducerActor = class _ProducerActor extends Actor {
426
362
  }
427
363
  await this._produceBlockMutex.runExclusive(async () => {
428
364
  const headStart = Date.now();
429
- const head = await this.chainIterator.head();
365
+ const head = (await this.blockViewer.currentBlock())[0];
430
366
  const headDuration = Date.now() - headStart;
431
- if (headDuration > 500) this.logger?.warn(`[Slow] Fetched head in ${headDuration}ms: 0x${toHex2(head._hash)}`);
367
+ if (headDuration > 500) this.logger?.warn(`[Slow] Fetched head in ${headDuration}ms: 0x${toHex(head._hash)}`);
432
368
  const headHash = head._hash;
433
369
  if (this._lastProducedBlock && this._lastProducedBlock[0].previous === headHash) {
434
- this.logger?.log("Block already produced:", `0x${toHex2(this._lastProducedBlock[0].block)}`, this._lastProducedBlock[0].block);
370
+ this.logger?.log("Block already produced:", `0x${toHex(this._lastProducedBlock[0].block)}`, this._lastProducedBlock[0].block);
435
371
  } else {
436
372
  this._producerActorBlockProductionAttempts?.add(1, this._metricAttributes);
437
373
  const nextStart = Date.now();
@@ -439,7 +375,7 @@ var ProducerActor = class _ProducerActor extends Actor {
439
375
  const nextDuration = Date.now() - nextStart;
440
376
  if (nextDuration > 1e3) this.logger?.warn(`[Slow] Generated next block in ${nextDuration}ms, block: ${nextBlock?.[0]._hash}`);
441
377
  if (nextBlock) {
442
- const displayBlockNumber = `0x${toHex2(nextBlock[0].block)}`;
378
+ const displayBlockNumber = `0x${toHex(nextBlock[0].block)}`;
443
379
  this.logger?.log("Produced block:", displayBlockNumber);
444
380
  this._producerActorBlocksProduced?.add(1, this._metricAttributes);
445
381
  await this.chainSubmissionsArchivistWrite.insert(flattenHydratedBlock(nextBlock));
@@ -454,7 +390,7 @@ var ProducerActor = class _ProducerActor extends Actor {
454
390
  async redeclareIntent() {
455
391
  await this.spanAsync("redeclareIntent", async () => {
456
392
  if (this.params.config.producer.disableIntentRedeclaration) return;
457
- const head = await this.chainIterator.head();
393
+ const head = (await this.blockViewer.currentBlock())[0];
458
394
  if (isUndefined(head)) return;
459
395
  const currentBlock = head.block;
460
396
  const blocksUntilExpiration = await this.calculateBlocksUntilProducerDeclarationExpiration(currentBlock);
@@ -482,12 +418,12 @@ var ProducerActor = class _ProducerActor extends Actor {
482
418
  }
483
419
  async submitRedeclarationIntent(currentBlock, redeclarationIntent) {
484
420
  this.logger?.log("Submitting redeclaration intent for producer:", this.account.address);
485
- const tx = await buildTransaction(this.chainIterator.chainId, [
421
+ const tx = await buildTransaction(await this.chainStakeViewer.chainId(), [
486
422
  redeclarationIntent
487
423
  ], [], this.account, currentBlock, asXL1BlockNumber(currentBlock + 1e3, true));
488
424
  const payloads = flattenHydratedTransaction(tx);
489
425
  const root = tx[0]._hash;
490
- const payloadBundle = new PayloadBuilder2({
426
+ const payloadBundle = new PayloadBuilder({
491
427
  schema: PayloadBundleSchema
492
428
  }).fields({
493
429
  payloads,
@@ -581,25 +517,12 @@ var initHealthEndpoints = /* @__PURE__ */ __name((params) => {
581
517
  }, "initHealthEndpoints");
582
518
 
583
519
  // src/orchestration/initServices.ts
584
- import { asAddress as asAddress2, assertEx as assertEx18, isDefined as isDefined13 } from "@xylabs/sdk-js";
585
- import { initChainIterator, initElectionService, initProducerAccount, initStakeIntentService } from "@xyo-network/chain-orchestration";
586
- import { blockViewerFromChainIteratorAndArchivist } from "@xyo-network/chain-services";
520
+ import { asAddress as asAddress2, assertEx as assertEx15, isDefined as isDefined14 } from "@xylabs/sdk-js";
521
+ import { initElectionService, initProducerAccount, initStakeIntentService } from "@xyo-network/chain-orchestration";
587
522
  import { initTelemetry } from "@xyo-network/chain-telemetry";
588
- import { startupSpanAsync as startupSpanAsync8 } from "@xyo-network/chain-utils";
523
+ import { startupSpanAsync as startupSpanAsync7 } from "@xyo-network/chain-utils";
589
524
  import { validateHydratedBlockState } from "@xyo-network/chain-validation";
590
- import { StepSizes } from "@xyo-network/xl1-protocol";
591
- import { readPayloadMapFromStore } from "@xyo-network/xl1-protocol-sdk";
592
525
  import { CompletedStepRewardAddressValidatorFactory, DerivedReceiveAddressValidatorFactory, SelfSignerValidator, TransactionTransfersValidatorFactory } from "@xyo-network/xl1-validation";
593
- import { Semaphore as Semaphore2 } from "async-mutex";
594
-
595
- // src/orchestration/archivists/ChainFinalized/archivist.ts
596
- import { initArchivistSync } from "@xyo-network/chain-orchestration";
597
- import { startupSpanAsync } from "@xyo-network/chain-utils";
598
- import { timeBudget } from "@xyo-network/xl1-protocol-sdk";
599
- import { Mutex as Mutex6 } from "async-mutex";
600
-
601
- // src/orchestration/archivists/ChainFinalized/local.ts
602
- import { Mutex as Mutex4 } from "async-mutex";
603
526
 
604
527
  // src/orchestration/archivists/lib/localPersistentArchivist.ts
605
528
  import { rm } from "fs/promises";
@@ -626,120 +549,62 @@ var getLocalPersistentArchivist = /* @__PURE__ */ __name((name, dbName, storeNam
626
549
  }
627
550
  }, "getLocalPersistentArchivist");
628
551
 
629
- // src/orchestration/archivists/ChainFinalized/local.ts
630
- var mutex = new Mutex4();
631
- var singleton;
632
- var initLocalChainFinalizedArchivist = /* @__PURE__ */ __name(async ({ config: config2 }) => {
633
- return await mutex.runExclusive(async () => {
634
- if (singleton) return singleton;
635
- const { root } = config2.storage;
636
- singleton = await getLocalPersistentArchivist("local-finalized-chain", "chain", "finalized", root);
637
- return singleton;
638
- });
639
- }, "initLocalChainFinalizedArchivist");
640
-
641
- // src/orchestration/archivists/ChainFinalized/remote.ts
552
+ // src/orchestration/archivists/ChainSubmissions/archivist.ts
642
553
  import { assertEx as assertEx4 } from "@xylabs/sdk-js";
554
+ import { startupSpanAsync } from "@xyo-network/chain-utils";
555
+ import { timeBudget } from "@xyo-network/xl1-protocol-sdk";
556
+ import { Mutex as Mutex4 } from "async-mutex";
557
+
558
+ // src/orchestration/archivists/ChainSubmissions/remote.ts
559
+ import { assertEx as assertEx3 } from "@xylabs/sdk-js";
643
560
  import { initBridge, initBridgedArchivistModule } from "@xyo-network/chain-orchestration";
644
561
  import { getUrl } from "@xyo-network/xl1-protocol-sdk";
645
- import { Mutex as Mutex5 } from "async-mutex";
646
- var mutex2 = new Mutex5();
647
- var singleton2;
648
- var initRemoteChainFinalizedArchivist = /* @__PURE__ */ __name(async ({ config: config2 }) => {
649
- return await mutex2.runExclusive(async () => {
650
- if (singleton2) return singleton2;
562
+ import { Mutex as Mutex3 } from "async-mutex";
563
+ var mutex = new Mutex3();
564
+ var singleton;
565
+ var initRemoteChainSubmissionsArchivist = /* @__PURE__ */ __name(async ({ config: config2 }) => {
566
+ return await mutex.runExclusive(async () => {
567
+ if (singleton) return singleton;
651
568
  const { host, port } = config2.mempool.enabled ? config2.mempool : config2.api;
652
569
  const nodeUrl = getUrl(host, port);
653
570
  const bridge = await initBridge(nodeUrl);
654
- singleton2 = await initBridgedArchivistModule({
655
- bridge,
656
- moduleName: "XYOChain:Chain:Finalized"
657
- });
658
- return assertEx4(singleton2, () => "RemoteChainFinalizedArchivist failed to initialize");
659
- });
660
- }, "initRemoteChainFinalizedArchivist");
661
-
662
- // src/orchestration/archivists/ChainFinalized/archivist.ts
663
- var mutex3 = new Mutex6();
664
- var singleton3;
665
- async function initChainFinalizedArchivist({ config: config2, logger, traceProvider }) {
666
- return await mutex3.runExclusive(async () => {
667
- if (singleton3) return singleton3;
668
- return await timeBudget("initChainFinalizedArchivist", logger, async () => {
669
- const [remote, local] = await Promise.all([
670
- startupSpanAsync("ChainFinalizedArchivist:initRemote", () => initRemoteChainFinalizedArchivist({
671
- config: config2,
672
- logger
673
- })),
674
- startupSpanAsync("ChainFinalizedArchivist:initLocal", () => initLocalChainFinalizedArchivist({
675
- config: config2,
676
- logger
677
- }))
678
- ]);
679
- await startupSpanAsync("ChainFinalizedArchivist:initArchivistSync", () => initArchivistSync("ChainFinalizedArchivist", remote, local, 200, Number.MAX_SAFE_INTEGER, traceProvider));
680
- singleton3 = local;
681
- return singleton3;
682
- }, 2e3, true);
683
- });
684
- }
685
- __name(initChainFinalizedArchivist, "initChainFinalizedArchivist");
686
-
687
- // src/orchestration/archivists/ChainSubmissions/archivist.ts
688
- import { assertEx as assertEx6 } from "@xylabs/sdk-js";
689
- import { startupSpanAsync as startupSpanAsync2 } from "@xyo-network/chain-utils";
690
- import { timeBudget as timeBudget2 } from "@xyo-network/xl1-protocol-sdk";
691
- import { Mutex as Mutex8 } from "async-mutex";
692
-
693
- // src/orchestration/archivists/ChainSubmissions/remote.ts
694
- import { assertEx as assertEx5 } from "@xylabs/sdk-js";
695
- import { initBridge as initBridge2, initBridgedArchivistModule as initBridgedArchivistModule2 } from "@xyo-network/chain-orchestration";
696
- import { getUrl as getUrl2 } from "@xyo-network/xl1-protocol-sdk";
697
- import { Mutex as Mutex7 } from "async-mutex";
698
- var mutex4 = new Mutex7();
699
- var singleton4;
700
- var initRemoteChainSubmissionsArchivist = /* @__PURE__ */ __name(async ({ config: config2 }) => {
701
- return await mutex4.runExclusive(async () => {
702
- if (singleton4) return singleton4;
703
- const { host, port } = config2.mempool.enabled ? config2.mempool : config2.api;
704
- const nodeUrl = getUrl2(host, port);
705
- const bridge = await initBridge2(nodeUrl);
706
- singleton4 = await initBridgedArchivistModule2({
571
+ singleton = await initBridgedArchivistModule({
707
572
  bridge,
708
573
  moduleName: "XYOChain:Chain:Submissions"
709
574
  });
710
- return assertEx5(singleton4, () => new Error("Failed to initialize RemoteChainSubmissionsArchivist"));
575
+ return assertEx3(singleton, () => new Error("Failed to initialize RemoteChainSubmissionsArchivist"));
711
576
  });
712
577
  }, "initRemoteChainSubmissionsArchivist");
713
578
 
714
579
  // src/orchestration/archivists/ChainSubmissions/archivist.ts
715
- var mutex5 = new Mutex8();
716
- var singleton5;
580
+ var mutex2 = new Mutex4();
581
+ var singleton2;
717
582
  var initChainSubmissionsArchivist = /* @__PURE__ */ __name(async (params) => {
718
- return await mutex5.runExclusive(async () => {
719
- if (singleton5) return singleton5;
720
- return await timeBudget2("initChainSubmissionsArchivist", params.logger, async () => {
721
- const remote = await startupSpanAsync2("ChainSubmissionsArchivist:initRemote", () => initRemoteChainSubmissionsArchivist(params));
722
- singleton5 = remote;
723
- return assertEx6(singleton5, () => new Error("Failed to initialize ChainSubmissionsArchivist"));
583
+ return await mutex2.runExclusive(async () => {
584
+ if (singleton2) return singleton2;
585
+ return await timeBudget("initChainSubmissionsArchivist", params.logger, async () => {
586
+ const remote = await startupSpanAsync("ChainSubmissionsArchivist:initRemote", () => initRemoteChainSubmissionsArchivist(params));
587
+ singleton2 = remote;
588
+ return assertEx4(singleton2, () => new Error("Failed to initialize ChainSubmissionsArchivist"));
724
589
  }, 2e3, true);
725
590
  });
726
591
  }, "initChainSubmissionsArchivist");
727
592
 
728
593
  // src/orchestration/archivists/PendingTransactions/archivist.ts
729
- import { initArchivistSync as initArchivistSync2 } from "@xyo-network/chain-orchestration";
730
- import { startupSpanAsync as startupSpanAsync3 } from "@xyo-network/chain-utils";
731
- import { timeBudget as timeBudget3 } from "@xyo-network/xl1-protocol-sdk";
732
- import { Mutex as Mutex11 } from "async-mutex";
594
+ import { initArchivistSync } from "@xyo-network/chain-orchestration";
595
+ import { startupSpanAsync as startupSpanAsync2 } from "@xyo-network/chain-utils";
596
+ import { timeBudget as timeBudget2 } from "@xyo-network/xl1-protocol-sdk";
597
+ import { Mutex as Mutex7 } from "async-mutex";
733
598
 
734
599
  // src/orchestration/archivists/PendingTransactions/local.ts
735
600
  import { MemoryArchivist, MemoryArchivistConfigSchema } from "@xyo-network/archivist-memory";
736
- import { Mutex as Mutex9 } from "async-mutex";
737
- var mutex6 = new Mutex9();
738
- var singleton6;
601
+ import { Mutex as Mutex5 } from "async-mutex";
602
+ var mutex3 = new Mutex5();
603
+ var singleton3;
739
604
  var initLocalPendingTransactionsArchivist = /* @__PURE__ */ __name(async () => {
740
- return await mutex6.runExclusive(async () => {
741
- if (singleton6) return singleton6;
742
- singleton6 = await MemoryArchivist.create({
605
+ return await mutex3.runExclusive(async () => {
606
+ if (singleton3) return singleton3;
607
+ singleton3 = await MemoryArchivist.create({
743
608
  account: "random",
744
609
  config: {
745
610
  schema: MemoryArchivistConfigSchema,
@@ -747,43 +612,43 @@ var initLocalPendingTransactionsArchivist = /* @__PURE__ */ __name(async () => {
747
612
  name: "localPendingTransactions"
748
613
  }
749
614
  });
750
- return singleton6;
615
+ return singleton3;
751
616
  });
752
617
  }, "initLocalPendingTransactionsArchivist");
753
618
 
754
619
  // src/orchestration/archivists/PendingTransactions/remote.ts
755
- import { assertEx as assertEx7 } from "@xylabs/sdk-js";
756
- import { initBridge as initBridge3, initBridgedArchivistModule as initBridgedArchivistModule3 } from "@xyo-network/chain-orchestration";
757
- import { getUrl as getUrl3 } from "@xyo-network/xl1-protocol-sdk";
758
- import { Mutex as Mutex10 } from "async-mutex";
759
- var mutex7 = new Mutex10();
760
- var singleton7;
620
+ import { assertEx as assertEx5 } from "@xylabs/sdk-js";
621
+ import { initBridge as initBridge2, initBridgedArchivistModule as initBridgedArchivistModule2 } from "@xyo-network/chain-orchestration";
622
+ import { getUrl as getUrl2 } from "@xyo-network/xl1-protocol-sdk";
623
+ import { Mutex as Mutex6 } from "async-mutex";
624
+ var mutex4 = new Mutex6();
625
+ var singleton4;
761
626
  var initRemotePendingTransactionsArchivist = /* @__PURE__ */ __name(async ({ config: config2 }) => {
762
- return await mutex7.runExclusive(async () => {
763
- if (singleton7) return singleton7;
627
+ return await mutex4.runExclusive(async () => {
628
+ if (singleton4) return singleton4;
764
629
  const { host, port } = config2.mempool.enabled ? config2.mempool : config2.api;
765
- const nodeUrl = getUrl3(host, port);
766
- const bridge = await initBridge3(nodeUrl);
767
- singleton7 = await initBridgedArchivistModule3({
630
+ const nodeUrl = getUrl2(host, port);
631
+ const bridge = await initBridge2(nodeUrl);
632
+ singleton4 = await initBridgedArchivistModule2({
768
633
  bridge,
769
634
  moduleName: "XYOChain:Pending:PendingTransactions"
770
635
  });
771
- return assertEx7(singleton7, () => "RemotePendingBundledTransactionsArchivist is undefined");
636
+ return assertEx5(singleton4, () => "RemotePendingBundledTransactionsArchivist is undefined");
772
637
  });
773
638
  }, "initRemotePendingTransactionsArchivist");
774
639
 
775
640
  // src/orchestration/archivists/PendingTransactions/archivist.ts
776
- var mutex8 = new Mutex11();
777
- var singleton8;
641
+ var mutex5 = new Mutex7();
642
+ var singleton5;
778
643
  var initPendingBundledTransactionsArchivist = /* @__PURE__ */ __name(async ({ config: config2, logger }) => {
779
- return await mutex8.runExclusive(async () => {
780
- if (singleton8) return singleton8;
781
- return await timeBudget3("initPendingBundledTransactionsArchivist", logger, async () => {
782
- const remote = await startupSpanAsync3("PendingBundledTransactionsArchivist:initRemote", () => initRemotePendingTransactionsArchivist({
644
+ return await mutex5.runExclusive(async () => {
645
+ if (singleton5) return singleton5;
646
+ return await timeBudget2("initPendingBundledTransactionsArchivist", logger, async () => {
647
+ const remote = await startupSpanAsync2("PendingBundledTransactionsArchivist:initRemote", () => initRemotePendingTransactionsArchivist({
783
648
  config: config2,
784
649
  logger
785
650
  }));
786
- const local = await startupSpanAsync3("PendingBundledTransactionsArchivist:initLocal", () => initLocalPendingTransactionsArchivist({
651
+ const local = await startupSpanAsync2("PendingBundledTransactionsArchivist:initLocal", () => initLocalPendingTransactionsArchivist({
787
652
  config: config2,
788
653
  logger
789
654
  }));
@@ -792,30 +657,30 @@ var initPendingBundledTransactionsArchivist = /* @__PURE__ */ __name(async ({ co
792
657
  order: "desc"
793
658
  });
794
659
  await local.insert(start2);
795
- await startupSpanAsync3("PendingBundledTransactionsArchivist:initArchivistSync", () => initArchivistSync2("PendingBundledTransactionsArchivist", remote, local));
796
- singleton8 = [
660
+ await startupSpanAsync2("PendingBundledTransactionsArchivist:initArchivistSync", () => initArchivistSync("PendingBundledTransactionsArchivist", remote, local));
661
+ singleton5 = [
797
662
  local,
798
663
  remote
799
664
  ];
800
- return singleton8;
665
+ return singleton5;
801
666
  }, 2e3, true);
802
667
  });
803
668
  }, "initPendingBundledTransactionsArchivist");
804
669
 
805
670
  // src/orchestration/archivists/RejectedTransactions/archivist.ts
806
- import { startupSpanAsync as startupSpanAsync4 } from "@xyo-network/chain-utils";
807
- import { timeBudget as timeBudget4 } from "@xyo-network/xl1-protocol-sdk";
808
- import { Mutex as Mutex13 } from "async-mutex";
671
+ import { startupSpanAsync as startupSpanAsync3 } from "@xyo-network/chain-utils";
672
+ import { timeBudget as timeBudget3 } from "@xyo-network/xl1-protocol-sdk";
673
+ import { Mutex as Mutex9 } from "async-mutex";
809
674
 
810
675
  // src/orchestration/archivists/RejectedTransactions/local.ts
811
676
  import { MemoryArchivist as MemoryArchivist2, MemoryArchivistConfigSchema as MemoryArchivistConfigSchema2 } from "@xyo-network/archivist-memory";
812
- import { Mutex as Mutex12 } from "async-mutex";
813
- var mutex9 = new Mutex12();
814
- var singleton9;
677
+ import { Mutex as Mutex8 } from "async-mutex";
678
+ var mutex6 = new Mutex8();
679
+ var singleton6;
815
680
  var initLocalRejectedTransactionsArchivist = /* @__PURE__ */ __name(async () => {
816
- return await mutex9.runExclusive(async () => {
817
- if (singleton9) return singleton9;
818
- singleton9 = await MemoryArchivist2.create({
681
+ return await mutex6.runExclusive(async () => {
682
+ if (singleton6) return singleton6;
683
+ singleton6 = await MemoryArchivist2.create({
819
684
  account: "random",
820
685
  config: {
821
686
  schema: MemoryArchivistConfigSchema2,
@@ -823,90 +688,90 @@ var initLocalRejectedTransactionsArchivist = /* @__PURE__ */ __name(async () =>
823
688
  name: "localRejectedTransactions"
824
689
  }
825
690
  });
826
- return singleton9;
691
+ return singleton6;
827
692
  });
828
693
  }, "initLocalRejectedTransactionsArchivist");
829
694
 
830
695
  // src/orchestration/archivists/RejectedTransactions/archivist.ts
831
- var mutex10 = new Mutex13();
832
- var singleton10;
696
+ var mutex7 = new Mutex9();
697
+ var singleton7;
833
698
  async function initRejectedTransactionsArchivist(params) {
834
- return await mutex10.runExclusive(async () => {
835
- if (singleton10) return singleton10;
836
- return await timeBudget4("initRejectedTransactionsArchivist", params.logger, async () => {
837
- const local = await startupSpanAsync4("RejectedTransactionsArchivist:initLocal", () => initLocalRejectedTransactionsArchivist(params));
838
- singleton10 = local;
839
- return singleton10;
699
+ return await mutex7.runExclusive(async () => {
700
+ if (singleton7) return singleton7;
701
+ return await timeBudget3("initRejectedTransactionsArchivist", params.logger, async () => {
702
+ const local = await startupSpanAsync3("RejectedTransactionsArchivist:initLocal", () => initLocalRejectedTransactionsArchivist(params));
703
+ singleton7 = local;
704
+ return singleton7;
840
705
  }, 2e3, true);
841
706
  });
842
707
  }
843
708
  __name(initRejectedTransactionsArchivist, "initRejectedTransactionsArchivist");
844
709
 
845
710
  // src/orchestration/archivists/StakeIntentState/archivist.ts
846
- import { assertEx as assertEx9 } from "@xylabs/sdk-js";
847
- import { startupSpanAsync as startupSpanAsync5 } from "@xyo-network/chain-utils";
848
- import { timeBudget as timeBudget5 } from "@xyo-network/xl1-protocol-sdk";
849
- import { Mutex as Mutex15 } from "async-mutex";
711
+ import { assertEx as assertEx7 } from "@xylabs/sdk-js";
712
+ import { startupSpanAsync as startupSpanAsync4 } from "@xyo-network/chain-utils";
713
+ import { timeBudget as timeBudget4 } from "@xyo-network/xl1-protocol-sdk";
714
+ import { Mutex as Mutex11 } from "async-mutex";
850
715
 
851
716
  // src/orchestration/archivists/StakeIntentState/local.ts
852
- import { assertEx as assertEx8 } from "@xylabs/sdk-js";
853
- import { Mutex as Mutex14 } from "async-mutex";
854
- var mutex11 = new Mutex14();
855
- var singleton11;
717
+ import { assertEx as assertEx6 } from "@xylabs/sdk-js";
718
+ import { Mutex as Mutex10 } from "async-mutex";
719
+ var mutex8 = new Mutex10();
720
+ var singleton8;
856
721
  var initLocalStakeIntentStateArchivist = /* @__PURE__ */ __name(async ({ config: config2 }) => {
857
- return await mutex11.runExclusive(async () => {
858
- if (singleton11) return singleton11;
722
+ return await mutex8.runExclusive(async () => {
723
+ if (singleton8) return singleton8;
859
724
  const { root } = config2.storage;
860
- singleton11 = await getLocalPersistentArchivist("local-stake-intent-state", "stakeIntent", "state", root);
861
- return assertEx8(singleton11, () => new Error("Failed to initialize stake intent state archivist"));
725
+ singleton8 = await getLocalPersistentArchivist("local-stake-intent-state", "stakeIntent", "state", root);
726
+ return assertEx6(singleton8, () => new Error("Failed to initialize stake intent state archivist"));
862
727
  });
863
728
  }, "initLocalStakeIntentStateArchivist");
864
729
 
865
730
  // src/orchestration/archivists/StakeIntentState/archivist.ts
866
- var mutex12 = new Mutex15();
867
- var singleton12;
731
+ var mutex9 = new Mutex11();
732
+ var singleton9;
868
733
  var initStakeIntentStateArchivist = /* @__PURE__ */ __name(async (params) => {
869
- return await mutex12.runExclusive(async () => {
870
- if (singleton12) return singleton12;
871
- return await timeBudget5("initStakeIntentStateArchivist", params.logger, async () => {
872
- const local = await startupSpanAsync5("StakeIntentStateArchivist:initLocal", () => initLocalStakeIntentStateArchivist(params));
873
- singleton12 = local;
874
- return assertEx9(singleton12, () => "StakeIntentStateArchivist is undefined");
734
+ return await mutex9.runExclusive(async () => {
735
+ if (singleton9) return singleton9;
736
+ return await timeBudget4("initStakeIntentStateArchivist", params.logger, async () => {
737
+ const local = await startupSpanAsync4("StakeIntentStateArchivist:initLocal", () => initLocalStakeIntentStateArchivist(params));
738
+ singleton9 = local;
739
+ return assertEx7(singleton9, () => "StakeIntentStateArchivist is undefined");
875
740
  }, 2e3, true);
876
741
  });
877
742
  }, "initStakeIntentStateArchivist");
878
743
 
879
744
  // src/orchestration/map/BalanceSummary/initBalanceSummaryMap.ts
880
745
  import { isDefined as isDefined4 } from "@xylabs/sdk-js";
881
- import { startupSpanAsync as startupSpanAsync6 } from "@xyo-network/chain-utils";
882
- import { timeBudget as timeBudget6 } from "@xyo-network/xl1-protocol-sdk";
883
- import { Mutex as Mutex17 } from "async-mutex";
746
+ import { startupSpanAsync as startupSpanAsync5 } from "@xyo-network/chain-utils";
747
+ import { timeBudget as timeBudget5 } from "@xyo-network/xl1-protocol-sdk";
748
+ import { Mutex as Mutex13 } from "async-mutex";
884
749
 
885
750
  // src/orchestration/map/BalanceSummary/initLocalBalanceSummaryMap.ts
886
751
  import { isDefined as isDefined3 } from "@xylabs/sdk-js";
887
752
  import { getLocalPersistentMap } from "@xyo-network/chain-protocol";
888
- import { Mutex as Mutex16 } from "async-mutex";
889
- var mutex13 = new Mutex16();
890
- var singleton13;
753
+ import { Mutex as Mutex12 } from "async-mutex";
754
+ var mutex10 = new Mutex12();
755
+ var singleton10;
891
756
  var initLocalBalanceSummaryMap = /* @__PURE__ */ __name(async (params) => {
892
- return await mutex13.runExclusive(async () => {
893
- if (isDefined3(singleton13)) return singleton13;
757
+ return await mutex10.runExclusive(async () => {
758
+ if (isDefined3(singleton10)) return singleton10;
894
759
  const { root } = params.config.storage;
895
- singleton13 = await getLocalPersistentMap("balance", "summary", root);
896
- return singleton13;
760
+ singleton10 = await getLocalPersistentMap("balance", "summary", root);
761
+ return singleton10;
897
762
  });
898
763
  }, "initLocalBalanceSummaryMap");
899
764
 
900
765
  // src/orchestration/map/BalanceSummary/initBalanceSummaryMap.ts
901
- var mutex14 = new Mutex17();
902
- var singleton14;
766
+ var mutex11 = new Mutex13();
767
+ var singleton11;
903
768
  async function initBalanceSummaryMap(params) {
904
- return await mutex14.runExclusive(async () => {
905
- if (isDefined4(singleton14)) return singleton14;
906
- return await timeBudget6("initBalanceSummaryMap", params.logger, async () => {
907
- const local = await startupSpanAsync6("BalanceSummaryMap:initLocal", () => initLocalBalanceSummaryMap(params));
908
- singleton14 = local;
909
- return singleton14;
769
+ return await mutex11.runExclusive(async () => {
770
+ if (isDefined4(singleton11)) return singleton11;
771
+ return await timeBudget5("initBalanceSummaryMap", params.logger, async () => {
772
+ const local = await startupSpanAsync5("BalanceSummaryMap:initLocal", () => initLocalBalanceSummaryMap(params));
773
+ singleton11 = local;
774
+ return singleton11;
910
775
  }, 2e3, true);
911
776
  });
912
777
  }
@@ -914,77 +779,103 @@ __name(initBalanceSummaryMap, "initBalanceSummaryMap");
914
779
 
915
780
  // src/orchestration/map/BalanceSummary/initTransferSummaryMap.ts
916
781
  import { isDefined as isDefined6 } from "@xylabs/sdk-js";
917
- import { startupSpanAsync as startupSpanAsync7 } from "@xyo-network/chain-utils";
918
- import { timeBudget as timeBudget7 } from "@xyo-network/xl1-protocol-sdk";
919
- import { Mutex as Mutex19 } from "async-mutex";
782
+ import { startupSpanAsync as startupSpanAsync6 } from "@xyo-network/chain-utils";
783
+ import { timeBudget as timeBudget6 } from "@xyo-network/xl1-protocol-sdk";
784
+ import { Mutex as Mutex15 } from "async-mutex";
920
785
 
921
786
  // src/orchestration/map/BalanceSummary/initLocalTransferSummaryMap.ts
922
787
  import { isDefined as isDefined5 } from "@xylabs/sdk-js";
923
788
  import { getLocalPersistentMap as getLocalPersistentMap2 } from "@xyo-network/chain-protocol";
924
- import { Mutex as Mutex18 } from "async-mutex";
925
- var mutex15 = new Mutex18();
926
- var singleton15;
789
+ import { Mutex as Mutex14 } from "async-mutex";
790
+ var mutex12 = new Mutex14();
791
+ var singleton12;
927
792
  var initLocalTransferSummaryMap = /* @__PURE__ */ __name(async (params) => {
928
- return await mutex15.runExclusive(async () => {
929
- if (isDefined5(singleton15)) return singleton15;
793
+ return await mutex12.runExclusive(async () => {
794
+ if (isDefined5(singleton12)) return singleton12;
930
795
  const { root } = params.config.storage;
931
- singleton15 = await getLocalPersistentMap2("transfer", "summary", root);
932
- return singleton15;
796
+ singleton12 = await getLocalPersistentMap2("transfer", "summary", root);
797
+ return singleton12;
933
798
  });
934
799
  }, "initLocalTransferSummaryMap");
935
800
 
936
801
  // src/orchestration/map/BalanceSummary/initTransferSummaryMap.ts
937
- var mutex16 = new Mutex19();
938
- var singleton16;
802
+ var mutex13 = new Mutex15();
803
+ var singleton13;
939
804
  async function initTransferSummaryMap(params) {
940
- return await mutex16.runExclusive(async () => {
941
- if (isDefined6(singleton16)) return singleton16;
942
- return await timeBudget7("initTransferSummaryMap:Init", params.logger, async () => {
943
- const local = await startupSpanAsync7("TransferSummaryMap:initLocal", () => initLocalTransferSummaryMap(params));
944
- singleton16 = local;
945
- return singleton16;
805
+ return await mutex13.runExclusive(async () => {
806
+ if (isDefined6(singleton13)) return singleton13;
807
+ return await timeBudget6("initTransferSummaryMap:Init", params.logger, async () => {
808
+ const local = await startupSpanAsync6("TransferSummaryMap:initLocal", () => initLocalTransferSummaryMap(params));
809
+ singleton13 = local;
810
+ return singleton13;
946
811
  }, 2e3, true);
947
812
  });
948
813
  }
949
814
  __name(initTransferSummaryMap, "initTransferSummaryMap");
950
815
 
951
816
  // src/orchestration/services/implementation/accountBalance.ts
952
- import { BaseAccountBalanceService } from "@xyo-network/chain-services";
953
- import { timeBudget as timeBudget8 } from "@xyo-network/xl1-protocol-sdk";
817
+ import { isDefined as isDefined7 } from "@xylabs/sdk-js";
818
+ import { AccountBalanceViewerRpcSchemas, HttpRpcTransport, JsonRpcAccountBalanceViewer } from "@xyo-network/xl1-rpc";
954
819
  var balanceServiceSingleton;
955
- var initAccountBalanceService = /* @__PURE__ */ __name(async (params) => {
820
+ var initAccountBalanceService = /* @__PURE__ */ __name((params) => {
956
821
  const { config: config2, logger } = params;
957
822
  if (balanceServiceSingleton) return balanceServiceSingleton;
958
- return await timeBudget8("initAccountBalanceService", params.logger, async () => {
959
- const endpoint = config2.services?.accountBalanceViewerEndpoint ?? config2.services?.apiEndpoint;
960
- balanceServiceSingleton = await BaseAccountBalanceService.create(params.params);
961
- return balanceServiceSingleton;
962
- }, 2e3, true);
823
+ const endpoint = config2.services?.accountBalanceViewerEndpoint ?? config2.services?.apiEndpoint;
824
+ if (isDefined7(endpoint)) {
825
+ const transport = new HttpRpcTransport(endpoint, {
826
+ ...AccountBalanceViewerRpcSchemas
827
+ });
828
+ const viewer = new JsonRpcAccountBalanceViewer(transport);
829
+ logger?.log("Using AccountBalanceViewer RPC service at", endpoint);
830
+ return viewer;
831
+ } else {
832
+ throw new Error("No AccountBalanceViewer endpoint configured");
833
+ }
963
834
  }, "initAccountBalanceService");
964
835
 
836
+ // src/orchestration/services/implementation/blockViewer.ts
837
+ import { isDefined as isDefined8 } from "@xylabs/sdk-js";
838
+ import { BlockViewerRpcSchemas, HttpRpcTransport as HttpRpcTransport2, JsonRpcBlockViewer } from "@xyo-network/xl1-rpc";
839
+ var blockViewerSingleton;
840
+ var initBlockViewer = /* @__PURE__ */ __name((params) => {
841
+ const { config: config2, logger } = params;
842
+ if (blockViewerSingleton) return blockViewerSingleton;
843
+ const endpoint = config2.services?.apiEndpoint;
844
+ if (isDefined8(endpoint)) {
845
+ const transport = new HttpRpcTransport2(endpoint, {
846
+ ...BlockViewerRpcSchemas
847
+ });
848
+ const viewer = new JsonRpcBlockViewer(transport);
849
+ logger?.log("Using BlockViewer RPC service at", endpoint);
850
+ return viewer;
851
+ } else {
852
+ throw new Error("No BlockViewer endpoint configured");
853
+ }
854
+ }, "initBlockViewer");
855
+
965
856
  // src/orchestration/services/implementation/chain/index.ts
966
- import { assertEx as assertEx15 } from "@xylabs/sdk-js";
857
+ import { assertEx as assertEx13 } from "@xylabs/sdk-js";
967
858
  import { MemoryChainService } from "@xyo-network/chain-services";
968
859
 
969
860
  // src/orchestration/services/implementation/chain/evm.ts
970
- import { asAddress, assertEx as assertEx14, isDefined as isDefined10, ZERO_ADDRESS } from "@xylabs/sdk-js";
861
+ import { asAddress, assertEx as assertEx12, isDefined as isDefined12, ZERO_ADDRESS } from "@xylabs/sdk-js";
971
862
  import { EvmChainService } from "@xyo-network/chain-services";
972
863
  import { Wallet } from "ethers/wallet";
973
864
 
974
865
  // src/orchestration/services/implementation/evm/initEvmProvider.ts
975
- import { assertEx as assertEx13 } from "@xylabs/sdk-js";
866
+ import { assertEx as assertEx11 } from "@xylabs/sdk-js";
976
867
 
977
868
  // src/orchestration/services/implementation/evm/initInfuraProvider.ts
978
- import { assertEx as assertEx11, isDefined as isDefined8 } from "@xylabs/sdk-js";
869
+ import { assertEx as assertEx9, isDefined as isDefined10 } from "@xylabs/sdk-js";
979
870
  import { InfuraProvider } from "ethers/providers";
980
871
 
981
872
  // src/orchestration/services/implementation/evm/initChainId.ts
982
- import { assertEx as assertEx10, hexFrom, isDefined as isDefined7, isHex } from "@xylabs/sdk-js";
873
+ import { assertEx as assertEx8, hexFrom, isDefined as isDefined9, isHex } from "@xylabs/sdk-js";
983
874
  var canUseChainId = /* @__PURE__ */ __name((config2) => {
984
- return isDefined7(config2.evm.chainId);
875
+ return isDefined9(config2.evm.chainId);
985
876
  }, "canUseChainId");
986
877
  var getChainId = /* @__PURE__ */ __name((config2) => {
987
- const chainId = assertEx10(config2.evm.chainId, () => "Missing config.evm.chainId");
878
+ const chainId = assertEx8(config2.evm.chainId, () => "Missing config.evm.chainId");
988
879
  if (isHex(chainId, {
989
880
  prefix: true
990
881
  })) {
@@ -1006,11 +897,11 @@ var initInfuraProvider = /* @__PURE__ */ __name((config2) => {
1006
897
  return instance;
1007
898
  }, "initInfuraProvider");
1008
899
  var canUseInfuraProvider = /* @__PURE__ */ __name((config2) => {
1009
- return canUseChainId(config2) && isDefined8(config2.evm?.infura?.projectId) && isDefined8(config2.evm?.infura?.projectSecret);
900
+ return canUseChainId(config2) && isDefined10(config2.evm?.infura?.projectId) && isDefined10(config2.evm?.infura?.projectSecret);
1010
901
  }, "canUseInfuraProvider");
1011
902
  var getInfuraProviderConfig = /* @__PURE__ */ __name((config2) => {
1012
- const projectId = assertEx11(config2.evm?.infura?.projectId, () => "Missing config.evm.infura.projectId");
1013
- const projectSecret = assertEx11(config2.evm?.infura?.projectSecret, () => "Missing config.evm.infura.projectSecret");
903
+ const projectId = assertEx9(config2.evm?.infura?.projectId, () => "Missing config.evm.infura.projectId");
904
+ const projectSecret = assertEx9(config2.evm?.infura?.projectSecret, () => "Missing config.evm.infura.projectSecret");
1014
905
  return [
1015
906
  getChainId(config2),
1016
907
  projectId,
@@ -1019,17 +910,17 @@ var getInfuraProviderConfig = /* @__PURE__ */ __name((config2) => {
1019
910
  }, "getInfuraProviderConfig");
1020
911
 
1021
912
  // src/orchestration/services/implementation/evm/initJsonRpcProvider.ts
1022
- import { assertEx as assertEx12, isDefined as isDefined9 } from "@xylabs/sdk-js";
913
+ import { assertEx as assertEx10, isDefined as isDefined11 } from "@xylabs/sdk-js";
1023
914
  import { JsonRpcProvider } from "ethers/providers";
1024
915
  var initJsonRpcProvider = /* @__PURE__ */ __name((config2) => {
1025
916
  const providerConfig = getJsonRpcProviderConfig(config2);
1026
917
  return Promise.resolve(new JsonRpcProvider(...providerConfig));
1027
918
  }, "initJsonRpcProvider");
1028
919
  var canUseJsonRpcProvider = /* @__PURE__ */ __name((config2) => {
1029
- return canUseChainId(config2) && isDefined9(config2.evm.jsonRpc?.url);
920
+ return canUseChainId(config2) && isDefined11(config2.evm.jsonRpc?.url);
1030
921
  }, "canUseJsonRpcProvider");
1031
922
  var getJsonRpcProviderConfig = /* @__PURE__ */ __name((config2) => {
1032
- const jsonRpcUrl = assertEx12(config2.evm.jsonRpc?.url, () => "Missing config.evm.jsonRpc.url");
923
+ const jsonRpcUrl = assertEx10(config2.evm.jsonRpc?.url, () => "Missing config.evm.jsonRpc.url");
1033
924
  return [
1034
925
  jsonRpcUrl,
1035
926
  getChainId(config2)
@@ -1045,7 +936,7 @@ var initEvmProvider = /* @__PURE__ */ __name(async ({ config: config2 }) => {
1045
936
  } else if (canUseJsonRpcProvider(config2)) {
1046
937
  provider = initJsonRpcProvider(config2);
1047
938
  }
1048
- return assertEx13(await provider, () => "No provider available");
939
+ return assertEx11(await provider, () => "No provider available");
1049
940
  }, "initEvmProvider");
1050
941
  var canUseEvmProvider = /* @__PURE__ */ __name(({ config: config2 }) => {
1051
942
  return canUseInfuraProvider(config2) || canUseJsonRpcProvider(config2);
@@ -1055,18 +946,18 @@ var canUseEvmProvider = /* @__PURE__ */ __name(({ config: config2 }) => {
1055
946
  var chainStakeServiceSingleton;
1056
947
  var canUseEvmContractChainService = /* @__PURE__ */ __name((config2) => {
1057
948
  const { id } = config2.chain;
1058
- return isDefined10(id) && id !== ZERO_ADDRESS && canUseEvmProvider({
949
+ return isDefined12(id) && id !== ZERO_ADDRESS && canUseEvmProvider({
1059
950
  config: config2
1060
951
  });
1061
952
  }, "canUseEvmContractChainService");
1062
953
  var initEvmContractChainService = /* @__PURE__ */ __name(async ({ account, config: config2, traceProvider, meterProvider, logger }) => {
1063
954
  if (chainStakeServiceSingleton) return chainStakeServiceSingleton;
1064
- const emvStakingContractAddress = assertEx14(config2.chain.id, () => "config.chain.id is required");
1065
- const id = assertEx14(asAddress(emvStakingContractAddress), () => "config.chain.id is not a valid address");
1066
- const provider2 = assertEx14(await initEvmProvider({
955
+ const emvStakingContractAddress = assertEx12(config2.chain.id, () => "config.chain.id is required");
956
+ const id = assertEx12(asAddress(emvStakingContractAddress), () => "config.chain.id is not a valid address");
957
+ const provider2 = assertEx12(await initEvmProvider({
1067
958
  config: config2
1068
959
  }));
1069
- const privateKey = assertEx14(account.private?.hex, () => "Account does not have a private key");
960
+ const privateKey = assertEx12(account.private?.hex, () => "Account does not have a private key");
1070
961
  const runner = new Wallet(privateKey, provider2);
1071
962
  chainStakeServiceSingleton = EvmChainService.create({
1072
963
  id,
@@ -1097,7 +988,7 @@ var initMemoryChainService = /* @__PURE__ */ __name(async ({ config: config2 })
1097
988
  config: config2,
1098
989
  name: "MemoryChainService"
1099
990
  });
1100
- assertEx15(await result.start(), () => "Failed to start MemoryChainService");
991
+ assertEx13(await result.start(), () => "Failed to start MemoryChainService");
1101
992
  return result;
1102
993
  }, "initMemoryChainService");
1103
994
  var init = /* @__PURE__ */ __name(async (params) => {
@@ -1110,273 +1001,50 @@ var init = /* @__PURE__ */ __name(async (params) => {
1110
1001
  return chainStakeServiceSingleton2;
1111
1002
  }, "init");
1112
1003
 
1113
- // src/orchestration/services/implementation/head/head.ts
1114
- import { assertEx as assertEx16, isDefined as isDefined12 } from "@xylabs/sdk-js";
1115
- import { findMostRecentBlock as findMostRecentBlock2 } from "@xyo-network/chain-protocol";
1116
-
1117
- // src/orchestration/services/implementation/head/createBootstrapHead.ts
1118
- import { buildNextBlock, createDeclarationIntent as createDeclarationIntent2, createGenesisBlock } from "@xyo-network/chain-protocol";
1119
- var createBootstrapHead = /* @__PURE__ */ __name(async (account, chainService) => {
1120
- const chainId = chainService.chainId;
1121
- const chain = [];
1122
- const genesisBlock = await createGenesisBlock(account, chainId, 10000000n, account.address);
1123
- chain.push(genesisBlock);
1124
- const producerDeclarationPayload = createDeclarationIntent2(account.address, "producer", genesisBlock[0].block, genesisBlock[0].block + 1e4);
1125
- const producerDeclarationBlock = await buildNextBlock(genesisBlock[0], [], [
1126
- producerDeclarationPayload
1127
- ], [
1128
- account
1129
- ]);
1130
- chain.push(producerDeclarationBlock);
1131
- return chain;
1132
- }, "createBootstrapHead");
1133
-
1134
- // src/orchestration/services/implementation/head/createForkedHead/getBridgeDestinationObservation.ts
1135
- import { buildNextBlock as buildNextBlock2 } from "@xyo-network/chain-protocol";
1136
- import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder";
1137
- import { BridgeDestinationObservationSchema } from "@xyo-network/xl1-protocol";
1138
-
1139
- // src/orchestration/services/implementation/head/createForkedHead/config/getBridgeDestinationDetails.ts
1140
- import { toHex as toHex4 } from "@xylabs/sdk-js";
1141
-
1142
- // src/orchestration/services/implementation/head/createForkedHead/config/getForkDetails.ts
1143
- import { toHex as toHex3 } from "@xylabs/sdk-js";
1144
- import { AttoXL1ConvertFactor } from "@xyo-network/xl1-protocol";
1145
- var getForkBlockReward = /* @__PURE__ */ __name(() => {
1146
- return 18000000000n * AttoXL1ConvertFactor.xl1;
1147
- }, "getForkBlockReward");
1148
- var getForkBlockRewardHex = /* @__PURE__ */ __name(() => {
1149
- return toHex3(getForkBlockReward());
1150
- }, "getForkBlockRewardHex");
1151
-
1152
- // src/orchestration/services/implementation/head/createForkedHead/config/getBridgeDestinationDetails.ts
1153
- var ethChainId = toHex4("0x1");
1154
- var bridgeableTokenContract = toHex4("0xf72aE3E0DA743033AbD7A407557D684c1aE66aed");
1155
- var bridgeDestAddress = toHex4("0x0e65b65B10C791942665030402c35023d88B14dA");
1156
- var destConfirmation = toHex4("0x950861b10523b52cdbb4a9ee52ed26601db555d2652bfec21c709e5e70d5b7d3");
1157
- var getBridgeDestChainId = /* @__PURE__ */ __name(() => ethChainId, "getBridgeDestChainId");
1158
- var getBridgeDestToken = /* @__PURE__ */ __name(() => bridgeableTokenContract, "getBridgeDestToken");
1159
- var getBridgeDestAddress = /* @__PURE__ */ __name(() => bridgeDestAddress, "getBridgeDestAddress");
1160
- var getBridgeDestAmount = /* @__PURE__ */ __name(() => getForkBlockRewardHex(), "getBridgeDestAmount");
1161
- var getBridgeDestConfirmation = /* @__PURE__ */ __name(() => destConfirmation, "getBridgeDestConfirmation");
1162
- var getBridgeDestinationDetails = /* @__PURE__ */ __name(() => {
1163
- return {
1164
- dest: getBridgeDestChainId(),
1165
- destToken: getBridgeDestToken(),
1166
- destAddress: getBridgeDestAddress(),
1167
- destAmount: getBridgeDestAmount()
1168
- };
1169
- }, "getBridgeDestinationDetails");
1170
-
1171
- // src/orchestration/services/implementation/head/createForkedHead/config/getBridgeSourceDetails.ts
1172
- var getBridgeSrcChainId = /* @__PURE__ */ __name((chainService) => chainService.chainId, "getBridgeSrcChainId");
1173
- var getBridgeSrcAddress = /* @__PURE__ */ __name((account) => account.address, "getBridgeSrcAddress");
1174
- var getBridgeSrcToken = /* @__PURE__ */ __name((chainService) => chainService.chainId, "getBridgeSrcToken");
1175
- var getBridgeSrcAmount = /* @__PURE__ */ __name(() => getForkBlockRewardHex(), "getBridgeSrcAmount");
1176
- var getBridgeSourceDetails = /* @__PURE__ */ __name((account, chainService) => {
1177
- return {
1178
- src: getBridgeSrcChainId(chainService),
1179
- srcAddress: getBridgeSrcAddress(account),
1180
- srcToken: getBridgeSrcToken(chainService),
1181
- srcAmount: getBridgeSrcAmount()
1182
- };
1183
- }, "getBridgeSourceDetails");
1184
-
1185
- // src/orchestration/services/implementation/head/createForkedHead/getBridgeDestinationObservation.ts
1186
- var getBridgeDestinationObservation = /* @__PURE__ */ __name(async (previousBlock, account, chainService) => {
1187
- const bridgeDestinationObservationFields = {
1188
- ...getBridgeSourceDetails(account, chainService),
1189
- ...getBridgeDestinationDetails(),
1190
- destConfirmation: getBridgeDestConfirmation()
1191
- };
1192
- const bridgeDestinationObservation = new PayloadBuilder3({
1193
- schema: BridgeDestinationObservationSchema
1194
- }).fields(bridgeDestinationObservationFields).build();
1195
- return await buildNextBlock2(previousBlock[0], [], [
1196
- bridgeDestinationObservation
1197
- ], [
1198
- account
1199
- ]);
1200
- }, "getBridgeDestinationObservation");
1201
-
1202
- // src/orchestration/services/implementation/head/createForkedHead/getBridgeIntent.ts
1203
- import { buildNextBlock as buildNextBlock3, createTransferPayload } from "@xyo-network/chain-protocol";
1204
- import { PayloadBuilder as PayloadBuilder4 } from "@xyo-network/payload-builder";
1205
- import { BridgeIntentSchema, XYO_BRIDGE_ADDRESS } from "@xyo-network/xl1-protocol";
1206
- var getBridgeIntent = /* @__PURE__ */ __name(async (previousBlock, account, chainService) => {
1207
- const transferPayload = createTransferPayload(account.address, {
1208
- [XYO_BRIDGE_ADDRESS]: getForkBlockReward()
1209
- });
1210
- const nonce = `${Date.now()}`;
1211
- const bridgeIntentFields = {
1212
- ...getBridgeSourceDetails(account, chainService),
1213
- ...getBridgeDestinationDetails(),
1214
- nonce
1215
- };
1216
- const bridgeIntent = new PayloadBuilder4({
1217
- schema: BridgeIntentSchema
1218
- }).fields(bridgeIntentFields).build();
1219
- return await buildNextBlock3(previousBlock[0], [], [
1220
- bridgeIntent,
1221
- transferPayload
1222
- ], [
1223
- account
1224
- ]);
1225
- }, "getBridgeIntent");
1226
-
1227
- // src/orchestration/services/implementation/head/createForkedHead/getBridgeSourceObservation.ts
1228
- import { buildNextBlock as buildNextBlock4 } from "@xyo-network/chain-protocol";
1229
- import { PayloadBuilder as PayloadBuilder5 } from "@xyo-network/payload-builder";
1230
- import { BridgeSourceObservationSchema } from "@xyo-network/xl1-protocol";
1231
- var getBridgeSourceObservation = /* @__PURE__ */ __name(async (previousBlock, account, chainService) => {
1232
- const srcTxHash = previousBlock[0]._hash;
1233
- const bridgeSourceObservationFields = {
1234
- ...getBridgeSourceDetails(account, chainService),
1235
- ...getBridgeDestinationDetails(),
1236
- // Observation
1237
- srcConfirmation: srcTxHash
1238
- };
1239
- const bridgeSourceObservation = new PayloadBuilder5({
1240
- schema: BridgeSourceObservationSchema
1241
- }).fields(bridgeSourceObservationFields).build();
1242
- return await buildNextBlock4(previousBlock[0], [], [
1243
- bridgeSourceObservation
1244
- ], [
1245
- account
1246
- ]);
1247
- }, "getBridgeSourceObservation");
1248
-
1249
- // src/orchestration/services/implementation/head/createForkedHead/getFirstBlockForNewChain.ts
1250
- import { buildBlock } from "@xyo-network/chain-protocol";
1251
- import { AttoXL1, XYO_STEP_REWARD_ADDRESS } from "@xyo-network/xl1-protocol";
1252
- var getFirstBlockForNewChain = /* @__PURE__ */ __name(async (forkBlock, account, chainService) => {
1253
- const { _hash: previousBlockHash, block: previousBlockNumber, step_hashes: previousStepHashes = [], protocol } = forkBlock;
1254
- const chainId = chainService.chainId;
1255
- const options = {
1256
- blockPayloads: [],
1257
- chainId,
1258
- previousBlockHash,
1259
- previousBlockNumber,
1260
- previousStepHashes,
1261
- signers: [
1262
- account
1263
- ],
1264
- txs: [],
1265
- protocol,
1266
- chainStepRewardAddress: XYO_STEP_REWARD_ADDRESS,
1267
- stepRewardPoolBalance: AttoXL1(0n)
1268
- };
1269
- return await buildBlock(options);
1270
- }, "getFirstBlockForNewChain");
1271
-
1272
- // src/orchestration/services/implementation/head/createForkedHead/createForkedHead.ts
1273
- var createForkedHead = /* @__PURE__ */ __name(async (forkFromBlock, account, chainService) => {
1274
- const chain = [];
1275
- const firstBlockForNewChain = await getFirstBlockForNewChain(forkFromBlock, account, chainService);
1276
- chain.push(firstBlockForNewChain);
1277
- const bridgeIntent = await getBridgeIntent(firstBlockForNewChain, account, chainService);
1278
- chain.push(bridgeIntent);
1279
- const bridgeSourceObservation = await getBridgeSourceObservation(bridgeIntent, account, chainService);
1280
- chain.push(bridgeSourceObservation);
1281
- const bridgeDestinationObservation = await getBridgeDestinationObservation(bridgeSourceObservation, account, chainService);
1282
- chain.push(bridgeDestinationObservation);
1283
- return chain;
1284
- }, "createForkedHead");
1285
-
1286
- // src/orchestration/services/implementation/head/getForkFromBlock.ts
1287
- import { asHash, hexFromBigInt, isDefined as isDefined11 } from "@xylabs/sdk-js";
1288
- import { isSignedBlockBoundWitnessWithHashMeta } from "@xyo-network/xl1-protocol";
1289
- var getForkFromBlock = /* @__PURE__ */ __name(async (head, chainService, chainArchivist) => {
1290
- if (head.chain !== chainService.chainId) {
1291
- const forkedAtBigInt = await chainService.forkedAtHash();
1292
- const forkedAtHex = hexFromBigInt(forkedAtBigInt);
1293
- const forkedAtHash = asHash(forkedAtHex);
1294
- if (isDefined11(forkedAtHash)) {
1295
- const [forkedAtBlock] = await chainArchivist.get([
1296
- forkedAtHash
1297
- ]);
1298
- const forkedChainId = await chainService.forkedChainId();
1299
- const forkedAtBlockNumber = Number(await chainService.forkedAtBlockNumber());
1300
- if (isSignedBlockBoundWitnessWithHashMeta(forkedAtBlock) && forkedAtBlock.chain === forkedChainId && forkedAtBlock.block === forkedAtBlockNumber) {
1301
- return forkedAtBlock;
1302
- }
1303
- }
1304
- }
1305
- }, "getForkFromBlock");
1306
-
1307
- // src/orchestration/services/implementation/head/submitNewChain.ts
1308
- import { delay as delay2 } from "@xylabs/sdk-js";
1309
- import { flattenHydratedBlock as flattenHydratedBlock2 } from "@xyo-network/xl1-protocol-sdk";
1310
- var submitNewChain = /* @__PURE__ */ __name(async (chain, chainArchivist, chainSubmissionsArchivistWrite) => {
1311
- for (const block of chain) {
1312
- const [bw] = block;
1313
- await chainSubmissionsArchivistWrite.insert(flattenHydratedBlock2(block));
1314
- while (true) {
1315
- const result = await chainArchivist.get([
1316
- bw._hash
1317
- ]);
1318
- if (result.length > 0) break;
1319
- await delay2(1e3);
1320
- }
1321
- }
1322
- }, "submitNewChain");
1323
-
1324
- // src/orchestration/services/implementation/head/head.ts
1325
- var headSingleton;
1326
- var initHead = /* @__PURE__ */ __name(async (params) => {
1327
- const { account, chainArchivist, chainSubmissionsArchivistWrite, chainService } = params;
1328
- if (headSingleton) return headSingleton;
1329
- let head = await findMostRecentBlock2(chainArchivist);
1330
- if (head) {
1331
- const forkFromBlock = await getForkFromBlock(head, chainService, chainArchivist);
1332
- if (isDefined12(forkFromBlock)) {
1333
- const chain = await createForkedHead(forkFromBlock, account, chainService);
1334
- await submitNewChain(chain, chainArchivist, chainSubmissionsArchivistWrite);
1335
- const newBlock = assertEx16(chain.at(-1), () => new Error("Failed to get new head after forking"));
1336
- head = newBlock[0];
1337
- }
1338
- } else {
1339
- const chain = await createBootstrapHead(account, chainService);
1340
- await submitNewChain(chain, chainArchivist, chainSubmissionsArchivistWrite);
1341
- const newBlock = assertEx16(chain.at(-1), () => new Error("Failed to get new head after genesis"));
1342
- head = newBlock[0];
1343
- }
1344
- headSingleton = head;
1345
- return headSingleton;
1346
- }, "initHead");
1347
-
1348
1004
  // src/orchestration/services/implementation/pendingTransactions.ts
1005
+ import { isDefined as isDefined13 } from "@xylabs/sdk-js";
1349
1006
  import { BasePendingTransactionsService } from "@xyo-network/chain-services";
1350
- import { timeBudget as timeBudget9 } from "@xyo-network/xl1-protocol-sdk";
1007
+ import { timeBudget as timeBudget7 } from "@xyo-network/xl1-protocol-sdk";
1008
+ import { HttpRpcTransport as HttpRpcTransport3, JsonRpcMempoolViewer, MempoolViewerRpcSchemas } from "@xyo-network/xl1-rpc";
1351
1009
  var serviceSingleton;
1352
- var initPendingTransactions = /* @__PURE__ */ __name(async (params) => {
1010
+ var initPendingTransactions = /* @__PURE__ */ __name(async ({ config: config2, params, logger }) => {
1353
1011
  if (serviceSingleton) return serviceSingleton;
1354
- return await timeBudget9("initPendingTransactions", params.logger, async () => {
1355
- serviceSingleton = await BasePendingTransactionsService.create(params);
1012
+ return await timeBudget7("initPendingTransactions", logger, async () => {
1013
+ const endpoint = config2.services?.apiEndpoint;
1014
+ if (isDefined13(endpoint)) {
1015
+ const transport = new HttpRpcTransport3(endpoint, {
1016
+ ...MempoolViewerRpcSchemas
1017
+ });
1018
+ const viewer = new JsonRpcMempoolViewer(transport);
1019
+ logger?.log("Using MempoolViewer RPC service at", endpoint);
1020
+ return viewer;
1021
+ } else {
1022
+ serviceSingleton = await BasePendingTransactionsService.create(params);
1023
+ }
1356
1024
  return serviceSingleton;
1357
1025
  }, 2e3, true);
1358
1026
  }, "initPendingTransactions");
1359
1027
 
1360
1028
  // src/orchestration/services/implementation/producer.ts
1361
1029
  import { BaseBlockProducerService as BaseBlockProducerService2 } from "@xyo-network/chain-services";
1362
- import { timeBudget as timeBudget10 } from "@xyo-network/xl1-protocol-sdk";
1030
+ import { timeBudget as timeBudget8 } from "@xyo-network/xl1-protocol-sdk";
1363
1031
  var serviceSingleton2;
1364
1032
  var initBlockProducer = /* @__PURE__ */ __name(async (params) => {
1365
1033
  if (serviceSingleton2) return serviceSingleton2;
1366
- return await timeBudget10("initBlockProducer", params.logger, async () => {
1034
+ return await timeBudget8("initBlockProducer", params.logger, async () => {
1367
1035
  serviceSingleton2 = await BaseBlockProducerService2.create(params);
1368
1036
  return serviceSingleton2;
1369
1037
  }, 2e3, true);
1370
1038
  }, "initBlockProducer");
1371
1039
 
1372
1040
  // src/orchestration/services/implementation/reward.ts
1373
- import { assertEx as assertEx17 } from "@xylabs/sdk-js";
1041
+ import { assertEx as assertEx14 } from "@xylabs/sdk-js";
1374
1042
  import { EvmBlockRewardService, MemoryBlockRewardService } from "@xyo-network/chain-services";
1375
- import { timeBudget as timeBudget11 } from "@xyo-network/xl1-protocol-sdk";
1043
+ import { timeBudget as timeBudget9 } from "@xyo-network/xl1-protocol-sdk";
1376
1044
  var rewardServiceSingleton;
1377
1045
  var initBlockRewardService = /* @__PURE__ */ __name((params) => {
1378
1046
  if (rewardServiceSingleton) return rewardServiceSingleton;
1379
- return timeBudget11("initBlockRewardService", params.logger, () => {
1047
+ return timeBudget9("initBlockRewardService", params.logger, () => {
1380
1048
  const { config: config2 } = params;
1381
1049
  rewardServiceSingleton = canUseEvmBlockRewardService({
1382
1050
  config: config2
@@ -1386,7 +1054,7 @@ var initBlockRewardService = /* @__PURE__ */ __name((params) => {
1386
1054
  }, "initBlockRewardService");
1387
1055
  var initXyoBlockRewardService = /* @__PURE__ */ __name((params) => {
1388
1056
  if (rewardServiceSingleton) return rewardServiceSingleton;
1389
- return timeBudget11("initXyoBlockRewardService", params.logger, () => {
1057
+ return timeBudget9("initXyoBlockRewardService", params.logger, () => {
1390
1058
  rewardServiceSingleton = MemoryBlockRewardService.create(params);
1391
1059
  return rewardServiceSingleton;
1392
1060
  }, 2e3, true);
@@ -1396,10 +1064,10 @@ var canUseEvmBlockRewardService = /* @__PURE__ */ __name((params) => canUseEvmPr
1396
1064
  }), "canUseEvmBlockRewardService");
1397
1065
  var initEvmBlockRewardService = /* @__PURE__ */ __name(async (params) => {
1398
1066
  if (rewardServiceSingleton) return rewardServiceSingleton;
1399
- return await timeBudget11("initEvmBlockRewardService", params.logger, async () => {
1067
+ return await timeBudget9("initEvmBlockRewardService", params.logger, async () => {
1400
1068
  const { account: paramsAccount } = params;
1401
- const account = assertEx17(paramsAccount, () => "Account is required");
1402
- const provider2 = assertEx17(await initEvmProvider(params));
1069
+ const account = assertEx14(paramsAccount, () => "Account is required");
1070
+ const provider2 = assertEx14(await initEvmProvider(params));
1403
1071
  const evmBlockRewardServiceParams = {
1404
1072
  ...params,
1405
1073
  provider: provider2,
@@ -1412,19 +1080,18 @@ var initEvmBlockRewardService = /* @__PURE__ */ __name(async (params) => {
1412
1080
 
1413
1081
  // src/orchestration/services/implementation/time.ts
1414
1082
  import { BaseTimeSyncService } from "@xyo-network/chain-services";
1415
- import { timeBudget as timeBudget12 } from "@xyo-network/xl1-protocol-sdk";
1083
+ import { timeBudget as timeBudget10 } from "@xyo-network/xl1-protocol-sdk";
1416
1084
  var timeSyncServiceSingleton;
1417
- var initTimeService = /* @__PURE__ */ __name(async ({ chainArchivist, chainIterator, config: config2, logger, meterProvider, traceProvider }) => {
1085
+ var initTimeService = /* @__PURE__ */ __name(async ({ blockViewer, config: config2, logger, meterProvider, traceProvider }) => {
1418
1086
  if (timeSyncServiceSingleton) return timeSyncServiceSingleton;
1419
- return await timeBudget12("initTimeService", logger, async () => {
1087
+ return await timeBudget10("initTimeService", logger, async () => {
1420
1088
  const ethProvider = canUseEvmProvider({
1421
1089
  config: config2
1422
1090
  }) ? await initEvmProvider({
1423
1091
  config: config2
1424
1092
  }) : void 0;
1425
1093
  timeSyncServiceSingleton = BaseTimeSyncService.create({
1426
- chainArchivist,
1427
- chainIterator,
1094
+ blockViewer,
1428
1095
  ethProvider,
1429
1096
  logger,
1430
1097
  meterProvider,
@@ -1434,18 +1101,6 @@ var initTimeService = /* @__PURE__ */ __name(async ({ chainArchivist, chainItera
1434
1101
  }, 2e3, true);
1435
1102
  }, "initTimeService");
1436
1103
 
1437
- // src/orchestration/services/implementation/transfer.ts
1438
- import { BaseAccountTransfersService } from "@xyo-network/chain-services";
1439
- import { timeBudget as timeBudget13 } from "@xyo-network/xl1-protocol-sdk";
1440
- var transferServiceSingleton;
1441
- var initTransferService = /* @__PURE__ */ __name(async (params) => {
1442
- if (transferServiceSingleton) return transferServiceSingleton;
1443
- return await timeBudget13("initTransferService", params.logger, async () => {
1444
- transferServiceSingleton = await BaseAccountTransfersService.create(params);
1445
- return transferServiceSingleton;
1446
- }, 2e3, true);
1447
- }, "initTransferService");
1448
-
1449
1104
  // src/orchestration/status/ServiceStatus.ts
1450
1105
  var LoggerStatusReporter = class {
1451
1106
  static {
@@ -1539,7 +1194,7 @@ var RuntimeStatusMonitor = class extends LoggerStatusReporter {
1539
1194
  // src/orchestration/initServices.ts
1540
1195
  var isStartable = /* @__PURE__ */ __name((value) => {
1541
1196
  const possibleStartable = value;
1542
- return isDefined13(possibleStartable.start) && typeof possibleStartable.start === "function" && possibleStartable.status === "created";
1197
+ return isDefined14(possibleStartable.start) && typeof possibleStartable.start === "function" && possibleStartable.status === "created";
1543
1198
  }, "isStartable");
1544
1199
  var initServices = /* @__PURE__ */ __name(async (context) => {
1545
1200
  const { config: config2, logger } = context;
@@ -1555,7 +1210,7 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
1555
1210
  logger.error("Producer encountered an unhandled error!");
1556
1211
  process.exit(1);
1557
1212
  });
1558
- await startupSpanAsync8("initHealthEndpoints", () => initHealthEndpoints({
1213
+ await startupSpanAsync7("initHealthEndpoints", () => initHealthEndpoints({
1559
1214
  ...context,
1560
1215
  statusReporter
1561
1216
  }));
@@ -1573,8 +1228,8 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
1573
1228
  }
1574
1229
  };
1575
1230
  const [{ traceProvider, meterProvider }, account] = await Promise.all([
1576
- startupSpanAsync8("initTelemetry", () => initTelemetry(telemetryConfig)),
1577
- startupSpanAsync8("initProducerAccount", () => initProducerAccount(context))
1231
+ startupSpanAsync7("initTelemetry", () => initTelemetry(telemetryConfig)),
1232
+ startupSpanAsync7("initProducerAccount", () => initProducerAccount(context))
1578
1233
  ]);
1579
1234
  const allowedRewardRedeemers = config2.validation?.allowedRewardRedeemers ?? [];
1580
1235
  const allowedRewardEscrowAccountSigners = config2.validation?.allowedRewardEscrowAccountSigners ?? [];
@@ -1590,32 +1245,23 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
1590
1245
  statusReporter,
1591
1246
  traceProvider
1592
1247
  };
1593
- const [chainArchivist, [pendingBundledTransactionsArchivist, pendingBundledTransactionsArchivistWrite], rejectedTransactionsArchivist, chainSubmissionsArchivistWrite, stakeIntentStateArchivist, chainService, balanceSummaryMap, transferSummaryMap] = await Promise.all([
1594
- startupSpanAsync8("ChainFinalizedArchivist", () => initChainFinalizedArchivist(initParams)),
1595
- startupSpanAsync8("PendingBundledTransactionsArchivist", () => initPendingBundledTransactionsArchivist(initParams)),
1596
- startupSpanAsync8("RejectedTransactionsArchivist", () => initRejectedTransactionsArchivist(initParams)),
1597
- startupSpanAsync8("ChainSubmissionsArchivist", () => initChainSubmissionsArchivist(initParams)),
1598
- startupSpanAsync8("StakeIntentStateArchivist", () => initStakeIntentStateArchivist(initParams)),
1599
- startupSpanAsync8("ChainService", () => initChainService({
1248
+ const [[pendingBundledTransactionsArchivist, pendingBundledTransactionsArchivistWrite], rejectedTransactionsArchivist, chainSubmissionsArchivistWrite, stakeIntentStateArchivist, chainService, balanceSummaryMap] = await Promise.all([
1249
+ startupSpanAsync7("PendingBundledTransactionsArchivist", () => initPendingBundledTransactionsArchivist(initParams)),
1250
+ startupSpanAsync7("RejectedTransactionsArchivist", () => initRejectedTransactionsArchivist(initParams)),
1251
+ startupSpanAsync7("ChainSubmissionsArchivist", () => initChainSubmissionsArchivist(initParams)),
1252
+ startupSpanAsync7("StakeIntentStateArchivist", () => initStakeIntentStateArchivist(initParams)),
1253
+ startupSpanAsync7("ChainService", () => initChainService({
1600
1254
  ...initParams,
1601
1255
  account,
1602
1256
  name: "ChainService"
1603
1257
  })),
1604
- startupSpanAsync8("BalanceSummaryMap", () => initBalanceSummaryMap(initParams)),
1605
- startupSpanAsync8("TransferSummaryMap", () => initTransferSummaryMap(initParams))
1258
+ startupSpanAsync7("BalanceSummaryMap", () => initBalanceSummaryMap(initParams)),
1259
+ startupSpanAsync7("TransferSummaryMap", () => initTransferSummaryMap(initParams))
1606
1260
  ]);
1607
- const chainId = chainService.chainId;
1608
- const chainMap = readPayloadMapFromStore(chainArchivist);
1261
+ const chainId = await chainService.chainId();
1609
1262
  const chainContractViewer = chainService;
1610
1263
  const chainStakeViewer = chainService;
1611
1264
  const chainStaker = chainService;
1612
- const head = await startupSpanAsync8("initHead", () => initHead({
1613
- ...initParams,
1614
- account,
1615
- chainArchivist,
1616
- chainSubmissionsArchivistWrite,
1617
- chainService
1618
- }));
1619
1265
  const additionalPendingTransactionValidators = [
1620
1266
  TransactionTransfersValidatorFactory([
1621
1267
  SelfSignerValidator,
@@ -1623,98 +1269,48 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
1623
1269
  DerivedReceiveAddressValidatorFactory(allowedRewardEscrowAccountSigners, "reward-escrow")
1624
1270
  ])
1625
1271
  ];
1626
- const [pendingTransactionsService, rewardService, chainIterator] = await Promise.all([
1627
- startupSpanAsync8("PendingTransactions", () => initPendingTransactions({
1628
- name: "PendingTransactionsService",
1629
- chainArchivist,
1630
- chainId,
1631
- pendingBundledTransactionsArchivist,
1632
- rejectedTransactionsArchivist,
1633
- additionalPendingTransactionValidators,
1634
- ...initParams
1272
+ const [pendingTransactionsService, rewardService] = await Promise.all([
1273
+ startupSpanAsync7("PendingTransactions", () => initPendingTransactions({
1274
+ config: config2,
1275
+ params: {
1276
+ name: "PendingTransactionsService",
1277
+ chainId,
1278
+ pendingBundledTransactionsArchivist,
1279
+ rejectedTransactionsArchivist,
1280
+ additionalPendingTransactionValidators,
1281
+ ...initParams
1282
+ }
1635
1283
  })),
1636
- startupSpanAsync8("RewardService", () => initBlockRewardService({
1284
+ startupSpanAsync7("RewardService", () => initBlockRewardService({
1637
1285
  name: "RewardService",
1638
1286
  account,
1639
1287
  chainService,
1640
1288
  ...initParams
1641
- })),
1642
- startupSpanAsync8("ChainIterator", () => initChainIterator({
1643
- name: "ChainIterator",
1644
- chainMap,
1645
- head,
1646
- ...initParams
1647
- }))
1648
- ]);
1649
- const blockViewer = blockViewerFromChainIteratorAndArchivist(chainIterator, chainArchivist);
1650
- const balanceContext = {
1651
- stepSemaphores: StepSizes.map(() => new Semaphore2(20)),
1652
- store: {
1653
- chainMap
1654
- },
1655
- head: /* @__PURE__ */ __name(async () => {
1656
- const head2 = await chainIterator.head();
1657
- return [
1658
- head2._hash,
1659
- head2.block
1660
- ];
1661
- }, "head"),
1662
- chainId,
1663
- summaryMap: balanceSummaryMap
1664
- };
1665
- const transferContext = {
1666
- stepSemaphores: StepSizes.map(() => new Semaphore2(20)),
1667
- store: {
1668
- chainMap
1669
- },
1670
- head: /* @__PURE__ */ __name(async () => {
1671
- const head2 = await chainIterator.head();
1672
- return [
1673
- head2._hash,
1674
- head2.block
1675
- ];
1676
- }, "head"),
1677
- chainId,
1678
- summaryMap: transferSummaryMap
1679
- };
1680
- const [balanceService] = await Promise.all([
1681
- startupSpanAsync8("BalanceService", () => initAccountBalanceService({
1682
- params: {
1683
- name: "BalanceService",
1684
- config: {},
1685
- context: balanceContext,
1686
- blockViewer,
1687
- chainArchivist,
1688
- chainIterator,
1689
- transferContext
1690
- },
1691
- ...initParams
1692
- })),
1693
- startupSpanAsync8("TransferService", () => initTransferService({
1694
- name: "TransferService",
1695
- context: transferContext,
1696
- ...initParams
1697
1289
  }))
1698
1290
  ]);
1291
+ const blockViewer = await startupSpanAsync7("BlockViewer", () => initBlockViewer({
1292
+ ...initParams
1293
+ }));
1294
+ const balanceService = await startupSpanAsync7("BalanceService", () => initAccountBalanceService({
1295
+ ...initParams
1296
+ }));
1699
1297
  const [stakeIntentService, time] = await Promise.all([
1700
- startupSpanAsync8("StakeIntentService", () => initStakeIntentService({
1298
+ startupSpanAsync7("StakeIntentService", () => initStakeIntentService({
1701
1299
  name: "StakeIntentService",
1702
- chainArchivist,
1703
- chainIterator,
1300
+ blockViewer,
1704
1301
  chainStakeViewer,
1705
1302
  stakeIntentStateArchivist,
1706
1303
  ...initParams
1707
1304
  })),
1708
- startupSpanAsync8("TimeService", () => initTimeService({
1305
+ startupSpanAsync7("TimeService", () => initTimeService({
1709
1306
  name: "TimeService",
1710
- chainArchivist,
1711
- chainIterator,
1307
+ blockViewer,
1712
1308
  ...initParams
1713
1309
  }))
1714
1310
  ]);
1715
- const electionService = await startupSpanAsync8("ElectionService", () => initElectionService({
1311
+ const electionService = await startupSpanAsync7("ElectionService", () => initElectionService({
1716
1312
  name: "ElectionService",
1717
- chainIterator,
1313
+ blockViewer,
1718
1314
  chainStakeViewer,
1719
1315
  stakeIntentService,
1720
1316
  ...initParams
@@ -1724,19 +1320,19 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
1724
1320
  account,
1725
1321
  chainId,
1726
1322
  pendingBundledTransactionsArchivist,
1727
- chainArchivist,
1323
+ blockViewer,
1728
1324
  electionService,
1729
1325
  rewardService,
1730
1326
  stakeIntentService,
1731
1327
  validateHydratedBlockState,
1732
1328
  ...initParams
1733
1329
  };
1734
- const rewardAddress = isDefined13(config2.producer.rewardAddress) ? assertEx18(asAddress2(config2.producer.rewardAddress), () => "Invalid block reward address provided") : account.address;
1330
+ const rewardAddress = isDefined14(config2.producer.rewardAddress) ? assertEx15(asAddress2(config2.producer.rewardAddress), () => "Invalid block reward address provided") : account.address;
1735
1331
  const producerParams = {
1736
1332
  ...validatorParams,
1737
1333
  name: "Producer",
1738
1334
  balanceService,
1739
- chainArchivist,
1335
+ blockViewer,
1740
1336
  pendingBundledTransactionsArchivist,
1741
1337
  pendingTransactionsService,
1742
1338
  rejectedTransactionsArchivist,
@@ -1744,13 +1340,12 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
1744
1340
  time,
1745
1341
  ...initParams
1746
1342
  };
1747
- const producer = await startupSpanAsync8("Producer", () => initBlockProducer(producerParams));
1343
+ const producer = await startupSpanAsync7("Producer", () => initBlockProducer(producerParams));
1748
1344
  const services = {
1749
1345
  account,
1750
1346
  balance: balanceService,
1751
- chainArchivist,
1752
1347
  chainContractViewer,
1753
- chainIterator,
1348
+ blockViewer,
1754
1349
  chainStaker,
1755
1350
  chainStakeViewer,
1756
1351
  chainSubmissionsArchivistWrite,
@@ -1766,7 +1361,7 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
1766
1361
  balanceSummaryMap,
1767
1362
  ...Object.values(services)
1768
1363
  ].filter(isStartable);
1769
- assertEx18((await Promise.all(startableServices.map((service) => service.start()))).every(Boolean), () => "One or more services failed to start");
1364
+ assertEx15((await Promise.all(startableServices.map((service) => service.start()))).every(Boolean), () => "One or more services failed to start");
1770
1365
  logger?.log("All services started successfully.");
1771
1366
  return {
1772
1367
  ...services,
@@ -1784,11 +1379,8 @@ var runProducer = /* @__PURE__ */ __name(async (context) => {
1784
1379
  ...services,
1785
1380
  config: config2
1786
1381
  };
1787
- const chainHeadUpdate = await ChainHeadUpdateActor.create({
1788
- ...params,
1789
- name: "ChainHeadUpdateActor"
1790
- });
1791
- const balances = await BalanceActor.create({
1382
+ const apiEndpoint = config2.services.apiEndpoint;
1383
+ const balances = isDefined15(apiEndpoint) ? void 0 : await BalanceActor.create({
1792
1384
  ...params,
1793
1385
  name: "BalanceActor"
1794
1386
  });
@@ -1797,10 +1389,9 @@ var runProducer = /* @__PURE__ */ __name(async (context) => {
1797
1389
  name: "ProducerActor"
1798
1390
  });
1799
1391
  const actors = [
1800
- chainHeadUpdate,
1801
1392
  balances,
1802
1393
  producer
1803
- ];
1394
+ ].filter(exists);
1804
1395
  for (const actor of actors) {
1805
1396
  await orchestrator.registerActor(actor);
1806
1397
  }
@@ -1835,16 +1426,16 @@ var XL1LogoColorizedAscii = `\x1B[38;2;128;128;128m\xA0\xA0\xA0\xA0\xA0\xA0\xA0\
1835
1426
  \x1B[38;2;128;128;128m\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\x1B[0m\x1B[38;2;108;93;162m\xB2\x1B[0m\x1B[38;2;99;79;176m^\x1B[0m`;
1836
1427
 
1837
1428
  // src/initLogger.ts
1838
- import { Base as Base2, ConsoleLogger, isDefined as isDefined14, LogLevel, SilentLogger } from "@xylabs/sdk-js";
1429
+ import { Base as Base2, ConsoleLogger, isDefined as isDefined16, LogLevel, SilentLogger } from "@xylabs/sdk-js";
1839
1430
  var initLogger = /* @__PURE__ */ __name((config2) => {
1840
1431
  let logger;
1841
1432
  if (config2.silent) {
1842
1433
  logger = new SilentLogger();
1843
1434
  } else {
1844
1435
  let level;
1845
- if (isDefined14(config2.logLevel)) {
1436
+ if (isDefined16(config2.logLevel)) {
1846
1437
  const parsed = LogLevel[config2.logLevel.toLowerCase()];
1847
- if (isDefined14(parsed)) level = parsed;
1438
+ if (isDefined16(parsed)) level = parsed;
1848
1439
  }
1849
1440
  logger = new ConsoleLogger(level);
1850
1441
  }
@@ -1870,7 +1461,7 @@ var optionsFromGlobalZodRegistry = /* @__PURE__ */ __name(() => {
1870
1461
  }, "optionsFromGlobalZodRegistry");
1871
1462
 
1872
1463
  // src/tryParseConfig.ts
1873
- import { isDefined as isDefined15, isNull } from "@xylabs/sdk-js";
1464
+ import { isDefined as isDefined17, isNull } from "@xylabs/sdk-js";
1874
1465
  import { cosmiconfigSync } from "cosmiconfig";
1875
1466
  var configName = "xyo";
1876
1467
  var configSection = "xl1";
@@ -1879,7 +1470,7 @@ var tryParseConfig = /* @__PURE__ */ __name(() => {
1879
1470
  const result = explorer.search();
1880
1471
  if (!isNull(result)) {
1881
1472
  const section = result?.config?.[configSection];
1882
- if (isDefined15(section) && typeof section === "object") {
1473
+ if (isDefined17(section) && typeof section === "object") {
1883
1474
  return section;
1884
1475
  }
1885
1476
  }
@@ -1909,7 +1500,7 @@ var waitForHostPort = /* @__PURE__ */ __name((host, port) => {
1909
1500
 
1910
1501
  // src/runCLI.ts
1911
1502
  var configuration;
1912
- var version = isDefined16("1.16.25") ? "1.16.25" : "unknown";
1503
+ var version = isDefined18("1.16.26") ? "1.16.26" : "unknown";
1913
1504
  var getContextFromConfig = /* @__PURE__ */ __name((configuration2) => {
1914
1505
  const logger = initLogger(configuration2);
1915
1506
  const orchestrator = new Orchestrator(logger);