@xyo-network/chain-services 1.14.4 → 1.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +28 -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 +299 -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 +70 -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,71 @@ 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
+ networkStakeStepRewardStakerCount(step, block) {
983
+ throw new Error("Method not implemented.");
984
+ }
985
+ networkStakeStepRewardWeightForAddress(address, step) {
986
+ throw new Error("Method not implemented.");
987
+ }
988
+ unclaimedRewards(address) {
989
+ throw new Error("Method not implemented.");
990
+ }
991
+ };
992
+ BaseNetworkStakeStepRewardService = _ts_decorate10([
993
+ creatable10()
994
+ ], BaseNetworkStakeStepRewardService);
995
+
861
996
  // src/PendingTransactions/BasePendingTransactions.ts
862
997
  import { ValueType } from "@opentelemetry/api";
863
998
  import { filterAs, filterAsync } from "@xylabs/array";
864
999
  import { assertEx as assertEx9 } from "@xylabs/assert";
865
- import { creatable as creatable10 } from "@xylabs/creatable";
866
- import { exists as exists3 } from "@xylabs/exists";
1000
+ import { creatable as creatable11 } from "@xylabs/creatable";
1001
+ import { exists as exists4 } from "@xylabs/exists";
867
1002
  import { forget } from "@xylabs/forget";
868
- import { isDefined as isDefined2, isUndefined } from "@xylabs/typeof";
1003
+ import { isDefined as isDefined3, isUndefined } from "@xylabs/typeof";
869
1004
  import { MemoryArchivist } from "@xyo-network/archivist-memory";
870
1005
  import { findMostRecentBlock } from "@xyo-network/chain-protocol";
871
1006
  import { asBlockBoundWitnessWithHashStorageMeta, isTransactionBoundWitnessWithStorageMeta } from "@xyo-network/xl1-protocol";
@@ -873,10 +1008,10 @@ import { TransactionJsonSchemaValidator, validateTransaction } from "@xyo-networ
873
1008
  import { Mutex as Mutex2 } from "async-mutex";
874
1009
 
875
1010
  // src/PendingTransactions/bundledPayloadToHydratedTransaction.ts
876
- import { PayloadBuilder as PayloadBuilder6 } from "@xyo-network/payload-builder";
1011
+ import { PayloadBuilder as PayloadBuilder7 } from "@xyo-network/payload-builder";
877
1012
  import { asTransactionBoundWitnessWithStorageMeta } from "@xyo-network/xl1-protocol";
878
1013
  var bundledPayloadToHydratedTransaction = /* @__PURE__ */ __name(async (payload) => {
879
- const withStorageMeta = await PayloadBuilder6.addStorageMeta(payload.payloads);
1014
+ const withStorageMeta = await PayloadBuilder7.addStorageMeta(payload.payloads);
880
1015
  const tx = asTransactionBoundWitnessWithStorageMeta(withStorageMeta.find((p) => p._hash === payload.root));
881
1016
  if (tx) {
882
1017
  return [
@@ -887,7 +1022,7 @@ var bundledPayloadToHydratedTransaction = /* @__PURE__ */ __name(async (payload)
887
1022
  }, "bundledPayloadToHydratedTransaction");
888
1023
 
889
1024
  // src/PendingTransactions/hydratedTransactionToPayloadBundle.ts
890
- import { PayloadBuilder as PayloadBuilder7 } from "@xyo-network/payload-builder";
1025
+ import { PayloadBuilder as PayloadBuilder8 } from "@xyo-network/payload-builder";
891
1026
  import { PayloadBundleSchema } from "@xyo-network/payload-model";
892
1027
  import { flattenHydratedTransaction } from "@xyo-network/xl1-protocol-sdk";
893
1028
  var hydratedTransactionToPayloadBundle = /* @__PURE__ */ __name((transaction) => {
@@ -895,8 +1030,8 @@ var hydratedTransactionToPayloadBundle = /* @__PURE__ */ __name((transaction) =>
895
1030
  return bundle(root, transaction);
896
1031
  }, "hydratedTransactionToPayloadBundle");
897
1032
  var bundle = /* @__PURE__ */ __name((root, transaction) => {
898
- const payloads = flattenHydratedTransaction(transaction).flatMap((p) => PayloadBuilder7.omitStorageMeta(p));
899
- return new PayloadBuilder7({
1033
+ const payloads = flattenHydratedTransaction(transaction).flatMap((p) => PayloadBuilder8.omitStorageMeta(p));
1034
+ return new PayloadBuilder8({
900
1035
  schema: PayloadBundleSchema
901
1036
  }).fields({
902
1037
  payloads,
@@ -905,13 +1040,13 @@ var bundle = /* @__PURE__ */ __name((root, transaction) => {
905
1040
  }, "bundle");
906
1041
 
907
1042
  // src/PendingTransactions/BasePendingTransactions.ts
908
- function _ts_decorate10(decorators, target, key, desc) {
1043
+ function _ts_decorate11(decorators, target, key, desc) {
909
1044
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
910
1045
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
911
1046
  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
1047
  return c > 3 && r && Object.defineProperty(target, key, r), r;
913
1048
  }
914
- __name(_ts_decorate10, "_ts_decorate");
1049
+ __name(_ts_decorate11, "_ts_decorate");
915
1050
  var BasePendingTransactionsService = class _BasePendingTransactionsService extends BaseService {
916
1051
  static {
917
1052
  __name(this, "BasePendingTransactionsService");
@@ -1018,7 +1153,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1018
1153
  if (pendingBundledTransactions.length === 0) break;
1019
1154
  cursor = pendingBundledTransactions.at(-1)?._sequence;
1020
1155
  const undeletedTransactionBundles = pendingBundledTransactions.filter((tx) => !this._removablePendingTransactionHashes.has(tx.root));
1021
- const transactions = (await Promise.all(undeletedTransactionBundles.map((p) => bundledPayloadToHydratedTransaction(p)))).filter(exists3);
1156
+ const transactions = (await Promise.all(undeletedTransactionBundles.map((p) => bundledPayloadToHydratedTransaction(p)))).filter(exists4);
1022
1157
  const activeTransactions = transactions.filter(isTransactionActive(lastHead.block + 1));
1023
1158
  foundPendingTransactions.push(...activeTransactions);
1024
1159
  }
@@ -1035,7 +1170,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1035
1170
  async cleanupWorker() {
1036
1171
  return await this._updateCuratedPendingTransactionsArchivistMutex.runExclusive(async () => {
1037
1172
  const lastHead = await findMostRecentBlock(this.chainArchivist);
1038
- if (isDefined2(lastHead)) await this.pruneCuratedPendingTransactionsArchivist(lastHead._hash);
1173
+ if (isDefined3(lastHead)) await this.pruneCuratedPendingTransactionsArchivist(lastHead._hash);
1039
1174
  }, _BasePendingTransactionsService.MutexPriority.PurgeTransactions);
1040
1175
  }
1041
1176
  async countPendingTransactions() {
@@ -1059,7 +1194,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1059
1194
  const unprocessedTransactions = await this.filterAlreadyFinalizedTransactions(payloads);
1060
1195
  const hydratedUnprocessedTransactions = (await Promise.all(unprocessedTransactions.map(async (tx) => {
1061
1196
  return await bundledPayloadToHydratedTransaction(tx);
1062
- }))).filter(exists3);
1197
+ }))).filter(exists4);
1063
1198
  const validTransactions = await filterAsync(hydratedUnprocessedTransactions, async (tx) => {
1064
1199
  const errors = await validateTransaction(tx, this.chainId, [
1065
1200
  TransactionJsonSchemaValidator
@@ -1095,7 +1230,7 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1095
1230
  let [lastHead] = filterAs(await this.chainArchivist.get([
1096
1231
  head
1097
1232
  ]), asBlockBoundWitnessWithHashStorageMeta);
1098
- while (isDefined2(lastHead)) {
1233
+ while (isDefined3(lastHead)) {
1099
1234
  const pendingBundledTransactions = await this.pendingBundledTransactionsLocalArchivist.next({
1100
1235
  limit: 100,
1101
1236
  order: "asc",
@@ -1106,14 +1241,14 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1106
1241
  }
1107
1242
  cursor = pendingBundledTransactions.at(-1)?._sequence;
1108
1243
  const deletedTransactionBundles = pendingBundledTransactions.filter((tx) => this._removablePendingTransactionHashes.has(tx.root));
1109
- foundPendingTransactionsToDeleteHashes.push(...deletedTransactionBundles.map((tx) => tx._hash).filter(exists3));
1244
+ foundPendingTransactionsToDeleteHashes.push(...deletedTransactionBundles.map((tx) => tx._hash).filter(exists4));
1110
1245
  const undeletedTransactionBundles = pendingBundledTransactions.filter((tx) => !this._removablePendingTransactionHashes.has(tx.root));
1111
- const transactions = (await Promise.all(undeletedTransactionBundles.map((p) => bundledPayloadToHydratedTransaction(p)))).filter(exists3);
1246
+ const transactions = (await Promise.all(undeletedTransactionBundles.map((p) => bundledPayloadToHydratedTransaction(p)))).filter(exists4);
1112
1247
  const expiredTransactions = transactions.filter(isTransactionExpired(lastHead.block + 1));
1113
1248
  const expiredBundleHashes = expiredTransactions.map((expiredHydratedTx) => (
1114
1249
  // Find the corresponding payload bundle hash for the expired transaction
1115
1250
  pendingBundledTransactions.find((bundledTx) => bundledTx.root === expiredHydratedTx[0]._hash)?._hash
1116
- )).filter(exists3);
1251
+ )).filter(exists4);
1117
1252
  foundPendingTransactionsToDeleteHashes.push(...expiredBundleHashes);
1118
1253
  }
1119
1254
  const deletedHashes = await this.pendingBundledTransactionsLocalArchivist.delete(foundPendingTransactionsToDeleteHashes);
@@ -1129,15 +1264,15 @@ var BasePendingTransactionsService = class _BasePendingTransactionsService exten
1129
1264
  });
1130
1265
  }
1131
1266
  };
1132
- BasePendingTransactionsService = _ts_decorate10([
1133
- creatable10()
1267
+ BasePendingTransactionsService = _ts_decorate11([
1268
+ creatable11()
1134
1269
  ], BasePendingTransactionsService);
1135
1270
  var isTransactionExpired = /* @__PURE__ */ __name((block) => ([txBw]) => txBw.exp < block, "isTransactionExpired");
1136
1271
  var isTransactionActive = /* @__PURE__ */ __name((block) => ([txBw]) => txBw.nbf <= block && txBw.exp >= block, "isTransactionActive");
1137
1272
 
1138
1273
  // src/StakeIntent/lib/getBlockSignedStakeDeclarations.ts
1139
1274
  import { filterAs as filterAs2 } from "@xylabs/array";
1140
- import { exists as exists4 } from "@xylabs/exists";
1275
+ import { exists as exists5 } from "@xylabs/exists";
1141
1276
  import { asOptionalBoundWitness } from "@xyo-network/boundwitness-model";
1142
1277
  import { payloadSchemasContains } from "@xyo-network/boundwitness-validator";
1143
1278
  import { BoundWitnessWrapper } from "@xyo-network/boundwitness-wrapper";
@@ -1148,7 +1283,7 @@ var getBlockSignedStakeDeclarations = /* @__PURE__ */ __name(async (block, archi
1148
1283
  const bwsFromBlockWithDeclarations = bwsFromBlock.filter((bw) => payloadSchemasContains(bw, ChainStakeIntentSchema));
1149
1284
  const validBlockBwsWithDeclarations = await filterToValidSignedBoundWitnesses(bwsFromBlockWithDeclarations);
1150
1285
  return (await Promise.all(validBlockBwsWithDeclarations.map(async (bw) => {
1151
- const stakeIntentHashes = validBlockBwsWithDeclarations.flatMap(mapBoundWitnessToStakeIntentHashes).filter(exists4);
1286
+ const stakeIntentHashes = validBlockBwsWithDeclarations.flatMap(mapBoundWitnessToStakeIntentHashes).filter(exists5);
1152
1287
  const payloads = await archivist.get(stakeIntentHashes);
1153
1288
  const stakeIntents = filterAs2(payloads, asChainStakeIntent).filter((p) => p.intent === intent).filter((p) => bw.addresses.includes(p.from));
1154
1289
  return stakeIntents;
@@ -1165,22 +1300,22 @@ var mapBoundWitnessToStakeIntentHashes = /* @__PURE__ */ __name((bw) => {
1165
1300
  // src/StakeIntent/XyoStakeIntentService.ts
1166
1301
  import { filterAs as filterAs3 } from "@xylabs/array";
1167
1302
  import { assertEx as assertEx10 } from "@xylabs/assert";
1168
- import { creatable as creatable11 } from "@xylabs/creatable";
1303
+ import { creatable as creatable12 } from "@xylabs/creatable";
1169
1304
  import { asAddress } from "@xylabs/hex";
1170
1305
  import { isUndefined as isUndefined2 } from "@xylabs/typeof";
1171
1306
  import { analyzeChain, ChainStakeIntentAnalyzer, isChainSummaryStakeIntent } from "@xyo-network/chain-analyze";
1172
1307
  import { DEFAULT_FIND_FIRST_MATCHING_NEXT_OPTIONS, findFirstMatching, IntervalMap } from "@xyo-network/chain-utils";
1173
- import { PayloadBuilder as PayloadBuilder8 } from "@xyo-network/payload-builder";
1308
+ import { PayloadBuilder as PayloadBuilder9 } from "@xyo-network/payload-builder";
1174
1309
  import { asBlockBoundWitness as asBlockBoundWitness3, asBlockBoundWitnessWithStorageMeta, asChainIndexingServiceStateWithStorageMeta, asChainStakeIntent as asChainStakeIntent2, ChainIndexingServiceStateSchema, isChainIndexingServiceState } from "@xyo-network/xl1-protocol";
1175
1310
  import { Mutex as Mutex3 } from "async-mutex";
1176
- import { LRUCache as LRUCache3 } from "lru-cache";
1177
- function _ts_decorate11(decorators, target, key, desc) {
1311
+ import { LRUCache as LRUCache4 } from "lru-cache";
1312
+ function _ts_decorate12(decorators, target, key, desc) {
1178
1313
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1179
1314
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1180
1315
  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
1316
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1182
1317
  }
1183
- __name(_ts_decorate11, "_ts_decorate");
1318
+ __name(_ts_decorate12, "_ts_decorate");
1184
1319
  var ACTIVE_STAKE_TTL = 1e3 * 60 * 60 * 2;
1185
1320
  var NO_ACTIVE_STAKE_TTL = 1e3 * 2;
1186
1321
  var STAKE_CACHE_MAX_ENTRIES = 1e4;
@@ -1198,7 +1333,7 @@ var XyoStakeIntentService = class extends BaseService {
1198
1333
  // in performance for small sets, and (most importantly) easily
1199
1334
  // persisted so we can recover state on restart.
1200
1335
  _producers = new IntervalMap();
1201
- _stakeCache = new LRUCache3({
1336
+ _stakeCache = new LRUCache4({
1202
1337
  max: STAKE_CACHE_MAX_ENTRIES
1203
1338
  });
1204
1339
  _updateMutex = new Mutex3();
@@ -1220,7 +1355,7 @@ var XyoStakeIntentService = class extends BaseService {
1220
1355
  });
1221
1356
  const head = await this.chainIterator.head();
1222
1357
  if (isUndefined2(head)) return;
1223
- const headHash = await PayloadBuilder8.hash(head);
1358
+ const headHash = await PayloadBuilder9.hash(head);
1224
1359
  await this.recoverState(headHash);
1225
1360
  }
1226
1361
  async getDeclaredCandidateRanges(address, intent) {
@@ -1285,7 +1420,7 @@ var XyoStakeIntentService = class extends BaseService {
1285
1420
  }
1286
1421
  async persistState(current) {
1287
1422
  const state = this._producers.serialize();
1288
- const payload = new PayloadBuilder8({
1423
+ const payload = new PayloadBuilder9({
1289
1424
  schema: ChainIndexingServiceStateSchema
1290
1425
  }).fields({
1291
1426
  endBlockHash: current,
@@ -1337,7 +1472,7 @@ var XyoStakeIntentService = class extends BaseService {
1337
1472
  return await this.spanAsync("updateIndex", async () => {
1338
1473
  const currentHead = await this.chainIterator.head();
1339
1474
  if (isUndefined2(currentHead)) return;
1340
- const currentHeadHash = await PayloadBuilder8.hash(currentHead);
1475
+ const currentHeadHash = await PayloadBuilder9.hash(currentHead);
1341
1476
  const result = await analyzeChain(this.chainArchivist, [
1342
1477
  new ChainStakeIntentAnalyzer("producer")
1343
1478
  ], currentHeadHash, this._lastIndexedBlockHash);
@@ -1359,19 +1494,19 @@ var XyoStakeIntentService = class extends BaseService {
1359
1494
  });
1360
1495
  }
1361
1496
  };
1362
- XyoStakeIntentService = _ts_decorate11([
1363
- creatable11()
1497
+ XyoStakeIntentService = _ts_decorate12([
1498
+ creatable12()
1364
1499
  ], XyoStakeIntentService);
1365
1500
 
1366
1501
  // src/StepStake/BaseStepStakeService.ts
1367
- import { creatable as creatable12 } from "@xylabs/creatable";
1368
- function _ts_decorate12(decorators, target, key, desc) {
1502
+ import { creatable as creatable13 } from "@xylabs/creatable";
1503
+ function _ts_decorate13(decorators, target, key, desc) {
1369
1504
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1370
1505
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1371
1506
  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
1507
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1373
1508
  }
1374
- __name(_ts_decorate12, "_ts_decorate");
1509
+ __name(_ts_decorate13, "_ts_decorate");
1375
1510
  var BaseStepStakeService = class extends BaseService {
1376
1511
  static {
1377
1512
  __name(this, "BaseStepStakeService");
@@ -1383,21 +1518,23 @@ var BaseStepStakeService = class extends BaseService {
1383
1518
  throw new Error("Method not implemented.");
1384
1519
  }
1385
1520
  };
1386
- BaseStepStakeService = _ts_decorate12([
1387
- creatable12()
1521
+ BaseStepStakeService = _ts_decorate13([
1522
+ creatable13()
1388
1523
  ], BaseStepStakeService);
1389
1524
 
1390
1525
  // src/Time/BaseTimeSyncService.ts
1391
1526
  import { assertEx as assertEx11 } from "@xylabs/assert";
1392
- import { creatable as creatable13 } from "@xylabs/creatable";
1527
+ import { creatable as creatable14 } from "@xylabs/creatable";
1528
+ import { asHash as asHash3 } from "@xylabs/hex";
1529
+ import { PayloadBuilder as PayloadBuilder10 } from "@xyo-network/payload-builder";
1393
1530
  import { asTimePayload, TimeSchema as TimeSchema2 } from "@xyo-network/xl1-protocol";
1394
- function _ts_decorate13(decorators, target, key, desc) {
1531
+ function _ts_decorate14(decorators, target, key, desc) {
1395
1532
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1396
1533
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1397
1534
  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
1535
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1399
1536
  }
1400
- __name(_ts_decorate13, "_ts_decorate");
1537
+ __name(_ts_decorate14, "_ts_decorate");
1401
1538
  var BaseTimeSyncService = class extends BaseService {
1402
1539
  static {
1403
1540
  __name(this, "BaseTimeSyncService");
@@ -1467,17 +1604,51 @@ var BaseTimeSyncService = class extends BaseService {
1467
1604
  }
1468
1605
  }
1469
1606
  }
1607
+ async currentTimeAndHash(domain) {
1608
+ switch (domain) {
1609
+ case "xl1": {
1610
+ const head = await this.chainIterator.head();
1611
+ return [
1612
+ head.block,
1613
+ await PayloadBuilder10.hash(head)
1614
+ ];
1615
+ }
1616
+ case "epoch": {
1617
+ return [
1618
+ Date.now(),
1619
+ null
1620
+ ];
1621
+ }
1622
+ case "ethereum": {
1623
+ const provider = assertEx11(this.ethProvider, () => "Ethereum provider not configured");
1624
+ const blockNumber = await provider.getBlockNumber() ?? 0;
1625
+ const block = await provider.getBlock(blockNumber);
1626
+ const blockHash = asHash3(assertEx11(block?.hash, () => "Block hash not found"), true);
1627
+ return [
1628
+ blockNumber,
1629
+ blockHash
1630
+ ];
1631
+ }
1632
+ default: {
1633
+ throw new Error(`Unknown time domain: ${domain}`);
1634
+ }
1635
+ }
1636
+ }
1637
+ currentTimePayload() {
1638
+ throw new Error("Method not implemented.");
1639
+ }
1470
1640
  };
1471
- BaseTimeSyncService = _ts_decorate13([
1472
- creatable13()
1641
+ BaseTimeSyncService = _ts_decorate14([
1642
+ creatable14()
1473
1643
  ], BaseTimeSyncService);
1474
1644
  export {
1475
1645
  BaseAccountBalanceService,
1646
+ BaseAccountTransfersService,
1476
1647
  BaseAccountableService,
1477
1648
  BaseBlockProducerService,
1478
1649
  BaseBlockRewardService,
1479
- BaseBridgeService,
1480
1650
  BaseElectionService,
1651
+ BaseNetworkStakeStepRewardService,
1481
1652
  BasePendingTransactionsService,
1482
1653
  BaseService,
1483
1654
  BaseStepStakeService,
@@ -1493,7 +1664,7 @@ export {
1493
1664
  XyoStakeIntentService,
1494
1665
  XyoValidator,
1495
1666
  accountBalanceServiceFromArchivist,
1496
- accountBalanceServiceFromArchivistV2,
1667
+ accountTransferServiceFromArchivist,
1497
1668
  creatableService,
1498
1669
  getBlockSignedStakeDeclarations
1499
1670
  };