@xyo-network/chain-orchestration 1.19.13 → 1.19.15
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/ChainInitializableParams.d.ts +1 -0
- package/dist/neutral/ChainInitializableParams.d.ts.map +1 -1
- package/dist/neutral/actor/ValidatorActor.d.ts +2 -2
- package/dist/neutral/actor/ValidatorActor.d.ts.map +1 -1
- package/dist/neutral/archivists/ChainFinalized/archivist.d.ts.map +1 -1
- package/dist/neutral/archivists/ChainFinalized/local.d.ts +2 -2
- package/dist/neutral/archivists/ChainFinalized/local.d.ts.map +1 -1
- package/dist/neutral/archivists/PendingBlocks/archivist.d.ts +2 -2
- package/dist/neutral/archivists/PendingBlocks/archivist.d.ts.map +1 -1
- package/dist/neutral/archivists/PendingBlocks/local.d.ts +2 -4
- package/dist/neutral/archivists/PendingBlocks/local.d.ts.map +1 -1
- package/dist/neutral/archivists/RejectedTransactions/archivist.d.ts +2 -2
- package/dist/neutral/archivists/RejectedTransactions/archivist.d.ts.map +1 -1
- package/dist/neutral/archivists/RejectedTransactions/local.d.ts +1 -2
- package/dist/neutral/archivists/RejectedTransactions/local.d.ts.map +1 -1
- package/dist/neutral/archivists/StakeIntentState/archivist.d.ts +2 -3
- package/dist/neutral/archivists/StakeIntentState/archivist.d.ts.map +1 -1
- package/dist/neutral/archivists/StakeIntentState/local.d.ts +2 -3
- package/dist/neutral/archivists/StakeIntentState/local.d.ts.map +1 -1
- package/dist/neutral/config/actors/Api.d.ts +890 -0
- package/dist/neutral/config/actors/Api.d.ts.map +1 -0
- package/dist/neutral/config/actors/Bridge.d.ts +1213 -0
- package/dist/neutral/config/actors/Bridge.d.ts.map +1 -0
- package/dist/neutral/config/actors/Mempool.d.ts +890 -0
- package/dist/neutral/config/actors/Mempool.d.ts.map +1 -0
- package/dist/neutral/config/actors/Producer.d.ts +962 -0
- package/dist/neutral/config/actors/Producer.d.ts.map +1 -0
- package/dist/neutral/config/actors/RewardRedemption.d.ts +878 -0
- package/dist/neutral/config/actors/RewardRedemption.d.ts.map +1 -0
- package/dist/neutral/config/actors/index.d.ts +7 -0
- package/dist/neutral/config/actors/index.d.ts.map +1 -0
- package/dist/neutral/config/index.d.ts +5 -0
- package/dist/neutral/config/index.d.ts.map +1 -0
- package/dist/neutral/config/locators/actors/apiLocatorFromConfig.d.ts +5 -0
- package/dist/neutral/config/locators/actors/apiLocatorFromConfig.d.ts.map +1 -0
- package/dist/neutral/config/locators/actors/bridgeLocatorFromConfig.d.ts +5 -0
- package/dist/neutral/config/locators/actors/bridgeLocatorFromConfig.d.ts.map +1 -0
- package/dist/neutral/config/locators/actors/index.d.ts +7 -0
- package/dist/neutral/config/locators/actors/index.d.ts.map +1 -0
- package/dist/neutral/config/locators/actors/mempoolLocatorFromConfig.d.ts +5 -0
- package/dist/neutral/config/locators/actors/mempoolLocatorFromConfig.d.ts.map +1 -0
- package/dist/neutral/config/locators/actors/producerLocatorFromConfig.d.ts +4 -0
- package/dist/neutral/config/locators/actors/producerLocatorFromConfig.d.ts.map +1 -0
- package/dist/neutral/config/locators/actors/rewardRedemptionLocatorFromConfig.d.ts +5 -0
- package/dist/neutral/config/locators/actors/rewardRedemptionLocatorFromConfig.d.ts.map +1 -0
- package/dist/neutral/config/locators/actors/validatorLocatorFromConfig.d.ts +4 -0
- package/dist/neutral/config/locators/actors/validatorLocatorFromConfig.d.ts.map +1 -0
- package/dist/neutral/config/locators/contextFromConfigWithoutLocator.d.ts +4 -0
- package/dist/neutral/config/locators/contextFromConfigWithoutLocator.d.ts.map +1 -0
- package/dist/neutral/config/locators/index.d.ts +8 -0
- package/dist/neutral/config/locators/index.d.ts.map +1 -0
- package/dist/neutral/config/locators/localLocatorFromConfig.d.ts +3 -0
- package/dist/neutral/config/locators/localLocatorFromConfig.d.ts.map +1 -0
- package/dist/neutral/config/locators/locatorsFromConfig.d.ts +3 -0
- package/dist/neutral/config/locators/locatorsFromConfig.d.ts.map +1 -0
- package/dist/neutral/config/locators/remoteLocatorFromConfig.d.ts +3 -0
- package/dist/neutral/config/locators/remoteLocatorFromConfig.d.ts.map +1 -0
- package/dist/neutral/config/locators/rootLocatorFromConfig.d.ts +3 -0
- package/dist/neutral/config/locators/rootLocatorFromConfig.d.ts.map +1 -0
- package/dist/neutral/config/locators/telemetryContextFromConfig.d.ts +3 -0
- package/dist/neutral/config/locators/telemetryContextFromConfig.d.ts.map +1 -0
- package/dist/neutral/config/mergeConfig.d.ts +67 -0
- package/dist/neutral/config/mergeConfig.d.ts.map +1 -0
- package/dist/neutral/config/tryParseConfig.d.ts +133 -0
- package/dist/neutral/config/tryParseConfig.d.ts.map +1 -0
- package/dist/neutral/evm/initChainId.d.ts +3 -3
- package/dist/neutral/evm/initChainId.d.ts.map +1 -1
- package/dist/neutral/evm/initEvmProvider.d.ts +3 -9
- 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 +4 -4
- package/dist/neutral/evm/initJsonRpcProvider.d.ts.map +1 -1
- package/dist/neutral/health/initHealthEndpoints.d.ts +4 -8
- package/dist/neutral/health/initHealthEndpoints.d.ts.map +1 -1
- package/dist/neutral/index.d.ts +1 -0
- package/dist/neutral/index.d.ts.map +1 -1
- package/dist/neutral/index.mjs +1019 -343
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/neutral/init/index.d.ts +2 -2
- package/dist/neutral/init/index.d.ts.map +1 -1
- package/dist/neutral/init/initActorAccount.d.ts +4 -0
- package/dist/neutral/init/initActorAccount.d.ts.map +1 -0
- package/dist/neutral/init/initActorSeedPhrase.d.ts +4 -0
- package/dist/neutral/init/initActorSeedPhrase.d.ts.map +1 -0
- package/dist/neutral/init/initBalanceSummaryMap.d.ts +2 -3
- package/dist/neutral/init/initBalanceSummaryMap.d.ts.map +1 -1
- package/dist/neutral/init/initBridgedModule.d.ts +4 -7
- package/dist/neutral/init/initBridgedModule.d.ts.map +1 -1
- package/dist/neutral/init/initEvmProvidersIfAvailable.d.ts.map +1 -1
- package/dist/neutral/init/initFinalizationArchivistIfNeeded.d.ts +2 -2
- package/dist/neutral/init/initFinalizationArchivistIfNeeded.d.ts.map +1 -1
- package/dist/neutral/init/initServerNode.d.ts +2 -9
- package/dist/neutral/init/initServerNode.d.ts.map +1 -1
- package/dist/neutral/init/initTransferSummaryMap.d.ts +2 -3
- package/dist/neutral/init/initTransferSummaryMap.d.ts.map +1 -1
- package/dist/neutral/init/initWallet.d.ts +2 -7
- package/dist/neutral/init/initWallet.d.ts.map +1 -1
- package/dist/neutral/manifest/getLocator.d.ts +2 -7
- package/dist/neutral/manifest/getLocator.d.ts.map +1 -1
- package/dist/neutral/manifest/loadNode.d.ts +2 -8
- package/dist/neutral/manifest/loadNode.d.ts.map +1 -1
- package/dist/neutral/orchestrator/Orchestrator.d.ts +4 -4
- package/dist/neutral/orchestrator/Orchestrator.d.ts.map +1 -1
- package/package.json +51 -31
- package/src/ChainInitializableParams.ts +1 -0
- package/src/actor/ValidatorActor.ts +3 -2
- package/src/archivists/ChainFinalized/archivist.ts +1 -1
- package/src/archivists/ChainFinalized/local.ts +2 -2
- package/src/archivists/PendingBlocks/archivist.ts +3 -3
- package/src/archivists/PendingBlocks/local.ts +2 -2
- package/src/archivists/RejectedTransactions/archivist.ts +5 -5
- package/src/archivists/RejectedTransactions/local.ts +1 -2
- package/src/archivists/StakeIntentState/archivist.ts +12 -15
- package/src/archivists/StakeIntentState/local.ts +2 -4
- package/src/config/actors/Api.ts +29 -0
- package/src/config/actors/Bridge.ts +133 -0
- package/src/config/actors/Mempool.ts +39 -0
- package/src/config/actors/Producer.ts +56 -0
- package/src/config/actors/RewardRedemption.ts +21 -0
- package/src/config/actors/index.ts +6 -0
- package/src/config/index.ts +4 -0
- package/src/config/locators/actors/apiLocatorFromConfig.ts +25 -0
- package/src/config/locators/actors/bridgeLocatorFromConfig.ts +71 -0
- package/src/config/locators/actors/index.ts +6 -0
- package/src/config/locators/actors/mempoolLocatorFromConfig.ts +21 -0
- package/src/config/locators/actors/producerLocatorFromConfig.ts +66 -0
- package/src/config/locators/actors/rewardRedemptionLocatorFromConfig.ts +21 -0
- package/src/config/locators/actors/validatorLocatorFromConfig.ts +15 -0
- package/src/config/locators/contextFromConfigWithoutLocator.ts +25 -0
- package/src/config/locators/index.ts +7 -0
- package/src/config/locators/localLocatorFromConfig.ts +56 -0
- package/src/config/locators/locatorsFromConfig.ts +67 -0
- package/src/config/locators/remoteLocatorFromConfig.ts +48 -0
- package/src/config/locators/rootLocatorFromConfig.ts +47 -0
- package/src/config/locators/telemetryContextFromConfig.ts +15 -0
- package/src/config/mergeConfig.ts +11 -0
- package/src/config/tryParseConfig.ts +36 -0
- package/src/evm/initChainId.ts +3 -3
- package/src/evm/initEvmProvider.ts +8 -9
- package/src/evm/initInfuraProvider.ts +9 -7
- package/src/evm/initJsonRpcProvider.ts +9 -7
- package/src/health/initHealthEndpoints.ts +15 -18
- package/src/index.ts +1 -0
- package/src/init/index.ts +2 -2
- package/src/init/initActorAccount.ts +28 -0
- package/src/init/{initSeedPhrase.ts → initActorSeedPhrase.ts} +10 -10
- package/src/init/initBalanceSummaryMap.ts +4 -4
- package/src/init/initBridgedModule.ts +6 -8
- package/src/init/initEvmProvidersIfAvailable.ts +6 -5
- package/src/init/initFinalizationArchivistIfNeeded.ts +8 -5
- package/src/init/initServerNode.ts +7 -16
- package/src/init/initTransferSummaryMap.ts +4 -4
- package/src/init/initWallet.ts +33 -35
- package/src/manifest/getLocator.ts +4 -10
- package/src/manifest/loadNode.ts +6 -15
- package/src/orchestrator/Orchestrator.ts +4 -6
- package/dist/neutral/ConfigContext.d.ts +0 -8
- package/dist/neutral/ConfigContext.d.ts.map +0 -1
- package/dist/neutral/init/initProducerAccount.d.ts +0 -6
- package/dist/neutral/init/initProducerAccount.d.ts.map +0 -1
- package/dist/neutral/init/initSeedPhrase.d.ts +0 -6
- package/dist/neutral/init/initSeedPhrase.d.ts.map +0 -1
- package/src/ConfigContext.ts +0 -9
- package/src/init/initProducerAccount.ts +0 -30
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { assertEx } from '@xylabs/sdk-js'
|
|
2
|
+
import type { ActorConfigContext, ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'
|
|
3
|
+
import {
|
|
4
|
+
ProviderFactoryLocator,
|
|
5
|
+
SimpleAccountBalanceViewer,
|
|
6
|
+
SimpleBlockViewer,
|
|
7
|
+
SimpleFinalizationViewer,
|
|
8
|
+
SimpleMempoolRunner,
|
|
9
|
+
SimpleMempoolViewer,
|
|
10
|
+
SimpleWindowedBlockViewer,
|
|
11
|
+
SimpleXyoViewer,
|
|
12
|
+
} from '@xyo-network/xl1-sdk'
|
|
13
|
+
|
|
14
|
+
import {
|
|
15
|
+
initActorWallet, initBalanceSummaryMap,
|
|
16
|
+
initServerNode, initTransferSummaryMap,
|
|
17
|
+
} from '../../init/index.ts'
|
|
18
|
+
|
|
19
|
+
export async function remoteLocatorFromConfig(
|
|
20
|
+
context: ActorConfigContext,
|
|
21
|
+
parent?: ProviderFactoryLocatorInstance,
|
|
22
|
+
): Promise<ProviderFactoryLocatorInstance> {
|
|
23
|
+
const balancesSummaryMap = assertEx(await initBalanceSummaryMap(context), () => 'Balance Summary Map not initialized')
|
|
24
|
+
const transfersSummaryMap = assertEx(await initTransferSummaryMap(context), () => 'Transfer Summary Map not initialized')
|
|
25
|
+
|
|
26
|
+
// TODO: this should not be an api wallet, but a server wallet
|
|
27
|
+
const wallet = await initActorWallet(context)
|
|
28
|
+
|
|
29
|
+
const {
|
|
30
|
+
readonlyChainArchivist, pendingTransactionsArchivist, pendingBlocksArchivist,
|
|
31
|
+
} = await initServerNode(
|
|
32
|
+
context,
|
|
33
|
+
wallet,
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
const locator = new ProviderFactoryLocator({ ...context, locator: parent })
|
|
37
|
+
locator.registerMany([
|
|
38
|
+
SimpleMempoolViewer.factory<SimpleMempoolViewer>(SimpleMempoolViewer.dependencies, { pendingTransactionsArchivist, pendingBlocksArchivist }),
|
|
39
|
+
SimpleMempoolRunner.factory<SimpleMempoolRunner>(SimpleMempoolRunner.dependencies, { pendingTransactionsArchivist, pendingBlocksArchivist }),
|
|
40
|
+
SimpleAccountBalanceViewer.factory<SimpleAccountBalanceViewer>(SimpleAccountBalanceViewer.dependencies, { balancesSummaryMap, transfersSummaryMap }),
|
|
41
|
+
SimpleFinalizationViewer.factory<SimpleFinalizationViewer>(SimpleFinalizationViewer.dependencies, { finalizedArchivist: readonlyChainArchivist }),
|
|
42
|
+
SimpleBlockViewer.factory<SimpleBlockViewer>(SimpleBlockViewer.dependencies, { finalizedArchivist: readonlyChainArchivist }),
|
|
43
|
+
SimpleWindowedBlockViewer.factory<SimpleWindowedBlockViewer>(SimpleWindowedBlockViewer.dependencies, { maxWindowSize: 10_000, syncInterval: 10_000 }),
|
|
44
|
+
SimpleXyoViewer.factory<SimpleXyoViewer>(SimpleXyoViewer.dependencies, { finalizedArchivist: readonlyChainArchivist }),
|
|
45
|
+
])
|
|
46
|
+
locator.freeze()
|
|
47
|
+
return locator
|
|
48
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { isString } from '@xylabs/sdk-js'
|
|
2
|
+
import { validateHydratedBlock, validateHydratedBlockState } from '@xyo-network/chain-validation'
|
|
3
|
+
import type { ActorConfigContext, ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'
|
|
4
|
+
import {
|
|
5
|
+
ProviderFactoryLocator,
|
|
6
|
+
SimpleBlockValidationViewer,
|
|
7
|
+
SimpleNetworkStakeViewer,
|
|
8
|
+
SimpleStepRewardsByPositionViewer,
|
|
9
|
+
SimpleStepRewardsByStakerViewer,
|
|
10
|
+
SimpleStepRewardsByStepViewer,
|
|
11
|
+
SimpleStepRewardsTotalViewer,
|
|
12
|
+
SimpleStepRewardsViewer,
|
|
13
|
+
SimpleStepViewer,
|
|
14
|
+
SimpleTimeSyncViewer,
|
|
15
|
+
} from '@xyo-network/xl1-sdk'
|
|
16
|
+
|
|
17
|
+
import { initEvmProvidersIfAvailable } from '../../init/index.ts'
|
|
18
|
+
import { localLocatorFromConfig } from './localLocatorFromConfig.ts'
|
|
19
|
+
import { remoteLocatorFromConfig } from './remoteLocatorFromConfig.ts'
|
|
20
|
+
|
|
21
|
+
export async function rootLocatorFromConfig(
|
|
22
|
+
context: ActorConfigContext,
|
|
23
|
+
): Promise<ProviderFactoryLocatorInstance> {
|
|
24
|
+
const { config } = context
|
|
25
|
+
let locator: ProviderFactoryLocatorInstance = new ProviderFactoryLocator(context)
|
|
26
|
+
|
|
27
|
+
locator.registerMany([
|
|
28
|
+
SimpleNetworkStakeViewer.factory<SimpleNetworkStakeViewer>(SimpleNetworkStakeViewer.dependencies, {}),
|
|
29
|
+
SimpleTimeSyncViewer.factory<SimpleTimeSyncViewer>(SimpleTimeSyncViewer.dependencies, {}),
|
|
30
|
+
SimpleStepViewer.factory<SimpleStepViewer>(SimpleStepViewer.dependencies, {}),
|
|
31
|
+
SimpleStepRewardsViewer.factory<SimpleStepRewardsViewer>(SimpleStepRewardsViewer.dependencies, {}),
|
|
32
|
+
SimpleStepRewardsByPositionViewer.factory<SimpleStepRewardsByPositionViewer>(SimpleStepRewardsByPositionViewer.dependencies, {}),
|
|
33
|
+
SimpleStepRewardsByStakerViewer.factory<SimpleStepRewardsByStakerViewer>(SimpleStepRewardsByStakerViewer.dependencies, {}),
|
|
34
|
+
SimpleStepRewardsByStepViewer.factory<SimpleStepRewardsByStepViewer>(SimpleStepRewardsByStepViewer.dependencies, {}),
|
|
35
|
+
SimpleStepRewardsTotalViewer.factory<SimpleStepRewardsTotalViewer>(SimpleStepRewardsTotalViewer.dependencies, {}),
|
|
36
|
+
SimpleBlockValidationViewer.factory<SimpleBlockValidationViewer>(
|
|
37
|
+
SimpleBlockValidationViewer.dependencies,
|
|
38
|
+
{ state: validateHydratedBlockState, protocol: validateHydratedBlock },
|
|
39
|
+
),
|
|
40
|
+
])
|
|
41
|
+
locator = await initEvmProvidersIfAvailable(locator)
|
|
42
|
+
locator = await (isString(config.remote.rpc?.url)
|
|
43
|
+
? remoteLocatorFromConfig(context, locator)
|
|
44
|
+
: localLocatorFromConfig(context, locator))
|
|
45
|
+
locator.freeze()
|
|
46
|
+
return locator
|
|
47
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { initTelemetry } from '@xyo-network/chain-telemetry'
|
|
2
|
+
import type { Config } from '@xyo-network/xl1-sdk'
|
|
3
|
+
|
|
4
|
+
export async function telemetryContextFromConfig(config: Config, serviceName: string, serviceVersion: string) {
|
|
5
|
+
const { otlpEndpoint } = config.telemetry?.otel ?? {}
|
|
6
|
+
const { path: endpoint = '/metrics', port: port = 9466 } = config.telemetry?.metrics?.scrape ?? {}
|
|
7
|
+
return await initTelemetry({
|
|
8
|
+
attributes: {
|
|
9
|
+
serviceName,
|
|
10
|
+
serviceVersion,
|
|
11
|
+
},
|
|
12
|
+
otlpEndpoint,
|
|
13
|
+
metricsConfig: { endpoint, port },
|
|
14
|
+
})
|
|
15
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { deepMerge } from '@xylabs/sdk-js'
|
|
2
|
+
import type { Config } from '@xyo-network/xl1-sdk'
|
|
3
|
+
|
|
4
|
+
export function mergeConfig({ actors, ...baseConfig }: Config) {
|
|
5
|
+
return {
|
|
6
|
+
...baseConfig,
|
|
7
|
+
actors: actors.map((actor) => {
|
|
8
|
+
return deepMerge(baseConfig, actor)
|
|
9
|
+
}),
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { isDefined, isNull } from '@xylabs/sdk-js'
|
|
2
|
+
import { ConfigZod } from '@xyo-network/xl1-sdk'
|
|
3
|
+
import { cosmiconfig } from 'cosmiconfig'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* The name of the configuration file to search for.
|
|
7
|
+
*/
|
|
8
|
+
const configName = 'xyo'
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* The name of the section within the configuration file to parse.
|
|
12
|
+
*/
|
|
13
|
+
const configSection = 'xl1' // Default section in the config file
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Attempts to parse the configuration from a file using cosmiconfig.
|
|
17
|
+
* @returns The parsed configuration object if found and valid, otherwise undefined.
|
|
18
|
+
*/
|
|
19
|
+
export async function tryParseConfig(searchPlaces?: string[]) {
|
|
20
|
+
const explorer = cosmiconfig(
|
|
21
|
+
configName,
|
|
22
|
+
{
|
|
23
|
+
cache: true,
|
|
24
|
+
// loaders: { '.ts': TypeScriptLoader() },
|
|
25
|
+
searchPlaces,
|
|
26
|
+
},
|
|
27
|
+
)
|
|
28
|
+
const result = (await explorer.search())?.config
|
|
29
|
+
if (!isNull(result)) {
|
|
30
|
+
const section = result[configSection]
|
|
31
|
+
if (isDefined(section) && typeof section === 'object') {
|
|
32
|
+
return ConfigZod.loose().parse(section)
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return ConfigZod.parse({})
|
|
36
|
+
}
|
package/src/evm/initChainId.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
assertEx, hexFrom, isDefined, isHex,
|
|
3
3
|
} from '@xylabs/sdk-js'
|
|
4
|
-
import type {
|
|
4
|
+
import type { BaseConfigContext } from '@xyo-network/xl1-sdk'
|
|
5
5
|
|
|
6
|
-
export const canUseChainId = (config:
|
|
6
|
+
export const canUseChainId = ({ config }: BaseConfigContext): boolean => {
|
|
7
7
|
return isDefined(config.evm.chainId)
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
export const getChainId = (config:
|
|
10
|
+
export const getChainId = ({ config }: BaseConfigContext) => {
|
|
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)
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import type { Logger } from '@xylabs/sdk-js'
|
|
2
1
|
import { assertEx } from '@xylabs/sdk-js'
|
|
3
|
-
import type {
|
|
2
|
+
import type { BaseConfigContext } from '@xyo-network/xl1-sdk'
|
|
4
3
|
import type { Provider } from 'ethers'
|
|
5
4
|
|
|
6
5
|
import { canUseInfuraProvider, initInfuraProvider } from './initInfuraProvider.ts'
|
|
@@ -8,16 +7,16 @@ import { canUseJsonRpcProvider, initJsonRpcProvider } from './initJsonRpcProvide
|
|
|
8
7
|
|
|
9
8
|
let provider: Promise<Provider> | undefined
|
|
10
9
|
|
|
11
|
-
export const initEvmProvider = async (
|
|
10
|
+
export const initEvmProvider = async (context: BaseConfigContext): Promise<Provider> => {
|
|
12
11
|
if (provider) return provider
|
|
13
|
-
if (canUseInfuraProvider(
|
|
14
|
-
provider = initInfuraProvider(
|
|
15
|
-
} else if (canUseJsonRpcProvider(
|
|
16
|
-
provider = initJsonRpcProvider(
|
|
12
|
+
if (canUseInfuraProvider(context)) {
|
|
13
|
+
provider = initInfuraProvider(context)
|
|
14
|
+
} else if (canUseJsonRpcProvider(context)) {
|
|
15
|
+
provider = initJsonRpcProvider(context)
|
|
17
16
|
}
|
|
18
17
|
return assertEx(await provider, () => 'No provider available')
|
|
19
18
|
}
|
|
20
19
|
|
|
21
|
-
export const canUseEvmProvider = (
|
|
22
|
-
return canUseInfuraProvider(
|
|
20
|
+
export const canUseEvmProvider = (context: BaseConfigContext) => {
|
|
21
|
+
return canUseInfuraProvider(context) || canUseJsonRpcProvider(context)
|
|
23
22
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { assertEx, isDefined } from '@xylabs/sdk-js'
|
|
2
|
-
import type {
|
|
2
|
+
import type { BaseConfigContext } from '@xyo-network/xl1-sdk'
|
|
3
3
|
import type { Provider } from 'ethers'
|
|
4
4
|
import { InfuraProvider } from 'ethers/providers'
|
|
5
5
|
|
|
@@ -7,21 +7,23 @@ import { canUseChainId, getChainId } from './initChainId.ts'
|
|
|
7
7
|
|
|
8
8
|
let instance: Promise<InfuraProvider> | undefined
|
|
9
9
|
|
|
10
|
-
export const initInfuraProvider = (
|
|
10
|
+
export const initInfuraProvider = (context: BaseConfigContext): Promise<Provider> => {
|
|
11
11
|
if (instance) return instance
|
|
12
|
-
const providerConfig = getInfuraProviderConfig(
|
|
12
|
+
const providerConfig = getInfuraProviderConfig(context)
|
|
13
13
|
instance = Promise.resolve(new InfuraProvider(providerConfig[0], providerConfig[1]))
|
|
14
14
|
return instance
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
export const canUseInfuraProvider = (
|
|
18
|
-
|
|
17
|
+
export const canUseInfuraProvider = (context: BaseConfigContext): boolean => {
|
|
18
|
+
const { config } = context
|
|
19
|
+
return canUseChainId(context)
|
|
19
20
|
&& isDefined(config.evm?.infura?.projectId)
|
|
20
21
|
&& isDefined(config.evm?.infura?.projectSecret)
|
|
21
22
|
}
|
|
22
23
|
|
|
23
|
-
export const getInfuraProviderConfig = (
|
|
24
|
+
export const getInfuraProviderConfig = (context: BaseConfigContext) => {
|
|
25
|
+
const { config } = context
|
|
24
26
|
const projectId = assertEx(config.evm?.infura?.projectId, () => 'Missing config.evm.infura.projectId')
|
|
25
27
|
const projectSecret = assertEx(config.evm?.infura?.projectSecret, () => 'Missing config.evm.infura.projectSecret')
|
|
26
|
-
return [getChainId(
|
|
28
|
+
return [getChainId(context), projectId, projectSecret] as const
|
|
27
29
|
}
|
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
import { assertEx, isDefined } from '@xylabs/sdk-js'
|
|
2
|
-
import type {
|
|
2
|
+
import type { BaseConfigContext } from '@xyo-network/xl1-sdk'
|
|
3
3
|
import { JsonRpcProvider } from 'ethers/providers'
|
|
4
4
|
|
|
5
5
|
import { canUseChainId, getChainId } from './initChainId.ts'
|
|
6
6
|
|
|
7
|
-
export const initJsonRpcProvider = (
|
|
8
|
-
const providerConfig = getJsonRpcProviderConfig(
|
|
7
|
+
export const initJsonRpcProvider = (context: BaseConfigContext) => {
|
|
8
|
+
const providerConfig = getJsonRpcProviderConfig(context)
|
|
9
9
|
return Promise.resolve(new JsonRpcProvider(...providerConfig))
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
export const canUseJsonRpcProvider = (
|
|
13
|
-
|
|
12
|
+
export const canUseJsonRpcProvider = (context: BaseConfigContext) => {
|
|
13
|
+
const { config } = context
|
|
14
|
+
return canUseChainId(context)
|
|
14
15
|
&& isDefined(config.evm.jsonRpc?.url)
|
|
15
16
|
}
|
|
16
17
|
|
|
17
|
-
export const getJsonRpcProviderConfig = (
|
|
18
|
+
export const getJsonRpcProviderConfig = (context: BaseConfigContext) => {
|
|
19
|
+
const { config } = context
|
|
18
20
|
const jsonRpcUrl = assertEx(config.evm.jsonRpc?.url, () => 'Missing config.evm.jsonRpc.url')
|
|
19
|
-
return [jsonRpcUrl, getChainId(
|
|
21
|
+
return [jsonRpcUrl, getChainId(context)] as const
|
|
20
22
|
}
|
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
IncomingMessage, Server, ServerResponse,
|
|
3
|
-
} from 'node:http'
|
|
1
|
+
import type { IncomingMessage, ServerResponse } from 'node:http'
|
|
4
2
|
import http from 'node:http'
|
|
5
3
|
|
|
6
|
-
import type { CreatableStatus
|
|
4
|
+
import type { CreatableStatus } from '@xylabs/sdk-js'
|
|
7
5
|
import { isDefined } from '@xylabs/sdk-js'
|
|
8
|
-
import type {
|
|
9
|
-
Config, Initializable, RuntimeStatusMonitor,
|
|
10
|
-
} from '@xyo-network/xl1-sdk'
|
|
6
|
+
import type { ActorConfigContext, RuntimeStatusMonitor } from '@xyo-network/xl1-sdk'
|
|
11
7
|
|
|
12
8
|
const sendStatus = (res: ServerResponse, status: CreatableStatus, errorCode: number) => {
|
|
13
9
|
const statusCode = status === 'started' ? 200 : errorCode
|
|
@@ -25,9 +21,12 @@ const notFound = (res: ServerResponse) => {
|
|
|
25
21
|
* - /healthz
|
|
26
22
|
* - /livez
|
|
27
23
|
* - /readyz
|
|
24
|
+
* @param context The actor configuration context
|
|
28
25
|
* @param port The port to listen on (default: 8080)
|
|
26
|
+
* @param statusMonitor The runtime status monitor to determine the health status
|
|
29
27
|
*/
|
|
30
|
-
const createHealthServer = (port: number, statusMonitor: RuntimeStatusMonitor
|
|
28
|
+
const createHealthServer = (context: ActorConfigContext, port: number, statusMonitor: RuntimeStatusMonitor) => {
|
|
29
|
+
const { logger } = context
|
|
31
30
|
const server = http.createServer((req: IncomingMessage, res: ServerResponse) => {
|
|
32
31
|
const url = req.url ?? ''
|
|
33
32
|
|
|
@@ -53,18 +52,16 @@ const createHealthServer = (port: number, statusMonitor: RuntimeStatusMonitor, l
|
|
|
53
52
|
})
|
|
54
53
|
|
|
55
54
|
server.listen(port, () => {
|
|
56
|
-
logger
|
|
57
|
-
logger
|
|
58
|
-
logger
|
|
59
|
-
logger
|
|
55
|
+
logger?.log(`Health server running on http://localhost:${port}`)
|
|
56
|
+
logger?.log(' - /healthz')
|
|
57
|
+
logger?.log(' - /livez')
|
|
58
|
+
logger?.log(' - /readyz')
|
|
60
59
|
})
|
|
61
60
|
return server
|
|
62
61
|
}
|
|
63
62
|
|
|
64
|
-
export
|
|
65
|
-
const {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
const { healthCheckPort } = config.actors.producer
|
|
69
|
-
return isDefined(healthCheckPort) ? createHealthServer(healthCheckPort, statusReporter, logger) : undefined
|
|
63
|
+
export function initHealthEndpoints(context: ActorConfigContext, statusMonitor: RuntimeStatusMonitor) {
|
|
64
|
+
const { config } = context
|
|
65
|
+
const { healthCheckPort } = config
|
|
66
|
+
return isDefined(healthCheckPort) ? createHealthServer(context, healthCheckPort, statusMonitor) : undefined
|
|
70
67
|
}
|
package/src/index.ts
CHANGED
|
@@ -2,6 +2,7 @@ export * from './actor/index.ts'
|
|
|
2
2
|
export * from './archivists/index.ts'
|
|
3
3
|
export * from './buildTelemetryConfig.ts'
|
|
4
4
|
export * from './ChainInitializableParams.ts'
|
|
5
|
+
export * from './config/index.ts'
|
|
5
6
|
export * from './createDeclarationIntentBlock.ts'
|
|
6
7
|
export * from './evm/index.ts'
|
|
7
8
|
export * from './health/index.ts'
|
package/src/init/index.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
export * from './initActorAccount.ts'
|
|
2
|
+
export * from './initActorSeedPhrase.ts'
|
|
1
3
|
export * from './initBalanceSummaryMap.ts'
|
|
2
4
|
export * from './initBridgedModule.ts'
|
|
3
5
|
export * from './initEvmProvidersIfAvailable.ts'
|
|
4
6
|
export * from './initFinalizationArchivistIfNeeded.ts'
|
|
5
7
|
export * from './initFinalizedArchivist.ts'
|
|
6
|
-
export * from './initProducerAccount.ts'
|
|
7
|
-
export * from './initSeedPhrase.ts'
|
|
8
8
|
export * from './initServerNode.ts'
|
|
9
9
|
export * from './initStatusReporter.ts'
|
|
10
10
|
export * from './initTransferSummaryMap.ts'
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Promisable } from '@xylabs/sdk-js'
|
|
2
|
+
import { isDefined, isUndefined } from '@xylabs/sdk-js'
|
|
3
|
+
import { HDWallet } from '@xyo-network/wallet'
|
|
4
|
+
import type { WalletInstance } from '@xyo-network/wallet-model'
|
|
5
|
+
import type { ActorConfigContext } from '@xyo-network/xl1-sdk'
|
|
6
|
+
import { ADDRESS_INDEX, generateXyoBaseWalletFromPhrase } from '@xyo-network/xl1-sdk'
|
|
7
|
+
|
|
8
|
+
const actorAccountSingletons: Record<string, Promisable<WalletInstance>> = {}
|
|
9
|
+
|
|
10
|
+
export async function initActorAccount({ config, logger }: Pick<ActorConfigContext, 'config' | 'logger'>): Promise<WalletInstance> {
|
|
11
|
+
const actorName = config.name
|
|
12
|
+
if (isDefined(actorAccountSingletons[actorName])) return actorAccountSingletons[actorName]
|
|
13
|
+
let walletPhrase = config.mnemonic
|
|
14
|
+
if (isUndefined(walletPhrase)) {
|
|
15
|
+
logger?.warn(`[${actorName}}] No wallet mnemonic specified!`)
|
|
16
|
+
const randomMnemonic = HDWallet.generateMnemonic()
|
|
17
|
+
logger?.warn(`[${actorName}}] Using randomly generated mnemonic:
|
|
18
|
+
|
|
19
|
+
${randomMnemonic}
|
|
20
|
+
|
|
21
|
+
`)
|
|
22
|
+
walletPhrase = randomMnemonic
|
|
23
|
+
}
|
|
24
|
+
const wallet = await generateXyoBaseWalletFromPhrase(walletPhrase)
|
|
25
|
+
const account = await wallet.derivePath(ADDRESS_INDEX.XYO)
|
|
26
|
+
actorAccountSingletons[actorName] = account
|
|
27
|
+
return actorAccountSingletons[actorName]
|
|
28
|
+
}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import { assertEx, isString } from '@xylabs/sdk-js'
|
|
2
2
|
import type { BiosExternalInterface } from '@xyo-network/bios-model'
|
|
3
|
+
import type { WalletKind } from '@xyo-network/storage-model'
|
|
3
4
|
import { HDWallet } from '@xyo-network/wallet'
|
|
4
|
-
|
|
5
|
-
import type { ConfigContext } from '../ConfigContext.ts'
|
|
5
|
+
import type { ActorConfigContext } from '@xyo-network/xl1-sdk'
|
|
6
6
|
|
|
7
7
|
// TODO: Make nodejs version of bios support round tripping mnemonic between boots
|
|
8
|
-
export async function
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const storedSeedPhrase = await bios.seedPhraseStore.get(
|
|
8
|
+
export async function initActorSeedPhrase(context: ActorConfigContext, bios: BiosExternalInterface): Promise<string> {
|
|
9
|
+
const { logger, config } = context
|
|
10
|
+
const walletKind = config.name as WalletKind
|
|
11
|
+
const storedSeedPhrase = await bios.seedPhraseStore.get(walletKind)
|
|
12
12
|
logger?.debug(`[API] Stored mnemonic: ${storedSeedPhrase}`)
|
|
13
|
-
const { mnemonic } = config
|
|
13
|
+
const { mnemonic } = config
|
|
14
14
|
if (isString(storedSeedPhrase) && isString(mnemonic)) {
|
|
15
15
|
logger?.warn('[API] Stored mnemonic does not match supplied. Updating stored mnemonic to supplied.')
|
|
16
|
-
await bios.seedPhraseStore.set(
|
|
16
|
+
await bios.seedPhraseStore.set(walletKind, mnemonic)
|
|
17
17
|
} else {
|
|
18
18
|
let seedPhrase: string
|
|
19
19
|
if (isString(mnemonic)) {
|
|
@@ -23,7 +23,7 @@ export async function initSeedPhrase({
|
|
|
23
23
|
logger?.log('[API] No mnemonic provided, using random mnemonic. This is not recommended for production use.')
|
|
24
24
|
logger?.log(`[API] Mnemonic: ${seedPhrase}`)
|
|
25
25
|
}
|
|
26
|
-
await bios.seedPhraseStore.set(
|
|
26
|
+
await bios.seedPhraseStore.set(walletKind, seedPhrase)
|
|
27
27
|
}
|
|
28
|
-
return assertEx(await bios.seedPhraseStore.get(
|
|
28
|
+
return assertEx(await bios.seedPhraseStore.get(walletKind), () => 'Unable to acquire mnemonic from bios')
|
|
29
29
|
}
|
|
@@ -3,12 +3,12 @@ import type { Hash } from '@xylabs/sdk-js'
|
|
|
3
3
|
import { assertEx } from '@xylabs/sdk-js'
|
|
4
4
|
import { MongoMap } from '@xyo-network/chain-protocol'
|
|
5
5
|
import type { WithStorageMeta } from '@xyo-network/payload-model'
|
|
6
|
-
import type {
|
|
6
|
+
import type {
|
|
7
|
+
BalancesStepSummary, BaseConfigContext, MapType,
|
|
8
|
+
} from '@xyo-network/xl1-sdk'
|
|
7
9
|
import { hasMongoConfig, MemoryMap } from '@xyo-network/xl1-sdk'
|
|
8
10
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
export async function initBalanceSummaryMap({ config, logger }: ConfigContext): Promise<MapType<string, WithStorageMeta<BalancesStepSummary>>> {
|
|
11
|
+
export async function initBalanceSummaryMap({ logger, config }: BaseConfigContext): Promise<MapType<string, WithStorageMeta<BalancesStepSummary>>> {
|
|
12
12
|
const mongoConfig = config.storage?.mongo
|
|
13
13
|
if (hasMongoConfig(mongoConfig)) {
|
|
14
14
|
// Create the MongoDB SDK from the configuration
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import type { Address
|
|
1
|
+
import type { Address } from '@xylabs/sdk-js'
|
|
2
2
|
import { assertEx } from '@xylabs/sdk-js'
|
|
3
3
|
import type { AttachableArchivistInstance } from '@xyo-network/archivist-model'
|
|
4
4
|
import { asAttachableArchivistInstance } from '@xyo-network/archivist-model'
|
|
5
5
|
import type { BridgeInstance } from '@xyo-network/bridge-model'
|
|
6
6
|
import type { AttachableModuleInstance, ModuleIdentifier } from '@xyo-network/module-model'
|
|
7
7
|
import { asAttachableModuleInstance } from '@xyo-network/module-model'
|
|
8
|
-
import type { Initializable } from '@xyo-network/xl1-sdk'
|
|
9
8
|
import { Mutex } from 'async-mutex'
|
|
10
9
|
|
|
11
10
|
const initMutex = new Mutex()
|
|
@@ -13,9 +12,7 @@ type ModuleDictionary = Record<ModuleIdentifier, AttachableModuleInstance | unde
|
|
|
13
12
|
type BridgedModuleDictionary = Record<Address, ModuleDictionary | undefined>
|
|
14
13
|
const bridgedModuleDictionary: BridgedModuleDictionary = {}
|
|
15
14
|
|
|
16
|
-
export
|
|
17
|
-
{ bridge: BridgeInstance; moduleName: ModuleIdentifier }, AttachableModuleInstance
|
|
18
|
-
> = async ({ bridge, moduleName }): Promise<AttachableModuleInstance> => {
|
|
15
|
+
export async function initBridgedModule({ bridge, moduleName }: { bridge: BridgeInstance; moduleName: ModuleIdentifier }): Promise<AttachableModuleInstance> {
|
|
19
16
|
return await initMutex.runExclusive(async () => {
|
|
20
17
|
const existing = bridgedModuleDictionary?.[bridge.address]?.[moduleName]
|
|
21
18
|
if (existing) return existing
|
|
@@ -33,9 +30,10 @@ export const initBridgedModule: Initializable<
|
|
|
33
30
|
})
|
|
34
31
|
}
|
|
35
32
|
|
|
36
|
-
export
|
|
37
|
-
|
|
38
|
-
|
|
33
|
+
export async function initBridgedArchivistModule({ bridge, moduleName }: {
|
|
34
|
+
bridge: BridgeInstance
|
|
35
|
+
moduleName: ModuleIdentifier
|
|
36
|
+
}): Promise<AttachableArchivistInstance> {
|
|
39
37
|
return assertEx(
|
|
40
38
|
asAttachableArchivistInstance(await initBridgedModule({ bridge, moduleName })),
|
|
41
39
|
() => `Could not convert ${moduleName} to attachable archivist instance`,
|
|
@@ -16,10 +16,11 @@ import {
|
|
|
16
16
|
import { canUseEvmProvider, initEvmProvider } from '../evm/index.ts'
|
|
17
17
|
|
|
18
18
|
export async function initEvmProvidersIfAvailable(locator: ProviderFactoryLocatorInstance) {
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const
|
|
19
|
+
const context = locator.context
|
|
20
|
+
const { logger, config } = context
|
|
21
|
+
if (canUseEvmProvider(context)) {
|
|
22
|
+
const chainId = assertEx(context.config.chain.id as ChainId, () => 'Missing config.chain.id (required for EVM providers)')
|
|
23
|
+
const provider = await initEvmProvider(context)
|
|
23
24
|
const address = asEthAddress(chainId, true)
|
|
24
25
|
|
|
25
26
|
// Register the contract events viewer
|
|
@@ -53,7 +54,7 @@ export async function initEvmProvidersIfAvailable(locator: ProviderFactoryLocato
|
|
|
53
54
|
} else {
|
|
54
55
|
logger?.warn('EVM provider not available - running with memory based contract/stake viewers')
|
|
55
56
|
const positions: Position[] = []
|
|
56
|
-
const chainId = assertEx(config.chain.id, () => 'Missing config.chain.
|
|
57
|
+
const chainId = assertEx(config.chain.id, () => 'Missing config.chain.id (required for non-EVM providers)')
|
|
57
58
|
|
|
58
59
|
// Register the contract events viewer
|
|
59
60
|
locator.register(SimpleStakeEventsViewer.factory<SimpleStakeEventsViewer>(
|
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
import { assertEx } from '@xylabs/sdk-js'
|
|
2
|
-
import { Account } from '@xyo-network/account'
|
|
3
2
|
import type { AccountInstance } from '@xyo-network/account-model'
|
|
4
3
|
import type { ArchivistInstance } from '@xyo-network/archivist-model'
|
|
5
4
|
import { createBootstrapHead } from '@xyo-network/chain-sdk'
|
|
5
|
+
import { Account } from '@xyo-network/sdk-js'
|
|
6
|
+
import type {
|
|
7
|
+
ActorConfig,
|
|
8
|
+
ChainId,
|
|
9
|
+
SignedBlockBoundWitnessWithHashMeta,
|
|
10
|
+
} from '@xyo-network/xl1-sdk'
|
|
6
11
|
import {
|
|
7
|
-
asAttoXL1,
|
|
8
|
-
type ChainId, type Config, findMostRecentBlock,
|
|
12
|
+
asAttoXL1, findMostRecentBlock,
|
|
9
13
|
flattenHydratedBlock,
|
|
10
|
-
type SignedBlockBoundWitnessWithHashMeta,
|
|
11
14
|
} from '@xyo-network/xl1-sdk'
|
|
12
15
|
|
|
13
16
|
export async function initFinalizationArchivistIfNeeded(
|
|
14
17
|
archivist: ArchivistInstance,
|
|
15
|
-
config:
|
|
18
|
+
config: ActorConfig,
|
|
16
19
|
account: AccountInstance,
|
|
17
20
|
): Promise<[SignedBlockBoundWitnessWithHashMeta, ChainId]> {
|
|
18
21
|
const configuredChainId = config.chain.id
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
import { assertEx } from '@xylabs/sdk-js'
|
|
2
2
|
import { asArchivistInstance } from '@xyo-network/archivist-model'
|
|
3
3
|
import type { NodeInstance } from '@xyo-network/node-model'
|
|
4
|
-
import type { WithStorageMeta } from '@xyo-network/payload-model'
|
|
5
4
|
import type { WalletInstance } from '@xyo-network/wallet-model'
|
|
6
|
-
import type {
|
|
7
|
-
BalancesStepSummary, MapType, TransfersStepSummary,
|
|
8
|
-
} from '@xyo-network/xl1-sdk'
|
|
5
|
+
import type { BaseConfigContext } from '@xyo-network/xl1-sdk'
|
|
9
6
|
|
|
10
|
-
import type { ConfigContext } from '../ConfigContext.ts'
|
|
11
7
|
import { loadNode } from '../manifest/index.ts'
|
|
12
8
|
|
|
13
9
|
async function writableChainArchivistFromNode(node: NodeInstance) {
|
|
@@ -38,17 +34,12 @@ async function pendingBlocksArchivistFromNode(node: NodeInstance) {
|
|
|
38
34
|
)
|
|
39
35
|
}
|
|
40
36
|
|
|
41
|
-
export async function initServerNode(
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
wallet: WalletInstance
|
|
48
|
-
}>) {
|
|
49
|
-
const node: NodeInstance = providedNode ?? await loadNode({
|
|
50
|
-
wallet, logger, config, transfersSummaryMap, balancesSummaryMap,
|
|
51
|
-
})
|
|
37
|
+
export async function initServerNode(
|
|
38
|
+
context: BaseConfigContext,
|
|
39
|
+
wallet: WalletInstance,
|
|
40
|
+
providedNode?: NodeInstance,
|
|
41
|
+
) {
|
|
42
|
+
const node: NodeInstance = providedNode ?? await loadNode(context, wallet)
|
|
52
43
|
assertEx(await node.start(), () => 'Failed to start node')
|
|
53
44
|
const writableChainArchivist = await writableChainArchivistFromNode(node)
|
|
54
45
|
const readonlyChainArchivist = await readonlyChainArchivistFromNode(node)
|
|
@@ -3,12 +3,12 @@ import type { Hash } from '@xylabs/sdk-js'
|
|
|
3
3
|
import { assertEx } from '@xylabs/sdk-js'
|
|
4
4
|
import { MongoMap } from '@xyo-network/chain-protocol'
|
|
5
5
|
import type { WithStorageMeta } from '@xyo-network/payload-model'
|
|
6
|
-
import type {
|
|
6
|
+
import type {
|
|
7
|
+
BaseConfigContext, MapType, TransfersStepSummary,
|
|
8
|
+
} from '@xyo-network/xl1-sdk'
|
|
7
9
|
import { hasMongoConfig, MemoryMap } from '@xyo-network/xl1-sdk'
|
|
8
10
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
export async function initTransferSummaryMap({ config, logger }: ConfigContext): Promise<MapType<string, WithStorageMeta<TransfersStepSummary>>> {
|
|
11
|
+
export async function initTransferSummaryMap({ logger, config }: BaseConfigContext): Promise<MapType<string, WithStorageMeta<TransfersStepSummary>>> {
|
|
12
12
|
const mongoConfig = config.storage?.mongo
|
|
13
13
|
if (hasMongoConfig(mongoConfig)) {
|
|
14
14
|
// Create the MongoDB SDK from the configuration
|