@xyo-network/chain-services 1.14.4 → 1.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/neutral/AccountBalance/accountBalanceServiceFromArchivist.d.ts +0 -2
  2. package/dist/neutral/AccountBalance/accountBalanceServiceFromArchivist.d.ts.map +1 -1
  3. package/dist/neutral/AccountTransfers/BaseAccountTransfersService.d.ts +16 -0
  4. package/dist/neutral/AccountTransfers/BaseAccountTransfersService.d.ts.map +1 -0
  5. package/dist/neutral/AccountTransfers/accountTransfersServiceFromArchivist.d.ts +5 -0
  6. package/dist/neutral/AccountTransfers/accountTransfersServiceFromArchivist.d.ts.map +1 -0
  7. package/dist/neutral/AccountTransfers/index.d.ts +3 -0
  8. package/dist/neutral/AccountTransfers/index.d.ts.map +1 -0
  9. package/dist/neutral/BlockProducer/BaseBlockProducerService.d.ts +13 -4
  10. package/dist/neutral/BlockProducer/BaseBlockProducerService.d.ts.map +1 -1
  11. package/dist/neutral/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.d.ts +27 -0
  12. package/dist/neutral/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.d.ts.map +1 -0
  13. package/dist/neutral/NetworkStakeStepReward/index.d.ts +2 -0
  14. package/dist/neutral/NetworkStakeStepReward/index.d.ts.map +1 -0
  15. package/dist/neutral/Time/BaseTimeSyncService.d.ts +9 -2
  16. package/dist/neutral/Time/BaseTimeSyncService.d.ts.map +1 -1
  17. package/dist/neutral/index.d.ts +2 -1
  18. package/dist/neutral/index.d.ts.map +1 -1
  19. package/dist/neutral/index.mjs +296 -128
  20. package/dist/neutral/index.mjs.map +1 -1
  21. package/package.json +12 -12
  22. package/src/AccountBalance/BaseAccountBalanceService.ts +2 -2
  23. package/src/AccountBalance/accountBalanceServiceFromArchivist.ts +0 -3
  24. package/src/AccountTransfers/BaseAccountTransfersService.ts +46 -0
  25. package/src/AccountTransfers/accountTransfersServiceFromArchivist.ts +48 -0
  26. package/src/AccountTransfers/index.ts +2 -0
  27. package/src/BlockProducer/BaseBlockProducerService.ts +44 -24
  28. package/src/BlockProducer/spec/BaseBlockProducerService.spec.ts +3 -3
  29. package/src/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.ts +66 -0
  30. package/src/NetworkStakeStepReward/index.ts +1 -0
  31. package/src/Time/BaseTimeSyncService.ts +36 -2
  32. package/src/index.ts +2 -1
  33. package/dist/neutral/Bridge/BaseBridgeService.d.ts +0 -15
  34. package/dist/neutral/Bridge/BaseBridgeService.d.ts.map +0 -1
  35. package/dist/neutral/Bridge/index.d.ts +0 -2
  36. package/dist/neutral/Bridge/index.d.ts.map +0 -1
  37. package/src/Bridge/BaseBridgeService.ts +0 -35
  38. package/src/Bridge/index.ts +0 -1
@@ -11,7 +11,7 @@ import { LRUCache } from "lru-cache";
11
11
  import { creatable as creatable2 } from "@xylabs/creatable";
12
12
  import { spanRootAsync as spanRootAsync2 } from "@xylabs/telemetry";
13
13
  import { AttoXL1 } from "@xyo-network/xl1-protocol";
14
- import { balanceSummary } from "@xyo-network/xl1-protocol-sdk";
14
+ import { balancesSummary } from "@xyo-network/xl1-protocol-sdk";
15
15
 
16
16
  // src/BaseService.ts
17
17
  import { AbstractCreatable, creatable } from "@xylabs/creatable";
@@ -80,7 +80,7 @@ var BaseAccountBalanceService = class extends BaseService {
80
80
  }
81
81
  async balances(head, address) {
82
82
  return await spanRootAsync2("balances", async () => {
83
- const summary = await balanceSummary({
83
+ const summary = await balancesSummary({
84
84
  chainArchivist: this.params.chainArchivist,
85
85
  summaryRepository: this.params.summaryRepository,
86
86
  head
@@ -133,30 +133,116 @@ var accountBalanceServiceFromArchivist = /* @__PURE__ */ __name(async (archivist
133
133
  });
134
134
  return service;
135
135
  }, "accountBalanceServiceFromArchivist");
136
- var accountBalanceServiceFromArchivistV2 = accountBalanceServiceFromArchivist;
136
+
137
+ // src/AccountTransfers/accountTransfersServiceFromArchivist.ts
138
+ import { exists as exists2 } from "@xylabs/exists";
139
+ import { asHash as asHash2, isHash as isHash2 } from "@xylabs/hex";
140
+ import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
141
+ import { LRUCache as LRUCache2 } from "lru-cache";
142
+
143
+ // src/AccountTransfers/BaseAccountTransfersService.ts
144
+ import { creatable as creatable3 } from "@xylabs/creatable";
145
+ import { spanRootAsync as spanRootAsync3 } from "@xylabs/telemetry";
146
+ import { AttoXL1 as AttoXL12 } from "@xyo-network/xl1-protocol";
147
+ import { transfersSummary } from "@xyo-network/xl1-protocol-sdk";
148
+ function _ts_decorate3(decorators, target, key, desc) {
149
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
150
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
151
+ 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;
152
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
153
+ }
154
+ __name(_ts_decorate3, "_ts_decorate");
155
+ var BaseAccountTransfersService = class extends BaseService {
156
+ static {
157
+ __name(this, "BaseAccountTransfersService");
158
+ }
159
+ async transfer(head, address) {
160
+ return (await this.transfers(head, [
161
+ address
162
+ ]))[address] ?? AttoXL12(0n);
163
+ }
164
+ async transfers(head, addresses) {
165
+ return await spanRootAsync3("transfers", async () => {
166
+ const { chainArchivist, summaryRepository, account } = this.params;
167
+ const summary = await transfersSummary({
168
+ chainArchivist,
169
+ summaryRepository,
170
+ head,
171
+ account
172
+ });
173
+ const result = {};
174
+ for (const addr of addresses) {
175
+ const summaryBalance = summary[addr] ?? 0n;
176
+ result[addr] = AttoXL12(summaryBalance);
177
+ }
178
+ return result;
179
+ });
180
+ }
181
+ };
182
+ BaseAccountTransfersService = _ts_decorate3([
183
+ creatable3()
184
+ ], BaseAccountTransfersService);
185
+
186
+ // src/AccountTransfers/accountTransfersServiceFromArchivist.ts
187
+ var accountTransferServiceFromArchivist = /* @__PURE__ */ __name(async (archivist, account) => {
188
+ const summaryArchivistCache = new LRUCache2({
189
+ max: 1e5,
190
+ allowStale: true,
191
+ noDisposeOnSet: false,
192
+ updateAgeOnGet: true
193
+ });
194
+ const summaryRepository = {
195
+ get: /* @__PURE__ */ __name((hashes) => {
196
+ const results = hashes.map((hash) => {
197
+ return summaryArchivistCache.get(hash);
198
+ }).filter(exists2);
199
+ return results;
200
+ }, "get"),
201
+ insert: /* @__PURE__ */ __name(async (payloads) => {
202
+ const results = (await PayloadBuilder2.addStorageMeta(payloads)).map((payload) => {
203
+ const hash = asHash2(payload.hash);
204
+ if (isHash2(hash)) {
205
+ summaryArchivistCache.set(hash, payload);
206
+ return payload;
207
+ }
208
+ }).filter(exists2);
209
+ return results;
210
+ }, "insert"),
211
+ next: /* @__PURE__ */ __name(() => {
212
+ throw new Error("Not implemented");
213
+ }, "next")
214
+ };
215
+ const service = await BaseAccountTransfersService.create({
216
+ chainArchivist: archivist,
217
+ account,
218
+ summaryRepository
219
+ });
220
+ return service;
221
+ }, "accountTransferServiceFromArchivist");
137
222
 
138
223
  // src/BlockProducer/BaseBlockProducerService.ts
139
224
  import { assertEx as assertEx2 } from "@xylabs/assert";
140
- import { creatable as creatable3 } from "@xylabs/creatable";
141
- import { exists as exists2 } from "@xylabs/exists";
225
+ import { creatable as creatable4 } from "@xylabs/creatable";
226
+ import { exists as exists3 } from "@xylabs/exists";
142
227
  import { hexToBigInt, toHex } from "@xylabs/hex";
228
+ import { isDefined } from "@xylabs/typeof";
143
229
  import { FixedPercentageBlockRewardDiviner, FixedPercentageBlockRewardDivinerConfigSchema } from "@xyo-network/chain-modules";
144
230
  import { buildNextBlock, createDeclarationIntent } from "@xyo-network/chain-protocol";
145
- import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder";
146
- import { asBlockBoundWitness, AttoXL1 as AttoXL12, BlockNumberSchema, defaultRewardRatio, TimeSchema } from "@xyo-network/xl1-protocol";
231
+ import { PayloadBuilder as PayloadBuilder4 } from "@xyo-network/payload-builder";
232
+ import { asBlockBoundWitness, AttoXL1 as AttoXL13, BlockNumberSchema, defaultRewardRatio, TimeSchema, XYO_STEP_REWARD_ADDRESS } from "@xyo-network/xl1-protocol";
147
233
 
148
234
  // src/BlockProducer/generateTransactionFeeTransfers.ts
149
235
  import { assertEx } from "@xylabs/assert";
150
236
  import { hexFromBigInt } from "@xylabs/hex";
151
- import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
237
+ import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder";
152
238
  import { TransferSchema, XYO_ZERO_ADDRESS } from "@xyo-network/xl1-protocol";
153
239
  import { transactionRequiredGas } from "@xyo-network/xl1-protocol-sdk";
154
240
  import { HydratedTransactionWrapper } from "@xyo-network/xl1-wrappers";
155
241
  async function generateTransactionFeeTransfers(address, transactions) {
156
242
  const txs = await Promise.all(transactions.map(async (tx) => {
157
243
  return HydratedTransactionWrapper.parse([
158
- await PayloadBuilder2.addStorageMeta(tx[0]),
159
- await PayloadBuilder2.addStorageMeta(tx[1])
244
+ await PayloadBuilder3.addStorageMeta(tx[0]),
245
+ await PayloadBuilder3.addStorageMeta(tx[1])
160
246
  ]);
161
247
  }));
162
248
  const txBaseFeeCosts = {};
@@ -190,13 +276,13 @@ async function generateTransactionFeeTransfers(address, transactions) {
190
276
  __name(generateTransactionFeeTransfers, "generateTransactionFeeTransfers");
191
277
 
192
278
  // src/BlockProducer/BaseBlockProducerService.ts
193
- function _ts_decorate3(decorators, target, key, desc) {
279
+ function _ts_decorate4(decorators, target, key, desc) {
194
280
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
195
281
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
196
282
  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;
197
283
  return c > 3 && r && Object.defineProperty(target, key, r), r;
198
284
  }
199
- __name(_ts_decorate3, "_ts_decorate");
285
+ __name(_ts_decorate4, "_ts_decorate");
200
286
  var DEFAULT_BLOCK_SIZE = 10;
201
287
  var XYO_PRODUCER_REDECLARATION_DURATION = 1e4;
202
288
  var XYO_PRODUCER_REDECLARATION_WINDOW = 500;
@@ -270,7 +356,7 @@ var BaseBlockProducerService = class _BaseBlockProducerService extends BaseServi
270
356
  if (!leaders.includes(this.address)) return;
271
357
  return this.proposeNextValidBlock(head);
272
358
  }
273
- async getBlockRewardTransfer(block) {
359
+ async getBlockRewardTransfers(block) {
274
360
  if (!this._blockRewardDiviner) {
275
361
  this._blockRewardDiviner = await FixedPercentageBlockRewardDiviner.create({
276
362
  account: "random",
@@ -283,7 +369,7 @@ var BaseBlockProducerService = class _BaseBlockProducerService extends BaseServi
283
369
  });
284
370
  }
285
371
  const blockHex = assertEx2(toHex(block), () => "Failed to convert block to hex");
286
- const blockId = new PayloadBuilder3({
372
+ const blockId = new PayloadBuilder4({
287
373
  schema: BlockNumberSchema
288
374
  }).fields({
289
375
  block: blockHex
@@ -291,8 +377,7 @@ var BaseBlockProducerService = class _BaseBlockProducerService extends BaseServi
291
377
  const rewards = await this._blockRewardDiviner.divine([
292
378
  blockId
293
379
  ]);
294
- const [reward] = rewards;
295
- return reward;
380
+ return rewards;
296
381
  }
297
382
  /**
298
383
  * Handles the producer redeclaration logic
@@ -318,18 +403,21 @@ var BaseBlockProducerService = class _BaseBlockProducerService extends BaseServi
318
403
  const blockPayloads = [];
319
404
  const producerRedeclarationPayload = await this.getProducerRedeclaration(head);
320
405
  if (producerRedeclarationPayload) blockPayloads.push(producerRedeclarationPayload);
321
- if (blockPayloads.length === 0 && nextBlockTransactions.length === 0) return;
322
- const rewardTransferPayload = await this.getBlockRewardTransfer(nextBlock);
323
- if (rewardTransferPayload) blockPayloads.push(rewardTransferPayload);
406
+ if (blockPayloads.length === 0 && nextBlockTransactions.length === 0 && !this.heartbeatRequired(head)) return;
407
+ const rewardTransferPayloads = await this.getBlockRewardTransfers(nextBlock);
408
+ blockPayloads.push(...rewardTransferPayloads);
324
409
  const transactionTransfers = await generateTransactionFeeTransfers(this.address, nextBlockTransactions);
325
- const timePayload = await this.generateTimePayload(nextBlock);
410
+ const timePayload = await this.generateTimePayload(head);
326
411
  const [fundedNextBlockTransactions, fundedTransfers] = await this.filterByFunded(head, nextBlockTransactions, transactionTransfers, validateBalances);
327
412
  blockPayloads.push(...fundedTransfers, timePayload);
328
413
  this.logger?.info(`Building block ${head.block + 1}`);
329
414
  const startBuild = Date.now();
415
+ const stepRewardPoolBalance = (await this.balanceService.balances(head._hash, [
416
+ XYO_STEP_REWARD_ADDRESS
417
+ ]))[XYO_STEP_REWARD_ADDRESS];
330
418
  const block = await buildNextBlock(head, fundedNextBlockTransactions, blockPayloads, [
331
419
  this.account
332
- ]);
420
+ ], XYO_STEP_REWARD_ADDRESS, stepRewardPoolBalance);
333
421
  this.logger?.info(`Built block ${block[0].block} in ${Date.now() - startBuild}ms with ${block[1].length} payloads`);
334
422
  this.logger?.info(`Validating block ${block[0].block} with ${block[1].length} payloads`);
335
423
  const startValidate = Date.now();
@@ -357,7 +445,7 @@ var BaseBlockProducerService = class _BaseBlockProducerService extends BaseServi
357
445
  if (validateBalances) {
358
446
  const balance = (await this.balanceService.balances(head._hash, [
359
447
  transfer.from
360
- ]))[transfer.from] ?? AttoXL12(0n);
448
+ ]))[transfer.from] ?? AttoXL13(0n);
361
449
  if (balance >= totalTransferCost) {
362
450
  fundedTransfers.push(transfer);
363
451
  return tx;
@@ -366,37 +454,57 @@ var BaseBlockProducerService = class _BaseBlockProducerService extends BaseServi
366
454
  fundedTransfers.push(transfer);
367
455
  return tx;
368
456
  }
369
- }))).filter(exists2);
457
+ }))).filter(exists3);
370
458
  this.logger?.info(`Filtered ${txs.length} transactions to ${fundedTransactions.length} funded transactions in ${Date.now() - start}ms`);
371
459
  return [
372
460
  fundedTransactions,
373
461
  fundedTransfers
374
462
  ];
375
463
  }
376
- async generateTimePayload(nextBlock) {
464
+ async generateTimePayload(head) {
465
+ const [ethereum, ethHashOrNull] = await this.time.currentTimeAndHash("ethereum");
466
+ const ethereumHash = assertEx2(ethHashOrNull, () => "No ethereum hash available from time sync service");
377
467
  const timePayload = {
378
468
  schema: TimeSchema,
379
- xl1: nextBlock,
380
- // TODO: Change to entire tuple for time in ETH
381
- ethereum: (await this.time.currentTime("ethereum"))[1],
469
+ // note, this is for the previous block
470
+ xl1: head.block,
471
+ // note, this is for the previous block
472
+ xl1Hash: head._hash,
473
+ ethereum,
474
+ ethereumHash,
382
475
  epoch: Date.now()
383
476
  };
384
477
  return timePayload;
385
478
  }
479
+ /**
480
+ * Check if a heartbeat block is required based on network activity.
481
+ * @param head The current head block
482
+ * @returns True if a heartbeat is required, false otherwise
483
+ */
484
+ heartbeatRequired(head) {
485
+ const epoch = head.$epoch;
486
+ if (isDefined(epoch)) {
487
+ const { heartbeatInterval } = this.params.config.producer;
488
+ if (Date.now() - epoch > heartbeatInterval) {
489
+ return true;
490
+ }
491
+ }
492
+ return false;
493
+ }
386
494
  };
387
- BaseBlockProducerService = _ts_decorate3([
388
- creatable3()
495
+ BaseBlockProducerService = _ts_decorate4([
496
+ creatable4()
389
497
  ], BaseBlockProducerService);
390
498
 
391
499
  // src/BlockReward/BaseBlockRewardService.ts
392
- import { creatable as creatable4 } from "@xylabs/creatable";
393
- function _ts_decorate4(decorators, target, key, desc) {
500
+ import { creatable as creatable5 } from "@xylabs/creatable";
501
+ function _ts_decorate5(decorators, target, key, desc) {
394
502
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
395
503
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
396
504
  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;
397
505
  return c > 3 && r && Object.defineProperty(target, key, r), r;
398
506
  }
399
- __name(_ts_decorate4, "_ts_decorate");
507
+ __name(_ts_decorate5, "_ts_decorate");
400
508
  var BaseBlockRewardService = class extends BaseService {
401
509
  static {
402
510
  __name(this, "BaseBlockRewardService");
@@ -405,22 +513,22 @@ var BaseBlockRewardService = class extends BaseService {
405
513
  throw new Error("getRewardForBlock method must be implemented in derived classes");
406
514
  }
407
515
  };
408
- BaseBlockRewardService = _ts_decorate4([
409
- creatable4()
516
+ BaseBlockRewardService = _ts_decorate5([
517
+ creatable5()
410
518
  ], BaseBlockRewardService);
411
519
 
412
520
  // src/BlockReward/EvmBlockRewardService.ts
413
521
  import { assertEx as assertEx3 } from "@xylabs/assert";
414
- import { creatable as creatable5 } from "@xylabs/creatable";
522
+ import { creatable as creatable6 } from "@xylabs/creatable";
415
523
  import { toEthAddress } from "@xylabs/hex";
416
524
  import { XyoChainRewards__factory as XyoChainRewardsFactory } from "@xyo-network/typechain";
417
- function _ts_decorate5(decorators, target, key, desc) {
525
+ function _ts_decorate6(decorators, target, key, desc) {
418
526
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
419
527
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
420
528
  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;
421
529
  return c > 3 && r && Object.defineProperty(target, key, r), r;
422
530
  }
423
- __name(_ts_decorate5, "_ts_decorate");
531
+ __name(_ts_decorate6, "_ts_decorate");
424
532
  var EvmBlockRewardService = class extends BaseBlockRewardService {
425
533
  static {
426
534
  __name(this, "EvmBlockRewardService");
@@ -449,22 +557,22 @@ var EvmBlockRewardService = class extends BaseBlockRewardService {
449
557
  return await contract.calcBlockReward(blockNumber);
450
558
  }
451
559
  };
452
- EvmBlockRewardService = _ts_decorate5([
453
- creatable5()
560
+ EvmBlockRewardService = _ts_decorate6([
561
+ creatable6()
454
562
  ], EvmBlockRewardService);
455
563
 
456
564
  // src/BlockReward/MemoryBlockRewardService.ts
457
565
  import { assertEx as assertEx4 } from "@xylabs/assert";
458
- import { creatable as creatable6 } from "@xylabs/creatable";
566
+ import { creatable as creatable7 } from "@xylabs/creatable";
459
567
  import { toFixedPoint } from "@xylabs/decimal-precision";
460
568
  import { rewardFromBlockNumber } from "@xyo-network/chain-protocol";
461
- function _ts_decorate6(decorators, target, key, desc) {
569
+ function _ts_decorate7(decorators, target, key, desc) {
462
570
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
463
571
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
464
572
  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;
465
573
  return c > 3 && r && Object.defineProperty(target, key, r), r;
466
574
  }
467
- __name(_ts_decorate6, "_ts_decorate");
575
+ __name(_ts_decorate7, "_ts_decorate");
468
576
  var MemoryBlockRewardService = class extends BaseBlockRewardService {
469
577
  static {
470
578
  __name(this, "MemoryBlockRewardService");
@@ -503,51 +611,21 @@ var MemoryBlockRewardService = class extends BaseBlockRewardService {
503
611
  return this.rewardFromBlockNumber(blockNumber, this.initialReward, this.stepSize, this.stepFactorNumerator, this.stepFactorDenominator, this.minRewardPerBlock, this.creatorReward);
504
612
  }
505
613
  };
506
- MemoryBlockRewardService = _ts_decorate6([
507
- creatable6()
508
- ], MemoryBlockRewardService);
509
-
510
- // src/Bridge/BaseBridgeService.ts
511
- import { creatable as creatable7 } from "@xylabs/creatable";
512
- function _ts_decorate7(decorators, target, key, desc) {
513
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
514
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
515
- 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;
516
- return c > 3 && r && Object.defineProperty(target, key, r), r;
517
- }
518
- __name(_ts_decorate7, "_ts_decorate");
519
- var BaseBridgeService = class extends BaseService {
520
- static {
521
- __name(this, "BaseBridgeService");
522
- }
523
- completedBridgeBack() {
524
- throw new Error("Method not implemented.");
525
- }
526
- completedBridgeRequests() {
527
- throw new Error("Method not implemented.");
528
- }
529
- pendingBridgeBack() {
530
- throw new Error("Method not implemented.");
531
- }
532
- pendingBridgeRequests() {
533
- throw new Error("Method not implemented.");
534
- }
535
- };
536
- BaseBridgeService = _ts_decorate7([
614
+ MemoryBlockRewardService = _ts_decorate7([
537
615
  creatable7()
538
- ], BaseBridgeService);
616
+ ], MemoryBlockRewardService);
539
617
 
540
618
  // src/ChainBlockNumberIteration/ChainBlockNumberIterationService.ts
541
619
  import { assertEx as assertEx5 } from "@xylabs/assert";
542
- import { isDefined, isNull } from "@xylabs/typeof";
543
- import { PayloadBuilder as PayloadBuilder4 } from "@xyo-network/payload-builder";
620
+ import { isDefined as isDefined2, isNull } from "@xylabs/typeof";
621
+ import { PayloadBuilder as PayloadBuilder5 } from "@xyo-network/payload-builder";
544
622
  import { asBlockBoundWitness as asBlockBoundWitness2, isBlockBoundWitness } from "@xyo-network/xl1-protocol";
545
- import { LRUCache as LRUCache2 } from "lru-cache";
623
+ import { LRUCache as LRUCache3 } from "lru-cache";
546
624
  var ChainBlockNumberIterationService = class extends BaseService {
547
625
  static {
548
626
  __name(this, "ChainBlockNumberIterationService");
549
627
  }
550
- _blocksByBlockNumber = new LRUCache2({
628
+ _blocksByBlockNumber = new LRUCache3({
551
629
  max: 1e4
552
630
  });
553
631
  get chainArchivist() {
@@ -562,11 +640,11 @@ var ChainBlockNumberIterationService = class extends BaseService {
562
640
  const cached = this._blocksByBlockNumber.get(block);
563
641
  if (cached) return cached;
564
642
  const startingBlock = head;
565
- const currentBlockHash = await PayloadBuilder4.hash(startingBlock);
643
+ const currentBlockHash = await PayloadBuilder5.hash(startingBlock);
566
644
  let currentBlock = (await this.chainArchivist.get([
567
645
  currentBlockHash
568
646
  ])).at(0);
569
- while (isDefined(currentBlock)) {
647
+ while (isDefined2(currentBlock)) {
570
648
  assertEx5(asBlockBoundWitness2(currentBlock), () => `Expected hash to be a block bound witness [${currentBlock?._hash}]`);
571
649
  if (isBlockBoundWitness(currentBlock)) {
572
650
  this._blocksByBlockNumber.set(currentBlock.block, currentBlock);
@@ -594,7 +672,7 @@ var ChainBlockNumberIterationService = class extends BaseService {
594
672
  // and then communicate via method name and documentation
595
673
  async previous(block = void 0, count = 1) {
596
674
  const results = [];
597
- let currentBlock = isDefined(block) ? await this.get(block) : await this.head();
675
+ let currentBlock = isDefined2(block) ? await this.get(block) : await this.head();
598
676
  while (currentBlock && results.length < count) {
599
677
  if (isBlockBoundWitness(currentBlock)) {
600
678
  results.push(currentBlock);
@@ -605,7 +683,7 @@ var ChainBlockNumberIterationService = class extends BaseService {
605
683
  ]);
606
684
  currentBlock = asBlockBoundWitness2(nextBlock[0]);
607
685
  } else {
608
- const hash = PayloadBuilder4.hash(currentBlock);
686
+ const hash = PayloadBuilder5.hash(currentBlock);
609
687
  assertEx5(asBlockBoundWitness2(currentBlock), () => `Expected hash to be a block bound witness [${hash}]`);
610
688
  }
611
689
  }
@@ -818,7 +896,7 @@ XyoValidator = _ts_decorate8([
818
896
  import { assertEx as assertEx8 } from "@xylabs/assert";
819
897
  import { creatable as creatable9 } from "@xylabs/creatable";
820
898
  import { hexToLast4BytesInt, shuffleWithSeed } from "@xyo-network/chain-utils";
821
- import { PayloadBuilder as PayloadBuilder5 } from "@xyo-network/payload-builder";
899
+ import { PayloadBuilder as PayloadBuilder6 } from "@xyo-network/payload-builder";
822
900
  function _ts_decorate9(decorators, target, key, desc) {
823
901
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
824
902
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -843,7 +921,7 @@ var BaseElectionService = class extends BaseService {
843
921
  return await this.spanAsync("getCreatorCommitteeForNextBlock", async () => {
844
922
  const nextBlock = current.block + 1;
845
923
  const candidates = await this.stakeIntentService.getDeclaredCandidatesForBlock(nextBlock, "producer");
846
- const previousBlockHash = await PayloadBuilder5.hash(current);
924
+ const previousBlockHash = await PayloadBuilder6.hash(current);
847
925
  return this.generateCreatorCommittee(candidates, previousBlockHash);
848
926
  });
849
927
  }
@@ -858,14 +936,68 @@ BaseElectionService = _ts_decorate9([
858
936
  creatable9()
859
937
  ], BaseElectionService);
860
938
 
939
+ // src/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.ts
940
+ import { creatable as creatable10 } from "@xylabs/creatable";
941
+ function _ts_decorate10(decorators, target, key, desc) {
942
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
943
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
944
+ 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;
945
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
946
+ }
947
+ __name(_ts_decorate10, "_ts_decorate");
948
+ var BaseNetworkStakeStepRewardService = class extends BaseService {
949
+ static {
950
+ __name(this, "BaseNetworkStakeStepRewardService");
951
+ }
952
+ claimedRewards(address) {
953
+ throw new Error("Method not implemented.");
954
+ }
955
+ networkStakeStepAddressReward(address, step, block) {
956
+ throw new Error("Method not implemented.");
957
+ }
958
+ networkStakeStepPoolRewardShares(step, block) {
959
+ throw new Error("Method not implemented.");
960
+ }
961
+ networkStakeStepPoolRewards(step, block) {
962
+ throw new Error("Method not implemented.");
963
+ }
964
+ networkStakeStepRewardAddressHistory(address) {
965
+ throw new Error("Method not implemented.");
966
+ }
967
+ networkStakeStepRewardAddressShare(address, step, block) {
968
+ throw new Error("Method not implemented.");
969
+ }
970
+ networkStakeStepRewardForStep(step) {
971
+ throw new Error("Method not implemented.");
972
+ }
973
+ networkStakeStepRewardPositionWeight(position, step) {
974
+ throw new Error("Method not implemented.");
975
+ }
976
+ networkStakeStepRewardPotentialPositionLoss(position, step) {
977
+ throw new Error("Method not implemented.");
978
+ }
979
+ networkStakeStepRewardRandomizer(step, block) {
980
+ throw new Error("Method not implemented.");
981
+ }
982
+ networkStakeStepRewardWeightForAddress(address, step) {
983
+ throw new Error("Method not implemented.");
984
+ }
985
+ unclaimedRewards(address) {
986
+ throw new Error("Method not implemented.");
987
+ }
988
+ };
989
+ BaseNetworkStakeStepRewardService = _ts_decorate10([
990
+ creatable10()
991
+ ], BaseNetworkStakeStepRewardService);
992
+
861
993
  // src/PendingTransactions/BasePendingTransactions.ts
862
994
  import { ValueType } from "@opentelemetry/api";
863
995
  import { filterAs, filterAsync } from "@xylabs/array";
864
996
  import { assertEx as assertEx9 } from "@xylabs/assert";
865
- import { creatable as creatable10 } from "@xylabs/creatable";
866
- import { exists as exists3 } from "@xylabs/exists";
997
+ import { creatable as creatable11 } from "@xylabs/creatable";
998
+ import { exists as exists4 } from "@xylabs/exists";
867
999
  import { forget } from "@xylabs/forget";
868
- import { isDefined as isDefined2, isUndefined } from "@xylabs/typeof";
1000
+ import { isDefined as isDefined3, isUndefined } from "@xylabs/typeof";
869
1001
  import { MemoryArchivist } from "@xyo-network/archivist-memory";
870
1002
  import { findMostRecentBlock } from "@xyo-network/chain-protocol";
871
1003
  import { asBlockBoundWitnessWithHashStorageMeta, isTransactionBoundWitnessWithStorageMeta } from "@xyo-network/xl1-protocol";
@@ -873,10 +1005,10 @@ import { TransactionJsonSchemaValidator, validateTransaction } from "@xyo-networ
873
1005
  import { Mutex as Mutex2 } from "async-mutex";
874
1006
 
875
1007
  // src/PendingTransactions/bundledPayloadToHydratedTransaction.ts
876
- import { PayloadBuilder as PayloadBuilder6 } from "@xyo-network/payload-builder";
1008
+ import { PayloadBuilder as PayloadBuilder7 } from "@xyo-network/payload-builder";
877
1009
  import { asTransactionBoundWitnessWithStorageMeta } from "@xyo-network/xl1-protocol";
878
1010
  var bundledPayloadToHydratedTransaction = /* @__PURE__ */ __name(async (payload) => {
879
- const withStorageMeta = await PayloadBuilder6.addStorageMeta(payload.payloads);
1011
+ const withStorageMeta = await PayloadBuilder7.addStorageMeta(payload.payloads);
880
1012
  const tx = asTransactionBoundWitnessWithStorageMeta(withStorageMeta.find((p) => p._hash === payload.root));
881
1013
  if (tx) {
882
1014
  return [
@@ -887,7 +1019,7 @@ var bundledPayloadToHydratedTransaction = /* @__PURE__ */ __name(async (payload)
887
1019
  }, "bundledPayloadToHydratedTransaction");
888
1020
 
889
1021
  // src/PendingTransactions/hydratedTransactionToPayloadBundle.ts
890
- import { PayloadBuilder as PayloadBuilder7 } from "@xyo-network/payload-builder";
1022
+ import { PayloadBuilder as PayloadBuilder8 } from "@xyo-network/payload-builder";
891
1023
  import { PayloadBundleSchema } from "@xyo-network/payload-model";
892
1024
  import { flattenHydratedTransaction } from "@xyo-network/xl1-protocol-sdk";
893
1025
  var hydratedTransactionToPayloadBundle = /* @__PURE__ */ __name((transaction) => {
@@ -895,8 +1027,8 @@ var hydratedTransactionToPayloadBundle = /* @__PURE__ */ __name((transaction) =>
895
1027
  return bundle(root, transaction);
896
1028
  }, "hydratedTransactionToPayloadBundle");
897
1029
  var bundle = /* @__PURE__ */ __name((root, transaction) => {
898
- const payloads = flattenHydratedTransaction(transaction).flatMap((p) => PayloadBuilder7.omitStorageMeta(p));
899
- return new PayloadBuilder7({
1030
+ const payloads = flattenHydratedTransaction(transaction).flatMap((p) => PayloadBuilder8.omitStorageMeta(p));
1031
+ return new PayloadBuilder8({
900
1032
  schema: PayloadBundleSchema
901
1033
  }).fields({
902
1034
  payloads,
@@ -905,13 +1037,13 @@ var bundle = /* @__PURE__ */ __name((root, transaction) => {
905
1037
  }, "bundle");
906
1038
 
907
1039
  // src/PendingTransactions/BasePendingTransactions.ts
908
- function _ts_decorate10(decorators, target, key, desc) {
1040
+ function _ts_decorate11(decorators, target, key, desc) {
909
1041
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
910
1042
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
911
1043
  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;
912
1044
  return c > 3 && r && Object.defineProperty(target, key, r), r;
913
1045
  }
914
- __name(_ts_decorate10, "_ts_decorate");
1046
+ __name(_ts_decorate11, "_ts_decorate");
915
1047
  var BasePendingTransactionsService = class _BasePendingTransactionsService extends BaseService {
916
1048
  static {
917
1049
  __name(this, "BasePendingTransactionsService");
@@ -1018,7 +1150,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1018
1150
  if (pendingBundledTransactions.length === 0) break;
1019
1151
  cursor = pendingBundledTransactions.at(-1)?._sequence;
1020
1152
  const undeletedTransactionBundles = pendingBundledTransactions.filter((tx) => !this._removablePendingTransactionHashes.has(tx.root));
1021
- const transactions = (await Promise.all(undeletedTransactionBundles.map((p) => bundledPayloadToHydratedTransaction(p)))).filter(exists3);
1153
+ const transactions = (await Promise.all(undeletedTransactionBundles.map((p) => bundledPayloadToHydratedTransaction(p)))).filter(exists4);
1022
1154
  const activeTransactions = transactions.filter(isTransactionActive(lastHead.block + 1));
1023
1155
  foundPendingTransactions.push(...activeTransactions);
1024
1156
  }
@@ -1035,7 +1167,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1035
1167
  async cleanupWorker() {
1036
1168
  return await this._updateCuratedPendingTransactionsArchivistMutex.runExclusive(async () => {
1037
1169
  const lastHead = await findMostRecentBlock(this.chainArchivist);
1038
- if (isDefined2(lastHead)) await this.pruneCuratedPendingTransactionsArchivist(lastHead._hash);
1170
+ if (isDefined3(lastHead)) await this.pruneCuratedPendingTransactionsArchivist(lastHead._hash);
1039
1171
  }, _BasePendingTransactionsService.MutexPriority.PurgeTransactions);
1040
1172
  }
1041
1173
  async countPendingTransactions() {
@@ -1059,7 +1191,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1059
1191
  const unprocessedTransactions = await this.filterAlreadyFinalizedTransactions(payloads);
1060
1192
  const hydratedUnprocessedTransactions = (await Promise.all(unprocessedTransactions.map(async (tx) => {
1061
1193
  return await bundledPayloadToHydratedTransaction(tx);
1062
- }))).filter(exists3);
1194
+ }))).filter(exists4);
1063
1195
  const validTransactions = await filterAsync(hydratedUnprocessedTransactions, async (tx) => {
1064
1196
  const errors = await validateTransaction(tx, this.chainId, [
1065
1197
  TransactionJsonSchemaValidator
@@ -1095,7 +1227,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1095
1227
  let [lastHead] = filterAs(await this.chainArchivist.get([
1096
1228
  head
1097
1229
  ]), asBlockBoundWitnessWithHashStorageMeta);
1098
- while (isDefined2(lastHead)) {
1230
+ while (isDefined3(lastHead)) {
1099
1231
  const pendingBundledTransactions = await this.pendingBundledTransactionsLocalArchivist.next({
1100
1232
  limit: 100,
1101
1233
  order: "asc",
@@ -1106,14 +1238,14 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1106
1238
  }
1107
1239
  cursor = pendingBundledTransactions.at(-1)?._sequence;
1108
1240
  const deletedTransactionBundles = pendingBundledTransactions.filter((tx) => this._removablePendingTransactionHashes.has(tx.root));
1109
- foundPendingTransactionsToDeleteHashes.push(...deletedTransactionBundles.map((tx) => tx._hash).filter(exists3));
1241
+ foundPendingTransactionsToDeleteHashes.push(...deletedTransactionBundles.map((tx) => tx._hash).filter(exists4));
1110
1242
  const undeletedTransactionBundles = pendingBundledTransactions.filter((tx) => !this._removablePendingTransactionHashes.has(tx.root));
1111
- const transactions = (await Promise.all(undeletedTransactionBundles.map((p) => bundledPayloadToHydratedTransaction(p)))).filter(exists3);
1243
+ const transactions = (await Promise.all(undeletedTransactionBundles.map((p) => bundledPayloadToHydratedTransaction(p)))).filter(exists4);
1112
1244
  const expiredTransactions = transactions.filter(isTransactionExpired(lastHead.block + 1));
1113
1245
  const expiredBundleHashes = expiredTransactions.map((expiredHydratedTx) => (
1114
1246
  // Find the corresponding payload bundle hash for the expired transaction
1115
1247
  pendingBundledTransactions.find((bundledTx) => bundledTx.root === expiredHydratedTx[0]._hash)?._hash
1116
- )).filter(exists3);
1248
+ )).filter(exists4);
1117
1249
  foundPendingTransactionsToDeleteHashes.push(...expiredBundleHashes);
1118
1250
  }
1119
1251
  const deletedHashes = await this.pendingBundledTransactionsLocalArchivist.delete(foundPendingTransactionsToDeleteHashes);
@@ -1129,15 +1261,15 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1129
1261
  });
1130
1262
  }
1131
1263
  };
1132
- BasePendingTransactionsService = _ts_decorate10([
1133
- creatable10()
1264
+ BasePendingTransactionsService = _ts_decorate11([
1265
+ creatable11()
1134
1266
  ], BasePendingTransactionsService);
1135
1267
  var isTransactionExpired = /* @__PURE__ */ __name((block) => ([txBw]) => txBw.exp < block, "isTransactionExpired");
1136
1268
  var isTransactionActive = /* @__PURE__ */ __name((block) => ([txBw]) => txBw.nbf <= block && txBw.exp >= block, "isTransactionActive");
1137
1269
 
1138
1270
  // src/StakeIntent/lib/getBlockSignedStakeDeclarations.ts
1139
1271
  import { filterAs as filterAs2 } from "@xylabs/array";
1140
- import { exists as exists4 } from "@xylabs/exists";
1272
+ import { exists as exists5 } from "@xylabs/exists";
1141
1273
  import { asOptionalBoundWitness } from "@xyo-network/boundwitness-model";
1142
1274
  import { payloadSchemasContains } from "@xyo-network/boundwitness-validator";
1143
1275
  import { BoundWitnessWrapper } from "@xyo-network/boundwitness-wrapper";
@@ -1148,7 +1280,7 @@ var getBlockSignedStakeDeclarations = /* @__PURE__ */ __name(async (block, archi
1148
1280
  const bwsFromBlockWithDeclarations = bwsFromBlock.filter((bw) => payloadSchemasContains(bw, ChainStakeIntentSchema));
1149
1281
  const validBlockBwsWithDeclarations = await filterToValidSignedBoundWitnesses(bwsFromBlockWithDeclarations);
1150
1282
  return (await Promise.all(validBlockBwsWithDeclarations.map(async (bw) => {
1151
- const stakeIntentHashes = validBlockBwsWithDeclarations.flatMap(mapBoundWitnessToStakeIntentHashes).filter(exists4);
1283
+ const stakeIntentHashes = validBlockBwsWithDeclarations.flatMap(mapBoundWitnessToStakeIntentHashes).filter(exists5);
1152
1284
  const payloads = await archivist.get(stakeIntentHashes);
1153
1285
  const stakeIntents = filterAs2(payloads, asChainStakeIntent).filter((p) => p.intent === intent).filter((p) => bw.addresses.includes(p.from));
1154
1286
  return stakeIntents;
@@ -1165,22 +1297,22 @@ var mapBoundWitnessToStakeIntentHashes = /* @__PURE__ */ __name((bw) => {
1165
1297
  // src/StakeIntent/XyoStakeIntentService.ts
1166
1298
  import { filterAs as filterAs3 } from "@xylabs/array";
1167
1299
  import { assertEx as assertEx10 } from "@xylabs/assert";
1168
- import { creatable as creatable11 } from "@xylabs/creatable";
1300
+ import { creatable as creatable12 } from "@xylabs/creatable";
1169
1301
  import { asAddress } from "@xylabs/hex";
1170
1302
  import { isUndefined as isUndefined2 } from "@xylabs/typeof";
1171
1303
  import { analyzeChain, ChainStakeIntentAnalyzer, isChainSummaryStakeIntent } from "@xyo-network/chain-analyze";
1172
1304
  import { DEFAULT_FIND_FIRST_MATCHING_NEXT_OPTIONS, findFirstMatching, IntervalMap } from "@xyo-network/chain-utils";
1173
- import { PayloadBuilder as PayloadBuilder8 } from "@xyo-network/payload-builder";
1305
+ import { PayloadBuilder as PayloadBuilder9 } from "@xyo-network/payload-builder";
1174
1306
  import { asBlockBoundWitness as asBlockBoundWitness3, asBlockBoundWitnessWithStorageMeta, asChainIndexingServiceStateWithStorageMeta, asChainStakeIntent as asChainStakeIntent2, ChainIndexingServiceStateSchema, isChainIndexingServiceState } from "@xyo-network/xl1-protocol";
1175
1307
  import { Mutex as Mutex3 } from "async-mutex";
1176
- import { LRUCache as LRUCache3 } from "lru-cache";
1177
- function _ts_decorate11(decorators, target, key, desc) {
1308
+ import { LRUCache as LRUCache4 } from "lru-cache";
1309
+ function _ts_decorate12(decorators, target, key, desc) {
1178
1310
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1179
1311
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1180
1312
  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;
1181
1313
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1182
1314
  }
1183
- __name(_ts_decorate11, "_ts_decorate");
1315
+ __name(_ts_decorate12, "_ts_decorate");
1184
1316
  var ACTIVE_STAKE_TTL = 1e3 * 60 * 60 * 2;
1185
1317
  var NO_ACTIVE_STAKE_TTL = 1e3 * 2;
1186
1318
  var STAKE_CACHE_MAX_ENTRIES = 1e4;
@@ -1198,7 +1330,7 @@ var XyoStakeIntentService = class extends BaseService {
1198
1330
  // in performance for small sets, and (most importantly) easily
1199
1331
  // persisted so we can recover state on restart.
1200
1332
  _producers = new IntervalMap();
1201
- _stakeCache = new LRUCache3({
1333
+ _stakeCache = new LRUCache4({
1202
1334
  max: STAKE_CACHE_MAX_ENTRIES
1203
1335
  });
1204
1336
  _updateMutex = new Mutex3();
@@ -1220,7 +1352,7 @@ var XyoStakeIntentService = class extends BaseService {
1220
1352
  });
1221
1353
  const head = await this.chainIterator.head();
1222
1354
  if (isUndefined2(head)) return;
1223
- const headHash = await PayloadBuilder8.hash(head);
1355
+ const headHash = await PayloadBuilder9.hash(head);
1224
1356
  await this.recoverState(headHash);
1225
1357
  }
1226
1358
  async getDeclaredCandidateRanges(address, intent) {
@@ -1285,7 +1417,7 @@ var XyoStakeIntentService = class extends BaseService {
1285
1417
  }
1286
1418
  async persistState(current) {
1287
1419
  const state = this._producers.serialize();
1288
- const payload = new PayloadBuilder8({
1420
+ const payload = new PayloadBuilder9({
1289
1421
  schema: ChainIndexingServiceStateSchema
1290
1422
  }).fields({
1291
1423
  endBlockHash: current,
@@ -1337,7 +1469,7 @@ var XyoStakeIntentService = class extends BaseService {
1337
1469
  return await this.spanAsync("updateIndex", async () => {
1338
1470
  const currentHead = await this.chainIterator.head();
1339
1471
  if (isUndefined2(currentHead)) return;
1340
- const currentHeadHash = await PayloadBuilder8.hash(currentHead);
1472
+ const currentHeadHash = await PayloadBuilder9.hash(currentHead);
1341
1473
  const result = await analyzeChain(this.chainArchivist, [
1342
1474
  new ChainStakeIntentAnalyzer("producer")
1343
1475
  ], currentHeadHash, this._lastIndexedBlockHash);
@@ -1359,19 +1491,19 @@ var XyoStakeIntentService = class extends BaseService {
1359
1491
  });
1360
1492
  }
1361
1493
  };
1362
- XyoStakeIntentService = _ts_decorate11([
1363
- creatable11()
1494
+ XyoStakeIntentService = _ts_decorate12([
1495
+ creatable12()
1364
1496
  ], XyoStakeIntentService);
1365
1497
 
1366
1498
  // src/StepStake/BaseStepStakeService.ts
1367
- import { creatable as creatable12 } from "@xylabs/creatable";
1368
- function _ts_decorate12(decorators, target, key, desc) {
1499
+ import { creatable as creatable13 } from "@xylabs/creatable";
1500
+ function _ts_decorate13(decorators, target, key, desc) {
1369
1501
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1370
1502
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1371
1503
  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;
1372
1504
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1373
1505
  }
1374
- __name(_ts_decorate12, "_ts_decorate");
1506
+ __name(_ts_decorate13, "_ts_decorate");
1375
1507
  var BaseStepStakeService = class extends BaseService {
1376
1508
  static {
1377
1509
  __name(this, "BaseStepStakeService");
@@ -1383,21 +1515,23 @@ var BaseStepStakeService = class extends BaseService {
1383
1515
  throw new Error("Method not implemented.");
1384
1516
  }
1385
1517
  };
1386
- BaseStepStakeService = _ts_decorate12([
1387
- creatable12()
1518
+ BaseStepStakeService = _ts_decorate13([
1519
+ creatable13()
1388
1520
  ], BaseStepStakeService);
1389
1521
 
1390
1522
  // src/Time/BaseTimeSyncService.ts
1391
1523
  import { assertEx as assertEx11 } from "@xylabs/assert";
1392
- import { creatable as creatable13 } from "@xylabs/creatable";
1524
+ import { creatable as creatable14 } from "@xylabs/creatable";
1525
+ import { asHash as asHash3 } from "@xylabs/hex";
1526
+ import { PayloadBuilder as PayloadBuilder10 } from "@xyo-network/payload-builder";
1393
1527
  import { asTimePayload, TimeSchema as TimeSchema2 } from "@xyo-network/xl1-protocol";
1394
- function _ts_decorate13(decorators, target, key, desc) {
1528
+ function _ts_decorate14(decorators, target, key, desc) {
1395
1529
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1396
1530
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1397
1531
  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;
1398
1532
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1399
1533
  }
1400
- __name(_ts_decorate13, "_ts_decorate");
1534
+ __name(_ts_decorate14, "_ts_decorate");
1401
1535
  var BaseTimeSyncService = class extends BaseService {
1402
1536
  static {
1403
1537
  __name(this, "BaseTimeSyncService");
@@ -1467,17 +1601,51 @@ var BaseTimeSyncService = class extends BaseService {
1467
1601
  }
1468
1602
  }
1469
1603
  }
1604
+ async currentTimeAndHash(domain) {
1605
+ switch (domain) {
1606
+ case "xl1": {
1607
+ const head = await this.chainIterator.head();
1608
+ return [
1609
+ head.block,
1610
+ await PayloadBuilder10.hash(head)
1611
+ ];
1612
+ }
1613
+ case "epoch": {
1614
+ return [
1615
+ Date.now(),
1616
+ null
1617
+ ];
1618
+ }
1619
+ case "ethereum": {
1620
+ const provider = assertEx11(this.ethProvider, () => "Ethereum provider not configured");
1621
+ const blockNumber = await provider.getBlockNumber() ?? 0;
1622
+ const block = await provider.getBlock(blockNumber);
1623
+ const blockHash = asHash3(assertEx11(block?.hash, () => "Block hash not found"), true);
1624
+ return [
1625
+ blockNumber,
1626
+ blockHash
1627
+ ];
1628
+ }
1629
+ default: {
1630
+ throw new Error(`Unknown time domain: ${domain}`);
1631
+ }
1632
+ }
1633
+ }
1634
+ currentTimePayload() {
1635
+ throw new Error("Method not implemented.");
1636
+ }
1470
1637
  };
1471
- BaseTimeSyncService = _ts_decorate13([
1472
- creatable13()
1638
+ BaseTimeSyncService = _ts_decorate14([
1639
+ creatable14()
1473
1640
  ], BaseTimeSyncService);
1474
1641
  export {
1475
1642
  BaseAccountBalanceService,
1643
+ BaseAccountTransfersService,
1476
1644
  BaseAccountableService,
1477
1645
  BaseBlockProducerService,
1478
1646
  BaseBlockRewardService,
1479
- BaseBridgeService,
1480
1647
  BaseElectionService,
1648
+ BaseNetworkStakeStepRewardService,
1481
1649
  BasePendingTransactionsService,
1482
1650
  BaseService,
1483
1651
  BaseStepStakeService,
@@ -1493,7 +1661,7 @@ export {
1493
1661
  XyoStakeIntentService,
1494
1662
  XyoValidator,
1495
1663
  accountBalanceServiceFromArchivist,
1496
- accountBalanceServiceFromArchivistV2,
1664
+ accountTransferServiceFromArchivist,
1497
1665
  creatableService,
1498
1666
  getBlockSignedStakeDeclarations
1499
1667
  };