@xyo-network/chain-orchestration 1.20.21 → 1.20.23

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 (151) hide show
  1. package/dist/browser/index.mjs +304 -237
  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 +6 -157
  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/{neutral/shared/actor/ValidatorActor.d.ts → browser/shared/actor/FinalizerActor.d.ts} +6 -9
  19. package/dist/browser/shared/actor/FinalizerActor.d.ts.map +1 -0
  20. package/dist/browser/shared/actor/index.d.ts +1 -1
  21. package/dist/browser/shared/config/actors/Api.d.ts +11 -17
  22. package/dist/browser/shared/config/actors/Api.d.ts.map +1 -1
  23. package/dist/browser/shared/config/actors/Bridge.d.ts +11 -17
  24. package/dist/browser/shared/config/actors/Bridge.d.ts.map +1 -1
  25. package/dist/browser/shared/config/actors/{Validator.d.ts → Finalizer.d.ts} +23 -29
  26. package/dist/browser/shared/config/actors/Finalizer.d.ts.map +1 -0
  27. package/dist/browser/shared/config/actors/Mempool.d.ts +11 -17
  28. package/dist/browser/shared/config/actors/Mempool.d.ts.map +1 -1
  29. package/dist/browser/shared/config/actors/Producer.d.ts +11 -17
  30. package/dist/browser/shared/config/actors/Producer.d.ts.map +1 -1
  31. package/dist/browser/shared/config/actors/RewardRedemption.d.ts +11 -17
  32. package/dist/browser/shared/config/actors/RewardRedemption.d.ts.map +1 -1
  33. package/dist/browser/shared/config/actors/index.d.ts +1 -1
  34. package/dist/browser/shared/config/actors/index.d.ts.map +1 -1
  35. package/dist/browser/shared/config/mergeConfig.d.ts +1 -1
  36. package/dist/browser/shared/index.d.ts +1 -0
  37. package/dist/browser/shared/index.d.ts.map +1 -1
  38. package/dist/browser/shared/init/initActorSeedPhrase.d.ts.map +1 -1
  39. package/dist/browser/shared/init/initWallet.d.ts +1 -1
  40. package/dist/browser/shared/init/initWallet.d.ts.map +1 -1
  41. package/dist/browser/shared/init/walletResolution.d.ts +41 -10
  42. package/dist/browser/shared/init/walletResolution.d.ts.map +1 -1
  43. package/dist/browser/shared/provider/SimpleRejectedTransactionsArchivistProvider.d.ts +31 -0
  44. package/dist/browser/shared/provider/SimpleRejectedTransactionsArchivistProvider.d.ts.map +1 -0
  45. package/dist/browser/shared/provider/index.d.ts +2 -0
  46. package/dist/browser/shared/provider/index.d.ts.map +1 -0
  47. package/dist/neutral/index.mjs +304 -237
  48. package/dist/neutral/index.mjs.map +1 -1
  49. package/dist/neutral/node/config/locators/actors/{validatorLocatorFromConfig.d.ts → finalizerLocatorFromConfig.d.ts} +2 -2
  50. package/dist/{browser/node/config/locators/actors/validatorLocatorFromConfig.d.ts.map → neutral/node/config/locators/actors/finalizerLocatorFromConfig.d.ts.map} +1 -1
  51. package/dist/neutral/node/config/locators/actors/index.d.ts +1 -1
  52. package/dist/neutral/node/config/locators/actors/index.d.ts.map +1 -1
  53. package/dist/neutral/node/config/locators/actors/producerLocatorFromConfig.d.ts.map +1 -1
  54. package/dist/neutral/node/config/locators/localLocatorFromConfig.d.ts +1 -1
  55. package/dist/neutral/node/config/locators/localLocatorFromConfig.d.ts.map +1 -1
  56. package/dist/neutral/node/config/locators/locatorsFromConfig.d.ts +1 -1
  57. package/dist/neutral/node/config/locators/locatorsFromConfig.d.ts.map +1 -1
  58. package/dist/neutral/node/config/locators/rootLocatorFromConfig.d.ts +1 -1
  59. package/dist/neutral/node/config/locators/rootLocatorFromConfig.d.ts.map +1 -1
  60. package/dist/neutral/node/config/tryParseConfig.d.ts +6 -157
  61. package/dist/neutral/node/config/tryParseConfig.d.ts.map +1 -1
  62. package/dist/neutral/node/init/initFinalizationArchivistIfNeeded.d.ts +6 -1
  63. package/dist/neutral/node/init/initFinalizationArchivistIfNeeded.d.ts.map +1 -1
  64. package/dist/{node/shared/actor/ValidatorActor.d.ts → neutral/shared/actor/FinalizerActor.d.ts} +6 -9
  65. package/dist/neutral/shared/actor/FinalizerActor.d.ts.map +1 -0
  66. package/dist/neutral/shared/actor/index.d.ts +1 -1
  67. package/dist/neutral/shared/config/actors/Api.d.ts +11 -17
  68. package/dist/neutral/shared/config/actors/Api.d.ts.map +1 -1
  69. package/dist/neutral/shared/config/actors/Bridge.d.ts +11 -17
  70. package/dist/neutral/shared/config/actors/Bridge.d.ts.map +1 -1
  71. package/dist/neutral/shared/config/actors/{Validator.d.ts → Finalizer.d.ts} +23 -29
  72. package/dist/neutral/shared/config/actors/Finalizer.d.ts.map +1 -0
  73. package/dist/neutral/shared/config/actors/Mempool.d.ts +11 -17
  74. package/dist/neutral/shared/config/actors/Mempool.d.ts.map +1 -1
  75. package/dist/neutral/shared/config/actors/Producer.d.ts +11 -17
  76. package/dist/neutral/shared/config/actors/Producer.d.ts.map +1 -1
  77. package/dist/neutral/shared/config/actors/RewardRedemption.d.ts +11 -17
  78. package/dist/neutral/shared/config/actors/RewardRedemption.d.ts.map +1 -1
  79. package/dist/neutral/shared/config/actors/index.d.ts +1 -1
  80. package/dist/neutral/shared/config/actors/index.d.ts.map +1 -1
  81. package/dist/neutral/shared/config/mergeConfig.d.ts +1 -1
  82. package/dist/neutral/shared/index.d.ts +1 -0
  83. package/dist/neutral/shared/index.d.ts.map +1 -1
  84. package/dist/neutral/shared/init/initActorSeedPhrase.d.ts.map +1 -1
  85. package/dist/neutral/shared/init/initWallet.d.ts +1 -1
  86. package/dist/neutral/shared/init/initWallet.d.ts.map +1 -1
  87. package/dist/neutral/shared/init/walletResolution.d.ts +41 -10
  88. package/dist/neutral/shared/init/walletResolution.d.ts.map +1 -1
  89. package/dist/neutral/shared/provider/SimpleRejectedTransactionsArchivistProvider.d.ts +31 -0
  90. package/dist/neutral/shared/provider/SimpleRejectedTransactionsArchivistProvider.d.ts.map +1 -0
  91. package/dist/neutral/shared/provider/index.d.ts +2 -0
  92. package/dist/neutral/shared/provider/index.d.ts.map +1 -0
  93. package/dist/node/index.mjs +400 -286
  94. package/dist/node/index.mjs.map +1 -1
  95. package/dist/node/node/config/locators/actors/{validatorLocatorFromConfig.d.ts → finalizerLocatorFromConfig.d.ts} +2 -2
  96. package/dist/node/node/config/locators/actors/{validatorLocatorFromConfig.d.ts.map → finalizerLocatorFromConfig.d.ts.map} +1 -1
  97. package/dist/node/node/config/locators/actors/index.d.ts +1 -1
  98. package/dist/node/node/config/locators/actors/index.d.ts.map +1 -1
  99. package/dist/node/node/config/locators/actors/producerLocatorFromConfig.d.ts.map +1 -1
  100. package/dist/node/node/config/locators/localLocatorFromConfig.d.ts +1 -1
  101. package/dist/node/node/config/locators/localLocatorFromConfig.d.ts.map +1 -1
  102. package/dist/node/node/config/locators/locatorsFromConfig.d.ts +1 -1
  103. package/dist/node/node/config/locators/locatorsFromConfig.d.ts.map +1 -1
  104. package/dist/node/node/config/locators/rootLocatorFromConfig.d.ts +1 -1
  105. package/dist/node/node/config/locators/rootLocatorFromConfig.d.ts.map +1 -1
  106. package/dist/node/node/config/tryParseConfig.d.ts +6 -157
  107. package/dist/node/node/config/tryParseConfig.d.ts.map +1 -1
  108. package/dist/node/node/init/initFinalizationArchivistIfNeeded.d.ts +6 -1
  109. package/dist/node/node/init/initFinalizationArchivistIfNeeded.d.ts.map +1 -1
  110. package/dist/{browser/shared/actor/ValidatorActor.d.ts → node/shared/actor/FinalizerActor.d.ts} +6 -9
  111. package/dist/node/shared/actor/FinalizerActor.d.ts.map +1 -0
  112. package/dist/node/shared/actor/index.d.ts +1 -1
  113. package/dist/node/shared/config/actors/Api.d.ts +11 -17
  114. package/dist/node/shared/config/actors/Api.d.ts.map +1 -1
  115. package/dist/node/shared/config/actors/Bridge.d.ts +11 -17
  116. package/dist/node/shared/config/actors/Bridge.d.ts.map +1 -1
  117. package/dist/node/shared/config/actors/{Validator.d.ts → Finalizer.d.ts} +23 -29
  118. package/dist/node/shared/config/actors/Finalizer.d.ts.map +1 -0
  119. package/dist/node/shared/config/actors/Mempool.d.ts +11 -17
  120. package/dist/node/shared/config/actors/Mempool.d.ts.map +1 -1
  121. package/dist/node/shared/config/actors/Producer.d.ts +11 -17
  122. package/dist/node/shared/config/actors/Producer.d.ts.map +1 -1
  123. package/dist/node/shared/config/actors/RewardRedemption.d.ts +11 -17
  124. package/dist/node/shared/config/actors/RewardRedemption.d.ts.map +1 -1
  125. package/dist/node/shared/config/actors/index.d.ts +1 -1
  126. package/dist/node/shared/config/actors/index.d.ts.map +1 -1
  127. package/dist/node/shared/config/mergeConfig.d.ts +1 -1
  128. package/dist/node/shared/index.d.ts +1 -0
  129. package/dist/node/shared/index.d.ts.map +1 -1
  130. package/dist/node/shared/init/initActorSeedPhrase.d.ts.map +1 -1
  131. package/dist/node/shared/init/initWallet.d.ts +1 -1
  132. package/dist/node/shared/init/initWallet.d.ts.map +1 -1
  133. package/dist/node/shared/init/walletResolution.d.ts +41 -10
  134. package/dist/node/shared/init/walletResolution.d.ts.map +1 -1
  135. package/dist/node/shared/provider/SimpleRejectedTransactionsArchivistProvider.d.ts +31 -0
  136. package/dist/node/shared/provider/SimpleRejectedTransactionsArchivistProvider.d.ts.map +1 -0
  137. package/dist/node/shared/provider/index.d.ts +2 -0
  138. package/dist/node/shared/provider/index.d.ts.map +1 -0
  139. package/package.json +21 -21
  140. package/dist/browser/shared/actor/ValidatorActor.d.ts.map +0 -1
  141. package/dist/browser/shared/config/actors/Validator.d.ts.map +0 -1
  142. package/dist/browser/shared/config/actors/accountIndex.d.ts +0 -3
  143. package/dist/browser/shared/config/actors/accountIndex.d.ts.map +0 -1
  144. package/dist/neutral/shared/actor/ValidatorActor.d.ts.map +0 -1
  145. package/dist/neutral/shared/config/actors/Validator.d.ts.map +0 -1
  146. package/dist/neutral/shared/config/actors/accountIndex.d.ts +0 -3
  147. package/dist/neutral/shared/config/actors/accountIndex.d.ts.map +0 -1
  148. package/dist/node/shared/actor/ValidatorActor.d.ts.map +0 -1
  149. package/dist/node/shared/config/actors/Validator.d.ts.map +0 -1
  150. package/dist/node/shared/config/actors/accountIndex.d.ts +0 -3
  151. package/dist/node/shared/config/actors/accountIndex.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) {
@@ -98,24 +96,13 @@ __name(buildTelemetryConfig, "buildTelemetryConfig");
98
96
  // src/shared/config/actors/Api.ts
99
97
  import { zodAsFactory, zodIsFactory, zodToFactory } from "@xylabs/sdk-js";
100
98
  import { BaseConfigContextZod, HostActorConfigZod } from "@xyo-network/xl1-sdk";
101
- import { globalRegistry as globalRegistry2, z as z2 } from "zod";
102
-
103
- // src/shared/config/actors/accountIndex.ts
104
99
  import { globalRegistry, z } from "zod";
105
- var ActorAccountIndexZod = /* @__PURE__ */ __name((title) => z.coerce.number().int().min(0).optional().register(globalRegistry, {
106
- description: "Account index derived from the actor wallet phrase. Defaults to 0 for actor mnemonics and to the actor-specific shared index for the root mnemonic.",
107
- title,
108
- type: "number"
109
- }), "ActorAccountIndexZod");
110
-
111
- // src/shared/config/actors/Api.ts
112
- var ApiConfigZod = HostActorConfigZod.extend(z2.object({
113
- accountIndex: ActorAccountIndexZod("api.accountIndex"),
114
- initRewardsCache: z2.union([
115
- z2.number(),
116
- z2.string(),
117
- z2.boolean()
118
- ]).transform((v) => v !== "0" && v !== "false" && v !== false && v != 0).default(true).register(globalRegistry2, {
100
+ var ApiConfigZod = HostActorConfigZod.extend(z.object({
101
+ initRewardsCache: z.union([
102
+ z.number(),
103
+ z.string(),
104
+ z.boolean()
105
+ ]).transform((v) => v !== "0" && v !== "false" && v !== false && v != 0).default(true).register(globalRegistry, {
119
106
  description: "Whether to initialize the rewards cache on startup",
120
107
  title: "api.initRewardsCache",
121
108
  type: "boolean"
@@ -134,7 +121,7 @@ var toApiConfigContext = zodToFactory(ApiConfigContext, "toApiConfigContext");
134
121
  // src/shared/config/actors/Bridge.ts
135
122
  import { AddressZod, HexZod, toAddress, toHex, zodAsFactory as zodAsFactory2, zodIsFactory as zodIsFactory2, zodToFactory as zodToFactory2 } from "@xylabs/sdk-js";
136
123
  import { AttoXL1ConvertFactor, BaseConfigContextZod as BaseConfigContextZod2, HostActorConfigZod as HostActorConfigZod2, XL1 } from "@xyo-network/xl1-sdk";
137
- import { globalRegistry as globalRegistry3, z as z3 } from "zod";
124
+ import { globalRegistry as globalRegistry2, z as z2 } from "zod";
138
125
  var DEFAULT_FIXED_FEE = toHex(XL1(1000n) * AttoXL1ConvertFactor.xl1);
139
126
  var DEFAULT_VARIABLE_FEE_BASIS_POINTS = 300;
140
127
  var DEFAULT_HARDHAT_BRIDGE_CONTRACT = toAddress("2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6");
@@ -143,84 +130,83 @@ var DEFAULT_HARDHAT_REMOTE_CHAIN_WALLET_PRIVATE_KEY = toHex("0xac0974bec39a17e36
143
130
  var DEFAULT_HARDHAT_TOKEN_CONTRACT = toAddress("5FbDB2315678afecb367f032d93F642f64180aa3");
144
131
  var DEFAULT_MAX_BRIDGE_AMOUNT = toHex(XL1(1000000n) * AttoXL1ConvertFactor.xl1);
145
132
  var DEFAULT_MIN_BRIDGE_AMOUNT = toHex(XL1(1500n) * AttoXL1ConvertFactor.xl1);
146
- var BasisPointsZod = z3.coerce.number().int().nonnegative().max(1e4);
133
+ var BasisPointsZod = z2.coerce.number().int().nonnegative().max(1e4);
147
134
  var BridgeConfigZod = HostActorConfigZod2.extend({
148
- accountIndex: ActorAccountIndexZod("bridge.accountIndex"),
149
- escrowAddress: AddressZod.optional().register(globalRegistry3, {
135
+ escrowAddress: AddressZod.optional().register(globalRegistry2, {
150
136
  description: "Address to which bridge escrow will be sent",
151
137
  title: "bridge.escrowAddress",
152
138
  type: "string"
153
139
  }),
154
- feesAddress: AddressZod.optional().register(globalRegistry3, {
140
+ feesAddress: AddressZod.optional().register(globalRegistry2, {
155
141
  description: "Address to which bridge fees will be sent",
156
142
  title: "bridge.feesAddress",
157
143
  type: "string"
158
144
  }),
159
- feeFixed: HexZod.default(DEFAULT_FIXED_FEE).register(globalRegistry3, {
145
+ feeFixed: HexZod.default(DEFAULT_FIXED_FEE).register(globalRegistry2, {
160
146
  default: DEFAULT_FIXED_FEE,
161
147
  description: "Fixed fee (in AttoXL1) applied to bridge transfers",
162
148
  title: "bridge.feeFixed",
163
149
  type: "bigint"
164
150
  }),
165
- feeRateBasisPoints: BasisPointsZod.default(DEFAULT_VARIABLE_FEE_BASIS_POINTS).register(globalRegistry3, {
151
+ feeRateBasisPoints: BasisPointsZod.default(DEFAULT_VARIABLE_FEE_BASIS_POINTS).register(globalRegistry2, {
166
152
  default: DEFAULT_VARIABLE_FEE_BASIS_POINTS,
167
153
  description: "Variable rate fee (in basis points where 1 bps = 0.01%) applied to bridge transfers",
168
154
  title: "bridge.feeRateBasisPoints",
169
155
  type: "number"
170
156
  }),
171
- maxBridgeAmount: HexZod.default(DEFAULT_MAX_BRIDGE_AMOUNT).register(globalRegistry3, {
157
+ maxBridgeAmount: HexZod.default(DEFAULT_MAX_BRIDGE_AMOUNT).register(globalRegistry2, {
172
158
  default: DEFAULT_MAX_BRIDGE_AMOUNT,
173
159
  description: "Maximum amount allowed for a bridge transfer",
174
160
  title: "bridge.maxBridgeAmount",
175
161
  type: "string"
176
162
  }),
177
- minBridgeAmount: HexZod.default(DEFAULT_MIN_BRIDGE_AMOUNT).register(globalRegistry3, {
163
+ minBridgeAmount: HexZod.default(DEFAULT_MIN_BRIDGE_AMOUNT).register(globalRegistry2, {
178
164
  default: DEFAULT_MIN_BRIDGE_AMOUNT,
179
165
  description: "Minimum amount required for a bridge transfer",
180
166
  title: "bridge.minBridgeAmount",
181
167
  type: "string"
182
168
  }),
183
- redisHost: z3.string().default("localhost").register(globalRegistry3, {
169
+ redisHost: z2.string().default("localhost").register(globalRegistry2, {
184
170
  default: "localhost",
185
171
  description: "Host for the Bridge Redis instance",
186
172
  title: "bridge.redisHost",
187
173
  type: "string"
188
174
  }),
189
- redisPort: z3.coerce.number().int().positive().default(6379).register(globalRegistry3, {
175
+ redisPort: z2.coerce.number().int().positive().default(6379).register(globalRegistry2, {
190
176
  default: 6379,
191
177
  description: "Port for the Bridge Redis instance",
192
178
  title: "bridge.redisPort",
193
179
  type: "number"
194
180
  }),
195
- remoteBridgeContractAddress: AddressZod.default(DEFAULT_HARDHAT_BRIDGE_CONTRACT).register(globalRegistry3, {
181
+ remoteBridgeContractAddress: AddressZod.default(DEFAULT_HARDHAT_BRIDGE_CONTRACT).register(globalRegistry2, {
196
182
  default: DEFAULT_HARDHAT_BRIDGE_CONTRACT,
197
183
  description: "Hex representation of remote token address used for bridging",
198
184
  title: "bridge.remoteBridgeContractAddress",
199
185
  type: "string"
200
186
  }),
201
- remoteChainId: HexZod.default(DEFAULT_HARDHAT_CHAIN_ID).register(globalRegistry3, {
187
+ remoteChainId: HexZod.default(DEFAULT_HARDHAT_CHAIN_ID).register(globalRegistry2, {
202
188
  default: DEFAULT_HARDHAT_CHAIN_ID,
203
189
  description: "Remote chain ID",
204
190
  title: "bridge.remoteChainId",
205
191
  type: "string"
206
192
  }),
207
- remoteTokenAddress: HexZod.default(DEFAULT_HARDHAT_TOKEN_CONTRACT).register(globalRegistry3, {
193
+ remoteTokenAddress: HexZod.default(DEFAULT_HARDHAT_TOKEN_CONTRACT).register(globalRegistry2, {
208
194
  default: DEFAULT_HARDHAT_TOKEN_CONTRACT,
209
195
  description: "Hex representation of remote token address used for bridging",
210
196
  title: "bridge.remoteTokenAddress",
211
197
  type: "string"
212
198
  }),
213
- remoteChainWalletPrivateKey: HexZod.default(DEFAULT_HARDHAT_REMOTE_CHAIN_WALLET_PRIVATE_KEY).register(globalRegistry3, {
199
+ remoteChainWalletPrivateKey: HexZod.default(DEFAULT_HARDHAT_REMOTE_CHAIN_WALLET_PRIVATE_KEY).register(globalRegistry2, {
214
200
  description: "Private key for the wallet to use for the remote chain wallet",
215
201
  title: "bridge.remoteChainWalletPrivateKey",
216
202
  type: "string"
217
203
  }),
218
- xl1ChainId: HexZod.optional().register(globalRegistry3, {
204
+ xl1ChainId: HexZod.optional().register(globalRegistry2, {
219
205
  description: "XL1 chain id used for bridging",
220
206
  title: "bridge.xl1ChainId",
221
207
  type: "string"
222
208
  }),
223
- xl1TokenAddress: HexZod.optional().register(globalRegistry3, {
209
+ xl1TokenAddress: HexZod.optional().register(globalRegistry2, {
224
210
  description: "XL1 token address used for bridging",
225
211
  title: "bridge.xl1TokenAddress",
226
212
  type: "string"
@@ -248,14 +234,31 @@ var isBridgeConfigContext = zodIsFactory2(BridgeConfigContext);
248
234
  var asBridgeConfigContext = zodAsFactory2(BridgeConfigContext, "asBridgeConfigContext");
249
235
  var toBridgeConfigContext = zodToFactory2(BridgeConfigContext, "toBridgeConfigContext");
250
236
 
237
+ // src/shared/config/actors/Finalizer.ts
238
+ import { AddressZod as AddressZod2, zodAsFactory as zodAsFactory3, zodIsFactory as zodIsFactory3, zodToFactory as zodToFactory3 } from "@xylabs/sdk-js";
239
+ import { BaseConfigContextZod as BaseConfigContextZod3, DEFAULT_MIN_CANDIDATES, HostActorConfigZod as HostActorConfigZod3 } from "@xyo-network/xl1-sdk";
240
+ import { z as z3 } from "zod";
241
+ var FinalizerConfigZod = HostActorConfigZod3.extend({
242
+ allowedProducers: z3.array(AddressZod2).optional(),
243
+ minCandidates: z3.number().int().min(0).default(DEFAULT_MIN_CANDIDATES)
244
+ });
245
+ var isFinalizerConfig = zodIsFactory3(FinalizerConfigZod);
246
+ var asFinalizerConfig = zodAsFactory3(FinalizerConfigZod, "asFinalizerConfig");
247
+ var toFinalizerConfig = zodToFactory3(FinalizerConfigZod, "toFinalizerConfig");
248
+ var FinalizerConfigContext = BaseConfigContextZod3.extend({
249
+ config: FinalizerConfigZod
250
+ });
251
+ var isFinalizerConfigContext = zodIsFactory3(FinalizerConfigContext);
252
+ var asFinalizerConfigContext = zodAsFactory3(FinalizerConfigContext, "asFinalizerConfigContext");
253
+ var toFinalizerConfigContext = zodToFactory3(FinalizerConfigContext, "toFinalizerConfigContext");
254
+
251
255
  // src/shared/config/actors/Mempool.ts
252
- import { zodAsFactory as zodAsFactory3, zodIsFactory as zodIsFactory3, zodToFactory as zodToFactory3 } from "@xylabs/sdk-js";
253
- import { BaseConfigContextZod as BaseConfigContextZod3, HostActorConfigZod as HostActorConfigZod3 } from "@xyo-network/xl1-sdk";
254
- import { globalRegistry as globalRegistry4, z as z4 } from "zod";
256
+ import { zodAsFactory as zodAsFactory4, zodIsFactory as zodIsFactory4, zodToFactory as zodToFactory4 } from "@xylabs/sdk-js";
257
+ import { BaseConfigContextZod as BaseConfigContextZod4, HostActorConfigZod as HostActorConfigZod4 } from "@xyo-network/xl1-sdk";
258
+ import { globalRegistry as globalRegistry3, z as z4 } from "zod";
255
259
  var DEFAULT_MEMPOOL_BLOCK_PRUNE_INTERVAL = 1e3;
256
260
  var DEFAULT_MEMPOOL_TRANSACTION_PRUNE_INTERVAL = 1e3;
257
- var MempoolConfigZod = HostActorConfigZod3.extend({
258
- accountIndex: ActorAccountIndexZod("mempool.accountIndex"),
261
+ var MempoolConfigZod = HostActorConfigZod4.extend({
259
262
  enabled: z4.union([
260
263
  z4.string(),
261
264
  z4.boolean()
@@ -280,122 +283,100 @@ var MempoolConfigZod = HostActorConfigZod3.extend({
280
283
  message: `Invalid boolean value: "${val}". Use true/false, 1/0, yes/no.`
281
284
  });
282
285
  return z4.NEVER;
283
- }).register(globalRegistry4, {
286
+ }).register(globalRegistry3, {
284
287
  default: "false",
285
288
  description: "Enable the Mempool",
286
289
  title: "mempool.enabled",
287
290
  type: "boolean"
288
291
  }),
289
- blockPruneInterval: z4.coerce.number().default(DEFAULT_MEMPOOL_BLOCK_PRUNE_INTERVAL).register(globalRegistry4, {
292
+ blockPruneInterval: z4.coerce.number().default(DEFAULT_MEMPOOL_BLOCK_PRUNE_INTERVAL).register(globalRegistry3, {
290
293
  description: "The interval time (in milliseconds) between pending block prune attempts",
291
294
  title: "mempool.blockPruneInterval",
292
295
  type: "number"
293
296
  }),
294
- transactionPruneInterval: z4.coerce.number().default(DEFAULT_MEMPOOL_TRANSACTION_PRUNE_INTERVAL).register(globalRegistry4, {
297
+ transactionPruneInterval: z4.coerce.number().default(DEFAULT_MEMPOOL_TRANSACTION_PRUNE_INTERVAL).register(globalRegistry3, {
295
298
  description: "The interval time (in milliseconds) between pending transaction prune attempts",
296
299
  title: "mempool.transactionPruneInterval",
297
300
  type: "number"
298
301
  })
299
302
  });
300
- var isMempoolConfig = zodIsFactory3(MempoolConfigZod);
301
- var asMempoolConfig = zodAsFactory3(MempoolConfigZod, "asMempoolConfig");
302
- var toMempoolConfig = zodToFactory3(MempoolConfigZod, "toMempoolConfig");
303
- var MempoolConfigContext = BaseConfigContextZod3.extend({
303
+ var isMempoolConfig = zodIsFactory4(MempoolConfigZod);
304
+ var asMempoolConfig = zodAsFactory4(MempoolConfigZod, "asMempoolConfig");
305
+ var toMempoolConfig = zodToFactory4(MempoolConfigZod, "toMempoolConfig");
306
+ var MempoolConfigContext = BaseConfigContextZod4.extend({
304
307
  config: MempoolConfigZod
305
308
  });
306
- var isMempoolConfigContext = zodIsFactory3(MempoolConfigContext);
307
- var asMempoolConfigContext = zodAsFactory3(MempoolConfigContext, "asMempoolConfigContext");
308
- var toMempoolConfigContext = zodToFactory3(MempoolConfigContext, "toMempoolConfigContext");
309
+ var isMempoolConfigContext = zodIsFactory4(MempoolConfigContext);
310
+ var asMempoolConfigContext = zodAsFactory4(MempoolConfigContext, "asMempoolConfigContext");
311
+ var toMempoolConfigContext = zodToFactory4(MempoolConfigContext, "toMempoolConfigContext");
309
312
 
310
313
  // src/shared/config/actors/Producer.ts
311
- import { AddressZod as AddressZod2, asAddress, zodAsFactory as zodAsFactory4, zodIsFactory as zodIsFactory4, zodToFactory as zodToFactory4 } from "@xylabs/sdk-js";
312
- import { ActorConfigZod, BaseConfigContextZod as BaseConfigContextZod4 } from "@xyo-network/xl1-sdk";
313
- import { globalRegistry as globalRegistry5, z as z5 } from "zod";
314
+ import { AddressZod as AddressZod3, asAddress, zodAsFactory as zodAsFactory5, zodIsFactory as zodIsFactory5, zodToFactory as zodToFactory5 } from "@xylabs/sdk-js";
315
+ import { ActorConfigZod, BaseConfigContextZod as BaseConfigContextZod5 } from "@xyo-network/xl1-sdk";
316
+ import { globalRegistry as globalRegistry4, z as z5 } from "zod";
314
317
  var DEFAULT_BLOCK_PRODUCTION_CHECK_INTERVAL = 1e4;
315
318
  var ProducerConfigZod = ActorConfigZod.extend(z5.object({
316
- accountIndex: ActorAccountIndexZod("producer.accountIndex"),
317
319
  allowlist: z5.preprocess((val) => {
318
320
  if (typeof val === "string") {
319
321
  return val.split(",").map((s) => asAddress(s.trim()));
320
322
  }
321
323
  return val;
322
- }, z5.array(AddressZod2).optional().register(globalRegistry5, {
324
+ }, z5.array(AddressZod3).optional().register(globalRegistry4, {
323
325
  description: "List of allowed producer addresses, if undefined anyone can participate",
324
326
  title: "allowlist",
325
327
  type: "array"
326
328
  })),
327
- blockProductionCheckInterval: z5.coerce.number().default(DEFAULT_BLOCK_PRODUCTION_CHECK_INTERVAL).register(globalRegistry5, {
329
+ blockProductionCheckInterval: z5.coerce.number().default(DEFAULT_BLOCK_PRODUCTION_CHECK_INTERVAL).register(globalRegistry4, {
328
330
  description: "The interval time (in milliseconds) between block production attempts",
329
331
  title: "producer.blockProductionCheckInterval",
330
332
  type: "number"
331
333
  }),
332
- disableIntentRedeclaration: z5.boolean().optional().register(globalRegistry5, {
334
+ disableIntentRedeclaration: z5.boolean().optional().register(globalRegistry4, {
333
335
  description: "Should the producer skip redeclaring their intent to continue producing blocks",
334
336
  title: "producer.disableIntentRedeclaration",
335
337
  type: "boolean"
336
338
  }),
337
- heartbeatInterval: z5.coerce.number().default(36e5).register(globalRegistry5, {
339
+ heartbeatInterval: z5.coerce.number().default(36e5).register(globalRegistry4, {
338
340
  description: "The number of milliseconds between heartbeats if no blocks are produced",
339
341
  title: "producer.heartbeatInterval",
340
342
  type: "number"
341
343
  }),
342
344
  // TODO: BigInt schema
343
- minStake: z5.coerce.number().default(1).register(globalRegistry5, {
345
+ minStake: z5.coerce.number().default(1).register(globalRegistry4, {
344
346
  description: "Minimum stake required to be a Producer",
345
347
  title: "producer.minStake",
346
348
  type: "number"
347
349
  }),
348
350
  // TODO: Address schema
349
- rewardAddress: z5.string().optional().register(globalRegistry5, {
351
+ rewardAddress: z5.string().optional().register(globalRegistry4, {
350
352
  description: "Address to receive block rewards",
351
353
  title: "producer.rewardAddress",
352
354
  type: "string"
353
355
  })
354
356
  }).shape);
355
- var isProducerConfig = zodIsFactory4(ProducerConfigZod);
356
- var asProducerConfig = zodAsFactory4(ProducerConfigZod, "asProducerConfig");
357
- var toProducerConfig = zodToFactory4(ProducerConfigZod, "toProducerConfig");
358
- var ProducerConfigContext = BaseConfigContextZod4.extend({
357
+ var isProducerConfig = zodIsFactory5(ProducerConfigZod);
358
+ var asProducerConfig = zodAsFactory5(ProducerConfigZod, "asProducerConfig");
359
+ var toProducerConfig = zodToFactory5(ProducerConfigZod, "toProducerConfig");
360
+ var ProducerConfigContext = BaseConfigContextZod5.extend({
359
361
  config: ProducerConfigZod
360
362
  });
361
- var isProducerConfigContext = zodIsFactory4(ProducerConfigContext);
362
- var asProducerConfigContext = zodAsFactory4(ProducerConfigContext, "asProducerConfigContext");
363
- var toProducerConfigContext = zodToFactory4(ProducerConfigContext, "toProducerConfigContext");
363
+ var isProducerConfigContext = zodIsFactory5(ProducerConfigContext);
364
+ var asProducerConfigContext = zodAsFactory5(ProducerConfigContext, "asProducerConfigContext");
365
+ var toProducerConfigContext = zodToFactory5(ProducerConfigContext, "toProducerConfigContext");
364
366
 
365
367
  // src/shared/config/actors/RewardRedemption.ts
366
- import { zodAsFactory as zodAsFactory5, zodIsFactory as zodIsFactory5, zodToFactory as zodToFactory5 } from "@xylabs/sdk-js";
367
- import { BaseConfigContextZod as BaseConfigContextZod5, HostActorConfigZod as HostActorConfigZod4 } from "@xyo-network/xl1-sdk";
368
- var RewardRedemptionConfigZod = HostActorConfigZod4.extend({
369
- accountIndex: ActorAccountIndexZod("rewardRedemption.accountIndex")
370
- });
371
- var isRewardRedemptionConfig = zodIsFactory5(RewardRedemptionConfigZod);
372
- var asRewardRedemptionConfig = zodAsFactory5(RewardRedemptionConfigZod, "asRewardRedemptionConfig");
373
- var toRewardRedemptionConfig = zodToFactory5(RewardRedemptionConfigZod, "toRewardRedemptionConfig");
374
- var RewardRedemptionConfigContext = BaseConfigContextZod5.extend({
375
- config: RewardRedemptionConfigZod
376
- });
377
- var isRewardRedemptionConfigContext = zodIsFactory5(RewardRedemptionConfigContext);
378
- var asRewardRedemptionConfigContext = zodAsFactory5(RewardRedemptionConfigContext, "asRewardRedemptionConfigContext");
379
- var toRewardRedemptionConfigContext = zodToFactory5(RewardRedemptionConfigContext, "toRewardRedemptionConfigContext");
380
-
381
- // src/shared/config/actors/Validator.ts
382
- import { AddressZod as AddressZod3, zodAsFactory as zodAsFactory6, zodIsFactory as zodIsFactory6, zodToFactory as zodToFactory6 } from "@xylabs/sdk-js";
368
+ import { zodAsFactory as zodAsFactory6, zodIsFactory as zodIsFactory6, zodToFactory as zodToFactory6 } from "@xylabs/sdk-js";
383
369
  import { BaseConfigContextZod as BaseConfigContextZod6, HostActorConfigZod as HostActorConfigZod5 } from "@xyo-network/xl1-sdk";
384
- import { z as z6 } from "zod";
385
- var ValidatorConfigZod = HostActorConfigZod5.extend({
386
- accountIndex: ActorAccountIndexZod("validator.accountIndex"),
387
- allowedProducers: z6.array(AddressZod3).optional(),
388
- minCandidates: z6.number().int().min(0).default(1)
389
- });
390
- var isValidatorConfig = zodIsFactory6(ValidatorConfigZod);
391
- var asValidatorConfig = zodAsFactory6(ValidatorConfigZod, "asValidatorConfig");
392
- var toValidatorConfig = zodToFactory6(ValidatorConfigZod, "toValidatorConfig");
393
- var ValidatorConfigContext = BaseConfigContextZod6.extend({
394
- config: ValidatorConfigZod
370
+ var RewardRedemptionConfigZod = HostActorConfigZod5.extend({});
371
+ var isRewardRedemptionConfig = zodIsFactory6(RewardRedemptionConfigZod);
372
+ var asRewardRedemptionConfig = zodAsFactory6(RewardRedemptionConfigZod, "asRewardRedemptionConfig");
373
+ var toRewardRedemptionConfig = zodToFactory6(RewardRedemptionConfigZod, "toRewardRedemptionConfig");
374
+ var RewardRedemptionConfigContext = BaseConfigContextZod6.extend({
375
+ config: RewardRedemptionConfigZod
395
376
  });
396
- var isValidatorConfigContext = zodIsFactory6(ValidatorConfigContext);
397
- var asValidatorConfigContext = zodAsFactory6(ValidatorConfigContext, "asValidatorConfigContext");
398
- var toValidatorConfigContext = zodToFactory6(ValidatorConfigContext, "toValidatorConfigContext");
377
+ var isRewardRedemptionConfigContext = zodIsFactory6(RewardRedemptionConfigContext);
378
+ var asRewardRedemptionConfigContext = zodAsFactory6(RewardRedemptionConfigContext, "asRewardRedemptionConfigContext");
379
+ var toRewardRedemptionConfigContext = zodToFactory6(RewardRedemptionConfigContext, "toRewardRedemptionConfigContext");
399
380
 
400
381
  // src/shared/config/mergeConfig.ts
401
382
  import { deepMerge } from "@xylabs/sdk-js";
@@ -465,30 +446,31 @@ var ServiceLifetime = {
465
446
  import { isDefined } from "@xylabs/sdk-js";
466
447
 
467
448
  // src/shared/init/walletResolution.ts
449
+ import { HDWallet } from "@xyo-network/sdk-js";
468
450
  import { DEFAULT_WALLET_PATH, generateXyoBaseWalletFromPhrase } from "@xyo-network/xl1-sdk";
451
+ import { HDNodeWallet, Mnemonic } from "ethers";
452
+ var DEFAULT_ACTOR_ACCOUNT_PATH = {
453
+ api: "3",
454
+ bridge: "1",
455
+ finalizer: "5",
456
+ mempool: "4",
457
+ producer: "0",
458
+ rewardRedemption: "2"
459
+ };
469
460
  var BUILT_IN_DEV_MNEMONIC = "crane ribbon cook cousin tobacco vital moral protect merit knock veteran hint knee ocean nurse";
470
461
  var INSECURE_GENESIS_REWARD_MNEMONIC = "test test test test test test test test test test test junk";
471
462
  var GENESIS_REWARD_AMOUNT = 20000000000000000000000n;
472
463
  var ATTO_XL1_PER_XL1 = 1000000000000000000n;
473
464
  var ROOT_WALLET_RUNTIME_ID = "_root";
474
465
  var SHARED_ACCOUNT_REPORT_COUNT = 10;
475
- var RESERVED_ACTOR_INDEX = {
476
- [ROOT_WALLET_RUNTIME_ID]: 0,
477
- api: 4,
478
- bridge: 2,
479
- mempool: 5,
480
- producer: 1,
481
- rewardRedemption: 3,
482
- validator: 6
483
- };
484
466
  var ACTOR_LABELS = {
485
467
  [ROOT_WALLET_RUNTIME_ID]: "root/local-node",
486
468
  api: "api",
487
469
  bridge: "bridge",
470
+ finalizer: "finalizer",
488
471
  mempool: "mempool",
489
472
  producer: "producer",
490
- rewardRedemption: "rewardRedemption",
491
- validator: "validator"
473
+ rewardRedemption: "rewardRedemption"
492
474
  };
493
475
  var activeWalletReport;
494
476
  function getAccountLabel(actorName) {
@@ -499,10 +481,30 @@ function clearResolvedWalletReport() {
499
481
  activeWalletReport = void 0;
500
482
  }
501
483
  __name(clearResolvedWalletReport, "clearResolvedWalletReport");
502
- function getReservedActorIndex(actorName) {
503
- return RESERVED_ACTOR_INDEX[actorName] ?? 0;
484
+ function resolveActorAccountPath(actorName, actorConfig) {
485
+ if (actorConfig?.accountPath !== void 0) return actorConfig.accountPath;
486
+ return DEFAULT_ACTOR_ACCOUNT_PATH[actorName] ?? "0";
487
+ }
488
+ __name(resolveActorAccountPath, "resolveActorAccountPath");
489
+ function isAbsoluteAccountPath(accountPath) {
490
+ return accountPath.startsWith("m/");
491
+ }
492
+ __name(isAbsoluteAccountPath, "isAbsoluteAccountPath");
493
+ function expandAccountPath(accountPath, basePath = DEFAULT_WALLET_PATH) {
494
+ return isAbsoluteAccountPath(accountPath) ? accountPath : `${basePath}/${accountPath}`;
495
+ }
496
+ __name(expandAccountPath, "expandAccountPath");
497
+ async function deriveWalletAtPath(mnemonic, accountPath) {
498
+ if (isAbsoluteAccountPath(accountPath)) {
499
+ const seed = Mnemonic.fromPhrase(mnemonic).computeSeed();
500
+ const rootNode = HDNodeWallet.fromSeed(seed);
501
+ const derivedNode = rootNode.derivePath(accountPath);
502
+ return await HDWallet.createFromNode(derivedNode);
503
+ }
504
+ const baseWallet = await generateXyoBaseWalletFromPhrase(mnemonic);
505
+ return await baseWallet.derivePath(accountPath);
504
506
  }
505
- __name(getReservedActorIndex, "getReservedActorIndex");
507
+ __name(deriveWalletAtPath, "deriveWalletAtPath");
506
508
  function getBuiltInDevMnemonic() {
507
509
  return BUILT_IN_DEV_MNEMONIC;
508
510
  }
@@ -512,52 +514,98 @@ function getInsecureGenesisRewardMnemonic() {
512
514
  }
513
515
  __name(getInsecureGenesisRewardMnemonic, "getInsecureGenesisRewardMnemonic");
514
516
  function resolveRootWallet(configuration) {
517
+ const isConfigured = configuration.mnemonic !== void 0;
515
518
  const mnemonic = configuration.mnemonic ?? BUILT_IN_DEV_MNEMONIC;
516
519
  const isBuiltInDevMnemonic = mnemonic === BUILT_IN_DEV_MNEMONIC;
517
520
  return {
518
521
  basePath: DEFAULT_WALLET_PATH,
519
522
  isBuiltInDevMnemonic,
523
+ isConfigured,
520
524
  mnemonic,
521
525
  mnemonicKind: isBuiltInDevMnemonic ? "built-in-dev" : "configured-root"
522
526
  };
523
527
  }
524
528
  __name(resolveRootWallet, "resolveRootWallet");
525
- async function resolveWalletMetadata({ accountIndex, actorName, mnemonic, mnemonicKind, source }) {
526
- const wallet = await generateXyoBaseWalletFromPhrase(mnemonic);
527
- const derivationPath = `${DEFAULT_WALLET_PATH}/${accountIndex}`;
528
- const account = await wallet.derivePath(`${accountIndex}`);
529
+ async function resolveWalletMetadata({ accountPath, actorName, mnemonic, mnemonicKind }) {
530
+ const account = await deriveWalletAtPath(mnemonic, accountPath);
529
531
  return {
530
- accountIndex,
532
+ accountPath,
531
533
  actorName,
532
534
  address: account.address,
533
- derivationPath,
535
+ derivationPath: expandAccountPath(accountPath),
534
536
  label: getAccountLabel(actorName),
535
537
  mnemonic,
536
538
  mnemonicKind,
537
539
  privateKey: account.privateKey,
538
- source,
539
540
  usesBuiltInDevMnemonic: mnemonic === BUILT_IN_DEV_MNEMONIC
540
541
  };
541
542
  }
542
543
  __name(resolveWalletMetadata, "resolveWalletMetadata");
543
544
  async function resolveActorWallet(actorName, actorConfig, root) {
544
- const actorMnemonic = actorConfig?.mnemonic;
545
- const accountIndex = actorConfig?.accountIndex;
546
- return await resolveWalletMetadata(actorMnemonic ? {
547
- accountIndex: accountIndex ?? 0,
548
- actorName,
549
- mnemonic: actorMnemonic,
550
- mnemonicKind: "configured-actor",
551
- source: "actor"
552
- } : {
553
- accountIndex: accountIndex ?? getReservedActorIndex(actorName),
545
+ return await resolveWalletMetadata({
546
+ accountPath: resolveActorAccountPath(actorName, actorConfig),
554
547
  actorName,
555
548
  mnemonic: root.mnemonic,
556
- mnemonicKind: root.mnemonicKind,
557
- source: "root"
549
+ mnemonicKind: root.mnemonicKind
558
550
  });
559
551
  }
560
552
  __name(resolveActorWallet, "resolveActorWallet");
553
+ var ActorMnemonicNotAllowedError = class extends Error {
554
+ static {
555
+ __name(this, "ActorMnemonicNotAllowedError");
556
+ }
557
+ actors;
558
+ constructor(actors) {
559
+ super([
560
+ `Per-actor mnemonics are no longer allowed (found on: ${actors.join(", ")}).`,
561
+ 'Move the mnemonic to the root (XL1_MNEMONIC, --mnemonic, or config file "xl1.mnemonic") and give each actor a distinct accountPath.'
562
+ ].join("\n"));
563
+ this.name = "ActorMnemonicNotAllowedError";
564
+ this.actors = actors;
565
+ }
566
+ };
567
+ function assertNoActorMnemonics(configuration) {
568
+ const offenders = configuration.actors.filter((actor) => typeof actor.mnemonic === "string").map((actor) => actor.name);
569
+ if (offenders.length > 0) throw new ActorMnemonicNotAllowedError(offenders);
570
+ }
571
+ __name(assertNoActorMnemonics, "assertNoActorMnemonics");
572
+ var DerivationPathCollisionError = class extends Error {
573
+ static {
574
+ __name(this, "DerivationPathCollisionError");
575
+ }
576
+ collisions;
577
+ constructor(collisions) {
578
+ const lines = Object.entries(collisions).map(([path, actors]) => ` - ${actors.join(", ")} \u2192 ${path}`);
579
+ super([
580
+ "Two or more actors resolve to the same wallet derivation path:",
581
+ ...lines,
582
+ "Change each actor's accountPath so every actor has a distinct path."
583
+ ].join("\n"));
584
+ this.name = "DerivationPathCollisionError";
585
+ this.collisions = collisions;
586
+ }
587
+ };
588
+ function detectDerivationPathCollisions(requestedActors, configuration) {
589
+ const actorConfigMap = new Map(configuration.actors.map((actor) => [
590
+ actor.name,
591
+ actor
592
+ ]));
593
+ const bucketsByPath = /* @__PURE__ */ new Map();
594
+ for (const actorName of requestedActors) {
595
+ const accountPath = resolveActorAccountPath(actorName, actorConfigMap.get(actorName));
596
+ const fullPath = expandAccountPath(accountPath);
597
+ const bucket = bucketsByPath.get(fullPath) ?? [];
598
+ bucket.push(actorName);
599
+ bucketsByPath.set(fullPath, bucket);
600
+ }
601
+ const collisions = {};
602
+ for (const [path, actors] of bucketsByPath) {
603
+ if (actors.length > 1) collisions[path] = actors;
604
+ }
605
+ if (Object.keys(collisions).length === 0) return void 0;
606
+ return new DerivationPathCollisionError(collisions);
607
+ }
608
+ __name(detectDerivationPathCollisions, "detectDerivationPathCollisions");
561
609
  async function resolveWalletReport(requestedActors, configuration) {
562
610
  const root = resolveRootWallet(configuration);
563
611
  const actorConfigMap = new Map(configuration.actors.map((actor) => [
@@ -565,62 +613,54 @@ async function resolveWalletReport(requestedActors, configuration) {
565
613
  actor
566
614
  ]));
567
615
  const resolvedActors = await Promise.all(requestedActors.map(async (actorName) => await resolveActorWallet(actorName, actorConfigMap.get(actorName), root)));
568
- const labelMap = /* @__PURE__ */ new Map([
569
- [
570
- 0,
571
- [
572
- getAccountLabel(ROOT_WALLET_RUNTIME_ID)
573
- ]
574
- ]
575
- ]);
616
+ const labelMap = /* @__PURE__ */ new Map();
576
617
  for (const actor of resolvedActors) {
577
- if (actor.source !== "root") continue;
578
- const labels = labelMap.get(actor.accountIndex) ?? [];
618
+ const labels = labelMap.get(actor.derivationPath) ?? [];
579
619
  labels.push(actor.label);
580
- labelMap.set(actor.accountIndex, labels);
620
+ labelMap.set(actor.derivationPath, labels);
581
621
  }
582
622
  const sharedAccounts = await Promise.all(Array.from({
583
623
  length: SHARED_ACCOUNT_REPORT_COUNT
584
- }, (_, index) => index).map(async (accountIndex) => {
624
+ }, (_, index) => index).map(async (sharedIndex) => {
585
625
  const account = await resolveWalletMetadata({
586
- accountIndex,
626
+ accountPath: `${sharedIndex}`,
587
627
  actorName: ROOT_WALLET_RUNTIME_ID,
588
628
  mnemonic: root.mnemonic,
589
- mnemonicKind: root.mnemonicKind,
590
- source: "root"
629
+ mnemonicKind: root.mnemonicKind
591
630
  });
592
- const labels = labelMap.get(accountIndex);
631
+ const labels = labelMap.get(account.derivationPath);
593
632
  return {
594
633
  ...account,
595
- label: labels?.join(", ") ?? `shared[${accountIndex}]`
634
+ label: labels?.join(", ") ?? `shared[${sharedIndex}]`
596
635
  };
597
636
  }));
598
- const insecureGenesisRewardAccounts = configuration.chain.genesisRewardAddress ? void 0 : await Promise.all(Array.from({
637
+ return {
638
+ requestedActors: [
639
+ ...requestedActors
640
+ ],
641
+ root,
642
+ sharedAccounts
643
+ };
644
+ }
645
+ __name(resolveWalletReport, "resolveWalletReport");
646
+ async function buildInsecureGenesisRewardAccounts() {
647
+ const accounts = await Promise.all(Array.from({
599
648
  length: SHARED_ACCOUNT_REPORT_COUNT
600
- }, (_, index) => index).map(async (accountIndex) => {
649
+ }, (_, index) => index).map(async (sharedIndex) => {
601
650
  const account = await resolveWalletMetadata({
602
- accountIndex,
651
+ accountPath: `${sharedIndex}`,
603
652
  actorName: "genesisReward",
604
653
  mnemonic: INSECURE_GENESIS_REWARD_MNEMONIC,
605
- mnemonicKind: "configured-actor",
606
- source: "actor"
654
+ mnemonicKind: "insecure-genesis-reward"
607
655
  });
608
656
  return {
609
657
  ...account,
610
- label: accountIndex === 0 ? "genesisRewardAddress" : `genesisReward[${accountIndex}]`
658
+ label: sharedIndex === 0 ? "genesisRewardAddress" : `genesisReward[${sharedIndex}]`
611
659
  };
612
660
  }));
613
- return {
614
- actorSpecificAccounts: resolvedActors.filter((actor) => actor.source === "actor"),
615
- insecureGenesisRewardAccounts,
616
- requestedActors: [
617
- ...requestedActors
618
- ],
619
- root,
620
- sharedAccounts
621
- };
661
+ return accounts;
622
662
  }
623
- __name(resolveWalletReport, "resolveWalletReport");
663
+ __name(buildInsecureGenesisRewardAccounts, "buildInsecureGenesisRewardAccounts");
624
664
  async function initializeResolvedWalletReport(requestedActors, configuration) {
625
665
  activeWalletReport = await resolveWalletReport(requestedActors, configuration);
626
666
  return activeWalletReport;
@@ -632,7 +672,7 @@ function getResolvedWalletReport() {
632
672
  __name(getResolvedWalletReport, "getResolvedWalletReport");
633
673
  function formatSharedAccount(account, showPrivateKey) {
634
674
  const lines = [
635
- `[${account.accountIndex}] ${account.label}`,
675
+ `[${account.accountPath}] ${account.label}`,
636
676
  `source: ${account.mnemonicKind === "built-in-dev" ? "built-in dev mnemonic" : "configured root mnemonic"}`,
637
677
  `path: ${account.derivationPath}`,
638
678
  `address: ${account.address}`
@@ -641,19 +681,10 @@ function formatSharedAccount(account, showPrivateKey) {
641
681
  return lines.join("\n");
642
682
  }
643
683
  __name(formatSharedAccount, "formatSharedAccount");
644
- function formatActorSpecificAccount(account) {
645
- return [
646
- account.label,
647
- "source: actor mnemonic",
648
- `path: ${account.derivationPath}`,
649
- `address: ${account.address}`
650
- ].join("\n");
651
- }
652
- __name(formatActorSpecificAccount, "formatActorSpecificAccount");
653
684
  function formatGenesisRewardAccount(account) {
654
- const balance = account.accountIndex === 0 ? GENESIS_REWARD_AMOUNT / ATTO_XL1_PER_XL1 : 0n;
685
+ const balance = account.accountPath === "0" ? GENESIS_REWARD_AMOUNT / ATTO_XL1_PER_XL1 : 0n;
655
686
  return [
656
- `[${account.accountIndex}] ${account.label}`,
687
+ `[${account.accountPath}] ${account.label}`,
657
688
  `path: ${account.derivationPath}`,
658
689
  `address: ${account.address}`,
659
690
  `privateKey: ${account.privateKey ?? "unavailable"}`,
@@ -683,34 +714,28 @@ function formatWalletReport(report) {
683
714
  "",
684
715
  report.sharedAccounts.map((account) => formatSharedAccount(account, showSecrets)).join("\n\n")
685
716
  ].join("\n"));
686
- if (report.actorSpecificAccounts.length > 0) {
687
- sections.push([
688
- "Actor-specific wallet accounts:",
689
- "",
690
- report.actorSpecificAccounts.map((account) => formatActorSpecificAccount(account)).join("\n\n")
691
- ].join("\n"));
692
- }
693
- if (report.insecureGenesisRewardAccounts) {
694
- sections.push([
695
- "INSECURE GENESIS REWARD WALLET WARNING",
696
- "",
697
- "XL1 is using a public, insecure fallback wallet for the genesis reward address.",
698
- "This phrase is intentionally unsafe and must never be used for real funds, production systems, or shared environments.",
699
- "Anyone with this information can fully control the genesis reward wallet.",
700
- "",
701
- "Genesis reward phrase:",
702
- INSECURE_GENESIS_REWARD_MNEMONIC,
703
- "",
704
- `The genesis reward is sent to index 0 and starts with ${(GENESIS_REWARD_AMOUNT / ATTO_XL1_PER_XL1).toString()} XL1.`,
705
- "",
706
- `Genesis reward wallet accounts from ${DEFAULT_WALLET_PATH}:`,
707
- "",
708
- report.insecureGenesisRewardAccounts.map((account) => formatGenesisRewardAccount(account)).join("\n\n")
709
- ].join("\n"));
710
- }
711
717
  return sections.join("\n\n");
712
718
  }
713
719
  __name(formatWalletReport, "formatWalletReport");
720
+ function formatInsecureGenesisRewardWarning(accounts) {
721
+ return [
722
+ "INSECURE GENESIS REWARD WALLET WARNING",
723
+ "",
724
+ "XL1 is using a public, insecure fallback wallet for the genesis reward address.",
725
+ "This phrase is intentionally unsafe and must never be used for real funds, production systems, or shared environments.",
726
+ "Anyone with this information can fully control the genesis reward wallet.",
727
+ "",
728
+ "Genesis reward phrase:",
729
+ INSECURE_GENESIS_REWARD_MNEMONIC,
730
+ "",
731
+ `The genesis reward is sent to index 0 and starts with ${(GENESIS_REWARD_AMOUNT / ATTO_XL1_PER_XL1).toString()} XL1.`,
732
+ "",
733
+ `Genesis reward wallet accounts from ${DEFAULT_WALLET_PATH}:`,
734
+ "",
735
+ accounts.map((account) => formatGenesisRewardAccount(account)).join("\n\n")
736
+ ].join("\n");
737
+ }
738
+ __name(formatInsecureGenesisRewardWarning, "formatInsecureGenesisRewardWarning");
714
739
  async function resolveGenesisRewardAddress(config) {
715
740
  if (config.chain.genesisRewardAddress) return config.chain.genesisRewardAddress;
716
741
  const wallet = await generateXyoBaseWalletFromPhrase(INSECURE_GENESIS_REWARD_MNEMONIC);
@@ -718,12 +743,11 @@ async function resolveGenesisRewardAddress(config) {
718
743
  return account.address;
719
744
  }
720
745
  __name(resolveGenesisRewardAddress, "resolveGenesisRewardAddress");
721
- async function resolveWalletForActor(actorName, mnemonic, accountIndex) {
722
- const fromReport = activeWalletReport ? actorName === ROOT_WALLET_RUNTIME_ID ? activeWalletReport.sharedAccounts.find((account) => account.accountIndex === 0) : activeWalletReport.actorSpecificAccounts.find((account) => account.actorName === actorName) ?? activeWalletReport.sharedAccounts.find((account) => account.actorName === actorName || account.label.split(", ").includes(getAccountLabel(actorName))) : void 0;
723
- const resolvedMnemonic = fromReport?.mnemonic ?? mnemonic ?? BUILT_IN_DEV_MNEMONIC;
724
- const resolvedAccountIndex = fromReport?.accountIndex ?? accountIndex ?? 0;
725
- const wallet = await generateXyoBaseWalletFromPhrase(resolvedMnemonic);
726
- return await wallet.derivePath(`${resolvedAccountIndex}`);
746
+ async function resolveWalletForActor(actorName, accountPath) {
747
+ const report = activeWalletReport;
748
+ const mnemonic = report?.root.mnemonic ?? BUILT_IN_DEV_MNEMONIC;
749
+ const resolvedAccountPath = accountPath ?? resolveActorAccountPath(actorName);
750
+ return await deriveWalletAtPath(mnemonic, resolvedAccountPath);
727
751
  }
728
752
  __name(resolveWalletForActor, "resolveWalletForActor");
729
753
 
@@ -732,8 +756,8 @@ var actorAccountSingletons = {};
732
756
  async function initActorAccount({ config, logger }) {
733
757
  const actorName = config.name;
734
758
  if (isDefined(actorAccountSingletons[actorName])) return actorAccountSingletons[actorName];
735
- const accountIndex = "accountIndex" in config && typeof config.accountIndex === "number" ? config.accountIndex : void 0;
736
- const account = await resolveWalletForActor(actorName, config.mnemonic, accountIndex);
759
+ const accountPath = typeof config.accountPath === "string" ? config.accountPath : void 0;
760
+ const account = await resolveWalletForActor(actorName, accountPath);
737
761
  logger?.debug(`[${actorName}] Using wallet address ${account.address}`);
738
762
  actorAccountSingletons[actorName] = account;
739
763
  return actorAccountSingletons[actorName];
@@ -747,10 +771,7 @@ async function initActorSeedPhrase(context, bios) {
747
771
  const walletKind = config.name;
748
772
  void bios;
749
773
  const report = getResolvedWalletReport();
750
- const account = config.name === ROOT_WALLET_RUNTIME_ID ? report?.sharedAccounts.find((entry) => entry.accountIndex === 0) : report?.actorSpecificAccounts.find((entry) => entry.actorName === config.name);
751
- if (isString(account?.mnemonic)) return account.mnemonic;
752
774
  if (isString(report?.root.mnemonic)) return report.root.mnemonic;
753
- if (isString(config.mnemonic)) return config.mnemonic;
754
775
  const fallback = getBuiltInDevMnemonic();
755
776
  logger?.debug(`[${walletKind}] Falling back to built-in development mnemonic`);
756
777
  return assertEx(fallback, () => "Unable to resolve mnemonic");
@@ -807,10 +828,10 @@ function initStatusReporter({ logger }) {
807
828
  __name(initStatusReporter, "initStatusReporter");
808
829
 
809
830
  // src/shared/init/initWallet.ts
810
- async function initActorWallet(context, mnemonic) {
811
- const actorName = context.config.name === ROOT_WALLET_RUNTIME_ID ? ROOT_WALLET_RUNTIME_ID : context.config.name;
812
- const accountIndex = "accountIndex" in context.config && typeof context.config.accountIndex === "number" ? context.config.accountIndex : void 0;
813
- return await resolveWalletForActor(actorName, mnemonic ?? context.config.mnemonic, accountIndex);
831
+ async function initActorWallet(context) {
832
+ const actorName = context.config.name;
833
+ const accountPath = typeof context.config.accountPath === "string" ? context.config.accountPath : void 0;
834
+ return await resolveWalletForActor(actorName, accountPath);
814
835
  }
815
836
  __name(initActorWallet, "initActorWallet");
816
837
 
@@ -879,6 +900,41 @@ Orchestrator = _ts_decorate2([
879
900
  creatable2()
880
901
  ], Orchestrator);
881
902
 
903
+ // src/shared/provider/SimpleRejectedTransactionsArchivistProvider.ts
904
+ import { assertEx as assertEx3 } from "@xylabs/sdk-js";
905
+ import { AbstractCreatableProvider, creatableProvider } from "@xyo-network/xl1-sdk";
906
+ function _ts_decorate3(decorators, target, key, desc) {
907
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
908
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
909
+ 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;
910
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
911
+ }
912
+ __name(_ts_decorate3, "_ts_decorate");
913
+ var RejectedTransactionsArchivistProviderMoniker = "RejectedTransactionsArchivistProvider";
914
+ var SimpleRejectedTransactionsArchivistProvider = class _SimpleRejectedTransactionsArchivistProvider extends AbstractCreatableProvider {
915
+ static {
916
+ __name(this, "SimpleRejectedTransactionsArchivistProvider");
917
+ }
918
+ static defaultMoniker = RejectedTransactionsArchivistProviderMoniker;
919
+ static dependencies = [];
920
+ static monikers = [
921
+ RejectedTransactionsArchivistProviderMoniker
922
+ ];
923
+ moniker = _SimpleRejectedTransactionsArchivistProvider.defaultMoniker;
924
+ get archivist() {
925
+ return this.params.archivist;
926
+ }
927
+ static async paramsHandler(params) {
928
+ return {
929
+ ...await super.paramsHandler(params),
930
+ archivist: assertEx3(params?.archivist, () => "archivist is required")
931
+ };
932
+ }
933
+ };
934
+ SimpleRejectedTransactionsArchivistProvider = _ts_decorate3([
935
+ creatableProvider()
936
+ ], SimpleRejectedTransactionsArchivistProvider);
937
+
882
938
  // src/node/config/locators/basicRemoteRunnerLocator.ts
883
939
  import { isAccountInstance } from "@xyo-network/sdk-js";
884
940
  import { basicRemoteRunnerLocator as sdkBasicRemoteRunnerLocator, JsonRpcAccountBalanceViewer, JsonRpcXyoSigner, SimpleXyoSigner } from "@xyo-network/xl1-sdk";
@@ -957,13 +1013,13 @@ async function contextFromConfigWithoutLocator(config, logger, serviceName, serv
957
1013
  __name(contextFromConfigWithoutLocator, "contextFromConfigWithoutLocator");
958
1014
 
959
1015
  // src/node/config/locators/localLocatorFromConfig.ts
960
- import { assertEx as assertEx7 } from "@xylabs/sdk-js";
1016
+ import { assertEx as assertEx8 } from "@xylabs/sdk-js";
961
1017
  import { validateHydratedBlock, validateHydratedBlockState } from "@xyo-network/chain-validation";
962
1018
  import { BlockCumulativeBalanceValidatorFactory, ProviderFactoryLocator, SimpleAccountBalanceViewer, SimpleBlockValidationViewer, SimpleBlockViewer, SimpleDeadLetterQueueRunner, SimpleDeadLetterQueueViewer, SimpleFinalizationRunner, SimpleFinalizationViewer, SimpleMempoolRunner, SimpleMempoolViewer, SimpleTransactionValidationViewer, SimpleTransactionViewer, SimpleWindowedBlockViewer, SimpleXyoConnectionViewer, SimpleXyoViewer, validateTransaction } from "@xyo-network/xl1-sdk";
963
1019
 
964
1020
  // src/node/init/initBalanceSummaryMap.ts
965
1021
  import { BaseMongoSdk } from "@xylabs/mongo";
966
- import { assertEx as assertEx3 } from "@xylabs/sdk-js";
1022
+ import { assertEx as assertEx4 } from "@xylabs/sdk-js";
967
1023
  import { MongoMap } from "@xyo-network/chain-protocol-driver-mongodb";
968
1024
  import { hasMongoConfig, MemoryMap } from "@xyo-network/xl1-sdk";
969
1025
  async function initBalanceSummaryMap({ logger, config }) {
@@ -988,7 +1044,7 @@ async function initBalanceSummaryMap({ logger, config }) {
988
1044
  maxEntries: 5e3
989
1045
  }
990
1046
  });
991
- assertEx3(await result.start(), () => "Failed to start transfer summary map");
1047
+ assertEx4(await result.start(), () => "Failed to start transfer summary map");
992
1048
  return result;
993
1049
  } else {
994
1050
  logger?.warn("[API] Mongo configuration not found. Using MemoryMap for BalanceSummaryMap.");
@@ -1050,11 +1106,11 @@ async function initEvmProvidersIfAvailable(locator) {
1050
1106
  __name(initEvmProvidersIfAvailable, "initEvmProvidersIfAvailable");
1051
1107
 
1052
1108
  // src/node/init/initFinalizationArchivistIfNeeded.ts
1053
- import { assertEx as assertEx4 } from "@xylabs/sdk-js";
1109
+ import { assertEx as assertEx5 } from "@xylabs/sdk-js";
1054
1110
  import { createBootstrapHead } from "@xyo-network/chain-sdk";
1055
1111
  import { Account } from "@xyo-network/sdk-js";
1056
1112
  import { asAttoXL1, findMostRecentBlock, flattenHydratedBlock } from "@xyo-network/xl1-sdk";
1057
- async function initFinalizationArchivistIfNeeded(archivist, config, account) {
1113
+ async function initFinalizationArchivistIfNeeded(archivist, config, account, options = {}) {
1058
1114
  const configuredChainId = config.chain.id;
1059
1115
  const possibleHead = await findMostRecentBlock(archivist);
1060
1116
  if (configuredChainId && possibleHead && possibleHead.chain !== configuredChainId) {
@@ -1063,13 +1119,18 @@ async function initFinalizationArchivistIfNeeded(archivist, config, account) {
1063
1119
  let possibleChainId = configuredChainId;
1064
1120
  if (!possibleHead) {
1065
1121
  possibleChainId = possibleChainId ?? (await Account.random()).address;
1122
+ if (!config.chain.genesisRewardAddress) {
1123
+ const accounts = await buildInsecureGenesisRewardAccounts();
1124
+ options.logger?.warn(formatInsecureGenesisRewardWarning(accounts));
1125
+ if (options.onInsecureGenesisConfirm) await options.onInsecureGenesisConfirm();
1126
+ }
1066
1127
  const genesisRewardAddress = await resolveGenesisRewardAddress(config);
1067
1128
  const chain = await createBootstrapHead(account, possibleChainId, asAttoXL1(GENESIS_REWARD_AMOUNT), genesisRewardAddress);
1068
1129
  const payloads = chain.flatMap((block) => flattenHydratedBlock(block));
1069
1130
  await archivist.insert(payloads);
1070
1131
  }
1071
- const head = possibleHead ?? assertEx4(await findMostRecentBlock(archivist), () => "No blocks found in chain archivist");
1072
- const chainId = assertEx4(possibleChainId, () => "Chain ID could not be determined");
1132
+ const head = possibleHead ?? assertEx5(await findMostRecentBlock(archivist), () => "No blocks found in chain archivist");
1133
+ const chainId = assertEx5(possibleChainId, () => "Chain ID could not be determined");
1073
1134
  return [
1074
1135
  head,
1075
1136
  chainId
@@ -1096,7 +1157,7 @@ async function initFinalizedArchivist(config) {
1096
1157
  __name(initFinalizedArchivist, "initFinalizedArchivist");
1097
1158
 
1098
1159
  // src/node/init/initServerNode.ts
1099
- import { assertEx as assertEx5 } from "@xylabs/sdk-js";
1160
+ import { assertEx as assertEx6 } from "@xylabs/sdk-js";
1100
1161
  import { asArchivistInstance } from "@xyo-network/sdk-js";
1101
1162
 
1102
1163
  // src/node/manifest/getLocator.ts
@@ -1423,7 +1484,7 @@ async function writableChainArchivistFromNode(node) {
1423
1484
  }
1424
1485
  __name(writableChainArchivistFromNode, "writableChainArchivistFromNode");
1425
1486
  async function readonlyChainArchivistFromNode(node) {
1426
- return assertEx5(asArchivistInstance(await node.resolve("Chain:Validated"), {
1487
+ return assertEx6(asArchivistInstance(await node.resolve("Chain:Validated"), {
1427
1488
  required: true
1428
1489
  }));
1429
1490
  }
@@ -1454,7 +1515,7 @@ async function rejectedTransactionsArchivistFromNode(node) {
1454
1515
  __name(rejectedTransactionsArchivistFromNode, "rejectedTransactionsArchivistFromNode");
1455
1516
  async function initServerNode(context, wallet, providedNode) {
1456
1517
  const node = providedNode ?? await loadNode(context, wallet);
1457
- assertEx5(await node.start(), () => "Failed to start node");
1518
+ assertEx6(await node.start(), () => "Failed to start node");
1458
1519
  const writableChainArchivist = await writableChainArchivistFromNode(node);
1459
1520
  const readonlyChainArchivist = await readonlyChainArchivistFromNode(node);
1460
1521
  const pendingTransactionsArchivist = await pendingTransactionsArchivistFromNode(node);
@@ -1475,7 +1536,7 @@ __name(initServerNode, "initServerNode");
1475
1536
 
1476
1537
  // src/node/init/initTransferSummaryMap.ts
1477
1538
  import { BaseMongoSdk as BaseMongoSdk2 } from "@xylabs/mongo";
1478
- import { assertEx as assertEx6 } from "@xylabs/sdk-js";
1539
+ import { assertEx as assertEx7 } from "@xylabs/sdk-js";
1479
1540
  import { MongoMap as MongoMap2 } from "@xyo-network/chain-protocol-driver-mongodb";
1480
1541
  import { hasMongoConfig as hasMongoConfig3, MemoryMap as MemoryMap2 } from "@xyo-network/xl1-sdk";
1481
1542
  async function initTransferSummaryMap({ logger, config }) {
@@ -1500,7 +1561,7 @@ async function initTransferSummaryMap({ logger, config }) {
1500
1561
  maxEntries: 5e3
1501
1562
  }
1502
1563
  });
1503
- assertEx6(await result.start(), () => "Failed to start transfer summary map");
1564
+ assertEx7(await result.start(), () => "Failed to start transfer summary map");
1504
1565
  return result;
1505
1566
  } else {
1506
1567
  logger?.warn("[API] Mongo configuration not found. Using MemoryMap for TransferSummaryMap.");
@@ -1521,12 +1582,15 @@ var validateHydratedBlockStateWithCumulativeBalance = /* @__PURE__ */ __name(asy
1521
1582
  ...cumulativeErrors
1522
1583
  ];
1523
1584
  }, "validateHydratedBlockStateWithCumulativeBalance");
1524
- async function localLocatorFromConfig(context, validateDepsOnRegister = false) {
1525
- const balancesSummaryMap = assertEx7(await initBalanceSummaryMap(context), () => "Balance Summary Map not initialized");
1526
- const transfersSummaryMap = assertEx7(await initTransferSummaryMap(context), () => "Transfer Summary Map not initialized");
1585
+ async function localLocatorFromConfig(context, validateDepsOnRegister = false, onInsecureGenesisConfirm) {
1586
+ const balancesSummaryMap = assertEx8(await initBalanceSummaryMap(context), () => "Balance Summary Map not initialized");
1587
+ const transfersSummaryMap = assertEx8(await initTransferSummaryMap(context), () => "Transfer Summary Map not initialized");
1527
1588
  const wallet = await initActorWallet(context);
1528
1589
  const { writableChainArchivist, readonlyChainArchivist, pendingTransactionsArchivist, pendingBlocksArchivist, rejectedBlocksArchivist, rejectedTransactionsArchivist } = await initServerNode(context, wallet);
1529
- await initFinalizationArchivistIfNeeded(writableChainArchivist, context.config, wallet);
1590
+ await initFinalizationArchivistIfNeeded(writableChainArchivist, context.config, wallet, {
1591
+ logger: context.logger,
1592
+ onInsecureGenesisConfirm
1593
+ });
1530
1594
  const locator = new ProviderFactoryLocator(context, {}, validateDepsOnRegister);
1531
1595
  locator.registerMany([
1532
1596
  SimpleMempoolViewer.factory(SimpleMempoolViewer.dependencies, {
@@ -1574,6 +1638,9 @@ async function localLocatorFromConfig(context, validateDepsOnRegister = false) {
1574
1638
  SimpleDeadLetterQueueViewer.factory(SimpleDeadLetterQueueViewer.dependencies, {
1575
1639
  rejectedBlocksArchivist,
1576
1640
  rejectedTransactionsArchivist
1641
+ }),
1642
+ SimpleRejectedTransactionsArchivistProvider.factory(SimpleRejectedTransactionsArchivistProvider.dependencies, {
1643
+ archivist: rejectedTransactionsArchivist
1577
1644
  })
1578
1645
  ]);
1579
1646
  return locator;
@@ -1658,9 +1725,9 @@ async function bridgeLocatorFromConfig(context, parent) {
1658
1725
  }
1659
1726
  __name(bridgeLocatorFromConfig, "bridgeLocatorFromConfig");
1660
1727
 
1661
- // src/node/config/locators/actors/mempoolLocatorFromConfig.ts
1728
+ // src/node/config/locators/actors/finalizerLocatorFromConfig.ts
1662
1729
  import { ProviderFactoryLocator as ProviderFactoryLocator4 } from "@xyo-network/xl1-sdk";
1663
- function mempoolLocatorFromConfig(context, parent) {
1730
+ function finalizerLocatorFromConfig(context, parent) {
1664
1731
  const locator = new ProviderFactoryLocator4({
1665
1732
  ...context,
1666
1733
  locator: parent
@@ -1669,16 +1736,29 @@ function mempoolLocatorFromConfig(context, parent) {
1669
1736
  locator.freeze();
1670
1737
  return locator;
1671
1738
  }
1739
+ __name(finalizerLocatorFromConfig, "finalizerLocatorFromConfig");
1740
+
1741
+ // src/node/config/locators/actors/mempoolLocatorFromConfig.ts
1742
+ import { ProviderFactoryLocator as ProviderFactoryLocator5 } from "@xyo-network/xl1-sdk";
1743
+ function mempoolLocatorFromConfig(context, parent) {
1744
+ const locator = new ProviderFactoryLocator5({
1745
+ ...context,
1746
+ locator: parent
1747
+ });
1748
+ locator.registerMany([]);
1749
+ locator.freeze();
1750
+ return locator;
1751
+ }
1672
1752
  __name(mempoolLocatorFromConfig, "mempoolLocatorFromConfig");
1673
1753
 
1674
1754
  // src/node/config/locators/actors/producerLocatorFromConfig.ts
1675
1755
  import { asAddress as asAddress2 } from "@xylabs/sdk-js";
1676
1756
  import { SimpleBlockRunner } from "@xyo-network/chain-services";
1677
- import { ProviderFactoryLocator as ProviderFactoryLocator5 } from "@xyo-network/xl1-sdk";
1757
+ import { ProviderFactoryLocator as ProviderFactoryLocator6 } from "@xyo-network/xl1-sdk";
1678
1758
  async function producerLocatorFromConfig(context, parent) {
1679
1759
  const { logger, config } = context;
1680
1760
  const account = await initActorAccount(context);
1681
- const locator = new ProviderFactoryLocator5({
1761
+ const locator = new ProviderFactoryLocator6({
1682
1762
  ...context,
1683
1763
  locator: parent
1684
1764
  });
@@ -1687,10 +1767,13 @@ async function producerLocatorFromConfig(context, parent) {
1687
1767
  if (rewardAddress === account.address) {
1688
1768
  logger?.warn(`Using producer account address as reward address: ${account.address}`);
1689
1769
  }
1770
+ const rejectedTransactionsProvider = await parent?.tryGetInstance(RejectedTransactionsArchivistProviderMoniker);
1771
+ const rejectedTransactionsArchivist = rejectedTransactionsProvider?.archivist;
1690
1772
  locator.registerMany([
1691
1773
  SimpleBlockRunner.factory(SimpleBlockRunner.dependencies, {
1692
1774
  account,
1693
- rewardAddress
1775
+ rewardAddress,
1776
+ rejectedTransactionsArchivist
1694
1777
  })
1695
1778
  ]);
1696
1779
  locator.freeze();
@@ -1699,9 +1782,9 @@ async function producerLocatorFromConfig(context, parent) {
1699
1782
  __name(producerLocatorFromConfig, "producerLocatorFromConfig");
1700
1783
 
1701
1784
  // src/node/config/locators/actors/rewardRedemptionLocatorFromConfig.ts
1702
- 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";
1785
+ 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";
1703
1786
  async function rewardRedemptionLocatorFromConfig(context, parent) {
1704
- const locator = new ProviderFactoryLocator6({
1787
+ const locator = new ProviderFactoryLocator7({
1705
1788
  ...context,
1706
1789
  locator: parent
1707
1790
  });
@@ -1731,22 +1814,9 @@ async function rewardRedemptionLocatorFromConfig(context, parent) {
1731
1814
  }
1732
1815
  __name(rewardRedemptionLocatorFromConfig, "rewardRedemptionLocatorFromConfig");
1733
1816
 
1734
- // src/node/config/locators/actors/validatorLocatorFromConfig.ts
1735
- import { ProviderFactoryLocator as ProviderFactoryLocator7 } from "@xyo-network/xl1-sdk";
1736
- function validatorLocatorFromConfig(context, parent) {
1737
- const locator = new ProviderFactoryLocator7({
1738
- ...context,
1739
- locator: parent
1740
- });
1741
- locator.registerMany([]);
1742
- locator.freeze();
1743
- return locator;
1744
- }
1745
- __name(validatorLocatorFromConfig, "validatorLocatorFromConfig");
1746
-
1747
1817
  // src/node/config/locators/rootLocatorFromConfig.ts
1748
1818
  import { commonLocatorFromConfig, remoteLocatorFromConfig } from "@xyo-network/xl1-sdk";
1749
- async function rootLocatorFromConfig(context, validateDepsOnRegister = false) {
1819
+ async function rootLocatorFromConfig(context, validateDepsOnRegister = false, onInsecureGenesisConfirm) {
1750
1820
  const { config } = context;
1751
1821
  let locator = await commonLocatorFromConfig(context, validateDepsOnRegister);
1752
1822
  const newLocator = await (config.remote.rpc ? remoteLocatorFromConfig(locator.context, validateDepsOnRegister) : localLocatorFromConfig({
@@ -1755,7 +1825,7 @@ async function rootLocatorFromConfig(context, validateDepsOnRegister = false) {
1755
1825
  ...locator.context.config,
1756
1826
  ...context.config
1757
1827
  }
1758
- }, validateDepsOnRegister));
1828
+ }, validateDepsOnRegister, onInsecureGenesisConfirm));
1759
1829
  locator = newLocator;
1760
1830
  locator = await initEvmProvidersIfAvailable(locator);
1761
1831
  locator.freeze();
@@ -1764,15 +1834,17 @@ async function rootLocatorFromConfig(context, validateDepsOnRegister = false) {
1764
1834
  __name(rootLocatorFromConfig, "rootLocatorFromConfig");
1765
1835
 
1766
1836
  // src/node/config/locators/locatorsFromConfig.ts
1767
- async function locatorsFromConfig(context, { actors, ...config }) {
1837
+ async function locatorsFromConfig(context, { actors, ...config }, onInsecureGenesisConfirm) {
1838
+ const rootContext = {
1839
+ ...context,
1840
+ config: {
1841
+ ...config,
1842
+ name: "_root"
1843
+ }
1844
+ };
1845
+ const rootLocator = await rootLocatorFromConfig(rootContext, false, onInsecureGenesisConfirm);
1768
1846
  const result = {
1769
- _root: await rootLocatorFromConfig({
1770
- ...context,
1771
- config: {
1772
- ...config,
1773
- name: "_root"
1774
- }
1775
- })
1847
+ _root: rootLocator
1776
1848
  };
1777
1849
  for (const actorConfig of actors) {
1778
1850
  switch (actorConfig.name) {
@@ -1797,10 +1869,10 @@ async function locatorsFromConfig(context, { actors, ...config }) {
1797
1869
  }, result._root);
1798
1870
  break;
1799
1871
  }
1800
- case "validator": {
1801
- result[actorConfig.name] = await validatorLocatorFromConfig({
1872
+ case "finalizer": {
1873
+ result[actorConfig.name] = await finalizerLocatorFromConfig({
1802
1874
  ...context,
1803
- config: ValidatorConfigZod.parse(deepMerge2(config, actorConfig))
1875
+ config: FinalizerConfigZod.parse(deepMerge2(config, actorConfig))
1804
1876
  }, result._root);
1805
1877
  break;
1806
1878
  }
@@ -1830,6 +1902,21 @@ import { ConfigZod } from "@xyo-network/xl1-sdk";
1830
1902
  import { cosmiconfig } from "cosmiconfig";
1831
1903
  var configName = "xyo";
1832
1904
  var configSection = "xl1";
1905
+ var ConfigFileNotFoundError = class extends Error {
1906
+ static {
1907
+ __name(this, "ConfigFileNotFoundError");
1908
+ }
1909
+ constructor(configPath) {
1910
+ super(`Config file not found: ${configPath}`);
1911
+ this.name = "ConfigFileNotFoundError";
1912
+ }
1913
+ };
1914
+ var isMissingFileError = /* @__PURE__ */ __name((error) => {
1915
+ return error instanceof Error && "code" in error && error.code === "ENOENT";
1916
+ }, "isMissingFileError");
1917
+ var isRecord = /* @__PURE__ */ __name((value) => {
1918
+ return typeof value === "object" && value !== null;
1919
+ }, "isRecord");
1833
1920
  async function tryParseConfig(options) {
1834
1921
  const { configPath, searchPlaces } = options ?? {};
1835
1922
  const explorer = cosmiconfig(configName, {
@@ -1837,10 +1924,25 @@ async function tryParseConfig(options) {
1837
1924
  // loaders: { '.ts': TypeScriptLoader() },
1838
1925
  searchPlaces
1839
1926
  });
1840
- const result = isDefined4(configPath) ? (await explorer.load(configPath))?.config : (await explorer.search())?.config;
1841
- if (isDefined4(result) && !isNull(result)) {
1927
+ let result;
1928
+ if (isDefined4(configPath)) {
1929
+ try {
1930
+ result = (await explorer.load(configPath))?.config;
1931
+ } catch (error) {
1932
+ if (isMissingFileError(error)) {
1933
+ throw new ConfigFileNotFoundError(configPath);
1934
+ }
1935
+ throw error;
1936
+ }
1937
+ if (!isDefined4(result) || isNull(result)) {
1938
+ throw new ConfigFileNotFoundError(configPath);
1939
+ }
1940
+ } else {
1941
+ result = (await explorer.search())?.config;
1942
+ }
1943
+ if (isRecord(result)) {
1842
1944
  const section = result[configSection];
1843
- if (isDefined4(section) && typeof section === "object") {
1945
+ if (isRecord(section)) {
1844
1946
  const parsed = ConfigZod.loose().parse(section);
1845
1947
  return typeof section.mnemonic === "string" ? {
1846
1948
  ...parsed,
@@ -1857,6 +1959,7 @@ export * from "@xyo-network/chain-orchestration-evm";
1857
1959
  export * from "@xyo-network/chain-orchestration-express";
1858
1960
  export * from "@xyo-network/chain-orchestration-storage";
1859
1961
  export {
1962
+ ActorMnemonicNotAllowedError,
1860
1963
  ApiConfigContext,
1861
1964
  ApiConfigZod,
1862
1965
  BUILT_IN_DEV_MNEMONIC,
@@ -1864,10 +1967,16 @@ export {
1864
1967
  BridgeConfigContext,
1865
1968
  BridgeConfigZod,
1866
1969
  BridgeSettingsZod,
1970
+ ConfigFileNotFoundError,
1971
+ DEFAULT_ACTOR_ACCOUNT_PATH,
1867
1972
  DEFAULT_BLOCK_PRODUCTION_CHECK_INTERVAL,
1868
1973
  DEFAULT_MEMPOOL_BLOCK_PRUNE_INTERVAL,
1869
1974
  DEFAULT_MEMPOOL_TRANSACTION_PRUNE_INTERVAL,
1870
1975
  DefaultServiceProvider,
1976
+ DerivationPathCollisionError,
1977
+ FinalizerActor,
1978
+ FinalizerConfigContext,
1979
+ FinalizerConfigZod,
1871
1980
  GENESIS_REWARD_AMOUNT,
1872
1981
  GenericHost,
1873
1982
  INSECURE_GENESIS_REWARD_MNEMONIC,
@@ -1880,36 +1989,39 @@ export {
1880
1989
  ProducerConfigZod,
1881
1990
  PublicChildManifests,
1882
1991
  ROOT_WALLET_RUNTIME_ID,
1992
+ RejectedTransactionsArchivistProviderMoniker,
1883
1993
  RewardRedemptionConfigContext,
1884
1994
  RewardRedemptionConfigZod,
1885
1995
  SHARED_ACCOUNT_REPORT_COUNT,
1886
1996
  ServiceLifetime,
1887
- ValidatorActor,
1888
- ValidatorConfigContext,
1889
- ValidatorConfigZod,
1997
+ SimpleRejectedTransactionsArchivistProvider,
1890
1998
  asApiConfig,
1891
1999
  asApiConfigContext,
1892
2000
  asBridgeConfig,
1893
2001
  asBridgeConfigContext,
2002
+ asFinalizerConfig,
2003
+ asFinalizerConfigContext,
1894
2004
  asMempoolConfig,
1895
2005
  asMempoolConfigContext,
1896
2006
  asProducerConfig,
1897
2007
  asProducerConfigContext,
1898
2008
  asRewardRedemptionConfig,
1899
2009
  asRewardRedemptionConfigContext,
1900
- asValidatorConfig,
1901
- asValidatorConfigContext,
2010
+ assertNoActorMnemonics,
1902
2011
  basicRemoteRunnerLocator,
1903
2012
  basicRemoteViewerLocator,
2013
+ buildInsecureGenesisRewardAccounts,
1904
2014
  buildTelemetryConfig,
1905
2015
  clearResolvedWalletReport,
1906
2016
  contextFromConfigWithoutLocator,
1907
2017
  createProducerChainStakeIntentBlock,
2018
+ detectDerivationPathCollisions,
2019
+ expandAccountPath,
2020
+ formatInsecureGenesisRewardWarning,
1908
2021
  formatWalletReport,
1909
2022
  getBuiltInDevMnemonic,
1910
2023
  getInsecureGenesisRewardMnemonic,
1911
2024
  getLocator,
1912
- getReservedActorIndex,
1913
2025
  getResolvedWalletReport,
1914
2026
  initActorAccount,
1915
2027
  initActorSeedPhrase,
@@ -1924,22 +2036,24 @@ export {
1924
2036
  initStatusReporter,
1925
2037
  initTransferSummaryMap,
1926
2038
  initializeResolvedWalletReport,
2039
+ isAbsoluteAccountPath,
1927
2040
  isApiConfig,
1928
2041
  isApiConfigContext,
1929
2042
  isBridgeConfig,
1930
2043
  isBridgeConfigContext,
2044
+ isFinalizerConfig,
2045
+ isFinalizerConfigContext,
1931
2046
  isMempoolConfig,
1932
2047
  isMempoolConfigContext,
1933
2048
  isProducerConfig,
1934
2049
  isProducerConfigContext,
1935
2050
  isRewardRedemptionConfig,
1936
2051
  isRewardRedemptionConfigContext,
1937
- isValidatorConfig,
1938
- isValidatorConfigContext,
1939
2052
  loadNode,
1940
2053
  localLocatorFromConfig,
1941
2054
  locatorsFromConfig,
1942
2055
  mergeConfig,
2056
+ resolveActorAccountPath,
1943
2057
  resolveActorWallet,
1944
2058
  resolveGenesisRewardAddress,
1945
2059
  resolveRootWallet,
@@ -1951,14 +2065,14 @@ export {
1951
2065
  toApiConfigContext,
1952
2066
  toBridgeConfig,
1953
2067
  toBridgeConfigContext,
2068
+ toFinalizerConfig,
2069
+ toFinalizerConfigContext,
1954
2070
  toMempoolConfig,
1955
2071
  toMempoolConfigContext,
1956
2072
  toProducerConfig,
1957
2073
  toProducerConfigContext,
1958
2074
  toRewardRedemptionConfig,
1959
2075
  toRewardRedemptionConfigContext,
1960
- toValidatorConfig,
1961
- toValidatorConfigContext,
1962
2076
  tryParseConfig
1963
2077
  };
1964
2078
  //# sourceMappingURL=index.mjs.map