@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
package/dist/neutral/index.mjs
CHANGED
|
@@ -66,8 +66,8 @@ ValidatorActor = _ts_decorate([
|
|
|
66
66
|
], ValidatorActor);
|
|
67
67
|
|
|
68
68
|
// src/archivists/ChainFinalized/archivist.ts
|
|
69
|
+
import { timeBudget } from "@xylabs/sdk-js";
|
|
69
70
|
import { startupSpanAsync } from "@xyo-network/chain-utils";
|
|
70
|
-
import { timeBudget } from "@xyo-network/xl1-sdk";
|
|
71
71
|
import { Mutex as Mutex2 } from "async-mutex";
|
|
72
72
|
|
|
73
73
|
// src/archivists/ChainFinalized/local.ts
|
|
@@ -101,14 +101,15 @@ var getLocalPersistentArchivist = /* @__PURE__ */ __name((name, dbName, storeNam
|
|
|
101
101
|
// src/archivists/ChainFinalized/local.ts
|
|
102
102
|
var mutex = new Mutex();
|
|
103
103
|
var singleton;
|
|
104
|
-
|
|
104
|
+
async function initLocalChainFinalizedArchivist({ config }) {
|
|
105
105
|
return await mutex.runExclusive(async () => {
|
|
106
106
|
if (singleton) return singleton;
|
|
107
107
|
const { root } = config.storage;
|
|
108
108
|
singleton = await getLocalPersistentArchivist("local-finalized-chain", "chain", "finalized", root);
|
|
109
109
|
return singleton;
|
|
110
110
|
});
|
|
111
|
-
}
|
|
111
|
+
}
|
|
112
|
+
__name(initLocalChainFinalizedArchivist, "initLocalChainFinalizedArchivist");
|
|
112
113
|
|
|
113
114
|
// src/archivists/ChainFinalized/archivist.ts
|
|
114
115
|
var mutex2 = new Mutex2();
|
|
@@ -126,22 +127,23 @@ async function initChainFinalizedArchivist(context) {
|
|
|
126
127
|
__name(initChainFinalizedArchivist, "initChainFinalizedArchivist");
|
|
127
128
|
|
|
128
129
|
// src/archivists/PendingBlocks/archivist.ts
|
|
130
|
+
import { timeBudget as timeBudget2 } from "@xylabs/sdk-js";
|
|
129
131
|
import { startupSpanAsync as startupSpanAsync2 } from "@xyo-network/chain-utils";
|
|
130
|
-
import { timeBudget as timeBudget2 } from "@xyo-network/xl1-sdk";
|
|
131
132
|
import { Mutex as Mutex4 } from "async-mutex";
|
|
132
133
|
|
|
133
134
|
// src/archivists/PendingBlocks/local.ts
|
|
134
135
|
import { Mutex as Mutex3 } from "async-mutex";
|
|
135
136
|
var mutex3 = new Mutex3();
|
|
136
137
|
var singleton3;
|
|
137
|
-
|
|
138
|
+
async function initLocalPendingBlocksArchivist({ config }) {
|
|
138
139
|
return await mutex3.runExclusive(async () => {
|
|
139
140
|
if (singleton3) return singleton3;
|
|
140
141
|
const { root } = config.storage;
|
|
141
142
|
singleton3 = await getLocalPersistentArchivist("local-pending-blocks", "chain", "pending_block_bundles", root);
|
|
142
143
|
return singleton3;
|
|
143
144
|
});
|
|
144
|
-
}
|
|
145
|
+
}
|
|
146
|
+
__name(initLocalPendingBlocksArchivist, "initLocalPendingBlocksArchivist");
|
|
145
147
|
|
|
146
148
|
// src/archivists/PendingBlocks/archivist.ts
|
|
147
149
|
var mutex4 = new Mutex4();
|
|
@@ -159,8 +161,8 @@ async function initPendingBlocksArchivist(context) {
|
|
|
159
161
|
__name(initPendingBlocksArchivist, "initPendingBlocksArchivist");
|
|
160
162
|
|
|
161
163
|
// src/archivists/RejectedTransactions/archivist.ts
|
|
164
|
+
import { timeBudget as timeBudget3 } from "@xylabs/sdk-js";
|
|
162
165
|
import { startupSpanAsync as startupSpanAsync3 } from "@xyo-network/chain-utils";
|
|
163
|
-
import { timeBudget as timeBudget3 } from "@xyo-network/xl1-sdk";
|
|
164
166
|
import { Mutex as Mutex6 } from "async-mutex";
|
|
165
167
|
|
|
166
168
|
// src/archivists/RejectedTransactions/local.ts
|
|
@@ -168,7 +170,7 @@ import { MemoryArchivist, MemoryArchivistConfigSchema } from "@xyo-network/archi
|
|
|
168
170
|
import { Mutex as Mutex5 } from "async-mutex";
|
|
169
171
|
var mutex5 = new Mutex5();
|
|
170
172
|
var singleton5;
|
|
171
|
-
|
|
173
|
+
async function initLocalRejectedTransactionsArchivist() {
|
|
172
174
|
return await mutex5.runExclusive(async () => {
|
|
173
175
|
if (singleton5) return singleton5;
|
|
174
176
|
singleton5 = await MemoryArchivist.create({
|
|
@@ -181,16 +183,17 @@ var initLocalRejectedTransactionsArchivist = /* @__PURE__ */ __name(async () =>
|
|
|
181
183
|
});
|
|
182
184
|
return singleton5;
|
|
183
185
|
});
|
|
184
|
-
}
|
|
186
|
+
}
|
|
187
|
+
__name(initLocalRejectedTransactionsArchivist, "initLocalRejectedTransactionsArchivist");
|
|
185
188
|
|
|
186
189
|
// src/archivists/RejectedTransactions/archivist.ts
|
|
187
190
|
var mutex6 = new Mutex6();
|
|
188
191
|
var singleton6;
|
|
189
|
-
async function initRejectedTransactionsArchivist(
|
|
192
|
+
async function initRejectedTransactionsArchivist({ logger }) {
|
|
190
193
|
return await mutex6.runExclusive(async () => {
|
|
191
194
|
if (singleton6) return singleton6;
|
|
192
|
-
return await timeBudget3("initRejectedTransactionsArchivist",
|
|
193
|
-
const local = await startupSpanAsync3("RejectedTransactionsArchivist:initLocal", () => initLocalRejectedTransactionsArchivist(
|
|
195
|
+
return await timeBudget3("initRejectedTransactionsArchivist", logger, async () => {
|
|
196
|
+
const local = await startupSpanAsync3("RejectedTransactionsArchivist:initLocal", () => initLocalRejectedTransactionsArchivist());
|
|
194
197
|
singleton6 = local;
|
|
195
198
|
return singleton6;
|
|
196
199
|
}, 2e3, true);
|
|
@@ -199,9 +202,8 @@ async function initRejectedTransactionsArchivist(params) {
|
|
|
199
202
|
__name(initRejectedTransactionsArchivist, "initRejectedTransactionsArchivist");
|
|
200
203
|
|
|
201
204
|
// src/archivists/StakeIntentState/archivist.ts
|
|
202
|
-
import { assertEx as assertEx2 } from "@xylabs/sdk-js";
|
|
205
|
+
import { assertEx as assertEx2, timeBudget as timeBudget4 } from "@xylabs/sdk-js";
|
|
203
206
|
import { startupSpanAsync as startupSpanAsync4 } from "@xyo-network/chain-utils";
|
|
204
|
-
import { timeBudget as timeBudget4 } from "@xyo-network/xl1-sdk";
|
|
205
207
|
import { Mutex as Mutex8 } from "async-mutex";
|
|
206
208
|
|
|
207
209
|
// src/archivists/StakeIntentState/local.ts
|
|
@@ -209,19 +211,20 @@ import { assertEx } from "@xylabs/sdk-js";
|
|
|
209
211
|
import { Mutex as Mutex7 } from "async-mutex";
|
|
210
212
|
var mutex7 = new Mutex7();
|
|
211
213
|
var singleton7;
|
|
212
|
-
|
|
214
|
+
async function initLocalStakeIntentStateArchivist({ config }) {
|
|
213
215
|
return await mutex7.runExclusive(async () => {
|
|
214
216
|
if (singleton7) return singleton7;
|
|
215
217
|
const { root } = config.storage;
|
|
216
218
|
singleton7 = await getLocalPersistentArchivist("local-stake-intent-state", "stakeIntent", "state", root);
|
|
217
219
|
return assertEx(singleton7, () => new Error("Failed to initialize stake intent state archivist"));
|
|
218
220
|
});
|
|
219
|
-
}
|
|
221
|
+
}
|
|
222
|
+
__name(initLocalStakeIntentStateArchivist, "initLocalStakeIntentStateArchivist");
|
|
220
223
|
|
|
221
224
|
// src/archivists/StakeIntentState/archivist.ts
|
|
222
225
|
var mutex8 = new Mutex8();
|
|
223
226
|
var singleton8;
|
|
224
|
-
|
|
227
|
+
async function initStakeIntentStateArchivist(context) {
|
|
225
228
|
return await mutex8.runExclusive(async () => {
|
|
226
229
|
if (singleton8) return singleton8;
|
|
227
230
|
return await timeBudget4("initStakeIntentStateArchivist", context.logger, async () => {
|
|
@@ -230,7 +233,8 @@ var initStakeIntentStateArchivist = /* @__PURE__ */ __name(async (context) => {
|
|
|
230
233
|
return assertEx2(singleton8, () => "StakeIntentStateArchivist is undefined");
|
|
231
234
|
}, 2e3, true);
|
|
232
235
|
});
|
|
233
|
-
}
|
|
236
|
+
}
|
|
237
|
+
__name(initStakeIntentStateArchivist, "initStakeIntentStateArchivist");
|
|
234
238
|
|
|
235
239
|
// src/buildTelemetryConfig.ts
|
|
236
240
|
function buildTelemetryConfig(config, serviceName, serviceVersion, defaultMetricsScrapePort = 9464) {
|
|
@@ -251,198 +255,400 @@ function buildTelemetryConfig(config, serviceName, serviceVersion, defaultMetric
|
|
|
251
255
|
}
|
|
252
256
|
__name(buildTelemetryConfig, "buildTelemetryConfig");
|
|
253
257
|
|
|
254
|
-
// src/
|
|
255
|
-
import {
|
|
256
|
-
import {
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
])
|
|
264
|
-
|
|
265
|
-
|
|
258
|
+
// src/config/actors/Api.ts
|
|
259
|
+
import { zodAsFactory, zodIsFactory, zodToFactory } from "@xylabs/zod";
|
|
260
|
+
import { BaseConfigContextZod, HostActorConfigZod } from "@xyo-network/xl1-sdk";
|
|
261
|
+
import { globalRegistry, z } from "zod";
|
|
262
|
+
var ApiConfigZod = HostActorConfigZod.extend(z.object({
|
|
263
|
+
initRewardsCache: z.union([
|
|
264
|
+
z.number(),
|
|
265
|
+
z.string(),
|
|
266
|
+
z.boolean()
|
|
267
|
+
]).transform((v) => v !== "0" && v !== "false" && v !== false && v != 0).default(true).register(globalRegistry, {
|
|
268
|
+
description: "Whether to initialize the rewards cache on startup",
|
|
269
|
+
title: "api.initRewardsCache",
|
|
270
|
+
type: "boolean"
|
|
271
|
+
})
|
|
272
|
+
}).shape);
|
|
273
|
+
var isApiConfig = zodIsFactory(ApiConfigZod);
|
|
274
|
+
var asApiConfig = zodAsFactory(ApiConfigZod, "asApiConfig");
|
|
275
|
+
var toApiConfig = zodToFactory(ApiConfigZod, "toApiConfig");
|
|
276
|
+
var ApiConfigContext = BaseConfigContextZod.extend({
|
|
277
|
+
config: ApiConfigZod
|
|
278
|
+
});
|
|
279
|
+
var isApiConfigContext = zodIsFactory(ApiConfigContext);
|
|
280
|
+
var asApiConfigContext = zodAsFactory(ApiConfigContext, "asApiConfigContext");
|
|
281
|
+
var toApiConfigContext = zodToFactory(ApiConfigContext, "toApiConfigContext");
|
|
266
282
|
|
|
267
|
-
// src/
|
|
268
|
-
import {
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
var
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
283
|
+
// src/config/actors/Bridge.ts
|
|
284
|
+
import { AddressZod, HexZod, toAddress, toHex } from "@xylabs/sdk-js";
|
|
285
|
+
import { zodAsFactory as zodAsFactory2, zodIsFactory as zodIsFactory2, zodToFactory as zodToFactory2 } from "@xylabs/zod";
|
|
286
|
+
import { AttoXL1ConvertFactor, BaseConfigContextZod as BaseConfigContextZod2, HostActorConfigZod as HostActorConfigZod2, XL1 } from "@xyo-network/xl1-sdk";
|
|
287
|
+
import { globalRegistry as globalRegistry2, z as z2 } from "zod";
|
|
288
|
+
var DEFAULT_FIXED_FEE = toHex(XL1(1n) * AttoXL1ConvertFactor.xl1);
|
|
289
|
+
var DEFAULT_HARDHAT_BRIDGE_CONTRACT = toAddress("2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6");
|
|
290
|
+
var DEFAULT_HARDHAT_CHAIN_ID = toHex("7A69");
|
|
291
|
+
var DEFAULT_HARDHAT_REMOTE_CHAIN_WALLET_PRIVATE_KEY = toHex("0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80");
|
|
292
|
+
var DEFAULT_HARDHAT_TOKEN_CONTRACT = toAddress("5FbDB2315678afecb367f032d93F642f64180aa3");
|
|
293
|
+
var DEFAULT_MAX_BRIDGE_AMOUNT = toHex(XL1(100000n) * AttoXL1ConvertFactor.xl1);
|
|
294
|
+
var DEFAULT_MIN_BRIDGE_AMOUNT = toHex(XL1(10n) * AttoXL1ConvertFactor.xl1);
|
|
295
|
+
var BasisPointsZod = z2.coerce.number().int().nonnegative().max(1e4);
|
|
296
|
+
var BridgeConfigZod = HostActorConfigZod2.extend({
|
|
297
|
+
escrowAddress: AddressZod.optional().register(globalRegistry2, {
|
|
298
|
+
description: "Address to which bridge escrow will be sent",
|
|
299
|
+
title: "bridge.escrowAddress",
|
|
300
|
+
type: "string"
|
|
301
|
+
}),
|
|
302
|
+
feesAddress: AddressZod.optional().register(globalRegistry2, {
|
|
303
|
+
description: "Address to which bridge fees will be sent",
|
|
304
|
+
title: "bridge.feesAddress",
|
|
305
|
+
type: "string"
|
|
306
|
+
}),
|
|
307
|
+
feeFixed: HexZod.default(DEFAULT_FIXED_FEE).register(globalRegistry2, {
|
|
308
|
+
default: DEFAULT_FIXED_FEE,
|
|
309
|
+
description: "Fixed fee (in AttoXL1) applied to bridge transfers",
|
|
310
|
+
title: "bridge.feeFixed",
|
|
311
|
+
type: "bigint"
|
|
312
|
+
}),
|
|
313
|
+
feeRateBasisPoints: BasisPointsZod.default(500).register(globalRegistry2, {
|
|
314
|
+
default: 500,
|
|
315
|
+
description: "Variable rate fee (in basis points where 1 bps = 0.01%) applied to bridge transfers",
|
|
316
|
+
title: "bridge.feeRateBasisPoints",
|
|
317
|
+
type: "number"
|
|
318
|
+
}),
|
|
319
|
+
maxBridgeAmount: HexZod.default(DEFAULT_MAX_BRIDGE_AMOUNT).register(globalRegistry2, {
|
|
320
|
+
default: DEFAULT_MAX_BRIDGE_AMOUNT,
|
|
321
|
+
description: "Maximum amount allowed for a bridge transfer",
|
|
322
|
+
title: "bridge.maxBridgeAmount",
|
|
323
|
+
type: "string"
|
|
324
|
+
}),
|
|
325
|
+
minBridgeAmount: HexZod.default(DEFAULT_MIN_BRIDGE_AMOUNT).register(globalRegistry2, {
|
|
326
|
+
default: DEFAULT_MIN_BRIDGE_AMOUNT,
|
|
327
|
+
description: "Minimum amount required for a bridge transfer",
|
|
328
|
+
title: "bridge.minBridgeAmount",
|
|
329
|
+
type: "string"
|
|
330
|
+
}),
|
|
331
|
+
redisHost: z2.string().default("localhost").register(globalRegistry2, {
|
|
332
|
+
default: "localhost",
|
|
333
|
+
description: "Host for the Bridge Redis instance",
|
|
334
|
+
title: "bridge.redisHost",
|
|
335
|
+
type: "string"
|
|
336
|
+
}),
|
|
337
|
+
redisPort: z2.coerce.number().int().positive().default(6379).register(globalRegistry2, {
|
|
338
|
+
default: 6379,
|
|
339
|
+
description: "Port for the Bridge Redis instance",
|
|
340
|
+
title: "bridge.redisPort",
|
|
341
|
+
type: "number"
|
|
342
|
+
}),
|
|
343
|
+
remoteBridgeContractAddress: AddressZod.default(DEFAULT_HARDHAT_BRIDGE_CONTRACT).register(globalRegistry2, {
|
|
344
|
+
default: DEFAULT_HARDHAT_BRIDGE_CONTRACT,
|
|
345
|
+
description: "Hex representation of remote token address used for bridging",
|
|
346
|
+
title: "bridge.remoteBridgeContractAddress",
|
|
347
|
+
type: "string"
|
|
348
|
+
}),
|
|
349
|
+
remoteChainId: HexZod.default(DEFAULT_HARDHAT_CHAIN_ID).register(globalRegistry2, {
|
|
350
|
+
default: DEFAULT_HARDHAT_CHAIN_ID,
|
|
351
|
+
description: "Remote chain ID",
|
|
352
|
+
title: "bridge.remoteChainId",
|
|
353
|
+
type: "string"
|
|
354
|
+
}),
|
|
355
|
+
remoteTokenAddress: HexZod.default(DEFAULT_HARDHAT_TOKEN_CONTRACT).register(globalRegistry2, {
|
|
356
|
+
default: DEFAULT_HARDHAT_TOKEN_CONTRACT,
|
|
357
|
+
description: "Hex representation of remote token address used for bridging",
|
|
358
|
+
title: "bridge.remoteTokenAddress",
|
|
359
|
+
type: "string"
|
|
360
|
+
}),
|
|
361
|
+
remoteChainWalletPrivateKey: HexZod.default(DEFAULT_HARDHAT_REMOTE_CHAIN_WALLET_PRIVATE_KEY).register(globalRegistry2, {
|
|
362
|
+
description: "Private key for the wallet to use for the remote chain wallet",
|
|
363
|
+
title: "bridge.remoteChainWalletPrivateKey",
|
|
364
|
+
type: "string"
|
|
365
|
+
}),
|
|
366
|
+
xl1ChainId: HexZod.optional().register(globalRegistry2, {
|
|
367
|
+
description: "XL1 chain id used for bridging",
|
|
368
|
+
title: "bridge.xl1ChainId",
|
|
369
|
+
type: "string"
|
|
370
|
+
}),
|
|
371
|
+
xl1TokenAddress: HexZod.optional().register(globalRegistry2, {
|
|
372
|
+
description: "XL1 token address used for bridging",
|
|
373
|
+
title: "bridge.xl1TokenAddress",
|
|
374
|
+
type: "string"
|
|
375
|
+
})
|
|
376
|
+
});
|
|
377
|
+
var BridgeSettingsZod = BridgeConfigZod.pick({
|
|
378
|
+
feeFixed: true,
|
|
379
|
+
feeRateBasisPoints: true,
|
|
380
|
+
feesAddress: true,
|
|
381
|
+
escrowAddress: true,
|
|
382
|
+
maxBridgeAmount: true,
|
|
383
|
+
minBridgeAmount: true,
|
|
384
|
+
remoteChainId: true,
|
|
385
|
+
remoteTokenAddress: true,
|
|
386
|
+
xl1TokenAddress: true,
|
|
387
|
+
xl1ChainId: true
|
|
388
|
+
}).required();
|
|
389
|
+
var isBridgeConfig = zodIsFactory2(BridgeConfigZod);
|
|
390
|
+
var asBridgeConfig = zodAsFactory2(BridgeConfigZod, "asBridgeConfig");
|
|
391
|
+
var toBridgeConfig = zodToFactory2(BridgeConfigZod, "toBridgeConfig");
|
|
392
|
+
var BridgeConfigContext = BaseConfigContextZod2.extend({
|
|
393
|
+
config: BridgeConfigZod
|
|
394
|
+
});
|
|
395
|
+
var isBridgeConfigContext = zodIsFactory2(BridgeConfigContext);
|
|
396
|
+
var asBridgeConfigContext = zodAsFactory2(BridgeConfigContext, "asBridgeConfigContext");
|
|
397
|
+
var toBridgeConfigContext = zodToFactory2(BridgeConfigContext, "toBridgeConfigContext");
|
|
285
398
|
|
|
286
|
-
// src/
|
|
287
|
-
import {
|
|
399
|
+
// src/config/actors/Mempool.ts
|
|
400
|
+
import { zodAsFactory as zodAsFactory3, zodIsFactory as zodIsFactory3, zodToFactory as zodToFactory3 } from "@xylabs/zod";
|
|
401
|
+
import { BaseConfigContextZod as BaseConfigContextZod3, HostActorConfigZod as HostActorConfigZod3 } from "@xyo-network/xl1-sdk";
|
|
402
|
+
import { globalRegistry as globalRegistry3, z as z3 } from "zod";
|
|
403
|
+
var MempoolConfigZod = HostActorConfigZod3.extend({
|
|
404
|
+
enabled: z3.union([
|
|
405
|
+
z3.string(),
|
|
406
|
+
z3.boolean()
|
|
407
|
+
]).default("false").transform((val, ctx) => {
|
|
408
|
+
if (typeof val === "boolean") return val;
|
|
409
|
+
const normalized = val.toLowerCase().trim();
|
|
410
|
+
if ([
|
|
411
|
+
"true",
|
|
412
|
+
"1",
|
|
413
|
+
"yes",
|
|
414
|
+
"on"
|
|
415
|
+
].includes(normalized)) return true;
|
|
416
|
+
if ([
|
|
417
|
+
"false",
|
|
418
|
+
"0",
|
|
419
|
+
"no",
|
|
420
|
+
"off"
|
|
421
|
+
].includes(normalized)) return false;
|
|
422
|
+
ctx.addIssue({
|
|
423
|
+
code: "invalid_type",
|
|
424
|
+
expected: "boolean",
|
|
425
|
+
message: `Invalid boolean value: "${val}". Use true/false, 1/0, yes/no.`
|
|
426
|
+
});
|
|
427
|
+
return z3.NEVER;
|
|
428
|
+
}).register(globalRegistry3, {
|
|
429
|
+
default: "false",
|
|
430
|
+
description: "Enable the Mempool",
|
|
431
|
+
title: "mempool.enabled",
|
|
432
|
+
type: "boolean"
|
|
433
|
+
})
|
|
434
|
+
});
|
|
435
|
+
var isMempoolConfig = zodIsFactory3(MempoolConfigZod);
|
|
436
|
+
var asMempoolConfig = zodAsFactory3(MempoolConfigZod, "asMempoolConfig");
|
|
437
|
+
var toMempoolConfig = zodToFactory3(MempoolConfigZod, "toMempoolConfig");
|
|
438
|
+
var MempoolConfigContext = BaseConfigContextZod3.extend({
|
|
439
|
+
config: MempoolConfigZod
|
|
440
|
+
});
|
|
441
|
+
var isMempoolConfigContext = zodIsFactory3(MempoolConfigContext);
|
|
442
|
+
var asMempoolConfigContext = zodAsFactory3(MempoolConfigContext, "asMempoolConfigContext");
|
|
443
|
+
var toMempoolConfigContext = zodToFactory3(MempoolConfigContext, "toMempoolConfigContext");
|
|
288
444
|
|
|
289
|
-
// src/
|
|
290
|
-
import {
|
|
291
|
-
import {
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
445
|
+
// src/config/actors/Producer.ts
|
|
446
|
+
import { AddressZod as AddressZod2, asAddress } from "@xylabs/sdk-js";
|
|
447
|
+
import { zodAsFactory as zodAsFactory4, zodIsFactory as zodIsFactory4, zodToFactory as zodToFactory4 } from "@xylabs/zod";
|
|
448
|
+
import { ActorConfigZod, BaseConfigContextZod as BaseConfigContextZod4 } from "@xyo-network/xl1-sdk";
|
|
449
|
+
import { globalRegistry as globalRegistry4, z as z4 } from "zod";
|
|
450
|
+
var ProducerConfigZod = ActorConfigZod.extend(z4.object({
|
|
451
|
+
allowlist: z4.preprocess((val) => {
|
|
452
|
+
if (typeof val === "string") {
|
|
453
|
+
return val.split(",").map((s) => asAddress(s.trim()));
|
|
454
|
+
}
|
|
455
|
+
return val;
|
|
456
|
+
}, z4.array(AddressZod2).optional().register(globalRegistry4, {
|
|
457
|
+
description: "List of allowed producer addresses, if undefined anyone can participate",
|
|
458
|
+
title: "allowlist",
|
|
459
|
+
type: "array"
|
|
460
|
+
})),
|
|
461
|
+
disableIntentRedeclaration: z4.boolean().optional().register(globalRegistry4, {
|
|
462
|
+
description: "Should the producer skip redeclaring their intent to continue producing blocks",
|
|
463
|
+
title: "producer.disableIntentRedeclaration",
|
|
464
|
+
type: "boolean"
|
|
465
|
+
}),
|
|
466
|
+
heartbeatInterval: z4.coerce.number().default(36e5).register(globalRegistry4, {
|
|
467
|
+
description: "The number of milliseconds between heartbeats if no blocks are produced",
|
|
468
|
+
title: "producer.heartbeatInterval",
|
|
469
|
+
type: "number"
|
|
470
|
+
}),
|
|
471
|
+
// TODO: BigInt schema
|
|
472
|
+
minStake: z4.coerce.number().default(1).register(globalRegistry4, {
|
|
473
|
+
description: "Minimum stake required to be a Producer",
|
|
474
|
+
title: "producer.minStake",
|
|
475
|
+
type: "number"
|
|
476
|
+
}),
|
|
477
|
+
// TODO: Address schema
|
|
478
|
+
rewardAddress: z4.string().optional().register(globalRegistry4, {
|
|
479
|
+
description: "Address to receive block rewards",
|
|
480
|
+
title: "producer.rewardAddress",
|
|
481
|
+
type: "string"
|
|
482
|
+
})
|
|
483
|
+
}).shape);
|
|
484
|
+
var isProducerConfig = zodIsFactory4(ProducerConfigZod);
|
|
485
|
+
var asProducerConfig = zodAsFactory4(ProducerConfigZod, "asProducerConfig");
|
|
486
|
+
var toProducerConfig = zodToFactory4(ProducerConfigZod, "toProducerConfig");
|
|
487
|
+
var ProducerConfigContext = BaseConfigContextZod4.extend({
|
|
488
|
+
config: ProducerConfigZod
|
|
489
|
+
});
|
|
490
|
+
var isProducerConfigContext = zodIsFactory4(ProducerConfigContext);
|
|
491
|
+
var asProducerConfigContext = zodAsFactory4(ProducerConfigContext, "asProducerConfigContext");
|
|
492
|
+
var toProducerConfigContext = zodToFactory4(ProducerConfigContext, "toProducerConfigContext");
|
|
311
493
|
|
|
312
|
-
// src/
|
|
313
|
-
import {
|
|
314
|
-
import {
|
|
315
|
-
var
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
var
|
|
320
|
-
|
|
321
|
-
}
|
|
322
|
-
var
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
jsonRpcUrl,
|
|
326
|
-
getChainId(config)
|
|
327
|
-
];
|
|
328
|
-
}, "getJsonRpcProviderConfig");
|
|
494
|
+
// src/config/actors/RewardRedemption.ts
|
|
495
|
+
import { zodAsFactory as zodAsFactory5, zodIsFactory as zodIsFactory5, zodToFactory as zodToFactory5 } from "@xylabs/zod";
|
|
496
|
+
import { BaseConfigContextZod as BaseConfigContextZod5, HostActorConfigZod as HostActorConfigZod4 } from "@xyo-network/xl1-sdk";
|
|
497
|
+
var RewardRedemptionConfigZod = HostActorConfigZod4.extend({});
|
|
498
|
+
var isRewardRedemptionConfig = zodIsFactory5(RewardRedemptionConfigZod);
|
|
499
|
+
var asRewardRedemptionConfig = zodAsFactory5(RewardRedemptionConfigZod, "asRewardRedemptionConfig");
|
|
500
|
+
var toRewardRedemptionConfig = zodToFactory5(RewardRedemptionConfigZod, "toRewardRedemptionConfig");
|
|
501
|
+
var RewardRedemptionConfigContext = BaseConfigContextZod5.extend({
|
|
502
|
+
config: RewardRedemptionConfigZod
|
|
503
|
+
});
|
|
504
|
+
var isRewardRedemptionConfigContext = zodIsFactory5(RewardRedemptionConfigContext);
|
|
505
|
+
var asRewardRedemptionConfigContext = zodAsFactory5(RewardRedemptionConfigContext, "asRewardRedemptionConfigContext");
|
|
506
|
+
var toRewardRedemptionConfigContext = zodToFactory5(RewardRedemptionConfigContext, "toRewardRedemptionConfigContext");
|
|
329
507
|
|
|
330
|
-
// src/
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
} else if (canUseJsonRpcProvider(config)) {
|
|
337
|
-
provider = initJsonRpcProvider(config);
|
|
338
|
-
}
|
|
339
|
-
return assertEx6(await provider, () => "No provider available");
|
|
340
|
-
}, "initEvmProvider");
|
|
341
|
-
var canUseEvmProvider = /* @__PURE__ */ __name(({ config }) => {
|
|
342
|
-
return canUseInfuraProvider(config) || canUseJsonRpcProvider(config);
|
|
343
|
-
}, "canUseEvmProvider");
|
|
344
|
-
|
|
345
|
-
// src/health/initHealthEndpoints.ts
|
|
346
|
-
import http from "http";
|
|
347
|
-
import { isDefined as isDefined4 } from "@xylabs/sdk-js";
|
|
348
|
-
var sendStatus = /* @__PURE__ */ __name((res, status, errorCode) => {
|
|
349
|
-
const statusCode = status === "started" ? 200 : errorCode;
|
|
350
|
-
res.writeHead(statusCode, {
|
|
351
|
-
"Content-Type": "application/json"
|
|
352
|
-
});
|
|
353
|
-
res.end(JSON.stringify({
|
|
354
|
-
status
|
|
355
|
-
}));
|
|
356
|
-
}, "sendStatus");
|
|
357
|
-
var notFound = /* @__PURE__ */ __name((res) => {
|
|
358
|
-
res.writeHead(404, {
|
|
359
|
-
"Content-Type": "application/json"
|
|
508
|
+
// src/config/locators/actors/apiLocatorFromConfig.ts
|
|
509
|
+
import { ProviderFactoryLocator, SimpleXyoConnectionRunner, SimpleXyoGateway, SimpleXyoRunner } from "@xyo-network/xl1-sdk";
|
|
510
|
+
function apiLocatorFromConfig(context, parent) {
|
|
511
|
+
const locator = new ProviderFactoryLocator({
|
|
512
|
+
...context,
|
|
513
|
+
locator: parent
|
|
360
514
|
});
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
sendStatus(res, status, 503);
|
|
380
|
-
break;
|
|
381
|
-
}
|
|
382
|
-
default: {
|
|
383
|
-
notFound(res);
|
|
384
|
-
}
|
|
385
|
-
}
|
|
515
|
+
locator.registerMany([
|
|
516
|
+
SimpleXyoRunner.factory(SimpleXyoRunner.dependencies, {}),
|
|
517
|
+
SimpleXyoConnectionRunner.factory(SimpleXyoConnectionRunner.dependencies, {}),
|
|
518
|
+
SimpleXyoGateway.factory(SimpleXyoGateway.dependencies, {})
|
|
519
|
+
]);
|
|
520
|
+
locator.freeze();
|
|
521
|
+
return locator;
|
|
522
|
+
}
|
|
523
|
+
__name(apiLocatorFromConfig, "apiLocatorFromConfig");
|
|
524
|
+
|
|
525
|
+
// src/config/locators/actors/bridgeLocatorFromConfig.ts
|
|
526
|
+
import { isDefined, isString } from "@xylabs/sdk-js";
|
|
527
|
+
import { HDWallet } from "@xyo-network/wallet";
|
|
528
|
+
import { AccountBalanceViewerRpcSchemas, ADDRESS_INDEX, BlockViewerRpcSchemas, FinalizationViewerRpcSchemas, generateXyoBaseWalletFromPhrase, HttpRpcTransport, JsonRpcAccountBalanceViewer, JsonRpcBlockViewer, JsonRpcFinalizationViewer, JsonRpcMempoolRunner, JsonRpcMempoolViewer, MempoolRunnerRpcSchemas, MempoolViewerRpcSchemas, ProviderFactoryLocator as ProviderFactoryLocator2, SimpleXyoConnectionRunner as SimpleXyoConnectionRunner2, SimpleXyoGatewayRunner, SimpleXyoRunner as SimpleXyoRunner2, SimpleXyoSigner } from "@xyo-network/xl1-sdk";
|
|
529
|
+
async function bridgeLocatorFromConfig(context, parent) {
|
|
530
|
+
const locator = new ProviderFactoryLocator2({
|
|
531
|
+
...context,
|
|
532
|
+
locator: parent
|
|
386
533
|
});
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
534
|
+
const { config } = context;
|
|
535
|
+
const { mnemonic } = config;
|
|
536
|
+
const walletPhrase = isDefined(mnemonic) ? mnemonic : HDWallet.generateMnemonic();
|
|
537
|
+
const wallet = await generateXyoBaseWalletFromPhrase(walletPhrase);
|
|
538
|
+
const signerAccount = await wallet.derivePath(ADDRESS_INDEX.XYO);
|
|
539
|
+
const remoteUrl = config.remote.rpc?.url;
|
|
540
|
+
if (isString(remoteUrl)) {
|
|
541
|
+
const transportFactory = /* @__PURE__ */ __name((schemas) => new HttpRpcTransport(remoteUrl, schemas), "transportFactory");
|
|
542
|
+
locator.registerMany([
|
|
543
|
+
JsonRpcMempoolViewer.factory(JsonRpcMempoolViewer.dependencies, {
|
|
544
|
+
transport: await transportFactory(MempoolViewerRpcSchemas)
|
|
545
|
+
}),
|
|
546
|
+
JsonRpcMempoolRunner.factory(JsonRpcMempoolRunner.dependencies, {
|
|
547
|
+
transport: await transportFactory(MempoolRunnerRpcSchemas)
|
|
548
|
+
}),
|
|
549
|
+
JsonRpcAccountBalanceViewer.factory(JsonRpcAccountBalanceViewer.dependencies, {
|
|
550
|
+
transport: await transportFactory(AccountBalanceViewerRpcSchemas)
|
|
551
|
+
}),
|
|
552
|
+
JsonRpcFinalizationViewer.factory(JsonRpcFinalizationViewer.dependencies, {
|
|
553
|
+
transport: await transportFactory(FinalizationViewerRpcSchemas)
|
|
554
|
+
}),
|
|
555
|
+
JsonRpcBlockViewer.factory(JsonRpcBlockViewer.dependencies, {
|
|
556
|
+
transport: await transportFactory(BlockViewerRpcSchemas)
|
|
557
|
+
})
|
|
558
|
+
]);
|
|
559
|
+
}
|
|
560
|
+
locator.registerMany([
|
|
561
|
+
SimpleXyoSigner.factory(SimpleXyoSigner.dependencies, {
|
|
562
|
+
account: signerAccount
|
|
563
|
+
}),
|
|
564
|
+
SimpleXyoRunner2.factory(SimpleXyoRunner2.dependencies, {}),
|
|
565
|
+
SimpleXyoConnectionRunner2.factory(SimpleXyoConnectionRunner2.dependencies, {}),
|
|
566
|
+
SimpleXyoGatewayRunner.factory(SimpleXyoGatewayRunner.dependencies, {})
|
|
567
|
+
]);
|
|
568
|
+
locator.freeze();
|
|
569
|
+
return locator;
|
|
570
|
+
}
|
|
571
|
+
__name(bridgeLocatorFromConfig, "bridgeLocatorFromConfig");
|
|
572
|
+
|
|
573
|
+
// src/config/locators/actors/mempoolLocatorFromConfig.ts
|
|
574
|
+
import { ProviderFactoryLocator as ProviderFactoryLocator3, SimpleBlockValidationViewer } from "@xyo-network/xl1-sdk";
|
|
575
|
+
function mempoolLocatorFromConfig(context, parent) {
|
|
576
|
+
const locator = new ProviderFactoryLocator3({
|
|
577
|
+
...context,
|
|
578
|
+
locator: parent
|
|
392
579
|
});
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
580
|
+
locator.registerMany([
|
|
581
|
+
SimpleBlockValidationViewer.factory(SimpleBlockValidationViewer.dependencies, {})
|
|
582
|
+
]);
|
|
583
|
+
locator.freeze();
|
|
584
|
+
return locator;
|
|
585
|
+
}
|
|
586
|
+
__name(mempoolLocatorFromConfig, "mempoolLocatorFromConfig");
|
|
400
587
|
|
|
401
|
-
// src/
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
}
|
|
406
|
-
services;
|
|
407
|
-
constructor(services) {
|
|
408
|
-
this.services = services;
|
|
409
|
-
}
|
|
410
|
-
async start() {
|
|
411
|
-
await Promise.resolve();
|
|
412
|
-
console.log("Host is starting...");
|
|
413
|
-
}
|
|
414
|
-
async stop() {
|
|
415
|
-
await Promise.resolve();
|
|
416
|
-
console.log("Host is stopping...");
|
|
417
|
-
}
|
|
418
|
-
};
|
|
588
|
+
// src/config/locators/actors/producerLocatorFromConfig.ts
|
|
589
|
+
import { asAddress as asAddress2, isString as isString3 } from "@xylabs/sdk-js";
|
|
590
|
+
import { SimpleBlockRunner } from "@xyo-network/chain-services";
|
|
591
|
+
import { AccountBalanceViewerRpcSchemas as AccountBalanceViewerRpcSchemas2, BlockViewerRpcSchemas as BlockViewerRpcSchemas2, FinalizationViewerRpcSchemas as FinalizationViewerRpcSchemas2, HttpRpcTransport as HttpRpcTransport2, JsonRpcAccountBalanceViewer as JsonRpcAccountBalanceViewer2, JsonRpcBlockViewer as JsonRpcBlockViewer2, JsonRpcFinalizationViewer as JsonRpcFinalizationViewer2, JsonRpcMempoolRunner as JsonRpcMempoolRunner2, JsonRpcMempoolViewer as JsonRpcMempoolViewer2, MempoolRunnerRpcSchemas as MempoolRunnerRpcSchemas2, MempoolViewerRpcSchemas as MempoolViewerRpcSchemas2, ProviderFactoryLocator as ProviderFactoryLocator4, SimpleBlockRewardViewer } from "@xyo-network/xl1-sdk";
|
|
419
592
|
|
|
420
|
-
// src/
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
593
|
+
// src/init/initActorAccount.ts
|
|
594
|
+
import { isDefined as isDefined2, isUndefined } from "@xylabs/sdk-js";
|
|
595
|
+
import { HDWallet as HDWallet2 } from "@xyo-network/wallet";
|
|
596
|
+
import { ADDRESS_INDEX as ADDRESS_INDEX2, generateXyoBaseWalletFromPhrase as generateXyoBaseWalletFromPhrase2 } from "@xyo-network/xl1-sdk";
|
|
597
|
+
var actorAccountSingletons = {};
|
|
598
|
+
async function initActorAccount({ config, logger }) {
|
|
599
|
+
const actorName = config.name;
|
|
600
|
+
if (isDefined2(actorAccountSingletons[actorName])) return actorAccountSingletons[actorName];
|
|
601
|
+
let walletPhrase = config.mnemonic;
|
|
602
|
+
if (isUndefined(walletPhrase)) {
|
|
603
|
+
logger?.warn(`[${actorName}}] No wallet mnemonic specified!`);
|
|
604
|
+
const randomMnemonic = HDWallet2.generateMnemonic();
|
|
605
|
+
logger?.warn(`[${actorName}}] Using randomly generated mnemonic:
|
|
606
|
+
|
|
607
|
+
${randomMnemonic}
|
|
608
|
+
|
|
609
|
+
`);
|
|
610
|
+
walletPhrase = randomMnemonic;
|
|
431
611
|
}
|
|
432
|
-
|
|
612
|
+
const wallet = await generateXyoBaseWalletFromPhrase2(walletPhrase);
|
|
613
|
+
const account = await wallet.derivePath(ADDRESS_INDEX2.XYO);
|
|
614
|
+
actorAccountSingletons[actorName] = account;
|
|
615
|
+
return actorAccountSingletons[actorName];
|
|
616
|
+
}
|
|
617
|
+
__name(initActorAccount, "initActorAccount");
|
|
433
618
|
|
|
434
|
-
// src/
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
};
|
|
619
|
+
// src/init/initActorSeedPhrase.ts
|
|
620
|
+
import { assertEx as assertEx3, isString as isString2 } from "@xylabs/sdk-js";
|
|
621
|
+
import { HDWallet as HDWallet3 } from "@xyo-network/wallet";
|
|
622
|
+
async function initActorSeedPhrase(context, bios) {
|
|
623
|
+
const { logger, config } = context;
|
|
624
|
+
const walletKind = config.name;
|
|
625
|
+
const storedSeedPhrase = await bios.seedPhraseStore.get(walletKind);
|
|
626
|
+
logger?.debug(`[API] Stored mnemonic: ${storedSeedPhrase}`);
|
|
627
|
+
const { mnemonic } = config;
|
|
628
|
+
if (isString2(storedSeedPhrase) && isString2(mnemonic)) {
|
|
629
|
+
logger?.warn("[API] Stored mnemonic does not match supplied. Updating stored mnemonic to supplied.");
|
|
630
|
+
await bios.seedPhraseStore.set(walletKind, mnemonic);
|
|
631
|
+
} else {
|
|
632
|
+
let seedPhrase;
|
|
633
|
+
if (isString2(mnemonic)) {
|
|
634
|
+
seedPhrase = mnemonic;
|
|
635
|
+
} else {
|
|
636
|
+
seedPhrase = HDWallet3.generateMnemonic();
|
|
637
|
+
logger?.log("[API] No mnemonic provided, using random mnemonic. This is not recommended for production use.");
|
|
638
|
+
logger?.log(`[API] Mnemonic: ${seedPhrase}`);
|
|
639
|
+
}
|
|
640
|
+
await bios.seedPhraseStore.set(walletKind, seedPhrase);
|
|
641
|
+
}
|
|
642
|
+
return assertEx3(await bios.seedPhraseStore.get(walletKind), () => "Unable to acquire mnemonic from bios");
|
|
643
|
+
}
|
|
644
|
+
__name(initActorSeedPhrase, "initActorSeedPhrase");
|
|
439
645
|
|
|
440
646
|
// src/init/initBalanceSummaryMap.ts
|
|
441
647
|
import { BaseMongoSdk } from "@xylabs/mongo";
|
|
442
|
-
import { assertEx as
|
|
648
|
+
import { assertEx as assertEx4 } from "@xylabs/sdk-js";
|
|
443
649
|
import { MongoMap } from "@xyo-network/chain-protocol";
|
|
444
650
|
import { hasMongoConfig, MemoryMap } from "@xyo-network/xl1-sdk";
|
|
445
|
-
async function initBalanceSummaryMap({
|
|
651
|
+
async function initBalanceSummaryMap({ logger, config }) {
|
|
446
652
|
const mongoConfig = config.storage?.mongo;
|
|
447
653
|
if (hasMongoConfig(mongoConfig)) {
|
|
448
654
|
const { connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName } = mongoConfig;
|
|
@@ -464,7 +670,7 @@ async function initBalanceSummaryMap({ config, logger }) {
|
|
|
464
670
|
maxEntries: 5e3
|
|
465
671
|
}
|
|
466
672
|
});
|
|
467
|
-
|
|
673
|
+
assertEx4(await result.start(), () => "Failed to start transfer summary map");
|
|
468
674
|
return result;
|
|
469
675
|
} else {
|
|
470
676
|
logger?.warn("[API] Mongo configuration not found. Using MemoryMap for BalanceSummaryMap.");
|
|
@@ -474,18 +680,18 @@ async function initBalanceSummaryMap({ config, logger }) {
|
|
|
474
680
|
__name(initBalanceSummaryMap, "initBalanceSummaryMap");
|
|
475
681
|
|
|
476
682
|
// src/init/initBridgedModule.ts
|
|
477
|
-
import { assertEx as
|
|
683
|
+
import { assertEx as assertEx5 } from "@xylabs/sdk-js";
|
|
478
684
|
import { asAttachableArchivistInstance } from "@xyo-network/archivist-model";
|
|
479
685
|
import { asAttachableModuleInstance } from "@xyo-network/module-model";
|
|
480
686
|
import { Mutex as Mutex9 } from "async-mutex";
|
|
481
687
|
var initMutex = new Mutex9();
|
|
482
688
|
var bridgedModuleDictionary = {};
|
|
483
|
-
|
|
689
|
+
async function initBridgedModule({ bridge, moduleName }) {
|
|
484
690
|
return await initMutex.runExclusive(async () => {
|
|
485
691
|
const existing = bridgedModuleDictionary?.[bridge.address]?.[moduleName];
|
|
486
692
|
if (existing) return existing;
|
|
487
|
-
const mod =
|
|
488
|
-
const moduleInstance =
|
|
693
|
+
const mod = assertEx5(await bridge.resolve(moduleName), () => `Could not resolve ${moduleName}`);
|
|
694
|
+
const moduleInstance = assertEx5(asAttachableModuleInstance(mod), () => `Could not convert ${moduleName} to attachable module instance`);
|
|
489
695
|
let moduleMap = bridgedModuleDictionary[bridge.address];
|
|
490
696
|
if (moduleMap === void 0) {
|
|
491
697
|
moduleMap = {};
|
|
@@ -494,28 +700,110 @@ var initBridgedModule = /* @__PURE__ */ __name(async ({ bridge, moduleName }) =>
|
|
|
494
700
|
moduleMap[moduleName] = moduleInstance;
|
|
495
701
|
return moduleInstance;
|
|
496
702
|
});
|
|
497
|
-
}
|
|
498
|
-
|
|
499
|
-
|
|
703
|
+
}
|
|
704
|
+
__name(initBridgedModule, "initBridgedModule");
|
|
705
|
+
async function initBridgedArchivistModule({ bridge, moduleName }) {
|
|
706
|
+
return assertEx5(asAttachableArchivistInstance(await initBridgedModule({
|
|
500
707
|
bridge,
|
|
501
708
|
moduleName
|
|
502
709
|
})), () => `Could not convert ${moduleName} to attachable archivist instance`);
|
|
503
|
-
}
|
|
710
|
+
}
|
|
711
|
+
__name(initBridgedArchivistModule, "initBridgedArchivistModule");
|
|
504
712
|
|
|
505
713
|
// src/init/initEvmProvidersIfAvailable.ts
|
|
506
|
-
import { asEthAddress, assertEx as
|
|
714
|
+
import { asEthAddress, assertEx as assertEx10 } from "@xylabs/sdk-js";
|
|
507
715
|
import { EvmChainContractViewer, EvmStakeEventsViewer, EvmStakeTotalsViewer, EvmStakeViewer } from "@xyo-network/chain-ethereum";
|
|
508
716
|
import { SimpleChainContractViewer, SimpleStakeEventsViewer, SimpleStakeTotalsViewer, SimpleStakeViewer, SimpleTimeSyncViewer, XYO_ZERO_ADDRESS } from "@xyo-network/xl1-sdk";
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
717
|
+
|
|
718
|
+
// src/evm/initChainId.ts
|
|
719
|
+
import { assertEx as assertEx6, hexFrom, isDefined as isDefined3, isHex } from "@xylabs/sdk-js";
|
|
720
|
+
var canUseChainId = /* @__PURE__ */ __name(({ config }) => {
|
|
721
|
+
return isDefined3(config.evm.chainId);
|
|
722
|
+
}, "canUseChainId");
|
|
723
|
+
var getChainId = /* @__PURE__ */ __name(({ config }) => {
|
|
724
|
+
const chainId = assertEx6(config.evm.chainId, () => "Missing config.evm.chainId");
|
|
725
|
+
if (isHex(chainId, {
|
|
726
|
+
prefix: true
|
|
513
727
|
})) {
|
|
514
|
-
const
|
|
515
|
-
const
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
728
|
+
const hex = hexFrom(chainId);
|
|
729
|
+
const parsed = Number.parseInt(hex, 16);
|
|
730
|
+
return parsed;
|
|
731
|
+
} else {
|
|
732
|
+
const parsed = Number.parseInt(chainId, 10);
|
|
733
|
+
return parsed;
|
|
734
|
+
}
|
|
735
|
+
}, "getChainId");
|
|
736
|
+
|
|
737
|
+
// src/evm/initEvmProvider.ts
|
|
738
|
+
import { assertEx as assertEx9 } from "@xylabs/sdk-js";
|
|
739
|
+
|
|
740
|
+
// src/evm/initInfuraProvider.ts
|
|
741
|
+
import { assertEx as assertEx7, isDefined as isDefined4 } from "@xylabs/sdk-js";
|
|
742
|
+
import { InfuraProvider } from "ethers/providers";
|
|
743
|
+
var instance;
|
|
744
|
+
var initInfuraProvider = /* @__PURE__ */ __name((context) => {
|
|
745
|
+
if (instance) return instance;
|
|
746
|
+
const providerConfig = getInfuraProviderConfig(context);
|
|
747
|
+
instance = Promise.resolve(new InfuraProvider(providerConfig[0], providerConfig[1]));
|
|
748
|
+
return instance;
|
|
749
|
+
}, "initInfuraProvider");
|
|
750
|
+
var canUseInfuraProvider = /* @__PURE__ */ __name((context) => {
|
|
751
|
+
const { config } = context;
|
|
752
|
+
return canUseChainId(context) && isDefined4(config.evm?.infura?.projectId) && isDefined4(config.evm?.infura?.projectSecret);
|
|
753
|
+
}, "canUseInfuraProvider");
|
|
754
|
+
var getInfuraProviderConfig = /* @__PURE__ */ __name((context) => {
|
|
755
|
+
const { config } = context;
|
|
756
|
+
const projectId = assertEx7(config.evm?.infura?.projectId, () => "Missing config.evm.infura.projectId");
|
|
757
|
+
const projectSecret = assertEx7(config.evm?.infura?.projectSecret, () => "Missing config.evm.infura.projectSecret");
|
|
758
|
+
return [
|
|
759
|
+
getChainId(context),
|
|
760
|
+
projectId,
|
|
761
|
+
projectSecret
|
|
762
|
+
];
|
|
763
|
+
}, "getInfuraProviderConfig");
|
|
764
|
+
|
|
765
|
+
// src/evm/initJsonRpcProvider.ts
|
|
766
|
+
import { assertEx as assertEx8, isDefined as isDefined5 } from "@xylabs/sdk-js";
|
|
767
|
+
import { JsonRpcProvider } from "ethers/providers";
|
|
768
|
+
var initJsonRpcProvider = /* @__PURE__ */ __name((context) => {
|
|
769
|
+
const providerConfig = getJsonRpcProviderConfig(context);
|
|
770
|
+
return Promise.resolve(new JsonRpcProvider(...providerConfig));
|
|
771
|
+
}, "initJsonRpcProvider");
|
|
772
|
+
var canUseJsonRpcProvider = /* @__PURE__ */ __name((context) => {
|
|
773
|
+
const { config } = context;
|
|
774
|
+
return canUseChainId(context) && isDefined5(config.evm.jsonRpc?.url);
|
|
775
|
+
}, "canUseJsonRpcProvider");
|
|
776
|
+
var getJsonRpcProviderConfig = /* @__PURE__ */ __name((context) => {
|
|
777
|
+
const { config } = context;
|
|
778
|
+
const jsonRpcUrl = assertEx8(config.evm.jsonRpc?.url, () => "Missing config.evm.jsonRpc.url");
|
|
779
|
+
return [
|
|
780
|
+
jsonRpcUrl,
|
|
781
|
+
getChainId(context)
|
|
782
|
+
];
|
|
783
|
+
}, "getJsonRpcProviderConfig");
|
|
784
|
+
|
|
785
|
+
// src/evm/initEvmProvider.ts
|
|
786
|
+
var provider;
|
|
787
|
+
var initEvmProvider = /* @__PURE__ */ __name(async (context) => {
|
|
788
|
+
if (provider) return provider;
|
|
789
|
+
if (canUseInfuraProvider(context)) {
|
|
790
|
+
provider = initInfuraProvider(context);
|
|
791
|
+
} else if (canUseJsonRpcProvider(context)) {
|
|
792
|
+
provider = initJsonRpcProvider(context);
|
|
793
|
+
}
|
|
794
|
+
return assertEx9(await provider, () => "No provider available");
|
|
795
|
+
}, "initEvmProvider");
|
|
796
|
+
var canUseEvmProvider = /* @__PURE__ */ __name((context) => {
|
|
797
|
+
return canUseInfuraProvider(context) || canUseJsonRpcProvider(context);
|
|
798
|
+
}, "canUseEvmProvider");
|
|
799
|
+
|
|
800
|
+
// src/init/initEvmProvidersIfAvailable.ts
|
|
801
|
+
async function initEvmProvidersIfAvailable(locator) {
|
|
802
|
+
const context = locator.context;
|
|
803
|
+
const { logger, config } = context;
|
|
804
|
+
if (canUseEvmProvider(context)) {
|
|
805
|
+
const chainId = assertEx10(context.config.chain.id, () => "Missing config.chain.id (required for EVM providers)");
|
|
806
|
+
const provider2 = await initEvmProvider(context);
|
|
519
807
|
const address = asEthAddress(chainId, true);
|
|
520
808
|
locator.register(EvmStakeEventsViewer.factory(EvmStakeEventsViewer.dependencies, {
|
|
521
809
|
address,
|
|
@@ -539,7 +827,7 @@ async function initEvmProvidersIfAvailable(locator) {
|
|
|
539
827
|
} else {
|
|
540
828
|
logger?.warn("EVM provider not available - running with memory based contract/stake viewers");
|
|
541
829
|
const positions = [];
|
|
542
|
-
const chainId =
|
|
830
|
+
const chainId = assertEx10(config.chain.id, () => "Missing config.chain.id (required for non-EVM providers)");
|
|
543
831
|
locator.register(SimpleStakeEventsViewer.factory(SimpleStakeEventsViewer.dependencies, {
|
|
544
832
|
positions
|
|
545
833
|
}));
|
|
@@ -560,9 +848,9 @@ async function initEvmProvidersIfAvailable(locator) {
|
|
|
560
848
|
__name(initEvmProvidersIfAvailable, "initEvmProvidersIfAvailable");
|
|
561
849
|
|
|
562
850
|
// src/init/initFinalizationArchivistIfNeeded.ts
|
|
563
|
-
import { assertEx as
|
|
564
|
-
import { Account } from "@xyo-network/account";
|
|
851
|
+
import { assertEx as assertEx11 } from "@xylabs/sdk-js";
|
|
565
852
|
import { createBootstrapHead } from "@xyo-network/chain-sdk";
|
|
853
|
+
import { Account } from "@xyo-network/sdk-js";
|
|
566
854
|
import { asAttoXL1, findMostRecentBlock, flattenHydratedBlock } from "@xyo-network/xl1-sdk";
|
|
567
855
|
async function initFinalizationArchivistIfNeeded(archivist, config, account) {
|
|
568
856
|
const configuredChainId = config.chain.id;
|
|
@@ -577,8 +865,8 @@ async function initFinalizationArchivistIfNeeded(archivist, config, account) {
|
|
|
577
865
|
const payloads = chain.flatMap((block) => flattenHydratedBlock(block));
|
|
578
866
|
await archivist.insert(payloads);
|
|
579
867
|
}
|
|
580
|
-
const head = possibleHead ??
|
|
581
|
-
const chainId =
|
|
868
|
+
const head = possibleHead ?? assertEx11(await findMostRecentBlock(archivist), () => "No blocks found in chain archivist");
|
|
869
|
+
const chainId = assertEx11(possibleChainId, () => "Chain ID could not be determined");
|
|
582
870
|
return [
|
|
583
871
|
head,
|
|
584
872
|
chainId
|
|
@@ -604,61 +892,12 @@ async function initFinalizedArchivist(config) {
|
|
|
604
892
|
}
|
|
605
893
|
__name(initFinalizedArchivist, "initFinalizedArchivist");
|
|
606
894
|
|
|
607
|
-
// src/init/initProducerAccount.ts
|
|
608
|
-
import { isUndefined } from "@xylabs/sdk-js";
|
|
609
|
-
import { HDWallet } from "@xyo-network/wallet";
|
|
610
|
-
import { ADDRESS_INDEX, generateXyoBaseWalletFromPhrase } from "@xyo-network/xl1-sdk";
|
|
611
|
-
var accountServiceSingleton;
|
|
612
|
-
var initProducerAccount = /* @__PURE__ */ __name(async ({ config, logger }) => {
|
|
613
|
-
if (accountServiceSingleton) return accountServiceSingleton;
|
|
614
|
-
let walletPhrase = config.actors.producer.mnemonic;
|
|
615
|
-
if (isUndefined(walletPhrase)) {
|
|
616
|
-
logger?.warn("[Producer] No wallet mnemonic specified!");
|
|
617
|
-
const randomMnemonic = HDWallet.generateMnemonic();
|
|
618
|
-
logger?.warn(`[Producer] Using randomly generated mnemonic:
|
|
619
|
-
|
|
620
|
-
${randomMnemonic}
|
|
621
|
-
|
|
622
|
-
`);
|
|
623
|
-
walletPhrase = randomMnemonic;
|
|
624
|
-
}
|
|
625
|
-
const wallet = await generateXyoBaseWalletFromPhrase(walletPhrase);
|
|
626
|
-
const account = await wallet.derivePath(ADDRESS_INDEX.XYO);
|
|
627
|
-
accountServiceSingleton = account;
|
|
628
|
-
return accountServiceSingleton;
|
|
629
|
-
}, "initProducerAccount");
|
|
630
|
-
|
|
631
|
-
// src/init/initSeedPhrase.ts
|
|
632
|
-
import { assertEx as assertEx11, isString } from "@xylabs/sdk-js";
|
|
633
|
-
import { HDWallet as HDWallet2 } from "@xyo-network/wallet";
|
|
634
|
-
async function initSeedPhrase({ config, logger, bios }) {
|
|
635
|
-
const storedSeedPhrase = await bios.seedPhraseStore.get("os");
|
|
636
|
-
logger?.debug(`[API] Stored mnemonic: ${storedSeedPhrase}`);
|
|
637
|
-
const { mnemonic } = config.actors.api;
|
|
638
|
-
if (isString(storedSeedPhrase) && isString(mnemonic)) {
|
|
639
|
-
logger?.warn("[API] Stored mnemonic does not match supplied. Updating stored mnemonic to supplied.");
|
|
640
|
-
await bios.seedPhraseStore.set("os", mnemonic);
|
|
641
|
-
} else {
|
|
642
|
-
let seedPhrase;
|
|
643
|
-
if (isString(mnemonic)) {
|
|
644
|
-
seedPhrase = mnemonic;
|
|
645
|
-
} else {
|
|
646
|
-
seedPhrase = HDWallet2.generateMnemonic();
|
|
647
|
-
logger?.log("[API] No mnemonic provided, using random mnemonic. This is not recommended for production use.");
|
|
648
|
-
logger?.log(`[API] Mnemonic: ${seedPhrase}`);
|
|
649
|
-
}
|
|
650
|
-
await bios.seedPhraseStore.set("os", seedPhrase);
|
|
651
|
-
}
|
|
652
|
-
return assertEx11(await bios.seedPhraseStore.get("os"), () => "Unable to acquire mnemonic from bios");
|
|
653
|
-
}
|
|
654
|
-
__name(initSeedPhrase, "initSeedPhrase");
|
|
655
|
-
|
|
656
895
|
// src/init/initServerNode.ts
|
|
657
896
|
import { assertEx as assertEx12 } from "@xylabs/sdk-js";
|
|
658
897
|
import { asArchivistInstance } from "@xyo-network/archivist-model";
|
|
659
898
|
|
|
660
899
|
// src/manifest/getLocator.ts
|
|
661
|
-
import { isDefined as
|
|
900
|
+
import { isDefined as isDefined6 } from "@xylabs/sdk-js";
|
|
662
901
|
import { MemoryArchivist as MemoryArchivist2 } from "@xyo-network/archivist-memory";
|
|
663
902
|
import { MongoDBArchivistV2 as MongoDBArchivistV22, MongoDBArchivistV2Deletable } from "@xyo-network/archivist-mongodb";
|
|
664
903
|
import { ViewArchivist } from "@xyo-network/archivist-view";
|
|
@@ -667,7 +906,7 @@ import { AbstractModule, LoggerModuleStatusReporter } from "@xyo-network/module-
|
|
|
667
906
|
import { ModuleFactoryLocator } from "@xyo-network/module-factory-locator";
|
|
668
907
|
import { MemorySentinel } from "@xyo-network/sentinel-memory";
|
|
669
908
|
import { hasMongoConfig as hasMongoConfig2 } from "@xyo-network/xl1-sdk";
|
|
670
|
-
var getLocator = /* @__PURE__ */ __name(async ({
|
|
909
|
+
var getLocator = /* @__PURE__ */ __name(async ({ logger, config }) => {
|
|
671
910
|
const { otlpEndpoint } = config.telemetry?.otel ?? {};
|
|
672
911
|
const { path: endpoint = "/metrics", port = 9465 } = config.telemetry?.metrics?.scrape ?? {};
|
|
673
912
|
const { traceProvider, meterProvider } = await initTelemetry({
|
|
@@ -681,7 +920,7 @@ var getLocator = /* @__PURE__ */ __name(async ({ config, logger }) => {
|
|
|
681
920
|
port
|
|
682
921
|
}
|
|
683
922
|
});
|
|
684
|
-
if (
|
|
923
|
+
if (isDefined6(logger)) AbstractModule.defaultLogger = logger;
|
|
685
924
|
const statusReporter = logger ? new LoggerModuleStatusReporter(logger) : void 0;
|
|
686
925
|
const locator = new ModuleFactoryLocator();
|
|
687
926
|
const mongoConfig = config.storage?.mongo;
|
|
@@ -867,12 +1106,8 @@ var PublicChildManifests = [
|
|
|
867
1106
|
];
|
|
868
1107
|
|
|
869
1108
|
// src/manifest/loadNode.ts
|
|
870
|
-
var loadNode = /* @__PURE__ */ __name(async (
|
|
871
|
-
const locator = await getLocator(
|
|
872
|
-
config,
|
|
873
|
-
balancesSummaryMap,
|
|
874
|
-
transfersSummaryMap
|
|
875
|
-
});
|
|
1109
|
+
var loadNode = /* @__PURE__ */ __name(async (context, wallet) => {
|
|
1110
|
+
const locator = await getLocator(context);
|
|
876
1111
|
const wrapper = new ManifestWrapper(NodeManifest, wallet, locator, PublicChildManifests, PrivateChildManifests);
|
|
877
1112
|
const [node, ...childNodes] = await wrapper.loadNodes();
|
|
878
1113
|
if (childNodes?.length > 0) {
|
|
@@ -907,14 +1142,8 @@ async function pendingBlocksArchivistFromNode(node) {
|
|
|
907
1142
|
});
|
|
908
1143
|
}
|
|
909
1144
|
__name(pendingBlocksArchivistFromNode, "pendingBlocksArchivistFromNode");
|
|
910
|
-
async function initServerNode(
|
|
911
|
-
const node = providedNode ?? await loadNode(
|
|
912
|
-
wallet,
|
|
913
|
-
logger,
|
|
914
|
-
config,
|
|
915
|
-
transfersSummaryMap,
|
|
916
|
-
balancesSummaryMap
|
|
917
|
-
});
|
|
1145
|
+
async function initServerNode(context, wallet, providedNode) {
|
|
1146
|
+
const node = providedNode ?? await loadNode(context, wallet);
|
|
918
1147
|
assertEx12(await node.start(), () => "Failed to start node");
|
|
919
1148
|
const writableChainArchivist = await writableChainArchivistFromNode(node);
|
|
920
1149
|
const readonlyChainArchivist = await readonlyChainArchivistFromNode(node);
|
|
@@ -954,7 +1183,7 @@ import { BaseMongoSdk as BaseMongoSdk2 } from "@xylabs/mongo";
|
|
|
954
1183
|
import { assertEx as assertEx13 } from "@xylabs/sdk-js";
|
|
955
1184
|
import { MongoMap as MongoMap2 } from "@xyo-network/chain-protocol";
|
|
956
1185
|
import { hasMongoConfig as hasMongoConfig3, MemoryMap as MemoryMap2 } from "@xyo-network/xl1-sdk";
|
|
957
|
-
async function initTransferSummaryMap({
|
|
1186
|
+
async function initTransferSummaryMap({ logger, config }) {
|
|
958
1187
|
const mongoConfig = config.storage?.mongo;
|
|
959
1188
|
if (hasMongoConfig3(mongoConfig)) {
|
|
960
1189
|
const { connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName } = mongoConfig;
|
|
@@ -986,67 +1215,463 @@ async function initTransferSummaryMap({ config, logger }) {
|
|
|
986
1215
|
__name(initTransferSummaryMap, "initTransferSummaryMap");
|
|
987
1216
|
|
|
988
1217
|
// src/init/initWallet.ts
|
|
989
|
-
import { isDefined as
|
|
1218
|
+
import { isDefined as isDefined7 } from "@xylabs/sdk-js";
|
|
990
1219
|
import { boot } from "@xyo-network/bios";
|
|
991
|
-
import { HDWallet as
|
|
992
|
-
async function
|
|
1220
|
+
import { HDWallet as HDWallet4 } from "@xyo-network/wallet";
|
|
1221
|
+
async function initActorWallet(context, mnemonic) {
|
|
993
1222
|
const bios = await boot();
|
|
994
|
-
const seedPhrase =
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
1223
|
+
const seedPhrase = isDefined7(mnemonic) ? mnemonic : await initActorSeedPhrase(context, bios);
|
|
1224
|
+
return await HDWallet4.fromPhrase(seedPhrase);
|
|
1225
|
+
}
|
|
1226
|
+
__name(initActorWallet, "initActorWallet");
|
|
1227
|
+
|
|
1228
|
+
// src/config/locators/actors/producerLocatorFromConfig.ts
|
|
1229
|
+
async function producerLocatorFromConfig(context, parent) {
|
|
1230
|
+
const { logger, config } = context;
|
|
1231
|
+
const account = await initActorAccount(context);
|
|
1232
|
+
const locator = new ProviderFactoryLocator4({
|
|
1233
|
+
...context,
|
|
1234
|
+
locator: parent
|
|
998
1235
|
});
|
|
999
|
-
|
|
1236
|
+
const rewardAddress = asAddress2(config.rewardAddress ?? account.address, true);
|
|
1237
|
+
logger?.info(`Using reward address ${rewardAddress}`);
|
|
1238
|
+
if (rewardAddress === account.address) {
|
|
1239
|
+
logger?.warn(`Using producer account address as reward address: ${account.address}`);
|
|
1240
|
+
}
|
|
1241
|
+
const remoteUrl = config.remote.rpc?.url;
|
|
1242
|
+
if (isString3(remoteUrl)) {
|
|
1243
|
+
const transportFactory = /* @__PURE__ */ __name((schemas) => new HttpRpcTransport2(remoteUrl, schemas), "transportFactory");
|
|
1244
|
+
locator.registerMany([
|
|
1245
|
+
JsonRpcMempoolViewer2.factory(JsonRpcMempoolViewer2.dependencies, {
|
|
1246
|
+
transport: await transportFactory(MempoolViewerRpcSchemas2)
|
|
1247
|
+
}),
|
|
1248
|
+
JsonRpcMempoolRunner2.factory(JsonRpcMempoolRunner2.dependencies, {
|
|
1249
|
+
transport: await transportFactory(MempoolRunnerRpcSchemas2)
|
|
1250
|
+
}),
|
|
1251
|
+
JsonRpcAccountBalanceViewer2.factory(JsonRpcAccountBalanceViewer2.dependencies, {
|
|
1252
|
+
transport: await transportFactory(AccountBalanceViewerRpcSchemas2)
|
|
1253
|
+
}),
|
|
1254
|
+
JsonRpcFinalizationViewer2.factory(JsonRpcFinalizationViewer2.dependencies, {
|
|
1255
|
+
transport: await transportFactory(FinalizationViewerRpcSchemas2)
|
|
1256
|
+
}),
|
|
1257
|
+
JsonRpcBlockViewer2.factory(JsonRpcBlockViewer2.dependencies, {
|
|
1258
|
+
transport: await transportFactory(BlockViewerRpcSchemas2)
|
|
1259
|
+
})
|
|
1260
|
+
]);
|
|
1261
|
+
}
|
|
1262
|
+
locator.registerMany([
|
|
1263
|
+
SimpleBlockRewardViewer.factory(SimpleBlockRewardViewer.dependencies, {}),
|
|
1264
|
+
SimpleBlockRunner.factory(SimpleBlockRunner.dependencies, {
|
|
1265
|
+
account,
|
|
1266
|
+
rewardAddress
|
|
1267
|
+
})
|
|
1268
|
+
]);
|
|
1269
|
+
locator.freeze();
|
|
1270
|
+
return locator;
|
|
1000
1271
|
}
|
|
1001
|
-
__name(
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1272
|
+
__name(producerLocatorFromConfig, "producerLocatorFromConfig");
|
|
1273
|
+
|
|
1274
|
+
// src/config/locators/actors/rewardRedemptionLocatorFromConfig.ts
|
|
1275
|
+
import { ProviderFactoryLocator as ProviderFactoryLocator5, SimpleXyoGatewayRunner as SimpleXyoGatewayRunner2 } from "@xyo-network/xl1-sdk";
|
|
1276
|
+
function rewardRedemptionLocatorFromConfig(context, parent) {
|
|
1277
|
+
const locator = new ProviderFactoryLocator5({
|
|
1278
|
+
...context,
|
|
1279
|
+
locator: parent
|
|
1280
|
+
});
|
|
1281
|
+
locator.registerMany([
|
|
1282
|
+
SimpleXyoGatewayRunner2.factory(SimpleXyoGatewayRunner2.dependencies, {})
|
|
1283
|
+
]);
|
|
1284
|
+
locator.freeze();
|
|
1285
|
+
return locator;
|
|
1008
1286
|
}
|
|
1009
|
-
__name(
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1287
|
+
__name(rewardRedemptionLocatorFromConfig, "rewardRedemptionLocatorFromConfig");
|
|
1288
|
+
|
|
1289
|
+
// src/config/locators/actors/validatorLocatorFromConfig.ts
|
|
1290
|
+
import { ProviderFactoryLocator as ProviderFactoryLocator6 } from "@xyo-network/xl1-sdk";
|
|
1291
|
+
function validatorLocatorFromConfig(context, parent) {
|
|
1292
|
+
const locator = new ProviderFactoryLocator6({
|
|
1293
|
+
...context,
|
|
1294
|
+
locator: parent
|
|
1295
|
+
});
|
|
1296
|
+
locator.registerMany([]);
|
|
1297
|
+
locator.freeze();
|
|
1298
|
+
return locator;
|
|
1016
1299
|
}
|
|
1017
|
-
__name(
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1300
|
+
__name(validatorLocatorFromConfig, "validatorLocatorFromConfig");
|
|
1301
|
+
|
|
1302
|
+
// src/config/locators/telemetryContextFromConfig.ts
|
|
1303
|
+
import { initTelemetry as initTelemetry2 } from "@xyo-network/chain-telemetry";
|
|
1304
|
+
async function telemetryContextFromConfig(config, serviceName, serviceVersion) {
|
|
1305
|
+
const { otlpEndpoint } = config.telemetry?.otel ?? {};
|
|
1306
|
+
const { path: endpoint = "/metrics", port = 9466 } = config.telemetry?.metrics?.scrape ?? {};
|
|
1307
|
+
return await initTelemetry2({
|
|
1308
|
+
attributes: {
|
|
1309
|
+
serviceName,
|
|
1310
|
+
serviceVersion
|
|
1311
|
+
},
|
|
1312
|
+
otlpEndpoint,
|
|
1313
|
+
metricsConfig: {
|
|
1314
|
+
endpoint,
|
|
1315
|
+
port
|
|
1316
|
+
}
|
|
1317
|
+
});
|
|
1024
1318
|
}
|
|
1025
|
-
__name(
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1319
|
+
__name(telemetryContextFromConfig, "telemetryContextFromConfig");
|
|
1320
|
+
|
|
1321
|
+
// src/config/locators/contextFromConfigWithoutLocator.ts
|
|
1322
|
+
async function contextFromConfigWithoutLocator(config, logger, serviceName, serviceVersion) {
|
|
1323
|
+
const singletons = {};
|
|
1324
|
+
const caches = {};
|
|
1325
|
+
const telemetryConfig = await telemetryContextFromConfig(config, serviceName, serviceVersion);
|
|
1326
|
+
const statusReporter = initStatusReporter({
|
|
1030
1327
|
logger
|
|
1031
|
-
}
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
async function initRewardsRedemptionApiWallet({ config, logger }) {
|
|
1035
|
-
const { mnemonic } = config.actors.rewardRedemption;
|
|
1036
|
-
return await initWallet({
|
|
1328
|
+
});
|
|
1329
|
+
return {
|
|
1330
|
+
...telemetryConfig,
|
|
1037
1331
|
config,
|
|
1038
|
-
|
|
1039
|
-
|
|
1332
|
+
singletons,
|
|
1333
|
+
caches,
|
|
1334
|
+
logger,
|
|
1335
|
+
statusReporter
|
|
1336
|
+
};
|
|
1040
1337
|
}
|
|
1041
|
-
__name(
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1338
|
+
__name(contextFromConfigWithoutLocator, "contextFromConfigWithoutLocator");
|
|
1339
|
+
|
|
1340
|
+
// src/config/locators/localLocatorFromConfig.ts
|
|
1341
|
+
import { assertEx as assertEx14 } from "@xylabs/sdk-js";
|
|
1342
|
+
import { ProviderFactoryLocator as ProviderFactoryLocator7, SimpleAccountBalanceViewer, SimpleBlockViewer, SimpleFinalizationRunner, SimpleFinalizationViewer, SimpleMempoolRunner, SimpleMempoolViewer, SimpleWindowedBlockViewer, SimpleXyoConnectionViewer, SimpleXyoViewer } from "@xyo-network/xl1-sdk";
|
|
1343
|
+
async function localLocatorFromConfig(context, parent) {
|
|
1344
|
+
const balancesSummaryMap = assertEx14(await initBalanceSummaryMap(context), () => "Balance Summary Map not initialized");
|
|
1345
|
+
const transfersSummaryMap = assertEx14(await initTransferSummaryMap(context), () => "Transfer Summary Map not initialized");
|
|
1346
|
+
const wallet = await initActorWallet(context);
|
|
1347
|
+
const { writableChainArchivist, readonlyChainArchivist, pendingTransactionsArchivist, pendingBlocksArchivist } = await initServerNode(context, wallet);
|
|
1348
|
+
await initFinalizationArchivistIfNeeded(writableChainArchivist, context.config, wallet);
|
|
1349
|
+
const locator = new ProviderFactoryLocator7({
|
|
1350
|
+
...context,
|
|
1351
|
+
locator: parent
|
|
1352
|
+
});
|
|
1353
|
+
locator.registerMany([
|
|
1354
|
+
SimpleMempoolViewer.factory(SimpleMempoolViewer.dependencies, {
|
|
1355
|
+
pendingTransactionsArchivist,
|
|
1356
|
+
pendingBlocksArchivist
|
|
1357
|
+
}),
|
|
1358
|
+
SimpleMempoolRunner.factory(SimpleMempoolRunner.dependencies, {
|
|
1359
|
+
pendingTransactionsArchivist,
|
|
1360
|
+
pendingBlocksArchivist
|
|
1361
|
+
}),
|
|
1362
|
+
SimpleAccountBalanceViewer.factory(SimpleAccountBalanceViewer.dependencies, {
|
|
1363
|
+
balancesSummaryMap,
|
|
1364
|
+
transfersSummaryMap
|
|
1365
|
+
}),
|
|
1366
|
+
SimpleFinalizationViewer.factory(SimpleFinalizationViewer.dependencies, {
|
|
1367
|
+
finalizedArchivist: readonlyChainArchivist
|
|
1368
|
+
}),
|
|
1369
|
+
SimpleBlockViewer.factory(SimpleBlockViewer.dependencies, {
|
|
1370
|
+
finalizedArchivist: readonlyChainArchivist
|
|
1371
|
+
}),
|
|
1372
|
+
SimpleWindowedBlockViewer.factory(SimpleWindowedBlockViewer.dependencies, {
|
|
1373
|
+
maxWindowSize: 1e4,
|
|
1374
|
+
syncInterval: 1e4
|
|
1375
|
+
}),
|
|
1376
|
+
SimpleXyoConnectionViewer.factory(SimpleXyoConnectionViewer.dependencies, {}),
|
|
1377
|
+
SimpleXyoViewer.factory(SimpleXyoViewer.dependencies, {
|
|
1378
|
+
finalizedArchivist: readonlyChainArchivist
|
|
1379
|
+
}),
|
|
1380
|
+
SimpleFinalizationViewer.factory(SimpleFinalizationViewer.dependencies, {
|
|
1381
|
+
finalizedArchivist: readonlyChainArchivist
|
|
1382
|
+
}),
|
|
1383
|
+
SimpleFinalizationRunner.factory(SimpleFinalizationRunner.dependencies, {
|
|
1384
|
+
finalizedArchivist: writableChainArchivist
|
|
1385
|
+
})
|
|
1386
|
+
]);
|
|
1387
|
+
locator.freeze();
|
|
1388
|
+
return locator;
|
|
1389
|
+
}
|
|
1390
|
+
__name(localLocatorFromConfig, "localLocatorFromConfig");
|
|
1391
|
+
|
|
1392
|
+
// src/config/locators/locatorsFromConfig.ts
|
|
1393
|
+
import { deepMerge } from "@xylabs/sdk-js";
|
|
1394
|
+
import { ActorConfigZod as ActorConfigZod2 } from "@xyo-network/xl1-sdk";
|
|
1395
|
+
|
|
1396
|
+
// src/config/locators/rootLocatorFromConfig.ts
|
|
1397
|
+
import { isString as isString4 } from "@xylabs/sdk-js";
|
|
1398
|
+
import { validateHydratedBlock, validateHydratedBlockState } from "@xyo-network/chain-validation";
|
|
1399
|
+
import { ProviderFactoryLocator as ProviderFactoryLocator9, SimpleBlockValidationViewer as SimpleBlockValidationViewer2, SimpleNetworkStakeViewer, SimpleStepRewardsByPositionViewer, SimpleStepRewardsByStakerViewer, SimpleStepRewardsByStepViewer, SimpleStepRewardsTotalViewer, SimpleStepRewardsViewer, SimpleStepViewer, SimpleTimeSyncViewer as SimpleTimeSyncViewer2 } from "@xyo-network/xl1-sdk";
|
|
1400
|
+
|
|
1401
|
+
// src/config/locators/remoteLocatorFromConfig.ts
|
|
1402
|
+
import { assertEx as assertEx15 } from "@xylabs/sdk-js";
|
|
1403
|
+
import { ProviderFactoryLocator as ProviderFactoryLocator8, SimpleAccountBalanceViewer as SimpleAccountBalanceViewer2, SimpleBlockViewer as SimpleBlockViewer2, SimpleFinalizationViewer as SimpleFinalizationViewer2, SimpleMempoolRunner as SimpleMempoolRunner2, SimpleMempoolViewer as SimpleMempoolViewer2, SimpleWindowedBlockViewer as SimpleWindowedBlockViewer2, SimpleXyoViewer as SimpleXyoViewer2 } from "@xyo-network/xl1-sdk";
|
|
1404
|
+
async function remoteLocatorFromConfig(context, parent) {
|
|
1405
|
+
const balancesSummaryMap = assertEx15(await initBalanceSummaryMap(context), () => "Balance Summary Map not initialized");
|
|
1406
|
+
const transfersSummaryMap = assertEx15(await initTransferSummaryMap(context), () => "Transfer Summary Map not initialized");
|
|
1407
|
+
const wallet = await initActorWallet(context);
|
|
1408
|
+
const { readonlyChainArchivist, pendingTransactionsArchivist, pendingBlocksArchivist } = await initServerNode(context, wallet);
|
|
1409
|
+
const locator = new ProviderFactoryLocator8({
|
|
1410
|
+
...context,
|
|
1411
|
+
locator: parent
|
|
1412
|
+
});
|
|
1413
|
+
locator.registerMany([
|
|
1414
|
+
SimpleMempoolViewer2.factory(SimpleMempoolViewer2.dependencies, {
|
|
1415
|
+
pendingTransactionsArchivist,
|
|
1416
|
+
pendingBlocksArchivist
|
|
1417
|
+
}),
|
|
1418
|
+
SimpleMempoolRunner2.factory(SimpleMempoolRunner2.dependencies, {
|
|
1419
|
+
pendingTransactionsArchivist,
|
|
1420
|
+
pendingBlocksArchivist
|
|
1421
|
+
}),
|
|
1422
|
+
SimpleAccountBalanceViewer2.factory(SimpleAccountBalanceViewer2.dependencies, {
|
|
1423
|
+
balancesSummaryMap,
|
|
1424
|
+
transfersSummaryMap
|
|
1425
|
+
}),
|
|
1426
|
+
SimpleFinalizationViewer2.factory(SimpleFinalizationViewer2.dependencies, {
|
|
1427
|
+
finalizedArchivist: readonlyChainArchivist
|
|
1428
|
+
}),
|
|
1429
|
+
SimpleBlockViewer2.factory(SimpleBlockViewer2.dependencies, {
|
|
1430
|
+
finalizedArchivist: readonlyChainArchivist
|
|
1431
|
+
}),
|
|
1432
|
+
SimpleWindowedBlockViewer2.factory(SimpleWindowedBlockViewer2.dependencies, {
|
|
1433
|
+
maxWindowSize: 1e4,
|
|
1434
|
+
syncInterval: 1e4
|
|
1435
|
+
}),
|
|
1436
|
+
SimpleXyoViewer2.factory(SimpleXyoViewer2.dependencies, {
|
|
1437
|
+
finalizedArchivist: readonlyChainArchivist
|
|
1438
|
+
})
|
|
1439
|
+
]);
|
|
1440
|
+
locator.freeze();
|
|
1441
|
+
return locator;
|
|
1442
|
+
}
|
|
1443
|
+
__name(remoteLocatorFromConfig, "remoteLocatorFromConfig");
|
|
1444
|
+
|
|
1445
|
+
// src/config/locators/rootLocatorFromConfig.ts
|
|
1446
|
+
async function rootLocatorFromConfig(context) {
|
|
1447
|
+
const { config } = context;
|
|
1448
|
+
let locator = new ProviderFactoryLocator9(context);
|
|
1449
|
+
locator.registerMany([
|
|
1450
|
+
SimpleNetworkStakeViewer.factory(SimpleNetworkStakeViewer.dependencies, {}),
|
|
1451
|
+
SimpleTimeSyncViewer2.factory(SimpleTimeSyncViewer2.dependencies, {}),
|
|
1452
|
+
SimpleStepViewer.factory(SimpleStepViewer.dependencies, {}),
|
|
1453
|
+
SimpleStepRewardsViewer.factory(SimpleStepRewardsViewer.dependencies, {}),
|
|
1454
|
+
SimpleStepRewardsByPositionViewer.factory(SimpleStepRewardsByPositionViewer.dependencies, {}),
|
|
1455
|
+
SimpleStepRewardsByStakerViewer.factory(SimpleStepRewardsByStakerViewer.dependencies, {}),
|
|
1456
|
+
SimpleStepRewardsByStepViewer.factory(SimpleStepRewardsByStepViewer.dependencies, {}),
|
|
1457
|
+
SimpleStepRewardsTotalViewer.factory(SimpleStepRewardsTotalViewer.dependencies, {}),
|
|
1458
|
+
SimpleBlockValidationViewer2.factory(SimpleBlockValidationViewer2.dependencies, {
|
|
1459
|
+
state: validateHydratedBlockState,
|
|
1460
|
+
protocol: validateHydratedBlock
|
|
1461
|
+
})
|
|
1462
|
+
]);
|
|
1463
|
+
locator = await initEvmProvidersIfAvailable(locator);
|
|
1464
|
+
locator = await (isString4(config.remote.rpc?.url) ? remoteLocatorFromConfig(context, locator) : localLocatorFromConfig(context, locator));
|
|
1465
|
+
locator.freeze();
|
|
1466
|
+
return locator;
|
|
1467
|
+
}
|
|
1468
|
+
__name(rootLocatorFromConfig, "rootLocatorFromConfig");
|
|
1469
|
+
|
|
1470
|
+
// src/config/locators/locatorsFromConfig.ts
|
|
1471
|
+
async function locatorsFromConfig(context, { actors, ...config }) {
|
|
1472
|
+
const result = {
|
|
1473
|
+
_root: await rootLocatorFromConfig({
|
|
1474
|
+
...context,
|
|
1475
|
+
config: {
|
|
1476
|
+
...config,
|
|
1477
|
+
name: "_root"
|
|
1478
|
+
}
|
|
1479
|
+
})
|
|
1480
|
+
};
|
|
1481
|
+
for (const actorConfig of actors) {
|
|
1482
|
+
switch (actorConfig.name) {
|
|
1483
|
+
case "producer": {
|
|
1484
|
+
result[actorConfig.name] = await producerLocatorFromConfig({
|
|
1485
|
+
...context,
|
|
1486
|
+
config: ProducerConfigZod.parse(deepMerge(config, actorConfig))
|
|
1487
|
+
}, result._root);
|
|
1488
|
+
break;
|
|
1489
|
+
}
|
|
1490
|
+
case "api": {
|
|
1491
|
+
result[actorConfig.name] = await apiLocatorFromConfig({
|
|
1492
|
+
...context,
|
|
1493
|
+
config: ApiConfigZod.parse(deepMerge(config, actorConfig))
|
|
1494
|
+
}, result._root);
|
|
1495
|
+
break;
|
|
1496
|
+
}
|
|
1497
|
+
case "mempool": {
|
|
1498
|
+
result[actorConfig.name] = await mempoolLocatorFromConfig({
|
|
1499
|
+
...context,
|
|
1500
|
+
config: MempoolConfigZod.parse(deepMerge(config, actorConfig))
|
|
1501
|
+
}, result._root);
|
|
1502
|
+
break;
|
|
1503
|
+
}
|
|
1504
|
+
case "validator": {
|
|
1505
|
+
result[actorConfig.name] = await validatorLocatorFromConfig({
|
|
1506
|
+
...context,
|
|
1507
|
+
config: ActorConfigZod2.parse(deepMerge(config, actorConfig))
|
|
1508
|
+
}, result._root);
|
|
1509
|
+
break;
|
|
1510
|
+
}
|
|
1511
|
+
case "bridge": {
|
|
1512
|
+
result[actorConfig.name] = await bridgeLocatorFromConfig({
|
|
1513
|
+
...context,
|
|
1514
|
+
config: BridgeConfigZod.parse(deepMerge(config, actorConfig))
|
|
1515
|
+
}, result._root);
|
|
1516
|
+
break;
|
|
1517
|
+
}
|
|
1518
|
+
case "rewardRedemption": {
|
|
1519
|
+
result[actorConfig.name] = await rewardRedemptionLocatorFromConfig({
|
|
1520
|
+
...context,
|
|
1521
|
+
config: RewardRedemptionConfigZod.parse(deepMerge(config, actorConfig))
|
|
1522
|
+
}, result._root);
|
|
1523
|
+
break;
|
|
1524
|
+
}
|
|
1525
|
+
}
|
|
1526
|
+
}
|
|
1527
|
+
return result;
|
|
1528
|
+
}
|
|
1529
|
+
__name(locatorsFromConfig, "locatorsFromConfig");
|
|
1530
|
+
|
|
1531
|
+
// src/config/mergeConfig.ts
|
|
1532
|
+
import { deepMerge as deepMerge2 } from "@xylabs/sdk-js";
|
|
1533
|
+
function mergeConfig({ actors, ...baseConfig }) {
|
|
1534
|
+
return {
|
|
1535
|
+
...baseConfig,
|
|
1536
|
+
actors: actors.map((actor) => {
|
|
1537
|
+
return deepMerge2(baseConfig, actor);
|
|
1538
|
+
})
|
|
1539
|
+
};
|
|
1540
|
+
}
|
|
1541
|
+
__name(mergeConfig, "mergeConfig");
|
|
1542
|
+
|
|
1543
|
+
// src/config/tryParseConfig.ts
|
|
1544
|
+
import { isDefined as isDefined8, isNull } from "@xylabs/sdk-js";
|
|
1545
|
+
import { ConfigZod } from "@xyo-network/xl1-sdk";
|
|
1546
|
+
import { cosmiconfig } from "cosmiconfig";
|
|
1547
|
+
var configName = "xyo";
|
|
1548
|
+
var configSection = "xl1";
|
|
1549
|
+
async function tryParseConfig(searchPlaces) {
|
|
1550
|
+
const explorer = cosmiconfig(configName, {
|
|
1551
|
+
cache: true,
|
|
1552
|
+
// loaders: { '.ts': TypeScriptLoader() },
|
|
1553
|
+
searchPlaces
|
|
1554
|
+
});
|
|
1555
|
+
const result = (await explorer.search())?.config;
|
|
1556
|
+
if (!isNull(result)) {
|
|
1557
|
+
const section = result[configSection];
|
|
1558
|
+
if (isDefined8(section) && typeof section === "object") {
|
|
1559
|
+
return ConfigZod.loose().parse(section);
|
|
1560
|
+
}
|
|
1561
|
+
}
|
|
1562
|
+
return ConfigZod.parse({});
|
|
1563
|
+
}
|
|
1564
|
+
__name(tryParseConfig, "tryParseConfig");
|
|
1565
|
+
|
|
1566
|
+
// src/createDeclarationIntentBlock.ts
|
|
1567
|
+
import { buildNextBlock } from "@xyo-network/chain-sdk";
|
|
1568
|
+
import { createDeclarationIntent } from "@xyo-network/xl1-sdk";
|
|
1569
|
+
async function createProducerChainStakeIntentBlock(prevBlock, producerAccount, range) {
|
|
1570
|
+
const producerDeclarationPayload = createDeclarationIntent(producerAccount.address, "producer", range[0], range[1]);
|
|
1571
|
+
return await buildNextBlock(prevBlock, [], [
|
|
1572
|
+
producerDeclarationPayload
|
|
1573
|
+
], [
|
|
1574
|
+
producerAccount
|
|
1575
|
+
]);
|
|
1576
|
+
}
|
|
1577
|
+
__name(createProducerChainStakeIntentBlock, "createProducerChainStakeIntentBlock");
|
|
1578
|
+
|
|
1579
|
+
// src/health/initHealthEndpoints.ts
|
|
1580
|
+
import http from "http";
|
|
1581
|
+
import { isDefined as isDefined9 } from "@xylabs/sdk-js";
|
|
1582
|
+
var sendStatus = /* @__PURE__ */ __name((res, status, errorCode) => {
|
|
1583
|
+
const statusCode = status === "started" ? 200 : errorCode;
|
|
1584
|
+
res.writeHead(statusCode, {
|
|
1585
|
+
"Content-Type": "application/json"
|
|
1586
|
+
});
|
|
1587
|
+
res.end(JSON.stringify({
|
|
1588
|
+
status
|
|
1589
|
+
}));
|
|
1590
|
+
}, "sendStatus");
|
|
1591
|
+
var notFound = /* @__PURE__ */ __name((res) => {
|
|
1592
|
+
res.writeHead(404, {
|
|
1593
|
+
"Content-Type": "application/json"
|
|
1594
|
+
});
|
|
1595
|
+
res.end(JSON.stringify({
|
|
1596
|
+
status: "not found"
|
|
1597
|
+
}));
|
|
1598
|
+
}, "notFound");
|
|
1599
|
+
var createHealthServer = /* @__PURE__ */ __name((context, port, statusMonitor) => {
|
|
1600
|
+
const { logger } = context;
|
|
1601
|
+
const server = http.createServer((req, res) => {
|
|
1602
|
+
const url = req.url ?? "";
|
|
1603
|
+
const status = statusMonitor.getGlobalStatus();
|
|
1604
|
+
switch (url) {
|
|
1605
|
+
case "/healthz": {
|
|
1606
|
+
sendStatus(res, status, 500);
|
|
1607
|
+
break;
|
|
1608
|
+
}
|
|
1609
|
+
case "/livez": {
|
|
1610
|
+
sendStatus(res, status, 503);
|
|
1611
|
+
break;
|
|
1612
|
+
}
|
|
1613
|
+
case "/readyz": {
|
|
1614
|
+
sendStatus(res, status, 503);
|
|
1615
|
+
break;
|
|
1616
|
+
}
|
|
1617
|
+
default: {
|
|
1618
|
+
notFound(res);
|
|
1619
|
+
}
|
|
1620
|
+
}
|
|
1621
|
+
});
|
|
1622
|
+
server.listen(port, () => {
|
|
1623
|
+
logger?.log(`Health server running on http://localhost:${port}`);
|
|
1624
|
+
logger?.log(" - /healthz");
|
|
1625
|
+
logger?.log(" - /livez");
|
|
1626
|
+
logger?.log(" - /readyz");
|
|
1627
|
+
});
|
|
1628
|
+
return server;
|
|
1629
|
+
}, "createHealthServer");
|
|
1630
|
+
function initHealthEndpoints(context, statusMonitor) {
|
|
1631
|
+
const { config } = context;
|
|
1632
|
+
const { healthCheckPort } = config;
|
|
1633
|
+
return isDefined9(healthCheckPort) ? createHealthServer(context, healthCheckPort, statusMonitor) : void 0;
|
|
1048
1634
|
}
|
|
1049
|
-
__name(
|
|
1635
|
+
__name(initHealthEndpoints, "initHealthEndpoints");
|
|
1636
|
+
|
|
1637
|
+
// src/host/implementation/DefaultHost.ts
|
|
1638
|
+
var GenericHost = class {
|
|
1639
|
+
static {
|
|
1640
|
+
__name(this, "GenericHost");
|
|
1641
|
+
}
|
|
1642
|
+
services;
|
|
1643
|
+
constructor(services) {
|
|
1644
|
+
this.services = services;
|
|
1645
|
+
}
|
|
1646
|
+
async start() {
|
|
1647
|
+
await Promise.resolve();
|
|
1648
|
+
console.log("Host is starting...");
|
|
1649
|
+
}
|
|
1650
|
+
async stop() {
|
|
1651
|
+
await Promise.resolve();
|
|
1652
|
+
console.log("Host is stopping...");
|
|
1653
|
+
}
|
|
1654
|
+
};
|
|
1655
|
+
|
|
1656
|
+
// src/host/implementation/DefaultServiceProvider.ts
|
|
1657
|
+
var DefaultServiceProvider = class {
|
|
1658
|
+
static {
|
|
1659
|
+
__name(this, "DefaultServiceProvider");
|
|
1660
|
+
}
|
|
1661
|
+
_services;
|
|
1662
|
+
constructor(services) {
|
|
1663
|
+
this._services = services;
|
|
1664
|
+
}
|
|
1665
|
+
getService(serviceIdentifier) {
|
|
1666
|
+
return this._services[serviceIdentifier];
|
|
1667
|
+
}
|
|
1668
|
+
};
|
|
1669
|
+
|
|
1670
|
+
// src/host/model/ServiceCollection.ts
|
|
1671
|
+
var ServiceLifetime = {
|
|
1672
|
+
Singleton: "Singleton",
|
|
1673
|
+
Transient: "Transient"
|
|
1674
|
+
};
|
|
1050
1675
|
|
|
1051
1676
|
// src/orchestrator/Orchestrator.ts
|
|
1052
1677
|
import { AbstractCreatable, creatable as creatable2 } from "@xylabs/sdk-js";
|
|
@@ -1113,27 +1738,53 @@ Orchestrator = _ts_decorate2([
|
|
|
1113
1738
|
creatable2()
|
|
1114
1739
|
], Orchestrator);
|
|
1115
1740
|
export {
|
|
1741
|
+
ApiConfigContext,
|
|
1742
|
+
ApiConfigZod,
|
|
1743
|
+
BasisPointsZod,
|
|
1744
|
+
BridgeConfigContext,
|
|
1745
|
+
BridgeConfigZod,
|
|
1746
|
+
BridgeSettingsZod,
|
|
1116
1747
|
DefaultServiceProvider,
|
|
1117
1748
|
GenericHost,
|
|
1749
|
+
MempoolConfigContext,
|
|
1750
|
+
MempoolConfigZod,
|
|
1118
1751
|
NodeManifest,
|
|
1119
1752
|
Orchestrator,
|
|
1120
1753
|
PrivateChildManifests,
|
|
1754
|
+
ProducerConfigContext,
|
|
1755
|
+
ProducerConfigZod,
|
|
1121
1756
|
PublicChildManifests,
|
|
1757
|
+
RewardRedemptionConfigContext,
|
|
1758
|
+
RewardRedemptionConfigZod,
|
|
1122
1759
|
ServiceLifetime,
|
|
1123
1760
|
ValidatorActor,
|
|
1761
|
+
apiLocatorFromConfig,
|
|
1762
|
+
asApiConfig,
|
|
1763
|
+
asApiConfigContext,
|
|
1764
|
+
asBridgeConfig,
|
|
1765
|
+
asBridgeConfigContext,
|
|
1766
|
+
asMempoolConfig,
|
|
1767
|
+
asMempoolConfigContext,
|
|
1768
|
+
asProducerConfig,
|
|
1769
|
+
asProducerConfigContext,
|
|
1770
|
+
asRewardRedemptionConfig,
|
|
1771
|
+
asRewardRedemptionConfigContext,
|
|
1772
|
+
bridgeLocatorFromConfig,
|
|
1124
1773
|
buildTelemetryConfig,
|
|
1125
1774
|
canUseChainId,
|
|
1126
1775
|
canUseEvmProvider,
|
|
1127
1776
|
canUseInfuraProvider,
|
|
1128
1777
|
canUseJsonRpcProvider,
|
|
1778
|
+
contextFromConfigWithoutLocator,
|
|
1129
1779
|
createProducerChainStakeIntentBlock,
|
|
1130
1780
|
getChainId,
|
|
1131
1781
|
getInfuraProviderConfig,
|
|
1132
1782
|
getJsonRpcProviderConfig,
|
|
1133
1783
|
getLocator,
|
|
1134
|
-
|
|
1784
|
+
initActorAccount,
|
|
1785
|
+
initActorSeedPhrase,
|
|
1786
|
+
initActorWallet,
|
|
1135
1787
|
initBalanceSummaryMap,
|
|
1136
|
-
initBridgeWallet,
|
|
1137
1788
|
initBridgedArchivistModule,
|
|
1138
1789
|
initBridgedModule,
|
|
1139
1790
|
initChainFinalizedArchivist,
|
|
@@ -1144,18 +1795,43 @@ export {
|
|
|
1144
1795
|
initHealthEndpoints,
|
|
1145
1796
|
initInfuraProvider,
|
|
1146
1797
|
initJsonRpcProvider,
|
|
1147
|
-
initMempoolWallet,
|
|
1148
1798
|
initPendingBlocksArchivist,
|
|
1149
|
-
initProducerAccount,
|
|
1150
|
-
initProducerWallet,
|
|
1151
1799
|
initRejectedTransactionsArchivist,
|
|
1152
|
-
initRewardsRedemptionApiWallet,
|
|
1153
|
-
initSeedPhrase,
|
|
1154
1800
|
initServerNode,
|
|
1155
1801
|
initStakeIntentStateArchivist,
|
|
1156
1802
|
initStatusReporter,
|
|
1157
1803
|
initTransferSummaryMap,
|
|
1158
|
-
|
|
1159
|
-
|
|
1804
|
+
isApiConfig,
|
|
1805
|
+
isApiConfigContext,
|
|
1806
|
+
isBridgeConfig,
|
|
1807
|
+
isBridgeConfigContext,
|
|
1808
|
+
isMempoolConfig,
|
|
1809
|
+
isMempoolConfigContext,
|
|
1810
|
+
isProducerConfig,
|
|
1811
|
+
isProducerConfigContext,
|
|
1812
|
+
isRewardRedemptionConfig,
|
|
1813
|
+
isRewardRedemptionConfigContext,
|
|
1814
|
+
loadNode,
|
|
1815
|
+
localLocatorFromConfig,
|
|
1816
|
+
locatorsFromConfig,
|
|
1817
|
+
mempoolLocatorFromConfig,
|
|
1818
|
+
mergeConfig,
|
|
1819
|
+
producerLocatorFromConfig,
|
|
1820
|
+
remoteLocatorFromConfig,
|
|
1821
|
+
rewardRedemptionLocatorFromConfig,
|
|
1822
|
+
rootLocatorFromConfig,
|
|
1823
|
+
telemetryContextFromConfig,
|
|
1824
|
+
toApiConfig,
|
|
1825
|
+
toApiConfigContext,
|
|
1826
|
+
toBridgeConfig,
|
|
1827
|
+
toBridgeConfigContext,
|
|
1828
|
+
toMempoolConfig,
|
|
1829
|
+
toMempoolConfigContext,
|
|
1830
|
+
toProducerConfig,
|
|
1831
|
+
toProducerConfigContext,
|
|
1832
|
+
toRewardRedemptionConfig,
|
|
1833
|
+
toRewardRedemptionConfigContext,
|
|
1834
|
+
tryParseConfig,
|
|
1835
|
+
validatorLocatorFromConfig
|
|
1160
1836
|
};
|
|
1161
1837
|
//# sourceMappingURL=index.mjs.map
|