@xyo-network/xl1-protocol-sdk 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 (159) hide show
  1. package/dist/neutral/block/hydrate/allHashesPresent.d.ts +4 -0
  2. package/dist/neutral/block/hydrate/allHashesPresent.d.ts.map +1 -0
  3. package/dist/neutral/block/hydrate/blockPayloadsFromHydratedBlock.d.ts +4 -0
  4. package/dist/neutral/block/hydrate/blockPayloadsFromHydratedBlock.d.ts.map +1 -0
  5. package/dist/neutral/block/hydrate/flattenHydratedBlock.d.ts +4 -0
  6. package/dist/neutral/block/hydrate/flattenHydratedBlock.d.ts.map +1 -0
  7. package/dist/neutral/block/hydrate/flattenHydratedBlocks.d.ts +4 -0
  8. package/dist/neutral/block/hydrate/flattenHydratedBlocks.d.ts.map +1 -0
  9. package/dist/neutral/block/hydrate/hydrateBlock.d.ts +5 -0
  10. package/dist/neutral/block/hydrate/hydrateBlock.d.ts.map +1 -0
  11. package/dist/neutral/block/hydrate/index.d.ts +8 -0
  12. package/dist/neutral/block/hydrate/index.d.ts.map +1 -0
  13. package/dist/neutral/block/hydrate/transactionsFromHydratedBlock.d.ts +4 -0
  14. package/dist/neutral/block/hydrate/transactionsFromHydratedBlock.d.ts.map +1 -0
  15. package/dist/neutral/block/hydrate/tryHydrateBlock.d.ts +5 -0
  16. package/dist/neutral/block/hydrate/tryHydrateBlock.d.ts.map +1 -0
  17. package/dist/neutral/block/index.d.ts +1 -1
  18. package/dist/neutral/block/index.d.ts.map +1 -1
  19. package/dist/neutral/block/primitives/balances/balancesStepSummaryFromRange.d.ts +6 -0
  20. package/dist/neutral/block/primitives/balances/balancesStepSummaryFromRange.d.ts.map +1 -0
  21. package/dist/neutral/block/primitives/balances/balancesSummary.d.ts +4 -0
  22. package/dist/neutral/block/primitives/balances/balancesSummary.d.ts.map +1 -0
  23. package/dist/neutral/block/primitives/balances/index.d.ts +3 -0
  24. package/dist/neutral/block/primitives/balances/index.d.ts.map +1 -0
  25. package/dist/neutral/block/primitives/blockFromBlockNumber.d.ts +5 -0
  26. package/dist/neutral/block/primitives/blockFromBlockNumber.d.ts.map +1 -0
  27. package/dist/neutral/block/primitives/hashFromBlockNumber.d.ts.map +1 -1
  28. package/dist/neutral/block/primitives/index.d.ts +4 -3
  29. package/dist/neutral/block/primitives/index.d.ts.map +1 -1
  30. package/dist/neutral/block/primitives/model.d.ts +5 -2
  31. package/dist/neutral/block/primitives/model.d.ts.map +1 -1
  32. package/dist/neutral/block/primitives/{payloads.d.ts → payloads/BalancesStepSummary.d.ts} +5 -16
  33. package/dist/neutral/block/primitives/payloads/BalancesStepSummary.d.ts.map +1 -0
  34. package/dist/neutral/block/primitives/payloads/ChainWindow.d.ts +6 -0
  35. package/dist/neutral/block/primitives/payloads/ChainWindow.d.ts.map +1 -0
  36. package/dist/neutral/block/primitives/payloads/StepSummary.d.ts +11 -0
  37. package/dist/neutral/block/primitives/payloads/StepSummary.d.ts.map +1 -0
  38. package/dist/neutral/block/primitives/payloads/TransfersSummary.d.ts +21 -0
  39. package/dist/neutral/block/primitives/payloads/TransfersSummary.d.ts.map +1 -0
  40. package/dist/neutral/block/primitives/payloads/index.d.ts +5 -0
  41. package/dist/neutral/block/primitives/payloads/index.d.ts.map +1 -0
  42. package/dist/neutral/block/primitives/transfers/index.d.ts +3 -0
  43. package/dist/neutral/block/primitives/transfers/index.d.ts.map +1 -0
  44. package/dist/neutral/block/primitives/transfers/transfersStepSummaryFromRange.d.ts +6 -0
  45. package/dist/neutral/block/primitives/transfers/transfersStepSummaryFromRange.d.ts.map +1 -0
  46. package/dist/neutral/block/primitives/transfers/transfersSummary.d.ts +4 -0
  47. package/dist/neutral/block/primitives/transfers/transfersSummary.d.ts.map +1 -0
  48. package/dist/neutral/config/Config.d.ts +10 -0
  49. package/dist/neutral/config/Config.d.ts.map +1 -1
  50. package/dist/neutral/config/Producer.d.ts +10 -0
  51. package/dist/neutral/config/Producer.d.ts.map +1 -1
  52. package/dist/neutral/index.d.ts +2 -0
  53. package/dist/neutral/index.d.ts.map +1 -1
  54. package/dist/neutral/index.mjs +509 -88
  55. package/dist/neutral/index.mjs.map +1 -1
  56. package/dist/neutral/payload/index.d.ts +1 -0
  57. package/dist/neutral/payload/index.d.ts.map +1 -1
  58. package/dist/neutral/payload/netTransfersForPayloads.d.ts +4 -0
  59. package/dist/neutral/payload/netTransfersForPayloads.d.ts.map +1 -0
  60. package/dist/neutral/steps/index.d.ts +2 -0
  61. package/dist/neutral/steps/index.d.ts.map +1 -0
  62. package/dist/neutral/steps/primitives/addressStakeWeight.d.ts +4 -0
  63. package/dist/neutral/steps/primitives/addressStakeWeight.d.ts.map +1 -0
  64. package/dist/neutral/steps/primitives/claimedRewards.d.ts +3 -0
  65. package/dist/neutral/steps/primitives/claimedRewards.d.ts.map +1 -0
  66. package/dist/neutral/steps/primitives/index.d.ts +17 -0
  67. package/dist/neutral/steps/primitives/index.d.ts.map +1 -0
  68. package/dist/neutral/steps/primitives/networkStakeStepAddressReward.d.ts +4 -0
  69. package/dist/neutral/steps/primitives/networkStakeStepAddressReward.d.ts.map +1 -0
  70. package/dist/neutral/steps/primitives/networkStakeStepPoolRewardShares.d.ts +4 -0
  71. package/dist/neutral/steps/primitives/networkStakeStepPoolRewardShares.d.ts.map +1 -0
  72. package/dist/neutral/steps/primitives/networkStakeStepPoolRewards.d.ts +4 -0
  73. package/dist/neutral/steps/primitives/networkStakeStepPoolRewards.d.ts.map +1 -0
  74. package/dist/neutral/steps/primitives/networkStakeStepRewardAddressHistory.d.ts +4 -0
  75. package/dist/neutral/steps/primitives/networkStakeStepRewardAddressHistory.d.ts.map +1 -0
  76. package/dist/neutral/steps/primitives/networkStakeStepRewardAddressShare.d.ts +4 -0
  77. package/dist/neutral/steps/primitives/networkStakeStepRewardAddressShare.d.ts.map +1 -0
  78. package/dist/neutral/steps/primitives/networkStakeStepRewardForStep.d.ts +3 -0
  79. package/dist/neutral/steps/primitives/networkStakeStepRewardForStep.d.ts.map +1 -0
  80. package/dist/neutral/steps/primitives/networkStakeStepRewardPositionWeight.d.ts +3 -0
  81. package/dist/neutral/steps/primitives/networkStakeStepRewardPositionWeight.d.ts.map +1 -0
  82. package/dist/neutral/steps/primitives/networkStakeStepRewardPotentialPositionLoss.d.ts +3 -0
  83. package/dist/neutral/steps/primitives/networkStakeStepRewardPotentialPositionLoss.d.ts.map +1 -0
  84. package/dist/neutral/steps/primitives/networkStakeStepRewardRandomizer.d.ts +3 -0
  85. package/dist/neutral/steps/primitives/networkStakeStepRewardRandomizer.d.ts.map +1 -0
  86. package/dist/neutral/steps/primitives/networkStakeStepRewardWeightForAddress.d.ts +4 -0
  87. package/dist/neutral/steps/primitives/networkStakeStepRewardWeightForAddress.d.ts.map +1 -0
  88. package/dist/neutral/steps/primitives/stakersAsOfBlock.d.ts +4 -0
  89. package/dist/neutral/steps/primitives/stakersAsOfBlock.d.ts.map +1 -0
  90. package/dist/neutral/steps/primitives/startingStakes.d.ts +4 -0
  91. package/dist/neutral/steps/primitives/startingStakes.d.ts.map +1 -0
  92. package/dist/neutral/steps/primitives/totalStakeWeight.d.ts +4 -0
  93. package/dist/neutral/steps/primitives/totalStakeWeight.d.ts.map +1 -0
  94. package/dist/neutral/steps/primitives/unclaimedRewards.d.ts +4 -0
  95. package/dist/neutral/steps/primitives/unclaimedRewards.d.ts.map +1 -0
  96. package/dist/neutral/time/index.d.ts +2 -0
  97. package/dist/neutral/time/index.d.ts.map +1 -0
  98. package/dist/neutral/time/primitives/index.d.ts +2 -0
  99. package/dist/neutral/time/primitives/index.d.ts.map +1 -0
  100. package/dist/neutral/time/primitives/xl1BlockNumberToEthBlockNumber.d.ts +3 -0
  101. package/dist/neutral/time/primitives/xl1BlockNumberToEthBlockNumber.d.ts.map +1 -0
  102. package/package.json +6 -5
  103. package/src/block/hydrate/allHashesPresent.ts +7 -0
  104. package/src/block/hydrate/blockPayloadsFromHydratedBlock.ts +11 -0
  105. package/src/block/hydrate/flattenHydratedBlock.ts +7 -0
  106. package/src/block/hydrate/flattenHydratedBlocks.ts +7 -0
  107. package/src/block/hydrate/hydrateBlock.ts +38 -0
  108. package/src/block/hydrate/index.ts +7 -0
  109. package/src/block/hydrate/transactionsFromHydratedBlock.ts +8 -0
  110. package/src/block/hydrate/tryHydrateBlock.ts +25 -0
  111. package/src/block/index.ts +1 -1
  112. package/src/block/primitives/{balanceStepSummaryFromRange.ts → balances/balancesStepSummaryFromRange.ts} +10 -10
  113. package/src/block/primitives/{balanceSummary.ts → balances/balancesSummary.ts} +6 -6
  114. package/src/block/primitives/balances/index.ts +2 -0
  115. package/src/block/primitives/blockFromBlockNumber.ts +33 -0
  116. package/src/block/primitives/hashFromBlockNumber.ts +3 -26
  117. package/src/block/primitives/index.ts +4 -3
  118. package/src/block/primitives/model.ts +7 -2
  119. package/src/block/primitives/{payloads.ts → payloads/BalancesStepSummary.ts} +4 -23
  120. package/src/block/primitives/payloads/ChainWindow.ts +6 -0
  121. package/src/block/primitives/payloads/StepSummary.ts +15 -0
  122. package/src/block/primitives/payloads/TransfersSummary.ts +30 -0
  123. package/src/block/primitives/payloads/index.ts +4 -0
  124. package/src/block/primitives/transfers/index.ts +2 -0
  125. package/src/block/primitives/transfers/transfersStepSummaryFromRange.ts +79 -0
  126. package/src/block/primitives/transfers/transfersSummary.ts +31 -0
  127. package/src/config/Producer.ts +17 -0
  128. package/src/index.ts +2 -0
  129. package/src/payload/index.ts +1 -0
  130. package/src/payload/netTransfersForPayloads.ts +30 -0
  131. package/src/steps/index.ts +1 -0
  132. package/src/steps/primitives/addressStakeWeight.ts +51 -0
  133. package/src/steps/primitives/claimedRewards.ts +5 -0
  134. package/src/steps/primitives/index.ts +16 -0
  135. package/src/steps/primitives/networkStakeStepAddressReward.ts +6 -0
  136. package/src/steps/primitives/networkStakeStepPoolRewardShares.ts +6 -0
  137. package/src/steps/primitives/networkStakeStepPoolRewards.ts +6 -0
  138. package/src/steps/primitives/networkStakeStepRewardAddressHistory.ts +6 -0
  139. package/src/steps/primitives/networkStakeStepRewardAddressShare.ts +6 -0
  140. package/src/steps/primitives/networkStakeStepRewardForStep.ts +5 -0
  141. package/src/steps/primitives/networkStakeStepRewardPositionWeight.ts +5 -0
  142. package/src/steps/primitives/networkStakeStepRewardPotentialPositionLoss.ts +5 -0
  143. package/src/steps/primitives/networkStakeStepRewardRandomizer.ts +5 -0
  144. package/src/steps/primitives/networkStakeStepRewardWeightForAddress.ts +6 -0
  145. package/src/steps/primitives/stakersAsOfBlock.ts +18 -0
  146. package/src/steps/primitives/startingStakes.ts +30 -0
  147. package/src/steps/primitives/totalStakeWeight.ts +35 -0
  148. package/src/steps/primitives/unclaimedRewards.ts +6 -0
  149. package/src/time/index.ts +1 -0
  150. package/src/time/primitives/index.ts +1 -0
  151. package/src/time/primitives/xl1BlockNumberToEthBlockNumber.ts +13 -0
  152. package/dist/neutral/block/hydrateBlock.d.ts +0 -12
  153. package/dist/neutral/block/hydrateBlock.d.ts.map +0 -1
  154. package/dist/neutral/block/primitives/balanceStepSummaryFromRange.d.ts +0 -6
  155. package/dist/neutral/block/primitives/balanceStepSummaryFromRange.d.ts.map +0 -1
  156. package/dist/neutral/block/primitives/balanceSummary.d.ts +0 -4
  157. package/dist/neutral/block/primitives/balanceSummary.d.ts.map +0 -1
  158. package/dist/neutral/block/primitives/payloads.d.ts.map +0 -1
  159. package/src/block/hydrateBlock.ts +0 -84
@@ -1,33 +1,56 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
3
 
4
- // src/block/hydrateBlock.ts
5
- import { filterAs } from "@xylabs/array";
6
- import { assertEx } from "@xylabs/assert";
7
- import { asTransactionBoundWitnessWithStorageMeta, isBlockBoundWitnessWithStorageMeta, isTransactionBoundWitnessWithStorageMeta } from "@xyo-network/xl1-protocol";
4
+ // src/block/hydrate/allHashesPresent.ts
8
5
  function allHashesPresent(hashes, payloads) {
9
6
  const payloadHashes = new Set(payloads.map((p) => p._hash));
10
7
  return hashes.every((hash) => payloadHashes.has(hash));
11
8
  }
12
9
  __name(allHashesPresent, "allHashesPresent");
13
- var tryHydrateBlock = /* @__PURE__ */ __name(async (archivist, hash, maxDepth = 1) => {
14
- assertEx(maxDepth >= 0, () => "maxDepth must be greater than or equal to 0");
15
- const bw = (await archivist.get([
10
+
11
+ // src/block/hydrate/blockPayloadsFromHydratedBlock.ts
12
+ import { assertEx } from "@xylabs/assert";
13
+ import { isTransactionBoundWitnessWithStorageMeta } from "@xyo-network/xl1-protocol";
14
+ var blockPayloadsFromHydratedBlock = /* @__PURE__ */ __name((block) => {
15
+ return block[0].payload_hashes.map((hash) => assertEx(block[1].find((p) => p._hash === hash), () => `missing payload ${hash}`)).filter((x) => !isTransactionBoundWitnessWithStorageMeta(x));
16
+ }, "blockPayloadsFromHydratedBlock");
17
+
18
+ // src/block/hydrate/flattenHydratedBlock.ts
19
+ var flattenHydratedBlock = /* @__PURE__ */ __name((hydratedBlock) => {
20
+ const [blk, blkPayloads] = hydratedBlock;
21
+ return [
22
+ ...blkPayloads,
23
+ blk
24
+ ];
25
+ }, "flattenHydratedBlock");
26
+
27
+ // src/block/hydrate/flattenHydratedBlocks.ts
28
+ var flattenHydratedBlocks = /* @__PURE__ */ __name((hydratedBlocks) => hydratedBlocks.flatMap((blk) => flattenHydratedBlock(blk)), "flattenHydratedBlocks");
29
+
30
+ // src/block/hydrate/hydrateBlock.ts
31
+ import { assertEx as assertEx2 } from "@xylabs/assert";
32
+ import { isBlockBoundWitnessWithStorageMeta, isTransactionBoundWitnessWithStorageMeta as isTransactionBoundWitnessWithStorageMeta2 } from "@xyo-network/xl1-protocol";
33
+ var hydrateBlock = /* @__PURE__ */ __name(async (archivist, hash, maxDepth = 1, minDepth = maxDepth) => {
34
+ assertEx2(maxDepth >= 0, () => "maxDepth must be greater than or equal to 0");
35
+ assertEx2(minDepth >= 0, () => "minDepth must be greater than or equal to 0");
36
+ assertEx2(maxDepth >= minDepth, () => "maxDepth must be greater than or equal to minDepth");
37
+ const bw = assertEx2((await archivist.get([
16
38
  hash
17
- ])).find(isBlockBoundWitnessWithStorageMeta);
18
- if (!bw) return void 0;
39
+ ])).find(isBlockBoundWitnessWithStorageMeta), () => `block ${hash} not found`);
19
40
  if (maxDepth === 0) return [
20
41
  bw,
21
42
  []
22
43
  ];
23
44
  const blkPayloads = await archivist.get(bw.payload_hashes);
45
+ if (minDepth === 1) assertEx2(allHashesPresent(bw.payload_hashes, blkPayloads), () => `Unable to find all payloads for block ${hash}`);
24
46
  if (maxDepth === 1) return [
25
47
  bw,
26
48
  blkPayloads
27
49
  ];
28
- const transactions = blkPayloads.filter(isTransactionBoundWitnessWithStorageMeta);
50
+ const transactions = blkPayloads.filter(isTransactionBoundWitnessWithStorageMeta2);
29
51
  const transactionsPayloadHashes = transactions.flatMap((tx) => tx.payload_hashes);
30
52
  const transactionsPayloads = await archivist.get(transactionsPayloadHashes);
53
+ assertEx2(allHashesPresent(transactionsPayloadHashes, transactionsPayloads), () => `Unable to find all payloads for transactions in block ${hash}`);
31
54
  const allPayloadsHashes = new Set([
32
55
  ...blkPayloads,
33
56
  ...transactionsPayloads
@@ -36,32 +59,43 @@ var tryHydrateBlock = /* @__PURE__ */ __name(async (archivist, hash, maxDepth =
36
59
  ...allPayloadsHashes
37
60
  ]);
38
61
  const allPayloadsFiltered = allPayloads.filter((p) => allPayloadsHashes.has(p._hash));
62
+ if (maxDepth === 2) assertEx2(allHashesPresent([
63
+ ...allPayloadsHashes
64
+ ], allPayloadsFiltered), () => `Unable to find all payloads for transactions in block ${hash}`);
39
65
  return [
40
66
  bw,
41
67
  allPayloadsFiltered
42
68
  ];
43
- }, "tryHydrateBlock");
44
- var hydrateBlock = /* @__PURE__ */ __name(async (archivist, hash, maxDepth = 1, minDepth = maxDepth) => {
45
- assertEx(maxDepth >= 0, () => "maxDepth must be greater than or equal to 0");
46
- assertEx(minDepth >= 0, () => "minDepth must be greater than or equal to 0");
47
- assertEx(maxDepth >= minDepth, () => "maxDepth must be greater than or equal to minDepth");
48
- const bw = assertEx((await archivist.get([
69
+ }, "hydrateBlock");
70
+
71
+ // src/block/hydrate/transactionsFromHydratedBlock.ts
72
+ import { filterAs } from "@xylabs/array";
73
+ import { asTransactionBoundWitnessWithStorageMeta } from "@xyo-network/xl1-protocol";
74
+ var transactionsFromHydratedBlock = /* @__PURE__ */ __name((block) => {
75
+ return filterAs(block[1], asTransactionBoundWitnessWithStorageMeta);
76
+ }, "transactionsFromHydratedBlock");
77
+
78
+ // src/block/hydrate/tryHydrateBlock.ts
79
+ import { assertEx as assertEx3 } from "@xylabs/assert";
80
+ import { isBlockBoundWitnessWithStorageMeta as isBlockBoundWitnessWithStorageMeta2, isTransactionBoundWitnessWithStorageMeta as isTransactionBoundWitnessWithStorageMeta3 } from "@xyo-network/xl1-protocol";
81
+ var tryHydrateBlock = /* @__PURE__ */ __name(async (archivist, hash, maxDepth = 1) => {
82
+ assertEx3(maxDepth >= 0, () => "maxDepth must be greater than or equal to 0");
83
+ const bw = (await archivist.get([
49
84
  hash
50
- ])).find(isBlockBoundWitnessWithStorageMeta), () => `block ${hash} not found`);
85
+ ])).find(isBlockBoundWitnessWithStorageMeta2);
86
+ if (!bw) return void 0;
51
87
  if (maxDepth === 0) return [
52
88
  bw,
53
89
  []
54
90
  ];
55
91
  const blkPayloads = await archivist.get(bw.payload_hashes);
56
- if (minDepth === 1) assertEx(allHashesPresent(bw.payload_hashes, blkPayloads), () => `Unable to find all payloads for block ${hash}`);
57
92
  if (maxDepth === 1) return [
58
93
  bw,
59
94
  blkPayloads
60
95
  ];
61
- const transactions = blkPayloads.filter(isTransactionBoundWitnessWithStorageMeta);
96
+ const transactions = blkPayloads.filter(isTransactionBoundWitnessWithStorageMeta3);
62
97
  const transactionsPayloadHashes = transactions.flatMap((tx) => tx.payload_hashes);
63
98
  const transactionsPayloads = await archivist.get(transactionsPayloadHashes);
64
- assertEx(allHashesPresent(transactionsPayloadHashes, transactionsPayloads), () => `Unable to find all payloads for transactions in block ${hash}`);
65
99
  const allPayloadsHashes = new Set([
66
100
  ...blkPayloads,
67
101
  ...transactionsPayloads
@@ -70,31 +104,14 @@ var hydrateBlock = /* @__PURE__ */ __name(async (archivist, hash, maxDepth = 1,
70
104
  ...allPayloadsHashes
71
105
  ]);
72
106
  const allPayloadsFiltered = allPayloads.filter((p) => allPayloadsHashes.has(p._hash));
73
- if (maxDepth === 2) assertEx(allHashesPresent([
74
- ...allPayloadsHashes
75
- ], allPayloadsFiltered), () => `Unable to find all payloads for transactions in block ${hash}`);
76
107
  return [
77
108
  bw,
78
109
  allPayloadsFiltered
79
110
  ];
80
- }, "hydrateBlock");
81
- var flattenHydratedBlock = /* @__PURE__ */ __name((hydratedBlock) => {
82
- const [blk, blkPayloads] = hydratedBlock;
83
- return [
84
- ...blkPayloads,
85
- blk
86
- ];
87
- }, "flattenHydratedBlock");
88
- var flattenHydratedBlocks = /* @__PURE__ */ __name((hydratedBlocks) => hydratedBlocks.flatMap((blk) => flattenHydratedBlock(blk)), "flattenHydratedBlocks");
89
- var transactionsFromHydratedBlock = /* @__PURE__ */ __name((block) => {
90
- return filterAs(block[1], asTransactionBoundWitnessWithStorageMeta);
91
- }, "transactionsFromHydratedBlock");
92
- var blockPayloadsFromHydratedBlock = /* @__PURE__ */ __name((block) => {
93
- return block[0].payload_hashes.map((hash) => assertEx(block[1].find((p) => p._hash === hash), () => `missing payload ${hash}`)).filter((x) => !isTransactionBoundWitnessWithStorageMeta(x));
94
- }, "blockPayloadsFromHydratedBlock");
111
+ }, "tryHydrateBlock");
95
112
 
96
- // src/block/primitives/balanceStepSummaryFromRange.ts
97
- import { assertEx as assertEx2 } from "@xylabs/assert";
113
+ // src/block/primitives/balances/balancesStepSummaryFromRange.ts
114
+ import { assertEx as assertEx4 } from "@xylabs/assert";
98
115
  import { PayloadBuilder } from "@xyo-network/payload-builder";
99
116
  import { isAnyPayload } from "@xyo-network/payload-model";
100
117
  import { StepSizes as StepSizes3 } from "@xyo-network/xl1-protocol";
@@ -119,8 +136,36 @@ var netBalancesForPayloads = /* @__PURE__ */ __name((payloads) => {
119
136
  });
120
137
  }, "netBalancesForPayloads");
121
138
 
139
+ // src/payload/netTransfersForPayloads.ts
140
+ import { hexToBigInt as hexToBigInt2 } from "@xylabs/hex";
141
+ import { span as span2 } from "@xylabs/telemetry";
142
+ import { isTransfer as isTransfer2 } from "@xyo-network/xl1-protocol";
143
+ function netTransfersForPayloads(payloads, account) {
144
+ return span2("netTransfersForPayloads", () => {
145
+ const transfers = {};
146
+ for (const payload of payloads) {
147
+ if (isTransfer2(payload)) {
148
+ const { from } = payload;
149
+ for (let [address, amount] of Object.entries(payload.transfers)) {
150
+ if (account === from) {
151
+ if (address !== from) {
152
+ transfers[address] = (transfers[address] ?? 0n) + hexToBigInt2(amount);
153
+ }
154
+ } else {
155
+ if (account === address) {
156
+ transfers[from] = (transfers[from] ?? 0n) - hexToBigInt2(amount);
157
+ }
158
+ }
159
+ }
160
+ }
161
+ }
162
+ return transfers;
163
+ });
164
+ }
165
+ __name(netTransfersForPayloads, "netTransfersForPayloads");
166
+
122
167
  // src/SignedBigInt.ts
123
- import { hexToBigInt as hexToBigInt2, toHex } from "@xylabs/hex";
168
+ import { hexToBigInt as hexToBigInt3, toHex } from "@xylabs/hex";
124
169
  import { isObject } from "@xylabs/object";
125
170
  var isNegativeBigInt = /* @__PURE__ */ __name((value) => {
126
171
  return isObject(value) && "negative" in value && typeof value.negative === "string";
@@ -130,9 +175,9 @@ var isPositiveBigInt = /* @__PURE__ */ __name((value) => {
130
175
  }, "isPositiveBigInt");
131
176
  var parseSignedBigInt = /* @__PURE__ */ __name((value) => {
132
177
  if (isNegativeBigInt(value)) {
133
- return -hexToBigInt2(value.negative);
178
+ return -hexToBigInt3(value.negative);
134
179
  } else if (isPositiveBigInt(value)) {
135
- return hexToBigInt2(value.positive);
180
+ return hexToBigInt3(value.positive);
136
181
  } else {
137
182
  throw new Error("Invalid balance type");
138
183
  }
@@ -225,11 +270,11 @@ function deepCalculateFramesFromRange(range, startingStep = StepSizes.length - 1
225
270
  }
226
271
  __name(deepCalculateFramesFromRange, "deepCalculateFramesFromRange");
227
272
 
228
- // src/block/primitives/hashFromBlockNumber.ts
273
+ // src/block/primitives/blockFromBlockNumber.ts
229
274
  import { asHash } from "@xylabs/hex";
230
275
  import { toSafeJsonString } from "@xylabs/object";
231
276
  import { asBlockBoundWitnessWithStorageMeta, StepSizes as StepSizes2 } from "@xyo-network/xl1-protocol";
232
- async function hashFromBlockNumber(context, blockNumber) {
277
+ async function blockFromBlockNumber(context, blockNumber) {
233
278
  const result = await context.chainArchivist.get([
234
279
  context.head
235
280
  ]);
@@ -259,14 +304,19 @@ async function hashFromBlockNumber(context, blockNumber) {
259
304
  throw new Error(`Block number ${blockNumber} is not a valid step block number for block ${context.head}.`);
260
305
  }
261
306
  }
262
- return currentBlock._hash;
307
+ return currentBlock;
308
+ }
309
+ __name(blockFromBlockNumber, "blockFromBlockNumber");
310
+
311
+ // src/block/primitives/hashFromBlockNumber.ts
312
+ async function hashFromBlockNumber(context, blockNumber) {
313
+ return (await blockFromBlockNumber(context, blockNumber))._hash;
263
314
  }
264
315
  __name(hashFromBlockNumber, "hashFromBlockNumber");
265
316
 
266
- // src/block/primitives/payloads.ts
317
+ // src/block/primitives/payloads/BalancesStepSummary.ts
267
318
  import { AsObjectFactory } from "@xylabs/object";
268
319
  import { isPayloadOfSchemaType, isStorageMeta } from "@xyo-network/payload-model";
269
- var StepSummarySchema = "network.xyo.step.summary";
270
320
  var BalancesStepSummarySchema = "network.xyo.step.summary.balances";
271
321
  var isBalancesStepSummary = isPayloadOfSchemaType(BalancesStepSummarySchema);
272
322
  var asBalancesStepSummary = AsObjectFactory.create(isBalancesStepSummary);
@@ -275,8 +325,22 @@ var isBalancesStepSummaryWithStorageMeta = /* @__PURE__ */ __name((value) => {
275
325
  }, "isBalancesStepSummaryWithStorageMeta");
276
326
  var asBalancesStepSummaryWithStorageMeta = AsObjectFactory.create(isBalancesStepSummaryWithStorageMeta);
277
327
 
278
- // src/block/primitives/balanceStepSummaryFromRange.ts
279
- async function balanceStepSummaryFromRange(context, range) {
328
+ // src/block/primitives/payloads/StepSummary.ts
329
+ var StepSummarySchema = "network.xyo.step.summary";
330
+
331
+ // src/block/primitives/payloads/TransfersSummary.ts
332
+ import { AsObjectFactory as AsObjectFactory2 } from "@xylabs/object";
333
+ import { isPayloadOfSchemaType as isPayloadOfSchemaType2, isStorageMeta as isStorageMeta2 } from "@xyo-network/payload-model";
334
+ var TransfersStepSummarySchema = "network.xyo.step.summary.transfer";
335
+ var isTransfersStepSummary = isPayloadOfSchemaType2(TransfersStepSummarySchema);
336
+ var asTransfersStepSummary = AsObjectFactory2.create(isTransfersStepSummary);
337
+ var isTransfersStepSummaryWithStorageMeta = /* @__PURE__ */ __name((value) => {
338
+ return isTransfersStepSummary(value) && isStorageMeta2(value);
339
+ }, "isTransfersStepSummaryWithStorageMeta");
340
+ var asTransfersStepSummaryWithStorageMeta = AsObjectFactory2.create(isTransfersStepSummaryWithStorageMeta);
341
+
342
+ // src/block/primitives/balances/balancesStepSummaryFromRange.ts
343
+ async function balancesStepSummaryFromRange(context, range) {
280
344
  const frameHeadHash = await hashFromBlockNumber(context, range[1]);
281
345
  const frameSize = range[1] - range[0] + 1;
282
346
  let result = void 0;
@@ -295,7 +359,7 @@ async function balanceStepSummaryFromRange(context, range) {
295
359
  };
296
360
  } else {
297
361
  const step = StepSizes3.indexOf(frameSize);
298
- assertEx2(step !== -1, () => `Invalid step size: ${frameSize}. Must be one of ${StepSizes3.join(", ")}`);
362
+ assertEx4(step !== -1, () => `Invalid step size: ${frameSize}. Must be one of ${StepSizes3.join(", ")}`);
299
363
  const [summaryResult] = await context.summaryRepository.get([
300
364
  frameHeadHash
301
365
  ]);
@@ -303,7 +367,7 @@ async function balanceStepSummaryFromRange(context, range) {
303
367
  result = summaryResult;
304
368
  } else {
305
369
  const subRanges = deepCalculateFramesFromRange(range, step - 1);
306
- const promises = subRanges.map((subRange) => balanceStepSummaryFromRange(context, subRange));
370
+ const promises = subRanges.map((subRange) => balancesStepSummaryFromRange(context, subRange));
307
371
  const subResults = await Promise.all(promises);
308
372
  const bigIntBalances = {};
309
373
  for (const subResult of subResults) {
@@ -329,14 +393,14 @@ async function balanceStepSummaryFromRange(context, range) {
329
393
  const finalResult = await PayloadBuilder.addStorageMeta(result);
330
394
  return finalResult;
331
395
  }
332
- __name(balanceStepSummaryFromRange, "balanceStepSummaryFromRange");
396
+ __name(balancesStepSummaryFromRange, "balancesStepSummaryFromRange");
333
397
 
334
- // src/block/primitives/balanceSummary.ts
398
+ // src/block/primitives/balances/balancesSummary.ts
335
399
  import { asAddress } from "@xylabs/hex";
336
400
  import { spanRootAsync } from "@xylabs/telemetry";
337
401
  import { isDefined } from "@xylabs/typeof";
338
402
  import { asBlockBoundWitnessWithStorageMeta as asBlockBoundWitnessWithStorageMeta2 } from "@xyo-network/xl1-protocol";
339
- async function balanceSummary(context) {
403
+ async function balancesSummary(context) {
340
404
  return await spanRootAsync("balanceSummary", async () => {
341
405
  const headResult = await context.chainArchivist.get([
342
406
  context.head
@@ -349,7 +413,7 @@ async function balanceSummary(context) {
349
413
  rangeStart,
350
414
  headBoundWitness.block
351
415
  ]);
352
- const summaries = await Promise.all(ranges.map((range) => balanceStepSummaryFromRange(context, range)));
416
+ const summaries = await Promise.all(ranges.map((range) => balancesStepSummaryFromRange(context, range)));
353
417
  const balances = {};
354
418
  for (let summary of summaries) {
355
419
  for (const [address, balance] of Object.entries(summary.balances)) {
@@ -360,7 +424,101 @@ async function balanceSummary(context) {
360
424
  return balances;
361
425
  });
362
426
  }
363
- __name(balanceSummary, "balanceSummary");
427
+ __name(balancesSummary, "balancesSummary");
428
+
429
+ // src/block/primitives/transfers/transfersStepSummaryFromRange.ts
430
+ import { assertEx as assertEx5 } from "@xylabs/assert";
431
+ import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
432
+ import { isAnyPayload as isAnyPayload2 } from "@xyo-network/payload-model";
433
+ import { StepSizes as StepSizes4 } from "@xyo-network/xl1-protocol";
434
+ async function transfersStepSummaryFromRange(context, range) {
435
+ const frameHeadHash = await hashFromBlockNumber(context, range[1]);
436
+ const frameSize = range[1] - range[0] + 1;
437
+ const { account } = context;
438
+ let result = void 0;
439
+ if (frameSize === 1) {
440
+ const hash = await hashFromBlockNumber(context, range[0]);
441
+ const [, payloads] = await hydrateBlock(context.chainArchivist, hash);
442
+ const transfers = {};
443
+ for (const [address, balance] of Object.entries(netTransfersForPayloads(payloads, account))) {
444
+ transfers[address] = toSignedBigInt(balance);
445
+ }
446
+ result = {
447
+ schema: TransfersStepSummarySchema,
448
+ hash: context.head,
449
+ stepSize: -1,
450
+ transfers,
451
+ account
452
+ };
453
+ } else {
454
+ const step = StepSizes4.indexOf(frameSize);
455
+ assertEx5(step !== -1, () => `Invalid step size: ${frameSize}. Must be one of ${StepSizes4.join(", ")}`);
456
+ const [summaryResult] = await context.summaryRepository.get([
457
+ frameHeadHash
458
+ ]);
459
+ if (isAnyPayload2(summaryResult)) {
460
+ result = summaryResult;
461
+ } else {
462
+ const subRanges = deepCalculateFramesFromRange(range, step - 1);
463
+ const promises = subRanges.map((subRange) => transfersStepSummaryFromRange(context, subRange));
464
+ const subResults = await Promise.all(promises);
465
+ const bigIntBalances = {};
466
+ for (const subResult of subResults) {
467
+ for (const [address, transfer] of Object.entries(subResult.transfers)) {
468
+ bigIntBalances[address] = (bigIntBalances[address] ?? 0n) + parseSignedBigInt(transfer);
469
+ }
470
+ }
471
+ const transfers = {};
472
+ for (const [address, transfer] of Object.entries(bigIntBalances)) {
473
+ transfers[address] = toSignedBigInt(transfer);
474
+ }
475
+ result = {
476
+ schema: TransfersStepSummarySchema,
477
+ hash: frameHeadHash,
478
+ stepSize: frameSize,
479
+ transfers,
480
+ account
481
+ };
482
+ await context.summaryRepository.insert([
483
+ result
484
+ ]);
485
+ }
486
+ }
487
+ const finalResult = await PayloadBuilder2.addStorageMeta(result);
488
+ return finalResult;
489
+ }
490
+ __name(transfersStepSummaryFromRange, "transfersStepSummaryFromRange");
491
+
492
+ // src/block/primitives/transfers/transfersSummary.ts
493
+ import { asAddress as asAddress2 } from "@xylabs/hex";
494
+ import { spanRootAsync as spanRootAsync2 } from "@xylabs/telemetry";
495
+ import { isDefined as isDefined2 } from "@xylabs/typeof";
496
+ import { asBlockBoundWitnessWithStorageMeta as asBlockBoundWitnessWithStorageMeta3 } from "@xyo-network/xl1-protocol";
497
+ async function transfersSummary(context) {
498
+ return await spanRootAsync2("transferSummary", async () => {
499
+ const headResult = await context.chainArchivist.get([
500
+ context.head
501
+ ]);
502
+ const headBoundWitness = asBlockBoundWitnessWithStorageMeta3(headResult.at(0), () => `Head block not found for hash: ${context.head}`, {
503
+ required: true
504
+ });
505
+ const rangeStart = isDefined2(context.windowSize) ? Math.max(headBoundWitness.block - context.windowSize + 1, 0) : 0;
506
+ const ranges = deepCalculateFramesFromRange([
507
+ rangeStart,
508
+ headBoundWitness.block
509
+ ]);
510
+ const summaries = await Promise.all(ranges.map((range) => transfersStepSummaryFromRange(context, range)));
511
+ const transfers = {};
512
+ for (let summary of summaries) {
513
+ for (const [address, transfer] of Object.entries(summary.transfers)) {
514
+ const validAddress = asAddress2(address, () => `Invalid address: ${address}`);
515
+ transfers[validAddress] = (transfers[validAddress] ?? 0n) + parseSignedBigInt(transfer);
516
+ }
517
+ }
518
+ return transfers;
519
+ });
520
+ }
521
+ __name(transfersSummary, "transfersSummary");
364
522
 
365
523
  // src/config/Config.ts
366
524
  import * as z11 from "zod";
@@ -493,9 +651,20 @@ var LogConfigZod = z6.object({
493
651
  });
494
652
 
495
653
  // src/config/Producer.ts
654
+ import { AddressZod, asAddress as asAddress3 } from "@xylabs/hex";
496
655
  import { globalRegistry as globalRegistry6 } from "zod";
497
656
  import * as z7 from "zod";
498
657
  var ProducerConfigZod = z7.object({
658
+ allowlist: z7.preprocess((val) => {
659
+ if (typeof val === "string") {
660
+ return val.split(",").map((s) => asAddress3(s.trim()));
661
+ }
662
+ return val;
663
+ }, z7.array(AddressZod).optional().register(globalRegistry6, {
664
+ description: "List of allowed producer addresses, if undefined anyone can participate",
665
+ title: "allowlist",
666
+ type: "array"
667
+ })),
499
668
  disableIntentRedeclaration: z7.boolean().optional().register(globalRegistry6, {
500
669
  description: "Should the producer skip redeclaring their intent to continue producing blocks",
501
670
  title: "producer.disableIntentRedeclaration",
@@ -507,6 +676,11 @@ var ProducerConfigZod = z7.object({
507
676
  title: "producer.healthCheckPort",
508
677
  type: "number"
509
678
  }),
679
+ heartbeatInterval: z7.coerce.number().default(36e5).register(globalRegistry6, {
680
+ description: "The number of milliseconds between heartbeats if no blocks are produced",
681
+ title: "producer.heartbeatInterval",
682
+ type: "number"
683
+ }),
510
684
  // TODO: BigInt schema
511
685
  minStake: z7.coerce.number().default(1).register(globalRegistry6, {
512
686
  description: "Minimum stake required to be a Producer",
@@ -534,12 +708,12 @@ var ProducerConfigZod = z7.object({
534
708
  });
535
709
 
536
710
  // src/config/storage/driver/Mongo.ts
537
- import { isDefined as isDefined2, isUndefined } from "@xylabs/typeof";
711
+ import { isDefined as isDefined3, isUndefined } from "@xylabs/typeof";
538
712
  import { globalRegistry as globalRegistry7 } from "zod";
539
713
  import * as z8 from "zod";
540
714
  var hasMongoConfig = /* @__PURE__ */ __name((config) => {
541
715
  if (isUndefined(config)) return false;
542
- return isDefined2(config.connectionString) && isDefined2(config.database) && isDefined2(config.domain) && isDefined2(config.password) && isDefined2(config.username);
716
+ return isDefined3(config.connectionString) && isDefined3(config.database) && isDefined3(config.domain) && isDefined3(config.password) && isDefined3(config.username);
543
717
  }, "hasMongoConfig");
544
718
  var MongoConfigZod = z8.object({
545
719
  // TODO: Create from other arguments
@@ -651,11 +825,232 @@ function isUsageMeta(v) {
651
825
  }
652
826
  __name(isUsageMeta, "isUsageMeta");
653
827
 
828
+ // src/steps/primitives/addressStakeWeight.ts
829
+ import { toAddress as toAddress2 } from "@xylabs/hex";
830
+ import { XYO_NETWORK_STAKING_ADDRESS } from "@xyo-network/xl1-protocol";
831
+ async function addressStakeWeight(stakeContract, staked, by, startEthBlock, endEthBlock) {
832
+ const stakeAddedFilter = stakeContract.filters.StakeAdded(`0x${XYO_NETWORK_STAKING_ADDRESS}`, by);
833
+ const stakeAddedEvents = await stakeContract.queryFilter(stakeAddedFilter, startEthBlock, endEthBlock);
834
+ const stakeRemovedFilter = stakeContract.filters.StakeRemoved(`0x${XYO_NETWORK_STAKING_ADDRESS}`, by);
835
+ const stakeRemovedEvents = await stakeContract.queryFilter(stakeRemovedFilter, startEthBlock, endEthBlock);
836
+ const accountStakes = [];
837
+ const accountStakeCount = await stakeContract.getStakeCountForAddress(`0x${by}`, {
838
+ blockTag: startEthBlock - 1
839
+ });
840
+ for (let i = 0; i < accountStakeCount; i++) {
841
+ try {
842
+ const stake = await stakeContract.getStake(`0x${by}`, i, {
843
+ blockTag: startEthBlock - 1
844
+ });
845
+ accountStakes.push(stake);
846
+ } catch {
847
+ break;
848
+ }
849
+ }
850
+ const ethStakedAddress = toAddress2(staked, {
851
+ prefix: false
852
+ }).toLowerCase();
853
+ const networkStakes = accountStakes.filter((s) => s.staked.toLowerCase() === ethStakedAddress);
854
+ let totalStake = 0n;
855
+ for (const stake of networkStakes) {
856
+ totalStake += stake.amount;
857
+ }
858
+ let totalWeight = 0n;
859
+ let addIndex = 0;
860
+ let removeIndex = 0;
861
+ for (let i = startEthBlock; i <= endEthBlock; i++) {
862
+ while (addIndex < stakeAddedEvents.length && stakeAddedEvents[addIndex]?.blockNumber === i) {
863
+ totalStake += stakeAddedEvents[addIndex].args.amount;
864
+ addIndex++;
865
+ }
866
+ while (removeIndex < stakeRemovedEvents.length && stakeRemovedEvents[removeIndex]?.blockNumber === i) {
867
+ totalStake -= stakeRemovedEvents[removeIndex].args.amount;
868
+ removeIndex++;
869
+ }
870
+ totalWeight += totalStake;
871
+ }
872
+ return totalWeight;
873
+ }
874
+ __name(addressStakeWeight, "addressStakeWeight");
875
+
876
+ // src/steps/primitives/claimedRewards.ts
877
+ function claimedRewards(_address) {
878
+ return 0n;
879
+ }
880
+ __name(claimedRewards, "claimedRewards");
881
+
882
+ // src/steps/primitives/networkStakeStepAddressReward.ts
883
+ function networkStakeStepAddressReward(address, step, block) {
884
+ return {
885
+ [address]: 0n
886
+ };
887
+ }
888
+ __name(networkStakeStepAddressReward, "networkStakeStepAddressReward");
889
+
890
+ // src/steps/primitives/networkStakeStepPoolRewards.ts
891
+ function networkStakeStepPoolRewards(step, block) {
892
+ return {};
893
+ }
894
+ __name(networkStakeStepPoolRewards, "networkStakeStepPoolRewards");
895
+
896
+ // src/steps/primitives/networkStakeStepPoolRewardShares.ts
897
+ function networkStakeStepPoolRewardShares(step, block) {
898
+ return {};
899
+ }
900
+ __name(networkStakeStepPoolRewardShares, "networkStakeStepPoolRewardShares");
901
+
902
+ // src/steps/primitives/networkStakeStepRewardAddressHistory.ts
903
+ function networkStakeStepRewardAddressHistory(address) {
904
+ return {
905
+ [address]: 0n
906
+ };
907
+ }
908
+ __name(networkStakeStepRewardAddressHistory, "networkStakeStepRewardAddressHistory");
909
+
910
+ // src/steps/primitives/networkStakeStepRewardAddressShare.ts
911
+ function networkStakeStepRewardAddressShare(address, step, block) {
912
+ throw new Error("Method not implemented.");
913
+ }
914
+ __name(networkStakeStepRewardAddressShare, "networkStakeStepRewardAddressShare");
915
+
916
+ // src/steps/primitives/networkStakeStepRewardForStep.ts
917
+ function networkStakeStepRewardForStep(step) {
918
+ return 0n;
919
+ }
920
+ __name(networkStakeStepRewardForStep, "networkStakeStepRewardForStep");
921
+
922
+ // src/steps/primitives/networkStakeStepRewardPositionWeight.ts
923
+ function networkStakeStepRewardPositionWeight(position, step) {
924
+ throw new Error("Method not implemented.");
925
+ }
926
+ __name(networkStakeStepRewardPositionWeight, "networkStakeStepRewardPositionWeight");
927
+
928
+ // src/steps/primitives/networkStakeStepRewardPotentialPositionLoss.ts
929
+ function networkStakeStepRewardPotentialPositionLoss(position, step) {
930
+ throw new Error("Method not implemented.");
931
+ }
932
+ __name(networkStakeStepRewardPotentialPositionLoss, "networkStakeStepRewardPotentialPositionLoss");
933
+
934
+ // src/steps/primitives/networkStakeStepRewardRandomizer.ts
935
+ function networkStakeStepRewardRandomizer(step, block) {
936
+ throw new Error("Method not implemented.");
937
+ }
938
+ __name(networkStakeStepRewardRandomizer, "networkStakeStepRewardRandomizer");
939
+
940
+ // src/steps/primitives/networkStakeStepRewardWeightForAddress.ts
941
+ function networkStakeStepRewardWeightForAddress(address, step) {
942
+ throw new Error("Method not implemented.");
943
+ }
944
+ __name(networkStakeStepRewardWeightForAddress, "networkStakeStepRewardWeightForAddress");
945
+
946
+ // src/steps/primitives/stakersAsOfBlock.ts
947
+ import { toAddress as toAddress4 } from "@xylabs/hex";
948
+
949
+ // src/steps/primitives/startingStakes.ts
950
+ import { toAddress as toAddress3 } from "@xylabs/hex";
951
+ import { XYO_NETWORK_STAKING_ADDRESS as XYO_NETWORK_STAKING_ADDRESS2 } from "@xyo-network/xl1-protocol";
952
+ async function startingStakes(stakeContract, staked, ethBlock) {
953
+ const stakeAddedFilter = stakeContract.filters.StakeAdded(toAddress3(XYO_NETWORK_STAKING_ADDRESS2, {
954
+ prefix: true
955
+ }));
956
+ const stakeAddedEvents = await stakeContract.queryFilter(stakeAddedFilter, 0, ethBlock);
957
+ const stakeRemovedFilter = stakeContract.filters.StakeRemoved(`0x${XYO_NETWORK_STAKING_ADDRESS2}`);
958
+ const stakeRemovedEvents = await stakeContract.queryFilter(stakeRemovedFilter, 0, ethBlock);
959
+ const stakes = {};
960
+ for (const event of stakeAddedEvents) {
961
+ const by = toAddress3(event.args.by.toLowerCase(), {
962
+ prefix: false
963
+ });
964
+ stakes[by] = (stakes[by] ?? 0n) + event.args.amount;
965
+ }
966
+ for (const event of stakeRemovedEvents) {
967
+ const by = toAddress3(event.args.by.toLowerCase(), {
968
+ prefix: false
969
+ });
970
+ stakes[by] = (stakes[by] ?? 0n) - event.args.amount;
971
+ }
972
+ const filteredStakes = {};
973
+ for (const [address, amount] of Object.entries(stakes)) {
974
+ if (amount > 0n) {
975
+ filteredStakes[address] = amount;
976
+ }
977
+ }
978
+ return filteredStakes;
979
+ }
980
+ __name(startingStakes, "startingStakes");
981
+
982
+ // src/steps/primitives/stakersAsOfBlock.ts
983
+ async function stakersAsOfBlock(stakeContract, staked, ethBlock) {
984
+ const stakes = await startingStakes(stakeContract, staked, ethBlock);
985
+ let results = [];
986
+ for (const [address, amount] of Object.entries(stakes)) {
987
+ if (amount > 0n) {
988
+ results.push(toAddress4(address, {
989
+ prefix: false
990
+ }));
991
+ }
992
+ }
993
+ return results;
994
+ }
995
+ __name(stakersAsOfBlock, "stakersAsOfBlock");
996
+
997
+ // src/steps/primitives/totalStakeWeight.ts
998
+ import { toAddress as toAddress5 } from "@xylabs/hex";
999
+ import { XYO_NETWORK_STAKING_ADDRESS as XYO_NETWORK_STAKING_ADDRESS3 } from "@xyo-network/xl1-protocol";
1000
+ async function totalStakeWeight(stakeContract, staked, startEthBlock, endEthBlock) {
1001
+ const stakeAddedFilter = stakeContract.filters.StakeAdded(`0x${XYO_NETWORK_STAKING_ADDRESS3}`);
1002
+ const stakeAddedEvents = await stakeContract.queryFilter(stakeAddedFilter, startEthBlock, endEthBlock);
1003
+ const stakeRemovedFilter = stakeContract.filters.StakeRemoved(`0x${XYO_NETWORK_STAKING_ADDRESS3}`);
1004
+ const stakeRemovedEvents = await stakeContract.queryFilter(stakeRemovedFilter, startEthBlock, endEthBlock);
1005
+ const stakes = await startingStakes(stakeContract, staked, startEthBlock);
1006
+ let totalWeight = 0n;
1007
+ let addIndex = 0;
1008
+ let removeIndex = 0;
1009
+ for (let i = startEthBlock; i <= endEthBlock; i++) {
1010
+ while (addIndex < stakeAddedEvents.length && stakeAddedEvents[addIndex]?.blockNumber === i) {
1011
+ const by = toAddress5(stakeAddedEvents[addIndex].args.by.toLowerCase(), {
1012
+ prefix: false
1013
+ });
1014
+ stakes[by] = (stakes[by] ?? 0n) + stakeAddedEvents[addIndex].args.amount;
1015
+ addIndex++;
1016
+ }
1017
+ while (removeIndex < stakeRemovedEvents.length && stakeRemovedEvents[removeIndex]?.blockNumber === i) {
1018
+ const by = toAddress5(stakeAddedEvents[addIndex].args.by.toLowerCase(), {
1019
+ prefix: false
1020
+ });
1021
+ stakes[by] = (stakes[by] ?? 0n) - stakeRemovedEvents[addIndex].args.amount;
1022
+ removeIndex++;
1023
+ }
1024
+ totalWeight += Object.values(stakes).reduce((a, b) => a + b, 0n);
1025
+ }
1026
+ return totalWeight;
1027
+ }
1028
+ __name(totalStakeWeight, "totalStakeWeight");
1029
+
1030
+ // src/steps/primitives/unclaimedRewards.ts
1031
+ function unclaimedRewards(address) {
1032
+ throw new Error("Method not implemented.");
1033
+ }
1034
+ __name(unclaimedRewards, "unclaimedRewards");
1035
+
1036
+ // src/time/primitives/xl1BlockNumberToEthBlockNumber.ts
1037
+ import { assertEx as assertEx6 } from "@xylabs/assert";
1038
+ import { asTimePayload, TimeSchema } from "@xyo-network/xl1-protocol";
1039
+ async function xl1BlockNumberToEthBlockNumber(context, xl1BlockNumber) {
1040
+ const blockHash = await hashFromBlockNumber(context, xl1BlockNumber);
1041
+ const hydratedBlock = await hydrateBlock(context.chainArchivist, blockHash);
1042
+ const timePayload = asTimePayload(hydratedBlock[1].find((p) => p.schema === TimeSchema), {
1043
+ required: true
1044
+ });
1045
+ return assertEx6(timePayload.ethereum, () => "No ethereum timestamp found on block");
1046
+ }
1047
+ __name(xl1BlockNumberToEthBlockNumber, "xl1BlockNumberToEthBlockNumber");
1048
+
654
1049
  // src/transaction/buildTransaction.ts
655
- import { assertEx as assertEx3 } from "@xylabs/assert";
1050
+ import { assertEx as assertEx7 } from "@xylabs/assert";
656
1051
  import { toHex as toHex2 } from "@xylabs/hex";
657
1052
  import { BoundWitnessBuilder } from "@xyo-network/boundwitness-builder";
658
- import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
1053
+ import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder";
659
1054
  import { defaultTransactionFees } from "@xyo-network/xl1-protocol";
660
1055
  async function buildTransaction(chain, onChainPayloads, offChainPayloads, signer, nbf, exp, from, fees = defaultTransactionFees) {
661
1056
  if (from === void 0 && Array.isArray(signer)) {
@@ -672,14 +1067,14 @@ async function buildTransaction(chain, onChainPayloads, offChainPayloads, signer
672
1067
  nbf,
673
1068
  exp
674
1069
  };
675
- const elevatedHashes = await PayloadBuilder2.hashes(onChainPayloads);
1070
+ const elevatedHashes = await PayloadBuilder3.hashes(onChainPayloads);
676
1071
  const script = [];
677
1072
  for (const elevatedHash of elevatedHashes) {
678
1073
  script.push(`elevate|${elevatedHash}`);
679
1074
  }
680
1075
  const fields = {
681
1076
  ...txBoundWitnessFields,
682
- from: from ?? (Array.isArray(signer) ? assertEx3(signer.at(0)?.address) : signer.address)
1077
+ from: from ?? (Array.isArray(signer) ? assertEx7(signer.at(0)?.address) : signer.address)
683
1078
  };
684
1079
  if (script.length > 0) {
685
1080
  fields.script = script;
@@ -693,8 +1088,8 @@ async function buildTransaction(chain, onChainPayloads, offChainPayloads, signer
693
1088
  signer
694
1089
  ]).build();
695
1090
  return [
696
- await PayloadBuilder2.addStorageMeta(tx),
697
- await PayloadBuilder2.addStorageMeta(txPayloads)
1091
+ await PayloadBuilder3.addStorageMeta(tx),
1092
+ await PayloadBuilder3.addStorageMeta(txPayloads)
698
1093
  ];
699
1094
  }
700
1095
  __name(buildTransaction, "buildTransaction");
@@ -702,7 +1097,7 @@ __name(buildTransaction, "buildTransaction");
702
1097
  // src/transaction/buildUnsignedTransaction.ts
703
1098
  import { toHex as toHex3 } from "@xylabs/hex";
704
1099
  import { BoundWitnessBuilder as BoundWitnessBuilder2 } from "@xyo-network/boundwitness-builder";
705
- import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder";
1100
+ import { PayloadBuilder as PayloadBuilder4 } from "@xyo-network/payload-builder";
706
1101
  import { defaultTransactionFees as defaultTransactionFees2 } from "@xyo-network/xl1-protocol";
707
1102
  async function buildUnsignedTransaction(chain, onChainPayloads, offChainPayloads, nbf, exp, from, fees = defaultTransactionFees2) {
708
1103
  const txBoundWitnessFields = {
@@ -716,7 +1111,7 @@ async function buildUnsignedTransaction(chain, onChainPayloads, offChainPayloads
716
1111
  nbf,
717
1112
  exp
718
1113
  };
719
- const elevatedHashes = await PayloadBuilder3.hashes(onChainPayloads);
1114
+ const elevatedHashes = await PayloadBuilder4.hashes(onChainPayloads);
720
1115
  const script = [];
721
1116
  for (const elevatedHash of elevatedHashes) {
722
1117
  script.push(`elevate|${elevatedHash}`);
@@ -735,26 +1130,26 @@ async function buildUnsignedTransaction(chain, onChainPayloads, offChainPayloads
735
1130
  ...offChainPayloads
736
1131
  ]).build();
737
1132
  return [
738
- await PayloadBuilder3.addStorageMeta(tx),
739
- await PayloadBuilder3.addStorageMeta(txPayloads)
1133
+ await PayloadBuilder4.addStorageMeta(tx),
1134
+ await PayloadBuilder4.addStorageMeta(txPayloads)
740
1135
  ];
741
1136
  }
742
1137
  __name(buildUnsignedTransaction, "buildUnsignedTransaction");
743
1138
 
744
1139
  // src/transaction/confirmSubmittedTransaction.ts
745
1140
  import { delay } from "@xylabs/delay";
746
- import { isDefined as isDefined3 } from "@xylabs/typeof";
747
- import { PayloadBuilder as PayloadBuilder4 } from "@xyo-network/payload-builder";
1141
+ import { isDefined as isDefined4 } from "@xylabs/typeof";
1142
+ import { PayloadBuilder as PayloadBuilder5 } from "@xyo-network/payload-builder";
748
1143
  var DEFAULT_CONFIRMATION_ATTEMPTS = 20;
749
1144
  var DEFAULT_DELAY_BETWEEN_ATTEMPTS = 1e3;
750
1145
  var confirmSubmittedTransaction = /* @__PURE__ */ __name(async (viewer, transaction, options) => {
751
1146
  const { attempts: maxAttempts = DEFAULT_CONFIRMATION_ATTEMPTS, delay: attemptDelay = DEFAULT_DELAY_BETWEEN_ATTEMPTS } = options || {};
752
- const txBWHash = await PayloadBuilder4.hash(transaction);
1147
+ const txBWHash = await PayloadBuilder5.hash(transaction);
753
1148
  options?.logger?.log("\u{1F680} confirming transaction:", txBWHash, "\n");
754
1149
  let attempts = 0;
755
1150
  while (true) {
756
1151
  const tx = await viewer.transactionByHash(txBWHash) ?? void 0;
757
- if (isDefined3(tx)) {
1152
+ if (isDefined4(tx)) {
758
1153
  options?.logger?.log("\u2705 Transaction confirmed:", txBWHash, "\n");
759
1154
  return tx;
760
1155
  } else {
@@ -771,7 +1166,7 @@ var confirmSubmittedTransaction = /* @__PURE__ */ __name(async (viewer, transact
771
1166
  }, "confirmSubmittedTransaction");
772
1167
 
773
1168
  // src/transaction/hydrateTransaction.ts
774
- import { assertEx as assertEx4 } from "@xylabs/assert";
1169
+ import { assertEx as assertEx8 } from "@xylabs/assert";
775
1170
  import { hydrateTypedBoundWitness, tryHydrateTypedBoundWitness } from "@xyo-network/archivist-model";
776
1171
  import { isAllowedBlockPayload, isSignedTransactionBoundWitnessWithStorageMeta } from "@xyo-network/xl1-protocol";
777
1172
  var tryHydrateTransaction = /* @__PURE__ */ __name(async (archivist, hash) => {
@@ -814,15 +1209,15 @@ var tryHydrateElevatedTransaction = /* @__PURE__ */ __name(async (archivist, has
814
1209
  return void 0;
815
1210
  }, "tryHydrateElevatedTransaction");
816
1211
  var hydrateElevatedTransaction = /* @__PURE__ */ __name(async (archivist, hash) => {
817
- return assertEx4(await tryHydrateElevatedTransaction(archivist, hash), () => "Hydration failed");
1212
+ return assertEx8(await tryHydrateElevatedTransaction(archivist, hash), () => "Hydration failed");
818
1213
  }, "hydrateElevatedTransaction");
819
1214
 
820
1215
  // src/transaction/primitives/transactionBlockByteCount.ts
821
- import { PayloadBuilder as PayloadBuilder5 } from "@xyo-network/payload-builder";
1216
+ import { PayloadBuilder as PayloadBuilder6 } from "@xyo-network/payload-builder";
822
1217
  function transactionBlockByteCount([transaction, payloads]) {
823
- const cleanTransaction = PayloadBuilder5.omitStorageMeta(transaction);
1218
+ const cleanTransaction = PayloadBuilder6.omitStorageMeta(transaction);
824
1219
  const transactionBytes = JSON.stringify(cleanTransaction).length;
825
- const cleanPayloads = PayloadBuilder5.omitStorageMeta(payloads);
1220
+ const cleanPayloads = PayloadBuilder6.omitStorageMeta(payloads);
826
1221
  return cleanPayloads.reduce((acc, payload) => acc + JSON.stringify(payload).length, 0) + transactionBytes;
827
1222
  }
828
1223
  __name(transactionBlockByteCount, "transactionBlockByteCount");
@@ -880,7 +1275,7 @@ __name(transactionRequiredGas, "transactionRequiredGas");
880
1275
 
881
1276
  // src/transaction/script.ts
882
1277
  import { filterAs as filterAs2 } from "@xylabs/array";
883
- import { assertEx as assertEx5 } from "@xylabs/assert";
1278
+ import { assertEx as assertEx9 } from "@xylabs/assert";
884
1279
  import { asHash as asHash3 } from "@xylabs/hex";
885
1280
  import { isAllowedBlockPayloadWithHashStorageMeta } from "@xyo-network/xl1-protocol";
886
1281
  var tryExtractElevatedHashesFromScript = /* @__PURE__ */ __name((strings) => {
@@ -890,7 +1285,7 @@ var tryExtractElevatedHashesFromScript = /* @__PURE__ */ __name((strings) => {
890
1285
  var extractElevatedHashesFromScript = /* @__PURE__ */ __name((strings) => {
891
1286
  const hashes = strings.filter((str) => str.startsWith("elevate|")).map((str) => str.split("|")[1]);
892
1287
  const filtered = filterAs2(hashes, (h) => asHash3(h));
893
- assertEx5(filtered.length === hashes.length, () => "Invalid elevated hashes");
1288
+ assertEx9(filtered.length === hashes.length, () => "Invalid elevated hashes");
894
1289
  return filtered;
895
1290
  }, "extractElevatedHashesFromScript");
896
1291
  var tryExtractElevatedHashes = /* @__PURE__ */ __name((tx) => {
@@ -904,17 +1299,17 @@ var extractElevatedHashes = /* @__PURE__ */ __name((tx) => {
904
1299
  const { script } = bw;
905
1300
  const hashes = script ? tryExtractElevatedHashesFromScript(script) : [];
906
1301
  const filtered = payloads.filter((p) => hashes.includes(p._hash)).filter(isAllowedBlockPayloadWithHashStorageMeta);
907
- assertEx5(filtered.length === hashes.length, () => "Invalid elevated hashes");
1302
+ assertEx9(filtered.length === hashes.length, () => "Invalid elevated hashes");
908
1303
  return filtered;
909
1304
  }, "extractElevatedHashes");
910
1305
 
911
1306
  // src/transaction/signTransaction.ts
912
1307
  import { toArrayBuffer } from "@xylabs/arraybuffer";
913
- import { assertEx as assertEx6 } from "@xylabs/assert";
1308
+ import { assertEx as assertEx10 } from "@xylabs/assert";
914
1309
  import { hexFromArrayBuffer } from "@xylabs/hex";
915
- import { PayloadBuilder as PayloadBuilder6 } from "@xyo-network/payload-builder";
1310
+ import { PayloadBuilder as PayloadBuilder7 } from "@xyo-network/payload-builder";
916
1311
  async function signTransaction(tx, account) {
917
- assertEx6(tx.from === account.address, () => "Signer address does not match transaction from address");
1312
+ assertEx10(tx.from === account.address, () => "Signer address does not match transaction from address");
918
1313
  const signedTx = structuredClone(tx);
919
1314
  signedTx.addresses = [
920
1315
  account.address
@@ -922,7 +1317,7 @@ async function signTransaction(tx, account) {
922
1317
  signedTx.previous_hashes = [
923
1318
  account.previousHash ?? null
924
1319
  ];
925
- const hash = await PayloadBuilder6.dataHash(signedTx);
1320
+ const hash = await PayloadBuilder7.dataHash(signedTx);
926
1321
  const hashBytes = toArrayBuffer(hash);
927
1322
  const [signature] = await account.sign(hashBytes);
928
1323
  signedTx.$signatures = [
@@ -972,18 +1367,24 @@ export {
972
1367
  MnemonicStringZod,
973
1368
  StepSummarySchema,
974
1369
  TODO,
1370
+ TransfersStepSummarySchema,
975
1371
  UsageMetaSchema,
976
1372
  WALLET_COMPLIANCE,
977
1373
  Xl1CommonConfigSchema,
1374
+ addressStakeWeight,
978
1375
  allHashesPresent,
979
1376
  asBalancesStepSummary,
980
1377
  asBalancesStepSummaryWithStorageMeta,
981
- balanceStepSummaryFromRange,
982
- balanceSummary,
1378
+ asTransfersStepSummary,
1379
+ asTransfersStepSummaryWithStorageMeta,
1380
+ balancesStepSummaryFromRange,
1381
+ balancesSummary,
1382
+ blockFromBlockNumber,
983
1383
  blockPayloadsFromHydratedBlock,
984
1384
  buildTransaction,
985
1385
  buildUnsignedTransaction,
986
1386
  calculateFramesFromRange,
1387
+ claimedRewards,
987
1388
  confirmSubmittedTransaction,
988
1389
  crackOperation,
989
1390
  crackOperations,
@@ -1007,22 +1408,42 @@ export {
1007
1408
  isLocalhost,
1008
1409
  isNegativeBigInt,
1009
1410
  isPositiveBigInt,
1411
+ isTransfersStepSummary,
1412
+ isTransfersStepSummaryWithStorageMeta,
1010
1413
  isUsageMeta,
1011
1414
  netBalancesForPayloads,
1415
+ netTransfersForPayloads,
1416
+ networkStakeStepAddressReward,
1417
+ networkStakeStepPoolRewardShares,
1418
+ networkStakeStepPoolRewards,
1419
+ networkStakeStepRewardAddressHistory,
1420
+ networkStakeStepRewardAddressShare,
1421
+ networkStakeStepRewardForStep,
1422
+ networkStakeStepRewardPositionWeight,
1423
+ networkStakeStepRewardPotentialPositionLoss,
1424
+ networkStakeStepRewardRandomizer,
1425
+ networkStakeStepRewardWeightForAddress,
1012
1426
  parseSignedBigInt,
1013
1427
  signTransaction,
1428
+ stakersAsOfBlock,
1429
+ startingStakes,
1014
1430
  toPositiveBigInt,
1015
1431
  toSignedBigInt,
1432
+ totalStakeWeight,
1016
1433
  transactionBlockByteCount,
1017
1434
  transactionBytesRequiredGas,
1018
1435
  transactionElevatedPayloadHashes,
1019
1436
  transactionElevatedPayloads,
1020
1437
  transactionRequiredGas,
1021
1438
  transactionsFromHydratedBlock,
1439
+ transfersStepSummaryFromRange,
1440
+ transfersSummary,
1022
1441
  tryExtractElevatedHashes,
1023
1442
  tryExtractElevatedHashesFromScript,
1024
1443
  tryHydrateBlock,
1025
1444
  tryHydrateElevatedTransaction,
1026
- tryHydrateTransaction
1445
+ tryHydrateTransaction,
1446
+ unclaimedRewards,
1447
+ xl1BlockNumberToEthBlockNumber
1027
1448
  };
1028
1449
  //# sourceMappingURL=index.mjs.map