@xyo-network/chain-orchestration 1.19.7 → 1.19.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/neutral/actor/ValidatorActor.d.ts +10 -31
  2. package/dist/neutral/actor/ValidatorActor.d.ts.map +1 -1
  3. package/dist/neutral/actor/index.d.ts +0 -2
  4. package/dist/neutral/actor/index.d.ts.map +1 -1
  5. package/dist/neutral/index.mjs +132 -219
  6. package/dist/neutral/index.mjs.map +1 -1
  7. package/dist/neutral/init/index.d.ts +1 -0
  8. package/dist/neutral/init/index.d.ts.map +1 -1
  9. package/dist/neutral/init/initEvmProvidersIfAvailable.d.ts.map +1 -1
  10. package/dist/neutral/init/initFinalizationArchivistIfNeeded.d.ts +5 -0
  11. package/dist/neutral/init/initFinalizationArchivistIfNeeded.d.ts.map +1 -0
  12. package/dist/neutral/init/initWallet.d.ts +2 -0
  13. package/dist/neutral/init/initWallet.d.ts.map +1 -1
  14. package/dist/neutral/orchestrator/Orchestrator.d.ts +4 -4
  15. package/dist/neutral/orchestrator/Orchestrator.d.ts.map +1 -1
  16. package/package.json +12 -12
  17. package/src/actor/ValidatorActor.ts +24 -57
  18. package/src/actor/index.ts +0 -2
  19. package/src/health/initHealthEndpoints.ts +1 -1
  20. package/src/init/index.ts +1 -0
  21. package/src/init/initEvmProvidersIfAvailable.ts +14 -2
  22. package/src/init/initFinalizationArchivistIfNeeded.ts +42 -0
  23. package/src/init/initProducerAccount.ts +1 -1
  24. package/src/init/initSeedPhrase.ts +1 -1
  25. package/src/init/initWallet.ts +14 -4
  26. package/src/orchestrator/Orchestrator.ts +6 -4
  27. package/dist/neutral/actor/BalanceActor.d.ts +0 -17
  28. package/dist/neutral/actor/BalanceActor.d.ts.map +0 -1
  29. package/dist/neutral/actor/MempoolActor.d.ts +0 -41
  30. package/dist/neutral/actor/MempoolActor.d.ts.map +0 -1
  31. package/src/actor/BalanceActor.ts +0 -41
  32. package/src/actor/MempoolActor.ts +0 -105
@@ -1,166 +1,40 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
3
 
4
- // src/actor/BalanceActor.ts
5
- import { assertEx } from "@xylabs/sdk-js";
6
- import { Actor } from "@xyo-network/xl1-sdk";
7
- import { Mutex } from "async-mutex";
8
- var BalanceActor = class extends Actor {
9
- static {
10
- __name(this, "BalanceActor");
11
- }
12
- _updateMutex = new Mutex();
13
- get accountBalanceViewer() {
14
- return assertEx(this.params.accountBalanceViewer, () => "balanceService not set");
15
- }
16
- get blockViewer() {
17
- return assertEx(this.params.blockViewer, () => "blockViewer not set");
18
- }
19
- async startHandler() {
20
- await super.startHandler();
21
- this.registerTimer(
22
- "BalanceTimer",
23
- async () => {
24
- await this.updateBalance();
25
- },
26
- 1e3,
27
- 1e4
28
- /* 1000 */
29
- );
30
- }
31
- async updateBalance() {
32
- if (this._updateMutex.isLocked()) return;
33
- await this._updateMutex.runExclusive(async () => {
34
- const head = await this.blockViewer.currentBlockHash();
35
- await this.accountBalanceViewer.accountBalances([], {
36
- head
37
- });
38
- });
39
- }
40
- };
41
-
42
- // src/actor/MempoolActor.ts
43
- import { assertEx as assertEx2, creatable } from "@xylabs/sdk-js";
44
- import { Actor as Actor2 } from "@xyo-network/xl1-sdk";
45
- import { Mutex as Mutex2 } from "async-mutex";
46
- function _ts_decorate(decorators, target, key, desc) {
47
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
48
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
49
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
50
- return c > 3 && r && Object.defineProperty(target, key, r), r;
51
- }
52
- __name(_ts_decorate, "_ts_decorate");
53
- var MempoolActor = class extends Actor2 {
54
- static {
55
- __name(this, "MempoolActor");
56
- }
57
- _blockTimerId = null;
58
- _blockTimerMutex = new Mutex2();
59
- _transactionTimerId = null;
60
- _transactionTimerMutex = new Mutex2();
61
- get mempoolRunner() {
62
- return this.params.mempoolRunner;
63
- }
64
- get pendingBlocksArchivist() {
65
- return this.params.pendingBlocksArchivist;
66
- }
67
- get pendingTransactionsArchivist() {
68
- return this.params.pendingTransactionsArchivist;
69
- }
70
- static async paramsHandler(params) {
71
- return {
72
- ...await super.paramsHandler(params),
73
- mempoolRunner: assertEx2(params?.mempoolRunner, () => "mempoolRunner is required for MempoolActor"),
74
- pendingBlocksArchivist: assertEx2(params?.pendingBlocksArchivist, () => "pendingBlocksArchivist is required for MempoolActor"),
75
- pendingTransactionsArchivist: assertEx2(params?.pendingTransactionsArchivist, () => "pendingTransactionsArchivist is required for MempoolActor")
76
- };
77
- }
78
- async startHandler() {
79
- await super.startHandler();
80
- this.restartBlockTimer();
81
- }
82
- async stopHandler() {
83
- await super.stopHandler();
84
- this.stopBlockTimer();
85
- }
86
- restartBlockTimer() {
87
- this.stopBlockTimer();
88
- this._blockTimerId = setInterval(() => {
89
- if (this._blockTimerMutex.isLocked()) {
90
- return;
91
- }
92
- void this._blockTimerMutex.runExclusive(async () => {
93
- await this.mempoolRunner.prunePendingBlocks({
94
- batchSize: 50
95
- });
96
- });
97
- }, 1e3);
98
- }
99
- restartTransactionTimer() {
100
- this.stopTransactionTimer();
101
- this._transactionTimerId = setInterval(() => {
102
- if (this._transactionTimerMutex.isLocked()) {
103
- return;
104
- }
105
- void this._transactionTimerMutex.runExclusive(async () => {
106
- await this.mempoolRunner.prunePendingTransactions({
107
- batchSize: 50
108
- });
109
- });
110
- }, 1e3);
111
- }
112
- stopBlockTimer() {
113
- if (this._blockTimerId !== null) {
114
- clearInterval(this._blockTimerId);
115
- }
116
- this._blockTimerId = null;
117
- }
118
- stopTransactionTimer() {
119
- if (this._transactionTimerId !== null) {
120
- clearInterval(this._transactionTimerId);
121
- }
122
- this._transactionTimerId = null;
123
- }
124
- };
125
- MempoolActor = _ts_decorate([
126
- creatable()
127
- ], MempoolActor);
128
-
129
4
  // src/actor/ValidatorActor.ts
130
- import { assertEx as assertEx3, creatable as creatable2 } from "@xylabs/sdk-js";
5
+ import { creatable } from "@xylabs/sdk-js";
131
6
  import { processPendingBlocks } from "@xyo-network/chain-sdk";
132
- import { PayloadBuilder } from "@xyo-network/payload-builder";
133
- import { Actor as Actor3 } from "@xyo-network/xl1-sdk";
134
- function _ts_decorate2(decorators, target, key, desc) {
7
+ import { ActorV3, BlockViewerMoniker, FinalizationRunnerMoniker, MempoolViewerMoniker } from "@xyo-network/xl1-sdk";
8
+ function _ts_decorate(decorators, target, key, desc) {
135
9
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
136
10
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
137
11
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
138
12
  return c > 3 && r && Object.defineProperty(target, key, r), r;
139
13
  }
140
- __name(_ts_decorate2, "_ts_decorate");
141
- var ValidatorActor = class extends Actor3 {
14
+ __name(_ts_decorate, "_ts_decorate");
15
+ var ValidatorActor = class extends ActorV3 {
142
16
  static {
143
17
  __name(this, "ValidatorActor");
144
18
  }
19
+ _blockViewer;
20
+ _finalizationRunner;
145
21
  _lastValidatedBlock;
146
22
  _lastValidatedBlockHash;
23
+ _mempoolViewer;
147
24
  get blockViewer() {
148
- return this.params.blockViewer;
25
+ return this._blockViewer;
149
26
  }
150
- get finalizedArchivist() {
151
- return assertEx3(this.params.finalizedArchivist, () => "finalizedArchivist not set");
27
+ get finalizationRunner() {
28
+ return this._finalizationRunner;
152
29
  }
153
30
  get mempoolViewer() {
154
- return this.params.mempoolViewer;
31
+ return this._mempoolViewer;
155
32
  }
156
- static async paramsHandler(params) {
157
- return {
158
- ...await super.paramsHandler(params),
159
- mempoolViewer: assertEx3(params?.mempoolViewer, () => "mempoolViewer is required for ValidatorActor"),
160
- blockViewer: assertEx3(params?.blockViewer, () => "blockViewer is required for ValidatorActor"),
161
- finalizedArchivist: assertEx3(params?.finalizedArchivist, () => "finalizedArchivist is required for ValidatorActor"),
162
- account: assertEx3(params?.account, () => "account is required for ValidatorActor")
163
- };
33
+ async createHandler() {
34
+ await super.startHandler();
35
+ this._blockViewer = await this.locator.getInstance(BlockViewerMoniker);
36
+ this._finalizationRunner = await this.locator.getInstance(FinalizationRunnerMoniker);
37
+ this._mempoolViewer = await this.locator.getInstance(MempoolViewerMoniker);
164
38
  }
165
39
  async startHandler() {
166
40
  await super.startHandler();
@@ -174,7 +48,7 @@ var ValidatorActor = class extends Actor3 {
174
48
  logger: this.logger,
175
49
  mempoolViewer: this.mempoolViewer,
176
50
  blockViewer: this.blockViewer,
177
- finalizedArchivist: this.finalizedArchivist
51
+ finalizationRunner: this.finalizationRunner
178
52
  });
179
53
  }, {
180
54
  ...this.context,
@@ -186,28 +60,18 @@ var ValidatorActor = class extends Actor3 {
186
60
  /* 500 */
187
61
  );
188
62
  }
189
- async slashInvalidBlock(_block) {
190
- const slashed = await Promise.resolve(true);
191
- return slashed;
192
- }
193
- async validateBlock(block) {
194
- const valid = await Promise.resolve(true);
195
- this._lastValidatedBlock = block;
196
- this._lastValidatedBlockHash = await PayloadBuilder.hash(block);
197
- return valid;
198
- }
199
63
  };
200
- ValidatorActor = _ts_decorate2([
201
- creatable2()
64
+ ValidatorActor = _ts_decorate([
65
+ creatable()
202
66
  ], ValidatorActor);
203
67
 
204
68
  // src/archivists/ChainFinalized/archivist.ts
205
69
  import { startupSpanAsync } from "@xyo-network/chain-utils";
206
70
  import { timeBudget } from "@xyo-network/xl1-sdk";
207
- import { Mutex as Mutex4 } from "async-mutex";
71
+ import { Mutex as Mutex2 } from "async-mutex";
208
72
 
209
73
  // src/archivists/ChainFinalized/local.ts
210
- import { Mutex as Mutex3 } from "async-mutex";
74
+ import { Mutex } from "async-mutex";
211
75
 
212
76
  // src/archivists/lib/localPersistentArchivist.ts
213
77
  import { rm } from "fs/promises";
@@ -235,7 +99,7 @@ var getLocalPersistentArchivist = /* @__PURE__ */ __name((name, dbName, storeNam
235
99
  }, "getLocalPersistentArchivist");
236
100
 
237
101
  // src/archivists/ChainFinalized/local.ts
238
- var mutex = new Mutex3();
102
+ var mutex = new Mutex();
239
103
  var singleton;
240
104
  var initLocalChainFinalizedArchivist = /* @__PURE__ */ __name(async ({ config }) => {
241
105
  return await mutex.runExclusive(async () => {
@@ -247,7 +111,7 @@ var initLocalChainFinalizedArchivist = /* @__PURE__ */ __name(async ({ config })
247
111
  }, "initLocalChainFinalizedArchivist");
248
112
 
249
113
  // src/archivists/ChainFinalized/archivist.ts
250
- var mutex2 = new Mutex4();
114
+ var mutex2 = new Mutex2();
251
115
  var singleton2;
252
116
  async function initChainFinalizedArchivist(context) {
253
117
  return await mutex2.runExclusive(async () => {
@@ -264,11 +128,11 @@ __name(initChainFinalizedArchivist, "initChainFinalizedArchivist");
264
128
  // src/archivists/PendingBlocks/archivist.ts
265
129
  import { startupSpanAsync as startupSpanAsync2 } from "@xyo-network/chain-utils";
266
130
  import { timeBudget as timeBudget2 } from "@xyo-network/xl1-sdk";
267
- import { Mutex as Mutex6 } from "async-mutex";
131
+ import { Mutex as Mutex4 } from "async-mutex";
268
132
 
269
133
  // src/archivists/PendingBlocks/local.ts
270
- import { Mutex as Mutex5 } from "async-mutex";
271
- var mutex3 = new Mutex5();
134
+ import { Mutex as Mutex3 } from "async-mutex";
135
+ var mutex3 = new Mutex3();
272
136
  var singleton3;
273
137
  var initLocalPendingBlocksArchivist = /* @__PURE__ */ __name(async ({ config }) => {
274
138
  return await mutex3.runExclusive(async () => {
@@ -280,7 +144,7 @@ var initLocalPendingBlocksArchivist = /* @__PURE__ */ __name(async ({ config })
280
144
  }, "initLocalPendingBlocksArchivist");
281
145
 
282
146
  // src/archivists/PendingBlocks/archivist.ts
283
- var mutex4 = new Mutex6();
147
+ var mutex4 = new Mutex4();
284
148
  var singleton4;
285
149
  async function initPendingBlocksArchivist(context) {
286
150
  return await mutex4.runExclusive(async () => {
@@ -297,12 +161,12 @@ __name(initPendingBlocksArchivist, "initPendingBlocksArchivist");
297
161
  // src/archivists/RejectedTransactions/archivist.ts
298
162
  import { startupSpanAsync as startupSpanAsync3 } from "@xyo-network/chain-utils";
299
163
  import { timeBudget as timeBudget3 } from "@xyo-network/xl1-sdk";
300
- import { Mutex as Mutex8 } from "async-mutex";
164
+ import { Mutex as Mutex6 } from "async-mutex";
301
165
 
302
166
  // src/archivists/RejectedTransactions/local.ts
303
167
  import { MemoryArchivist, MemoryArchivistConfigSchema } from "@xyo-network/archivist-memory";
304
- import { Mutex as Mutex7 } from "async-mutex";
305
- var mutex5 = new Mutex7();
168
+ import { Mutex as Mutex5 } from "async-mutex";
169
+ var mutex5 = new Mutex5();
306
170
  var singleton5;
307
171
  var initLocalRejectedTransactionsArchivist = /* @__PURE__ */ __name(async () => {
308
172
  return await mutex5.runExclusive(async () => {
@@ -320,7 +184,7 @@ var initLocalRejectedTransactionsArchivist = /* @__PURE__ */ __name(async () =>
320
184
  }, "initLocalRejectedTransactionsArchivist");
321
185
 
322
186
  // src/archivists/RejectedTransactions/archivist.ts
323
- var mutex6 = new Mutex8();
187
+ var mutex6 = new Mutex6();
324
188
  var singleton6;
325
189
  async function initRejectedTransactionsArchivist(params) {
326
190
  return await mutex6.runExclusive(async () => {
@@ -335,27 +199,27 @@ async function initRejectedTransactionsArchivist(params) {
335
199
  __name(initRejectedTransactionsArchivist, "initRejectedTransactionsArchivist");
336
200
 
337
201
  // src/archivists/StakeIntentState/archivist.ts
338
- import { assertEx as assertEx5 } from "@xylabs/sdk-js";
202
+ import { assertEx as assertEx2 } from "@xylabs/sdk-js";
339
203
  import { startupSpanAsync as startupSpanAsync4 } from "@xyo-network/chain-utils";
340
204
  import { timeBudget as timeBudget4 } from "@xyo-network/xl1-sdk";
341
- import { Mutex as Mutex10 } from "async-mutex";
205
+ import { Mutex as Mutex8 } from "async-mutex";
342
206
 
343
207
  // src/archivists/StakeIntentState/local.ts
344
- import { assertEx as assertEx4 } from "@xylabs/sdk-js";
345
- import { Mutex as Mutex9 } from "async-mutex";
346
- var mutex7 = new Mutex9();
208
+ import { assertEx } from "@xylabs/sdk-js";
209
+ import { Mutex as Mutex7 } from "async-mutex";
210
+ var mutex7 = new Mutex7();
347
211
  var singleton7;
348
212
  var initLocalStakeIntentStateArchivist = /* @__PURE__ */ __name(async ({ config }) => {
349
213
  return await mutex7.runExclusive(async () => {
350
214
  if (singleton7) return singleton7;
351
215
  const { root } = config.storage;
352
216
  singleton7 = await getLocalPersistentArchivist("local-stake-intent-state", "stakeIntent", "state", root);
353
- return assertEx4(singleton7, () => new Error("Failed to initialize stake intent state archivist"));
217
+ return assertEx(singleton7, () => new Error("Failed to initialize stake intent state archivist"));
354
218
  });
355
219
  }, "initLocalStakeIntentStateArchivist");
356
220
 
357
221
  // src/archivists/StakeIntentState/archivist.ts
358
- var mutex8 = new Mutex10();
222
+ var mutex8 = new Mutex8();
359
223
  var singleton8;
360
224
  var initStakeIntentStateArchivist = /* @__PURE__ */ __name(async (context) => {
361
225
  return await mutex8.runExclusive(async () => {
@@ -363,7 +227,7 @@ var initStakeIntentStateArchivist = /* @__PURE__ */ __name(async (context) => {
363
227
  return await timeBudget4("initStakeIntentStateArchivist", context.logger, async () => {
364
228
  const local = await startupSpanAsync4("StakeIntentStateArchivist:initLocal", () => initLocalStakeIntentStateArchivist(context));
365
229
  singleton8 = local;
366
- return assertEx5(singleton8, () => "StakeIntentStateArchivist is undefined");
230
+ return assertEx2(singleton8, () => "StakeIntentStateArchivist is undefined");
367
231
  }, 2e3, true);
368
232
  });
369
233
  }, "initStakeIntentStateArchivist");
@@ -401,12 +265,12 @@ async function createProducerChainStakeIntentBlock(prevBlock, producerAccount, r
401
265
  __name(createProducerChainStakeIntentBlock, "createProducerChainStakeIntentBlock");
402
266
 
403
267
  // src/evm/initChainId.ts
404
- import { assertEx as assertEx6, hexFrom, isDefined, isHex } from "@xylabs/sdk-js";
268
+ import { assertEx as assertEx3, hexFrom, isDefined, isHex } from "@xylabs/sdk-js";
405
269
  var canUseChainId = /* @__PURE__ */ __name((config) => {
406
270
  return isDefined(config.evm.chainId);
407
271
  }, "canUseChainId");
408
272
  var getChainId = /* @__PURE__ */ __name((config) => {
409
- const chainId = assertEx6(config.evm.chainId, () => "Missing config.evm.chainId");
273
+ const chainId = assertEx3(config.evm.chainId, () => "Missing config.evm.chainId");
410
274
  if (isHex(chainId, {
411
275
  prefix: true
412
276
  })) {
@@ -420,10 +284,10 @@ var getChainId = /* @__PURE__ */ __name((config) => {
420
284
  }, "getChainId");
421
285
 
422
286
  // src/evm/initEvmProvider.ts
423
- import { assertEx as assertEx9 } from "@xylabs/sdk-js";
287
+ import { assertEx as assertEx6 } from "@xylabs/sdk-js";
424
288
 
425
289
  // src/evm/initInfuraProvider.ts
426
- import { assertEx as assertEx7, isDefined as isDefined2 } from "@xylabs/sdk-js";
290
+ import { assertEx as assertEx4, isDefined as isDefined2 } from "@xylabs/sdk-js";
427
291
  import { InfuraProvider } from "ethers/providers";
428
292
  var instance;
429
293
  var initInfuraProvider = /* @__PURE__ */ __name((config) => {
@@ -436,8 +300,8 @@ var canUseInfuraProvider = /* @__PURE__ */ __name((config) => {
436
300
  return canUseChainId(config) && isDefined2(config.evm?.infura?.projectId) && isDefined2(config.evm?.infura?.projectSecret);
437
301
  }, "canUseInfuraProvider");
438
302
  var getInfuraProviderConfig = /* @__PURE__ */ __name((config) => {
439
- const projectId = assertEx7(config.evm?.infura?.projectId, () => "Missing config.evm.infura.projectId");
440
- const projectSecret = assertEx7(config.evm?.infura?.projectSecret, () => "Missing config.evm.infura.projectSecret");
303
+ const projectId = assertEx4(config.evm?.infura?.projectId, () => "Missing config.evm.infura.projectId");
304
+ const projectSecret = assertEx4(config.evm?.infura?.projectSecret, () => "Missing config.evm.infura.projectSecret");
441
305
  return [
442
306
  getChainId(config),
443
307
  projectId,
@@ -446,7 +310,7 @@ var getInfuraProviderConfig = /* @__PURE__ */ __name((config) => {
446
310
  }, "getInfuraProviderConfig");
447
311
 
448
312
  // src/evm/initJsonRpcProvider.ts
449
- import { assertEx as assertEx8, isDefined as isDefined3 } from "@xylabs/sdk-js";
313
+ import { assertEx as assertEx5, isDefined as isDefined3 } from "@xylabs/sdk-js";
450
314
  import { JsonRpcProvider } from "ethers/providers";
451
315
  var initJsonRpcProvider = /* @__PURE__ */ __name((config) => {
452
316
  const providerConfig = getJsonRpcProviderConfig(config);
@@ -456,7 +320,7 @@ var canUseJsonRpcProvider = /* @__PURE__ */ __name((config) => {
456
320
  return canUseChainId(config) && isDefined3(config.evm.jsonRpc?.url);
457
321
  }, "canUseJsonRpcProvider");
458
322
  var getJsonRpcProviderConfig = /* @__PURE__ */ __name((config) => {
459
- const jsonRpcUrl = assertEx8(config.evm.jsonRpc?.url, () => "Missing config.evm.jsonRpc.url");
323
+ const jsonRpcUrl = assertEx5(config.evm.jsonRpc?.url, () => "Missing config.evm.jsonRpc.url");
460
324
  return [
461
325
  jsonRpcUrl,
462
326
  getChainId(config)
@@ -472,7 +336,7 @@ var initEvmProvider = /* @__PURE__ */ __name(async ({ config }) => {
472
336
  } else if (canUseJsonRpcProvider(config)) {
473
337
  provider = initJsonRpcProvider(config);
474
338
  }
475
- return assertEx9(await provider, () => "No provider available");
339
+ return assertEx6(await provider, () => "No provider available");
476
340
  }, "initEvmProvider");
477
341
  var canUseEvmProvider = /* @__PURE__ */ __name(({ config }) => {
478
342
  return canUseInfuraProvider(config) || canUseJsonRpcProvider(config);
@@ -530,7 +394,7 @@ var createHealthServer = /* @__PURE__ */ __name((port, statusMonitor, logger) =>
530
394
  }, "createHealthServer");
531
395
  var initHealthEndpoints = /* @__PURE__ */ __name((params) => {
532
396
  const { config, logger, statusReporter } = params;
533
- const { healthCheckPort } = config.producer;
397
+ const { healthCheckPort } = config.actors.producer;
534
398
  return isDefined4(healthCheckPort) ? createHealthServer(healthCheckPort, statusReporter, logger) : void 0;
535
399
  }, "initHealthEndpoints");
536
400
 
@@ -575,7 +439,7 @@ var ServiceLifetime = {
575
439
 
576
440
  // src/init/initBalanceSummaryMap.ts
577
441
  import { BaseMongoSdk } from "@xylabs/mongo";
578
- import { assertEx as assertEx10 } from "@xylabs/sdk-js";
442
+ import { assertEx as assertEx7 } from "@xylabs/sdk-js";
579
443
  import { MongoMap } from "@xyo-network/chain-protocol";
580
444
  import { hasMongoConfig, MemoryMap } from "@xyo-network/xl1-sdk";
581
445
  async function initBalanceSummaryMap({ config, logger }) {
@@ -600,7 +464,7 @@ async function initBalanceSummaryMap({ config, logger }) {
600
464
  maxEntries: 5e3
601
465
  }
602
466
  });
603
- assertEx10(await result.start(), () => "Failed to start transfer summary map");
467
+ assertEx7(await result.start(), () => "Failed to start transfer summary map");
604
468
  return result;
605
469
  } else {
606
470
  logger?.warn("[API] Mongo configuration not found. Using MemoryMap for BalanceSummaryMap.");
@@ -610,18 +474,18 @@ async function initBalanceSummaryMap({ config, logger }) {
610
474
  __name(initBalanceSummaryMap, "initBalanceSummaryMap");
611
475
 
612
476
  // src/init/initBridgedModule.ts
613
- import { assertEx as assertEx11 } from "@xylabs/sdk-js";
477
+ import { assertEx as assertEx8 } from "@xylabs/sdk-js";
614
478
  import { asAttachableArchivistInstance } from "@xyo-network/archivist-model";
615
479
  import { asAttachableModuleInstance } from "@xyo-network/module-model";
616
- import { Mutex as Mutex11 } from "async-mutex";
617
- var initMutex = new Mutex11();
480
+ import { Mutex as Mutex9 } from "async-mutex";
481
+ var initMutex = new Mutex9();
618
482
  var bridgedModuleDictionary = {};
619
483
  var initBridgedModule = /* @__PURE__ */ __name(async ({ bridge, moduleName }) => {
620
484
  return await initMutex.runExclusive(async () => {
621
485
  const existing = bridgedModuleDictionary?.[bridge.address]?.[moduleName];
622
486
  if (existing) return existing;
623
- const mod = assertEx11(await bridge.resolve(moduleName), () => `Could not resolve ${moduleName}`);
624
- const moduleInstance = assertEx11(asAttachableModuleInstance(mod), () => `Could not convert ${moduleName} to attachable module instance`);
487
+ const mod = assertEx8(await bridge.resolve(moduleName), () => `Could not resolve ${moduleName}`);
488
+ const moduleInstance = assertEx8(asAttachableModuleInstance(mod), () => `Could not convert ${moduleName} to attachable module instance`);
625
489
  let moduleMap = bridgedModuleDictionary[bridge.address];
626
490
  if (moduleMap === void 0) {
627
491
  moduleMap = {};
@@ -632,22 +496,22 @@ var initBridgedModule = /* @__PURE__ */ __name(async ({ bridge, moduleName }) =>
632
496
  });
633
497
  }, "initBridgedModule");
634
498
  var initBridgedArchivistModule = /* @__PURE__ */ __name(async ({ bridge, moduleName }) => {
635
- return assertEx11(asAttachableArchivistInstance(await initBridgedModule({
499
+ return assertEx8(asAttachableArchivistInstance(await initBridgedModule({
636
500
  bridge,
637
501
  moduleName
638
502
  })), () => `Could not convert ${moduleName} to attachable archivist instance`);
639
503
  }, "initBridgedArchivistModule");
640
504
 
641
505
  // src/init/initEvmProvidersIfAvailable.ts
642
- import { asEthAddress, assertEx as assertEx12 } from "@xylabs/sdk-js";
643
- import { EvmChainContractViewer, EvmStakeEventsViewer, EvmStakeViewer } from "@xyo-network/chain-ethereum";
644
- import { SimpleChainContractViewer, SimpleStakeEventsViewer, SimpleStakeViewer, SimpleTimeSyncViewer, XYO_ZERO_ADDRESS } from "@xyo-network/xl1-sdk";
506
+ import { asEthAddress, assertEx as assertEx9 } from "@xylabs/sdk-js";
507
+ import { EvmChainContractViewer, EvmStakeEventsViewer, EvmStakeTotalsViewer, EvmStakeViewer } from "@xyo-network/chain-ethereum";
508
+ import { SimpleChainContractViewer, SimpleStakeEventsViewer, SimpleStakeTotalsViewer, SimpleStakeViewer, SimpleTimeSyncViewer, XYO_ZERO_ADDRESS } from "@xyo-network/xl1-sdk";
645
509
  async function initEvmProvidersIfAvailable(locator) {
646
510
  const { config, logger } = locator.context;
647
511
  if (canUseEvmProvider({
648
512
  config
649
513
  })) {
650
- const chainId = assertEx12(config.chain.id, () => "Missing config.chain.chainId (required for EVM providers)");
514
+ const chainId = assertEx9(config.chain.id, () => "Missing config.chain.chainId (required for EVM providers)");
651
515
  const provider2 = await initEvmProvider({
652
516
  config,
653
517
  logger
@@ -661,6 +525,10 @@ async function initEvmProvidersIfAvailable(locator) {
661
525
  address,
662
526
  provider: provider2
663
527
  }));
528
+ locator.register(EvmStakeTotalsViewer.factory(EvmStakeTotalsViewer.dependencies, {
529
+ address,
530
+ provider: provider2
531
+ }));
664
532
  locator.register(EvmChainContractViewer.factory(EvmChainContractViewer.dependencies, {
665
533
  address,
666
534
  provider: provider2
@@ -671,13 +539,14 @@ async function initEvmProvidersIfAvailable(locator) {
671
539
  } else {
672
540
  logger?.warn("EVM provider not available - running with memory based contract/stake viewers");
673
541
  const positions = [];
674
- const chainId = assertEx12(config.chain.id, () => "Missing config.chain.chainId (required for non-EVM providers)");
542
+ const chainId = assertEx9(config.chain.id, () => "Missing config.chain.chainId (required for non-EVM providers)");
675
543
  locator.register(SimpleStakeEventsViewer.factory(SimpleStakeEventsViewer.dependencies, {
676
544
  positions
677
545
  }));
678
546
  locator.register(SimpleStakeViewer.factory(SimpleStakeViewer.dependencies, {
679
547
  positions
680
548
  }));
549
+ locator.register(SimpleStakeTotalsViewer.factory(SimpleStakeTotalsViewer.dependencies, {}));
681
550
  locator.register(SimpleChainContractViewer.factory(SimpleChainContractViewer.dependencies, {
682
551
  chainId,
683
552
  minWithdrawalBlocks: 10,
@@ -690,6 +559,33 @@ async function initEvmProvidersIfAvailable(locator) {
690
559
  }
691
560
  __name(initEvmProvidersIfAvailable, "initEvmProvidersIfAvailable");
692
561
 
562
+ // src/init/initFinalizationArchivistIfNeeded.ts
563
+ import { assertEx as assertEx10 } from "@xylabs/sdk-js";
564
+ import { Account } from "@xyo-network/account";
565
+ import { createBootstrapHead } from "@xyo-network/chain-sdk";
566
+ import { asAttoXL1, findMostRecentBlock, flattenHydratedBlock } from "@xyo-network/xl1-sdk";
567
+ async function initFinalizationArchivistIfNeeded(archivist, config, account) {
568
+ const configuredChainId = config.chain.id;
569
+ const possibleHead = await findMostRecentBlock(archivist);
570
+ if (configuredChainId && possibleHead && possibleHead.chain !== configuredChainId) {
571
+ throw new Error(`Configured chain ID (${configuredChainId}) does not match the existing chain ID (${possibleHead.chain})`);
572
+ }
573
+ let possibleChainId = configuredChainId;
574
+ if (!possibleHead) {
575
+ possibleChainId = possibleChainId ?? (await Account.random()).address;
576
+ const chain = await createBootstrapHead(account, possibleChainId, asAttoXL1(20000000000000000000000n), config.chain.genesisRewardAddress ?? account.address);
577
+ const payloads = chain.flatMap((block) => flattenHydratedBlock(block));
578
+ await archivist.insert(payloads);
579
+ }
580
+ const head = possibleHead ?? assertEx10(await findMostRecentBlock(archivist), () => "No blocks found in chain archivist");
581
+ const chainId = assertEx10(possibleChainId, () => "Chain ID could not be determined");
582
+ return [
583
+ head,
584
+ chainId
585
+ ];
586
+ }
587
+ __name(initFinalizationArchivistIfNeeded, "initFinalizationArchivistIfNeeded");
588
+
693
589
  // src/init/initFinalizedArchivist.ts
694
590
  import { MongoDBArchivistV2 } from "@xyo-network/archivist-mongodb";
695
591
  async function initMongoFinalizedArchivist(config) {
@@ -715,7 +611,7 @@ import { ADDRESS_INDEX, generateXyoBaseWalletFromPhrase } from "@xyo-network/xl1
715
611
  var accountServiceSingleton;
716
612
  var initProducerAccount = /* @__PURE__ */ __name(async ({ config, logger }) => {
717
613
  if (accountServiceSingleton) return accountServiceSingleton;
718
- let walletPhrase = config.producer.mnemonic;
614
+ let walletPhrase = config.actors.producer.mnemonic;
719
615
  if (isUndefined(walletPhrase)) {
720
616
  logger?.warn("[Producer] No wallet mnemonic specified!");
721
617
  const randomMnemonic = HDWallet.generateMnemonic();
@@ -733,12 +629,12 @@ ${randomMnemonic}
733
629
  }, "initProducerAccount");
734
630
 
735
631
  // src/init/initSeedPhrase.ts
736
- import { assertEx as assertEx13, isString } from "@xylabs/sdk-js";
632
+ import { assertEx as assertEx11, isString } from "@xylabs/sdk-js";
737
633
  import { HDWallet as HDWallet2 } from "@xyo-network/wallet";
738
634
  async function initSeedPhrase({ config, logger, bios }) {
739
635
  const storedSeedPhrase = await bios.seedPhraseStore.get("os");
740
636
  logger?.debug(`[API] Stored mnemonic: ${storedSeedPhrase}`);
741
- const { mnemonic } = config.api;
637
+ const { mnemonic } = config.actors.api;
742
638
  if (isString(storedSeedPhrase) && isString(mnemonic)) {
743
639
  logger?.warn("[API] Stored mnemonic does not match supplied. Updating stored mnemonic to supplied.");
744
640
  await bios.seedPhraseStore.set("os", mnemonic);
@@ -753,12 +649,12 @@ async function initSeedPhrase({ config, logger, bios }) {
753
649
  }
754
650
  await bios.seedPhraseStore.set("os", seedPhrase);
755
651
  }
756
- return assertEx13(await bios.seedPhraseStore.get("os"), () => "Unable to acquire mnemonic from bios");
652
+ return assertEx11(await bios.seedPhraseStore.get("os"), () => "Unable to acquire mnemonic from bios");
757
653
  }
758
654
  __name(initSeedPhrase, "initSeedPhrase");
759
655
 
760
656
  // src/init/initServerNode.ts
761
- import { assertEx as assertEx14 } from "@xylabs/sdk-js";
657
+ import { assertEx as assertEx12 } from "@xylabs/sdk-js";
762
658
  import { asArchivistInstance } from "@xyo-network/archivist-model";
763
659
 
764
660
  // src/manifest/getLocator.ts
@@ -994,7 +890,7 @@ async function writableChainArchivistFromNode(node) {
994
890
  }
995
891
  __name(writableChainArchivistFromNode, "writableChainArchivistFromNode");
996
892
  async function readonlyChainArchivistFromNode(node) {
997
- return assertEx14(asArchivistInstance(await node.resolve("Chain:Validated"), {
893
+ return assertEx12(asArchivistInstance(await node.resolve("Chain:Validated"), {
998
894
  required: true
999
895
  }));
1000
896
  }
@@ -1019,7 +915,7 @@ async function initServerNode({ wallet, logger, config, node: providedNode, tran
1019
915
  transfersSummaryMap,
1020
916
  balancesSummaryMap
1021
917
  });
1022
- assertEx14(await node.start(), () => "Failed to start node");
918
+ assertEx12(await node.start(), () => "Failed to start node");
1023
919
  const writableChainArchivist = await writableChainArchivistFromNode(node);
1024
920
  const readonlyChainArchivist = await readonlyChainArchivistFromNode(node);
1025
921
  const pendingTransactionsArchivist = await pendingTransactionsArchivistFromNode(node);
@@ -1055,7 +951,7 @@ __name(initStatusReporter, "initStatusReporter");
1055
951
 
1056
952
  // src/init/initTransferSummaryMap.ts
1057
953
  import { BaseMongoSdk as BaseMongoSdk2 } from "@xylabs/mongo";
1058
- import { assertEx as assertEx15 } from "@xylabs/sdk-js";
954
+ import { assertEx as assertEx13 } from "@xylabs/sdk-js";
1059
955
  import { MongoMap as MongoMap2 } from "@xyo-network/chain-protocol";
1060
956
  import { hasMongoConfig as hasMongoConfig3, MemoryMap as MemoryMap2 } from "@xyo-network/xl1-sdk";
1061
957
  async function initTransferSummaryMap({ config, logger }) {
@@ -1080,7 +976,7 @@ async function initTransferSummaryMap({ config, logger }) {
1080
976
  maxEntries: 5e3
1081
977
  }
1082
978
  });
1083
- assertEx15(await result.start(), () => "Failed to start transfer summary map");
979
+ assertEx13(await result.start(), () => "Failed to start transfer summary map");
1084
980
  return result;
1085
981
  } else {
1086
982
  logger?.warn("[API] Mongo configuration not found. Using MemoryMap for TransferSummaryMap.");
@@ -1104,15 +1000,23 @@ async function initWallet({ config, logger }, mnemonic) {
1104
1000
  }
1105
1001
  __name(initWallet, "initWallet");
1106
1002
  async function initApiWallet({ config, logger }) {
1107
- const { mnemonic } = config.api;
1003
+ const { mnemonic } = config.actors.api;
1108
1004
  return await initWallet({
1109
1005
  config,
1110
1006
  logger
1111
1007
  }, mnemonic);
1112
1008
  }
1113
1009
  __name(initApiWallet, "initApiWallet");
1010
+ async function initBridgeWallet({ config, logger }) {
1011
+ const { mnemonic } = config.actors.bridge;
1012
+ return await initWallet({
1013
+ config,
1014
+ logger
1015
+ }, mnemonic);
1016
+ }
1017
+ __name(initBridgeWallet, "initBridgeWallet");
1114
1018
  async function initMempoolWallet({ config, logger }) {
1115
- const { mnemonic } = config.mempool;
1019
+ const { mnemonic } = config.actors.mempool;
1116
1020
  return await initWallet({
1117
1021
  config,
1118
1022
  logger
@@ -1120,7 +1024,7 @@ async function initMempoolWallet({ config, logger }) {
1120
1024
  }
1121
1025
  __name(initMempoolWallet, "initMempoolWallet");
1122
1026
  async function initProducerWallet({ config, logger }) {
1123
- const { mnemonic } = config.producer;
1027
+ const { mnemonic } = config.actors.producer;
1124
1028
  return await initWallet({
1125
1029
  config,
1126
1030
  logger
@@ -1128,23 +1032,31 @@ async function initProducerWallet({ config, logger }) {
1128
1032
  }
1129
1033
  __name(initProducerWallet, "initProducerWallet");
1130
1034
  async function initRewardsRedemptionApiWallet({ config, logger }) {
1131
- const { mnemonic } = config.rewardRedemptionApi;
1035
+ const { mnemonic } = config.actors.rewardRedemption;
1132
1036
  return await initWallet({
1133
1037
  config,
1134
1038
  logger
1135
1039
  }, mnemonic);
1136
1040
  }
1137
1041
  __name(initRewardsRedemptionApiWallet, "initRewardsRedemptionApiWallet");
1042
+ async function initValidatorWallet({ config, logger }) {
1043
+ const { mnemonic } = config.actors.mempool;
1044
+ return await initWallet({
1045
+ config,
1046
+ logger
1047
+ }, mnemonic);
1048
+ }
1049
+ __name(initValidatorWallet, "initValidatorWallet");
1138
1050
 
1139
1051
  // src/orchestrator/Orchestrator.ts
1140
- import { AbstractCreatable, creatable as creatable3 } from "@xylabs/sdk-js";
1141
- function _ts_decorate3(decorators, target, key, desc) {
1052
+ import { AbstractCreatable, creatable as creatable2 } from "@xylabs/sdk-js";
1053
+ function _ts_decorate2(decorators, target, key, desc) {
1142
1054
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1143
1055
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1144
1056
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1145
1057
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1146
1058
  }
1147
- __name(_ts_decorate3, "_ts_decorate");
1059
+ __name(_ts_decorate2, "_ts_decorate");
1148
1060
  var Orchestrator = class extends AbstractCreatable {
1149
1061
  static {
1150
1062
  __name(this, "Orchestrator");
@@ -1197,14 +1109,12 @@ var Orchestrator = class extends AbstractCreatable {
1197
1109
  this.logger?.log("[Orchestrator] Stopped...");
1198
1110
  }
1199
1111
  };
1200
- Orchestrator = _ts_decorate3([
1201
- creatable3()
1112
+ Orchestrator = _ts_decorate2([
1113
+ creatable2()
1202
1114
  ], Orchestrator);
1203
1115
  export {
1204
- BalanceActor,
1205
1116
  DefaultServiceProvider,
1206
1117
  GenericHost,
1207
- MempoolActor,
1208
1118
  NodeManifest,
1209
1119
  Orchestrator,
1210
1120
  PrivateChildManifests,
@@ -1223,11 +1133,13 @@ export {
1223
1133
  getLocator,
1224
1134
  initApiWallet,
1225
1135
  initBalanceSummaryMap,
1136
+ initBridgeWallet,
1226
1137
  initBridgedArchivistModule,
1227
1138
  initBridgedModule,
1228
1139
  initChainFinalizedArchivist,
1229
1140
  initEvmProvider,
1230
1141
  initEvmProvidersIfAvailable,
1142
+ initFinalizationArchivistIfNeeded,
1231
1143
  initFinalizedArchivist,
1232
1144
  initHealthEndpoints,
1233
1145
  initInfuraProvider,
@@ -1243,6 +1155,7 @@ export {
1243
1155
  initStakeIntentStateArchivist,
1244
1156
  initStatusReporter,
1245
1157
  initTransferSummaryMap,
1158
+ initValidatorWallet,
1246
1159
  loadNode
1247
1160
  };
1248
1161
  //# sourceMappingURL=index.mjs.map