@xyo-network/xl1-protocol-sdk 1.17.7 → 1.18.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (255) hide show
  1. package/dist/neutral/CreatableProvider/AbstractCreatableProvider.d.ts +103 -1
  2. package/dist/neutral/CreatableProvider/AbstractCreatableProvider.d.ts.map +1 -1
  3. package/dist/neutral/CreatableProvider/CreatableProvider.d.ts +25 -8
  4. package/dist/neutral/CreatableProvider/CreatableProvider.d.ts.map +1 -1
  5. package/dist/neutral/CreatableProvider/CreatableProviderRegistry.d.ts.map +1 -1
  6. package/dist/neutral/CreatableProvider/ProviderFactory.d.ts +11 -3
  7. package/dist/neutral/CreatableProvider/ProviderFactory.d.ts.map +1 -1
  8. package/dist/neutral/CreatableProvider/ProviderFactoryLocator.d.ts +19 -13
  9. package/dist/neutral/CreatableProvider/ProviderFactoryLocator.d.ts.map +1 -1
  10. package/dist/neutral/CreatableProvider/ProviderFactoryLocatorInstance.d.ts +14 -10
  11. package/dist/neutral/CreatableProvider/ProviderFactoryLocatorInstance.d.ts.map +1 -1
  12. package/dist/neutral/config/Bridge.d.ts +3 -0
  13. package/dist/neutral/config/Bridge.d.ts.map +1 -1
  14. package/dist/neutral/config/Chain.d.ts +1 -1
  15. package/dist/neutral/config/Config.d.ts +6 -3
  16. package/dist/neutral/config/Config.d.ts.map +1 -1
  17. package/dist/neutral/config/Log.d.ts +1 -1
  18. package/dist/neutral/createDeclarationPayload.d.ts +4 -0
  19. package/dist/neutral/createDeclarationPayload.d.ts.map +1 -0
  20. package/dist/neutral/createTransferPayload.d.ts +4 -0
  21. package/dist/neutral/createTransferPayload.d.ts.map +1 -0
  22. package/dist/neutral/driver/cache/LruCacheMap.d.ts +2 -2
  23. package/dist/neutral/driver/cache/LruCacheMap.d.ts.map +1 -1
  24. package/dist/neutral/driver/memory/MemoryMap.d.ts +2 -2
  25. package/dist/neutral/driver/memory/MemoryMap.d.ts.map +1 -1
  26. package/dist/neutral/index.d.ts +3 -0
  27. package/dist/neutral/index.d.ts.map +1 -1
  28. package/dist/neutral/index.mjs +1584 -655
  29. package/dist/neutral/index.mjs.map +1 -1
  30. package/dist/neutral/map/MapType.d.ts +3 -2
  31. package/dist/neutral/map/MapType.d.ts.map +1 -1
  32. package/dist/neutral/model/ChainContext/ChainContext.d.ts +4 -4
  33. package/dist/neutral/model/ChainContext/ChainContext.d.ts.map +1 -1
  34. package/dist/neutral/model/PayloadBundle/bundledPayloadToHydratedTransaction.d.ts +2 -2
  35. package/dist/neutral/model/PayloadBundle/bundledPayloadToHydratedTransaction.d.ts.map +1 -1
  36. package/dist/neutral/primitives/block/index.d.ts +2 -0
  37. package/dist/neutral/primitives/block/index.d.ts.map +1 -0
  38. package/dist/neutral/primitives/block/range/blockRangeSteps.d.ts +3 -0
  39. package/dist/neutral/primitives/block/range/blockRangeSteps.d.ts.map +1 -0
  40. package/dist/neutral/primitives/block/range/index.d.ts +2 -0
  41. package/dist/neutral/primitives/block/range/index.d.ts.map +1 -0
  42. package/dist/neutral/primitives/chain/index.d.ts +3 -0
  43. package/dist/neutral/primitives/chain/index.d.ts.map +1 -0
  44. package/dist/neutral/primitives/chain/step/chainStepRewardAddress.d.ts +5 -0
  45. package/dist/neutral/primitives/chain/step/chainStepRewardAddress.d.ts.map +1 -0
  46. package/dist/neutral/primitives/chain/step/index.d.ts +5 -0
  47. package/dist/neutral/primitives/chain/step/index.d.ts.map +1 -0
  48. package/dist/neutral/primitives/chain/step/stepRewardBlock.d.ts +4 -0
  49. package/dist/neutral/primitives/chain/step/stepRewardBlock.d.ts.map +1 -0
  50. package/dist/neutral/primitives/chain/step/stepRewardTotal.d.ts +4 -0
  51. package/dist/neutral/primitives/chain/step/stepRewardTotal.d.ts.map +1 -0
  52. package/dist/neutral/primitives/chain/step/stepsRewardTotal.d.ts +6 -0
  53. package/dist/neutral/primitives/chain/step/stepsRewardTotal.d.ts.map +1 -0
  54. package/dist/neutral/primitives/chain/time/externalBlockNumberFromXL1BlockNumber.d.ts +5 -0
  55. package/dist/neutral/primitives/chain/time/externalBlockNumberFromXL1BlockNumber.d.ts.map +1 -0
  56. package/dist/neutral/primitives/chain/time/externalBlockRangeFromStep.d.ts +5 -0
  57. package/dist/neutral/primitives/chain/time/externalBlockRangeFromStep.d.ts.map +1 -0
  58. package/dist/neutral/primitives/chain/time/externalBlockRangeFromXL1BlockRange.d.ts +5 -0
  59. package/dist/neutral/primitives/chain/time/externalBlockRangeFromXL1BlockRange.d.ts.map +1 -0
  60. package/dist/neutral/primitives/chain/time/index.d.ts +4 -0
  61. package/dist/neutral/primitives/chain/time/index.d.ts.map +1 -0
  62. package/dist/neutral/primitives/index.d.ts +6 -0
  63. package/dist/neutral/primitives/index.d.ts.map +1 -1
  64. package/dist/neutral/primitives/mapToMapType.d.ts +3 -0
  65. package/dist/neutral/primitives/mapToMapType.d.ts.map +1 -0
  66. package/dist/neutral/primitives/payload/index.d.ts +2 -0
  67. package/dist/neutral/primitives/payload/index.d.ts.map +1 -0
  68. package/dist/neutral/primitives/payload/mergeTransfers.d.ts +4 -0
  69. package/dist/neutral/primitives/payload/mergeTransfers.d.ts.map +1 -0
  70. package/dist/neutral/primitives/readPayloadMapFromStore.d.ts +5 -4
  71. package/dist/neutral/primitives/readPayloadMapFromStore.d.ts.map +1 -1
  72. package/dist/neutral/primitives/rewards/index.d.ts +2 -0
  73. package/dist/neutral/primitives/rewards/index.d.ts.map +1 -0
  74. package/dist/neutral/primitives/rewards/networkStakeStepRewardPositionWeight.d.ts +5 -0
  75. package/dist/neutral/primitives/rewards/networkStakeStepRewardPositionWeight.d.ts.map +1 -0
  76. package/dist/neutral/primitives/stake/activeStakeAtTimeByAddress.d.ts +4 -0
  77. package/dist/neutral/primitives/stake/activeStakeAtTimeByAddress.d.ts.map +1 -0
  78. package/dist/neutral/primitives/stake/activeStakeAtTimeByPosition.d.ts +3 -0
  79. package/dist/neutral/primitives/stake/activeStakeAtTimeByPosition.d.ts.map +1 -0
  80. package/dist/neutral/primitives/stake/allStakersForRange.d.ts +4 -0
  81. package/dist/neutral/primitives/stake/allStakersForRange.d.ts.map +1 -0
  82. package/dist/neutral/primitives/stake/allStakersForStep.d.ts +6 -0
  83. package/dist/neutral/primitives/stake/allStakersForStep.d.ts.map +1 -0
  84. package/dist/neutral/primitives/stake/index.d.ts +7 -0
  85. package/dist/neutral/primitives/stake/index.d.ts.map +1 -0
  86. package/dist/neutral/primitives/stake/mergedAddRemoveStakeEventsByPosition.d.ts +3 -0
  87. package/dist/neutral/primitives/stake/mergedAddRemoveStakeEventsByPosition.d.ts.map +1 -0
  88. package/dist/neutral/primitives/stake/mergedAddRemoveStakeEventsByStaker.d.ts +4 -0
  89. package/dist/neutral/primitives/stake/mergedAddRemoveStakeEventsByStaker.d.ts.map +1 -0
  90. package/dist/neutral/primitives/stake/weightedStakeForRangeByPosition.d.ts +6 -0
  91. package/dist/neutral/primitives/stake/weightedStakeForRangeByPosition.d.ts.map +1 -0
  92. package/dist/neutral/provider/DataLake.d.ts +10 -9
  93. package/dist/neutral/provider/DataLake.d.ts.map +1 -1
  94. package/dist/neutral/provider/XyoConnection.d.ts +4 -1
  95. package/dist/neutral/provider/XyoConnection.d.ts.map +1 -1
  96. package/dist/neutral/provider/XyoGatewayRunner.d.ts +3 -3
  97. package/dist/neutral/provider/XyoGatewayRunner.d.ts.map +1 -1
  98. package/dist/neutral/provider/XyoRunner.d.ts +5 -2
  99. package/dist/neutral/provider/XyoRunner.d.ts.map +1 -1
  100. package/dist/neutral/provider/viewer/XyoViewer.d.ts +9 -8
  101. package/dist/neutral/provider/viewer/XyoViewer.d.ts.map +1 -1
  102. package/dist/neutral/runners/Block.d.ts +7 -2
  103. package/dist/neutral/runners/Block.d.ts.map +1 -1
  104. package/dist/neutral/runners/Mempool.d.ts +4 -1
  105. package/dist/neutral/runners/Mempool.d.ts.map +1 -1
  106. package/dist/neutral/services/Chain/ChainService.d.ts +2 -2
  107. package/dist/neutral/services/Chain/ChainService.d.ts.map +1 -1
  108. package/dist/neutral/simple/accountBalance/SimpleAccountBalanceViewer.d.ts +5 -12
  109. package/dist/neutral/simple/accountBalance/SimpleAccountBalanceViewer.d.ts.map +1 -1
  110. package/dist/neutral/simple/block/SimpleBlockViewer.d.ts +9 -6
  111. package/dist/neutral/simple/block/SimpleBlockViewer.d.ts.map +1 -1
  112. package/dist/neutral/simple/chainStake/{SimpleChainStakeViewer.d.ts → SimpleStakeViewer.d.ts} +3 -5
  113. package/dist/neutral/simple/chainStake/SimpleStakeViewer.d.ts.map +1 -0
  114. package/dist/neutral/simple/chainStake/index.d.ts +1 -1
  115. package/dist/neutral/simple/chainStake/index.d.ts.map +1 -1
  116. package/dist/neutral/simple/datalake/AbstractSimpleDataLake.d.ts +5 -2
  117. package/dist/neutral/simple/datalake/AbstractSimpleDataLake.d.ts.map +1 -1
  118. package/dist/neutral/simple/datalake/SimpleDataLakeRunner.d.ts +4 -3
  119. package/dist/neutral/simple/datalake/SimpleDataLakeRunner.d.ts.map +1 -1
  120. package/dist/neutral/simple/datalake/SimpleDataLakeViewer.d.ts +0 -3
  121. package/dist/neutral/simple/datalake/SimpleDataLakeViewer.d.ts.map +1 -1
  122. package/dist/neutral/simple/index.d.ts +1 -0
  123. package/dist/neutral/simple/index.d.ts.map +1 -1
  124. package/dist/neutral/simple/mempool/SimpleMempoolRunner.d.ts +8 -4
  125. package/dist/neutral/simple/mempool/SimpleMempoolRunner.d.ts.map +1 -1
  126. package/dist/neutral/simple/mempool/SimpleMempoolViewer.d.ts.map +1 -1
  127. package/dist/neutral/simple/runner/SimpleXyoRunner.d.ts +24 -6
  128. package/dist/neutral/simple/runner/SimpleXyoRunner.d.ts.map +1 -1
  129. package/dist/neutral/simple/{chainStakeEvents/SimpleChainStakeEventsViewer.d.ts → stakeEvents/SimpleStakeEventsViewer.d.ts} +3 -3
  130. package/dist/neutral/simple/stakeEvents/SimpleStakeEventsViewer.d.ts.map +1 -0
  131. package/dist/neutral/simple/stakeEvents/index.d.ts +2 -0
  132. package/dist/neutral/simple/stakeEvents/index.d.ts.map +1 -0
  133. package/dist/neutral/simple/timesync/SimpleTimeSyncViewer.d.ts +4 -3
  134. package/dist/neutral/simple/timesync/SimpleTimeSyncViewer.d.ts.map +1 -1
  135. package/dist/neutral/status/RuntimeStatusMonitor.d.ts +31 -0
  136. package/dist/neutral/status/RuntimeStatusMonitor.d.ts.map +1 -0
  137. package/dist/neutral/status/ServiceStatus.d.ts +8 -0
  138. package/dist/neutral/status/ServiceStatus.d.ts.map +1 -0
  139. package/dist/neutral/status/index.d.ts +3 -0
  140. package/dist/neutral/status/index.d.ts.map +1 -0
  141. package/dist/neutral/summary/model/summary.d.ts +4 -4
  142. package/dist/neutral/summary/model/summary.d.ts.map +1 -1
  143. package/dist/neutral/summary/primitives/balances/balancesStepSummaryFromRange.d.ts +1 -1
  144. package/dist/neutral/summary/primitives/balances/balancesStepSummaryFromRange.d.ts.map +1 -1
  145. package/dist/neutral/transaction/TransactionBuilder.d.ts +82 -0
  146. package/dist/neutral/transaction/TransactionBuilder.d.ts.map +1 -0
  147. package/dist/neutral/transaction/buildRandomTransaction.d.ts +6 -0
  148. package/dist/neutral/transaction/buildRandomTransaction.d.ts.map +1 -0
  149. package/dist/neutral/transaction/index.d.ts +2 -0
  150. package/dist/neutral/transaction/index.d.ts.map +1 -1
  151. package/dist/neutral/viewers/Block.d.ts +4 -1
  152. package/dist/neutral/viewers/Block.d.ts.map +1 -1
  153. package/dist/neutral/viewers/ChainStakeViewer.d.ts +1 -2
  154. package/dist/neutral/viewers/ChainStakeViewer.d.ts.map +1 -1
  155. package/dist/neutral/viewers/Fork.d.ts +0 -1
  156. package/dist/neutral/viewers/Fork.d.ts.map +1 -1
  157. package/dist/neutral/viewers/Stake.d.ts +0 -1
  158. package/dist/neutral/viewers/Stake.d.ts.map +1 -1
  159. package/dist/neutral/viewers/index.d.ts +0 -1
  160. package/dist/neutral/viewers/index.d.ts.map +1 -1
  161. package/package.json +9 -7
  162. package/src/CreatableProvider/AbstractCreatableProvider.ts +44 -3
  163. package/src/CreatableProvider/CreatableProvider.ts +36 -9
  164. package/src/CreatableProvider/CreatableProviderRegistry.ts +9 -5
  165. package/src/CreatableProvider/ProviderFactory.ts +72 -10
  166. package/src/CreatableProvider/ProviderFactoryLocator.ts +78 -19
  167. package/src/CreatableProvider/ProviderFactoryLocatorInstance.ts +33 -10
  168. package/src/config/Bridge.ts +22 -4
  169. package/src/config/Chain.ts +2 -2
  170. package/src/createDeclarationPayload.ts +14 -0
  171. package/src/createTransferPayload.ts +15 -0
  172. package/src/driver/cache/LruCacheMap.ts +2 -2
  173. package/src/driver/memory/MemoryMap.ts +2 -2
  174. package/src/index.ts +3 -0
  175. package/src/map/MapType.ts +4 -2
  176. package/src/model/ChainContext/ChainContext.ts +4 -4
  177. package/src/model/PayloadBundle/bundledPayloadToHydratedTransaction.ts +2 -2
  178. package/src/primitives/block/index.ts +1 -0
  179. package/src/primitives/block/range/blockRangeSteps.ts +22 -0
  180. package/src/primitives/block/range/index.ts +1 -0
  181. package/src/primitives/chain/index.ts +2 -0
  182. package/src/primitives/chain/step/chainStepRewardAddress.ts +28 -0
  183. package/src/primitives/chain/step/index.ts +4 -0
  184. package/src/primitives/chain/step/stepRewardBlock.ts +11 -0
  185. package/src/primitives/chain/step/stepRewardTotal.ts +45 -0
  186. package/src/primitives/chain/step/stepsRewardTotal.ts +34 -0
  187. package/src/primitives/chain/time/externalBlockNumberFromXL1BlockNumber.ts +31 -0
  188. package/src/primitives/chain/time/externalBlockRangeFromStep.ts +19 -0
  189. package/src/primitives/chain/time/externalBlockRangeFromXL1BlockRange.ts +16 -0
  190. package/src/primitives/chain/time/index.ts +3 -0
  191. package/src/primitives/index.ts +6 -0
  192. package/src/primitives/mapToMapType.ts +35 -0
  193. package/src/primitives/payload/index.ts +1 -0
  194. package/src/primitives/payload/mergeTransfers.ts +15 -0
  195. package/src/primitives/readPayloadMapFromStore.ts +38 -8
  196. package/src/primitives/rewards/index.ts +1 -0
  197. package/src/primitives/rewards/networkStakeStepRewardPositionWeight.ts +21 -0
  198. package/src/primitives/stake/activeStakeAtTimeByAddress.ts +26 -0
  199. package/src/primitives/stake/activeStakeAtTimeByPosition.ts +24 -0
  200. package/src/primitives/stake/allStakersForRange.ts +31 -0
  201. package/src/primitives/stake/allStakersForStep.ts +22 -0
  202. package/src/primitives/stake/index.ts +6 -0
  203. package/src/primitives/stake/mergedAddRemoveStakeEventsByPosition.ts +14 -0
  204. package/src/primitives/stake/mergedAddRemoveStakeEventsByStaker.ts +17 -0
  205. package/src/primitives/stake/weightedStakeForRangeByPosition.ts +54 -0
  206. package/src/provider/DataLake.ts +12 -11
  207. package/src/provider/XyoConnection.ts +5 -1
  208. package/src/provider/XyoGatewayRunner.ts +3 -3
  209. package/src/provider/XyoRunner.ts +6 -2
  210. package/src/provider/viewer/XyoViewer.ts +9 -8
  211. package/src/runners/Block.ts +10 -2
  212. package/src/runners/Mempool.ts +6 -1
  213. package/src/services/Chain/ChainService.ts +2 -4
  214. package/src/simple/accountBalance/SimpleAccountBalanceViewer.ts +21 -14
  215. package/src/simple/block/SimpleBlockViewer.ts +47 -14
  216. package/src/simple/chainStake/{SimpleChainStakeViewer.ts → SimpleStakeViewer.ts} +11 -16
  217. package/src/simple/chainStake/index.ts +1 -1
  218. package/src/simple/datalake/AbstractSimpleDataLake.ts +17 -17
  219. package/src/simple/datalake/SimpleDataLakeRunner.ts +4 -3
  220. package/src/simple/datalake/SimpleDataLakeViewer.ts +0 -18
  221. package/src/simple/index.ts +1 -0
  222. package/src/simple/mempool/SimpleMempoolRunner.ts +13 -8
  223. package/src/simple/mempool/SimpleMempoolViewer.ts +6 -1
  224. package/src/simple/runner/SimpleXyoRunner.ts +41 -16
  225. package/src/simple/{chainStakeEvents/SimpleChainStakeEventsViewer.ts → stakeEvents/SimpleStakeEventsViewer.ts} +5 -5
  226. package/src/simple/stakeEvents/index.ts +1 -0
  227. package/src/simple/timesync/SimpleTimeSyncViewer.ts +26 -5
  228. package/src/status/RuntimeStatusMonitor.ts +117 -0
  229. package/src/status/ServiceStatus.ts +20 -0
  230. package/src/status/index.ts +2 -0
  231. package/src/summary/model/summary.ts +6 -4
  232. package/src/summary/primitives/balances/balancesStepSummaryFromRange.ts +2 -3
  233. package/src/transaction/TransactionBuilder.ts +162 -0
  234. package/src/transaction/buildRandomTransaction.ts +36 -0
  235. package/src/transaction/hydrateTransaction.ts +1 -1
  236. package/src/transaction/index.ts +2 -0
  237. package/src/viewers/Block.ts +6 -1
  238. package/src/viewers/ChainStakeViewer.ts +1 -2
  239. package/src/viewers/Fork.ts +0 -1
  240. package/src/viewers/Stake.ts +0 -1
  241. package/src/viewers/index.ts +0 -1
  242. package/dist/neutral/simple/chain/SimpleChainViewer.d.ts +0 -15
  243. package/dist/neutral/simple/chain/SimpleChainViewer.d.ts.map +0 -1
  244. package/dist/neutral/simple/chain/index.d.ts +0 -2
  245. package/dist/neutral/simple/chain/index.d.ts.map +0 -1
  246. package/dist/neutral/simple/chainStake/SimpleChainStakeViewer.d.ts.map +0 -1
  247. package/dist/neutral/simple/chainStakeEvents/SimpleChainStakeEventsViewer.d.ts.map +0 -1
  248. package/dist/neutral/simple/chainStakeEvents/index.d.ts +0 -2
  249. package/dist/neutral/simple/chainStakeEvents/index.d.ts.map +0 -1
  250. package/dist/neutral/viewers/Chain.d.ts +0 -11
  251. package/dist/neutral/viewers/Chain.d.ts.map +0 -1
  252. package/src/simple/chain/SimpleChainViewer.ts +0 -28
  253. package/src/simple/chain/index.ts +0 -1
  254. package/src/simple/chainStakeEvents/index.ts +0 -1
  255. package/src/viewers/Chain.ts +0 -13
@@ -0,0 +1,16 @@
1
+ import type { BlockRange, XL1BlockRange } from '@xyo-network/xl1-protocol'
2
+
3
+ import type { BaseContext } from '../../../model/index.ts'
4
+ import type { BlockViewer } from '../../../viewers/index.ts'
5
+ import { externalBlockNumberFromXL1BlockNumber } from './externalBlockNumberFromXL1BlockNumber.ts'
6
+
7
+ export async function externalBlockRangeFromXL1BlockRange(
8
+ context: BaseContext,
9
+ blockViewer: BlockViewer,
10
+ xl1BlockRange: XL1BlockRange,
11
+ externalTimeName: 'ethereum' = 'ethereum',
12
+ ): Promise<BlockRange> {
13
+ const start = await externalBlockNumberFromXL1BlockNumber(context, blockViewer, xl1BlockRange[0], externalTimeName)
14
+ const end = await externalBlockNumberFromXL1BlockNumber(context, blockViewer, xl1BlockRange[1], externalTimeName)
15
+ return [start, end]
16
+ }
@@ -0,0 +1,3 @@
1
+ export * from './externalBlockNumberFromXL1BlockNumber.ts'
2
+ export * from './externalBlockRangeFromStep.ts'
3
+ export * from './externalBlockRangeFromXL1BlockRange.ts'
@@ -1,5 +1,11 @@
1
+ export * from './block/index.ts'
2
+ export * from './chain/index.ts'
3
+ export * from './mapToMapType.ts'
4
+ export * from './payload/index.ts'
1
5
  export * from './readPayloadMapFromStore.ts'
2
6
  export * from './rewardFromBlockNumber.ts'
7
+ export * from './rewards/index.ts'
8
+ export * from './stake/index.ts'
3
9
  export * from './state/index.ts'
4
10
  export * from './step/index.ts'
5
11
  export * from './timeBudget.ts'
@@ -0,0 +1,35 @@
1
+ import { isDefined } from '@xylabs/sdk-js'
2
+
3
+ import type { SyncIterableMap } from '../map/index.ts'
4
+
5
+ export function mapToMapType<K extends {}, V extends {}>(map: Map<K, V> | SyncIterableMap<K, V>): SyncIterableMap<K, V> {
6
+ return {
7
+ get: (key: K) => map.get(key),
8
+ has: (key: K) => map.has(key),
9
+ set: (key: K, value: V) => {
10
+ map.set(key, value)
11
+ },
12
+ setMany: (entries: [K, V][]) => {
13
+ for (const [key, value] of entries) {
14
+ map.set(key, value)
15
+ }
16
+ },
17
+ delete: (key: K) => map.delete(key),
18
+ clear: () => map.clear(),
19
+ getMany: (keys: K[]) => {
20
+ const result: V[] = []
21
+ for (const key of keys) {
22
+ const value = map.get(key)
23
+ if (isDefined(value)) {
24
+ result.push(value)
25
+ }
26
+ }
27
+ return result
28
+ },
29
+ [Symbol.iterator]: function* (): Iterator<[K, V]> {
30
+ for (const entry of map) {
31
+ yield entry
32
+ }
33
+ },
34
+ }
35
+ }
@@ -0,0 +1 @@
1
+ export * from './mergeTransfers.ts'
@@ -0,0 +1,15 @@
1
+ import type { Address } from '@xylabs/sdk-js'
2
+ import { hexToBigInt, toAddress } from '@xylabs/sdk-js'
3
+ import type { Transfer } from '@xyo-network/xl1-protocol'
4
+
5
+ export function mergeTransfers(transfers: Transfer[]): Record<Address, Record<Address, bigint>> {
6
+ const result: Record<Address, Record<Address, bigint>> = {}
7
+ for (const transfer of transfers) {
8
+ result[transfer.from] = result[transfer.from] ?? {}
9
+ for (const [to, value] of Object.entries(transfer.transfers)) {
10
+ const typedTo = toAddress(to)
11
+ result[transfer.from][typedTo] = (result[transfer.from][typedTo] ?? 0n) + (hexToBigInt(value))
12
+ }
13
+ }
14
+ return result
15
+ }
@@ -1,24 +1,54 @@
1
1
  import type { Hash } from '@xylabs/sdk-js'
2
2
  import { isDefined } from '@xylabs/sdk-js'
3
- import type { ReadArchivist } from '@xyo-network/archivist-model'
4
- import type { Payload } from '@xyo-network/payload-model'
3
+ import type { ReadArchivist, ReadWriteArchivist } from '@xyo-network/archivist-model'
4
+ import type { Payload, WithStorageMeta } from '@xyo-network/payload-model'
5
5
 
6
- import { isReadArchivist } from '../block/index.ts'
7
- import type { PayloadMapRead } from '../model/index.ts'
6
+ import { isReadArchivist, isReadWriteArchivist } from '../block/index.ts'
7
+ import type { PayloadMap, PayloadMapRead } from '../model/index.ts'
8
8
 
9
- export function readPayloadMapFromStore<T extends Payload>(store: ReadArchivist<T> | PayloadMapRead<T>): PayloadMapRead<T> {
9
+ export function readPayloadMapFromStore<T extends Payload>(store: ReadArchivist<T> | PayloadMapRead<WithStorageMeta<T>>): PayloadMapRead<WithStorageMeta<T>> {
10
10
  if (isReadArchivist(store)) {
11
11
  return {
12
- get: async (hash: Hash): Promise<T | undefined> => {
12
+ get: async (hash: Hash) => {
13
13
  return (await store.get([hash]))[0]
14
14
  },
15
- getMany: async (hashes: Hash[]): Promise<T[]> => {
15
+ getMany: async (hashes: Hash[]) => {
16
16
  return (await store.get(hashes))
17
17
  },
18
- has: async (hash: Hash): Promise<boolean> => {
18
+ has: async (hash: Hash) => {
19
19
  return isDefined((await store.get([hash]))[0])
20
20
  },
21
21
  }
22
22
  }
23
23
  return store
24
24
  }
25
+
26
+ export function payloadMapFromStore<T extends Payload>(store: ReadWriteArchivist<T> | PayloadMap<WithStorageMeta<T>>): PayloadMap<WithStorageMeta<T>> {
27
+ if (isReadWriteArchivist(store)) {
28
+ return {
29
+ get: async (hash: Hash) => {
30
+ return (await store.get([hash]))[0]
31
+ },
32
+ getMany: async (hashes: Hash[]) => {
33
+ return (await store.get(hashes))
34
+ },
35
+ has: async (hash: Hash) => {
36
+ return isDefined((await store.get([hash]))[0])
37
+ },
38
+ clear: async () => {
39
+ return await store.clear()
40
+ },
41
+ delete: async (id: Hash) => {
42
+ await store.delete([id])
43
+ return true
44
+ },
45
+ set: async (_id: Hash, data: T) => {
46
+ await store.insert([data])
47
+ },
48
+ setMany: async (entries: [Hash, T][]) => {
49
+ await store.insert(entries.map(e => e[1]))
50
+ },
51
+ } satisfies PayloadMap<WithStorageMeta<T>>
52
+ }
53
+ return store
54
+ }
@@ -0,0 +1 @@
1
+ export * from './networkStakeStepRewardPositionWeight.ts'
@@ -0,0 +1,21 @@
1
+ import { type StepIdentity } from '@xyo-network/xl1-protocol'
2
+
3
+ import type { StakedChainContextRead } from '../../model/index.ts'
4
+ import type { BlockViewer } from '../../viewers/Block.ts'
5
+ import { externalBlockRangeFromStep } from '../chain/time/index.ts'
6
+ import { weightedStakeForRangeByPosition } from '../stake/index.ts'
7
+
8
+ export async function networkStakeStepRewardPositionWeight(
9
+ context: StakedChainContextRead,
10
+ blockViewer: BlockViewer,
11
+ stepContext: StepIdentity,
12
+ position: number,
13
+ ): Promise<bigint> {
14
+ const result = await weightedStakeForRangeByPosition(
15
+ context,
16
+ blockViewer,
17
+ await externalBlockRangeFromStep(context, blockViewer, stepContext),
18
+ position,
19
+ )
20
+ return result
21
+ }
@@ -0,0 +1,26 @@
1
+ import type { Address } from '@xylabs/sdk-js'
2
+ import { isDefined } from '@xylabs/sdk-js'
3
+
4
+ import type { StakeEventsViewer } from '../../viewers/index.ts'
5
+ import { mergedAddRemoveStakeEventsByStaker } from './mergedAddRemoveStakeEventsByStaker.ts'
6
+
7
+ export async function activeStakeAtTimeByAddress(
8
+ chain: StakeEventsViewer,
9
+ staked: Address,
10
+ time: number,
11
+ staker?: Address,
12
+ ): Promise<bigint> {
13
+ const stakeEvents = (await mergedAddRemoveStakeEventsByStaker(chain, [0, time], staked, staker)).toSorted((a, b) => a.time - b.time)
14
+ let result = 0n
15
+ for (const event of stakeEvents) {
16
+ if (event.time > time) break
17
+ if (event.args.staked !== staked) continue
18
+ if (isDefined(staker) && (event.args.staker !== staker)) continue
19
+ if (event.name === 'StakeAdded') {
20
+ result += event.args.amount
21
+ } else if (event.name === 'StakeRemoved') {
22
+ result -= event.args.amount
23
+ }
24
+ }
25
+ return result
26
+ }
@@ -0,0 +1,24 @@
1
+ import { isUndefined } from '@xylabs/sdk-js'
2
+
3
+ import type { StakeEventsViewer } from '../../viewers/index.ts'
4
+ import { mergedAddRemoveStakeEventsByPosition } from './mergedAddRemoveStakeEventsByPosition.ts'
5
+
6
+ export async function activeStakeAtTimeByPosition(
7
+ chainStakeEvents: StakeEventsViewer,
8
+ externalTime: number,
9
+ position?: number,
10
+ ): Promise<bigint> {
11
+ const stakeEvents = (await mergedAddRemoveStakeEventsByPosition(chainStakeEvents, [0, externalTime], position)).toSorted((a, b) => a.time - b.time)
12
+ let result = 0n
13
+ for (const event of stakeEvents) {
14
+ if (event.time > externalTime) break
15
+ if (isUndefined(position) || position === Number(event.args.id)) {
16
+ if (event.name === 'StakeAdded') {
17
+ result += event.args.amount
18
+ } else if (event.name === 'StakeRemoved') {
19
+ result -= event.args.amount
20
+ }
21
+ }
22
+ }
23
+ return result
24
+ }
@@ -0,0 +1,31 @@
1
+ import {
2
+ type Address,
3
+ toAddress,
4
+ } from '@xylabs/sdk-js'
5
+
6
+ import type { StakeEventsViewer } from '../../viewers/index.ts'
7
+ import { mergedAddRemoveStakeEventsByStaker } from './mergedAddRemoveStakeEventsByStaker.ts'
8
+
9
+ export async function allStakersForRange(
10
+ chain: StakeEventsViewer,
11
+ externalRange: [number, number],
12
+ staked: Address,
13
+ ): Promise<Record<Address, bigint>> {
14
+ const mergedEvents = await mergedAddRemoveStakeEventsByStaker(chain, [0, externalRange[1]], staked)
15
+ const resultWithZeros: Record<Address, bigint> = {}
16
+ for (const event of mergedEvents) {
17
+ const staker = toAddress(event.args.staker)
18
+ resultWithZeros[staker] = resultWithZeros[staker] ?? 0n
19
+ if (event.name === 'StakeAdded') {
20
+ resultWithZeros[staker] += event.args.amount
21
+ } else if (event.name === 'StakeRemoved') {
22
+ resultWithZeros[staker] -= event.args.amount
23
+ }
24
+ }
25
+ const nonZero = Object.entries(resultWithZeros).filter(([, amount]) => amount > 0n).map(([address]) => address)
26
+ const result: Record<Address, bigint> = {}
27
+ for (const address of nonZero) {
28
+ result[toAddress(address)] = resultWithZeros[toAddress(address)]
29
+ }
30
+ return result
31
+ }
@@ -0,0 +1,22 @@
1
+ import { type Address } from '@xylabs/sdk-js'
2
+ import type { StepIdentity } from '@xyo-network/xl1-protocol'
3
+
4
+ import type { StakedChainContextRead } from '../../model/index.ts'
5
+ import type { BlockViewer } from '../../viewers/index.ts'
6
+ import { externalBlockRangeFromXL1BlockRange } from '../chain/time/index.ts'
7
+ import { stepBlockRange } from '../step/index.ts'
8
+ import { allStakersForRange } from './allStakersForRange.ts'
9
+
10
+ export async function allStakersForStep(
11
+ context: StakedChainContextRead,
12
+ blockViewer: BlockViewer,
13
+ stepContext: StepIdentity,
14
+ staked: Address,
15
+ ): Promise<Record<Address, bigint>> {
16
+ const xl1BlockRange = stepBlockRange(stepContext)
17
+ return await allStakersForRange(
18
+ context.stake.stakeEvents,
19
+ await externalBlockRangeFromXL1BlockRange(context, blockViewer, xl1BlockRange),
20
+ staked,
21
+ )
22
+ }
@@ -0,0 +1,6 @@
1
+ export * from './activeStakeAtTimeByAddress.ts'
2
+ export * from './activeStakeAtTimeByPosition.ts'
3
+ export * from './allStakersForRange.ts'
4
+ export * from './allStakersForStep.ts'
5
+ export * from './mergedAddRemoveStakeEventsByPosition.ts'
6
+ export * from './weightedStakeForRangeByPosition.ts'
@@ -0,0 +1,14 @@
1
+ import type { StakeEvent, StakeEventsViewer } from '../../viewers/index.ts'
2
+
3
+ export async function mergedAddRemoveStakeEventsByPosition(
4
+ chainEvents: StakeEventsViewer,
5
+ range: [number, number],
6
+ position?: number,
7
+ ): Promise<(StakeEvent<'StakeAdded'> | StakeEvent<'StakeRemoved'>)[]> {
8
+ const [addedEvents, removedEvents] = await Promise.all([
9
+ chainEvents.stakeEvents(range, { name: 'StakeAdded', args: { id: position } }),
10
+ chainEvents.stakeEvents(range, { name: 'StakeRemoved', args: { id: position } }),
11
+ ])
12
+ const result = [...addedEvents, ...removedEvents].toSorted((a, b) => a.time - b.time)
13
+ return result
14
+ }
@@ -0,0 +1,17 @@
1
+ import type { Address } from '@xylabs/sdk-js'
2
+
3
+ import type { StakeEvent, StakeEventsViewer } from '../../viewers/index.ts'
4
+
5
+ export async function mergedAddRemoveStakeEventsByStaker(
6
+ chainEvents: StakeEventsViewer,
7
+ range: [number, number],
8
+ staked: Address,
9
+ staker?: Address,
10
+ ): Promise<(StakeEvent<'StakeAdded'> | StakeEvent<'StakeRemoved'>)[]> {
11
+ const [addedEvents, removedEvents] = await Promise.all([
12
+ chainEvents.stakeEvents(range, { name: 'StakeAdded', args: { staked, staker } }),
13
+ chainEvents.stakeEvents(range, { name: 'StakeRemoved', args: { staked, staker } }),
14
+ ])
15
+ const result = [...addedEvents, ...removedEvents].toSorted((a, b) => a.time - b.time)
16
+ return result
17
+ }
@@ -0,0 +1,54 @@
1
+ import { isDefined } from '@xylabs/sdk-js'
2
+ import { asBlockNumber, type BlockRange } from '@xyo-network/xl1-protocol'
3
+
4
+ import { type StakedChainContextRead, withContextCacheResponse } from '../../model/index.ts'
5
+ import type { BlockViewer } from '../../viewers/index.ts'
6
+ import { mergedAddRemoveStakeEventsByPosition } from './mergedAddRemoveStakeEventsByPosition.ts'
7
+
8
+ export async function weightedStakeForRangeByPosition(
9
+ context: StakedChainContextRead,
10
+ blockViewer: BlockViewer,
11
+ externalRange: BlockRange, // first to last block of step
12
+ positionId?: number,
13
+ ): Promise<bigint> {
14
+ const cacheKey = isDefined(positionId) ? `${externalRange[0]}-${externalRange[1]}-${positionId}` : `${externalRange[0]}-${externalRange[1]}-all`
15
+ return await withContextCacheResponse(context, 'weightedStakeForRangeByPosition', cacheKey, async () => {
16
+ let weightedStakeSum = 0n
17
+ if (isDefined(positionId)) {
18
+ const mergedEvents = (await mergedAddRemoveStakeEventsByPosition(
19
+ context.stake.stakeEvents,
20
+ [0, externalRange[1]],
21
+ positionId,
22
+ )).toSorted((a, b) => a.time - b.time)
23
+ let currentTime = externalRange[0]
24
+ let currentStake = 0n // await activeStakeAtTimeByPosition(chainEvents, pos.staked, currentTime - 1, position)
25
+ for (const event of mergedEvents) {
26
+ if (event.time > currentTime) {
27
+ // Add the weighted stake for the period between the range start or previous event and this event
28
+ weightedStakeSum += currentStake * BigInt(event.time - currentTime)
29
+ }
30
+ if (event.name === 'StakeAdded') {
31
+ currentStake += event.args.amount
32
+ } else if (event.name === 'StakeRemoved') {
33
+ currentStake -= event.args.amount
34
+ }
35
+ // seems that sometimes we get multiple remove events, so ensure stake doesn't go negative
36
+ currentStake = currentStake < 0n ? 0n : currentStake
37
+ currentTime = asBlockNumber(event.time, { name: 'weightedStakeForRangeByPosition' })
38
+ if (currentTime > externalRange[1]) {
39
+ break
40
+ }
41
+ }
42
+ if (externalRange[1] > currentTime) {
43
+ // Add the weighted stake for the period between the last event and the end of the range
44
+ weightedStakeSum += currentStake * BigInt(externalRange[1] - currentTime)
45
+ }
46
+ } else {
47
+ const positionCount = await context.stake.stakeEvents.positionCount(externalRange)
48
+ for (let pos = 0; pos < positionCount; pos++) {
49
+ weightedStakeSum += await weightedStakeForRangeByPosition(context, blockViewer, externalRange, pos)
50
+ }
51
+ }
52
+ return weightedStakeSum
53
+ })
54
+ }
@@ -2,24 +2,25 @@ import type { Hash } from '@xylabs/sdk-js'
2
2
  import type { Payload, Schema } from '@xyo-network/payload-model'
3
3
 
4
4
  import type { MapType } from '../map/index.ts'
5
+ import type { Provider } from '../model/index.ts'
5
6
 
6
7
  export type DataLakeData = Payload | ArrayBuffer
7
8
 
8
- export type DataLakeViewerMethods = Pick<MapType<Hash, DataLakeData>, 'get' | 'getMany' | 'has'>
9
-
10
- export interface DataLakeViewer extends DataLakeViewerMethods {
11
- allowedSchemas?: Schema[]
12
- disallowedSchemas?: Schema[]
13
- }
14
-
15
9
  export const DataLakeViewerMoniker = 'DataLakeViewer' as const
16
10
  export type DataLakeViewerMoniker = typeof DataLakeViewerMoniker
17
11
 
18
- export type DataLakeRunnerMethods = Pick<MapType<Hash, DataLakeData>, 'set' | 'delete' | 'clear'> & {
19
- setMany(entries: [Hash, DataLakeData][]): Promise<void>
20
- }
12
+ export interface DataLakeViewerMethods extends
13
+ Pick<MapType<Hash, DataLakeData>, 'get' | 'getMany' | 'has'> {}
21
14
 
22
- export interface DataLakeRunner extends DataLakeRunnerMethods {}
15
+ export interface DataLakeViewer extends DataLakeViewerMethods, Provider<DataLakeViewerMoniker> {
16
+ allowedSchemas?: Schema[]
17
+ disallowedSchemas?: Schema[]
18
+ }
23
19
 
24
20
  export const DataLakeRunnerMoniker = 'DataLakeRunner' as const
25
21
  export type DataLakeRunnerMoniker = typeof DataLakeRunnerMoniker
22
+
23
+ export interface DataLakeRunnerMethods extends Pick<MapType<Hash, DataLakeData>, 'setMany' | 'set' | 'delete' | 'clear'>,
24
+ DataLakeViewerMethods {}
25
+
26
+ export interface DataLakeRunner extends DataLakeRunnerMethods, Provider<DataLakeRunnerMoniker> {}
@@ -1,9 +1,13 @@
1
+ import type { Provider } from '../model/index.ts'
1
2
  import type { DataLakeRunner, DataLakeViewer } from './DataLake.ts'
2
3
  import type { NetworkStakeViewer, XyoViewer } from './viewer/index.ts'
3
4
  import type { XyoNetwork } from './XyoNetwork.ts'
4
5
  import type { XyoRunner } from './XyoRunner.ts'
5
6
 
6
- export interface XyoConnection {
7
+ export const XyoConnectionMoniker = 'XyoConnection' as const
8
+ export type XyoConnectionMoniker = typeof XyoConnectionMoniker
9
+
10
+ export interface XyoConnection extends Provider<XyoConnectionMoniker> {
7
11
  network?: XyoNetwork
8
12
  networkStake?: NetworkStakeViewer
9
13
  runner?: XyoRunner
@@ -1,9 +1,9 @@
1
1
  import type {
2
- Address, Hash, Hex, Promisable,
2
+ Address, Hash, Promisable,
3
3
  } from '@xylabs/sdk-js'
4
4
  import type { Payload } from '@xyo-network/payload-model'
5
5
  import type {
6
- AllowedBlockPayload, AttoXL1, SignedHydratedTransaction, SignedHydratedTransactionWithHashMeta, TransactionFeesBigInt,
6
+ AllowedBlockPayload, AttoXL1, ChainId, SignedHydratedTransaction, SignedHydratedTransactionWithHashMeta, TransactionFeesBigInt,
7
7
  UnsignedHydratedTransaction,
8
8
  XL1BlockNumber,
9
9
  } from '@xyo-network/xl1-protocol'
@@ -13,7 +13,7 @@ import type { DataLakeRunner } from './DataLake.ts'
13
13
  import type { XyoGateway } from './XyoGateway.ts'
14
14
 
15
15
  export interface TransactionOptions {
16
- chain?: Hex
16
+ chain?: ChainId
17
17
  exp?: XL1BlockNumber
18
18
  fees?: TransactionFeesBigInt
19
19
  from?: Address
@@ -1,12 +1,16 @@
1
1
  import type { Hash, Promisable } from '@xylabs/sdk-js'
2
2
  import type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol'
3
3
 
4
+ import type { Provider } from '../model/index.ts'
4
5
  import type { MempoolRunner } from '../runners/index.ts'
5
6
 
6
7
  export interface XyoRunnerMethods {
7
8
  broadcastTransaction(transaction: SignedHydratedTransaction): Promisable<Hash>
8
9
  }
9
10
 
10
- export interface XyoRunner extends XyoRunnerMethods {
11
- mempool?: MempoolRunner
11
+ export const XyoRunnerMoniker = 'XyoRunner' as const
12
+ export type XyoRunnerMoniker = typeof XyoRunnerMoniker
13
+
14
+ export interface XyoRunner extends XyoRunnerMethods, Provider<XyoRunnerMoniker> {
15
+ mempool: MempoolRunner
12
16
  }
@@ -9,18 +9,18 @@ import type {
9
9
  AccountBalanceViewer,
10
10
  BlockViewer,
11
11
  BlockViewerMethods,
12
- ChainViewerMethods,
13
12
  ForkViewerMethods,
14
13
  MempoolViewer,
15
14
  NetworkStakeStepRewardViewerMethods,
16
15
  StakeViewerMethods,
17
16
  StepViewer,
17
+ TimeSyncViewer,
18
18
  TransactionViewerMethods,
19
19
  } from '../../viewers/index.ts'
20
20
  import type { NetworkStakeViewer } from './NetworkStake/index.ts'
21
21
 
22
22
  export interface XyoViewerMethods extends
23
- NetworkStakeStepRewardViewerMethods, Pick<ChainViewerMethods, 'chainId'>, BlockViewerMethods,
23
+ NetworkStakeStepRewardViewerMethods, BlockViewerMethods,
24
24
  TransactionViewerMethods, StakeViewerMethods, ForkViewerMethods {
25
25
  accountBalance(address: Address, headOrRange?: Hash | XL1BlockRange): Promisable<AttoXL1>
26
26
  accountBalanceHistory(address: Address, headOrRange?: Hash | XL1BlockRange): Promisable<AccountBalanceHistoryItem[]>
@@ -31,11 +31,12 @@ export type XyoViewerMoniker = typeof XyoViewerMoniker
31
31
 
32
32
  export interface XyoViewer extends Omit<BlockViewer, 'moniker'>, XyoViewerMethods,
33
33
  Omit<StakeViewerMethods, 'moniker'>, Provider<XyoViewerMoniker> {
34
- account?: {
35
- balance?: AccountBalanceViewer
34
+ account: {
35
+ balance: AccountBalanceViewer
36
36
  }
37
- block?: BlockViewer
38
- mempool?: MempoolViewer
39
- networkStake?: NetworkStakeViewer
40
- step?: StepViewer
37
+ block: BlockViewer
38
+ mempool: MempoolViewer
39
+ networkStake: NetworkStakeViewer
40
+ step: StepViewer
41
+ time: TimeSyncViewer
41
42
  }
@@ -1,10 +1,18 @@
1
- import type { SignedBlockBoundWitnessWithHashMeta, SignedHydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol'
1
+ import type { WithHashMeta } from '@xyo-network/payload-model'
2
+ import type {
3
+ BlockBoundWitness, SignedBlockBoundWitnessWithHashMeta, SignedHydratedBlockWithHashMeta,
4
+ } from '@xyo-network/xl1-protocol'
5
+
6
+ import type { Provider } from '../model/index.ts'
2
7
 
3
8
  export interface BlockRunnerMethods {
4
9
  produceNextBlock(head: SignedBlockBoundWitnessWithHashMeta, force: true): Promise<SignedHydratedBlockWithHashMeta>
5
10
  produceNextBlock(head: SignedBlockBoundWitnessWithHashMeta, force?: false): Promise<SignedHydratedBlockWithHashMeta | undefined>
6
11
  }
7
12
 
8
- export interface BlockRunner extends BlockRunnerMethods {
13
+ export const BlockRunnerMoniker = 'BlockRunner' as const
14
+ export type BlockRunnerMoniker = typeof BlockRunnerMoniker
9
15
 
16
+ export interface BlockRunner extends BlockRunnerMethods, Provider<BlockRunnerMoniker> {
17
+ next(head: WithHashMeta<BlockBoundWitness>): Promise<SignedHydratedBlockWithHashMeta | undefined>
10
18
  }
@@ -1,9 +1,14 @@
1
1
  import type { Hash } from '@xylabs/sdk-js'
2
2
  import type { SignedHydratedBlock, SignedHydratedTransaction } from '@xyo-network/xl1-protocol'
3
3
 
4
+ import type { Provider } from '../model/index.ts'
5
+
4
6
  export interface MempoolRunnerMethods {
5
7
  submitBlocks(blocks: SignedHydratedBlock[]): Promise<Hash[]>
6
8
  submitTransactions(transactions: SignedHydratedTransaction[]): Promise<Hash[]>
7
9
  }
8
10
 
9
- export interface MempoolRunner extends MempoolRunnerMethods {}
11
+ export const MempoolRunnerMoniker = 'MempoolRunner' as const
12
+ export type MempoolRunnerMoniker = typeof MempoolRunnerMoniker
13
+
14
+ export interface MempoolRunner extends MempoolRunnerMethods, Provider<MempoolRunnerMoniker> {}
@@ -1,6 +1,4 @@
1
- import type {
2
- ChainContractViewer, ChainStakeViewer, ChainViewer,
3
- } from '../../viewers/index.ts'
1
+ import type { ChainContractViewer, ChainStakeViewer } from '../../viewers/index.ts'
4
2
  import type { BaseChainService } from './BaseChainService.ts'
5
3
 
6
- export interface ChainService extends Omit<ChainContractViewer, 'moniker'>, Omit<ChainStakeViewer, 'moniker'>, Omit<ChainViewer, 'moniker'>, BaseChainService {}
4
+ export interface ChainService extends Omit<ChainContractViewer, 'moniker'>, Omit<ChainStakeViewer, 'moniker'>, BaseChainService {}
@@ -16,9 +16,10 @@ import {
16
16
  import { deepCalculateFramesFromRange } from '../../block/index.ts'
17
17
  import type { CreatableProviderParams } from '../../CreatableProvider/index.ts'
18
18
  import { AbstractCreatableProvider, creatableProvider } from '../../CreatableProvider/index.ts'
19
- import type { ProviderMoniker, Qualified } from '../../model/index.ts'
19
+ import type { Qualified } from '../../model/index.ts'
20
20
  import type {
21
- BalanceStepSummaryContext, TransfersStepSummary,
21
+ BalanceStepSummaryContext,
22
+ TransfersStepSummary,
22
23
  TransfersStepSummaryContext,
23
24
  } from '../../summary/index.ts'
24
25
  import {
@@ -28,11 +29,11 @@ import {
28
29
  import {
29
30
  type AccountBalanceHistoryItem, type AccountBalanceViewer, AccountBalanceViewerMoniker,
30
31
  type BlockViewer,
32
+ BlockViewerMoniker,
31
33
  } from '../../viewers/index.ts'
32
34
 
33
35
  export interface SimpleAccountBalanceViewerParams extends CreatableProviderParams {
34
- blockViewer: BlockViewer
35
- context: BalanceStepSummaryContext
36
+ balanceSummaryContext: BalanceStepSummaryContext
36
37
  transfersSummaryContext: TransfersStepSummaryContext
37
38
  }
38
39
 
@@ -42,24 +43,25 @@ export class SimpleAccountBalanceViewer extends AbstractCreatableProvider<Simple
42
43
  static readonly monikers = [AccountBalanceViewerMoniker]
43
44
  moniker = SimpleAccountBalanceViewer.defaultMoniker
44
45
 
45
- get blockViewer(): BlockViewer {
46
- return this.params.blockViewer!
46
+ private _blockViewer?: BlockViewer
47
+
48
+ get balanceSummaryContext() {
49
+ return this.params.balanceSummaryContext!
47
50
  }
48
51
 
49
- get context(): BalanceStepSummaryContext {
50
- return this.params.context!
52
+ get blockViewer() {
53
+ return this._blockViewer!
51
54
  }
52
55
 
53
- get transfersSummaryContext(): TransfersStepSummaryContext {
56
+ get transfersSummaryContext() {
54
57
  return this.params.transfersSummaryContext!
55
58
  }
56
59
 
57
- static override async paramsHandler(params: Partial<SimpleAccountBalanceViewerParams>) {
58
- assertEx(params.blockViewer, () => 'blockViewer is required')
59
- assertEx(params.context, () => 'context is required')
60
+ static override async paramsHandler(params: Partial<SimpleAccountBalanceViewerParams> = {}) {
60
61
  assertEx(params.transfersSummaryContext, () => 'transfersSummaryContext is required')
62
+ assertEx(params.balanceSummaryContext, () => 'balanceSummaryContext is required')
61
63
 
62
- return { ...await super.paramsHandler(params) }
64
+ return await super.paramsHandler({ ...params })
63
65
  }
64
66
 
65
67
  async accountBalance(address: Address, headOrRange?: XL1BlockRange | Hash): Promise<AttoXL1> {
@@ -104,6 +106,11 @@ export class SimpleAccountBalanceViewer extends AbstractCreatableProvider<Simple
104
106
  return result
105
107
  }
106
108
 
109
+ override async createHandler() {
110
+ await super.createHandler()
111
+ this._blockViewer = await this.locator.getInstance(BlockViewerMoniker)
112
+ }
113
+
107
114
  async qualifiedAccountBalanceHistories(
108
115
  addresses: Address[],
109
116
  headOrRange?: Hash | XL1BlockRange,
@@ -146,7 +153,7 @@ export class SimpleAccountBalanceViewer extends AbstractCreatableProvider<Simple
146
153
  ): Promise<Qualified<Record<Address, AttoXL1>>> {
147
154
  return await spanRootAsync('qualifiedAccountsBalances', async () => {
148
155
  const qualifiedSummary = await balancesSummary(
149
- this.context,
156
+ this.balanceSummaryContext,
150
157
  )
151
158
  const result: Record<Address, AttoXL1> = {}
152
159
  for (const addr of address) {