@xyo-network/chain-orchestration 1.19.6 → 1.19.8

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 (39) 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 +107 -69
  14. package/dist/neutral/index.mjs.map +1 -1
  15. package/dist/neutral/init/index.d.ts +2 -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/init/initFinalizationArchivistIfNeeded.d.ts +5 -0
  20. package/dist/neutral/init/initFinalizationArchivistIfNeeded.d.ts.map +1 -0
  21. package/dist/neutral/orchestrator/Orchestrator.d.ts +4 -4
  22. package/dist/neutral/orchestrator/Orchestrator.d.ts.map +1 -1
  23. package/package.json +12 -11
  24. package/src/evm/index.ts +3 -0
  25. package/src/evm/initChainId.ts +2 -2
  26. package/src/evm/initEvmProvider.ts +3 -4
  27. package/src/evm/initInfuraProvider.ts +5 -4
  28. package/src/evm/initJsonRpcProvider.ts +3 -3
  29. package/src/health/initHealthEndpoints.ts +1 -1
  30. package/src/init/index.ts +2 -1
  31. package/src/init/initEvmProvidersIfAvailable.ts +90 -0
  32. package/src/init/initFinalizationArchivistIfNeeded.ts +42 -0
  33. package/src/init/initProducerAccount.ts +1 -1
  34. package/src/init/initSeedPhrase.ts +1 -1
  35. package/src/init/initWallet.ts +4 -4
  36. package/src/orchestrator/Orchestrator.ts +6 -4
  37. package/dist/neutral/init/initChainStakeViewer.d.ts +0 -10
  38. package/dist/neutral/init/initChainStakeViewer.d.ts.map +0 -1
  39. package/src/init/initChainStakeViewer.ts +0 -56
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
  }
@@ -65,6 +65,6 @@ export const initHealthEndpoints: Initializable<{ config: Config; logger: Logger
65
65
  const {
66
66
  config, logger, statusReporter,
67
67
  } = params
68
- const { healthCheckPort } = config.producer
68
+ const { healthCheckPort } = config.actors.producer
69
69
  return isDefined(healthCheckPort) ? createHealthServer(healthCheckPort, statusReporter, logger) : undefined
70
70
  }
package/src/init/index.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export * from './initBalanceSummaryMap.ts'
2
2
  export * from './initBridgedModule.ts'
3
- export * from './initChainStakeViewer.ts'
3
+ export * from './initEvmProvidersIfAvailable.ts'
4
+ export * from './initFinalizationArchivistIfNeeded.ts'
4
5
  export * from './initFinalizedArchivist.ts'
5
6
  export * from './initProducerAccount.ts'
6
7
  export * from './initSeedPhrase.ts'
@@ -0,0 +1,90 @@
1
+ import { asEthAddress, assertEx } from '@xylabs/sdk-js'
2
+ import {
3
+ EvmChainContractViewer, EvmStakeEventsViewer, EvmStakeTotalsViewer, 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, SimpleStakeTotalsViewer, 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 stake totals viewer
38
+ locator.register(EvmStakeTotalsViewer.factory<EvmStakeTotalsViewer>(
39
+ EvmStakeTotalsViewer.dependencies,
40
+ { address, provider },
41
+ ))
42
+
43
+ // Register the contract viewer
44
+ locator.register(EvmChainContractViewer.factory<EvmChainContractViewer>(
45
+ EvmChainContractViewer.dependencies,
46
+ { address, provider },
47
+ ))
48
+
49
+ locator.register(SimpleTimeSyncViewer.factory<SimpleTimeSyncViewer>(
50
+ SimpleTimeSyncViewer.dependencies,
51
+ { ethProvider: provider },
52
+ ))
53
+ } else {
54
+ logger?.warn('EVM provider not available - running with memory based contract/stake viewers')
55
+ const positions: Position[] = []
56
+ const chainId = assertEx(config.chain.id, () => 'Missing config.chain.chainId (required for non-EVM providers)')
57
+
58
+ // Register the contract events viewer
59
+ locator.register(SimpleStakeEventsViewer.factory<SimpleStakeEventsViewer>(
60
+ SimpleStakeEventsViewer.dependencies,
61
+ { positions },
62
+ ))
63
+
64
+ // Register the stake viewer
65
+ locator.register(SimpleStakeViewer.factory<SimpleStakeViewer>(
66
+ SimpleStakeViewer.dependencies,
67
+ { positions },
68
+ ))
69
+
70
+ // Register the stake totals viewer
71
+ locator.register(SimpleStakeTotalsViewer.factory<SimpleStakeTotalsViewer>(
72
+ SimpleStakeTotalsViewer.dependencies,
73
+ {},
74
+ ))
75
+
76
+ // Register the contract viewer
77
+ locator.register(SimpleChainContractViewer.factory<SimpleChainContractViewer>(
78
+ SimpleChainContractViewer.dependencies,
79
+ {
80
+ chainId, minWithdrawalBlocks: 10, stakingTokenAddress: XYO_ZERO_ADDRESS, rewardsContract: XYO_ZERO_ADDRESS,
81
+ },
82
+ ))
83
+
84
+ locator.register(SimpleTimeSyncViewer.factory<SimpleTimeSyncViewer>(
85
+ SimpleTimeSyncViewer.dependencies,
86
+ {},
87
+ ))
88
+ }
89
+ return locator
90
+ }
@@ -0,0 +1,42 @@
1
+ import { assertEx } from '@xylabs/sdk-js'
2
+ import { Account } from '@xyo-network/account'
3
+ import type { AccountInstance } from '@xyo-network/account-model'
4
+ import type { ArchivistInstance } from '@xyo-network/archivist-model'
5
+ import { createBootstrapHead } from '@xyo-network/chain-sdk'
6
+ import {
7
+ asAttoXL1,
8
+ type ChainId, type Config, findMostRecentBlock,
9
+ flattenHydratedBlock,
10
+ type SignedBlockBoundWitnessWithHashMeta,
11
+ } from '@xyo-network/xl1-sdk'
12
+
13
+ export async function initFinalizationArchivistIfNeeded(
14
+ archivist: ArchivistInstance,
15
+ config: Config,
16
+ account: AccountInstance,
17
+ ): Promise<[SignedBlockBoundWitnessWithHashMeta, ChainId]> {
18
+ const configuredChainId = config.chain.id
19
+ const possibleHead = await findMostRecentBlock(archivist)
20
+ if (configuredChainId && possibleHead && possibleHead.chain !== configuredChainId) {
21
+ throw new Error(`Configured chain ID (${configuredChainId}) does not match the existing chain ID (${possibleHead.chain})`)
22
+ }
23
+
24
+ let possibleChainId: ChainId | undefined = configuredChainId
25
+
26
+ // if there is no configured chain ID and no head, create a new chain
27
+ if (!possibleHead) {
28
+ possibleChainId = possibleChainId ?? (await Account.random()).address
29
+ // If there is no head, create one
30
+ const chain = await createBootstrapHead(
31
+ account,
32
+ possibleChainId,
33
+ asAttoXL1(20_000_000_000_000_000_000_000n),
34
+ config.chain.genesisRewardAddress ?? account.address,
35
+ )
36
+ const payloads = chain.flatMap(block => flattenHydratedBlock(block))
37
+ await archivist.insert(payloads)
38
+ }
39
+ const head = possibleHead ?? assertEx(await findMostRecentBlock(archivist), () => 'No blocks found in chain archivist')
40
+ const chainId = assertEx(possibleChainId, () => 'Chain ID could not be determined')
41
+ return [head, chainId]
42
+ }
@@ -12,7 +12,7 @@ let accountServiceSingleton: Promisable<WalletInstance> | undefined
12
12
  export const initProducerAccount: Initializable<InitializableParams<{ config: Config }>, WalletInstance>
13
13
  = async ({ config, logger }): Promise<WalletInstance> => {
14
14
  if (accountServiceSingleton) return accountServiceSingleton
15
- let walletPhrase = config.producer.mnemonic
15
+ let walletPhrase = config.actors.producer.mnemonic
16
16
  if (isUndefined(walletPhrase)) {
17
17
  logger?.warn('[Producer] No wallet mnemonic specified!')
18
18
  const randomMnemonic = HDWallet.generateMnemonic()
@@ -10,7 +10,7 @@ export async function initSeedPhrase({
10
10
  }: ConfigContext<{ bios: BiosExternalInterface }>): Promise<string> {
11
11
  const storedSeedPhrase = await bios.seedPhraseStore.get('os')
12
12
  logger?.debug(`[API] Stored mnemonic: ${storedSeedPhrase}`)
13
- const { mnemonic } = config.api
13
+ const { mnemonic } = config.actors.api
14
14
  if (isString(storedSeedPhrase) && isString(mnemonic)) {
15
15
  logger?.warn('[API] Stored mnemonic does not match supplied. Updating stored mnemonic to supplied.')
16
16
  await bios.seedPhraseStore.set('os', mnemonic)
@@ -16,21 +16,21 @@ async function initWallet({ config, logger }: ConfigContext, mnemonic?: string)
16
16
  }
17
17
 
18
18
  export async function initApiWallet({ config, logger }: ConfigContext) {
19
- const { mnemonic } = config.api
19
+ const { mnemonic } = config.actors.api
20
20
  return await initWallet({ config, logger }, mnemonic)
21
21
  }
22
22
 
23
23
  export async function initMempoolWallet({ config, logger }: ConfigContext) {
24
- const { mnemonic } = config.mempool
24
+ const { mnemonic } = config.actors.mempool
25
25
  return await initWallet({ config, logger }, mnemonic)
26
26
  }
27
27
 
28
28
  export async function initProducerWallet({ config, logger }: ConfigContext) {
29
- const { mnemonic } = config.producer
29
+ const { mnemonic } = config.actors.producer
30
30
  return await initWallet({ config, logger }, mnemonic)
31
31
  }
32
32
 
33
33
  export async function initRewardsRedemptionApiWallet({ config, logger }: ConfigContext) {
34
- const { mnemonic } = config.rewardRedemptionApi
34
+ const { mnemonic } = config.actors.rewardRedemption
35
35
  return await initWallet({ config, logger }, mnemonic)
36
36
  }
@@ -1,14 +1,16 @@
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 {
4
+ ActorInstance, ActorInstanceV2, ActorInstanceV3,
5
+ } from '@xyo-network/xl1-sdk'
4
6
 
5
7
  export interface OrchestratorInstance extends CreatableInstance {
6
- registerActor(actor: ActorInstance): Promise<void>
8
+ registerActor(actor: ActorInstance | ActorInstanceV2 | ActorInstanceV3): Promise<void>
7
9
  }
8
10
 
9
11
  @creatable()
10
12
  export class Orchestrator extends AbstractCreatable implements OrchestratorInstance {
11
- protected actors: ActorInstance[] = []
13
+ protected actors: (ActorInstance | ActorInstanceV2 | ActorInstanceV3)[] = []
12
14
  protected keepAliveHandle: NodeJS.Timeout | null = null
13
15
  protected running = false
14
16
 
@@ -16,7 +18,7 @@ export class Orchestrator extends AbstractCreatable implements OrchestratorInsta
16
18
  * Registers an actor.
17
19
  * (We won't activate the actor until `start()` is called.)
18
20
  */
19
- async registerActor(actor: ActorInstance) {
21
+ async registerActor(actor: ActorInstance | ActorInstanceV2 | ActorInstanceV3) {
20
22
  if (this.running) {
21
23
  // If the orchestrator is already running, activate the actor immediately
22
24
  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
- }