@xyo-network/chain-orchestration 1.19.5 → 1.19.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/neutral/createDeclarationIntentBlock.d.ts +6 -4
  2. package/dist/neutral/createDeclarationIntentBlock.d.ts.map +1 -1
  3. package/dist/neutral/evm/index.d.ts +3 -0
  4. package/dist/neutral/evm/index.d.ts.map +1 -1
  5. package/dist/neutral/evm/initChainId.d.ts +2 -2
  6. package/dist/neutral/evm/initChainId.d.ts.map +1 -1
  7. package/dist/neutral/evm/initEvmProvider.d.ts +2 -2
  8. package/dist/neutral/evm/initEvmProvider.d.ts.map +1 -1
  9. package/dist/neutral/evm/initInfuraProvider.d.ts +4 -4
  10. package/dist/neutral/evm/initInfuraProvider.d.ts.map +1 -1
  11. package/dist/neutral/evm/initJsonRpcProvider.d.ts +3 -3
  12. package/dist/neutral/evm/initJsonRpcProvider.d.ts.map +1 -1
  13. package/dist/neutral/index.mjs +60 -55
  14. package/dist/neutral/index.mjs.map +1 -1
  15. package/dist/neutral/init/index.d.ts +1 -1
  16. package/dist/neutral/init/index.d.ts.map +1 -1
  17. package/dist/neutral/init/initEvmProvidersIfAvailable.d.ts +3 -0
  18. package/dist/neutral/init/initEvmProvidersIfAvailable.d.ts.map +1 -0
  19. package/dist/neutral/orchestrator/Orchestrator.d.ts +4 -4
  20. package/dist/neutral/orchestrator/Orchestrator.d.ts.map +1 -1
  21. package/package.json +11 -12
  22. package/src/evm/index.ts +3 -0
  23. package/src/evm/initChainId.ts +2 -2
  24. package/src/evm/initEvmProvider.ts +3 -4
  25. package/src/evm/initInfuraProvider.ts +5 -4
  26. package/src/evm/initJsonRpcProvider.ts +3 -3
  27. package/src/init/index.ts +1 -1
  28. package/src/init/initEvmProvidersIfAvailable.ts +78 -0
  29. package/src/orchestrator/Orchestrator.ts +4 -4
  30. package/dist/neutral/init/initChainStakeViewer.d.ts +0 -10
  31. package/dist/neutral/init/initChainStakeViewer.d.ts.map +0 -1
  32. package/src/init/initChainStakeViewer.ts +0 -56
@@ -18,8 +18,6 @@ export declare function createProducerChainStakeIntentBlock(prevBlock: WithHashM
18
18
  chain: import("@xylabs/hex").BrandedHex;
19
19
  previous: import("@xylabs/hex").BrandedHash | null;
20
20
  $epoch: number;
21
- _hash: import("@xylabs/hex").BrandedHash;
22
- _dataHash: import("@xylabs/hex").BrandedHash;
23
21
  $destination?: (Lowercase<string> & {
24
22
  readonly __hex: true;
25
23
  } & {
@@ -28,9 +26,13 @@ export declare function createProducerChainStakeIntentBlock(prevBlock: WithHashM
28
26
  $sourceQuery?: import("@xylabs/hex").BrandedHash | undefined;
29
27
  protocol?: number | undefined;
30
28
  step_hashes?: import("@xylabs/hex").BrandedHash[] | undefined;
31
- }, {
29
+ } & {
30
+ _hash: import("@xylabs/hex").BrandedHash;
31
+ _dataHash: import("@xylabs/hex").BrandedHash;
32
+ }, ({
32
33
  schema: import("@xyo-network/payload-model").BrandedSchema<string>;
34
+ } & {
33
35
  _hash: import("@xylabs/hex").BrandedHash;
34
36
  _dataHash: import("@xylabs/hex").BrandedHash;
35
- }[]]>;
37
+ })[]]>;
36
38
  //# sourceMappingURL=createDeclarationIntentBlock.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createDeclarationIntentBlock.d.ts","sourceRoot":"","sources":["../../src/createDeclarationIntentBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAEjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAG5E,wBAAsB,mCAAmC,CAAC,SAAS,EAAE,YAAY,CAAC,iBAAiB,CAAC,EAAE,eAAe,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAa3J"}
1
+ {"version":3,"file":"createDeclarationIntentBlock.d.ts","sourceRoot":"","sources":["../../src/createDeclarationIntentBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAEjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAG5E,wBAAsB,mCAAmC,CAAC,SAAS,EAAE,YAAY,CAAC,iBAAiB,CAAC,EAAE,eAAe,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAa3J"}
@@ -1,2 +1,5 @@
1
+ export * from './initChainId.ts';
1
2
  export * from './initEvmProvider.ts';
3
+ export * from './initInfuraProvider.ts';
4
+ export * from './initJsonRpcProvider.ts';
2
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/evm/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/evm/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA"}
@@ -1,4 +1,4 @@
1
1
  import type { Config } from '@xyo-network/xl1-sdk';
2
- export declare const canUseChainId: (config: Pick<Config, "evm">) => boolean;
3
- export declare const getChainId: (config: Pick<Config, "evm">) => number;
2
+ export declare const canUseChainId: (config: Config) => boolean;
3
+ export declare const getChainId: (config: Config) => number;
4
4
  //# sourceMappingURL=initChainId.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"initChainId.d.ts","sourceRoot":"","sources":["../../../src/evm/initChainId.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAElD,eAAO,MAAM,aAAa,GAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAG,OAE3D,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,WAUrD,CAAA"}
1
+ {"version":3,"file":"initChainId.d.ts","sourceRoot":"","sources":["../../../src/evm/initChainId.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAElD,eAAO,MAAM,aAAa,GAAI,QAAQ,MAAM,KAAG,OAE9C,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,WAUxC,CAAA"}
@@ -2,10 +2,10 @@ import type { Logger } from '@xylabs/sdk-js';
2
2
  import type { Config } from '@xyo-network/xl1-sdk';
3
3
  import type { Provider } from 'ethers';
4
4
  export declare const initEvmProvider: ({ config }: {
5
- config: Pick<Config, "evm">;
5
+ config: Config;
6
6
  logger?: Logger;
7
7
  }) => Promise<Provider>;
8
8
  export declare const canUseEvmProvider: ({ config }: {
9
- config: Pick<Config, "evm">;
9
+ config: Config;
10
10
  }) => boolean;
11
11
  //# sourceMappingURL=initEvmProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"initEvmProvider.d.ts","sourceRoot":"","sources":["../../../src/evm/initEvmProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAE5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAQtC,eAAO,MAAM,eAAe,GAAU,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,KAAG,OAAO,CAAC,QAAQ,CAQpH,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;CAAE,YAE5E,CAAA"}
1
+ {"version":3,"file":"initEvmProvider.d.ts","sourceRoot":"","sources":["../../../src/evm/initEvmProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAE5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAOtC,eAAO,MAAM,eAAe,GAAU,YAAY;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,KAAG,OAAO,CAAC,QAAQ,CAQvG,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,YAAY;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,YAE/D,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import type { Config } from '@xyo-network/xl1-sdk';
2
- import { InfuraProvider } from 'ethers/providers';
3
- export declare const initInfuraProvider: (config: Pick<Config, "evm">) => Promise<InfuraProvider>;
4
- export declare const canUseInfuraProvider: (config: Pick<Config, "evm">) => boolean;
5
- export declare const getInfuraProviderConfig: (config: Pick<Config, "evm">) => readonly [number, string, string];
2
+ import type { Provider } from 'ethers';
3
+ export declare const initInfuraProvider: (config: Config) => Promise<Provider>;
4
+ export declare const canUseInfuraProvider: (config: Config) => boolean;
5
+ export declare const getInfuraProviderConfig: (config: Config) => readonly [number, string, string];
6
6
  //# sourceMappingURL=initInfuraProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"initInfuraProvider.d.ts","sourceRoot":"","sources":["../../../src/evm/initInfuraProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAMjD,eAAO,MAAM,kBAAkB,GAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,4BAK7D,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAG,OAIlE,CAAA;AAED,eAAO,MAAM,uBAAuB,GAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,sCAIlE,CAAA"}
1
+ {"version":3,"file":"initInfuraProvider.d.ts","sourceRoot":"","sources":["../../../src/evm/initInfuraProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAOtC,eAAO,MAAM,kBAAkB,GAAI,QAAQ,MAAM,KAAG,OAAO,CAAC,QAAQ,CAKnE,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,QAAQ,MAAM,KAAG,OAIrD,CAAA;AAED,eAAO,MAAM,uBAAuB,GAAI,QAAQ,MAAM,sCAIrD,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import type { Config } from '@xyo-network/xl1-sdk';
2
2
  import { JsonRpcProvider } from 'ethers/providers';
3
- export declare const initJsonRpcProvider: (config: Pick<Config, "evm">) => Promise<JsonRpcProvider>;
4
- export declare const canUseJsonRpcProvider: (config: Pick<Config, "evm">) => boolean;
5
- export declare const getJsonRpcProviderConfig: (config: Pick<Config, "evm">) => readonly [string, number];
3
+ export declare const initJsonRpcProvider: (config: Config) => Promise<JsonRpcProvider>;
4
+ export declare const canUseJsonRpcProvider: (config: Config) => boolean;
5
+ export declare const getJsonRpcProviderConfig: (config: Config) => readonly [string, number];
6
6
  //# sourceMappingURL=initJsonRpcProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"initJsonRpcProvider.d.ts","sourceRoot":"","sources":["../../../src/evm/initJsonRpcProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAIlD,eAAO,MAAM,mBAAmB,GAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,6BAG9D,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,YAGhE,CAAA;AAED,eAAO,MAAM,wBAAwB,GAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,8BAGnE,CAAA"}
1
+ {"version":3,"file":"initJsonRpcProvider.d.ts","sourceRoot":"","sources":["../../../src/evm/initJsonRpcProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAIlD,eAAO,MAAM,mBAAmB,GAAI,QAAQ,MAAM,6BAGjD,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,QAAQ,MAAM,YAGnD,CAAA;AAED,eAAO,MAAM,wBAAwB,GAAI,QAAQ,MAAM,8BAGtD,CAAA"}
@@ -400,13 +400,6 @@ async function createProducerChainStakeIntentBlock(prevBlock, producerAccount, r
400
400
  }
401
401
  __name(createProducerChainStakeIntentBlock, "createProducerChainStakeIntentBlock");
402
402
 
403
- // src/evm/initEvmProvider.ts
404
- import { assertEx as assertEx9 } from "@xylabs/sdk-js";
405
-
406
- // src/evm/initInfuraProvider.ts
407
- import { assertEx as assertEx7, isDefined as isDefined2 } from "@xylabs/sdk-js";
408
- import { InfuraProvider } from "ethers/providers";
409
-
410
403
  // src/evm/initChainId.ts
411
404
  import { assertEx as assertEx6, hexFrom, isDefined, isHex } from "@xylabs/sdk-js";
412
405
  var canUseChainId = /* @__PURE__ */ __name((config) => {
@@ -426,12 +419,17 @@ var getChainId = /* @__PURE__ */ __name((config) => {
426
419
  }
427
420
  }, "getChainId");
428
421
 
422
+ // src/evm/initEvmProvider.ts
423
+ import { assertEx as assertEx9 } from "@xylabs/sdk-js";
424
+
429
425
  // src/evm/initInfuraProvider.ts
426
+ import { assertEx as assertEx7, isDefined as isDefined2 } from "@xylabs/sdk-js";
427
+ import { InfuraProvider } from "ethers/providers";
430
428
  var instance;
431
429
  var initInfuraProvider = /* @__PURE__ */ __name((config) => {
432
430
  if (instance) return instance;
433
431
  const providerConfig = getInfuraProviderConfig(config);
434
- instance = Promise.resolve(new InfuraProvider(...providerConfig));
432
+ instance = Promise.resolve(new InfuraProvider(providerConfig[0], providerConfig[1]));
435
433
  return instance;
436
434
  }, "initInfuraProvider");
437
435
  var canUseInfuraProvider = /* @__PURE__ */ __name((config) => {
@@ -640,56 +638,57 @@ var initBridgedArchivistModule = /* @__PURE__ */ __name(async ({ bridge, moduleN
640
638
  })), () => `Could not convert ${moduleName} to attachable archivist instance`);
641
639
  }, "initBridgedArchivistModule");
642
640
 
643
- // src/init/initChainStakeViewer.ts
644
- import { asAddress, assertEx as assertEx12, toAddress, toEthAddress } from "@xylabs/sdk-js";
645
- import { EvmStakeEventsViewer, EvmStakeViewer } from "@xyo-network/chain-sdk";
646
- import { IStakedXyoChain__factory } from "@xyo-network/typechain";
647
- import { SimpleStakeViewer } from "@xyo-network/xl1-sdk";
648
- async function initEvmChainStakeViewer(context, config, logger) {
649
- const provider2 = await initEvmProvider({
650
- config,
651
- logger
652
- });
653
- const contractAddress = assertEx12(config.chain.id, () => "Missing config.evm.chainId");
654
- const contract = IStakedXyoChain__factory.connect(toEthAddress(contractAddress), provider2);
655
- const stakeEventsViewer = await EvmStakeEventsViewer.create({
656
- contract,
657
- logger,
658
- context
659
- });
660
- assertEx12(await stakeEventsViewer.start(), () => "Failed to start EvmStakeEvents reader");
661
- const stakeChainViewer = await EvmStakeViewer.create({
662
- contract,
663
- stakeEventsViewer,
664
- logger,
665
- context
666
- });
667
- assertEx12(await stakeChainViewer.start(), () => "Failed to start EvmStake viewer");
668
- return stakeChainViewer;
669
- }
670
- __name(initEvmChainStakeViewer, "initEvmChainStakeViewer");
671
- async function initSimpleStakeViewer(context, config, logger) {
672
- const stakeViewer = await SimpleStakeViewer.create({
673
- context,
674
- chainId: asAddress(toAddress(1n), true),
675
- logger,
676
- positions: []
677
- });
678
- assertEx12(await stakeViewer.start(), () => "Failed to start SimpleChainStake viewer");
679
- return stakeViewer;
680
- }
681
- __name(initSimpleStakeViewer, "initSimpleStakeViewer");
682
- async function initStakeViewer({ config, logger, context }) {
641
+ // src/init/initEvmProvidersIfAvailable.ts
642
+ import { asEthAddress, assertEx as assertEx12 } from "@xylabs/sdk-js";
643
+ import { EvmChainContractViewer, EvmStakeEventsViewer, EvmStakeViewer } from "@xyo-network/chain-ethereum";
644
+ import { SimpleChainContractViewer, SimpleStakeEventsViewer, SimpleStakeViewer, SimpleTimeSyncViewer, XYO_ZERO_ADDRESS } from "@xyo-network/xl1-sdk";
645
+ async function initEvmProvidersIfAvailable(locator) {
646
+ const { config, logger } = locator.context;
683
647
  if (canUseEvmProvider({
684
648
  config
685
649
  })) {
686
- return await initEvmChainStakeViewer(context, config, logger);
650
+ const chainId = assertEx12(config.chain.id, () => "Missing config.chain.chainId (required for EVM providers)");
651
+ const provider2 = await initEvmProvider({
652
+ config,
653
+ logger
654
+ });
655
+ const address = asEthAddress(chainId, true);
656
+ locator.register(EvmStakeEventsViewer.factory(EvmStakeEventsViewer.dependencies, {
657
+ address,
658
+ provider: provider2
659
+ }));
660
+ locator.register(EvmStakeViewer.factory(EvmStakeViewer.dependencies, {
661
+ address,
662
+ provider: provider2
663
+ }));
664
+ locator.register(EvmChainContractViewer.factory(EvmChainContractViewer.dependencies, {
665
+ address,
666
+ provider: provider2
667
+ }));
668
+ locator.register(SimpleTimeSyncViewer.factory(SimpleTimeSyncViewer.dependencies, {
669
+ ethProvider: provider2
670
+ }));
687
671
  } else {
688
- console.warn("[API] Infura configuration not found. Using SimpleChainStakeViewer with no positions. This means no staking data will be available.");
689
- return await initSimpleStakeViewer(context, config, logger);
672
+ logger?.warn("EVM provider not available - running with memory based contract/stake viewers");
673
+ const positions = [];
674
+ const chainId = assertEx12(config.chain.id, () => "Missing config.chain.chainId (required for non-EVM providers)");
675
+ locator.register(SimpleStakeEventsViewer.factory(SimpleStakeEventsViewer.dependencies, {
676
+ positions
677
+ }));
678
+ locator.register(SimpleStakeViewer.factory(SimpleStakeViewer.dependencies, {
679
+ positions
680
+ }));
681
+ locator.register(SimpleChainContractViewer.factory(SimpleChainContractViewer.dependencies, {
682
+ chainId,
683
+ minWithdrawalBlocks: 10,
684
+ stakingTokenAddress: XYO_ZERO_ADDRESS,
685
+ rewardsContract: XYO_ZERO_ADDRESS
686
+ }));
687
+ locator.register(SimpleTimeSyncViewer.factory(SimpleTimeSyncViewer.dependencies, {}));
690
688
  }
689
+ return locator;
691
690
  }
692
- __name(initStakeViewer, "initStakeViewer");
691
+ __name(initEvmProvidersIfAvailable, "initEvmProvidersIfAvailable");
693
692
 
694
693
  // src/init/initFinalizedArchivist.ts
695
694
  import { MongoDBArchivistV2 } from "@xyo-network/archivist-mongodb";
@@ -1213,18 +1212,26 @@ export {
1213
1212
  ServiceLifetime,
1214
1213
  ValidatorActor,
1215
1214
  buildTelemetryConfig,
1215
+ canUseChainId,
1216
1216
  canUseEvmProvider,
1217
+ canUseInfuraProvider,
1218
+ canUseJsonRpcProvider,
1217
1219
  createProducerChainStakeIntentBlock,
1220
+ getChainId,
1221
+ getInfuraProviderConfig,
1222
+ getJsonRpcProviderConfig,
1218
1223
  getLocator,
1219
1224
  initApiWallet,
1220
1225
  initBalanceSummaryMap,
1221
1226
  initBridgedArchivistModule,
1222
1227
  initBridgedModule,
1223
1228
  initChainFinalizedArchivist,
1224
- initEvmChainStakeViewer,
1225
1229
  initEvmProvider,
1230
+ initEvmProvidersIfAvailable,
1226
1231
  initFinalizedArchivist,
1227
1232
  initHealthEndpoints,
1233
+ initInfuraProvider,
1234
+ initJsonRpcProvider,
1228
1235
  initMempoolWallet,
1229
1236
  initPendingBlocksArchivist,
1230
1237
  initProducerAccount,
@@ -1233,9 +1240,7 @@ export {
1233
1240
  initRewardsRedemptionApiWallet,
1234
1241
  initSeedPhrase,
1235
1242
  initServerNode,
1236
- initSimpleStakeViewer,
1237
1243
  initStakeIntentStateArchivist,
1238
- initStakeViewer,
1239
1244
  initStatusReporter,
1240
1245
  initTransferSummaryMap,
1241
1246
  loadNode
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/actor/BalanceActor.ts","../../src/actor/MempoolActor.ts","../../src/actor/ValidatorActor.ts","../../src/archivists/ChainFinalized/archivist.ts","../../src/archivists/ChainFinalized/local.ts","../../src/archivists/lib/localPersistentArchivist.ts","../../src/archivists/PendingBlocks/archivist.ts","../../src/archivists/PendingBlocks/local.ts","../../src/archivists/RejectedTransactions/archivist.ts","../../src/archivists/RejectedTransactions/local.ts","../../src/archivists/StakeIntentState/archivist.ts","../../src/archivists/StakeIntentState/local.ts","../../src/buildTelemetryConfig.ts","../../src/createDeclarationIntentBlock.ts","../../src/evm/initEvmProvider.ts","../../src/evm/initInfuraProvider.ts","../../src/evm/initChainId.ts","../../src/evm/initJsonRpcProvider.ts","../../src/health/initHealthEndpoints.ts","../../src/host/implementation/DefaultHost.ts","../../src/host/implementation/DefaultServiceProvider.ts","../../src/host/model/ServiceCollection.ts","../../src/init/initBalanceSummaryMap.ts","../../src/init/initBridgedModule.ts","../../src/init/initChainStakeViewer.ts","../../src/init/initFinalizedArchivist.ts","../../src/init/initProducerAccount.ts","../../src/init/initSeedPhrase.ts","../../src/init/initServerNode.ts","../../src/manifest/getLocator.ts","../../src/manifest/loadNode.ts","../../src/manifest/node.json","../../src/manifest/nodeManifest.ts","../../src/manifest/private/index.ts","../../src/manifest/public/Chain.json","../../src/manifest/public/Pending.json","../../src/manifest/public/index.ts","../../src/init/initStatusReporter.ts","../../src/init/initTransferSummaryMap.ts","../../src/init/initWallet.ts","../../src/orchestrator/Orchestrator.ts"],"sourcesContent":["import { assertEx } from '@xylabs/sdk-js'\nimport type {\n AccountBalanceViewer,\n ActorParams, BlockViewer, Config,\n} from '@xyo-network/xl1-sdk'\nimport { Actor } from '@xyo-network/xl1-sdk'\nimport { Mutex } from 'async-mutex'\n\nexport type BalanceActorParams = ActorParams<\n {\n accountBalanceViewer: AccountBalanceViewer\n blockViewer: BlockViewer\n }\n & { config: Config }>\n\nexport class BalanceActor extends Actor<BalanceActorParams> {\n protected _updateMutex = new Mutex()\n\n protected get accountBalanceViewer() {\n return assertEx(this.params.accountBalanceViewer, () => 'balanceService not set')\n }\n\n protected get blockViewer() {\n return assertEx(this.params.blockViewer, () => 'blockViewer not set')\n }\n\n override async startHandler(): Promise<void> {\n await super.startHandler()\n this.registerTimer('BalanceTimer', async () => {\n await this.updateBalance()\n }, 1000, 10_000/* 1000 */)\n }\n\n protected async updateBalance(): Promise<void> {\n if (this._updateMutex.isLocked()) return\n await this._updateMutex.runExclusive(async () => {\n const head = await this.blockViewer.currentBlockHash()\n await this.accountBalanceViewer.accountBalances([], { head })\n })\n }\n}\n","import {\n assertEx,\n creatable,\n} from '@xylabs/sdk-js'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport {\n Actor, ActorParams,\n MempoolRunner,\n} from '@xyo-network/xl1-sdk'\nimport { Mutex } from 'async-mutex'\n\nexport type MempoolActorParams = ActorParams<{\n mempoolRunner: MempoolRunner\n pendingBlocksArchivist: ArchivistInstance\n pendingTransactionsArchivist: ArchivistInstance\n}>\n\n@creatable()\nexport class MempoolActor extends Actor<MempoolActorParams> {\n private _blockTimerId: ReturnType<typeof setInterval> | null = null\n private _blockTimerMutex = new Mutex()\n\n private _transactionTimerId: ReturnType<typeof setInterval> | null = null\n private _transactionTimerMutex = new Mutex()\n\n protected get mempoolRunner() {\n return this.params.mempoolRunner\n }\n\n protected get pendingBlocksArchivist() {\n return this.params.pendingBlocksArchivist\n }\n\n protected get pendingTransactionsArchivist() {\n return this.params.pendingTransactionsArchivist\n }\n\n static override async paramsHandler(params?: Partial<MempoolActorParams>) {\n return {\n ...await super.paramsHandler(params),\n mempoolRunner: assertEx(\n params?.mempoolRunner,\n () => 'mempoolRunner is required for MempoolActor',\n ),\n pendingBlocksArchivist: assertEx(\n params?.pendingBlocksArchivist,\n () => 'pendingBlocksArchivist is required for MempoolActor',\n ),\n pendingTransactionsArchivist: assertEx(\n params?.pendingTransactionsArchivist,\n () => 'pendingTransactionsArchivist is required for MempoolActor',\n ),\n } satisfies MempoolActorParams\n }\n\n override async startHandler() {\n await super.startHandler()\n // this.restartTransactionTimer()\n this.restartBlockTimer()\n }\n\n override async stopHandler() {\n await super.stopHandler()\n // this.stopTransactionTimer()\n this.stopBlockTimer()\n }\n\n private restartBlockTimer() {\n this.stopBlockTimer()\n this._blockTimerId = setInterval(() => {\n if (this._blockTimerMutex.isLocked()) {\n return\n }\n void this._blockTimerMutex.runExclusive(async () => {\n await this.mempoolRunner.prunePendingBlocks({ batchSize: 50 })\n })\n }, 1000)\n }\n\n private restartTransactionTimer() {\n this.stopTransactionTimer()\n this._transactionTimerId = setInterval(() => {\n if (this._transactionTimerMutex.isLocked()) {\n return\n }\n void this._transactionTimerMutex.runExclusive(async () => {\n await this.mempoolRunner.prunePendingTransactions({ batchSize: 50 })\n })\n }, 1000)\n }\n\n private stopBlockTimer() {\n if (this._blockTimerId !== null) {\n clearInterval(this._blockTimerId)\n }\n this._blockTimerId = null\n }\n\n private stopTransactionTimer() {\n if (this._transactionTimerId !== null) {\n clearInterval(this._transactionTimerId)\n }\n this._transactionTimerId = null\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { assertEx, creatable } from '@xylabs/sdk-js'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { processPendingBlocks } from '@xyo-network/chain-sdk'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { BlockBoundWitness } from '@xyo-network/xl1-sdk'\nimport {\n Actor,\n ActorParams,\n BlockViewer,\n MempoolViewer,\n} from '@xyo-network/xl1-sdk'\n\nexport type ValidatorActorParams = ActorParams<\n {\n account: AccountInstance\n blockViewer: BlockViewer\n finalizedArchivist: ArchivistInstance\n mempoolViewer: MempoolViewer\n }>\n\n@creatable()\nexport class ValidatorActor extends Actor<ValidatorActorParams> {\n protected _lastValidatedBlock: BlockBoundWitness | undefined\n protected _lastValidatedBlockHash: Hash | undefined\n\n protected get blockViewer() {\n return this.params.blockViewer\n }\n\n protected get finalizedArchivist() {\n return assertEx(this.params.finalizedArchivist, () => 'finalizedArchivist not set')\n }\n\n protected get mempoolViewer() {\n return this.params.mempoolViewer\n }\n\n static override async paramsHandler(params?: Partial<ValidatorActorParams>) {\n return {\n ...await super.paramsHandler(params),\n mempoolViewer: assertEx(\n params?.mempoolViewer,\n () => 'mempoolViewer is required for ValidatorActor',\n ),\n blockViewer: assertEx(\n params?.blockViewer,\n () => 'blockViewer is required for ValidatorActor',\n ),\n finalizedArchivist: assertEx(\n params?.finalizedArchivist,\n () => 'finalizedArchivist is required for ValidatorActor',\n ),\n account: assertEx(\n params?.account,\n () => 'account is required for ValidatorActor',\n ),\n } satisfies ValidatorActorParams\n }\n\n override async startHandler(): Promise<void> {\n await super.startHandler()\n this.registerTimer('ValidatorActor', async () => {\n await this.spanAsync('processPendingBlocks', async () => {\n console.log('ValidatorActor: Processing pending blocks...')\n await processPendingBlocks({\n context: this.context,\n logger: this.logger,\n mempoolViewer: this.mempoolViewer,\n blockViewer: this.blockViewer,\n finalizedArchivist: this.finalizedArchivist,\n })\n }, { ...this.context, timeBudgetLimit: 1500 })\n }, 2000, 1500/* 500 */)\n }\n\n protected async slashInvalidBlock(_block: BlockBoundWitness): Promise<boolean> {\n // TODO: Handle slashing logic\n const slashed = await Promise.resolve(true)\n return slashed\n }\n\n protected async validateBlock(block: BlockBoundWitness): Promise<boolean> {\n // TODO: Validate using validation logic\n const valid = await Promise.resolve(true)\n // Store the last validated block and its hash\n this._lastValidatedBlock = block\n this._lastValidatedBlockHash = await PayloadBuilder.hash(block)\n\n // Return the validation result\n return valid\n }\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { startupSpanAsync } from '@xyo-network/chain-utils'\nimport { timeBudget } from '@xyo-network/xl1-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport type { ChainInitializableParams } from '../../ChainInitializableParams.ts'\nimport { initLocalChainFinalizedArchivist } from './local.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport async function initChainFinalizedArchivist(context: ChainInitializableParams) {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n return await timeBudget('initChainFinalizedArchivist', context.logger, async () => {\n const local = await startupSpanAsync('ChainFinalizedArchivist:initLocal', () => initLocalChainFinalizedArchivist(context))\n singleton = local\n return singleton\n }, 2000, true)\n })\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { CreatableProviderContext, Initializable } from '@xyo-network/xl1-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport { getLocalPersistentArchivist } from '../lib/index.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initLocalChainFinalizedArchivist: Initializable<CreatableProviderContext, ArchivistInstance> = async ({ config }): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const { root } = config.storage\n singleton = await getLocalPersistentArchivist('local-finalized-chain', 'chain', 'finalized', root)\n return singleton\n })\n}\n","import { rm } from 'node:fs/promises'\nimport Path from 'node:path'\n\nimport { LmdbArchivist, LmdbArchivistConfigSchema } from '@xyo-network/archivist-lmdb'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { getStoreDirectory, type StoreKind } from '@xyo-network/chain-protocol'\n\nconst DEFAULT_STORAGE_ROOT = Path.join(process.cwd(), '.store')\n\n/**\n * Returns a local persistent archivist\n * @param name The name of the archivist\n * @param dbName The name of the database\n * @param storeName The name of the store\n * @param storageRoot The root directory for storage (default is '.store' in the current working directory)\n * @param kind The kind of the archivist\n * @returns an archivist instance\n */\nexport const getLocalPersistentArchivist = (\n name: string,\n dbName: string,\n storeName: string,\n storageRoot?: string,\n kind: StoreKind = 'lmdb',\n): Promise<ArchivistInstance> => {\n switch (kind) {\n case 'lmdb': {\n const root = storageRoot ?? DEFAULT_STORAGE_ROOT\n return LmdbArchivist.create({\n account: 'random',\n config: {\n name,\n clearStoreOnStart: false,\n dbName,\n location: getStoreDirectory(dbName, root, 'lmdb'),\n schema: LmdbArchivistConfigSchema,\n storeName,\n },\n })\n }\n }\n}\n\n/**\n * Deletes a local persistent archivist\n * @param dbName The name of the database\n * @param storageRoot The root directory for storage (default is '.store' in the current working directory)\n * @param kind The kind of the archivist\n * @returns A promise that resolves when the archivist is deleted\n */\nexport const deleteLocalPersistentArchivist = async (dbName: string, storageRoot?: string, kind: StoreKind = 'lmdb'): Promise<void> => {\n await Promise.resolve()\n console.warn(`Deleting local persistent archivist for ${dbName} of kind ${kind}.`)\n let location = ''\n switch (kind) {\n case 'lmdb': {\n const root = storageRoot ?? DEFAULT_STORAGE_ROOT\n location = getStoreDirectory(dbName, root, 'lmdb')\n break\n }\n }\n await rm(location, { recursive: true, force: true })\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { startupSpanAsync } from '@xyo-network/chain-utils'\nimport { timeBudget } from '@xyo-network/xl1-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport type { ChainInitializableParams } from '../../ChainInitializableParams.ts'\nimport { initLocalPendingBlocksArchivist } from './local.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport async function initPendingBlocksArchivist(context: ChainInitializableParams) {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n return await timeBudget('initPendingBlocksArchivist', context.logger, async () => {\n const local = await startupSpanAsync('PendingBlocksArchivist:initLocal', () => initLocalPendingBlocksArchivist(context))\n singleton = local\n return singleton\n }, 2000, true)\n })\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { Config, Initializable } from '@xyo-network/xl1-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport { getLocalPersistentArchivist } from '../lib/index.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initLocalPendingBlocksArchivist: Initializable<{ config: Config }, ArchivistInstance> = async ({ config }): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const { root } = config.storage\n singleton = await getLocalPersistentArchivist('local-pending-blocks', 'chain', 'pending_block_bundles', root)\n return singleton\n })\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { startupSpanAsync } from '@xyo-network/chain-utils'\nimport type { InitializableParams } from '@xyo-network/xl1-sdk'\nimport { timeBudget } from '@xyo-network/xl1-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport { initLocalRejectedTransactionsArchivist } from './local.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport async function initRejectedTransactionsArchivist(params: InitializableParams) {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n return await timeBudget('initRejectedTransactionsArchivist', params.logger, async () => {\n const local = await startupSpanAsync('RejectedTransactionsArchivist:initLocal', () => initLocalRejectedTransactionsArchivist(params))\n singleton = local\n return singleton\n }, 2000, true)\n })\n}\n","import { MemoryArchivist, MemoryArchivistConfigSchema } from '@xyo-network/archivist-memory'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { Initializable } from '@xyo-network/xl1-sdk'\nimport { Mutex } from 'async-mutex'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initLocalRejectedTransactionsArchivist: Initializable<{}, ArchivistInstance> = async (): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n singleton = await MemoryArchivist.create({\n account: 'random',\n config: {\n schema: MemoryArchivistConfigSchema, max: 1000, name: 'localRejectedTransactions',\n },\n })\n return singleton\n })\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { startupSpanAsync } from '@xyo-network/chain-utils'\nimport type { Initializable } from '@xyo-network/xl1-sdk'\nimport { timeBudget } from '@xyo-network/xl1-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport type { ChainInitializableParams } from '../../ChainInitializableParams.ts'\nimport { initLocalStakeIntentStateArchivist } from './local.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initStakeIntentStateArchivist: Initializable<ChainInitializableParams, ArchivistInstance>\n = async (context: ChainInitializableParams): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n return await timeBudget('initStakeIntentStateArchivist', context.logger, async () => {\n const local = await startupSpanAsync('StakeIntentStateArchivist:initLocal', () => initLocalStakeIntentStateArchivist(context))\n singleton = local\n return assertEx(singleton, () => 'StakeIntentStateArchivist is undefined')\n }, 2000, true)\n })\n }\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { Initializable } from '@xyo-network/xl1-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport type { ChainInitializableParams } from '../../ChainInitializableParams.ts'\nimport { getLocalPersistentArchivist } from '../lib/index.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initLocalStakeIntentStateArchivist: Initializable<ChainInitializableParams,\n ArchivistInstance> = async ({ config }): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const { root } = config.storage\n singleton = await getLocalPersistentArchivist('local-stake-intent-state', 'stakeIntent', 'state', root)\n return assertEx(singleton, () => new Error('Failed to initialize stake intent state archivist'))\n })\n}\n","import type { Config } from '@xyo-network/xl1-sdk'\n\nexport function buildTelemetryConfig(config: Config, serviceName: string, serviceVersion: string, defaultMetricsScrapePort = 9464) {\n const { otlpEndpoint } = config.telemetry?.otel ?? {}\n const { path: endpoint = '/metrics', port = defaultMetricsScrapePort } = config.telemetry?.metrics?.scrape ?? {}\n const telemetryConfig = {\n attributes: { serviceName, serviceVersion }, otlpEndpoint, metricsConfig: { endpoint, port },\n }\n return telemetryConfig\n}\n","import type { AccountInstance } from '@xyo-network/account-model'\nimport { buildNextBlock } from '@xyo-network/chain-sdk'\nimport type { WithHashMeta } from '@xyo-network/payload-model'\nimport type { BlockBoundWitness, XL1BlockRange } from '@xyo-network/xl1-sdk'\nimport { createDeclarationIntent } from '@xyo-network/xl1-sdk'\n\nexport async function createProducerChainStakeIntentBlock(prevBlock: WithHashMeta<BlockBoundWitness>, producerAccount: AccountInstance, range: XL1BlockRange) {\n const producerDeclarationPayload = createDeclarationIntent(\n producerAccount.address,\n 'producer',\n range[0],\n range[1],\n )\n return await buildNextBlock(\n prevBlock,\n [],\n [producerDeclarationPayload],\n [producerAccount],\n )\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-sdk'\nimport type { Provider } from 'ethers'\nimport type { JsonRpcProvider } from 'ethers/providers'\n\nimport { canUseInfuraProvider, initInfuraProvider } from './initInfuraProvider.ts'\nimport { canUseJsonRpcProvider, initJsonRpcProvider } from './initJsonRpcProvider.ts'\n\nlet provider: Promise<JsonRpcProvider> | undefined\n\nexport const initEvmProvider = async ({ config }: { config: Pick<Config, 'evm'>; logger?: Logger }): Promise<Provider> => {\n if (provider) return provider\n if (canUseInfuraProvider(config)) {\n provider = initInfuraProvider(config)\n } else if (canUseJsonRpcProvider(config)) {\n provider = initJsonRpcProvider(config)\n }\n return assertEx(await provider, () => 'No provider available')\n}\n\nexport const canUseEvmProvider = ({ config }: { config: Pick<Config, 'evm'> }) => {\n return canUseInfuraProvider(config) || canUseJsonRpcProvider(config)\n}\n","import { assertEx, isDefined } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-sdk'\nimport { InfuraProvider } from 'ethers/providers'\n\nimport { canUseChainId, getChainId } from './initChainId.ts'\n\nlet instance: Promise<InfuraProvider> | undefined\n\nexport const initInfuraProvider = (config: Pick<Config, 'evm'>) => {\n if (instance) return instance\n const providerConfig = getInfuraProviderConfig(config)\n instance = Promise.resolve(new InfuraProvider(...providerConfig))\n return instance\n}\n\nexport const canUseInfuraProvider = (config: Pick<Config, 'evm'>): boolean => {\n return canUseChainId(config)\n && isDefined(config.evm?.infura?.projectId)\n && isDefined(config.evm?.infura?.projectSecret)\n}\n\nexport const getInfuraProviderConfig = (config: Pick<Config, 'evm'>) => {\n const projectId = assertEx(config.evm?.infura?.projectId, () => 'Missing config.evm.infura.projectId')\n const projectSecret = assertEx(config.evm?.infura?.projectSecret, () => 'Missing config.evm.infura.projectSecret')\n return [getChainId(config), projectId, projectSecret] as const\n}\n","import {\n assertEx, hexFrom, isDefined, isHex,\n} from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\nexport const canUseChainId = (config: Pick<Config, 'evm'>): boolean => {\n return isDefined(config.evm.chainId)\n}\n\nexport const getChainId = (config: Pick<Config, 'evm'>) => {\n const chainId = assertEx(config.evm.chainId, () => 'Missing config.evm.chainId')\n if (isHex(chainId, { prefix: true })) {\n const hex = hexFrom(chainId)\n const parsed = Number.parseInt(hex, 16)\n return parsed\n } else {\n const parsed = Number.parseInt(chainId, 10)\n return parsed\n }\n}\n","import { assertEx, isDefined } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-sdk'\nimport { JsonRpcProvider } from 'ethers/providers'\n\nimport { canUseChainId, getChainId } from './initChainId.ts'\n\nexport const initJsonRpcProvider = (config: Pick<Config, 'evm'>) => {\n const providerConfig = getJsonRpcProviderConfig(config)\n return Promise.resolve(new JsonRpcProvider(...providerConfig))\n}\n\nexport const canUseJsonRpcProvider = (config: Pick<Config, 'evm'>) => {\n return canUseChainId(config)\n && isDefined(config.evm.jsonRpc?.url)\n}\n\nexport const getJsonRpcProviderConfig = (config: Pick<Config, 'evm'>) => {\n const jsonRpcUrl = assertEx(config.evm.jsonRpc?.url, () => 'Missing config.evm.jsonRpc.url')\n return [jsonRpcUrl, getChainId(config)] as const\n}\n","import type {\n IncomingMessage, Server, ServerResponse,\n} from 'node:http'\nimport http from 'node:http'\n\nimport type { CreatableStatus, Logger } from '@xylabs/sdk-js'\nimport { isDefined } from '@xylabs/sdk-js'\nimport type {\n Config, Initializable, RuntimeStatusMonitor,\n} from '@xyo-network/xl1-sdk'\n\nconst sendStatus = (res: ServerResponse, status: CreatableStatus, errorCode: number) => {\n const statusCode = status === 'started' ? 200 : errorCode\n res.writeHead(statusCode, { 'Content-Type': 'application/json' })\n res.end(JSON.stringify({ status }))\n}\n\nconst notFound = (res: ServerResponse) => {\n res.writeHead(404, { 'Content-Type': 'application/json' })\n res.end(JSON.stringify({ status: 'not found' }))\n}\n\n/**\n * Starts an HTTP server with Kubernetes health endpoints:\n * - /healthz\n * - /livez\n * - /readyz\n * @param port The port to listen on (default: 8080)\n */\nconst createHealthServer = (port: number, statusMonitor: RuntimeStatusMonitor, logger: Logger) => {\n const server = http.createServer((req: IncomingMessage, res: ServerResponse) => {\n const url = req.url ?? ''\n\n const status = statusMonitor.getGlobalStatus()\n\n switch (url) {\n case '/healthz': {\n sendStatus(res, status, 500)\n break\n }\n case '/livez': {\n sendStatus(res, status, 503)\n break\n }\n case '/readyz': {\n sendStatus(res, status, 503)\n break\n }\n default: {\n notFound(res)\n }\n }\n })\n\n server.listen(port, () => {\n logger.log(`Health server running on http://localhost:${port}`)\n logger.log(' - /healthz')\n logger.log(' - /livez')\n logger.log(' - /readyz')\n })\n return server\n}\n\nexport const initHealthEndpoints: Initializable<{ config: Config; logger: Logger; statusReporter: RuntimeStatusMonitor }, Server | undefined> = (params) => {\n const {\n config, logger, statusReporter,\n } = params\n const { healthCheckPort } = config.producer\n return isDefined(healthCheckPort) ? createHealthServer(healthCheckPort, statusReporter, logger) : undefined\n}\n","import type { Host, ServiceProvider } from '../model/index.ts'\n\n/**\n * A generic host implementation that can be used as a starting point for\n * more complex host implementations.\n */\nexport class GenericHost implements Host {\n services: ServiceProvider\n\n constructor(services: ServiceProvider) {\n this.services = services\n }\n\n async start(): Promise<void> {\n await Promise.resolve()\n // Initialize or start your services here\n console.log('Host is starting...')\n }\n\n async stop(): Promise<void> {\n await Promise.resolve()\n // Stop or clean up services here\n console.log('Host is stopping...')\n }\n}\n","import type { ServiceProvider } from '../model/index.ts'\n\nexport class DefaultServiceProvider implements ServiceProvider {\n protected _services: Record<string, unknown>\n constructor(services: Record<string, unknown>) {\n this._services = services\n }\n\n getService<T>(serviceIdentifier: string): T | undefined {\n return this._services[serviceIdentifier] as T\n }\n}\n","import type { ServiceProvider } from './ServiceProvider.ts'\n\nexport interface ServiceCollection {\n build(): ServiceProvider\n}\n\n/**\n * Represents the lifetime of a service\n */\nexport const ServiceLifetime = {\n Singleton: 'Singleton',\n Transient: 'Transient',\n} as const\n\n/**\n * Describes a single service registration\n */\nexport interface ServiceDescriptor<T = unknown> {\n identifier: string | symbol\n implementationFactory: () => T\n lifetime: keyof typeof ServiceLifetime\n}\n","import { BaseMongoSdk, type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport type { Hash } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport { MongoMap } from '@xyo-network/chain-protocol'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { BalancesStepSummary, MapType } from '@xyo-network/xl1-sdk'\nimport { hasMongoConfig, MemoryMap } from '@xyo-network/xl1-sdk'\n\nimport type { ConfigContext } from '../ConfigContext.ts'\n\nexport async function initBalanceSummaryMap({ config, logger }: ConfigContext): Promise<MapType<string, WithStorageMeta<BalancesStepSummary>>> {\n const mongoConfig = config.storage?.mongo\n if (hasMongoConfig(mongoConfig)) {\n // Create the MongoDB SDK from the configuration\n const {\n connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName,\n } = mongoConfig\n const payloadSdkConfig: BaseMongoSdkPrivateConfig = {\n dbConnectionString, dbDomain, dbName, dbPassword, dbUserName,\n }\n\n const sdkBalanceSummaryMap = new BaseMongoSdk<WithStorageMeta<BalancesStepSummary>>({ ...payloadSdkConfig, collection: 'balance_summary_map' })\n const result = await MongoMap.create<MongoMap<Hash, WithStorageMeta<BalancesStepSummary>>>({\n sdk: sdkBalanceSummaryMap,\n getCache: { enabled: true, maxEntries: 5000 },\n })\n assertEx(await result.start(), () => 'Failed to start transfer summary map')\n return result\n } else {\n logger?.warn('[API] Mongo configuration not found. Using MemoryMap for BalanceSummaryMap.')\n return new MemoryMap<string, WithStorageMeta<BalancesStepSummary>>()\n }\n}\n","import type { Address, Logger } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { AttachableArchivistInstance } from '@xyo-network/archivist-model'\nimport { asAttachableArchivistInstance } from '@xyo-network/archivist-model'\nimport type { BridgeInstance } from '@xyo-network/bridge-model'\nimport type { AttachableModuleInstance, ModuleIdentifier } from '@xyo-network/module-model'\nimport { asAttachableModuleInstance } from '@xyo-network/module-model'\nimport type { Initializable } from '@xyo-network/xl1-sdk'\nimport { Mutex } from 'async-mutex'\n\nconst initMutex = new Mutex()\ntype ModuleDictionary = Record<ModuleIdentifier, AttachableModuleInstance | undefined>\ntype BridgedModuleDictionary = Record<Address, ModuleDictionary | undefined>\nconst bridgedModuleDictionary: BridgedModuleDictionary = {}\n\nexport const initBridgedModule: Initializable<\n { bridge: BridgeInstance; moduleName: ModuleIdentifier }, AttachableModuleInstance\n> = async ({ bridge, moduleName }): Promise<AttachableModuleInstance> => {\n return await initMutex.runExclusive(async () => {\n const existing = bridgedModuleDictionary?.[bridge.address]?.[moduleName]\n if (existing) return existing\n const mod = assertEx(await bridge.resolve(moduleName), () => `Could not resolve ${moduleName}`)\n const moduleInstance = assertEx(asAttachableModuleInstance(mod), () => `Could not convert ${moduleName} to attachable module instance`)\n // Initialize the nested dictionary if needed\n let moduleMap = bridgedModuleDictionary[bridge.address]\n if (moduleMap === undefined) {\n moduleMap = {}\n bridgedModuleDictionary[bridge.address] = moduleMap\n }\n // Store and return the module instance\n moduleMap[moduleName] = moduleInstance\n return moduleInstance\n })\n}\n\nexport const initBridgedArchivistModule: Initializable<\n { bridge: BridgeInstance; logger?: Logger; moduleName: ModuleIdentifier }, AttachableArchivistInstance\n> = async ({ bridge, moduleName }): Promise<AttachableArchivistInstance> => {\n return assertEx(\n asAttachableArchivistInstance(await initBridgedModule({ bridge, moduleName })),\n () => `Could not convert ${moduleName} to attachable archivist instance`,\n )\n}\n","import {\n asAddress,\n assertEx, type Logger, toAddress, toEthAddress,\n} from '@xylabs/sdk-js'\nimport type { EvmStakeEventsParams, EvmStakeViewerParams } from '@xyo-network/chain-sdk'\nimport { EvmStakeEventsViewer, EvmStakeViewer } from '@xyo-network/chain-sdk'\nimport { IStakedXyoChain__factory } from '@xyo-network/typechain'\nimport type {\n ChainId,\n Config,\n CreatableProviderContext, StakeViewer,\n} from '@xyo-network/xl1-sdk'\nimport { SimpleStakeViewer } from '@xyo-network/xl1-sdk'\n\nimport { canUseEvmProvider, initEvmProvider } from '../evm/index.ts'\n\nexport async function initEvmChainStakeViewer(context: CreatableProviderContext, config: Config, logger?: Logger): Promise<StakeViewer> {\n const provider = await initEvmProvider({ config, logger })\n const contractAddress = assertEx(config.chain.id, () => 'Missing config.evm.chainId') as ChainId\n const contract = IStakedXyoChain__factory.connect(toEthAddress(contractAddress), provider)\n const stakeEventsViewer = await EvmStakeEventsViewer.create({\n contract, logger, context,\n } satisfies EvmStakeEventsParams)\n assertEx(await stakeEventsViewer.start(), () => 'Failed to start EvmStakeEvents reader')\n const stakeChainViewer = await EvmStakeViewer.create({\n contract, stakeEventsViewer, logger, context,\n } satisfies EvmStakeViewerParams)\n assertEx(await stakeChainViewer.start(), () => 'Failed to start EvmStake viewer')\n return stakeChainViewer\n}\n\nexport async function initSimpleStakeViewer(context: CreatableProviderContext, config: Config, logger?: Logger): Promise<StakeViewer> {\n const stakeViewer = await SimpleStakeViewer.create({\n context,\n chainId: asAddress(toAddress(1n), true),\n logger,\n positions: [],\n })\n assertEx(await stakeViewer.start(), () => 'Failed to start SimpleChainStake viewer')\n return stakeViewer\n}\n\nexport async function initStakeViewer({\n config, logger, context,\n}: {\n config: Config\n context: CreatableProviderContext\n logger?: Logger\n}): Promise<StakeViewer> {\n if (canUseEvmProvider({ config })) {\n return await initEvmChainStakeViewer(context, config, logger)\n } else {\n console.warn('[API] Infura configuration not found. Using SimpleChainStakeViewer with no positions. This means no staking data will be available.')\n return await initSimpleStakeViewer(context, config, logger)\n }\n}\n","import { MongoDBArchivistV2 } from '@xyo-network/archivist-mongodb'\nimport type { MongoDBModuleParamsV2 } from '@xyo-network/module-model-mongodb'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\nasync function initMongoFinalizedArchivist(config: Config) {\n const payloadSdkConfig = {\n ...config.storage.mongo,\n collection: 'chain_validated',\n } satisfies MongoDBModuleParamsV2['payloadSdkConfig']\n return await MongoDBArchivistV2.create({ payloadSdkConfig })\n}\n\nexport async function initFinalizedArchivist(config: Config) {\n const finalizedArchivist = await initMongoFinalizedArchivist(config)\n return finalizedArchivist\n}\n","import type { Promisable } from '@xylabs/sdk-js'\nimport { isUndefined } from '@xylabs/sdk-js'\nimport { HDWallet } from '@xyo-network/wallet'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type {\n Config, Initializable, InitializableParams,\n} from '@xyo-network/xl1-sdk'\nimport { ADDRESS_INDEX, generateXyoBaseWalletFromPhrase } from '@xyo-network/xl1-sdk'\n\nlet accountServiceSingleton: Promisable<WalletInstance> | undefined\n\nexport const initProducerAccount: Initializable<InitializableParams<{ config: Config }>, WalletInstance>\n = async ({ config, logger }): Promise<WalletInstance> => {\n if (accountServiceSingleton) return accountServiceSingleton\n let walletPhrase = config.producer.mnemonic\n if (isUndefined(walletPhrase)) {\n logger?.warn('[Producer] No wallet mnemonic specified!')\n const randomMnemonic = HDWallet.generateMnemonic()\n logger?.warn(`[Producer] Using randomly generated mnemonic:\n \n${randomMnemonic}\n \n `)\n walletPhrase = randomMnemonic\n }\n const wallet = await generateXyoBaseWalletFromPhrase(walletPhrase)\n const account = await wallet.derivePath(ADDRESS_INDEX.XYO)\n accountServiceSingleton = account\n return accountServiceSingleton\n }\n","import { assertEx, isString } from '@xylabs/sdk-js'\nimport type { BiosExternalInterface } from '@xyo-network/bios-model'\nimport { HDWallet } from '@xyo-network/wallet'\n\nimport type { ConfigContext } from '../ConfigContext.ts'\n\n// TODO: Make nodejs version of bios support round tripping mnemonic between boots\nexport async function initSeedPhrase({\n config, logger, bios,\n}: ConfigContext<{ bios: BiosExternalInterface }>): Promise<string> {\n const storedSeedPhrase = await bios.seedPhraseStore.get('os')\n logger?.debug(`[API] Stored mnemonic: ${storedSeedPhrase}`)\n const { mnemonic } = config.api\n if (isString(storedSeedPhrase) && isString(mnemonic)) {\n logger?.warn('[API] Stored mnemonic does not match supplied. Updating stored mnemonic to supplied.')\n await bios.seedPhraseStore.set('os', mnemonic)\n } else {\n let seedPhrase: string\n if (isString(mnemonic)) {\n seedPhrase = mnemonic\n } else {\n seedPhrase = HDWallet.generateMnemonic()\n logger?.log('[API] No mnemonic provided, using random mnemonic. This is not recommended for production use.')\n logger?.log(`[API] Mnemonic: ${seedPhrase}`)\n }\n await bios.seedPhraseStore.set('os', seedPhrase)\n }\n return assertEx(await bios.seedPhraseStore.get('os'), () => 'Unable to acquire mnemonic from bios')\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type {\n BalancesStepSummary, MapType, TransfersStepSummary,\n} from '@xyo-network/xl1-sdk'\n\nimport type { ConfigContext } from '../ConfigContext.ts'\nimport { loadNode } from '../manifest/index.ts'\n\nasync function writableChainArchivistFromNode(node: NodeInstance) {\n return asArchivistInstance(\n await node.resolve('Chain:Validated'),\n { required: true },\n )\n}\n\nasync function readonlyChainArchivistFromNode(node: NodeInstance) {\n return assertEx(asArchivistInstance(\n await node.resolve('Chain:Validated'),\n { required: true },\n ))\n}\n\nasync function pendingTransactionsArchivistFromNode(node: NodeInstance) {\n return asArchivistInstance(\n await node.resolve('XYOChain:Pending:Transactions'),\n { required: true },\n )\n}\n\nasync function pendingBlocksArchivistFromNode(node: NodeInstance) {\n return asArchivistInstance(\n await node.resolve('XYOChain:Pending:Blocks'),\n { required: true },\n )\n}\n\nexport async function initServerNode({\n wallet, logger, config, node: providedNode, transfersSummaryMap, balancesSummaryMap,\n}: ConfigContext<{\n balancesSummaryMap: MapType<string, WithStorageMeta<BalancesStepSummary>>\n node?: NodeInstance\n transfersSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>\n wallet: WalletInstance\n}>) {\n const node: NodeInstance = providedNode ?? await loadNode({\n wallet, logger, config, transfersSummaryMap, balancesSummaryMap,\n })\n assertEx(await node.start(), () => 'Failed to start node')\n const writableChainArchivist = await writableChainArchivistFromNode(node)\n const readonlyChainArchivist = await readonlyChainArchivistFromNode(node)\n const pendingTransactionsArchivist = await pendingTransactionsArchivistFromNode(node)\n const pendingBlocksArchivist = await pendingBlocksArchivistFromNode(node)\n return {\n node, writableChainArchivist, readonlyChainArchivist, pendingTransactionsArchivist, pendingBlocksArchivist,\n }\n}\n","import { type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport { isDefined } from '@xylabs/sdk-js'\nimport { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { MongoDBArchivistV2, MongoDBArchivistV2Deletable } from '@xyo-network/archivist-mongodb'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport { initTelemetry } from '@xyo-network/chain-telemetry'\nimport { AbstractModule, LoggerModuleStatusReporter } from '@xyo-network/module-abstract'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type { MongoDBModuleParamsV2 } from '@xyo-network/module-model-mongodb'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport type {\n BalancesStepSummary, MapType, TransfersStepSummary,\n} from '@xyo-network/xl1-sdk'\nimport { hasMongoConfig } from '@xyo-network/xl1-sdk'\n\nimport type { ConfigContext } from '../ConfigContext.ts'\n\n/**\n * Used for retrieving a locator with the necessary modules registered for testing\n * operation of the node (entirely in memory)\n * @returns A locator with the necessary modules registered\n */\nexport const getLocator = async ({ config, logger}: ConfigContext<{\n balancesSummaryMap: MapType<string, WithStorageMeta<BalancesStepSummary>>\n transfersSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>\n}>) => {\n const { otlpEndpoint } = config.telemetry?.otel ?? {}\n const { path: endpoint = '/metrics', port: port = 9465 } = config.telemetry?.metrics?.scrape ?? {}\n const { traceProvider, meterProvider } = await initTelemetry({\n attributes: {\n serviceName: 'xl1-api',\n serviceVersion: '1.0.0',\n },\n otlpEndpoint,\n metricsConfig: { endpoint, port },\n })\n\n if (isDefined(logger)) AbstractModule.defaultLogger = logger\n const statusReporter = logger ? new LoggerModuleStatusReporter(logger) : undefined\n\n const locator = new ModuleFactoryLocator()\n // If there's a MongoDB configuration\n const mongoConfig = config.storage?.mongo\n if (hasMongoConfig(mongoConfig)) {\n // Create the MongoDB SDK from the configuration\n const {\n connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName,\n } = mongoConfig\n const payloadSdkConfig: BaseMongoSdkPrivateConfig = {\n dbConnectionString, dbDomain, dbName, dbPassword, dbUserName,\n }\n const params: Partial<MongoDBModuleParamsV2> = {\n meterProvider, payloadSdkConfig, statusReporter, traceProvider,\n }\n // Register the MongoDB Archivist as the default\n locator.register(MongoDBArchivistV2.factory(params), undefined, true)\n locator.register(MongoDBArchivistV2Deletable.factory(params), { 'network.xyo.storage.capabilities.delete': 'enabled' }, false)\n }\n\n locator.register(MemoryArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(MemorySentinel.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(ViewArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n return locator\n}\n","import { ManifestWrapper } from '@xyo-network/manifest-wrapper'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type {\n BalancesStepSummary, MapType, TransfersStepSummary,\n} from '@xyo-network/xl1-sdk'\n\nimport type { ConfigContext } from '../ConfigContext.ts'\nimport { getLocator } from './getLocator.ts'\nimport { NodeManifest } from './nodeManifest.ts'\nimport { PrivateChildManifests } from './private/index.ts'\nimport { PublicChildManifests } from './public/index.ts'\n\n/**\n * Creates a node with the xyo-chain modules registered\n * @returns A node with the xyo-chain modules registered\n */\nexport const loadNode = async ({\n wallet, config, balancesSummaryMap, transfersSummaryMap,\n}: ConfigContext<{\n balancesSummaryMap: MapType<string, WithStorageMeta<BalancesStepSummary>>\n transfersSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>\n wallet: WalletInstance\n}>) => {\n const locator = await getLocator({\n config, balancesSummaryMap, transfersSummaryMap,\n })\n const wrapper = new ManifestWrapper(NodeManifest, wallet, locator, PublicChildManifests, PrivateChildManifests)\n const [node, ...childNodes] = await wrapper.loadNodes()\n if (childNodes?.length > 0) {\n await Promise.all(childNodes.map(childNode => node.register(childNode)))\n await Promise.all(childNodes.map(childNode => node.attach(childNode.address, true)))\n }\n return node\n}\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"44'/60'/1\",\n \"name\": \"XYOChain\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [],\n \"public\": []\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}\n","import type { PackageManifestPayload } from '@xyo-network/manifest-model'\n\nimport node from './node.json' with { type: 'json' }\n\n/**\n * Root Node Manifest\n */\nexport const NodeManifest = node as unknown as PackageManifestPayload\n","/**\n * Private Child Manifests\n */\nexport const PrivateChildManifests = []\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"1\",\n \"name\": \"Chain\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [\n {\n \"config\": {\n \"accountPath\": \"1/1'/1'\",\n \"name\": \"Validated\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"payloadSdkConfig\": {\n \"collection\": \"chain_validated\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n }\n ],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"1/1/1\",\n \"name\": \"Finalized\",\n \"allowedQueries\": [\n \"network.xyo.query.archivist.get\",\n \"network.xyo.query.archivist.next\"\n ],\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 50000\n },\n \"originArchivist\": \"Validated\",\n \"schema\": \"network.xyo.archivist.view.config\"\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"2\",\n \"name\": \"Pending\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"2/1/1\",\n \"name\": \"Transactions\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"labels\": {\n \"network.xyo.storage.capabilities.delete\": \"enabled\",\n \"network.xyo.storage.class\": \"mongodb\"\n },\n \"payloadSdkConfig\": {\n \"collection\": \"pending_transaction_bundles\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"2/1/2\",\n \"name\": \"Blocks\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"labels\": {\n \"network.xyo.storage.capabilities.delete\": \"enabled\",\n \"network.xyo.storage.class\": \"mongodb\"\n },\n \"payloadSdkConfig\": {\n \"collection\": \"pending_block_bundles\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}\n","import type { ModuleManifest, PackageManifestPayload } from '@xyo-network/manifest-model'\n\nimport Chain from './Chain.json' with { type: 'json' }\nimport Pending from './Pending.json' with { type: 'json' }\n\n/**\n * Chain Node Manifest\n */\nconst ChainNodeManifest = Chain as unknown as PackageManifestPayload\n/**\n * Pending Node Manifest\n */\nconst PendingNodeManifest = Pending as unknown as PackageManifestPayload\n/**\n * Public Child Manifests\n */\nexport const PublicChildManifests: ModuleManifest[] = [\n ...ChainNodeManifest.nodes,\n ...PendingNodeManifest.nodes,\n]\n","import type { Logger } from '@xylabs/sdk-js'\nimport { RuntimeStatusMonitor } from '@xyo-network/xl1-sdk'\n\nexport function initStatusReporter({ logger }: { logger: Logger }) {\n const statusReporter = new RuntimeStatusMonitor(logger)\n statusReporter.onGlobalTransition({ to: 'started' }, () => {\n logger.log('All services started.')\n })\n statusReporter.onGlobalTransition({ to: 'error' }, () => {\n logger.error('Producer encountered an unhandled error!')\n // eslint-disable-next-line unicorn/no-process-exit\n process.exit(1)\n })\n return statusReporter\n}\n","import { BaseMongoSdk, type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport type { Hash } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport { MongoMap } from '@xyo-network/chain-protocol'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { MapType, TransfersStepSummary } from '@xyo-network/xl1-sdk'\nimport { hasMongoConfig, MemoryMap } from '@xyo-network/xl1-sdk'\n\nimport type { ConfigContext } from '../ConfigContext.ts'\n\nexport async function initTransferSummaryMap({ config, logger }: ConfigContext): Promise<MapType<string, WithStorageMeta<TransfersStepSummary>>> {\n const mongoConfig = config.storage?.mongo\n if (hasMongoConfig(mongoConfig)) {\n // Create the MongoDB SDK from the configuration\n const {\n connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName,\n } = mongoConfig\n const payloadSdkConfig: BaseMongoSdkPrivateConfig = {\n dbConnectionString, dbDomain, dbName, dbPassword, dbUserName,\n }\n\n const sdkTransferSummaryMap = new BaseMongoSdk<WithStorageMeta<TransfersStepSummary>>({ ...payloadSdkConfig, collection: 'transfer_summary_map' })\n const result = await MongoMap.create<MongoMap<Hash, WithStorageMeta<TransfersStepSummary>>>({\n sdk: sdkTransferSummaryMap,\n getCache: { enabled: true, maxEntries: 5000 },\n })\n assertEx(await result.start(), () => 'Failed to start transfer summary map')\n return result\n } else {\n logger?.warn('[API] Mongo configuration not found. Using MemoryMap for TransferSummaryMap.')\n return new MemoryMap<string, WithStorageMeta<TransfersStepSummary>>()\n }\n}\n","import { isDefined } from '@xylabs/sdk-js'\nimport { boot } from '@xyo-network/bios'\nimport { HDWallet } from '@xyo-network/wallet'\n\nimport type { ConfigContext } from '../ConfigContext.ts'\nimport { initSeedPhrase } from './initSeedPhrase.ts'\n\nasync function initWallet({ config, logger }: ConfigContext, mnemonic?: string) {\n const bios = await boot()\n const seedPhrase = isDefined(mnemonic)\n ? mnemonic\n : await initSeedPhrase({\n bios, config, logger,\n })\n return await HDWallet.fromPhrase(seedPhrase)\n}\n\nexport async function initApiWallet({ config, logger }: ConfigContext) {\n const { mnemonic } = config.api\n return await initWallet({ config, logger }, mnemonic)\n}\n\nexport async function initMempoolWallet({ config, logger }: ConfigContext) {\n const { mnemonic } = config.mempool\n return await initWallet({ config, logger }, mnemonic)\n}\n\nexport async function initProducerWallet({ config, logger }: ConfigContext) {\n const { mnemonic } = config.producer\n return await initWallet({ config, logger }, mnemonic)\n}\n\nexport async function initRewardsRedemptionApiWallet({ config, logger }: ConfigContext) {\n const { mnemonic } = config.rewardRedemptionApi\n return await initWallet({ config, logger }, mnemonic)\n}\n","import type { CreatableInstance } from '@xylabs/sdk-js'\nimport { AbstractCreatable, creatable } from '@xylabs/sdk-js'\nimport { ActorInstance } from '@xyo-network/xl1-sdk'\n\nexport interface OrchestratorInstance extends CreatableInstance {\n registerActor(actor: ActorInstance): Promise<void>\n}\n\n@creatable()\nexport class Orchestrator extends AbstractCreatable implements OrchestratorInstance {\n protected actors: ActorInstance[] = []\n protected keepAliveHandle: NodeJS.Timeout | null = null\n protected running = false\n\n /**\n * Registers an actor.\n * (We won't activate the actor until `start()` is called.)\n */\n async registerActor(actor: ActorInstance) {\n if (this.running) {\n // If the orchestrator is already running, activate the actor immediately\n await actor.start()\n }\n this.actors.push(actor)\n }\n\n /**\n * Starts the orchestrator: activates all actors.\n */\n override async startHandler() {\n await super.startHandler()\n if (this.running) {\n this.logger?.warn('[Orchestrator] Already started.')\n return\n }\n\n this.logger?.log('[Orchestrator] Starting...')\n this.running = true\n for (const actor of this.actors) {\n await actor.start()\n }\n // This interval will fire every 24.8 days (2^31 - 1 ms), effectively never finishing\n this.keepAliveHandle = setInterval(() => {\n // No-op\n }, 2_147_483_647)\n }\n\n /**\n * Stops the orchestrator: deactivates all actors.\n */\n override async stopHandler() {\n await super.stopHandler()\n if (!this.running) {\n this.logger?.log('[Orchestrator] Already stopped.')\n return\n }\n\n this.logger?.log('[Orchestrator] Stopping...')\n for (const actor of this.actors) {\n await actor.stop()\n }\n this.running = false\n if (this.keepAliveHandle) clearInterval(this.keepAliveHandle)\n this.logger?.log('[Orchestrator] Stopped...')\n }\n}\n"],"mappings":"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","names":["assertEx","Actor","Mutex","BalanceActor","Actor","_updateMutex","Mutex","accountBalanceViewer","assertEx","params","blockViewer","startHandler","registerTimer","updateBalance","isLocked","runExclusive","head","currentBlockHash","accountBalances","assertEx","creatable","Actor","Mutex","MempoolActor","Actor","_blockTimerId","_blockTimerMutex","Mutex","_transactionTimerId","_transactionTimerMutex","mempoolRunner","params","pendingBlocksArchivist","pendingTransactionsArchivist","paramsHandler","assertEx","startHandler","restartBlockTimer","stopHandler","stopBlockTimer","setInterval","isLocked","runExclusive","prunePendingBlocks","batchSize","restartTransactionTimer","stopTransactionTimer","prunePendingTransactions","clearInterval","assertEx","creatable","processPendingBlocks","PayloadBuilder","Actor","ValidatorActor","Actor","_lastValidatedBlock","_lastValidatedBlockHash","blockViewer","params","finalizedArchivist","assertEx","mempoolViewer","paramsHandler","account","startHandler","registerTimer","spanAsync","console","log","processPendingBlocks","context","logger","timeBudgetLimit","slashInvalidBlock","_block","slashed","Promise","resolve","validateBlock","block","valid","PayloadBuilder","hash","startupSpanAsync","timeBudget","Mutex","Mutex","rm","Path","LmdbArchivist","LmdbArchivistConfigSchema","getStoreDirectory","DEFAULT_STORAGE_ROOT","Path","join","process","cwd","getLocalPersistentArchivist","name","dbName","storeName","storageRoot","kind","root","LmdbArchivist","create","account","config","clearStoreOnStart","location","getStoreDirectory","schema","LmdbArchivistConfigSchema","mutex","Mutex","singleton","initLocalChainFinalizedArchivist","config","runExclusive","root","storage","getLocalPersistentArchivist","mutex","Mutex","singleton","initChainFinalizedArchivist","context","runExclusive","timeBudget","logger","local","startupSpanAsync","initLocalChainFinalizedArchivist","startupSpanAsync","timeBudget","Mutex","Mutex","mutex","Mutex","singleton","initLocalPendingBlocksArchivist","config","runExclusive","root","storage","getLocalPersistentArchivist","mutex","Mutex","singleton","initPendingBlocksArchivist","context","runExclusive","timeBudget","logger","local","startupSpanAsync","initLocalPendingBlocksArchivist","startupSpanAsync","timeBudget","Mutex","MemoryArchivist","MemoryArchivistConfigSchema","Mutex","mutex","Mutex","singleton","initLocalRejectedTransactionsArchivist","runExclusive","MemoryArchivist","create","account","config","schema","MemoryArchivistConfigSchema","max","name","mutex","Mutex","singleton","initRejectedTransactionsArchivist","params","runExclusive","timeBudget","logger","local","startupSpanAsync","initLocalRejectedTransactionsArchivist","assertEx","startupSpanAsync","timeBudget","Mutex","assertEx","Mutex","mutex","Mutex","singleton","initLocalStakeIntentStateArchivist","config","runExclusive","root","storage","getLocalPersistentArchivist","assertEx","Error","mutex","Mutex","singleton","initStakeIntentStateArchivist","context","runExclusive","timeBudget","logger","local","startupSpanAsync","initLocalStakeIntentStateArchivist","assertEx","buildTelemetryConfig","config","serviceName","serviceVersion","defaultMetricsScrapePort","otlpEndpoint","telemetry","otel","path","endpoint","port","metrics","scrape","telemetryConfig","attributes","metricsConfig","buildNextBlock","createDeclarationIntent","createProducerChainStakeIntentBlock","prevBlock","producerAccount","range","producerDeclarationPayload","createDeclarationIntent","address","buildNextBlock","assertEx","assertEx","isDefined","InfuraProvider","assertEx","hexFrom","isDefined","isHex","canUseChainId","config","isDefined","evm","chainId","getChainId","assertEx","isHex","prefix","hex","hexFrom","parsed","Number","parseInt","instance","initInfuraProvider","config","providerConfig","getInfuraProviderConfig","Promise","resolve","InfuraProvider","canUseInfuraProvider","canUseChainId","isDefined","evm","infura","projectId","projectSecret","assertEx","getChainId","assertEx","isDefined","JsonRpcProvider","initJsonRpcProvider","config","providerConfig","getJsonRpcProviderConfig","Promise","resolve","JsonRpcProvider","canUseJsonRpcProvider","canUseChainId","isDefined","evm","jsonRpc","url","jsonRpcUrl","assertEx","getChainId","provider","initEvmProvider","config","canUseInfuraProvider","initInfuraProvider","canUseJsonRpcProvider","initJsonRpcProvider","assertEx","canUseEvmProvider","http","isDefined","sendStatus","res","status","errorCode","statusCode","writeHead","end","JSON","stringify","notFound","createHealthServer","port","statusMonitor","logger","server","http","createServer","req","url","getGlobalStatus","listen","log","initHealthEndpoints","params","config","statusReporter","healthCheckPort","producer","isDefined","undefined","GenericHost","services","start","Promise","resolve","console","log","stop","DefaultServiceProvider","_services","services","getService","serviceIdentifier","ServiceLifetime","Singleton","Transient","BaseMongoSdk","assertEx","MongoMap","hasMongoConfig","MemoryMap","initBalanceSummaryMap","config","logger","mongoConfig","storage","mongo","hasMongoConfig","connectionString","dbConnectionString","database","dbName","domain","dbDomain","password","dbPassword","username","dbUserName","payloadSdkConfig","sdkBalanceSummaryMap","BaseMongoSdk","collection","result","MongoMap","create","sdk","getCache","enabled","maxEntries","assertEx","start","warn","MemoryMap","assertEx","asAttachableArchivistInstance","asAttachableModuleInstance","Mutex","initMutex","Mutex","bridgedModuleDictionary","initBridgedModule","bridge","moduleName","runExclusive","existing","address","mod","assertEx","resolve","moduleInstance","asAttachableModuleInstance","moduleMap","undefined","initBridgedArchivistModule","asAttachableArchivistInstance","asAddress","assertEx","toAddress","toEthAddress","EvmStakeEventsViewer","EvmStakeViewer","IStakedXyoChain__factory","SimpleStakeViewer","initEvmChainStakeViewer","context","config","logger","provider","initEvmProvider","contractAddress","assertEx","chain","id","contract","IStakedXyoChain__factory","connect","toEthAddress","stakeEventsViewer","EvmStakeEventsViewer","create","start","stakeChainViewer","EvmStakeViewer","initSimpleStakeViewer","stakeViewer","SimpleStakeViewer","chainId","asAddress","toAddress","positions","initStakeViewer","canUseEvmProvider","console","warn","MongoDBArchivistV2","initMongoFinalizedArchivist","config","payloadSdkConfig","storage","mongo","collection","MongoDBArchivistV2","create","initFinalizedArchivist","finalizedArchivist","isUndefined","HDWallet","ADDRESS_INDEX","generateXyoBaseWalletFromPhrase","accountServiceSingleton","initProducerAccount","config","logger","walletPhrase","producer","mnemonic","isUndefined","warn","randomMnemonic","HDWallet","generateMnemonic","wallet","generateXyoBaseWalletFromPhrase","account","derivePath","ADDRESS_INDEX","XYO","assertEx","isString","HDWallet","initSeedPhrase","config","logger","bios","storedSeedPhrase","seedPhraseStore","get","debug","mnemonic","api","isString","warn","set","seedPhrase","HDWallet","generateMnemonic","log","assertEx","assertEx","asArchivistInstance","isDefined","MemoryArchivist","MongoDBArchivistV2","MongoDBArchivistV2Deletable","ViewArchivist","initTelemetry","AbstractModule","LoggerModuleStatusReporter","ModuleFactoryLocator","MemorySentinel","hasMongoConfig","getLocator","config","logger","otlpEndpoint","telemetry","otel","path","endpoint","port","metrics","scrape","traceProvider","meterProvider","initTelemetry","attributes","serviceName","serviceVersion","metricsConfig","isDefined","AbstractModule","defaultLogger","statusReporter","LoggerModuleStatusReporter","undefined","locator","ModuleFactoryLocator","mongoConfig","storage","mongo","hasMongoConfig","connectionString","dbConnectionString","database","dbName","domain","dbDomain","password","dbPassword","username","dbUserName","payloadSdkConfig","params","register","MongoDBArchivistV2","factory","MongoDBArchivistV2Deletable","MemoryArchivist","MemorySentinel","ViewArchivist","ManifestWrapper","NodeManifest","node","PrivateChildManifests","ChainNodeManifest","Chain","PendingNodeManifest","Pending","PublicChildManifests","nodes","loadNode","wallet","config","balancesSummaryMap","transfersSummaryMap","locator","getLocator","wrapper","ManifestWrapper","NodeManifest","PublicChildManifests","PrivateChildManifests","node","childNodes","loadNodes","length","Promise","all","map","childNode","register","attach","address","writableChainArchivistFromNode","node","asArchivistInstance","resolve","required","readonlyChainArchivistFromNode","assertEx","pendingTransactionsArchivistFromNode","pendingBlocksArchivistFromNode","initServerNode","wallet","logger","config","providedNode","transfersSummaryMap","balancesSummaryMap","loadNode","start","writableChainArchivist","readonlyChainArchivist","pendingTransactionsArchivist","pendingBlocksArchivist","RuntimeStatusMonitor","initStatusReporter","logger","statusReporter","RuntimeStatusMonitor","onGlobalTransition","to","log","error","process","exit","BaseMongoSdk","assertEx","MongoMap","hasMongoConfig","MemoryMap","initTransferSummaryMap","config","logger","mongoConfig","storage","mongo","hasMongoConfig","connectionString","dbConnectionString","database","dbName","domain","dbDomain","password","dbPassword","username","dbUserName","payloadSdkConfig","sdkTransferSummaryMap","BaseMongoSdk","collection","result","MongoMap","create","sdk","getCache","enabled","maxEntries","assertEx","start","warn","MemoryMap","isDefined","boot","HDWallet","initWallet","config","logger","mnemonic","bios","boot","seedPhrase","isDefined","initSeedPhrase","HDWallet","fromPhrase","initApiWallet","api","initMempoolWallet","mempool","initProducerWallet","producer","initRewardsRedemptionApiWallet","rewardRedemptionApi","AbstractCreatable","creatable","Orchestrator","AbstractCreatable","actors","keepAliveHandle","running","registerActor","actor","start","push","startHandler","logger","warn","log","setInterval","stopHandler","stop","clearInterval"]}
1
+ {"version":3,"sources":["../../src/actor/BalanceActor.ts","../../src/actor/MempoolActor.ts","../../src/actor/ValidatorActor.ts","../../src/archivists/ChainFinalized/archivist.ts","../../src/archivists/ChainFinalized/local.ts","../../src/archivists/lib/localPersistentArchivist.ts","../../src/archivists/PendingBlocks/archivist.ts","../../src/archivists/PendingBlocks/local.ts","../../src/archivists/RejectedTransactions/archivist.ts","../../src/archivists/RejectedTransactions/local.ts","../../src/archivists/StakeIntentState/archivist.ts","../../src/archivists/StakeIntentState/local.ts","../../src/buildTelemetryConfig.ts","../../src/createDeclarationIntentBlock.ts","../../src/evm/initChainId.ts","../../src/evm/initEvmProvider.ts","../../src/evm/initInfuraProvider.ts","../../src/evm/initJsonRpcProvider.ts","../../src/health/initHealthEndpoints.ts","../../src/host/implementation/DefaultHost.ts","../../src/host/implementation/DefaultServiceProvider.ts","../../src/host/model/ServiceCollection.ts","../../src/init/initBalanceSummaryMap.ts","../../src/init/initBridgedModule.ts","../../src/init/initEvmProvidersIfAvailable.ts","../../src/init/initFinalizedArchivist.ts","../../src/init/initProducerAccount.ts","../../src/init/initSeedPhrase.ts","../../src/init/initServerNode.ts","../../src/manifest/getLocator.ts","../../src/manifest/loadNode.ts","../../src/manifest/node.json","../../src/manifest/nodeManifest.ts","../../src/manifest/private/index.ts","../../src/manifest/public/Chain.json","../../src/manifest/public/Pending.json","../../src/manifest/public/index.ts","../../src/init/initStatusReporter.ts","../../src/init/initTransferSummaryMap.ts","../../src/init/initWallet.ts","../../src/orchestrator/Orchestrator.ts"],"sourcesContent":["import { assertEx } from '@xylabs/sdk-js'\nimport type {\n AccountBalanceViewer,\n ActorParams, BlockViewer, Config,\n} from '@xyo-network/xl1-sdk'\nimport { Actor } from '@xyo-network/xl1-sdk'\nimport { Mutex } from 'async-mutex'\n\nexport type BalanceActorParams = ActorParams<\n {\n accountBalanceViewer: AccountBalanceViewer\n blockViewer: BlockViewer\n }\n & { config: Config }>\n\nexport class BalanceActor extends Actor<BalanceActorParams> {\n protected _updateMutex = new Mutex()\n\n protected get accountBalanceViewer() {\n return assertEx(this.params.accountBalanceViewer, () => 'balanceService not set')\n }\n\n protected get blockViewer() {\n return assertEx(this.params.blockViewer, () => 'blockViewer not set')\n }\n\n override async startHandler(): Promise<void> {\n await super.startHandler()\n this.registerTimer('BalanceTimer', async () => {\n await this.updateBalance()\n }, 1000, 10_000/* 1000 */)\n }\n\n protected async updateBalance(): Promise<void> {\n if (this._updateMutex.isLocked()) return\n await this._updateMutex.runExclusive(async () => {\n const head = await this.blockViewer.currentBlockHash()\n await this.accountBalanceViewer.accountBalances([], { head })\n })\n }\n}\n","import {\n assertEx,\n creatable,\n} from '@xylabs/sdk-js'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport {\n Actor, ActorParams,\n MempoolRunner,\n} from '@xyo-network/xl1-sdk'\nimport { Mutex } from 'async-mutex'\n\nexport type MempoolActorParams = ActorParams<{\n mempoolRunner: MempoolRunner\n pendingBlocksArchivist: ArchivistInstance\n pendingTransactionsArchivist: ArchivistInstance\n}>\n\n@creatable()\nexport class MempoolActor extends Actor<MempoolActorParams> {\n private _blockTimerId: ReturnType<typeof setInterval> | null = null\n private _blockTimerMutex = new Mutex()\n\n private _transactionTimerId: ReturnType<typeof setInterval> | null = null\n private _transactionTimerMutex = new Mutex()\n\n protected get mempoolRunner() {\n return this.params.mempoolRunner\n }\n\n protected get pendingBlocksArchivist() {\n return this.params.pendingBlocksArchivist\n }\n\n protected get pendingTransactionsArchivist() {\n return this.params.pendingTransactionsArchivist\n }\n\n static override async paramsHandler(params?: Partial<MempoolActorParams>) {\n return {\n ...await super.paramsHandler(params),\n mempoolRunner: assertEx(\n params?.mempoolRunner,\n () => 'mempoolRunner is required for MempoolActor',\n ),\n pendingBlocksArchivist: assertEx(\n params?.pendingBlocksArchivist,\n () => 'pendingBlocksArchivist is required for MempoolActor',\n ),\n pendingTransactionsArchivist: assertEx(\n params?.pendingTransactionsArchivist,\n () => 'pendingTransactionsArchivist is required for MempoolActor',\n ),\n } satisfies MempoolActorParams\n }\n\n override async startHandler() {\n await super.startHandler()\n // this.restartTransactionTimer()\n this.restartBlockTimer()\n }\n\n override async stopHandler() {\n await super.stopHandler()\n // this.stopTransactionTimer()\n this.stopBlockTimer()\n }\n\n private restartBlockTimer() {\n this.stopBlockTimer()\n this._blockTimerId = setInterval(() => {\n if (this._blockTimerMutex.isLocked()) {\n return\n }\n void this._blockTimerMutex.runExclusive(async () => {\n await this.mempoolRunner.prunePendingBlocks({ batchSize: 50 })\n })\n }, 1000)\n }\n\n private restartTransactionTimer() {\n this.stopTransactionTimer()\n this._transactionTimerId = setInterval(() => {\n if (this._transactionTimerMutex.isLocked()) {\n return\n }\n void this._transactionTimerMutex.runExclusive(async () => {\n await this.mempoolRunner.prunePendingTransactions({ batchSize: 50 })\n })\n }, 1000)\n }\n\n private stopBlockTimer() {\n if (this._blockTimerId !== null) {\n clearInterval(this._blockTimerId)\n }\n this._blockTimerId = null\n }\n\n private stopTransactionTimer() {\n if (this._transactionTimerId !== null) {\n clearInterval(this._transactionTimerId)\n }\n this._transactionTimerId = null\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { assertEx, creatable } from '@xylabs/sdk-js'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { processPendingBlocks } from '@xyo-network/chain-sdk'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { BlockBoundWitness } from '@xyo-network/xl1-sdk'\nimport {\n Actor,\n ActorParams,\n BlockViewer,\n MempoolViewer,\n} from '@xyo-network/xl1-sdk'\n\nexport type ValidatorActorParams = ActorParams<\n {\n account: AccountInstance\n blockViewer: BlockViewer\n finalizedArchivist: ArchivistInstance\n mempoolViewer: MempoolViewer\n }>\n\n@creatable()\nexport class ValidatorActor extends Actor<ValidatorActorParams> {\n protected _lastValidatedBlock: BlockBoundWitness | undefined\n protected _lastValidatedBlockHash: Hash | undefined\n\n protected get blockViewer() {\n return this.params.blockViewer\n }\n\n protected get finalizedArchivist() {\n return assertEx(this.params.finalizedArchivist, () => 'finalizedArchivist not set')\n }\n\n protected get mempoolViewer() {\n return this.params.mempoolViewer\n }\n\n static override async paramsHandler(params?: Partial<ValidatorActorParams>) {\n return {\n ...await super.paramsHandler(params),\n mempoolViewer: assertEx(\n params?.mempoolViewer,\n () => 'mempoolViewer is required for ValidatorActor',\n ),\n blockViewer: assertEx(\n params?.blockViewer,\n () => 'blockViewer is required for ValidatorActor',\n ),\n finalizedArchivist: assertEx(\n params?.finalizedArchivist,\n () => 'finalizedArchivist is required for ValidatorActor',\n ),\n account: assertEx(\n params?.account,\n () => 'account is required for ValidatorActor',\n ),\n } satisfies ValidatorActorParams\n }\n\n override async startHandler(): Promise<void> {\n await super.startHandler()\n this.registerTimer('ValidatorActor', async () => {\n await this.spanAsync('processPendingBlocks', async () => {\n console.log('ValidatorActor: Processing pending blocks...')\n await processPendingBlocks({\n context: this.context,\n logger: this.logger,\n mempoolViewer: this.mempoolViewer,\n blockViewer: this.blockViewer,\n finalizedArchivist: this.finalizedArchivist,\n })\n }, { ...this.context, timeBudgetLimit: 1500 })\n }, 2000, 1500/* 500 */)\n }\n\n protected async slashInvalidBlock(_block: BlockBoundWitness): Promise<boolean> {\n // TODO: Handle slashing logic\n const slashed = await Promise.resolve(true)\n return slashed\n }\n\n protected async validateBlock(block: BlockBoundWitness): Promise<boolean> {\n // TODO: Validate using validation logic\n const valid = await Promise.resolve(true)\n // Store the last validated block and its hash\n this._lastValidatedBlock = block\n this._lastValidatedBlockHash = await PayloadBuilder.hash(block)\n\n // Return the validation result\n return valid\n }\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { startupSpanAsync } from '@xyo-network/chain-utils'\nimport { timeBudget } from '@xyo-network/xl1-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport type { ChainInitializableParams } from '../../ChainInitializableParams.ts'\nimport { initLocalChainFinalizedArchivist } from './local.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport async function initChainFinalizedArchivist(context: ChainInitializableParams) {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n return await timeBudget('initChainFinalizedArchivist', context.logger, async () => {\n const local = await startupSpanAsync('ChainFinalizedArchivist:initLocal', () => initLocalChainFinalizedArchivist(context))\n singleton = local\n return singleton\n }, 2000, true)\n })\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { CreatableProviderContext, Initializable } from '@xyo-network/xl1-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport { getLocalPersistentArchivist } from '../lib/index.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initLocalChainFinalizedArchivist: Initializable<CreatableProviderContext, ArchivistInstance> = async ({ config }): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const { root } = config.storage\n singleton = await getLocalPersistentArchivist('local-finalized-chain', 'chain', 'finalized', root)\n return singleton\n })\n}\n","import { rm } from 'node:fs/promises'\nimport Path from 'node:path'\n\nimport { LmdbArchivist, LmdbArchivistConfigSchema } from '@xyo-network/archivist-lmdb'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { getStoreDirectory, type StoreKind } from '@xyo-network/chain-protocol'\n\nconst DEFAULT_STORAGE_ROOT = Path.join(process.cwd(), '.store')\n\n/**\n * Returns a local persistent archivist\n * @param name The name of the archivist\n * @param dbName The name of the database\n * @param storeName The name of the store\n * @param storageRoot The root directory for storage (default is '.store' in the current working directory)\n * @param kind The kind of the archivist\n * @returns an archivist instance\n */\nexport const getLocalPersistentArchivist = (\n name: string,\n dbName: string,\n storeName: string,\n storageRoot?: string,\n kind: StoreKind = 'lmdb',\n): Promise<ArchivistInstance> => {\n switch (kind) {\n case 'lmdb': {\n const root = storageRoot ?? DEFAULT_STORAGE_ROOT\n return LmdbArchivist.create({\n account: 'random',\n config: {\n name,\n clearStoreOnStart: false,\n dbName,\n location: getStoreDirectory(dbName, root, 'lmdb'),\n schema: LmdbArchivistConfigSchema,\n storeName,\n },\n })\n }\n }\n}\n\n/**\n * Deletes a local persistent archivist\n * @param dbName The name of the database\n * @param storageRoot The root directory for storage (default is '.store' in the current working directory)\n * @param kind The kind of the archivist\n * @returns A promise that resolves when the archivist is deleted\n */\nexport const deleteLocalPersistentArchivist = async (dbName: string, storageRoot?: string, kind: StoreKind = 'lmdb'): Promise<void> => {\n await Promise.resolve()\n console.warn(`Deleting local persistent archivist for ${dbName} of kind ${kind}.`)\n let location = ''\n switch (kind) {\n case 'lmdb': {\n const root = storageRoot ?? DEFAULT_STORAGE_ROOT\n location = getStoreDirectory(dbName, root, 'lmdb')\n break\n }\n }\n await rm(location, { recursive: true, force: true })\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { startupSpanAsync } from '@xyo-network/chain-utils'\nimport { timeBudget } from '@xyo-network/xl1-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport type { ChainInitializableParams } from '../../ChainInitializableParams.ts'\nimport { initLocalPendingBlocksArchivist } from './local.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport async function initPendingBlocksArchivist(context: ChainInitializableParams) {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n return await timeBudget('initPendingBlocksArchivist', context.logger, async () => {\n const local = await startupSpanAsync('PendingBlocksArchivist:initLocal', () => initLocalPendingBlocksArchivist(context))\n singleton = local\n return singleton\n }, 2000, true)\n })\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { Config, Initializable } from '@xyo-network/xl1-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport { getLocalPersistentArchivist } from '../lib/index.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initLocalPendingBlocksArchivist: Initializable<{ config: Config }, ArchivistInstance> = async ({ config }): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const { root } = config.storage\n singleton = await getLocalPersistentArchivist('local-pending-blocks', 'chain', 'pending_block_bundles', root)\n return singleton\n })\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { startupSpanAsync } from '@xyo-network/chain-utils'\nimport type { InitializableParams } from '@xyo-network/xl1-sdk'\nimport { timeBudget } from '@xyo-network/xl1-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport { initLocalRejectedTransactionsArchivist } from './local.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport async function initRejectedTransactionsArchivist(params: InitializableParams) {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n return await timeBudget('initRejectedTransactionsArchivist', params.logger, async () => {\n const local = await startupSpanAsync('RejectedTransactionsArchivist:initLocal', () => initLocalRejectedTransactionsArchivist(params))\n singleton = local\n return singleton\n }, 2000, true)\n })\n}\n","import { MemoryArchivist, MemoryArchivistConfigSchema } from '@xyo-network/archivist-memory'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { Initializable } from '@xyo-network/xl1-sdk'\nimport { Mutex } from 'async-mutex'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initLocalRejectedTransactionsArchivist: Initializable<{}, ArchivistInstance> = async (): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n singleton = await MemoryArchivist.create({\n account: 'random',\n config: {\n schema: MemoryArchivistConfigSchema, max: 1000, name: 'localRejectedTransactions',\n },\n })\n return singleton\n })\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { startupSpanAsync } from '@xyo-network/chain-utils'\nimport type { Initializable } from '@xyo-network/xl1-sdk'\nimport { timeBudget } from '@xyo-network/xl1-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport type { ChainInitializableParams } from '../../ChainInitializableParams.ts'\nimport { initLocalStakeIntentStateArchivist } from './local.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initStakeIntentStateArchivist: Initializable<ChainInitializableParams, ArchivistInstance>\n = async (context: ChainInitializableParams): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n return await timeBudget('initStakeIntentStateArchivist', context.logger, async () => {\n const local = await startupSpanAsync('StakeIntentStateArchivist:initLocal', () => initLocalStakeIntentStateArchivist(context))\n singleton = local\n return assertEx(singleton, () => 'StakeIntentStateArchivist is undefined')\n }, 2000, true)\n })\n }\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { Initializable } from '@xyo-network/xl1-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport type { ChainInitializableParams } from '../../ChainInitializableParams.ts'\nimport { getLocalPersistentArchivist } from '../lib/index.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initLocalStakeIntentStateArchivist: Initializable<ChainInitializableParams,\n ArchivistInstance> = async ({ config }): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const { root } = config.storage\n singleton = await getLocalPersistentArchivist('local-stake-intent-state', 'stakeIntent', 'state', root)\n return assertEx(singleton, () => new Error('Failed to initialize stake intent state archivist'))\n })\n}\n","import type { Config } from '@xyo-network/xl1-sdk'\n\nexport function buildTelemetryConfig(config: Config, serviceName: string, serviceVersion: string, defaultMetricsScrapePort = 9464) {\n const { otlpEndpoint } = config.telemetry?.otel ?? {}\n const { path: endpoint = '/metrics', port = defaultMetricsScrapePort } = config.telemetry?.metrics?.scrape ?? {}\n const telemetryConfig = {\n attributes: { serviceName, serviceVersion }, otlpEndpoint, metricsConfig: { endpoint, port },\n }\n return telemetryConfig\n}\n","import type { AccountInstance } from '@xyo-network/account-model'\nimport { buildNextBlock } from '@xyo-network/chain-sdk'\nimport type { WithHashMeta } from '@xyo-network/payload-model'\nimport type { BlockBoundWitness, XL1BlockRange } from '@xyo-network/xl1-sdk'\nimport { createDeclarationIntent } from '@xyo-network/xl1-sdk'\n\nexport async function createProducerChainStakeIntentBlock(prevBlock: WithHashMeta<BlockBoundWitness>, producerAccount: AccountInstance, range: XL1BlockRange) {\n const producerDeclarationPayload = createDeclarationIntent(\n producerAccount.address,\n 'producer',\n range[0],\n range[1],\n )\n return await buildNextBlock(\n prevBlock,\n [],\n [producerDeclarationPayload],\n [producerAccount],\n )\n}\n","import {\n assertEx, hexFrom, isDefined, isHex,\n} from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\nexport const canUseChainId = (config: Config): boolean => {\n return isDefined(config.evm.chainId)\n}\n\nexport const getChainId = (config: Config) => {\n const chainId = assertEx(config.evm.chainId, () => 'Missing config.evm.chainId')\n if (isHex(chainId, { prefix: true })) {\n const hex = hexFrom(chainId)\n const parsed = Number.parseInt(hex, 16)\n return parsed\n } else {\n const parsed = Number.parseInt(chainId, 10)\n return parsed\n }\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-sdk'\nimport type { Provider } from 'ethers'\n\nimport { canUseInfuraProvider, initInfuraProvider } from './initInfuraProvider.ts'\nimport { canUseJsonRpcProvider, initJsonRpcProvider } from './initJsonRpcProvider.ts'\n\nlet provider: Promise<Provider> | undefined\n\nexport const initEvmProvider = async ({ config }: { config: Config; logger?: Logger }): Promise<Provider> => {\n if (provider) return provider\n if (canUseInfuraProvider(config)) {\n provider = initInfuraProvider(config)\n } else if (canUseJsonRpcProvider(config)) {\n provider = initJsonRpcProvider(config)\n }\n return assertEx(await provider, () => 'No provider available')\n}\n\nexport const canUseEvmProvider = ({ config }: { config: Config }) => {\n return canUseInfuraProvider(config) || canUseJsonRpcProvider(config)\n}\n","import { assertEx, isDefined } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-sdk'\nimport type { Provider } from 'ethers'\nimport { InfuraProvider } from 'ethers/providers'\n\nimport { canUseChainId, getChainId } from './initChainId.ts'\n\nlet instance: Promise<InfuraProvider> | undefined\n\nexport const initInfuraProvider = (config: Config): Promise<Provider> => {\n if (instance) return instance\n const providerConfig = getInfuraProviderConfig(config)\n instance = Promise.resolve(new InfuraProvider(providerConfig[0], providerConfig[1]))\n return instance\n}\n\nexport const canUseInfuraProvider = (config: Config): boolean => {\n return canUseChainId(config)\n && isDefined(config.evm?.infura?.projectId)\n && isDefined(config.evm?.infura?.projectSecret)\n}\n\nexport const getInfuraProviderConfig = (config: Config) => {\n const projectId = assertEx(config.evm?.infura?.projectId, () => 'Missing config.evm.infura.projectId')\n const projectSecret = assertEx(config.evm?.infura?.projectSecret, () => 'Missing config.evm.infura.projectSecret')\n return [getChainId(config), projectId, projectSecret] as const\n}\n","import { assertEx, isDefined } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-sdk'\nimport { JsonRpcProvider } from 'ethers/providers'\n\nimport { canUseChainId, getChainId } from './initChainId.ts'\n\nexport const initJsonRpcProvider = (config: Config) => {\n const providerConfig = getJsonRpcProviderConfig(config)\n return Promise.resolve(new JsonRpcProvider(...providerConfig))\n}\n\nexport const canUseJsonRpcProvider = (config: Config) => {\n return canUseChainId(config)\n && isDefined(config.evm.jsonRpc?.url)\n}\n\nexport const getJsonRpcProviderConfig = (config: Config) => {\n const jsonRpcUrl = assertEx(config.evm.jsonRpc?.url, () => 'Missing config.evm.jsonRpc.url')\n return [jsonRpcUrl, getChainId(config)] as const\n}\n","import type {\n IncomingMessage, Server, ServerResponse,\n} from 'node:http'\nimport http from 'node:http'\n\nimport type { CreatableStatus, Logger } from '@xylabs/sdk-js'\nimport { isDefined } from '@xylabs/sdk-js'\nimport type {\n Config, Initializable, RuntimeStatusMonitor,\n} from '@xyo-network/xl1-sdk'\n\nconst sendStatus = (res: ServerResponse, status: CreatableStatus, errorCode: number) => {\n const statusCode = status === 'started' ? 200 : errorCode\n res.writeHead(statusCode, { 'Content-Type': 'application/json' })\n res.end(JSON.stringify({ status }))\n}\n\nconst notFound = (res: ServerResponse) => {\n res.writeHead(404, { 'Content-Type': 'application/json' })\n res.end(JSON.stringify({ status: 'not found' }))\n}\n\n/**\n * Starts an HTTP server with Kubernetes health endpoints:\n * - /healthz\n * - /livez\n * - /readyz\n * @param port The port to listen on (default: 8080)\n */\nconst createHealthServer = (port: number, statusMonitor: RuntimeStatusMonitor, logger: Logger) => {\n const server = http.createServer((req: IncomingMessage, res: ServerResponse) => {\n const url = req.url ?? ''\n\n const status = statusMonitor.getGlobalStatus()\n\n switch (url) {\n case '/healthz': {\n sendStatus(res, status, 500)\n break\n }\n case '/livez': {\n sendStatus(res, status, 503)\n break\n }\n case '/readyz': {\n sendStatus(res, status, 503)\n break\n }\n default: {\n notFound(res)\n }\n }\n })\n\n server.listen(port, () => {\n logger.log(`Health server running on http://localhost:${port}`)\n logger.log(' - /healthz')\n logger.log(' - /livez')\n logger.log(' - /readyz')\n })\n return server\n}\n\nexport const initHealthEndpoints: Initializable<{ config: Config; logger: Logger; statusReporter: RuntimeStatusMonitor }, Server | undefined> = (params) => {\n const {\n config, logger, statusReporter,\n } = params\n const { healthCheckPort } = config.producer\n return isDefined(healthCheckPort) ? createHealthServer(healthCheckPort, statusReporter, logger) : undefined\n}\n","import type { Host, ServiceProvider } from '../model/index.ts'\n\n/**\n * A generic host implementation that can be used as a starting point for\n * more complex host implementations.\n */\nexport class GenericHost implements Host {\n services: ServiceProvider\n\n constructor(services: ServiceProvider) {\n this.services = services\n }\n\n async start(): Promise<void> {\n await Promise.resolve()\n // Initialize or start your services here\n console.log('Host is starting...')\n }\n\n async stop(): Promise<void> {\n await Promise.resolve()\n // Stop or clean up services here\n console.log('Host is stopping...')\n }\n}\n","import type { ServiceProvider } from '../model/index.ts'\n\nexport class DefaultServiceProvider implements ServiceProvider {\n protected _services: Record<string, unknown>\n constructor(services: Record<string, unknown>) {\n this._services = services\n }\n\n getService<T>(serviceIdentifier: string): T | undefined {\n return this._services[serviceIdentifier] as T\n }\n}\n","import type { ServiceProvider } from './ServiceProvider.ts'\n\nexport interface ServiceCollection {\n build(): ServiceProvider\n}\n\n/**\n * Represents the lifetime of a service\n */\nexport const ServiceLifetime = {\n Singleton: 'Singleton',\n Transient: 'Transient',\n} as const\n\n/**\n * Describes a single service registration\n */\nexport interface ServiceDescriptor<T = unknown> {\n identifier: string | symbol\n implementationFactory: () => T\n lifetime: keyof typeof ServiceLifetime\n}\n","import { BaseMongoSdk, type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport type { Hash } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport { MongoMap } from '@xyo-network/chain-protocol'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { BalancesStepSummary, MapType } from '@xyo-network/xl1-sdk'\nimport { hasMongoConfig, MemoryMap } from '@xyo-network/xl1-sdk'\n\nimport type { ConfigContext } from '../ConfigContext.ts'\n\nexport async function initBalanceSummaryMap({ config, logger }: ConfigContext): Promise<MapType<string, WithStorageMeta<BalancesStepSummary>>> {\n const mongoConfig = config.storage?.mongo\n if (hasMongoConfig(mongoConfig)) {\n // Create the MongoDB SDK from the configuration\n const {\n connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName,\n } = mongoConfig\n const payloadSdkConfig: BaseMongoSdkPrivateConfig = {\n dbConnectionString, dbDomain, dbName, dbPassword, dbUserName,\n }\n\n const sdkBalanceSummaryMap = new BaseMongoSdk<WithStorageMeta<BalancesStepSummary>>({ ...payloadSdkConfig, collection: 'balance_summary_map' })\n const result = await MongoMap.create<MongoMap<Hash, WithStorageMeta<BalancesStepSummary>>>({\n sdk: sdkBalanceSummaryMap,\n getCache: { enabled: true, maxEntries: 5000 },\n })\n assertEx(await result.start(), () => 'Failed to start transfer summary map')\n return result\n } else {\n logger?.warn('[API] Mongo configuration not found. Using MemoryMap for BalanceSummaryMap.')\n return new MemoryMap<string, WithStorageMeta<BalancesStepSummary>>()\n }\n}\n","import type { Address, Logger } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { AttachableArchivistInstance } from '@xyo-network/archivist-model'\nimport { asAttachableArchivistInstance } from '@xyo-network/archivist-model'\nimport type { BridgeInstance } from '@xyo-network/bridge-model'\nimport type { AttachableModuleInstance, ModuleIdentifier } from '@xyo-network/module-model'\nimport { asAttachableModuleInstance } from '@xyo-network/module-model'\nimport type { Initializable } from '@xyo-network/xl1-sdk'\nimport { Mutex } from 'async-mutex'\n\nconst initMutex = new Mutex()\ntype ModuleDictionary = Record<ModuleIdentifier, AttachableModuleInstance | undefined>\ntype BridgedModuleDictionary = Record<Address, ModuleDictionary | undefined>\nconst bridgedModuleDictionary: BridgedModuleDictionary = {}\n\nexport const initBridgedModule: Initializable<\n { bridge: BridgeInstance; moduleName: ModuleIdentifier }, AttachableModuleInstance\n> = async ({ bridge, moduleName }): Promise<AttachableModuleInstance> => {\n return await initMutex.runExclusive(async () => {\n const existing = bridgedModuleDictionary?.[bridge.address]?.[moduleName]\n if (existing) return existing\n const mod = assertEx(await bridge.resolve(moduleName), () => `Could not resolve ${moduleName}`)\n const moduleInstance = assertEx(asAttachableModuleInstance(mod), () => `Could not convert ${moduleName} to attachable module instance`)\n // Initialize the nested dictionary if needed\n let moduleMap = bridgedModuleDictionary[bridge.address]\n if (moduleMap === undefined) {\n moduleMap = {}\n bridgedModuleDictionary[bridge.address] = moduleMap\n }\n // Store and return the module instance\n moduleMap[moduleName] = moduleInstance\n return moduleInstance\n })\n}\n\nexport const initBridgedArchivistModule: Initializable<\n { bridge: BridgeInstance; logger?: Logger; moduleName: ModuleIdentifier }, AttachableArchivistInstance\n> = async ({ bridge, moduleName }): Promise<AttachableArchivistInstance> => {\n return assertEx(\n asAttachableArchivistInstance(await initBridgedModule({ bridge, moduleName })),\n () => `Could not convert ${moduleName} to attachable archivist instance`,\n )\n}\n","import { asEthAddress, assertEx } from '@xylabs/sdk-js'\nimport {\n EvmChainContractViewer, EvmStakeEventsViewer, EvmStakeViewer,\n} from '@xyo-network/chain-ethereum'\nimport type {\n ChainId,\n Position,\n ProviderFactoryLocatorInstance,\n} from '@xyo-network/xl1-sdk'\nimport {\n SimpleChainContractViewer,\n SimpleStakeEventsViewer, SimpleStakeViewer, SimpleTimeSyncViewer,\n XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-sdk'\n\nimport { canUseEvmProvider, initEvmProvider } from '../evm/index.ts'\n\nexport async function initEvmProvidersIfAvailable(locator: ProviderFactoryLocatorInstance) {\n const { config, logger } = locator.context\n if (canUseEvmProvider({ config })) {\n const chainId = assertEx(config.chain.id as ChainId, () => 'Missing config.chain.chainId (required for EVM providers)')\n const provider = await initEvmProvider({ config, logger })\n const address = asEthAddress(chainId, true)\n\n // Register the contract events viewer\n locator.register(EvmStakeEventsViewer.factory<EvmStakeEventsViewer>(\n EvmStakeEventsViewer.dependencies,\n { address, provider },\n ))\n\n // Register the stake viewer\n locator.register(EvmStakeViewer.factory<EvmStakeViewer>(\n EvmStakeViewer.dependencies,\n { address, provider },\n ))\n\n // Register the contract viewer\n locator.register(EvmChainContractViewer.factory<EvmChainContractViewer>(\n EvmChainContractViewer.dependencies,\n { address, provider },\n ))\n\n locator.register(SimpleTimeSyncViewer.factory<SimpleTimeSyncViewer>(\n SimpleTimeSyncViewer.dependencies,\n { ethProvider: provider },\n ))\n } else {\n logger?.warn('EVM provider not available - running with memory based contract/stake viewers')\n const positions: Position[] = []\n const chainId = assertEx(config.chain.id, () => 'Missing config.chain.chainId (required for non-EVM providers)')\n\n // Register the contract events viewer\n locator.register(SimpleStakeEventsViewer.factory<SimpleStakeEventsViewer>(\n SimpleStakeEventsViewer.dependencies,\n { positions },\n ))\n\n // Register the stake viewer\n locator.register(SimpleStakeViewer.factory<SimpleStakeViewer>(\n SimpleStakeViewer.dependencies,\n { positions },\n ))\n\n // Register the contract viewer\n locator.register(SimpleChainContractViewer.factory<SimpleChainContractViewer>(\n SimpleChainContractViewer.dependencies,\n {\n chainId, minWithdrawalBlocks: 10, stakingTokenAddress: XYO_ZERO_ADDRESS, rewardsContract: XYO_ZERO_ADDRESS,\n },\n ))\n\n locator.register(SimpleTimeSyncViewer.factory<SimpleTimeSyncViewer>(\n SimpleTimeSyncViewer.dependencies,\n {},\n ))\n }\n return locator\n}\n","import { MongoDBArchivistV2 } from '@xyo-network/archivist-mongodb'\nimport type { MongoDBModuleParamsV2 } from '@xyo-network/module-model-mongodb'\nimport type { Config } from '@xyo-network/xl1-sdk'\n\nasync function initMongoFinalizedArchivist(config: Config) {\n const payloadSdkConfig = {\n ...config.storage.mongo,\n collection: 'chain_validated',\n } satisfies MongoDBModuleParamsV2['payloadSdkConfig']\n return await MongoDBArchivistV2.create({ payloadSdkConfig })\n}\n\nexport async function initFinalizedArchivist(config: Config) {\n const finalizedArchivist = await initMongoFinalizedArchivist(config)\n return finalizedArchivist\n}\n","import type { Promisable } from '@xylabs/sdk-js'\nimport { isUndefined } from '@xylabs/sdk-js'\nimport { HDWallet } from '@xyo-network/wallet'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type {\n Config, Initializable, InitializableParams,\n} from '@xyo-network/xl1-sdk'\nimport { ADDRESS_INDEX, generateXyoBaseWalletFromPhrase } from '@xyo-network/xl1-sdk'\n\nlet accountServiceSingleton: Promisable<WalletInstance> | undefined\n\nexport const initProducerAccount: Initializable<InitializableParams<{ config: Config }>, WalletInstance>\n = async ({ config, logger }): Promise<WalletInstance> => {\n if (accountServiceSingleton) return accountServiceSingleton\n let walletPhrase = config.producer.mnemonic\n if (isUndefined(walletPhrase)) {\n logger?.warn('[Producer] No wallet mnemonic specified!')\n const randomMnemonic = HDWallet.generateMnemonic()\n logger?.warn(`[Producer] Using randomly generated mnemonic:\n \n${randomMnemonic}\n \n `)\n walletPhrase = randomMnemonic\n }\n const wallet = await generateXyoBaseWalletFromPhrase(walletPhrase)\n const account = await wallet.derivePath(ADDRESS_INDEX.XYO)\n accountServiceSingleton = account\n return accountServiceSingleton\n }\n","import { assertEx, isString } from '@xylabs/sdk-js'\nimport type { BiosExternalInterface } from '@xyo-network/bios-model'\nimport { HDWallet } from '@xyo-network/wallet'\n\nimport type { ConfigContext } from '../ConfigContext.ts'\n\n// TODO: Make nodejs version of bios support round tripping mnemonic between boots\nexport async function initSeedPhrase({\n config, logger, bios,\n}: ConfigContext<{ bios: BiosExternalInterface }>): Promise<string> {\n const storedSeedPhrase = await bios.seedPhraseStore.get('os')\n logger?.debug(`[API] Stored mnemonic: ${storedSeedPhrase}`)\n const { mnemonic } = config.api\n if (isString(storedSeedPhrase) && isString(mnemonic)) {\n logger?.warn('[API] Stored mnemonic does not match supplied. Updating stored mnemonic to supplied.')\n await bios.seedPhraseStore.set('os', mnemonic)\n } else {\n let seedPhrase: string\n if (isString(mnemonic)) {\n seedPhrase = mnemonic\n } else {\n seedPhrase = HDWallet.generateMnemonic()\n logger?.log('[API] No mnemonic provided, using random mnemonic. This is not recommended for production use.')\n logger?.log(`[API] Mnemonic: ${seedPhrase}`)\n }\n await bios.seedPhraseStore.set('os', seedPhrase)\n }\n return assertEx(await bios.seedPhraseStore.get('os'), () => 'Unable to acquire mnemonic from bios')\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type {\n BalancesStepSummary, MapType, TransfersStepSummary,\n} from '@xyo-network/xl1-sdk'\n\nimport type { ConfigContext } from '../ConfigContext.ts'\nimport { loadNode } from '../manifest/index.ts'\n\nasync function writableChainArchivistFromNode(node: NodeInstance) {\n return asArchivistInstance(\n await node.resolve('Chain:Validated'),\n { required: true },\n )\n}\n\nasync function readonlyChainArchivistFromNode(node: NodeInstance) {\n return assertEx(asArchivistInstance(\n await node.resolve('Chain:Validated'),\n { required: true },\n ))\n}\n\nasync function pendingTransactionsArchivistFromNode(node: NodeInstance) {\n return asArchivistInstance(\n await node.resolve('XYOChain:Pending:Transactions'),\n { required: true },\n )\n}\n\nasync function pendingBlocksArchivistFromNode(node: NodeInstance) {\n return asArchivistInstance(\n await node.resolve('XYOChain:Pending:Blocks'),\n { required: true },\n )\n}\n\nexport async function initServerNode({\n wallet, logger, config, node: providedNode, transfersSummaryMap, balancesSummaryMap,\n}: ConfigContext<{\n balancesSummaryMap: MapType<string, WithStorageMeta<BalancesStepSummary>>\n node?: NodeInstance\n transfersSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>\n wallet: WalletInstance\n}>) {\n const node: NodeInstance = providedNode ?? await loadNode({\n wallet, logger, config, transfersSummaryMap, balancesSummaryMap,\n })\n assertEx(await node.start(), () => 'Failed to start node')\n const writableChainArchivist = await writableChainArchivistFromNode(node)\n const readonlyChainArchivist = await readonlyChainArchivistFromNode(node)\n const pendingTransactionsArchivist = await pendingTransactionsArchivistFromNode(node)\n const pendingBlocksArchivist = await pendingBlocksArchivistFromNode(node)\n return {\n node, writableChainArchivist, readonlyChainArchivist, pendingTransactionsArchivist, pendingBlocksArchivist,\n }\n}\n","import { type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport { isDefined } from '@xylabs/sdk-js'\nimport { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { MongoDBArchivistV2, MongoDBArchivistV2Deletable } from '@xyo-network/archivist-mongodb'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport { initTelemetry } from '@xyo-network/chain-telemetry'\nimport { AbstractModule, LoggerModuleStatusReporter } from '@xyo-network/module-abstract'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type { MongoDBModuleParamsV2 } from '@xyo-network/module-model-mongodb'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport type {\n BalancesStepSummary, MapType, TransfersStepSummary,\n} from '@xyo-network/xl1-sdk'\nimport { hasMongoConfig } from '@xyo-network/xl1-sdk'\n\nimport type { ConfigContext } from '../ConfigContext.ts'\n\n/**\n * Used for retrieving a locator with the necessary modules registered for testing\n * operation of the node (entirely in memory)\n * @returns A locator with the necessary modules registered\n */\nexport const getLocator = async ({ config, logger}: ConfigContext<{\n balancesSummaryMap: MapType<string, WithStorageMeta<BalancesStepSummary>>\n transfersSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>\n}>) => {\n const { otlpEndpoint } = config.telemetry?.otel ?? {}\n const { path: endpoint = '/metrics', port: port = 9465 } = config.telemetry?.metrics?.scrape ?? {}\n const { traceProvider, meterProvider } = await initTelemetry({\n attributes: {\n serviceName: 'xl1-api',\n serviceVersion: '1.0.0',\n },\n otlpEndpoint,\n metricsConfig: { endpoint, port },\n })\n\n if (isDefined(logger)) AbstractModule.defaultLogger = logger\n const statusReporter = logger ? new LoggerModuleStatusReporter(logger) : undefined\n\n const locator = new ModuleFactoryLocator()\n // If there's a MongoDB configuration\n const mongoConfig = config.storage?.mongo\n if (hasMongoConfig(mongoConfig)) {\n // Create the MongoDB SDK from the configuration\n const {\n connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName,\n } = mongoConfig\n const payloadSdkConfig: BaseMongoSdkPrivateConfig = {\n dbConnectionString, dbDomain, dbName, dbPassword, dbUserName,\n }\n const params: Partial<MongoDBModuleParamsV2> = {\n meterProvider, payloadSdkConfig, statusReporter, traceProvider,\n }\n // Register the MongoDB Archivist as the default\n locator.register(MongoDBArchivistV2.factory(params), undefined, true)\n locator.register(MongoDBArchivistV2Deletable.factory(params), { 'network.xyo.storage.capabilities.delete': 'enabled' }, false)\n }\n\n locator.register(MemoryArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(MemorySentinel.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(ViewArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n return locator\n}\n","import { ManifestWrapper } from '@xyo-network/manifest-wrapper'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type {\n BalancesStepSummary, MapType, TransfersStepSummary,\n} from '@xyo-network/xl1-sdk'\n\nimport type { ConfigContext } from '../ConfigContext.ts'\nimport { getLocator } from './getLocator.ts'\nimport { NodeManifest } from './nodeManifest.ts'\nimport { PrivateChildManifests } from './private/index.ts'\nimport { PublicChildManifests } from './public/index.ts'\n\n/**\n * Creates a node with the xyo-chain modules registered\n * @returns A node with the xyo-chain modules registered\n */\nexport const loadNode = async ({\n wallet, config, balancesSummaryMap, transfersSummaryMap,\n}: ConfigContext<{\n balancesSummaryMap: MapType<string, WithStorageMeta<BalancesStepSummary>>\n transfersSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>\n wallet: WalletInstance\n}>) => {\n const locator = await getLocator({\n config, balancesSummaryMap, transfersSummaryMap,\n })\n const wrapper = new ManifestWrapper(NodeManifest, wallet, locator, PublicChildManifests, PrivateChildManifests)\n const [node, ...childNodes] = await wrapper.loadNodes()\n if (childNodes?.length > 0) {\n await Promise.all(childNodes.map(childNode => node.register(childNode)))\n await Promise.all(childNodes.map(childNode => node.attach(childNode.address, true)))\n }\n return node\n}\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"44'/60'/1\",\n \"name\": \"XYOChain\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [],\n \"public\": []\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}\n","import type { PackageManifestPayload } from '@xyo-network/manifest-model'\n\nimport node from './node.json' with { type: 'json' }\n\n/**\n * Root Node Manifest\n */\nexport const NodeManifest = node as unknown as PackageManifestPayload\n","/**\n * Private Child Manifests\n */\nexport const PrivateChildManifests = []\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"1\",\n \"name\": \"Chain\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [\n {\n \"config\": {\n \"accountPath\": \"1/1'/1'\",\n \"name\": \"Validated\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"payloadSdkConfig\": {\n \"collection\": \"chain_validated\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n }\n ],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"1/1/1\",\n \"name\": \"Finalized\",\n \"allowedQueries\": [\n \"network.xyo.query.archivist.get\",\n \"network.xyo.query.archivist.next\"\n ],\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 50000\n },\n \"originArchivist\": \"Validated\",\n \"schema\": \"network.xyo.archivist.view.config\"\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"2\",\n \"name\": \"Pending\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"2/1/1\",\n \"name\": \"Transactions\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"labels\": {\n \"network.xyo.storage.capabilities.delete\": \"enabled\",\n \"network.xyo.storage.class\": \"mongodb\"\n },\n \"payloadSdkConfig\": {\n \"collection\": \"pending_transaction_bundles\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"2/1/2\",\n \"name\": \"Blocks\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"labels\": {\n \"network.xyo.storage.capabilities.delete\": \"enabled\",\n \"network.xyo.storage.class\": \"mongodb\"\n },\n \"payloadSdkConfig\": {\n \"collection\": \"pending_block_bundles\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}\n","import type { ModuleManifest, PackageManifestPayload } from '@xyo-network/manifest-model'\n\nimport Chain from './Chain.json' with { type: 'json' }\nimport Pending from './Pending.json' with { type: 'json' }\n\n/**\n * Chain Node Manifest\n */\nconst ChainNodeManifest = Chain as unknown as PackageManifestPayload\n/**\n * Pending Node Manifest\n */\nconst PendingNodeManifest = Pending as unknown as PackageManifestPayload\n/**\n * Public Child Manifests\n */\nexport const PublicChildManifests: ModuleManifest[] = [\n ...ChainNodeManifest.nodes,\n ...PendingNodeManifest.nodes,\n]\n","import type { Logger } from '@xylabs/sdk-js'\nimport { RuntimeStatusMonitor } from '@xyo-network/xl1-sdk'\n\nexport function initStatusReporter({ logger }: { logger: Logger }) {\n const statusReporter = new RuntimeStatusMonitor(logger)\n statusReporter.onGlobalTransition({ to: 'started' }, () => {\n logger.log('All services started.')\n })\n statusReporter.onGlobalTransition({ to: 'error' }, () => {\n logger.error('Producer encountered an unhandled error!')\n // eslint-disable-next-line unicorn/no-process-exit\n process.exit(1)\n })\n return statusReporter\n}\n","import { BaseMongoSdk, type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport type { Hash } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport { MongoMap } from '@xyo-network/chain-protocol'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { MapType, TransfersStepSummary } from '@xyo-network/xl1-sdk'\nimport { hasMongoConfig, MemoryMap } from '@xyo-network/xl1-sdk'\n\nimport type { ConfigContext } from '../ConfigContext.ts'\n\nexport async function initTransferSummaryMap({ config, logger }: ConfigContext): Promise<MapType<string, WithStorageMeta<TransfersStepSummary>>> {\n const mongoConfig = config.storage?.mongo\n if (hasMongoConfig(mongoConfig)) {\n // Create the MongoDB SDK from the configuration\n const {\n connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName,\n } = mongoConfig\n const payloadSdkConfig: BaseMongoSdkPrivateConfig = {\n dbConnectionString, dbDomain, dbName, dbPassword, dbUserName,\n }\n\n const sdkTransferSummaryMap = new BaseMongoSdk<WithStorageMeta<TransfersStepSummary>>({ ...payloadSdkConfig, collection: 'transfer_summary_map' })\n const result = await MongoMap.create<MongoMap<Hash, WithStorageMeta<TransfersStepSummary>>>({\n sdk: sdkTransferSummaryMap,\n getCache: { enabled: true, maxEntries: 5000 },\n })\n assertEx(await result.start(), () => 'Failed to start transfer summary map')\n return result\n } else {\n logger?.warn('[API] Mongo configuration not found. Using MemoryMap for TransferSummaryMap.')\n return new MemoryMap<string, WithStorageMeta<TransfersStepSummary>>()\n }\n}\n","import { isDefined } from '@xylabs/sdk-js'\nimport { boot } from '@xyo-network/bios'\nimport { HDWallet } from '@xyo-network/wallet'\n\nimport type { ConfigContext } from '../ConfigContext.ts'\nimport { initSeedPhrase } from './initSeedPhrase.ts'\n\nasync function initWallet({ config, logger }: ConfigContext, mnemonic?: string) {\n const bios = await boot()\n const seedPhrase = isDefined(mnemonic)\n ? mnemonic\n : await initSeedPhrase({\n bios, config, logger,\n })\n return await HDWallet.fromPhrase(seedPhrase)\n}\n\nexport async function initApiWallet({ config, logger }: ConfigContext) {\n const { mnemonic } = config.api\n return await initWallet({ config, logger }, mnemonic)\n}\n\nexport async function initMempoolWallet({ config, logger }: ConfigContext) {\n const { mnemonic } = config.mempool\n return await initWallet({ config, logger }, mnemonic)\n}\n\nexport async function initProducerWallet({ config, logger }: ConfigContext) {\n const { mnemonic } = config.producer\n return await initWallet({ config, logger }, mnemonic)\n}\n\nexport async function initRewardsRedemptionApiWallet({ config, logger }: ConfigContext) {\n const { mnemonic } = config.rewardRedemptionApi\n return await initWallet({ config, logger }, mnemonic)\n}\n","import type { CreatableInstance } from '@xylabs/sdk-js'\nimport { AbstractCreatable, creatable } from '@xylabs/sdk-js'\nimport { ActorInstance, ActorInstanceV2 } from '@xyo-network/xl1-sdk'\n\nexport interface OrchestratorInstance extends CreatableInstance {\n registerActor(actor: ActorInstance | ActorInstanceV2): Promise<void>\n}\n\n@creatable()\nexport class Orchestrator extends AbstractCreatable implements OrchestratorInstance {\n protected actors: (ActorInstance | ActorInstanceV2)[] = []\n protected keepAliveHandle: NodeJS.Timeout | null = null\n protected running = false\n\n /**\n * Registers an actor.\n * (We won't activate the actor until `start()` is called.)\n */\n async registerActor(actor: ActorInstance | ActorInstanceV2) {\n if (this.running) {\n // If the orchestrator is already running, activate the actor immediately\n await actor.start()\n }\n this.actors.push(actor)\n }\n\n /**\n * Starts the orchestrator: activates all actors.\n */\n override async startHandler() {\n await super.startHandler()\n if (this.running) {\n this.logger?.warn('[Orchestrator] Already started.')\n return\n }\n\n this.logger?.log('[Orchestrator] Starting...')\n this.running = true\n for (const actor of this.actors) {\n await actor.start()\n }\n // This interval will fire every 24.8 days (2^31 - 1 ms), effectively never finishing\n this.keepAliveHandle = setInterval(() => {\n // No-op\n }, 2_147_483_647)\n }\n\n /**\n * Stops the orchestrator: deactivates all actors.\n */\n override async stopHandler() {\n await super.stopHandler()\n if (!this.running) {\n this.logger?.log('[Orchestrator] Already stopped.')\n return\n }\n\n this.logger?.log('[Orchestrator] Stopping...')\n for (const actor of this.actors) {\n await actor.stop()\n }\n this.running = false\n if (this.keepAliveHandle) clearInterval(this.keepAliveHandle)\n this.logger?.log('[Orchestrator] Stopped...')\n }\n}\n"],"mappings":"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","names":["assertEx","Actor","Mutex","BalanceActor","Actor","_updateMutex","Mutex","accountBalanceViewer","assertEx","params","blockViewer","startHandler","registerTimer","updateBalance","isLocked","runExclusive","head","currentBlockHash","accountBalances","assertEx","creatable","Actor","Mutex","MempoolActor","Actor","_blockTimerId","_blockTimerMutex","Mutex","_transactionTimerId","_transactionTimerMutex","mempoolRunner","params","pendingBlocksArchivist","pendingTransactionsArchivist","paramsHandler","assertEx","startHandler","restartBlockTimer","stopHandler","stopBlockTimer","setInterval","isLocked","runExclusive","prunePendingBlocks","batchSize","restartTransactionTimer","stopTransactionTimer","prunePendingTransactions","clearInterval","assertEx","creatable","processPendingBlocks","PayloadBuilder","Actor","ValidatorActor","Actor","_lastValidatedBlock","_lastValidatedBlockHash","blockViewer","params","finalizedArchivist","assertEx","mempoolViewer","paramsHandler","account","startHandler","registerTimer","spanAsync","console","log","processPendingBlocks","context","logger","timeBudgetLimit","slashInvalidBlock","_block","slashed","Promise","resolve","validateBlock","block","valid","PayloadBuilder","hash","startupSpanAsync","timeBudget","Mutex","Mutex","rm","Path","LmdbArchivist","LmdbArchivistConfigSchema","getStoreDirectory","DEFAULT_STORAGE_ROOT","Path","join","process","cwd","getLocalPersistentArchivist","name","dbName","storeName","storageRoot","kind","root","LmdbArchivist","create","account","config","clearStoreOnStart","location","getStoreDirectory","schema","LmdbArchivistConfigSchema","mutex","Mutex","singleton","initLocalChainFinalizedArchivist","config","runExclusive","root","storage","getLocalPersistentArchivist","mutex","Mutex","singleton","initChainFinalizedArchivist","context","runExclusive","timeBudget","logger","local","startupSpanAsync","initLocalChainFinalizedArchivist","startupSpanAsync","timeBudget","Mutex","Mutex","mutex","Mutex","singleton","initLocalPendingBlocksArchivist","config","runExclusive","root","storage","getLocalPersistentArchivist","mutex","Mutex","singleton","initPendingBlocksArchivist","context","runExclusive","timeBudget","logger","local","startupSpanAsync","initLocalPendingBlocksArchivist","startupSpanAsync","timeBudget","Mutex","MemoryArchivist","MemoryArchivistConfigSchema","Mutex","mutex","Mutex","singleton","initLocalRejectedTransactionsArchivist","runExclusive","MemoryArchivist","create","account","config","schema","MemoryArchivistConfigSchema","max","name","mutex","Mutex","singleton","initRejectedTransactionsArchivist","params","runExclusive","timeBudget","logger","local","startupSpanAsync","initLocalRejectedTransactionsArchivist","assertEx","startupSpanAsync","timeBudget","Mutex","assertEx","Mutex","mutex","Mutex","singleton","initLocalStakeIntentStateArchivist","config","runExclusive","root","storage","getLocalPersistentArchivist","assertEx","Error","mutex","Mutex","singleton","initStakeIntentStateArchivist","context","runExclusive","timeBudget","logger","local","startupSpanAsync","initLocalStakeIntentStateArchivist","assertEx","buildTelemetryConfig","config","serviceName","serviceVersion","defaultMetricsScrapePort","otlpEndpoint","telemetry","otel","path","endpoint","port","metrics","scrape","telemetryConfig","attributes","metricsConfig","buildNextBlock","createDeclarationIntent","createProducerChainStakeIntentBlock","prevBlock","producerAccount","range","producerDeclarationPayload","createDeclarationIntent","address","buildNextBlock","assertEx","hexFrom","isDefined","isHex","canUseChainId","config","isDefined","evm","chainId","getChainId","assertEx","isHex","prefix","hex","hexFrom","parsed","Number","parseInt","assertEx","assertEx","isDefined","InfuraProvider","instance","initInfuraProvider","config","providerConfig","getInfuraProviderConfig","Promise","resolve","InfuraProvider","canUseInfuraProvider","canUseChainId","isDefined","evm","infura","projectId","projectSecret","assertEx","getChainId","assertEx","isDefined","JsonRpcProvider","initJsonRpcProvider","config","providerConfig","getJsonRpcProviderConfig","Promise","resolve","JsonRpcProvider","canUseJsonRpcProvider","canUseChainId","isDefined","evm","jsonRpc","url","jsonRpcUrl","assertEx","getChainId","provider","initEvmProvider","config","canUseInfuraProvider","initInfuraProvider","canUseJsonRpcProvider","initJsonRpcProvider","assertEx","canUseEvmProvider","http","isDefined","sendStatus","res","status","errorCode","statusCode","writeHead","end","JSON","stringify","notFound","createHealthServer","port","statusMonitor","logger","server","http","createServer","req","url","getGlobalStatus","listen","log","initHealthEndpoints","params","config","statusReporter","healthCheckPort","producer","isDefined","undefined","GenericHost","services","start","Promise","resolve","console","log","stop","DefaultServiceProvider","_services","services","getService","serviceIdentifier","ServiceLifetime","Singleton","Transient","BaseMongoSdk","assertEx","MongoMap","hasMongoConfig","MemoryMap","initBalanceSummaryMap","config","logger","mongoConfig","storage","mongo","hasMongoConfig","connectionString","dbConnectionString","database","dbName","domain","dbDomain","password","dbPassword","username","dbUserName","payloadSdkConfig","sdkBalanceSummaryMap","BaseMongoSdk","collection","result","MongoMap","create","sdk","getCache","enabled","maxEntries","assertEx","start","warn","MemoryMap","assertEx","asAttachableArchivistInstance","asAttachableModuleInstance","Mutex","initMutex","Mutex","bridgedModuleDictionary","initBridgedModule","bridge","moduleName","runExclusive","existing","address","mod","assertEx","resolve","moduleInstance","asAttachableModuleInstance","moduleMap","undefined","initBridgedArchivistModule","asAttachableArchivistInstance","asEthAddress","assertEx","EvmChainContractViewer","EvmStakeEventsViewer","EvmStakeViewer","SimpleChainContractViewer","SimpleStakeEventsViewer","SimpleStakeViewer","SimpleTimeSyncViewer","XYO_ZERO_ADDRESS","initEvmProvidersIfAvailable","locator","config","logger","context","canUseEvmProvider","chainId","assertEx","chain","id","provider","initEvmProvider","address","asEthAddress","register","EvmStakeEventsViewer","factory","dependencies","EvmStakeViewer","EvmChainContractViewer","SimpleTimeSyncViewer","ethProvider","warn","positions","SimpleStakeEventsViewer","SimpleStakeViewer","SimpleChainContractViewer","minWithdrawalBlocks","stakingTokenAddress","XYO_ZERO_ADDRESS","rewardsContract","MongoDBArchivistV2","initMongoFinalizedArchivist","config","payloadSdkConfig","storage","mongo","collection","MongoDBArchivistV2","create","initFinalizedArchivist","finalizedArchivist","isUndefined","HDWallet","ADDRESS_INDEX","generateXyoBaseWalletFromPhrase","accountServiceSingleton","initProducerAccount","config","logger","walletPhrase","producer","mnemonic","isUndefined","warn","randomMnemonic","HDWallet","generateMnemonic","wallet","generateXyoBaseWalletFromPhrase","account","derivePath","ADDRESS_INDEX","XYO","assertEx","isString","HDWallet","initSeedPhrase","config","logger","bios","storedSeedPhrase","seedPhraseStore","get","debug","mnemonic","api","isString","warn","set","seedPhrase","HDWallet","generateMnemonic","log","assertEx","assertEx","asArchivistInstance","isDefined","MemoryArchivist","MongoDBArchivistV2","MongoDBArchivistV2Deletable","ViewArchivist","initTelemetry","AbstractModule","LoggerModuleStatusReporter","ModuleFactoryLocator","MemorySentinel","hasMongoConfig","getLocator","config","logger","otlpEndpoint","telemetry","otel","path","endpoint","port","metrics","scrape","traceProvider","meterProvider","initTelemetry","attributes","serviceName","serviceVersion","metricsConfig","isDefined","AbstractModule","defaultLogger","statusReporter","LoggerModuleStatusReporter","undefined","locator","ModuleFactoryLocator","mongoConfig","storage","mongo","hasMongoConfig","connectionString","dbConnectionString","database","dbName","domain","dbDomain","password","dbPassword","username","dbUserName","payloadSdkConfig","params","register","MongoDBArchivistV2","factory","MongoDBArchivistV2Deletable","MemoryArchivist","MemorySentinel","ViewArchivist","ManifestWrapper","NodeManifest","node","PrivateChildManifests","ChainNodeManifest","Chain","PendingNodeManifest","Pending","PublicChildManifests","nodes","loadNode","wallet","config","balancesSummaryMap","transfersSummaryMap","locator","getLocator","wrapper","ManifestWrapper","NodeManifest","PublicChildManifests","PrivateChildManifests","node","childNodes","loadNodes","length","Promise","all","map","childNode","register","attach","address","writableChainArchivistFromNode","node","asArchivistInstance","resolve","required","readonlyChainArchivistFromNode","assertEx","pendingTransactionsArchivistFromNode","pendingBlocksArchivistFromNode","initServerNode","wallet","logger","config","providedNode","transfersSummaryMap","balancesSummaryMap","loadNode","start","writableChainArchivist","readonlyChainArchivist","pendingTransactionsArchivist","pendingBlocksArchivist","RuntimeStatusMonitor","initStatusReporter","logger","statusReporter","RuntimeStatusMonitor","onGlobalTransition","to","log","error","process","exit","BaseMongoSdk","assertEx","MongoMap","hasMongoConfig","MemoryMap","initTransferSummaryMap","config","logger","mongoConfig","storage","mongo","hasMongoConfig","connectionString","dbConnectionString","database","dbName","domain","dbDomain","password","dbPassword","username","dbUserName","payloadSdkConfig","sdkTransferSummaryMap","BaseMongoSdk","collection","result","MongoMap","create","sdk","getCache","enabled","maxEntries","assertEx","start","warn","MemoryMap","isDefined","boot","HDWallet","initWallet","config","logger","mnemonic","bios","boot","seedPhrase","isDefined","initSeedPhrase","HDWallet","fromPhrase","initApiWallet","api","initMempoolWallet","mempool","initProducerWallet","producer","initRewardsRedemptionApiWallet","rewardRedemptionApi","AbstractCreatable","creatable","Orchestrator","AbstractCreatable","actors","keepAliveHandle","running","registerActor","actor","start","push","startHandler","logger","warn","log","setInterval","stopHandler","stop","clearInterval"]}
@@ -1,6 +1,6 @@
1
1
  export * from './initBalanceSummaryMap.ts';
2
2
  export * from './initBridgedModule.ts';
3
- export * from './initChainStakeViewer.ts';
3
+ export * from './initEvmProvidersIfAvailable.ts';
4
4
  export * from './initFinalizedArchivist.ts';
5
5
  export * from './initProducerAccount.ts';
6
6
  export * from './initSeedPhrase.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/init/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAA;AAC1C,cAAc,wBAAwB,CAAA;AACtC,cAAc,2BAA2B,CAAA;AACzC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/init/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAA;AAC1C,cAAc,wBAAwB,CAAA;AACtC,cAAc,kCAAkC,CAAA;AAChD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,iBAAiB,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk';
2
+ export declare function initEvmProvidersIfAvailable(locator: ProviderFactoryLocatorInstance): Promise<ProviderFactoryLocatorInstance<import("@xyo-network/xl1-sdk").CreatableProviderContextType>>;
3
+ //# sourceMappingURL=initEvmProvidersIfAvailable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initEvmProvidersIfAvailable.d.ts","sourceRoot":"","sources":["../../../src/init/initEvmProvidersIfAvailable.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAGV,8BAA8B,EAC/B,MAAM,sBAAsB,CAAA;AAS7B,wBAAsB,2BAA2B,CAAC,OAAO,EAAE,8BAA8B,wGA4DxF"}
@@ -1,18 +1,18 @@
1
1
  import type { CreatableInstance } from '@xylabs/sdk-js';
2
2
  import { AbstractCreatable } from '@xylabs/sdk-js';
3
- import { ActorInstance } from '@xyo-network/xl1-sdk';
3
+ import { ActorInstance, ActorInstanceV2 } from '@xyo-network/xl1-sdk';
4
4
  export interface OrchestratorInstance extends CreatableInstance {
5
- registerActor(actor: ActorInstance): Promise<void>;
5
+ registerActor(actor: ActorInstance | ActorInstanceV2): Promise<void>;
6
6
  }
7
7
  export declare class Orchestrator extends AbstractCreatable implements OrchestratorInstance {
8
- protected actors: ActorInstance[];
8
+ protected actors: (ActorInstance | ActorInstanceV2)[];
9
9
  protected keepAliveHandle: NodeJS.Timeout | null;
10
10
  protected running: boolean;
11
11
  /**
12
12
  * Registers an actor.
13
13
  * (We won't activate the actor until `start()` is called.)
14
14
  */
15
- registerActor(actor: ActorInstance): Promise<void>;
15
+ registerActor(actor: ActorInstance | ActorInstanceV2): Promise<void>;
16
16
  /**
17
17
  * Starts the orchestrator: activates all actors.
18
18
  */
@@ -1 +1 @@
1
- {"version":3,"file":"Orchestrator.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/Orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAa,MAAM,gBAAgB,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACnD;AAED,qBACa,YAAa,SAAQ,iBAAkB,YAAW,oBAAoB;IACjF,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,CAAK;IACtC,SAAS,CAAC,eAAe,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAO;IACvD,SAAS,CAAC,OAAO,UAAQ;IAEzB;;;OAGG;IACG,aAAa,CAAC,KAAK,EAAE,aAAa;IAQxC;;OAEG;IACY,YAAY;IAkB3B;;OAEG;IACY,WAAW;CAe3B"}
1
+ {"version":3,"file":"Orchestrator.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/Orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAa,MAAM,gBAAgB,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAErE,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACrE;AAED,qBACa,YAAa,SAAQ,iBAAkB,YAAW,oBAAoB;IACjF,SAAS,CAAC,MAAM,EAAE,CAAC,aAAa,GAAG,eAAe,CAAC,EAAE,CAAK;IAC1D,SAAS,CAAC,eAAe,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAO;IACvD,SAAS,CAAC,OAAO,UAAQ;IAEzB;;;OAGG;IACG,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,eAAe;IAQ1D;;OAEG;IACY,YAAY;IAkB3B;;OAEG;IACY,WAAW;CAe3B"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json.schemastore.org/package.json",
3
3
  "name": "@xyo-network/chain-orchestration",
4
- "version": "1.19.5",
4
+ "version": "1.19.7",
5
5
  "description": "XYO Layer One SDK Orchestration",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -39,8 +39,8 @@
39
39
  "!**/*.test.*"
40
40
  ],
41
41
  "dependencies": {
42
- "@xylabs/mongo": "~5.0.64",
43
- "@xylabs/sdk-js": "~5.0.64",
42
+ "@xylabs/mongo": "~5.0.65",
43
+ "@xylabs/sdk-js": "~5.0.65",
44
44
  "@xyo-network/archivist-lmdb": "~5.3.2",
45
45
  "@xyo-network/archivist-memory": "~5.3.2",
46
46
  "@xyo-network/archivist-model": "~5.3.2",
@@ -48,26 +48,25 @@
48
48
  "@xyo-network/archivist-view": "~5.3.2",
49
49
  "@xyo-network/bios": "~7.2.1",
50
50
  "@xyo-network/bridge-model": "~5.3.2",
51
- "@xyo-network/chain-protocol": "~1.19.5",
52
- "@xyo-network/chain-sdk": "~1.19.5",
53
- "@xyo-network/chain-telemetry": "~1.19.5",
54
- "@xyo-network/chain-utils": "~1.19.5",
51
+ "@xyo-network/chain-ethereum": "~1.19.7",
52
+ "@xyo-network/chain-protocol": "~1.19.7",
53
+ "@xyo-network/chain-sdk": "~1.19.7",
54
+ "@xyo-network/chain-telemetry": "~1.19.7",
55
+ "@xyo-network/chain-utils": "~1.19.7",
55
56
  "@xyo-network/manifest-wrapper": "~5.3.2",
56
57
  "@xyo-network/module-abstract": "~5.3.2",
57
58
  "@xyo-network/module-factory-locator": "~5.3.2",
58
59
  "@xyo-network/module-model": "~5.3.2",
59
60
  "@xyo-network/payload-builder": "~5.3.2",
60
61
  "@xyo-network/sentinel-memory": "~5.3.2",
61
- "@xyo-network/typechain": "~4.1.1",
62
62
  "@xyo-network/wallet": "~5.3.2",
63
- "@xyo-network/xl1-sdk": "~1.21.10",
63
+ "@xyo-network/xl1-sdk": "~1.22.30",
64
64
  "async-mutex": "~0.5.0",
65
65
  "ethers": "^6.16.0"
66
66
  },
67
67
  "devDependencies": {
68
- "@types/node": "~25.1.0",
69
- "@xylabs/sdk-js": "~5.0.64",
70
- "@xylabs/telemetry": "~5.0.64",
68
+ "@types/node": "~25.2.1",
69
+ "@xylabs/sdk-js": "~5.0.65",
71
70
  "@xylabs/ts-scripts-yarn3": "~7.3.2",
72
71
  "@xylabs/tsconfig": "~7.3.2",
73
72
  "@xyo-network/account-model": "~5.3.2",
package/src/evm/index.ts CHANGED
@@ -1 +1,4 @@
1
+ export * from './initChainId.ts'
1
2
  export * from './initEvmProvider.ts'
3
+ export * from './initInfuraProvider.ts'
4
+ export * from './initJsonRpcProvider.ts'
@@ -3,11 +3,11 @@ import {
3
3
  } from '@xylabs/sdk-js'
4
4
  import type { Config } from '@xyo-network/xl1-sdk'
5
5
 
6
- export const canUseChainId = (config: Pick<Config, 'evm'>): boolean => {
6
+ export const canUseChainId = (config: Config): boolean => {
7
7
  return isDefined(config.evm.chainId)
8
8
  }
9
9
 
10
- export const getChainId = (config: Pick<Config, 'evm'>) => {
10
+ export const getChainId = (config: Config) => {
11
11
  const chainId = assertEx(config.evm.chainId, () => 'Missing config.evm.chainId')
12
12
  if (isHex(chainId, { prefix: true })) {
13
13
  const hex = hexFrom(chainId)
@@ -2,14 +2,13 @@ import type { Logger } from '@xylabs/sdk-js'
2
2
  import { assertEx } from '@xylabs/sdk-js'
3
3
  import type { Config } from '@xyo-network/xl1-sdk'
4
4
  import type { Provider } from 'ethers'
5
- import type { JsonRpcProvider } from 'ethers/providers'
6
5
 
7
6
  import { canUseInfuraProvider, initInfuraProvider } from './initInfuraProvider.ts'
8
7
  import { canUseJsonRpcProvider, initJsonRpcProvider } from './initJsonRpcProvider.ts'
9
8
 
10
- let provider: Promise<JsonRpcProvider> | undefined
9
+ let provider: Promise<Provider> | undefined
11
10
 
12
- export const initEvmProvider = async ({ config }: { config: Pick<Config, 'evm'>; logger?: Logger }): Promise<Provider> => {
11
+ export const initEvmProvider = async ({ config }: { config: Config; logger?: Logger }): Promise<Provider> => {
13
12
  if (provider) return provider
14
13
  if (canUseInfuraProvider(config)) {
15
14
  provider = initInfuraProvider(config)
@@ -19,6 +18,6 @@ export const initEvmProvider = async ({ config }: { config: Pick<Config, 'evm'>;
19
18
  return assertEx(await provider, () => 'No provider available')
20
19
  }
21
20
 
22
- export const canUseEvmProvider = ({ config }: { config: Pick<Config, 'evm'> }) => {
21
+ export const canUseEvmProvider = ({ config }: { config: Config }) => {
23
22
  return canUseInfuraProvider(config) || canUseJsonRpcProvider(config)
24
23
  }
@@ -1,25 +1,26 @@
1
1
  import { assertEx, isDefined } from '@xylabs/sdk-js'
2
2
  import type { Config } from '@xyo-network/xl1-sdk'
3
+ import type { Provider } from 'ethers'
3
4
  import { InfuraProvider } from 'ethers/providers'
4
5
 
5
6
  import { canUseChainId, getChainId } from './initChainId.ts'
6
7
 
7
8
  let instance: Promise<InfuraProvider> | undefined
8
9
 
9
- export const initInfuraProvider = (config: Pick<Config, 'evm'>) => {
10
+ export const initInfuraProvider = (config: Config): Promise<Provider> => {
10
11
  if (instance) return instance
11
12
  const providerConfig = getInfuraProviderConfig(config)
12
- instance = Promise.resolve(new InfuraProvider(...providerConfig))
13
+ instance = Promise.resolve(new InfuraProvider(providerConfig[0], providerConfig[1]))
13
14
  return instance
14
15
  }
15
16
 
16
- export const canUseInfuraProvider = (config: Pick<Config, 'evm'>): boolean => {
17
+ export const canUseInfuraProvider = (config: Config): boolean => {
17
18
  return canUseChainId(config)
18
19
  && isDefined(config.evm?.infura?.projectId)
19
20
  && isDefined(config.evm?.infura?.projectSecret)
20
21
  }
21
22
 
22
- export const getInfuraProviderConfig = (config: Pick<Config, 'evm'>) => {
23
+ export const getInfuraProviderConfig = (config: Config) => {
23
24
  const projectId = assertEx(config.evm?.infura?.projectId, () => 'Missing config.evm.infura.projectId')
24
25
  const projectSecret = assertEx(config.evm?.infura?.projectSecret, () => 'Missing config.evm.infura.projectSecret')
25
26
  return [getChainId(config), projectId, projectSecret] as const
@@ -4,17 +4,17 @@ import { JsonRpcProvider } from 'ethers/providers'
4
4
 
5
5
  import { canUseChainId, getChainId } from './initChainId.ts'
6
6
 
7
- export const initJsonRpcProvider = (config: Pick<Config, 'evm'>) => {
7
+ export const initJsonRpcProvider = (config: Config) => {
8
8
  const providerConfig = getJsonRpcProviderConfig(config)
9
9
  return Promise.resolve(new JsonRpcProvider(...providerConfig))
10
10
  }
11
11
 
12
- export const canUseJsonRpcProvider = (config: Pick<Config, 'evm'>) => {
12
+ export const canUseJsonRpcProvider = (config: Config) => {
13
13
  return canUseChainId(config)
14
14
  && isDefined(config.evm.jsonRpc?.url)
15
15
  }
16
16
 
17
- export const getJsonRpcProviderConfig = (config: Pick<Config, 'evm'>) => {
17
+ export const getJsonRpcProviderConfig = (config: Config) => {
18
18
  const jsonRpcUrl = assertEx(config.evm.jsonRpc?.url, () => 'Missing config.evm.jsonRpc.url')
19
19
  return [jsonRpcUrl, getChainId(config)] as const
20
20
  }
package/src/init/index.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export * from './initBalanceSummaryMap.ts'
2
2
  export * from './initBridgedModule.ts'
3
- export * from './initChainStakeViewer.ts'
3
+ export * from './initEvmProvidersIfAvailable.ts'
4
4
  export * from './initFinalizedArchivist.ts'
5
5
  export * from './initProducerAccount.ts'
6
6
  export * from './initSeedPhrase.ts'
@@ -0,0 +1,78 @@
1
+ import { asEthAddress, assertEx } from '@xylabs/sdk-js'
2
+ import {
3
+ EvmChainContractViewer, EvmStakeEventsViewer, EvmStakeViewer,
4
+ } from '@xyo-network/chain-ethereum'
5
+ import type {
6
+ ChainId,
7
+ Position,
8
+ ProviderFactoryLocatorInstance,
9
+ } from '@xyo-network/xl1-sdk'
10
+ import {
11
+ SimpleChainContractViewer,
12
+ SimpleStakeEventsViewer, SimpleStakeViewer, SimpleTimeSyncViewer,
13
+ XYO_ZERO_ADDRESS,
14
+ } from '@xyo-network/xl1-sdk'
15
+
16
+ import { canUseEvmProvider, initEvmProvider } from '../evm/index.ts'
17
+
18
+ export async function initEvmProvidersIfAvailable(locator: ProviderFactoryLocatorInstance) {
19
+ const { config, logger } = locator.context
20
+ if (canUseEvmProvider({ config })) {
21
+ const chainId = assertEx(config.chain.id as ChainId, () => 'Missing config.chain.chainId (required for EVM providers)')
22
+ const provider = await initEvmProvider({ config, logger })
23
+ const address = asEthAddress(chainId, true)
24
+
25
+ // Register the contract events viewer
26
+ locator.register(EvmStakeEventsViewer.factory<EvmStakeEventsViewer>(
27
+ EvmStakeEventsViewer.dependencies,
28
+ { address, provider },
29
+ ))
30
+
31
+ // Register the stake viewer
32
+ locator.register(EvmStakeViewer.factory<EvmStakeViewer>(
33
+ EvmStakeViewer.dependencies,
34
+ { address, provider },
35
+ ))
36
+
37
+ // Register the contract viewer
38
+ locator.register(EvmChainContractViewer.factory<EvmChainContractViewer>(
39
+ EvmChainContractViewer.dependencies,
40
+ { address, provider },
41
+ ))
42
+
43
+ locator.register(SimpleTimeSyncViewer.factory<SimpleTimeSyncViewer>(
44
+ SimpleTimeSyncViewer.dependencies,
45
+ { ethProvider: provider },
46
+ ))
47
+ } else {
48
+ logger?.warn('EVM provider not available - running with memory based contract/stake viewers')
49
+ const positions: Position[] = []
50
+ const chainId = assertEx(config.chain.id, () => 'Missing config.chain.chainId (required for non-EVM providers)')
51
+
52
+ // Register the contract events viewer
53
+ locator.register(SimpleStakeEventsViewer.factory<SimpleStakeEventsViewer>(
54
+ SimpleStakeEventsViewer.dependencies,
55
+ { positions },
56
+ ))
57
+
58
+ // Register the stake viewer
59
+ locator.register(SimpleStakeViewer.factory<SimpleStakeViewer>(
60
+ SimpleStakeViewer.dependencies,
61
+ { positions },
62
+ ))
63
+
64
+ // Register the contract viewer
65
+ locator.register(SimpleChainContractViewer.factory<SimpleChainContractViewer>(
66
+ SimpleChainContractViewer.dependencies,
67
+ {
68
+ chainId, minWithdrawalBlocks: 10, stakingTokenAddress: XYO_ZERO_ADDRESS, rewardsContract: XYO_ZERO_ADDRESS,
69
+ },
70
+ ))
71
+
72
+ locator.register(SimpleTimeSyncViewer.factory<SimpleTimeSyncViewer>(
73
+ SimpleTimeSyncViewer.dependencies,
74
+ {},
75
+ ))
76
+ }
77
+ return locator
78
+ }
@@ -1,14 +1,14 @@
1
1
  import type { CreatableInstance } from '@xylabs/sdk-js'
2
2
  import { AbstractCreatable, creatable } from '@xylabs/sdk-js'
3
- import { ActorInstance } from '@xyo-network/xl1-sdk'
3
+ import { ActorInstance, ActorInstanceV2 } from '@xyo-network/xl1-sdk'
4
4
 
5
5
  export interface OrchestratorInstance extends CreatableInstance {
6
- registerActor(actor: ActorInstance): Promise<void>
6
+ registerActor(actor: ActorInstance | ActorInstanceV2): Promise<void>
7
7
  }
8
8
 
9
9
  @creatable()
10
10
  export class Orchestrator extends AbstractCreatable implements OrchestratorInstance {
11
- protected actors: ActorInstance[] = []
11
+ protected actors: (ActorInstance | ActorInstanceV2)[] = []
12
12
  protected keepAliveHandle: NodeJS.Timeout | null = null
13
13
  protected running = false
14
14
 
@@ -16,7 +16,7 @@ export class Orchestrator extends AbstractCreatable implements OrchestratorInsta
16
16
  * Registers an actor.
17
17
  * (We won't activate the actor until `start()` is called.)
18
18
  */
19
- async registerActor(actor: ActorInstance) {
19
+ async registerActor(actor: ActorInstance | ActorInstanceV2) {
20
20
  if (this.running) {
21
21
  // If the orchestrator is already running, activate the actor immediately
22
22
  await actor.start()
@@ -1,10 +0,0 @@
1
- import { type Logger } from '@xylabs/sdk-js';
2
- import type { Config, CreatableProviderContext, StakeViewer } from '@xyo-network/xl1-sdk';
3
- export declare function initEvmChainStakeViewer(context: CreatableProviderContext, config: Config, logger?: Logger): Promise<StakeViewer>;
4
- export declare function initSimpleStakeViewer(context: CreatableProviderContext, config: Config, logger?: Logger): Promise<StakeViewer>;
5
- export declare function initStakeViewer({ config, logger, context, }: {
6
- config: Config;
7
- context: CreatableProviderContext;
8
- logger?: Logger;
9
- }): Promise<StakeViewer>;
10
- //# sourceMappingURL=initChainStakeViewer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"initChainStakeViewer.d.ts","sourceRoot":"","sources":["../../../src/init/initChainStakeViewer.ts"],"names":[],"mappings":"AAAA,OAAO,EAEK,KAAK,MAAM,EACtB,MAAM,gBAAgB,CAAA;AAIvB,OAAO,KAAK,EAEV,MAAM,EACN,wBAAwB,EAAE,WAAW,EACtC,MAAM,sBAAsB,CAAA;AAK7B,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAatI;AAED,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CASpI;AAED,wBAAsB,eAAe,CAAC,EACpC,MAAM,EAAE,MAAM,EAAE,OAAO,GACxB,EAAE;IACD,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,wBAAwB,CAAA;IACjC,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,GAAG,OAAO,CAAC,WAAW,CAAC,CAOvB"}
@@ -1,56 +0,0 @@
1
- import {
2
- asAddress,
3
- assertEx, type Logger, toAddress, toEthAddress,
4
- } from '@xylabs/sdk-js'
5
- import type { EvmStakeEventsParams, EvmStakeViewerParams } from '@xyo-network/chain-sdk'
6
- import { EvmStakeEventsViewer, EvmStakeViewer } from '@xyo-network/chain-sdk'
7
- import { IStakedXyoChain__factory } from '@xyo-network/typechain'
8
- import type {
9
- ChainId,
10
- Config,
11
- CreatableProviderContext, StakeViewer,
12
- } from '@xyo-network/xl1-sdk'
13
- import { SimpleStakeViewer } from '@xyo-network/xl1-sdk'
14
-
15
- import { canUseEvmProvider, initEvmProvider } from '../evm/index.ts'
16
-
17
- export async function initEvmChainStakeViewer(context: CreatableProviderContext, config: Config, logger?: Logger): Promise<StakeViewer> {
18
- const provider = await initEvmProvider({ config, logger })
19
- const contractAddress = assertEx(config.chain.id, () => 'Missing config.evm.chainId') as ChainId
20
- const contract = IStakedXyoChain__factory.connect(toEthAddress(contractAddress), provider)
21
- const stakeEventsViewer = await EvmStakeEventsViewer.create({
22
- contract, logger, context,
23
- } satisfies EvmStakeEventsParams)
24
- assertEx(await stakeEventsViewer.start(), () => 'Failed to start EvmStakeEvents reader')
25
- const stakeChainViewer = await EvmStakeViewer.create({
26
- contract, stakeEventsViewer, logger, context,
27
- } satisfies EvmStakeViewerParams)
28
- assertEx(await stakeChainViewer.start(), () => 'Failed to start EvmStake viewer')
29
- return stakeChainViewer
30
- }
31
-
32
- export async function initSimpleStakeViewer(context: CreatableProviderContext, config: Config, logger?: Logger): Promise<StakeViewer> {
33
- const stakeViewer = await SimpleStakeViewer.create({
34
- context,
35
- chainId: asAddress(toAddress(1n), true),
36
- logger,
37
- positions: [],
38
- })
39
- assertEx(await stakeViewer.start(), () => 'Failed to start SimpleChainStake viewer')
40
- return stakeViewer
41
- }
42
-
43
- export async function initStakeViewer({
44
- config, logger, context,
45
- }: {
46
- config: Config
47
- context: CreatableProviderContext
48
- logger?: Logger
49
- }): Promise<StakeViewer> {
50
- if (canUseEvmProvider({ config })) {
51
- return await initEvmChainStakeViewer(context, config, logger)
52
- } else {
53
- console.warn('[API] Infura configuration not found. Using SimpleChainStakeViewer with no positions. This means no staking data will be available.')
54
- return await initSimpleStakeViewer(context, config, logger)
55
- }
56
- }