@xyo-network/chain-services 1.17.7 → 1.18.0-rc.1

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 (117) 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/blockViewer.d.ts +3 -6
  19. package/dist/neutral/implementation/blockViewer.d.ts.map +1 -1
  20. package/dist/neutral/implementation/chain/evm.d.ts +2 -2
  21. package/dist/neutral/implementation/chain/evm.d.ts.map +1 -1
  22. package/dist/neutral/implementation/chain/index.d.ts +2 -3
  23. package/dist/neutral/implementation/chain/index.d.ts.map +1 -1
  24. package/dist/neutral/implementation/head/createBootstrapHead.d.ts +3 -3
  25. package/dist/neutral/implementation/head/createBootstrapHead.d.ts.map +1 -1
  26. package/dist/neutral/implementation/head/createForkedHead/config/getBridgeSourceDetails.d.ts +4 -4
  27. package/dist/neutral/implementation/head/createForkedHead/config/getBridgeSourceDetails.d.ts.map +1 -1
  28. package/dist/neutral/implementation/head/createForkedHead/createForkedHead.d.ts +2 -2
  29. package/dist/neutral/implementation/head/createForkedHead/createForkedHead.d.ts.map +1 -1
  30. package/dist/neutral/implementation/head/createForkedHead/getBridgeDestinationObservation.d.ts +3 -3
  31. package/dist/neutral/implementation/head/createForkedHead/getBridgeDestinationObservation.d.ts.map +1 -1
  32. package/dist/neutral/implementation/head/createForkedHead/getBridgeIntent.d.ts +3 -3
  33. package/dist/neutral/implementation/head/createForkedHead/getBridgeIntent.d.ts.map +1 -1
  34. package/dist/neutral/implementation/head/createForkedHead/getBridgeSourceObservation.d.ts +3 -3
  35. package/dist/neutral/implementation/head/createForkedHead/getBridgeSourceObservation.d.ts.map +1 -1
  36. package/dist/neutral/implementation/head/createForkedHead/getFirstBlockForNewChain.d.ts +3 -3
  37. package/dist/neutral/implementation/head/createForkedHead/getFirstBlockForNewChain.d.ts.map +1 -1
  38. package/dist/neutral/implementation/head/getForkFromBlock.d.ts +4 -3
  39. package/dist/neutral/implementation/head/getForkFromBlock.d.ts.map +1 -1
  40. package/dist/neutral/implementation/head/index.d.ts +2 -1
  41. package/dist/neutral/implementation/head/index.d.ts.map +1 -1
  42. package/dist/neutral/implementation/index.d.ts +0 -3
  43. package/dist/neutral/implementation/index.d.ts.map +1 -1
  44. package/dist/neutral/index.d.ts +0 -2
  45. package/dist/neutral/index.d.ts.map +1 -1
  46. package/dist/neutral/index.mjs +430 -889
  47. package/dist/neutral/index.mjs.map +1 -1
  48. package/dist/neutral/model/Params.d.ts +3 -4
  49. package/dist/neutral/model/Params.d.ts.map +1 -1
  50. package/dist/neutral/simple/block/runner/SimpleBlockRunner.d.ts +23 -33
  51. package/dist/neutral/simple/block/runner/SimpleBlockRunner.d.ts.map +1 -1
  52. package/package.json +18 -18
  53. package/src/AccountBalance/accountBalanceServiceFromArchivist.ts +10 -16
  54. package/src/BaseService.ts +3 -2
  55. package/src/ChainService/Evm/Evm.ts +24 -37
  56. package/src/ChainService/Memory/Memory.ts +6 -12
  57. package/src/ChainValidator/XyoValidator.ts +11 -4
  58. package/src/PendingTransactions/BasePendingTransactions.ts +2 -6
  59. package/src/Schemas/BaseSchemasService.ts +2 -2
  60. package/src/StakeIntent/XyoStakeIntentService.ts +12 -8
  61. package/src/blockViewerFromChainIteratorAndArchivist.ts +9 -0
  62. package/src/implementation/accountBalance.ts +2 -2
  63. package/src/implementation/blockViewer.ts +5 -10
  64. package/src/implementation/chain/evm.ts +5 -5
  65. package/src/implementation/chain/index.ts +12 -14
  66. package/src/implementation/head/createBootstrapHead.ts +13 -8
  67. package/src/implementation/head/createForkedHead/config/getBridgeSourceDetails.ts +6 -6
  68. package/src/implementation/head/createForkedHead/createForkedHead.ts +6 -6
  69. package/src/implementation/head/createForkedHead/getBridgeDestinationObservation.ts +4 -4
  70. package/src/implementation/head/createForkedHead/getBridgeIntent.ts +5 -5
  71. package/src/implementation/head/createForkedHead/getBridgeSourceObservation.ts +4 -4
  72. package/src/implementation/head/createForkedHead/getFirstBlockForNewChain.ts +4 -4
  73. package/src/implementation/head/getForkFromBlock.ts +9 -7
  74. package/src/implementation/head/index.ts +2 -1
  75. package/src/implementation/index.ts +0 -3
  76. package/src/implementation/mempoolRunner.ts +2 -2
  77. package/src/implementation/mempoolViewer.ts +2 -2
  78. package/src/implementation/pendingTransactions.ts +1 -1
  79. package/src/index.ts +0 -2
  80. package/src/model/Params.ts +4 -4
  81. package/src/simple/block/runner/SimpleBlockRunner.ts +106 -118
  82. package/dist/neutral/ChainBlockNumberIteration/ChainBlockNumberIterationService.d.ts +0 -50
  83. package/dist/neutral/ChainBlockNumberIteration/ChainBlockNumberIterationService.d.ts.map +0 -1
  84. package/dist/neutral/ChainBlockNumberIteration/index.d.ts +0 -3
  85. package/dist/neutral/ChainBlockNumberIteration/index.d.ts.map +0 -1
  86. package/dist/neutral/ChainBlockNumberIteration/model/BlockNumberIteration.d.ts +0 -7
  87. package/dist/neutral/ChainBlockNumberIteration/model/BlockNumberIteration.d.ts.map +0 -1
  88. package/dist/neutral/ChainBlockNumberIteration/model/Params.d.ts +0 -9
  89. package/dist/neutral/ChainBlockNumberIteration/model/Params.d.ts.map +0 -1
  90. package/dist/neutral/ChainBlockNumberIteration/model/index.d.ts +0 -3
  91. package/dist/neutral/ChainBlockNumberIteration/model/index.d.ts.map +0 -1
  92. package/dist/neutral/Time/BaseTimeSyncService.d.ts +0 -24
  93. package/dist/neutral/Time/BaseTimeSyncService.d.ts.map +0 -1
  94. package/dist/neutral/Time/index.d.ts +0 -2
  95. package/dist/neutral/Time/index.d.ts.map +0 -1
  96. package/dist/neutral/implementation/head/head.d.ts +0 -11
  97. package/dist/neutral/implementation/head/head.d.ts.map +0 -1
  98. package/dist/neutral/implementation/producer.d.ts +0 -5
  99. package/dist/neutral/implementation/producer.d.ts.map +0 -1
  100. package/dist/neutral/implementation/time.d.ts +0 -6
  101. package/dist/neutral/implementation/time.d.ts.map +0 -1
  102. package/dist/neutral/implementation/validator.d.ts +0 -5
  103. package/dist/neutral/implementation/validator.d.ts.map +0 -1
  104. package/dist/neutral/simple/block/runner/spec/SimpleBlockRunner.d.ts +0 -2
  105. package/dist/neutral/simple/block/runner/spec/SimpleBlockRunner.d.ts.map +0 -1
  106. package/src/ChainBlockNumberIteration/ChainBlockNumberIterationService.ts +0 -176
  107. package/src/ChainBlockNumberIteration/index.ts +0 -2
  108. package/src/ChainBlockNumberIteration/model/BlockNumberIteration.ts +0 -7
  109. package/src/ChainBlockNumberIteration/model/Params.ts +0 -10
  110. package/src/ChainBlockNumberIteration/model/index.ts +0 -2
  111. package/src/Time/BaseTimeSyncService.ts +0 -54
  112. package/src/Time/index.ts +0 -1
  113. package/src/implementation/head/head.ts +0 -49
  114. package/src/implementation/producer.ts +0 -16
  115. package/src/implementation/time.ts +0 -26
  116. package/src/implementation/validator.ts +0 -15
  117. 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 () => {
@@ -629,18 +477,20 @@ BaseElectionService = _ts_decorate4([
629
477
  ], BaseElectionService);
630
478
 
631
479
  // src/implementation/accountBalance.ts
632
- import { isDefined as isDefined3 } from "@xylabs/sdk-js";
480
+ import { isDefined as isDefined2 } from "@xylabs/sdk-js";
633
481
  import { AccountBalanceViewerRpcSchemas, HttpRpcTransport, JsonRpcAccountBalanceViewer } from "@xyo-network/xl1-rpc";
634
482
  var balanceServiceSingleton;
635
- var initAccountBalanceService = /* @__PURE__ */ __name((params) => {
483
+ var initAccountBalanceService = /* @__PURE__ */ __name(async (params) => {
636
484
  const { config, logger } = params;
637
485
  if (balanceServiceSingleton) return balanceServiceSingleton;
638
486
  const endpoint = config.services?.accountBalanceViewerEndpoint ?? config.services?.apiEndpoint;
639
- if (isDefined3(endpoint)) {
487
+ if (isDefined2(endpoint)) {
640
488
  const transport = new HttpRpcTransport(endpoint, {
641
489
  ...AccountBalanceViewerRpcSchemas
642
490
  });
643
- const viewer = new JsonRpcAccountBalanceViewer(transport);
491
+ const viewer = await JsonRpcAccountBalanceViewer.create({
492
+ transport
493
+ });
644
494
  logger?.log("Using AccountBalanceViewer RPC service at", endpoint);
645
495
  return viewer;
646
496
  } else {
@@ -649,18 +499,19 @@ var initAccountBalanceService = /* @__PURE__ */ __name((params) => {
649
499
  }, "initAccountBalanceService");
650
500
 
651
501
  // src/implementation/blockViewer.ts
652
- import { isDefined as isDefined4 } from "@xylabs/sdk-js";
502
+ import { isDefined as isDefined3 } from "@xylabs/sdk-js";
653
503
  import { BlockViewerRpcSchemas, HttpRpcTransport as HttpRpcTransport2, JsonRpcBlockViewer } from "@xyo-network/xl1-rpc";
654
504
  var blockViewerSingleton;
655
- var initBlockViewer = /* @__PURE__ */ __name((params) => {
656
- const { config, logger } = params;
505
+ var initBlockViewer = /* @__PURE__ */ __name(async ({ config, logger }) => {
657
506
  if (blockViewerSingleton) return blockViewerSingleton;
658
507
  const endpoint = config.services?.apiEndpoint;
659
- if (isDefined4(endpoint)) {
508
+ if (isDefined3(endpoint)) {
660
509
  const transport = new HttpRpcTransport2(endpoint, {
661
510
  ...BlockViewerRpcSchemas
662
511
  });
663
- const viewer = new JsonRpcBlockViewer(transport);
512
+ const viewer = await JsonRpcBlockViewer.create({
513
+ transport
514
+ });
664
515
  logger?.log("Using BlockViewer RPC service at", endpoint);
665
516
  return viewer;
666
517
  } else {
@@ -669,26 +520,26 @@ var initBlockViewer = /* @__PURE__ */ __name((params) => {
669
520
  }, "initBlockViewer");
670
521
 
671
522
  // src/implementation/chain/index.ts
672
- import { assertEx as assertEx13 } from "@xylabs/sdk-js";
523
+ import { assertEx as assertEx9 } from "@xylabs/sdk-js";
673
524
 
674
525
  // src/implementation/chain/evm.ts
675
- import { asAddress, assertEx as assertEx12, isDefined as isDefined8, ZERO_ADDRESS as ZERO_ADDRESS2 } from "@xylabs/sdk-js";
526
+ import { asAddress, assertEx as assertEx8, isDefined as isDefined7, ZERO_ADDRESS as ZERO_ADDRESS2 } from "@xylabs/sdk-js";
676
527
  import { Wallet } from "ethers/wallet";
677
528
 
678
529
  // src/implementation/evm/initEvmProvider.ts
679
- import { assertEx as assertEx11 } from "@xylabs/sdk-js";
530
+ import { assertEx as assertEx7 } from "@xylabs/sdk-js";
680
531
 
681
532
  // src/implementation/evm/initInfuraProvider.ts
682
- import { assertEx as assertEx9, isDefined as isDefined6 } from "@xylabs/sdk-js";
533
+ import { assertEx as assertEx5, isDefined as isDefined5 } from "@xylabs/sdk-js";
683
534
  import { InfuraProvider } from "ethers/providers";
684
535
 
685
536
  // src/implementation/evm/initChainId.ts
686
- import { assertEx as assertEx8, hexFrom, isDefined as isDefined5, isHex } from "@xylabs/sdk-js";
537
+ import { assertEx as assertEx4, hexFrom, isDefined as isDefined4, isHex } from "@xylabs/sdk-js";
687
538
  var canUseChainId = /* @__PURE__ */ __name((config) => {
688
- return isDefined5(config.evm.chainId);
539
+ return isDefined4(config.evm.chainId);
689
540
  }, "canUseChainId");
690
541
  var getChainId = /* @__PURE__ */ __name((config) => {
691
- const chainId = assertEx8(config.evm.chainId, () => "Missing config.evm.chainId");
542
+ const chainId = assertEx4(config.evm.chainId, () => "Missing config.evm.chainId");
692
543
  if (isHex(chainId, {
693
544
  prefix: true
694
545
  })) {
@@ -710,11 +561,11 @@ var initInfuraProvider = /* @__PURE__ */ __name((config) => {
710
561
  return instance;
711
562
  }, "initInfuraProvider");
712
563
  var canUseInfuraProvider = /* @__PURE__ */ __name((config) => {
713
- return canUseChainId(config) && isDefined6(config.evm?.infura?.projectId) && isDefined6(config.evm?.infura?.projectSecret);
564
+ return canUseChainId(config) && isDefined5(config.evm?.infura?.projectId) && isDefined5(config.evm?.infura?.projectSecret);
714
565
  }, "canUseInfuraProvider");
715
566
  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");
567
+ const projectId = assertEx5(config.evm?.infura?.projectId, () => "Missing config.evm.infura.projectId");
568
+ const projectSecret = assertEx5(config.evm?.infura?.projectSecret, () => "Missing config.evm.infura.projectSecret");
718
569
  return [
719
570
  getChainId(config),
720
571
  projectId,
@@ -723,17 +574,17 @@ var getInfuraProviderConfig = /* @__PURE__ */ __name((config) => {
723
574
  }, "getInfuraProviderConfig");
724
575
 
725
576
  // src/implementation/evm/initJsonRpcProvider.ts
726
- import { assertEx as assertEx10, isDefined as isDefined7 } from "@xylabs/sdk-js";
577
+ import { assertEx as assertEx6, isDefined as isDefined6 } from "@xylabs/sdk-js";
727
578
  import { JsonRpcProvider } from "ethers/providers";
728
579
  var initJsonRpcProvider = /* @__PURE__ */ __name((config) => {
729
580
  const providerConfig = getJsonRpcProviderConfig(config);
730
581
  return Promise.resolve(new JsonRpcProvider(...providerConfig));
731
582
  }, "initJsonRpcProvider");
732
583
  var canUseJsonRpcProvider = /* @__PURE__ */ __name((config) => {
733
- return canUseChainId(config) && isDefined7(config.evm.jsonRpc?.url);
584
+ return canUseChainId(config) && isDefined6(config.evm.jsonRpc?.url);
734
585
  }, "canUseJsonRpcProvider");
735
586
  var getJsonRpcProviderConfig = /* @__PURE__ */ __name((config) => {
736
- const jsonRpcUrl = assertEx10(config.evm.jsonRpc?.url, () => "Missing config.evm.jsonRpc.url");
587
+ const jsonRpcUrl = assertEx6(config.evm.jsonRpc?.url, () => "Missing config.evm.jsonRpc.url");
737
588
  return [
738
589
  jsonRpcUrl,
739
590
  getChainId(config)
@@ -749,7 +600,7 @@ var initEvmProvider = /* @__PURE__ */ __name(async ({ config }) => {
749
600
  } else if (canUseJsonRpcProvider(config)) {
750
601
  provider = initJsonRpcProvider(config);
751
602
  }
752
- return assertEx11(await provider, () => "No provider available");
603
+ return assertEx7(await provider, () => "No provider available");
753
604
  }, "initEvmProvider");
754
605
  var canUseEvmProvider = /* @__PURE__ */ __name(({ config }) => {
755
606
  return canUseInfuraProvider(config) || canUseJsonRpcProvider(config);
@@ -759,20 +610,20 @@ var canUseEvmProvider = /* @__PURE__ */ __name(({ config }) => {
759
610
  var chainStakeServiceSingleton;
760
611
  var canUseEvmContractChainService = /* @__PURE__ */ __name((config) => {
761
612
  const { id } = config.chain;
762
- return isDefined8(id) && id !== ZERO_ADDRESS2 && canUseEvmProvider({
613
+ return isDefined7(id) && id !== ZERO_ADDRESS2 && canUseEvmProvider({
763
614
  config
764
615
  });
765
616
  }, "canUseEvmContractChainService");
766
- var initEvmContractChainService = /* @__PURE__ */ __name(async ({ account, config, traceProvider, meterProvider, logger }) => {
617
+ var initEvmContractChainService = /* @__PURE__ */ __name(async ({ account, context: { config }, traceProvider, meterProvider, logger }) => {
767
618
  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({
619
+ const emvStakingContractAddress = assertEx8(config.chain.id, () => "config.chain.id is required");
620
+ const id = assertEx8(asAddress(emvStakingContractAddress), () => "config.chain.id is not a valid address");
621
+ const provider2 = assertEx8(await initEvmProvider({
771
622
  config
772
623
  }));
773
- const privateKey = assertEx12(account.private?.hex, () => "Account does not have a private key");
624
+ const privateKey = assertEx8(account.private?.hex, () => "Account does not have a private key");
774
625
  const runner = new Wallet(privateKey, provider2);
775
- chainStakeServiceSingleton = EvmChainService.create({
626
+ chainStakeServiceSingleton = EvmChainViewer.create({
776
627
  id,
777
628
  runner,
778
629
  traceProvider,
@@ -786,27 +637,28 @@ var initEvmContractChainService = /* @__PURE__ */ __name(async ({ account, confi
786
637
 
787
638
  // src/implementation/chain/index.ts
788
639
  var chainStakeServiceSingleton2;
789
- var initChainService = /* @__PURE__ */ __name(({ account, config, logger }) => {
640
+ var initChainService = /* @__PURE__ */ __name(({ account, context }) => {
641
+ const { logger } = context;
790
642
  logger?.log("ChainService: Initializing...");
791
643
  const result = init({
792
- config,
644
+ context,
793
645
  name: "ChainService",
794
646
  account
795
647
  });
796
648
  logger?.log("ChainService: Initialized");
797
649
  return result;
798
650
  }, "initChainService");
799
- var initMemoryChainService = /* @__PURE__ */ __name(async ({ config }) => {
800
- const result = await MemoryChainService.create({
801
- config,
651
+ var initMemoryChainService = /* @__PURE__ */ __name(async ({ context }) => {
652
+ const result = await MemoryChainViewer.create({
653
+ context,
802
654
  name: "MemoryChainService"
803
655
  });
804
- assertEx13(await result.start(), () => "Failed to start MemoryChainService");
656
+ assertEx9(await result.start(), () => "Failed to start MemoryChainService");
805
657
  return result;
806
658
  }, "initMemoryChainService");
807
659
  var init = /* @__PURE__ */ __name(async (params) => {
808
660
  if (chainStakeServiceSingleton2) return chainStakeServiceSingleton2;
809
- const { config } = params;
661
+ const { config } = params.context;
810
662
  chainStakeServiceSingleton2 = canUseEvmContractChainService(config) ? await initEvmContractChainService({
811
663
  ...params,
812
664
  name: "ChainStakeService"
@@ -814,16 +666,12 @@ var init = /* @__PURE__ */ __name(async (params) => {
814
666
  return chainStakeServiceSingleton2;
815
667
  }, "init");
816
668
 
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
669
  // 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();
670
+ import { buildNextBlock, createGenesisBlock } from "@xyo-network/chain-protocol";
671
+ import { createDeclarationIntent } from "@xyo-network/xl1-protocol-sdk";
672
+ var createBootstrapHead = /* @__PURE__ */ __name(async (account, chainId, genesisBlockRewardAmount, genesisBlockRewardAddress) => {
825
673
  const chain = [];
826
- const genesisBlock = await createGenesisBlock(account, chainId, 10000000n, account.address);
674
+ const genesisBlock = await createGenesisBlock(account, chainId, genesisBlockRewardAmount, genesisBlockRewardAddress);
827
675
  chain.push(genesisBlock);
828
676
  const producerDeclarationPayload = createDeclarationIntent(account.address, "producer", genesisBlock[0].block, genesisBlock[0].block + 1e4);
829
677
  const producerDeclarationBlock = await buildNextBlock(genesisBlock[0], [], [
@@ -835,179 +683,6 @@ var createBootstrapHead = /* @__PURE__ */ __name(async (account, chainService) =
835
683
  return chain;
836
684
  }, "createBootstrapHead");
837
685
 
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
- }
1008
- }
1009
- }, "getForkFromBlock");
1010
-
1011
686
  // src/implementation/head/submitNewChain.ts
1012
687
  import { delay } from "@xylabs/sdk-js";
1013
688
  import { flattenHydratedBlock } from "@xyo-network/xl1-protocol-sdk";
@@ -1025,43 +700,21 @@ var submitNewChain = /* @__PURE__ */ __name(async (chain, chainArchivist, chainS
1025
700
  }
1026
701
  }, "submitNewChain");
1027
702
 
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
703
  // src/implementation/mempoolRunner.ts
1053
- import { isDefined as isDefined11 } from "@xylabs/sdk-js";
704
+ import { isDefined as isDefined8 } from "@xylabs/sdk-js";
1054
705
  import { HttpRpcTransport as HttpRpcTransport3, JsonRpcMempoolRunner, MempoolRunnerRpcSchemas } from "@xyo-network/xl1-rpc";
1055
706
  var mempoolRunnerSingleton;
1056
- var initMempoolRunner = /* @__PURE__ */ __name((params) => {
707
+ var initMempoolRunner = /* @__PURE__ */ __name(async (params) => {
1057
708
  const { config, logger } = params;
1058
709
  if (mempoolRunnerSingleton) return mempoolRunnerSingleton;
1059
710
  const endpoint = config.services?.apiEndpoint;
1060
- if (isDefined11(endpoint)) {
711
+ if (isDefined8(endpoint)) {
1061
712
  const transport = new HttpRpcTransport3(endpoint, {
1062
713
  ...MempoolRunnerRpcSchemas
1063
714
  });
1064
- const runner = new JsonRpcMempoolRunner(transport);
715
+ const runner = await JsonRpcMempoolRunner.create({
716
+ transport
717
+ });
1065
718
  logger?.log("Using mempoolRunner RPC service at", endpoint);
1066
719
  return runner;
1067
720
  } else {
@@ -1070,18 +723,20 @@ var initMempoolRunner = /* @__PURE__ */ __name((params) => {
1070
723
  }, "initMempoolRunner");
1071
724
 
1072
725
  // src/implementation/mempoolViewer.ts
1073
- import { isDefined as isDefined12 } from "@xylabs/sdk-js";
726
+ import { isDefined as isDefined9 } from "@xylabs/sdk-js";
1074
727
  import { HttpRpcTransport as HttpRpcTransport4, JsonRpcMempoolViewer, MempoolViewerRpcSchemas } from "@xyo-network/xl1-rpc";
1075
728
  var mempoolViewerSingleton;
1076
- var initMempoolViewer = /* @__PURE__ */ __name((params) => {
729
+ var initMempoolViewer = /* @__PURE__ */ __name(async (params) => {
1077
730
  const { config, logger } = params;
1078
731
  if (mempoolViewerSingleton) return mempoolViewerSingleton;
1079
732
  const endpoint = config.services?.apiEndpoint;
1080
- if (isDefined12(endpoint)) {
733
+ if (isDefined9(endpoint)) {
1081
734
  const transport = new HttpRpcTransport4(endpoint, {
1082
735
  ...MempoolViewerRpcSchemas
1083
736
  });
1084
- const viewer = new JsonRpcMempoolViewer(transport);
737
+ const viewer = await JsonRpcMempoolViewer.create({
738
+ transport
739
+ });
1085
740
  logger?.log("Using MempoolViewer RPC service at", endpoint);
1086
741
  return viewer;
1087
742
  } else {
@@ -1090,24 +745,24 @@ var initMempoolViewer = /* @__PURE__ */ __name((params) => {
1090
745
  }, "initMempoolViewer");
1091
746
 
1092
747
  // src/implementation/pendingTransactions.ts
1093
- import { isDefined as isDefined14 } from "@xylabs/sdk-js";
748
+ import { isDefined as isDefined11 } from "@xylabs/sdk-js";
1094
749
  import { timeBudget } from "@xyo-network/xl1-protocol-sdk";
1095
750
  import { HttpRpcTransport as HttpRpcTransport5, JsonRpcMempoolViewer as JsonRpcMempoolViewer2, MempoolViewerRpcSchemas as MempoolViewerRpcSchemas2 } from "@xyo-network/xl1-rpc";
1096
751
 
1097
752
  // src/PendingTransactions/BasePendingTransactions.ts
1098
753
  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";
754
+ import { assertEx as assertEx10, creatable as creatable5, exists, filterAs, filterAsync, forget, isDefined as isDefined10, isUndefined } from "@xylabs/sdk-js";
1100
755
  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";
756
+ import { asBlockBoundWitnessWithHashMeta, asXL1BlockNumber, isTransactionBoundWitnessWithStorageMeta } from "@xyo-network/xl1-protocol";
757
+ import { findMostRecentBlock as findMostRecentBlock2, MempoolViewerMoniker } from "@xyo-network/xl1-protocol-sdk";
1103
758
  import { TransactionJsonSchemaValidator, validateTransaction } from "@xyo-network/xl1-validation";
1104
759
  import { Mutex as Mutex2 } from "async-mutex";
1105
760
 
1106
761
  // src/PendingTransactions/bundledPayloadToHydratedTransaction.ts
1107
- import { PayloadBuilder as PayloadBuilder6 } from "@xyo-network/payload-builder";
762
+ import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
1108
763
  import { asSignedTransactionBoundWitnessWithHashMeta } from "@xyo-network/xl1-protocol";
1109
764
  var bundledPayloadToHydratedTransaction = /* @__PURE__ */ __name(async (payload) => {
1110
- const withHashMeta = await PayloadBuilder6.addHashMeta(payload.payloads);
765
+ const withHashMeta = await PayloadBuilder2.addHashMeta(payload.payloads);
1111
766
  const tx = asSignedTransactionBoundWitnessWithHashMeta(withHashMeta.find((p) => p._hash === payload.root));
1112
767
  if (tx) {
1113
768
  return [
@@ -1118,7 +773,7 @@ var bundledPayloadToHydratedTransaction = /* @__PURE__ */ __name(async (payload)
1118
773
  }, "bundledPayloadToHydratedTransaction");
1119
774
 
1120
775
  // src/PendingTransactions/hydratedTransactionToPayloadBundle.ts
1121
- import { PayloadBuilder as PayloadBuilder7 } from "@xyo-network/payload-builder";
776
+ import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder";
1122
777
  import { PayloadBundleSchema } from "@xyo-network/payload-model";
1123
778
  import { flattenHydratedTransaction } from "@xyo-network/xl1-protocol-sdk";
1124
779
  var hydratedTransactionToPayloadBundle = /* @__PURE__ */ __name((transaction) => {
@@ -1126,8 +781,8 @@ var hydratedTransactionToPayloadBundle = /* @__PURE__ */ __name((transaction) =>
1126
781
  return bundle(root, transaction);
1127
782
  }, "hydratedTransactionToPayloadBundle");
1128
783
  var bundle = /* @__PURE__ */ __name((root, transaction) => {
1129
- const payloads = flattenHydratedTransaction(transaction).flatMap((p) => PayloadBuilder7.omitStorageMeta(p));
1130
- return new PayloadBuilder7({
784
+ const payloads = flattenHydratedTransaction(transaction).flatMap((p) => PayloadBuilder3.omitStorageMeta(p));
785
+ return new PayloadBuilder3({
1131
786
  schema: PayloadBundleSchema
1132
787
  }).fields({
1133
788
  payloads,
@@ -1195,23 +850,20 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1195
850
  return this.params.additionalPendingTransactionValidators ?? [];
1196
851
  }
1197
852
  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");
853
+ return assertEx10(this.params.chainArchivist, () => "No completed blocks with data archivist");
1202
854
  }
1203
855
  get pendingBundledTransactionsArchivist() {
1204
- return assertEx15(this.params.pendingBundledTransactionsArchivist, () => "No pending bundled transactions archivist");
856
+ return assertEx10(this.params.pendingBundledTransactionsArchivist, () => "No pending bundled transactions archivist");
1205
857
  }
1206
858
  get pendingBundledTransactionsLocalArchivist() {
1207
- return assertEx15(this._curatedPendingBundledTransactionsArchivist, () => "No pending bundled transactions curated archivist");
859
+ return assertEx10(this._curatedPendingBundledTransactionsArchivist, () => "No pending bundled transactions curated archivist");
1208
860
  }
1209
861
  get pendingTransactionsCount() {
1210
862
  forget(this.countPendingTransactions());
1211
863
  return this._pendingTransactionsCount;
1212
864
  }
1213
865
  get rejectedTransactionsArchivist() {
1214
- return assertEx15(this.params.rejectedTransactionsArchivist, () => "No rejected transactions archivist");
866
+ return assertEx10(this.params.rejectedTransactionsArchivist, () => "No rejected transactions archivist");
1215
867
  }
1216
868
  async createHandler() {
1217
869
  await super.createHandler();
@@ -1247,7 +899,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1247
899
  let lastHead = filterAs(await this.chainArchivist.next({
1248
900
  limit: 100
1249
901
  }), (x) => asBlockBoundWitnessWithHashMeta(x)).at(-1);
1250
- if (isUndefined2(lastHead)) return [];
902
+ if (isUndefined(lastHead)) return [];
1251
903
  await this.pruneCuratedPendingTransactionsArchivist(lastHead._hash);
1252
904
  const foundPendingTransactions = [];
1253
905
  let cursor;
@@ -1261,11 +913,11 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1261
913
  cursor = pendingBundledTransactions.at(-1)?._sequence;
1262
914
  const undeletedTransactionBundles = pendingBundledTransactions.filter((tx) => !this._removablePendingTransactionHashes.has(tx.root));
1263
915
  const transactions = (await Promise.all(undeletedTransactionBundles.map((p) => bundledPayloadToHydratedTransaction(p)))).filter(exists);
1264
- const activeTransactions = transactions.filter(isTransactionActive(asXL1BlockNumber2(lastHead.block + 1, true)));
916
+ const activeTransactions = transactions.filter(isTransactionActive(asXL1BlockNumber(lastHead.block + 1, true)));
1265
917
  const txValidationResults = await Promise.all(activeTransactions.map(async (tx) => [
1266
918
  tx,
1267
919
  await validateTransaction(tx, {
1268
- chainId: this.chainId
920
+ chainId: this.params.chainId
1269
921
  }, this.additionalPendingTransactionValidators)
1270
922
  ]));
1271
923
  const validTransactions = txValidationResults.filter(([, errors]) => errors.length === 0).map(([tx]) => tx);
@@ -1290,8 +942,8 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1290
942
  }
1291
943
  async cleanupWorker() {
1292
944
  return await this._updateCuratedPendingTransactionsArchivistMutex.runExclusive(async () => {
1293
- const lastHead = await findMostRecentBlock3(this.chainArchivist);
1294
- if (isDefined13(lastHead)) await this.pruneCuratedPendingTransactionsArchivist(lastHead._hash);
945
+ const lastHead = await findMostRecentBlock2(this.chainArchivist);
946
+ if (isDefined10(lastHead)) await this.pruneCuratedPendingTransactionsArchivist(lastHead._hash);
1295
947
  }, _BasePendingTransactionsService.MutexPriority.PurgeTransactions);
1296
948
  }
1297
949
  async countPendingTransactions() {
@@ -1318,7 +970,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1318
970
  }))).filter(exists);
1319
971
  const validTransactions = await filterAsync(hydratedUnprocessedTransactions, async (tx) => {
1320
972
  const errors = await validateTransaction(tx, {
1321
- chainId: this.chainId
973
+ chainId: this.params.chainId
1322
974
  }, [
1323
975
  TransactionJsonSchemaValidator
1324
976
  ]);
@@ -1353,7 +1005,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1353
1005
  let [lastHead] = filterAs(await this.chainArchivist.get([
1354
1006
  head
1355
1007
  ]), (x) => asBlockBoundWitnessWithHashMeta(x));
1356
- while (isDefined13(lastHead)) {
1008
+ while (isDefined10(lastHead)) {
1357
1009
  const pendingBundledTransactions = await this.pendingBundledTransactionsLocalArchivist.next({
1358
1010
  limit: 100,
1359
1011
  order: "asc",
@@ -1367,7 +1019,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1367
1019
  foundPendingTransactionsToDeleteHashes.push(...deletedTransactionBundles.map((tx) => tx._hash).filter(exists));
1368
1020
  const undeletedTransactionBundles = pendingBundledTransactions.filter((tx) => !this._removablePendingTransactionHashes.has(tx.root));
1369
1021
  const transactions = (await Promise.all(undeletedTransactionBundles.map((p) => bundledPayloadToHydratedTransaction(p)))).filter(exists);
1370
- const expiredTransactions = transactions.filter(isTransactionExpired(asXL1BlockNumber2(lastHead.block + 1, true)));
1022
+ const expiredTransactions = transactions.filter(isTransactionExpired(asXL1BlockNumber(lastHead.block + 1, true)));
1371
1023
  const expiredBundleHashes = expiredTransactions.map((expiredHydratedTx) => (
1372
1024
  // Find the corresponding payload bundle hash for the expired transaction
1373
1025
  pendingBundledTransactions.find((bundledTx) => bundledTx.root === expiredHydratedTx[0]._hash)?._hash
@@ -1399,11 +1051,13 @@ var initPendingTransactions = /* @__PURE__ */ __name(async ({ config, params, lo
1399
1051
  if (serviceSingleton) return serviceSingleton;
1400
1052
  return await timeBudget("initPendingTransactions", logger, async () => {
1401
1053
  const endpoint = config.services?.apiEndpoint;
1402
- if (isDefined14(endpoint)) {
1054
+ if (isDefined11(endpoint)) {
1403
1055
  const transport = new HttpRpcTransport5(endpoint, {
1404
1056
  ...MempoolViewerRpcSchemas2
1405
1057
  });
1406
- const viewer = new JsonRpcMempoolViewer2(transport);
1058
+ const viewer = await JsonRpcMempoolViewer2.create({
1059
+ transport
1060
+ });
1407
1061
  logger?.log("Using MempoolViewer RPC service at", endpoint);
1408
1062
  return viewer;
1409
1063
  } else {
@@ -1413,30 +1067,177 @@ var initPendingTransactions = /* @__PURE__ */ __name(async ({ config, params, lo
1413
1067
  }, 2e3, true);
1414
1068
  }, "initPendingTransactions");
1415
1069
 
1416
- // src/implementation/producer.ts
1417
- import { timeBudget as timeBudget2 } from "@xyo-network/xl1-protocol-sdk";
1070
+ // src/implementation/reward.ts
1071
+ import { assertEx as assertEx11 } from "@xylabs/sdk-js";
1072
+ import { SimpleBlockRewardViewer, timeBudget as timeBudget2 } from "@xyo-network/xl1-protocol-sdk";
1073
+ var rewardServiceSingleton;
1074
+ var initBlockRewardViewer = /* @__PURE__ */ __name((params) => {
1075
+ if (rewardServiceSingleton) return rewardServiceSingleton;
1076
+ return timeBudget2("initBlockRewardViewer", params.logger, () => {
1077
+ const { config } = params;
1078
+ rewardServiceSingleton = canUseEvmBlockRewardViewer({
1079
+ config
1080
+ }) ? initEvmBlockRewardViewer(params) : initXyoBlockRewardViewer(params);
1081
+ return rewardServiceSingleton;
1082
+ }, 2e3, true);
1083
+ }, "initBlockRewardViewer");
1084
+ var initXyoBlockRewardViewer = /* @__PURE__ */ __name((params) => {
1085
+ if (rewardServiceSingleton) return rewardServiceSingleton;
1086
+ return timeBudget2("initXyoBlockRewardViewer", params.logger, () => {
1087
+ rewardServiceSingleton = SimpleBlockRewardViewer.create(params);
1088
+ return rewardServiceSingleton;
1089
+ }, 2e3, true);
1090
+ }, "initXyoBlockRewardViewer");
1091
+ var canUseEvmBlockRewardViewer = /* @__PURE__ */ __name((params) => canUseEvmProvider({
1092
+ config: params.config
1093
+ }), "canUseEvmBlockRewardViewer");
1094
+ var initEvmBlockRewardViewer = /* @__PURE__ */ __name(async (params) => {
1095
+ if (rewardServiceSingleton) return rewardServiceSingleton;
1096
+ return await timeBudget2("initEvmBlockRewardViewer", params.logger, async () => {
1097
+ const provider2 = assertEx11(await initEvmProvider(params));
1098
+ const evmBlockRewardViewerParams = {
1099
+ ...params,
1100
+ provider: provider2
1101
+ };
1102
+ rewardServiceSingleton = EvmBlockRewardViewer.create(evmBlockRewardViewerParams);
1103
+ return rewardServiceSingleton;
1104
+ }, 2e3, true);
1105
+ }, "initEvmBlockRewardViewer");
1106
+
1107
+ // src/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.ts
1108
+ import { creatable as creatable6 } from "@xylabs/sdk-js";
1109
+ import { NetworkStakeStepRewardViewerMoniker } from "@xyo-network/xl1-protocol-sdk";
1110
+ function _ts_decorate6(decorators, target, key, desc) {
1111
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1112
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1113
+ 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;
1114
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
1115
+ }
1116
+ __name(_ts_decorate6, "_ts_decorate");
1117
+ var BaseNetworkStakeStepRewardService = class _BaseNetworkStakeStepRewardService extends BaseService {
1118
+ static {
1119
+ __name(this, "BaseNetworkStakeStepRewardService");
1120
+ }
1121
+ static defaultMoniker = NetworkStakeStepRewardViewerMoniker;
1122
+ static monikers = [
1123
+ NetworkStakeStepRewardViewerMoniker
1124
+ ];
1125
+ moniker = _BaseNetworkStakeStepRewardService.defaultMoniker;
1126
+ networkStakeStepRewardAddressHistory(_address) {
1127
+ throw new Error("Method [networkStakeStepRewardAddressHistory] not implemented.");
1128
+ }
1129
+ networkStakeStepRewardAddressReward(_context, _address) {
1130
+ throw new Error("Method [networkStakeStepRewardAddressReward] not implemented.");
1131
+ }
1132
+ networkStakeStepRewardAddressShare(_context, _address) {
1133
+ throw new Error("Method [networkStakeStepRewardAddressShare] not implemented.");
1134
+ }
1135
+ networkStakeStepRewardClaimedByAddress(_address) {
1136
+ throw new Error("Method [networkStakeStepRewardClaimedByAddress] not implemented.");
1137
+ }
1138
+ networkStakeStepRewardForPosition(_position, _range) {
1139
+ throw new Error("Method [networkStakeStepRewardForPosition] not implemented.");
1140
+ }
1141
+ networkStakeStepRewardForStep(_context) {
1142
+ throw new Error("Method [networkStakeStepRewardForStep] not implemented.");
1143
+ }
1144
+ networkStakeStepRewardForStepForPosition(_context, _position) {
1145
+ throw new Error("Method [networkStakeStepRewardForStepForPosition] not implemented.");
1146
+ }
1147
+ networkStakeStepRewardPoolRewards(_context) {
1148
+ throw new Error("Method [networkStakeStepRewardPoolRewards] not implemented.");
1149
+ }
1150
+ networkStakeStepRewardPoolShares(_context) {
1151
+ throw new Error("Method [networkStakeStepRewardPoolShares] not implemented.");
1152
+ }
1153
+ networkStakeStepRewardPositionWeight(_context, _position) {
1154
+ throw new Error("Method [networkStakeStepRewardPositionWeight] not implemented.");
1155
+ }
1156
+ networkStakeStepRewardPotentialPositionLoss(_context, _position) {
1157
+ throw new Error("Method [networkStakeStepRewardPotentialPositionLoss] not implemented.");
1158
+ }
1159
+ networkStakeStepRewardRandomizer(_context) {
1160
+ throw new Error("Method [networkStakeStepRewardRandomizer] not implemented.");
1161
+ }
1162
+ networkStakeStepRewardStakerCount(_context) {
1163
+ throw new Error("Method [networkStakeStepRewardStakerCount] not implemented.");
1164
+ }
1165
+ networkStakeStepRewardUnclaimedByAddress(_address) {
1166
+ throw new Error("Method [networkStakeStepRewardUnclaimedByAddress] not implemented.");
1167
+ }
1168
+ networkStakeStepRewardWeightForAddress(_context, _address) {
1169
+ throw new Error("Method [networkStakeStepRewardWeightForAddress] not implemented.");
1170
+ }
1171
+ networkStakeStepRewardsForPosition(_position, _range) {
1172
+ throw new Error("Method [networkStakeStepRewardsForPosition] not implemented.");
1173
+ }
1174
+ networkStakeStepRewardsForRange(_range) {
1175
+ throw new Error("Method [networkStakeStepRewardsForRange] not implemented.");
1176
+ }
1177
+ networkStakeStepRewardsForStepLevel(_stepLevel, _range) {
1178
+ throw new Error("Method [networkStakeStepRewardsForStepLevel] not implemented.");
1179
+ }
1180
+ };
1181
+ BaseNetworkStakeStepRewardService = _ts_decorate6([
1182
+ creatable6()
1183
+ ], BaseNetworkStakeStepRewardService);
1184
+
1185
+ // src/Schemas/BaseSchemasService.ts
1186
+ import { creatable as creatable7, spanRootAsync } from "@xylabs/sdk-js";
1187
+ import { schemasSummary } from "@xyo-network/xl1-protocol-sdk";
1188
+ function _ts_decorate7(decorators, target, key, desc) {
1189
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1190
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1191
+ 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;
1192
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
1193
+ }
1194
+ __name(_ts_decorate7, "_ts_decorate");
1195
+ var BaseSchemasService = class extends BaseService {
1196
+ static {
1197
+ __name(this, "BaseSchemasService");
1198
+ }
1199
+ async schema(head, schema) {
1200
+ return (await this.schemas(head, [
1201
+ schema
1202
+ ]))[schema] ?? 0;
1203
+ }
1204
+ async schemas(head, schemas) {
1205
+ return await spanRootAsync("transfers", async () => {
1206
+ const [summary] = await schemasSummary(this.params.schemasStepSummaryContext);
1207
+ const result = {};
1208
+ for (const schema of schemas) {
1209
+ const count = summary[schema] ?? 0;
1210
+ result[schema] = count;
1211
+ }
1212
+ return result;
1213
+ });
1214
+ }
1215
+ };
1216
+ BaseSchemasService = _ts_decorate7([
1217
+ creatable7()
1218
+ ], BaseSchemasService);
1418
1219
 
1419
1220
  // 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";
1221
+ import { assertEx as assertEx13, exists as exists2, hexToBigInt, isDefined as isDefined12 } from "@xylabs/sdk-js";
1421
1222
  import { MemoryArchivist as MemoryArchivist2 } from "@xyo-network/archivist-memory";
1422
1223
  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";
1224
+ import { buildNextBlock as buildNextBlock2 } from "@xyo-network/chain-protocol";
1225
+ import { PayloadBuilder as PayloadBuilder5 } from "@xyo-network/payload-builder";
1226
+ import { asBlockBoundWitness, AttoXL1, BlockNumberSchema, defaultRewardRatio, XYO_STEP_REWARD_ADDRESS } from "@xyo-network/xl1-protocol";
1227
+ import { AbstractCreatableProvider as AbstractCreatableProvider2, AccountBalanceViewerMoniker, BlockRewardViewerMoniker as BlockRewardViewerMoniker2, BlockRunnerMoniker, creatableProvider, createDeclarationIntent as createDeclarationIntent2, MempoolRunnerMoniker, MempoolViewerMoniker as MempoolViewerMoniker2, TimeSyncViewerMoniker } from "@xyo-network/xl1-protocol-sdk";
1427
1228
 
1428
1229
  // 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";
1230
+ import { hexFromBigInt } from "@xylabs/sdk-js";
1231
+ import { assertEx as assertEx12 } from "@xylabs/sdk-js";
1232
+ import { PayloadBuilder as PayloadBuilder4 } from "@xyo-network/payload-builder";
1432
1233
  import { TransferSchema, XYO_ZERO_ADDRESS } from "@xyo-network/xl1-protocol";
1433
1234
  import { transactionRequiredGas } from "@xyo-network/xl1-protocol-sdk";
1434
1235
  import { HydratedTransactionWrapper } from "@xyo-network/xl1-wrappers";
1435
1236
  async function generateTransactionFeeTransfers(address, transactions) {
1436
1237
  const txs = await Promise.all(transactions.map(async (tx) => {
1437
1238
  return HydratedTransactionWrapper.parse([
1438
- await PayloadBuilder8.addStorageMeta(tx[0]),
1439
- await PayloadBuilder8.addStorageMeta(tx[1])
1239
+ await PayloadBuilder4.addStorageMeta(tx[0]),
1240
+ await PayloadBuilder4.addStorageMeta(tx[1])
1440
1241
  ]);
1441
1242
  }));
1442
1243
  const txBaseFeeCosts = {};
@@ -1456,49 +1257,50 @@ async function generateTransactionFeeTransfers(address, transactions) {
1456
1257
  from,
1457
1258
  transfers: {
1458
1259
  // burn the base fee
1459
- [XYO_ZERO_ADDRESS]: hexFromBigInt2(amount)
1260
+ [XYO_ZERO_ADDRESS]: hexFromBigInt(amount)
1460
1261
  }
1461
1262
  };
1462
1263
  return payload;
1463
1264
  });
1464
1265
  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);
1266
+ const fromPayload = assertEx12(payloads.find((p) => p.from === from), () => "from payload not found");
1267
+ fromPayload.transfers[address] = hexFromBigInt(amount);
1467
1268
  }
1468
1269
  return payloads;
1469
1270
  }
1470
1271
  __name(generateTransactionFeeTransfers, "generateTransactionFeeTransfers");
1471
1272
 
1472
1273
  // src/simple/block/runner/SimpleBlockRunner.ts
1473
- function _ts_decorate6(decorators, target, key, desc) {
1274
+ function _ts_decorate8(decorators, target, key, desc) {
1474
1275
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1475
1276
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1476
1277
  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
1278
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1478
1279
  }
1479
- __name(_ts_decorate6, "_ts_decorate");
1280
+ __name(_ts_decorate8, "_ts_decorate");
1480
1281
  var DEFAULT_BLOCK_SIZE = 10;
1481
1282
  var XYO_PRODUCER_REDECLARATION_DURATION = 1e4;
1482
1283
  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 {
1284
+ var SimpleBlockRunner = class _SimpleBlockRunner extends AbstractCreatableProvider2 {
1496
1285
  static {
1497
1286
  __name(this, "SimpleBlockRunner");
1498
1287
  }
1288
+ static defaultMoniker = BlockRunnerMoniker;
1289
+ static monikers = [
1290
+ BlockRunnerMoniker
1291
+ ];
1292
+ moniker = _SimpleBlockRunner.defaultMoniker;
1499
1293
  _blockRewardDiviner;
1500
1294
  _lastRedeclarationBlock;
1501
1295
  _rejectedTransactionsArchivist;
1296
+ _account;
1297
+ _accountBalanceViewer;
1298
+ _address;
1299
+ _blockRewardViewer;
1300
+ _mempoolRunner;
1301
+ _mempoolViewer;
1302
+ _rewardAddress;
1303
+ _timeSyncViewer;
1502
1304
  /**
1503
1305
  * The default block size for a block
1504
1306
  */
@@ -1519,29 +1321,26 @@ var SimpleBlockRunner = class _SimpleBlockRunner extends AbstractCreatable3 {
1519
1321
  static get RedeclarationWindow() {
1520
1322
  return XYO_PRODUCER_REDECLARATION_WINDOW;
1521
1323
  }
1522
- get address() {
1523
- return this.account.address;
1524
- }
1525
1324
  get account() {
1526
- return assertEx17(this.params.account, () => "account is required");
1325
+ return this._account;
1527
1326
  }
1528
- get balanceViewer() {
1529
- return assertEx17(this.params.balanceViewer, () => "balanceViewer is required");
1327
+ get accountBalanceViewer() {
1328
+ return this._accountBalanceViewer;
1530
1329
  }
1531
- get blockRewardViewer() {
1532
- return assertEx17(this.params.blockRewardViewer, () => "blockRewardViewer is required");
1330
+ get address() {
1331
+ return this._address;
1533
1332
  }
1534
- get chainId() {
1535
- return assertEx17(this.params.chainId, () => "chainId is required");
1333
+ get blockRewardViewer() {
1334
+ return this._blockRewardViewer;
1536
1335
  }
1537
1336
  // protected get electionService() {
1538
1337
  // return assertEx(this.params.electionService, () => 'electionService is required')
1539
1338
  // }
1540
1339
  get mempoolRunner() {
1541
- return assertEx17(this.params.mempoolRunner, () => "mempoolRunner is required");
1340
+ return this._mempoolRunner;
1542
1341
  }
1543
1342
  get mempoolViewer() {
1544
- return assertEx17(this.params.mempoolViewer, () => "mempoolViewer is required");
1343
+ return this._mempoolViewer;
1545
1344
  }
1546
1345
  // protected get pendingTransactionsService() {
1547
1346
  // return assertEx(this.params.pendingTransactionsService, () => 'Missing pendingTransactionsService')
@@ -1550,34 +1349,34 @@ var SimpleBlockRunner = class _SimpleBlockRunner extends AbstractCreatable3 {
1550
1349
  return this._rejectedTransactionsArchivist;
1551
1350
  }
1552
1351
  get rewardAddress() {
1553
- return assertEx17(this.params.rewardAddress, () => "No reward address provided");
1352
+ return assertEx13(this.params.rewardAddress, () => "No reward address provided");
1554
1353
  }
1555
1354
  // protected get stakeIntentService(): StakeIntentService {
1556
1355
  // return assertEx(this.params.stakeIntentService, () => 'No StakeIntentService provided')
1557
1356
  // }
1558
- get time() {
1559
- return assertEx17(this.params.time, () => "No TimeSyncViewer provided");
1357
+ get timeSyncViewer() {
1358
+ return this._timeSyncViewer;
1560
1359
  }
1561
1360
  // protected get validateHydratedBlockState() {
1562
1361
  // return assertEx(this.params.validateHydratedBlockState, () => 'validateHydratedBlockState is required')
1563
1362
  // }
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
- };
1363
+ async createHandler() {
1364
+ this._rejectedTransactionsArchivist = this.params.rejectedTransactionsArchivist ?? await MemoryArchivist2.create();
1365
+ this._account = assertEx13(this.params.account, () => "Account is required");
1366
+ this._rewardAddress = assertEx13(this.params.rewardAddress, () => "No reward address provided");
1367
+ this._address = this.account.address;
1368
+ this._accountBalanceViewer = await this.locateAndCreate(AccountBalanceViewerMoniker);
1369
+ this._blockRewardViewer = await this.locateAndCreate(BlockRewardViewerMoniker2);
1370
+ this._mempoolRunner = await this.locateAndCreate(MempoolRunnerMoniker);
1371
+ this._mempoolViewer = await this.locateAndCreate(MempoolViewerMoniker2);
1372
+ this._timeSyncViewer = await this.locateAndCreate(TimeSyncViewerMoniker);
1572
1373
  }
1573
1374
  async next(head) {
1574
- if (head.chain !== this.chainId) return;
1575
1375
  return await this.proposeNextValidBlock(head);
1576
1376
  }
1577
1377
  async produceNextBlock(head, force) {
1578
- assertEx17(head.chain === this.chainId, () => "Block chain ID does not match");
1579
1378
  const result = await this.proposeNextValidBlock(head);
1580
- return force ? assertEx17(result, () => "Failed to produce next block") : result;
1379
+ return force ? assertEx13(result, () => "Failed to produce next block") : result;
1581
1380
  }
1582
1381
  async getBlockRewardTransfers(block) {
1583
1382
  if (!this._blockRewardDiviner) {
@@ -1591,7 +1390,7 @@ var SimpleBlockRunner = class _SimpleBlockRunner extends AbstractCreatable3 {
1591
1390
  }
1592
1391
  });
1593
1392
  }
1594
- const blockId = new PayloadBuilder9({
1393
+ const blockId = new PayloadBuilder5({
1595
1394
  schema: BlockNumberSchema
1596
1395
  }).fields({
1597
1396
  block
@@ -1607,50 +1406,49 @@ var SimpleBlockRunner = class _SimpleBlockRunner extends AbstractCreatable3 {
1607
1406
  * @returns chain stake intent for the producer redeclaration, or undefined if no redeclaration is needed
1608
1407
  */
1609
1408
  getProducerRedeclaration(head) {
1610
- if (this.params.config.producer.disableIntentRedeclaration) return;
1409
+ if (this.params.context.config.producer.disableIntentRedeclaration) return;
1611
1410
  const currentBlock = head.block;
1612
1411
  return createDeclarationIntent2(this.address, "producer", currentBlock, currentBlock + _SimpleBlockRunner.RedeclarationDuration);
1613
1412
  }
1614
1413
  async proposeNextValidBlock(head, validateBalances = false, force = false) {
1615
1414
  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`);
1415
+ try {
1416
+ const { block: previousBlock } = assertEx13(asBlockBoundWitness(head), () => "Invalid head block");
1417
+ const nextBlock = previousBlock + 1;
1418
+ const nextBlockTransactions = await this.mempoolViewer.pendingTransactions({
1419
+ limit: _SimpleBlockRunner.DefaultBlockSize
1420
+ });
1421
+ this.logger?.info(`Pending Tx Count ${nextBlockTransactions.length}`);
1422
+ const blockPayloads = [];
1423
+ const producerRedeclarationPayload = await this.getProducerRedeclaration(head);
1424
+ if (producerRedeclarationPayload) blockPayloads.push(producerRedeclarationPayload);
1425
+ if (nextBlockTransactions.length === 0 && !this.heartbeatRequired(head) && !force) return;
1426
+ const rewardTransferPayloads = await this.getBlockRewardTransfers(nextBlock);
1427
+ blockPayloads.push(...rewardTransferPayloads);
1428
+ const transactionTransfers = await generateTransactionFeeTransfers(this.address, nextBlockTransactions);
1429
+ const timeStart = Date.now();
1430
+ const timePayload = await this.generateTimePayload(head);
1431
+ const timeDuration = Date.now() - timeStart;
1432
+ if (timeDuration > 100) {
1433
+ this.logger?.warn(`[Slow] Generated time payload in ${timeDuration}ms`);
1434
+ }
1435
+ const [fundedNextBlockTransactions, fundedTransfers] = await this.filterByFunded(head, nextBlockTransactions, transactionTransfers, validateBalances);
1436
+ blockPayloads.push(...fundedTransfers, timePayload);
1437
+ this.logger?.info(`Building block ${head.block + 1}`);
1438
+ const startBuild = Date.now();
1439
+ const stepRewardPoolBalance = (await this.accountBalanceViewer.accountBalances([
1440
+ XYO_STEP_REWARD_ADDRESS
1441
+ ]))[XYO_STEP_REWARD_ADDRESS];
1442
+ const block = await buildNextBlock2(head, fundedNextBlockTransactions, blockPayloads, [
1443
+ this.account
1444
+ ], XYO_STEP_REWARD_ADDRESS, stepRewardPoolBalance);
1445
+ this.logger?.info(`Built block ${block[0].block} in ${Date.now() - startBuild}ms with ${block[1].length} payloads`);
1446
+ await this.mempoolRunner.submitBlocks([
1447
+ block
1448
+ ]);
1449
+ return block;
1450
+ } catch {
1638
1451
  }
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
1452
  });
1655
1453
  }
1656
1454
  // remove unfunded transactions and block transfers
@@ -1661,9 +1459,9 @@ var SimpleBlockRunner = class _SimpleBlockRunner extends AbstractCreatable3 {
1661
1459
  if (!transfer) return;
1662
1460
  const totalTransferCost = Object.values(transfer?.transfers).reduce((acc, t) => acc + hexToBigInt(t ?? "00"), 0n);
1663
1461
  if (validateBalances) {
1664
- const balance = (await this.balanceViewer.accountBalances([
1462
+ const balance = (await this.accountBalanceViewer.accountBalances([
1665
1463
  transfer.from
1666
- ]))[transfer.from] ?? AttoXL12(0n);
1464
+ ]))[transfer.from] ?? AttoXL1(0n);
1667
1465
  if (balance >= totalTransferCost) {
1668
1466
  fundedTransfers.push(transfer);
1669
1467
  return tx;
@@ -1679,19 +1477,7 @@ var SimpleBlockRunner = class _SimpleBlockRunner extends AbstractCreatable3 {
1679
1477
  ];
1680
1478
  }
1681
1479
  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;
1480
+ return await this.timeSyncViewer.currentTimePayload();
1695
1481
  }
1696
1482
  /**
1697
1483
  * Check if a heartbeat block is required based on network activity.
@@ -1700,8 +1486,8 @@ var SimpleBlockRunner = class _SimpleBlockRunner extends AbstractCreatable3 {
1700
1486
  */
1701
1487
  heartbeatRequired(head) {
1702
1488
  const epoch = head.$epoch;
1703
- if (isDefined15(epoch)) {
1704
- const { heartbeatInterval } = this.params.config.producer;
1489
+ if (isDefined12(epoch)) {
1490
+ const { heartbeatInterval } = this.params.context.config.producer;
1705
1491
  if (Date.now() - epoch > heartbeatInterval) {
1706
1492
  return true;
1707
1493
  }
@@ -1709,252 +1495,10 @@ var SimpleBlockRunner = class _SimpleBlockRunner extends AbstractCreatable3 {
1709
1495
  return false;
1710
1496
  }
1711
1497
  };
1712
- SimpleBlockRunner = _ts_decorate6([
1713
- creatable6()
1498
+ SimpleBlockRunner = _ts_decorate8([
1499
+ creatableProvider()
1714
1500
  ], SimpleBlockRunner);
1715
1501
 
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
1502
  // src/StakeIntent/lib/getBlockSignedStakeDeclarations.ts
1959
1503
  import { exists as exists3, filterAs as filterAs2 } from "@xylabs/sdk-js";
1960
1504
  import { isBoundWitness } from "@xyo-network/boundwitness-model";
@@ -1982,21 +1526,21 @@ var mapBoundWitnessToStakeIntentHashes = /* @__PURE__ */ __name((bw) => {
1982
1526
  }, "mapBoundWitnessToStakeIntentHashes");
1983
1527
 
1984
1528
  // 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";
1529
+ import { asAddress as asAddress2, assertEx as assertEx14, creatable as creatable8, filterAs as filterAs3, isUndefined as isUndefined2 } from "@xylabs/sdk-js";
1986
1530
  import { analyzeChain, ChainStakeIntentAnalyzer, isChainSummaryStakeIntent } from "@xyo-network/chain-analyze";
1987
1531
  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";
1532
+ import { PayloadBuilder as PayloadBuilder6 } from "@xyo-network/payload-builder";
1533
+ import { asBlockBoundWitness as asBlockBoundWitness2, asBlockBoundWitnessWithStorageMeta, asChainStakeIntent as asChainStakeIntent2 } from "@xyo-network/xl1-protocol";
1534
+ import { asChainIndexingServiceStateWithStorageMeta, BlockViewerMoniker as BlockViewerMoniker3, ChainIndexingServiceStateSchema, ChainStakeViewerMoniker, isChainIndexingServiceState, readPayloadMapFromStore, timeBudget as timeBudget3 } from "@xyo-network/xl1-protocol-sdk";
1991
1535
  import { Mutex as Mutex3 } from "async-mutex";
1992
- import { LRUCache as LRUCache2 } from "lru-cache";
1993
- function _ts_decorate10(decorators, target, key, desc) {
1536
+ import { LRUCache } from "lru-cache";
1537
+ function _ts_decorate9(decorators, target, key, desc) {
1994
1538
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1995
1539
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1996
1540
  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
1541
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1998
1542
  }
1999
- __name(_ts_decorate10, "_ts_decorate");
1543
+ __name(_ts_decorate9, "_ts_decorate");
2000
1544
  var ACTIVE_STAKE_TTL = 1e3 * 60 * 60 * 2;
2001
1545
  var NO_ACTIVE_STAKE_TTL = 1e3 * 2;
2002
1546
  var STAKE_CACHE_MAX_ENTRIES = 1e4;
@@ -2014,45 +1558,47 @@ var XyoStakeIntentService = class extends BaseService {
2014
1558
  // in performance for small sets, and (most importantly) easily
2015
1559
  // persisted so we can recover state on restart.
2016
1560
  _producers = new IntervalMap();
2017
- _stakeCache = new LRUCache2({
1561
+ _stakeCache = new LRUCache({
2018
1562
  max: STAKE_CACHE_MAX_ENTRIES
2019
1563
  });
2020
1564
  _updateMutex = new Mutex3();
1565
+ _blockViewer;
1566
+ _chainStakeViewer;
2021
1567
  get blockViewer() {
2022
- return this.params.blockViewer;
1568
+ return this._blockViewer;
2023
1569
  }
2024
1570
  get chainArchivist() {
2025
- return assertEx19(this.params.chainArchivist, () => "chainArchivist not set");
1571
+ return assertEx14(this.params.chainArchivist, () => "chainArchivist not set");
2026
1572
  }
2027
1573
  get chainStakeViewer() {
2028
- return assertEx19(this.params.chainStakeViewer, () => "chainStakeViewer not set");
1574
+ return this._chainStakeViewer;
2029
1575
  }
2030
1576
  get stakeIntentStateArchivist() {
2031
- return assertEx19(this.params.stakeIntentStateArchivist, () => "stakeIntentStateArchivist not set");
1577
+ return assertEx14(this.params.stakeIntentStateArchivist, () => "stakeIntentStateArchivist not set");
2032
1578
  }
2033
1579
  static async paramsHandler(params) {
2034
1580
  return {
2035
1581
  ...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")
1582
+ chainArchivist: assertEx14(params?.chainArchivist, () => "chainArchivist is required"),
1583
+ stakeIntentStateArchivist: assertEx14(params?.stakeIntentStateArchivist, () => "stakeIntentStateArchivist is required")
2040
1584
  };
2041
1585
  }
2042
1586
  async createHandler() {
1587
+ this._blockViewer = await this.locator.getInstance(BlockViewerMoniker3);
1588
+ this._chainStakeViewer = await this.locator.getInstance(ChainStakeViewerMoniker);
2043
1589
  const head = await this.blockViewer.currentBlock();
2044
- if (isUndefined3(head)) return;
1590
+ if (isUndefined2(head)) return;
2045
1591
  await this.recoverState(head[0]._hash);
2046
1592
  }
2047
1593
  async getDeclaredCandidateRanges(address, intent) {
2048
1594
  await Promise.resolve();
2049
- assertEx19(intent === "producer", () => `Support not yet added for intent ${intent}`);
1595
+ assertEx14(intent === "producer", () => `Support not yet added for intent ${intent}`);
2050
1596
  const results = this._producers.get(address);
2051
1597
  return results ?? [];
2052
1598
  }
2053
1599
  async getDeclaredCandidatesForBlock(block, intent) {
2054
1600
  return await this.spanAsync("getDeclaredCandidatesForBlock", async () => {
2055
- assertEx19(intent === "producer", () => `Support not yet added for intent ${intent}`);
1601
+ assertEx14(intent === "producer", () => `Support not yet added for intent ${intent}`);
2056
1602
  const results = this._producers.findAllContaining(block);
2057
1603
  const candidates = [
2058
1604
  ...results
@@ -2065,7 +1611,7 @@ var XyoStakeIntentService = class extends BaseService {
2065
1611
  getRequiredMinimumStakeForIntent(intent) {
2066
1612
  switch (intent) {
2067
1613
  case "producer": {
2068
- const { minStake } = this.params.config.producer;
1614
+ const { minStake } = this.params.context.config.producer;
2069
1615
  return BigInt(minStake);
2070
1616
  }
2071
1617
  }
@@ -2106,7 +1652,7 @@ var XyoStakeIntentService = class extends BaseService {
2106
1652
  }
2107
1653
  async persistState(current) {
2108
1654
  const state = this._producers.serialize();
2109
- const payload = new PayloadBuilder10({
1655
+ const payload = new PayloadBuilder6({
2110
1656
  schema: ChainIndexingServiceStateSchema
2111
1657
  }).fields({
2112
1658
  endBlockHash: current,
@@ -2117,8 +1663,8 @@ var XyoStakeIntentService = class extends BaseService {
2117
1663
  ]);
2118
1664
  }
2119
1665
  async recoverState(current) {
2120
- return await timeBudget5("XyoStakeIntentService.recoverState", console, async () => {
2121
- const currentBlock = assertEx19(asBlockBoundWitness3((await this.chainArchivist.get([
1666
+ return await timeBudget3("XyoStakeIntentService.recoverState", console, async () => {
1667
+ const currentBlock = assertEx14(asBlockBoundWitness2((await this.chainArchivist.get([
2122
1668
  current
2123
1669
  ]))?.[0]), () => `Block ${current} not found`);
2124
1670
  const currentBlockNum = currentBlock.block;
@@ -2135,7 +1681,7 @@ var XyoStakeIntentService = class extends BaseService {
2135
1681
  const indexed = (await this.chainArchivist.get([
2136
1682
  state.endBlockHash
2137
1683
  ]))?.[0];
2138
- const indexedBlock = asBlockBoundWitnessWithStorageMeta2(indexed);
1684
+ const indexedBlock = asBlockBoundWitnessWithStorageMeta(indexed);
2139
1685
  if (indexedBlock) {
2140
1686
  const indexedBlockNum = indexedBlock.block;
2141
1687
  if (indexedBlockNum <= currentBlockNum) {
@@ -2159,10 +1705,10 @@ var XyoStakeIntentService = class extends BaseService {
2159
1705
  await this._updateMutex.runExclusive(async () => {
2160
1706
  return await this.spanAsync("updateIndex", async () => {
2161
1707
  const currentHead = (await this.blockViewer.currentBlock())[0];
2162
- if (isUndefined3(currentHead)) return;
2163
- return await timeBudget5("XyoStakeIntentService.updateIndex", console, async () => {
1708
+ if (isUndefined2(currentHead)) return;
1709
+ return await timeBudget3("XyoStakeIntentService.updateIndex", console, async () => {
2164
1710
  const currentHeadHash = currentHead._hash;
2165
- const chainMap = readPayloadMapFromStore2(this.chainArchivist);
1711
+ const chainMap = readPayloadMapFromStore(this.chainArchivist);
2166
1712
  const result = await analyzeChain({
2167
1713
  chainMap
2168
1714
  }, [
@@ -2187,20 +1733,20 @@ var XyoStakeIntentService = class extends BaseService {
2187
1733
  });
2188
1734
  }
2189
1735
  };
2190
- XyoStakeIntentService = _ts_decorate10([
2191
- creatable10()
1736
+ XyoStakeIntentService = _ts_decorate9([
1737
+ creatable8()
2192
1738
  ], XyoStakeIntentService);
2193
1739
 
2194
1740
  // src/StepStake/BaseStepStakeService.ts
2195
- import { creatable as creatable11 } from "@xylabs/sdk-js";
1741
+ import { creatable as creatable9 } from "@xylabs/sdk-js";
2196
1742
  import { StepStakeViewerMoniker } from "@xyo-network/xl1-protocol-sdk";
2197
- function _ts_decorate11(decorators, target, key, desc) {
1743
+ function _ts_decorate10(decorators, target, key, desc) {
2198
1744
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
2199
1745
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
2200
1746
  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
1747
  return c > 3 && r && Object.defineProperty(target, key, r), r;
2202
1748
  }
2203
- __name(_ts_decorate11, "_ts_decorate");
1749
+ __name(_ts_decorate10, "_ts_decorate");
2204
1750
  var BaseStepStakeService = class _BaseStepStakeService extends BaseService {
2205
1751
  static {
2206
1752
  __name(this, "BaseStepStakeService");
@@ -2217,8 +1763,8 @@ var BaseStepStakeService = class _BaseStepStakeService extends BaseService {
2217
1763
  throw new Error("Method [stepStakeForAddress] not implemented.");
2218
1764
  }
2219
1765
  };
2220
- BaseStepStakeService = _ts_decorate11([
2221
- creatable11()
1766
+ BaseStepStakeService = _ts_decorate10([
1767
+ creatable9()
2222
1768
  ], BaseStepStakeService);
2223
1769
  export {
2224
1770
  BaseAccountableService,
@@ -2228,14 +1774,11 @@ export {
2228
1774
  BaseSchemasService,
2229
1775
  BaseService,
2230
1776
  BaseStepStakeService,
2231
- BaseTimeSyncService,
2232
- ChainBlockNumberIterationService,
2233
1777
  DEFAULT_BLOCK_SIZE,
2234
1778
  EvmBlockRewardViewer,
2235
- EvmChainService,
2236
- MemoryChainService,
1779
+ EvmChainViewer,
1780
+ MemoryChainViewer,
2237
1781
  SimpleBlockRunner,
2238
- SimpleBlockRunnerParamsZod,
2239
1782
  XYO_PRODUCER_REDECLARATION_DURATION,
2240
1783
  XYO_PRODUCER_REDECLARATION_WINDOW,
2241
1784
  XyoStakeIntentService,
@@ -2244,21 +1787,19 @@ export {
2244
1787
  blockViewerFromChainIteratorAndArchivist,
2245
1788
  canUseEvmProvider,
2246
1789
  creatableService,
1790
+ createBootstrapHead,
2247
1791
  getBlockSignedStakeDeclarations,
2248
1792
  initAccountBalanceService,
2249
- initBlockProducer,
2250
1793
  initBlockRewardViewer,
2251
1794
  initBlockViewer,
2252
1795
  initChainService,
2253
1796
  initEvmBlockRewardViewer,
2254
1797
  initEvmProvider,
2255
- initHead,
2256
1798
  initMemoryChainService,
2257
1799
  initMempoolRunner,
2258
1800
  initMempoolViewer,
2259
1801
  initPendingTransactions,
2260
- initTimeService,
2261
- initValidator,
2262
- initXyoBlockRewardViewer
1802
+ initXyoBlockRewardViewer,
1803
+ submitNewChain
2263
1804
  };
2264
1805
  //# sourceMappingURL=index.mjs.map