@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.
- package/dist/neutral/createDeclarationIntentBlock.d.ts +6 -4
- package/dist/neutral/createDeclarationIntentBlock.d.ts.map +1 -1
- package/dist/neutral/evm/index.d.ts +3 -0
- package/dist/neutral/evm/index.d.ts.map +1 -1
- package/dist/neutral/evm/initChainId.d.ts +2 -2
- package/dist/neutral/evm/initChainId.d.ts.map +1 -1
- package/dist/neutral/evm/initEvmProvider.d.ts +2 -2
- package/dist/neutral/evm/initEvmProvider.d.ts.map +1 -1
- package/dist/neutral/evm/initInfuraProvider.d.ts +4 -4
- package/dist/neutral/evm/initInfuraProvider.d.ts.map +1 -1
- package/dist/neutral/evm/initJsonRpcProvider.d.ts +3 -3
- package/dist/neutral/evm/initJsonRpcProvider.d.ts.map +1 -1
- package/dist/neutral/index.mjs +107 -69
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/neutral/init/index.d.ts +2 -1
- package/dist/neutral/init/index.d.ts.map +1 -1
- package/dist/neutral/init/initEvmProvidersIfAvailable.d.ts +3 -0
- package/dist/neutral/init/initEvmProvidersIfAvailable.d.ts.map +1 -0
- package/dist/neutral/init/initFinalizationArchivistIfNeeded.d.ts +5 -0
- package/dist/neutral/init/initFinalizationArchivistIfNeeded.d.ts.map +1 -0
- package/dist/neutral/orchestrator/Orchestrator.d.ts +4 -4
- package/dist/neutral/orchestrator/Orchestrator.d.ts.map +1 -1
- package/package.json +12 -11
- package/src/evm/index.ts +3 -0
- package/src/evm/initChainId.ts +2 -2
- package/src/evm/initEvmProvider.ts +3 -4
- package/src/evm/initInfuraProvider.ts +5 -4
- package/src/evm/initJsonRpcProvider.ts +3 -3
- package/src/health/initHealthEndpoints.ts +1 -1
- package/src/init/index.ts +2 -1
- package/src/init/initEvmProvidersIfAvailable.ts +90 -0
- package/src/init/initFinalizationArchivistIfNeeded.ts +42 -0
- package/src/init/initProducerAccount.ts +1 -1
- package/src/init/initSeedPhrase.ts +1 -1
- package/src/init/initWallet.ts +4 -4
- package/src/orchestrator/Orchestrator.ts +6 -4
- package/dist/neutral/init/initChainStakeViewer.d.ts +0 -10
- package/dist/neutral/init/initChainStakeViewer.d.ts.map +0 -1
- package/src/init/initChainStakeViewer.ts +0 -56
package/src/evm/index.ts
CHANGED
package/src/evm/initChainId.ts
CHANGED
|
@@ -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:
|
|
6
|
+
export const canUseChainId = (config: Config): boolean => {
|
|
7
7
|
return isDefined(config.evm.chainId)
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
export const getChainId = (config:
|
|
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<
|
|
9
|
+
let provider: Promise<Provider> | undefined
|
|
11
10
|
|
|
12
|
-
export const initEvmProvider = async ({ config }: { config:
|
|
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:
|
|
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:
|
|
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(
|
|
13
|
+
instance = Promise.resolve(new InfuraProvider(providerConfig[0], providerConfig[1]))
|
|
13
14
|
return instance
|
|
14
15
|
}
|
|
15
16
|
|
|
16
|
-
export const canUseInfuraProvider = (config:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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 './
|
|
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)
|
package/src/init/initWallet.ts
CHANGED
|
@@ -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.
|
|
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 {
|
|
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
|
-
}
|