@xyo-network/chain-services 1.16.23 → 1.16.25

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 (26) hide show
  1. package/dist/neutral/AccountBalance/BaseAccountBalanceService.d.ts +14 -5
  2. package/dist/neutral/AccountBalance/BaseAccountBalanceService.d.ts.map +1 -1
  3. package/dist/neutral/BlockProducer/BaseBlockProducerService.d.ts +15 -6
  4. package/dist/neutral/BlockProducer/BaseBlockProducerService.d.ts.map +1 -1
  5. package/dist/neutral/ChainBlockNumberIteration/ChainBlockNumberIterationService.d.ts +16 -1
  6. package/dist/neutral/ChainBlockNumberIteration/ChainBlockNumberIterationService.d.ts.map +1 -1
  7. package/dist/neutral/ChainValidator/XyoValidator.d.ts +1 -1
  8. package/dist/neutral/ChainValidator/XyoValidator.d.ts.map +1 -1
  9. package/dist/neutral/PendingTransactions/BasePendingTransactions.d.ts.map +1 -1
  10. package/dist/neutral/PendingTransactions/bundledPayloadToHydratedTransaction.d.ts +2 -2
  11. package/dist/neutral/PendingTransactions/bundledPayloadToHydratedTransaction.d.ts.map +1 -1
  12. package/dist/neutral/PendingTransactions/hydratedTransactionToPayloadBundle.d.ts +2 -2
  13. package/dist/neutral/PendingTransactions/hydratedTransactionToPayloadBundle.d.ts.map +1 -1
  14. package/dist/neutral/index.d.ts +1 -0
  15. package/dist/neutral/index.d.ts.map +1 -1
  16. package/dist/neutral/index.mjs +208 -165
  17. package/dist/neutral/index.mjs.map +1 -1
  18. package/package.json +28 -27
  19. package/src/AccountBalance/BaseAccountBalanceService.ts +42 -22
  20. package/src/BlockProducer/BaseBlockProducerService.ts +25 -16
  21. package/src/PendingTransactions/BasePendingTransactions.ts +11 -9
  22. package/src/PendingTransactions/bundledPayloadToHydratedTransaction.ts +6 -6
  23. package/src/PendingTransactions/hydratedTransactionToPayloadBundle.ts +3 -3
  24. package/src/StakeIntent/lib/getBlockSignedStakeDeclarations.ts +2 -2
  25. package/src/blockViewerFromChainIteratorAndArchivist.ts +11 -11
  26. package/src/index.ts +1 -0
@@ -2,17 +2,18 @@ var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
3
 
4
4
  // src/AccountBalance/accountBalanceServiceFromArchivist.ts
5
- import { assertEx } from "@xylabs/sdk-js";
5
+ import { assertEx as assertEx2 } from "@xylabs/sdk-js";
6
6
  import { findMostRecentBlock } from "@xyo-network/chain-protocol";
7
7
  import { StepSizes } from "@xyo-network/xl1-protocol";
8
8
  import { LruCacheMap, readPayloadMapFromStore } from "@xyo-network/xl1-protocol-sdk";
9
9
  import { Semaphore } from "async-mutex";
10
10
 
11
11
  // src/AccountBalance/BaseAccountBalanceService.ts
12
- import { creatable as creatable2 } from "@xylabs/sdk-js";
12
+ import { assertEx, creatable as creatable2 } from "@xylabs/sdk-js";
13
13
  import { spanRootAsync as spanRootAsync2 } from "@xylabs/telemetry";
14
14
  import { AttoXL1 } from "@xyo-network/xl1-protocol";
15
15
  import { balancesSummary, SimpleAccountBalanceViewer } from "@xyo-network/xl1-protocol-sdk";
16
+ import z from "zod";
16
17
 
17
18
  // src/BaseService.ts
18
19
  import { AbstractCreatable, creatable } from "@xylabs/sdk-js";
@@ -64,67 +65,6 @@ function creatableService() {
64
65
  }
65
66
  __name(creatableService, "creatableService");
66
67
 
67
- // src/blockViewerFromChainIteratorAndArchivist.ts
68
- import { isDefined } from "@xylabs/sdk-js";
69
- import { PayloadBuilder } from "@xyo-network/payload-builder";
70
- import { asBlockBoundWitnessWithStorageMeta } from "@xyo-network/xl1-protocol";
71
- function blockViewerFromChainIteratorAndArchivist(chainIterator, chainArchivist) {
72
- const result = {
73
- blockByHash: /* @__PURE__ */ __name(async function(hash) {
74
- const [payload] = await chainArchivist.get([
75
- hash
76
- ]);
77
- const block = asBlockBoundWitnessWithStorageMeta(payload);
78
- if (isDefined(block)) {
79
- const payloads = await chainArchivist.get(block.payload_hashes);
80
- return [
81
- block,
82
- payloads
83
- ];
84
- }
85
- return null;
86
- }, "blockByHash"),
87
- blockByNumber: /* @__PURE__ */ __name(async function(blockNumber) {
88
- const payload = await chainIterator.get(blockNumber);
89
- const block = payload ? await PayloadBuilder.addStorageMeta(payload) : void 0;
90
- if (isDefined(block)) {
91
- const payloads = await chainArchivist.get(block.payload_hashes);
92
- return [
93
- block,
94
- payloads
95
- ];
96
- }
97
- return null;
98
- }, "blockByNumber"),
99
- blocksByHash: /* @__PURE__ */ __name(async function(hash, limit = 10) {
100
- const results = [];
101
- for (let i = 0; i < limit; i++) {
102
- const block = await this.blockByHash(hash);
103
- if (block) {
104
- results.push(block);
105
- } else {
106
- break;
107
- }
108
- }
109
- return results;
110
- }, "blocksByHash"),
111
- currentBlock: /* @__PURE__ */ __name(async function() {
112
- const head = await chainIterator.head();
113
- return this.blockByHash(head._hash);
114
- }, "currentBlock"),
115
- currentBlockHash: /* @__PURE__ */ __name(async function() {
116
- const head = await chainIterator.head();
117
- return head._hash;
118
- }, "currentBlockHash"),
119
- currentBlockNumber: /* @__PURE__ */ __name(async function() {
120
- const head = await chainIterator.head();
121
- return head.block;
122
- }, "currentBlockNumber")
123
- };
124
- return result;
125
- }
126
- __name(blockViewerFromChainIteratorAndArchivist, "blockViewerFromChainIteratorAndArchivist");
127
-
128
68
  // src/AccountBalance/BaseAccountBalanceService.ts
129
69
  function _ts_decorate2(decorators, target, key, desc) {
130
70
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -133,24 +73,48 @@ function _ts_decorate2(decorators, target, key, desc) {
133
73
  return c > 3 && r && Object.defineProperty(target, key, r), r;
134
74
  }
135
75
  __name(_ts_decorate2, "_ts_decorate");
76
+ var BaseAccountBalanceServiceParamsZod = z.object({
77
+ blockViewer: z.object().loose(),
78
+ chainArchivist: z.object().loose(),
79
+ chainIterator: z.object().loose(),
80
+ context: z.object().loose(),
81
+ transferContext: z.object().loose()
82
+ });
136
83
  var BaseAccountBalanceService = class extends BaseService {
137
84
  static {
138
85
  __name(this, "BaseAccountBalanceService");
139
86
  }
140
87
  accountBalanceViewer;
141
- blockViewer;
88
+ get blockViewer() {
89
+ return assertEx(this.params.blockViewer, () => "BlockViewer has not been initialized yet");
90
+ }
91
+ static async paramsHandler(params) {
92
+ BaseAccountBalanceServiceParamsZod.parse(params);
93
+ assertEx(params?.context?.head, () => "BalanceStepSummaryContext is required in BaseAccountBalanceServiceParams");
94
+ return {
95
+ ...await super.paramsHandler(params),
96
+ ...params
97
+ };
98
+ }
142
99
  async accountBalance(address, headOrRange) {
143
- const balances = await this.accountBalances([
100
+ const balances = await this.accountsBalances([
144
101
  address
145
102
  ], headOrRange);
146
103
  return balances[address] ?? AttoXL1(0n);
147
104
  }
148
- async accountBalanceHistory(address, headOrRange) {
149
- return await this.accountBalanceViewer.accountBalanceHistory(address, headOrRange);
105
+ accountBalanceHistory(_address, _headOrRange) {
106
+ throw new Error("Method not implemented.");
150
107
  }
151
- async accountBalances(address, _headOrRange) {
108
+ async accountsBalances(address, _headOrRange) {
152
109
  return await spanRootAsync2("balances", async () => {
153
- const summary = await balancesSummary(this.params.context);
110
+ const context = {
111
+ head: this.params.context.head,
112
+ stepSemaphores: this.params.context.stepSemaphores,
113
+ store: this.params.context.store,
114
+ chainId: this.params.context.chainId,
115
+ summaryMap: this.params.context.summaryMap
116
+ };
117
+ const summary = await balancesSummary(context);
154
118
  const result = {};
155
119
  for (const addr of address) {
156
120
  const summaryBalance = summary[addr] ?? 0n;
@@ -159,15 +123,15 @@ var BaseAccountBalanceService = class extends BaseService {
159
123
  return result;
160
124
  });
161
125
  }
162
- accountsBalances(address, headOrRange) {
126
+ accountsBalancesHistory(_addresses, _headOrRange) {
163
127
  throw new Error("Method not implemented.");
164
128
  }
165
- async accountsBalancesHistory(addresses, headOrRange) {
166
- return await this.accountBalanceViewer.accountsBalancesHistory(addresses, headOrRange);
167
- }
168
- createHandler() {
169
- this.blockViewer = blockViewerFromChainIteratorAndArchivist(this.params.chainIterator, this.params.chainArchivist);
170
- this.accountBalanceViewer = new SimpleAccountBalanceViewer(this.params.context, this.params.transferContext, this.blockViewer);
129
+ async createHandler() {
130
+ this.accountBalanceViewer = await SimpleAccountBalanceViewer.create({
131
+ context: this.params.context,
132
+ transferContext: this.params.transferContext,
133
+ blockViewer: this.blockViewer
134
+ });
171
135
  }
172
136
  };
173
137
  BaseAccountBalanceService = _ts_decorate2([
@@ -186,8 +150,8 @@ var accountBalancesServiceFromArchivist = /* @__PURE__ */ __name(async (chainId,
186
150
  const headFunc = /* @__PURE__ */ __name(async () => {
187
151
  const head = await findMostRecentBlock(archivist);
188
152
  return [
189
- assertEx(head?._hash, () => "No head found in chainArchivist"),
190
- assertEx(head?.block, () => "No head found in chainArchivist")
153
+ assertEx2(head?._hash, () => "No head found in chainArchivist"),
154
+ assertEx2(head?.block, () => "No head found in chainArchivist")
191
155
  ];
192
156
  }, "headFunc");
193
157
  const service = await BaseAccountBalanceService.create({
@@ -242,24 +206,25 @@ BaseAccountTransfersService = _ts_decorate3([
242
206
  ], BaseAccountTransfersService);
243
207
 
244
208
  // src/BlockProducer/BaseBlockProducerService.ts
245
- import { asHash, assertEx as assertEx3, creatable as creatable4, exists, hexToBigInt, isDefined as isDefined2, toHex } from "@xylabs/sdk-js";
209
+ import { AddressZod, asHash, assertEx as assertEx4, creatable as creatable4, exists, hexToBigInt, isDefined, toHex } from "@xylabs/sdk-js";
246
210
  import { FixedPercentageBlockRewardDiviner, FixedPercentageBlockRewardDivinerConfigSchema } from "@xyo-network/chain-modules";
247
211
  import { buildNextBlock, createDeclarationIntent } from "@xyo-network/chain-protocol";
248
- import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder";
212
+ import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
249
213
  import { asBlockBoundWitness, AttoXL1 as AttoXL13, BlockNumberSchema, defaultRewardRatio, TimeSchema, XYO_STEP_REWARD_ADDRESS } from "@xyo-network/xl1-protocol";
214
+ import z2 from "zod";
250
215
 
251
216
  // src/BlockProducer/generateTransactionFeeTransfers.ts
252
217
  import { hexFromBigInt } from "@xylabs/sdk-js";
253
- import { assertEx as assertEx2 } from "@xylabs/sdk-js";
254
- import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
218
+ import { assertEx as assertEx3 } from "@xylabs/sdk-js";
219
+ import { PayloadBuilder } from "@xyo-network/payload-builder";
255
220
  import { TransferSchema, XYO_ZERO_ADDRESS } from "@xyo-network/xl1-protocol";
256
221
  import { transactionRequiredGas } from "@xyo-network/xl1-protocol-sdk";
257
222
  import { HydratedTransactionWrapper } from "@xyo-network/xl1-wrappers";
258
223
  async function generateTransactionFeeTransfers(address, transactions) {
259
224
  const txs = await Promise.all(transactions.map(async (tx) => {
260
225
  return HydratedTransactionWrapper.parse([
261
- await PayloadBuilder2.addStorageMeta(tx[0]),
262
- await PayloadBuilder2.addStorageMeta(tx[1])
226
+ await PayloadBuilder.addStorageMeta(tx[0]),
227
+ await PayloadBuilder.addStorageMeta(tx[1])
263
228
  ]);
264
229
  }));
265
230
  const txBaseFeeCosts = {};
@@ -285,7 +250,7 @@ async function generateTransactionFeeTransfers(address, transactions) {
285
250
  return payload;
286
251
  });
287
252
  for (const [from, amount] of Object.entries(txGasCosts)) {
288
- const fromPayload = assertEx2(payloads.find((p) => p.from === from), () => "from payload not found");
253
+ const fromPayload = assertEx3(payloads.find((p) => p.from === from), () => "from payload not found");
289
254
  fromPayload.transfers[address] = hexFromBigInt(amount);
290
255
  }
291
256
  return payloads;
@@ -303,6 +268,13 @@ __name(_ts_decorate4, "_ts_decorate");
303
268
  var DEFAULT_BLOCK_SIZE = 10;
304
269
  var XYO_PRODUCER_REDECLARATION_DURATION = 1e4;
305
270
  var XYO_PRODUCER_REDECLARATION_WINDOW = 500;
271
+ var BaseBlockProducerServiceParamsZod = z2.object({
272
+ balanceService: z2.object().loose(),
273
+ pendingTransactionsService: z2.object().loose(),
274
+ rejectedTransactionsArchivist: z2.object().loose(),
275
+ rewardAddress: AddressZod,
276
+ time: z2.object().loose()
277
+ });
306
278
  var BaseBlockProducerService = class _BaseBlockProducerService extends BaseService {
307
279
  static {
308
280
  __name(this, "BaseBlockProducerService");
@@ -332,40 +304,47 @@ var BaseBlockProducerService = class _BaseBlockProducerService extends BaseServi
332
304
  return this.account.address;
333
305
  }
334
306
  get account() {
335
- return assertEx3(this.params.account, () => "account is required");
307
+ return assertEx4(this.params.account, () => "account is required");
336
308
  }
337
309
  get balanceService() {
338
- return assertEx3(this.params.balanceService, () => "balanceService is required");
310
+ return assertEx4(this.params.balanceService, () => "balanceService is required");
339
311
  }
340
312
  get chainArchivist() {
341
- return assertEx3(this.params.chainArchivist, () => "chainArchivist is required");
313
+ return assertEx4(this.params.chainArchivist, () => "chainArchivist is required");
342
314
  }
343
315
  get chainId() {
344
- return assertEx3(this.params.chainId, () => "chainId is required");
316
+ return assertEx4(this.params.chainId, () => "chainId is required");
345
317
  }
346
318
  get electionService() {
347
- return assertEx3(this.params.electionService, () => "electionService is required");
319
+ return assertEx4(this.params.electionService, () => "electionService is required");
348
320
  }
349
321
  get pendingTransactionsService() {
350
- return assertEx3(this.params.pendingTransactionsService, () => "Missing pendingTransactionsService");
322
+ return assertEx4(this.params.pendingTransactionsService, () => "Missing pendingTransactionsService");
351
323
  }
352
324
  get rejectedTransactionsArchivist() {
353
- return assertEx3(this.params.rejectedTransactionsArchivist, () => "No rejected bundled transactions archivist");
325
+ return assertEx4(this.params.rejectedTransactionsArchivist, () => "No rejected bundled transactions archivist");
354
326
  }
355
327
  get rewardAddress() {
356
- return assertEx3(this.params.rewardAddress, () => "No reward address provided");
328
+ return assertEx4(this.params.rewardAddress, () => "No reward address provided");
357
329
  }
358
330
  get rewardService() {
359
- return assertEx3(this.params.rewardService, () => "rewardService is required");
331
+ return assertEx4(this.params.rewardService, () => "rewardService is required");
360
332
  }
361
333
  get stakeIntentService() {
362
- return assertEx3(this.params.stakeIntentService, () => "No StakeIntentService provided");
334
+ return assertEx4(this.params.stakeIntentService, () => "No StakeIntentService provided");
363
335
  }
364
336
  get time() {
365
- return assertEx3(this.params.time, () => "No TimeSyncViewer provided");
337
+ return assertEx4(this.params.time, () => "No TimeSyncViewer provided");
366
338
  }
367
339
  get validateHydratedBlockState() {
368
- return assertEx3(this.params.validateHydratedBlockState, () => "validateHydratedBlockState is required");
340
+ return assertEx4(this.params.validateHydratedBlockState, () => "validateHydratedBlockState is required");
341
+ }
342
+ static async paramsHandler(params) {
343
+ BaseBlockProducerServiceParamsZod.parse(params);
344
+ return {
345
+ ...await super.paramsHandler(params),
346
+ ...params
347
+ };
369
348
  }
370
349
  async next(head) {
371
350
  if (head.chain !== this.chainId) return;
@@ -390,8 +369,8 @@ var BaseBlockProducerService = class _BaseBlockProducerService extends BaseServi
390
369
  }
391
370
  });
392
371
  }
393
- const blockHex = assertEx3(toHex(block), () => "Failed to convert block to hex");
394
- const blockId = new PayloadBuilder3({
372
+ const blockHex = assertEx4(toHex(block), () => "Failed to convert block to hex");
373
+ const blockId = new PayloadBuilder2({
395
374
  schema: BlockNumberSchema
396
375
  }).fields({
397
376
  block: blockHex
@@ -419,7 +398,7 @@ var BaseBlockProducerService = class _BaseBlockProducerService extends BaseServi
419
398
  }
420
399
  async proposeNextValidBlock(head, validateBalances = false) {
421
400
  return await this.spanAsync("proposeNextValidBlock", async () => {
422
- const { block: previousBlock } = assertEx3(asBlockBoundWitness(head), () => "Invalid head block");
401
+ const { block: previousBlock } = assertEx4(asBlockBoundWitness(head), () => "Invalid head block");
423
402
  const nextBlock = previousBlock + 1;
424
403
  const nextBlockTransactionsStart = Date.now();
425
404
  const nextBlockTransactions = await this.pendingTransactionsService.getPendingTransactions(head._hash, _BaseBlockProducerService.DefaultBlockSize);
@@ -513,7 +492,7 @@ var BaseBlockProducerService = class _BaseBlockProducerService extends BaseServi
513
492
  */
514
493
  heartbeatRequired(head) {
515
494
  const epoch = head.$epoch;
516
- if (isDefined2(epoch)) {
495
+ if (isDefined(epoch)) {
517
496
  const { heartbeatInterval } = this.params.config.producer;
518
497
  if (Date.now() - epoch > heartbeatInterval) {
519
498
  return true;
@@ -548,7 +527,7 @@ BaseBlockRewardService = _ts_decorate5([
548
527
  ], BaseBlockRewardService);
549
528
 
550
529
  // src/BlockReward/EvmBlockRewardService.ts
551
- import { assertEx as assertEx4, creatable as creatable6, toEthAddress } from "@xylabs/sdk-js";
530
+ import { assertEx as assertEx5, creatable as creatable6, toEthAddress } from "@xylabs/sdk-js";
552
531
  import { XyoChainRewards__factory as XyoChainRewardsFactory } from "@xyo-network/typechain";
553
532
  function _ts_decorate6(decorators, target, key, desc) {
554
533
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -563,13 +542,13 @@ var EvmBlockRewardService = class extends BaseBlockRewardService {
563
542
  }
564
543
  _contractAddress;
565
544
  get chainService() {
566
- return assertEx4(this.params.chainService, () => "chainService is required");
545
+ return assertEx5(this.params.chainService, () => "chainService is required");
567
546
  }
568
547
  get contractAddress() {
569
- return assertEx4(this._contractAddress, () => "contractAddress is required");
548
+ return assertEx5(this._contractAddress, () => "contractAddress is required");
570
549
  }
571
550
  get provider() {
572
- return assertEx4(this.params.provider, () => "provider is required");
551
+ return assertEx5(this.params.provider, () => "provider is required");
573
552
  }
574
553
  async createHandler() {
575
554
  await super.createHandler();
@@ -590,7 +569,7 @@ EvmBlockRewardService = _ts_decorate6([
590
569
  ], EvmBlockRewardService);
591
570
 
592
571
  // src/BlockReward/MemoryBlockRewardService.ts
593
- import { assertEx as assertEx5, creatable as creatable7, toFixedPoint } from "@xylabs/sdk-js";
572
+ import { assertEx as assertEx6, creatable as creatable7, toFixedPoint } from "@xylabs/sdk-js";
594
573
  import { rewardFromBlockNumber } from "@xyo-network/chain-protocol";
595
574
  function _ts_decorate7(decorators, target, key, desc) {
596
575
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -605,22 +584,22 @@ var MemoryBlockRewardService = class extends BaseBlockRewardService {
605
584
  }
606
585
  rewardFromBlockNumber = rewardFromBlockNumber(18);
607
586
  get creatorReward() {
608
- return assertEx5(this.params.creatorReward, () => "creatorReward is required");
587
+ return assertEx6(this.params.creatorReward, () => "creatorReward is required");
609
588
  }
610
589
  get initialReward() {
611
- return assertEx5(this.params.initialStepReward, () => "initialStepReward is required");
590
+ return assertEx6(this.params.initialStepReward, () => "initialStepReward is required");
612
591
  }
613
592
  get minRewardPerBlock() {
614
- return assertEx5(this.params.minRewardPerBlock, () => "minRewardPerBlock is required");
593
+ return assertEx6(this.params.minRewardPerBlock, () => "minRewardPerBlock is required");
615
594
  }
616
595
  get stepFactorDenominator() {
617
- return assertEx5(this.params.stepFactorDenominator, () => "stepFactorDenominator is required");
596
+ return assertEx6(this.params.stepFactorDenominator, () => "stepFactorDenominator is required");
618
597
  }
619
598
  get stepFactorNumerator() {
620
- return assertEx5(this.params.stepFactorNumerator, () => "stepFactorNumerator is required");
599
+ return assertEx6(this.params.stepFactorNumerator, () => "stepFactorNumerator is required");
621
600
  }
622
601
  get stepSize() {
623
- return assertEx5(this.params.stepSize, () => "stepSize is required");
602
+ return assertEx6(this.params.stepSize, () => "stepSize is required");
624
603
  }
625
604
  static async paramsHandler(inParams) {
626
605
  return {
@@ -641,10 +620,71 @@ MemoryBlockRewardService = _ts_decorate7([
641
620
  creatable7()
642
621
  ], MemoryBlockRewardService);
643
622
 
623
+ // src/blockViewerFromChainIteratorAndArchivist.ts
624
+ import { isDefined as isDefined2 } from "@xylabs/sdk-js";
625
+ import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder";
626
+ import { asSignedBlockBoundWitness, asSignedBlockBoundWitnessWithStorageMeta } from "@xyo-network/xl1-protocol";
627
+ function blockViewerFromChainIteratorAndArchivist(chainIterator, chainArchivist) {
628
+ const result = {
629
+ blockByHash: /* @__PURE__ */ __name(async function(hash) {
630
+ const [payload] = await chainArchivist.get([
631
+ hash
632
+ ]);
633
+ const block = asSignedBlockBoundWitnessWithStorageMeta(payload);
634
+ if (isDefined2(block)) {
635
+ const payloads = await chainArchivist.get(block.payload_hashes);
636
+ return [
637
+ block,
638
+ payloads
639
+ ];
640
+ }
641
+ return null;
642
+ }, "blockByHash"),
643
+ blockByNumber: /* @__PURE__ */ __name(async function(blockNumber) {
644
+ const payload = asSignedBlockBoundWitness(await chainIterator.get(blockNumber));
645
+ const block = payload ? await PayloadBuilder3.addHashMeta(payload) : void 0;
646
+ if (isDefined2(block)) {
647
+ const payloads = await chainArchivist.get(block.payload_hashes);
648
+ return [
649
+ block,
650
+ payloads
651
+ ];
652
+ }
653
+ return null;
654
+ }, "blockByNumber"),
655
+ blocksByHash: /* @__PURE__ */ __name(async function(hash, limit = 10) {
656
+ const results = [];
657
+ for (let i = 0; i < limit; i++) {
658
+ const block = await this.blockByHash(hash);
659
+ if (block) {
660
+ results.push(block);
661
+ } else {
662
+ break;
663
+ }
664
+ }
665
+ return results;
666
+ }, "blocksByHash"),
667
+ currentBlock: /* @__PURE__ */ __name(async function() {
668
+ const head = await chainIterator.head();
669
+ return this.blockByHash(head._hash);
670
+ }, "currentBlock"),
671
+ currentBlockHash: /* @__PURE__ */ __name(async function() {
672
+ const head = await chainIterator.head();
673
+ return head._hash;
674
+ }, "currentBlockHash"),
675
+ currentBlockNumber: /* @__PURE__ */ __name(async function() {
676
+ const head = await chainIterator.head();
677
+ return head.block;
678
+ }, "currentBlockNumber")
679
+ };
680
+ return result;
681
+ }
682
+ __name(blockViewerFromChainIteratorAndArchivist, "blockViewerFromChainIteratorAndArchivist");
683
+
644
684
  // src/ChainBlockNumberIteration/ChainBlockNumberIterationService.ts
645
- import { assertEx as assertEx6, isDefined as isDefined3, isNull, isUndefined } from "@xylabs/sdk-js";
685
+ import { assertEx as assertEx7, isDefined as isDefined3, isNull, isUndefined } from "@xylabs/sdk-js";
646
686
  import { PayloadBuilder as PayloadBuilder4 } from "@xyo-network/payload-builder";
647
- import { asBlockBoundWitness as asBlockBoundWitness2, asBlockBoundWitnessWithStorageMeta as asBlockBoundWitnessWithStorageMeta2, isBlockBoundWitnessWithHashMeta } from "@xyo-network/xl1-protocol";
687
+ import { asBlockBoundWitness as asBlockBoundWitness2, asBlockBoundWitnessWithStorageMeta, isBlockBoundWitnessWithHashMeta } from "@xyo-network/xl1-protocol";
648
688
  import { LRUCache } from "lru-cache";
649
689
  var ChainBlockNumberIterationService = class extends BaseService {
650
690
  static {
@@ -655,21 +695,21 @@ var ChainBlockNumberIterationService = class extends BaseService {
655
695
  });
656
696
  _currentHead;
657
697
  get chainId() {
658
- return assertEx6(this._currentHead?.chain ?? this.params?.head?.chain, () => "Current head is not set");
698
+ return assertEx7(this._currentHead?.chain ?? this.params?.head?.chain, () => "Current head is not set");
659
699
  }
660
700
  get chainMap() {
661
- return assertEx6(this.params.chainMap);
701
+ return assertEx7(this.params.chainMap);
662
702
  }
663
703
  async get(block) {
664
704
  const head = await this.head();
665
- assertEx6(head.block >= block, () => `Block requested is newer than the current head [${block}]`);
705
+ assertEx7(head.block >= block, () => `Block requested is newer than the current head [${block}]`);
666
706
  const cached = this._blocksByBlockNumber.get(block);
667
707
  if (cached) return cached;
668
708
  const startingBlock = head;
669
709
  const currentBlockHash = await PayloadBuilder4.hash(startingBlock);
670
710
  let currentBlock = await this.chainMap.get(currentBlockHash);
671
711
  while (isDefined3(currentBlock)) {
672
- assertEx6(asBlockBoundWitness2(currentBlock), () => `Expected hash to be a block bound witness [${currentBlock?._hash}]`);
712
+ assertEx7(asBlockBoundWitness2(currentBlock), () => `Expected hash to be a block bound witness [${currentBlock?._hash}]`);
673
713
  if (isBlockBoundWitnessWithHashMeta(currentBlock)) {
674
714
  this._blocksByBlockNumber.set(currentBlock.block, currentBlock);
675
715
  if (currentBlock.block === block) {
@@ -707,10 +747,10 @@ var ChainBlockNumberIterationService = class extends BaseService {
707
747
  const { previous } = currentBlock;
708
748
  if (isNull(previous)) break;
709
749
  const nextBlock = await this.chainMap.get(previous);
710
- currentBlock = asBlockBoundWitnessWithStorageMeta2(nextBlock);
750
+ currentBlock = asBlockBoundWitnessWithStorageMeta(nextBlock);
711
751
  } else {
712
752
  const hash = PayloadBuilder4.hash(currentBlock);
713
- assertEx6(asBlockBoundWitnessWithStorageMeta2(currentBlock), () => `Expected hash to be a block bound witness [${hash}]`);
753
+ assertEx7(asBlockBoundWitnessWithStorageMeta(currentBlock), () => `Expected hash to be a block bound witness [${hash}]`);
714
754
  }
715
755
  }
716
756
  return results;
@@ -727,14 +767,14 @@ var ChainBlockNumberIterationService = class extends BaseService {
727
767
  async getBoundWitnessAsBlockBoundWitnessWithStorageMeta(head) {
728
768
  const hash = await PayloadBuilder4.hash(head);
729
769
  const stored = await this.chainMap.get(hash);
730
- const newHead = asBlockBoundWitnessWithStorageMeta2(stored);
770
+ const newHead = asBlockBoundWitnessWithStorageMeta(stored);
731
771
  if (isUndefined(newHead)) throw new Error(`Head block not found in archivist [${hash}]`);
732
772
  return newHead;
733
773
  }
734
774
  };
735
775
 
736
776
  // src/ChainService/Evm/Evm.ts
737
- import { assertEx as assertEx7, toAddress, toEthAddress as toEthAddress2 } from "@xylabs/sdk-js";
777
+ import { assertEx as assertEx8, toAddress, toEthAddress as toEthAddress2 } from "@xylabs/sdk-js";
738
778
  import { StakedXyoChain__factory as StakedXyoChainFactory } from "@xyo-network/typechain";
739
779
  import { getAddress } from "ethers/address";
740
780
  var EvmChainService = class extends BaseService {
@@ -742,16 +782,16 @@ var EvmChainService = class extends BaseService {
742
782
  __name(this, "EvmChainService");
743
783
  }
744
784
  get chainId() {
745
- return assertEx7(this.params.id);
785
+ return assertEx8(this.params.id);
746
786
  }
747
787
  get contract() {
748
788
  if (this.params.contract === void 0) {
749
789
  this.params.contract = StakedXyoChainFactory.connect(toEthAddress2(this.chainId), this.params.runner);
750
790
  }
751
- return assertEx7(this.params.contract);
791
+ return assertEx8(this.params.contract);
752
792
  }
753
793
  get runner() {
754
- return assertEx7(this.params.runner);
794
+ return assertEx8(this.params.runner);
755
795
  }
756
796
  async active() {
757
797
  return await this.contract.active();
@@ -810,7 +850,7 @@ var EvmChainService = class extends BaseService {
810
850
  };
811
851
 
812
852
  // src/ChainService/Memory/Memory.ts
813
- import { assertEx as assertEx8, toAddress as toAddress2, ZERO_ADDRESS } from "@xylabs/sdk-js";
853
+ import { assertEx as assertEx9, toAddress as toAddress2, ZERO_ADDRESS } from "@xylabs/sdk-js";
814
854
  var MemoryChainService = class extends BaseService {
815
855
  static {
816
856
  __name(this, "MemoryChainService");
@@ -818,7 +858,7 @@ var MemoryChainService = class extends BaseService {
818
858
  _chainId;
819
859
  _simulatedStake = 1n;
820
860
  get chainId() {
821
- return assertEx8(this._chainId, () => "Chain ID not set");
861
+ return assertEx9(this._chainId, () => "Chain ID not set");
822
862
  }
823
863
  async active() {
824
864
  return await Promise.resolve(this._simulatedStake);
@@ -879,7 +919,7 @@ var MemoryChainService = class extends BaseService {
879
919
  };
880
920
 
881
921
  // src/ChainValidator/XyoValidator.ts
882
- import { assertEx as assertEx9, creatable as creatable8 } from "@xylabs/sdk-js";
922
+ import { assertEx as assertEx10, creatable as creatable8 } from "@xylabs/sdk-js";
883
923
  function _ts_decorate8(decorators, target, key, desc) {
884
924
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
885
925
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -895,22 +935,22 @@ var XyoValidator = class extends BaseService {
895
935
  return this.account.address;
896
936
  }
897
937
  get account() {
898
- return assertEx9(this.params.account, () => "account is required");
938
+ return assertEx10(this.params.account, () => "account is required");
899
939
  }
900
940
  get chainArchivist() {
901
- return assertEx9(this.params.chainArchivist, () => "chainArchivist is required");
941
+ return assertEx10(this.params.chainArchivist, () => "chainArchivist is required");
902
942
  }
903
943
  get chainInfo() {
904
- return assertEx9(this.params.chainId, () => "chainInfo is required");
944
+ return assertEx10(this.params.chainId, () => "chainInfo is required");
905
945
  }
906
946
  get electionService() {
907
- return assertEx9(this.params.electionService, () => "electionService is required");
947
+ return assertEx10(this.params.electionService, () => "electionService is required");
908
948
  }
909
949
  get pendingBundledTransactionsArchivist() {
910
- return assertEx9(this.params.pendingBundledTransactionsArchivist, () => "pendingBundledTransactions is required");
950
+ return assertEx10(this.params.pendingBundledTransactionsArchivist, () => "pendingBundledTransactions is required");
911
951
  }
912
952
  get rewardService() {
913
- return assertEx9(this.params.rewardService, () => "rewardService is required");
953
+ return assertEx10(this.params.rewardService, () => "rewardService is required");
914
954
  }
915
955
  validatePendingBlock(_block) {
916
956
  return [];
@@ -929,7 +969,7 @@ XyoValidator = _ts_decorate8([
929
969
  ], XyoValidator);
930
970
 
931
971
  // src/Election/BaseElectionService.ts
932
- import { assertEx as assertEx10, creatable as creatable9 } from "@xylabs/sdk-js";
972
+ import { assertEx as assertEx11, creatable as creatable9 } from "@xylabs/sdk-js";
933
973
  import { hexToLast4BytesInt, shuffleWithSeed } from "@xyo-network/chain-utils";
934
974
  function _ts_decorate9(decorators, target, key, desc) {
935
975
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -943,13 +983,13 @@ var BaseElectionService = class extends BaseService {
943
983
  __name(this, "BaseElectionService");
944
984
  }
945
985
  get chainIterator() {
946
- return assertEx10(this.params.chainIterator, () => "No chain iterator");
986
+ return assertEx11(this.params.chainIterator, () => "No chain iterator");
947
987
  }
948
988
  get chainStakeViewer() {
949
- return assertEx10(this.params.chainStakeViewer, () => "No chain stake viewer");
989
+ return assertEx11(this.params.chainStakeViewer, () => "No chain stake viewer");
950
990
  }
951
991
  get stakeIntentService() {
952
- return assertEx10(this.params.stakeIntentService, () => "No staked intent service");
992
+ return assertEx11(this.params.stakeIntentService, () => "No staked intent service");
953
993
  }
954
994
  async getCreatorCommitteeForNextBlock(current) {
955
995
  return await this.spanAsync("getCreatorCommitteeForNextBlock", async () => {
@@ -1044,23 +1084,23 @@ BaseNetworkStakeStepRewardService = _ts_decorate10([
1044
1084
 
1045
1085
  // src/PendingTransactions/BasePendingTransactions.ts
1046
1086
  import { ValueType } from "@opentelemetry/api";
1047
- import { assertEx as assertEx11, creatable as creatable11, exists as exists2, filterAs, filterAsync, forget, isDefined as isDefined4, isUndefined as isUndefined2 } from "@xylabs/sdk-js";
1087
+ import { assertEx as assertEx12, creatable as creatable11, exists as exists2, filterAs, filterAsync, forget, isDefined as isDefined4, isUndefined as isUndefined2 } from "@xylabs/sdk-js";
1048
1088
  import { MemoryArchivist } from "@xyo-network/archivist-memory";
1049
1089
  import { findMostRecentBlock as findMostRecentBlock2 } from "@xyo-network/chain-protocol";
1050
- import { asBlockBoundWitnessWithHashMeta, isTransactionBoundWitnessWithStorageMeta } from "@xyo-network/xl1-protocol";
1090
+ import { asBlockBoundWitnessWithHashMeta, asXL1BlockNumber, isTransactionBoundWitnessWithStorageMeta } from "@xyo-network/xl1-protocol";
1051
1091
  import { TransactionJsonSchemaValidator, validateTransaction } from "@xyo-network/xl1-validation";
1052
1092
  import { Mutex as Mutex2 } from "async-mutex";
1053
1093
 
1054
1094
  // src/PendingTransactions/bundledPayloadToHydratedTransaction.ts
1055
1095
  import { PayloadBuilder as PayloadBuilder5 } from "@xyo-network/payload-builder";
1056
- import { asTransactionBoundWitnessWithStorageMeta } from "@xyo-network/xl1-protocol";
1096
+ import { asSignedTransactionBoundWitnessWithHashMeta } from "@xyo-network/xl1-protocol";
1057
1097
  var bundledPayloadToHydratedTransaction = /* @__PURE__ */ __name(async (payload) => {
1058
- const withStorageMeta = await PayloadBuilder5.addStorageMeta(payload.payloads);
1059
- const tx = asTransactionBoundWitnessWithStorageMeta(withStorageMeta.find((p) => p._hash === payload.root));
1098
+ const withHashMeta = await PayloadBuilder5.addHashMeta(payload.payloads);
1099
+ const tx = asSignedTransactionBoundWitnessWithHashMeta(withHashMeta.find((p) => p._hash === payload.root));
1060
1100
  if (tx) {
1061
1101
  return [
1062
1102
  tx,
1063
- withStorageMeta.filter((p) => p._hash !== payload.root)
1103
+ withHashMeta.filter((p) => p._hash !== payload.root)
1064
1104
  ];
1065
1105
  }
1066
1106
  }, "bundledPayloadToHydratedTransaction");
@@ -1138,23 +1178,23 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1138
1178
  return this.params.additionalPendingTransactionValidators ?? [];
1139
1179
  }
1140
1180
  get chainArchivist() {
1141
- return assertEx11(this.params.chainArchivist, () => "No completed blocks with data archivist");
1181
+ return assertEx12(this.params.chainArchivist, () => "No completed blocks with data archivist");
1142
1182
  }
1143
1183
  get chainId() {
1144
- return assertEx11(this.params.chainId, () => "No chain id");
1184
+ return assertEx12(this.params.chainId, () => "No chain id");
1145
1185
  }
1146
1186
  get pendingBundledTransactionsArchivist() {
1147
- return assertEx11(this.params.pendingBundledTransactionsArchivist, () => "No pending bundled transactions archivist");
1187
+ return assertEx12(this.params.pendingBundledTransactionsArchivist, () => "No pending bundled transactions archivist");
1148
1188
  }
1149
1189
  get pendingBundledTransactionsLocalArchivist() {
1150
- return assertEx11(this._curatedPendingBundledTransactionsArchivist, () => "No pending bundled transactions curated archivist");
1190
+ return assertEx12(this._curatedPendingBundledTransactionsArchivist, () => "No pending bundled transactions curated archivist");
1151
1191
  }
1152
1192
  get pendingTransactionsCount() {
1153
1193
  forget(this.countPendingTransactions());
1154
1194
  return this._pendingTransactionsCount;
1155
1195
  }
1156
1196
  get rejectedTransactionsArchivist() {
1157
- return assertEx11(this.params.rejectedTransactionsArchivist, () => "No rejected transactions archivist");
1197
+ return assertEx12(this.params.rejectedTransactionsArchivist, () => "No rejected transactions archivist");
1158
1198
  }
1159
1199
  async createHandler() {
1160
1200
  await super.createHandler();
@@ -1186,7 +1226,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1186
1226
  return await this._updateCuratedPendingTransactionsArchivistMutex.runExclusive(async () => {
1187
1227
  let [lastHead] = filterAs(await this.chainArchivist.get([
1188
1228
  head
1189
- ]), asBlockBoundWitnessWithHashMeta);
1229
+ ]), (x) => asBlockBoundWitnessWithHashMeta(x));
1190
1230
  if (isUndefined2(lastHead)) return [];
1191
1231
  await this.pruneCuratedPendingTransactionsArchivist(lastHead._hash);
1192
1232
  const foundPendingTransactions = [];
@@ -1201,7 +1241,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1201
1241
  cursor = pendingBundledTransactions.at(-1)?._sequence;
1202
1242
  const undeletedTransactionBundles = pendingBundledTransactions.filter((tx) => !this._removablePendingTransactionHashes.has(tx.root));
1203
1243
  const transactions = (await Promise.all(undeletedTransactionBundles.map((p) => bundledPayloadToHydratedTransaction(p)))).filter(exists2);
1204
- const activeTransactions = transactions.filter(isTransactionActive(lastHead.block + 1));
1244
+ const activeTransactions = transactions.filter(isTransactionActive(asXL1BlockNumber(lastHead.block + 1, true)));
1205
1245
  const txValidationResults = await Promise.all(activeTransactions.map(async (tx) => [
1206
1246
  tx,
1207
1247
  await validateTransaction(tx, {
@@ -1292,7 +1332,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1292
1332
  let cursor;
1293
1333
  let [lastHead] = filterAs(await this.chainArchivist.get([
1294
1334
  head
1295
- ]), asBlockBoundWitnessWithHashMeta);
1335
+ ]), (x) => asBlockBoundWitnessWithHashMeta(x));
1296
1336
  while (isDefined4(lastHead)) {
1297
1337
  const pendingBundledTransactions = await this.pendingBundledTransactionsLocalArchivist.next({
1298
1338
  limit: 100,
@@ -1307,7 +1347,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1307
1347
  foundPendingTransactionsToDeleteHashes.push(...deletedTransactionBundles.map((tx) => tx._hash).filter(exists2));
1308
1348
  const undeletedTransactionBundles = pendingBundledTransactions.filter((tx) => !this._removablePendingTransactionHashes.has(tx.root));
1309
1349
  const transactions = (await Promise.all(undeletedTransactionBundles.map((p) => bundledPayloadToHydratedTransaction(p)))).filter(exists2);
1310
- const expiredTransactions = transactions.filter(isTransactionExpired(lastHead.block + 1));
1350
+ const expiredTransactions = transactions.filter(isTransactionExpired(asXL1BlockNumber(lastHead.block + 1, true)));
1311
1351
  const expiredBundleHashes = expiredTransactions.map((expiredHydratedTx) => (
1312
1352
  // Find the corresponding payload bundle hash for the expired transaction
1313
1353
  pendingBundledTransactions.find((bundledTx) => bundledTx.root === expiredHydratedTx[0]._hash)?._hash
@@ -1371,13 +1411,13 @@ BaseSchemasService = _ts_decorate12([
1371
1411
 
1372
1412
  // src/StakeIntent/lib/getBlockSignedStakeDeclarations.ts
1373
1413
  import { exists as exists3, filterAs as filterAs2 } from "@xylabs/sdk-js";
1374
- import { asOptionalBoundWitness } from "@xyo-network/boundwitness-model";
1414
+ import { isBoundWitness } from "@xyo-network/boundwitness-model";
1375
1415
  import { payloadSchemasContains } from "@xyo-network/boundwitness-validator";
1376
1416
  import { BoundWitnessWrapper } from "@xyo-network/boundwitness-wrapper";
1377
1417
  import { asChainStakeIntent, ChainStakeIntentSchema } from "@xyo-network/xl1-protocol";
1378
1418
  var getBlockSignedStakeDeclarations = /* @__PURE__ */ __name(async (block, archivist, intent) => {
1379
1419
  const blockData = await archivist.get(block.payload_hashes);
1380
- const bwsFromBlock = filterAs2(blockData, asOptionalBoundWitness);
1420
+ const bwsFromBlock = blockData.filter((x) => isBoundWitness(x));
1381
1421
  const bwsFromBlockWithDeclarations = bwsFromBlock.filter((bw) => payloadSchemasContains(bw, ChainStakeIntentSchema));
1382
1422
  const validBlockBwsWithDeclarations = await filterToValidSignedBoundWitnesses(bwsFromBlockWithDeclarations);
1383
1423
  return (await Promise.all(validBlockBwsWithDeclarations.map(async (bw) => {
@@ -1396,11 +1436,11 @@ var mapBoundWitnessToStakeIntentHashes = /* @__PURE__ */ __name((bw) => {
1396
1436
  }, "mapBoundWitnessToStakeIntentHashes");
1397
1437
 
1398
1438
  // src/StakeIntent/XyoStakeIntentService.ts
1399
- import { asAddress, assertEx as assertEx12, creatable as creatable13, filterAs as filterAs3, isUndefined as isUndefined3 } from "@xylabs/sdk-js";
1439
+ import { asAddress, assertEx as assertEx13, creatable as creatable13, filterAs as filterAs3, isUndefined as isUndefined3 } from "@xylabs/sdk-js";
1400
1440
  import { analyzeChain, ChainStakeIntentAnalyzer, isChainSummaryStakeIntent } from "@xyo-network/chain-analyze";
1401
1441
  import { DEFAULT_FIND_FIRST_MATCHING_NEXT_OPTIONS, findFirstMatching, IntervalMap } from "@xyo-network/chain-utils";
1402
1442
  import { PayloadBuilder as PayloadBuilder7 } from "@xyo-network/payload-builder";
1403
- import { asBlockBoundWitness as asBlockBoundWitness3, asBlockBoundWitnessWithStorageMeta as asBlockBoundWitnessWithStorageMeta3, asChainStakeIntent as asChainStakeIntent2 } from "@xyo-network/xl1-protocol";
1443
+ import { asBlockBoundWitness as asBlockBoundWitness3, asBlockBoundWitnessWithStorageMeta as asBlockBoundWitnessWithStorageMeta2, asChainStakeIntent as asChainStakeIntent2 } from "@xyo-network/xl1-protocol";
1404
1444
  import { asChainIndexingServiceStateWithStorageMeta, ChainIndexingServiceStateSchema, isChainIndexingServiceState, readPayloadMapFromStore as readPayloadMapFromStore2, timeBudget } from "@xyo-network/xl1-protocol-sdk";
1405
1445
  import { Mutex as Mutex3 } from "async-mutex";
1406
1446
  import { LRUCache as LRUCache2 } from "lru-cache";
@@ -1433,16 +1473,16 @@ var XyoStakeIntentService = class extends BaseService {
1433
1473
  });
1434
1474
  _updateMutex = new Mutex3();
1435
1475
  get chainArchivist() {
1436
- return assertEx12(this.params.chainArchivist, () => "chainArchivist not set");
1476
+ return assertEx13(this.params.chainArchivist, () => "chainArchivist not set");
1437
1477
  }
1438
1478
  get chainIterator() {
1439
- return assertEx12(this.params.chainIterator, () => "chainIterator not set");
1479
+ return assertEx13(this.params.chainIterator, () => "chainIterator not set");
1440
1480
  }
1441
1481
  get chainStakeViewer() {
1442
- return assertEx12(this.params.chainStakeViewer, () => "chainStakeViewer not set");
1482
+ return assertEx13(this.params.chainStakeViewer, () => "chainStakeViewer not set");
1443
1483
  }
1444
1484
  get stakeIntentStateArchivist() {
1445
- return assertEx12(this.params.stakeIntentStateArchivist, () => "stakeIntentStateArchivist not set");
1485
+ return assertEx13(this.params.stakeIntentStateArchivist, () => "stakeIntentStateArchivist not set");
1446
1486
  }
1447
1487
  async createHandler() {
1448
1488
  this.chainIterator.on("headUpdated", async () => {
@@ -1455,13 +1495,13 @@ var XyoStakeIntentService = class extends BaseService {
1455
1495
  }
1456
1496
  async getDeclaredCandidateRanges(address, intent) {
1457
1497
  await Promise.resolve();
1458
- assertEx12(intent === "producer", () => `Support not yet added for intent ${intent}`);
1498
+ assertEx13(intent === "producer", () => `Support not yet added for intent ${intent}`);
1459
1499
  const results = this._producers.get(address);
1460
1500
  return results ?? [];
1461
1501
  }
1462
1502
  async getDeclaredCandidatesForBlock(block, intent) {
1463
1503
  return await this.spanAsync("getDeclaredCandidatesForBlock", async () => {
1464
- assertEx12(intent === "producer", () => `Support not yet added for intent ${intent}`);
1504
+ assertEx13(intent === "producer", () => `Support not yet added for intent ${intent}`);
1465
1505
  const results = this._producers.findAllContaining(block);
1466
1506
  const candidates = [
1467
1507
  ...results
@@ -1527,7 +1567,7 @@ var XyoStakeIntentService = class extends BaseService {
1527
1567
  }
1528
1568
  async recoverState(current) {
1529
1569
  return await timeBudget("XyoStakeIntentService.recoverState", console, async () => {
1530
- const currentBlock = assertEx12(asBlockBoundWitness3((await this.chainArchivist.get([
1570
+ const currentBlock = assertEx13(asBlockBoundWitness3((await this.chainArchivist.get([
1531
1571
  current
1532
1572
  ]))?.[0]), () => `Block ${current} not found`);
1533
1573
  const currentBlockNum = currentBlock.block;
@@ -1544,7 +1584,7 @@ var XyoStakeIntentService = class extends BaseService {
1544
1584
  const indexed = (await this.chainArchivist.get([
1545
1585
  state.endBlockHash
1546
1586
  ]))?.[0];
1547
- const indexedBlock = asBlockBoundWitnessWithStorageMeta3(indexed);
1587
+ const indexedBlock = asBlockBoundWitnessWithStorageMeta2(indexed);
1548
1588
  if (indexedBlock) {
1549
1589
  const indexedBlockNum = indexedBlock.block;
1550
1590
  if (indexedBlockNum <= currentBlockNum) {
@@ -1671,9 +1711,11 @@ BaseTimeSyncService = _ts_decorate15([
1671
1711
  ], BaseTimeSyncService);
1672
1712
  export {
1673
1713
  BaseAccountBalanceService,
1714
+ BaseAccountBalanceServiceParamsZod,
1674
1715
  BaseAccountTransfersService,
1675
1716
  BaseAccountableService,
1676
1717
  BaseBlockProducerService,
1718
+ BaseBlockProducerServiceParamsZod,
1677
1719
  BaseBlockRewardService,
1678
1720
  BaseElectionService,
1679
1721
  BaseNetworkStakeStepRewardService,
@@ -1693,6 +1735,7 @@ export {
1693
1735
  XyoStakeIntentService,
1694
1736
  XyoValidator,
1695
1737
  accountBalancesServiceFromArchivist,
1738
+ blockViewerFromChainIteratorAndArchivist,
1696
1739
  creatableService,
1697
1740
  getBlockSignedStakeDeclarations
1698
1741
  };