@xyo-network/chain-orchestration 1.20.20 → 1.20.22

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 (115) hide show
  1. package/dist/browser/index.mjs +188 -122
  2. package/dist/browser/index.mjs.map +1 -1
  3. package/dist/browser/node/config/locators/actors/{validatorLocatorFromConfig.d.ts → finalizerLocatorFromConfig.d.ts} +2 -2
  4. package/dist/{neutral/node/config/locators/actors/validatorLocatorFromConfig.d.ts.map → browser/node/config/locators/actors/finalizerLocatorFromConfig.d.ts.map} +1 -1
  5. package/dist/browser/node/config/locators/actors/index.d.ts +1 -1
  6. package/dist/browser/node/config/locators/actors/index.d.ts.map +1 -1
  7. package/dist/browser/node/config/locators/actors/producerLocatorFromConfig.d.ts.map +1 -1
  8. package/dist/browser/node/config/locators/localLocatorFromConfig.d.ts +1 -1
  9. package/dist/browser/node/config/locators/localLocatorFromConfig.d.ts.map +1 -1
  10. package/dist/browser/node/config/locators/locatorsFromConfig.d.ts +1 -1
  11. package/dist/browser/node/config/locators/locatorsFromConfig.d.ts.map +1 -1
  12. package/dist/browser/node/config/locators/rootLocatorFromConfig.d.ts +1 -1
  13. package/dist/browser/node/config/locators/rootLocatorFromConfig.d.ts.map +1 -1
  14. package/dist/browser/node/config/tryParseConfig.d.ts +3 -154
  15. package/dist/browser/node/config/tryParseConfig.d.ts.map +1 -1
  16. package/dist/browser/node/init/initFinalizationArchivistIfNeeded.d.ts +6 -1
  17. package/dist/browser/node/init/initFinalizationArchivistIfNeeded.d.ts.map +1 -1
  18. package/dist/browser/node/manifest/NamedLmdbArchivist.d.ts +18 -0
  19. package/dist/browser/node/manifest/NamedLmdbArchivist.d.ts.map +1 -0
  20. package/dist/browser/node/manifest/getLocator.d.ts.map +1 -1
  21. package/dist/{neutral/shared/actor/ValidatorActor.d.ts → browser/shared/actor/FinalizerActor.d.ts} +7 -10
  22. package/dist/browser/shared/actor/FinalizerActor.d.ts.map +1 -0
  23. package/dist/browser/shared/actor/index.d.ts +1 -1
  24. package/dist/browser/shared/config/actors/{Validator.d.ts → Finalizer.d.ts} +18 -18
  25. package/dist/browser/shared/config/actors/{Validator.d.ts.map → Finalizer.d.ts.map} +1 -1
  26. package/dist/browser/shared/config/actors/Mempool.d.ts +14 -0
  27. package/dist/browser/shared/config/actors/Mempool.d.ts.map +1 -1
  28. package/dist/browser/shared/config/actors/index.d.ts +1 -1
  29. package/dist/browser/shared/config/actors/index.d.ts.map +1 -1
  30. package/dist/browser/shared/index.d.ts +1 -0
  31. package/dist/browser/shared/index.d.ts.map +1 -1
  32. package/dist/browser/shared/init/walletResolution.d.ts +4 -1
  33. package/dist/browser/shared/init/walletResolution.d.ts.map +1 -1
  34. package/dist/browser/shared/provider/SimpleRejectedTransactionsArchivistProvider.d.ts +31 -0
  35. package/dist/browser/shared/provider/SimpleRejectedTransactionsArchivistProvider.d.ts.map +1 -0
  36. package/dist/browser/shared/provider/index.d.ts +2 -0
  37. package/dist/browser/shared/provider/index.d.ts.map +1 -0
  38. package/dist/neutral/index.mjs +188 -122
  39. package/dist/neutral/index.mjs.map +1 -1
  40. package/dist/neutral/node/config/locators/actors/{validatorLocatorFromConfig.d.ts → finalizerLocatorFromConfig.d.ts} +2 -2
  41. package/dist/{browser/node/config/locators/actors/validatorLocatorFromConfig.d.ts.map → neutral/node/config/locators/actors/finalizerLocatorFromConfig.d.ts.map} +1 -1
  42. package/dist/neutral/node/config/locators/actors/index.d.ts +1 -1
  43. package/dist/neutral/node/config/locators/actors/index.d.ts.map +1 -1
  44. package/dist/neutral/node/config/locators/actors/producerLocatorFromConfig.d.ts.map +1 -1
  45. package/dist/neutral/node/config/locators/localLocatorFromConfig.d.ts +1 -1
  46. package/dist/neutral/node/config/locators/localLocatorFromConfig.d.ts.map +1 -1
  47. package/dist/neutral/node/config/locators/locatorsFromConfig.d.ts +1 -1
  48. package/dist/neutral/node/config/locators/locatorsFromConfig.d.ts.map +1 -1
  49. package/dist/neutral/node/config/locators/rootLocatorFromConfig.d.ts +1 -1
  50. package/dist/neutral/node/config/locators/rootLocatorFromConfig.d.ts.map +1 -1
  51. package/dist/neutral/node/config/tryParseConfig.d.ts +3 -154
  52. package/dist/neutral/node/config/tryParseConfig.d.ts.map +1 -1
  53. package/dist/neutral/node/init/initFinalizationArchivistIfNeeded.d.ts +6 -1
  54. package/dist/neutral/node/init/initFinalizationArchivistIfNeeded.d.ts.map +1 -1
  55. package/dist/neutral/node/manifest/NamedLmdbArchivist.d.ts +18 -0
  56. package/dist/neutral/node/manifest/NamedLmdbArchivist.d.ts.map +1 -0
  57. package/dist/neutral/node/manifest/getLocator.d.ts.map +1 -1
  58. package/dist/{node/shared/actor/ValidatorActor.d.ts → neutral/shared/actor/FinalizerActor.d.ts} +7 -10
  59. package/dist/neutral/shared/actor/FinalizerActor.d.ts.map +1 -0
  60. package/dist/neutral/shared/actor/index.d.ts +1 -1
  61. package/dist/neutral/shared/config/actors/{Validator.d.ts → Finalizer.d.ts} +18 -18
  62. package/dist/neutral/shared/config/actors/{Validator.d.ts.map → Finalizer.d.ts.map} +1 -1
  63. package/dist/neutral/shared/config/actors/Mempool.d.ts +14 -0
  64. package/dist/neutral/shared/config/actors/Mempool.d.ts.map +1 -1
  65. package/dist/neutral/shared/config/actors/index.d.ts +1 -1
  66. package/dist/neutral/shared/config/actors/index.d.ts.map +1 -1
  67. package/dist/neutral/shared/index.d.ts +1 -0
  68. package/dist/neutral/shared/index.d.ts.map +1 -1
  69. package/dist/neutral/shared/init/walletResolution.d.ts +4 -1
  70. package/dist/neutral/shared/init/walletResolution.d.ts.map +1 -1
  71. package/dist/neutral/shared/provider/SimpleRejectedTransactionsArchivistProvider.d.ts +31 -0
  72. package/dist/neutral/shared/provider/SimpleRejectedTransactionsArchivistProvider.d.ts.map +1 -0
  73. package/dist/neutral/shared/provider/index.d.ts +2 -0
  74. package/dist/neutral/shared/provider/index.d.ts.map +1 -0
  75. package/dist/node/index.mjs +324 -171
  76. package/dist/node/index.mjs.map +1 -1
  77. package/dist/node/node/config/locators/actors/{validatorLocatorFromConfig.d.ts → finalizerLocatorFromConfig.d.ts} +2 -2
  78. package/dist/node/node/config/locators/actors/{validatorLocatorFromConfig.d.ts.map → finalizerLocatorFromConfig.d.ts.map} +1 -1
  79. package/dist/node/node/config/locators/actors/index.d.ts +1 -1
  80. package/dist/node/node/config/locators/actors/index.d.ts.map +1 -1
  81. package/dist/node/node/config/locators/actors/producerLocatorFromConfig.d.ts.map +1 -1
  82. package/dist/node/node/config/locators/localLocatorFromConfig.d.ts +1 -1
  83. package/dist/node/node/config/locators/localLocatorFromConfig.d.ts.map +1 -1
  84. package/dist/node/node/config/locators/locatorsFromConfig.d.ts +1 -1
  85. package/dist/node/node/config/locators/locatorsFromConfig.d.ts.map +1 -1
  86. package/dist/node/node/config/locators/rootLocatorFromConfig.d.ts +1 -1
  87. package/dist/node/node/config/locators/rootLocatorFromConfig.d.ts.map +1 -1
  88. package/dist/node/node/config/tryParseConfig.d.ts +3 -154
  89. package/dist/node/node/config/tryParseConfig.d.ts.map +1 -1
  90. package/dist/node/node/init/initFinalizationArchivistIfNeeded.d.ts +6 -1
  91. package/dist/node/node/init/initFinalizationArchivistIfNeeded.d.ts.map +1 -1
  92. package/dist/node/node/manifest/NamedLmdbArchivist.d.ts +18 -0
  93. package/dist/node/node/manifest/NamedLmdbArchivist.d.ts.map +1 -0
  94. package/dist/node/node/manifest/getLocator.d.ts.map +1 -1
  95. package/dist/{browser/shared/actor/ValidatorActor.d.ts → node/shared/actor/FinalizerActor.d.ts} +7 -10
  96. package/dist/node/shared/actor/FinalizerActor.d.ts.map +1 -0
  97. package/dist/node/shared/actor/index.d.ts +1 -1
  98. package/dist/node/shared/config/actors/{Validator.d.ts → Finalizer.d.ts} +18 -18
  99. package/dist/node/shared/config/actors/{Validator.d.ts.map → Finalizer.d.ts.map} +1 -1
  100. package/dist/node/shared/config/actors/Mempool.d.ts +14 -0
  101. package/dist/node/shared/config/actors/Mempool.d.ts.map +1 -1
  102. package/dist/node/shared/config/actors/index.d.ts +1 -1
  103. package/dist/node/shared/config/actors/index.d.ts.map +1 -1
  104. package/dist/node/shared/index.d.ts +1 -0
  105. package/dist/node/shared/index.d.ts.map +1 -1
  106. package/dist/node/shared/init/walletResolution.d.ts +4 -1
  107. package/dist/node/shared/init/walletResolution.d.ts.map +1 -1
  108. package/dist/node/shared/provider/SimpleRejectedTransactionsArchivistProvider.d.ts +31 -0
  109. package/dist/node/shared/provider/SimpleRejectedTransactionsArchivistProvider.d.ts.map +1 -0
  110. package/dist/node/shared/provider/index.d.ts +2 -0
  111. package/dist/node/shared/provider/index.d.ts.map +1 -0
  112. package/package.json +23 -22
  113. package/dist/browser/shared/actor/ValidatorActor.d.ts.map +0 -1
  114. package/dist/neutral/shared/actor/ValidatorActor.d.ts.map +0 -1
  115. package/dist/node/shared/actor/ValidatorActor.d.ts.map +0 -1
@@ -1,7 +1,7 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
3
 
4
- // src/shared/actor/ValidatorActor.ts
4
+ // src/shared/actor/FinalizerActor.ts
5
5
  import { creatable } from "@xylabs/sdk-js";
6
6
  import { processPendingBlocks } from "@xyo-network/chain-sdk";
7
7
  import { ActorV3, BlockValidationViewerMoniker, BlockViewerMoniker, DeadLetterQueueRunnerMoniker, FinalizationRunnerMoniker, MempoolViewerMoniker } from "@xyo-network/xl1-sdk";
@@ -12,16 +12,14 @@ function _ts_decorate(decorators, target, key, desc) {
12
12
  return c > 3 && r && Object.defineProperty(target, key, r), r;
13
13
  }
14
14
  __name(_ts_decorate, "_ts_decorate");
15
- var ValidatorActor = class extends ActorV3 {
15
+ var FinalizerActor = class extends ActorV3 {
16
16
  static {
17
- __name(this, "ValidatorActor");
17
+ __name(this, "FinalizerActor");
18
18
  }
19
19
  _blockValidationViewer;
20
20
  _blockViewer;
21
21
  _deadLetterQueueRunner;
22
22
  _finalizationRunner;
23
- _lastValidatedBlock;
24
- _lastValidatedBlockHash;
25
23
  _mempoolViewer;
26
24
  get allowedProducers() {
27
25
  return this.params.config.allowedProducers ?? [];
@@ -51,9 +49,9 @@ var ValidatorActor = class extends ActorV3 {
51
49
  }
52
50
  async startHandler() {
53
51
  await super.startHandler();
54
- this.registerTimer("ValidatorActor", async () => {
52
+ this.registerTimer("FinalizerActor", async () => {
55
53
  await this.spanAsync("processPendingBlocks", async () => {
56
- this.logger?.debug("ValidatorActor: Processing pending blocks...");
54
+ this.logger?.debug("FinalizerActor: Processing pending blocks...");
57
55
  await processPendingBlocks({
58
56
  blockValidationViewer: this.blockValidationViewer,
59
57
  context: this.context,
@@ -72,9 +70,9 @@ var ValidatorActor = class extends ActorV3 {
72
70
  }, 2e3, 500);
73
71
  }
74
72
  };
75
- ValidatorActor = _ts_decorate([
73
+ FinalizerActor = _ts_decorate([
76
74
  creatable()
77
- ], ValidatorActor);
75
+ ], FinalizerActor);
78
76
 
79
77
  // src/shared/buildTelemetryConfig.ts
80
78
  function buildTelemetryConfig(config, serviceName, serviceVersion, defaultMetricsScrapePort = 9464) {
@@ -248,15 +246,36 @@ var isBridgeConfigContext = zodIsFactory2(BridgeConfigContext);
248
246
  var asBridgeConfigContext = zodAsFactory2(BridgeConfigContext, "asBridgeConfigContext");
249
247
  var toBridgeConfigContext = zodToFactory2(BridgeConfigContext, "toBridgeConfigContext");
250
248
 
251
- // src/shared/config/actors/Mempool.ts
252
- import { zodAsFactory as zodAsFactory3, zodIsFactory as zodIsFactory3, zodToFactory as zodToFactory3 } from "@xylabs/sdk-js";
249
+ // src/shared/config/actors/Finalizer.ts
250
+ import { AddressZod as AddressZod2, zodAsFactory as zodAsFactory3, zodIsFactory as zodIsFactory3, zodToFactory as zodToFactory3 } from "@xylabs/sdk-js";
253
251
  import { BaseConfigContextZod as BaseConfigContextZod3, HostActorConfigZod as HostActorConfigZod3 } from "@xyo-network/xl1-sdk";
254
- import { globalRegistry as globalRegistry4, z as z4 } from "zod";
255
- var MempoolConfigZod = HostActorConfigZod3.extend({
252
+ import { z as z4 } from "zod";
253
+ var FinalizerConfigZod = HostActorConfigZod3.extend({
254
+ accountIndex: ActorAccountIndexZod("finalizer.accountIndex"),
255
+ allowedProducers: z4.array(AddressZod2).optional(),
256
+ minCandidates: z4.number().int().min(0).default(1)
257
+ });
258
+ var isFinalizerConfig = zodIsFactory3(FinalizerConfigZod);
259
+ var asFinalizerConfig = zodAsFactory3(FinalizerConfigZod, "asFinalizerConfig");
260
+ var toFinalizerConfig = zodToFactory3(FinalizerConfigZod, "toFinalizerConfig");
261
+ var FinalizerConfigContext = BaseConfigContextZod3.extend({
262
+ config: FinalizerConfigZod
263
+ });
264
+ var isFinalizerConfigContext = zodIsFactory3(FinalizerConfigContext);
265
+ var asFinalizerConfigContext = zodAsFactory3(FinalizerConfigContext, "asFinalizerConfigContext");
266
+ var toFinalizerConfigContext = zodToFactory3(FinalizerConfigContext, "toFinalizerConfigContext");
267
+
268
+ // src/shared/config/actors/Mempool.ts
269
+ import { zodAsFactory as zodAsFactory4, zodIsFactory as zodIsFactory4, zodToFactory as zodToFactory4 } from "@xylabs/sdk-js";
270
+ import { BaseConfigContextZod as BaseConfigContextZod4, HostActorConfigZod as HostActorConfigZod4 } from "@xyo-network/xl1-sdk";
271
+ import { globalRegistry as globalRegistry4, z as z5 } from "zod";
272
+ var DEFAULT_MEMPOOL_BLOCK_PRUNE_INTERVAL = 1e3;
273
+ var DEFAULT_MEMPOOL_TRANSACTION_PRUNE_INTERVAL = 1e3;
274
+ var MempoolConfigZod = HostActorConfigZod4.extend({
256
275
  accountIndex: ActorAccountIndexZod("mempool.accountIndex"),
257
- enabled: z4.union([
258
- z4.string(),
259
- z4.boolean()
276
+ enabled: z5.union([
277
+ z5.string(),
278
+ z5.boolean()
260
279
  ]).default("false").transform((val, ctx) => {
261
280
  if (typeof val === "boolean") return val;
262
281
  const normalized = val.toLowerCase().trim();
@@ -277,113 +296,104 @@ var MempoolConfigZod = HostActorConfigZod3.extend({
277
296
  expected: "boolean",
278
297
  message: `Invalid boolean value: "${val}". Use true/false, 1/0, yes/no.`
279
298
  });
280
- return z4.NEVER;
299
+ return z5.NEVER;
281
300
  }).register(globalRegistry4, {
282
301
  default: "false",
283
302
  description: "Enable the Mempool",
284
303
  title: "mempool.enabled",
285
304
  type: "boolean"
305
+ }),
306
+ blockPruneInterval: z5.coerce.number().default(DEFAULT_MEMPOOL_BLOCK_PRUNE_INTERVAL).register(globalRegistry4, {
307
+ description: "The interval time (in milliseconds) between pending block prune attempts",
308
+ title: "mempool.blockPruneInterval",
309
+ type: "number"
310
+ }),
311
+ transactionPruneInterval: z5.coerce.number().default(DEFAULT_MEMPOOL_TRANSACTION_PRUNE_INTERVAL).register(globalRegistry4, {
312
+ description: "The interval time (in milliseconds) between pending transaction prune attempts",
313
+ title: "mempool.transactionPruneInterval",
314
+ type: "number"
286
315
  })
287
316
  });
288
- var isMempoolConfig = zodIsFactory3(MempoolConfigZod);
289
- var asMempoolConfig = zodAsFactory3(MempoolConfigZod, "asMempoolConfig");
290
- var toMempoolConfig = zodToFactory3(MempoolConfigZod, "toMempoolConfig");
291
- var MempoolConfigContext = BaseConfigContextZod3.extend({
317
+ var isMempoolConfig = zodIsFactory4(MempoolConfigZod);
318
+ var asMempoolConfig = zodAsFactory4(MempoolConfigZod, "asMempoolConfig");
319
+ var toMempoolConfig = zodToFactory4(MempoolConfigZod, "toMempoolConfig");
320
+ var MempoolConfigContext = BaseConfigContextZod4.extend({
292
321
  config: MempoolConfigZod
293
322
  });
294
- var isMempoolConfigContext = zodIsFactory3(MempoolConfigContext);
295
- var asMempoolConfigContext = zodAsFactory3(MempoolConfigContext, "asMempoolConfigContext");
296
- var toMempoolConfigContext = zodToFactory3(MempoolConfigContext, "toMempoolConfigContext");
323
+ var isMempoolConfigContext = zodIsFactory4(MempoolConfigContext);
324
+ var asMempoolConfigContext = zodAsFactory4(MempoolConfigContext, "asMempoolConfigContext");
325
+ var toMempoolConfigContext = zodToFactory4(MempoolConfigContext, "toMempoolConfigContext");
297
326
 
298
327
  // src/shared/config/actors/Producer.ts
299
- import { AddressZod as AddressZod2, asAddress, zodAsFactory as zodAsFactory4, zodIsFactory as zodIsFactory4, zodToFactory as zodToFactory4 } from "@xylabs/sdk-js";
300
- import { ActorConfigZod, BaseConfigContextZod as BaseConfigContextZod4 } from "@xyo-network/xl1-sdk";
301
- import { globalRegistry as globalRegistry5, z as z5 } from "zod";
328
+ import { AddressZod as AddressZod3, asAddress, zodAsFactory as zodAsFactory5, zodIsFactory as zodIsFactory5, zodToFactory as zodToFactory5 } from "@xylabs/sdk-js";
329
+ import { ActorConfigZod, BaseConfigContextZod as BaseConfigContextZod5 } from "@xyo-network/xl1-sdk";
330
+ import { globalRegistry as globalRegistry5, z as z6 } from "zod";
302
331
  var DEFAULT_BLOCK_PRODUCTION_CHECK_INTERVAL = 1e4;
303
- var ProducerConfigZod = ActorConfigZod.extend(z5.object({
332
+ var ProducerConfigZod = ActorConfigZod.extend(z6.object({
304
333
  accountIndex: ActorAccountIndexZod("producer.accountIndex"),
305
- allowlist: z5.preprocess((val) => {
334
+ allowlist: z6.preprocess((val) => {
306
335
  if (typeof val === "string") {
307
336
  return val.split(",").map((s) => asAddress(s.trim()));
308
337
  }
309
338
  return val;
310
- }, z5.array(AddressZod2).optional().register(globalRegistry5, {
339
+ }, z6.array(AddressZod3).optional().register(globalRegistry5, {
311
340
  description: "List of allowed producer addresses, if undefined anyone can participate",
312
341
  title: "allowlist",
313
342
  type: "array"
314
343
  })),
315
- blockProductionCheckInterval: z5.coerce.number().default(DEFAULT_BLOCK_PRODUCTION_CHECK_INTERVAL).register(globalRegistry5, {
344
+ blockProductionCheckInterval: z6.coerce.number().default(DEFAULT_BLOCK_PRODUCTION_CHECK_INTERVAL).register(globalRegistry5, {
316
345
  description: "The interval time (in milliseconds) between block production attempts",
317
346
  title: "producer.blockProductionCheckInterval",
318
347
  type: "number"
319
348
  }),
320
- disableIntentRedeclaration: z5.boolean().optional().register(globalRegistry5, {
349
+ disableIntentRedeclaration: z6.boolean().optional().register(globalRegistry5, {
321
350
  description: "Should the producer skip redeclaring their intent to continue producing blocks",
322
351
  title: "producer.disableIntentRedeclaration",
323
352
  type: "boolean"
324
353
  }),
325
- heartbeatInterval: z5.coerce.number().default(36e5).register(globalRegistry5, {
354
+ heartbeatInterval: z6.coerce.number().default(36e5).register(globalRegistry5, {
326
355
  description: "The number of milliseconds between heartbeats if no blocks are produced",
327
356
  title: "producer.heartbeatInterval",
328
357
  type: "number"
329
358
  }),
330
359
  // TODO: BigInt schema
331
- minStake: z5.coerce.number().default(1).register(globalRegistry5, {
360
+ minStake: z6.coerce.number().default(1).register(globalRegistry5, {
332
361
  description: "Minimum stake required to be a Producer",
333
362
  title: "producer.minStake",
334
363
  type: "number"
335
364
  }),
336
365
  // TODO: Address schema
337
- rewardAddress: z5.string().optional().register(globalRegistry5, {
366
+ rewardAddress: z6.string().optional().register(globalRegistry5, {
338
367
  description: "Address to receive block rewards",
339
368
  title: "producer.rewardAddress",
340
369
  type: "string"
341
370
  })
342
371
  }).shape);
343
- var isProducerConfig = zodIsFactory4(ProducerConfigZod);
344
- var asProducerConfig = zodAsFactory4(ProducerConfigZod, "asProducerConfig");
345
- var toProducerConfig = zodToFactory4(ProducerConfigZod, "toProducerConfig");
346
- var ProducerConfigContext = BaseConfigContextZod4.extend({
372
+ var isProducerConfig = zodIsFactory5(ProducerConfigZod);
373
+ var asProducerConfig = zodAsFactory5(ProducerConfigZod, "asProducerConfig");
374
+ var toProducerConfig = zodToFactory5(ProducerConfigZod, "toProducerConfig");
375
+ var ProducerConfigContext = BaseConfigContextZod5.extend({
347
376
  config: ProducerConfigZod
348
377
  });
349
- var isProducerConfigContext = zodIsFactory4(ProducerConfigContext);
350
- var asProducerConfigContext = zodAsFactory4(ProducerConfigContext, "asProducerConfigContext");
351
- var toProducerConfigContext = zodToFactory4(ProducerConfigContext, "toProducerConfigContext");
378
+ var isProducerConfigContext = zodIsFactory5(ProducerConfigContext);
379
+ var asProducerConfigContext = zodAsFactory5(ProducerConfigContext, "asProducerConfigContext");
380
+ var toProducerConfigContext = zodToFactory5(ProducerConfigContext, "toProducerConfigContext");
352
381
 
353
382
  // src/shared/config/actors/RewardRedemption.ts
354
- import { zodAsFactory as zodAsFactory5, zodIsFactory as zodIsFactory5, zodToFactory as zodToFactory5 } from "@xylabs/sdk-js";
355
- import { BaseConfigContextZod as BaseConfigContextZod5, HostActorConfigZod as HostActorConfigZod4 } from "@xyo-network/xl1-sdk";
356
- var RewardRedemptionConfigZod = HostActorConfigZod4.extend({
383
+ import { zodAsFactory as zodAsFactory6, zodIsFactory as zodIsFactory6, zodToFactory as zodToFactory6 } from "@xylabs/sdk-js";
384
+ import { BaseConfigContextZod as BaseConfigContextZod6, HostActorConfigZod as HostActorConfigZod5 } from "@xyo-network/xl1-sdk";
385
+ var RewardRedemptionConfigZod = HostActorConfigZod5.extend({
357
386
  accountIndex: ActorAccountIndexZod("rewardRedemption.accountIndex")
358
387
  });
359
- var isRewardRedemptionConfig = zodIsFactory5(RewardRedemptionConfigZod);
360
- var asRewardRedemptionConfig = zodAsFactory5(RewardRedemptionConfigZod, "asRewardRedemptionConfig");
361
- var toRewardRedemptionConfig = zodToFactory5(RewardRedemptionConfigZod, "toRewardRedemptionConfig");
362
- var RewardRedemptionConfigContext = BaseConfigContextZod5.extend({
388
+ var isRewardRedemptionConfig = zodIsFactory6(RewardRedemptionConfigZod);
389
+ var asRewardRedemptionConfig = zodAsFactory6(RewardRedemptionConfigZod, "asRewardRedemptionConfig");
390
+ var toRewardRedemptionConfig = zodToFactory6(RewardRedemptionConfigZod, "toRewardRedemptionConfig");
391
+ var RewardRedemptionConfigContext = BaseConfigContextZod6.extend({
363
392
  config: RewardRedemptionConfigZod
364
393
  });
365
- var isRewardRedemptionConfigContext = zodIsFactory5(RewardRedemptionConfigContext);
366
- var asRewardRedemptionConfigContext = zodAsFactory5(RewardRedemptionConfigContext, "asRewardRedemptionConfigContext");
367
- var toRewardRedemptionConfigContext = zodToFactory5(RewardRedemptionConfigContext, "toRewardRedemptionConfigContext");
368
-
369
- // src/shared/config/actors/Validator.ts
370
- import { AddressZod as AddressZod3, zodAsFactory as zodAsFactory6, zodIsFactory as zodIsFactory6, zodToFactory as zodToFactory6 } from "@xylabs/sdk-js";
371
- import { BaseConfigContextZod as BaseConfigContextZod6, HostActorConfigZod as HostActorConfigZod5 } from "@xyo-network/xl1-sdk";
372
- import { z as z6 } from "zod";
373
- var ValidatorConfigZod = HostActorConfigZod5.extend({
374
- accountIndex: ActorAccountIndexZod("validator.accountIndex"),
375
- allowedProducers: z6.array(AddressZod3).optional(),
376
- minCandidates: z6.number().int().min(0).optional()
377
- });
378
- var isValidatorConfig = zodIsFactory6(ValidatorConfigZod);
379
- var asValidatorConfig = zodAsFactory6(ValidatorConfigZod, "asValidatorConfig");
380
- var toValidatorConfig = zodToFactory6(ValidatorConfigZod, "toValidatorConfig");
381
- var ValidatorConfigContext = BaseConfigContextZod6.extend({
382
- config: ValidatorConfigZod
383
- });
384
- var isValidatorConfigContext = zodIsFactory6(ValidatorConfigContext);
385
- var asValidatorConfigContext = zodAsFactory6(ValidatorConfigContext, "asValidatorConfigContext");
386
- var toValidatorConfigContext = zodToFactory6(ValidatorConfigContext, "toValidatorConfigContext");
394
+ var isRewardRedemptionConfigContext = zodIsFactory6(RewardRedemptionConfigContext);
395
+ var asRewardRedemptionConfigContext = zodAsFactory6(RewardRedemptionConfigContext, "asRewardRedemptionConfigContext");
396
+ var toRewardRedemptionConfigContext = zodToFactory6(RewardRedemptionConfigContext, "toRewardRedemptionConfigContext");
387
397
 
388
398
  // src/shared/config/mergeConfig.ts
389
399
  import { deepMerge } from "@xylabs/sdk-js";
@@ -464,19 +474,19 @@ var RESERVED_ACTOR_INDEX = {
464
474
  [ROOT_WALLET_RUNTIME_ID]: 0,
465
475
  api: 4,
466
476
  bridge: 2,
477
+ finalizer: 6,
467
478
  mempool: 5,
468
479
  producer: 1,
469
- rewardRedemption: 3,
470
- validator: 6
480
+ rewardRedemption: 3
471
481
  };
472
482
  var ACTOR_LABELS = {
473
483
  [ROOT_WALLET_RUNTIME_ID]: "root/local-node",
474
484
  api: "api",
475
485
  bridge: "bridge",
486
+ finalizer: "finalizer",
476
487
  mempool: "mempool",
477
488
  producer: "producer",
478
- rewardRedemption: "rewardRedemption",
479
- validator: "validator"
489
+ rewardRedemption: "rewardRedemption"
480
490
  };
481
491
  var activeWalletReport;
482
492
  function getAccountLabel(actorName) {
@@ -500,11 +510,13 @@ function getInsecureGenesisRewardMnemonic() {
500
510
  }
501
511
  __name(getInsecureGenesisRewardMnemonic, "getInsecureGenesisRewardMnemonic");
502
512
  function resolveRootWallet(configuration) {
513
+ const isConfigured = configuration.mnemonic !== void 0;
503
514
  const mnemonic = configuration.mnemonic ?? BUILT_IN_DEV_MNEMONIC;
504
515
  const isBuiltInDevMnemonic = mnemonic === BUILT_IN_DEV_MNEMONIC;
505
516
  return {
506
517
  basePath: DEFAULT_WALLET_PATH,
507
518
  isBuiltInDevMnemonic,
519
+ isConfigured,
508
520
  mnemonic,
509
521
  mnemonicKind: isBuiltInDevMnemonic ? "built-in-dev" : "configured-root"
510
522
  };
@@ -552,6 +564,7 @@ async function resolveWalletReport(requestedActors, configuration) {
552
564
  actor.name,
553
565
  actor
554
566
  ]));
567
+ const isRootRequired = requestedActors.some((actorName) => !actorConfigMap.get(actorName)?.mnemonic);
555
568
  const resolvedActors = await Promise.all(requestedActors.map(async (actorName) => await resolveActorWallet(actorName, actorConfigMap.get(actorName), root)));
556
569
  const labelMap = /* @__PURE__ */ new Map([
557
570
  [
@@ -583,7 +596,19 @@ async function resolveWalletReport(requestedActors, configuration) {
583
596
  label: labels?.join(", ") ?? `shared[${accountIndex}]`
584
597
  };
585
598
  }));
586
- const insecureGenesisRewardAccounts = configuration.chain.genesisRewardAddress ? void 0 : await Promise.all(Array.from({
599
+ return {
600
+ actorSpecificAccounts: resolvedActors.filter((actor) => actor.source === "actor"),
601
+ isRootRequired,
602
+ requestedActors: [
603
+ ...requestedActors
604
+ ],
605
+ root,
606
+ sharedAccounts
607
+ };
608
+ }
609
+ __name(resolveWalletReport, "resolveWalletReport");
610
+ async function buildInsecureGenesisRewardAccounts() {
611
+ const accounts = await Promise.all(Array.from({
587
612
  length: SHARED_ACCOUNT_REPORT_COUNT
588
613
  }, (_, index) => index).map(async (accountIndex) => {
589
614
  const account = await resolveWalletMetadata({
@@ -598,17 +623,9 @@ async function resolveWalletReport(requestedActors, configuration) {
598
623
  label: accountIndex === 0 ? "genesisRewardAddress" : `genesisReward[${accountIndex}]`
599
624
  };
600
625
  }));
601
- return {
602
- actorSpecificAccounts: resolvedActors.filter((actor) => actor.source === "actor"),
603
- insecureGenesisRewardAccounts,
604
- requestedActors: [
605
- ...requestedActors
606
- ],
607
- root,
608
- sharedAccounts
609
- };
626
+ return accounts;
610
627
  }
611
- __name(resolveWalletReport, "resolveWalletReport");
628
+ __name(buildInsecureGenesisRewardAccounts, "buildInsecureGenesisRewardAccounts");
612
629
  async function initializeResolvedWalletReport(requestedActors, configuration) {
613
630
  activeWalletReport = await resolveWalletReport(requestedActors, configuration);
614
631
  return activeWalletReport;
@@ -651,8 +668,13 @@ function formatGenesisRewardAccount(account) {
651
668
  __name(formatGenesisRewardAccount, "formatGenesisRewardAccount");
652
669
  function formatWalletReport(report) {
653
670
  const sections = [];
654
- const showSecrets = report.root.isBuiltInDevMnemonic;
655
- sections.push(showSecrets ? "Development wallet detected." : "Wallet summary");
671
+ const showRootSection = report.isRootRequired || report.root.isConfigured;
672
+ const showSecrets = report.root.isBuiltInDevMnemonic && showRootSection;
673
+ if (showRootSection) {
674
+ sections.push(showSecrets ? "Development wallet detected." : "Wallet summary");
675
+ } else {
676
+ sections.push("Wallet summary (root wallet not required \u2014 every requested actor has its own mnemonic)");
677
+ }
656
678
  if (showSecrets) {
657
679
  sections.push([
658
680
  "DEVELOPMENT WALLET WARNING",
@@ -666,39 +688,42 @@ function formatWalletReport(report) {
666
688
  report.root.mnemonic
667
689
  ].join("\n"));
668
690
  }
669
- sections.push([
670
- `Shared wallet accounts from ${report.root.basePath}:`,
671
- "",
672
- report.sharedAccounts.map((account) => formatSharedAccount(account, showSecrets)).join("\n\n")
673
- ].join("\n"));
674
- if (report.actorSpecificAccounts.length > 0) {
691
+ if (showRootSection) {
675
692
  sections.push([
676
- "Actor-specific wallet accounts:",
693
+ `Shared wallet accounts from ${report.root.basePath}:`,
677
694
  "",
678
- report.actorSpecificAccounts.map((account) => formatActorSpecificAccount(account)).join("\n\n")
695
+ report.sharedAccounts.map((account) => formatSharedAccount(account, showSecrets)).join("\n\n")
679
696
  ].join("\n"));
680
697
  }
681
- if (report.insecureGenesisRewardAccounts) {
698
+ if (report.actorSpecificAccounts.length > 0) {
682
699
  sections.push([
683
- "INSECURE GENESIS REWARD WALLET WARNING",
684
- "",
685
- "XL1 is using a public, insecure fallback wallet for the genesis reward address.",
686
- "This phrase is intentionally unsafe and must never be used for real funds, production systems, or shared environments.",
687
- "Anyone with this information can fully control the genesis reward wallet.",
688
- "",
689
- "Genesis reward phrase:",
690
- INSECURE_GENESIS_REWARD_MNEMONIC,
691
- "",
692
- `The genesis reward is sent to index 0 and starts with ${(GENESIS_REWARD_AMOUNT / ATTO_XL1_PER_XL1).toString()} XL1.`,
693
- "",
694
- `Genesis reward wallet accounts from ${DEFAULT_WALLET_PATH}:`,
700
+ "Actor-specific wallet accounts:",
695
701
  "",
696
- report.insecureGenesisRewardAccounts.map((account) => formatGenesisRewardAccount(account)).join("\n\n")
702
+ report.actorSpecificAccounts.map((account) => formatActorSpecificAccount(account)).join("\n\n")
697
703
  ].join("\n"));
698
704
  }
699
705
  return sections.join("\n\n");
700
706
  }
701
707
  __name(formatWalletReport, "formatWalletReport");
708
+ function formatInsecureGenesisRewardWarning(accounts) {
709
+ return [
710
+ "INSECURE GENESIS REWARD WALLET WARNING",
711
+ "",
712
+ "XL1 is using a public, insecure fallback wallet for the genesis reward address.",
713
+ "This phrase is intentionally unsafe and must never be used for real funds, production systems, or shared environments.",
714
+ "Anyone with this information can fully control the genesis reward wallet.",
715
+ "",
716
+ "Genesis reward phrase:",
717
+ INSECURE_GENESIS_REWARD_MNEMONIC,
718
+ "",
719
+ `The genesis reward is sent to index 0 and starts with ${(GENESIS_REWARD_AMOUNT / ATTO_XL1_PER_XL1).toString()} XL1.`,
720
+ "",
721
+ `Genesis reward wallet accounts from ${DEFAULT_WALLET_PATH}:`,
722
+ "",
723
+ accounts.map((account) => formatGenesisRewardAccount(account)).join("\n\n")
724
+ ].join("\n");
725
+ }
726
+ __name(formatInsecureGenesisRewardWarning, "formatInsecureGenesisRewardWarning");
702
727
  async function resolveGenesisRewardAddress(config) {
703
728
  if (config.chain.genesisRewardAddress) return config.chain.genesisRewardAddress;
704
729
  const wallet = await generateXyoBaseWalletFromPhrase(INSECURE_GENESIS_REWARD_MNEMONIC);
@@ -867,6 +892,41 @@ Orchestrator = _ts_decorate2([
867
892
  creatable2()
868
893
  ], Orchestrator);
869
894
 
895
+ // src/shared/provider/SimpleRejectedTransactionsArchivistProvider.ts
896
+ import { assertEx as assertEx3 } from "@xylabs/sdk-js";
897
+ import { AbstractCreatableProvider, creatableProvider } from "@xyo-network/xl1-sdk";
898
+ function _ts_decorate3(decorators, target, key, desc) {
899
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
900
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
901
+ 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;
902
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
903
+ }
904
+ __name(_ts_decorate3, "_ts_decorate");
905
+ var RejectedTransactionsArchivistProviderMoniker = "RejectedTransactionsArchivistProvider";
906
+ var SimpleRejectedTransactionsArchivistProvider = class _SimpleRejectedTransactionsArchivistProvider extends AbstractCreatableProvider {
907
+ static {
908
+ __name(this, "SimpleRejectedTransactionsArchivistProvider");
909
+ }
910
+ static defaultMoniker = RejectedTransactionsArchivistProviderMoniker;
911
+ static dependencies = [];
912
+ static monikers = [
913
+ RejectedTransactionsArchivistProviderMoniker
914
+ ];
915
+ moniker = _SimpleRejectedTransactionsArchivistProvider.defaultMoniker;
916
+ get archivist() {
917
+ return this.params.archivist;
918
+ }
919
+ static async paramsHandler(params) {
920
+ return {
921
+ ...await super.paramsHandler(params),
922
+ archivist: assertEx3(params?.archivist, () => "archivist is required")
923
+ };
924
+ }
925
+ };
926
+ SimpleRejectedTransactionsArchivistProvider = _ts_decorate3([
927
+ creatableProvider()
928
+ ], SimpleRejectedTransactionsArchivistProvider);
929
+
870
930
  // src/node/config/locators/basicRemoteRunnerLocator.ts
871
931
  import { isAccountInstance } from "@xyo-network/sdk-js";
872
932
  import { basicRemoteRunnerLocator as sdkBasicRemoteRunnerLocator, JsonRpcAccountBalanceViewer, JsonRpcXyoSigner, SimpleXyoSigner } from "@xyo-network/xl1-sdk";
@@ -945,13 +1005,13 @@ async function contextFromConfigWithoutLocator(config, logger, serviceName, serv
945
1005
  __name(contextFromConfigWithoutLocator, "contextFromConfigWithoutLocator");
946
1006
 
947
1007
  // src/node/config/locators/localLocatorFromConfig.ts
948
- import { assertEx as assertEx7 } from "@xylabs/sdk-js";
1008
+ import { assertEx as assertEx8 } from "@xylabs/sdk-js";
949
1009
  import { validateHydratedBlock, validateHydratedBlockState } from "@xyo-network/chain-validation";
950
1010
  import { BlockCumulativeBalanceValidatorFactory, ProviderFactoryLocator, SimpleAccountBalanceViewer, SimpleBlockValidationViewer, SimpleBlockViewer, SimpleDeadLetterQueueRunner, SimpleDeadLetterQueueViewer, SimpleFinalizationRunner, SimpleFinalizationViewer, SimpleMempoolRunner, SimpleMempoolViewer, SimpleTransactionValidationViewer, SimpleTransactionViewer, SimpleWindowedBlockViewer, SimpleXyoConnectionViewer, SimpleXyoViewer, validateTransaction } from "@xyo-network/xl1-sdk";
951
1011
 
952
1012
  // src/node/init/initBalanceSummaryMap.ts
953
1013
  import { BaseMongoSdk } from "@xylabs/mongo";
954
- import { assertEx as assertEx3 } from "@xylabs/sdk-js";
1014
+ import { assertEx as assertEx4 } from "@xylabs/sdk-js";
955
1015
  import { MongoMap } from "@xyo-network/chain-protocol-driver-mongodb";
956
1016
  import { hasMongoConfig, MemoryMap } from "@xyo-network/xl1-sdk";
957
1017
  async function initBalanceSummaryMap({ logger, config }) {
@@ -976,7 +1036,7 @@ async function initBalanceSummaryMap({ logger, config }) {
976
1036
  maxEntries: 5e3
977
1037
  }
978
1038
  });
979
- assertEx3(await result.start(), () => "Failed to start transfer summary map");
1039
+ assertEx4(await result.start(), () => "Failed to start transfer summary map");
980
1040
  return result;
981
1041
  } else {
982
1042
  logger?.warn("[API] Mongo configuration not found. Using MemoryMap for BalanceSummaryMap.");
@@ -1038,11 +1098,11 @@ async function initEvmProvidersIfAvailable(locator) {
1038
1098
  __name(initEvmProvidersIfAvailable, "initEvmProvidersIfAvailable");
1039
1099
 
1040
1100
  // src/node/init/initFinalizationArchivistIfNeeded.ts
1041
- import { assertEx as assertEx4 } from "@xylabs/sdk-js";
1101
+ import { assertEx as assertEx5 } from "@xylabs/sdk-js";
1042
1102
  import { createBootstrapHead } from "@xyo-network/chain-sdk";
1043
1103
  import { Account } from "@xyo-network/sdk-js";
1044
1104
  import { asAttoXL1, findMostRecentBlock, flattenHydratedBlock } from "@xyo-network/xl1-sdk";
1045
- async function initFinalizationArchivistIfNeeded(archivist, config, account) {
1105
+ async function initFinalizationArchivistIfNeeded(archivist, config, account, options = {}) {
1046
1106
  const configuredChainId = config.chain.id;
1047
1107
  const possibleHead = await findMostRecentBlock(archivist);
1048
1108
  if (configuredChainId && possibleHead && possibleHead.chain !== configuredChainId) {
@@ -1051,13 +1111,18 @@ async function initFinalizationArchivistIfNeeded(archivist, config, account) {
1051
1111
  let possibleChainId = configuredChainId;
1052
1112
  if (!possibleHead) {
1053
1113
  possibleChainId = possibleChainId ?? (await Account.random()).address;
1114
+ if (!config.chain.genesisRewardAddress) {
1115
+ const accounts = await buildInsecureGenesisRewardAccounts();
1116
+ options.logger?.warn(formatInsecureGenesisRewardWarning(accounts));
1117
+ if (options.onInsecureGenesisConfirm) await options.onInsecureGenesisConfirm();
1118
+ }
1054
1119
  const genesisRewardAddress = await resolveGenesisRewardAddress(config);
1055
1120
  const chain = await createBootstrapHead(account, possibleChainId, asAttoXL1(GENESIS_REWARD_AMOUNT), genesisRewardAddress);
1056
1121
  const payloads = chain.flatMap((block) => flattenHydratedBlock(block));
1057
1122
  await archivist.insert(payloads);
1058
1123
  }
1059
- const head = possibleHead ?? assertEx4(await findMostRecentBlock(archivist), () => "No blocks found in chain archivist");
1060
- const chainId = assertEx4(possibleChainId, () => "Chain ID could not be determined");
1124
+ const head = possibleHead ?? assertEx5(await findMostRecentBlock(archivist), () => "No blocks found in chain archivist");
1125
+ const chainId = assertEx5(possibleChainId, () => "Chain ID could not be determined");
1061
1126
  return [
1062
1127
  head,
1063
1128
  chainId
@@ -1084,16 +1149,43 @@ async function initFinalizedArchivist(config) {
1084
1149
  __name(initFinalizedArchivist, "initFinalizedArchivist");
1085
1150
 
1086
1151
  // src/node/init/initServerNode.ts
1087
- import { assertEx as assertEx5 } from "@xylabs/sdk-js";
1152
+ import { assertEx as assertEx6 } from "@xylabs/sdk-js";
1088
1153
  import { asArchivistInstance } from "@xyo-network/sdk-js";
1089
1154
 
1090
1155
  // src/node/manifest/getLocator.ts
1091
1156
  import { isDefined as isDefined2 } from "@xylabs/sdk-js";
1157
+ import { LmdbArchivistConfigSchema } from "@xyo-network/archivist-lmdb";
1092
1158
  import { MongoDBArchivistV2 as MongoDBArchivistV22, MongoDBArchivistV2Deletable } from "@xyo-network/archivist-mongodb";
1093
1159
  import { ViewArchivist } from "@xyo-network/archivist-view";
1094
1160
  import { initTelemetry as initTelemetry2 } from "@xyo-network/chain-telemetry";
1095
1161
  import { AbstractModule, LoggerModuleStatusReporter, MemoryArchivist, MemorySentinel, ModuleFactoryLocator } from "@xyo-network/sdk-js";
1096
1162
  import { hasMongoConfig as hasMongoConfig2 } from "@xyo-network/xl1-sdk";
1163
+
1164
+ // src/node/manifest/NamedLmdbArchivist.ts
1165
+ import { LmdbArchivist } from "@xyo-network/archivist-lmdb";
1166
+ var NamedLmdbArchivist = class extends LmdbArchivist {
1167
+ static {
1168
+ __name(this, "NamedLmdbArchivist");
1169
+ }
1170
+ get dbName() {
1171
+ return this.config.dbName ?? "xyo-chain";
1172
+ }
1173
+ get location() {
1174
+ const cfgLocation = this.config.location;
1175
+ const paramsLocation = this.params?.location;
1176
+ if (cfgLocation) return cfgLocation;
1177
+ if (paramsLocation) return paramsLocation;
1178
+ throw new Error("NamedLmdbArchivist: no location configured (set storage.root or pass location in factory params)");
1179
+ }
1180
+ get storeName() {
1181
+ const cfg = this.config;
1182
+ const derived = cfg.storeName ?? cfg.payloadSdkConfig?.collection ?? cfg.name;
1183
+ if (!derived) throw new Error("NamedLmdbArchivist: no storeName (or payloadSdkConfig.collection / name) configured");
1184
+ return derived;
1185
+ }
1186
+ };
1187
+
1188
+ // src/node/manifest/getLocator.ts
1097
1189
  var getLocator = /* @__PURE__ */ __name(async ({ logger, config }) => {
1098
1190
  const { otlpEndpoint } = config.telemetry?.otel ?? {};
1099
1191
  const { path: endpoint = "/metrics", port = 9465 } = config.telemetry?.metrics?.scrape ?? {};
@@ -1131,6 +1223,19 @@ var getLocator = /* @__PURE__ */ __name(async ({ logger, config }) => {
1131
1223
  locator.register(MongoDBArchivistV2Deletable.factory(params), {
1132
1224
  "network.xyo.storage.capabilities.delete": "enabled"
1133
1225
  }, false);
1226
+ } else if (isDefined2(config.storage?.root)) {
1227
+ const lmdbLocation = config.storage.root;
1228
+ const lmdbConfig = {
1229
+ clearStoreOnStart: false,
1230
+ location: lmdbLocation,
1231
+ schema: LmdbArchivistConfigSchema
1232
+ };
1233
+ locator.register(NamedLmdbArchivist.factory({
1234
+ config: lmdbConfig,
1235
+ meterProvider,
1236
+ statusReporter,
1237
+ traceProvider
1238
+ }), void 0, true);
1134
1239
  }
1135
1240
  locator.register(MemoryArchivist.factory({
1136
1241
  traceProvider,
@@ -1371,7 +1476,7 @@ async function writableChainArchivistFromNode(node) {
1371
1476
  }
1372
1477
  __name(writableChainArchivistFromNode, "writableChainArchivistFromNode");
1373
1478
  async function readonlyChainArchivistFromNode(node) {
1374
- return assertEx5(asArchivistInstance(await node.resolve("Chain:Validated"), {
1479
+ return assertEx6(asArchivistInstance(await node.resolve("Chain:Validated"), {
1375
1480
  required: true
1376
1481
  }));
1377
1482
  }
@@ -1402,7 +1507,7 @@ async function rejectedTransactionsArchivistFromNode(node) {
1402
1507
  __name(rejectedTransactionsArchivistFromNode, "rejectedTransactionsArchivistFromNode");
1403
1508
  async function initServerNode(context, wallet, providedNode) {
1404
1509
  const node = providedNode ?? await loadNode(context, wallet);
1405
- assertEx5(await node.start(), () => "Failed to start node");
1510
+ assertEx6(await node.start(), () => "Failed to start node");
1406
1511
  const writableChainArchivist = await writableChainArchivistFromNode(node);
1407
1512
  const readonlyChainArchivist = await readonlyChainArchivistFromNode(node);
1408
1513
  const pendingTransactionsArchivist = await pendingTransactionsArchivistFromNode(node);
@@ -1423,7 +1528,7 @@ __name(initServerNode, "initServerNode");
1423
1528
 
1424
1529
  // src/node/init/initTransferSummaryMap.ts
1425
1530
  import { BaseMongoSdk as BaseMongoSdk2 } from "@xylabs/mongo";
1426
- import { assertEx as assertEx6 } from "@xylabs/sdk-js";
1531
+ import { assertEx as assertEx7 } from "@xylabs/sdk-js";
1427
1532
  import { MongoMap as MongoMap2 } from "@xyo-network/chain-protocol-driver-mongodb";
1428
1533
  import { hasMongoConfig as hasMongoConfig3, MemoryMap as MemoryMap2 } from "@xyo-network/xl1-sdk";
1429
1534
  async function initTransferSummaryMap({ logger, config }) {
@@ -1448,7 +1553,7 @@ async function initTransferSummaryMap({ logger, config }) {
1448
1553
  maxEntries: 5e3
1449
1554
  }
1450
1555
  });
1451
- assertEx6(await result.start(), () => "Failed to start transfer summary map");
1556
+ assertEx7(await result.start(), () => "Failed to start transfer summary map");
1452
1557
  return result;
1453
1558
  } else {
1454
1559
  logger?.warn("[API] Mongo configuration not found. Using MemoryMap for TransferSummaryMap.");
@@ -1469,12 +1574,15 @@ var validateHydratedBlockStateWithCumulativeBalance = /* @__PURE__ */ __name(asy
1469
1574
  ...cumulativeErrors
1470
1575
  ];
1471
1576
  }, "validateHydratedBlockStateWithCumulativeBalance");
1472
- async function localLocatorFromConfig(context, validateDepsOnRegister = false) {
1473
- const balancesSummaryMap = assertEx7(await initBalanceSummaryMap(context), () => "Balance Summary Map not initialized");
1474
- const transfersSummaryMap = assertEx7(await initTransferSummaryMap(context), () => "Transfer Summary Map not initialized");
1577
+ async function localLocatorFromConfig(context, validateDepsOnRegister = false, onInsecureGenesisConfirm) {
1578
+ const balancesSummaryMap = assertEx8(await initBalanceSummaryMap(context), () => "Balance Summary Map not initialized");
1579
+ const transfersSummaryMap = assertEx8(await initTransferSummaryMap(context), () => "Transfer Summary Map not initialized");
1475
1580
  const wallet = await initActorWallet(context);
1476
1581
  const { writableChainArchivist, readonlyChainArchivist, pendingTransactionsArchivist, pendingBlocksArchivist, rejectedBlocksArchivist, rejectedTransactionsArchivist } = await initServerNode(context, wallet);
1477
- await initFinalizationArchivistIfNeeded(writableChainArchivist, context.config, wallet);
1582
+ await initFinalizationArchivistIfNeeded(writableChainArchivist, context.config, wallet, {
1583
+ logger: context.logger,
1584
+ onInsecureGenesisConfirm
1585
+ });
1478
1586
  const locator = new ProviderFactoryLocator(context, {}, validateDepsOnRegister);
1479
1587
  locator.registerMany([
1480
1588
  SimpleMempoolViewer.factory(SimpleMempoolViewer.dependencies, {
@@ -1522,6 +1630,9 @@ async function localLocatorFromConfig(context, validateDepsOnRegister = false) {
1522
1630
  SimpleDeadLetterQueueViewer.factory(SimpleDeadLetterQueueViewer.dependencies, {
1523
1631
  rejectedBlocksArchivist,
1524
1632
  rejectedTransactionsArchivist
1633
+ }),
1634
+ SimpleRejectedTransactionsArchivistProvider.factory(SimpleRejectedTransactionsArchivistProvider.dependencies, {
1635
+ archivist: rejectedTransactionsArchivist
1525
1636
  })
1526
1637
  ]);
1527
1638
  return locator;
@@ -1606,9 +1717,9 @@ async function bridgeLocatorFromConfig(context, parent) {
1606
1717
  }
1607
1718
  __name(bridgeLocatorFromConfig, "bridgeLocatorFromConfig");
1608
1719
 
1609
- // src/node/config/locators/actors/mempoolLocatorFromConfig.ts
1720
+ // src/node/config/locators/actors/finalizerLocatorFromConfig.ts
1610
1721
  import { ProviderFactoryLocator as ProviderFactoryLocator4 } from "@xyo-network/xl1-sdk";
1611
- function mempoolLocatorFromConfig(context, parent) {
1722
+ function finalizerLocatorFromConfig(context, parent) {
1612
1723
  const locator = new ProviderFactoryLocator4({
1613
1724
  ...context,
1614
1725
  locator: parent
@@ -1617,16 +1728,29 @@ function mempoolLocatorFromConfig(context, parent) {
1617
1728
  locator.freeze();
1618
1729
  return locator;
1619
1730
  }
1731
+ __name(finalizerLocatorFromConfig, "finalizerLocatorFromConfig");
1732
+
1733
+ // src/node/config/locators/actors/mempoolLocatorFromConfig.ts
1734
+ import { ProviderFactoryLocator as ProviderFactoryLocator5 } from "@xyo-network/xl1-sdk";
1735
+ function mempoolLocatorFromConfig(context, parent) {
1736
+ const locator = new ProviderFactoryLocator5({
1737
+ ...context,
1738
+ locator: parent
1739
+ });
1740
+ locator.registerMany([]);
1741
+ locator.freeze();
1742
+ return locator;
1743
+ }
1620
1744
  __name(mempoolLocatorFromConfig, "mempoolLocatorFromConfig");
1621
1745
 
1622
1746
  // src/node/config/locators/actors/producerLocatorFromConfig.ts
1623
1747
  import { asAddress as asAddress2 } from "@xylabs/sdk-js";
1624
1748
  import { SimpleBlockRunner } from "@xyo-network/chain-services";
1625
- import { ProviderFactoryLocator as ProviderFactoryLocator5 } from "@xyo-network/xl1-sdk";
1749
+ import { ProviderFactoryLocator as ProviderFactoryLocator6 } from "@xyo-network/xl1-sdk";
1626
1750
  async function producerLocatorFromConfig(context, parent) {
1627
1751
  const { logger, config } = context;
1628
1752
  const account = await initActorAccount(context);
1629
- const locator = new ProviderFactoryLocator5({
1753
+ const locator = new ProviderFactoryLocator6({
1630
1754
  ...context,
1631
1755
  locator: parent
1632
1756
  });
@@ -1635,10 +1759,13 @@ async function producerLocatorFromConfig(context, parent) {
1635
1759
  if (rewardAddress === account.address) {
1636
1760
  logger?.warn(`Using producer account address as reward address: ${account.address}`);
1637
1761
  }
1762
+ const rejectedTransactionsProvider = await parent?.tryGetInstance(RejectedTransactionsArchivistProviderMoniker);
1763
+ const rejectedTransactionsArchivist = rejectedTransactionsProvider?.archivist;
1638
1764
  locator.registerMany([
1639
1765
  SimpleBlockRunner.factory(SimpleBlockRunner.dependencies, {
1640
1766
  account,
1641
- rewardAddress
1767
+ rewardAddress,
1768
+ rejectedTransactionsArchivist
1642
1769
  })
1643
1770
  ]);
1644
1771
  locator.freeze();
@@ -1647,9 +1774,9 @@ async function producerLocatorFromConfig(context, parent) {
1647
1774
  __name(producerLocatorFromConfig, "producerLocatorFromConfig");
1648
1775
 
1649
1776
  // src/node/config/locators/actors/rewardRedemptionLocatorFromConfig.ts
1650
- import { JsonRpcAccountBalanceViewer as JsonRpcAccountBalanceViewer4, JsonRpcBlockViewer as JsonRpcBlockViewer2, JsonRpcFinalizationViewer as JsonRpcFinalizationViewer2, JsonRpcMempoolRunner as JsonRpcMempoolRunner2, JsonRpcMempoolViewer as JsonRpcMempoolViewer2, JsonRpcXyoRunner as JsonRpcXyoRunner2, JsonRpcXyoViewer as JsonRpcXyoViewer2, ProviderFactoryLocator as ProviderFactoryLocator6, SimpleXyoConnectionRunner as SimpleXyoConnectionRunner3, SimpleXyoGatewayRunner as SimpleXyoGatewayRunner2, SimpleXyoRunner as SimpleXyoRunner3, SimpleXyoSigner as SimpleXyoSigner3 } from "@xyo-network/xl1-sdk";
1777
+ import { JsonRpcAccountBalanceViewer as JsonRpcAccountBalanceViewer4, JsonRpcBlockViewer as JsonRpcBlockViewer2, JsonRpcFinalizationViewer as JsonRpcFinalizationViewer2, JsonRpcMempoolRunner as JsonRpcMempoolRunner2, JsonRpcMempoolViewer as JsonRpcMempoolViewer2, JsonRpcXyoRunner as JsonRpcXyoRunner2, JsonRpcXyoViewer as JsonRpcXyoViewer2, ProviderFactoryLocator as ProviderFactoryLocator7, SimpleXyoConnectionRunner as SimpleXyoConnectionRunner3, SimpleXyoGatewayRunner as SimpleXyoGatewayRunner2, SimpleXyoRunner as SimpleXyoRunner3, SimpleXyoSigner as SimpleXyoSigner3 } from "@xyo-network/xl1-sdk";
1651
1778
  async function rewardRedemptionLocatorFromConfig(context, parent) {
1652
- const locator = new ProviderFactoryLocator6({
1779
+ const locator = new ProviderFactoryLocator7({
1653
1780
  ...context,
1654
1781
  locator: parent
1655
1782
  });
@@ -1679,22 +1806,9 @@ async function rewardRedemptionLocatorFromConfig(context, parent) {
1679
1806
  }
1680
1807
  __name(rewardRedemptionLocatorFromConfig, "rewardRedemptionLocatorFromConfig");
1681
1808
 
1682
- // src/node/config/locators/actors/validatorLocatorFromConfig.ts
1683
- import { ProviderFactoryLocator as ProviderFactoryLocator7 } from "@xyo-network/xl1-sdk";
1684
- function validatorLocatorFromConfig(context, parent) {
1685
- const locator = new ProviderFactoryLocator7({
1686
- ...context,
1687
- locator: parent
1688
- });
1689
- locator.registerMany([]);
1690
- locator.freeze();
1691
- return locator;
1692
- }
1693
- __name(validatorLocatorFromConfig, "validatorLocatorFromConfig");
1694
-
1695
1809
  // src/node/config/locators/rootLocatorFromConfig.ts
1696
1810
  import { commonLocatorFromConfig, remoteLocatorFromConfig } from "@xyo-network/xl1-sdk";
1697
- async function rootLocatorFromConfig(context, validateDepsOnRegister = false) {
1811
+ async function rootLocatorFromConfig(context, validateDepsOnRegister = false, onInsecureGenesisConfirm) {
1698
1812
  const { config } = context;
1699
1813
  let locator = await commonLocatorFromConfig(context, validateDepsOnRegister);
1700
1814
  const newLocator = await (config.remote.rpc ? remoteLocatorFromConfig(locator.context, validateDepsOnRegister) : localLocatorFromConfig({
@@ -1703,7 +1817,7 @@ async function rootLocatorFromConfig(context, validateDepsOnRegister = false) {
1703
1817
  ...locator.context.config,
1704
1818
  ...context.config
1705
1819
  }
1706
- }, validateDepsOnRegister));
1820
+ }, validateDepsOnRegister, onInsecureGenesisConfirm));
1707
1821
  locator = newLocator;
1708
1822
  locator = await initEvmProvidersIfAvailable(locator);
1709
1823
  locator.freeze();
@@ -1712,15 +1826,17 @@ async function rootLocatorFromConfig(context, validateDepsOnRegister = false) {
1712
1826
  __name(rootLocatorFromConfig, "rootLocatorFromConfig");
1713
1827
 
1714
1828
  // src/node/config/locators/locatorsFromConfig.ts
1715
- async function locatorsFromConfig(context, { actors, ...config }) {
1829
+ async function locatorsFromConfig(context, { actors, ...config }, onInsecureGenesisConfirm) {
1830
+ const rootContext = {
1831
+ ...context,
1832
+ config: {
1833
+ ...config,
1834
+ name: "_root"
1835
+ }
1836
+ };
1837
+ const rootLocator = await rootLocatorFromConfig(rootContext, false, onInsecureGenesisConfirm);
1716
1838
  const result = {
1717
- _root: await rootLocatorFromConfig({
1718
- ...context,
1719
- config: {
1720
- ...config,
1721
- name: "_root"
1722
- }
1723
- })
1839
+ _root: rootLocator
1724
1840
  };
1725
1841
  for (const actorConfig of actors) {
1726
1842
  switch (actorConfig.name) {
@@ -1745,10 +1861,10 @@ async function locatorsFromConfig(context, { actors, ...config }) {
1745
1861
  }, result._root);
1746
1862
  break;
1747
1863
  }
1748
- case "validator": {
1749
- result[actorConfig.name] = await validatorLocatorFromConfig({
1864
+ case "finalizer": {
1865
+ result[actorConfig.name] = await finalizerLocatorFromConfig({
1750
1866
  ...context,
1751
- config: ValidatorConfigZod.parse(deepMerge2(config, actorConfig))
1867
+ config: FinalizerConfigZod.parse(deepMerge2(config, actorConfig))
1752
1868
  }, result._root);
1753
1869
  break;
1754
1870
  }
@@ -1778,6 +1894,21 @@ import { ConfigZod } from "@xyo-network/xl1-sdk";
1778
1894
  import { cosmiconfig } from "cosmiconfig";
1779
1895
  var configName = "xyo";
1780
1896
  var configSection = "xl1";
1897
+ var ConfigFileNotFoundError = class extends Error {
1898
+ static {
1899
+ __name(this, "ConfigFileNotFoundError");
1900
+ }
1901
+ constructor(configPath) {
1902
+ super(`Config file not found: ${configPath}`);
1903
+ this.name = "ConfigFileNotFoundError";
1904
+ }
1905
+ };
1906
+ var isMissingFileError = /* @__PURE__ */ __name((error) => {
1907
+ return error instanceof Error && "code" in error && error.code === "ENOENT";
1908
+ }, "isMissingFileError");
1909
+ var isRecord = /* @__PURE__ */ __name((value) => {
1910
+ return typeof value === "object" && value !== null;
1911
+ }, "isRecord");
1781
1912
  async function tryParseConfig(options) {
1782
1913
  const { configPath, searchPlaces } = options ?? {};
1783
1914
  const explorer = cosmiconfig(configName, {
@@ -1785,10 +1916,25 @@ async function tryParseConfig(options) {
1785
1916
  // loaders: { '.ts': TypeScriptLoader() },
1786
1917
  searchPlaces
1787
1918
  });
1788
- const result = isDefined4(configPath) ? (await explorer.load(configPath))?.config : (await explorer.search())?.config;
1789
- if (isDefined4(result) && !isNull(result)) {
1919
+ let result;
1920
+ if (isDefined4(configPath)) {
1921
+ try {
1922
+ result = (await explorer.load(configPath))?.config;
1923
+ } catch (error) {
1924
+ if (isMissingFileError(error)) {
1925
+ throw new ConfigFileNotFoundError(configPath);
1926
+ }
1927
+ throw error;
1928
+ }
1929
+ if (!isDefined4(result) || isNull(result)) {
1930
+ throw new ConfigFileNotFoundError(configPath);
1931
+ }
1932
+ } else {
1933
+ result = (await explorer.search())?.config;
1934
+ }
1935
+ if (isRecord(result)) {
1790
1936
  const section = result[configSection];
1791
- if (isDefined4(section) && typeof section === "object") {
1937
+ if (isRecord(section)) {
1792
1938
  const parsed = ConfigZod.loose().parse(section);
1793
1939
  return typeof section.mnemonic === "string" ? {
1794
1940
  ...parsed,
@@ -1812,8 +1958,14 @@ export {
1812
1958
  BridgeConfigContext,
1813
1959
  BridgeConfigZod,
1814
1960
  BridgeSettingsZod,
1961
+ ConfigFileNotFoundError,
1815
1962
  DEFAULT_BLOCK_PRODUCTION_CHECK_INTERVAL,
1963
+ DEFAULT_MEMPOOL_BLOCK_PRUNE_INTERVAL,
1964
+ DEFAULT_MEMPOOL_TRANSACTION_PRUNE_INTERVAL,
1816
1965
  DefaultServiceProvider,
1966
+ FinalizerActor,
1967
+ FinalizerConfigContext,
1968
+ FinalizerConfigZod,
1817
1969
  GENESIS_REWARD_AMOUNT,
1818
1970
  GenericHost,
1819
1971
  INSECURE_GENESIS_REWARD_MNEMONIC,
@@ -1826,31 +1978,32 @@ export {
1826
1978
  ProducerConfigZod,
1827
1979
  PublicChildManifests,
1828
1980
  ROOT_WALLET_RUNTIME_ID,
1981
+ RejectedTransactionsArchivistProviderMoniker,
1829
1982
  RewardRedemptionConfigContext,
1830
1983
  RewardRedemptionConfigZod,
1831
1984
  SHARED_ACCOUNT_REPORT_COUNT,
1832
1985
  ServiceLifetime,
1833
- ValidatorActor,
1834
- ValidatorConfigContext,
1835
- ValidatorConfigZod,
1986
+ SimpleRejectedTransactionsArchivistProvider,
1836
1987
  asApiConfig,
1837
1988
  asApiConfigContext,
1838
1989
  asBridgeConfig,
1839
1990
  asBridgeConfigContext,
1991
+ asFinalizerConfig,
1992
+ asFinalizerConfigContext,
1840
1993
  asMempoolConfig,
1841
1994
  asMempoolConfigContext,
1842
1995
  asProducerConfig,
1843
1996
  asProducerConfigContext,
1844
1997
  asRewardRedemptionConfig,
1845
1998
  asRewardRedemptionConfigContext,
1846
- asValidatorConfig,
1847
- asValidatorConfigContext,
1848
1999
  basicRemoteRunnerLocator,
1849
2000
  basicRemoteViewerLocator,
2001
+ buildInsecureGenesisRewardAccounts,
1850
2002
  buildTelemetryConfig,
1851
2003
  clearResolvedWalletReport,
1852
2004
  contextFromConfigWithoutLocator,
1853
2005
  createProducerChainStakeIntentBlock,
2006
+ formatInsecureGenesisRewardWarning,
1854
2007
  formatWalletReport,
1855
2008
  getBuiltInDevMnemonic,
1856
2009
  getInsecureGenesisRewardMnemonic,
@@ -1874,14 +2027,14 @@ export {
1874
2027
  isApiConfigContext,
1875
2028
  isBridgeConfig,
1876
2029
  isBridgeConfigContext,
2030
+ isFinalizerConfig,
2031
+ isFinalizerConfigContext,
1877
2032
  isMempoolConfig,
1878
2033
  isMempoolConfigContext,
1879
2034
  isProducerConfig,
1880
2035
  isProducerConfigContext,
1881
2036
  isRewardRedemptionConfig,
1882
2037
  isRewardRedemptionConfigContext,
1883
- isValidatorConfig,
1884
- isValidatorConfigContext,
1885
2038
  loadNode,
1886
2039
  localLocatorFromConfig,
1887
2040
  locatorsFromConfig,
@@ -1897,14 +2050,14 @@ export {
1897
2050
  toApiConfigContext,
1898
2051
  toBridgeConfig,
1899
2052
  toBridgeConfigContext,
2053
+ toFinalizerConfig,
2054
+ toFinalizerConfigContext,
1900
2055
  toMempoolConfig,
1901
2056
  toMempoolConfigContext,
1902
2057
  toProducerConfig,
1903
2058
  toProducerConfigContext,
1904
2059
  toRewardRedemptionConfig,
1905
2060
  toRewardRedemptionConfigContext,
1906
- toValidatorConfig,
1907
- toValidatorConfigContext,
1908
2061
  tryParseConfig
1909
2062
  };
1910
2063
  //# sourceMappingURL=index.mjs.map