@xyo-network/xl1-protocol-sdk 1.26.11 → 1.26.13

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 (316) hide show
  1. package/package.json +29 -16
  2. package/src/ChainContextHelpers.ts +0 -50
  3. package/src/CreatableProvider/AbstractCreatableProvider.ts +0 -97
  4. package/src/CreatableProvider/CreatableProvider.ts +0 -102
  5. package/src/CreatableProvider/CreatableProviderRegistry.ts +0 -94
  6. package/src/CreatableProvider/GetInstanceOptions.ts +0 -11
  7. package/src/CreatableProvider/LabeledCreatableProviderFactory.ts +0 -24
  8. package/src/CreatableProvider/ProviderFactory.ts +0 -138
  9. package/src/CreatableProvider/ProviderFactoryLocator.ts +0 -170
  10. package/src/CreatableProvider/ProviderFactoryLocatorInstance.ts +0 -70
  11. package/src/CreatableProvider/index.ts +0 -8
  12. package/src/SignedBigInt.ts +0 -59
  13. package/src/_internal/context/getTestProviderContext.ts +0 -13
  14. package/src/_internal/context/index.ts +0 -1
  15. package/src/_internal/index.ts +0 -2
  16. package/src/actor/ActorV3.ts +0 -177
  17. package/src/actor/index.ts +0 -1
  18. package/src/amount/ShiftedBigInt.ts +0 -73
  19. package/src/amount/XL1Amount.ts +0 -103
  20. package/src/amount/index.ts +0 -4
  21. package/src/amount/splitOnDecimal.ts +0 -6
  22. package/src/amount/splitOnDecimalToString.ts +0 -40
  23. package/src/block/hydrate/allHashesPresent.ts +0 -8
  24. package/src/block/hydrate/blockPayloadsFromHydratedBlock.ts +0 -12
  25. package/src/block/hydrate/flattenHydratedBlock.ts +0 -28
  26. package/src/block/hydrate/flattenHydratedBlocks.ts +0 -7
  27. package/src/block/hydrate/hydrateBlock.ts +0 -43
  28. package/src/block/hydrate/index.ts +0 -7
  29. package/src/block/hydrate/transactionsFromHydratedBlock.ts +0 -7
  30. package/src/block/hydrate/tryHydrateBlock.ts +0 -26
  31. package/src/block/index.ts +0 -2
  32. package/src/block/primitives/blockFromBlockNumber.ts +0 -69
  33. package/src/block/primitives/frames/calculateFramesFromRange.ts +0 -30
  34. package/src/block/primitives/frames/deepCalculateFramesFromRange.ts +0 -28
  35. package/src/block/primitives/frames/index.ts +0 -2
  36. package/src/block/primitives/hashFromBlockNumber.ts +0 -9
  37. package/src/block/primitives/index.ts +0 -7
  38. package/src/block/primitives/model.ts +0 -18
  39. package/src/block/primitives/payloads/ChainWindow.ts +0 -7
  40. package/src/block/primitives/payloads/index.ts +0 -1
  41. package/src/block/primitives/toStepIdentityString.ts +0 -6
  42. package/src/block/primitives/validateTransactionOpcodes.ts +0 -45
  43. package/src/config/Actor.ts +0 -32
  44. package/src/config/Actors.ts +0 -9
  45. package/src/config/Base.ts +0 -27
  46. package/src/config/Chain.ts +0 -23
  47. package/src/config/Config.ts +0 -24
  48. package/src/config/DataLake/DataLake.ts +0 -12
  49. package/src/config/DataLake/DataLakeRemoteConfig.ts +0 -11
  50. package/src/config/DataLake/RestDataLakeConfig.ts +0 -18
  51. package/src/config/DataLake/RouterDataLakeConfig.ts +0 -22
  52. package/src/config/DataLake/index.ts +0 -4
  53. package/src/config/DeepPartial.ts +0 -4
  54. package/src/config/Evm.ts +0 -38
  55. package/src/config/HostActor.ts +0 -32
  56. package/src/config/Log.ts +0 -25
  57. package/src/config/Provider.ts +0 -20
  58. package/src/config/Providers.ts +0 -9
  59. package/src/config/Remote.ts +0 -59
  60. package/src/config/Telemetry.ts +0 -49
  61. package/src/config/UsageMeta.ts +0 -46
  62. package/src/config/Validation.ts +0 -29
  63. package/src/config/index.ts +0 -12
  64. package/src/config/storage/Storage.ts +0 -16
  65. package/src/config/storage/driver/Mongo.ts +0 -53
  66. package/src/config/storage/driver/index.ts +0 -1
  67. package/src/config/storage/index.ts +0 -2
  68. package/src/constants.ts +0 -4
  69. package/src/context/Actor.ts +0 -20
  70. package/src/context/HostActor.ts +0 -20
  71. package/src/context/getEmptyProviderContext.ts +0 -19
  72. package/src/context/index.ts +0 -3
  73. package/src/createDeclarationPayload.ts +0 -15
  74. package/src/createTransferPayload.ts +0 -16
  75. package/src/driver/cache/LruCacheMap.ts +0 -48
  76. package/src/driver/cache/index.ts +0 -1
  77. package/src/driver/index.ts +0 -2
  78. package/src/driver/memory/MemoryMap.ts +0 -48
  79. package/src/driver/memory/index.ts +0 -1
  80. package/src/eip-712/Payloads/EIP712Data.ts +0 -35
  81. package/src/eip-712/Payloads/EIP712Signature.ts +0 -32
  82. package/src/eip-712/Payloads/index.ts +0 -2
  83. package/src/eip-712/Types.ts +0 -41
  84. package/src/eip-712/index.ts +0 -4
  85. package/src/eip-712/sign.ts +0 -19
  86. package/src/eip-712/spec/fixtures.ts +0 -27
  87. package/src/eip-712/verify.ts +0 -20
  88. package/src/getFileConfig.ts +0 -36
  89. package/src/index.ts +0 -27
  90. package/src/instances/Address.ts +0 -16
  91. package/src/instances/BoundWitness.ts +0 -13
  92. package/src/instances/Data.ts +0 -4
  93. package/src/instances/Fees.ts +0 -9
  94. package/src/instances/HydratedBoundWitness.ts +0 -16
  95. package/src/instances/Object.ts +0 -6
  96. package/src/instances/Payload.ts +0 -7
  97. package/src/instances/Signature.ts +0 -12
  98. package/src/instances/block/BlockFields.ts +0 -18
  99. package/src/instances/block/HydratedBlock.ts +0 -10
  100. package/src/instances/block/index.ts +0 -1
  101. package/src/instances/index.ts +0 -10
  102. package/src/instances/modifiers/BlockWindowInstance.ts +0 -8
  103. package/src/instances/modifiers/BlockWindowState.ts +0 -6
  104. package/src/instances/modifiers/Signed.ts +0 -9
  105. package/src/instances/modifiers/Validatable.ts +0 -6
  106. package/src/instances/modifiers/index.ts +0 -4
  107. package/src/instances/transaction/HydratedTransaction.ts +0 -9
  108. package/src/instances/transaction/TransactionFields.ts +0 -22
  109. package/src/instances/transaction/index.ts +0 -1
  110. package/src/isInternetAvailable.ts +0 -11
  111. package/src/model/ChainFork/ChainForkStatic.ts +0 -9
  112. package/src/model/ChainFork/index.ts +0 -1
  113. package/src/model/ChainIdentity.ts +0 -6
  114. package/src/model/ChainStore.ts +0 -16
  115. package/src/model/CreatableProviderContext.ts +0 -6
  116. package/src/model/CreatableProviderContext.zod.ts +0 -55
  117. package/src/model/PayloadBundle/bundledPayloadToHydratedBlock.ts +0 -15
  118. package/src/model/PayloadBundle/bundledPayloadToHydratedTransaction.ts +0 -15
  119. package/src/model/PayloadBundle/hydratedBlockToPayloadBundle.ts +0 -19
  120. package/src/model/PayloadBundle/hydratedTransactionToPayloadBundle.ts +0 -19
  121. package/src/model/PayloadBundle/index.ts +0 -4
  122. package/src/model/index.ts +0 -6
  123. package/src/multipliers.ts +0 -18
  124. package/src/payloads/AddressPairPayload.ts +0 -27
  125. package/src/payloads/index.ts +0 -4
  126. package/src/payloads/netBalancesForPayloads.ts +0 -24
  127. package/src/payloads/netSchemasForPayloads.ts +0 -24
  128. package/src/payloads/netTransfersForPayloads.ts +0 -27
  129. package/src/primitives/block/index.ts +0 -2
  130. package/src/primitives/block/range/blockRangeSteps.ts +0 -23
  131. package/src/primitives/block/range/index.ts +0 -1
  132. package/src/primitives/block/rate/blockRate.ts +0 -77
  133. package/src/primitives/block/rate/index.ts +0 -4
  134. package/src/primitives/block/rate/stepRate.ts +0 -37
  135. package/src/primitives/block/rate/timeHelpers.ts +0 -61
  136. package/src/primitives/block/rate/timeRate.ts +0 -121
  137. package/src/primitives/chain/getWindowedChain.ts +0 -50
  138. package/src/primitives/chain/index.ts +0 -3
  139. package/src/primitives/chain/step/chainStepRewardAddress.ts +0 -30
  140. package/src/primitives/chain/step/index.ts +0 -4
  141. package/src/primitives/chain/step/stepRewardBlock.ts +0 -13
  142. package/src/primitives/chain/step/stepRewardTotal.ts +0 -46
  143. package/src/primitives/chain/step/stepsRewardTotal.ts +0 -37
  144. package/src/primitives/chain/time/externalBlockNumberFromXL1BlockNumber.ts +0 -32
  145. package/src/primitives/chain/time/externalBlockRangeFromStep.ts +0 -21
  146. package/src/primitives/chain/time/externalBlockRangeFromXL1BlockRange.ts +0 -17
  147. package/src/primitives/chain/time/index.ts +0 -3
  148. package/src/primitives/datalake/addDataLakePayloads.ts +0 -18
  149. package/src/primitives/datalake/addDataLakePayloadsToPayloads.ts +0 -24
  150. package/src/primitives/datalake/index.ts +0 -2
  151. package/src/primitives/index.ts +0 -13
  152. package/src/primitives/mapToMapType.ts +0 -35
  153. package/src/primitives/payload/index.ts +0 -1
  154. package/src/primitives/payload/mergeTransfers.ts +0 -16
  155. package/src/primitives/readPayloadMapFromStore.ts +0 -58
  156. package/src/primitives/rewardFromBlockNumber.ts +0 -19
  157. package/src/primitives/rewards/index.ts +0 -1
  158. package/src/primitives/rewards/networkStakeStepRewardPositionWeight.ts +0 -26
  159. package/src/primitives/stake/activeStakeAtTimeByAddress.ts +0 -27
  160. package/src/primitives/stake/activeStakeAtTimeByPosition.ts +0 -25
  161. package/src/primitives/stake/allStakersForRange.ts +0 -32
  162. package/src/primitives/stake/allStakersForStep.ts +0 -24
  163. package/src/primitives/stake/index.ts +0 -6
  164. package/src/primitives/stake/mergedAddRemoveStakeEventsByPosition.ts +0 -15
  165. package/src/primitives/stake/mergedAddRemoveStakeEventsByStaker.ts +0 -17
  166. package/src/primitives/stake/weightedStakeForRangeByPosition.ts +0 -69
  167. package/src/primitives/state/findMostRecentBlock.ts +0 -44
  168. package/src/primitives/state/hydratedBlockByNumber.ts +0 -25
  169. package/src/primitives/state/index.ts +0 -2
  170. package/src/primitives/step/completedStepRewardAddress.ts +0 -10
  171. package/src/primitives/step/derivedReceiveAddress.ts +0 -9
  172. package/src/primitives/step/index.ts +0 -4
  173. package/src/primitives/step/stepBlockRange.ts +0 -9
  174. package/src/primitives/step/stepTransferIndex.ts +0 -19
  175. package/src/primitives/transaction/elevatedPayloads.ts +0 -24
  176. package/src/primitives/transaction/index.ts +0 -1
  177. package/src/primitives/uncle/findBestUncle.ts +0 -9
  178. package/src/primitives/uncle/findUncles.ts +0 -75
  179. package/src/primitives/uncle/index.ts +0 -3
  180. package/src/primitives/uncle/scoreUncle.ts +0 -7
  181. package/src/services/AccountTransfersService.ts +0 -13
  182. package/src/services/BlockProducerService.ts +0 -11
  183. package/src/services/Chain/BaseChainService.ts +0 -4
  184. package/src/services/Chain/ChainHeadService.ts +0 -8
  185. package/src/services/Chain/ChainService.ts +0 -6
  186. package/src/services/Chain/index.ts +0 -3
  187. package/src/services/Election.ts +0 -14
  188. package/src/services/NetworkStakeService.ts +0 -4
  189. package/src/services/Params.ts +0 -13
  190. package/src/services/PendingTransactionsService.ts +0 -7
  191. package/src/services/SchemasService.ts +0 -11
  192. package/src/services/StakeIntentService/ChainIndexingServiceStateSchema.ts +0 -50
  193. package/src/services/StakeIntentService/StakeIntentService.ts +0 -35
  194. package/src/services/StakeIntentService/index.ts +0 -2
  195. package/src/services/index.ts +0 -8
  196. package/src/simple/StakeEventsViewer/SimpleStakeEventsViewer.ts +0 -93
  197. package/src/simple/StakeEventsViewer/index.ts +0 -1
  198. package/src/simple/StakeTotalsViewer/SimpleStakeTotalsViewer.ts +0 -116
  199. package/src/simple/StakeTotalsViewer/index.ts +0 -1
  200. package/src/simple/StakeViewer/SimpleStakeViewer.ts +0 -164
  201. package/src/simple/StakeViewer/index.ts +0 -1
  202. package/src/simple/TransactionViewer/SimpleTransactionViewer.ts +0 -100
  203. package/src/simple/TransactionViewer/index.ts +0 -1
  204. package/src/simple/accountBalance/SimpleAccountBalanceViewer.ts +0 -271
  205. package/src/simple/accountBalance/index.ts +0 -1
  206. package/src/simple/block/SimpleBlockViewer.ts +0 -231
  207. package/src/simple/block/index.ts +0 -1
  208. package/src/simple/blockInvalidation/SimpleBlockInvalidationViewer.ts +0 -197
  209. package/src/simple/blockInvalidation/index.ts +0 -1
  210. package/src/simple/blockReward/SimpleBlockRewardViewer.ts +0 -27
  211. package/src/simple/blockReward/index.ts +0 -1
  212. package/src/simple/blockValidation/SimpleBlockValidationViewer.ts +0 -194
  213. package/src/simple/blockValidation/index.ts +0 -1
  214. package/src/simple/chainContractViewer/SimpleChainContractViewer.ts +0 -92
  215. package/src/simple/chainContractViewer/index.ts +0 -1
  216. package/src/simple/client/SimpleXyoClient.ts +0 -14
  217. package/src/simple/client/index.ts +0 -1
  218. package/src/simple/datalake/AbstractRestDataLake.ts +0 -70
  219. package/src/simple/datalake/AbstractSimpleDataLake.ts +0 -62
  220. package/src/simple/datalake/RestDataLakeRunner.ts +0 -54
  221. package/src/simple/datalake/RestDataLakeViewer.ts +0 -22
  222. package/src/simple/datalake/SimpleDataLakeRunner.ts +0 -44
  223. package/src/simple/datalake/SimpleDataLakeViewer.ts +0 -24
  224. package/src/simple/datalake/index.ts +0 -4
  225. package/src/simple/finalization/SimpleFinalizationRunner.ts +0 -45
  226. package/src/simple/finalization/SimpleFinalizationViewer.ts +0 -123
  227. package/src/simple/finalization/index.ts +0 -2
  228. package/src/simple/gateway/SimpleXyoGateway.ts +0 -30
  229. package/src/simple/gateway/SimpleXyoGatewayRunner.ts +0 -137
  230. package/src/simple/gateway/index.ts +0 -2
  231. package/src/simple/index.ts +0 -22
  232. package/src/simple/mempool/SimpleMempoolRunner.ts +0 -390
  233. package/src/simple/mempool/SimpleMempoolViewer.ts +0 -215
  234. package/src/simple/mempool/index.ts +0 -2
  235. package/src/simple/network/SimpleXyoNetwork.ts +0 -48
  236. package/src/simple/network/index.ts +0 -1
  237. package/src/simple/network/lib/FailedNetworkStatusPayloads.ts +0 -16
  238. package/src/simple/network/lib/StatusNetworks.ts +0 -32
  239. package/src/simple/network/lib/index.ts +0 -2
  240. package/src/simple/permissions/SimpleXyoPermissions.ts +0 -82
  241. package/src/simple/permissions/index.ts +0 -2
  242. package/src/simple/permissions/store/MemoryPermissions.ts +0 -32
  243. package/src/simple/permissions/store/PermissionsStore.ts +0 -17
  244. package/src/simple/permissions/store/index.ts +0 -2
  245. package/src/simple/runner/SimpleXyoRunner.ts +0 -41
  246. package/src/simple/runner/index.ts +0 -1
  247. package/src/simple/signer/SimpleXyoSigner.ts +0 -78
  248. package/src/simple/signer/index.ts +0 -1
  249. package/src/simple/timeSync2/SimpleTimeSyncViewer.ts +0 -132
  250. package/src/simple/timeSync2/index.ts +0 -1
  251. package/src/simple/transactionInvalidation/SimpleTransactionInvalidationViewer.ts +0 -197
  252. package/src/simple/transactionInvalidation/index.ts +0 -1
  253. package/src/simple/transactionValidation/SimpleTransactionValidationViewer.ts +0 -173
  254. package/src/simple/transactionValidation/index.ts +0 -1
  255. package/src/simple/windowedBlock/SimpleWindowedBlockViewer.ts +0 -207
  256. package/src/simple/windowedBlock/index.ts +0 -1
  257. package/src/status/RuntimeStatusMonitor.ts +0 -120
  258. package/src/status/ServiceStatus.ts +0 -21
  259. package/src/status/index.ts +0 -2
  260. package/src/summary/index.ts +0 -2
  261. package/src/summary/model/BalancesStepSummary.ts +0 -35
  262. package/src/summary/model/SchemasStepSummary.ts +0 -33
  263. package/src/summary/model/StepSummary.ts +0 -20
  264. package/src/summary/model/TransfersSummary.ts +0 -36
  265. package/src/summary/model/index.ts +0 -4
  266. package/src/summary/primitives/balances/balancesStepSummaryFromRange.ts +0 -94
  267. package/src/summary/primitives/balances/balancesSummary.ts +0 -48
  268. package/src/summary/primitives/balances/index.ts +0 -2
  269. package/src/summary/primitives/index.ts +0 -3
  270. package/src/summary/primitives/schemas/index.ts +0 -2
  271. package/src/summary/primitives/schemas/schemasStepSummaryFromRange.ts +0 -86
  272. package/src/summary/primitives/schemas/schemasSummary.ts +0 -44
  273. package/src/summary/primitives/transfers/index.ts +0 -2
  274. package/src/summary/primitives/transfers/transfersStepSummaryFromRange.ts +0 -109
  275. package/src/summary/primitives/transfers/transfersSummary.ts +0 -52
  276. package/src/test/BuildBlockOptions.ts +0 -81
  277. package/src/test/buildBlock.ts +0 -105
  278. package/src/test/buildGenesisBlock.ts +0 -29
  279. package/src/test/buildNextBlock.ts +0 -37
  280. package/src/test/buildRandomChain.ts +0 -92
  281. package/src/test/buildRandomGenesisBlock.ts +0 -47
  282. package/src/test/createGenesisBlock.ts +0 -41
  283. package/src/test/createProducerChainStakeIntentTransaction.ts +0 -48
  284. package/src/test/getSimpleBlockViewerLocator.ts +0 -41
  285. package/src/test/getTestProviderContext.ts +0 -8
  286. package/src/test/index.ts +0 -2
  287. package/src/time/index.ts +0 -1
  288. package/src/time/primitives/index.ts +0 -1
  289. package/src/time/primitives/xl1BlockNumberToEthBlockNumber.ts +0 -13
  290. package/src/transaction/TransactionBuilder.ts +0 -164
  291. package/src/transaction/buildRandomTransaction.ts +0 -38
  292. package/src/transaction/buildTransaction.ts +0 -68
  293. package/src/transaction/buildUnsignedTransaction.ts +0 -56
  294. package/src/transaction/confirmSubmittedTransaction.ts +0 -42
  295. package/src/transaction/hydrateTransaction.ts +0 -117
  296. package/src/transaction/index.ts +0 -9
  297. package/src/transaction/primitives/index.ts +0 -4
  298. package/src/transaction/primitives/transactionBlockByteCount.ts +0 -10
  299. package/src/transaction/primitives/transactionElevatedPayloads.ts +0 -18
  300. package/src/transaction/primitives/transactionOperations.ts +0 -13
  301. package/src/transaction/primitives/transactionRequiredGas.ts +0 -22
  302. package/src/transaction/script.ts +0 -48
  303. package/src/transaction/signTransaction.ts +0 -32
  304. package/src/utils/HydratedCache.ts +0 -39
  305. package/src/utils/index.ts +0 -2
  306. package/src/utils/isZodError.ts +0 -11
  307. package/src/validation/index.ts +0 -2
  308. package/src/validation/lib/getUrl.ts +0 -7
  309. package/src/validation/lib/index.ts +0 -2
  310. package/src/validation/lib/isLocalhost.ts +0 -9
  311. package/src/validation/schema/Address.ts +0 -2
  312. package/src/validation/schema/Mnemonic.ts +0 -21
  313. package/src/validation/schema/index.ts +0 -2
  314. package/src/wallet/generateXyoBaseWalletFromPhrase.ts +0 -13
  315. package/src/wallet/index.ts +0 -2
  316. package/src/wallet/paths.ts +0 -17
@@ -1,207 +0,0 @@
1
- import {
2
- assertEx, exists, type Hash, isNull, type Promisable,
3
- } from '@xylabs/sdk-js'
4
- import type { Payload, WithHashMeta } from '@xyo-network/sdk-js'
5
- import type {
6
- BlockViewer,
7
- ChainId, HydratedBlockWithHashMeta, SignedHydratedBlockWithHashMeta, SyncMap, WindowedBlockViewer, XL1BlockNumber,
8
- } from '@xyo-network/xl1-protocol-lib'
9
- import {
10
- asXL1BlockNumber, BlockViewerMoniker, WindowedBlockViewerMoniker,
11
- } from '@xyo-network/xl1-protocol-lib'
12
- import { Mutex } from 'async-mutex'
13
-
14
- import { transactionsFromHydratedBlock } from '../../block/index.ts'
15
- import {
16
- AbstractCreatableProvider, creatableProvider, type CreatableProviderParams,
17
- } from '../../CreatableProvider/index.ts'
18
- import { MemoryMap } from '../../driver/index.ts'
19
-
20
- /** Parameters for SimpleWindowedBlockViewer. */
21
- export interface SimpleWindowedBlockViewerParams extends CreatableProviderParams {
22
- blockViewer?: BlockViewer
23
- maxWindowSize: number
24
- syncInterval: number
25
- }
26
-
27
- /** SimpleWindowedBlockViewer implementation. */
28
- @creatableProvider()
29
- export class SimpleWindowedBlockViewer extends AbstractCreatableProvider<SimpleWindowedBlockViewerParams> implements WindowedBlockViewer {
30
- static readonly defaultMoniker = WindowedBlockViewerMoniker
31
- static readonly dependencies = [BlockViewerMoniker]
32
- static readonly monikers = [WindowedBlockViewerMoniker]
33
- moniker = WindowedBlockViewerMoniker
34
-
35
- private _blockHashMap!: SyncMap<Hash, SignedHydratedBlockWithHashMeta>
36
- private _blockNumberMap!: SyncMap<XL1BlockNumber, SignedHydratedBlockWithHashMeta>
37
- // the external BlockViewer
38
- private _blockViewer!: BlockViewer
39
- private _chain: SignedHydratedBlockWithHashMeta[] = []
40
- private _syncMutex = new Mutex()
41
- private _timerId: ReturnType<typeof setInterval> | null = null
42
- private _transactionHashMap!: SyncMap<Hash, SignedHydratedBlockWithHashMeta>
43
-
44
- protected get maxWindowSize() {
45
- return this.params.maxWindowSize
46
- }
47
-
48
- protected get syncInterval() {
49
- return this.params.syncInterval
50
- }
51
-
52
- static override async paramsHandler(params?: Partial<SimpleWindowedBlockViewerParams>): Promise<SimpleWindowedBlockViewerParams> {
53
- return {
54
- ...await super.paramsHandler(params),
55
- maxWindowSize: params?.maxWindowSize ?? 1000,
56
- syncInterval: params?.syncInterval ?? 10_000,
57
- }
58
- }
59
-
60
- blockByHash(hash: Hash) {
61
- return this._blockHashMap.get(hash) ?? null
62
- }
63
-
64
- blockByNumber(blockNumber: XL1BlockNumber) {
65
- return this._blockNumberMap.get(blockNumber) ?? null
66
- }
67
-
68
- async blockByTransactionHash(hash: Hash) {
69
- const [block = null] = await this.blocksByTransactionHashes([hash])
70
- return block
71
- }
72
-
73
- blocksByHash(hash: Hash, limit?: number) {
74
- const result: SignedHydratedBlockWithHashMeta[] = []
75
- let block = this._blockHashMap.get(hash)
76
- while (block && (limit === undefined || result.length < limit)) {
77
- result.unshift(block)
78
- const previousHash = block[0].previous
79
- block = previousHash ? this._blockHashMap.get(previousHash) : undefined
80
- }
81
- return result
82
- }
83
-
84
- blocksByNumber(blockNumber: XL1BlockNumber, limit?: number) {
85
- const result: SignedHydratedBlockWithHashMeta[] = []
86
- let block = this._blockNumberMap.get(blockNumber)
87
- while (block && (limit === undefined || result.length < limit)) {
88
- result.unshift(block)
89
- const previousBlockNumber = asXL1BlockNumber(block[0].block - 1, true)
90
- block = (previousBlockNumber >= 0) ? this._blockNumberMap.get(previousBlockNumber) : undefined
91
- }
92
- return result
93
- }
94
-
95
- blocksByTransactionHashes(hashes: Hash[]): Promisable<HydratedBlockWithHashMeta[]> {
96
- return hashes.map(hash => this._transactionHashMap.get(hash)).filter(exists)
97
- }
98
-
99
- chainId(_blockNumber?: unknown): Promisable<ChainId> {
100
- throw new Error('Method not implemented.')
101
- }
102
-
103
- override async createHandler() {
104
- await super.createHandler()
105
-
106
- this._blockViewer = assertEx(
107
- this.params.blockViewer ?? await this.locator.getInstance<BlockViewer>(BlockViewerMoniker),
108
- () => 'BlockViewer instance is required',
109
- )
110
- this._blockHashMap = new MemoryMap<Hash, SignedHydratedBlockWithHashMeta>()
111
- this._blockNumberMap = new MemoryMap<XL1BlockNumber, SignedHydratedBlockWithHashMeta>()
112
- this._transactionHashMap = new MemoryMap<Hash, SignedHydratedBlockWithHashMeta>()
113
- }
114
-
115
- currentBlock(): Promisable<SignedHydratedBlockWithHashMeta> {
116
- return assertEx(this._chain.at(-1))
117
- }
118
-
119
- currentBlockHash(): Promisable<Hash> {
120
- return assertEx(this._chain.at(-1)?.[0]._hash)
121
- }
122
-
123
- currentBlockNumber(): Promisable<XL1BlockNumber> {
124
- return assertEx(this._chain.at(-1)?.[0].block)
125
- }
126
-
127
- async payloadByHash(hash: Hash): Promise<WithHashMeta<Payload> | null> {
128
- const payloads = await this.payloadsByHash([hash])
129
- return payloads.length > 0 ? payloads[0] : null
130
- }
131
-
132
- payloadsByHash(_hashes: Hash[]): Promisable<WithHashMeta<Payload>[]> {
133
- throw new Error('Method not implemented.')
134
- }
135
-
136
- override async startHandler() {
137
- await super.startHandler()
138
- await this.sync()
139
- this.stopPoll()
140
- this.startPoll()
141
- }
142
-
143
- override async stopHandler() {
144
- await super.stopHandler()
145
- this.stopPoll()
146
- }
147
-
148
- private addBlock(block: SignedHydratedBlockWithHashMeta) {
149
- // Add the new block to the end of the window
150
- this._chain.push(block)
151
-
152
- // Index the new block
153
- this._blockHashMap.set(block[0]._hash, block)
154
- this._blockNumberMap.set(block[0].block, block)
155
- for (const tx of transactionsFromHydratedBlock(block)) {
156
- this._transactionHashMap.set(tx._hash, block)
157
- }
158
-
159
- // Purge only if the window size is exceeded
160
- while (this._chain.length > this.maxWindowSize) {
161
- const removedBlock = this._chain.shift()
162
- if (!removedBlock) break
163
-
164
- this._blockHashMap.delete(removedBlock[0]._hash)
165
- this._blockNumberMap.delete(removedBlock[0].block)
166
- for (const tx of transactionsFromHydratedBlock(removedBlock)) {
167
- this._transactionHashMap.delete(tx._hash)
168
- }
169
- }
170
- }
171
-
172
- private startPoll() {
173
- this._timerId = setInterval(() => {
174
- void this.sync()
175
- }, this.syncInterval)
176
- }
177
-
178
- private stopPoll() {
179
- if (this._timerId) {
180
- clearInterval(this._timerId)
181
- }
182
- this._timerId = null
183
- }
184
-
185
- private async sync() {
186
- if (this._syncMutex.isLocked()) {
187
- return
188
- }
189
- return await this._syncMutex.runExclusive(async () => {
190
- try {
191
- let cursor: SignedHydratedBlockWithHashMeta | null = await this._blockViewer.currentBlock()
192
- const previousHead = this._chain.length > 0 ? await this.currentBlockHash() : null
193
- const newBlocks: SignedHydratedBlockWithHashMeta[] = []
194
- while (!isNull(cursor) && cursor[0]._hash !== previousHead && newBlocks.length < this.maxWindowSize) {
195
- newBlocks.unshift(cursor)
196
- const previousHash = newBlocks[0][0].previous
197
- cursor = isNull(previousHash) ? null : await this._blockViewer.blockByHash(previousHash)
198
- }
199
- for (const block of newBlocks) {
200
- this.addBlock(block)
201
- }
202
- } catch (ex) {
203
- console.error('Error during sync:', ex)
204
- }
205
- })
206
- }
207
- }
@@ -1 +0,0 @@
1
- export * from './SimpleWindowedBlockViewer.ts'
@@ -1,120 +0,0 @@
1
- import type { CreatableName, CreatableStatus } from '@xylabs/sdk-js'
2
-
3
- import { LoggerStatusReporter } from './ServiceStatus.ts'
4
-
5
- /**
6
- * Enum-like record for statuses with priority allowing
7
- * for determination of the aggregated status.
8
- */
9
- const statusPriority: Record<CreatableStatus, number> = {
10
- error: 0,
11
- stopped: 1,
12
- stopping: 2,
13
- creating: 3,
14
- created: 4,
15
- starting: 5,
16
- started: 6,
17
- }
18
-
19
- /**
20
- * A sentinel status that represents the initial state
21
- * before any statuses are reported.
22
- * It is used to ensure that the monitor has a valid status
23
- * even when no statuses have been reported yet and to
24
- * prevent the system from showing an "error" state
25
- * when no statuses are available.
26
- */
27
- const SENTINEL_STATUS: CreatableStatus = 'starting'
28
-
29
- /**
30
- * Given an array of statuses, this function reduces them
31
- * to the minimum status based on the defined priority.
32
- * @param statuses An array of statuses to reduce.
33
- * @returns The minimum status based on priority.
34
- */
35
- const reduceToMinimumStatus = (statuses: CreatableStatus[]): CreatableStatus => {
36
- let minStatus: CreatableStatus = SENTINEL_STATUS
37
- let minPriority = Infinity
38
-
39
- for (const status of statuses) {
40
- const priority = statusPriority[status]
41
- if (priority < minPriority) {
42
- minPriority = priority
43
- minStatus = status
44
- }
45
- }
46
- return minStatus
47
- }
48
-
49
- /** Handler for global status transitions with optional from/to filters */
50
- export type GlobalTransitionHandler = {
51
- from?: CreatableStatus
52
- handler: (from: CreatableStatus, to: CreatableStatus) => void
53
- to?: CreatableStatus
54
- }
55
- /** Handler for named service status transitions with optional from/to filters */
56
- export type TransitionHandler = GlobalTransitionHandler & {
57
- name?: string
58
- }
59
-
60
- /** Monitors runtime service statuses and fires transition callbacks on status changes */
61
- export class RuntimeStatusMonitor extends LoggerStatusReporter {
62
- private globalTransitions: GlobalTransitionHandler[] = []
63
- private transitions: TransitionHandler[] = []
64
-
65
- getGlobalStatus(): CreatableStatus {
66
- // If no statuses have been reported, return the sentinel status
67
- if (Object.keys(this.statusMap).length === 0) return SENTINEL_STATUS
68
- return reduceToMinimumStatus(Object.values(this.statusMap))
69
- }
70
-
71
- getStatus(name: CreatableName): CreatableStatus | undefined {
72
- return this.statusMap[name]
73
- }
74
-
75
- onGlobalTransition(match: { from?: CreatableStatus; to?: CreatableStatus }, handler: (from: CreatableStatus, to: CreatableStatus) => void) {
76
- this.globalTransitions.push({ ...match, handler })
77
- }
78
-
79
- /**
80
- * Register a callback to be called on a specific transition.
81
- */
82
- onTransition(match: { from?: CreatableStatus; name: string; to?: CreatableStatus }, handler: (from: CreatableStatus, to: CreatableStatus) => void) {
83
- this.transitions.push({ ...match, handler })
84
- }
85
-
86
- override report(name: CreatableName, status: CreatableStatus, progress?: number | Error): void {
87
- // Capture the current status before updating
88
- const previous = this.statusMap[name]
89
- const previousGlobal = this.getGlobalStatus()
90
-
91
- // Update the status map with the new status
92
- super.report(name, status, progress)
93
-
94
- // If the status hasn't changed, do not run handlers
95
- if (previous === status) return
96
- this.runTransitions(this.transitions, previous, status, name)
97
-
98
- // If the global status hasn't changed, do not run handlers
99
- const globalStatus = this.getGlobalStatus()
100
- if (previousGlobal === globalStatus) return
101
- this.runTransitions(this.globalTransitions, previousGlobal, globalStatus)
102
- }
103
-
104
- private runTransitions(
105
- transitions: (TransitionHandler | GlobalTransitionHandler)[],
106
- prev: CreatableStatus,
107
- next: CreatableStatus,
108
- name?: string,
109
- ) {
110
- for (const {
111
- from, to, name: matchName, handler,
112
- } of transitions as TransitionHandler[]) {
113
- if ((matchName === undefined || matchName === name)
114
- && (from === undefined || from === prev)
115
- && (to === undefined || to === next)) {
116
- handler(prev, next)
117
- }
118
- }
119
- }
120
- }
@@ -1,21 +0,0 @@
1
- import type {
2
- CreatableName, CreatableStatus, CreatableStatusReporter, Logger,
3
- } from '@xylabs/sdk-js'
4
-
5
- /** Status reporter that logs status changes and tracks service status counts */
6
- export class LoggerStatusReporter implements CreatableStatusReporter {
7
- protected logger: Logger
8
-
9
- protected statusMap: Record<CreatableName, CreatableStatus> = {}
10
-
11
- constructor(logger: Logger) {
12
- this.logger = logger
13
- }
14
-
15
- report(name: CreatableName, status: CreatableStatus, progress?: number | Error): void {
16
- this.statusMap[name] = status
17
- const starting = (Object.entries(this.statusMap).map(([, value]): number => value === 'starting' ? 1 : 0)).reduce((a, b) => a + b, 0)
18
- const started = (Object.entries(this.statusMap).map(([, value]): number => value === 'started' ? 1 : 0)).reduce((a, b) => a + b, 0)
19
- this.logger.info(`${started}/${starting + started} ${name} status: ${status}`, { progress })
20
- }
21
- }
@@ -1,2 +0,0 @@
1
- export * from './RuntimeStatusMonitor.ts'
2
- export * from './ServiceStatus.ts'
@@ -1,2 +0,0 @@
1
- export * from './model/index.ts'
2
- export * from './primitives/index.ts'
@@ -1,35 +0,0 @@
1
- import type { Address } from '@xylabs/sdk-js'
2
- import { AsObjectFactory } from '@xylabs/sdk-js'
3
- import type { WithStorageMeta } from '@xyo-network/sdk-js'
4
- import {
5
- asSchema, isPayloadOfSchemaType, isStorageMeta,
6
- } from '@xyo-network/sdk-js'
7
-
8
- import type { SignedBigInt } from '../../SignedBigInt.ts'
9
- import type { StepSummary } from './StepSummary.ts'
10
-
11
- /** Schema identifier for balances step summary payloads */
12
- export const BalancesStepSummarySchema = asSchema('network.xyo.step.summary.balances', true)
13
- /** Schema type for BalancesStepSummary payloads. */
14
- export type BalancesStepSummarySchema = typeof BalancesStepSummarySchema
15
-
16
- /** Step summary payload containing net balance changes per address */
17
- export type BalancesStepSummary = StepSummary<{
18
- balances: Record<Address, SignedBigInt>
19
- }, BalancesStepSummarySchema>
20
-
21
- /**
22
- * Identity function for determining if an object is an BalancesStepSummary
23
- */
24
- export const isBalancesStepSummary = isPayloadOfSchemaType<BalancesStepSummary>(BalancesStepSummarySchema)
25
- /** Type assertion factory for BalancesStepSummary payloads */
26
- export const asBalancesStepSummary = AsObjectFactory.create<BalancesStepSummary>(isBalancesStepSummary)
27
-
28
- /**
29
- * Identity function for determining if an object is an BalancesStepSummary with Storage Meta
30
- */
31
- export const isBalancesStepSummaryWithStorageMeta = (value: unknown): value is WithStorageMeta<BalancesStepSummary> => {
32
- return isBalancesStepSummary(value) && isStorageMeta(value)
33
- }
34
- /** Type assertion factory for BalancesStepSummary with storage metadata */
35
- export const asBalancesStepSummaryWithStorageMeta = AsObjectFactory.create<WithStorageMeta<BalancesStepSummary>>(isBalancesStepSummaryWithStorageMeta)
@@ -1,33 +0,0 @@
1
- import { AsObjectFactory } from '@xylabs/sdk-js'
2
- import type { Schema, WithStorageMeta } from '@xyo-network/sdk-js'
3
- import {
4
- asSchema, isPayloadOfSchemaType, isStorageMeta,
5
- } from '@xyo-network/sdk-js'
6
-
7
- import type { StepSummary } from './StepSummary.ts'
8
-
9
- /** Schema identifier for schemas step summary payloads */
10
- export const SchemasStepSummarySchema = asSchema('network.xyo.step.summary.schemas', true)
11
- /** Schema type for sStepSummary payloads. */
12
- export type SchemasStepSummarySchema = typeof SchemasStepSummarySchema
13
-
14
- /** Step summary payload containing schema occurrence counts */
15
- export type SchemasStepSummary = StepSummary<{
16
- schemas: Record<Schema, number>
17
- }, SchemasStepSummarySchema>
18
-
19
- /**
20
- * Identity function for determining if an object is an SchemasStepSummary
21
- */
22
- export const isSchemasStepSummary = isPayloadOfSchemaType<SchemasStepSummary>(SchemasStepSummarySchema)
23
- /** Type assertion factory for SchemasStepSummary payloads */
24
- export const asSchemasStepSummary = AsObjectFactory.create<SchemasStepSummary>(isSchemasStepSummary)
25
-
26
- /**
27
- * Identity function for determining if an object is an SchemasStepSummary with Storage Meta
28
- */
29
- export const isSchemasStepSummaryWithStorageMeta = (value: unknown): value is WithStorageMeta<SchemasStepSummary> => {
30
- return isSchemasStepSummary(value) && isStorageMeta(value)
31
- }
32
- /** Type assertion factory for SchemasStepSummary with storage metadata */
33
- export const asSchemasStepSummaryWithStorageMeta = AsObjectFactory.create<WithStorageMeta<SchemasStepSummary>>(isSchemasStepSummaryWithStorageMeta)
@@ -1,20 +0,0 @@
1
- import type { EmptyObject, Hash } from '@xylabs/sdk-js'
2
- import {
3
- asSchema, type Payload, type Schema,
4
- } from '@xyo-network/sdk-js'
5
-
6
- /** Schema identifier for step summary payloads */
7
- export const StepSummarySchema = asSchema('network.xyo.step.summary', true)
8
- /** Schema type for StepSummary payloads. */
9
- export type StepSummarySchema = typeof StepSummarySchema
10
-
11
- /** Fields common to all step summary payloads */
12
- export interface StepSummaryFields {
13
- hash: Hash // the stepHash - the hash of the last block in the step frame
14
- stepSize: number // the stepSize in blocks
15
- }
16
-
17
- /** Payload type for a step summary with optional additional fields and schema */
18
- export type StepSummary<TAdditionalFields extends EmptyObject | void = void,
19
- TSchema extends Schema | void = void> = Payload<TAdditionalFields extends void ? StepSummaryFields : TAdditionalFields & StepSummaryFields,
20
- TSchema extends void ? StepSummarySchema : TSchema>
@@ -1,36 +0,0 @@
1
- import type { Address } from '@xylabs/sdk-js'
2
- import { AsObjectFactory } from '@xylabs/sdk-js'
3
- import type { WithStorageMeta } from '@xyo-network/sdk-js'
4
- import {
5
- asSchema, isPayloadOfSchemaType, isStorageMeta,
6
- } from '@xyo-network/sdk-js'
7
-
8
- import type { SignedBigInt } from '../../SignedBigInt.ts'
9
- import type { StepSummary } from './StepSummary.ts'
10
-
11
- /** Schema identifier for transfers step summary payloads */
12
- export const TransfersStepSummarySchema = asSchema('network.xyo.step.summary.transfer', true)
13
- /** Schema type for TransfersStepSummary payloads. */
14
- export type TransfersStepSummarySchema = typeof TransfersStepSummarySchema
15
-
16
- /** Step summary payload containing transfer amounts between address pairs */
17
- export type TransfersStepSummary = StepSummary<{
18
- transfers: Record<Address, Record<Address, SignedBigInt>>
19
- }, TransfersStepSummarySchema>
20
-
21
- /**
22
- * Identity function for determining if an object is an TransfersStepSummary
23
- */
24
- export const isTransfersStepSummary = isPayloadOfSchemaType<TransfersStepSummary>(TransfersStepSummarySchema)
25
- /** Type assertion factory for TransfersStepSummary payloads */
26
- export const asTransfersStepSummary = AsObjectFactory.create<TransfersStepSummary>(isTransfersStepSummary)
27
-
28
- /**
29
- * Identity function for determining if an object is an TransfersStepSummary with Storage Meta
30
- */
31
- export const isTransfersStepSummaryWithStorageMeta = (value: unknown): value is WithStorageMeta<TransfersStepSummary> => {
32
- return isTransfersStepSummary(value) && isStorageMeta(value)
33
- }
34
- /** Type assertion factory for TransfersStepSummary with storage metadata */
35
- export const asTransfersStepSummaryWithStorageMeta
36
- = AsObjectFactory.create<WithStorageMeta<TransfersStepSummary>>(isTransfersStepSummaryWithStorageMeta)
@@ -1,4 +0,0 @@
1
- export * from './BalancesStepSummary.ts'
2
- export * from './SchemasStepSummary.ts'
3
- export * from './StepSummary.ts'
4
- export * from './TransfersSummary.ts'
@@ -1,94 +0,0 @@
1
- import { type Address, spanRootAsync } from '@xylabs/sdk-js'
2
- import { assertEx } from '@xylabs/sdk-js'
3
- import { isAnyPayload } from '@xyo-network/sdk-js'
4
- import type {
5
- BlockViewer, CachingContext, MapType, XL1BlockRange,
6
- } from '@xyo-network/xl1-protocol-lib'
7
- import { asXL1BlockNumber, StepSizes } from '@xyo-network/xl1-protocol-lib'
8
- import type { Semaphore } from 'async-mutex'
9
-
10
- import { deepCalculateFramesFromRange } from '../../../block/index.ts'
11
- import { withContextCacheResponse } from '../../../ChainContextHelpers.ts'
12
- import { netBalancesForPayloads } from '../../../payloads/index.ts'
13
- import {
14
- parseSignedBigInt, type SignedBigInt, toSignedBigInt,
15
- } from '../../../SignedBigInt.ts'
16
- import type { BalancesStepSummary } from '../../model/index.ts'
17
- import { BalancesStepSummarySchema } from '../../model/index.ts'
18
-
19
- /** BalancesStepSummaryFromRange helper function. */
20
- export async function balancesStepSummaryFromRange(
21
- context: CachingContext,
22
- semaphores: Semaphore[],
23
- blockViewer: BlockViewer,
24
- summaryMap: MapType<string, BalancesStepSummary>,
25
- range: XL1BlockRange,
26
- ): Promise<BalancesStepSummary> {
27
- const cacheKey = `${range[0]}|${range[1]}`
28
- return await withContextCacheResponse(context, 'balancesStepSummaryFromRange', cacheKey, async () => {
29
- return await spanRootAsync('balancesStepSummaryFromRange', async () => {
30
- // console.log(`balanceStepSummaryFromRange: head=${head}, range=${range[0]}-${range[1]}`)
31
- const [frameHead] = assertEx(await blockViewer.blockByNumber(range[1]), () => `Block not found for number: ${range[1]}`)
32
- const frameSize = range[1] - range[0] + 1
33
-
34
- const key = `${frameHead._hash}|${frameSize}`
35
-
36
- return (frameSize === 1)
37
- ? await spanRootAsync(`balancesStepSummaryFromRange.frameSize=1[${key}]`, async () => {
38
- const [,payloads] = assertEx(await blockViewer.blockByNumber(range[0]), () => `Block not found for number: ${range[0]}`)
39
- const balances: Record<Address, SignedBigInt> = {}
40
- for (const [address, balance] of Object.entries(netBalancesForPayloads(context, payloads))) {
41
- balances[address as Address] = toSignedBigInt(balance)
42
- }
43
- return {
44
- schema: BalancesStepSummarySchema, hash: frameHead._hash, stepSize: -1, balances,
45
- }
46
- }, { ...context, timeBudgetLimit: 500 })
47
- : await spanRootAsync(`balancesStepSummaryFromRange.frameSize>1[${key}]`, async () => {
48
- const step = StepSizes.indexOf(asXL1BlockNumber(frameSize, true))
49
- assertEx(step !== -1, () => `Invalid step size: ${frameSize}. Must be one of ${StepSizes.join(', ')}`)
50
-
51
- const summaryResult = await summaryMap.get(`${frameHead._hash}|${frameSize}`)
52
- if (isAnyPayload(summaryResult)) {
53
- return summaryResult as BalancesStepSummary
54
- } else {
55
- // We do not have it, so lets build it
56
- await semaphores[step].acquire()
57
- try {
58
- const subRanges = deepCalculateFramesFromRange(range, step - 1)
59
- const promises = subRanges.map(subRange => balancesStepSummaryFromRange(
60
- context,
61
- semaphores,
62
- blockViewer,
63
- summaryMap,
64
- subRange,
65
- ))
66
- const subResults = await Promise.all(promises)
67
-
68
- // add them all up
69
- const bigIntBalances: Record<Address, bigint> = {}
70
- for (const subResult of subResults) {
71
- for (const [address, balance] of Object.entries(subResult.balances)) {
72
- bigIntBalances[address as Address] = (bigIntBalances[address as Address] ?? 0n) + parseSignedBigInt(balance)
73
- }
74
- }
75
-
76
- const balances: Record<Address, SignedBigInt> = {}
77
- for (const [address, balance] of Object.entries(bigIntBalances)) {
78
- balances[address as Address] = toSignedBigInt(balance)
79
- }
80
-
81
- const result = {
82
- schema: BalancesStepSummarySchema, hash: frameHead._hash, stepSize: frameSize, balances,
83
- }
84
-
85
- await summaryMap.set(key, result)
86
- return result
87
- } finally {
88
- semaphores[step].release()
89
- }
90
- }
91
- }, { ...context, timeBudgetLimit: 500 })
92
- }, { ...context, timeBudgetLimit: 500 })
93
- }, { max: 100_000 })
94
- }
@@ -1,48 +0,0 @@
1
- import type { Address } from '@xylabs/sdk-js'
2
- import {
3
- asAddress, assertEx, spanRootAsync,
4
- } from '@xylabs/sdk-js'
5
- import type {
6
- BlockViewer,
7
- CachingContext, ChainQualified, ChainQualifiedConfig,
8
- MapType,
9
- } from '@xyo-network/xl1-protocol-lib'
10
- import {
11
- asBlockBoundWitnessWithStorageMeta, asXL1BlockRange, isChainQualifiedHeadConfig,
12
- isChainQualifiedRangeConfig,
13
- } from '@xyo-network/xl1-protocol-lib'
14
- import type { Semaphore } from 'async-mutex'
15
-
16
- import { deepCalculateFramesFromRange } from '../../../block/index.ts'
17
- import { parseSignedBigInt } from '../../../SignedBigInt.ts'
18
- import type { BalancesStepSummary } from '../../model/index.ts'
19
- import { balancesStepSummaryFromRange } from './balancesStepSummaryFromRange.ts'
20
-
21
- /** BalancesSummary helper function. */
22
- export async function balancesSummary(
23
- context: CachingContext,
24
- semaphores: Semaphore[],
25
- blockViewer: BlockViewer,
26
- summaryMap: MapType<string, BalancesStepSummary>,
27
- config?: ChainQualifiedConfig,
28
- ): Promise<ChainQualified<Record<Address, bigint>>> {
29
- return await spanRootAsync('balancesSummary', async () => {
30
- const headHash = isChainQualifiedHeadConfig(config) ? config.head : await blockViewer.currentBlockHash()
31
- const [head] = assertEx(await blockViewer.blockByHash(headHash), () => `Block not found for hash: ${headHash}`)
32
- const headBoundWitness = asBlockBoundWitnessWithStorageMeta(head, () => `Found Block not a BlockWithHashMeta: ${headHash}`)
33
- const range = isChainQualifiedRangeConfig(config) ? config.range : asXL1BlockRange([0, headBoundWitness.block], true)
34
- const ranges = deepCalculateFramesFromRange(asXL1BlockRange(
35
- range,
36
- { name: 'balancesSummary' },
37
- ))
38
- const summaries = await Promise.all(ranges.map(range => balancesStepSummaryFromRange(context, semaphores, blockViewer, summaryMap, range)))
39
- const balances: Record<Address, bigint> = {}
40
- for (let summary of summaries) {
41
- for (const [address, balance] of Object.entries(summary.balances)) {
42
- const validAddress = asAddress(address, () => `Invalid address: ${address}`)
43
- balances[validAddress] = (balances[validAddress] ?? 0n) + parseSignedBigInt(balance)
44
- }
45
- }
46
- return [balances, { range, head: headHash }]
47
- }, { ...context, timeBudgetLimit: 500 })
48
- }
@@ -1,2 +0,0 @@
1
- export * from './balancesStepSummaryFromRange.ts'
2
- export * from './balancesSummary.ts'
@@ -1,3 +0,0 @@
1
- export * from './balances/index.ts'
2
- export * from './schemas/index.ts'
3
- export * from './transfers/index.ts'
@@ -1,2 +0,0 @@
1
- export * from './schemasStepSummaryFromRange.ts'
2
- export * from './schemasSummary.ts'