@xyo-network/chain-services 1.17.7 → 1.18.0

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 (143) hide show
  1. package/dist/neutral/AccountBalance/accountBalanceServiceFromArchivist.d.ts +3 -3
  2. package/dist/neutral/AccountBalance/accountBalanceServiceFromArchivist.d.ts.map +1 -1
  3. package/dist/neutral/BaseService.d.ts +2 -2
  4. package/dist/neutral/BaseService.d.ts.map +1 -1
  5. package/dist/neutral/ChainService/Evm/Evm.d.ts +3 -4
  6. package/dist/neutral/ChainService/Evm/Evm.d.ts.map +1 -1
  7. package/dist/neutral/ChainService/Memory/Memory.d.ts +3 -4
  8. package/dist/neutral/ChainService/Memory/Memory.d.ts.map +1 -1
  9. package/dist/neutral/ChainValidator/XyoValidator.d.ts +4 -2
  10. package/dist/neutral/ChainValidator/XyoValidator.d.ts.map +1 -1
  11. package/dist/neutral/PendingTransactions/BasePendingTransactions.d.ts +0 -1
  12. package/dist/neutral/PendingTransactions/BasePendingTransactions.d.ts.map +1 -1
  13. package/dist/neutral/Schemas/BaseSchemasService.d.ts +1 -1
  14. package/dist/neutral/Schemas/BaseSchemasService.d.ts.map +1 -1
  15. package/dist/neutral/StakeIntent/XyoStakeIntentService.d.ts +5 -3
  16. package/dist/neutral/StakeIntent/XyoStakeIntentService.d.ts.map +1 -1
  17. package/dist/neutral/blockViewerFromChainIteratorAndArchivist.d.ts.map +1 -1
  18. package/dist/neutral/implementation/chain/evm.d.ts +2 -2
  19. package/dist/neutral/implementation/chain/evm.d.ts.map +1 -1
  20. package/dist/neutral/implementation/chain/index.d.ts +2 -3
  21. package/dist/neutral/implementation/chain/index.d.ts.map +1 -1
  22. package/dist/neutral/implementation/head/createBootstrapHead.d.ts +3 -3
  23. package/dist/neutral/implementation/head/createBootstrapHead.d.ts.map +1 -1
  24. package/dist/neutral/implementation/head/index.d.ts +1 -1
  25. package/dist/neutral/implementation/head/index.d.ts.map +1 -1
  26. package/dist/neutral/implementation/index.d.ts +0 -9
  27. package/dist/neutral/implementation/index.d.ts.map +1 -1
  28. package/dist/neutral/index.d.ts +0 -2
  29. package/dist/neutral/index.d.ts.map +1 -1
  30. package/dist/neutral/index.mjs +378 -997
  31. package/dist/neutral/index.mjs.map +1 -1
  32. package/dist/neutral/model/Params.d.ts +3 -4
  33. package/dist/neutral/model/Params.d.ts.map +1 -1
  34. package/dist/neutral/simple/block/runner/SimpleBlockRunner.d.ts +25 -33
  35. package/dist/neutral/simple/block/runner/SimpleBlockRunner.d.ts.map +1 -1
  36. package/package.json +15 -17
  37. package/src/AccountBalance/accountBalanceServiceFromArchivist.ts +10 -16
  38. package/src/BaseService.ts +3 -2
  39. package/src/ChainService/Evm/Evm.ts +24 -37
  40. package/src/ChainService/Memory/Memory.ts +6 -12
  41. package/src/ChainValidator/XyoValidator.ts +11 -4
  42. package/src/PendingTransactions/BasePendingTransactions.ts +2 -6
  43. package/src/Schemas/BaseSchemasService.ts +2 -2
  44. package/src/StakeIntent/XyoStakeIntentService.ts +12 -8
  45. package/src/blockViewerFromChainIteratorAndArchivist.ts +9 -0
  46. package/src/implementation/chain/evm.ts +5 -5
  47. package/src/implementation/chain/index.ts +12 -14
  48. package/src/implementation/head/createBootstrapHead.ts +13 -8
  49. package/src/implementation/head/index.ts +1 -1
  50. package/src/implementation/index.ts +0 -9
  51. package/src/index.ts +0 -2
  52. package/src/model/Params.ts +4 -4
  53. package/src/simple/block/runner/SimpleBlockRunner.ts +122 -122
  54. package/dist/neutral/ChainBlockNumberIteration/ChainBlockNumberIterationService.d.ts +0 -50
  55. package/dist/neutral/ChainBlockNumberIteration/ChainBlockNumberIterationService.d.ts.map +0 -1
  56. package/dist/neutral/ChainBlockNumberIteration/index.d.ts +0 -3
  57. package/dist/neutral/ChainBlockNumberIteration/index.d.ts.map +0 -1
  58. package/dist/neutral/ChainBlockNumberIteration/model/BlockNumberIteration.d.ts +0 -7
  59. package/dist/neutral/ChainBlockNumberIteration/model/BlockNumberIteration.d.ts.map +0 -1
  60. package/dist/neutral/ChainBlockNumberIteration/model/Params.d.ts +0 -9
  61. package/dist/neutral/ChainBlockNumberIteration/model/Params.d.ts.map +0 -1
  62. package/dist/neutral/ChainBlockNumberIteration/model/index.d.ts +0 -3
  63. package/dist/neutral/ChainBlockNumberIteration/model/index.d.ts.map +0 -1
  64. package/dist/neutral/Time/BaseTimeSyncService.d.ts +0 -24
  65. package/dist/neutral/Time/BaseTimeSyncService.d.ts.map +0 -1
  66. package/dist/neutral/Time/index.d.ts +0 -2
  67. package/dist/neutral/Time/index.d.ts.map +0 -1
  68. package/dist/neutral/implementation/accountBalance.d.ts +0 -7
  69. package/dist/neutral/implementation/accountBalance.d.ts.map +0 -1
  70. package/dist/neutral/implementation/blockViewer.d.ts +0 -7
  71. package/dist/neutral/implementation/blockViewer.d.ts.map +0 -1
  72. package/dist/neutral/implementation/head/createForkedHead/config/getBridgeDestinationDetails.d.ts +0 -8
  73. package/dist/neutral/implementation/head/createForkedHead/config/getBridgeDestinationDetails.d.ts.map +0 -1
  74. package/dist/neutral/implementation/head/createForkedHead/config/getBridgeSourceDetails.d.ts +0 -9
  75. package/dist/neutral/implementation/head/createForkedHead/config/getBridgeSourceDetails.d.ts.map +0 -1
  76. package/dist/neutral/implementation/head/createForkedHead/config/getForkDetails.d.ts +0 -4
  77. package/dist/neutral/implementation/head/createForkedHead/config/getForkDetails.d.ts.map +0 -1
  78. package/dist/neutral/implementation/head/createForkedHead/config/index.d.ts +0 -4
  79. package/dist/neutral/implementation/head/createForkedHead/config/index.d.ts.map +0 -1
  80. package/dist/neutral/implementation/head/createForkedHead/createForkedHead.d.ts +0 -5
  81. package/dist/neutral/implementation/head/createForkedHead/createForkedHead.d.ts.map +0 -1
  82. package/dist/neutral/implementation/head/createForkedHead/getBridgeDestinationObservation.d.ts +0 -11
  83. package/dist/neutral/implementation/head/createForkedHead/getBridgeDestinationObservation.d.ts.map +0 -1
  84. package/dist/neutral/implementation/head/createForkedHead/getBridgeIntent.d.ts +0 -11
  85. package/dist/neutral/implementation/head/createForkedHead/getBridgeIntent.d.ts.map +0 -1
  86. package/dist/neutral/implementation/head/createForkedHead/getBridgeSourceObservation.d.ts +0 -11
  87. package/dist/neutral/implementation/head/createForkedHead/getBridgeSourceObservation.d.ts.map +0 -1
  88. package/dist/neutral/implementation/head/createForkedHead/getFirstBlockForNewChain.d.ts +0 -13
  89. package/dist/neutral/implementation/head/createForkedHead/getFirstBlockForNewChain.d.ts.map +0 -1
  90. package/dist/neutral/implementation/head/createForkedHead/index.d.ts +0 -2
  91. package/dist/neutral/implementation/head/createForkedHead/index.d.ts.map +0 -1
  92. package/dist/neutral/implementation/head/getForkFromBlock.d.ts +0 -12
  93. package/dist/neutral/implementation/head/getForkFromBlock.d.ts.map +0 -1
  94. package/dist/neutral/implementation/head/head.d.ts +0 -11
  95. package/dist/neutral/implementation/head/head.d.ts.map +0 -1
  96. package/dist/neutral/implementation/head/submitNewChain.d.ts +0 -10
  97. package/dist/neutral/implementation/head/submitNewChain.d.ts.map +0 -1
  98. package/dist/neutral/implementation/mempoolRunner.d.ts +0 -7
  99. package/dist/neutral/implementation/mempoolRunner.d.ts.map +0 -1
  100. package/dist/neutral/implementation/mempoolViewer.d.ts +0 -7
  101. package/dist/neutral/implementation/mempoolViewer.d.ts.map +0 -1
  102. package/dist/neutral/implementation/pendingTransactions.d.ts +0 -9
  103. package/dist/neutral/implementation/pendingTransactions.d.ts.map +0 -1
  104. package/dist/neutral/implementation/producer.d.ts +0 -5
  105. package/dist/neutral/implementation/producer.d.ts.map +0 -1
  106. package/dist/neutral/implementation/reward.d.ts +0 -14
  107. package/dist/neutral/implementation/reward.d.ts.map +0 -1
  108. package/dist/neutral/implementation/time.d.ts +0 -6
  109. package/dist/neutral/implementation/time.d.ts.map +0 -1
  110. package/dist/neutral/implementation/validator.d.ts +0 -5
  111. package/dist/neutral/implementation/validator.d.ts.map +0 -1
  112. package/dist/neutral/simple/block/runner/spec/SimpleBlockRunner.d.ts +0 -2
  113. package/dist/neutral/simple/block/runner/spec/SimpleBlockRunner.d.ts.map +0 -1
  114. package/src/ChainBlockNumberIteration/ChainBlockNumberIterationService.ts +0 -176
  115. package/src/ChainBlockNumberIteration/index.ts +0 -2
  116. package/src/ChainBlockNumberIteration/model/BlockNumberIteration.ts +0 -7
  117. package/src/ChainBlockNumberIteration/model/Params.ts +0 -10
  118. package/src/ChainBlockNumberIteration/model/index.ts +0 -2
  119. package/src/Time/BaseTimeSyncService.ts +0 -54
  120. package/src/Time/index.ts +0 -1
  121. package/src/implementation/accountBalance.ts +0 -29
  122. package/src/implementation/blockViewer.ts +0 -29
  123. package/src/implementation/head/createForkedHead/config/getBridgeDestinationDetails.ts +0 -27
  124. package/src/implementation/head/createForkedHead/config/getBridgeSourceDetails.ts +0 -19
  125. package/src/implementation/head/createForkedHead/config/getForkDetails.ts +0 -10
  126. package/src/implementation/head/createForkedHead/config/index.ts +0 -3
  127. package/src/implementation/head/createForkedHead/createForkedHead.ts +0 -29
  128. package/src/implementation/head/createForkedHead/getBridgeDestinationObservation.ts +0 -42
  129. package/src/implementation/head/createForkedHead/getBridgeIntent.ts +0 -51
  130. package/src/implementation/head/createForkedHead/getBridgeSourceObservation.ts +0 -46
  131. package/src/implementation/head/createForkedHead/getFirstBlockForNewChain.ts +0 -41
  132. package/src/implementation/head/createForkedHead/index.ts +0 -1
  133. package/src/implementation/head/getForkFromBlock.ts +0 -43
  134. package/src/implementation/head/head.ts +0 -49
  135. package/src/implementation/head/submitNewChain.ts +0 -27
  136. package/src/implementation/mempoolRunner.ts +0 -29
  137. package/src/implementation/mempoolViewer.ts +0 -29
  138. package/src/implementation/pendingTransactions.ts +0 -36
  139. package/src/implementation/producer.ts +0 -16
  140. package/src/implementation/reward.ts +0 -53
  141. package/src/implementation/time.ts +0 -26
  142. package/src/implementation/validator.ts +0 -15
  143. package/src/simple/block/runner/spec/SimpleBlockRunner.ts +0 -418
@@ -4,9 +4,9 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
4
4
  // src/AccountBalance/accountBalanceServiceFromArchivist.ts
5
5
  import { assertEx } from "@xylabs/sdk-js";
6
6
  import { StepSizes } from "@xyo-network/xl1-protocol";
7
- import { findMostRecentBlock, LruCacheMap, readPayloadMapFromStore, SimpleAccountBalanceViewer, SimpleBlockViewer } from "@xyo-network/xl1-protocol-sdk";
7
+ import { findMostRecentBlock, LruCacheMap, payloadMapFromStore, SimpleAccountBalanceViewer } from "@xyo-network/xl1-protocol-sdk";
8
8
  import { Semaphore } from "async-mutex";
9
- var accountBalancesViewerFromArchivist = /* @__PURE__ */ __name(async (chainId, archivist) => {
9
+ var accountBalancesViewerFromArchivist = /* @__PURE__ */ __name(async (context, chainId, archivist) => {
10
10
  const summaryMap = new LruCacheMap({
11
11
  max: 1e5,
12
12
  allowStale: true,
@@ -19,7 +19,7 @@ var accountBalancesViewerFromArchivist = /* @__PURE__ */ __name(async (chainId,
19
19
  noDisposeOnSet: false,
20
20
  updateAgeOnGet: true
21
21
  });
22
- const chainMap = readPayloadMapFromStore(archivist);
22
+ const chainMap = payloadMapFromStore(archivist);
23
23
  const headFunc = /* @__PURE__ */ __name(async () => {
24
24
  const head = assertEx(await findMostRecentBlock(archivist), () => "No blocks found in chainArchivist");
25
25
  return [
@@ -28,14 +28,16 @@ var accountBalancesViewerFromArchivist = /* @__PURE__ */ __name(async (chainId,
28
28
  ];
29
29
  }, "headFunc");
30
30
  const service = await SimpleAccountBalanceViewer.create({
31
- context: {
31
+ context,
32
+ balanceSummaryContext: {
32
33
  chainId,
33
34
  store: {
34
35
  chainMap
35
36
  },
36
37
  stepSemaphores: StepSizes.map(() => new Semaphore(20)),
37
38
  summaryMap,
38
- head: headFunc
39
+ head: headFunc,
40
+ singletons: context.singletons
39
41
  },
40
42
  transfersSummaryContext: {
41
43
  chainId,
@@ -44,24 +46,16 @@ var accountBalancesViewerFromArchivist = /* @__PURE__ */ __name(async (chainId,
44
46
  },
45
47
  stepSemaphores: StepSizes.map(() => new Semaphore(20)),
46
48
  summaryMap: transferSummaryMap,
47
- head: headFunc
48
- },
49
- blockViewer: await SimpleBlockViewer.create({
50
- context: {
51
- chainId,
52
- head: headFunc,
53
- store: {
54
- chainMap
55
- }
56
- },
57
- finalizedArchivist: archivist
58
- })
49
+ head: headFunc,
50
+ singletons: context.singletons
51
+ }
59
52
  });
60
53
  return service;
61
54
  }, "accountBalancesViewerFromArchivist");
62
55
 
63
56
  // src/BaseService.ts
64
- import { AbstractCreatable, creatable } from "@xylabs/sdk-js";
57
+ import { creatable } from "@xylabs/sdk-js";
58
+ import { AbstractCreatableProvider } from "@xyo-network/xl1-protocol-sdk";
65
59
  import { Mutex } from "async-mutex";
66
60
  function _ts_decorate(decorators, target, key, desc) {
67
61
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -70,7 +64,7 @@ function _ts_decorate(decorators, target, key, desc) {
70
64
  return c > 3 && r && Object.defineProperty(target, key, r), r;
71
65
  }
72
66
  __name(_ts_decorate, "_ts_decorate");
73
- var BaseService = class extends AbstractCreatable {
67
+ var BaseService = class extends AbstractCreatableProvider {
74
68
  static {
75
69
  __name(this, "BaseService");
76
70
  }
@@ -101,7 +95,7 @@ function creatableService() {
101
95
  __name(creatableService, "creatableService");
102
96
 
103
97
  // src/BlockReward/EvmBlockRewardViewer.ts
104
- import { AbstractCreatable as AbstractCreatable2, assertEx as assertEx2, creatable as creatable2, toEthAddress } from "@xylabs/sdk-js";
98
+ import { AbstractCreatable, assertEx as assertEx2, creatable as creatable2, toEthAddress } from "@xylabs/sdk-js";
105
99
  import { XyoChainRewards__factory as XyoChainRewardsFactory } from "@xyo-network/typechain";
106
100
  import { asAttoXL1 } from "@xyo-network/xl1-protocol";
107
101
  import { BlockRewardViewerMoniker } from "@xyo-network/xl1-protocol-sdk";
@@ -112,7 +106,7 @@ function _ts_decorate2(decorators, target, key, desc) {
112
106
  return c > 3 && r && Object.defineProperty(target, key, r), r;
113
107
  }
114
108
  __name(_ts_decorate2, "_ts_decorate");
115
- var EvmBlockRewardViewer = class _EvmBlockRewardViewer extends AbstractCreatable2 {
109
+ var EvmBlockRewardViewer = class _EvmBlockRewardViewer extends AbstractCreatable {
116
110
  static {
117
111
  __name(this, "EvmBlockRewardViewer");
118
112
  }
@@ -206,6 +200,13 @@ function blockViewerFromChainIteratorAndArchivist(chainIterator, chainArchivist)
206
200
  }
207
201
  return results;
208
202
  }, "blocksByNumber"),
203
+ chainId: /* @__PURE__ */ __name(async function(blockNumber = "latest") {
204
+ const block = blockNumber === "latest" ? await this.currentBlock() : await this.blockByNumber(blockNumber);
205
+ if (!block) {
206
+ throw new Error(`Block not found for block number: ${blockNumber}`);
207
+ }
208
+ return block[0].chain;
209
+ }, "chainId"),
209
210
  currentBlock: /* @__PURE__ */ __name(async function() {
210
211
  const head = await chainIterator.head();
211
212
  return this.blockByHash(head._hash);
@@ -230,211 +231,56 @@ function blockViewerFromChainIteratorAndArchivist(chainIterator, chainArchivist)
230
231
  }
231
232
  __name(blockViewerFromChainIteratorAndArchivist, "blockViewerFromChainIteratorAndArchivist");
232
233
 
233
- // src/ChainBlockNumberIteration/ChainBlockNumberIterationService.ts
234
- import { assertEx as assertEx3, isDefined as isDefined2, isNull, isUndefined } from "@xylabs/sdk-js";
235
- import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
236
- import { asBlockBoundWitness, asBlockBoundWitnessWithStorageMeta, asSignedHydratedBlockWithHashMeta, asXL1BlockNumber, isBlockBoundWitnessWithHashMeta } from "@xyo-network/xl1-protocol";
237
- import { BlockViewerMoniker as BlockViewerMoniker2, hydrateBlock } from "@xyo-network/xl1-protocol-sdk";
238
- import { LRUCache } from "lru-cache";
239
- var ChainBlockNumberIterationService = class _ChainBlockNumberIterationService extends BaseService {
240
- static {
241
- __name(this, "ChainBlockNumberIterationService");
242
- }
243
- static defaultMoniker = BlockViewerMoniker2;
244
- static monikers = [
245
- BlockViewerMoniker2
246
- ];
247
- moniker = _ChainBlockNumberIterationService.defaultMoniker;
248
- _blocksByBlockNumber = new LRUCache({
249
- max: 1e4
250
- });
251
- _currentHead;
252
- get chainId() {
253
- return assertEx3(this._currentHead?.chain ?? this.params?.head?.chain, () => "Current head is not set");
254
- }
255
- get chainMap() {
256
- return assertEx3(this.params.chainMap);
257
- }
258
- get chainStoreRead() {
259
- return {
260
- chainMap: this.chainMap
261
- };
262
- }
263
- async blockByHash(hash) {
264
- return asSignedHydratedBlockWithHashMeta(await hydrateBlock(this.chainStoreRead, hash)) ?? null;
265
- }
266
- async blockByNumber(block) {
267
- return asSignedHydratedBlockWithHashMeta(await this.get(block)) ?? null;
268
- }
269
- async blocksByHash(hash, limit = 100) {
270
- const results = [];
271
- let currentBlock = await this.blockByHash(hash);
272
- while (currentBlock !== null && (isUndefined(limit) || results.length < limit)) {
273
- results.push(currentBlock);
274
- const previousHash = currentBlock[0].previous;
275
- if (isNull(previousHash)) break;
276
- currentBlock = await this.blockByHash(previousHash);
277
- }
278
- return results;
279
- }
280
- async blocksByNumber(blockNumber, limit = 100) {
281
- const results = [];
282
- let currentBlock = await this.blockByNumber(blockNumber);
283
- while (currentBlock !== null && (isUndefined(limit) || results.length < limit)) {
284
- results.push(currentBlock);
285
- if (currentBlock[0].block === 0) break;
286
- const previousNumber = asXL1BlockNumber(currentBlock[0].block - 1, true);
287
- currentBlock = await this.blockByNumber(previousNumber);
288
- }
289
- return results;
290
- }
291
- async currentBlock() {
292
- return assertEx3(await this.blockByHash(await this.currentBlockHash()), () => "Current block not found");
293
- }
294
- async currentBlockHash() {
295
- const head = assertEx3(await this.head(), () => "Head is not set");
296
- return head._hash;
297
- }
298
- async currentBlockNumber() {
299
- const head = assertEx3(await this.head(), () => "Head is not set");
300
- return head.block;
301
- }
302
- async get(block) {
303
- const head = await this.head();
304
- assertEx3(head.block >= block, () => `Block requested is newer than the current head [${block}]`);
305
- const cached = this._blocksByBlockNumber.get(block);
306
- if (cached) return cached;
307
- const startingBlock = head;
308
- const currentBlockHash = await PayloadBuilder2.hash(startingBlock);
309
- let currentBlock = await this.chainMap.get(currentBlockHash);
310
- while (isDefined2(currentBlock)) {
311
- assertEx3(asBlockBoundWitness(currentBlock), () => `Expected hash to be a block bound witness [${currentBlock?._hash}]`);
312
- if (isBlockBoundWitnessWithHashMeta(currentBlock)) {
313
- this._blocksByBlockNumber.set(currentBlock.block, currentBlock);
314
- if (currentBlock.block === block) {
315
- return currentBlock;
316
- }
317
- const { previous } = currentBlock;
318
- if (isNull(previous)) break;
319
- currentBlock = await this.chainMap.get(previous);
320
- }
321
- }
322
- throw new Error(`Block not found: ${block}`);
323
- }
324
- async head() {
325
- if (isDefined2(this._currentHead)) return this._currentHead;
326
- if (isDefined2(this.params.head)) {
327
- const newHead = await this.getBoundWitnessAsBlockBoundWitnessWithStorageMeta(this.params.head);
328
- this._currentHead = newHead;
329
- return newHead;
330
- }
331
- throw new Error("Head is not set");
332
- }
333
- async next(block) {
334
- const currentBlock = block;
335
- const nextBlockNumber = currentBlock + 1;
336
- return await this.get(nextBlockNumber);
337
- }
338
- payloadByHash(_hash) {
339
- throw new Error("Method [payloadByHash] not implemented.");
340
- }
341
- payloadsByHash(_hashes) {
342
- throw new Error("Method [payloadsByHash] not implemented.");
343
- }
344
- // TODO: Decide on inclusive/exclusive (probably need inclusive to account for chain head)
345
- // and then communicate via method name and documentation
346
- async previous(block = void 0, count = 1) {
347
- const results = [];
348
- let currentBlock = isDefined2(block) ? await this.get(block) : await this.head();
349
- while (isDefined2(currentBlock) && results.length < count) {
350
- if (isBlockBoundWitnessWithHashMeta(currentBlock)) {
351
- results.push(currentBlock);
352
- const { previous } = currentBlock;
353
- if (isNull(previous)) break;
354
- const nextBlock = await this.chainMap.get(previous);
355
- currentBlock = asBlockBoundWitnessWithStorageMeta(nextBlock);
356
- } else {
357
- const hash = PayloadBuilder2.hash(currentBlock);
358
- assertEx3(asBlockBoundWitnessWithStorageMeta(currentBlock), () => `Expected hash to be a block bound witness [${hash}]`);
359
- }
360
- }
361
- return results;
362
- }
363
- async updateHead(head) {
364
- const newHead = await this.getBoundWitnessAsBlockBoundWitnessWithStorageMeta(head);
365
- this._currentHead = newHead;
366
- void this.emit("headUpdated", {
367
- blocks: [
368
- newHead
369
- ]
370
- });
371
- }
372
- async getBoundWitnessAsBlockBoundWitnessWithStorageMeta(head) {
373
- const hash = await PayloadBuilder2.hash(head);
374
- const stored = await this.chainMap.get(hash);
375
- const newHead = asBlockBoundWitnessWithStorageMeta(stored);
376
- if (isUndefined(newHead)) throw new Error(`Head block not found in archivist [${hash}]`);
377
- return newHead;
378
- }
379
- };
380
-
381
234
  // src/ChainService/Evm/Evm.ts
382
- import { assertEx as assertEx4, toAddress, toEthAddress as toEthAddress2 } from "@xylabs/sdk-js";
383
- import { StakedXyoChain__factory as StakedXyoChainFactory } from "@xyo-network/typechain";
235
+ import { toAddress, toEthAddress as toEthAddress2 } from "@xylabs/sdk-js";
384
236
  import { ChainContractViewerMoniker } from "@xyo-network/xl1-protocol-sdk";
385
237
  import { getAddress } from "ethers/address";
386
- var EvmChainService = class _EvmChainService extends BaseService {
238
+ var EvmChainViewer = class _EvmChainViewer extends BaseService {
387
239
  static {
388
- __name(this, "EvmChainService");
240
+ __name(this, "EvmChainViewer");
389
241
  }
390
242
  static defaultMoniker = ChainContractViewerMoniker;
391
243
  static monikers = [
392
244
  ChainContractViewerMoniker
393
245
  ];
394
- moniker = _EvmChainService.defaultMoniker;
246
+ moniker = _EvmChainViewer.defaultMoniker;
247
+ get contract() {
248
+ return this.params.contract;
249
+ }
395
250
  async active() {
396
- return await (await this.contract()).active();
251
+ return await this.contract.active();
397
252
  }
398
253
  async activeByStaked(staked) {
399
- return await (await this.contract()).activeByAddressStaked(getAddress(toEthAddress2(staked)));
254
+ return await this.contract.activeByAddressStaked(getAddress(toEthAddress2(staked)));
400
255
  }
401
256
  async activeByStaker(address) {
402
- return await (await this.contract()).activeByStaker(getAddress(toEthAddress2(address)));
257
+ return await this.contract.activeByStaker(getAddress(toEthAddress2(address)));
403
258
  }
404
259
  async addStake(staked, amount) {
405
- const result = await (await this.contract()).addStake(getAddress(toEthAddress2(staked)), amount);
260
+ const result = await this.contract.addStake(getAddress(toEthAddress2(staked)), amount);
406
261
  await result.wait();
407
262
  return true;
408
263
  }
409
- chainId() {
410
- return assertEx4(this.params.id);
411
- }
412
- async contract() {
413
- if (this.params.contract === void 0) {
414
- this.params.contract = StakedXyoChainFactory.connect(toEthAddress2(await this.chainId()), this.params.runner);
415
- }
416
- return assertEx4(this.params.contract);
417
- }
418
264
  async forkedAtBlockNumber() {
419
- return await (await this.contract()).forkedAtBlockNumber();
265
+ return await this.contract.forkedAtBlockNumber();
420
266
  }
421
267
  async forkedAtHash() {
422
- return await (await this.contract()).forkedAtHash();
268
+ return await this.contract.forkedAtHash();
423
269
  }
424
270
  async forkedChainId() {
425
- return toAddress(await (await this.contract()).forkedChainId());
271
+ return toAddress(await this.contract.forkedChainId());
426
272
  }
427
273
  async minWithdrawalBlocks() {
428
- return await (await this.contract()).minWithdrawalBlocks();
274
+ return await this.contract.minWithdrawalBlocks();
429
275
  }
430
276
  async pending() {
431
- return await (await this.contract()).pending();
277
+ return await this.contract.pending();
432
278
  }
433
279
  async pendingByStaker(staker) {
434
- return await (await this.contract()).pendingByStaker(getAddress(toEthAddress2(staker)));
280
+ return await this.contract.pendingByStaker(getAddress(toEthAddress2(staker)));
435
281
  }
436
282
  async removeStake(slot) {
437
- const result = await (await this.contract()).removeStake(slot);
283
+ const result = await this.contract.removeStake(slot);
438
284
  await result.wait();
439
285
  return true;
440
286
  }
@@ -442,36 +288,36 @@ var EvmChainService = class _EvmChainService extends BaseService {
442
288
  throw new Error("Method not implemented.");
443
289
  }
444
290
  async rewardsContract() {
445
- return await (await this.contract()).rewardsContract();
291
+ return await this.contract.rewardsContract();
446
292
  }
447
293
  async stakingTokenAddress() {
448
- return await (await this.contract()).stakingTokenAddress();
294
+ return await this.contract.stakingTokenAddress();
449
295
  }
450
296
  async withdrawStake(slot) {
451
- const result = await (await this.contract()).withdrawStake(slot);
297
+ const result = await this.contract.withdrawStake(slot);
452
298
  await result.wait();
453
299
  return true;
454
300
  }
455
301
  async withdrawn() {
456
- return await (await this.contract()).withdrawn();
302
+ return await this.contract.withdrawn();
457
303
  }
458
304
  async withdrawnByStaker(staker) {
459
- return await (await this.contract()).withdrawnByStaker(getAddress(staker));
305
+ return await this.contract.withdrawnByStaker(getAddress(staker));
460
306
  }
461
307
  };
462
308
 
463
309
  // src/ChainService/Memory/Memory.ts
464
- import { assertEx as assertEx5, toAddress as toAddress2, ZERO_ADDRESS } from "@xylabs/sdk-js";
310
+ import { toAddress as toAddress2, ZERO_ADDRESS } from "@xylabs/sdk-js";
465
311
  import { ChainContractViewerMoniker as ChainContractViewerMoniker2 } from "@xyo-network/xl1-protocol-sdk";
466
- var MemoryChainService = class _MemoryChainService extends BaseService {
312
+ var MemoryChainViewer = class _MemoryChainViewer extends BaseService {
467
313
  static {
468
- __name(this, "MemoryChainService");
314
+ __name(this, "MemoryChainViewer");
469
315
  }
470
316
  static defaultMoniker = ChainContractViewerMoniker2;
471
317
  static monikers = [
472
318
  ChainContractViewerMoniker2
473
319
  ];
474
- moniker = _MemoryChainService.defaultMoniker;
320
+ moniker = _MemoryChainViewer.defaultMoniker;
475
321
  _chainId;
476
322
  _simulatedStake = 1n;
477
323
  async active() {
@@ -486,11 +332,8 @@ var MemoryChainService = class _MemoryChainService extends BaseService {
486
332
  async addStake(_staked, _amount) {
487
333
  return await Promise.resolve(true);
488
334
  }
489
- chainId() {
490
- return assertEx5(this._chainId, () => "Chain ID not set");
491
- }
492
335
  createHandler() {
493
- const { minStake = 1 } = this.params.config.producer ?? {};
336
+ const { minStake = 1 } = this.params.context.config.producer ?? {};
494
337
  this._simulatedStake = BigInt(minStake);
495
338
  }
496
339
  async forkedAtBlockNumber() {
@@ -539,7 +382,8 @@ var MemoryChainService = class _MemoryChainService extends BaseService {
539
382
  };
540
383
 
541
384
  // src/ChainValidator/XyoValidator.ts
542
- import { assertEx as assertEx6, creatable as creatable3 } from "@xylabs/sdk-js";
385
+ import { creatable as creatable3 } from "@xylabs/sdk-js";
386
+ import { BlockViewerMoniker as BlockViewerMoniker2 } from "@xyo-network/xl1-protocol-sdk";
543
387
  function _ts_decorate3(decorators, target, key, desc) {
544
388
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
545
389
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -551,6 +395,7 @@ var XyoValidator = class extends BaseService {
551
395
  static {
552
396
  __name(this, "XyoValidator");
553
397
  }
398
+ _blockViewer;
554
399
  // get address() {
555
400
  // return this.account.address
556
401
  // }
@@ -558,7 +403,7 @@ var XyoValidator = class extends BaseService {
558
403
  // return assertEx(this.params.account, () => 'account is required')
559
404
  // }
560
405
  get blockViewer() {
561
- return assertEx6(this.params.blockViewer, () => "blockViewer is required");
406
+ return this._blockViewer;
562
407
  }
563
408
  // protected get chainInfo() {
564
409
  // return assertEx(this.params.chainId, () => 'chainInfo is required')
@@ -572,6 +417,9 @@ var XyoValidator = class extends BaseService {
572
417
  // protected get blockRewardService() {
573
418
  // return assertEx(this.params.blockRewardService, () => 'blockRewardService is required')
574
419
  // }
420
+ async createHandler() {
421
+ this._blockViewer = await this.locator.getInstance(BlockViewerMoniker2);
422
+ }
575
423
  validatePendingBlock(_block) {
576
424
  return [];
577
425
  }
@@ -587,7 +435,7 @@ XyoValidator = _ts_decorate3([
587
435
  ], XyoValidator);
588
436
 
589
437
  // src/Election/BaseElectionService.ts
590
- import { assertEx as assertEx7, creatable as creatable4 } from "@xylabs/sdk-js";
438
+ import { assertEx as assertEx3, creatable as creatable4 } from "@xylabs/sdk-js";
591
439
  import { hexToLast4BytesInt, shuffleWithSeed } from "@xyo-network/chain-utils";
592
440
  function _ts_decorate4(decorators, target, key, desc) {
593
441
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -601,13 +449,13 @@ var BaseElectionService = class extends BaseService {
601
449
  __name(this, "BaseElectionService");
602
450
  }
603
451
  get blockViewer() {
604
- return assertEx7(this.params.blockViewer, () => "No block viewer");
452
+ return assertEx3(this.params.blockViewer, () => "No block viewer");
605
453
  }
606
454
  get chainStakeViewer() {
607
- return assertEx7(this.params.chainStakeViewer, () => "No chain stake viewer");
455
+ return assertEx3(this.params.chainStakeViewer, () => "No chain stake viewer");
608
456
  }
609
457
  get stakeIntentService() {
610
- return assertEx7(this.params.stakeIntentService, () => "No staked intent service");
458
+ return assertEx3(this.params.stakeIntentService, () => "No staked intent service");
611
459
  }
612
460
  async getCreatorCommitteeForNextBlock(current) {
613
461
  return await this.spanAsync("getCreatorCommitteeForNextBlock", async () => {
@@ -628,67 +476,27 @@ BaseElectionService = _ts_decorate4([
628
476
  creatable4()
629
477
  ], BaseElectionService);
630
478
 
631
- // src/implementation/accountBalance.ts
632
- import { isDefined as isDefined3 } from "@xylabs/sdk-js";
633
- import { AccountBalanceViewerRpcSchemas, HttpRpcTransport, JsonRpcAccountBalanceViewer } from "@xyo-network/xl1-rpc";
634
- var balanceServiceSingleton;
635
- var initAccountBalanceService = /* @__PURE__ */ __name((params) => {
636
- const { config, logger } = params;
637
- if (balanceServiceSingleton) return balanceServiceSingleton;
638
- const endpoint = config.services?.accountBalanceViewerEndpoint ?? config.services?.apiEndpoint;
639
- if (isDefined3(endpoint)) {
640
- const transport = new HttpRpcTransport(endpoint, {
641
- ...AccountBalanceViewerRpcSchemas
642
- });
643
- const viewer = new JsonRpcAccountBalanceViewer(transport);
644
- logger?.log("Using AccountBalanceViewer RPC service at", endpoint);
645
- return viewer;
646
- } else {
647
- throw new Error("No AccountBalanceViewer endpoint configured");
648
- }
649
- }, "initAccountBalanceService");
650
-
651
- // src/implementation/blockViewer.ts
652
- import { isDefined as isDefined4 } from "@xylabs/sdk-js";
653
- import { BlockViewerRpcSchemas, HttpRpcTransport as HttpRpcTransport2, JsonRpcBlockViewer } from "@xyo-network/xl1-rpc";
654
- var blockViewerSingleton;
655
- var initBlockViewer = /* @__PURE__ */ __name((params) => {
656
- const { config, logger } = params;
657
- if (blockViewerSingleton) return blockViewerSingleton;
658
- const endpoint = config.services?.apiEndpoint;
659
- if (isDefined4(endpoint)) {
660
- const transport = new HttpRpcTransport2(endpoint, {
661
- ...BlockViewerRpcSchemas
662
- });
663
- const viewer = new JsonRpcBlockViewer(transport);
664
- logger?.log("Using BlockViewer RPC service at", endpoint);
665
- return viewer;
666
- } else {
667
- throw new Error("No BlockViewer endpoint configured");
668
- }
669
- }, "initBlockViewer");
670
-
671
479
  // src/implementation/chain/index.ts
672
- import { assertEx as assertEx13 } from "@xylabs/sdk-js";
480
+ import { assertEx as assertEx9 } from "@xylabs/sdk-js";
673
481
 
674
482
  // src/implementation/chain/evm.ts
675
- import { asAddress, assertEx as assertEx12, isDefined as isDefined8, ZERO_ADDRESS as ZERO_ADDRESS2 } from "@xylabs/sdk-js";
483
+ import { asAddress, assertEx as assertEx8, isDefined as isDefined5, ZERO_ADDRESS as ZERO_ADDRESS2 } from "@xylabs/sdk-js";
676
484
  import { Wallet } from "ethers/wallet";
677
485
 
678
486
  // src/implementation/evm/initEvmProvider.ts
679
- import { assertEx as assertEx11 } from "@xylabs/sdk-js";
487
+ import { assertEx as assertEx7 } from "@xylabs/sdk-js";
680
488
 
681
489
  // src/implementation/evm/initInfuraProvider.ts
682
- import { assertEx as assertEx9, isDefined as isDefined6 } from "@xylabs/sdk-js";
490
+ import { assertEx as assertEx5, isDefined as isDefined3 } from "@xylabs/sdk-js";
683
491
  import { InfuraProvider } from "ethers/providers";
684
492
 
685
493
  // src/implementation/evm/initChainId.ts
686
- import { assertEx as assertEx8, hexFrom, isDefined as isDefined5, isHex } from "@xylabs/sdk-js";
494
+ import { assertEx as assertEx4, hexFrom, isDefined as isDefined2, isHex } from "@xylabs/sdk-js";
687
495
  var canUseChainId = /* @__PURE__ */ __name((config) => {
688
- return isDefined5(config.evm.chainId);
496
+ return isDefined2(config.evm.chainId);
689
497
  }, "canUseChainId");
690
498
  var getChainId = /* @__PURE__ */ __name((config) => {
691
- const chainId = assertEx8(config.evm.chainId, () => "Missing config.evm.chainId");
499
+ const chainId = assertEx4(config.evm.chainId, () => "Missing config.evm.chainId");
692
500
  if (isHex(chainId, {
693
501
  prefix: true
694
502
  })) {
@@ -710,11 +518,11 @@ var initInfuraProvider = /* @__PURE__ */ __name((config) => {
710
518
  return instance;
711
519
  }, "initInfuraProvider");
712
520
  var canUseInfuraProvider = /* @__PURE__ */ __name((config) => {
713
- return canUseChainId(config) && isDefined6(config.evm?.infura?.projectId) && isDefined6(config.evm?.infura?.projectSecret);
521
+ return canUseChainId(config) && isDefined3(config.evm?.infura?.projectId) && isDefined3(config.evm?.infura?.projectSecret);
714
522
  }, "canUseInfuraProvider");
715
523
  var getInfuraProviderConfig = /* @__PURE__ */ __name((config) => {
716
- const projectId = assertEx9(config.evm?.infura?.projectId, () => "Missing config.evm.infura.projectId");
717
- const projectSecret = assertEx9(config.evm?.infura?.projectSecret, () => "Missing config.evm.infura.projectSecret");
524
+ const projectId = assertEx5(config.evm?.infura?.projectId, () => "Missing config.evm.infura.projectId");
525
+ const projectSecret = assertEx5(config.evm?.infura?.projectSecret, () => "Missing config.evm.infura.projectSecret");
718
526
  return [
719
527
  getChainId(config),
720
528
  projectId,
@@ -723,17 +531,17 @@ var getInfuraProviderConfig = /* @__PURE__ */ __name((config) => {
723
531
  }, "getInfuraProviderConfig");
724
532
 
725
533
  // src/implementation/evm/initJsonRpcProvider.ts
726
- import { assertEx as assertEx10, isDefined as isDefined7 } from "@xylabs/sdk-js";
534
+ import { assertEx as assertEx6, isDefined as isDefined4 } from "@xylabs/sdk-js";
727
535
  import { JsonRpcProvider } from "ethers/providers";
728
536
  var initJsonRpcProvider = /* @__PURE__ */ __name((config) => {
729
537
  const providerConfig = getJsonRpcProviderConfig(config);
730
538
  return Promise.resolve(new JsonRpcProvider(...providerConfig));
731
539
  }, "initJsonRpcProvider");
732
540
  var canUseJsonRpcProvider = /* @__PURE__ */ __name((config) => {
733
- return canUseChainId(config) && isDefined7(config.evm.jsonRpc?.url);
541
+ return canUseChainId(config) && isDefined4(config.evm.jsonRpc?.url);
734
542
  }, "canUseJsonRpcProvider");
735
543
  var getJsonRpcProviderConfig = /* @__PURE__ */ __name((config) => {
736
- const jsonRpcUrl = assertEx10(config.evm.jsonRpc?.url, () => "Missing config.evm.jsonRpc.url");
544
+ const jsonRpcUrl = assertEx6(config.evm.jsonRpc?.url, () => "Missing config.evm.jsonRpc.url");
737
545
  return [
738
546
  jsonRpcUrl,
739
547
  getChainId(config)
@@ -749,7 +557,7 @@ var initEvmProvider = /* @__PURE__ */ __name(async ({ config }) => {
749
557
  } else if (canUseJsonRpcProvider(config)) {
750
558
  provider = initJsonRpcProvider(config);
751
559
  }
752
- return assertEx11(await provider, () => "No provider available");
560
+ return assertEx7(await provider, () => "No provider available");
753
561
  }, "initEvmProvider");
754
562
  var canUseEvmProvider = /* @__PURE__ */ __name(({ config }) => {
755
563
  return canUseInfuraProvider(config) || canUseJsonRpcProvider(config);
@@ -759,20 +567,20 @@ var canUseEvmProvider = /* @__PURE__ */ __name(({ config }) => {
759
567
  var chainStakeServiceSingleton;
760
568
  var canUseEvmContractChainService = /* @__PURE__ */ __name((config) => {
761
569
  const { id } = config.chain;
762
- return isDefined8(id) && id !== ZERO_ADDRESS2 && canUseEvmProvider({
570
+ return isDefined5(id) && id !== ZERO_ADDRESS2 && canUseEvmProvider({
763
571
  config
764
572
  });
765
573
  }, "canUseEvmContractChainService");
766
- var initEvmContractChainService = /* @__PURE__ */ __name(async ({ account, config, traceProvider, meterProvider, logger }) => {
574
+ var initEvmContractChainService = /* @__PURE__ */ __name(async ({ account, context: { config }, traceProvider, meterProvider, logger }) => {
767
575
  if (chainStakeServiceSingleton) return chainStakeServiceSingleton;
768
- const emvStakingContractAddress = assertEx12(config.chain.id, () => "config.chain.id is required");
769
- const id = assertEx12(asAddress(emvStakingContractAddress), () => "config.chain.id is not a valid address");
770
- const provider2 = assertEx12(await initEvmProvider({
576
+ const emvStakingContractAddress = assertEx8(config.chain.id, () => "config.chain.id is required");
577
+ const id = assertEx8(asAddress(emvStakingContractAddress), () => "config.chain.id is not a valid address");
578
+ const provider2 = assertEx8(await initEvmProvider({
771
579
  config
772
580
  }));
773
- const privateKey = assertEx12(account.private?.hex, () => "Account does not have a private key");
581
+ const privateKey = assertEx8(account.private?.hex, () => "Account does not have a private key");
774
582
  const runner = new Wallet(privateKey, provider2);
775
- chainStakeServiceSingleton = EvmChainService.create({
583
+ chainStakeServiceSingleton = EvmChainViewer.create({
776
584
  id,
777
585
  runner,
778
586
  traceProvider,
@@ -786,27 +594,28 @@ var initEvmContractChainService = /* @__PURE__ */ __name(async ({ account, confi
786
594
 
787
595
  // src/implementation/chain/index.ts
788
596
  var chainStakeServiceSingleton2;
789
- var initChainService = /* @__PURE__ */ __name(({ account, config, logger }) => {
597
+ var initChainService = /* @__PURE__ */ __name(({ account, context }) => {
598
+ const { logger } = context;
790
599
  logger?.log("ChainService: Initializing...");
791
600
  const result = init({
792
- config,
601
+ context,
793
602
  name: "ChainService",
794
603
  account
795
604
  });
796
605
  logger?.log("ChainService: Initialized");
797
606
  return result;
798
607
  }, "initChainService");
799
- var initMemoryChainService = /* @__PURE__ */ __name(async ({ config }) => {
800
- const result = await MemoryChainService.create({
801
- config,
608
+ var initMemoryChainService = /* @__PURE__ */ __name(async ({ context }) => {
609
+ const result = await MemoryChainViewer.create({
610
+ context,
802
611
  name: "MemoryChainService"
803
612
  });
804
- assertEx13(await result.start(), () => "Failed to start MemoryChainService");
613
+ assertEx9(await result.start(), () => "Failed to start MemoryChainService");
805
614
  return result;
806
615
  }, "initMemoryChainService");
807
616
  var init = /* @__PURE__ */ __name(async (params) => {
808
617
  if (chainStakeServiceSingleton2) return chainStakeServiceSingleton2;
809
- const { config } = params;
618
+ const { config } = params.context;
810
619
  chainStakeServiceSingleton2 = canUseEvmContractChainService(config) ? await initEvmContractChainService({
811
620
  ...params,
812
621
  name: "ChainStakeService"
@@ -814,16 +623,12 @@ var init = /* @__PURE__ */ __name(async (params) => {
814
623
  return chainStakeServiceSingleton2;
815
624
  }, "init");
816
625
 
817
- // src/implementation/head/head.ts
818
- import { assertEx as assertEx14, isDefined as isDefined10 } from "@xylabs/sdk-js";
819
- import { findMostRecentBlock as findMostRecentBlock2 } from "@xyo-network/xl1-protocol-sdk";
820
-
821
626
  // src/implementation/head/createBootstrapHead.ts
822
- import { buildNextBlock, createDeclarationIntent, createGenesisBlock } from "@xyo-network/chain-protocol";
823
- var createBootstrapHead = /* @__PURE__ */ __name(async (account, chainService) => {
824
- const chainId = await chainService.chainId();
627
+ import { buildNextBlock, createGenesisBlock } from "@xyo-network/chain-protocol";
628
+ import { createDeclarationIntent } from "@xyo-network/xl1-protocol-sdk";
629
+ var createBootstrapHead = /* @__PURE__ */ __name(async (account, chainId, genesisBlockRewardAmount, genesisBlockRewardAddress) => {
825
630
  const chain = [];
826
- const genesisBlock = await createGenesisBlock(account, chainId, 10000000n, account.address);
631
+ const genesisBlock = await createGenesisBlock(account, chainId, genesisBlockRewardAmount, genesisBlockRewardAddress);
827
632
  chain.push(genesisBlock);
828
633
  const producerDeclarationPayload = createDeclarationIntent(account.address, "producer", genesisBlock[0].block, genesisBlock[0].block + 1e4);
829
634
  const producerDeclarationBlock = await buildNextBlock(genesisBlock[0], [], [
@@ -835,279 +640,98 @@ var createBootstrapHead = /* @__PURE__ */ __name(async (account, chainService) =
835
640
  return chain;
836
641
  }, "createBootstrapHead");
837
642
 
838
- // src/implementation/head/createForkedHead/getBridgeDestinationObservation.ts
839
- import { buildNextBlock as buildNextBlock2 } from "@xyo-network/chain-protocol";
840
- import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder";
841
- import { BridgeDestinationObservationSchema } from "@xyo-network/xl1-protocol";
842
-
843
- // src/implementation/head/createForkedHead/config/getBridgeDestinationDetails.ts
844
- import { toHex as toHex2 } from "@xylabs/sdk-js";
845
-
846
- // src/implementation/head/createForkedHead/config/getForkDetails.ts
847
- import { toHex } from "@xylabs/sdk-js";
848
- import { AttoXL1ConvertFactor } from "@xyo-network/xl1-protocol";
849
- var getForkBlockReward = /* @__PURE__ */ __name(() => {
850
- return 18000000000n * AttoXL1ConvertFactor.xl1;
851
- }, "getForkBlockReward");
852
- var getForkBlockRewardHex = /* @__PURE__ */ __name(() => {
853
- return toHex(getForkBlockReward());
854
- }, "getForkBlockRewardHex");
855
-
856
- // src/implementation/head/createForkedHead/config/getBridgeDestinationDetails.ts
857
- var ethChainId = toHex2("0x1");
858
- var bridgeableTokenContract = toHex2("0xf72aE3E0DA743033AbD7A407557D684c1aE66aed");
859
- var bridgeDestAddress = toHex2("0x0e65b65B10C791942665030402c35023d88B14dA");
860
- var destConfirmation = toHex2("0x950861b10523b52cdbb4a9ee52ed26601db555d2652bfec21c709e5e70d5b7d3");
861
- var getBridgeDestChainId = /* @__PURE__ */ __name(() => ethChainId, "getBridgeDestChainId");
862
- var getBridgeDestToken = /* @__PURE__ */ __name(() => bridgeableTokenContract, "getBridgeDestToken");
863
- var getBridgeDestAddress = /* @__PURE__ */ __name(() => bridgeDestAddress, "getBridgeDestAddress");
864
- var getBridgeDestAmount = /* @__PURE__ */ __name(() => getForkBlockRewardHex(), "getBridgeDestAmount");
865
- var getBridgeDestConfirmation = /* @__PURE__ */ __name(() => destConfirmation, "getBridgeDestConfirmation");
866
- var getBridgeDestinationDetails = /* @__PURE__ */ __name(() => {
867
- return {
868
- dest: getBridgeDestChainId(),
869
- destToken: getBridgeDestToken(),
870
- destAddress: getBridgeDestAddress(),
871
- destAmount: getBridgeDestAmount()
872
- };
873
- }, "getBridgeDestinationDetails");
874
-
875
- // src/implementation/head/createForkedHead/config/getBridgeSourceDetails.ts
876
- var getBridgeSrcChainId = /* @__PURE__ */ __name((chainService) => chainService.chainId(), "getBridgeSrcChainId");
877
- var getBridgeSrcAddress = /* @__PURE__ */ __name((account) => account.address, "getBridgeSrcAddress");
878
- var getBridgeSrcToken = /* @__PURE__ */ __name((chainService) => chainService.chainId(), "getBridgeSrcToken");
879
- var getBridgeSrcAmount = /* @__PURE__ */ __name(() => getForkBlockRewardHex(), "getBridgeSrcAmount");
880
- var getBridgeSourceDetails = /* @__PURE__ */ __name(async (account, chainService) => {
881
- return {
882
- src: await getBridgeSrcChainId(chainService),
883
- srcAddress: getBridgeSrcAddress(account),
884
- srcToken: await getBridgeSrcToken(chainService),
885
- srcAmount: getBridgeSrcAmount()
886
- };
887
- }, "getBridgeSourceDetails");
888
-
889
- // src/implementation/head/createForkedHead/getBridgeDestinationObservation.ts
890
- var getBridgeDestinationObservation = /* @__PURE__ */ __name(async (previousBlock, account, chainService) => {
891
- const bridgeDestinationObservationFields = {
892
- ...await getBridgeSourceDetails(account, chainService),
893
- ...getBridgeDestinationDetails(),
894
- destConfirmation: getBridgeDestConfirmation()
895
- };
896
- const bridgeDestinationObservation = new PayloadBuilder3({
897
- schema: BridgeDestinationObservationSchema
898
- }).fields(bridgeDestinationObservationFields).build();
899
- return await buildNextBlock2(previousBlock[0], [], [
900
- bridgeDestinationObservation
901
- ], [
902
- account
903
- ]);
904
- }, "getBridgeDestinationObservation");
905
-
906
- // src/implementation/head/createForkedHead/getBridgeIntent.ts
907
- import { buildNextBlock as buildNextBlock3, createTransferPayload } from "@xyo-network/chain-protocol";
908
- import { PayloadBuilder as PayloadBuilder4 } from "@xyo-network/payload-builder";
909
- import { BridgeIntentSchema, XYO_BRIDGE_ADDRESS } from "@xyo-network/xl1-protocol";
910
- var getBridgeIntent = /* @__PURE__ */ __name(async (previousBlock, account, chainService) => {
911
- const transferPayload = createTransferPayload(account.address, {
912
- [XYO_BRIDGE_ADDRESS]: getForkBlockReward()
913
- });
914
- const nonce = `${Date.now()}`;
915
- const bridgeIntentFields = {
916
- ...await getBridgeSourceDetails(account, chainService),
917
- ...getBridgeDestinationDetails(),
918
- nonce
919
- };
920
- const bridgeIntent = new PayloadBuilder4({
921
- schema: BridgeIntentSchema
922
- }).fields(bridgeIntentFields).build();
923
- return await buildNextBlock3(previousBlock[0], [], [
924
- bridgeIntent,
925
- transferPayload
926
- ], [
927
- account
928
- ]);
929
- }, "getBridgeIntent");
930
-
931
- // src/implementation/head/createForkedHead/getBridgeSourceObservation.ts
932
- import { buildNextBlock as buildNextBlock4 } from "@xyo-network/chain-protocol";
933
- import { PayloadBuilder as PayloadBuilder5 } from "@xyo-network/payload-builder";
934
- import { BridgeSourceObservationSchema } from "@xyo-network/xl1-protocol";
935
- var getBridgeSourceObservation = /* @__PURE__ */ __name(async (previousBlock, account, chainService) => {
936
- const srcTxHash = previousBlock[0]._hash;
937
- const bridgeSourceObservationFields = {
938
- ...await getBridgeSourceDetails(account, chainService),
939
- ...getBridgeDestinationDetails(),
940
- // Observation
941
- srcConfirmation: srcTxHash
942
- };
943
- const bridgeSourceObservation = new PayloadBuilder5({
944
- schema: BridgeSourceObservationSchema
945
- }).fields(bridgeSourceObservationFields).build();
946
- return await buildNextBlock4(previousBlock[0], [], [
947
- bridgeSourceObservation
948
- ], [
949
- account
950
- ]);
951
- }, "getBridgeSourceObservation");
952
-
953
- // src/implementation/head/createForkedHead/getFirstBlockForNewChain.ts
954
- import { buildBlock } from "@xyo-network/chain-protocol";
955
- import { AttoXL1, XYO_STEP_REWARD_ADDRESS } from "@xyo-network/xl1-protocol";
956
- var getFirstBlockForNewChain = /* @__PURE__ */ __name(async (forkBlock, account, chainService) => {
957
- const { _hash: previousBlockHash, block: previousBlockNumber, step_hashes: previousStepHashes = [], protocol } = forkBlock;
958
- const chainId = await chainService.chainId();
959
- const options = {
960
- blockPayloads: [],
961
- chainId,
962
- previousBlockHash,
963
- previousBlockNumber,
964
- previousStepHashes,
965
- signers: [
966
- account
967
- ],
968
- txs: [],
969
- protocol,
970
- chainStepRewardAddress: XYO_STEP_REWARD_ADDRESS,
971
- stepRewardPoolBalance: AttoXL1(0n)
972
- };
973
- return await buildBlock(options);
974
- }, "getFirstBlockForNewChain");
975
-
976
- // src/implementation/head/createForkedHead/createForkedHead.ts
977
- var createForkedHead = /* @__PURE__ */ __name(async (forkFromBlock, account, chainService) => {
978
- const chain = [];
979
- const firstBlockForNewChain = await getFirstBlockForNewChain(forkFromBlock, account, chainService);
980
- chain.push(firstBlockForNewChain);
981
- const bridgeIntent = await getBridgeIntent(firstBlockForNewChain, account, chainService);
982
- chain.push(bridgeIntent);
983
- const bridgeSourceObservation = await getBridgeSourceObservation(bridgeIntent, account, chainService);
984
- chain.push(bridgeSourceObservation);
985
- const bridgeDestinationObservation = await getBridgeDestinationObservation(bridgeSourceObservation, account, chainService);
986
- chain.push(bridgeDestinationObservation);
987
- return chain;
988
- }, "createForkedHead");
989
-
990
- // src/implementation/head/getForkFromBlock.ts
991
- import { asHash, hexFromBigInt, isDefined as isDefined9 } from "@xylabs/sdk-js";
992
- import { isSignedBlockBoundWitnessWithHashMeta } from "@xyo-network/xl1-protocol";
993
- var getForkFromBlock = /* @__PURE__ */ __name(async (head, chainService, chainArchivist) => {
994
- if (head.chain !== await chainService.chainId()) {
995
- const forkedAtBigInt = await chainService.forkedAtHash();
996
- const forkedAtHex = hexFromBigInt(forkedAtBigInt);
997
- const forkedAtHash = asHash(forkedAtHex);
998
- if (isDefined9(forkedAtHash)) {
999
- const [forkedAtBlock] = await chainArchivist.get([
1000
- forkedAtHash
1001
- ]);
1002
- const forkedChainId = await chainService.forkedChainId();
1003
- const forkedAtBlockNumber = Number(await chainService.forkedAtBlockNumber());
1004
- if (isSignedBlockBoundWitnessWithHashMeta(forkedAtBlock) && forkedAtBlock.chain === forkedChainId && forkedAtBlock.block === forkedAtBlockNumber) {
1005
- return forkedAtBlock;
1006
- }
1007
- }
643
+ // src/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.ts
644
+ import { creatable as creatable5 } from "@xylabs/sdk-js";
645
+ import { NetworkStakeStepRewardViewerMoniker } from "@xyo-network/xl1-protocol-sdk";
646
+ function _ts_decorate5(decorators, target, key, desc) {
647
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
648
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
649
+ 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;
650
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
651
+ }
652
+ __name(_ts_decorate5, "_ts_decorate");
653
+ var BaseNetworkStakeStepRewardService = class _BaseNetworkStakeStepRewardService extends BaseService {
654
+ static {
655
+ __name(this, "BaseNetworkStakeStepRewardService");
1008
656
  }
1009
- }, "getForkFromBlock");
1010
-
1011
- // src/implementation/head/submitNewChain.ts
1012
- import { delay } from "@xylabs/sdk-js";
1013
- import { flattenHydratedBlock } from "@xyo-network/xl1-protocol-sdk";
1014
- var submitNewChain = /* @__PURE__ */ __name(async (chain, chainArchivist, chainSubmissionsArchivistWrite) => {
1015
- for (const block of chain) {
1016
- const [bw] = block;
1017
- await chainSubmissionsArchivistWrite.insert(flattenHydratedBlock(block));
1018
- while (true) {
1019
- const result = await chainArchivist.get([
1020
- bw._hash
1021
- ]);
1022
- if (result.length > 0) break;
1023
- await delay(1e3);
1024
- }
657
+ static defaultMoniker = NetworkStakeStepRewardViewerMoniker;
658
+ static monikers = [
659
+ NetworkStakeStepRewardViewerMoniker
660
+ ];
661
+ moniker = _BaseNetworkStakeStepRewardService.defaultMoniker;
662
+ networkStakeStepRewardAddressHistory(_address) {
663
+ throw new Error("Method [networkStakeStepRewardAddressHistory] not implemented.");
1025
664
  }
1026
- }, "submitNewChain");
1027
-
1028
- // src/implementation/head/head.ts
1029
- var headSingleton;
1030
- var initHead = /* @__PURE__ */ __name(async (params) => {
1031
- const { account, chainArchivist, chainSubmissionsArchivistWrite, chainService } = params;
1032
- if (headSingleton) return headSingleton;
1033
- let head = await findMostRecentBlock2(chainArchivist);
1034
- if (head) {
1035
- const forkFromBlock = await getForkFromBlock(head, chainService, chainArchivist);
1036
- if (isDefined10(forkFromBlock)) {
1037
- const chain = await createForkedHead(forkFromBlock, account, chainService);
1038
- await submitNewChain(chain, chainArchivist, chainSubmissionsArchivistWrite);
1039
- const newBlock = assertEx14(chain.at(-1), () => new Error("Failed to get new head after forking"));
1040
- head = newBlock[0];
1041
- }
1042
- } else {
1043
- const chain = await createBootstrapHead(account, chainService);
1044
- await submitNewChain(chain, chainArchivist, chainSubmissionsArchivistWrite);
1045
- const newBlock = assertEx14(chain.at(-1), () => new Error("Failed to get new head after genesis"));
1046
- head = newBlock[0];
1047
- }
1048
- headSingleton = head;
1049
- return headSingleton;
1050
- }, "initHead");
1051
-
1052
- // src/implementation/mempoolRunner.ts
1053
- import { isDefined as isDefined11 } from "@xylabs/sdk-js";
1054
- import { HttpRpcTransport as HttpRpcTransport3, JsonRpcMempoolRunner, MempoolRunnerRpcSchemas } from "@xyo-network/xl1-rpc";
1055
- var mempoolRunnerSingleton;
1056
- var initMempoolRunner = /* @__PURE__ */ __name((params) => {
1057
- const { config, logger } = params;
1058
- if (mempoolRunnerSingleton) return mempoolRunnerSingleton;
1059
- const endpoint = config.services?.apiEndpoint;
1060
- if (isDefined11(endpoint)) {
1061
- const transport = new HttpRpcTransport3(endpoint, {
1062
- ...MempoolRunnerRpcSchemas
1063
- });
1064
- const runner = new JsonRpcMempoolRunner(transport);
1065
- logger?.log("Using mempoolRunner RPC service at", endpoint);
1066
- return runner;
1067
- } else {
1068
- throw new Error("No MempoolRunner endpoint configured");
665
+ networkStakeStepRewardAddressReward(_context, _address) {
666
+ throw new Error("Method [networkStakeStepRewardAddressReward] not implemented.");
1069
667
  }
1070
- }, "initMempoolRunner");
1071
-
1072
- // src/implementation/mempoolViewer.ts
1073
- import { isDefined as isDefined12 } from "@xylabs/sdk-js";
1074
- import { HttpRpcTransport as HttpRpcTransport4, JsonRpcMempoolViewer, MempoolViewerRpcSchemas } from "@xyo-network/xl1-rpc";
1075
- var mempoolViewerSingleton;
1076
- var initMempoolViewer = /* @__PURE__ */ __name((params) => {
1077
- const { config, logger } = params;
1078
- if (mempoolViewerSingleton) return mempoolViewerSingleton;
1079
- const endpoint = config.services?.apiEndpoint;
1080
- if (isDefined12(endpoint)) {
1081
- const transport = new HttpRpcTransport4(endpoint, {
1082
- ...MempoolViewerRpcSchemas
1083
- });
1084
- const viewer = new JsonRpcMempoolViewer(transport);
1085
- logger?.log("Using MempoolViewer RPC service at", endpoint);
1086
- return viewer;
1087
- } else {
1088
- throw new Error("No MempoolViewer endpoint configured");
668
+ networkStakeStepRewardAddressShare(_context, _address) {
669
+ throw new Error("Method [networkStakeStepRewardAddressShare] not implemented.");
1089
670
  }
1090
- }, "initMempoolViewer");
1091
-
1092
- // src/implementation/pendingTransactions.ts
1093
- import { isDefined as isDefined14 } from "@xylabs/sdk-js";
1094
- import { timeBudget } from "@xyo-network/xl1-protocol-sdk";
1095
- import { HttpRpcTransport as HttpRpcTransport5, JsonRpcMempoolViewer as JsonRpcMempoolViewer2, MempoolViewerRpcSchemas as MempoolViewerRpcSchemas2 } from "@xyo-network/xl1-rpc";
671
+ networkStakeStepRewardClaimedByAddress(_address) {
672
+ throw new Error("Method [networkStakeStepRewardClaimedByAddress] not implemented.");
673
+ }
674
+ networkStakeStepRewardForPosition(_position, _range) {
675
+ throw new Error("Method [networkStakeStepRewardForPosition] not implemented.");
676
+ }
677
+ networkStakeStepRewardForStep(_context) {
678
+ throw new Error("Method [networkStakeStepRewardForStep] not implemented.");
679
+ }
680
+ networkStakeStepRewardForStepForPosition(_context, _position) {
681
+ throw new Error("Method [networkStakeStepRewardForStepForPosition] not implemented.");
682
+ }
683
+ networkStakeStepRewardPoolRewards(_context) {
684
+ throw new Error("Method [networkStakeStepRewardPoolRewards] not implemented.");
685
+ }
686
+ networkStakeStepRewardPoolShares(_context) {
687
+ throw new Error("Method [networkStakeStepRewardPoolShares] not implemented.");
688
+ }
689
+ networkStakeStepRewardPositionWeight(_context, _position) {
690
+ throw new Error("Method [networkStakeStepRewardPositionWeight] not implemented.");
691
+ }
692
+ networkStakeStepRewardPotentialPositionLoss(_context, _position) {
693
+ throw new Error("Method [networkStakeStepRewardPotentialPositionLoss] not implemented.");
694
+ }
695
+ networkStakeStepRewardRandomizer(_context) {
696
+ throw new Error("Method [networkStakeStepRewardRandomizer] not implemented.");
697
+ }
698
+ networkStakeStepRewardStakerCount(_context) {
699
+ throw new Error("Method [networkStakeStepRewardStakerCount] not implemented.");
700
+ }
701
+ networkStakeStepRewardUnclaimedByAddress(_address) {
702
+ throw new Error("Method [networkStakeStepRewardUnclaimedByAddress] not implemented.");
703
+ }
704
+ networkStakeStepRewardWeightForAddress(_context, _address) {
705
+ throw new Error("Method [networkStakeStepRewardWeightForAddress] not implemented.");
706
+ }
707
+ networkStakeStepRewardsForPosition(_position, _range) {
708
+ throw new Error("Method [networkStakeStepRewardsForPosition] not implemented.");
709
+ }
710
+ networkStakeStepRewardsForRange(_range) {
711
+ throw new Error("Method [networkStakeStepRewardsForRange] not implemented.");
712
+ }
713
+ networkStakeStepRewardsForStepLevel(_stepLevel, _range) {
714
+ throw new Error("Method [networkStakeStepRewardsForStepLevel] not implemented.");
715
+ }
716
+ };
717
+ BaseNetworkStakeStepRewardService = _ts_decorate5([
718
+ creatable5()
719
+ ], BaseNetworkStakeStepRewardService);
1096
720
 
1097
721
  // src/PendingTransactions/BasePendingTransactions.ts
1098
722
  import { ValueType } from "@opentelemetry/api";
1099
- import { assertEx as assertEx15, creatable as creatable5, exists, filterAs, filterAsync, forget, isDefined as isDefined13, isUndefined as isUndefined2 } from "@xylabs/sdk-js";
723
+ import { assertEx as assertEx10, creatable as creatable6, exists, filterAs, filterAsync, forget, isDefined as isDefined6, isUndefined } from "@xylabs/sdk-js";
1100
724
  import { MemoryArchivist } from "@xyo-network/archivist-memory";
1101
- import { asBlockBoundWitnessWithHashMeta, asXL1BlockNumber as asXL1BlockNumber2, isTransactionBoundWitnessWithStorageMeta } from "@xyo-network/xl1-protocol";
1102
- import { findMostRecentBlock as findMostRecentBlock3, MempoolViewerMoniker } from "@xyo-network/xl1-protocol-sdk";
725
+ import { asBlockBoundWitnessWithHashMeta, asXL1BlockNumber, isTransactionBoundWitnessWithStorageMeta } from "@xyo-network/xl1-protocol";
726
+ import { findMostRecentBlock as findMostRecentBlock2, MempoolViewerMoniker } from "@xyo-network/xl1-protocol-sdk";
1103
727
  import { TransactionJsonSchemaValidator, validateTransaction } from "@xyo-network/xl1-validation";
1104
728
  import { Mutex as Mutex2 } from "async-mutex";
1105
729
 
1106
730
  // src/PendingTransactions/bundledPayloadToHydratedTransaction.ts
1107
- import { PayloadBuilder as PayloadBuilder6 } from "@xyo-network/payload-builder";
731
+ import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
1108
732
  import { asSignedTransactionBoundWitnessWithHashMeta } from "@xyo-network/xl1-protocol";
1109
733
  var bundledPayloadToHydratedTransaction = /* @__PURE__ */ __name(async (payload) => {
1110
- const withHashMeta = await PayloadBuilder6.addHashMeta(payload.payloads);
734
+ const withHashMeta = await PayloadBuilder2.addHashMeta(payload.payloads);
1111
735
  const tx = asSignedTransactionBoundWitnessWithHashMeta(withHashMeta.find((p) => p._hash === payload.root));
1112
736
  if (tx) {
1113
737
  return [
@@ -1118,7 +742,7 @@ var bundledPayloadToHydratedTransaction = /* @__PURE__ */ __name(async (payload)
1118
742
  }, "bundledPayloadToHydratedTransaction");
1119
743
 
1120
744
  // src/PendingTransactions/hydratedTransactionToPayloadBundle.ts
1121
- import { PayloadBuilder as PayloadBuilder7 } from "@xyo-network/payload-builder";
745
+ import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder";
1122
746
  import { PayloadBundleSchema } from "@xyo-network/payload-model";
1123
747
  import { flattenHydratedTransaction } from "@xyo-network/xl1-protocol-sdk";
1124
748
  var hydratedTransactionToPayloadBundle = /* @__PURE__ */ __name((transaction) => {
@@ -1126,8 +750,8 @@ var hydratedTransactionToPayloadBundle = /* @__PURE__ */ __name((transaction) =>
1126
750
  return bundle(root, transaction);
1127
751
  }, "hydratedTransactionToPayloadBundle");
1128
752
  var bundle = /* @__PURE__ */ __name((root, transaction) => {
1129
- const payloads = flattenHydratedTransaction(transaction).flatMap((p) => PayloadBuilder7.omitStorageMeta(p));
1130
- return new PayloadBuilder7({
753
+ const payloads = flattenHydratedTransaction(transaction).flatMap((p) => PayloadBuilder3.omitStorageMeta(p));
754
+ return new PayloadBuilder3({
1131
755
  schema: PayloadBundleSchema
1132
756
  }).fields({
1133
757
  payloads,
@@ -1136,13 +760,13 @@ var bundle = /* @__PURE__ */ __name((root, transaction) => {
1136
760
  }, "bundle");
1137
761
 
1138
762
  // src/PendingTransactions/BasePendingTransactions.ts
1139
- function _ts_decorate5(decorators, target, key, desc) {
763
+ function _ts_decorate6(decorators, target, key, desc) {
1140
764
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1141
765
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1142
766
  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;
1143
767
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1144
768
  }
1145
- __name(_ts_decorate5, "_ts_decorate");
769
+ __name(_ts_decorate6, "_ts_decorate");
1146
770
  var BasePendingTransactionsService = class _BasePendingTransactionsService extends BaseService {
1147
771
  static {
1148
772
  __name(this, "BasePendingTransactionsService");
@@ -1195,23 +819,20 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1195
819
  return this.params.additionalPendingTransactionValidators ?? [];
1196
820
  }
1197
821
  get chainArchivist() {
1198
- return assertEx15(this.params.chainArchivist, () => "No completed blocks with data archivist");
1199
- }
1200
- get chainId() {
1201
- return assertEx15(this.params.chainId, () => "No chain id");
822
+ return assertEx10(this.params.chainArchivist, () => "No completed blocks with data archivist");
1202
823
  }
1203
824
  get pendingBundledTransactionsArchivist() {
1204
- return assertEx15(this.params.pendingBundledTransactionsArchivist, () => "No pending bundled transactions archivist");
825
+ return assertEx10(this.params.pendingBundledTransactionsArchivist, () => "No pending bundled transactions archivist");
1205
826
  }
1206
827
  get pendingBundledTransactionsLocalArchivist() {
1207
- return assertEx15(this._curatedPendingBundledTransactionsArchivist, () => "No pending bundled transactions curated archivist");
828
+ return assertEx10(this._curatedPendingBundledTransactionsArchivist, () => "No pending bundled transactions curated archivist");
1208
829
  }
1209
830
  get pendingTransactionsCount() {
1210
831
  forget(this.countPendingTransactions());
1211
832
  return this._pendingTransactionsCount;
1212
833
  }
1213
834
  get rejectedTransactionsArchivist() {
1214
- return assertEx15(this.params.rejectedTransactionsArchivist, () => "No rejected transactions archivist");
835
+ return assertEx10(this.params.rejectedTransactionsArchivist, () => "No rejected transactions archivist");
1215
836
  }
1216
837
  async createHandler() {
1217
838
  await super.createHandler();
@@ -1247,7 +868,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1247
868
  let lastHead = filterAs(await this.chainArchivist.next({
1248
869
  limit: 100
1249
870
  }), (x) => asBlockBoundWitnessWithHashMeta(x)).at(-1);
1250
- if (isUndefined2(lastHead)) return [];
871
+ if (isUndefined(lastHead)) return [];
1251
872
  await this.pruneCuratedPendingTransactionsArchivist(lastHead._hash);
1252
873
  const foundPendingTransactions = [];
1253
874
  let cursor;
@@ -1261,11 +882,11 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1261
882
  cursor = pendingBundledTransactions.at(-1)?._sequence;
1262
883
  const undeletedTransactionBundles = pendingBundledTransactions.filter((tx) => !this._removablePendingTransactionHashes.has(tx.root));
1263
884
  const transactions = (await Promise.all(undeletedTransactionBundles.map((p) => bundledPayloadToHydratedTransaction(p)))).filter(exists);
1264
- const activeTransactions = transactions.filter(isTransactionActive(asXL1BlockNumber2(lastHead.block + 1, true)));
885
+ const activeTransactions = transactions.filter(isTransactionActive(asXL1BlockNumber(lastHead.block + 1, true)));
1265
886
  const txValidationResults = await Promise.all(activeTransactions.map(async (tx) => [
1266
887
  tx,
1267
888
  await validateTransaction(tx, {
1268
- chainId: this.chainId
889
+ chainId: this.params.chainId
1269
890
  }, this.additionalPendingTransactionValidators)
1270
891
  ]));
1271
892
  const validTransactions = txValidationResults.filter(([, errors]) => errors.length === 0).map(([tx]) => tx);
@@ -1290,8 +911,8 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1290
911
  }
1291
912
  async cleanupWorker() {
1292
913
  return await this._updateCuratedPendingTransactionsArchivistMutex.runExclusive(async () => {
1293
- const lastHead = await findMostRecentBlock3(this.chainArchivist);
1294
- if (isDefined13(lastHead)) await this.pruneCuratedPendingTransactionsArchivist(lastHead._hash);
914
+ const lastHead = await findMostRecentBlock2(this.chainArchivist);
915
+ if (isDefined6(lastHead)) await this.pruneCuratedPendingTransactionsArchivist(lastHead._hash);
1295
916
  }, _BasePendingTransactionsService.MutexPriority.PurgeTransactions);
1296
917
  }
1297
918
  async countPendingTransactions() {
@@ -1318,7 +939,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1318
939
  }))).filter(exists);
1319
940
  const validTransactions = await filterAsync(hydratedUnprocessedTransactions, async (tx) => {
1320
941
  const errors = await validateTransaction(tx, {
1321
- chainId: this.chainId
942
+ chainId: this.params.chainId
1322
943
  }, [
1323
944
  TransactionJsonSchemaValidator
1324
945
  ]);
@@ -1353,7 +974,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1353
974
  let [lastHead] = filterAs(await this.chainArchivist.get([
1354
975
  head
1355
976
  ]), (x) => asBlockBoundWitnessWithHashMeta(x));
1356
- while (isDefined13(lastHead)) {
977
+ while (isDefined6(lastHead)) {
1357
978
  const pendingBundledTransactions = await this.pendingBundledTransactionsLocalArchivist.next({
1358
979
  limit: 100,
1359
980
  order: "asc",
@@ -1367,7 +988,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1367
988
  foundPendingTransactionsToDeleteHashes.push(...deletedTransactionBundles.map((tx) => tx._hash).filter(exists));
1368
989
  const undeletedTransactionBundles = pendingBundledTransactions.filter((tx) => !this._removablePendingTransactionHashes.has(tx.root));
1369
990
  const transactions = (await Promise.all(undeletedTransactionBundles.map((p) => bundledPayloadToHydratedTransaction(p)))).filter(exists);
1370
- const expiredTransactions = transactions.filter(isTransactionExpired(asXL1BlockNumber2(lastHead.block + 1, true)));
991
+ const expiredTransactions = transactions.filter(isTransactionExpired(asXL1BlockNumber(lastHead.block + 1, true)));
1371
992
  const expiredBundleHashes = expiredTransactions.map((expiredHydratedTx) => (
1372
993
  // Find the corresponding payload bundle hash for the expired transaction
1373
994
  pendingBundledTransactions.find((bundledTx) => bundledTx.root === expiredHydratedTx[0]._hash)?._hash
@@ -1387,56 +1008,68 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1387
1008
  });
1388
1009
  }
1389
1010
  };
1390
- BasePendingTransactionsService = _ts_decorate5([
1391
- creatable5()
1011
+ BasePendingTransactionsService = _ts_decorate6([
1012
+ creatable6()
1392
1013
  ], BasePendingTransactionsService);
1393
1014
  var isTransactionExpired = /* @__PURE__ */ __name((block) => ([txBw]) => txBw.exp < block, "isTransactionExpired");
1394
1015
  var isTransactionActive = /* @__PURE__ */ __name((block) => ([txBw]) => txBw.nbf <= block && txBw.exp >= block, "isTransactionActive");
1395
1016
 
1396
- // src/implementation/pendingTransactions.ts
1397
- var serviceSingleton;
1398
- var initPendingTransactions = /* @__PURE__ */ __name(async ({ config, params, logger }) => {
1399
- if (serviceSingleton) return serviceSingleton;
1400
- return await timeBudget("initPendingTransactions", logger, async () => {
1401
- const endpoint = config.services?.apiEndpoint;
1402
- if (isDefined14(endpoint)) {
1403
- const transport = new HttpRpcTransport5(endpoint, {
1404
- ...MempoolViewerRpcSchemas2
1405
- });
1406
- const viewer = new JsonRpcMempoolViewer2(transport);
1407
- logger?.log("Using MempoolViewer RPC service at", endpoint);
1408
- return viewer;
1409
- } else {
1410
- serviceSingleton = await BasePendingTransactionsService.create(params);
1411
- }
1412
- return serviceSingleton;
1413
- }, 2e3, true);
1414
- }, "initPendingTransactions");
1415
-
1416
- // src/implementation/producer.ts
1417
- import { timeBudget as timeBudget2 } from "@xyo-network/xl1-protocol-sdk";
1017
+ // src/Schemas/BaseSchemasService.ts
1018
+ import { creatable as creatable7, spanRootAsync } from "@xylabs/sdk-js";
1019
+ import { schemasSummary } from "@xyo-network/xl1-protocol-sdk";
1020
+ function _ts_decorate7(decorators, target, key, desc) {
1021
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1022
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1023
+ 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;
1024
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
1025
+ }
1026
+ __name(_ts_decorate7, "_ts_decorate");
1027
+ var BaseSchemasService = class extends BaseService {
1028
+ static {
1029
+ __name(this, "BaseSchemasService");
1030
+ }
1031
+ async schema(head, schema) {
1032
+ return (await this.schemas(head, [
1033
+ schema
1034
+ ]))[schema] ?? 0;
1035
+ }
1036
+ async schemas(head, schemas) {
1037
+ return await spanRootAsync("transfers", async () => {
1038
+ const [summary] = await schemasSummary(this.params.schemasStepSummaryContext);
1039
+ const result = {};
1040
+ for (const schema of schemas) {
1041
+ const count = summary[schema] ?? 0;
1042
+ result[schema] = count;
1043
+ }
1044
+ return result;
1045
+ });
1046
+ }
1047
+ };
1048
+ BaseSchemasService = _ts_decorate7([
1049
+ creatable7()
1050
+ ], BaseSchemasService);
1418
1051
 
1419
1052
  // src/simple/block/runner/SimpleBlockRunner.ts
1420
- import { AbstractCreatable as AbstractCreatable3, AddressZod, asHash as asHash2, assertEx as assertEx17, creatable as creatable6, exists as exists2, hexToBigInt, isDefined as isDefined15 } from "@xylabs/sdk-js";
1053
+ import { assertEx as assertEx12, exists as exists2, hexToBigInt, isDefined as isDefined7 } from "@xylabs/sdk-js";
1421
1054
  import { MemoryArchivist as MemoryArchivist2 } from "@xyo-network/archivist-memory";
1422
1055
  import { FixedPercentageBlockRewardDiviner, FixedPercentageBlockRewardDivinerConfigSchema } from "@xyo-network/chain-modules";
1423
- import { buildNextBlock as buildNextBlock5, createDeclarationIntent as createDeclarationIntent2 } from "@xyo-network/chain-protocol";
1424
- import { PayloadBuilder as PayloadBuilder9 } from "@xyo-network/payload-builder";
1425
- import { asBlockBoundWitness as asBlockBoundWitness2, AttoXL1 as AttoXL12, BlockNumberSchema, defaultRewardRatio, TimeSchema, XYO_STEP_REWARD_ADDRESS as XYO_STEP_REWARD_ADDRESS2 } from "@xyo-network/xl1-protocol";
1426
- import z from "zod";
1056
+ import { buildNextBlock as buildNextBlock2 } from "@xyo-network/chain-protocol";
1057
+ import { PayloadBuilder as PayloadBuilder5 } from "@xyo-network/payload-builder";
1058
+ import { asBlockBoundWitness, AttoXL1, BlockNumberSchema, defaultRewardRatio, XYO_STEP_REWARD_ADDRESS } from "@xyo-network/xl1-protocol";
1059
+ import { AbstractCreatableProvider as AbstractCreatableProvider2, AccountBalanceViewerMoniker, BlockRewardViewerMoniker as BlockRewardViewerMoniker2, BlockRunnerMoniker, BlockValidationViewerMoniker, creatableProvider, createDeclarationIntent as createDeclarationIntent2, MempoolRunnerMoniker, MempoolViewerMoniker as MempoolViewerMoniker2, TimeSyncViewerMoniker } from "@xyo-network/xl1-protocol-sdk";
1427
1060
 
1428
1061
  // src/simple/block/runner/generateTransactionFeeTransfers.ts
1429
- import { hexFromBigInt as hexFromBigInt2 } from "@xylabs/sdk-js";
1430
- import { assertEx as assertEx16 } from "@xylabs/sdk-js";
1431
- import { PayloadBuilder as PayloadBuilder8 } from "@xyo-network/payload-builder";
1062
+ import { hexFromBigInt } from "@xylabs/sdk-js";
1063
+ import { assertEx as assertEx11 } from "@xylabs/sdk-js";
1064
+ import { PayloadBuilder as PayloadBuilder4 } from "@xyo-network/payload-builder";
1432
1065
  import { TransferSchema, XYO_ZERO_ADDRESS } from "@xyo-network/xl1-protocol";
1433
1066
  import { transactionRequiredGas } from "@xyo-network/xl1-protocol-sdk";
1434
1067
  import { HydratedTransactionWrapper } from "@xyo-network/xl1-wrappers";
1435
1068
  async function generateTransactionFeeTransfers(address, transactions) {
1436
1069
  const txs = await Promise.all(transactions.map(async (tx) => {
1437
1070
  return HydratedTransactionWrapper.parse([
1438
- await PayloadBuilder8.addStorageMeta(tx[0]),
1439
- await PayloadBuilder8.addStorageMeta(tx[1])
1071
+ await PayloadBuilder4.addStorageMeta(tx[0]),
1072
+ await PayloadBuilder4.addStorageMeta(tx[1])
1440
1073
  ]);
1441
1074
  }));
1442
1075
  const txBaseFeeCosts = {};
@@ -1456,49 +1089,51 @@ async function generateTransactionFeeTransfers(address, transactions) {
1456
1089
  from,
1457
1090
  transfers: {
1458
1091
  // burn the base fee
1459
- [XYO_ZERO_ADDRESS]: hexFromBigInt2(amount)
1092
+ [XYO_ZERO_ADDRESS]: hexFromBigInt(amount)
1460
1093
  }
1461
1094
  };
1462
1095
  return payload;
1463
1096
  });
1464
1097
  for (const [from, amount] of Object.entries(txGasCosts)) {
1465
- const fromPayload = assertEx16(payloads.find((p) => p.from === from), () => "from payload not found");
1466
- fromPayload.transfers[address] = hexFromBigInt2(amount);
1098
+ const fromPayload = assertEx11(payloads.find((p) => p.from === from), () => "from payload not found");
1099
+ fromPayload.transfers[address] = hexFromBigInt(amount);
1467
1100
  }
1468
1101
  return payloads;
1469
1102
  }
1470
1103
  __name(generateTransactionFeeTransfers, "generateTransactionFeeTransfers");
1471
1104
 
1472
1105
  // src/simple/block/runner/SimpleBlockRunner.ts
1473
- function _ts_decorate6(decorators, target, key, desc) {
1106
+ function _ts_decorate8(decorators, target, key, desc) {
1474
1107
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1475
1108
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1476
1109
  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;
1477
1110
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1478
1111
  }
1479
- __name(_ts_decorate6, "_ts_decorate");
1112
+ __name(_ts_decorate8, "_ts_decorate");
1480
1113
  var DEFAULT_BLOCK_SIZE = 10;
1481
1114
  var XYO_PRODUCER_REDECLARATION_DURATION = 1e4;
1482
1115
  var XYO_PRODUCER_REDECLARATION_WINDOW = 500;
1483
- var SimpleBlockRunnerParamsZod = z.object({
1484
- balanceViewer: z.object().loose(),
1485
- blockRewardViewer: z.object().loose(),
1486
- chainId: z.string(),
1487
- config: z.object().loose(),
1488
- mempoolViewer: z.object().loose(),
1489
- mempoolRunner: z.object().loose(),
1490
- rejectedTransactionsArchivist: z.object().loose().optional(),
1491
- rewardAddress: AddressZod,
1492
- time: z.object().loose(),
1493
- validateHydratedBlockState: z.function().optional()
1494
- });
1495
- var SimpleBlockRunner = class _SimpleBlockRunner extends AbstractCreatable3 {
1116
+ var SimpleBlockRunner = class _SimpleBlockRunner extends AbstractCreatableProvider2 {
1496
1117
  static {
1497
1118
  __name(this, "SimpleBlockRunner");
1498
1119
  }
1120
+ static defaultMoniker = BlockRunnerMoniker;
1121
+ static monikers = [
1122
+ BlockRunnerMoniker
1123
+ ];
1124
+ moniker = _SimpleBlockRunner.defaultMoniker;
1499
1125
  _blockRewardDiviner;
1500
1126
  _lastRedeclarationBlock;
1501
1127
  _rejectedTransactionsArchivist;
1128
+ _account;
1129
+ _accountBalanceViewer;
1130
+ _address;
1131
+ _blockRewardViewer;
1132
+ _blockValidationViewer;
1133
+ _mempoolRunner;
1134
+ _mempoolViewer;
1135
+ _rewardAddress;
1136
+ _timeSyncViewer;
1502
1137
  /**
1503
1138
  * The default block size for a block
1504
1139
  */
@@ -1519,29 +1154,29 @@ var SimpleBlockRunner = class _SimpleBlockRunner extends AbstractCreatable3 {
1519
1154
  static get RedeclarationWindow() {
1520
1155
  return XYO_PRODUCER_REDECLARATION_WINDOW;
1521
1156
  }
1522
- get address() {
1523
- return this.account.address;
1524
- }
1525
1157
  get account() {
1526
- return assertEx17(this.params.account, () => "account is required");
1158
+ return this._account;
1527
1159
  }
1528
- get balanceViewer() {
1529
- return assertEx17(this.params.balanceViewer, () => "balanceViewer is required");
1160
+ get accountBalanceViewer() {
1161
+ return this._accountBalanceViewer;
1162
+ }
1163
+ get address() {
1164
+ return this._address;
1530
1165
  }
1531
1166
  get blockRewardViewer() {
1532
- return assertEx17(this.params.blockRewardViewer, () => "blockRewardViewer is required");
1167
+ return this._blockRewardViewer;
1533
1168
  }
1534
- get chainId() {
1535
- return assertEx17(this.params.chainId, () => "chainId is required");
1169
+ get blockValidationViewer() {
1170
+ return this._blockValidationViewer;
1536
1171
  }
1537
1172
  // protected get electionService() {
1538
1173
  // return assertEx(this.params.electionService, () => 'electionService is required')
1539
1174
  // }
1540
1175
  get mempoolRunner() {
1541
- return assertEx17(this.params.mempoolRunner, () => "mempoolRunner is required");
1176
+ return this._mempoolRunner;
1542
1177
  }
1543
1178
  get mempoolViewer() {
1544
- return assertEx17(this.params.mempoolViewer, () => "mempoolViewer is required");
1179
+ return this._mempoolViewer;
1545
1180
  }
1546
1181
  // protected get pendingTransactionsService() {
1547
1182
  // return assertEx(this.params.pendingTransactionsService, () => 'Missing pendingTransactionsService')
@@ -1550,34 +1185,35 @@ var SimpleBlockRunner = class _SimpleBlockRunner extends AbstractCreatable3 {
1550
1185
  return this._rejectedTransactionsArchivist;
1551
1186
  }
1552
1187
  get rewardAddress() {
1553
- return assertEx17(this.params.rewardAddress, () => "No reward address provided");
1188
+ return assertEx12(this.params.rewardAddress, () => "No reward address provided");
1554
1189
  }
1555
1190
  // protected get stakeIntentService(): StakeIntentService {
1556
1191
  // return assertEx(this.params.stakeIntentService, () => 'No StakeIntentService provided')
1557
1192
  // }
1558
- get time() {
1559
- return assertEx17(this.params.time, () => "No TimeSyncViewer provided");
1193
+ get timeSyncViewer() {
1194
+ return this._timeSyncViewer;
1560
1195
  }
1561
1196
  // protected get validateHydratedBlockState() {
1562
1197
  // return assertEx(this.params.validateHydratedBlockState, () => 'validateHydratedBlockState is required')
1563
1198
  // }
1564
- static async paramsHandler(params) {
1565
- SimpleBlockRunnerParamsZod.parse(params);
1566
- const rejectedTransactionsArchivist = params?.rejectedTransactionsArchivist ?? await MemoryArchivist2.create();
1567
- return {
1568
- ...await super.paramsHandler(params),
1569
- ...params,
1570
- rejectedTransactionsArchivist
1571
- };
1199
+ async createHandler() {
1200
+ this._rejectedTransactionsArchivist = this.params.rejectedTransactionsArchivist ?? await MemoryArchivist2.create();
1201
+ this._account = assertEx12(this.params.account, () => "Account is required");
1202
+ this._rewardAddress = assertEx12(this.params.rewardAddress, () => "No reward address provided");
1203
+ this._address = this.account.address;
1204
+ this._accountBalanceViewer = await this.locateAndCreate(AccountBalanceViewerMoniker);
1205
+ this._blockRewardViewer = await this.locateAndCreate(BlockRewardViewerMoniker2);
1206
+ this._blockValidationViewer = await this.locator.getInstance(BlockValidationViewerMoniker);
1207
+ this._mempoolRunner = await this.locateAndCreate(MempoolRunnerMoniker);
1208
+ this._mempoolViewer = await this.locateAndCreate(MempoolViewerMoniker2);
1209
+ this._timeSyncViewer = await this.locateAndCreate(TimeSyncViewerMoniker);
1572
1210
  }
1573
1211
  async next(head) {
1574
- if (head.chain !== this.chainId) return;
1575
1212
  return await this.proposeNextValidBlock(head);
1576
1213
  }
1577
1214
  async produceNextBlock(head, force) {
1578
- assertEx17(head.chain === this.chainId, () => "Block chain ID does not match");
1579
1215
  const result = await this.proposeNextValidBlock(head);
1580
- return force ? assertEx17(result, () => "Failed to produce next block") : result;
1216
+ return force ? assertEx12(result, () => "Failed to produce next block") : result;
1581
1217
  }
1582
1218
  async getBlockRewardTransfers(block) {
1583
1219
  if (!this._blockRewardDiviner) {
@@ -1591,7 +1227,7 @@ var SimpleBlockRunner = class _SimpleBlockRunner extends AbstractCreatable3 {
1591
1227
  }
1592
1228
  });
1593
1229
  }
1594
- const blockId = new PayloadBuilder9({
1230
+ const blockId = new PayloadBuilder5({
1595
1231
  schema: BlockNumberSchema
1596
1232
  }).fields({
1597
1233
  block
@@ -1607,50 +1243,61 @@ var SimpleBlockRunner = class _SimpleBlockRunner extends AbstractCreatable3 {
1607
1243
  * @returns chain stake intent for the producer redeclaration, or undefined if no redeclaration is needed
1608
1244
  */
1609
1245
  getProducerRedeclaration(head) {
1610
- if (this.params.config.producer.disableIntentRedeclaration) return;
1246
+ if (this.params.context.config.producer.disableIntentRedeclaration) return;
1611
1247
  const currentBlock = head.block;
1612
1248
  return createDeclarationIntent2(this.address, "producer", currentBlock, currentBlock + _SimpleBlockRunner.RedeclarationDuration);
1613
1249
  }
1614
1250
  async proposeNextValidBlock(head, validateBalances = false, force = false) {
1615
1251
  return await this.spanAsync("proposeNextValidBlock", async () => {
1616
- const { block: previousBlock } = assertEx17(asBlockBoundWitness2(head), () => "Invalid head block");
1617
- const nextBlock = previousBlock + 1;
1618
- const nextBlockTransactionsStart = Date.now();
1619
- const nextBlockTransactions = await this.mempoolViewer.pendingTransactions({
1620
- limit: _SimpleBlockRunner.DefaultBlockSize
1621
- });
1622
- const nextBlockTransactionsDuration = Date.now() - nextBlockTransactionsStart;
1623
- if (nextBlockTransactionsDuration > 200) {
1624
- this.logger?.warn(`[Slow] Fetched ${nextBlockTransactions.length} pending transactions in ${nextBlockTransactionsDuration}ms}`);
1625
- }
1626
- const blockPayloads = [];
1627
- const producerRedeclarationPayload = await this.getProducerRedeclaration(head);
1628
- if (producerRedeclarationPayload) blockPayloads.push(producerRedeclarationPayload);
1629
- if (nextBlockTransactions.length === 0 && !this.heartbeatRequired(head) && !force) return;
1630
- const rewardTransferPayloads = await this.getBlockRewardTransfers(nextBlock);
1631
- blockPayloads.push(...rewardTransferPayloads);
1632
- const transactionTransfers = await generateTransactionFeeTransfers(this.address, nextBlockTransactions);
1633
- const timeStart = Date.now();
1634
- const timePayload = await this.generateTimePayload(head);
1635
- const timeDuration = Date.now() - timeStart;
1636
- if (timeDuration > 100) {
1637
- this.logger?.warn(`[Slow] Generated time payload in ${timeDuration}ms`);
1252
+ try {
1253
+ const { block: previousBlock } = assertEx12(asBlockBoundWitness(head), () => "Invalid head block");
1254
+ const nextBlock = previousBlock + 1;
1255
+ const nextBlockTransactions = await this.mempoolViewer.pendingTransactions({
1256
+ limit: _SimpleBlockRunner.DefaultBlockSize
1257
+ });
1258
+ this.logger?.info(`Pending Tx Count ${nextBlockTransactions.length}`);
1259
+ const blockPayloads = [];
1260
+ const producerRedeclarationPayload = await this.getProducerRedeclaration(head);
1261
+ if (producerRedeclarationPayload) blockPayloads.push(producerRedeclarationPayload);
1262
+ if (nextBlockTransactions.length === 0 && !this.heartbeatRequired(head) && !force) return;
1263
+ const rewardTransferPayloads = await this.getBlockRewardTransfers(nextBlock);
1264
+ blockPayloads.push(...rewardTransferPayloads);
1265
+ const transactionTransfers = await generateTransactionFeeTransfers(this.address, nextBlockTransactions);
1266
+ const timeStart = Date.now();
1267
+ const timePayload = await this.generateTimePayload(head);
1268
+ const timeDuration = Date.now() - timeStart;
1269
+ if (timeDuration > 100) {
1270
+ this.logger?.warn(`[Slow] Generated time payload in ${timeDuration}ms`);
1271
+ }
1272
+ const [fundedNextBlockTransactions, fundedTransfers] = await this.filterByFunded(head, nextBlockTransactions, transactionTransfers, validateBalances);
1273
+ blockPayloads.push(...fundedTransfers, timePayload);
1274
+ this.logger?.info(`Building block ${head.block + 1}`);
1275
+ const startBuild = Date.now();
1276
+ const stepRewardPoolBalance = (await this.accountBalanceViewer.accountBalances([
1277
+ XYO_STEP_REWARD_ADDRESS
1278
+ ]))[XYO_STEP_REWARD_ADDRESS];
1279
+ const block = await buildNextBlock2(head, fundedNextBlockTransactions, blockPayloads, [
1280
+ this.account
1281
+ ], XYO_STEP_REWARD_ADDRESS, stepRewardPoolBalance);
1282
+ this.logger?.info(`Built block ${block[0].block} in ${Date.now() - startBuild}ms with ${block[1].length} payloads`);
1283
+ this.logger?.info(`Validating block ${block[0].block} with ${block[1].length} payloads`);
1284
+ const startValidate = Date.now();
1285
+ const errors = await this.blockValidationViewer.validateBlock(block);
1286
+ this.logger?.info(`Validated block ${block[0].block} in ${Date.now() - startValidate}ms with ${block[1].length} payloads`);
1287
+ if (errors.length > 0) {
1288
+ this.logger?.warn(`Validation of produced block failed: ${errors.at(0)?.message}`);
1289
+ const rejectedTransactions = block[1];
1290
+ await this.rejectedTransactionsArchivist.insert(rejectedTransactions);
1291
+ } else {
1292
+ await this.mempoolRunner.submitBlocks([
1293
+ block
1294
+ ]);
1295
+ return block;
1296
+ }
1297
+ } catch (error) {
1298
+ this.logger?.error(`Error proposing next valid block: ${error.message}`);
1299
+ throw error;
1638
1300
  }
1639
- const [fundedNextBlockTransactions, fundedTransfers] = await this.filterByFunded(head, nextBlockTransactions, transactionTransfers, validateBalances);
1640
- blockPayloads.push(...fundedTransfers, timePayload);
1641
- this.logger?.info(`Building block ${head.block + 1}`);
1642
- const startBuild = Date.now();
1643
- const stepRewardPoolBalance = (await this.balanceViewer.accountBalances([
1644
- XYO_STEP_REWARD_ADDRESS2
1645
- ]))[XYO_STEP_REWARD_ADDRESS2];
1646
- const block = await buildNextBlock5(head, fundedNextBlockTransactions, blockPayloads, [
1647
- this.account
1648
- ], XYO_STEP_REWARD_ADDRESS2, stepRewardPoolBalance);
1649
- this.logger?.info(`Built block ${block[0].block} in ${Date.now() - startBuild}ms with ${block[1].length} payloads`);
1650
- await this.mempoolRunner.submitBlocks([
1651
- block
1652
- ]);
1653
- return block;
1654
1301
  });
1655
1302
  }
1656
1303
  // remove unfunded transactions and block transfers
@@ -1661,9 +1308,9 @@ var SimpleBlockRunner = class _SimpleBlockRunner extends AbstractCreatable3 {
1661
1308
  if (!transfer) return;
1662
1309
  const totalTransferCost = Object.values(transfer?.transfers).reduce((acc, t) => acc + hexToBigInt(t ?? "00"), 0n);
1663
1310
  if (validateBalances) {
1664
- const balance = (await this.balanceViewer.accountBalances([
1311
+ const balance = (await this.accountBalanceViewer.accountBalances([
1665
1312
  transfer.from
1666
- ]))[transfer.from] ?? AttoXL12(0n);
1313
+ ]))[transfer.from] ?? AttoXL1(0n);
1667
1314
  if (balance >= totalTransferCost) {
1668
1315
  fundedTransfers.push(transfer);
1669
1316
  return tx;
@@ -1679,19 +1326,7 @@ var SimpleBlockRunner = class _SimpleBlockRunner extends AbstractCreatable3 {
1679
1326
  ];
1680
1327
  }
1681
1328
  async generateTimePayload(head) {
1682
- const [ethereum, ethHashOrNull] = await this.time.currentTimeAndHash("ethereum");
1683
- const ethereumHash = asHash2(ethHashOrNull, () => "No ethereum hash available from time sync service");
1684
- const timePayload = {
1685
- schema: TimeSchema,
1686
- // this is for the previous block
1687
- xl1: head.block,
1688
- // this is for the previous block
1689
- xl1Hash: head._hash,
1690
- ethereum,
1691
- ethereumHash,
1692
- epoch: Date.now()
1693
- };
1694
- return timePayload;
1329
+ return await this.timeSyncViewer.currentTimePayload();
1695
1330
  }
1696
1331
  /**
1697
1332
  * Check if a heartbeat block is required based on network activity.
@@ -1700,8 +1335,8 @@ var SimpleBlockRunner = class _SimpleBlockRunner extends AbstractCreatable3 {
1700
1335
  */
1701
1336
  heartbeatRequired(head) {
1702
1337
  const epoch = head.$epoch;
1703
- if (isDefined15(epoch)) {
1704
- const { heartbeatInterval } = this.params.config.producer;
1338
+ if (isDefined7(epoch)) {
1339
+ const { heartbeatInterval } = this.params.context.config.producer;
1705
1340
  if (Date.now() - epoch > heartbeatInterval) {
1706
1341
  return true;
1707
1342
  }
@@ -1709,252 +1344,10 @@ var SimpleBlockRunner = class _SimpleBlockRunner extends AbstractCreatable3 {
1709
1344
  return false;
1710
1345
  }
1711
1346
  };
1712
- SimpleBlockRunner = _ts_decorate6([
1713
- creatable6()
1347
+ SimpleBlockRunner = _ts_decorate8([
1348
+ creatableProvider()
1714
1349
  ], SimpleBlockRunner);
1715
1350
 
1716
- // src/implementation/producer.ts
1717
- var serviceSingleton2;
1718
- var initBlockProducer = /* @__PURE__ */ __name(async (params) => {
1719
- if (serviceSingleton2) return serviceSingleton2;
1720
- return await timeBudget2("initBlockProducer", params.logger, async () => {
1721
- serviceSingleton2 = await SimpleBlockRunner.create(params);
1722
- return serviceSingleton2;
1723
- }, 2e3, true);
1724
- }, "initBlockProducer");
1725
-
1726
- // src/implementation/reward.ts
1727
- import { assertEx as assertEx18 } from "@xylabs/sdk-js";
1728
- import { SimpleBlockRewardViewer, timeBudget as timeBudget3 } from "@xyo-network/xl1-protocol-sdk";
1729
- var rewardServiceSingleton;
1730
- var initBlockRewardViewer = /* @__PURE__ */ __name((params) => {
1731
- if (rewardServiceSingleton) return rewardServiceSingleton;
1732
- return timeBudget3("initBlockRewardViewer", params.logger, () => {
1733
- const { config } = params;
1734
- rewardServiceSingleton = canUseEvmBlockRewardViewer({
1735
- config
1736
- }) ? initEvmBlockRewardViewer(params) : initXyoBlockRewardViewer(params);
1737
- return rewardServiceSingleton;
1738
- }, 2e3, true);
1739
- }, "initBlockRewardViewer");
1740
- var initXyoBlockRewardViewer = /* @__PURE__ */ __name((params) => {
1741
- if (rewardServiceSingleton) return rewardServiceSingleton;
1742
- return timeBudget3("initXyoBlockRewardViewer", params.logger, () => {
1743
- rewardServiceSingleton = SimpleBlockRewardViewer.create(params);
1744
- return rewardServiceSingleton;
1745
- }, 2e3, true);
1746
- }, "initXyoBlockRewardViewer");
1747
- var canUseEvmBlockRewardViewer = /* @__PURE__ */ __name((params) => canUseEvmProvider({
1748
- config: params.config
1749
- }), "canUseEvmBlockRewardViewer");
1750
- var initEvmBlockRewardViewer = /* @__PURE__ */ __name(async (params) => {
1751
- if (rewardServiceSingleton) return rewardServiceSingleton;
1752
- return await timeBudget3("initEvmBlockRewardViewer", params.logger, async () => {
1753
- const provider2 = assertEx18(await initEvmProvider(params));
1754
- const evmBlockRewardViewerParams = {
1755
- ...params,
1756
- provider: provider2
1757
- };
1758
- rewardServiceSingleton = EvmBlockRewardViewer.create(evmBlockRewardViewerParams);
1759
- return rewardServiceSingleton;
1760
- }, 2e3, true);
1761
- }, "initEvmBlockRewardViewer");
1762
-
1763
- // src/implementation/time.ts
1764
- import { timeBudget as timeBudget4 } from "@xyo-network/xl1-protocol-sdk";
1765
-
1766
- // src/Time/BaseTimeSyncService.ts
1767
- import { creatable as creatable7 } from "@xylabs/sdk-js";
1768
- import { SimpleTimeSyncViewer, TimeSyncViewerMoniker } from "@xyo-network/xl1-protocol-sdk";
1769
- function _ts_decorate7(decorators, target, key, desc) {
1770
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1771
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1772
- 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;
1773
- return c > 3 && r && Object.defineProperty(target, key, r), r;
1774
- }
1775
- __name(_ts_decorate7, "_ts_decorate");
1776
- var BaseTimeSyncService = class _BaseTimeSyncService extends BaseService {
1777
- static {
1778
- __name(this, "BaseTimeSyncService");
1779
- }
1780
- static defaultMoniker = TimeSyncViewerMoniker;
1781
- static monikers = [
1782
- TimeSyncViewerMoniker
1783
- ];
1784
- moniker = _BaseTimeSyncService.defaultMoniker;
1785
- timeSyncViewer;
1786
- get blockViewer() {
1787
- return this.params.blockViewer;
1788
- }
1789
- get ethProvider() {
1790
- return this.params.ethProvider;
1791
- }
1792
- async convertTime(fromDomain, toDomain, from) {
1793
- return await this.timeSyncViewer.convertTime(fromDomain, toDomain, from);
1794
- }
1795
- async createHandler() {
1796
- await super.createHandler();
1797
- this.timeSyncViewer = await SimpleTimeSyncViewer.create({
1798
- blockViewer: this.blockViewer,
1799
- ethProvider: this.ethProvider
1800
- });
1801
- }
1802
- async currentTime(domain) {
1803
- return await this.timeSyncViewer.currentTime(domain);
1804
- }
1805
- async currentTimeAndHash(domain) {
1806
- return await this.timeSyncViewer.currentTimeAndHash(domain);
1807
- }
1808
- async currentTimePayload() {
1809
- return await this.timeSyncViewer.currentTimePayload();
1810
- }
1811
- };
1812
- BaseTimeSyncService = _ts_decorate7([
1813
- creatable7()
1814
- ], BaseTimeSyncService);
1815
-
1816
- // src/implementation/time.ts
1817
- var timeSyncServiceSingleton;
1818
- var initTimeService = /* @__PURE__ */ __name(async ({ blockViewer, config, logger, meterProvider, traceProvider }) => {
1819
- if (timeSyncServiceSingleton) return timeSyncServiceSingleton;
1820
- return await timeBudget4("initTimeService", logger, async () => {
1821
- const ethProvider = canUseEvmProvider({
1822
- config
1823
- }) ? await initEvmProvider({
1824
- config
1825
- }) : void 0;
1826
- timeSyncServiceSingleton = BaseTimeSyncService.create({
1827
- blockViewer,
1828
- ethProvider,
1829
- logger,
1830
- meterProvider,
1831
- traceProvider
1832
- });
1833
- return await timeSyncServiceSingleton;
1834
- }, 2e3, true);
1835
- }, "initTimeService");
1836
-
1837
- // src/implementation/validator.ts
1838
- var serviceSingleton3;
1839
- var initValidator = /* @__PURE__ */ __name((params) => {
1840
- if (serviceSingleton3) return serviceSingleton3;
1841
- serviceSingleton3 = initBlockProducer(params);
1842
- return serviceSingleton3;
1843
- }, "initValidator");
1844
-
1845
- // src/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.ts
1846
- import { creatable as creatable8 } from "@xylabs/sdk-js";
1847
- import { NetworkStakeStepRewardViewerMoniker } from "@xyo-network/xl1-protocol-sdk";
1848
- function _ts_decorate8(decorators, target, key, desc) {
1849
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1850
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1851
- 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;
1852
- return c > 3 && r && Object.defineProperty(target, key, r), r;
1853
- }
1854
- __name(_ts_decorate8, "_ts_decorate");
1855
- var BaseNetworkStakeStepRewardService = class _BaseNetworkStakeStepRewardService extends BaseService {
1856
- static {
1857
- __name(this, "BaseNetworkStakeStepRewardService");
1858
- }
1859
- static defaultMoniker = NetworkStakeStepRewardViewerMoniker;
1860
- static monikers = [
1861
- NetworkStakeStepRewardViewerMoniker
1862
- ];
1863
- moniker = _BaseNetworkStakeStepRewardService.defaultMoniker;
1864
- networkStakeStepRewardAddressHistory(_address) {
1865
- throw new Error("Method [networkStakeStepRewardAddressHistory] not implemented.");
1866
- }
1867
- networkStakeStepRewardAddressReward(_context, _address) {
1868
- throw new Error("Method [networkStakeStepRewardAddressReward] not implemented.");
1869
- }
1870
- networkStakeStepRewardAddressShare(_context, _address) {
1871
- throw new Error("Method [networkStakeStepRewardAddressShare] not implemented.");
1872
- }
1873
- networkStakeStepRewardClaimedByAddress(_address) {
1874
- throw new Error("Method [networkStakeStepRewardClaimedByAddress] not implemented.");
1875
- }
1876
- networkStakeStepRewardForPosition(_position, _range) {
1877
- throw new Error("Method [networkStakeStepRewardForPosition] not implemented.");
1878
- }
1879
- networkStakeStepRewardForStep(_context) {
1880
- throw new Error("Method [networkStakeStepRewardForStep] not implemented.");
1881
- }
1882
- networkStakeStepRewardForStepForPosition(_context, _position) {
1883
- throw new Error("Method [networkStakeStepRewardForStepForPosition] not implemented.");
1884
- }
1885
- networkStakeStepRewardPoolRewards(_context) {
1886
- throw new Error("Method [networkStakeStepRewardPoolRewards] not implemented.");
1887
- }
1888
- networkStakeStepRewardPoolShares(_context) {
1889
- throw new Error("Method [networkStakeStepRewardPoolShares] not implemented.");
1890
- }
1891
- networkStakeStepRewardPositionWeight(_context, _position) {
1892
- throw new Error("Method [networkStakeStepRewardPositionWeight] not implemented.");
1893
- }
1894
- networkStakeStepRewardPotentialPositionLoss(_context, _position) {
1895
- throw new Error("Method [networkStakeStepRewardPotentialPositionLoss] not implemented.");
1896
- }
1897
- networkStakeStepRewardRandomizer(_context) {
1898
- throw new Error("Method [networkStakeStepRewardRandomizer] not implemented.");
1899
- }
1900
- networkStakeStepRewardStakerCount(_context) {
1901
- throw new Error("Method [networkStakeStepRewardStakerCount] not implemented.");
1902
- }
1903
- networkStakeStepRewardUnclaimedByAddress(_address) {
1904
- throw new Error("Method [networkStakeStepRewardUnclaimedByAddress] not implemented.");
1905
- }
1906
- networkStakeStepRewardWeightForAddress(_context, _address) {
1907
- throw new Error("Method [networkStakeStepRewardWeightForAddress] not implemented.");
1908
- }
1909
- networkStakeStepRewardsForPosition(_position, _range) {
1910
- throw new Error("Method [networkStakeStepRewardsForPosition] not implemented.");
1911
- }
1912
- networkStakeStepRewardsForRange(_range) {
1913
- throw new Error("Method [networkStakeStepRewardsForRange] not implemented.");
1914
- }
1915
- networkStakeStepRewardsForStepLevel(_stepLevel, _range) {
1916
- throw new Error("Method [networkStakeStepRewardsForStepLevel] not implemented.");
1917
- }
1918
- };
1919
- BaseNetworkStakeStepRewardService = _ts_decorate8([
1920
- creatable8()
1921
- ], BaseNetworkStakeStepRewardService);
1922
-
1923
- // src/Schemas/BaseSchemasService.ts
1924
- import { creatable as creatable9, spanRootAsync } from "@xylabs/sdk-js";
1925
- import { schemasSummary } from "@xyo-network/xl1-protocol-sdk";
1926
- function _ts_decorate9(decorators, target, key, desc) {
1927
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1928
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1929
- 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;
1930
- return c > 3 && r && Object.defineProperty(target, key, r), r;
1931
- }
1932
- __name(_ts_decorate9, "_ts_decorate");
1933
- var BaseSchemasService = class extends BaseService {
1934
- static {
1935
- __name(this, "BaseSchemasService");
1936
- }
1937
- async schema(head, schema) {
1938
- return (await this.schemas(head, [
1939
- schema
1940
- ]))[schema] ?? 0;
1941
- }
1942
- async schemas(head, schemas) {
1943
- return await spanRootAsync("transfers", async () => {
1944
- const [summary] = await schemasSummary(this.params.context);
1945
- const result = {};
1946
- for (const schema of schemas) {
1947
- const count = summary[schema] ?? 0;
1948
- result[schema] = count;
1949
- }
1950
- return result;
1951
- });
1952
- }
1953
- };
1954
- BaseSchemasService = _ts_decorate9([
1955
- creatable9()
1956
- ], BaseSchemasService);
1957
-
1958
1351
  // src/StakeIntent/lib/getBlockSignedStakeDeclarations.ts
1959
1352
  import { exists as exists3, filterAs as filterAs2 } from "@xylabs/sdk-js";
1960
1353
  import { isBoundWitness } from "@xyo-network/boundwitness-model";
@@ -1982,21 +1375,21 @@ var mapBoundWitnessToStakeIntentHashes = /* @__PURE__ */ __name((bw) => {
1982
1375
  }, "mapBoundWitnessToStakeIntentHashes");
1983
1376
 
1984
1377
  // src/StakeIntent/XyoStakeIntentService.ts
1985
- import { asAddress as asAddress2, assertEx as assertEx19, creatable as creatable10, filterAs as filterAs3, isUndefined as isUndefined3 } from "@xylabs/sdk-js";
1378
+ import { asAddress as asAddress2, assertEx as assertEx13, creatable as creatable8, filterAs as filterAs3, isUndefined as isUndefined2 } from "@xylabs/sdk-js";
1986
1379
  import { analyzeChain, ChainStakeIntentAnalyzer, isChainSummaryStakeIntent } from "@xyo-network/chain-analyze";
1987
1380
  import { DEFAULT_FIND_FIRST_MATCHING_NEXT_OPTIONS, findFirstMatching, IntervalMap } from "@xyo-network/chain-utils";
1988
- import { PayloadBuilder as PayloadBuilder10 } from "@xyo-network/payload-builder";
1989
- import { asBlockBoundWitness as asBlockBoundWitness3, asBlockBoundWitnessWithStorageMeta as asBlockBoundWitnessWithStorageMeta2, asChainStakeIntent as asChainStakeIntent2 } from "@xyo-network/xl1-protocol";
1990
- import { asChainIndexingServiceStateWithStorageMeta, ChainIndexingServiceStateSchema, isChainIndexingServiceState, readPayloadMapFromStore as readPayloadMapFromStore2, timeBudget as timeBudget5 } from "@xyo-network/xl1-protocol-sdk";
1381
+ import { PayloadBuilder as PayloadBuilder6 } from "@xyo-network/payload-builder";
1382
+ import { asBlockBoundWitness as asBlockBoundWitness2, asBlockBoundWitnessWithStorageMeta, asChainStakeIntent as asChainStakeIntent2 } from "@xyo-network/xl1-protocol";
1383
+ import { asChainIndexingServiceStateWithStorageMeta, BlockViewerMoniker as BlockViewerMoniker3, ChainIndexingServiceStateSchema, ChainStakeViewerMoniker, isChainIndexingServiceState, readPayloadMapFromStore, timeBudget } from "@xyo-network/xl1-protocol-sdk";
1991
1384
  import { Mutex as Mutex3 } from "async-mutex";
1992
- import { LRUCache as LRUCache2 } from "lru-cache";
1993
- function _ts_decorate10(decorators, target, key, desc) {
1385
+ import { LRUCache } from "lru-cache";
1386
+ function _ts_decorate9(decorators, target, key, desc) {
1994
1387
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1995
1388
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1996
1389
  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;
1997
1390
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1998
1391
  }
1999
- __name(_ts_decorate10, "_ts_decorate");
1392
+ __name(_ts_decorate9, "_ts_decorate");
2000
1393
  var ACTIVE_STAKE_TTL = 1e3 * 60 * 60 * 2;
2001
1394
  var NO_ACTIVE_STAKE_TTL = 1e3 * 2;
2002
1395
  var STAKE_CACHE_MAX_ENTRIES = 1e4;
@@ -2014,45 +1407,47 @@ var XyoStakeIntentService = class extends BaseService {
2014
1407
  // in performance for small sets, and (most importantly) easily
2015
1408
  // persisted so we can recover state on restart.
2016
1409
  _producers = new IntervalMap();
2017
- _stakeCache = new LRUCache2({
1410
+ _stakeCache = new LRUCache({
2018
1411
  max: STAKE_CACHE_MAX_ENTRIES
2019
1412
  });
2020
1413
  _updateMutex = new Mutex3();
1414
+ _blockViewer;
1415
+ _chainStakeViewer;
2021
1416
  get blockViewer() {
2022
- return this.params.blockViewer;
1417
+ return this._blockViewer;
2023
1418
  }
2024
1419
  get chainArchivist() {
2025
- return assertEx19(this.params.chainArchivist, () => "chainArchivist not set");
1420
+ return assertEx13(this.params.chainArchivist, () => "chainArchivist not set");
2026
1421
  }
2027
1422
  get chainStakeViewer() {
2028
- return assertEx19(this.params.chainStakeViewer, () => "chainStakeViewer not set");
1423
+ return this._chainStakeViewer;
2029
1424
  }
2030
1425
  get stakeIntentStateArchivist() {
2031
- return assertEx19(this.params.stakeIntentStateArchivist, () => "stakeIntentStateArchivist not set");
1426
+ return assertEx13(this.params.stakeIntentStateArchivist, () => "stakeIntentStateArchivist not set");
2032
1427
  }
2033
1428
  static async paramsHandler(params) {
2034
1429
  return {
2035
1430
  ...await super.paramsHandler(params),
2036
- blockViewer: assertEx19(params?.blockViewer, () => "blockViewer is required"),
2037
- chainArchivist: assertEx19(params?.chainArchivist, () => "chainArchivist is required"),
2038
- chainStakeViewer: assertEx19(params?.chainStakeViewer, () => "chainStakeViewer is required"),
2039
- stakeIntentStateArchivist: assertEx19(params?.stakeIntentStateArchivist, () => "stakeIntentStateArchivist is required")
1431
+ chainArchivist: assertEx13(params?.chainArchivist, () => "chainArchivist is required"),
1432
+ stakeIntentStateArchivist: assertEx13(params?.stakeIntentStateArchivist, () => "stakeIntentStateArchivist is required")
2040
1433
  };
2041
1434
  }
2042
1435
  async createHandler() {
1436
+ this._blockViewer = await this.locator.getInstance(BlockViewerMoniker3);
1437
+ this._chainStakeViewer = await this.locator.getInstance(ChainStakeViewerMoniker);
2043
1438
  const head = await this.blockViewer.currentBlock();
2044
- if (isUndefined3(head)) return;
1439
+ if (isUndefined2(head)) return;
2045
1440
  await this.recoverState(head[0]._hash);
2046
1441
  }
2047
1442
  async getDeclaredCandidateRanges(address, intent) {
2048
1443
  await Promise.resolve();
2049
- assertEx19(intent === "producer", () => `Support not yet added for intent ${intent}`);
1444
+ assertEx13(intent === "producer", () => `Support not yet added for intent ${intent}`);
2050
1445
  const results = this._producers.get(address);
2051
1446
  return results ?? [];
2052
1447
  }
2053
1448
  async getDeclaredCandidatesForBlock(block, intent) {
2054
1449
  return await this.spanAsync("getDeclaredCandidatesForBlock", async () => {
2055
- assertEx19(intent === "producer", () => `Support not yet added for intent ${intent}`);
1450
+ assertEx13(intent === "producer", () => `Support not yet added for intent ${intent}`);
2056
1451
  const results = this._producers.findAllContaining(block);
2057
1452
  const candidates = [
2058
1453
  ...results
@@ -2065,7 +1460,7 @@ var XyoStakeIntentService = class extends BaseService {
2065
1460
  getRequiredMinimumStakeForIntent(intent) {
2066
1461
  switch (intent) {
2067
1462
  case "producer": {
2068
- const { minStake } = this.params.config.producer;
1463
+ const { minStake } = this.params.context.config.producer;
2069
1464
  return BigInt(minStake);
2070
1465
  }
2071
1466
  }
@@ -2106,7 +1501,7 @@ var XyoStakeIntentService = class extends BaseService {
2106
1501
  }
2107
1502
  async persistState(current) {
2108
1503
  const state = this._producers.serialize();
2109
- const payload = new PayloadBuilder10({
1504
+ const payload = new PayloadBuilder6({
2110
1505
  schema: ChainIndexingServiceStateSchema
2111
1506
  }).fields({
2112
1507
  endBlockHash: current,
@@ -2117,8 +1512,8 @@ var XyoStakeIntentService = class extends BaseService {
2117
1512
  ]);
2118
1513
  }
2119
1514
  async recoverState(current) {
2120
- return await timeBudget5("XyoStakeIntentService.recoverState", console, async () => {
2121
- const currentBlock = assertEx19(asBlockBoundWitness3((await this.chainArchivist.get([
1515
+ return await timeBudget("XyoStakeIntentService.recoverState", console, async () => {
1516
+ const currentBlock = assertEx13(asBlockBoundWitness2((await this.chainArchivist.get([
2122
1517
  current
2123
1518
  ]))?.[0]), () => `Block ${current} not found`);
2124
1519
  const currentBlockNum = currentBlock.block;
@@ -2135,7 +1530,7 @@ var XyoStakeIntentService = class extends BaseService {
2135
1530
  const indexed = (await this.chainArchivist.get([
2136
1531
  state.endBlockHash
2137
1532
  ]))?.[0];
2138
- const indexedBlock = asBlockBoundWitnessWithStorageMeta2(indexed);
1533
+ const indexedBlock = asBlockBoundWitnessWithStorageMeta(indexed);
2139
1534
  if (indexedBlock) {
2140
1535
  const indexedBlockNum = indexedBlock.block;
2141
1536
  if (indexedBlockNum <= currentBlockNum) {
@@ -2159,10 +1554,10 @@ var XyoStakeIntentService = class extends BaseService {
2159
1554
  await this._updateMutex.runExclusive(async () => {
2160
1555
  return await this.spanAsync("updateIndex", async () => {
2161
1556
  const currentHead = (await this.blockViewer.currentBlock())[0];
2162
- if (isUndefined3(currentHead)) return;
2163
- return await timeBudget5("XyoStakeIntentService.updateIndex", console, async () => {
1557
+ if (isUndefined2(currentHead)) return;
1558
+ return await timeBudget("XyoStakeIntentService.updateIndex", console, async () => {
2164
1559
  const currentHeadHash = currentHead._hash;
2165
- const chainMap = readPayloadMapFromStore2(this.chainArchivist);
1560
+ const chainMap = readPayloadMapFromStore(this.chainArchivist);
2166
1561
  const result = await analyzeChain({
2167
1562
  chainMap
2168
1563
  }, [
@@ -2187,20 +1582,20 @@ var XyoStakeIntentService = class extends BaseService {
2187
1582
  });
2188
1583
  }
2189
1584
  };
2190
- XyoStakeIntentService = _ts_decorate10([
2191
- creatable10()
1585
+ XyoStakeIntentService = _ts_decorate9([
1586
+ creatable8()
2192
1587
  ], XyoStakeIntentService);
2193
1588
 
2194
1589
  // src/StepStake/BaseStepStakeService.ts
2195
- import { creatable as creatable11 } from "@xylabs/sdk-js";
1590
+ import { creatable as creatable9 } from "@xylabs/sdk-js";
2196
1591
  import { StepStakeViewerMoniker } from "@xyo-network/xl1-protocol-sdk";
2197
- function _ts_decorate11(decorators, target, key, desc) {
1592
+ function _ts_decorate10(decorators, target, key, desc) {
2198
1593
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
2199
1594
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
2200
1595
  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;
2201
1596
  return c > 3 && r && Object.defineProperty(target, key, r), r;
2202
1597
  }
2203
- __name(_ts_decorate11, "_ts_decorate");
1598
+ __name(_ts_decorate10, "_ts_decorate");
2204
1599
  var BaseStepStakeService = class _BaseStepStakeService extends BaseService {
2205
1600
  static {
2206
1601
  __name(this, "BaseStepStakeService");
@@ -2217,8 +1612,8 @@ var BaseStepStakeService = class _BaseStepStakeService extends BaseService {
2217
1612
  throw new Error("Method [stepStakeForAddress] not implemented.");
2218
1613
  }
2219
1614
  };
2220
- BaseStepStakeService = _ts_decorate11([
2221
- creatable11()
1615
+ BaseStepStakeService = _ts_decorate10([
1616
+ creatable9()
2222
1617
  ], BaseStepStakeService);
2223
1618
  export {
2224
1619
  BaseAccountableService,
@@ -2228,14 +1623,11 @@ export {
2228
1623
  BaseSchemasService,
2229
1624
  BaseService,
2230
1625
  BaseStepStakeService,
2231
- BaseTimeSyncService,
2232
- ChainBlockNumberIterationService,
2233
1626
  DEFAULT_BLOCK_SIZE,
2234
1627
  EvmBlockRewardViewer,
2235
- EvmChainService,
2236
- MemoryChainService,
1628
+ EvmChainViewer,
1629
+ MemoryChainViewer,
2237
1630
  SimpleBlockRunner,
2238
- SimpleBlockRunnerParamsZod,
2239
1631
  XYO_PRODUCER_REDECLARATION_DURATION,
2240
1632
  XYO_PRODUCER_REDECLARATION_WINDOW,
2241
1633
  XyoStakeIntentService,
@@ -2244,21 +1636,10 @@ export {
2244
1636
  blockViewerFromChainIteratorAndArchivist,
2245
1637
  canUseEvmProvider,
2246
1638
  creatableService,
1639
+ createBootstrapHead,
2247
1640
  getBlockSignedStakeDeclarations,
2248
- initAccountBalanceService,
2249
- initBlockProducer,
2250
- initBlockRewardViewer,
2251
- initBlockViewer,
2252
1641
  initChainService,
2253
- initEvmBlockRewardViewer,
2254
1642
  initEvmProvider,
2255
- initHead,
2256
- initMemoryChainService,
2257
- initMempoolRunner,
2258
- initMempoolViewer,
2259
- initPendingTransactions,
2260
- initTimeService,
2261
- initValidator,
2262
- initXyoBlockRewardViewer
1643
+ initMemoryChainService
2263
1644
  };
2264
1645
  //# sourceMappingURL=index.mjs.map