@xyo-network/xl1-protocol-sdk 1.17.7 → 1.18.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 (309) hide show
  1. package/dist/neutral/CreatableProvider/AbstractCreatableProvider.d.ts +104 -1
  2. package/dist/neutral/CreatableProvider/AbstractCreatableProvider.d.ts.map +1 -1
  3. package/dist/neutral/CreatableProvider/CreatableProvider.d.ts +27 -10
  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 +8 -5
  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/config/Services.d.ts +2 -2
  19. package/dist/neutral/config/Services.d.ts.map +1 -1
  20. package/dist/neutral/createDeclarationPayload.d.ts +4 -0
  21. package/dist/neutral/createDeclarationPayload.d.ts.map +1 -0
  22. package/dist/neutral/createTransferPayload.d.ts +4 -0
  23. package/dist/neutral/createTransferPayload.d.ts.map +1 -0
  24. package/dist/neutral/driver/cache/LruCacheMap.d.ts +2 -2
  25. package/dist/neutral/driver/cache/LruCacheMap.d.ts.map +1 -1
  26. package/dist/neutral/driver/memory/MemoryMap.d.ts +2 -2
  27. package/dist/neutral/driver/memory/MemoryMap.d.ts.map +1 -1
  28. package/dist/neutral/index.d.ts +3 -0
  29. package/dist/neutral/index.d.ts.map +1 -1
  30. package/dist/neutral/index.mjs +1887 -632
  31. package/dist/neutral/index.mjs.map +1 -1
  32. package/dist/neutral/map/MapType.d.ts +3 -2
  33. package/dist/neutral/map/MapType.d.ts.map +1 -1
  34. package/dist/neutral/model/ChainContext/ChainContext.d.ts +4 -4
  35. package/dist/neutral/model/ChainContext/ChainContext.d.ts.map +1 -1
  36. package/dist/neutral/model/ChainQualification.d.ts +42 -0
  37. package/dist/neutral/model/ChainQualification.d.ts.map +1 -0
  38. package/dist/neutral/model/PayloadBundle/bundledPayloadToHydratedTransaction.d.ts +2 -2
  39. package/dist/neutral/model/PayloadBundle/bundledPayloadToHydratedTransaction.d.ts.map +1 -1
  40. package/dist/neutral/model/index.d.ts +1 -1
  41. package/dist/neutral/model/index.d.ts.map +1 -1
  42. package/dist/neutral/primitives/block/index.d.ts +2 -0
  43. package/dist/neutral/primitives/block/index.d.ts.map +1 -0
  44. package/dist/neutral/primitives/block/range/blockRangeSteps.d.ts +3 -0
  45. package/dist/neutral/primitives/block/range/blockRangeSteps.d.ts.map +1 -0
  46. package/dist/neutral/primitives/block/range/index.d.ts +2 -0
  47. package/dist/neutral/primitives/block/range/index.d.ts.map +1 -0
  48. package/dist/neutral/primitives/chain/getWindowedChain.d.ts +26 -0
  49. package/dist/neutral/primitives/chain/getWindowedChain.d.ts.map +1 -0
  50. package/dist/neutral/primitives/chain/index.d.ts +4 -0
  51. package/dist/neutral/primitives/chain/index.d.ts.map +1 -0
  52. package/dist/neutral/primitives/chain/step/chainStepRewardAddress.d.ts +5 -0
  53. package/dist/neutral/primitives/chain/step/chainStepRewardAddress.d.ts.map +1 -0
  54. package/dist/neutral/primitives/chain/step/index.d.ts +5 -0
  55. package/dist/neutral/primitives/chain/step/index.d.ts.map +1 -0
  56. package/dist/neutral/primitives/chain/step/stepRewardBlock.d.ts +4 -0
  57. package/dist/neutral/primitives/chain/step/stepRewardBlock.d.ts.map +1 -0
  58. package/dist/neutral/primitives/chain/step/stepRewardTotal.d.ts +4 -0
  59. package/dist/neutral/primitives/chain/step/stepRewardTotal.d.ts.map +1 -0
  60. package/dist/neutral/primitives/chain/step/stepsRewardTotal.d.ts +6 -0
  61. package/dist/neutral/primitives/chain/step/stepsRewardTotal.d.ts.map +1 -0
  62. package/dist/neutral/primitives/chain/time/externalBlockNumberFromXL1BlockNumber.d.ts +5 -0
  63. package/dist/neutral/primitives/chain/time/externalBlockNumberFromXL1BlockNumber.d.ts.map +1 -0
  64. package/dist/neutral/primitives/chain/time/externalBlockRangeFromStep.d.ts +5 -0
  65. package/dist/neutral/primitives/chain/time/externalBlockRangeFromStep.d.ts.map +1 -0
  66. package/dist/neutral/primitives/chain/time/externalBlockRangeFromXL1BlockRange.d.ts +5 -0
  67. package/dist/neutral/primitives/chain/time/externalBlockRangeFromXL1BlockRange.d.ts.map +1 -0
  68. package/dist/neutral/primitives/chain/time/index.d.ts +4 -0
  69. package/dist/neutral/primitives/chain/time/index.d.ts.map +1 -0
  70. package/dist/neutral/primitives/index.d.ts +7 -0
  71. package/dist/neutral/primitives/index.d.ts.map +1 -1
  72. package/dist/neutral/primitives/mapToMapType.d.ts +3 -0
  73. package/dist/neutral/primitives/mapToMapType.d.ts.map +1 -0
  74. package/dist/neutral/primitives/payload/index.d.ts +2 -0
  75. package/dist/neutral/primitives/payload/index.d.ts.map +1 -0
  76. package/dist/neutral/primitives/payload/mergeTransfers.d.ts +4 -0
  77. package/dist/neutral/primitives/payload/mergeTransfers.d.ts.map +1 -0
  78. package/dist/neutral/primitives/readPayloadMapFromStore.d.ts +5 -4
  79. package/dist/neutral/primitives/readPayloadMapFromStore.d.ts.map +1 -1
  80. package/dist/neutral/primitives/rewards/index.d.ts +2 -0
  81. package/dist/neutral/primitives/rewards/index.d.ts.map +1 -0
  82. package/dist/neutral/primitives/rewards/networkStakeStepRewardPositionWeight.d.ts +5 -0
  83. package/dist/neutral/primitives/rewards/networkStakeStepRewardPositionWeight.d.ts.map +1 -0
  84. package/dist/neutral/primitives/stake/activeStakeAtTimeByAddress.d.ts +4 -0
  85. package/dist/neutral/primitives/stake/activeStakeAtTimeByAddress.d.ts.map +1 -0
  86. package/dist/neutral/primitives/stake/activeStakeAtTimeByPosition.d.ts +3 -0
  87. package/dist/neutral/primitives/stake/activeStakeAtTimeByPosition.d.ts.map +1 -0
  88. package/dist/neutral/primitives/stake/allStakersForRange.d.ts +4 -0
  89. package/dist/neutral/primitives/stake/allStakersForRange.d.ts.map +1 -0
  90. package/dist/neutral/primitives/stake/allStakersForStep.d.ts +6 -0
  91. package/dist/neutral/primitives/stake/allStakersForStep.d.ts.map +1 -0
  92. package/dist/neutral/primitives/stake/index.d.ts +7 -0
  93. package/dist/neutral/primitives/stake/index.d.ts.map +1 -0
  94. package/dist/neutral/primitives/stake/mergedAddRemoveStakeEventsByPosition.d.ts +3 -0
  95. package/dist/neutral/primitives/stake/mergedAddRemoveStakeEventsByPosition.d.ts.map +1 -0
  96. package/dist/neutral/primitives/stake/mergedAddRemoveStakeEventsByStaker.d.ts +4 -0
  97. package/dist/neutral/primitives/stake/mergedAddRemoveStakeEventsByStaker.d.ts.map +1 -0
  98. package/dist/neutral/primitives/stake/weightedStakeForRangeByPosition.d.ts +6 -0
  99. package/dist/neutral/primitives/stake/weightedStakeForRangeByPosition.d.ts.map +1 -0
  100. package/dist/neutral/primitives/uncle/findBestUncle.d.ts +24 -0
  101. package/dist/neutral/primitives/uncle/findBestUncle.d.ts.map +1 -0
  102. package/dist/neutral/primitives/uncle/findUncles.d.ts +26 -0
  103. package/dist/neutral/primitives/uncle/findUncles.d.ts.map +1 -0
  104. package/dist/neutral/primitives/uncle/index.d.ts +4 -0
  105. package/dist/neutral/primitives/uncle/index.d.ts.map +1 -0
  106. package/dist/neutral/primitives/uncle/scoreUncle.d.ts +3 -0
  107. package/dist/neutral/primitives/uncle/scoreUncle.d.ts.map +1 -0
  108. package/dist/neutral/provider/DataLake.d.ts +10 -9
  109. package/dist/neutral/provider/DataLake.d.ts.map +1 -1
  110. package/dist/neutral/provider/XyoConnection.d.ts +4 -1
  111. package/dist/neutral/provider/XyoConnection.d.ts.map +1 -1
  112. package/dist/neutral/provider/XyoGatewayRunner.d.ts +3 -3
  113. package/dist/neutral/provider/XyoGatewayRunner.d.ts.map +1 -1
  114. package/dist/neutral/provider/XyoRunner.d.ts +5 -2
  115. package/dist/neutral/provider/XyoRunner.d.ts.map +1 -1
  116. package/dist/neutral/provider/viewer/XyoViewer.d.ts +16 -13
  117. package/dist/neutral/provider/viewer/XyoViewer.d.ts.map +1 -1
  118. package/dist/neutral/runners/Block.d.ts +7 -2
  119. package/dist/neutral/runners/Block.d.ts.map +1 -1
  120. package/dist/neutral/runners/Mempool.d.ts +4 -1
  121. package/dist/neutral/runners/Mempool.d.ts.map +1 -1
  122. package/dist/neutral/services/Chain/ChainService.d.ts +2 -2
  123. package/dist/neutral/services/Chain/ChainService.d.ts.map +1 -1
  124. package/dist/neutral/simple/accountBalance/SimpleAccountBalanceViewer.d.ts +65 -21
  125. package/dist/neutral/simple/accountBalance/SimpleAccountBalanceViewer.d.ts.map +1 -1
  126. package/dist/neutral/simple/block/SimpleBlockViewer.d.ts +9 -6
  127. package/dist/neutral/simple/block/SimpleBlockViewer.d.ts.map +1 -1
  128. package/dist/neutral/simple/blockValidation/SimpleBlockValidationViewer.d.ts +31 -0
  129. package/dist/neutral/simple/blockValidation/SimpleBlockValidationViewer.d.ts.map +1 -0
  130. package/dist/neutral/simple/blockValidation/index.d.ts +2 -0
  131. package/dist/neutral/simple/blockValidation/index.d.ts.map +1 -0
  132. package/dist/neutral/simple/chainStake/{SimpleChainStakeViewer.d.ts → SimpleStakeViewer.d.ts} +3 -5
  133. package/dist/neutral/simple/chainStake/SimpleStakeViewer.d.ts.map +1 -0
  134. package/dist/neutral/simple/chainStake/index.d.ts +1 -1
  135. package/dist/neutral/simple/chainStake/index.d.ts.map +1 -1
  136. package/dist/neutral/simple/datalake/AbstractSimpleDataLake.d.ts +6 -3
  137. package/dist/neutral/simple/datalake/AbstractSimpleDataLake.d.ts.map +1 -1
  138. package/dist/neutral/simple/datalake/SimpleDataLakeRunner.d.ts +4 -3
  139. package/dist/neutral/simple/datalake/SimpleDataLakeRunner.d.ts.map +1 -1
  140. package/dist/neutral/simple/datalake/SimpleDataLakeViewer.d.ts +0 -3
  141. package/dist/neutral/simple/datalake/SimpleDataLakeViewer.d.ts.map +1 -1
  142. package/dist/neutral/simple/index.d.ts +2 -0
  143. package/dist/neutral/simple/index.d.ts.map +1 -1
  144. package/dist/neutral/simple/mempool/SimpleMempoolRunner.d.ts +8 -4
  145. package/dist/neutral/simple/mempool/SimpleMempoolRunner.d.ts.map +1 -1
  146. package/dist/neutral/simple/mempool/SimpleMempoolViewer.d.ts.map +1 -1
  147. package/dist/neutral/simple/runner/SimpleXyoRunner.d.ts +24 -6
  148. package/dist/neutral/simple/runner/SimpleXyoRunner.d.ts.map +1 -1
  149. package/dist/neutral/simple/{chainStakeEvents/SimpleChainStakeEventsViewer.d.ts → stakeEvents/SimpleStakeEventsViewer.d.ts} +3 -3
  150. package/dist/neutral/simple/stakeEvents/SimpleStakeEventsViewer.d.ts.map +1 -0
  151. package/dist/neutral/simple/stakeEvents/index.d.ts +2 -0
  152. package/dist/neutral/simple/stakeEvents/index.d.ts.map +1 -0
  153. package/dist/neutral/simple/timesync/SimpleTimeSyncViewer.d.ts +4 -3
  154. package/dist/neutral/simple/timesync/SimpleTimeSyncViewer.d.ts.map +1 -1
  155. package/dist/neutral/status/RuntimeStatusMonitor.d.ts +31 -0
  156. package/dist/neutral/status/RuntimeStatusMonitor.d.ts.map +1 -0
  157. package/dist/neutral/status/ServiceStatus.d.ts +8 -0
  158. package/dist/neutral/status/ServiceStatus.d.ts.map +1 -0
  159. package/dist/neutral/status/index.d.ts +3 -0
  160. package/dist/neutral/status/index.d.ts.map +1 -0
  161. package/dist/neutral/summary/model/summary.d.ts +4 -5
  162. package/dist/neutral/summary/model/summary.d.ts.map +1 -1
  163. package/dist/neutral/summary/primitives/balances/balancesStepSummaryFromRange.d.ts +1 -1
  164. package/dist/neutral/summary/primitives/balances/balancesStepSummaryFromRange.d.ts.map +1 -1
  165. package/dist/neutral/summary/primitives/balances/balancesSummary.d.ts +2 -2
  166. package/dist/neutral/summary/primitives/balances/balancesSummary.d.ts.map +1 -1
  167. package/dist/neutral/summary/primitives/schemas/schemasSummary.d.ts +2 -2
  168. package/dist/neutral/summary/primitives/schemas/schemasSummary.d.ts.map +1 -1
  169. package/dist/neutral/summary/primitives/transfers/transfersSummary.d.ts +2 -2
  170. package/dist/neutral/summary/primitives/transfers/transfersSummary.d.ts.map +1 -1
  171. package/dist/neutral/transaction/TransactionBuilder.d.ts +82 -0
  172. package/dist/neutral/transaction/TransactionBuilder.d.ts.map +1 -0
  173. package/dist/neutral/transaction/buildRandomTransaction.d.ts +6 -0
  174. package/dist/neutral/transaction/buildRandomTransaction.d.ts.map +1 -0
  175. package/dist/neutral/transaction/index.d.ts +2 -0
  176. package/dist/neutral/transaction/index.d.ts.map +1 -1
  177. package/dist/neutral/viewers/AccountBalance.d.ts +35 -15
  178. package/dist/neutral/viewers/AccountBalance.d.ts.map +1 -1
  179. package/dist/neutral/viewers/Block.d.ts +4 -1
  180. package/dist/neutral/viewers/Block.d.ts.map +1 -1
  181. package/dist/neutral/viewers/BlockValidation.d.ts +54 -0
  182. package/dist/neutral/viewers/BlockValidation.d.ts.map +1 -0
  183. package/dist/neutral/viewers/ChainStakeViewer.d.ts +1 -2
  184. package/dist/neutral/viewers/ChainStakeViewer.d.ts.map +1 -1
  185. package/dist/neutral/viewers/Fork.d.ts +0 -1
  186. package/dist/neutral/viewers/Fork.d.ts.map +1 -1
  187. package/dist/neutral/viewers/Stake.d.ts +0 -1
  188. package/dist/neutral/viewers/Stake.d.ts.map +1 -1
  189. package/dist/neutral/viewers/StakeIntent.d.ts +2 -2
  190. package/dist/neutral/viewers/StakeIntent.d.ts.map +1 -1
  191. package/dist/neutral/viewers/TransactionValidation.d.ts +35 -0
  192. package/dist/neutral/viewers/TransactionValidation.d.ts.map +1 -0
  193. package/dist/neutral/viewers/index.d.ts +2 -1
  194. package/dist/neutral/viewers/index.d.ts.map +1 -1
  195. package/package.json +8 -6
  196. package/src/CreatableProvider/AbstractCreatableProvider.ts +60 -3
  197. package/src/CreatableProvider/CreatableProvider.ts +38 -11
  198. package/src/CreatableProvider/CreatableProviderRegistry.ts +10 -5
  199. package/src/CreatableProvider/ProviderFactory.ts +73 -10
  200. package/src/CreatableProvider/ProviderFactoryLocator.ts +79 -19
  201. package/src/CreatableProvider/ProviderFactoryLocatorInstance.ts +33 -10
  202. package/src/config/Bridge.ts +22 -4
  203. package/src/config/Chain.ts +2 -2
  204. package/src/config/Services.ts +4 -2
  205. package/src/createDeclarationPayload.ts +14 -0
  206. package/src/createTransferPayload.ts +15 -0
  207. package/src/driver/cache/LruCacheMap.ts +2 -2
  208. package/src/driver/memory/MemoryMap.ts +2 -2
  209. package/src/index.ts +3 -0
  210. package/src/map/MapType.ts +4 -2
  211. package/src/model/ChainContext/ChainContext.ts +4 -4
  212. package/src/model/ChainQualification.ts +33 -0
  213. package/src/model/PayloadBundle/bundledPayloadToHydratedTransaction.ts +2 -2
  214. package/src/model/index.ts +1 -1
  215. package/src/primitives/block/index.ts +1 -0
  216. package/src/primitives/block/range/blockRangeSteps.ts +22 -0
  217. package/src/primitives/block/range/index.ts +1 -0
  218. package/src/primitives/chain/getWindowedChain.ts +23 -0
  219. package/src/primitives/chain/index.ts +3 -0
  220. package/src/primitives/chain/step/chainStepRewardAddress.ts +28 -0
  221. package/src/primitives/chain/step/index.ts +4 -0
  222. package/src/primitives/chain/step/stepRewardBlock.ts +11 -0
  223. package/src/primitives/chain/step/stepRewardTotal.ts +45 -0
  224. package/src/primitives/chain/step/stepsRewardTotal.ts +34 -0
  225. package/src/primitives/chain/time/externalBlockNumberFromXL1BlockNumber.ts +31 -0
  226. package/src/primitives/chain/time/externalBlockRangeFromStep.ts +19 -0
  227. package/src/primitives/chain/time/externalBlockRangeFromXL1BlockRange.ts +16 -0
  228. package/src/primitives/chain/time/index.ts +3 -0
  229. package/src/primitives/index.ts +7 -0
  230. package/src/primitives/mapToMapType.ts +35 -0
  231. package/src/primitives/payload/index.ts +1 -0
  232. package/src/primitives/payload/mergeTransfers.ts +15 -0
  233. package/src/primitives/readPayloadMapFromStore.ts +38 -8
  234. package/src/primitives/rewards/index.ts +1 -0
  235. package/src/primitives/rewards/networkStakeStepRewardPositionWeight.ts +21 -0
  236. package/src/primitives/stake/activeStakeAtTimeByAddress.ts +26 -0
  237. package/src/primitives/stake/activeStakeAtTimeByPosition.ts +24 -0
  238. package/src/primitives/stake/allStakersForRange.ts +31 -0
  239. package/src/primitives/stake/allStakersForStep.ts +22 -0
  240. package/src/primitives/stake/index.ts +6 -0
  241. package/src/primitives/stake/mergedAddRemoveStakeEventsByPosition.ts +14 -0
  242. package/src/primitives/stake/mergedAddRemoveStakeEventsByStaker.ts +17 -0
  243. package/src/primitives/stake/weightedStakeForRangeByPosition.ts +54 -0
  244. package/src/primitives/uncle/findBestUncle.ts +8 -0
  245. package/src/primitives/uncle/findUncles.ts +75 -0
  246. package/src/primitives/uncle/index.ts +3 -0
  247. package/src/primitives/uncle/scoreUncle.ts +6 -0
  248. package/src/provider/DataLake.ts +12 -11
  249. package/src/provider/XyoConnection.ts +5 -1
  250. package/src/provider/XyoGatewayRunner.ts +3 -3
  251. package/src/provider/XyoRunner.ts +6 -2
  252. package/src/provider/viewer/XyoViewer.ts +16 -15
  253. package/src/runners/Block.ts +10 -2
  254. package/src/runners/Mempool.ts +6 -1
  255. package/src/services/Chain/ChainService.ts +2 -4
  256. package/src/simple/accountBalance/SimpleAccountBalanceViewer.ts +65 -42
  257. package/src/simple/block/SimpleBlockViewer.ts +47 -14
  258. package/src/simple/blockValidation/SimpleBlockValidationViewer.ts +126 -0
  259. package/src/simple/blockValidation/index.ts +1 -0
  260. package/src/simple/chainStake/{SimpleChainStakeViewer.ts → SimpleStakeViewer.ts} +11 -16
  261. package/src/simple/chainStake/index.ts +1 -1
  262. package/src/simple/datalake/AbstractSimpleDataLake.ts +19 -18
  263. package/src/simple/datalake/SimpleDataLakeRunner.ts +4 -3
  264. package/src/simple/datalake/SimpleDataLakeViewer.ts +0 -19
  265. package/src/simple/index.ts +2 -0
  266. package/src/simple/mempool/SimpleMempoolRunner.ts +13 -8
  267. package/src/simple/mempool/SimpleMempoolViewer.ts +6 -1
  268. package/src/simple/runner/SimpleXyoRunner.ts +41 -16
  269. package/src/simple/{chainStakeEvents/SimpleChainStakeEventsViewer.ts → stakeEvents/SimpleStakeEventsViewer.ts} +5 -5
  270. package/src/simple/stakeEvents/index.ts +1 -0
  271. package/src/simple/timesync/SimpleTimeSyncViewer.ts +27 -6
  272. package/src/status/RuntimeStatusMonitor.ts +117 -0
  273. package/src/status/ServiceStatus.ts +20 -0
  274. package/src/status/index.ts +2 -0
  275. package/src/summary/model/summary.ts +6 -5
  276. package/src/summary/primitives/balances/balancesStepSummaryFromRange.ts +2 -3
  277. package/src/summary/primitives/balances/balancesSummary.ts +12 -12
  278. package/src/summary/primitives/schemas/schemasSummary.ts +12 -10
  279. package/src/summary/primitives/transfers/transfersSummary.ts +14 -16
  280. package/src/transaction/TransactionBuilder.ts +162 -0
  281. package/src/transaction/buildRandomTransaction.ts +36 -0
  282. package/src/transaction/hydrateTransaction.ts +1 -1
  283. package/src/transaction/index.ts +2 -0
  284. package/src/viewers/AccountBalance.ts +22 -14
  285. package/src/viewers/Block.ts +6 -1
  286. package/src/viewers/BlockValidation.ts +47 -0
  287. package/src/viewers/ChainStakeViewer.ts +1 -2
  288. package/src/viewers/Fork.ts +0 -1
  289. package/src/viewers/Stake.ts +0 -1
  290. package/src/viewers/StakeIntent.ts +2 -2
  291. package/src/viewers/TransactionValidation.ts +35 -0
  292. package/src/viewers/index.ts +2 -1
  293. package/dist/neutral/model/Qualified.d.ts +0 -6
  294. package/dist/neutral/model/Qualified.d.ts.map +0 -1
  295. package/dist/neutral/simple/chain/SimpleChainViewer.d.ts +0 -15
  296. package/dist/neutral/simple/chain/SimpleChainViewer.d.ts.map +0 -1
  297. package/dist/neutral/simple/chain/index.d.ts +0 -2
  298. package/dist/neutral/simple/chain/index.d.ts.map +0 -1
  299. package/dist/neutral/simple/chainStake/SimpleChainStakeViewer.d.ts.map +0 -1
  300. package/dist/neutral/simple/chainStakeEvents/SimpleChainStakeEventsViewer.d.ts.map +0 -1
  301. package/dist/neutral/simple/chainStakeEvents/index.d.ts +0 -2
  302. package/dist/neutral/simple/chainStakeEvents/index.d.ts.map +0 -1
  303. package/dist/neutral/viewers/Chain.d.ts +0 -11
  304. package/dist/neutral/viewers/Chain.d.ts.map +0 -1
  305. package/src/model/Qualified.ts +0 -9
  306. package/src/simple/chain/SimpleChainViewer.ts +0 -28
  307. package/src/simple/chain/index.ts +0 -1
  308. package/src/simple/chainStakeEvents/index.ts +0 -1
  309. package/src/viewers/Chain.ts +0 -13
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/block/hydrate/allHashesPresent.ts","../../src/block/hydrate/blockPayloadsFromHydratedBlock.ts","../../src/block/hydrate/flattenHydratedBlock.ts","../../src/block/hydrate/flattenHydratedBlocks.ts","../../src/block/hydrate/hydrateBlock.ts","../../src/block/hydrate/transactionsFromHydratedBlock.ts","../../src/block/hydrate/tryHydrateBlock.ts","../../src/block/primitives/blockFromBlockNumber.ts","../../src/model/ChainContext/ChainContext.ts","../../src/driver/cache/LruCacheMap.ts","../../src/driver/memory/MemoryMap.ts","../../src/primitives/readPayloadMapFromStore.ts","../../src/primitives/rewardFromBlockNumber.ts","../../src/primitives/state/findMostRecentBlock.ts","../../src/primitives/state/hydratedBlockByNumber.ts","../../src/primitives/step/completedStepRewardAddress.ts","../../src/primitives/step/derivedReceiveAddress.ts","../../src/primitives/step/stepBlockRange.ts","../../src/primitives/step/stepTransferIndex.ts","../../src/primitives/timeBudget.ts","../../src/primitives/transaction/elevatedPayloads.ts","../../src/model/PayloadBundle/bundledPayloadToHydratedBlock.ts","../../src/model/PayloadBundle/bundledPayloadToHydratedTransaction.ts","../../src/model/PayloadBundle/hydratedBlockToPayloadBundle.ts","../../src/model/PayloadBundle/hydratedTransactionToPayloadBundle.ts","../../src/transaction/buildTransaction.ts","../../src/transaction/buildUnsignedTransaction.ts","../../src/transaction/confirmSubmittedTransaction.ts","../../src/transaction/hydrateTransaction.ts","../../src/transaction/primitives/transactionBlockByteCount.ts","../../src/transaction/primitives/transactionElevatedPayloads.ts","../../src/transaction/primitives/transactionOperations.ts","../../src/transaction/primitives/transactionRequiredGas.ts","../../src/transaction/script.ts","../../src/transaction/signTransaction.ts","../../src/model/Provider.ts","../../src/model/Qualified.ts","../../src/block/primitives/frames/calculateFramesFromRange.ts","../../src/block/primitives/frames/deepCalculateFramesFromRange.ts","../../src/block/primitives/hashFromBlockNumber.ts","../../src/block/primitives/model.ts","../../src/block/primitives/toStepIdentityString.ts","../../src/config/Bridge.ts","../../src/validation/block/error.ts","../../src/validation/lib/isLocalhost.ts","../../src/validation/lib/getUrl.ts","../../src/validation/schema/Address.ts","../../src/validation/schema/Mnemonic.ts","../../src/config/Config.ts","../../src/config/Api.ts","../../src/config/Chain.ts","../../src/config/Evm.ts","../../src/config/Log.ts","../../src/config/Mempool.ts","../../src/config/Producer.ts","../../src/config/RewardRedemptionApi.ts","../../src/config/Services.ts","../../src/config/storage/driver/Mongo.ts","../../src/config/storage/Storage.ts","../../src/config/Telemetry.ts","../../src/config/Validation.ts","../../src/config/UsageMeta.ts","../../src/constants.ts","../../src/CreatableProvider/AbstractCreatableProvider.ts","../../src/CreatableProvider/ProviderFactory.ts","../../src/CreatableProvider/CreatableProvider.ts","../../src/CreatableProvider/CreatableProviderRegistry.ts","../../src/CreatableProvider/LabeledCreatableProviderFactory.ts","../../src/CreatableProvider/ProviderFactoryLocator.ts","../../src/eip-712/Payloads/EIP712Data.ts","../../src/eip-712/Types.ts","../../src/eip-712/Payloads/EIP712Signature.ts","../../src/eip-712/sign.ts","../../src/eip-712/verify.ts","../../src/multipliers.ts","../../src/payloads/AddressPairPayload.ts","../../src/payloads/netBalancesForPayloads.ts","../../src/payloads/netSchemasForPayloads.ts","../../src/payloads/netTransfersForPayloads.ts","../../src/provider/DataLake.ts","../../src/provider/viewer/NetworkStake/NetworkStakeViewer.ts","../../src/provider/viewer/NetworkStake/Rewards/ByPositionViewer.ts","../../src/provider/viewer/NetworkStake/Rewards/ByStakerViewer.ts","../../src/provider/viewer/NetworkStake/Rewards/ByStepViewer.ts","../../src/provider/viewer/NetworkStake/Rewards/TotalViewer.ts","../../src/provider/viewer/NetworkStake/Rewards/Viewer.ts","../../src/provider/viewer/XyoViewer.ts","../../src/services/StakeIntentService/ChainIndexingServiceStateSchema.ts","../../src/SignedBigInt.ts","../../src/simple/accountBalance/SimpleAccountBalanceViewer.ts","../../src/summary/model/BalancesStepSummary.ts","../../src/summary/model/SchemasStepSummary.ts","../../src/summary/model/StepSummary.ts","../../src/summary/model/TransfersSummary.ts","../../src/summary/primitives/balances/balancesStepSummaryFromRange.ts","../../src/summary/primitives/balances/balancesSummary.ts","../../src/summary/primitives/schemas/schemasStepSummaryFromRange.ts","../../src/summary/primitives/schemas/schemasSummary.ts","../../src/summary/primitives/transfers/transfersStepSummaryFromRange.ts","../../src/summary/primitives/transfers/transfersSummary.ts","../../src/viewers/AccountBalance.ts","../../src/viewers/Block.ts","../../src/viewers/BlockReward.ts","../../src/viewers/Chain.ts","../../src/viewers/ChainContract.ts","../../src/viewers/ChainStakeViewer.ts","../../src/viewers/Mempool.ts","../../src/viewers/NetworkStakeStepReward.ts","../../src/viewers/Stake.ts","../../src/viewers/StakeEvents.ts","../../src/viewers/StakeTotals.ts","../../src/viewers/StepStake.ts","../../src/viewers/StepViewer.ts","../../src/viewers/TimeSync.ts","../../src/viewers/TransferBalance.ts","../../src/simple/block/SimpleBlockViewer.ts","../../src/utils/HydratedCache.ts","../../src/utils/isZodError.ts","../../src/simple/blockReward/SimpleBlockRewardViewer.ts","../../src/simple/chainStake/SimpleChainStakeViewer.ts","../../src/simple/chainStakeEvents/SimpleChainStakeEventsViewer.ts","../../src/simple/client/SimpleXyoClient.ts","../../src/simple/datalake/AbstractSimpleDataLake.ts","../../src/simple/datalake/SimpleDataLakeRunner.ts","../../src/simple/datalake/SimpleDataLakeViewer.ts","../../src/simple/gateway/SimpleXyoGateway.ts","../../src/simple/gateway/SimpleXyoGatewayRunner.ts","../../src/simple/mempool/SimpleMempoolRunner.ts","../../src/simple/mempool/SimpleMempoolViewer.ts","../../src/simple/network/SimpleXyoNetwork.ts","../../src/simple/network/lib/FailedNetworkStatusPayloads.ts","../../src/simple/network/lib/StatusNetworks.ts","../../src/simple/permissions/SimpleXyoPermissions.ts","../../src/simple/permissions/store/MemoryPermissions.ts","../../src/simple/runner/SimpleXyoRunner.ts","../../src/simple/signer/SimpleXyoSigner.ts","../../src/simple/timesync/SimpleTimeSyncViewer.ts","../../src/time/primitives/xl1BlockNumberToEthBlockNumber.ts","../../src/wallet/generateXyoBaseWalletFromPhrase.ts","../../src/wallet/paths.ts"],"sourcesContent":["import type { Hash } from '@xylabs/sdk-js'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\n\nexport function allHashesPresent(hashes: Hash[], payloads: WithStorageMeta<Payload>[]): boolean {\n const payloadHashes = new Set(payloads.map(p => p._hash))\n return hashes.every(hash => payloadHashes.has(hash))\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { HydratedBlockWithStorageMeta } from '@xyo-network/xl1-protocol'\nimport { isTransactionBoundWitness } from '@xyo-network/xl1-protocol'\n\nexport const blockPayloadsFromHydratedBlock = (block: HydratedBlockWithStorageMeta): WithStorageMeta[] => {\n return block[0].payload_hashes.map(hash => assertEx(\n block[1].find(p => p._hash === hash),\n () => `missing payload ${hash}`,\n )).filter(x => !isTransactionBoundWitness(x))\n}\n","import type { Payload } from '@xyo-network/payload-model'\nimport { type BlockBoundWitness, toHydratedBlock } from '@xyo-network/xl1-protocol'\n\nexport const flattenHydratedBlock = <B extends BlockBoundWitness, P extends Payload>(hydratedBlock: [B, P[]]): (P | B)[] => {\n const [blk, blkPayloads] = hydratedBlock\n return [...blkPayloads, blk]\n}\n\nexport const tryUnflattenHydratedBlock = <\n B extends BlockBoundWitness,\n P extends Payload,\n>(flattened: (P | B)[]): [B, P[]] | undefined => {\n // Last element is the block\n const blk = flattened.at(-1) as B\n\n // All previous elements are payloads\n const payloads = flattened.slice(0, -1) as P[]\n\n return toHydratedBlock([blk, payloads])\n}\n\nexport const unflattenHydratedBlock = <\n B extends BlockBoundWitness,\n P extends Payload,\n>(flattened: (P | B)[]): [B, P[]] => toHydratedBlock(tryUnflattenHydratedBlock(flattened), true) as [B, P[]]\n","import type { HydratedBlock } from '@xyo-network/xl1-protocol'\n\nimport { flattenHydratedBlock } from './flattenHydratedBlock.ts'\n\nexport const flattenHydratedBlocks = <T extends HydratedBlock>(hydratedBlocks: T[]): (T[0] | T[1][number])[] =>\n hydratedBlocks.flatMap(blk => flattenHydratedBlock(blk))\n","import type { Hash } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { HydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol'\nimport { asBlockBoundWitnessWithStorageMeta, isTransactionBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'\n\nimport type { ChainStoreRead } from '../../model/index.ts'\nimport { allHashesPresent } from './allHashesPresent.ts'\n\nexport const hydrateBlock = async (\n { chainMap }: ChainStoreRead,\n hash: Hash,\n maxDepth: number = 1,\n minDepth = maxDepth,\n): Promise<HydratedBlockWithHashMeta> => {\n assertEx(maxDepth >= 0, () => 'maxDepth must be greater than or equal to 0')\n assertEx(minDepth >= 0, () => 'minDepth must be greater than or equal to 0')\n assertEx(maxDepth >= minDepth, () => 'maxDepth must be greater than or equal to minDepth')\n\n const bw = assertEx(asBlockBoundWitnessWithStorageMeta(\n assertEx(await chainMap.get(hash), () => `block ${hash} not found`),\n ), () => `hash ${hash} is not a BlockBoundWitness`)\n\n if (maxDepth === 0) return [bw, []]\n const blkPayloads = await chainMap.getMany(bw.payload_hashes)\n if (minDepth === 1) assertEx(allHashesPresent(bw.payload_hashes, blkPayloads), () => `Unable to find all payloads for block ${hash}`)\n if (maxDepth === 1) return [bw, blkPayloads]\n const transactions = blkPayloads.filter(isTransactionBoundWitnessWithStorageMeta)\n const transactionsPayloadHashes = transactions.flatMap(tx => tx.payload_hashes)\n const transactionsPayloads = await chainMap.getMany(transactionsPayloadHashes)\n assertEx(allHashesPresent(transactionsPayloadHashes, transactionsPayloads), () => `Unable to find all payloads for transactions in block ${hash}`)\n const allPayloadsHashes = new Set([...blkPayloads, ...transactionsPayloads].flatMap(p => p._hash))\n const allPayloads = await chainMap.getMany([...allPayloadsHashes])\n const allPayloadsFiltered = allPayloads.filter(p => allPayloadsHashes.has(p._hash))\n if (maxDepth === 2) assertEx(allHashesPresent(\n [...allPayloadsHashes],\n allPayloadsFiltered,\n ), () => `Unable to find all payloads for transactions in block ${hash}`)\n return [bw, allPayloadsFiltered]\n}\n","import type { HydratedBlock, TransactionBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'\nimport { isTransactionBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'\n\nexport const transactionsFromHydratedBlock = (block: HydratedBlock): TransactionBoundWitnessWithStorageMeta[] => {\n return block[1].filter(isTransactionBoundWitnessWithStorageMeta)\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { ReadArchivist } from '@xyo-network/archivist-model'\nimport type { HydratedBlock } from '@xyo-network/xl1-protocol'\nimport { isBlockBoundWitnessWithStorageMeta, isTransactionBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'\n\nexport const tryHydrateBlock = async (\n archivist: ReadArchivist,\n hash: Hash,\n maxDepth: number = 1,\n): Promise<HydratedBlock | undefined> => {\n assertEx(maxDepth >= 0, () => 'maxDepth must be greater than or equal to 0')\n const bw = (await archivist.get([hash])).find(isBlockBoundWitnessWithStorageMeta)\n if (!bw) return undefined\n if (maxDepth === 0) return [bw, []]\n const blkPayloads = await archivist.get(bw.payload_hashes)\n if (maxDepth === 1) return [bw, blkPayloads]\n const transactions = blkPayloads.filter(isTransactionBoundWitnessWithStorageMeta)\n const transactionsPayloadHashes = transactions.flatMap(tx => tx.payload_hashes)\n const transactionsPayloads = await archivist.get(transactionsPayloadHashes)\n const allPayloadsHashes = new Set([...blkPayloads, ...transactionsPayloads].flatMap(p => p._hash))\n const allPayloads = await archivist.get([...allPayloadsHashes])\n const allPayloadsFiltered = allPayloads.filter(p => allPayloadsHashes.has(p._hash))\n return [bw, allPayloadsFiltered]\n}\n","import {\n asHash, type Hash, isDefined,\n} from '@xylabs/sdk-js'\nimport { toSafeJsonString } from '@xylabs/sdk-js'\nimport type { Signed } from '@xyo-network/boundwitness-model'\nimport type { WithHashMeta } from '@xyo-network/payload-model'\nimport type { BlockBoundWitness, XL1BlockNumber } from '@xyo-network/xl1-protocol'\nimport {\n asSignedBlockBoundWitnessWithStorageMeta, SignedBlockBoundWitnessWithHashMetaZod, StepSizes,\n} from '@xyo-network/xl1-protocol'\n\nimport { type ChainContextRead, withContextCacheResponse } from '../../model/index.ts'\n\nexport async function blockFromBlockNumber(context: ChainContextRead, blockNumber: XL1BlockNumber): Promise<WithHashMeta<Signed<BlockBoundWitness>>> {\n const cacheKey = `${blockNumber}`\n return await withContextCacheResponse(context, 'blockFromBlockNumber', cacheKey, async () => {\n const [headHash] = await context.head()\n const result = await context.store.chainMap.get(headHash)\n if (!isDefined(result)) {\n throw new Error(`Head block not found for hash: ${headHash}`)\n }\n let currentBlock = asSignedBlockBoundWitnessWithStorageMeta(\n result,\n () => `Found Payload is not a Signed<BlockBoundWitness>: ${JSON.stringify(result, null, 2)}`,\n )\n if (currentBlock.block < blockNumber) {\n throw new Error(`Block number ${blockNumber} is greater than head ${currentBlock.block}.`)\n }\n while (currentBlock.block > blockNumber) {\n let jumpHash: Hash | null = currentBlock.previous\n let jumpBlockNumber = currentBlock.block - 1\n for (const [step, stepSize] of StepSizes.entries()) {\n const possibleJumpBlockNumber = currentBlock.block - (currentBlock.block % stepSize) - 1\n if (possibleJumpBlockNumber >= blockNumber && possibleJumpBlockNumber <= jumpBlockNumber) {\n jumpBlockNumber = possibleJumpBlockNumber\n jumpHash = asHash(currentBlock.step_hashes?.at(step), () => `Step hash not found for step ${step} in block ${currentBlock.block}`)\n }\n }\n const newBlock = await context.store.chainMap.get(\n asHash(jumpHash, () => `Jump hash not found for block number [${blockNumber}]: ${jumpBlockNumber} ${toSafeJsonString(currentBlock, 10)}`),\n )\n if (!isDefined(newBlock)) {\n throw new Error(`Block not found for jump hash: ${jumpHash}`)\n }\n currentBlock = asSignedBlockBoundWitnessWithStorageMeta(\n newBlock,\n () => {\n const result = SignedBlockBoundWitnessWithHashMetaZod.safeParse(newBlock)\n return `Found Payload [jump hash] is not a Signed<BlockBoundWitness>: ${result.error}`\n },\n )\n if (currentBlock.block === blockNumber) {\n break\n }\n if (currentBlock.block < blockNumber) {\n throw new Error(`Block number ${blockNumber} is not a valid step block number for block ${headHash}.`)\n }\n }\n return currentBlock\n })\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport { isDefined, isUndefined } from '@xylabs/sdk-js'\n\nimport { LruCacheMap, MemoryMap } from '../../driver/index.ts'\nimport type { MapType } from '../../map/index.ts'\nimport { timeBudget } from '../../primitives/index.ts'\nimport type { ChainIdentity } from '../ChainIdentity.ts'\nimport type {\n ChainStakeContext, ChainStakeContextRead, ChainStakeContextWrite,\n} from './ChainStakeContext.ts'\nimport type { ChainStateContextRead, ChainStateContextWrite } from './ChainStateContext.ts'\nimport type {\n ChainStoreContext, ChainStoreContextRead, ChainStoreContextWrite,\n} from './ChainStoreContext.ts'\n\nexport interface BaseContext<TCacheValue = string | object | number | bigint> {\n caches?: Record<string, MapType<string, TCacheValue>>\n logger?: Logger\n}\n\nexport function contextCache<TCacheValue>(\n context: BaseContext<TCacheValue | unknown>,\n name: string,\n create?: () => MapType<string, TCacheValue>,\n): MapType<string, TCacheValue> {\n if (!context.caches) {\n context.caches = {}\n }\n if (isUndefined(context.caches[name])) {\n context.caches[name] = create?.() ?? new MemoryMap<string, TCacheValue>()\n }\n return context.caches[name] as MapType<string, TCacheValue>\n}\n\nexport interface withContextCacheResponseOptions {\n max?: number\n timeBudgetMs?: number\n}\n\nexport async function withContextCacheResponse<T extends {} | string | number | bigint>(\n context: BaseContext,\n name: string,\n key: string,\n func: () => Promise<T extends {} | string | number | bigint ? T : never>,\n { max = 10_000, timeBudgetMs = 0 }: withContextCacheResponseOptions = {},\n): Promise<T> {\n const cache = contextCache<T>(\n context,\n name,\n () => new LruCacheMap<string, T>({ max }),\n )\n const cacheResult = await cache.get(key)\n if (isDefined(cacheResult)) {\n return cacheResult\n }\n const result = timeBudgetMs > 0 ? await timeBudget(name, context.logger, func, timeBudgetMs) : await func()\n await cache.set(key, result)\n return result\n}\n\nexport interface ChainContextWrite extends BaseContext, ChainIdentity, ChainStateContextWrite, ChainStoreContextWrite {}\n\nexport interface StakedChainContextWrite extends BaseContext, ChainContextWrite, ChainStakeContextWrite {}\n\nexport interface ChainContextRead extends BaseContext, ChainIdentity, ChainStateContextRead, ChainStoreContextRead {}\n\nexport interface StakedChainContextRead extends BaseContext, ChainContextRead, ChainStakeContextRead {}\n\nexport type ChainContext = ChainIdentity & ChainContextRead & ChainContextWrite & ChainStoreContext\n\nexport type StakedChainContext = ChainContext & ChainStakeContext & ChainStakeContextRead & ChainStakeContextWrite\n","import { LRUCache } from 'lru-cache'\n\nimport type { SynchronousMap } from '../../map/index.ts'\n\nexport class LruCacheMap<K extends {}, V extends {} | string | number | bigint, FC = () => void> implements SynchronousMap<K, V> {\n private lruCache: LRUCache<K, V, FC>\n\n constructor(options?: LRUCache.Options<K, V, FC>) {\n this.lruCache = new LRUCache<K, V, FC>(options ?? { max: 5000 })\n }\n\n clear(): void {\n this.lruCache.clear()\n }\n\n delete(id: K): boolean {\n return this.lruCache.delete(id)\n }\n\n get(id: K): V | undefined {\n return this.lruCache.get(id)\n }\n\n getMany(id: K[]): V[] {\n const results: V[] = []\n for (const key of id) {\n const value = this.lruCache.get(key)\n if (value !== undefined) {\n results.push(value)\n }\n }\n return results\n }\n\n has(id: K): boolean {\n return this.lruCache.has(id)\n }\n\n set(id: K, data: V) {\n this.lruCache.set(id, data)\n }\n\n setMany(entries: [K, V][]): void {\n for (const [key, value] of entries) {\n this.lruCache.set(key, value)\n }\n }\n}\n","import { isDefined } from '@xylabs/sdk-js'\n\nimport type { SynchronousMap } from '../../map/index.ts'\n\nexport class MemoryMap<K extends {}, V = {}> implements SynchronousMap<K, V> {\n private map: Map<K, V>\n\n constructor() {\n this.map = new Map<K, V>()\n }\n\n clear(): void {\n this.map.clear()\n }\n\n delete(id: K): boolean {\n return this.map.delete(id)\n }\n\n get(id: K): V | undefined {\n return this.map.get(id)\n }\n\n getMany(ids: K[]): V[] {\n const results: V[] = []\n for (const id of ids) {\n const data = this.map.get(id)\n if (isDefined(data)) {\n results.push(data)\n }\n }\n return results\n }\n\n has(id: K): boolean {\n return this.map.has(id)\n }\n\n set(id: K, data: V) {\n this.map.set(id, data)\n }\n\n setMany(entries: [K, V][]): void {\n for (const [key, value] of entries) {\n this.map.set(key, value)\n }\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { isDefined } from '@xylabs/sdk-js'\nimport type { ReadArchivist } from '@xyo-network/archivist-model'\nimport type { Payload } from '@xyo-network/payload-model'\n\nimport { isReadArchivist } from '../block/index.ts'\nimport type { PayloadMapRead } from '../model/index.ts'\n\nexport function readPayloadMapFromStore<T extends Payload>(store: ReadArchivist<T> | PayloadMapRead<T>): PayloadMapRead<T> {\n if (isReadArchivist(store)) {\n return {\n get: async (hash: Hash): Promise<T | undefined> => {\n return (await store.get([hash]))[0]\n },\n getMany: async (hashes: Hash[]): Promise<T[]> => {\n return (await store.get(hashes))\n },\n has: async (hash: Hash): Promise<boolean> => {\n return isDefined((await store.get([hash]))[0])\n },\n }\n }\n return store\n}\n","import { toFixedPoint } from '@xylabs/sdk-js'\nimport { asAttoXL1, type XL1BlockNumber } from '@xyo-network/xl1-protocol'\n\nexport const rewardFromBlockNumber = (places = 18) => {\n return (\n blockNumber: XL1BlockNumber,\n startingReward = asAttoXL1(toFixedPoint(500n, places)),\n blocksPerStep = 1_000_000,\n stepFactorNumerator = 95n,\n stepFactorDenominator = 100n,\n minBlockReward = asAttoXL1(toFixedPoint(10n, places)),\n creatorReward = asAttoXL1(toFixedPoint(20_000_000_000n, places)),\n ) => {\n if (blockNumber === 0) {\n return creatorReward\n }\n const step = Math.floor((blockNumber + blocksPerStep) / blocksPerStep)\n const stepExp = BigInt(step - 1)\n const poweredNumerator = stepExp > 0 ? stepFactorNumerator ** stepExp : 1n\n const poweredDenominator = stepExp > 0 ? stepFactorDenominator ** stepExp : 1n\n let reward = (startingReward * poweredNumerator) / poweredDenominator\n // eslint-disable-next-line unicorn/prefer-math-min-max\n return asAttoXL1((reward < minBlockReward) ? minBlockReward : reward)\n }\n}\n","import type { NextOptions, ReadArchivist } from '@xyo-network/archivist-model'\nimport type {\n Payload, Sequence, WithStorageMeta,\n} from '@xyo-network/payload-model'\nimport type { SignedBlockBoundWitnessWithHashMeta } from '@xyo-network/xl1-protocol'\nimport { isSignedBlockBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'\n\n// TODO: Use some smart value relative to DEFAULT_BLOCK_SIZE\n// to ensure we're likely to find it in a single request\n// without bringing back too much data\nconst DEFAULT_NEXT_OPTIONS: NextOptions = { limit: 50 }\n\n/**\n * Iterates an archivist to find the most recent block\n * @param chainArchivist The archivist to iterate over for the most recent chain block\n * @param nextOptions The options to use when iterating the archivist\n * @param maxIterations The max number of iterations to perform when finding the most recent block\n * @returns The most recent block found in the archivist or undefined if no blocks are found\n */\nexport const findMostRecentBlock = async (\n chainArchivist: ReadArchivist,\n nextOptions: NextOptions = DEFAULT_NEXT_OPTIONS,\n maxIterations = Number.POSITIVE_INFINITY,\n): Promise<SignedBlockBoundWitnessWithHashMeta | undefined> => {\n let mostRecentBlock: SignedBlockBoundWitnessWithHashMeta | undefined\n let cursor: Sequence | undefined\n let batch: WithStorageMeta<Payload>[]\n let iterations = 0\n do {\n batch = await chainArchivist.next({\n ...nextOptions, order: 'desc', cursor,\n })\n const blocks = batch.filter(isSignedBlockBoundWitnessWithStorageMeta)\n const last = blocks?.at(0)\n if (last) {\n mostRecentBlock = last\n break\n } else {\n cursor = batch.at(-1)?._sequence\n }\n iterations = iterations + 1\n } while (batch.length > 0 && iterations < maxIterations)\n return mostRecentBlock\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { HydratedBlockWithHashMeta, XL1BlockNumber } from '@xyo-network/xl1-protocol'\n\nimport { blockFromBlockNumber, hydrateBlock } from '../../block/index.ts'\nimport { type ChainContextRead, withContextCacheResponse } from '../../model/index.ts'\n\nexport async function hydratedBlockByNumber(context: ChainContextRead, blockNumber: XL1BlockNumber): Promise<HydratedBlockWithHashMeta | null> {\n if (blockNumber < 0) throw new Error(`Block number ${blockNumber} is less than 0`)\n if (blockNumber > Number.MAX_SAFE_INTEGER) throw new Error(`Block number ${blockNumber} is greater than the maximum safe integer`)\n if (blockNumber % 1 !== 0) throw new Error(`Block number ${blockNumber} is not an integer`)\n const cacheKey = `${blockNumber}`\n return await withContextCacheResponse(context, 'hydratedBlockByNumber', cacheKey, async () => {\n const block = assertEx(\n await blockFromBlockNumber(context, blockNumber),\n () => `Could not find block for block number ${blockNumber}`,\n )\n return await hydrateBlock(context.store, block._hash)\n })\n}\n","import { type Address, toAddress } from '@xylabs/sdk-js'\nimport { type StepIdentity, StepSizes } from '@xyo-network/xl1-protocol'\nimport { keccak256 } from 'ethers'\n\nexport function completedStepRewardAddress({ block, step }: StepIdentity): Address {\n const resolvedStepSize = step < StepSizes.length ? StepSizes[step] : step\n const addressKey = new TextEncoder().encode(`${block}|${resolvedStepSize}`)\n return toAddress(keccak256(addressKey).slice(-40), { prefix: false })\n}\n","import { type Address, toAddress } from '@xylabs/sdk-js'\nimport { isDefined } from '@xylabs/sdk-js'\nimport { keccak256 } from 'ethers'\n\nexport function derivedReceiveAddress(address: Address, scope?: string): Address {\n const addressKey = new TextEncoder().encode(isDefined(scope) ? `${scope}|${address}` : address)\n return toAddress(keccak256(addressKey).slice(-40), { prefix: false })\n}\n","import type { StepIdentity, XL1BlockRange } from '@xyo-network/xl1-protocol'\nimport { asXL1BlockRange, StepSizes } from '@xyo-network/xl1-protocol'\n\nexport function stepBlockRange({ block, step }: StepIdentity): XL1BlockRange {\n const stepSize = StepSizes[step]\n const start = block - stepSize\n return asXL1BlockRange([start, start + stepSize - 1], { name: 'stepBlockRange' })\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport { StepSizes } from '@xyo-network/xl1-protocol'\n\nexport function stepTransferIndex(block: number, step: number) {\n let rewardTransferCount = 0\n let rewardTransferIndex = -1\n for (let i = 3; i < StepSizes.length; i++) {\n const stepSize = StepSizes[i]\n if (block % stepSize === 0) {\n if (stepSize === StepSizes[step]) {\n rewardTransferIndex = rewardTransferCount\n }\n rewardTransferCount++\n }\n }\n assertEx(rewardTransferIndex >= 0, () => `Could not find step size for step ${step} at block ${block}`)\n return [rewardTransferIndex, rewardTransferCount]\n}\n","import { type Logger } from '@xylabs/sdk-js'\n\nexport async function timeBudget<TResult>(\n name: string,\n logger: Logger | undefined,\n func: () => Promise<TResult>,\n budget: number,\n status = false,\n): Promise<TResult> {\n const start = Date.now()\n const timer = status\n ? setInterval(() => {\n const duration = Date.now() - start\n if ((budget > 0) && (duration > budget)) {\n logger?.warn(`Function [${name}] execution is exceeding budget: ${duration}ms > ${budget}ms`)\n }\n }, Math.max(100, budget))\n : undefined\n\n const result = await func()\n const duration = Date.now() - start\n\n if (!timer && (budget > 0) && (duration > budget)) {\n logger?.warn(`Function [${name}] execution exceeded budget: ${duration}ms > ${budget}ms`)\n }\n if (timer) {\n clearInterval(timer)\n }\n return result\n}\n","import type { WithHashMeta } from '@xyo-network/payload-model'\nimport type { AllowedBlockPayload, HydratedTransactionWithHashMeta } from '@xyo-network/xl1-protocol'\nimport { isAllowedBlockPayload } from '@xyo-network/xl1-protocol'\n\nconst ELEVATE_OPCODE = 'elevate'\n\nexport function elevatedPayloads([tx, payloads]: HydratedTransactionWithHashMeta) {\n const opCodes = (tx.script ?? []).filter(operation => operation.startsWith(`${ELEVATE_OPCODE}|`))\n const elevatedPayloads: WithHashMeta<AllowedBlockPayload>[] = []\n for (const opCode of opCodes) {\n const [code, hash] = opCode.split('|')\n if (code === ELEVATE_OPCODE) {\n const elevatedPayload = payloads.find(payload => payload._hash === hash)\n if (isAllowedBlockPayload(elevatedPayload)) {\n elevatedPayloads.push(elevatedPayload)\n }\n }\n }\n if (opCodes.length === elevatedPayloads.length) {\n return elevatedPayloads\n }\n throw new Error('Not all elevated payloads could be found in the transaction payloads')\n}\n","import { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { PayloadBundle, WithHashMeta } from '@xyo-network/payload-model'\nimport type { SignedHydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol'\nimport { asSignedBlockBoundWitnessWithHashMeta } from '@xyo-network/xl1-protocol'\n\nexport const bundledPayloadToHydratedBlock = async (\n payload: WithHashMeta<PayloadBundle>,\n): Promise<SignedHydratedBlockWithHashMeta | undefined> => {\n const withHashMeta = await PayloadBuilder.addHashMeta(payload.payloads)\n const tx = asSignedBlockBoundWitnessWithHashMeta(withHashMeta.find(p => p._hash === payload.root))\n if (tx) {\n return [tx, withHashMeta.filter(p => p._hash !== payload.root)]\n }\n}\n","import { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { PayloadBundle, WithHashMeta } from '@xyo-network/payload-model'\nimport type { SignedHydratedTransactionWithHashMeta } from '@xyo-network/xl1-protocol'\nimport { asSignedTransactionBoundWitnessWithHashMeta } from '@xyo-network/xl1-protocol'\n\nexport const bundledPayloadToHydratedTransaction = async (\n payload: WithHashMeta<PayloadBundle>,\n): Promise<SignedHydratedTransactionWithHashMeta | undefined> => {\n const withHashMeta = await PayloadBuilder.addHashMeta(payload.payloads)\n const tx = asSignedTransactionBoundWitnessWithHashMeta(withHashMeta.find(p => p._hash === payload.root))\n if (tx) {\n return [tx, withHashMeta.filter(p => p._hash !== payload.root)]\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { type PayloadBundle, PayloadBundleSchema } from '@xyo-network/payload-model'\nimport type { SignedHydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol'\n\nimport { flattenHydratedBlock } from '../../block/index.ts'\n\nexport const hydratedBlockToPayloadBundle = (transaction: SignedHydratedBlockWithHashMeta): PayloadBundle => {\n const root = transaction[0]._hash\n return bundle(root, transaction)\n}\n\nconst bundle = (root: Hash, transaction: SignedHydratedBlockWithHashMeta) => {\n const payloads = flattenHydratedBlock(transaction).flatMap(p => PayloadBuilder.omitStorageMeta(p))\n return new PayloadBuilder<PayloadBundle>({ schema: PayloadBundleSchema })\n .fields({ payloads, root })\n .build()\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { type PayloadBundle, PayloadBundleSchema } from '@xyo-network/payload-model'\nimport type { SignedHydratedTransactionWithHashMeta } from '@xyo-network/xl1-protocol'\n\nimport { flattenHydratedTransaction } from '../../transaction/index.ts'\n\nexport const hydratedTransactionToPayloadBundle = (transaction: SignedHydratedTransactionWithHashMeta): PayloadBundle => {\n const root = transaction[0]._hash\n return bundle(root, transaction)\n}\n\nconst bundle = (root: Hash, transaction: SignedHydratedTransactionWithHashMeta) => {\n const payloads = flattenHydratedTransaction(transaction).flatMap(p => PayloadBuilder.omitStorageMeta(p))\n return new PayloadBuilder<PayloadBundle>({ schema: PayloadBundleSchema })\n .fields({ payloads, root })\n .build()\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { assertEx, toHex } from '@xylabs/sdk-js'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload,\n ChainId,\n ExecutableFields,\n FromFields,\n SignedHydratedTransactionWithHashMeta,\n TransactionBoundWitness, TransactionBoundWitnessFields, TransactionFeesBigInt,\n XL1BlockNumber,\n} from '@xyo-network/xl1-protocol'\nimport { defaultTransactionFees } from '@xyo-network/xl1-protocol'\n\nexport async function buildTransaction(\n chain: ChainId,\n onChainPayloads: AllowedBlockPayload[],\n offChainPayloads: Payload[],\n signer: AccountInstance | AccountInstance[],\n nbf: XL1BlockNumber,\n exp: XL1BlockNumber,\n from?: Address,\n fees: TransactionFeesBigInt = defaultTransactionFees,\n): Promise<SignedHydratedTransactionWithHashMeta> {\n if (from === undefined && Array.isArray(signer)) {\n throw new Error('from is required when signer is an array')\n }\n\n const txBoundWitnessFields: Omit<TransactionBoundWitnessFields, 'from'> = {\n chain,\n fees: {\n base: toHex(fees.base),\n gasLimit: toHex(fees.gasLimit),\n gasPrice: toHex(fees.gasPrice),\n priority: toHex(fees.priority),\n },\n nbf,\n exp,\n }\n\n const elevatedHashes = await PayloadBuilder.hashes(onChainPayloads)\n const script: string[] = []\n for (const elevatedHash of elevatedHashes) {\n script.push(`elevate|${elevatedHash}`)\n }\n\n const fields: TransactionBoundWitnessFields & FromFields & Partial<ExecutableFields> = {\n ...txBoundWitnessFields,\n from: from ?? (Array.isArray(signer) ? assertEx(signer.at(0)?.address) : signer.address),\n }\n\n if (script.length > 0) {\n fields.script = script\n }\n\n const [tx, txPayloads] = await new BoundWitnessBuilder<TransactionBoundWitness>()\n .fields(fields)\n .meta({ $signatures: [] })\n .payloads([...onChainPayloads, ...offChainPayloads])\n .signers(Array.isArray(signer) ? signer : [signer])\n .build()\n\n return [await PayloadBuilder.addHashMeta(tx), await PayloadBuilder.addHashMeta(txPayloads)]\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { toHex } from '@xylabs/sdk-js'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload, ChainId, ExecutableFields, FromFields, TransactionBoundWitness, TransactionBoundWitnessFields, TransactionFeesBigInt,\n UnsignedHydratedTransaction,\n XL1BlockNumber,\n} from '@xyo-network/xl1-protocol'\nimport { defaultTransactionFees } from '@xyo-network/xl1-protocol'\n\nexport async function buildUnsignedTransaction(\n chain: ChainId,\n onChainPayloads: AllowedBlockPayload[],\n offChainPayloads: Payload[],\n nbf: XL1BlockNumber,\n exp: XL1BlockNumber,\n from: Address,\n fees: TransactionFeesBigInt = defaultTransactionFees,\n): Promise<UnsignedHydratedTransaction> {\n const txBoundWitnessFields: Omit<TransactionBoundWitnessFields, 'from'> = {\n chain,\n fees: {\n base: toHex(fees.base),\n gasLimit: toHex(fees.gasLimit),\n gasPrice: toHex(fees.gasPrice),\n priority: toHex(fees.priority),\n },\n nbf,\n exp,\n }\n\n const elevatedHashes = await PayloadBuilder.hashes(onChainPayloads)\n const script: string[] = []\n for (const elevatedHash of elevatedHashes) {\n script.push(`elevate|${elevatedHash}`)\n }\n\n const fields: TransactionBoundWitnessFields & FromFields & Partial<ExecutableFields> = {\n ...txBoundWitnessFields,\n from,\n }\n\n if (script.length > 0) {\n fields.script = script\n }\n\n const [tx, txPayloads] = await new BoundWitnessBuilder<TransactionBoundWitness>()\n .fields(fields)\n .meta({ $signatures: [] })\n .payloads([...onChainPayloads, ...offChainPayloads])\n .build(false)\n\n return [tx, txPayloads]\n}\n","import type { Hash, Logger } from '@xylabs/sdk-js'\nimport { delay, isDefined } from '@xylabs/sdk-js'\nimport type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol'\n\nimport type { XyoViewer } from '../provider/index.ts'\n\nconst DEFAULT_CONFIRMATION_ATTEMPTS = 20\nconst DEFAULT_DELAY_BETWEEN_ATTEMPTS = 1000 // milliseconds\n\nexport type ConfirmSubmittedTransactionOptions = {\n /**\n * Number of attempts to confirm the transaction.\n * Defaults to 20.\n */\n attempts?: number\n /**\n * Delay in milliseconds between confirmation attempts.\n * Defaults to 1000 (1 second).\n */\n delay?: number\n /**\n * Optional logger instance for logging progress.\n */\n logger?: Logger\n}\n\n/**\n * Confirms a submitted transaction by checking if it has been included in the blockchain.\n * @param viewer The viewer\n * @param txHash The hash of the transaction to confirm\n * @param options Options for confirmation\n * @returns The confirmed transaction or throws an error if not confirmed\n */\nexport const confirmSubmittedTransaction = async (\n viewer: XyoViewer,\n txHash: Hash,\n options?: ConfirmSubmittedTransactionOptions,\n): Promise<SignedHydratedTransaction> => {\n const { attempts: maxAttempts = DEFAULT_CONFIRMATION_ATTEMPTS, delay: attemptDelay = DEFAULT_DELAY_BETWEEN_ATTEMPTS } = options ?? {}\n options?.logger?.log('🚀 confirming transaction:', txHash, '\\n')\n let attempts = 0\n while (true) {\n const tx = await viewer.transactionByHash(txHash) ?? undefined\n if (isDefined(tx)) {\n options?.logger?.log('✅ Transaction confirmed:', txHash, '\\n')\n return tx\n } else {\n attempts++\n if (attempts > maxAttempts) {\n options?.logger?.error(`⚠️ Transaction not confirmed after ${maxAttempts} attempts`)\n throw new Error(`Transaction ${txHash} not confirmed after ${maxAttempts} attempts`)\n } else {\n options?.logger?.log(`🔄 Transaction not confirmed yet, attempt ${attempts}. Retrying...`, '\\n')\n await delay(attemptDelay)\n }\n }\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport { hydrateTypedBoundWitness, tryHydrateTypedBoundWitness } from '@xyo-network/archivist-model'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload, SignedHydratedTransaction,\n SignedHydratedTransactionWithStorageMeta, TransactionBoundWitness,\n} from '@xyo-network/xl1-protocol'\nimport {\n asSignedHydratedBlock, asSignedHydratedTransaction, isAllowedBlockPayload, isSignedTransactionBoundWitnessWithStorageMeta,\n} from '@xyo-network/xl1-protocol'\n\nimport type { ChainStoreRead } from '../model/index.ts'\n\nexport const tryHydrateTransaction = async (\n { chainMap }: ChainStoreRead,\n hash: Hash,\n): Promise<SignedHydratedTransactionWithStorageMeta | undefined> => {\n return (await tryHydrateTypedBoundWitness<TransactionBoundWitness>(\n {\n get(hashes: Hash[]) {\n return chainMap.getMany(hashes)\n },\n next() {\n throw new Error('Not implemented')\n },\n },\n hash,\n isSignedTransactionBoundWitnessWithStorageMeta,\n )) as SignedHydratedTransactionWithStorageMeta | undefined\n}\n\nexport const hydrateTransaction = async (\n { chainMap }: ChainStoreRead,\n hash: Hash,\n): Promise<SignedHydratedTransaction> => {\n return await hydrateTypedBoundWitness<TransactionBoundWitness>(\n {\n get(hashes: Hash[]) {\n return chainMap.getMany(hashes)\n },\n next() {\n throw new Error('Not implemented')\n },\n },\n hash,\n isSignedTransactionBoundWitnessWithStorageMeta,\n ) as SignedHydratedTransaction\n}\n\nexport const flattenHydratedTransaction = (hydratedTransaction: SignedHydratedTransaction): Payload[] => {\n const [tx, txPayloads] = hydratedTransaction\n return [...txPayloads, tx]\n}\n\nexport const tryUnflattenHydratedTransaction = (\n flattened: Payload[],\n): SignedHydratedTransaction | undefined => {\n // Last element is always the transaction bound witness\n const tx = flattened.at(-1)\n\n // Everything else is a payloads\n const txPayloads = flattened.slice(0, -1)\n\n return asSignedHydratedTransaction([tx, txPayloads])\n}\n\nexport const unflattenHydratedTransaction = (flattened: Payload[]): SignedHydratedTransaction =>\n asSignedHydratedTransaction(tryUnflattenHydratedTransaction(flattened), true)\n\nexport const flattenHydratedTransactions = (hydratedTransactions: SignedHydratedTransaction[]): Payload[] =>\n hydratedTransactions.flatMap(tx => flattenHydratedTransaction(tx))\n\nexport const tryHydrateElevatedTransaction = async (\n { chainMap }: ChainStoreRead,\n hash: Hash,\n): Promise<SignedHydratedTransactionWithStorageMeta | undefined> => {\n const hydratedTransaction = await tryHydrateTransaction({ chainMap }, hash)\n if (!hydratedTransaction) {\n return undefined\n }\n const [transaction, payloads] = hydratedTransaction\n const opCodes = (transaction.script ?? []).filter(operation => operation.startsWith('elevate|'))\n const elevatedPayloads: WithStorageMeta<AllowedBlockPayload>[] = []\n for (const opCode of opCodes) {\n const [code, hash] = opCode.split('|')\n if (code === 'elevated') {\n const elevatedPayload = payloads.find(payload => payload._hash === hash)\n if (isAllowedBlockPayload(elevatedPayload)) {\n elevatedPayloads.push(elevatedPayload)\n }\n }\n }\n if (opCodes.length === elevatedPayloads.length) {\n return [transaction, elevatedPayloads]\n }\n return undefined\n}\n\nexport const hydrateElevatedTransaction = async (\n context: ChainStoreRead,\n hash: Hash,\n): Promise<SignedHydratedTransaction> => {\n return assertEx(await tryHydrateElevatedTransaction(context, hash), () => 'Hydration failed')\n}\n","import { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { HydratedTransaction } from '@xyo-network/xl1-protocol'\n\n/** The number of bytes that a transaction and its payloads will take up in a block */\nexport function transactionBlockByteCount([transaction, payloads]: HydratedTransaction): number {\n const cleanTransaction = PayloadBuilder.omitStorageMeta(transaction)\n const transactionBytes = JSON.stringify(cleanTransaction).length\n const cleanPayloads = PayloadBuilder.omitStorageMeta(payloads)\n return cleanPayloads.reduce((acc: number, payload) => acc + JSON.stringify(payload).length, 0) + transactionBytes\n}\n","import { asHash, type Hash } from '@xylabs/sdk-js'\nimport type { Payload, WithHashMeta } from '@xyo-network/payload-model'\nimport type { HydratedTransactionWithHashMeta, TransactionBoundWitness } from '@xyo-network/xl1-protocol'\n\nimport { crackOperations } from './transactionOperations.ts'\n\nexport function transactionElevatedPayloadHashes(transaction: TransactionBoundWitness): Hash[] {\n const elevateOperations = crackOperations(transaction.script ?? []).filter(op => op[0] === 'elevate')\n return elevateOperations.map(op => asHash(op[1][0], true))\n}\n\nexport function transactionElevatedPayloads([transaction, payloads]: HydratedTransactionWithHashMeta): WithHashMeta<Payload>[] {\n const hashes = transactionElevatedPayloadHashes(transaction)\n const elevatedPayloads = payloads.filter(payload => hashes.includes(payload._hash))\n return elevatedPayloads\n}\n","export function crackOperation(operation: string): [string, string[]] {\n const parts = operation.split('|')\n if (parts.length < 2) {\n throw new Error(`Invalid operation format: ${operation}`)\n }\n return [parts[0], parts.slice(1)]\n}\n\nexport function crackOperations(operations: string[]): [string, string[]][] {\n return operations.map(op => crackOperation(op))\n}\n","import type { HydratedTransactionWithHashMeta } from '@xyo-network/xl1-protocol'\nimport { AttoXL1, TransactionGasCosts } from '@xyo-network/xl1-protocol'\n\nimport { transactionBlockByteCount } from './transactionBlockByteCount.ts'\nimport { transactionElevatedPayloads } from './transactionElevatedPayloads.ts'\n\n/** The required gas for the byte storage on the block chain for a transaction */\nexport function transactionBytesRequiredGas([transaction, payloads]: HydratedTransactionWithHashMeta): AttoXL1 {\n const transactionBlockBytes = transactionBlockByteCount([transaction, payloads])\n return AttoXL1(TransactionGasCosts.characterStorage * BigInt(transactionBlockBytes))\n}\n\nexport function transactionRequiredGas(hydratedTransaction: HydratedTransactionWithHashMeta): AttoXL1 {\n const elevatedPayloads = transactionElevatedPayloads(hydratedTransaction)\n const hashes = elevatedPayloads.length + 1 /* for transaction itself */\n const signatures = hydratedTransaction[0].addresses.length\n return AttoXL1(transactionBytesRequiredGas(hydratedTransaction)\n + TransactionGasCosts.hashValidation * BigInt(hashes)\n + TransactionGasCosts.signatureValidation * BigInt(signatures)\n + TransactionGasCosts.payloadValidation * BigInt(elevatedPayloads.length))\n}\n","import { asHash, type Hash } from '@xylabs/sdk-js'\nimport { assertEx, filterAs } from '@xylabs/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { AllowedBlockPayload, HydratedTransactionWithHashMeta } from '@xyo-network/xl1-protocol'\nimport { isAllowedBlockPayloadWithHashMeta } from '@xyo-network/xl1-protocol'\n\nexport const tryExtractElevatedHashesFromScript = (strings: string[]): Hash[] => {\n const hashes = strings\n .filter(str => str.startsWith('elevate|'))\n .map(str => str.split('|')[1])\n return filterAs(hashes, h => asHash(h))\n}\n\nexport const extractElevatedHashesFromScript = (strings: string[]): Hash[] => {\n const hashes = strings\n .filter(str => str.startsWith('elevate|'))\n .map(str => str.split('|')[1])\n const filtered = filterAs(hashes, h => asHash(h))\n assertEx(filtered.length === hashes.length, () => 'Invalid elevated hashes')\n return filtered\n}\n\nexport const tryExtractElevatedHashes = (tx: HydratedTransactionWithHashMeta): WithStorageMeta<AllowedBlockPayload>[] => {\n const [bw, payloads] = tx\n const { script } = bw\n const hashes = script ? tryExtractElevatedHashesFromScript(script) : []\n return payloads\n .filter(p => hashes.includes(p._hash))\n .filter(isAllowedBlockPayloadWithHashMeta)\n}\n\nexport const extractElevatedHashes = (tx: HydratedTransactionWithHashMeta): WithStorageMeta<AllowedBlockPayload>[] => {\n const [bw, payloads] = tx\n const { script } = bw\n const hashes = script ? tryExtractElevatedHashesFromScript(script) : []\n const filtered = payloads\n .filter(p => hashes.includes(p._hash))\n .filter(isAllowedBlockPayloadWithHashMeta)\n assertEx(filtered.length === hashes.length, () => 'Invalid elevated hashes')\n return filtered\n}\n","import {\n assertEx, hexFromArrayBuffer, toArrayBuffer,\n} from '@xylabs/sdk-js'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type { Signed } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { TransactionBoundWitness, UnsignedTransactionBoundWitness } from '@xyo-network/xl1-protocol'\n\n/**\n * Signs an unsigned transaction with the provided account.\n * @param tx The transaction to sign\n * @param account The account to sign the transaction with\n * @returns The signed transaction\n */\nexport async function signTransaction(tx: UnsignedTransactionBoundWitness, account: AccountInstance) {\n assertEx(tx.from === account.address, () => 'Signer address does not match transaction from address')\n // Clone tx to prevent modifying original\n const unsignedTx = structuredClone(tx)\n // Update dynamic fields based on account\n unsignedTx.addresses = [account.address]\n unsignedTx.previous_hashes = [account.previousHash ?? null]\n // Calculate tx hash and sign it\n const hash = await PayloadBuilder.dataHash(unsignedTx)\n const hashBytes = toArrayBuffer(hash)\n const [signature] = await account.sign(hashBytes)\n // Append the signatures to the transaction\n const result: Signed<TransactionBoundWitness> = {\n ...unsignedTx,\n $signatures: [hexFromArrayBuffer(signature)],\n }\n // Return the signed transaction\n return result\n}\n","import { assertEx, isString } from '@xylabs/sdk-js'\n\nexport type ProviderMoniker = string\n\nexport const asProviderMoniker = <T>(value: T) => {\n const moniker = isString(value) ? (value as unknown as ProviderMoniker) : undefined\n return assertEx(moniker)\n}\n\nexport interface Provider<T extends ProviderMoniker> {\n moniker: T\n}\n\nexport const DefaultProviderMoniker = 'Provider' as const\nexport type DefaultProviderMoniker = typeof DefaultProviderMoniker\n","import { type Hash, HashZod } from '@xylabs/sdk-js'\nimport { type XL1BlockRange, XL1BlockRangeZod } from '@xyo-network/xl1-protocol'\nimport z from 'zod'\n\nexport type Qualified<T> = [T, XL1BlockRange, Hash]\n\nexport const QualifiedZod = <T>(zodType: z.ZodType<T>) => {\n return z.tuple([zodType, XL1BlockRangeZod, HashZod])\n}\n","import type { XL1BlockRange } from '@xyo-network/xl1-protocol'\nimport { asXL1BlockNumber, stepSize } from '@xyo-network/xl1-protocol'\n\nexport function calculateFramesFromRange(range: XL1BlockRange, step: number): [\n // ranges of fitted frames\n XL1BlockRange[],\n // ranges of remaining blocks\n XL1BlockRange[]] {\n const size = stepSize(step)\n let start = (Math.trunc(range[0] / size)) * size\n const fitted: XL1BlockRange[] = []\n const remaining: XL1BlockRange[] = []\n\n // if the start is not aligned with the range, add a remaining block\n if (start !== range[0]) {\n start += size\n remaining.push([range[0], asXL1BlockNumber(Math.min(start - 1, range[1]), true)])\n }\n\n for (let i = start; i <= range[1]; i += size) {\n if ((i + size - 1) <= range[1]) {\n fitted.push([asXL1BlockNumber(i, { name: 'calculateFramesFromRange A' }),\n asXL1BlockNumber(Math.min(i + size - 1, range[1]), { name: 'calculateFramesFromRange B' })])\n } else {\n remaining.push([asXL1BlockNumber(i, { name: 'calculateFramesFromRange C' }), range[1]])\n }\n }\n return [fitted, remaining]\n}\n","import type { XL1BlockRange } from '@xyo-network/xl1-protocol'\nimport { StepSizes } from '@xyo-network/xl1-protocol'\n\nimport { calculateFramesFromRange } from './calculateFramesFromRange.ts'\n\nexport function deepCalculateFramesFromRange(range: XL1BlockRange, startingStep = StepSizes.length - 1): XL1BlockRange[] {\n const fitted: XL1BlockRange[] = []\n let remaining: XL1BlockRange[] = [range]\n\n for (let step = startingStep; step >= 0; step--) {\n const newRemaining: XL1BlockRange[] = []\n for (const range of remaining) {\n const [newFittedFrames, newRemainingFrames] = calculateFramesFromRange(range, step)\n fitted.push(...newFittedFrames)\n newRemaining.push(...newRemainingFrames)\n }\n remaining = newRemaining\n }\n\n for (const range of remaining) {\n for (let i = range[0]; i <= range[1]; i++) {\n fitted.push([i, i]) // Add individual frames for remaining ranges\n }\n }\n\n return fitted.toSorted((a, b) => a[0] - b[0]) // Sort by start of range\n}\n","import { type Hash } from '@xylabs/sdk-js'\nimport type { XL1BlockNumber } from '@xyo-network/xl1-protocol'\n\nimport type { ChainContextRead } from '../../model/index.ts'\nimport { blockFromBlockNumber } from './blockFromBlockNumber.ts'\n\nexport async function hashFromBlockNumber(context: ChainContextRead, blockNumber: XL1BlockNumber): Promise<Hash> {\n return (await blockFromBlockNumber(context, blockNumber))._hash\n}\n","import type {\n ReadArchivist, ReadWriteArchivist, WriteArchivist,\n} from '@xyo-network/archivist-model'\n\nexport function isReadArchivist(value: unknown): value is ReadArchivist {\n return (value as ReadArchivist).get !== undefined && (value as ReadArchivist).next !== undefined\n}\n\nexport function isWriteArchivist(value: unknown): value is WriteArchivist {\n return (value as WriteArchivist).insert !== undefined\n}\n\nexport function isReadWriteArchivist(value: unknown): value is ReadWriteArchivist {\n return isReadArchivist(value) && isWriteArchivist(value)\n}\n","import type { StepIdentity, StepIdentityString } from '@xyo-network/xl1-protocol'\n\nexport function toStepIdentityString({ block, step }: StepIdentity): StepIdentityString {\n return `${block}|${step}` as StepIdentityString\n}\n","import {\n AddressZod, HexZod, toAddress, toHex,\n} from '@xylabs/hex'\nimport type { ChainId } from '@xyo-network/xl1-protocol'\nimport { AttoXL1ConvertFactor, XL1 } from '@xyo-network/xl1-protocol'\nimport { globalRegistry } from 'zod'\nimport * as z from 'zod'\n\nimport { MnemonicStringZod } from '../validation/index.ts'\n\nconst DEFAULT_FIXED_FEE = toHex(XL1(1n) * AttoXL1ConvertFactor.xl1)\nconst DEFAULT_MIN_BRIDGE_AMOUNT = toHex(XL1(10n) * AttoXL1ConvertFactor.xl1)\nconst DEFAULT_MAX_BRIDGE_AMOUNT = toHex(XL1(100_000n) * AttoXL1ConvertFactor.xl1)\nconst DEFAULT_HARDHAT_CHAIN_ID: ChainId = toHex('7A69')\nconst DEFAULT_HARDHAT_TOKEN_CONTRACT = toAddress('5FbDB2315678afecb367f032d93F642f64180aa3')\nconst DEFAULT_HARDHAT_BRIDGE_CONTRACT = toAddress('2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6')\n\nexport const BasisPointsZod = z.coerce.number().int().nonnegative().max(10_000)\nexport type BasisPoints = z.infer<typeof BasisPointsZod>\n\nexport const BridgeConfigZod = z.object({\n chainRpcApiUrl: z.string().default('http://localhost:8080/rpc').register(globalRegistry, {\n default: 'http://localhost:8080/rpc',\n description: 'URL for the Chain RPC API',\n title: 'bridge.chainRpcApiUrl',\n type: 'string',\n }),\n escrowAddress: AddressZod.optional().register(globalRegistry, {\n description: 'Address to which bridge escrow will be sent',\n title: 'bridge.escrowAddress',\n type: 'string',\n }),\n feesAddress: AddressZod.optional().register(globalRegistry, {\n description: 'Address to which bridge fees will be sent',\n title: 'bridge.feesAddress',\n type: 'string',\n }),\n feeFixed: HexZod.default(DEFAULT_FIXED_FEE).register(globalRegistry, {\n default: DEFAULT_FIXED_FEE,\n description: 'Fixed fee (in AttoXL1) applied to bridge transfers',\n title: 'bridge.feeFixed',\n type: 'bigint',\n }),\n feeRateBasisPoints: BasisPointsZod.default(500).register(globalRegistry, {\n default: 500,\n description: 'Variable rate fee (in basis points where 1 bps = 0.01%) applied to bridge transfers',\n title: 'bridge.feeRateBasisPoints',\n type: 'number',\n }),\n host: z.string().default('localhost').register(globalRegistry, {\n default: 'localhost',\n description: 'Host for the Bridge',\n title: 'bridge.host',\n type: 'string',\n }),\n maxBridgeAmount: HexZod.default(DEFAULT_MAX_BRIDGE_AMOUNT).register(globalRegistry, {\n default: DEFAULT_MAX_BRIDGE_AMOUNT,\n description: 'Maximum amount allowed for a bridge transfer',\n title: 'bridge.maxBridgeAmount',\n type: 'string',\n }),\n minBridgeAmount: HexZod.default(DEFAULT_MIN_BRIDGE_AMOUNT).register(globalRegistry, {\n default: DEFAULT_MIN_BRIDGE_AMOUNT,\n description: 'Minimum amount required for a bridge transfer',\n title: 'bridge.minBridgeAmount',\n type: 'string',\n }),\n mnemonic: MnemonicStringZod.optional().register(globalRegistry, {\n description: 'Mnemonic for the Bridge wallet',\n title: 'bridge.mnemonic',\n type: 'string',\n }),\n port: z.coerce.number().default(8081).register(globalRegistry, {\n default: 8081,\n description: 'Port for the Bridge',\n title: 'bridge.port',\n type: 'number',\n }),\n remoteBridgeContractAddress: AddressZod.default(DEFAULT_HARDHAT_BRIDGE_CONTRACT).register(globalRegistry, {\n default: DEFAULT_HARDHAT_BRIDGE_CONTRACT,\n description: 'Hex representation of remote token address used for bridging',\n title: 'bridge.remoteBridgeContractAddress',\n type: 'string',\n }),\n remoteChainId: HexZod.default(DEFAULT_HARDHAT_CHAIN_ID).register(globalRegistry, {\n default: DEFAULT_HARDHAT_CHAIN_ID,\n description: 'Remote chain ID',\n title: 'bridge.remoteChainId',\n type: 'string',\n }),\n remoteTokenAddress: HexZod.default(DEFAULT_HARDHAT_TOKEN_CONTRACT).register(globalRegistry, {\n default: DEFAULT_HARDHAT_TOKEN_CONTRACT,\n description: 'Hex representation of remote token address used for bridging',\n title: 'bridge.remoteTokenAddress',\n type: 'string',\n }),\n xl1ChainId: HexZod.optional().register(globalRegistry, {\n description: 'XL1 chain id used for bridging',\n title: 'bridge.xl1ChainId',\n type: 'string',\n }),\n xl1TokenAddress: HexZod.optional().register(globalRegistry, {\n description: 'XL1 token address used for bridging',\n title: 'bridge.xl1TokenAddress',\n type: 'string',\n }),\n})\n\nexport type BridgeConfig = z.infer<typeof BridgeConfigZod>\n\nexport const BridgeSettingsZod = BridgeConfigZod.pick({\n feeFixed: true,\n feeRateBasisPoints: true,\n feesAddress: true,\n escrowAddress: true,\n maxBridgeAmount: true,\n minBridgeAmount: true,\n remoteChainId: true,\n remoteTokenAddress: true,\n xl1TokenAddress: true,\n xl1ChainId: true,\n}).required()\n\nexport type BridgeSettings = z.infer<typeof BridgeSettingsZod>\n","import type { Hash } from '@xylabs/sdk-js'\nimport type {\n BlockBoundWitness,\n ChainId,\n HydratedBlock,\n} from '@xyo-network/xl1-protocol'\nimport { isValidationError, ValidationError } from '@xyo-network/xl1-protocol'\n\nexport class BlockValidationError extends ValidationError<BlockBoundWitness> {}\n\nexport const isBlockValidationError = (\n error: unknown,\n): error is BlockValidationError => {\n if (!isValidationError(error)) return false\n return (\n error.name === BlockValidationError.constructor.name\n )\n}\n\nexport class HydratedBlockValidationError extends ValidationError<HydratedBlock> {}\n\nexport const isHydratedBlockValidationError = (\n error: unknown,\n): error is HydratedBlockValidationError => {\n if (!isValidationError(error)) return false\n return (\n error.name === HydratedBlockValidationError.constructor.name\n )\n}\n\nexport class HydratedBlockStateValidationError extends ValidationError<HydratedBlock> {\n chainId: ChainId\n constructor(hash: Hash, chainId: ChainId, value: HydratedBlock, message?: string, cause?: unknown) {\n super(hash, value, message, cause)\n this.chainId = chainId\n }\n}\n\nexport const isHydratedBlockStateValidationError = (\n error: unknown,\n): error is HydratedBlockStateValidationError => {\n if (!isValidationError(error)) return false\n return (\n error.name === HydratedBlockStateValidationError.constructor.name\n )\n}\n","export const isLocalhost = (hostname: string): boolean => {\n return (\n hostname === 'localhost'\n || hostname === '127.0.0.1'\n || hostname === '::1' // IPv6 localhost\n || hostname.endsWith('.localhost')\n )\n}\n","import { isLocalhost } from './isLocalhost.ts'\n\nexport const getUrl = (host: string, port: number): string => {\n const scheme = isLocalhost(host) ? 'http' : 'https'\n return `${scheme}://${host}:${port}`\n}\n","export const TODO = true\n","import * as z from 'zod'\n\n/**\n * Validates a single string containing a BIP-39 mnemonic.\n *\n * • Trims leading/trailing whitespace.\n * • Collapses any run of whitespace (spaces, tabs, new-lines) to a single space.\n * • Splits on spaces → array of words.\n * • Checks that the word-count is 12, 15, 18, 21, or 24.\n *\n */\nexport const MnemonicStringZod = z\n .string()\n .transform(s => s.trim().replaceAll(/\\s+/g, ' ')) // normalize spacing\n .refine(\n s => [12, 15, 18, 21, 24].includes(s.split(' ').length),\n { message: 'Mnemonic must contain 12, 15, 18, 21, or 24 words.' },\n ).describe('BIP-39 mnemonic string')\n\nexport type MnemonicString = z.infer<typeof MnemonicStringZod>\n","import * as z from 'zod'\n\nimport { ApiConfigZod } from './Api.ts'\nimport { BridgeConfigZod } from './Bridge.ts'\nimport { ChainConfigZod } from './Chain.ts'\nimport { EvmConfigZod } from './Evm.ts'\nimport { LogConfigZod } from './Log.ts'\nimport { MempoolConfigZod } from './Mempool.ts'\nimport { ProducerConfigZod } from './Producer.ts'\nimport { RewardRedemptionApiConfigZod } from './RewardRedemptionApi.ts'\nimport { ServicesConfigZod } from './Services.ts'\nimport { StorageConfigZod } from './storage/index.ts'\nimport { TelemetryConfigZod } from './Telemetry.ts'\nimport { ValidationConfigZod } from './Validation.ts'\n\nexport const Xl1CommonConfigSchema = z.object({ ...LogConfigZod.shape }).describe('XL1 common configuration options')\n\nexport const ConfigZod = z.object({\n ...Xl1CommonConfigSchema.shape,\n api: ApiConfigZod.default(ApiConfigZod.parse({})).describe('Configuration for the API node'),\n bridge: BridgeConfigZod.default(BridgeConfigZod.parse({})).describe('Configuration for the Bridge node'),\n chain: ChainConfigZod.default(ChainConfigZod.parse({})).describe('Configuration for the chain'),\n evm: EvmConfigZod.default(EvmConfigZod.parse({})).describe('Configuration for EVM-backed services'),\n mempool: MempoolConfigZod.default(MempoolConfigZod.parse({})).describe('Configuration for the mempool'),\n producer: ProducerConfigZod.default(ProducerConfigZod.parse({})).describe('Configuration for the producer'),\n rewardRedemptionApi: RewardRedemptionApiConfigZod.default(RewardRedemptionApiConfigZod.parse({})).describe('Configuration for the rewards redemption API'),\n services: ServicesConfigZod.default(ServicesConfigZod.parse({})).describe('Configuration for the global services'),\n storage: StorageConfigZod.default(StorageConfigZod.parse({})).describe('Configuration for the storage'),\n telemetry: TelemetryConfigZod.default(TelemetryConfigZod.parse({})).describe('Configuration for telemetry'),\n validation: ValidationConfigZod.default(ValidationConfigZod.parse({})).describe('Configuration for validation'),\n})\n\nexport type Config = z.infer<typeof ConfigZod>\n\nexport const getDefaultConfig = (): Config => ConfigZod.parse({})\n","import { globalRegistry } from 'zod'\nimport * as z from 'zod'\n\nimport { MnemonicStringZod } from '../validation/index.ts'\n\nexport const ApiConfigZod = z.object({\n host: z.string().default('localhost').register(globalRegistry, {\n default: 'localhost',\n description: 'Host for the API',\n title: 'api.host',\n type: 'string',\n }),\n initRewardsCache: z.union([z.number(), z.string()]).transform(v => v !== '0' && v !== 'false').default(true).register(globalRegistry, {\n description: 'Whether to initialize the rewards cache on startup',\n title: 'api.initRewardsCache',\n type: 'boolean',\n }),\n mnemonic: MnemonicStringZod.optional().register(globalRegistry, {\n description: 'Mnemonic for the API wallet',\n title: 'api.mnemonic',\n type: 'string',\n }),\n port: z.coerce.number().default(8080).register(globalRegistry, {\n default: 8080,\n description: 'Port for the API',\n title: 'api.port',\n type: 'number',\n }),\n})\n\nexport type ApiConfig = z.infer<typeof ApiConfigZod>\n","import { AddressZod } from '@xylabs/sdk-js'\nimport { globalRegistry } from 'zod'\nimport * as z from 'zod'\n\nexport const ChainConfigZod = z.object({\n id: z.string().optional()\n .register(globalRegistry, {\n description:\n 'The unique identifier for the chain. Should be the staking contract address for contract-backed chains.',\n title: 'chain.id',\n type: 'string',\n }),\n genesisRewardAddress: AddressZod.optional()\n .register(globalRegistry, {\n description:\n 'Address to send the initial genesis rewards to, if a new chain is being created.',\n title: 'chain.genesisRewardAddress',\n type: 'Address',\n }),\n})\n\nexport type ChainConfig = z.infer<typeof ChainConfigZod>\n","import { globalRegistry } from 'zod'\nimport * as z from 'zod'\n\nexport const EvmInfuraConfigZod = z.object({\n projectId: z.string().optional().register(globalRegistry, {\n description: 'Infura project ID',\n title: 'evm.infura.projectId',\n type: 'string',\n }),\n projectSecret: z.string().optional().register(globalRegistry, {\n description: 'Infura project secret',\n title: 'evm.infura.projectSecret',\n type: 'string',\n }),\n})\n\nexport const EvmJsonRpcConfigZod = z.object({\n url: z.url().optional().register(globalRegistry, {\n description: 'JSON-RPC URL',\n title: 'evm.jsonRpc.url',\n type: 'string',\n }),\n})\n\nexport const EvmConfigZod = z.object({\n chainId: z.string().optional().register(globalRegistry, {\n description: 'EVM chain ID',\n title: 'evm.chainId',\n type: 'string',\n }),\n infura: EvmInfuraConfigZod.optional().describe('Infura Provider configuration'),\n jsonRpc: EvmJsonRpcConfigZod.optional().describe('JSON-RPC Provider configuration'),\n})\n\nexport type EvmConfig = z.infer<typeof EvmConfigZod>\n","import type { LogLevelKey } from '@xylabs/sdk-js'\nimport { LogLevel } from '@xylabs/sdk-js'\nimport { globalRegistry } from 'zod'\nimport * as z from 'zod'\nconst LogLevels = Object.keys(LogLevel) as [LogLevelKey, ...LogLevelKey[]]\n\nexport const LogConfigZod = z.object({\n logLevel: z.enum(LogLevels).default('info').register(globalRegistry, {\n choices: LogLevels,\n default: 'info',\n description: 'Desired process verbosity',\n title: 'logLevel',\n type: 'string',\n }),\n silent: z.boolean().default(false).register(globalRegistry, {\n default: false,\n description: 'Whether to run in silent mode',\n title: 'silent',\n type: 'boolean',\n }),\n})\n\nexport type LogConfig = z.infer<typeof LogConfigZod>\n","import { globalRegistry } from 'zod'\nimport * as z from 'zod'\n\nimport { MnemonicStringZod } from '../validation/index.ts'\n\nexport const MempoolConfigZod = z.object({\n enabled: z.string().default('false').transform((val, ctx) => {\n const normalized = val.toLowerCase().trim()\n if (['true', '1', 'yes', 'on'].includes(normalized)) return true\n if (['false', '0', 'no', 'off'].includes(normalized)) return false\n ctx.addIssue({\n code: 'invalid_type',\n expected: 'boolean',\n message: `Invalid boolean value: \"${val}\". Use true/false, 1/0, yes/no.`,\n })\n return z.NEVER\n }).register(globalRegistry, {\n default: 'false',\n description: 'Enable the Mempool',\n title: 'mempool.enabled',\n type: 'boolean',\n }),\n host: z.string().default('localhost').register(globalRegistry, {\n default: 'localhost',\n description: 'Host for the Mempool',\n title: 'mempool.host',\n type: 'string',\n }),\n mnemonic: MnemonicStringZod.optional().register(globalRegistry, {\n description: 'Mnemonic for the Mempool wallet',\n title: 'mempool.mnemonic',\n type: 'string',\n }),\n port: z.coerce.number().default(8083).register(globalRegistry, {\n default: 8083,\n description: 'Port for the Mempool',\n title: 'mempool.port',\n type: 'number',\n }),\n})\n\nexport type MempoolConfig = z.infer<typeof MempoolConfigZod>\n","import { AddressZod, asAddress } from '@xylabs/sdk-js'\nimport { globalRegistry } from 'zod'\nimport * as z from 'zod'\n\nimport { MnemonicStringZod } from '../validation/index.ts'\n\nexport const ProducerConfigZod = z.object({\n allowlist: z.preprocess((val) => {\n if (typeof val === 'string') {\n return val.split(',').map(s => asAddress(s.trim()))\n }\n return val\n }, z.array(AddressZod).optional().register(globalRegistry, {\n description: 'List of allowed producer addresses, if undefined anyone can participate',\n title: 'allowlist',\n type: 'array',\n })),\n\n disableIntentRedeclaration: z.boolean().optional().register(globalRegistry, {\n description: 'Should the producer skip redeclaring their intent to continue producing blocks',\n title: 'producer.disableIntentRedeclaration',\n type: 'boolean',\n }),\n // TODO: Port schema\n healthCheckPort: z.coerce.number().optional().register(globalRegistry, {\n description: 'Port for the Producer health checks',\n title: 'producer.healthCheckPort',\n type: 'number',\n }),\n heartbeatInterval: z.coerce.number().default(3_600_000).register(globalRegistry, {\n description: 'The number of milliseconds between heartbeats if no blocks are produced',\n title: 'producer.heartbeatInterval',\n type: 'number',\n }),\n // TODO: BigInt schema\n minStake: z.coerce.number().default(1).register(globalRegistry, {\n description: 'Minimum stake required to be a Producer',\n title: 'producer.minStake',\n type: 'number',\n }),\n mnemonic: MnemonicStringZod.optional().register(globalRegistry, {\n description: 'Mnemonic for the Producer wallet',\n title: 'producer.mnemonic',\n type: 'string',\n }),\n // TODO: Port schema\n port: z.coerce.number().default(8081).register(globalRegistry, {\n default: 8081,\n description: 'Port for the Producer',\n title: 'producer.port',\n type: 'number',\n }),\n // TODO: Address schema\n rewardAddress: z.string().optional().register(globalRegistry, {\n description: 'Address to receive block rewards',\n title: 'producer.rewardAddress',\n type: 'string',\n }),\n})\n\nexport type ProducerConfig = z.infer<typeof ProducerConfigZod>\n","import { globalRegistry } from 'zod'\nimport * as z from 'zod'\n\nimport { MnemonicStringZod } from '../validation/index.ts'\n\nexport const RewardRedemptionApiConfigZod = z.object({\n chainRpcApiUrl: z.string().default('http://localhost:8080/rpc').register(globalRegistry, {\n default: 'http://localhost:8080/rpc',\n description: 'URL for the Chain RPC API',\n title: 'rewardRedemptionApi.chainRpcApiUrl',\n type: 'string',\n }),\n host: z.string().default('localhost').register(globalRegistry, {\n default: 'localhost',\n description: 'Host for the Redemption API',\n title: 'rewardRedemptionApi.host',\n type: 'string',\n }),\n mnemonic: MnemonicStringZod.optional().register(globalRegistry, {\n description: 'Mnemonic for the Redemption API wallet',\n title: 'rewardRedemptionApi.mnemonic',\n type: 'string',\n }),\n port: z.coerce.number().default(8082).register(globalRegistry, {\n default: 8082,\n description: 'Port for the Redemption API',\n title: 'rewardRedemptionApi.port',\n type: 'number',\n }),\n})\n\nexport type RewardRedemptionApiConfig = z.infer<typeof RewardRedemptionApiConfigZod>\n","import { globalRegistry } from 'zod'\nimport * as z from 'zod'\n\nexport const ServicesConfigZod = z.object({\n accountBalanceViewerEndpoint: z.string().optional().register(globalRegistry, {\n description: 'Endpoint of the API to use for instantiating an external AccountBalanceViewer',\n title: 'services.accountBalanceViewerEndpoint',\n type: 'string',\n }),\n apiEndpoint: z.string().optional().register(globalRegistry, {\n description: 'Endpoint of the API to use for instantiating an external Viewers',\n title: 'services.apiEndpoint',\n type: 'string',\n }),\n})\n\nexport type ServicesConfig = z.infer<typeof ServicesConfigZod>\n","import { isDefined, isUndefined } from '@xylabs/sdk-js'\nimport { globalRegistry } from 'zod'\nimport * as z from 'zod'\n\n/**\n * Checks if the provided MongoDB configuration contains all necessary fields\n * for establishing a connection.\n * @param config MongoDB configuration object\n * @returns True if the configuration contains all necessary fields for\n * establishing a connection\n */\nexport const hasMongoConfig = (config?: MongoConfig): config is Required<MongoConfig> => {\n if (isUndefined(config)) return false\n return (\n isDefined(config.connectionString)\n && isDefined(config.database)\n && isDefined(config.domain)\n && isDefined(config.password)\n && isDefined(config.username)\n )\n}\n\nexport const MongoConfigZod = z.object({\n // TODO: Create from other arguments\n connectionString: z.string().nonempty().optional().register(globalRegistry, {\n description: 'MongoDB connection string',\n title: 'storage.mongo.connectionString',\n type: 'string',\n }),\n database: z.string().nonempty().optional().register(globalRegistry, {\n description: 'MongoDB database name',\n title: 'storage.mongo.database',\n type: 'string',\n }),\n domain: z.string().nonempty().optional().register(globalRegistry, {\n description: 'MongoDB domain',\n title: 'storage.mongo.domain',\n type: 'string',\n }),\n password: z.string().nonempty().optional().register(globalRegistry, {\n description: 'MongoDB password',\n title: 'storage.mongo.password',\n type: 'string',\n }),\n username: z.string().nonempty().optional().register(globalRegistry, {\n description: 'MongoDB username',\n title: 'storage.mongo.username',\n type: 'string',\n }),\n})\n\nexport type MongoConfig = z.infer<typeof MongoConfigZod>\n","import { globalRegistry } from 'zod'\nimport * as z from 'zod'\n\nimport { MongoConfigZod } from './driver/index.ts'\n\nexport const StorageConfigZod = z.object({\n mongo: MongoConfigZod.optional().describe('Configuration for the MongoD storage driver'),\n root: z.string().optional().register(globalRegistry, {\n description: 'Root directory for local storage',\n title: 'storage.root',\n type: 'string',\n }),\n}).describe('Storage configuration options')\n\nexport type StorageConfig = z.infer<typeof StorageConfigZod>\n","import { globalRegistry } from 'zod'\nimport * as z from 'zod'\n\nexport const MetricsScrapeConfigZod = z.object({\n path: z.string().default('/metrics').register(globalRegistry, {\n default: '/metrics',\n description: 'Path for the metrics scrape endpoint',\n title: 'telemetry.metrics.scrape.path',\n type: 'string',\n }),\n port: z.coerce.number().default(9464).register(globalRegistry, {\n default: 9464,\n description: 'Port for the metrics scrape endpoint',\n title: 'telemetry.metrics.scrape.port',\n type: 'number',\n }),\n}).describe('Metrics scrape configuration')\n\nexport const MetricsConfigZod = z.object({ scrape: MetricsScrapeConfigZod }).describe('Metrics configuration options')\n\nexport const OpenTelemetryConfigZod = z.object({\n // OpenTelemetry options\n otlpEndpoint: z.url().optional().register(globalRegistry, {\n description: 'OTLP endpoint for exporting telemetry data',\n title: 'telemetry.otel.otlpEndpoint',\n type: 'string',\n }),\n})\n\nexport const TelemetryConfigZod = z.object({\n // Metrics configuration\n metrics: MetricsConfigZod.optional().describe('Metrics configuration'),\n // OpenTelemetry configuration\n otel: OpenTelemetryConfigZod.optional().describe('OpenTelemetry configuration'),\n}).describe('Telemetry configuration options')\n\nexport type TelemetryConfig = z.infer<typeof TelemetryConfigZod>\n","import { AddressZod, asAddress } from '@xylabs/sdk-js'\nimport { globalRegistry } from 'zod'\nimport * as z from 'zod'\n\nexport const ValidationConfigZod = z.object({\n allowedRewardRedeemers: z.preprocess((val) => {\n if (typeof val === 'string') {\n return val.split(',').map(s => asAddress(s.trim()))\n }\n return val\n }, z.array(AddressZod).optional().register(globalRegistry, {\n description: 'List of allowed reward redeemer addresses, if undefined anyone can participate',\n title: 'allowedRewardRedeemers',\n type: 'array',\n })),\n allowedRewardEscrowAccountSigners: z.preprocess((val) => {\n if (typeof val === 'string') {\n return val.split(',').map(s => asAddress(s.trim()))\n }\n return val\n }, z.array(AddressZod).optional().register(globalRegistry, {\n description: 'List of allowed reward escrow account signer addresses, if undefined anyone can participate',\n title: 'allowedRewardEscrowAccountSigners',\n type: 'array',\n })),\n})\n\nexport type ValidationConfig = z.infer<typeof ValidationConfigZod>\n","import * as z from 'zod'\n\nconst DescriptionSchema = z.string()\nconst TitleSchema = z.string()\n\nexport const JSONSchemaMetaSchema = z\n .object({\n id: z.string().optional(),\n title: TitleSchema.optional(),\n description: DescriptionSchema.optional(),\n deprecated: z.boolean().optional(),\n })\n .catchall(z.unknown()) // allow arbitrary extra keys\n\nexport const GlobalMetaSchema = JSONSchemaMetaSchema.extend({})\n\nconst ChoicesSchema = z\n .array(z.union([z.string(), z.number(), z.literal(true), z.undefined()]))\n .readonly()\n\nexport const UsageMetaSchema = GlobalMetaSchema.extend({\n choices: ChoicesSchema.optional(),\n default: z.unknown().optional(),\n description: DescriptionSchema,\n group: z.string().optional(),\n hidden: z.boolean().optional(),\n title: TitleSchema,\n type: z.union([\n z.literal('array'),\n z.literal('count'),\n z.literal('boolean'),\n z.literal('number'),\n z.literal('string'),\n ]),\n})\n\nexport type UsageMeta = z.infer<typeof UsageMetaSchema>\n\nexport function isUsageMeta(v: unknown): v is UsageMeta {\n return UsageMetaSchema.safeParse(v).success\n}\n","export const XL1_NETWORK_STAKING_GENESIS_PERIOD_END_EPOCH = 1_760_572_800 as const\nexport const XL1_NETWORK_STAKING_GENESIS_PERIOD_END_XL1_BLOCK = 107_496 as const\n","import { AbstractCreatable } from '@xylabs/sdk-js'\n\nimport type {\n CreatableProvider,\n CreatableProviderEventData, CreatableProviderFactory, CreatableProviderInstance, CreatableProviderParams,\n} from './CreatableProvider.ts'\nimport { ProviderFactory } from './ProviderFactory.ts'\n\nexport abstract class AbstractCreatableProvider<TParams extends CreatableProviderParams = CreatableProviderParams,\n TEventData extends CreatableProviderEventData = CreatableProviderEventData> extends AbstractCreatable<TParams, TEventData> {\n static factory<TModule extends CreatableProviderInstance>(\n this: CreatableProvider<TModule>,\n params?: Partial<TModule['params']>,\n ): CreatableProviderFactory<TModule> {\n return ProviderFactory.withParams<TModule>(this, params)\n }\n}\n","import type { Labels, WithOptionalLabels } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\n\nimport type {\n CreatableProvider, CreatableProviderFactory, CreatableProviderInstance,\n} from './CreatableProvider.ts'\n\nexport class ProviderFactory<TProvider extends CreatableProviderInstance> implements CreatableProviderFactory<TProvider> {\n creatableProvider: CreatableProvider<TProvider>\n\n defaultMoniker: CreatableProvider<TProvider>['monikers'][number]\n\n defaultParams?: Partial<TProvider['params']>\n\n labels?: Labels\n\n monikers: CreatableProvider<TProvider>['monikers']\n\n constructor(\n creatableProvider: CreatableProvider<TProvider>,\n params?: Partial<TProvider['params']>,\n labels: Labels = {},\n ) {\n this.creatableProvider = creatableProvider\n this.defaultParams = params\n this.defaultMoniker = creatableProvider.defaultMoniker\n this.monikers = creatableProvider.monikers\n assertEx(this.monikers.includes(this.defaultMoniker), () => 'defaultMoniker must be in monikers')\n this.labels = Object.assign({}, (creatableProvider as WithOptionalLabels).labels ?? {}, labels ?? {})\n }\n\n static withParams<T extends CreatableProviderInstance>(\n creatableProvider: CreatableProvider<T>,\n params?: Partial<T['params']>,\n labels: Labels = {},\n ) {\n return new ProviderFactory<T>(creatableProvider, params, labels)\n }\n\n create(this: CreatableProviderFactory<TProvider>, params?: Partial<TProvider['params']>): Promise<TProvider> {\n const mergedParams: TProvider['params'] = {\n ...this.defaultParams,\n ...params,\n config: {\n ...this.defaultParams?.config,\n ...params?.config,\n },\n } as TProvider['params']\n return this.creatableProvider.create<TProvider>(mergedParams)\n }\n\n factory<T extends CreatableProviderInstance>(\n this: CreatableProviderFactory<T>,\n params?: Partial<T['params']>,\n labels: Labels = {},\n ): CreatableProviderFactory<T> {\n return new ProviderFactory<T>(this.creatableProvider, params, labels)\n }\n}\n","import type { EventData } from '@xylabs/events'\nimport type {\n Creatable, CreatableInstance, CreatableParams, EmptyObject,\n Labels, WithOptionalLabels,\n} from '@xylabs/sdk-js'\n\nimport type { ProviderMoniker } from '../model/index.ts'\nimport type { LabeledCreatableProviderFactory } from './LabeledCreatableProviderFactory.ts'\nimport type { ProviderFactoryLocatorInstance } from './ProviderFactoryLocatorInstance.ts'\n\nexport interface CreatableProviderParams<TConfig extends EmptyObject = EmptyObject> extends CreatableParams {\n config?: TConfig\n locator?: ProviderFactoryLocatorInstance\n}\nexport interface CreatableProviderEventData extends EventData {}\n\nexport interface CreatableProviderInstance<TParams extends CreatableProviderParams = CreatableProviderParams,\n TEventData extends CreatableProviderEventData = CreatableProviderEventData>\n extends CreatableInstance<TParams, TEventData> {}\n\nexport interface CreatableProviderFactory<T extends CreatableProviderInstance = CreatableProviderInstance>\n extends Omit<CreatableProvider<T>, 'create' | 'createHandler' | 'paramsHandler'> {\n creatableProvider: CreatableProvider<T>\n defaultParams?: Partial<T['params']>\n\n labels?: Labels\n\n create(\n this: CreatableProviderFactory<T>,\n params?: Partial<T['params']>): Promise<T>\n\n}\n\nexport interface LabeledCreatableProvider<T extends CreatableProviderInstance = CreatableProviderInstance> extends CreatableProvider<T>, WithOptionalLabels {\n factory(params?: Partial<T['params']>): LabeledCreatableProviderFactory<T>\n}\n\nexport interface CreatableProvider<T extends CreatableProviderInstance = CreatableProviderInstance> extends Creatable<T> {\n defaultMoniker: ProviderMoniker\n monikers: ProviderMoniker[]\n factory(params?: Partial<T['params']>): CreatableProviderFactory<T>\n}\n\n/**\n * Class annotation to be used to decorate Providers which support\n * an asynchronous creation pattern\n * @returns The decorated Provider requiring it implement the members\n * of the CreatableProvider as statics properties/methods\n */\nexport function creatableProvider<TProvider extends CreatableProviderInstance = CreatableProviderInstance>() {\n return <U extends CreatableProvider<TProvider>>(constructor: U) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n constructor\n }\n}\n\n/**\n * Class annotation to be used to decorate Providers which support\n * an asynchronous creation pattern\n * @returns The decorated Provider requiring it implement the members\n * of the CreatableProvider as statics properties/methods\n */\nexport function labeledCreatableProvider<TProvider extends CreatableProviderInstance = CreatableProviderInstance>() {\n return <U extends LabeledCreatableProvider<TProvider>>(constructor: U) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n constructor\n }\n}\n","import type { Labels } from '@xylabs/sdk-js'\nimport { isTruthy } from '@xylabs/sdk-js'\n\nimport type { ProviderMoniker } from '../model/index.ts'\nimport type { CreatableProviderFactory, CreatableProviderInstance } from './CreatableProvider.ts'\nimport type { LabeledCreatableProviderFactory } from './LabeledCreatableProviderFactory.ts'\n\nexport interface CreatableProviderRegistry {\n [key: string]: (CreatableProviderFactory | LabeledCreatableProviderFactory)[] | undefined\n}\n\nconst buildProviderFactory = <TProvider extends CreatableProviderInstance>(\n provider: CreatableProviderFactory<TProvider>,\n labels?: Labels,\n): LabeledCreatableProviderFactory<TProvider> => {\n const factory: LabeledCreatableProviderFactory<TProvider> = {\n // Destructure instance properties\n ...provider,\n\n monikers: provider.monikers,\n // Copy static methods\n create: provider.create.bind(provider) as LabeledCreatableProviderFactory<TProvider>['create'],\n\n // Merge module & supplied labels\n labels: { ...(provider as LabeledCreatableProviderFactory).labels, ...labels },\n }\n return factory\n}\n\nexport const registerCreatableProviderFactory = <TProvider extends CreatableProviderInstance>(\n registry: CreatableProviderRegistry,\n factory: CreatableProviderFactory<TProvider> | LabeledCreatableProviderFactory<TProvider>,\n labels?: Labels,\n /** register this as the primary factory for every schema it supports */\n primary: boolean | ProviderMoniker | ProviderMoniker[] = false,\n) => {\n const primaryMonikers\n = primary !== true && isTruthy(primary)\n ? Array.isArray(primary)\n ? primary\n : [primary]\n : []\n\n for (const primaryMoniker of primaryMonikers) {\n if (!factory.monikers.includes(primaryMoniker)) {\n console.warn(`Primary moniker ${primary} not found in factory monikers`)\n }\n }\n\n const isPrimaryForMoniker = (moniker: ProviderMoniker) => {\n switch (typeof primary) {\n case 'boolean': {\n return primary\n }\n case 'string': {\n return moniker === primary\n }\n case 'object': {\n if (Array.isArray(primary)) {\n return primary.includes(moniker)\n }\n }\n }\n throw new Error(`Invalid primary value: ${primary}`)\n }\n\n const factoryClone: LabeledCreatableProviderFactory<TProvider> = buildProviderFactory(factory, labels)\n\n // add this default moniker as the first entry\n registry[factoryClone.defaultMoniker] = [factoryClone, ...(registry[factoryClone.defaultMoniker] ?? [])]\n for (const moniker of factoryClone.monikers) {\n registry[moniker] = isPrimaryForMoniker(moniker) ? [factoryClone, ...(registry[moniker] ?? [])] : [...(registry[moniker] ?? []), factoryClone]\n }\n}\n\nexport const registerCreatableProviderFactories = (\n factories: (CreatableProviderFactory | LabeledCreatableProviderFactory)[],\n registry: CreatableProviderRegistry = {},\n primary = false,\n) => {\n for (const factory of factories) {\n registerCreatableProviderFactory(registry, factory, undefined, primary)\n }\n return registry\n}\n","import type { WithOptionalLabels } from '@xylabs/sdk-js'\n\nimport type { CreatableProviderFactory, CreatableProviderInstance } from './CreatableProvider.ts'\n\nexport type LabeledCreatableProviderFactory<T extends CreatableProviderInstance = CreatableProviderInstance> = CreatableProviderFactory<T> & WithOptionalLabels\n\nexport const hasLabels = (factory: CreatableProviderFactory | LabeledCreatableProviderFactory): factory is LabeledCreatableProviderFactory => {\n return (factory as LabeledCreatableProviderFactory).labels !== undefined\n}\n\n/**\n * Class annotation to be used to decorate Providers which support\n * an asynchronous labeled creation factory pattern\n * @returns The decorated Provider requiring it implement the members\n * of the CreatableProvider as statics properties/methods\n */\nexport function labeledCreatableProviderFactory<TProvider extends CreatableProviderInstance = CreatableProviderInstance>() {\n return <U extends LabeledCreatableProviderFactory<TProvider>>(constructor: U) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n constructor\n }\n}\n","import { hasAllLabels, type Labels } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\n\nimport type { ProviderMoniker } from '../model/index.ts'\nimport type { CreatableProviderFactory } from './CreatableProvider.ts'\nimport { type CreatableProviderRegistry, registerCreatableProviderFactory } from './CreatableProviderRegistry.ts'\nimport { hasLabels, type LabeledCreatableProviderFactory } from './LabeledCreatableProviderFactory.ts'\nimport type { ProviderFactoryLocatorInstance } from './ProviderFactoryLocatorInstance.ts'\n\n/**\n * A class which encapsulates the Service Locator Pattern for Provider Factories\n */\nexport class ProviderFactoryLocator implements ProviderFactoryLocatorInstance {\n protected readonly _registry: CreatableProviderRegistry\n\n private _frozen = false\n\n constructor(registry: CreatableProviderRegistry = {}) {\n this._registry = registry\n }\n\n /**\n * The current registry for the module factory\n */\n get registry(): Readonly<CreatableProviderRegistry> {\n return this._registry\n }\n\n static empty() {\n return new ProviderFactoryLocator({})\n }\n\n static standard() {\n return new ProviderFactoryLocator({})\n }\n\n freeze() {\n this._frozen = true\n }\n\n /**\n * Locates a provider factory that matches the supplied schema and labels\n * @param schema The config schema for the provider\n * @param labels The labels for the provider factory\n * @returns A provider factory that matches the supplied schema and labels or throws if one is not found\n */\n locate(moniker: ProviderMoniker, labels?: Labels): CreatableProviderFactory | LabeledCreatableProviderFactory {\n return assertEx(\n this.tryLocate(moniker, labels),\n\n () => `No module factory for the supplied config schema [${moniker}]${labels ? ` & labels [${JSON.stringify(labels)}]` : ''} registered`,\n )\n }\n\n merge(locator: ProviderFactoryLocatorInstance): ProviderFactoryLocatorInstance {\n const registry = { ...this.registry }\n for (const moniker in locator.registry) {\n if (registry[moniker]) {\n registry[moniker].push(...(locator.registry[moniker] ?? []))\n } else {\n registry[moniker] = locator.registry[moniker]\n }\n }\n return new ProviderFactoryLocator(registry)\n }\n\n /**\n * Registers a single module factory (with optional tags) with the locator\n * @param factory The factory to register\n * @param labels The labels for the module factory\n */\n register(factory: CreatableProviderFactory, labels?: Labels, primary: boolean | ProviderMoniker | ProviderMoniker[] = false): this {\n assertEx(!this._frozen, () => 'Cannot register a module factory after the locator has been frozen')\n registerCreatableProviderFactory(this._registry, factory, labels, primary)\n return this\n }\n\n /**\n * Registers multiple module factories with the locator\n * @param factories The factories to register\n */\n registerMany(factories: CreatableProviderFactory[]): this {\n for (const factory of factories) {\n this.register(factory)\n }\n return this\n }\n\n /**\n * Tries to locate a module factory that matches the supplied schema and labels\n * @param schema The config schema for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied schema and labels or undefined\n */\n tryLocate(moniker: ProviderMoniker, labels?: Labels): CreatableProviderFactory | LabeledCreatableProviderFactory | undefined {\n return labels\n // Find the first factory that has labels and has all the labels provided\n ? (this._registry[moniker]?.filter(hasLabels).find(factory => hasAllLabels(factory?.labels, labels)) ?? this._registry[moniker]?.[0])\n // Otherwise, return the first factory\n : this._registry[moniker]?.[0]\n }\n}\n","import { AsObjectFactory } from '@xylabs/sdk-js'\nimport { isPayloadOfZodType, type Payload } from '@xyo-network/payload-model'\nimport z from 'zod'\n\nimport {\n TypedDataDomainZod, TypedDataTypesZod, TypedDataValueZod,\n} from '../Types.ts'\n\nexport const EIP712DataPayloadFieldsZod = z.object({\n domain: TypedDataDomainZod,\n types: TypedDataTypesZod,\n values: TypedDataValueZod,\n})\nexport type EIP712DataPayloadFields = z.infer<typeof EIP712DataPayloadFieldsZod>\n\nexport const EIP712DataPayloadSchema = 'network.xyo.chains.ethereum.eip712.data' as const\nexport type EIP712DataPayloadSchema = typeof EIP712DataPayloadSchema\n\nexport type EIP712DataPayload = Payload<EIP712DataPayloadFields, EIP712DataPayloadSchema>\n\nexport const isEIP712DataPayload = isPayloadOfZodType<EIP712DataPayload>(\n EIP712DataPayloadFieldsZod,\n EIP712DataPayloadSchema,\n)\n\nexport const asEIP712DataPayload = AsObjectFactory.create(isEIP712DataPayload)\n","// import type { Signer } from 'ethers/providers'\nimport z from 'zod'\n\n/**\n * Typed Data Types\n * Re-exposing the types from ethers for convenience and to ensure\n * we can fix in one place if they change\n */\n\n// export type TypedDataDomain = Parameters<Signer['signTypedData']>[0]\n// export type TypedDataTypes = Parameters<Signer['signTypedData']>[1]\n// export type TypedDataValues = Parameters<Signer['signTypedData']>[2]\n\nexport const TypedDataDomainZod = z.object({\n name: z.string().nullable().optional(),\n version: z.string().nullable().optional(),\n chainId: z.union([z.string(), z.number(), z.bigint()]).nullable().optional(),\n verifyingContract: z.string().nullable().optional(),\n salt: z.union([z.string(), z.instanceof(Uint8Array)]).nullable().optional(),\n})\nexport type TypedDataDomain = z.infer<typeof TypedDataDomainZod>\n\nexport const TypedDataFieldZod = z.object({\n name: z.string(),\n type: z.string(),\n})\nexport type TypedDataField = z.infer<typeof TypedDataFieldZod>\n\nexport const TypedDataTypesZod = z.record(z.string(), z.array(TypedDataFieldZod))\nexport type TypedDataTypes = z.infer<typeof TypedDataTypesZod>\n\nexport const TypedDataValueZod = z.record(z.string(), z.any())\nexport type TypedDataValues = z.infer<typeof TypedDataValueZod>\n","import { AsObjectFactory, HashZod } from '@xylabs/sdk-js'\nimport { isPayloadOfZodType, type Payload } from '@xyo-network/payload-model'\nimport z from 'zod'\n\nexport const EIP712SignaturePayloadFieldsZod = z.object({\n address: z.string(),\n hash: HashZod,\n signature: z.string(),\n})\n\nexport type EIP712SignaturePayloadFields = z.infer<typeof EIP712SignaturePayloadFieldsZod>\n\nexport const EIP712SignaturePayloadSchema = 'network.xyo.chains.ethereum.eip712.signature' as const\nexport type EIP712SignaturePayloadSchema = typeof EIP712SignaturePayloadSchema\n\nexport type EIP712SignaturePayload = Payload<EIP712SignaturePayloadFields, EIP712SignaturePayloadSchema>\n\nexport const isEIP712SignaturePayload = isPayloadOfZodType<EIP712SignaturePayload>(\n EIP712SignaturePayloadFieldsZod,\n EIP712SignaturePayloadSchema,\n)\n\nexport const asEIP712SignaturePayload = AsObjectFactory.create(isEIP712SignaturePayload)\n","import { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Signer } from 'ethers/providers'\n\nimport {\n type EIP712DataPayload, type EIP712SignaturePayload, EIP712SignaturePayloadSchema,\n} from './Payloads/index.ts'\n\nexport const signEIP712Message = async (signer: Signer, data: EIP712DataPayload): Promise<EIP712SignaturePayload> => {\n const {\n domain, types, values,\n } = data\n const signature = await signer.signTypedData(domain, types, values)\n const hash = await PayloadBuilder.hash(data)\n const address = await signer.getAddress()\n return {\n address, hash, schema: EIP712SignaturePayloadSchema, signature,\n }\n}\n","import { asHash, isUndefined } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { verifyTypedData } from 'ethers/hash'\n\nimport type { EIP712DataPayload, EIP712SignaturePayload } from './Payloads/index.ts'\n\nexport const verifyEIP712Message = async (data: EIP712DataPayload, sig: EIP712SignaturePayload): Promise<boolean> => {\n const {\n address, signature, hash,\n } = sig\n const { schema, ...fields } = data\n const signedHash = asHash(hash)\n // If there is no valid hash in the signature, or it doesn't match the calculated hash, return false\n if (isUndefined(signedHash) || signedHash !== await PayloadBuilder.hash(data)) return false\n // Recover the address from the signature\n const recoveredAddress = verifyTypedData(fields.domain, fields.types, fields.values, signature)\n // Verify it matches the expected address\n return recoveredAddress.toLowerCase() === address.toLowerCase()\n}\n","import type { XL1BlockRangeKey, XL1RangeMultipliers } from '@xyo-network/xl1-protocol'\nimport { asAttoXL1 } from '@xyo-network/xl1-protocol'\n\nimport { XL1_NETWORK_STAKING_GENESIS_PERIOD_END_XL1_BLOCK } from './constants.ts'\n\nexport const XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_EARNED_REWARDS = asAttoXL1(1_343_884_111_859_145_740_576_652n)\nexport const XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_BONUS_REWARDS = asAttoXL1(100_000_000_000_000_000_000_000_000n)\nexport const XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_REWARDS\n = XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_EARNED_REWARDS + XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_BONUS_REWARDS\n\nexport const RewardMultipliers: XL1RangeMultipliers = {\n [`0|${XL1_NETWORK_STAKING_GENESIS_PERIOD_END_XL1_BLOCK}` as XL1BlockRangeKey]:\n [XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_BONUS_REWARDS, XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_EARNED_REWARDS],\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { AsObjectFactory } from '@xylabs/sdk-js'\nimport { isPayloadOfSchemaType, type Payload } from '@xyo-network/payload-model'\n\nexport const AddressPairSchema = 'network.xyo.address.pair' as const\nexport type AddressPairSchema = typeof AddressPairSchema\n\nexport interface AddressFields {\n addresses: [Address, Address]\n}\n\nexport type AddressPairPayload = Payload<AddressFields, AddressPairSchema>\n\n/**\n * Identity function for determining if an object is an AddressPairPayload\n */\nexport const isAddressPairPayload = isPayloadOfSchemaType<AddressPairPayload>(AddressPairSchema)\nexport const asAddressPairPayload = AsObjectFactory.create(isAddressPairPayload)\nexport const asOptionalAddressPairPayload = AsObjectFactory.createOptional(isAddressPairPayload)\n","import {\n type Address, type Hex, hexToBigInt, toAddress,\n} from '@xylabs/sdk-js'\nimport { span } from '@xylabs/sdk-js'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isTransfer } from '@xyo-network/xl1-protocol'\n\nexport const netBalancesForPayloads = (payloads: Payload[]) => {\n return span('netBalancesForPayloads', () => {\n const balances: Record<Address, bigint> = {}\n for (const payload of payloads) {\n if (isTransfer(payload)) {\n const { from } = payload\n for (let [address, amount] of Object.entries(payload.transfers) as [Address, Hex][]) {\n balances[toAddress(address)] = (balances[toAddress(address)] ?? 0n) + hexToBigInt(amount)\n balances[toAddress(from)] = (balances[toAddress(from)] ?? 0n) - hexToBigInt(amount)\n }\n }\n }\n return balances\n })\n}\n","import {\n type Address, type Hex, hexToBigInt, toAddress,\n} from '@xylabs/sdk-js'\nimport { span } from '@xylabs/sdk-js'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isTransfer } from '@xyo-network/xl1-protocol'\n\nexport const netSchemasForPayloads = (payloads: Payload[]) => {\n return span('netSchemasForPayloads', () => {\n const balances: Record<Address, bigint> = {}\n for (const payload of payloads) {\n if (isTransfer(payload)) {\n const { from } = payload\n for (let [address, amount] of Object.entries(payload.transfers) as [Address, Hex][]) {\n balances[toAddress(address)] = (balances[toAddress(address)] ?? 0n) + hexToBigInt(amount)\n balances[toAddress(from)] = (balances[toAddress(from)] ?? 0n) - hexToBigInt(amount)\n }\n }\n }\n return balances\n })\n}\n","import {\n type Address, type Hex, hexToBigInt,\n} from '@xylabs/sdk-js'\nimport { span } from '@xylabs/sdk-js'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isTransfer } from '@xyo-network/xl1-protocol'\n\n// the net transfer amounts for the specified accounts only\nexport function netTransfersForPayloads(payloads: Payload[]): Record<Address, Record<Address, bigint>> {\n return span('netTransfersForPayloads', () => {\n const transfers: Record<Address, Record<Address, bigint>> = {}\n for (const payload of payloads) {\n if (isTransfer(payload)) {\n const { from } = payload\n transfers[from] = transfers[from] ?? {}\n for (let [to, amount] of Object.entries(payload.transfers) as [Address, Hex][]) {\n transfers[to] = transfers[to] ?? {}\n transfers[to][from] = (transfers[to][from] ?? 0n) + hexToBigInt(amount)\n transfers[from][to] = (transfers[from][to] ?? 0n) - hexToBigInt(amount)\n }\n }\n }\n return transfers\n })\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport type { Payload, Schema } from '@xyo-network/payload-model'\n\nimport type { MapType } from '../map/index.ts'\n\nexport type DataLakeData = Payload | ArrayBuffer\n\nexport type DataLakeViewerMethods = Pick<MapType<Hash, DataLakeData>, 'get' | 'getMany' | 'has'>\n\nexport interface DataLakeViewer extends DataLakeViewerMethods {\n allowedSchemas?: Schema[]\n disallowedSchemas?: Schema[]\n}\n\nexport const DataLakeViewerMoniker = 'DataLakeViewer' as const\nexport type DataLakeViewerMoniker = typeof DataLakeViewerMoniker\n\nexport type DataLakeRunnerMethods = Pick<MapType<Hash, DataLakeData>, 'set' | 'delete' | 'clear'> & {\n setMany(entries: [Hash, DataLakeData][]): Promise<void>\n}\n\nexport interface DataLakeRunner extends DataLakeRunnerMethods {}\n\nexport const DataLakeRunnerMoniker = 'DataLakeRunner' as const\nexport type DataLakeRunnerMoniker = typeof DataLakeRunnerMoniker\n","import type { Promisable } from '@xylabs/sdk-js'\n\nimport type { Provider } from '../../../model/index.ts'\nimport type { NetworkStakeStepRewardsViewer } from './Rewards/index.ts'\n\nexport interface NetworkStakeViewerMethods {\n /** @returns the active stake and the number of active validators [active, block] */\n active(blockNumber?: number): Promisable<[bigint, number]>\n}\n\nexport const NetworkStakeViewerMoniker = 'NetworkStakeViewer' as const\nexport type NetworkStakeViewerMoniker = typeof NetworkStakeViewerMoniker\n\nexport interface NetworkStakeViewer extends NetworkStakeViewerMethods, Provider<NetworkStakeViewerMoniker> {\n stepRewards?: NetworkStakeStepRewardsViewer\n}\n","import type { Provider } from '../../../../model/index.ts'\nimport type { NetworkStakeStepRewardsByPositionViewerOptions } from './Options.ts'\nimport type { NetworkStakeStepRewardsByIndexViewerMethodsTemplate } from './templates/index.ts'\n\n// Viewers are client objects that can nest other viewers and ViewerMethods objects consist only of methods that return data.\n\nexport interface NetworkStakeStepRewardsByPositionViewerMethods extends\n NetworkStakeStepRewardsByIndexViewerMethodsTemplate<NetworkStakeStepRewardsByPositionViewerOptions, number> {}\n\nexport const NetworkStakeStepRewardsByPositionViewerMoniker = 'NetworkStakeStepRewardsByPositionViewer' as const\nexport type NetworkStakeStepRewardsByPositionViewerMoniker = typeof NetworkStakeStepRewardsByPositionViewerMoniker\n\nexport interface NetworkStakeStepRewardsByPositionViewer extends NetworkStakeStepRewardsByPositionViewerMethods,\n Provider<NetworkStakeStepRewardsByPositionViewerMoniker> {}\n","import type { Address } from '@xylabs/sdk-js'\n\nimport type { Provider } from '../../../../model/index.ts'\nimport type { NetworkStakeStepRewardsByStakerViewerOptions } from './Options.ts'\nimport type { NetworkStakeStepRewardsByIndexViewerMethodsTemplate } from './templates/index.ts'\n\n// Viewers are client objects that can nest other viewers and ViewerMethods objects consist only of methods that return data.\n\nexport interface NetworkStakeStepRewardsByStakerViewerMethods\n extends NetworkStakeStepRewardsByIndexViewerMethodsTemplate<NetworkStakeStepRewardsByStakerViewerOptions, Address> {}\n\nexport const NetworkStakeStepRewardsByStakerViewerMoniker = 'NetworkStakeStepRewardsByStakerViewer' as const\nexport type NetworkStakeStepRewardsByStakerViewerMoniker = typeof NetworkStakeStepRewardsByStakerViewerMoniker\n\nexport interface NetworkStakeStepRewardsByStakerViewer extends NetworkStakeStepRewardsByStakerViewerMethods,\n Provider<NetworkStakeStepRewardsByStakerViewerMoniker> {}\n","import type { StepIdentityString } from '@xyo-network/xl1-protocol'\n\nimport type { Provider } from '../../../../model/index.ts'\nimport type { NetworkStakeStepRewardsByStepViewerOptions } from './Options.ts'\nimport type { NetworkStakeStepRewardsByIndexViewerMethodsTemplate } from './templates/index.ts'\n\n// Viewers are client objects that can nest other viewers and ViewerMethods objects consist only of methods that return data.\n\nexport interface NetworkStakeStepRewardsByStepViewerMethods extends\n NetworkStakeStepRewardsByIndexViewerMethodsTemplate<NetworkStakeStepRewardsByStepViewerOptions, StepIdentityString> {}\n\nexport const NetworkStakeStepRewardsByStepViewerMoniker = 'NetworkStakeStepRewardsByStepViewer' as const\nexport type NetworkStakeStepRewardsByStepViewerMoniker = typeof NetworkStakeStepRewardsByStepViewerMoniker\n\nexport interface NetworkStakeStepRewardsByStepViewer extends NetworkStakeStepRewardsByStepViewerMethods, Provider<NetworkStakeStepRewardsByStepViewerMoniker> {}\n","import type { AttoXL1 } from '@xyo-network/xl1-protocol'\n\nimport type { Provider } from '../../../../model/index.ts'\nimport type { NetworkStakeStepRewardsRangeOptions } from './Options.ts'\nimport type { NetworkStakeStepRewardsViewerMethodsTemplate } from './templates/index.ts'\n\n// Viewers are client objects that can nest other viewers and ViewerMethods objects consist only of methods that return data.\n\nexport interface NetworkStakeStepRewardsTotalViewerMethods extends NetworkStakeStepRewardsViewerMethodsTemplate<NetworkStakeStepRewardsRangeOptions, AttoXL1> {}\n\nexport const NetworkStakeStepRewardsTotalViewerMoniker = 'NetworkStakeStepRewardsTotalViewer' as const\nexport type NetworkStakeStepRewardsTotalViewerMoniker = typeof NetworkStakeStepRewardsTotalViewerMoniker\n\nexport interface NetworkStakeStepRewardsTotalViewer extends NetworkStakeStepRewardsTotalViewerMethods, Provider<NetworkStakeStepRewardsTotalViewerMoniker> {}\n","import type { Provider } from '../../../../model/index.ts'\nimport type { NetworkStakeStepRewardsByPositionViewer } from './ByPositionViewer.ts'\nimport type { NetworkStakeStepRewardsByStakerViewer } from './ByStakerViewer.ts'\nimport type { NetworkStakeStepRewardsByStepViewer } from './ByStepViewer.ts'\nimport type { NetworkStakeStepRewardsTotalViewer } from './TotalViewer.ts'\n\nexport interface NetworkStakeStepRewardsViewerMethods {}\n\nexport const NetworkStakeStepRewardsViewerMoniker = 'NetworkStakeStepRewardsViewer' as const\nexport type NetworkStakeStepRewardsViewerMoniker = typeof NetworkStakeStepRewardsViewerMoniker\n\nexport interface NetworkStakeStepRewardsViewer extends NetworkStakeStepRewardsViewerMethods, Provider<NetworkStakeStepRewardsViewerMoniker> {\n position?: NetworkStakeStepRewardsByPositionViewer\n staker?: NetworkStakeStepRewardsByStakerViewer\n step?: NetworkStakeStepRewardsByStepViewer\n total?: NetworkStakeStepRewardsTotalViewer\n}\n","import type {\n Address, Hash, Promisable,\n} from '@xylabs/sdk-js'\nimport type { AttoXL1, XL1BlockRange } from '@xyo-network/xl1-protocol'\n\nimport type { Provider } from '../../model/index.ts'\nimport type {\n AccountBalanceHistoryItem,\n AccountBalanceViewer,\n BlockViewer,\n BlockViewerMethods,\n ChainViewerMethods,\n ForkViewerMethods,\n MempoolViewer,\n NetworkStakeStepRewardViewerMethods,\n StakeViewerMethods,\n StepViewer,\n TransactionViewerMethods,\n} from '../../viewers/index.ts'\nimport type { NetworkStakeViewer } from './NetworkStake/index.ts'\n\nexport interface XyoViewerMethods extends\n NetworkStakeStepRewardViewerMethods, Pick<ChainViewerMethods, 'chainId'>, BlockViewerMethods,\n TransactionViewerMethods, StakeViewerMethods, ForkViewerMethods {\n accountBalance(address: Address, headOrRange?: Hash | XL1BlockRange): Promisable<AttoXL1>\n accountBalanceHistory(address: Address, headOrRange?: Hash | XL1BlockRange): Promisable<AccountBalanceHistoryItem[]>\n}\n\nexport const XyoViewerMoniker = 'XyoViewer' as const\nexport type XyoViewerMoniker = typeof XyoViewerMoniker\n\nexport interface XyoViewer extends Omit<BlockViewer, 'moniker'>, XyoViewerMethods,\n Omit<StakeViewerMethods, 'moniker'>, Provider<XyoViewerMoniker> {\n account?: {\n balance?: AccountBalanceViewer\n }\n block?: BlockViewer\n mempool?: MempoolViewer\n networkStake?: NetworkStakeViewer\n step?: StepViewer\n}\n","import type { Hash, JsonValue } from '@xylabs/sdk-js'\nimport { AsObjectFactory } from '@xylabs/sdk-js'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport { isPayloadOfSchemaType, isStorageMeta } from '@xyo-network/payload-model'\n\nexport interface ChainIndexingServiceStateFields<T extends JsonValue = JsonValue> {\n /**\n * The hash of the last block that this service has indexing\n */\n endBlockHash: Hash\n /**\n * The hash of the block that the service started indexing. If undefined, the service is\n * assumed to have started indexing from the genesis block\n */\n startBlockHash?: Hash\n /**\n * The indexed state for the range\n */\n state: T\n}\nexport const ChainIndexingServiceStateSchema = 'network.xyo.chain.indexing.service.state' as const\nexport type ChainIndexingServiceStateSchema = typeof ChainIndexingServiceStateSchema\n\n/**\n * The result of a ChainIndexingServiceState\n */\nexport type ChainIndexingServiceState<T extends JsonValue = JsonValue> = Payload<ChainIndexingServiceStateFields<T>, ChainIndexingServiceStateSchema>\n\n/**\n * Identity functions for determining if an object is an ChainIndexingServiceState\n */\nexport const isChainIndexingServiceState = <T extends JsonValue = JsonValue>(payload?: unknown): payload is ChainIndexingServiceState<T> => {\n return isPayloadOfSchemaType<ChainIndexingServiceState<T>>(ChainIndexingServiceStateSchema)(payload)\n}\nexport const asChainIndexingServiceState = AsObjectFactory.create<ChainIndexingServiceState<JsonValue>>(isChainIndexingServiceState)\n\nexport const isChainIndexingServiceStateWithStorageMeta\n = <T extends JsonValue = JsonValue>(value: unknown): value is WithStorageMeta<ChainIndexingServiceState<T>> =>\n isChainIndexingServiceState<T>(value) && isStorageMeta(value)\n\nexport const asChainIndexingServiceStateWithStorageMeta\n = AsObjectFactory.create<WithStorageMeta<ChainIndexingServiceState>>(isChainIndexingServiceStateWithStorageMeta)\n","import {\n type Hex,\n hexToBigInt,\n toHex,\n} from '@xylabs/sdk-js'\nimport { isObject } from '@xylabs/sdk-js'\n\nexport interface NegativeBigInt {\n negative: Hex\n}\n\nexport interface PositiveBigInt {\n positive: Hex\n}\n\nexport type SignedBigInt = NegativeBigInt | PositiveBigInt\n\nexport const isNegativeBigInt = (value: unknown): value is NegativeBigInt => {\n return isObject(value) && 'negative' in value && typeof value.negative === 'string'\n}\n\nexport const isPositiveBigInt = (value: unknown): value is PositiveBigInt => {\n return isObject(value) && 'positive' in value && typeof value.positive === 'string'\n}\n\nexport const parseSignedBigInt = (value: SignedBigInt): bigint => {\n if (isNegativeBigInt(value)) {\n return -hexToBigInt(value.negative)\n } else if (isPositiveBigInt(value)) {\n return hexToBigInt(value.positive)\n } else {\n throw new Error('Invalid balance type')\n }\n}\n\nexport const toSignedBigInt = (value: bigint): SignedBigInt => {\n return value < 0n ? { negative: toHex(-value) } : { positive: toHex(value) }\n}\n\nexport const toPositiveBigInt = (value: unknown): PositiveBigInt => {\n if (isNegativeBigInt(value)) {\n return { positive: toHex(0n) }\n }\n if (isPositiveBigInt(value)) {\n return { positive: value.positive }\n }\n if (typeof value === 'bigint') {\n return { positive: toHex(value) }\n }\n throw new Error('Invalid value for positive big int')\n}\n","import type { Address, Hash } from '@xylabs/sdk-js'\nimport {\n asHash,\n assertEx, exists, isDefined, spanRootAsync,\n} from '@xylabs/sdk-js'\nimport type { WithHashMeta, WithStorageMeta } from '@xyo-network/payload-model'\nimport type {\n SignedBlockBoundWitnessWithHashMeta, Transfer, XL1BlockNumber, XL1BlockRange,\n} from '@xyo-network/xl1-protocol'\nimport {\n asRange, asXL1BlockNumber, asXL1BlockRange, AttoXL1,\n StepSizes,\n TransferSchema,\n} from '@xyo-network/xl1-protocol'\n\nimport { deepCalculateFramesFromRange } from '../../block/index.ts'\nimport type { CreatableProviderParams } from '../../CreatableProvider/index.ts'\nimport { AbstractCreatableProvider, creatableProvider } from '../../CreatableProvider/index.ts'\nimport type { ProviderMoniker, Qualified } from '../../model/index.ts'\nimport type {\n BalanceStepSummaryContext, TransfersStepSummary,\n TransfersStepSummaryContext,\n} from '../../summary/index.ts'\nimport {\n balancesSummary,\n transfersStepSummaryFromRange,\n} from '../../summary/index.ts'\nimport {\n type AccountBalanceHistoryItem, type AccountBalanceViewer, AccountBalanceViewerMoniker,\n type BlockViewer,\n} from '../../viewers/index.ts'\n\nexport interface SimpleAccountBalanceViewerParams extends CreatableProviderParams {\n blockViewer: BlockViewer\n context: BalanceStepSummaryContext\n transfersSummaryContext: TransfersStepSummaryContext\n}\n\n@creatableProvider()\nexport class SimpleAccountBalanceViewer extends AbstractCreatableProvider<SimpleAccountBalanceViewerParams> implements AccountBalanceViewer {\n static readonly defaultMoniker = AccountBalanceViewerMoniker\n static readonly monikers = [AccountBalanceViewerMoniker]\n moniker = SimpleAccountBalanceViewer.defaultMoniker\n\n get blockViewer(): BlockViewer {\n return this.params.blockViewer!\n }\n\n get context(): BalanceStepSummaryContext {\n return this.params.context!\n }\n\n get transfersSummaryContext(): TransfersStepSummaryContext {\n return this.params.transfersSummaryContext!\n }\n\n static override async paramsHandler(params: Partial<SimpleAccountBalanceViewerParams>) {\n assertEx(params.blockViewer, () => 'blockViewer is required')\n assertEx(params.context, () => 'context is required')\n assertEx(params.transfersSummaryContext, () => 'transfersSummaryContext is required')\n\n return { ...await super.paramsHandler(params) }\n }\n\n async accountBalance(address: Address, headOrRange?: XL1BlockRange | Hash): Promise<AttoXL1> {\n const balances = await this.accountBalances([address], headOrRange)\n return balances[address] ?? AttoXL1(0n)\n }\n\n accountBalanceHistories(_addresses: Address[], _rangeOrHash?: XL1BlockRange | Hash): Promise<Record<Address, AccountBalanceHistoryItem[]>> {\n throw new Error('Method [accountBalanceHistories] not implemented.')\n }\n\n async accountBalanceHistory(address: Address, headOrRange?: XL1BlockRange | Hash): Promise<AccountBalanceHistoryItem[]> {\n const range = asRange(headOrRange)\n const startingRange = asXL1BlockRange(range ?? [0, await this.blockViewer.currentBlockNumber()], true)\n const blockNumbers = await this.distillTransferHistory(address, startingRange)\n const blocks = (await Promise.all(blockNumbers.map(async bn => await this.blockViewer.blockByNumber(bn)))).filter(exists)\n const result: AccountBalanceHistoryItem[] = []\n for (const block of blocks) {\n const transferIndexes = block[0].payload_schemas.map((schema, index) => schema === TransferSchema ? index : undefined).filter(exists)\n const transfers = transferIndexes.map((index) => {\n const hash = block[0].payload_hashes[index]\n return assertEx(\n block[1].find(p => p._hash === hash) as WithStorageMeta<Transfer>,\n () => `Error: Could not find Transfer with hash ${hash} in block ${block[0]._hash}`,\n )\n }).filter(exists).filter(t => ((t.from === address) || (isDefined(t.transfers[address]))))\n if (transfers.length === 0) {\n continue\n }\n const pairs: [SignedBlockBoundWitnessWithHashMeta, WithHashMeta<Transfer>][] = (transfers.map((transfer) => {\n return [block[0], transfer]\n }))\n result.push(...pairs.map(([block, transfer]) => [block,\n null,\n transfer] satisfies AccountBalanceHistoryItem))\n }\n return result\n }\n\n async accountBalances(address: Address[], _headOrRange?: XL1BlockRange | Hash): Promise<Record<Address, AttoXL1>> {\n const [result] = (await this.qualifiedAccountBalances(address, _headOrRange))\n return result\n }\n\n async qualifiedAccountBalanceHistories(\n addresses: Address[],\n headOrRange?: Hash | XL1BlockRange,\n ): Promise<Qualified<Record<Address, AccountBalanceHistoryItem[]>>> {\n const head = asHash(headOrRange) ?? await this.blockViewer.currentBlockHash()\n const range = asXL1BlockRange(headOrRange) ?? asXL1BlockRange([0,\n assertEx(\n await this.blockViewer.blockByHash(head),\n () => `Error: Could not find block with hash ${head}`,\n )[0].block])\n const qualifiedEntries: [Address, Qualified<AccountBalanceHistoryItem[]>][] = await Promise.all(addresses.map(async address => ([\n address,\n await this.qualifiedAccountBalanceHistory(address, range),\n ])))\n\n const entries = qualifiedEntries.map(([address, [history]]) => {\n return [address, history]\n })\n const qualifiedRange = qualifiedEntries[0][1][1]\n const qualifiedHeadHash = qualifiedEntries[0][1][2]\n\n // check for drift\n for (const [_, [__, range, headHash]] of qualifiedEntries) {\n assertEx(\n range[0] === qualifiedRange[0] && range[1] === qualifiedRange[1],\n () => 'Inconsistent ranges in qualifiedAccountBalanceHistories',\n )\n assertEx(\n headHash === qualifiedHeadHash,\n () => 'Inconsistent head hashes in qualifiedAccountBalanceHistories',\n )\n }\n\n return [Object.fromEntries(entries), qualifiedRange, qualifiedHeadHash]\n }\n\n async qualifiedAccountBalances(\n address: Address[],\n _headOrRange?: Hash | XL1BlockRange,\n ): Promise<Qualified<Record<Address, AttoXL1>>> {\n return await spanRootAsync('qualifiedAccountsBalances', async () => {\n const qualifiedSummary = await balancesSummary(\n this.context,\n )\n const result: Record<Address, AttoXL1> = {}\n for (const addr of address) {\n const summaryBalance = qualifiedSummary[0][addr] ?? 0n\n result[addr] = AttoXL1(summaryBalance < 0n ? 0n : summaryBalance)\n }\n return [result, qualifiedSummary[1], qualifiedSummary[2]]\n })\n }\n\n private async distillTransferHistory(address: Address, range: XL1BlockRange, max: number = 50): Promise<XL1BlockNumber[]> {\n if ((range[1] - range[0]) <= StepSizes[0] || max <= 1) {\n return Array.from({ length: range[1] - range[0] + 1 }, (_, i) => range[1] - i).slice(0, max).map(n => asXL1BlockNumber(n, true))\n }\n const frames = deepCalculateFramesFromRange(asXL1BlockRange(range, true))\n const transferSummaryPairs = await Promise.all(frames.map(\n async (frame) => {\n return [frame, await transfersStepSummaryFromRange(this.transfersSummaryContext, frame)]\n },\n )) as [XL1BlockRange, WithStorageMeta<TransfersStepSummary>][]\n\n const filteredTransferSummaryPairs = transferSummaryPairs.filter(([_, summary]) => Object.keys(summary.transfers).includes(address))\n\n // sort it latest to earliest\n const sortedTransferSummaryPairs = filteredTransferSummaryPairs.toSorted((a, b) => {\n return b[0][1] - a[0][1]\n })\n\n const resultBlockNumbers: Set<XL1BlockNumber> = new Set()\n for (const [frame] of sortedTransferSummaryPairs) {\n if ((frame[1] - frame[0] + 1) > StepSizes[0]) {\n const values = await this.distillTransferHistory(address, asXL1BlockRange([frame[0], frame[1] - 1], true), max - resultBlockNumbers.size)\n for (const value of values) {\n resultBlockNumbers.add(value)\n }\n resultBlockNumbers.add(frame[1])\n } else {\n for (let i = frame[0]; i <= frame[1]; i++) {\n resultBlockNumbers.add(i)\n }\n }\n if (resultBlockNumbers.size >= max) {\n break\n }\n }\n return [...resultBlockNumbers].toSorted((a, b) => b - a).slice(0, max)\n }\n\n private async qualifiedAccountBalanceHistory(\n address: Address,\n headOrRange?: Hash | XL1BlockRange,\n ): Promise<Qualified<AccountBalanceHistoryItem[]>> {\n const range = asRange(headOrRange)\n const headHash = asHash(headOrRange)\n const [head] = assertEx(isDefined(headHash)\n ? (await this.blockViewer.blockByHash(headHash))\n : (await this.blockViewer.currentBlock()), () => 'Could not resolve head block')\n const startingRange = asXL1BlockRange(range ?? [0, head.block], true)\n const blockNumbers = await this.distillTransferHistory(address, startingRange)\n const blocks = (await Promise.all(blockNumbers.map(async bn => await this.blockViewer.blockByNumber(bn)))).filter(exists)\n const result: AccountBalanceHistoryItem[] = []\n for (const block of blocks) {\n const transferIndexes = block[0].payload_schemas.map((schema, index) => schema === TransferSchema ? index : undefined).filter(exists)\n const transfers = transferIndexes.map((index) => {\n const hash = block[0].payload_hashes[index]\n return assertEx(\n block[1].find(p => p._hash === hash) as WithStorageMeta<Transfer>,\n () => `Error: Could not find Transfer with hash ${hash} in block ${block[0]._hash}`,\n )\n }).filter(exists).filter(t => ((t.from === address) || (isDefined(t.transfers[address]))))\n if (transfers.length === 0) {\n continue\n }\n const pairs: [SignedBlockBoundWitnessWithHashMeta, WithHashMeta<Transfer>][] = (transfers.map((transfer) => {\n return [block[0], transfer]\n }))\n result.push(...pairs.map(([block, transfer]) => [block,\n null,\n transfer] satisfies AccountBalanceHistoryItem))\n }\n return [result, startingRange, head._hash]\n }\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { AsObjectFactory } from '@xylabs/sdk-js'\nimport type { Schema, WithStorageMeta } from '@xyo-network/payload-model'\nimport { isPayloadOfSchemaType, isStorageMeta } from '@xyo-network/payload-model'\n\nimport type { SignedBigInt } from '../../SignedBigInt.ts'\nimport type { StepSummary } from './StepSummary.ts'\n\nexport const BalancesStepSummarySchema: Schema = 'network.xyo.step.summary.balances'\nexport type BalancesStepSummarySchema = typeof BalancesStepSummarySchema\n\nexport type BalancesStepSummary = StepSummary<{\n balances: Record<Address, SignedBigInt>\n}, BalancesStepSummarySchema>\n\n/**\n * Identity function for determining if an object is an BalancesStepSummary\n */\nexport const isBalancesStepSummary = isPayloadOfSchemaType<BalancesStepSummary>(BalancesStepSummarySchema)\nexport const asBalancesStepSummary = AsObjectFactory.create<BalancesStepSummary>(isBalancesStepSummary)\n\n/**\n * Identity function for determining if an object is an BalancesStepSummary with Storage Meta\n */\nexport const isBalancesStepSummaryWithStorageMeta = (value: unknown): value is WithStorageMeta<BalancesStepSummary> => {\n return isBalancesStepSummary(value) && isStorageMeta(value)\n}\nexport const asBalancesStepSummaryWithStorageMeta = AsObjectFactory.create<WithStorageMeta<BalancesStepSummary>>(isBalancesStepSummaryWithStorageMeta)\n","import { AsObjectFactory } from '@xylabs/sdk-js'\nimport type { Schema, WithStorageMeta } from '@xyo-network/payload-model'\nimport { isPayloadOfSchemaType, isStorageMeta } from '@xyo-network/payload-model'\n\nimport type { StepSummary } from './StepSummary.ts'\n\nexport const SchemasStepSummarySchema: Schema = 'network.xyo.step.summary.schemas'\nexport type SchemasStepSummarySchema = typeof SchemasStepSummarySchema\n\nexport type SchemasStepSummary = StepSummary<{\n schemas: Record<Schema, number>\n}, SchemasStepSummarySchema>\n\n/**\n * Identity function for determining if an object is an SchemasStepSummary\n */\nexport const isSchemasStepSummary = isPayloadOfSchemaType<SchemasStepSummary>(SchemasStepSummarySchema)\nexport const asSchemasStepSummary = AsObjectFactory.create<SchemasStepSummary>(isSchemasStepSummary)\n\n/**\n * Identity function for determining if an object is an SchemasStepSummary with Storage Meta\n */\nexport const isSchemasStepSummaryWithStorageMeta = (value: unknown): value is WithStorageMeta<SchemasStepSummary> => {\n return isSchemasStepSummary(value) && isStorageMeta(value)\n}\nexport const asSchemasStepSummaryWithStorageMeta = AsObjectFactory.create<WithStorageMeta<SchemasStepSummary>>(isSchemasStepSummaryWithStorageMeta)\n","import type { EmptyObject, Hash } from '@xylabs/sdk-js'\nimport type { Payload, Schema } from '@xyo-network/payload-model'\n\nexport const StepSummarySchema: Schema = 'network.xyo.step.summary'\nexport type StepSummarySchema = typeof StepSummarySchema\n\nexport interface StepSummaryFields {\n hash: Hash // the stepHash - the hash of the last block in the step frame\n stepSize: number // the stepSize in blocks\n}\n\nexport type StepSummary<TAdditionalFields extends EmptyObject | void = void,\n TSchema extends Schema | void = void> = Payload<TAdditionalFields extends void ? StepSummaryFields : TAdditionalFields & StepSummaryFields,\n TSchema extends void ? StepSummarySchema : TSchema>\n","import type { Address } from '@xylabs/sdk-js'\nimport { AsObjectFactory } from '@xylabs/sdk-js'\nimport type { Schema, WithStorageMeta } from '@xyo-network/payload-model'\nimport { isPayloadOfSchemaType, isStorageMeta } from '@xyo-network/payload-model'\n\nimport type { SignedBigInt } from '../../SignedBigInt.ts'\nimport type { StepSummary } from './StepSummary.ts'\n\nexport const TransfersStepSummarySchema: Schema = 'network.xyo.step.summary.transfer'\nexport type TransfersStepSummarySchema = typeof TransfersStepSummarySchema\n\nexport type TransfersStepSummary = StepSummary<{\n transfers: Record<Address, Record<Address, SignedBigInt>>\n}, TransfersStepSummarySchema>\n\n/**\n * Identity function for determining if an object is an TransfersStepSummary\n */\nexport const isTransfersStepSummary = isPayloadOfSchemaType<TransfersStepSummary>(TransfersStepSummarySchema)\nexport const asTransfersStepSummary = AsObjectFactory.create<TransfersStepSummary>(isTransfersStepSummary)\n\n/**\n * Identity function for determining if an object is an TransfersStepSummary with Storage Meta\n */\nexport const isTransfersStepSummaryWithStorageMeta = (value: unknown): value is WithStorageMeta<TransfersStepSummary> => {\n return isTransfersStepSummary(value) && isStorageMeta(value)\n}\nexport const asTransfersStepSummaryWithStorageMeta\n = AsObjectFactory.create<WithStorageMeta<TransfersStepSummary>>(isTransfersStepSummaryWithStorageMeta)\n","/* eslint-disable max-statements */\nimport { type Address } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport { isAnyPayload } from '@xyo-network/payload-model'\nimport type { XL1BlockRange } from '@xyo-network/xl1-protocol'\nimport { StepSizes } from '@xyo-network/xl1-protocol'\n\nimport {\n deepCalculateFramesFromRange, hashFromBlockNumber,\n hydrateBlock,\n} from '../../../block/index.ts'\nimport { netBalancesForPayloads } from '../../../payloads/index.ts'\nimport {\n parseSignedBigInt, type SignedBigInt, toSignedBigInt,\n} from '../../../SignedBigInt.ts'\nimport {\n type BalancesStepSummary, BalancesStepSummarySchema, type BalanceStepSummaryContext,\n} from '../../model/index.ts'\n\nexport async function balancesStepSummaryFromRange(\n context: BalanceStepSummaryContext,\n range: XL1BlockRange,\n): Promise<WithStorageMeta<BalancesStepSummary>> {\n // console.log(`balanceStepSummaryFromRange: head=${head}, range=${range[0]}-${range[1]}`)\n const frameHeadHash = await hashFromBlockNumber(context, range[1])\n const frameSize = range[1] - range[0] + 1\n const [headHash] = await context.head()\n\n let result: BalancesStepSummary | undefined = undefined\n\n if (frameSize === 1) {\n const hash = await hashFromBlockNumber(context, range[0])\n const [, payloads] = await hydrateBlock(context.store, hash)\n const balances: Record<Address, SignedBigInt> = {}\n for (const [address, balance] of Object.entries(netBalancesForPayloads(payloads))) {\n balances[address as Address] = toSignedBigInt(balance)\n }\n result = {\n schema: BalancesStepSummarySchema, hash: headHash, stepSize: -1, balances,\n }\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const step = (StepSizes as any).indexOf(frameSize)\n assertEx(step !== -1, () => `Invalid step size: ${frameSize}. Must be one of ${StepSizes.join(', ')}`)\n\n const summaryResult = await context.summaryMap.get(`${frameHeadHash}|${frameSize}`)\n if (isAnyPayload(summaryResult)) {\n result = summaryResult as WithStorageMeta<BalancesStepSummary>\n } else {\n // We do not have it, so lets build it\n await context.stepSemaphores[step].acquire()\n try {\n const subRanges = deepCalculateFramesFromRange(range, step - 1)\n const promises = subRanges.map(subRange => balancesStepSummaryFromRange(\n context,\n subRange,\n ))\n const subResults = await Promise.all(promises)\n\n // add them all up\n const bigIntBalances: Record<Address, bigint> = {}\n for (const subResult of subResults) {\n for (const [address, balance] of Object.entries(subResult.balances)) {\n bigIntBalances[address as Address] = (bigIntBalances[address as Address] ?? 0n) + parseSignedBigInt(balance)\n }\n }\n\n const balances: Record<Address, SignedBigInt> = {}\n for (const [address, balance] of Object.entries(bigIntBalances)) {\n balances[address as Address] = toSignedBigInt(balance)\n }\n\n result = {\n schema: BalancesStepSummarySchema, hash: frameHeadHash, stepSize: frameSize, balances,\n }\n\n await context.summaryMap.set(`${frameHeadHash}|${frameSize}`, result)\n } finally {\n context.stepSemaphores[step].release()\n }\n }\n }\n // console.log(`balanceStepSummaryFromRange-result: head=${head}, range=${range[0]}-${range[1]}: ${toSafeJsonString(result, 10)}`)\n const finalResult = await PayloadBuilder.addStorageMeta(result)\n return finalResult\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport {\n asAddress, isDefined, spanRootAsync,\n} from '@xylabs/sdk-js'\nimport {\n asBlockBoundWitnessWithStorageMeta, asXL1BlockNumber, asXL1BlockRange,\n} from '@xyo-network/xl1-protocol'\n\nimport { deepCalculateFramesFromRange } from '../../../block/index.ts'\nimport type { Qualified } from '../../../model/index.ts'\nimport { parseSignedBigInt } from '../../../SignedBigInt.ts'\nimport type { BalanceStepSummaryContext } from '../../model/index.ts'\nimport { balancesStepSummaryFromRange } from './balancesStepSummaryFromRange.ts'\n\nexport async function balancesSummary(\n context: BalanceStepSummaryContext,\n): Promise<Qualified<Record<Address, bigint>>> {\n return await spanRootAsync('balancesSummary', async () => {\n const [headHash] = await context.head()\n const headResult = await context.store.chainMap.get(headHash)\n const headBoundWitness = asBlockBoundWitnessWithStorageMeta(headResult, () => `Head block not found for hash: ${headHash}`)\n const rangeStart = asXL1BlockNumber(isDefined(context.windowSize) ? Math.max(headBoundWitness.block - context.windowSize + 1, 0) : 0, true)\n const ranges = deepCalculateFramesFromRange(asXL1BlockRange(\n [rangeStart, headBoundWitness.block],\n { name: 'balancesSummary' },\n ))\n const summaries = await Promise.all(ranges.map(range => balancesStepSummaryFromRange(context, range)))\n const balances: Record<Address, bigint> = {}\n for (let summary of summaries) {\n for (const [address, balance] of Object.entries(summary.balances)) {\n const validAddress = asAddress(address, () => `Invalid address: ${address}`)\n balances[validAddress] = (balances[validAddress] ?? 0n) + parseSignedBigInt(balance)\n }\n }\n return [balances, [rangeStart, headBoundWitness.block], headHash]\n })\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport { isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n Schema, WithHashMeta, WithStorageMeta,\n} from '@xyo-network/payload-model'\nimport { isAnyPayload, isHashMeta } from '@xyo-network/payload-model'\nimport type { XL1BlockRange } from '@xyo-network/xl1-protocol'\nimport { StepSizes } from '@xyo-network/xl1-protocol'\n\nimport {\n deepCalculateFramesFromRange, hashFromBlockNumber,\n hydrateBlock,\n} from '../../../block/index.ts'\nimport {\n type SchemasStepSummary, type SchemasStepSummaryContext, SchemasStepSummarySchema,\n} from '../../model/index.ts'\n\nexport async function schemasStepSummaryFromRange(\n context: SchemasStepSummaryContext,\n range: XL1BlockRange,\n): Promise<WithHashMeta<SchemasStepSummary>> {\n // console.log(`balanceStepSummaryFromRange: head=${head}, range=${range[0]}-${range[1]}`)\n const frameHeadHash = await hashFromBlockNumber(context, range[1])\n const frameSize = range[1] - range[0] + 1\n const [headHash] = await context.head()\n\n let result: SchemasStepSummary | undefined = undefined\n\n if (frameSize === 1) {\n const hash = await hashFromBlockNumber(context, range[0])\n const [block, payloads] = await hydrateBlock(context.store, hash)\n const boundWitnesses = [block, ...payloads.filter(x => isBoundWitness(x) && isHashMeta(x))]\n const schemas: Record<Schema, number> = {}\n for (const bw of boundWitnesses) {\n schemas[bw.schema] = (schemas[bw.schema] ?? 0) + 1\n for (const schema of bw.payload_schemas) {\n schemas[schema] = (schemas[schema] ?? 0) + 1\n }\n }\n result = {\n schema: SchemasStepSummarySchema, hash: headHash, stepSize: -1, schemas,\n }\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const step = (StepSizes as any).indexOf(frameSize)\n assertEx(step !== -1, () => `Invalid step size: ${frameSize}. Must be one of ${StepSizes.join(', ')}`)\n\n const summaryResult = await context.summaryMap.get(`${frameHeadHash}|${frameSize}`)\n if (isAnyPayload(summaryResult)) {\n result = summaryResult as WithStorageMeta<SchemasStepSummary>\n } else {\n // We do not have it, so lets build it\n await context.stepSemaphores[step].acquire()\n try {\n const subRanges = deepCalculateFramesFromRange(range, step - 1)\n const promises = subRanges.map(subRange => schemasStepSummaryFromRange(\n context,\n subRange,\n ))\n const subResults = await Promise.all(promises)\n\n // add them all up\n const schemas: Record<Schema, number> = {}\n for (const subResult of subResults) {\n for (const [schema, count] of Object.entries(subResult.schemas)) {\n schemas[schema] = (schemas[schema] ?? 0) + count\n }\n }\n\n result = {\n schema: SchemasStepSummarySchema, hash: frameHeadHash, stepSize: frameSize, schemas: schemas,\n }\n\n await context.summaryMap.set(`${frameHeadHash}|${frameSize}`, result)\n } finally {\n context.stepSemaphores[step].release()\n }\n }\n }\n // console.log(`balanceStepSummaryFromRange-result: head=${head}, range=${range[0]}-${range[1]}: ${toSafeJsonString(result, 10)}`)\n return await PayloadBuilder.addHashMeta(result)\n}\n","import { isDefined, spanRootAsync } from '@xylabs/sdk-js'\nimport type { Schema } from '@xyo-network/payload-model'\nimport {\n asBlockBoundWitnessWithStorageMeta, asXL1BlockNumber, asXL1BlockRange,\n} from '@xyo-network/xl1-protocol'\n\nimport { deepCalculateFramesFromRange } from '../../../block/index.ts'\nimport type { Qualified } from '../../../model/index.ts'\nimport type { SchemasStepSummaryContext } from '../../model/index.ts'\nimport { schemasStepSummaryFromRange } from './schemasStepSummaryFromRange.ts'\n\nexport async function schemasSummary(\n context: SchemasStepSummaryContext,\n): Promise<Qualified<Record<Schema, number>>> {\n return await spanRootAsync('schemasSummary', async () => {\n const [headHash] = await context.head()\n const headResult = await context.store.chainMap.get(headHash)\n const headBoundWitness = asBlockBoundWitnessWithStorageMeta(headResult, () => `Head block not found for hash: ${headHash}`)\n const rangeStart = asXL1BlockNumber(isDefined(context.windowSize) ? Math.max(headBoundWitness.block - context.windowSize + 1, 0) : 0, true)\n const ranges = deepCalculateFramesFromRange(asXL1BlockRange(\n [rangeStart, headBoundWitness.block],\n { name: 'schemasSummary' },\n ))\n const summaries = await Promise.all(ranges.map(range => schemasStepSummaryFromRange(context, range)))\n const results: Record<Schema, number> = {}\n for (let summary of summaries) {\n for (const [schema, count] of Object.entries(summary.schemas)) {\n results[schema] = (results[schema] ?? 0) + count\n }\n }\n return [results, [rangeStart, headBoundWitness.block], headHash]\n })\n}\n","/* eslint-disable max-statements */\nimport { type Address } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport { isAnyPayload } from '@xyo-network/payload-model'\nimport type { XL1BlockRange } from '@xyo-network/xl1-protocol'\nimport { StepSizes } from '@xyo-network/xl1-protocol'\n\nimport {\n deepCalculateFramesFromRange, hashFromBlockNumber, hydrateBlock,\n} from '../../../block/index.ts'\nimport { netTransfersForPayloads } from '../../../payloads/index.ts'\nimport {\n parseSignedBigInt, type SignedBigInt, toSignedBigInt,\n} from '../../../SignedBigInt.ts'\nimport {\n type TransfersStepSummary, type TransfersStepSummaryContext, TransfersStepSummarySchema,\n} from '../../model/index.ts'\nimport { transfersSummaryKey } from './transfersSummary.ts'\n\nexport async function transfersStepSummaryFromRange(\n context: TransfersStepSummaryContext,\n range: XL1BlockRange,\n): Promise<WithStorageMeta<TransfersStepSummary>> {\n // console.log(`transfersStepSummaryFromRange: head=${context.head}, range=${range[0]}-${range[1]}`)\n const frameHeadHash = await hashFromBlockNumber(context, range[1])\n const frameSize = range[1] - range[0] + 1\n const [headHash] = await context.head()\n\n let result: TransfersStepSummary | undefined = undefined\n\n if (frameSize === 1) {\n const hash = await hashFromBlockNumber(context, range[0])\n const [, payloads] = await hydrateBlock(context.store, hash)\n const transfers: Record<Address, Record<Address, SignedBigInt>> = {}\n for (const [from, toMap] of Object.entries(netTransfersForPayloads(payloads))) {\n transfers[from as Address] = transfers[from as Address] ?? {}\n for (const [to, amount] of Object.entries(toMap)) {\n transfers[from as Address][to as Address] = toSignedBigInt(amount)\n }\n }\n result = {\n schema: TransfersStepSummarySchema, hash: headHash, stepSize: -1, transfers,\n }\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const step = (StepSizes as any).indexOf(frameSize)\n assertEx(step !== -1, () => `Invalid step size: ${frameSize}. Must be one of ${StepSizes.join(', ')}`)\n\n const key = transfersSummaryKey(frameHeadHash, frameSize)\n\n const summaryResult = await context.summaryMap.get(key)\n if (isAnyPayload(summaryResult)) {\n result = summaryResult as WithStorageMeta<TransfersStepSummary>\n } else {\n await context.stepSemaphores[step].acquire()\n // We do not have it, so lets build it\n try {\n const subRanges = deepCalculateFramesFromRange(range, step - 1)\n const promises = subRanges.map(subRange => transfersStepSummaryFromRange(\n context,\n subRange,\n ))\n const subResults = await Promise.all(promises)\n\n // add them all up\n const bigIntBalances: Record<Address, Record<Address, bigint>> = {}\n for (const subResult of subResults) {\n for (const [from, toMap] of Object.entries(subResult.transfers)) {\n bigIntBalances[from as Address] = bigIntBalances[from as Address] ?? {}\n for (const [to, transfer] of Object.entries(toMap)) {\n bigIntBalances[from as Address][to as Address] = (bigIntBalances[from as Address][to as Address] ?? 0n) + parseSignedBigInt(transfer)\n }\n }\n }\n\n const transfers: Record<Address, Record<Address, SignedBigInt>> = {}\n for (const [from, toMap] of Object.entries(bigIntBalances)) {\n transfers[from as Address] = transfers[from as Address] ?? {}\n for (const [to, transfer] of Object.entries(toMap)) {\n transfers[from as Address][to as Address] = toSignedBigInt(transfer)\n }\n }\n\n result = {\n schema: TransfersStepSummarySchema, hash: frameHeadHash, stepSize: frameSize, transfers,\n }\n\n await context.summaryMap.set(key, result)\n } finally {\n context.stepSemaphores[step].release()\n }\n }\n }\n // console.log(`transfersStepSummaryFromRange-result: head=${context.head}, range=${range[0]}-${range[1]}: ${toSafeJsonString(result, 10)}`)\n const finalResult = await PayloadBuilder.addStorageMeta(result)\n return finalResult\n}\n","import type { Address, Hash } from '@xylabs/sdk-js'\nimport {\n asAddress, isDefined, spanRootAsync,\n} from '@xylabs/sdk-js'\nimport {\n asBlockBoundWitnessWithStorageMeta, asXL1BlockNumber, asXL1BlockRange,\n} from '@xyo-network/xl1-protocol'\n\nimport { deepCalculateFramesFromRange } from '../../../block/index.ts'\nimport type { Qualified } from '../../../model/index.ts'\nimport { parseSignedBigInt } from '../../../SignedBigInt.ts'\nimport type { TransfersStepSummaryContext } from '../../index.ts'\nimport { transfersStepSummaryFromRange } from './transfersStepSummaryFromRange.ts'\n\n// the summary of amount of rewards claimed from the step reward pool by addresses\nexport async function transfersSummary(\n transferContext: TransfersStepSummaryContext,\n): Promise<Qualified<Record<Address, Record<Address, bigint>>>> {\n return await spanRootAsync('transferSummary', async () => {\n const [headHash] = await transferContext.head()\n const headResult = await transferContext.store.chainMap.get(headHash)\n const headBoundWitness = asBlockBoundWitnessWithStorageMeta(headResult, () => `Head block not found for hash: ${transferContext.head}`)\n const rangeStart = asXL1BlockNumber(isDefined(transferContext.windowSize) ? Math.max(headBoundWitness.block - transferContext.windowSize + 1, 0) : 0, true)\n const ranges = deepCalculateFramesFromRange(asXL1BlockRange(\n [rangeStart, headBoundWitness.block],\n { name: 'transfersSummary' },\n ))\n const summaries = await Promise.all(ranges.map(range => transfersStepSummaryFromRange(transferContext, range)))\n const transfers: Record<Address, Record<Address, bigint>> = {}\n for (let summary of summaries) {\n for (const [from, toMap] of Object.entries(summary.transfers)) {\n const validFrom = asAddress(from, () => `Invalid address: ${from}`)\n transfers[validFrom] = transfers[validFrom] ?? {}\n for (const [to, transfer] of Object.entries(toMap)) {\n const validTo = asAddress(to, () => `Invalid address: ${to}`)\n transfers[validFrom][validTo] = (transfers[validFrom][validTo] ?? 0n) + parseSignedBigInt(transfer)\n }\n }\n }\n return [transfers, [rangeStart, headBoundWitness.block], headHash]\n })\n}\n\nexport function transfersSummaryKey(frameHeadHash: Hash, frameSize: number) {\n return `${frameHeadHash}|${frameSize}`\n}\n","import type {\n Address, Hash, Promisable,\n} from '@xylabs/sdk-js'\nimport { WithHashMetaZod } from '@xyo-network/payload-model'\nimport {\n type AttoXL1,\n TransferZod,\n type XL1BlockRange,\n} from '@xyo-network/xl1-protocol'\nimport { BlockBoundWitnessZod, TransactionBoundWitnessZod } from '@xyo-network/xl1-protocol'\nimport z from 'zod'\n\nimport type {\n Provider,\n Qualified,\n} from '../model/index.ts'\n\nexport const AccountBalanceHistoryItemZod = z.tuple([\n WithHashMetaZod(BlockBoundWitnessZod),\n WithHashMetaZod(TransactionBoundWitnessZod).nullable(),\n WithHashMetaZod(TransferZod),\n])\n\nexport type AccountBalanceHistoryItem = z.infer<typeof AccountBalanceHistoryItemZod>\n\nexport interface AccountBalanceViewerMethods {\n qualifiedAccountBalanceHistories(\n address: Address[],\n headOrRange?: Hash | XL1BlockRange\n ): Promisable<Qualified<Record<Address, AccountBalanceHistoryItem[]>>>\n qualifiedAccountBalances(address: Address[], headOrRange?: Hash | XL1BlockRange): Promisable<Qualified<Record<Address, AttoXL1>>>\n}\n\nexport interface AccountBalanceViewer extends AccountBalanceViewerMethods, Provider<AccountBalanceViewerMoniker> {\n accountBalance(address: Address, headOrRange?: Hash | XL1BlockRange): Promisable<AttoXL1>\n accountBalanceHistories(address: Address[], headOrRange?: Hash | XL1BlockRange): Promisable<Record<Address, AccountBalanceHistoryItem[]>>\n accountBalanceHistory(address: Address, headOrRange?: Hash | XL1BlockRange): Promisable<AccountBalanceHistoryItem[]>\n accountBalances(address: Address[], headOrRange?: Hash | XL1BlockRange): Promisable<Record<Address, AttoXL1>>\n}\n\nexport const AccountBalanceViewerMoniker = 'AccountBalanceViewer' as const\nexport type AccountBalanceViewerMoniker = typeof AccountBalanceViewerMoniker\n","import type { Hash, Promisable } from '@xylabs/sdk-js'\nimport type { Payload, WithHashMeta } from '@xyo-network/payload-model'\nimport type { SignedHydratedBlockWithHashMeta, XL1BlockNumber } from '@xyo-network/xl1-protocol'\n\nimport type { Provider } from '../model/index.ts'\n\nexport interface BlockViewerMethods {\n blocksByHash(hash: Hash, limit?: number): Promisable<SignedHydratedBlockWithHashMeta[]>\n blocksByNumber(block: XL1BlockNumber, limit?: number): Promisable<SignedHydratedBlockWithHashMeta[]>\n currentBlock(): Promisable<SignedHydratedBlockWithHashMeta>\n payloadsByHash(hashes: Hash[]): Promisable<WithHashMeta<Payload>[]>\n}\n\nexport const BlockViewerMoniker = 'BlockViewer' as const\nexport type BlockViewerMoniker = typeof BlockViewerMoniker\n\nexport interface BlockViewer extends BlockViewerMethods, Provider<BlockViewerMoniker> {\n blockByHash(hash: Hash): Promisable<SignedHydratedBlockWithHashMeta | null>\n blockByNumber(block: XL1BlockNumber): Promisable<SignedHydratedBlockWithHashMeta | null>\n currentBlockHash(): Promisable<Hash>\n currentBlockNumber(): Promisable<XL1BlockNumber>\n payloadByHash(hash: Hash): Promisable<WithHashMeta<Payload> | null>\n}\n","import type { Promisable } from '@xylabs/sdk-js'\nimport type { AttoXL1, XL1BlockNumber } from '@xyo-network/xl1-protocol'\n\nimport type { Provider } from '../model/index.ts'\n\nexport interface BlockRewardViewerMethods {\n // The amount of xl1 to send to the producer from the block reward\n allowedRewardForBlock(block: XL1BlockNumber): Promisable<AttoXL1>\n}\n\nexport const BlockRewardViewerMoniker = 'BlockRewardViewer' as const\nexport type BlockRewardViewerMoniker = typeof BlockRewardViewerMoniker\n\nexport interface BlockRewardViewer extends BlockRewardViewerMethods, Provider<BlockRewardViewerMoniker> {}\n","import type { Promisable } from '@xylabs/sdk-js'\nimport type { ChainId } from '@xyo-network/xl1-protocol'\n\nimport type { Provider } from '../model/index.ts'\n\nexport interface ChainViewerMethods {\n chainId(): Promisable<ChainId>\n}\n\nexport const ChainViewerMoniker = 'ChainViewer' as const\nexport type ChainViewerMoniker = typeof ChainViewerMoniker\n\nexport interface ChainViewer extends ChainViewerMethods, Provider<ChainViewerMoniker> {}\n","import type { Address } from '@xylabs/sdk-js'\n\nimport type { Provider } from '../model/index.ts'\n\nexport interface ChainContractViewerMethods {\n forkedAtBlockNumber(): Promise<bigint>\n forkedAtHash(): Promise<bigint>\n forkedChainId(): Promise<Address>\n minWithdrawalBlocks(): Promise<bigint>\n rewardsContract(): Promise<string>\n stakingTokenAddress(): Promise<string>\n}\n\nexport const ChainContractViewerMoniker = 'ChainContractViewer' as const\nexport type ChainContractViewerMoniker = typeof ChainContractViewerMoniker\n\nexport interface ChainContractViewer extends ChainContractViewerMethods, Provider<ChainContractViewerMoniker> {}\n","import type { Provider } from '../model/index.ts'\nimport type { ChainViewer } from './Chain.ts'\nimport type { ChainContractViewer } from './ChainContract.ts'\nimport type { StakeTotalsViewer } from './StakeTotals.ts'\n\nexport const ChainStakeViewerMoniker = 'ChainStakeViewer' as const\nexport type ChainStakeViewerMoniker = typeof ChainStakeViewerMoniker\n\nexport interface ChainStakeViewer extends Omit<ChainContractViewer, 'moniker'>, Omit<StakeTotalsViewer, 'moniker'>,\n Omit<ChainViewer, 'moniker'>, Provider<ChainStakeViewerMoniker> {\n\n}\n","import { HashZod } from '@xylabs/sdk-js'\nimport type { SignedHydratedBlockWithHashMeta, SignedHydratedTransactionWithHashMeta } from '@xyo-network/xl1-protocol'\nimport { XL1BlockRangeZod } from '@xyo-network/xl1-protocol'\nimport z from 'zod'\n\nimport type { Provider } from '../model/index.ts'\n\nexport const PendingTransactionsOptionsZod = z.object({\n cursor: HashZod.optional(),\n limit: z.number().int().positive().optional(),\n window: XL1BlockRangeZod.optional(),\n})\n\nexport type PendingTransactionsOptions = z.infer<typeof PendingTransactionsOptionsZod>\n\nexport const PendingBlocksOptionsZod = z.object({\n cursor: HashZod.optional(),\n limit: z.number().int().positive().optional(),\n window: XL1BlockRangeZod.optional(),\n})\n\nexport type PendingBlocksOptions = z.infer<typeof PendingBlocksOptionsZod>\n\nexport interface MempoolViewerMethods {\n pendingBlocks(options?: PendingBlocksOptions): Promise<SignedHydratedBlockWithHashMeta[]>\n pendingTransactions(options?: PendingTransactionsOptions): Promise<SignedHydratedTransactionWithHashMeta[]>\n}\n\nexport const MempoolViewerMoniker = 'MempoolViewer' as const\nexport type MempoolViewerMoniker = typeof MempoolViewerMoniker\n\nexport interface MempoolViewer extends MempoolViewerMethods, Provider<MempoolViewerMoniker> {}\n","import type { Address, Promisable } from '@xylabs/sdk-js'\nimport type { StepIdentity, StepIdentityString } from '@xyo-network/xl1-protocol'\n\nimport type { Provider } from '../model/index.ts'\n\nexport interface NetworkStakeStepAddressRewardViewerMethods {\n // the step rewards for a specific network stakers for all of history\n networkStakeStepRewardAddressHistory(address: Address): Promisable<Record<Address, bigint>>\n\n // the step rewards for a specific network stakers for a given step and block\n networkStakeStepRewardAddressReward(context: StepIdentity, address: Address): Promisable<Record<Address, bigint>>\n\n // the shares for a specific network staker for a given step and block\n networkStakeStepRewardAddressShare(context: StepIdentity, address: Address): Promisable<[/* address shares */bigint, /* total shares */bigint]>\n\n // estimate the current reward weight for a given address at a given step\n networkStakeStepRewardWeightForAddress(context: StepIdentity, address: Address): Promisable<bigint>\n}\n\nexport interface NetworkStakeStepPoolRewardViewerMethods {\n\n // all the step rewards for all the network stakers for a given step and block\n networkStakeStepRewardPoolRewards(context: StepIdentity): Promisable<Record<Address, bigint>>\n\n // all the shares for all the network stakers for a given step and block\n networkStakeStepRewardPoolShares(context: StepIdentity): Promisable<Record<Address, bigint>>\n}\n\nexport interface NetworkStakeStepRewardPositionViewerMethods {\n // estimate the current weight for a given position at a given step\n networkStakeStepRewardPositionWeight(context: StepIdentity, position: number): Promisable<bigint>\n\n // estimate the potential loss for removing a given position at a given step\n networkStakeStepRewardPotentialPositionLoss(context: StepIdentity, position: number): Promisable<bigint>\n}\n\nexport interface NetworkStakeStepRewardViewerMethods extends\n NetworkStakeStepPoolRewardViewerMethods,\n NetworkStakeStepAddressRewardViewerMethods,\n NetworkStakeStepRewardPositionViewerMethods\n{\n networkStakeStepRewardClaimedByAddress(address: Address): Promisable<bigint>\n\n // the share & total rewards for a given position\n networkStakeStepRewardForPosition(position: number, range: [number, number]): Promisable<[bigint, bigint]>\n\n // estimate the total possible block rewards for a given step\n networkStakeStepRewardForStep(context: StepIdentity): Promisable<bigint>\n\n // the share & total rewards for a given step and block for a given position\n networkStakeStepRewardForStepForPosition(context: StepIdentity, position: number): Promisable<[bigint, bigint]>\n\n // the predictable random number for a given step and block\n networkStakeStepRewardRandomizer(context: StepIdentity): Promisable<bigint>\n\n // the total number of stakers for a given step and block\n networkStakeStepRewardStakerCount(context: StepIdentity): Promisable<number>\n\n networkStakeStepRewardUnclaimedByAddress(address: Address): Promisable<bigint>\n\n // the share & total rewards for a given position for each step in range\n networkStakeStepRewardsForPosition(position: number,\n range: [number, number]): Promisable<Record<StepIdentityString, [bigint, bigint]>>\n\n // the total rewards for a given range\n networkStakeStepRewardsForRange(range: [number, number]): Promisable<bigint>\n\n // the total rewards for a given range and step level\n networkStakeStepRewardsForStepLevel(stepLevel: number, range: [number, number]): Promisable<bigint>\n}\n\nexport const NetworkStakeStepRewardViewerMoniker = 'NetworkStakeStepRewardViewer' as const\nexport type NetworkStakeStepRewardViewerMoniker = typeof NetworkStakeStepRewardViewerMoniker\n\nexport interface NetworkStakeStepRewardViewer extends NetworkStakeStepRewardViewerMethods, Provider<NetworkStakeStepRewardViewerMoniker> {}\n","import type { Address, Promisable } from '@xylabs/sdk-js'\n\nimport type { Position, Provider } from '../model/index.ts'\nimport type { StakeEventsViewer } from './StakeEvents.ts'\n\nexport interface StakeViewerProperties {\n chainId: Address\n minWithdrawalBlocks: number\n rewardsContract: Address\n stakeEvents: StakeEventsViewer\n stakingTokenAddress: Address\n}\n\nexport interface StakeViewerMethods {\n stakeById(id: number): Promisable<Position>\n stakeByStaker(staker: Address, slot: number): Promisable<Position>\n stakesByStaked(staked: Address): Promisable<Position[]>\n stakesByStaker(staker: Address): Promisable<Position[]>\n}\n\nexport const StakeViewerMoniker = 'StakeViewer' as const\nexport type StakeViewerMoniker = typeof StakeViewerMoniker\n\nexport interface StakeViewer extends StakeViewerMethods, StakeViewerProperties, Provider<StakeViewerMoniker> {\n active(time?: number): Promisable<bigint>\n activeByAddressStaked(address: string, time?: number): Promisable<bigint>\n activeByStaker(address: string, time?: number): Promisable<bigint>\n pending(time?: number): Promisable<bigint>\n pendingByStaker(staker: string, time?: number): Promisable<bigint>\n withdrawn(time?: number): Promisable<bigint>\n withdrawnByStaker(staker: string, time?: number): Promisable<bigint>\n}\n\nexport const StakeRunnerMoniker = 'StakeRunner' as const\nexport type StakeRunnerMoniker = typeof StakeRunnerMoniker\n\nexport interface StakeRunner extends Provider<StakeRunnerMoniker> {\n addStake(staked: string, amount: bigint): Promise<boolean>\n removeStake(slot: bigint): Promise<boolean>\n withdrawStake(slot: bigint): Promise<boolean>\n}\n","import type {\n Address, JsonObject, Promisable,\n} from '@xylabs/sdk-js'\n\nimport type { Provider } from '../model/index.ts'\n\nexport const StakeEventNames = ['StakeAdded', 'StakeRemoved', 'StakeWithdrawn'] as const\nexport type StakeEventName = typeof StakeEventNames[number]\n\nexport interface ExternalEvent<TName extends string = string, TArgs extends JsonObject = {}> {\n args: TArgs\n name: TName\n time: number // usually block number\n}\n\nexport interface EventFilter<TName extends string = string> {\n name?: TName\n time?: [number, number]\n}\n\nexport interface StakeEventArgs {\n amount: bigint\n id: number\n staked: Address\n staker: Address\n}\n\nexport type StakeEventFilterArgs = Partial<Pick<StakeEventArgs, 'staker' | 'staked' | 'id'>>\n\nexport interface StakeEventFilter<TName extends StakeEventName = StakeEventName> extends EventFilter<TName> {\n args?: StakeEventFilterArgs\n}\n\nexport interface StakeEvent<TName extends StakeEventName = StakeEventName> extends ExternalEvent<TName> {\n args: StakeEventArgs\n}\n\nexport const StakeEventsViewerMoniker = 'StakeEventsViewer' as const\nexport type StakeEventsViewerMoniker = typeof StakeEventsViewerMoniker\n\nexport interface StakeEventsViewer extends Provider<StakeEventsViewerMoniker> {\n positionCount(range: [number, number | 'latest']): Promisable<number>\n stakeEvents<TName extends StakeEventName>(range: [number, number | 'latest'], filter?: StakeEventFilter<TName>): Promisable<StakeEvent<TName>[]>\n}\n","import type { Address, Promisable } from '@xylabs/sdk-js'\n\nimport type { Provider } from '../model/index.ts'\n\nexport interface StakeTotalsViewerMethods {\n active(): Promisable<bigint>\n activeByStaked(staked: Address): Promisable<bigint>\n activeByStaker(address: Address): Promisable<bigint>\n pending(): Promisable<bigint>\n pendingByStaker(staker: Address): Promisable<bigint>\n withdrawn(): Promisable<bigint>\n withdrawnByStaker(staker: Address): Promisable<bigint>\n}\n\nexport const StakeTotalsViewerMoniker = 'StakeTotalsViewer' as const\nexport type StakeTotalsViewerMoniker = typeof StakeTotalsViewerMoniker\n\nexport interface StakeTotalsViewer extends StakeTotalsViewerMethods, Provider<StakeTotalsViewerMoniker> {}\n","import type { Address, Promisable } from '@xylabs/sdk-js'\nimport type { StepIdentity } from '@xyo-network/xl1-protocol'\n\nimport type { Provider } from '../model/index.ts'\n\nexport interface StepStakeViewerMethods {\n // this is the prorated stake for all addresses in the step\n stepStake: (step: StepIdentity) => Promisable<Record<Address, bigint>>\n\n // this is the prorated stake for a specific address in the step\n stepStakeForAddress: (address: Address, step: StepIdentity) => Promisable<bigint>\n}\n\n/* Prorated stake is the amount of stake that is allocated to a specific step\n based on the total stake and the number of steps. This is used to ensure\n that the stake is distributed fairly among all steps.\n\n The simplest way to calculate it is to enumerate every XL1 block in the step add the current stake at that point to a counter.\n For example, if an Address had a stake of 100 for the entire time, then the prorated stake would be 100 * number of blocks in the step.\n*/\n\nexport const StepStakeViewerMoniker = 'StepStakeViewer' as const\nexport type StepStakeViewerMoniker = typeof StepStakeViewerMoniker\n\nexport interface StepStakeViewer extends StepStakeViewerMethods, Provider<StepStakeViewerMoniker> {}\n","import type { Address, Promisable } from '@xylabs/sdk-js'\nimport type { PositionId, StepIdentity } from '@xyo-network/xl1-protocol'\n\nimport type { Position, Provider } from '../model/index.ts'\nimport type { NetworkStakeStepRewardsViewer } from '../provider/index.ts'\n\nexport interface PagedPositionsOptions {\n cursor?: PositionId\n limit?: number\n}\n\nexport interface PagedStakersOptions {\n cursor?: Address\n limit?: number\n}\n\nexport interface StepStatistics {\n endTime: number\n startTime: number\n}\n\nexport interface StepViewerMethods {\n\n // the total number of positions for a given step\n positionCount(step: StepIdentity): Promisable<number>\n\n positions(step: StepIdentity, options?: PagedPositionsOptions): Promisable<Position[]>\n\n // the predictable random number for a given step\n randomizer(step: StepIdentity): Promisable<bigint>\n\n // total amount staked during a given step\n stake(step: StepIdentity): Promisable<bigint>\n\n // the total number of stakers for a given step\n stakerCount(step: StepIdentity): Promisable<number>\n\n stakers(step: StepIdentity, options?: PagedStakersOptions): Promisable<Address[]>\n\n // if no positionId is supplied, returns the total stake weight for the step\n weight(step: StepIdentity, positionId?: PositionId): Promisable<bigint>\n}\n\nexport const StepViewerMoniker = 'StepViewer' as const\nexport type StepViewerMoniker = typeof StepViewerMoniker\n\nexport interface StepViewer extends StepViewerMethods, Provider<StepViewerMoniker> {\n rewards?: NetworkStakeStepRewardsViewer\n}\n","import type { Promisable } from '@xylabs/sdk-js'\nimport type { TimeDomain, TimePayload } from '@xyo-network/xl1-protocol'\n\nimport type { Provider } from '../model/index.ts'\n\nexport interface TimeSyncViewerMethods {\n /** Convert time between different domains */\n convertTime(fromDomain: TimeDomain, toDomain: TimeDomain, from: number): Promisable<number>\n\n /** Get the current time for a given domain */\n currentTime(domain: TimeDomain): Promisable<[string, number]>\n\n /** Get the current time for a given domain */\n currentTimeAndHash(domain: TimeDomain): Promisable<[number, string | null]>\n\n /** Create a TimePayload with the current time from all configured domains */\n currentTimePayload(): Promisable<TimePayload>\n}\n\nexport const TimeSyncViewerMoniker = 'TimeSyncViewer' as const\nexport type TimeSyncViewerMoniker = typeof TimeSyncViewerMoniker\n\nexport interface TimeSyncViewer extends TimeSyncViewerMethods, Provider<TimeSyncViewerMoniker> {}\n","import type { Address, Promisable } from '@xylabs/sdk-js'\nimport type { Signed } from '@xyo-network/boundwitness-model'\nimport type {\n AttoXL1,\n BlockBoundWitness, TransactionBoundWitness, Transfer,\n XL1BlockRange,\n} from '@xyo-network/xl1-protocol'\n\nimport type { Provider } from '../model/index.ts'\n\nexport type TransferBalanceHistoryItem = [\n Signed<BlockBoundWitness> /* block */,\n Signed<TransactionBoundWitness> | null,\n Transfer, /* the actual transfer payload */\n]\nexport type TransferPair = [Address, Address]\n\nexport interface TransferBalancesViewerMethods {\n transferBalances(address: Address[]): Promisable<Partial<Record<Address, Record<Address, AttoXL1>>>>\n transferBalancesHistories(address: Address[]): Promisable<Partial<Record<Address, Record<Address, TransferBalanceHistoryItem[]>>>>\n transferPairBalances(address: TransferPair[]): Promisable<Partial<Record<Address, Record<Address, AttoXL1>>>>\n transferPairBalancesHistories(address: TransferPair[]): Promisable<Partial<Record<Address, Record<Address, TransferBalanceHistoryItem[]>>>>\n}\n\nexport const TransferBalanceViewerMoniker = 'TransferBalanceViewer' as const\nexport type TransferBalanceViewerMoniker = typeof TransferBalanceViewerMoniker\n\nexport interface TransferBalanceViewer extends TransferBalancesViewerMethods, Provider<TransferBalanceViewerMoniker> {\n transferBalance(address: Address): Promisable<AttoXL1>\n transferBalanceHistory(address: Address, range?: XL1BlockRange): Promisable<TransferBalanceHistoryItem[]>\n transferPairBalance(address: TransferPair): Promisable<AttoXL1>\n transferPairBalanceHistory(address: TransferPair): Promisable<TransferBalanceHistoryItem[]>\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport {\n assertEx,\n exists,\n isDefined,\n spanRootAsync,\n} from '@xylabs/sdk-js'\nimport type { ReadArchivist } from '@xyo-network/archivist-model'\nimport type { Payload, WithHashMeta } from '@xyo-network/payload-model'\nimport {\n asSignedHydratedBlockWithHashMeta,\n asXL1BlockNumber,\n type SignedHydratedBlockWithHashMeta,\n type XL1BlockNumber,\n} from '@xyo-network/xl1-protocol'\n\nimport { hydrateBlock } from '../../block/index.ts'\nimport type { CreatableProviderParams } from '../../CreatableProvider/index.ts'\nimport { AbstractCreatableProvider, creatableProvider } from '../../CreatableProvider/index.ts'\nimport { LruCacheMap } from '../../driver/index.ts'\nimport type {\n ChainContextRead,\n ChainStoreRead, PayloadMap,\n} from '../../model/index.ts'\nimport { findMostRecentBlock, hydratedBlockByNumber } from '../../primitives/index.ts'\nimport { HydratedCache } from '../../utils/index.ts'\nimport { type BlockViewer, BlockViewerMoniker } from '../../viewers/index.ts'\n\nexport interface SimpleBlockViewerParams extends CreatableProviderParams {\n context: ChainContextRead\n finalizedArchivist: ReadArchivist\n}\n\n@creatableProvider()\nexport class SimpleBlockViewer extends AbstractCreatableProvider<SimpleBlockViewerParams> implements BlockViewer {\n static readonly defaultMoniker = BlockViewerMoniker\n static readonly monikers = [BlockViewerMoniker]\n moniker = SimpleBlockViewer.defaultMoniker\n\n private _payloadCache: PayloadMap<WithHashMeta<Payload>> | undefined\n private _signedHydratedBlockCache: HydratedCache<SignedHydratedBlockWithHashMeta> | undefined\n\n get context(): ChainContextRead {\n return this.params.context!\n }\n\n get finalizedArchivist(): ReadArchivist {\n return this.params.finalizedArchivist!\n }\n\n protected get hydratedBlockCache(): HydratedCache<SignedHydratedBlockWithHashMeta> {\n if (this._signedHydratedBlockCache) return this._signedHydratedBlockCache\n const chainMap = this.context.store.chainMap\n this._signedHydratedBlockCache = new HydratedCache<SignedHydratedBlockWithHashMeta>(chainMap, async (\n { chainMap }: ChainStoreRead,\n hash: Hash,\n maxDepth?: number,\n minDepth?: number,\n ) => {\n const result = await hydrateBlock({ chainMap }, hash, maxDepth, minDepth)\n return asSignedHydratedBlockWithHashMeta(result, true)\n }, 200)\n return this._signedHydratedBlockCache\n }\n\n protected get payloadCache(): PayloadMap<WithHashMeta<Payload>> {\n if (this._payloadCache) return this._payloadCache\n this._payloadCache = new LruCacheMap<Hash, WithHashMeta<Payload>>({ max: 10_000 })\n return this._payloadCache\n }\n\n static override async paramsHandler(params: Partial<SimpleBlockViewerParams>) {\n assertEx(params.context, () => 'context is required')\n assertEx(params.finalizedArchivist, () => 'finalizedArchivist is required')\n\n return { ...await super.paramsHandler(params) }\n }\n\n async blockByHash(hash: Hash): Promise<SignedHydratedBlockWithHashMeta | null> {\n return await spanRootAsync('blockByHash', async () => {\n const cache = this.hydratedBlockCache\n return await cache.get(hash)\n }, this.tracer)\n }\n\n async blockByNumber(blockNumber: XL1BlockNumber): Promise<SignedHydratedBlockWithHashMeta | null> {\n return await spanRootAsync('blockByNumber', async () => {\n return asSignedHydratedBlockWithHashMeta(await hydratedBlockByNumber(this.context, blockNumber)) ?? null\n }, this.tracer)\n }\n\n async blocksByHash(hash: Hash, limit = 50): Promise<SignedHydratedBlockWithHashMeta[]> {\n return await spanRootAsync('blocksByHash', async () => {\n assertEx(limit > 0, () => 'limit must be greater than 0')\n assertEx(limit <= 100, () => 'limit must be less than 100')\n const blocks: SignedHydratedBlockWithHashMeta[] = []\n let current = await this.blockByHash(hash)\n while (current && blocks.length < limit) {\n blocks.push(current)\n const previousHash = current[0].previous\n if (previousHash === null) break\n current = await this.blockByHash(previousHash)\n }\n return blocks.map(b => asSignedHydratedBlockWithHashMeta(b, true))\n }, this.tracer)\n }\n\n async blocksByNumber(blockNumber: XL1BlockNumber, limit = 50): Promise<SignedHydratedBlockWithHashMeta[]> {\n return await spanRootAsync('blocksByHash', async () => {\n assertEx(limit > 0, () => 'limit must be greater than 0')\n assertEx(limit <= 100, () => 'limit must be less than 100')\n const blocks: SignedHydratedBlockWithHashMeta[] = []\n let current = await this.blockByNumber(blockNumber)\n while (current && blocks.length < limit) {\n blocks.push(current)\n if (current[0].block === 0) break\n const previousNumber = asXL1BlockNumber(current[0].block - 1, true)\n current = await this.blockByNumber(previousNumber)\n }\n return blocks.map(b => asSignedHydratedBlockWithHashMeta(b, true))\n }, this.tracer)\n }\n\n async currentBlock(): Promise<SignedHydratedBlockWithHashMeta> {\n return await spanRootAsync('currentBlock', async () => {\n const currentHead = assertEx(await this.getCurrentHead(), () => 'Could not find most recent block')\n const cache = this.hydratedBlockCache\n const block = await cache.get(currentHead._hash)\n if (!block) {\n console.log(`Could not find current block with hash ${currentHead!._hash}`)\n }\n return assertEx(block, () => 'Could not find current block')\n }, this.tracer)\n }\n\n async currentBlockHash(): Promise<Hash> {\n return await spanRootAsync('currentBlockHash', async () => {\n const currentHead = assertEx(await this.getCurrentHead(), () => 'Could not find most recent block')\n return currentHead._hash\n }, this.tracer)\n }\n\n async currentBlockNumber(): Promise<XL1BlockNumber> {\n return await spanRootAsync('currentBlockNumber', async () => {\n const currentHead = assertEx(await this.getCurrentHead(), () => 'Could not find most recent block')\n return asXL1BlockNumber(currentHead.block, { name: 'currentBlockNumber' })\n }, this.tracer)\n }\n\n async payloadByHash(hash: Hash): Promise<WithHashMeta<Payload> | null> {\n const cachedPayload = await this.payloadCache.get(hash)\n if (cachedPayload) {\n return cachedPayload\n } else {\n const [result] = await this.finalizedArchivist.get([hash])\n if (isDefined(result)) {\n await this.payloadCache.set(hash, result)\n }\n return result ?? null\n }\n }\n\n async payloadsByHash(hashes: Hash[]): Promise<WithHashMeta<Payload>[]> {\n let remainingHashes = [...hashes]\n const cachedPayloads = await this.payloadCache.getMany(remainingHashes)\n const cachedHashes = new Set(cachedPayloads.map(p => p._hash))\n remainingHashes = remainingHashes.filter(h => !cachedHashes.has(h))\n const remainingPayloads = remainingHashes.length > 0\n ? await this.finalizedArchivist.get(remainingHashes)\n : []\n return [...cachedPayloads, ...remainingPayloads.filter(exists)]\n }\n\n protected async getCurrentHead() {\n const chainArchivist = this.finalizedArchivist\n return await findMostRecentBlock(chainArchivist)\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport { LRUCache } from 'lru-cache'\n\nimport type { PayloadMapRead } from '../model/index.ts'\n\nexport type HydrateFunction<T> = (\n context: { chainMap: PayloadMapRead<WithStorageMeta<Payload>> },\n hash: Hash,\n) => Promise<T | undefined>\n\nexport class HydratedCache<T extends {}> {\n protected readonly cache: LRUCache<Hash, T>\n protected readonly chainMap: PayloadMapRead<WithStorageMeta<Payload>>\n protected readonly hydrateFunction: HydrateFunction<T>\n\n constructor(\n chainMap: PayloadMapRead<WithStorageMeta<Payload>>,\n hydrateFunction: HydrateFunction<T>,\n maxSize: number = 200,\n ) {\n this.chainMap = chainMap\n this.hydrateFunction = hydrateFunction\n this.cache = new LRUCache<Hash, T>({ max: maxSize })\n }\n\n async get(hash: Hash): Promise<T | null> {\n const existing = this.cache.get(hash)\n if (existing !== undefined) return existing\n const block = (await this.hydrateFunction({ chainMap: this.chainMap }, hash)) ?? null\n if (block !== null) this.cache.set(hash, block)\n return block\n }\n\n has(hash: Hash): boolean {\n return this.cache.has(hash)\n }\n}\n","import * as z from 'zod'\n\nexport const isZodError = (error: unknown): error is z.ZodError => {\n return error instanceof z.ZodError\n}\n\nexport const prettifyZodError = (error: z.ZodError): string => {\n return z.prettifyError(error)\n}\n","import { Promisable } from '@xylabs/sdk-js'\nimport { AttoXL1, XL1BlockNumber } from '@xyo-network/xl1-protocol'\n\nimport {\n AbstractCreatableProvider, creatableProvider, CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\nimport { rewardFromBlockNumber } from '../../primitives/index.ts'\nimport { BlockRewardViewer, BlockRewardViewerMoniker } from '../../viewers/index.ts'\n\nexport interface SimpleBlockRewardViewerParams extends CreatableProviderParams {\n creatorReward: AttoXL1\n initialReward: AttoXL1\n minRewardPerBlock: AttoXL1\n stepFactorDenominator: bigint\n stepFactorNumerator: bigint\n stepSize: XL1BlockNumber\n}\n\n@creatableProvider()\nexport class SimpleBlockRewardViewer extends AbstractCreatableProvider<SimpleBlockRewardViewerParams> implements BlockRewardViewer {\n static readonly defaultMoniker = BlockRewardViewerMoniker\n static readonly monikers = [BlockRewardViewerMoniker]\n moniker = SimpleBlockRewardViewer.defaultMoniker\n\n protected rewardFromBlockNumber = rewardFromBlockNumber(18)\n\n allowedRewardForBlock(block: XL1BlockNumber): Promisable<AttoXL1> {\n return this.rewardFromBlockNumber(\n block,\n this.params.initialReward,\n this.params.stepSize,\n this.params.stepFactorNumerator,\n this.params.stepFactorDenominator,\n this.params.minRewardPerBlock,\n this.params.creatorReward,\n )\n }\n}\n","import {\n type Address, asAddress, toAddress,\n} from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport { Account } from '@xyo-network/account'\n\nimport {\n AbstractCreatableProvider, creatableProvider, CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\nimport { PayloadMap, Position } from '../../model/index.ts'\nimport {\n StakeEventsViewer, StakeViewer, StakeViewerMoniker,\n} from '../../viewers/index.ts'\nimport { SimpleChainStakeEventsViewer } from '../chainStakeEvents/index.ts'\n\nexport interface SimpleChainStakeParams extends CreatableProviderParams {\n chainId?: Address\n chainMap: PayloadMap\n minWithdrawalBlocks?: number\n positions: Position[]\n}\n\n@creatableProvider()\nexport class SimpleChainStakeViewer extends AbstractCreatableProvider<SimpleChainStakeParams> implements StakeViewer {\n static readonly defaultMoniker = StakeViewerMoniker\n static readonly monikers = [StakeViewerMoniker]\n moniker = SimpleChainStakeViewer.defaultMoniker\n\n private _chainId: Address | undefined\n private _chainStakeEventsViewer: StakeEventsViewer | undefined\n\n get chainId(): Address {\n return assertEx(this._chainId, () => 'Chain ID not set')\n }\n\n get chainMap() {\n return this.params.chainMap\n }\n\n get minWithdrawalBlocks(): number {\n return this.params.minWithdrawalBlocks ?? 10\n }\n\n get rewardsContract(): Address {\n return toAddress(toAddress(1n))\n }\n\n get stakeEvents() {\n return assertEx(this._chainStakeEventsViewer, () => 'Stake events viewer not set')\n }\n\n get stakingTokenAddress(): Address {\n return toAddress('0x000000000000000000000000000011')\n }\n\n protected get positions() {\n return this.params.positions\n }\n\n active(): bigint {\n let active = 0n\n for (const position of this.positions) {\n if (position.removeBlock === 0) {\n active += position.amount\n }\n }\n return active\n }\n\n activeByAddressStaked(staked: Address): bigint {\n let active = 0n\n for (const position of this.positions) {\n if (position.removeBlock === 0 && asAddress(position.staked) === asAddress(staked)) {\n active += position.amount\n }\n }\n return active\n }\n\n activeByStaker(staker: Address): bigint {\n let active = 0n\n for (const position of this.positions) {\n if (position.removeBlock === 0 && asAddress(position.staker) === asAddress(staker)) {\n active += position.amount\n }\n }\n return active\n }\n\n pending(): bigint {\n let pending = 0n\n for (const position of this.positions) {\n if (position.removeBlock !== 0 && position.withdrawBlock === 0) {\n pending += position.amount\n }\n }\n return pending\n }\n\n pendingByStaker(staker: Address): bigint {\n let pending = 0n\n for (const position of this.positions) {\n if (position.removeBlock !== 0 && position.withdrawBlock === 0 && asAddress(position.staker) === asAddress(staker)) {\n pending += position.amount\n }\n }\n return pending\n }\n\n stakeById(id: number): Position {\n return assertEx(this.positions[id], () => new Error(`Stake with id ${id} not found`))\n }\n\n stakeByStaker(staker: Address, slot: number): Position {\n return this.positions.filter(s => asAddress(s.staker) === asAddress(staker))[slot]\n }\n\n stakesByStaked(staked: Address, range: [number, number | undefined] = [0, undefined]): Position[] {\n const endBlock = (range[1] ?? Number.MAX_SAFE_INTEGER)\n return this.positions.filter(s => asAddress(s.staked) === asAddress(staked) && s.addBlock <= endBlock && s.removeBlock <= endBlock)\n }\n\n stakesByStaker(staker: Address, range: [number, number | undefined] = [0, undefined]): Position[] {\n const endBlock = (range[1] ?? Number.MAX_SAFE_INTEGER)\n return this.positions.filter(s => asAddress(s.staker) === asAddress(staker) && s.addBlock <= endBlock && s.removeBlock <= endBlock)\n }\n\n withdrawn(): bigint {\n let withdrawn = 0n\n for (const position of this.positions) {\n if (position.withdrawBlock !== 0) {\n withdrawn += position.amount\n }\n }\n return withdrawn\n }\n\n withdrawnByStaker(staker: Address): bigint {\n let withdrawn = 0n\n for (const position of this.positions) {\n if (position.withdrawBlock !== 0 && asAddress(position.staker) === asAddress(staker)) {\n withdrawn += position.amount\n }\n }\n return withdrawn\n }\n\n protected override async startHandler(): Promise<void> {\n await super.startHandler()\n this._chainId = this.params.chainId ?? (await Account.random()).address\n this._chainStakeEventsViewer = await SimpleChainStakeEventsViewer.create({ positions: this.positions })\n }\n}\n","import { isDefined } from '@xylabs/sdk-js'\n\nimport {\n AbstractCreatableProvider, creatableProvider, CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\nimport { Position } from '../../model/index.ts'\nimport {\n StakeEvent, StakeEventFilter, StakeEventName, StakeEventsViewer,\n StakeEventsViewerMoniker,\n} from '../../viewers/index.ts'\n\nexport interface SimpleChainStakeEventsParams extends CreatableProviderParams {\n positions: Position[]\n}\n\n@creatableProvider()\nexport class SimpleChainStakeEventsViewer extends AbstractCreatableProvider<SimpleChainStakeEventsParams> implements StakeEventsViewer {\n static readonly defaultMoniker = StakeEventsViewerMoniker\n static readonly monikers = [StakeEventsViewerMoniker]\n moniker = SimpleChainStakeEventsViewer.defaultMoniker\n\n protected get positions() {\n return this.params.positions\n }\n\n positionCount(range: [number, number | 'latest']): number {\n return this.positionsFromRange(range).length\n }\n\n stakeEvents<TName extends StakeEventName>(range: [number, number | 'latest'], { name }: StakeEventFilter<TName> = {}): StakeEvent<TName>[] {\n const positions = this.positionsFromRange(range)\n const events = this.eventsFromPositions(positions)\n if (isDefined(name)) {\n return events.filter((event): event is StakeEvent<TName> => event.name === name)\n }\n return events as StakeEvent<TName>[]\n }\n\n protected override async startHandler(): Promise<void> {\n await super.startHandler()\n }\n\n private eventsFromPositions(positions: Position[]): StakeEvent<StakeEventName>[] {\n const events = positions.map((position) => {\n const events: StakeEvent<StakeEventName>[] = [{\n name: 'StakeAdded',\n time: position.addBlock,\n args: {\n staker: position.staker,\n staked: position.staked,\n amount: position.amount,\n id: position.id,\n },\n }]\n if (position.removeBlock !== 0) {\n events.push({\n name: 'StakeRemoved',\n time: position.removeBlock,\n args: {\n staker: position.staker,\n staked: position.staked,\n amount: position.amount,\n id: position.id,\n },\n })\n }\n if (position.withdrawBlock !== 0) {\n events.push({\n name: 'StakeWithdrawn',\n time: position.withdrawBlock,\n args: {\n staker: position.staker,\n staked: position.staked,\n amount: position.amount,\n id: position.id,\n },\n })\n }\n return events\n })\n return events.flat()\n }\n\n private positionsFromRange(range: [number, number | 'latest']): Position[] {\n const startBlock = range[0]\n const endBlock = range[1] === 'latest' ? Number.MAX_SAFE_INTEGER : range[1]\n const filteredPositions = this.positions.filter((position) => {\n return position.addBlock <= endBlock && (position.removeBlock === 0 || position.removeBlock >= startBlock)\n })\n return filteredPositions\n }\n}\n","import type {\n XyoClient, XyoGatewayRunner, XyoPermissions,\n} from '../../provider/index.ts'\n\nexport class SimpleXyoClient implements XyoClient {\n gateways: Readonly<Partial<Record<string, XyoGatewayRunner>>>\n permissions: XyoPermissions\n\n constructor(gateways: Readonly<Partial<Record<string, XyoGatewayRunner>>>, permissions: XyoPermissions) {\n this.gateways = gateways\n this.permissions = permissions\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { isAnyPayload, type Schema } from '@xyo-network/payload-model'\n\nimport { AbstractCreatableProvider, type CreatableProviderParams } from '../../CreatableProvider/index.ts'\nimport type { MapTypeRead, MapTypeWrite } from '../../map/index.ts'\nimport { type DataLakeData } from '../../provider/index.ts'\n\nexport interface AbstractSimpleDataLakeParams<TMap extends\n MapTypeRead<Hash, DataLakeData> | MapTypeWrite<Hash, DataLakeData> = MapTypeRead<Hash, DataLakeData> | MapTypeWrite<Hash, DataLakeData>> extends\n CreatableProviderParams {\n\n allowedSchemas?: Schema[]\n disallowedSchemas?: Schema[]\n map: TMap\n}\n\nexport class AbstractSimpleDataLake<TParams extends AbstractSimpleDataLakeParams = AbstractSimpleDataLakeParams> extends AbstractCreatableProvider<TParams> {\n get allowedSchemas(): Schema[] | undefined {\n return this.params.allowedSchemas\n }\n\n get disallowedSchemas(): Schema[] | undefined {\n return this.params.disallowedSchemas\n }\n\n protected get map(): TParams['map'] {\n return this.params.map\n }\n\n // async get(hash: Hash): Promise<DataLakeData | undefined> {\n // const result = await this.map.get(hash)\n // return this.isAllowed(result) ? result : undefined\n // }\n\n // async getMany(hashes: Hash[]): Promise<DataLakeData[]> {\n // const result = await this.map.getMany(hashes)\n // return result.filter(data => this.isAllowed(data))\n // }\n\n // async has(hash: Hash): Promise<boolean> {\n // const value = await this.get(hash)\n // if (isAnyPayload(value)) {\n // return this.isAllowed(value)\n // }\n // return value !== undefined\n // }\n\n protected isAllowed(value: DataLakeData | undefined): boolean {\n if (isAnyPayload(value)) {\n return this.isAllowedSchema(value.schema)\n }\n return true\n }\n\n protected isAllowedSchema(schema: Schema): boolean {\n if (this.allowedSchemas && !this.allowedSchemas.includes(schema)) {\n return false\n }\n if (this.disallowedSchemas && this.disallowedSchemas.includes(schema)) {\n return false\n }\n return true\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\n\nimport { creatableProvider } from '../../CreatableProvider/index.ts'\nimport type { MapTypeWrite } from '../../map/index.ts'\nimport {\n type DataLakeData,\n type DataLakeRunner,\n DataLakeRunnerMoniker,\n} from '../../provider/index.ts'\nimport { AbstractSimpleDataLake, AbstractSimpleDataLakeParams } from './AbstractSimpleDataLake.ts'\n\nexport interface DataLakeRunnerParams extends AbstractSimpleDataLakeParams<MapTypeWrite<Hash, DataLakeData>> {}\n\n@creatableProvider()\nexport class SimpleDataLakeRunner<TParams extends DataLakeRunnerParams> extends\n AbstractSimpleDataLake<TParams> implements DataLakeRunner {\n static readonly defaultMoniker = DataLakeRunnerMoniker\n static readonly monikers = [DataLakeRunnerMoniker]\n moniker = SimpleDataLakeRunner.defaultMoniker\n\n async clear(): Promise<void> {\n await this.map.clear()\n }\n\n async delete(hash: Hash): Promise<boolean> {\n return await this.map.delete(hash)\n }\n\n async set(hash: Hash, data: DataLakeData): Promise<void> {\n if (this.isAllowed(data)) {\n await this.map.set(hash, data)\n }\n }\n\n async setMany(entries: [Hash, DataLakeData][]): Promise<void> {\n const allowed = entries.filter(([_, data]) => this.isAllowed(data))\n return await this.map.setMany(allowed)\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { isAnyPayload } from '@xyo-network/payload-model'\n\nimport { creatableProvider } from '../../CreatableProvider/index.ts'\nimport type { MapTypeRead } from '../../map/index.ts'\nimport {\n type DataLakeData,\n type DataLakeViewer,\n DataLakeViewerMoniker,\n} from '../../provider/index.ts'\nimport { AbstractSimpleDataLake, AbstractSimpleDataLakeParams } from './AbstractSimpleDataLake.ts'\n\nexport interface DataLakeViewerParams<TMap extends MapTypeRead<Hash, DataLakeData> = MapTypeRead<Hash, DataLakeData>> extends\n AbstractSimpleDataLakeParams<TMap> {\n}\n\n@creatableProvider()\nexport class SimpleDataLakeViewer<TParams extends DataLakeViewerParams = DataLakeViewerParams>\n extends AbstractSimpleDataLake<TParams> implements DataLakeViewer {\n static readonly defaultMoniker = DataLakeViewerMoniker\n static readonly monikers = [DataLakeViewerMoniker]\n moniker = SimpleDataLakeViewer.defaultMoniker\n\n async get(hash: Hash): Promise<DataLakeData | undefined> {\n const result = await this.map.get(hash)\n return this.isAllowed(result) ? result : undefined\n }\n\n async getMany(hashes: Hash[]): Promise<DataLakeData[]> {\n const result = await this.map.getMany(hashes)\n return result.filter(data => this.isAllowed(data))\n }\n\n async has(hash: Hash): Promise<boolean> {\n const value = await this.get(hash)\n if (isAnyPayload(value)) {\n return this.isAllowed(value)\n }\n return value !== undefined\n }\n}\n","import type { Promisable } from '@xylabs/sdk-js'\n\nimport type {\n XyoConnection, XyoGateway, XyoSigner,\n} from '../../provider/index.ts'\n\nexport class SimpleXyoGateway implements XyoGateway {\n private readonly _connection: XyoConnection\n private readonly _signer: XyoSigner\n\n constructor(signer: XyoSigner, connection: XyoConnection) {\n this._signer = signer\n this._connection = connection\n }\n\n get connectionInstance(): XyoConnection {\n return this._connection\n }\n\n get signerInstance(): XyoSigner {\n return this._signer\n }\n\n connection(): Promisable<XyoConnection> {\n return this._connection\n }\n\n signer(): Promisable<XyoSigner> {\n return this._signer\n }\n}\n","import type {\n Address, Hash, Hex, Promisable,\n} from '@xylabs/sdk-js'\nimport {\n assertEx, BigIntToJsonZod, isDefined,\n} from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload, WithHashMeta } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload,\n AttoXL1,\n SignedHydratedTransaction, SignedHydratedTransactionWithHashMeta,\n Transfer,\n UnsignedHydratedTransaction,\n} from '@xyo-network/xl1-protocol'\nimport {\n asXL1BlockNumber,\n TransferSchema,\n} from '@xyo-network/xl1-protocol'\n\nimport type {\n DataLakeRunner,\n TransactionOptions,\n XyoConnection, XyoGatewayRunner,\n XyoSigner,\n} from '../../provider/index.ts'\nimport type { ConfirmSubmittedTransactionOptions } from '../../transaction/index.ts'\nimport { buildUnsignedTransaction, confirmSubmittedTransaction } from '../../transaction/index.ts'\n\nexport class SimpleXyoGatewayRunner implements XyoGatewayRunner {\n private readonly _connection: XyoConnection\n private _dataLakes: (DataLakeRunner | null)[]\n private readonly _signer: XyoSigner\n\n constructor(connection: XyoConnection, signer: XyoSigner, dataLakes: DataLakeRunner[] = []) {\n this._connection = connection\n this._dataLakes = [...dataLakes]\n this._signer = signer\n }\n\n get connectionInstance(): XyoConnection {\n return this._connection\n }\n\n get dataLakes(): DataLakeRunner[] {\n throw new Error('Method [dataLakes] not implemented.')\n }\n\n get signerInstance(): XyoSigner {\n return this._signer\n }\n\n addDataLake(dataLake: DataLakeRunner): number {\n this._dataLakes.push(dataLake)\n return this._dataLakes.length - 1\n }\n\n async addPayloadsToChain(\n onChain: AllowedBlockPayload[],\n offChain: Payload[],\n options?: TransactionOptions,\n ): Promise<[Hash, SignedHydratedTransactionWithHashMeta]> {\n // Get chain providers\n const viewer = assertEx(this.connectionInstance.viewer, () => 'No viewer available on connection')\n\n // Resolve transaction options\n const {\n nbf, exp, chain, fees,\n } = options ?? {}\n const resolvedChainId = isDefined(chain) ? chain : await viewer.chainId()\n const resolvedNbf = asXL1BlockNumber(isDefined(nbf) ? nbf : await viewer.currentBlockNumber(), true)\n const resolvedExp = asXL1BlockNumber(isDefined(exp) ? exp : resolvedNbf + 10, true)\n\n // Build, sign, and broadcast the transaction\n // eslint-disable-next-line sonarjs/deprecation\n const tx = await buildUnsignedTransaction(resolvedChainId, onChain, offChain, resolvedNbf, resolvedExp, await (await this.signer()).address(), fees)\n return await this.addTransactionToChain(tx)\n }\n\n async addTransactionToChain(tx: UnsignedHydratedTransaction): Promise<[Hash, SignedHydratedTransactionWithHashMeta]> {\n const connection = this.connectionInstance\n\n const signer = this.signerInstance\n const runner = assertEx(connection.runner, () => 'No runner available on connection')\n const signedTx = await signer.signTransaction(tx)\n await this.addPayloadsToDataLakes(signedTx[1])\n return [await runner.broadcastTransaction(\n [signedTx[0], signedTx[1]],\n ), signedTx]\n }\n\n async confirmSubmittedTransaction(txHash: Hash, options?: ConfirmSubmittedTransactionOptions): Promise<SignedHydratedTransaction> {\n return await confirmSubmittedTransaction(\n assertEx(this.connectionInstance.viewer, () => 'Connection viewer is undefined'),\n txHash,\n options,\n )\n }\n\n /** @deprecated use connectionInstance instead */\n connection(): Promisable<XyoConnection> {\n return this.connectionInstance\n }\n\n removeDataLake(index: number): void {\n this._dataLakes[index] = null\n }\n\n async send(to: Address, amount: AttoXL1, options?: TransactionOptions): Promise<Hash> {\n return await this.sendMany({ [to]: amount }, options)\n }\n\n async sendMany(transfers: Record<Address, AttoXL1>, options?: TransactionOptions): Promise<Hash> {\n // eslint-disable-next-line sonarjs/deprecation\n const from = await (await this.signer()).address()\n const hexTransfers: Record<Address, Hex> = Object.fromEntries(\n Object.entries(transfers).map(([address, amount]) => ([\n address, BigIntToJsonZod.parse(amount),\n ])),\n )\n const transfer = new PayloadBuilder<Transfer>({ schema: TransferSchema }).fields({\n from,\n transfers: hexTransfers,\n epoch: Date.now(),\n }).build()\n const [hash] = await this.addPayloadsToChain([transfer], [], options)\n return hash\n }\n\n /** @deprecated use signerInstance instead */\n signer(): Promisable<XyoSigner> {\n return this.signerInstance\n }\n\n protected async addPayloadsToDataLakes(payloads: WithHashMeta<Payload>[]): Promise<void> {\n await Promise.all(this._dataLakes.map(async (dataLake) => {\n await Promise.all(payloads.map(async (payload) => {\n await dataLake?.set(payload._hash, payload)\n }))\n }))\n }\n}\n","import {\n AbstractCreatable, creatable, CreatableParams, type Hash,\n} from '@xylabs/sdk-js'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { type SignedHydratedBlock, type SignedHydratedTransaction } from '@xyo-network/xl1-protocol'\n\nimport { hydratedBlockToPayloadBundle, hydratedTransactionToPayloadBundle } from '../../model/index.ts'\nimport type { MempoolRunner } from '../../runners/index.ts'\n\nexport interface SimpleMempoolRunnerParams extends CreatableParams {\n pendingBlocksArchivist: ArchivistInstance\n pendingTransactionsArchivist: ArchivistInstance\n}\n\n@creatable()\nexport class SimpleMempoolRunner extends AbstractCreatable<SimpleMempoolRunnerParams> implements MempoolRunner {\n protected get pendingBlocksArchivist() {\n return this.params.pendingBlocksArchivist\n }\n\n protected get pendingTransactionsArchivist() {\n return this.params.pendingTransactionsArchivist\n }\n\n async submitBlocks(blocks: SignedHydratedBlock[]): Promise<Hash[]> {\n const bundles = await Promise.all(blocks.map(async ([bw, payloads]) => {\n return hydratedBlockToPayloadBundle([\n await PayloadBuilder.addHashMeta(bw),\n await PayloadBuilder.addHashMeta(payloads),\n ])\n }))\n const inserted = await this.pendingBlocksArchivist.insert(bundles)\n return inserted.map(p => p._hash)\n }\n\n async submitTransactions(transactions: SignedHydratedTransaction[]): Promise<Hash[]> {\n const bundles = await Promise.all(transactions.map(async ([tx, payloads]) => {\n return hydratedTransactionToPayloadBundle([\n await PayloadBuilder.addHashMeta(tx),\n await PayloadBuilder.addHashMeta(payloads),\n ])\n }))\n const inserted = await this.pendingBlocksArchivist.insert(bundles)\n return inserted.map(p => p._hash)\n }\n}\n","import {\n creatable,\n exists, isDefined, isHash,\n} from '@xylabs/sdk-js'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport {\n isHashMeta, isPayloadBundle, type Sequence,\n} from '@xyo-network/payload-model'\nimport type { SignedHydratedBlockWithHashMeta, SignedHydratedTransactionWithHashMeta } from '@xyo-network/xl1-protocol'\n\nimport { AbstractCreatableProvider, CreatableProviderParams } from '../../CreatableProvider/index.ts'\nimport { bundledPayloadToHydratedBlock, bundledPayloadToHydratedTransaction } from '../../model/index.ts'\nimport {\n type MempoolViewer,\n MempoolViewerMoniker,\n type PendingTransactionsOptions,\n} from '../../viewers/index.ts'\n\nexport interface SimpleMempoolViewerParams extends CreatableProviderParams {\n pendingBlocksArchivist: ArchivistInstance\n pendingTransactionsArchivist: ArchivistInstance\n}\n\n@creatable()\nexport class SimpleMempoolViewer extends AbstractCreatableProvider<SimpleMempoolViewerParams> implements MempoolViewer {\n static readonly defaultMoniker = MempoolViewerMoniker\n static readonly monikers = [MempoolViewerMoniker]\n moniker = SimpleMempoolViewer.defaultMoniker\n\n protected get pendingBlocksArchivist() {\n return this.params.pendingBlocksArchivist\n }\n\n protected get pendingTransactionsArchivist() {\n return this.params.pendingTransactionsArchivist\n }\n\n async pendingBlocks({ cursor: providedCursor }: PendingTransactionsOptions = {}): Promise<SignedHydratedBlockWithHashMeta[]> {\n let cursor: Sequence | undefined = undefined\n if (isHash(providedCursor)) {\n const [p] = await this.pendingBlocksArchivist.get([providedCursor])\n if (isDefined(p)) {\n cursor = p._sequence\n }\n }\n const bundles = await this.pendingBlocksArchivist.next({\n order: 'asc', limit: 100, cursor,\n })\n const filteredBundles = bundles.filter(isPayloadBundle).filter(isHashMeta)\n return (await Promise.all(filteredBundles.map(async bundle => await bundledPayloadToHydratedBlock(bundle)))).filter(exists)\n }\n\n async pendingTransactions({ cursor: providedCursor }: PendingTransactionsOptions = {}): Promise<SignedHydratedTransactionWithHashMeta[]> {\n let cursor: Sequence | undefined = undefined\n if (isHash(providedCursor)) {\n const [p] = await this.pendingTransactionsArchivist.get([providedCursor])\n if (isDefined(p)) {\n cursor = p._sequence\n }\n }\n const bundles = await this.pendingTransactionsArchivist.next({\n order: 'asc', limit: 100, cursor,\n })\n const filteredBundles = bundles.filter(isPayloadBundle).filter(isHashMeta)\n return (await Promise.all(filteredBundles.map(async bundle => await bundledPayloadToHydratedTransaction(bundle)))).filter(exists)\n }\n}\n","import { isUndefined } from '@xylabs/sdk-js'\nimport type {\n GatewayName,\n NetworkStatus,\n} from '@xyo-network/xl1-protocol'\nimport { isNetworkStatus } from '@xyo-network/xl1-protocol'\nimport axios from 'axios'\n\nimport type { XyoNetwork } from '../../provider/index.ts'\nimport {\n errorStatus, StatusNetworks, unknownStatus,\n} from './lib/index.ts'\n\nexport class SimpleXyoNetwork implements XyoNetwork {\n protected readonly _networkId: GatewayName\n\n constructor(networkId: GatewayName) {\n this._networkId = networkId\n }\n\n async status(): Promise<NetworkStatus> {\n const statusNetwork = StatusNetworks[this._networkId]\n if (isUndefined(statusNetwork)) {\n throw new Error(`Unknown status network ID: ${this._networkId}`)\n }\n\n return await this.makeRequest(statusNetwork.statusUrl)\n }\n\n private async makeRequest(url: string): Promise<NetworkStatus> {\n try {\n const response = await axios.get(url)\n if (isNetworkStatus(response.data)) {\n return response.data\n } else {\n if (response.status === 200) {\n console.error('Unknown network status response:', response.data)\n\n return unknownStatus\n }\n return errorStatus\n }\n } catch (error) {\n console.error('Error fetching network status:', error)\n return errorStatus\n }\n }\n}\n","import type { NetworkStatus } from '@xyo-network/xl1-protocol'\nimport { NetworkStatusSchema } from '@xyo-network/xl1-protocol'\n\nexport const unknownStatus: NetworkStatus = {\n description: 'Unknown Network Status',\n schema: NetworkStatusSchema,\n state: 'unknown',\n}\n\nexport const errorStatus: NetworkStatus = {\n description: 'Error Fetching Network Status',\n schema: NetworkStatusSchema,\n state: 'unknown',\n}\n","import type { GatewayName } from '@xyo-network/xl1-protocol'\n\nexport type StatusNetwork = {\n id: GatewayName\n statusUrl: string\n}\n\nexport const MainNetworkStats: StatusNetwork = {\n id: 'mainnet' as GatewayName,\n statusUrl: 'https://xyo.network/chain-network-status-mainnet.json',\n}\n\nexport const SequenceNetworkStats: StatusNetwork = {\n id: 'sequence' as GatewayName,\n statusUrl: 'https://beta.xyo.network/chain-network-status-sequence.json',\n}\n\nexport const LocalNetworkStats: StatusNetwork = {\n id: 'local' as GatewayName,\n statusUrl: 'http://localhost:3002/chain-network-status-local.json',\n}\n\nexport const StatusNetworks: Record<GatewayName, StatusNetwork> = {\n ['mainnet' as GatewayName]: MainNetworkStats,\n ['sequence' as GatewayName]: SequenceNetworkStats,\n ['local' as GatewayName]: LocalNetworkStats,\n}\n","import { assertEx } from '@xylabs/sdk-js'\n\nimport type {\n CaveatTypes,\n InvokerPermission, PermissionRequest, RequestedPermission, XyoPermissions,\n} from '../../provider/index.ts'\nimport type { Invoker, PermissionsStore } from './store/index.ts'\n\n/**\n * In-memory implementation of XyoPermissions for testing or ephemeral use cases.\n * Does not persist data beyond the lifetime of the instance.\n * Assumes all permission requests are granted and revocations always succeed.\n */\nexport class SimpleXyoPermissions implements XyoPermissions {\n invoker: Invoker\n private _store: PermissionsStore\n\n constructor(store: PermissionsStore) {\n this._store = store\n this.invoker = store.invoker\n }\n\n get store(): PermissionsStore {\n return assertEx(this._store, () => 'Store must be defined to get permissions')\n }\n\n async getPermissions(): Promise<InvokerPermission[]> {\n return await this.store.getPermissions()\n }\n\n // assumed the permissions are always granted\n async requestPermissions(permissions: PermissionRequest[]): Promise<RequestedPermission[]> {\n await Promise.resolve()\n // Flatten PermissionRequest[] into InvokerPermission[]\n const newPermissions: InvokerPermission[] = []\n const now = Date.now()\n for (const req of permissions) {\n for (const parentCapability in req) {\n newPermissions.push({\n invoker: this.invoker,\n parentCapability,\n caveats: Object.entries(req[parentCapability]).map(([type, value]) => ({ type: type as CaveatTypes, value })),\n date: now,\n })\n }\n }\n\n // Update or add permissions in the store\n const existingPermissions = await this.getPermissions()\n for (const perm of newPermissions) {\n const idx = existingPermissions.findIndex(\n p => p.invoker === perm.invoker && p.parentCapability === perm.parentCapability,\n )\n if (idx === -1) {\n existingPermissions.push(perm)\n } else {\n existingPermissions[idx] = perm\n }\n }\n await this.store.setPermissions(existingPermissions)\n\n // Return the granted permissions in RequestedPermission shape\n return newPermissions.map(({ parentCapability, date }) => ({ parentCapability, date }))\n }\n\n // Assumes the permissions are always revoked\n async revokePermissions(permissions: PermissionRequest): Promise<RequestedPermission[]> {\n const existingPermissions = await this.getPermissions()\n const revoked: RequestedPermission[] = []\n for (const parentCapability in permissions) {\n const idx = existingPermissions.findIndex(\n p => p.invoker === this.invoker && p.parentCapability === parentCapability,\n )\n if (idx !== -1) {\n const removed = existingPermissions.splice(idx, 1)[0]\n revoked.push({ parentCapability: removed.parentCapability, date: removed.date })\n }\n }\n await this.store.setPermissions(existingPermissions)\n return revoked\n }\n}\n","import { assertEx } from '@xylabs/sdk-js'\n\nimport type { InvokerPermission } from '../../../provider/index.ts'\nimport type { Invoker, PermissionsStore } from './PermissionsStore.ts'\n\n/**\n * In-memory implementation of XyoPermissions for testing or ephemeral use cases.\n * Does not persist data beyond the lifetime of the instance.\n * Assumes all permission requests are granted and revocations always succeed.\n */\nexport class MemoryPermissionsStore implements PermissionsStore {\n private _invoker: Invoker\n private permissions: InvokerPermission[] = []\n\n constructor(invoker: Invoker) {\n this._invoker = invoker\n }\n\n get invoker(): Invoker {\n return assertEx(this._invoker, () => 'Invoker must be defined to get permissions')\n }\n\n async getPermissions(): Promise<InvokerPermission[]> {\n await Promise.resolve()\n return this.permissions\n }\n\n async setPermissions(permissions: InvokerPermission[]): Promise<void> {\n await Promise.resolve()\n this.permissions = permissions\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { SignedHydratedTransactionWithStorageMeta } from '@xyo-network/xl1-protocol'\n\nimport type { XyoRunner } from '../../provider/index.ts'\nimport { flattenHydratedTransaction } from '../../transaction/index.ts'\n\nexport class SimpleXyoRunner implements XyoRunner {\n private _mempoolArchivist?: ArchivistInstance\n\n constructor(mempoolArchivist?: ArchivistInstance) {\n this._mempoolArchivist = mempoolArchivist\n }\n\n async broadcastTransaction(transaction: SignedHydratedTransactionWithStorageMeta): Promise<Hash> {\n const archivist = await this.getMempoolArchivist()\n await archivist.insert(flattenHydratedTransaction(transaction))\n return await PayloadBuilder.hash(transaction[0])\n }\n\n protected async getMempoolArchivist(): Promise<ArchivistInstance> {\n if (!this._mempoolArchivist) {\n this._mempoolArchivist = await MemoryArchivist.create({ account: 'random' })\n }\n return this._mempoolArchivist\n }\n}\n","import type { Address, Promisable } from '@xylabs/sdk-js'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { type Payload } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload, ChainId, SignedHydratedTransactionWithHashMeta,\n SignedTransactionBoundWitness, TransactionFeesBigInt,\n UnsignedTransactionBoundWitness,\n XL1BlockNumber,\n} from '@xyo-network/xl1-protocol'\nimport { SignedHydratedTransactionWithHashMetaZod } from '@xyo-network/xl1-protocol'\n\nimport type { XyoSigner } from '../../provider/index.ts'\nimport { buildTransaction, signTransaction } from '../../transaction/index.ts'\n\nexport class SimpleXyoSigner implements XyoSigner {\n protected readonly _account: AccountInstance\n\n constructor(account: AccountInstance) {\n this._account = account\n }\n\n address(): Promisable<Address> {\n return this._account.address\n }\n\n async createSignedTransaction(\n chain: ChainId,\n elevatedPayloads: AllowedBlockPayload[],\n additionalPayloads: Payload[],\n nbf: XL1BlockNumber,\n exp: XL1BlockNumber,\n fees: TransactionFeesBigInt,\n from?: Address,\n ): Promise<SignedTransactionBoundWitness> {\n const fromAddress = from ?? this._account.address\n const transaction = await buildTransaction(\n chain,\n elevatedPayloads,\n additionalPayloads,\n this._account,\n nbf,\n exp,\n fromAddress,\n fees,\n )\n return transaction[0]\n }\n\n async signTransaction(tx: [UnsignedTransactionBoundWitness, Payload[]]): Promise<SignedHydratedTransactionWithHashMeta> {\n const txBW = await signTransaction(tx[0], this._account)\n return SignedHydratedTransactionWithHashMetaZod.parse([await PayloadBuilder.addStorageMeta(txBW), await PayloadBuilder.addStorageMeta(tx[1])])\n }\n}\n","import type { Hash, Promisable } from '@xylabs/sdk-js'\nimport {\n asHash, assertEx, isDefined,\n} from '@xylabs/sdk-js'\nimport type { TimeDomain, TimePayload } from '@xyo-network/xl1-protocol'\nimport {\n asTimePayload, asXL1BlockNumber, TimeSchema,\n} from '@xyo-network/xl1-protocol'\nimport type { Provider } from 'ethers'\n\nimport type { CreatableProviderParams } from '../../CreatableProvider/index.ts'\nimport { AbstractCreatableProvider } from '../../CreatableProvider/index.ts'\nimport {\n type BlockViewer, type TimeSyncViewer, TimeSyncViewerMoniker,\n} from '../../viewers/index.ts'\n\nexport interface SimpleTimeSyncViewerParams extends CreatableProviderParams {\n blockViewer: BlockViewer\n ethProvider?: Provider\n}\n\nexport class SimpleTimeSyncViewer extends AbstractCreatableProvider<SimpleTimeSyncViewerParams> implements TimeSyncViewer {\n static readonly defaultMoniker = TimeSyncViewerMoniker\n static readonly monikers = [TimeSyncViewerMoniker]\n moniker = SimpleTimeSyncViewer.defaultMoniker\n\n protected get blockViewer() {\n return this.params.blockViewer\n }\n\n protected get ethProvider() {\n return this.params.ethProvider\n }\n\n async convertTime(fromDomain: TimeDomain, toDomain: TimeDomain, from: number): Promise<number> {\n switch (fromDomain) {\n case 'xl1': {\n const [block, payloads] = assertEx(await this.blockViewer.blockByNumber(asXL1BlockNumber(from, true)), () => 'Block not found')\n const timeSchemaIndex = block.payload_schemas.indexOf(TimeSchema)\n const hash = timeSchemaIndex === -1 ? undefined : block.payload_hashes[timeSchemaIndex]\n const timePayload = asTimePayload(isDefined(hash) ? payloads.find(p => p._hash === hash) : undefined)\n if (timePayload === undefined) return 0\n switch (toDomain) {\n case 'xl1': {\n return timePayload.xl1 ?? 0\n }\n case 'epoch': {\n return timePayload.epoch ?? 0\n }\n case 'ethereum': {\n return timePayload.ethereum ?? 0\n }\n default: {\n throw new Error(`Unsupported to toDomain: ${toDomain}`)\n }\n }\n }\n default: {\n throw new Error(`Unsupported from fromDomain: ${fromDomain}`)\n }\n }\n }\n\n async currentTime(domain: TimeDomain): Promise<[string, number]> {\n switch (domain) {\n case 'xl1': {\n return ['xl1', (await this.blockViewer.currentBlock())?.[0].block ?? -1]\n }\n case 'epoch': {\n return ['epoch', Date.now()]\n }\n case 'ethereum': {\n return ['ethereum', (await this.ethProvider?.getBlockNumber()) ?? 0]\n }\n default: {\n throw new Error(`Unknown time domain: ${domain}`)\n }\n }\n }\n\n async currentTimeAndHash(domain: TimeDomain): Promise<[number, Hash | null]> {\n switch (domain) {\n case 'xl1': {\n const [head] = await this.blockViewer.currentBlock()\n return [head.block, head._hash]\n }\n case 'epoch': {\n return [Date.now(), null]\n }\n case 'ethereum': {\n const provider = assertEx(this.ethProvider, () => 'Ethereum provider not configured')\n const blockNumber = (await provider.getBlockNumber()) ?? 0\n const block = await provider.getBlock(blockNumber)\n const blockHash = asHash(assertEx(block?.hash, () => 'Block hash not found'), true)\n return [blockNumber, blockHash]\n }\n default: {\n throw new Error(`Unknown time domain: ${domain}`)\n }\n }\n }\n\n currentTimePayload(): Promisable<TimePayload> {\n throw new Error('Method [currentTimePayload] not implemented.')\n }\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { XL1BlockNumber } from '@xyo-network/xl1-protocol'\nimport { asTimePayload, TimeSchema } from '@xyo-network/xl1-protocol'\n\nimport { hashFromBlockNumber, hydrateBlock } from '../../block/index.ts'\nimport type { ChainContextRead } from '../../model/index.ts'\n\nexport async function xl1BlockNumberToEthBlockNumber(context: ChainContextRead, xl1BlockNumber: XL1BlockNumber): Promise<number> {\n const blockHash = await hashFromBlockNumber(context, xl1BlockNumber)\n const hydratedBlock = await hydrateBlock(context.store, blockHash)\n const timePayload = asTimePayload(hydratedBlock[1].find(p => p.schema === TimeSchema), { required: true })\n return assertEx(timePayload.ethereum, () => 'No ethereum timestamp found on block')\n}\n","import { HDWallet } from '@xyo-network/wallet'\n\nimport { DEFAULT_WALLET_PATH } from './paths.ts'\n\n/**\n * Initializes a wallet to the default XYO path from a mnemonic phrase\n * @param walletPhrase The mnemonic phrase for the wallet\n * @returns A wallet initialized to the default XYO path using the provided phrase\n */\nexport const generateXyoBaseWalletFromPhrase = (walletPhrase: string) => {\n const wallet = HDWallet.fromPhrase(walletPhrase, DEFAULT_WALLET_PATH)\n return wallet\n}\n","export const WALLET_COMPLIANCE = '44\\'' as const\n\nexport const COIN_TYPES = { Ethereum: '60\\'' } as const\n\nexport const ACCOUNT_TYPE = { GANACHE: '0\\'', XYO: '0\\'' } as const\n\nexport const CHANGE_ADDRESS = { META_MASK: '0', XYO: '0' } as const\n\nexport const ADDRESS_INDEX = { META_MASK: '0', XYO: '0' } as const\n\nexport const DEFAULT_WALLET_PATH = `m/${WALLET_COMPLIANCE}/${COIN_TYPES.Ethereum}/${ACCOUNT_TYPE.XYO}/${CHANGE_ADDRESS.XYO}`\n"],"mappings":"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","names":["allHashesPresent","hashes","payloads","payloadHashes","Set","map","p","_hash","every","hash","has","assertEx","isTransactionBoundWitness","blockPayloadsFromHydratedBlock","block","payload_hashes","map","hash","assertEx","find","p","_hash","filter","x","isTransactionBoundWitness","toHydratedBlock","flattenHydratedBlock","hydratedBlock","blk","blkPayloads","tryUnflattenHydratedBlock","flattened","at","payloads","slice","toHydratedBlock","unflattenHydratedBlock","flattenHydratedBlocks","hydratedBlocks","flatMap","blk","flattenHydratedBlock","assertEx","asBlockBoundWitnessWithStorageMeta","isTransactionBoundWitnessWithStorageMeta","hydrateBlock","chainMap","hash","maxDepth","minDepth","assertEx","bw","asBlockBoundWitnessWithStorageMeta","get","blkPayloads","getMany","payload_hashes","allHashesPresent","transactions","filter","isTransactionBoundWitnessWithStorageMeta","transactionsPayloadHashes","flatMap","tx","transactionsPayloads","allPayloadsHashes","Set","p","_hash","allPayloads","allPayloadsFiltered","has","isTransactionBoundWitnessWithStorageMeta","transactionsFromHydratedBlock","block","filter","isTransactionBoundWitnessWithStorageMeta","assertEx","isBlockBoundWitnessWithStorageMeta","isTransactionBoundWitnessWithStorageMeta","tryHydrateBlock","archivist","hash","maxDepth","assertEx","bw","get","find","isBlockBoundWitnessWithStorageMeta","undefined","blkPayloads","payload_hashes","transactions","filter","isTransactionBoundWitnessWithStorageMeta","transactionsPayloadHashes","flatMap","tx","transactionsPayloads","allPayloadsHashes","Set","p","_hash","allPayloads","allPayloadsFiltered","has","asHash","isDefined","toSafeJsonString","asSignedBlockBoundWitnessWithStorageMeta","SignedBlockBoundWitnessWithHashMetaZod","StepSizes","isDefined","isUndefined","LRUCache","LruCacheMap","lruCache","options","LRUCache","max","clear","delete","id","get","getMany","results","key","value","undefined","push","has","set","data","setMany","entries","isDefined","MemoryMap","map","Map","clear","delete","id","get","getMany","ids","results","data","isDefined","push","has","set","setMany","entries","key","value","isDefined","readPayloadMapFromStore","store","isReadArchivist","get","hash","getMany","hashes","has","isDefined","toFixedPoint","asAttoXL1","rewardFromBlockNumber","places","blockNumber","startingReward","asAttoXL1","toFixedPoint","blocksPerStep","stepFactorNumerator","stepFactorDenominator","minBlockReward","creatorReward","step","Math","floor","stepExp","BigInt","poweredNumerator","poweredDenominator","reward","isSignedBlockBoundWitnessWithStorageMeta","DEFAULT_NEXT_OPTIONS","limit","findMostRecentBlock","chainArchivist","nextOptions","maxIterations","Number","POSITIVE_INFINITY","mostRecentBlock","cursor","batch","iterations","next","order","blocks","filter","isSignedBlockBoundWitnessWithStorageMeta","last","at","_sequence","length","assertEx","hydratedBlockByNumber","context","blockNumber","Error","Number","MAX_SAFE_INTEGER","cacheKey","withContextCacheResponse","block","assertEx","blockFromBlockNumber","hydrateBlock","store","_hash","toAddress","StepSizes","keccak256","completedStepRewardAddress","block","step","resolvedStepSize","StepSizes","length","addressKey","TextEncoder","encode","toAddress","keccak256","slice","prefix","toAddress","isDefined","keccak256","derivedReceiveAddress","address","scope","addressKey","TextEncoder","encode","isDefined","toAddress","keccak256","slice","prefix","asXL1BlockRange","StepSizes","stepBlockRange","block","step","stepSize","StepSizes","start","asXL1BlockRange","name","assertEx","StepSizes","stepTransferIndex","block","step","rewardTransferCount","rewardTransferIndex","i","StepSizes","length","stepSize","assertEx","timeBudget","name","logger","func","budget","status","start","Date","now","timer","setInterval","duration","warn","Math","max","undefined","result","clearInterval","isAllowedBlockPayload","ELEVATE_OPCODE","elevatedPayloads","tx","payloads","opCodes","script","filter","operation","startsWith","opCode","code","hash","split","elevatedPayload","find","payload","_hash","isAllowedBlockPayload","push","length","Error","contextCache","context","name","create","caches","isUndefined","MemoryMap","withContextCacheResponse","key","func","max","timeBudgetMs","cache","LruCacheMap","cacheResult","get","isDefined","result","timeBudget","logger","set","PayloadBuilder","asSignedBlockBoundWitnessWithHashMeta","bundledPayloadToHydratedBlock","payload","withHashMeta","PayloadBuilder","addHashMeta","payloads","tx","asSignedBlockBoundWitnessWithHashMeta","find","p","_hash","root","filter","PayloadBuilder","asSignedTransactionBoundWitnessWithHashMeta","bundledPayloadToHydratedTransaction","payload","withHashMeta","PayloadBuilder","addHashMeta","payloads","tx","asSignedTransactionBoundWitnessWithHashMeta","find","p","_hash","root","filter","PayloadBuilder","PayloadBundleSchema","hydratedBlockToPayloadBundle","transaction","root","_hash","bundle","payloads","flattenHydratedBlock","flatMap","p","PayloadBuilder","omitStorageMeta","schema","PayloadBundleSchema","fields","build","PayloadBuilder","PayloadBundleSchema","assertEx","toHex","BoundWitnessBuilder","PayloadBuilder","defaultTransactionFees","buildTransaction","chain","onChainPayloads","offChainPayloads","signer","nbf","exp","from","fees","defaultTransactionFees","undefined","Array","isArray","Error","txBoundWitnessFields","base","toHex","gasLimit","gasPrice","priority","elevatedHashes","PayloadBuilder","hashes","script","elevatedHash","push","fields","assertEx","at","address","length","tx","txPayloads","BoundWitnessBuilder","meta","$signatures","payloads","signers","build","addHashMeta","toHex","BoundWitnessBuilder","PayloadBuilder","defaultTransactionFees","buildUnsignedTransaction","chain","onChainPayloads","offChainPayloads","nbf","exp","from","fees","defaultTransactionFees","txBoundWitnessFields","base","toHex","gasLimit","gasPrice","priority","elevatedHashes","PayloadBuilder","hashes","script","elevatedHash","push","fields","length","tx","txPayloads","BoundWitnessBuilder","meta","$signatures","payloads","build","delay","isDefined","DEFAULT_CONFIRMATION_ATTEMPTS","DEFAULT_DELAY_BETWEEN_ATTEMPTS","confirmSubmittedTransaction","viewer","txHash","options","attempts","maxAttempts","delay","attemptDelay","logger","log","tx","transactionByHash","undefined","isDefined","error","Error","assertEx","hydrateTypedBoundWitness","tryHydrateTypedBoundWitness","asSignedHydratedTransaction","isAllowedBlockPayload","isSignedTransactionBoundWitnessWithStorageMeta","tryHydrateTransaction","chainMap","hash","tryHydrateTypedBoundWitness","get","hashes","getMany","next","Error","isSignedTransactionBoundWitnessWithStorageMeta","hydrateTransaction","hydrateTypedBoundWitness","flattenHydratedTransaction","hydratedTransaction","tx","txPayloads","tryUnflattenHydratedTransaction","flattened","at","slice","asSignedHydratedTransaction","unflattenHydratedTransaction","flattenHydratedTransactions","hydratedTransactions","flatMap","tryHydrateElevatedTransaction","undefined","transaction","payloads","opCodes","script","filter","operation","startsWith","elevatedPayloads","opCode","code","split","elevatedPayload","find","payload","_hash","isAllowedBlockPayload","push","length","hydrateElevatedTransaction","context","assertEx","PayloadBuilder","transactionBlockByteCount","transaction","payloads","cleanTransaction","PayloadBuilder","omitStorageMeta","transactionBytes","JSON","stringify","length","cleanPayloads","reduce","acc","payload","asHash","crackOperation","operation","parts","split","length","Error","slice","crackOperations","operations","map","op","transactionElevatedPayloadHashes","transaction","elevateOperations","crackOperations","script","filter","op","map","asHash","transactionElevatedPayloads","payloads","hashes","elevatedPayloads","payload","includes","_hash","AttoXL1","TransactionGasCosts","transactionBytesRequiredGas","transaction","payloads","transactionBlockBytes","transactionBlockByteCount","AttoXL1","TransactionGasCosts","characterStorage","BigInt","transactionRequiredGas","hydratedTransaction","elevatedPayloads","transactionElevatedPayloads","hashes","length","signatures","addresses","hashValidation","signatureValidation","payloadValidation","asHash","assertEx","filterAs","isAllowedBlockPayloadWithHashMeta","tryExtractElevatedHashesFromScript","strings","hashes","filter","str","startsWith","map","split","filterAs","h","asHash","extractElevatedHashesFromScript","filtered","assertEx","length","tryExtractElevatedHashes","tx","bw","payloads","script","p","includes","_hash","isAllowedBlockPayloadWithHashMeta","extractElevatedHashes","assertEx","hexFromArrayBuffer","toArrayBuffer","PayloadBuilder","signTransaction","tx","account","assertEx","from","address","unsignedTx","structuredClone","addresses","previous_hashes","previousHash","hash","PayloadBuilder","dataHash","hashBytes","toArrayBuffer","signature","sign","result","$signatures","hexFromArrayBuffer","hydratedTransactionToPayloadBundle","transaction","root","_hash","bundle","payloads","flattenHydratedTransaction","flatMap","p","PayloadBuilder","omitStorageMeta","schema","PayloadBundleSchema","fields","build","assertEx","isString","asProviderMoniker","value","moniker","isString","undefined","assertEx","DefaultProviderMoniker","HashZod","XL1BlockRangeZod","z","QualifiedZod","zodType","z","tuple","XL1BlockRangeZod","HashZod","blockFromBlockNumber","context","blockNumber","cacheKey","withContextCacheResponse","headHash","head","result","store","chainMap","get","isDefined","Error","currentBlock","asSignedBlockBoundWitnessWithStorageMeta","JSON","stringify","block","jumpHash","previous","jumpBlockNumber","step","stepSize","StepSizes","entries","possibleJumpBlockNumber","asHash","step_hashes","at","newBlock","toSafeJsonString","SignedBlockBoundWitnessWithHashMetaZod","safeParse","error","asXL1BlockNumber","stepSize","calculateFramesFromRange","range","step","size","stepSize","start","Math","trunc","fitted","remaining","push","asXL1BlockNumber","min","i","name","StepSizes","deepCalculateFramesFromRange","range","startingStep","StepSizes","length","fitted","remaining","step","newRemaining","newFittedFrames","newRemainingFrames","calculateFramesFromRange","push","i","toSorted","a","b","hashFromBlockNumber","context","blockNumber","blockFromBlockNumber","_hash","isReadArchivist","value","get","undefined","next","isWriteArchivist","insert","isReadWriteArchivist","toStepIdentityString","block","step","AddressZod","HexZod","toAddress","toHex","AttoXL1ConvertFactor","XL1","globalRegistry","z","isValidationError","ValidationError","BlockValidationError","ValidationError","isBlockValidationError","error","isValidationError","name","HydratedBlockValidationError","isHydratedBlockValidationError","HydratedBlockStateValidationError","chainId","hash","value","message","cause","isHydratedBlockStateValidationError","isLocalhost","hostname","endsWith","getUrl","host","port","scheme","isLocalhost","TODO","z","MnemonicStringZod","string","transform","s","trim","replaceAll","refine","includes","split","length","message","describe","DEFAULT_FIXED_FEE","toHex","XL1","AttoXL1ConvertFactor","xl1","DEFAULT_MIN_BRIDGE_AMOUNT","DEFAULT_MAX_BRIDGE_AMOUNT","DEFAULT_HARDHAT_CHAIN_ID","DEFAULT_HARDHAT_TOKEN_CONTRACT","toAddress","DEFAULT_HARDHAT_BRIDGE_CONTRACT","BasisPointsZod","coerce","number","int","nonnegative","max","BridgeConfigZod","object","chainRpcApiUrl","string","default","register","globalRegistry","description","title","type","escrowAddress","AddressZod","optional","feesAddress","feeFixed","HexZod","feeRateBasisPoints","host","maxBridgeAmount","minBridgeAmount","mnemonic","MnemonicStringZod","port","remoteBridgeContractAddress","remoteChainId","remoteTokenAddress","xl1ChainId","xl1TokenAddress","BridgeSettingsZod","pick","required","z","globalRegistry","z","ApiConfigZod","object","host","string","default","register","globalRegistry","description","title","type","initRewardsCache","union","number","transform","v","mnemonic","MnemonicStringZod","optional","port","coerce","AddressZod","globalRegistry","z","ChainConfigZod","object","id","string","optional","register","description","title","type","genesisRewardAddress","globalRegistry","z","EvmInfuraConfigZod","object","projectId","string","optional","register","description","title","type","projectSecret","EvmJsonRpcConfigZod","url","EvmConfigZod","chainId","infura","describe","jsonRpc","LogLevel","globalRegistry","z","LogLevels","Object","keys","LogConfigZod","object","logLevel","enum","default","register","choices","description","title","type","silent","boolean","globalRegistry","z","MempoolConfigZod","object","enabled","string","default","transform","val","ctx","normalized","toLowerCase","trim","includes","addIssue","code","expected","message","NEVER","register","globalRegistry","description","title","type","host","mnemonic","MnemonicStringZod","optional","port","coerce","number","AddressZod","asAddress","globalRegistry","z","ProducerConfigZod","object","allowlist","preprocess","val","split","map","s","asAddress","trim","array","AddressZod","optional","register","globalRegistry","description","title","type","disableIntentRedeclaration","boolean","healthCheckPort","coerce","number","heartbeatInterval","default","minStake","mnemonic","MnemonicStringZod","port","rewardAddress","string","globalRegistry","z","RewardRedemptionApiConfigZod","object","chainRpcApiUrl","string","default","register","globalRegistry","description","title","type","host","mnemonic","MnemonicStringZod","optional","port","coerce","number","globalRegistry","z","ServicesConfigZod","object","accountBalanceViewerEndpoint","string","optional","register","description","title","type","apiEndpoint","isDefined","isUndefined","globalRegistry","z","hasMongoConfig","config","isUndefined","isDefined","connectionString","database","domain","password","username","MongoConfigZod","object","string","nonempty","optional","register","globalRegistry","description","title","type","globalRegistry","z","StorageConfigZod","object","mongo","MongoConfigZod","optional","describe","root","string","register","globalRegistry","description","title","type","globalRegistry","z","MetricsScrapeConfigZod","object","path","string","default","register","description","title","type","port","coerce","number","describe","MetricsConfigZod","scrape","OpenTelemetryConfigZod","otlpEndpoint","url","optional","TelemetryConfigZod","metrics","otel","AddressZod","asAddress","globalRegistry","z","ValidationConfigZod","object","allowedRewardRedeemers","preprocess","val","split","map","s","trim","array","optional","register","description","title","type","allowedRewardEscrowAccountSigners","Xl1CommonConfigSchema","object","LogConfigZod","shape","describe","ConfigZod","api","ApiConfigZod","default","parse","bridge","BridgeConfigZod","chain","ChainConfigZod","evm","EvmConfigZod","mempool","MempoolConfigZod","producer","ProducerConfigZod","rewardRedemptionApi","RewardRedemptionApiConfigZod","services","ServicesConfigZod","storage","StorageConfigZod","telemetry","TelemetryConfigZod","validation","ValidationConfigZod","getDefaultConfig","z","DescriptionSchema","string","TitleSchema","JSONSchemaMetaSchema","object","id","optional","title","description","deprecated","boolean","catchall","unknown","GlobalMetaSchema","extend","ChoicesSchema","array","union","number","literal","undefined","readonly","UsageMetaSchema","choices","default","group","hidden","type","isUsageMeta","v","safeParse","success","XL1_NETWORK_STAKING_GENESIS_PERIOD_END_EPOCH","XL1_NETWORK_STAKING_GENESIS_PERIOD_END_XL1_BLOCK","AbstractCreatable","assertEx","ProviderFactory","creatableProvider","defaultMoniker","defaultParams","labels","monikers","params","assertEx","includes","Object","assign","withParams","create","mergedParams","config","factory","AbstractCreatableProvider","AbstractCreatable","factory","params","ProviderFactory","withParams","creatableProvider","constructor","labeledCreatableProvider","isTruthy","buildProviderFactory","provider","labels","factory","monikers","create","bind","registerCreatableProviderFactory","registry","primary","primaryMonikers","isTruthy","Array","isArray","primaryMoniker","includes","console","warn","isPrimaryForMoniker","moniker","Error","factoryClone","defaultMoniker","registerCreatableProviderFactories","factories","undefined","hasLabels","factory","labels","undefined","labeledCreatableProviderFactory","constructor","hasAllLabels","assertEx","ProviderFactoryLocator","_registry","_frozen","registry","empty","standard","freeze","locate","moniker","labels","assertEx","tryLocate","JSON","stringify","merge","locator","push","register","factory","primary","registerCreatableProviderFactory","registerMany","factories","filter","hasLabels","find","hasAllLabels","AsObjectFactory","isPayloadOfZodType","z","z","TypedDataDomainZod","object","name","string","nullable","optional","version","chainId","union","number","bigint","verifyingContract","salt","instanceof","Uint8Array","TypedDataFieldZod","type","TypedDataTypesZod","record","array","TypedDataValueZod","any","EIP712DataPayloadFieldsZod","z","object","domain","TypedDataDomainZod","types","TypedDataTypesZod","values","TypedDataValueZod","EIP712DataPayloadSchema","isEIP712DataPayload","isPayloadOfZodType","asEIP712DataPayload","AsObjectFactory","create","AsObjectFactory","HashZod","isPayloadOfZodType","z","EIP712SignaturePayloadFieldsZod","object","address","string","hash","signature","EIP712SignaturePayloadSchema","isEIP712SignaturePayload","asEIP712SignaturePayload","create","PayloadBuilder","signEIP712Message","signer","data","domain","types","values","signature","signTypedData","hash","PayloadBuilder","address","getAddress","schema","EIP712SignaturePayloadSchema","asHash","isUndefined","PayloadBuilder","verifyTypedData","verifyEIP712Message","data","sig","address","signature","hash","schema","fields","signedHash","asHash","isUndefined","PayloadBuilder","recoveredAddress","verifyTypedData","domain","types","values","toLowerCase","asAttoXL1","XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_EARNED_REWARDS","asAttoXL1","XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_BONUS_REWARDS","XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_REWARDS","RewardMultipliers","XL1_NETWORK_STAKING_GENESIS_PERIOD_END_XL1_BLOCK","AsObjectFactory","isPayloadOfSchemaType","AddressPairSchema","isAddressPairPayload","asAddressPairPayload","create","asOptionalAddressPairPayload","createOptional","hexToBigInt","toAddress","span","isTransfer","netBalancesForPayloads","payloads","span","balances","payload","isTransfer","from","address","amount","Object","entries","transfers","toAddress","hexToBigInt","hexToBigInt","toAddress","span","isTransfer","netSchemasForPayloads","payloads","span","balances","payload","isTransfer","from","address","amount","Object","entries","transfers","toAddress","hexToBigInt","hexToBigInt","span","isTransfer","netTransfersForPayloads","payloads","span","transfers","payload","isTransfer","from","to","amount","Object","entries","hexToBigInt","DataLakeViewerMoniker","DataLakeRunnerMoniker","NetworkStakeViewerMoniker","NetworkStakeStepRewardsByPositionViewerMoniker","NetworkStakeStepRewardsByStakerViewerMoniker","NetworkStakeStepRewardsByStepViewerMoniker","NetworkStakeStepRewardsTotalViewerMoniker","NetworkStakeStepRewardsViewerMoniker","XyoViewerMoniker","AsObjectFactory","isPayloadOfSchemaType","isStorageMeta","ChainIndexingServiceStateSchema","isChainIndexingServiceState","payload","isPayloadOfSchemaType","asChainIndexingServiceState","AsObjectFactory","create","isChainIndexingServiceStateWithStorageMeta","value","isStorageMeta","asChainIndexingServiceStateWithStorageMeta","hexToBigInt","toHex","isObject","isNegativeBigInt","value","isObject","negative","isPositiveBigInt","positive","parseSignedBigInt","hexToBigInt","Error","toSignedBigInt","toHex","toPositiveBigInt","asHash","assertEx","exists","isDefined","spanRootAsync","asRange","asXL1BlockNumber","asXL1BlockRange","AttoXL1","StepSizes","TransferSchema","AsObjectFactory","isPayloadOfSchemaType","isStorageMeta","BalancesStepSummarySchema","isBalancesStepSummary","isPayloadOfSchemaType","asBalancesStepSummary","AsObjectFactory","create","isBalancesStepSummaryWithStorageMeta","value","isStorageMeta","asBalancesStepSummaryWithStorageMeta","AsObjectFactory","isPayloadOfSchemaType","isStorageMeta","SchemasStepSummarySchema","isSchemasStepSummary","isPayloadOfSchemaType","asSchemasStepSummary","AsObjectFactory","create","isSchemasStepSummaryWithStorageMeta","value","isStorageMeta","asSchemasStepSummaryWithStorageMeta","StepSummarySchema","AsObjectFactory","isPayloadOfSchemaType","isStorageMeta","TransfersStepSummarySchema","isTransfersStepSummary","isPayloadOfSchemaType","asTransfersStepSummary","AsObjectFactory","create","isTransfersStepSummaryWithStorageMeta","value","isStorageMeta","asTransfersStepSummaryWithStorageMeta","assertEx","PayloadBuilder","isAnyPayload","StepSizes","balancesStepSummaryFromRange","context","range","frameHeadHash","hashFromBlockNumber","frameSize","headHash","head","result","undefined","hash","payloads","hydrateBlock","store","balances","address","balance","Object","entries","netBalancesForPayloads","toSignedBigInt","schema","BalancesStepSummarySchema","stepSize","step","StepSizes","indexOf","assertEx","join","summaryResult","summaryMap","get","isAnyPayload","stepSemaphores","acquire","subRanges","deepCalculateFramesFromRange","promises","map","subRange","subResults","Promise","all","bigIntBalances","subResult","parseSignedBigInt","set","release","finalResult","PayloadBuilder","addStorageMeta","asAddress","isDefined","spanRootAsync","asBlockBoundWitnessWithStorageMeta","asXL1BlockNumber","asXL1BlockRange","balancesSummary","context","spanRootAsync","headHash","head","headResult","store","chainMap","get","headBoundWitness","asBlockBoundWitnessWithStorageMeta","rangeStart","asXL1BlockNumber","isDefined","windowSize","Math","max","block","ranges","deepCalculateFramesFromRange","asXL1BlockRange","name","summaries","Promise","all","map","range","balancesStepSummaryFromRange","balances","summary","address","balance","Object","entries","validAddress","asAddress","parseSignedBigInt","assertEx","isBoundWitness","PayloadBuilder","isAnyPayload","isHashMeta","StepSizes","schemasStepSummaryFromRange","context","range","frameHeadHash","hashFromBlockNumber","frameSize","headHash","head","result","undefined","hash","block","payloads","hydrateBlock","store","boundWitnesses","filter","x","isBoundWitness","isHashMeta","schemas","bw","schema","payload_schemas","SchemasStepSummarySchema","stepSize","step","StepSizes","indexOf","assertEx","join","summaryResult","summaryMap","get","isAnyPayload","stepSemaphores","acquire","subRanges","deepCalculateFramesFromRange","promises","map","subRange","subResults","Promise","all","subResult","count","Object","entries","set","release","PayloadBuilder","addHashMeta","isDefined","spanRootAsync","asBlockBoundWitnessWithStorageMeta","asXL1BlockNumber","asXL1BlockRange","schemasSummary","context","spanRootAsync","headHash","head","headResult","store","chainMap","get","headBoundWitness","asBlockBoundWitnessWithStorageMeta","rangeStart","asXL1BlockNumber","isDefined","windowSize","Math","max","block","ranges","deepCalculateFramesFromRange","asXL1BlockRange","name","summaries","Promise","all","map","range","schemasStepSummaryFromRange","results","summary","schema","count","Object","entries","schemas","assertEx","PayloadBuilder","isAnyPayload","StepSizes","asAddress","isDefined","spanRootAsync","asBlockBoundWitnessWithStorageMeta","asXL1BlockNumber","asXL1BlockRange","transfersSummary","transferContext","spanRootAsync","headHash","head","headResult","store","chainMap","get","headBoundWitness","asBlockBoundWitnessWithStorageMeta","rangeStart","asXL1BlockNumber","isDefined","windowSize","Math","max","block","ranges","deepCalculateFramesFromRange","asXL1BlockRange","name","summaries","Promise","all","map","range","transfersStepSummaryFromRange","transfers","summary","from","toMap","Object","entries","validFrom","asAddress","to","transfer","validTo","parseSignedBigInt","transfersSummaryKey","frameHeadHash","frameSize","transfersStepSummaryFromRange","context","range","frameHeadHash","hashFromBlockNumber","frameSize","headHash","head","result","undefined","hash","payloads","hydrateBlock","store","transfers","from","toMap","Object","entries","netTransfersForPayloads","to","amount","toSignedBigInt","schema","TransfersStepSummarySchema","stepSize","step","StepSizes","indexOf","assertEx","join","key","transfersSummaryKey","summaryResult","summaryMap","get","isAnyPayload","stepSemaphores","acquire","subRanges","deepCalculateFramesFromRange","promises","map","subRange","subResults","Promise","all","bigIntBalances","subResult","transfer","parseSignedBigInt","set","release","finalResult","PayloadBuilder","addStorageMeta","WithHashMetaZod","TransferZod","BlockBoundWitnessZod","TransactionBoundWitnessZod","z","AccountBalanceHistoryItemZod","tuple","nullable","AccountBalanceViewerMoniker","BlockViewerMoniker","BlockRewardViewerMoniker","ChainViewerMoniker","ChainContractViewerMoniker","ChainStakeViewerMoniker","HashZod","XL1BlockRangeZod","z","PendingTransactionsOptionsZod","object","cursor","optional","limit","number","int","positive","window","PendingBlocksOptionsZod","MempoolViewerMoniker","NetworkStakeStepRewardViewerMoniker","StakeViewerMoniker","StakeRunnerMoniker","StakeEventNames","StakeEventsViewerMoniker","StakeTotalsViewerMoniker","StepStakeViewerMoniker","StepViewerMoniker","TimeSyncViewerMoniker","TransferBalanceViewerMoniker","SimpleAccountBalanceViewer","AbstractCreatableProvider","defaultMoniker","AccountBalanceViewerMoniker","monikers","moniker","blockViewer","params","context","transfersSummaryContext","paramsHandler","assertEx","accountBalance","address","headOrRange","balances","accountBalances","AttoXL1","accountBalanceHistories","_addresses","_rangeOrHash","Error","accountBalanceHistory","range","asRange","startingRange","asXL1BlockRange","currentBlockNumber","blockNumbers","distillTransferHistory","blocks","Promise","all","map","bn","blockByNumber","filter","exists","result","block","transferIndexes","payload_schemas","schema","index","TransferSchema","undefined","transfers","hash","payload_hashes","find","p","_hash","t","from","isDefined","length","pairs","transfer","push","_headOrRange","qualifiedAccountBalances","qualifiedAccountBalanceHistories","addresses","head","asHash","currentBlockHash","blockByHash","qualifiedEntries","qualifiedAccountBalanceHistory","entries","history","qualifiedRange","qualifiedHeadHash","_","__","headHash","Object","fromEntries","spanRootAsync","qualifiedSummary","balancesSummary","addr","summaryBalance","max","StepSizes","Array","i","slice","n","asXL1BlockNumber","frames","deepCalculateFramesFromRange","transferSummaryPairs","frame","transfersStepSummaryFromRange","filteredTransferSummaryPairs","summary","keys","includes","sortedTransferSummaryPairs","toSorted","a","b","resultBlockNumbers","Set","values","size","value","add","currentBlock","assertEx","exists","isDefined","spanRootAsync","asSignedHydratedBlockWithHashMeta","asXL1BlockNumber","LRUCache","HydratedCache","cache","chainMap","hydrateFunction","maxSize","LRUCache","max","get","hash","existing","undefined","block","set","has","z","isZodError","error","ZodError","prettifyZodError","prettifyError","SimpleBlockViewer","AbstractCreatableProvider","defaultMoniker","BlockViewerMoniker","monikers","moniker","_payloadCache","_signedHydratedBlockCache","context","params","finalizedArchivist","hydratedBlockCache","chainMap","store","HydratedCache","hash","maxDepth","minDepth","result","hydrateBlock","asSignedHydratedBlockWithHashMeta","payloadCache","LruCacheMap","max","paramsHandler","assertEx","blockByHash","spanRootAsync","cache","get","tracer","blockByNumber","blockNumber","hydratedBlockByNumber","blocksByHash","limit","blocks","current","length","push","previousHash","previous","map","b","blocksByNumber","block","previousNumber","asXL1BlockNumber","currentBlock","currentHead","getCurrentHead","_hash","console","log","currentBlockHash","currentBlockNumber","name","payloadByHash","cachedPayload","isDefined","set","payloadsByHash","hashes","remainingHashes","cachedPayloads","getMany","cachedHashes","Set","p","filter","h","has","remainingPayloads","exists","chainArchivist","findMostRecentBlock","SimpleBlockRewardViewer","AbstractCreatableProvider","defaultMoniker","BlockRewardViewerMoniker","monikers","moniker","rewardFromBlockNumber","allowedRewardForBlock","block","params","initialReward","stepSize","stepFactorNumerator","stepFactorDenominator","minRewardPerBlock","creatorReward","asAddress","toAddress","assertEx","Account","isDefined","SimpleChainStakeEventsViewer","AbstractCreatableProvider","defaultMoniker","StakeEventsViewerMoniker","monikers","moniker","positions","params","positionCount","range","positionsFromRange","length","stakeEvents","name","events","eventsFromPositions","isDefined","filter","event","startHandler","map","position","time","addBlock","args","staker","staked","amount","id","removeBlock","push","withdrawBlock","flat","startBlock","endBlock","Number","MAX_SAFE_INTEGER","filteredPositions","SimpleChainStakeViewer","AbstractCreatableProvider","defaultMoniker","StakeViewerMoniker","monikers","moniker","_chainId","_chainStakeEventsViewer","chainId","assertEx","chainMap","params","minWithdrawalBlocks","rewardsContract","toAddress","stakeEvents","stakingTokenAddress","positions","active","position","removeBlock","amount","activeByAddressStaked","staked","asAddress","activeByStaker","staker","pending","withdrawBlock","pendingByStaker","stakeById","id","Error","stakeByStaker","slot","filter","s","stakesByStaked","range","undefined","endBlock","Number","MAX_SAFE_INTEGER","addBlock","stakesByStaker","withdrawn","withdrawnByStaker","startHandler","Account","random","address","SimpleChainStakeEventsViewer","create","SimpleXyoClient","gateways","permissions","isAnyPayload","AbstractSimpleDataLake","AbstractCreatableProvider","allowedSchemas","params","disallowedSchemas","map","isAllowed","value","isAnyPayload","isAllowedSchema","schema","includes","SimpleDataLakeRunner","AbstractSimpleDataLake","defaultMoniker","DataLakeRunnerMoniker","monikers","moniker","clear","map","delete","hash","set","data","isAllowed","setMany","entries","allowed","filter","_","isAnyPayload","SimpleDataLakeViewer","AbstractSimpleDataLake","defaultMoniker","DataLakeViewerMoniker","monikers","moniker","get","hash","result","map","isAllowed","undefined","getMany","hashes","filter","data","has","value","isAnyPayload","SimpleXyoGateway","_connection","_signer","signer","connection","connectionInstance","signerInstance","assertEx","BigIntToJsonZod","isDefined","PayloadBuilder","asXL1BlockNumber","TransferSchema","SimpleXyoGatewayRunner","_connection","_dataLakes","_signer","connection","signer","dataLakes","connectionInstance","Error","signerInstance","addDataLake","dataLake","push","length","addPayloadsToChain","onChain","offChain","options","viewer","assertEx","nbf","exp","chain","fees","resolvedChainId","isDefined","chainId","resolvedNbf","asXL1BlockNumber","currentBlockNumber","resolvedExp","tx","buildUnsignedTransaction","address","addTransactionToChain","runner","signedTx","signTransaction","addPayloadsToDataLakes","broadcastTransaction","confirmSubmittedTransaction","txHash","removeDataLake","index","send","to","amount","sendMany","transfers","from","hexTransfers","Object","fromEntries","entries","map","BigIntToJsonZod","parse","transfer","PayloadBuilder","schema","TransferSchema","fields","epoch","Date","now","build","hash","payloads","Promise","all","payload","set","_hash","AbstractCreatable","creatable","PayloadBuilder","SimpleMempoolRunner","AbstractCreatable","pendingBlocksArchivist","params","pendingTransactionsArchivist","submitBlocks","blocks","bundles","Promise","all","map","bw","payloads","hydratedBlockToPayloadBundle","PayloadBuilder","addHashMeta","inserted","insert","p","_hash","submitTransactions","transactions","tx","hydratedTransactionToPayloadBundle","creatable","exists","isDefined","isHash","isHashMeta","isPayloadBundle","SimpleMempoolViewer","AbstractCreatableProvider","defaultMoniker","MempoolViewerMoniker","monikers","moniker","pendingBlocksArchivist","params","pendingTransactionsArchivist","pendingBlocks","cursor","providedCursor","undefined","isHash","p","get","isDefined","_sequence","bundles","next","order","limit","filteredBundles","filter","isPayloadBundle","isHashMeta","Promise","all","map","bundle","bundledPayloadToHydratedBlock","exists","pendingTransactions","bundledPayloadToHydratedTransaction","isUndefined","isNetworkStatus","axios","NetworkStatusSchema","unknownStatus","description","schema","state","errorStatus","MainNetworkStats","id","statusUrl","SequenceNetworkStats","LocalNetworkStats","StatusNetworks","SimpleXyoNetwork","_networkId","networkId","status","statusNetwork","StatusNetworks","isUndefined","Error","makeRequest","statusUrl","url","response","axios","get","isNetworkStatus","data","console","error","unknownStatus","errorStatus","assertEx","SimpleXyoPermissions","invoker","_store","store","assertEx","getPermissions","requestPermissions","permissions","Promise","resolve","newPermissions","now","Date","req","parentCapability","push","caveats","Object","entries","map","type","value","date","existingPermissions","perm","idx","findIndex","p","setPermissions","revokePermissions","revoked","removed","splice","assertEx","MemoryPermissionsStore","_invoker","permissions","invoker","assertEx","getPermissions","Promise","resolve","setPermissions","MemoryArchivist","PayloadBuilder","SimpleXyoRunner","_mempoolArchivist","mempoolArchivist","broadcastTransaction","transaction","archivist","getMempoolArchivist","insert","flattenHydratedTransaction","PayloadBuilder","hash","MemoryArchivist","create","account","PayloadBuilder","SignedHydratedTransactionWithHashMetaZod","SimpleXyoSigner","_account","account","address","createSignedTransaction","chain","elevatedPayloads","additionalPayloads","nbf","exp","fees","from","fromAddress","transaction","buildTransaction","signTransaction","tx","txBW","SignedHydratedTransactionWithHashMetaZod","parse","PayloadBuilder","addStorageMeta","asHash","assertEx","isDefined","asTimePayload","asXL1BlockNumber","TimeSchema","SimpleTimeSyncViewer","AbstractCreatableProvider","defaultMoniker","TimeSyncViewerMoniker","monikers","moniker","blockViewer","params","ethProvider","convertTime","fromDomain","toDomain","from","block","payloads","assertEx","blockByNumber","asXL1BlockNumber","timeSchemaIndex","payload_schemas","indexOf","TimeSchema","hash","undefined","payload_hashes","timePayload","asTimePayload","isDefined","find","p","_hash","xl1","epoch","ethereum","Error","currentTime","domain","currentBlock","Date","now","getBlockNumber","currentTimeAndHash","head","provider","blockNumber","getBlock","blockHash","asHash","currentTimePayload","assertEx","asTimePayload","TimeSchema","xl1BlockNumberToEthBlockNumber","context","xl1BlockNumber","blockHash","hashFromBlockNumber","hydratedBlock","hydrateBlock","store","timePayload","asTimePayload","find","p","schema","TimeSchema","required","assertEx","ethereum","HDWallet","WALLET_COMPLIANCE","COIN_TYPES","Ethereum","ACCOUNT_TYPE","GANACHE","XYO","CHANGE_ADDRESS","META_MASK","ADDRESS_INDEX","DEFAULT_WALLET_PATH","generateXyoBaseWalletFromPhrase","walletPhrase","wallet","HDWallet","fromPhrase","DEFAULT_WALLET_PATH"]}
1
+ {"version":3,"sources":["../../src/block/hydrate/allHashesPresent.ts","../../src/block/hydrate/blockPayloadsFromHydratedBlock.ts","../../src/block/hydrate/flattenHydratedBlock.ts","../../src/block/hydrate/flattenHydratedBlocks.ts","../../src/block/hydrate/hydrateBlock.ts","../../src/block/hydrate/transactionsFromHydratedBlock.ts","../../src/block/hydrate/tryHydrateBlock.ts","../../src/block/primitives/blockFromBlockNumber.ts","../../src/model/ChainContext/ChainContext.ts","../../src/driver/cache/LruCacheMap.ts","../../src/driver/memory/MemoryMap.ts","../../src/primitives/block/range/blockRangeSteps.ts","../../src/primitives/chain/getWindowedChain.ts","../../src/primitives/chain/step/chainStepRewardAddress.ts","../../src/primitives/payload/mergeTransfers.ts","../../src/primitives/step/completedStepRewardAddress.ts","../../src/primitives/step/derivedReceiveAddress.ts","../../src/primitives/step/stepBlockRange.ts","../../src/primitives/step/stepTransferIndex.ts","../../src/primitives/chain/step/stepRewardBlock.ts","../../src/primitives/state/findMostRecentBlock.ts","../../src/primitives/state/hydratedBlockByNumber.ts","../../src/primitives/chain/step/stepRewardTotal.ts","../../src/payloads/AddressPairPayload.ts","../../src/payloads/netBalancesForPayloads.ts","../../src/payloads/netSchemasForPayloads.ts","../../src/payloads/netTransfersForPayloads.ts","../../src/primitives/chain/step/stepsRewardTotal.ts","../../src/constants.ts","../../src/primitives/chain/time/externalBlockNumberFromXL1BlockNumber.ts","../../src/primitives/chain/time/externalBlockRangeFromXL1BlockRange.ts","../../src/primitives/chain/time/externalBlockRangeFromStep.ts","../../src/primitives/mapToMapType.ts","../../src/primitives/readPayloadMapFromStore.ts","../../src/primitives/rewardFromBlockNumber.ts","../../src/primitives/stake/activeStakeAtTimeByAddress.ts","../../src/primitives/stake/mergedAddRemoveStakeEventsByStaker.ts","../../src/primitives/stake/activeStakeAtTimeByPosition.ts","../../src/primitives/stake/mergedAddRemoveStakeEventsByPosition.ts","../../src/primitives/stake/allStakersForRange.ts","../../src/primitives/stake/allStakersForStep.ts","../../src/primitives/stake/weightedStakeForRangeByPosition.ts","../../src/primitives/rewards/networkStakeStepRewardPositionWeight.ts","../../src/primitives/timeBudget.ts","../../src/primitives/transaction/elevatedPayloads.ts","../../src/primitives/uncle/scoreUncle.ts","../../src/primitives/uncle/findBestUncle.ts","../../src/primitives/uncle/findUncles.ts","../../src/model/ChainQualification.ts","../../src/model/PayloadBundle/bundledPayloadToHydratedBlock.ts","../../src/model/PayloadBundle/bundledPayloadToHydratedTransaction.ts","../../src/model/PayloadBundle/hydratedBlockToPayloadBundle.ts","../../src/model/PayloadBundle/hydratedTransactionToPayloadBundle.ts","../../src/transaction/buildRandomTransaction.ts","../../src/createTransferPayload.ts","../../src/transaction/buildTransaction.ts","../../src/transaction/buildUnsignedTransaction.ts","../../src/transaction/confirmSubmittedTransaction.ts","../../src/transaction/hydrateTransaction.ts","../../src/transaction/primitives/transactionBlockByteCount.ts","../../src/transaction/primitives/transactionElevatedPayloads.ts","../../src/transaction/primitives/transactionOperations.ts","../../src/transaction/primitives/transactionRequiredGas.ts","../../src/transaction/script.ts","../../src/transaction/signTransaction.ts","../../src/transaction/TransactionBuilder.ts","../../src/model/Provider.ts","../../src/block/primitives/frames/calculateFramesFromRange.ts","../../src/block/primitives/frames/deepCalculateFramesFromRange.ts","../../src/block/primitives/hashFromBlockNumber.ts","../../src/block/primitives/model.ts","../../src/block/primitives/toStepIdentityString.ts","../../src/config/Bridge.ts","../../src/validation/block/error.ts","../../src/validation/lib/isLocalhost.ts","../../src/validation/lib/getUrl.ts","../../src/validation/schema/Address.ts","../../src/validation/schema/Mnemonic.ts","../../src/config/Config.ts","../../src/config/Api.ts","../../src/config/Chain.ts","../../src/config/Evm.ts","../../src/config/Log.ts","../../src/config/Mempool.ts","../../src/config/Producer.ts","../../src/config/RewardRedemptionApi.ts","../../src/config/Services.ts","../../src/config/storage/driver/Mongo.ts","../../src/config/storage/Storage.ts","../../src/config/Telemetry.ts","../../src/config/Validation.ts","../../src/config/UsageMeta.ts","../../src/CreatableProvider/AbstractCreatableProvider.ts","../../src/CreatableProvider/ProviderFactory.ts","../../src/CreatableProvider/CreatableProvider.ts","../../src/CreatableProvider/CreatableProviderRegistry.ts","../../src/CreatableProvider/LabeledCreatableProviderFactory.ts","../../src/CreatableProvider/ProviderFactoryLocator.ts","../../src/createDeclarationPayload.ts","../../src/eip-712/Payloads/EIP712Data.ts","../../src/eip-712/Types.ts","../../src/eip-712/Payloads/EIP712Signature.ts","../../src/eip-712/sign.ts","../../src/eip-712/verify.ts","../../src/multipliers.ts","../../src/provider/DataLake.ts","../../src/provider/viewer/NetworkStake/NetworkStakeViewer.ts","../../src/provider/viewer/NetworkStake/Rewards/ByPositionViewer.ts","../../src/provider/viewer/NetworkStake/Rewards/ByStakerViewer.ts","../../src/provider/viewer/NetworkStake/Rewards/ByStepViewer.ts","../../src/provider/viewer/NetworkStake/Rewards/TotalViewer.ts","../../src/provider/viewer/NetworkStake/Rewards/Viewer.ts","../../src/provider/viewer/XyoViewer.ts","../../src/provider/XyoConnection.ts","../../src/provider/XyoRunner.ts","../../src/runners/Block.ts","../../src/runners/Mempool.ts","../../src/services/StakeIntentService/ChainIndexingServiceStateSchema.ts","../../src/SignedBigInt.ts","../../src/simple/accountBalance/SimpleAccountBalanceViewer.ts","../../src/summary/model/BalancesStepSummary.ts","../../src/summary/model/SchemasStepSummary.ts","../../src/summary/model/StepSummary.ts","../../src/summary/model/TransfersSummary.ts","../../src/summary/primitives/balances/balancesStepSummaryFromRange.ts","../../src/summary/primitives/balances/balancesSummary.ts","../../src/summary/primitives/schemas/schemasStepSummaryFromRange.ts","../../src/summary/primitives/schemas/schemasSummary.ts","../../src/summary/primitives/transfers/transfersStepSummaryFromRange.ts","../../src/summary/primitives/transfers/transfersSummary.ts","../../src/viewers/AccountBalance.ts","../../src/viewers/Block.ts","../../src/viewers/BlockReward.ts","../../src/viewers/BlockValidation.ts","../../src/viewers/ChainContract.ts","../../src/viewers/ChainStakeViewer.ts","../../src/viewers/Mempool.ts","../../src/viewers/NetworkStakeStepReward.ts","../../src/viewers/Stake.ts","../../src/viewers/StakeEvents.ts","../../src/viewers/StakeTotals.ts","../../src/viewers/StepStake.ts","../../src/viewers/StepViewer.ts","../../src/viewers/TimeSync.ts","../../src/viewers/TransactionValidation.ts","../../src/viewers/TransferBalance.ts","../../src/simple/block/SimpleBlockViewer.ts","../../src/utils/HydratedCache.ts","../../src/utils/isZodError.ts","../../src/simple/blockReward/SimpleBlockRewardViewer.ts","../../src/simple/blockValidation/SimpleBlockValidationViewer.ts","../../src/simple/chainStake/SimpleStakeViewer.ts","../../src/simple/client/SimpleXyoClient.ts","../../src/simple/datalake/AbstractSimpleDataLake.ts","../../src/simple/datalake/SimpleDataLakeRunner.ts","../../src/simple/datalake/SimpleDataLakeViewer.ts","../../src/simple/gateway/SimpleXyoGateway.ts","../../src/simple/gateway/SimpleXyoGatewayRunner.ts","../../src/simple/mempool/SimpleMempoolRunner.ts","../../src/simple/mempool/SimpleMempoolViewer.ts","../../src/simple/network/SimpleXyoNetwork.ts","../../src/simple/network/lib/FailedNetworkStatusPayloads.ts","../../src/simple/network/lib/StatusNetworks.ts","../../src/simple/permissions/SimpleXyoPermissions.ts","../../src/simple/permissions/store/MemoryPermissions.ts","../../src/simple/runner/SimpleXyoRunner.ts","../../src/simple/signer/SimpleXyoSigner.ts","../../src/simple/stakeEvents/SimpleStakeEventsViewer.ts","../../src/simple/timesync/SimpleTimeSyncViewer.ts","../../src/status/ServiceStatus.ts","../../src/status/RuntimeStatusMonitor.ts","../../src/time/primitives/xl1BlockNumberToEthBlockNumber.ts","../../src/wallet/generateXyoBaseWalletFromPhrase.ts","../../src/wallet/paths.ts"],"sourcesContent":["import type { Hash } from '@xylabs/sdk-js'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\n\nexport function allHashesPresent(hashes: Hash[], payloads: WithStorageMeta<Payload>[]): boolean {\n const payloadHashes = new Set(payloads.map(p => p._hash))\n return hashes.every(hash => payloadHashes.has(hash))\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { HydratedBlockWithStorageMeta } from '@xyo-network/xl1-protocol'\nimport { isTransactionBoundWitness } from '@xyo-network/xl1-protocol'\n\nexport const blockPayloadsFromHydratedBlock = (block: HydratedBlockWithStorageMeta): WithStorageMeta[] => {\n return block[0].payload_hashes.map(hash => assertEx(\n block[1].find(p => p._hash === hash),\n () => `missing payload ${hash}`,\n )).filter(x => !isTransactionBoundWitness(x))\n}\n","import type { Payload } from '@xyo-network/payload-model'\nimport { type BlockBoundWitness, toHydratedBlock } from '@xyo-network/xl1-protocol'\n\nexport const flattenHydratedBlock = <B extends BlockBoundWitness, P extends Payload>(hydratedBlock: [B, P[]]): (P | B)[] => {\n const [blk, blkPayloads] = hydratedBlock\n return [...blkPayloads, blk]\n}\n\nexport const tryUnflattenHydratedBlock = <\n B extends BlockBoundWitness,\n P extends Payload,\n>(flattened: (P | B)[]): [B, P[]] | undefined => {\n // Last element is the block\n const blk = flattened.at(-1) as B\n\n // All previous elements are payloads\n const payloads = flattened.slice(0, -1) as P[]\n\n return toHydratedBlock([blk, payloads])\n}\n\nexport const unflattenHydratedBlock = <\n B extends BlockBoundWitness,\n P extends Payload,\n>(flattened: (P | B)[]): [B, P[]] => toHydratedBlock(tryUnflattenHydratedBlock(flattened), true) as [B, P[]]\n","import type { HydratedBlock } from '@xyo-network/xl1-protocol'\n\nimport { flattenHydratedBlock } from './flattenHydratedBlock.ts'\n\nexport const flattenHydratedBlocks = <T extends HydratedBlock>(hydratedBlocks: T[]): (T[0] | T[1][number])[] =>\n hydratedBlocks.flatMap(blk => flattenHydratedBlock(blk))\n","import type { Hash } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { HydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol'\nimport { asBlockBoundWitnessWithStorageMeta, isTransactionBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'\n\nimport type { ChainStoreRead } from '../../model/index.ts'\nimport { allHashesPresent } from './allHashesPresent.ts'\n\nexport const hydrateBlock = async (\n { chainMap }: ChainStoreRead,\n hash: Hash,\n maxDepth: number = 1,\n minDepth = maxDepth,\n): Promise<HydratedBlockWithHashMeta> => {\n assertEx(maxDepth >= 0, () => 'maxDepth must be greater than or equal to 0')\n assertEx(minDepth >= 0, () => 'minDepth must be greater than or equal to 0')\n assertEx(maxDepth >= minDepth, () => 'maxDepth must be greater than or equal to minDepth')\n\n const bw = assertEx(asBlockBoundWitnessWithStorageMeta(\n assertEx(await chainMap.get(hash), () => `block ${hash} not found`),\n ), () => `hash ${hash} is not a BlockBoundWitness`)\n\n if (maxDepth === 0) return [bw, []]\n const blkPayloads = await chainMap.getMany(bw.payload_hashes)\n if (minDepth === 1) assertEx(allHashesPresent(bw.payload_hashes, blkPayloads), () => `Unable to find all payloads for block ${hash}`)\n if (maxDepth === 1) return [bw, blkPayloads]\n const transactions = blkPayloads.filter(isTransactionBoundWitnessWithStorageMeta)\n const transactionsPayloadHashes = transactions.flatMap(tx => tx.payload_hashes)\n const transactionsPayloads = await chainMap.getMany(transactionsPayloadHashes)\n assertEx(allHashesPresent(transactionsPayloadHashes, transactionsPayloads), () => `Unable to find all payloads for transactions in block ${hash}`)\n const allPayloadsHashes = new Set([...blkPayloads, ...transactionsPayloads].flatMap(p => p._hash))\n const allPayloads = await chainMap.getMany([...allPayloadsHashes])\n const allPayloadsFiltered = allPayloads.filter(p => allPayloadsHashes.has(p._hash))\n if (maxDepth === 2) assertEx(allHashesPresent(\n [...allPayloadsHashes],\n allPayloadsFiltered,\n ), () => `Unable to find all payloads for transactions in block ${hash}`)\n return [bw, allPayloadsFiltered]\n}\n","import type { HydratedBlock, TransactionBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'\nimport { isTransactionBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'\n\nexport const transactionsFromHydratedBlock = (block: HydratedBlock): TransactionBoundWitnessWithStorageMeta[] => {\n return block[1].filter(isTransactionBoundWitnessWithStorageMeta)\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { ReadArchivist } from '@xyo-network/archivist-model'\nimport type { HydratedBlock } from '@xyo-network/xl1-protocol'\nimport { isBlockBoundWitnessWithStorageMeta, isTransactionBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'\n\nexport const tryHydrateBlock = async (\n archivist: ReadArchivist,\n hash: Hash,\n maxDepth: number = 1,\n): Promise<HydratedBlock | undefined> => {\n assertEx(maxDepth >= 0, () => 'maxDepth must be greater than or equal to 0')\n const bw = (await archivist.get([hash])).find(isBlockBoundWitnessWithStorageMeta)\n if (!bw) return undefined\n if (maxDepth === 0) return [bw, []]\n const blkPayloads = await archivist.get(bw.payload_hashes)\n if (maxDepth === 1) return [bw, blkPayloads]\n const transactions = blkPayloads.filter(isTransactionBoundWitnessWithStorageMeta)\n const transactionsPayloadHashes = transactions.flatMap(tx => tx.payload_hashes)\n const transactionsPayloads = await archivist.get(transactionsPayloadHashes)\n const allPayloadsHashes = new Set([...blkPayloads, ...transactionsPayloads].flatMap(p => p._hash))\n const allPayloads = await archivist.get([...allPayloadsHashes])\n const allPayloadsFiltered = allPayloads.filter(p => allPayloadsHashes.has(p._hash))\n return [bw, allPayloadsFiltered]\n}\n","import {\n asHash, type Hash, isDefined,\n} from '@xylabs/sdk-js'\nimport { toSafeJsonString } from '@xylabs/sdk-js'\nimport type { Signed } from '@xyo-network/boundwitness-model'\nimport type { WithHashMeta } from '@xyo-network/payload-model'\nimport type { BlockBoundWitness, XL1BlockNumber } from '@xyo-network/xl1-protocol'\nimport {\n asSignedBlockBoundWitnessWithStorageMeta, SignedBlockBoundWitnessWithHashMetaZod, StepSizes,\n} from '@xyo-network/xl1-protocol'\n\nimport { type ChainContextRead, withContextCacheResponse } from '../../model/index.ts'\n\nexport async function blockFromBlockNumber(context: ChainContextRead, blockNumber: XL1BlockNumber): Promise<WithHashMeta<Signed<BlockBoundWitness>>> {\n const cacheKey = `${blockNumber}`\n return await withContextCacheResponse(context, 'blockFromBlockNumber', cacheKey, async () => {\n const [headHash] = await context.head()\n const result = await context.store.chainMap.get(headHash)\n if (!isDefined(result)) {\n throw new Error(`Head block not found for hash: ${headHash}`)\n }\n let currentBlock = asSignedBlockBoundWitnessWithStorageMeta(\n result,\n () => `Found Payload is not a Signed<BlockBoundWitness>: ${JSON.stringify(result, null, 2)}`,\n )\n if (currentBlock.block < blockNumber) {\n throw new Error(`Block number ${blockNumber} is greater than head ${currentBlock.block}.`)\n }\n while (currentBlock.block > blockNumber) {\n let jumpHash: Hash | null = currentBlock.previous\n let jumpBlockNumber = currentBlock.block - 1\n for (const [step, stepSize] of StepSizes.entries()) {\n const possibleJumpBlockNumber = currentBlock.block - (currentBlock.block % stepSize) - 1\n if (possibleJumpBlockNumber >= blockNumber && possibleJumpBlockNumber <= jumpBlockNumber) {\n jumpBlockNumber = possibleJumpBlockNumber\n jumpHash = asHash(currentBlock.step_hashes?.at(step), () => `Step hash not found for step ${step} in block ${currentBlock.block}`)\n }\n }\n const newBlock = await context.store.chainMap.get(\n asHash(jumpHash, () => `Jump hash not found for block number [${blockNumber}]: ${jumpBlockNumber} ${toSafeJsonString(currentBlock, 10)}`),\n )\n if (!isDefined(newBlock)) {\n throw new Error(`Block not found for jump hash: ${jumpHash}`)\n }\n currentBlock = asSignedBlockBoundWitnessWithStorageMeta(\n newBlock,\n () => {\n const result = SignedBlockBoundWitnessWithHashMetaZod.safeParse(newBlock)\n return `Found Payload [jump hash] is not a Signed<BlockBoundWitness>: ${result.error}`\n },\n )\n if (currentBlock.block === blockNumber) {\n break\n }\n if (currentBlock.block < blockNumber) {\n throw new Error(`Block number ${blockNumber} is not a valid step block number for block ${headHash}.`)\n }\n }\n return currentBlock\n })\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport { isDefined, isUndefined } from '@xylabs/sdk-js'\n\nimport { LruCacheMap, MemoryMap } from '../../driver/index.ts'\nimport type { MapType } from '../../map/index.ts'\nimport { timeBudget } from '../../primitives/index.ts'\nimport type {\n ChainStakeContext, ChainStakeContextRead, ChainStakeContextWrite,\n} from './ChainStakeContext.ts'\nimport type { ChainStateContextRead, ChainStateContextWrite } from './ChainStateContext.ts'\nimport type {\n ChainStoreContext, ChainStoreContextRead, ChainStoreContextWrite,\n} from './ChainStoreContext.ts'\n\nexport interface BaseContext<TCacheValue = string | object | number | bigint> {\n caches?: Record<string, MapType<string, TCacheValue>>\n logger?: Logger\n singletons: Record<string, unknown>\n}\n\nexport function contextCache<TCacheValue>(\n context: BaseContext<TCacheValue | unknown>,\n name: string,\n create?: () => MapType<string, TCacheValue>,\n): MapType<string, TCacheValue> {\n if (!context.caches) {\n context.caches = {}\n }\n if (isUndefined(context.caches[name])) {\n context.caches[name] = create?.() ?? new MemoryMap<string, TCacheValue>()\n }\n return context.caches[name] as MapType<string, TCacheValue>\n}\n\nexport interface withContextCacheResponseOptions {\n max?: number\n timeBudgetMs?: number\n}\n\nexport async function withContextCacheResponse<T extends {} | string | number | bigint>(\n context: BaseContext,\n name: string,\n key: string,\n func: () => Promise<T extends {} | string | number | bigint ? T : never>,\n { max = 10_000, timeBudgetMs = 0 }: withContextCacheResponseOptions = {},\n): Promise<T> {\n const cache = contextCache<T>(\n context,\n name,\n () => new LruCacheMap<string, T>({ max }),\n )\n const cacheResult = await cache.get(key)\n if (isDefined(cacheResult)) {\n return cacheResult\n }\n const result = timeBudgetMs > 0 ? await timeBudget(name, context.logger, func, timeBudgetMs) : await func()\n await cache.set(key, result)\n return result\n}\n\nexport interface ChainContextWrite extends BaseContext, ChainStateContextWrite, ChainStoreContextWrite {}\n\nexport interface StakedChainContextWrite extends BaseContext, ChainContextWrite, ChainStakeContextWrite {}\n\nexport interface ChainContextRead extends BaseContext, ChainStateContextRead, ChainStoreContextRead {}\n\nexport interface StakedChainContextRead extends BaseContext, ChainContextRead, ChainStakeContextRead {}\n\nexport type ChainContext = ChainContextRead & ChainContextWrite & ChainStoreContext\n\nexport type StakedChainContext = ChainContext & ChainStakeContext & ChainStakeContextRead & ChainStakeContextWrite\n","import { LRUCache } from 'lru-cache'\n\nimport type { SyncMap } from '../../map/index.ts'\n\nexport class LruCacheMap<K extends {}, V extends {} | string | number | bigint, FC = () => void> implements SyncMap<K, V> {\n private lruCache: LRUCache<K, V, FC>\n\n constructor(options?: LRUCache.Options<K, V, FC>) {\n this.lruCache = new LRUCache<K, V, FC>(options ?? { max: 5000 })\n }\n\n clear(): void {\n this.lruCache.clear()\n }\n\n delete(id: K): boolean {\n return this.lruCache.delete(id)\n }\n\n get(id: K): V | undefined {\n return this.lruCache.get(id)\n }\n\n getMany(id: K[]): V[] {\n const results: V[] = []\n for (const key of id) {\n const value = this.lruCache.get(key)\n if (value !== undefined) {\n results.push(value)\n }\n }\n return results\n }\n\n has(id: K): boolean {\n return this.lruCache.has(id)\n }\n\n set(id: K, data: V) {\n this.lruCache.set(id, data)\n }\n\n setMany(entries: [K, V][]): void {\n for (const [key, value] of entries) {\n this.lruCache.set(key, value)\n }\n }\n}\n","import { isDefined } from '@xylabs/sdk-js'\n\nimport type { SyncMap } from '../../map/index.ts'\n\nexport class MemoryMap<K extends {}, V = {}> implements SyncMap<K, V> {\n private map: Map<K, V>\n\n constructor() {\n this.map = new Map<K, V>()\n }\n\n clear(): void {\n this.map.clear()\n }\n\n delete(id: K): boolean {\n return this.map.delete(id)\n }\n\n get(id: K): V | undefined {\n return this.map.get(id)\n }\n\n getMany(ids: K[]): V[] {\n const results: V[] = []\n for (const id of ids) {\n const data = this.map.get(id)\n if (isDefined(data)) {\n results.push(data)\n }\n }\n return results\n }\n\n has(id: K): boolean {\n return this.map.has(id)\n }\n\n set(id: K, data: V) {\n this.map.set(id, data)\n }\n\n setMany(entries: [K, V][]): void {\n for (const [key, value] of entries) {\n this.map.set(key, value)\n }\n }\n}\n","import type {\n StepIdentity,\n XL1BlockRange,\n} from '@xyo-network/xl1-protocol'\nimport { asXL1BlockNumber, StepSizes } from '@xyo-network/xl1-protocol'\n\nexport function blockRangeSteps(range: XL1BlockRange, steps: number[]): StepIdentity[] {\n const result: StepIdentity[] = []\n for (const step of steps) {\n const stepSize = StepSizes[step]\n // we add stepSize twice to get to the start of the next full step\n const startOfFirstStepCandidate = range[0] - (range[0] % stepSize) + stepSize\n const startOfFirstStep = asXL1BlockNumber(\n startOfFirstStepCandidate,\n { name: 'blockRangeSteps' },\n )\n for (let block = startOfFirstStep; block <= range[1]; block = asXL1BlockNumber(block + stepSize, { name: 'blockRangeSteps' })) {\n result.push({ step, block })\n }\n }\n return result\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport type { SignedHydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol'\n\nimport type { BlockViewer } from '../../viewers/index.ts'\n\nexport async function getWindowedChain(blockViewer: BlockViewer, maxWindowSize: number, previousChain: SignedHydratedBlockWithHashMeta[] = []) {\n const newBlocks: SignedHydratedBlockWithHashMeta[] = []\n let currentBlock: SignedHydratedBlockWithHashMeta | null = await blockViewer.currentBlock()\n console.log('[getWindowedChain] Current Block:', currentBlock?.[0]._hash)\n const head = currentBlock\n while (currentBlock !== null && currentBlock[0].block >= head[0].block) {\n newBlocks.unshift(currentBlock)\n const previousBlockHash: Hash | null = currentBlock[0].previous\n currentBlock = (previousBlockHash === null ? null : await blockViewer.blockByHash(previousBlockHash))\n }\n const newChain = [...previousChain, ...newBlocks].slice(-maxWindowSize)\n while (newChain.length > 0 && newChain.length < maxWindowSize && newChain[0][0].previous !== null) {\n const block = await blockViewer.blockByHash(newChain[0][0].previous!)\n if (block === null) break\n newChain.unshift(block)\n }\n return newChain\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport {\n assertEx, exists, toAddress,\n} from '@xylabs/sdk-js'\nimport type { StepIdentity } from '@xyo-network/xl1-protocol'\nimport {\n asTransfer, isTransfer, XYO_STEP_REWARD_ADDRESS,\n} from '@xyo-network/xl1-protocol'\n\nimport type { ChainContextRead } from '../../../model/index.ts'\nimport { mergeTransfers } from '../../payload/index.ts'\nimport { stepTransferIndex } from '../../step/index.ts'\nimport { stepRewardBlock } from './stepRewardBlock.ts'\n\nexport async function chainStepRewardAddress(context: ChainContextRead, { block, step }: StepIdentity): Promise<Address> {\n const hydratedBlock = await stepRewardBlock(context, { block, step })\n const [transferIndex, transferCount] = stepTransferIndex(block, step)\n const [blockBw, payloads] = hydratedBlock\n\n const transfersFromPool = payloads.filter(isTransfer).map(p => asTransfer(p)).filter(exists).filter(t => t.from === XYO_STEP_REWARD_ADDRESS)\n const fromEntries = Object.entries(mergeTransfers(transfersFromPool)[XYO_STEP_REWARD_ADDRESS])\n const sortedTransferAmounts = (fromEntries).toSorted(([,a], [,b]) => a > b ? -1 : a < b ? 1 : 0)\n assertEx(\n sortedTransferAmounts.length === transferCount,\n () => `Step Transfers mismatch ${block} (${blockBw._hash}) [${sortedTransferAmounts.length} - ${transferCount}]`,\n )\n return toAddress(sortedTransferAmounts[transferIndex][0])\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { hexToBigInt, toAddress } from '@xylabs/sdk-js'\nimport type { Transfer } from '@xyo-network/xl1-protocol'\n\nexport function mergeTransfers(transfers: Transfer[]): Record<Address, Record<Address, bigint>> {\n const result: Record<Address, Record<Address, bigint>> = {}\n for (const transfer of transfers) {\n result[transfer.from] = result[transfer.from] ?? {}\n for (const [to, value] of Object.entries(transfer.transfers)) {\n const typedTo = toAddress(to)\n result[transfer.from][typedTo] = (result[transfer.from][typedTo] ?? 0n) + (hexToBigInt(value))\n }\n }\n return result\n}\n","import { type Address, toAddress } from '@xylabs/sdk-js'\nimport { type StepIdentity, StepSizes } from '@xyo-network/xl1-protocol'\nimport { keccak256 } from 'ethers'\n\nexport function completedStepRewardAddress({ block, step }: StepIdentity): Address {\n const resolvedStepSize = step < StepSizes.length ? StepSizes[step] : step\n const addressKey = new TextEncoder().encode(`${block}|${resolvedStepSize}`)\n return toAddress(keccak256(addressKey).slice(-40), { prefix: false })\n}\n","import { type Address, toAddress } from '@xylabs/sdk-js'\nimport { isDefined } from '@xylabs/sdk-js'\nimport { keccak256 } from 'ethers'\n\nexport function derivedReceiveAddress(address: Address, scope?: string): Address {\n const addressKey = new TextEncoder().encode(isDefined(scope) ? `${scope}|${address}` : address)\n return toAddress(keccak256(addressKey).slice(-40), { prefix: false })\n}\n","import type { StepIdentity, XL1BlockRange } from '@xyo-network/xl1-protocol'\nimport { asXL1BlockRange, StepSizes } from '@xyo-network/xl1-protocol'\n\nexport function stepBlockRange({ block, step }: StepIdentity): XL1BlockRange {\n const stepSize = StepSizes[step]\n const start = block - stepSize\n return asXL1BlockRange([start, start + stepSize - 1], { name: 'stepBlockRange' })\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport { StepSizes } from '@xyo-network/xl1-protocol'\n\nexport function stepTransferIndex(block: number, step: number) {\n let rewardTransferCount = 0\n let rewardTransferIndex = -1\n for (let i = 3; i < StepSizes.length; i++) {\n const stepSize = StepSizes[i]\n if (block % stepSize === 0) {\n if (stepSize === StepSizes[step]) {\n rewardTransferIndex = rewardTransferCount\n }\n rewardTransferCount++\n }\n }\n assertEx(rewardTransferIndex >= 0, () => `Could not find step size for step ${step} at block ${block}`)\n return [rewardTransferIndex, rewardTransferCount]\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { HydratedBlockWithHashMeta, StepIdentity } from '@xyo-network/xl1-protocol'\nimport { StepSizes } from '@xyo-network/xl1-protocol'\n\nimport type { ChainContextRead } from '../../../model/index.ts'\nimport { hydratedBlockByNumber } from '../../state/index.ts'\n\nexport async function stepRewardBlock(context: ChainContextRead, { block, step }: StepIdentity): Promise<HydratedBlockWithHashMeta> {\n assertEx((block % StepSizes[step]) === 0, () => `Block must be the first block of the step [${StepSizes[step]}], got ${block}`)\n return assertEx(await hydratedBlockByNumber(context, block), () => `Could not find block for block number ${block}`)\n}\n","import type { NextOptions, ReadArchivist } from '@xyo-network/archivist-model'\nimport type {\n Payload, Sequence, WithStorageMeta,\n} from '@xyo-network/payload-model'\nimport type { SignedBlockBoundWitnessWithHashMeta } from '@xyo-network/xl1-protocol'\nimport { isSignedBlockBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'\n\n// TODO: Use some smart value relative to DEFAULT_BLOCK_SIZE\n// to ensure we're likely to find it in a single request\n// without bringing back too much data\nconst DEFAULT_NEXT_OPTIONS: NextOptions = { limit: 50 }\n\n/**\n * Iterates an archivist to find the most recent block\n * @param chainArchivist The archivist to iterate over for the most recent chain block\n * @param nextOptions The options to use when iterating the archivist\n * @param maxIterations The max number of iterations to perform when finding the most recent block\n * @returns The most recent block found in the archivist or undefined if no blocks are found\n */\nexport const findMostRecentBlock = async (\n chainArchivist: ReadArchivist,\n nextOptions: NextOptions = DEFAULT_NEXT_OPTIONS,\n maxIterations = Number.POSITIVE_INFINITY,\n): Promise<SignedBlockBoundWitnessWithHashMeta | undefined> => {\n let mostRecentBlock: SignedBlockBoundWitnessWithHashMeta | undefined\n let cursor: Sequence | undefined\n let batch: WithStorageMeta<Payload>[]\n let iterations = 0\n do {\n batch = await chainArchivist.next({\n ...nextOptions, order: 'desc', cursor,\n })\n const blocks = batch.filter(isSignedBlockBoundWitnessWithStorageMeta)\n const last = blocks?.at(0)\n if (last) {\n mostRecentBlock = last\n break\n } else {\n cursor = batch.at(-1)?._sequence\n }\n iterations = iterations + 1\n } while (batch.length > 0 && iterations < maxIterations)\n return mostRecentBlock\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { HydratedBlockWithHashMeta, XL1BlockNumber } from '@xyo-network/xl1-protocol'\n\nimport { blockFromBlockNumber, hydrateBlock } from '../../block/index.ts'\nimport { type ChainContextRead, withContextCacheResponse } from '../../model/index.ts'\n\nexport async function hydratedBlockByNumber(context: ChainContextRead, blockNumber: XL1BlockNumber): Promise<HydratedBlockWithHashMeta | null> {\n if (blockNumber < 0) throw new Error(`Block number ${blockNumber} is less than 0`)\n if (blockNumber > Number.MAX_SAFE_INTEGER) throw new Error(`Block number ${blockNumber} is greater than the maximum safe integer`)\n if (blockNumber % 1 !== 0) throw new Error(`Block number ${blockNumber} is not an integer`)\n const cacheKey = `${blockNumber}`\n return await withContextCacheResponse(context, 'hydratedBlockByNumber', cacheKey, async () => {\n const block = assertEx(\n await blockFromBlockNumber(context, blockNumber),\n () => `Could not find block for block number ${blockNumber}`,\n )\n return await hydrateBlock(context.store, block._hash)\n })\n}\n","import { assertEx, isDefined } from '@xylabs/sdk-js'\nimport type {\n AttoXL1, StepIdentity, XL1BlockRange, XL1RangeMultipliers,\n} from '@xyo-network/xl1-protocol'\nimport {\n asAttoXL1, asXL1BlockRange, isTransfer,\n XYO_STEP_REWARD_ADDRESS,\n} from '@xyo-network/xl1-protocol'\n\nimport { type ChainContextRead, withContextCacheResponse } from '../../../model/index.ts'\nimport { netTransfersForPayloads } from '../../../payloads/index.ts'\nimport { stepBlockRange, stepTransferIndex } from '../../step/index.ts'\nimport { stepRewardBlock } from './stepRewardBlock.ts'\n\nfunction stepInRange(step: StepIdentity, range: XL1BlockRange): boolean {\n const stepRange = stepBlockRange(step)\n return ((stepRange[0] >= range[0]) && (stepRange[1] <= range[1]))\n}\n\nexport async function stepRewardTotal(context: ChainContextRead, { block, step }: StepIdentity, multipliers: XL1RangeMultipliers): Promise<AttoXL1> {\n const cacheKey = `${block}|${step}|${isDefined(multipliers)}`\n return await withContextCacheResponse(context, 'stepRewardTotal', cacheKey, async () => {\n const [blockBw, payloads] = await stepRewardBlock(context, { block, step })\n assertEx(blockBw.block === block, () => `Block Mismatch: expected ${block}, got ${blockBw.block}`)\n const [transferIndex] = stepTransferIndex(block, step)\n const stepTransfer = assertEx(\n payloads.find(p => isTransfer(p) && p.from === XYO_STEP_REWARD_ADDRESS),\n () => `No step transfer found for step ${step} at block ${block} (${blockBw._hash})`,\n )\n const rewards = assertEx(\n netTransfersForPayloads([stepTransfer])[XYO_STEP_REWARD_ADDRESS],\n () => `No rewards found for step reward address ${XYO_STEP_REWARD_ADDRESS} at block ${block} (${blockBw._hash})`,\n )\n const sortedTransfers = (Object.entries(rewards)).toSorted(([,a], [,b]) => a > b ? -1 : a < b ? 1 : 0)\n let result = asAttoXL1(sortedTransfers[transferIndex][1] * -1n)\n for (const [rangeKey, [numerator, denominator]] of Object.entries(multipliers)) {\n const rangeParts = rangeKey.split('|').map(Number)\n const range: XL1BlockRange = asXL1BlockRange([rangeParts[0], rangeParts[1]], { name: 'stepRewardTotal' })\n if (stepInRange({ block, step }, range)) {\n result = asAttoXL1(result + result * numerator / denominator)\n }\n }\n return result\n })\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { AsObjectFactory } from '@xylabs/sdk-js'\nimport { isPayloadOfSchemaType, type Payload } from '@xyo-network/payload-model'\n\nexport const AddressPairSchema = 'network.xyo.address.pair' as const\nexport type AddressPairSchema = typeof AddressPairSchema\n\nexport interface AddressFields {\n addresses: [Address, Address]\n}\n\nexport type AddressPairPayload = Payload<AddressFields, AddressPairSchema>\n\n/**\n * Identity function for determining if an object is an AddressPairPayload\n */\nexport const isAddressPairPayload = isPayloadOfSchemaType<AddressPairPayload>(AddressPairSchema)\nexport const asAddressPairPayload = AsObjectFactory.create(isAddressPairPayload)\nexport const asOptionalAddressPairPayload = AsObjectFactory.createOptional(isAddressPairPayload)\n","import {\n type Address, type Hex, hexToBigInt, toAddress,\n} from '@xylabs/sdk-js'\nimport { span } from '@xylabs/sdk-js'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isTransfer } from '@xyo-network/xl1-protocol'\n\nexport const netBalancesForPayloads = (payloads: Payload[]) => {\n return span('netBalancesForPayloads', () => {\n const balances: Record<Address, bigint> = {}\n for (const payload of payloads) {\n if (isTransfer(payload)) {\n const { from } = payload\n for (let [address, amount] of Object.entries(payload.transfers) as [Address, Hex][]) {\n balances[toAddress(address)] = (balances[toAddress(address)] ?? 0n) + hexToBigInt(amount)\n balances[toAddress(from)] = (balances[toAddress(from)] ?? 0n) - hexToBigInt(amount)\n }\n }\n }\n return balances\n })\n}\n","import {\n type Address, type Hex, hexToBigInt, toAddress,\n} from '@xylabs/sdk-js'\nimport { span } from '@xylabs/sdk-js'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isTransfer } from '@xyo-network/xl1-protocol'\n\nexport const netSchemasForPayloads = (payloads: Payload[]) => {\n return span('netSchemasForPayloads', () => {\n const balances: Record<Address, bigint> = {}\n for (const payload of payloads) {\n if (isTransfer(payload)) {\n const { from } = payload\n for (let [address, amount] of Object.entries(payload.transfers) as [Address, Hex][]) {\n balances[toAddress(address)] = (balances[toAddress(address)] ?? 0n) + hexToBigInt(amount)\n balances[toAddress(from)] = (balances[toAddress(from)] ?? 0n) - hexToBigInt(amount)\n }\n }\n }\n return balances\n })\n}\n","import {\n type Address, type Hex, hexToBigInt,\n} from '@xylabs/sdk-js'\nimport { span } from '@xylabs/sdk-js'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isTransfer } from '@xyo-network/xl1-protocol'\n\n// the net transfer amounts for the specified accounts only\nexport function netTransfersForPayloads(payloads: Payload[]): Record<Address, Record<Address, bigint>> {\n return span('netTransfersForPayloads', () => {\n const transfers: Record<Address, Record<Address, bigint>> = {}\n for (const payload of payloads) {\n if (isTransfer(payload)) {\n const { from } = payload\n transfers[from] = transfers[from] ?? {}\n for (let [to, amount] of Object.entries(payload.transfers) as [Address, Hex][]) {\n transfers[to] = transfers[to] ?? {}\n transfers[to][from] = (transfers[to][from] ?? 0n) + hexToBigInt(amount)\n transfers[from][to] = (transfers[from][to] ?? 0n) - hexToBigInt(amount)\n }\n }\n }\n return transfers\n })\n}\n","import type {\n AttoXL1, StepIdentity, XL1BlockRange,\n XL1RangeMultipliers,\n} from '@xyo-network/xl1-protocol'\nimport { asAttoXL1, asXL1BlockRange } from '@xyo-network/xl1-protocol'\n\nimport { XL1_NETWORK_STAKING_GENESIS_PERIOD_END_XL1_BLOCK } from '../../../constants.ts'\nimport type { ChainContextRead } from '../../../model/index.ts'\nimport { blockRangeSteps } from '../../block/index.ts'\nimport { stepRewardTotal } from './stepRewardTotal.ts'\n\nexport async function stepsRewardTotalGenesisPeriod(context: ChainContextRead, multipliers: XL1RangeMultipliers, stepSizes?: number[]): Promise<AttoXL1> {\n const range = asXL1BlockRange([0, XL1_NETWORK_STAKING_GENESIS_PERIOD_END_XL1_BLOCK], { name: 'stepsRewardTotalGenesisPeriod' })\n return await stepsRewardTotalRange(context, range, stepSizes, multipliers)\n}\n\nexport async function stepsRewardTotalRange(\n context: ChainContextRead,\n range: XL1BlockRange,\n stepSizes: number[] = [3, 4, 5, 6],\n multipliers: XL1RangeMultipliers,\n): Promise<AttoXL1> {\n const steps = blockRangeSteps(range, stepSizes)\n return await stepsRewardTotal(context, steps, multipliers)\n}\n\nexport async function stepsRewardTotal(context: ChainContextRead, steps: StepIdentity[], multipliers: XL1RangeMultipliers): Promise<AttoXL1> {\n let totalRewards = 0n\n for (const step of steps) {\n const stepTotal = await stepRewardTotal(context, step, multipliers)\n totalRewards += stepTotal\n }\n return asAttoXL1(totalRewards)\n}\n","export const XL1_NETWORK_STAKING_GENESIS_PERIOD_END_EPOCH = 1_760_572_800 as const\nexport const XL1_NETWORK_STAKING_GENESIS_PERIOD_END_XL1_BLOCK = 107_496 as const\n","import { assertEx, isArray } from '@xylabs/sdk-js'\nimport type { BlockNumber, XL1BlockNumber } from '@xyo-network/xl1-protocol'\nimport {\n asBlockNumber, asTimePayload, isTimePayload,\n} from '@xyo-network/xl1-protocol'\n\nimport { type BaseContext, withContextCacheResponse } from '../../../model/index.ts'\nimport type { BlockViewer } from '../../../viewers/index.ts'\n\nconst functionName = 'externalBlockNumberFromXL1BlockNumber' as const\n\nexport async function externalBlockNumberFromXL1BlockNumber(\n context: BaseContext,\n blockViewer: BlockViewer,\n xl1BlockNumber: XL1BlockNumber,\n externalTimeName: 'ethereum' | 'epoch',\n externalGenesisTime?: BlockNumber,\n timeBudgetMs = 2000,\n): Promise<BlockNumber> {\n const cacheKey = `${xl1BlockNumber}-${externalTimeName}-${externalGenesisTime ?? 'default'}`\n return await withContextCacheResponse(context, functionName, cacheKey, async () => {\n const [, payloads = []] = await blockViewer.blockByNumber(xl1BlockNumber) ?? []\n assertEx(isArray(payloads))\n const timePayload = asTimePayload(payloads.find(isTimePayload))\n // the default here is the block number we know where the xl1 chain started running (first external staking - 1)\n return asBlockNumber(\n timePayload?.[externalTimeName] ?? externalGenesisTime ?? 23_372_716,\n { name: functionName },\n ) // default is xl1 mainnet genesis time\n }, { timeBudgetMs })\n}\n","import type { BlockRange, XL1BlockRange } from '@xyo-network/xl1-protocol'\n\nimport type { BaseContext } from '../../../model/index.ts'\nimport type { BlockViewer } from '../../../viewers/index.ts'\nimport { externalBlockNumberFromXL1BlockNumber } from './externalBlockNumberFromXL1BlockNumber.ts'\n\nexport async function externalBlockRangeFromXL1BlockRange(\n context: BaseContext,\n blockViewer: BlockViewer,\n xl1BlockRange: XL1BlockRange,\n externalTimeName: 'ethereum' = 'ethereum',\n): Promise<BlockRange> {\n const start = await externalBlockNumberFromXL1BlockNumber(context, blockViewer, xl1BlockRange[0], externalTimeName)\n const end = await externalBlockNumberFromXL1BlockNumber(context, blockViewer, xl1BlockRange[1], externalTimeName)\n return [start, end]\n}\n","import type { BlockRange, StepIdentity } from '@xyo-network/xl1-protocol'\n\nimport { toStepIdentityString } from '../../../block/index.ts'\nimport { type BaseContext, withContextCacheResponse } from '../../../model/index.ts'\nimport type { BlockViewer } from '../../../viewers/index.ts'\nimport { stepBlockRange } from '../../step/index.ts'\nimport { externalBlockRangeFromXL1BlockRange } from './externalBlockRangeFromXL1BlockRange.ts'\n\nexport async function externalBlockRangeFromStep(\n context: BaseContext,\n blockViewer: BlockViewer,\n stepIdentity: StepIdentity,\n): Promise<BlockRange> {\n const cacheKey = toStepIdentityString(stepIdentity)\n return await withContextCacheResponse(context, 'externalBlockRangeFromStep', cacheKey, async () => {\n const xl1BlockRange = stepBlockRange(stepIdentity)\n return await externalBlockRangeFromXL1BlockRange(context, blockViewer, xl1BlockRange)\n }, { timeBudgetMs: 1000 })\n}\n","import { isDefined } from '@xylabs/sdk-js'\n\nimport type { SyncIterableMap } from '../map/index.ts'\n\nexport function mapToMapType<K extends {}, V extends {}>(map: Map<K, V> | SyncIterableMap<K, V>): SyncIterableMap<K, V> {\n return {\n get: (key: K) => map.get(key),\n has: (key: K) => map.has(key),\n set: (key: K, value: V) => {\n map.set(key, value)\n },\n setMany: (entries: [K, V][]) => {\n for (const [key, value] of entries) {\n map.set(key, value)\n }\n },\n delete: (key: K) => map.delete(key),\n clear: () => map.clear(),\n getMany: (keys: K[]) => {\n const result: V[] = []\n for (const key of keys) {\n const value = map.get(key)\n if (isDefined(value)) {\n result.push(value)\n }\n }\n return result\n },\n [Symbol.iterator]: function* (): Iterator<[K, V]> {\n for (const entry of map) {\n yield entry\n }\n },\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { isDefined } from '@xylabs/sdk-js'\nimport type { ReadArchivist, ReadWriteArchivist } from '@xyo-network/archivist-model'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\n\nimport { isReadArchivist, isReadWriteArchivist } from '../block/index.ts'\nimport type { PayloadMap, PayloadMapRead } from '../model/index.ts'\n\nexport function readPayloadMapFromStore<T extends Payload>(store: ReadArchivist<T> | PayloadMapRead<WithStorageMeta<T>>): PayloadMapRead<WithStorageMeta<T>> {\n if (isReadArchivist(store)) {\n return {\n get: async (hash: Hash) => {\n return (await store.get([hash]))[0]\n },\n getMany: async (hashes: Hash[]) => {\n return (await store.get(hashes))\n },\n has: async (hash: Hash) => {\n return isDefined((await store.get([hash]))[0])\n },\n }\n }\n return store\n}\n\nexport function payloadMapFromStore<T extends Payload>(store: ReadWriteArchivist<T> | PayloadMap<WithStorageMeta<T>>): PayloadMap<WithStorageMeta<T>> {\n if (isReadWriteArchivist(store)) {\n return {\n get: async (hash: Hash) => {\n return (await store.get([hash]))[0]\n },\n getMany: async (hashes: Hash[]) => {\n return (await store.get(hashes))\n },\n has: async (hash: Hash) => {\n return isDefined((await store.get([hash]))[0])\n },\n clear: async () => {\n return await store.clear()\n },\n delete: async (id: Hash) => {\n await store.delete([id])\n return true\n },\n set: async (_id: Hash, data: T) => {\n await store.insert([data])\n },\n setMany: async (entries: [Hash, T][]) => {\n await store.insert(entries.map(e => e[1]))\n },\n } satisfies PayloadMap<WithStorageMeta<T>>\n }\n return store\n}\n","import { toFixedPoint } from '@xylabs/sdk-js'\nimport { asAttoXL1, type XL1BlockNumber } from '@xyo-network/xl1-protocol'\n\nexport const rewardFromBlockNumber = (places = 18) => {\n return (\n blockNumber: XL1BlockNumber,\n startingReward = asAttoXL1(toFixedPoint(500n, places)),\n blocksPerStep = 1_000_000,\n stepFactorNumerator = 95n,\n stepFactorDenominator = 100n,\n minBlockReward = asAttoXL1(toFixedPoint(10n, places)),\n creatorReward = asAttoXL1(toFixedPoint(20_000_000_000n, places)),\n ) => {\n if (blockNumber === 0) {\n return creatorReward\n }\n const step = Math.floor((blockNumber + blocksPerStep) / blocksPerStep)\n const stepExp = BigInt(step - 1)\n const poweredNumerator = stepExp > 0 ? stepFactorNumerator ** stepExp : 1n\n const poweredDenominator = stepExp > 0 ? stepFactorDenominator ** stepExp : 1n\n let reward = (startingReward * poweredNumerator) / poweredDenominator\n // eslint-disable-next-line unicorn/prefer-math-min-max\n return asAttoXL1((reward < minBlockReward) ? minBlockReward : reward)\n }\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { isDefined } from '@xylabs/sdk-js'\n\nimport type { StakeEventsViewer } from '../../viewers/index.ts'\nimport { mergedAddRemoveStakeEventsByStaker } from './mergedAddRemoveStakeEventsByStaker.ts'\n\nexport async function activeStakeAtTimeByAddress(\n chain: StakeEventsViewer,\n staked: Address,\n time: number,\n staker?: Address,\n): Promise<bigint> {\n const stakeEvents = (await mergedAddRemoveStakeEventsByStaker(chain, [0, time], staked, staker)).toSorted((a, b) => a.time - b.time)\n let result = 0n\n for (const event of stakeEvents) {\n if (event.time > time) break\n if (event.args.staked !== staked) continue\n if (isDefined(staker) && (event.args.staker !== staker)) continue\n if (event.name === 'StakeAdded') {\n result += event.args.amount\n } else if (event.name === 'StakeRemoved') {\n result -= event.args.amount\n }\n }\n return result\n}\n","import type { Address } from '@xylabs/sdk-js'\n\nimport type { StakeEvent, StakeEventsViewer } from '../../viewers/index.ts'\n\nexport async function mergedAddRemoveStakeEventsByStaker(\n chainEvents: StakeEventsViewer,\n range: [number, number],\n staked: Address,\n staker?: Address,\n): Promise<(StakeEvent<'StakeAdded'> | StakeEvent<'StakeRemoved'>)[]> {\n const [addedEvents, removedEvents] = await Promise.all([\n chainEvents.stakeEvents(range, { name: 'StakeAdded', args: { staked, staker } }),\n chainEvents.stakeEvents(range, { name: 'StakeRemoved', args: { staked, staker } }),\n ])\n const result = [...addedEvents, ...removedEvents].toSorted((a, b) => a.time - b.time)\n return result\n}\n","import { isUndefined } from '@xylabs/sdk-js'\n\nimport type { StakeEventsViewer } from '../../viewers/index.ts'\nimport { mergedAddRemoveStakeEventsByPosition } from './mergedAddRemoveStakeEventsByPosition.ts'\n\nexport async function activeStakeAtTimeByPosition(\n chainStakeEvents: StakeEventsViewer,\n externalTime: number,\n position?: number,\n): Promise<bigint> {\n const stakeEvents = (await mergedAddRemoveStakeEventsByPosition(chainStakeEvents, [0, externalTime], position)).toSorted((a, b) => a.time - b.time)\n let result = 0n\n for (const event of stakeEvents) {\n if (event.time > externalTime) break\n if (isUndefined(position) || position === Number(event.args.id)) {\n if (event.name === 'StakeAdded') {\n result += event.args.amount\n } else if (event.name === 'StakeRemoved') {\n result -= event.args.amount\n }\n }\n }\n return result\n}\n","import type { StakeEvent, StakeEventsViewer } from '../../viewers/index.ts'\n\nexport async function mergedAddRemoveStakeEventsByPosition(\n chainEvents: StakeEventsViewer,\n range: [number, number],\n position?: number,\n): Promise<(StakeEvent<'StakeAdded'> | StakeEvent<'StakeRemoved'>)[]> {\n const [addedEvents, removedEvents] = await Promise.all([\n chainEvents.stakeEvents(range, { name: 'StakeAdded', args: { id: position } }),\n chainEvents.stakeEvents(range, { name: 'StakeRemoved', args: { id: position } }),\n ])\n const result = [...addedEvents, ...removedEvents].toSorted((a, b) => a.time - b.time)\n return result\n}\n","import {\n type Address,\n toAddress,\n} from '@xylabs/sdk-js'\n\nimport type { StakeEventsViewer } from '../../viewers/index.ts'\nimport { mergedAddRemoveStakeEventsByStaker } from './mergedAddRemoveStakeEventsByStaker.ts'\n\nexport async function allStakersForRange(\n chain: StakeEventsViewer,\n externalRange: [number, number],\n staked: Address,\n): Promise<Record<Address, bigint>> {\n const mergedEvents = await mergedAddRemoveStakeEventsByStaker(chain, [0, externalRange[1]], staked)\n const resultWithZeros: Record<Address, bigint> = {}\n for (const event of mergedEvents) {\n const staker = toAddress(event.args.staker)\n resultWithZeros[staker] = resultWithZeros[staker] ?? 0n\n if (event.name === 'StakeAdded') {\n resultWithZeros[staker] += event.args.amount\n } else if (event.name === 'StakeRemoved') {\n resultWithZeros[staker] -= event.args.amount\n }\n }\n const nonZero = Object.entries(resultWithZeros).filter(([, amount]) => amount > 0n).map(([address]) => address)\n const result: Record<Address, bigint> = {}\n for (const address of nonZero) {\n result[toAddress(address)] = resultWithZeros[toAddress(address)]\n }\n return result\n}\n","import { type Address } from '@xylabs/sdk-js'\nimport type { StepIdentity } from '@xyo-network/xl1-protocol'\n\nimport type { StakedChainContextRead } from '../../model/index.ts'\nimport type { BlockViewer } from '../../viewers/index.ts'\nimport { externalBlockRangeFromXL1BlockRange } from '../chain/time/index.ts'\nimport { stepBlockRange } from '../step/index.ts'\nimport { allStakersForRange } from './allStakersForRange.ts'\n\nexport async function allStakersForStep(\n context: StakedChainContextRead,\n blockViewer: BlockViewer,\n stepContext: StepIdentity,\n staked: Address,\n): Promise<Record<Address, bigint>> {\n const xl1BlockRange = stepBlockRange(stepContext)\n return await allStakersForRange(\n context.stake.stakeEvents,\n await externalBlockRangeFromXL1BlockRange(context, blockViewer, xl1BlockRange),\n staked,\n )\n}\n","import { isDefined } from '@xylabs/sdk-js'\nimport { asBlockNumber, type BlockRange } from '@xyo-network/xl1-protocol'\n\nimport { type StakedChainContextRead, withContextCacheResponse } from '../../model/index.ts'\nimport type { BlockViewer } from '../../viewers/index.ts'\nimport { mergedAddRemoveStakeEventsByPosition } from './mergedAddRemoveStakeEventsByPosition.ts'\n\nexport async function weightedStakeForRangeByPosition(\n context: StakedChainContextRead,\n blockViewer: BlockViewer,\n externalRange: BlockRange, // first to last block of step\n positionId?: number,\n): Promise<bigint> {\n const cacheKey = isDefined(positionId) ? `${externalRange[0]}-${externalRange[1]}-${positionId}` : `${externalRange[0]}-${externalRange[1]}-all`\n return await withContextCacheResponse(context, 'weightedStakeForRangeByPosition', cacheKey, async () => {\n let weightedStakeSum = 0n\n if (isDefined(positionId)) {\n const mergedEvents = (await mergedAddRemoveStakeEventsByPosition(\n context.stake.stakeEvents,\n [0, externalRange[1]],\n positionId,\n )).toSorted((a, b) => a.time - b.time)\n let currentTime = externalRange[0]\n let currentStake = 0n // await activeStakeAtTimeByPosition(chainEvents, pos.staked, currentTime - 1, position)\n for (const event of mergedEvents) {\n if (event.time > currentTime) {\n // Add the weighted stake for the period between the range start or previous event and this event\n weightedStakeSum += currentStake * BigInt(event.time - currentTime)\n }\n if (event.name === 'StakeAdded') {\n currentStake += event.args.amount\n } else if (event.name === 'StakeRemoved') {\n currentStake -= event.args.amount\n }\n // seems that sometimes we get multiple remove events, so ensure stake doesn't go negative\n currentStake = currentStake < 0n ? 0n : currentStake\n currentTime = asBlockNumber(event.time, { name: 'weightedStakeForRangeByPosition' })\n if (currentTime > externalRange[1]) {\n break\n }\n }\n if (externalRange[1] > currentTime) {\n // Add the weighted stake for the period between the last event and the end of the range\n weightedStakeSum += currentStake * BigInt(externalRange[1] - currentTime)\n }\n } else {\n const positionCount = await context.stake.stakeEvents.positionCount(externalRange)\n for (let pos = 0; pos < positionCount; pos++) {\n weightedStakeSum += await weightedStakeForRangeByPosition(context, blockViewer, externalRange, pos)\n }\n }\n return weightedStakeSum\n })\n}\n","import { type StepIdentity } from '@xyo-network/xl1-protocol'\n\nimport type { StakedChainContextRead } from '../../model/index.ts'\nimport type { BlockViewer } from '../../viewers/index.ts'\nimport { externalBlockRangeFromStep } from '../chain/time/index.ts'\nimport { weightedStakeForRangeByPosition } from '../stake/index.ts'\n\nexport async function networkStakeStepRewardPositionWeight(\n context: StakedChainContextRead,\n blockViewer: BlockViewer,\n stepContext: StepIdentity,\n position: number,\n): Promise<bigint> {\n const result = await weightedStakeForRangeByPosition(\n context,\n blockViewer,\n await externalBlockRangeFromStep(context, blockViewer, stepContext),\n position,\n )\n return result\n}\n","import { type Logger } from '@xylabs/sdk-js'\n\nexport async function timeBudget<TResult>(\n name: string,\n logger: Logger | undefined,\n func: () => Promise<TResult>,\n budget: number,\n status = false,\n): Promise<TResult> {\n const start = Date.now()\n const timer = status\n ? setInterval(() => {\n const duration = Date.now() - start\n if ((budget > 0) && (duration > budget)) {\n logger?.warn(`Function [${name}] execution is exceeding budget: ${duration}ms > ${budget}ms`)\n }\n }, Math.max(100, budget))\n : undefined\n\n const result = await func()\n const duration = Date.now() - start\n\n if (!timer && (budget > 0) && (duration > budget)) {\n logger?.warn(`Function [${name}] execution exceeded budget: ${duration}ms > ${budget}ms`)\n }\n if (timer) {\n clearInterval(timer)\n }\n return result\n}\n","import type { WithHashMeta } from '@xyo-network/payload-model'\nimport type { AllowedBlockPayload, HydratedTransactionWithHashMeta } from '@xyo-network/xl1-protocol'\nimport { isAllowedBlockPayload } from '@xyo-network/xl1-protocol'\n\nconst ELEVATE_OPCODE = 'elevate'\n\nexport function elevatedPayloads([tx, payloads]: HydratedTransactionWithHashMeta) {\n const opCodes = (tx.script ?? []).filter(operation => operation.startsWith(`${ELEVATE_OPCODE}|`))\n const elevatedPayloads: WithHashMeta<AllowedBlockPayload>[] = []\n for (const opCode of opCodes) {\n const [code, hash] = opCode.split('|')\n if (code === ELEVATE_OPCODE) {\n const elevatedPayload = payloads.find(payload => payload._hash === hash)\n if (isAllowedBlockPayload(elevatedPayload)) {\n elevatedPayloads.push(elevatedPayload)\n }\n }\n }\n if (opCodes.length === elevatedPayloads.length) {\n return elevatedPayloads\n }\n throw new Error('Not all elevated payloads could be found in the transaction payloads')\n}\n","import type { SignedHydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol'\n\nexport function scoreUncle(finalizedWindowedChain: SignedHydratedBlockWithHashMeta[], blocks: SignedHydratedBlockWithHashMeta[]) {\n // TODO: More than length check\n return blocks.length\n}\n","import type { SignedHydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol'\n\nimport { scoreUncle } from './scoreUncle.ts'\n\nexport function findBestUncle(finalizedWindowedChain: SignedHydratedBlockWithHashMeta[], uncles: SignedHydratedBlockWithHashMeta[][]) {\n const scores = uncles.map(uncle => ([scoreUncle(finalizedWindowedChain, uncle), uncle] as const)).toSorted((a, b) => b[0] - a[0])\n return scores[0]?.[1] ?? finalizedWindowedChain\n}\n","import {\n assertEx,\n exists, type Hash,\n} from '@xylabs/sdk-js'\nimport { isTransactionBoundWitness, type SignedHydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol'\n\nimport type { BaseContext } from '../../model/index.ts'\n\nfunction blocksToChains(blocks: SignedHydratedBlockWithHashMeta[]) {\n const chains: SignedHydratedBlockWithHashMeta[][] = []\n const map = new Map<Hash, SignedHydratedBlockWithHashMeta>()\n for (const block of blocks) {\n map.set(block[0]._hash, block)\n }\n for (const block of blocks) {\n let uncle: SignedHydratedBlockWithHashMeta[] = [block]\n let previous = block[0].previous ? map.get(block[0].previous) : undefined\n while (previous) {\n if (previous[0].block === (uncle[0][0].block - 1)) {\n uncle.unshift(previous)\n previous = previous[0].previous ? map.get(previous[0].previous) : undefined\n } else {\n // block number sequence is off\n uncle = []\n break\n }\n }\n if (uncle.length > 0) {\n chains.push(uncle)\n }\n }\n return chains\n}\n\nfunction toValidUncle(\n _context: BaseContext,\n finalizedWindowedChain: SignedHydratedBlockWithHashMeta[],\n possibleUncle: SignedHydratedBlockWithHashMeta[],\n) {\n const finalizedWindowStartBlockNumber = finalizedWindowedChain.at(0)?.[0].block ?? -1\n const finalizedHead = assertEx(finalizedWindowedChain.at(-1), () => 'finalizedWindowedChain is empty')\n // prune the chain to match the finalized head\n\n const prunedPossibleUncle = possibleUncle.filter(b => b[0].block > finalizedHead[0].block)\n\n if (prunedPossibleUncle.length === 0) {\n return\n }\n\n if (prunedPossibleUncle[0][0].block !== finalizedHead[0].block + 1) {\n // uncle does not build on finalized head (block number mismatch)\n return\n }\n if (prunedPossibleUncle[0][0].previous !== finalizedHead[0]._hash) {\n // uncle does not build on finalized head (previous hash mismatch)\n return\n }\n const allUncleTransactions = prunedPossibleUncle.flatMap(b => b[1]).filter(isTransactionBoundWitness)\n const allFinalizedTransactions = finalizedWindowedChain.flatMap(b => b[1]).filter(isTransactionBoundWitness)\n const txPossiblyBeforeWindow = allUncleTransactions.find(tx => tx.nbf < finalizedWindowStartBlockNumber)\n if (txPossiblyBeforeWindow) {\n // uncle has a transaction that is valid before the finalized window\n return\n }\n const txExistsInWindow = allUncleTransactions.find(tx => allFinalizedTransactions.find(finalTx => finalTx._hash === tx._hash))\n if (txExistsInWindow) {\n // uncle has a transaction that is already in the finalized window\n return\n }\n return prunedPossibleUncle\n}\n\nexport function findUncles(context: BaseContext, finalizedWindowedChain: SignedHydratedBlockWithHashMeta[], blocks: SignedHydratedBlockWithHashMeta[]) {\n return blocksToChains(blocks).map(chain => toValidUncle(context, finalizedWindowedChain, chain)).filter(exists)\n}\n","import { HashZod } from '@xylabs/hex'\nimport { zodIsFactory } from '@xylabs/zod'\nimport { XL1BlockRangeZod } from '@xyo-network/xl1-protocol'\nimport z from 'zod'\n\nexport const ChainQualificationZod = z.object({ head: HashZod, range: XL1BlockRangeZod })\nexport type ChainQualification = z.infer<typeof ChainQualificationZod>\nexport const isChainQualification = zodIsFactory(ChainQualificationZod)\n\nexport const ChainQualifiedRangeConfigZod = z.object({ range: XL1BlockRangeZod })\nexport type ChainQualifiedRangeConfig = z.infer<typeof ChainQualifiedRangeConfigZod>\nexport const isChainQualifiedRangeConfig = zodIsFactory(ChainQualifiedRangeConfigZod)\n\nexport const ChainQualifiedHeadConfigZod = z.object({ head: HashZod })\nexport type ChainQualifiedHeadConfig = z.infer<typeof ChainQualifiedHeadConfigZod>\nexport const isChainQualifiedHeadConfig = zodIsFactory(ChainQualifiedHeadConfigZod)\n\nexport const ChainQualifiedConfigZod = z.union([ChainQualifiedRangeConfigZod, ChainQualifiedHeadConfigZod, z.object({})])\nexport type ChainQualifiedConfig = z.infer<typeof ChainQualifiedConfigZod>\nexport const isChainQualifiedConfig = zodIsFactory(ChainQualifiedConfigZod)\n\nexport const ExtendChainQualifiedConfigZod = (<T>(zodType: z.ZodType<T>) => {\n return z.union([\n ChainQualifiedRangeConfigZod.extend(zodType),\n ChainQualifiedHeadConfigZod.extend(zodType),\n zodType,\n ])\n}) as <T>(zodType: z.ZodType<T>) => z.ZodType<T & ChainQualifiedConfig>\n\nexport type ChainQualified<T> = [T, ChainQualification]\nexport const ChainQualifiedZod = <T>(zodType: z.ZodType<T>) => {\n return z.tuple([zodType, ChainQualificationZod])\n}\n","import { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { PayloadBundle, WithHashMeta } from '@xyo-network/payload-model'\nimport type { SignedHydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol'\nimport { asSignedBlockBoundWitnessWithHashMeta } from '@xyo-network/xl1-protocol'\n\nexport const bundledPayloadToHydratedBlock = async (\n payload: WithHashMeta<PayloadBundle>,\n): Promise<SignedHydratedBlockWithHashMeta | undefined> => {\n const withHashMeta = await PayloadBuilder.addHashMeta(payload.payloads)\n const tx = asSignedBlockBoundWitnessWithHashMeta(withHashMeta.find(p => p._hash === payload.root))\n if (tx) {\n return [tx, withHashMeta.filter(p => p._hash !== payload.root)]\n }\n}\n","import { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { PayloadBundle } from '@xyo-network/payload-model'\nimport type { SignedHydratedTransactionWithHashMeta } from '@xyo-network/xl1-protocol'\nimport { asSignedTransactionBoundWitnessWithHashMeta } from '@xyo-network/xl1-protocol'\n\nexport const bundledPayloadToHydratedTransaction = async (\n payload: PayloadBundle,\n): Promise<SignedHydratedTransactionWithHashMeta | undefined> => {\n const withHashMeta = await PayloadBuilder.addHashMeta(payload.payloads)\n const tx = asSignedTransactionBoundWitnessWithHashMeta(withHashMeta.find(p => p._hash === payload.root))\n if (tx) {\n return [tx, withHashMeta.filter(p => p._hash !== payload.root)]\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { type PayloadBundle, PayloadBundleSchema } from '@xyo-network/payload-model'\nimport type { SignedHydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol'\n\nimport { flattenHydratedBlock } from '../../block/index.ts'\n\nexport const hydratedBlockToPayloadBundle = (transaction: SignedHydratedBlockWithHashMeta): PayloadBundle => {\n const root = transaction[0]._hash\n return bundle(root, transaction)\n}\n\nconst bundle = (root: Hash, transaction: SignedHydratedBlockWithHashMeta) => {\n const payloads = flattenHydratedBlock(transaction).flatMap(p => PayloadBuilder.omitStorageMeta(p))\n return new PayloadBuilder<PayloadBundle>({ schema: PayloadBundleSchema })\n .fields({ payloads, root })\n .build()\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { type PayloadBundle, PayloadBundleSchema } from '@xyo-network/payload-model'\nimport type { SignedHydratedTransactionWithHashMeta } from '@xyo-network/xl1-protocol'\n\nimport { flattenHydratedTransaction } from '../../transaction/index.ts'\n\nexport const hydratedTransactionToPayloadBundle = (transaction: SignedHydratedTransactionWithHashMeta): PayloadBundle => {\n const root = transaction[0]._hash\n return bundle(root, transaction)\n}\n\nconst bundle = (root: Hash, transaction: SignedHydratedTransactionWithHashMeta) => {\n const payloads = flattenHydratedTransaction(transaction).flatMap(p => PayloadBuilder.omitStorageMeta(p))\n return new PayloadBuilder<PayloadBundle>({ schema: PayloadBundleSchema })\n .fields({ payloads, root })\n .build()\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { Account } from '@xyo-network/account'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type { Payload, Schema } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload, ChainId,\n SignedHydratedTransactionWithHashMeta,\n Transfer,\n XL1BlockNumber,\n} from '@xyo-network/xl1-protocol'\nimport { asXL1BlockNumber, isAllowedBlockPayload } from '@xyo-network/xl1-protocol'\n\nimport { createTransferPayload } from '../createTransferPayload.ts'\nimport { buildTransaction } from './buildTransaction.ts'\n\nexport const buildRandomTransaction = async (\n chain: ChainId,\n payloads?: Payload[],\n account?: AccountInstance,\n nbf: XL1BlockNumber = asXL1BlockNumber(0, true),\n exp: XL1BlockNumber = asXL1BlockNumber(nbf + 1000, true),\n privatePayloadSchemas: Schema[] = [],\n receiverAddress?: Address,\n): Promise<SignedHydratedTransactionWithHashMeta> => {\n const elevatedPayloads: AllowedBlockPayload[] = (payloads ?? []).filter(isAllowedBlockPayload)\n const additionalPayloads: Payload[] = (payloads ?? []).filter(payload => !isAllowedBlockPayload(payload))\n const sender = account ?? await Account.random()\n if (elevatedPayloads?.length === 0) {\n const receiver = receiverAddress ?? (await Account.random()).address\n const transferPayload: Transfer = createTransferPayload(sender.address, { [receiver]: 1n })\n elevatedPayloads.push(transferPayload)\n }\n const hydratedTransaction = await buildTransaction(chain, elevatedPayloads, additionalPayloads, sender, nbf, exp)\n // remove private payloads from hydrated\n return [hydratedTransaction[0], hydratedTransaction[1].filter(p => !privatePayloadSchemas.includes(p.schema))]\n}\n","import type { Address, JsonObject } from '@xylabs/sdk-js'\nimport { toHex } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Transfer } from '@xyo-network/xl1-protocol'\nimport { TransferSchema } from '@xyo-network/xl1-protocol'\n\nexport function createTransferPayload(from: Address, transfers: Record<Address, bigint>, context?: JsonObject): Transfer {\n return new PayloadBuilder<Transfer>({ schema: TransferSchema })\n .fields({\n epoch: Date.now(),\n from,\n transfers: Object.fromEntries(Object.entries(transfers).map(([k, v]) => [k, toHex(v)])),\n context,\n }).build()\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { assertEx, toHex } from '@xylabs/sdk-js'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload,\n ChainId,\n ExecutableFields,\n FromFields,\n SignedHydratedTransactionWithHashMeta,\n TransactionBoundWitness, TransactionBoundWitnessFields, TransactionFeesBigInt,\n XL1BlockNumber,\n} from '@xyo-network/xl1-protocol'\nimport { defaultTransactionFees } from '@xyo-network/xl1-protocol'\n\nexport async function buildTransaction(\n chain: ChainId,\n onChainPayloads: AllowedBlockPayload[],\n offChainPayloads: Payload[],\n signer: AccountInstance | AccountInstance[],\n nbf: XL1BlockNumber,\n exp: XL1BlockNumber,\n from?: Address,\n fees: TransactionFeesBigInt = defaultTransactionFees,\n): Promise<SignedHydratedTransactionWithHashMeta> {\n if (from === undefined && Array.isArray(signer)) {\n throw new Error('from is required when signer is an array')\n }\n\n const txBoundWitnessFields: Omit<TransactionBoundWitnessFields, 'from'> = {\n chain,\n fees: {\n base: toHex(fees.base),\n gasLimit: toHex(fees.gasLimit),\n gasPrice: toHex(fees.gasPrice),\n priority: toHex(fees.priority),\n },\n nbf,\n exp,\n }\n\n const elevatedHashes = await PayloadBuilder.hashes(onChainPayloads)\n const script: string[] = []\n for (const elevatedHash of elevatedHashes) {\n script.push(`elevate|${elevatedHash}`)\n }\n\n const fields: TransactionBoundWitnessFields & FromFields & Partial<ExecutableFields> = {\n ...txBoundWitnessFields,\n from: from ?? (Array.isArray(signer) ? assertEx(signer.at(0)?.address) : signer.address),\n }\n\n if (script.length > 0) {\n fields.script = script\n }\n\n const [tx, txPayloads] = await new BoundWitnessBuilder<TransactionBoundWitness>()\n .fields(fields)\n .meta({ $signatures: [] })\n .payloads([...onChainPayloads, ...offChainPayloads])\n .signers(Array.isArray(signer) ? signer : [signer])\n .build()\n\n return [await PayloadBuilder.addHashMeta(tx), await PayloadBuilder.addHashMeta(txPayloads)]\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { toHex } from '@xylabs/sdk-js'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload, ChainId, ExecutableFields, FromFields, TransactionBoundWitness, TransactionBoundWitnessFields, TransactionFeesBigInt,\n UnsignedHydratedTransaction,\n XL1BlockNumber,\n} from '@xyo-network/xl1-protocol'\nimport { defaultTransactionFees } from '@xyo-network/xl1-protocol'\n\nexport async function buildUnsignedTransaction(\n chain: ChainId,\n onChainPayloads: AllowedBlockPayload[],\n offChainPayloads: Payload[],\n nbf: XL1BlockNumber,\n exp: XL1BlockNumber,\n from: Address,\n fees: TransactionFeesBigInt = defaultTransactionFees,\n): Promise<UnsignedHydratedTransaction> {\n const txBoundWitnessFields: Omit<TransactionBoundWitnessFields, 'from'> = {\n chain,\n fees: {\n base: toHex(fees.base),\n gasLimit: toHex(fees.gasLimit),\n gasPrice: toHex(fees.gasPrice),\n priority: toHex(fees.priority),\n },\n nbf,\n exp,\n }\n\n const elevatedHashes = await PayloadBuilder.hashes(onChainPayloads)\n const script: string[] = []\n for (const elevatedHash of elevatedHashes) {\n script.push(`elevate|${elevatedHash}`)\n }\n\n const fields: TransactionBoundWitnessFields & FromFields & Partial<ExecutableFields> = {\n ...txBoundWitnessFields,\n from,\n }\n\n if (script.length > 0) {\n fields.script = script\n }\n\n const [tx, txPayloads] = await new BoundWitnessBuilder<TransactionBoundWitness>()\n .fields(fields)\n .meta({ $signatures: [] })\n .payloads([...onChainPayloads, ...offChainPayloads])\n .build(false)\n\n return [tx, txPayloads]\n}\n","import type { Hash, Logger } from '@xylabs/sdk-js'\nimport { delay, isDefined } from '@xylabs/sdk-js'\nimport type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol'\n\nimport type { XyoViewer } from '../provider/index.ts'\n\nconst DEFAULT_CONFIRMATION_ATTEMPTS = 20\nconst DEFAULT_DELAY_BETWEEN_ATTEMPTS = 1000 // milliseconds\n\nexport type ConfirmSubmittedTransactionOptions = {\n /**\n * Number of attempts to confirm the transaction.\n * Defaults to 20.\n */\n attempts?: number\n /**\n * Delay in milliseconds between confirmation attempts.\n * Defaults to 1000 (1 second).\n */\n delay?: number\n /**\n * Optional logger instance for logging progress.\n */\n logger?: Logger\n}\n\n/**\n * Confirms a submitted transaction by checking if it has been included in the blockchain.\n * @param viewer The viewer\n * @param txHash The hash of the transaction to confirm\n * @param options Options for confirmation\n * @returns The confirmed transaction or throws an error if not confirmed\n */\nexport const confirmSubmittedTransaction = async (\n viewer: XyoViewer,\n txHash: Hash,\n options?: ConfirmSubmittedTransactionOptions,\n): Promise<SignedHydratedTransaction> => {\n const { attempts: maxAttempts = DEFAULT_CONFIRMATION_ATTEMPTS, delay: attemptDelay = DEFAULT_DELAY_BETWEEN_ATTEMPTS } = options ?? {}\n options?.logger?.log('🚀 confirming transaction:', txHash, '\\n')\n let attempts = 0\n while (true) {\n const tx = await viewer.transactionByHash(txHash) ?? undefined\n if (isDefined(tx)) {\n options?.logger?.log('✅ Transaction confirmed:', txHash, '\\n')\n return tx\n } else {\n attempts++\n if (attempts > maxAttempts) {\n options?.logger?.error(`⚠️ Transaction not confirmed after ${maxAttempts} attempts`)\n throw new Error(`Transaction ${txHash} not confirmed after ${maxAttempts} attempts`)\n } else {\n options?.logger?.log(`🔄 Transaction not confirmed yet, attempt ${attempts}. Retrying...`, '\\n')\n await delay(attemptDelay)\n }\n }\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport { hydrateTypedBoundWitness, tryHydrateTypedBoundWitness } from '@xyo-network/archivist-model'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload, SignedHydratedTransaction,\n SignedHydratedTransactionWithStorageMeta, TransactionBoundWitness,\n} from '@xyo-network/xl1-protocol'\nimport {\n asSignedHydratedTransaction, isAllowedBlockPayload, isSignedTransactionBoundWitnessWithStorageMeta,\n} from '@xyo-network/xl1-protocol'\n\nimport type { ChainStoreRead } from '../model/index.ts'\n\nexport const tryHydrateTransaction = async (\n { chainMap }: ChainStoreRead,\n hash: Hash,\n): Promise<SignedHydratedTransactionWithStorageMeta | undefined> => {\n return (await tryHydrateTypedBoundWitness<TransactionBoundWitness>(\n {\n get(hashes: Hash[]) {\n return chainMap.getMany(hashes)\n },\n next() {\n throw new Error('Not implemented')\n },\n },\n hash,\n isSignedTransactionBoundWitnessWithStorageMeta,\n )) as SignedHydratedTransactionWithStorageMeta | undefined\n}\n\nexport const hydrateTransaction = async (\n { chainMap }: ChainStoreRead,\n hash: Hash,\n): Promise<SignedHydratedTransaction> => {\n return await hydrateTypedBoundWitness<TransactionBoundWitness>(\n {\n get(hashes: Hash[]) {\n return chainMap.getMany(hashes)\n },\n next() {\n throw new Error('Not implemented')\n },\n },\n hash,\n isSignedTransactionBoundWitnessWithStorageMeta,\n ) as SignedHydratedTransaction\n}\n\nexport const flattenHydratedTransaction = (hydratedTransaction: SignedHydratedTransaction): Payload[] => {\n const [tx, txPayloads] = hydratedTransaction\n return [...txPayloads, tx]\n}\n\nexport const tryUnflattenHydratedTransaction = (\n flattened: Payload[],\n): SignedHydratedTransaction | undefined => {\n // Last element is always the transaction bound witness\n const tx = flattened.at(-1)\n\n // Everything else is a payloads\n const txPayloads = flattened.slice(0, -1)\n\n return asSignedHydratedTransaction([tx, txPayloads])\n}\n\nexport const unflattenHydratedTransaction = (flattened: Payload[]): SignedHydratedTransaction =>\n asSignedHydratedTransaction(tryUnflattenHydratedTransaction(flattened), true)\n\nexport const flattenHydratedTransactions = (hydratedTransactions: SignedHydratedTransaction[]): Payload[] =>\n hydratedTransactions.flatMap(tx => flattenHydratedTransaction(tx))\n\nexport const tryHydrateElevatedTransaction = async (\n { chainMap }: ChainStoreRead,\n hash: Hash,\n): Promise<SignedHydratedTransactionWithStorageMeta | undefined> => {\n const hydratedTransaction = await tryHydrateTransaction({ chainMap }, hash)\n if (!hydratedTransaction) {\n return undefined\n }\n const [transaction, payloads] = hydratedTransaction\n const opCodes = (transaction.script ?? []).filter(operation => operation.startsWith('elevate|'))\n const elevatedPayloads: WithStorageMeta<AllowedBlockPayload>[] = []\n for (const opCode of opCodes) {\n const [code, hash] = opCode.split('|')\n if (code === 'elevated') {\n const elevatedPayload = payloads.find(payload => payload._hash === hash)\n if (isAllowedBlockPayload(elevatedPayload)) {\n elevatedPayloads.push(elevatedPayload)\n }\n }\n }\n if (opCodes.length === elevatedPayloads.length) {\n return [transaction, elevatedPayloads]\n }\n return undefined\n}\n\nexport const hydrateElevatedTransaction = async (\n context: ChainStoreRead,\n hash: Hash,\n): Promise<SignedHydratedTransaction> => {\n return assertEx(await tryHydrateElevatedTransaction(context, hash), () => 'Hydration failed')\n}\n","import { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { HydratedTransaction } from '@xyo-network/xl1-protocol'\n\n/** The number of bytes that a transaction and its payloads will take up in a block */\nexport function transactionBlockByteCount([transaction, payloads]: HydratedTransaction): number {\n const cleanTransaction = PayloadBuilder.omitStorageMeta(transaction)\n const transactionBytes = JSON.stringify(cleanTransaction).length\n const cleanPayloads = PayloadBuilder.omitStorageMeta(payloads)\n return cleanPayloads.reduce((acc: number, payload) => acc + JSON.stringify(payload).length, 0) + transactionBytes\n}\n","import { asHash, type Hash } from '@xylabs/sdk-js'\nimport type { Payload, WithHashMeta } from '@xyo-network/payload-model'\nimport type { HydratedTransactionWithHashMeta, TransactionBoundWitness } from '@xyo-network/xl1-protocol'\n\nimport { crackOperations } from './transactionOperations.ts'\n\nexport function transactionElevatedPayloadHashes(transaction: TransactionBoundWitness): Hash[] {\n const elevateOperations = crackOperations(transaction.script ?? []).filter(op => op[0] === 'elevate')\n return elevateOperations.map(op => asHash(op[1][0], true))\n}\n\nexport function transactionElevatedPayloads([transaction, payloads]: HydratedTransactionWithHashMeta): WithHashMeta<Payload>[] {\n const hashes = transactionElevatedPayloadHashes(transaction)\n const elevatedPayloads = payloads.filter(payload => hashes.includes(payload._hash))\n return elevatedPayloads\n}\n","export function crackOperation(operation: string): [string, string[]] {\n const parts = operation.split('|')\n if (parts.length < 2) {\n throw new Error(`Invalid operation format: ${operation}`)\n }\n return [parts[0], parts.slice(1)]\n}\n\nexport function crackOperations(operations: string[]): [string, string[]][] {\n return operations.map(op => crackOperation(op))\n}\n","import type { HydratedTransactionWithHashMeta } from '@xyo-network/xl1-protocol'\nimport { AttoXL1, TransactionGasCosts } from '@xyo-network/xl1-protocol'\n\nimport { transactionBlockByteCount } from './transactionBlockByteCount.ts'\nimport { transactionElevatedPayloads } from './transactionElevatedPayloads.ts'\n\n/** The required gas for the byte storage on the block chain for a transaction */\nexport function transactionBytesRequiredGas([transaction, payloads]: HydratedTransactionWithHashMeta): AttoXL1 {\n const transactionBlockBytes = transactionBlockByteCount([transaction, payloads])\n return AttoXL1(TransactionGasCosts.characterStorage * BigInt(transactionBlockBytes))\n}\n\nexport function transactionRequiredGas(hydratedTransaction: HydratedTransactionWithHashMeta): AttoXL1 {\n const elevatedPayloads = transactionElevatedPayloads(hydratedTransaction)\n const hashes = elevatedPayloads.length + 1 /* for transaction itself */\n const signatures = hydratedTransaction[0].addresses.length\n return AttoXL1(transactionBytesRequiredGas(hydratedTransaction)\n + TransactionGasCosts.hashValidation * BigInt(hashes)\n + TransactionGasCosts.signatureValidation * BigInt(signatures)\n + TransactionGasCosts.payloadValidation * BigInt(elevatedPayloads.length))\n}\n","import { asHash, type Hash } from '@xylabs/sdk-js'\nimport { assertEx, filterAs } from '@xylabs/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { AllowedBlockPayload, HydratedTransactionWithHashMeta } from '@xyo-network/xl1-protocol'\nimport { isAllowedBlockPayloadWithHashMeta } from '@xyo-network/xl1-protocol'\n\nexport const tryExtractElevatedHashesFromScript = (strings: string[]): Hash[] => {\n const hashes = strings\n .filter(str => str.startsWith('elevate|'))\n .map(str => str.split('|')[1])\n return filterAs(hashes, h => asHash(h))\n}\n\nexport const extractElevatedHashesFromScript = (strings: string[]): Hash[] => {\n const hashes = strings\n .filter(str => str.startsWith('elevate|'))\n .map(str => str.split('|')[1])\n const filtered = filterAs(hashes, h => asHash(h))\n assertEx(filtered.length === hashes.length, () => 'Invalid elevated hashes')\n return filtered\n}\n\nexport const tryExtractElevatedHashes = (tx: HydratedTransactionWithHashMeta): WithStorageMeta<AllowedBlockPayload>[] => {\n const [bw, payloads] = tx\n const { script } = bw\n const hashes = script ? tryExtractElevatedHashesFromScript(script) : []\n return payloads\n .filter(p => hashes.includes(p._hash))\n .filter(isAllowedBlockPayloadWithHashMeta)\n}\n\nexport const extractElevatedHashes = (tx: HydratedTransactionWithHashMeta): WithStorageMeta<AllowedBlockPayload>[] => {\n const [bw, payloads] = tx\n const { script } = bw\n const hashes = script ? tryExtractElevatedHashesFromScript(script) : []\n const filtered = payloads\n .filter(p => hashes.includes(p._hash))\n .filter(isAllowedBlockPayloadWithHashMeta)\n assertEx(filtered.length === hashes.length, () => 'Invalid elevated hashes')\n return filtered\n}\n","import {\n assertEx, hexFromArrayBuffer, toArrayBuffer,\n} from '@xylabs/sdk-js'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type { Signed } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { TransactionBoundWitness, UnsignedTransactionBoundWitness } from '@xyo-network/xl1-protocol'\n\n/**\n * Signs an unsigned transaction with the provided account.\n * @param tx The transaction to sign\n * @param account The account to sign the transaction with\n * @returns The signed transaction\n */\nexport async function signTransaction(tx: UnsignedTransactionBoundWitness, account: AccountInstance) {\n assertEx(tx.from === account.address, () => 'Signer address does not match transaction from address')\n // Clone tx to prevent modifying original\n const unsignedTx = structuredClone(tx)\n // Update dynamic fields based on account\n unsignedTx.addresses = [account.address]\n unsignedTx.previous_hashes = [account.previousHash ?? null]\n // Calculate tx hash and sign it\n const hash = await PayloadBuilder.dataHash(unsignedTx)\n const hashBytes = toArrayBuffer(hash)\n const [signature] = await account.sign(hashBytes)\n // Append the signatures to the transaction\n const result: Signed<TransactionBoundWitness> = {\n ...unsignedTx,\n $signatures: [hexFromArrayBuffer(signature)],\n }\n // Return the signed transaction\n return result\n}\n","import type { Hex } from '@xylabs/sdk-js'\nimport { assertEx, Base } from '@xylabs/sdk-js'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport { PayloadBuilder, type PayloadBuilderOptions } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload,\n ChainId,\n TransactionFeesBigInt,\n} from '@xyo-network/xl1-protocol'\nimport {\n asXL1BlockNumber,\n defaultTransactionFees, isAllowedBlockPayload, minTransactionFees, XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-protocol'\n\nimport { buildTransaction } from './buildTransaction.ts'\nimport { transactionRequiredGas } from './primitives/index.ts'\n\nexport class TransactionBuilder<TPayload extends Payload> extends Base<Omit<PayloadBuilderOptions, 'schema'>> {\n private _blockRange?: [number, number]\n private _chain?: Hex\n private _elevatedPayloads: AllowedBlockPayload[] = []\n private _fees: TransactionFeesBigInt | undefined\n private _payloads: TPayload[] = []\n private _signers: AccountInstance[] = []\n\n constructor(options: Omit<PayloadBuilderOptions, 'schema'> = {}) {\n super(options)\n }\n\n async build() {\n const chain = assertEx(this._chain, () => 'Chain must be set before building the transaction')\n const fees = assertEx(this._fees, () => 'Fees must be set before building the transaction')\n const blockRange = assertEx(this._blockRange, () => 'Block range must be set before building the transaction')\n return await buildTransaction(\n chain,\n this._elevatedPayloads,\n this._payloads,\n this._signers,\n asXL1BlockNumber(blockRange[0], true),\n asXL1BlockNumber(blockRange[1], true),\n this._signers[0]?.address,\n fees,\n )\n }\n\n chain(chain: ChainId) {\n this._chain = chain\n return this\n }\n\n async dryRun() {\n return await buildTransaction(\n XYO_ZERO_ADDRESS,\n this._elevatedPayloads,\n this._payloads,\n this._signers,\n asXL1BlockNumber(0, true),\n asXL1BlockNumber(1000, true),\n this._signers[0]?.address,\n defaultTransactionFees,\n )\n }\n\n elevatedPayload(payload?: AllowedBlockPayload) {\n const allowedPayload = isAllowedBlockPayload(payload) ? payload : undefined\n const allowPayloadExists = assertEx(allowedPayload, () => 'Payload must be an AllowedBlockPayload')\n this._elevatedPayloads.push(allowPayloadExists)\n return this\n }\n\n elevatedPayloads(payloads?: AllowedBlockPayload[]) {\n if (payloads)\n for (const payload of payloads) {\n this.elevatedPayload(payload)\n }\n return this\n }\n\n async estimatedMinimumFees(): Promise<TransactionFeesBigInt> {\n const tx = await this.dryRun()\n const requiredGas = transactionRequiredGas(tx)\n return {\n base: minTransactionFees.base,\n // eslint-disable-next-line unicorn/prefer-math-min-max\n gasLimit: requiredGas > minTransactionFees.gasLimit ? requiredGas : minTransactionFees.gasLimit,\n gasPrice: minTransactionFees.gasPrice,\n priority: minTransactionFees.priority,\n }\n }\n\n fees(fees: TransactionFeesBigInt) {\n this._fees = fees\n return this\n }\n\n payload(payload?: TPayload) {\n this._payloads.push(payload as TPayload)\n return this\n }\n\n payloads(payloads?: TPayload[]) {\n if (payloads)\n for (const payload of payloads) {\n if (payload !== null) {\n this.payload(payload)\n }\n }\n return this\n }\n\n range(blockRange: [number, number]) {\n if (blockRange.length !== 2) {\n throw new Error('Block range must be an array of two numbers')\n }\n this._blockRange = blockRange\n return this\n }\n\n async removeElevatedPayload(payload: AllowedBlockPayload) {\n const hash = await PayloadBuilder.hash(payload)\n const existingHashes = await PayloadBuilder.hashes(this._elevatedPayloads)\n\n // no async after this point to prevent changing _elevatedPayloads from other promise\n const existingPayloadIndex = existingHashes.indexOf(hash)\n if (existingPayloadIndex === -1) {\n throw new Error('Payload not found in the transaction')\n }\n this._elevatedPayloads = this._elevatedPayloads.filter((_, index) => index !== existingPayloadIndex)\n return this\n }\n\n async removePayload(payload: TPayload) {\n const hash = await PayloadBuilder.hash(payload)\n const existingHashes = await PayloadBuilder.hashes(this._payloads)\n\n // no async after this point to prevent changing _payloads from other promise\n const existingPayloadIndex = existingHashes.indexOf(hash)\n if (existingPayloadIndex === -1) {\n throw new Error('Payload not found in the transaction')\n }\n this._payloads = this._payloads.filter((_, index) => index !== existingPayloadIndex)\n return this\n }\n\n signer(signer?: AccountInstance) {\n if (signer) {\n this._signers.push(signer)\n }\n return this\n }\n\n signers(signers?: (AccountInstance | null)[]) {\n if (signers)\n for (const signer of signers) {\n if (signer !== null) {\n this.signer(signer)\n }\n }\n return this\n }\n}\n","import { assertEx, isString } from '@xylabs/sdk-js'\n\nexport type ProviderMoniker = string\n\nexport const asProviderMoniker = <T>(value: T) => {\n const moniker = isString(value) ? (value as unknown as ProviderMoniker) : undefined\n return assertEx(moniker)\n}\n\nexport interface Provider<T extends ProviderMoniker> {\n moniker: T\n}\n\nexport const DefaultProviderMoniker = 'Provider' as const\nexport type DefaultProviderMoniker = typeof DefaultProviderMoniker\n","import type { XL1BlockRange } from '@xyo-network/xl1-protocol'\nimport { asXL1BlockNumber, stepSize } from '@xyo-network/xl1-protocol'\n\nexport function calculateFramesFromRange(range: XL1BlockRange, step: number): [\n // ranges of fitted frames\n XL1BlockRange[],\n // ranges of remaining blocks\n XL1BlockRange[]] {\n const size = stepSize(step)\n let start = (Math.trunc(range[0] / size)) * size\n const fitted: XL1BlockRange[] = []\n const remaining: XL1BlockRange[] = []\n\n // if the start is not aligned with the range, add a remaining block\n if (start !== range[0]) {\n start += size\n remaining.push([range[0], asXL1BlockNumber(Math.min(start - 1, range[1]), true)])\n }\n\n for (let i = start; i <= range[1]; i += size) {\n if ((i + size - 1) <= range[1]) {\n fitted.push([asXL1BlockNumber(i, { name: 'calculateFramesFromRange A' }),\n asXL1BlockNumber(Math.min(i + size - 1, range[1]), { name: 'calculateFramesFromRange B' })])\n } else {\n remaining.push([asXL1BlockNumber(i, { name: 'calculateFramesFromRange C' }), range[1]])\n }\n }\n return [fitted, remaining]\n}\n","import type { XL1BlockRange } from '@xyo-network/xl1-protocol'\nimport { StepSizes } from '@xyo-network/xl1-protocol'\n\nimport { calculateFramesFromRange } from './calculateFramesFromRange.ts'\n\nexport function deepCalculateFramesFromRange(range: XL1BlockRange, startingStep = StepSizes.length - 1): XL1BlockRange[] {\n const fitted: XL1BlockRange[] = []\n let remaining: XL1BlockRange[] = [range]\n\n for (let step = startingStep; step >= 0; step--) {\n const newRemaining: XL1BlockRange[] = []\n for (const range of remaining) {\n const [newFittedFrames, newRemainingFrames] = calculateFramesFromRange(range, step)\n fitted.push(...newFittedFrames)\n newRemaining.push(...newRemainingFrames)\n }\n remaining = newRemaining\n }\n\n for (const range of remaining) {\n for (let i = range[0]; i <= range[1]; i++) {\n fitted.push([i, i]) // Add individual frames for remaining ranges\n }\n }\n\n return fitted.toSorted((a, b) => a[0] - b[0]) // Sort by start of range\n}\n","import { type Hash } from '@xylabs/sdk-js'\nimport type { XL1BlockNumber } from '@xyo-network/xl1-protocol'\n\nimport type { ChainContextRead } from '../../model/index.ts'\nimport { blockFromBlockNumber } from './blockFromBlockNumber.ts'\n\nexport async function hashFromBlockNumber(context: ChainContextRead, blockNumber: XL1BlockNumber): Promise<Hash> {\n return (await blockFromBlockNumber(context, blockNumber))._hash\n}\n","import type {\n ReadArchivist, ReadWriteArchivist, WriteArchivist,\n} from '@xyo-network/archivist-model'\n\nexport function isReadArchivist(value: unknown): value is ReadArchivist {\n return (value as ReadArchivist).get !== undefined && (value as ReadArchivist).next !== undefined\n}\n\nexport function isWriteArchivist(value: unknown): value is WriteArchivist {\n return (value as WriteArchivist).insert !== undefined\n}\n\nexport function isReadWriteArchivist(value: unknown): value is ReadWriteArchivist {\n return isReadArchivist(value) && isWriteArchivist(value)\n}\n","import type { StepIdentity, StepIdentityString } from '@xyo-network/xl1-protocol'\n\nexport function toStepIdentityString({ block, step }: StepIdentity): StepIdentityString {\n return `${block}|${step}` as StepIdentityString\n}\n","import {\n AddressZod, HexZod, toAddress, toHex,\n} from '@xylabs/hex'\nimport type { ChainId } from '@xyo-network/xl1-protocol'\nimport { AttoXL1ConvertFactor, XL1 } from '@xyo-network/xl1-protocol'\nimport { globalRegistry } from 'zod'\nimport * as z from 'zod'\n\nimport { MnemonicStringZod } from '../validation/index.ts'\n\nconst DEFAULT_FIXED_FEE = toHex(XL1(1n) * AttoXL1ConvertFactor.xl1)\nconst DEFAULT_HARDHAT_BRIDGE_CONTRACT = toAddress('2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6')\nconst DEFAULT_HARDHAT_CHAIN_ID: ChainId = toHex('7A69')\nconst DEFAULT_HARDHAT_REMOTE_CHAIN_WALLET_PRIVATE_KEY = toHex('0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80')\nconst DEFAULT_HARDHAT_TOKEN_CONTRACT = toAddress('5FbDB2315678afecb367f032d93F642f64180aa3')\nconst DEFAULT_MAX_BRIDGE_AMOUNT = toHex(XL1(100_000n) * AttoXL1ConvertFactor.xl1)\nconst DEFAULT_MIN_BRIDGE_AMOUNT = toHex(XL1(10n) * AttoXL1ConvertFactor.xl1)\n\nexport const BasisPointsZod = z.coerce.number().int().nonnegative().max(10_000)\nexport type BasisPoints = z.infer<typeof BasisPointsZod>\n\nexport const BridgeConfigZod = z.object({\n chainRpcApiUrl: z.string().default('http://localhost:8080/rpc').register(globalRegistry, {\n default: 'http://localhost:8080/rpc',\n description: 'URL for the Chain RPC API',\n title: 'bridge.chainRpcApiUrl',\n type: 'string',\n }),\n escrowAddress: AddressZod.optional().register(globalRegistry, {\n description: 'Address to which bridge escrow will be sent',\n title: 'bridge.escrowAddress',\n type: 'string',\n }),\n feesAddress: AddressZod.optional().register(globalRegistry, {\n description: 'Address to which bridge fees will be sent',\n title: 'bridge.feesAddress',\n type: 'string',\n }),\n feeFixed: HexZod.default(DEFAULT_FIXED_FEE).register(globalRegistry, {\n default: DEFAULT_FIXED_FEE,\n description: 'Fixed fee (in AttoXL1) applied to bridge transfers',\n title: 'bridge.feeFixed',\n type: 'bigint',\n }),\n feeRateBasisPoints: BasisPointsZod.default(500).register(globalRegistry, {\n default: 500,\n description: 'Variable rate fee (in basis points where 1 bps = 0.01%) applied to bridge transfers',\n title: 'bridge.feeRateBasisPoints',\n type: 'number',\n }),\n host: z.string().default('localhost').register(globalRegistry, {\n default: 'localhost',\n description: 'Host for the Bridge',\n title: 'bridge.host',\n type: 'string',\n }),\n maxBridgeAmount: HexZod.default(DEFAULT_MAX_BRIDGE_AMOUNT).register(globalRegistry, {\n default: DEFAULT_MAX_BRIDGE_AMOUNT,\n description: 'Maximum amount allowed for a bridge transfer',\n title: 'bridge.maxBridgeAmount',\n type: 'string',\n }),\n minBridgeAmount: HexZod.default(DEFAULT_MIN_BRIDGE_AMOUNT).register(globalRegistry, {\n default: DEFAULT_MIN_BRIDGE_AMOUNT,\n description: 'Minimum amount required for a bridge transfer',\n title: 'bridge.minBridgeAmount',\n type: 'string',\n }),\n mnemonic: MnemonicStringZod.optional().register(globalRegistry, {\n description: 'Mnemonic for the Bridge wallet',\n title: 'bridge.mnemonic',\n type: 'string',\n }),\n port: z.coerce.number().int().positive().default(8081).register(globalRegistry, {\n default: 8081,\n description: 'Port for the Bridge',\n title: 'bridge.port',\n type: 'number',\n }),\n redisHost: z.string().default('localhost').register(globalRegistry, {\n default: 'localhost',\n description: 'Host for the Bridge Redis instance',\n title: 'bridge.redisHost',\n type: 'string',\n }),\n redisPort: z.coerce.number().int().positive().default(6379).register(globalRegistry, {\n default: 6379,\n description: 'Port for the Bridge Redis instance',\n title: 'bridge.redisPort',\n type: 'number',\n }),\n remoteBridgeContractAddress: AddressZod.default(DEFAULT_HARDHAT_BRIDGE_CONTRACT).register(globalRegistry, {\n default: DEFAULT_HARDHAT_BRIDGE_CONTRACT,\n description: 'Hex representation of remote token address used for bridging',\n title: 'bridge.remoteBridgeContractAddress',\n type: 'string',\n }),\n remoteChainId: HexZod.default(DEFAULT_HARDHAT_CHAIN_ID).register(globalRegistry, {\n default: DEFAULT_HARDHAT_CHAIN_ID,\n description: 'Remote chain ID',\n title: 'bridge.remoteChainId',\n type: 'string',\n }),\n remoteTokenAddress: HexZod.default(DEFAULT_HARDHAT_TOKEN_CONTRACT).register(globalRegistry, {\n default: DEFAULT_HARDHAT_TOKEN_CONTRACT,\n description: 'Hex representation of remote token address used for bridging',\n title: 'bridge.remoteTokenAddress',\n type: 'string',\n }),\n remoteChainWalletPrivateKey: HexZod.default(DEFAULT_HARDHAT_REMOTE_CHAIN_WALLET_PRIVATE_KEY).register(globalRegistry, {\n description: 'Private key for the wallet to use for the remote chain wallet',\n title: 'bridge.remoteChainWalletPrivateKey',\n type: 'string',\n }),\n xl1ChainId: HexZod.optional().register(globalRegistry, {\n description: 'XL1 chain id used for bridging',\n title: 'bridge.xl1ChainId',\n type: 'string',\n }),\n xl1TokenAddress: HexZod.optional().register(globalRegistry, {\n description: 'XL1 token address used for bridging',\n title: 'bridge.xl1TokenAddress',\n type: 'string',\n }),\n})\n\nexport type BridgeConfig = z.infer<typeof BridgeConfigZod>\n\nexport const BridgeSettingsZod = BridgeConfigZod.pick({\n feeFixed: true,\n feeRateBasisPoints: true,\n feesAddress: true,\n escrowAddress: true,\n maxBridgeAmount: true,\n minBridgeAmount: true,\n remoteChainId: true,\n remoteTokenAddress: true,\n xl1TokenAddress: true,\n xl1ChainId: true,\n}).required()\n\nexport type BridgeSettings = z.infer<typeof BridgeSettingsZod>\n","import type { Hash } from '@xylabs/sdk-js'\nimport type {\n BlockBoundWitness,\n ChainId,\n HydratedBlock,\n} from '@xyo-network/xl1-protocol'\nimport { isValidationError, ValidationError } from '@xyo-network/xl1-protocol'\n\nexport class BlockValidationError extends ValidationError<BlockBoundWitness> {}\n\nexport const isBlockValidationError = (\n error: unknown,\n): error is BlockValidationError => {\n if (!isValidationError(error)) return false\n return (\n error.name === BlockValidationError.constructor.name\n )\n}\n\nexport class HydratedBlockValidationError extends ValidationError<HydratedBlock> {}\n\nexport const isHydratedBlockValidationError = (\n error: unknown,\n): error is HydratedBlockValidationError => {\n if (!isValidationError(error)) return false\n return (\n error.name === HydratedBlockValidationError.constructor.name\n )\n}\n\nexport class HydratedBlockStateValidationError extends ValidationError<HydratedBlock> {\n chainId: ChainId\n constructor(hash: Hash, chainId: ChainId, value: HydratedBlock, message?: string, cause?: unknown) {\n super(hash, value, message, cause)\n this.chainId = chainId\n }\n}\n\nexport const isHydratedBlockStateValidationError = (\n error: unknown,\n): error is HydratedBlockStateValidationError => {\n if (!isValidationError(error)) return false\n return (\n error.name === HydratedBlockStateValidationError.constructor.name\n )\n}\n","export const isLocalhost = (hostname: string): boolean => {\n return (\n hostname === 'localhost'\n || hostname === '127.0.0.1'\n || hostname === '::1' // IPv6 localhost\n || hostname.endsWith('.localhost')\n )\n}\n","import { isLocalhost } from './isLocalhost.ts'\n\nexport const getUrl = (host: string, port: number): string => {\n const scheme = isLocalhost(host) ? 'http' : 'https'\n return `${scheme}://${host}:${port}`\n}\n","export const TODO = true\n","import * as z from 'zod'\n\n/**\n * Validates a single string containing a BIP-39 mnemonic.\n *\n * • Trims leading/trailing whitespace.\n * • Collapses any run of whitespace (spaces, tabs, new-lines) to a single space.\n * • Splits on spaces → array of words.\n * • Checks that the word-count is 12, 15, 18, 21, or 24.\n *\n */\nexport const MnemonicStringZod = z\n .string()\n .transform(s => s.trim().replaceAll(/\\s+/g, ' ')) // normalize spacing\n .refine(\n s => [12, 15, 18, 21, 24].includes(s.split(' ').length),\n { message: 'Mnemonic must contain 12, 15, 18, 21, or 24 words.' },\n ).describe('BIP-39 mnemonic string')\n\nexport type MnemonicString = z.infer<typeof MnemonicStringZod>\n","import * as z from 'zod'\n\nimport { ApiConfigZod } from './Api.ts'\nimport { BridgeConfigZod } from './Bridge.ts'\nimport { ChainConfigZod } from './Chain.ts'\nimport { EvmConfigZod } from './Evm.ts'\nimport { LogConfigZod } from './Log.ts'\nimport { MempoolConfigZod } from './Mempool.ts'\nimport { ProducerConfigZod } from './Producer.ts'\nimport { RewardRedemptionApiConfigZod } from './RewardRedemptionApi.ts'\nimport { ServicesConfigZod } from './Services.ts'\nimport { StorageConfigZod } from './storage/index.ts'\nimport { TelemetryConfigZod } from './Telemetry.ts'\nimport { ValidationConfigZod } from './Validation.ts'\n\nexport const Xl1CommonConfigSchema = z.object({ ...LogConfigZod.shape }).describe('XL1 common configuration options')\n\nexport const ConfigZod = z.object({\n ...Xl1CommonConfigSchema.shape,\n api: ApiConfigZod.default(ApiConfigZod.parse({})).describe('Configuration for the API node'),\n bridge: BridgeConfigZod.default(BridgeConfigZod.parse({})).describe('Configuration for the Bridge node'),\n chain: ChainConfigZod.default(ChainConfigZod.parse({})).describe('Configuration for the chain'),\n evm: EvmConfigZod.default(EvmConfigZod.parse({})).describe('Configuration for EVM-backed services'),\n mempool: MempoolConfigZod.default(MempoolConfigZod.parse({})).describe('Configuration for the mempool'),\n producer: ProducerConfigZod.default(ProducerConfigZod.parse({})).describe('Configuration for the producer'),\n rewardRedemptionApi: RewardRedemptionApiConfigZod.default(RewardRedemptionApiConfigZod.parse({})).describe('Configuration for the rewards redemption API'),\n services: ServicesConfigZod.default(ServicesConfigZod.parse({})).describe('Configuration for the global services'),\n storage: StorageConfigZod.default(StorageConfigZod.parse({})).describe('Configuration for the storage'),\n telemetry: TelemetryConfigZod.default(TelemetryConfigZod.parse({})).describe('Configuration for telemetry'),\n validation: ValidationConfigZod.default(ValidationConfigZod.parse({})).describe('Configuration for validation'),\n})\n\nexport type Config = z.infer<typeof ConfigZod>\n\nexport const getDefaultConfig = (): Config => ConfigZod.parse({})\n","import { globalRegistry } from 'zod'\nimport * as z from 'zod'\n\nimport { MnemonicStringZod } from '../validation/index.ts'\n\nexport const ApiConfigZod = z.object({\n host: z.string().default('localhost').register(globalRegistry, {\n default: 'localhost',\n description: 'Host for the API',\n title: 'api.host',\n type: 'string',\n }),\n initRewardsCache: z.union([z.number(), z.string()]).transform(v => v !== '0' && v !== 'false').default(true).register(globalRegistry, {\n description: 'Whether to initialize the rewards cache on startup',\n title: 'api.initRewardsCache',\n type: 'boolean',\n }),\n mnemonic: MnemonicStringZod.optional().register(globalRegistry, {\n description: 'Mnemonic for the API wallet',\n title: 'api.mnemonic',\n type: 'string',\n }),\n port: z.coerce.number().default(8080).register(globalRegistry, {\n default: 8080,\n description: 'Port for the API',\n title: 'api.port',\n type: 'number',\n }),\n})\n\nexport type ApiConfig = z.infer<typeof ApiConfigZod>\n","import { AddressZod, HexZod } from '@xylabs/sdk-js'\nimport { globalRegistry } from 'zod'\nimport * as z from 'zod'\n\nexport const ChainConfigZod = z.object({\n id: HexZod.optional()\n .register(globalRegistry, {\n description:\n 'The unique identifier for the chain. Should be the staking contract address for contract-backed chains.',\n title: 'chain.id',\n type: 'string',\n }),\n genesisRewardAddress: AddressZod.optional()\n .register(globalRegistry, {\n description:\n 'Address to send the initial genesis rewards to, if a new chain is being created.',\n title: 'chain.genesisRewardAddress',\n type: 'Address',\n }),\n})\n\nexport type ChainConfig = z.infer<typeof ChainConfigZod>\n","import { globalRegistry } from 'zod'\nimport * as z from 'zod'\n\nexport const EvmInfuraConfigZod = z.object({\n projectId: z.string().optional().register(globalRegistry, {\n description: 'Infura project ID',\n title: 'evm.infura.projectId',\n type: 'string',\n }),\n projectSecret: z.string().optional().register(globalRegistry, {\n description: 'Infura project secret',\n title: 'evm.infura.projectSecret',\n type: 'string',\n }),\n})\n\nexport const EvmJsonRpcConfigZod = z.object({\n url: z.url().optional().register(globalRegistry, {\n description: 'JSON-RPC URL',\n title: 'evm.jsonRpc.url',\n type: 'string',\n }),\n})\n\nexport const EvmConfigZod = z.object({\n chainId: z.string().optional().register(globalRegistry, {\n description: 'EVM chain ID',\n title: 'evm.chainId',\n type: 'string',\n }),\n infura: EvmInfuraConfigZod.optional().describe('Infura Provider configuration'),\n jsonRpc: EvmJsonRpcConfigZod.optional().describe('JSON-RPC Provider configuration'),\n})\n\nexport type EvmConfig = z.infer<typeof EvmConfigZod>\n","import type { LogLevelKey } from '@xylabs/sdk-js'\nimport { LogLevel } from '@xylabs/sdk-js'\nimport { globalRegistry } from 'zod'\nimport * as z from 'zod'\nconst LogLevels = Object.keys(LogLevel) as [LogLevelKey, ...LogLevelKey[]]\n\nexport const LogConfigZod = z.object({\n logLevel: z.enum(LogLevels).default('info').register(globalRegistry, {\n choices: LogLevels,\n default: 'info',\n description: 'Desired process verbosity',\n title: 'logLevel',\n type: 'string',\n }),\n silent: z.boolean().default(false).register(globalRegistry, {\n default: false,\n description: 'Whether to run in silent mode',\n title: 'silent',\n type: 'boolean',\n }),\n})\n\nexport type LogConfig = z.infer<typeof LogConfigZod>\n","import { globalRegistry } from 'zod'\nimport * as z from 'zod'\n\nimport { MnemonicStringZod } from '../validation/index.ts'\n\nexport const MempoolConfigZod = z.object({\n enabled: z.string().default('false').transform((val, ctx) => {\n const normalized = val.toLowerCase().trim()\n if (['true', '1', 'yes', 'on'].includes(normalized)) return true\n if (['false', '0', 'no', 'off'].includes(normalized)) return false\n ctx.addIssue({\n code: 'invalid_type',\n expected: 'boolean',\n message: `Invalid boolean value: \"${val}\". Use true/false, 1/0, yes/no.`,\n })\n return z.NEVER\n }).register(globalRegistry, {\n default: 'false',\n description: 'Enable the Mempool',\n title: 'mempool.enabled',\n type: 'boolean',\n }),\n host: z.string().default('localhost').register(globalRegistry, {\n default: 'localhost',\n description: 'Host for the Mempool',\n title: 'mempool.host',\n type: 'string',\n }),\n mnemonic: MnemonicStringZod.optional().register(globalRegistry, {\n description: 'Mnemonic for the Mempool wallet',\n title: 'mempool.mnemonic',\n type: 'string',\n }),\n port: z.coerce.number().default(8083).register(globalRegistry, {\n default: 8083,\n description: 'Port for the Mempool',\n title: 'mempool.port',\n type: 'number',\n }),\n})\n\nexport type MempoolConfig = z.infer<typeof MempoolConfigZod>\n","import { AddressZod, asAddress } from '@xylabs/sdk-js'\nimport { globalRegistry } from 'zod'\nimport * as z from 'zod'\n\nimport { MnemonicStringZod } from '../validation/index.ts'\n\nexport const ProducerConfigZod = z.object({\n allowlist: z.preprocess((val) => {\n if (typeof val === 'string') {\n return val.split(',').map(s => asAddress(s.trim()))\n }\n return val\n }, z.array(AddressZod).optional().register(globalRegistry, {\n description: 'List of allowed producer addresses, if undefined anyone can participate',\n title: 'allowlist',\n type: 'array',\n })),\n\n disableIntentRedeclaration: z.boolean().optional().register(globalRegistry, {\n description: 'Should the producer skip redeclaring their intent to continue producing blocks',\n title: 'producer.disableIntentRedeclaration',\n type: 'boolean',\n }),\n // TODO: Port schema\n healthCheckPort: z.coerce.number().optional().register(globalRegistry, {\n description: 'Port for the Producer health checks',\n title: 'producer.healthCheckPort',\n type: 'number',\n }),\n heartbeatInterval: z.coerce.number().default(3_600_000).register(globalRegistry, {\n description: 'The number of milliseconds between heartbeats if no blocks are produced',\n title: 'producer.heartbeatInterval',\n type: 'number',\n }),\n // TODO: BigInt schema\n minStake: z.coerce.number().default(1).register(globalRegistry, {\n description: 'Minimum stake required to be a Producer',\n title: 'producer.minStake',\n type: 'number',\n }),\n mnemonic: MnemonicStringZod.optional().register(globalRegistry, {\n description: 'Mnemonic for the Producer wallet',\n title: 'producer.mnemonic',\n type: 'string',\n }),\n // TODO: Port schema\n port: z.coerce.number().default(8081).register(globalRegistry, {\n default: 8081,\n description: 'Port for the Producer',\n title: 'producer.port',\n type: 'number',\n }),\n // TODO: Address schema\n rewardAddress: z.string().optional().register(globalRegistry, {\n description: 'Address to receive block rewards',\n title: 'producer.rewardAddress',\n type: 'string',\n }),\n})\n\nexport type ProducerConfig = z.infer<typeof ProducerConfigZod>\n","import { globalRegistry } from 'zod'\nimport * as z from 'zod'\n\nimport { MnemonicStringZod } from '../validation/index.ts'\n\nexport const RewardRedemptionApiConfigZod = z.object({\n chainRpcApiUrl: z.string().default('http://localhost:8080/rpc').register(globalRegistry, {\n default: 'http://localhost:8080/rpc',\n description: 'URL for the Chain RPC API',\n title: 'rewardRedemptionApi.chainRpcApiUrl',\n type: 'string',\n }),\n host: z.string().default('localhost').register(globalRegistry, {\n default: 'localhost',\n description: 'Host for the Redemption API',\n title: 'rewardRedemptionApi.host',\n type: 'string',\n }),\n mnemonic: MnemonicStringZod.optional().register(globalRegistry, {\n description: 'Mnemonic for the Redemption API wallet',\n title: 'rewardRedemptionApi.mnemonic',\n type: 'string',\n }),\n port: z.coerce.number().default(8082).register(globalRegistry, {\n default: 8082,\n description: 'Port for the Redemption API',\n title: 'rewardRedemptionApi.port',\n type: 'number',\n }),\n})\n\nexport type RewardRedemptionApiConfig = z.infer<typeof RewardRedemptionApiConfigZod>\n","import { globalRegistry } from 'zod'\nimport * as z from 'zod'\n\nexport const ServicesConfigZod = z.object({\n accountBalanceViewerEndpoint: z.string().default('http://localhost:8080/rpc').register(globalRegistry, {\n default: 'http://localhost:8080/rpc',\n description: 'Endpoint of the API to use for instantiating an external AccountBalanceViewer',\n title: 'services.accountBalanceViewerEndpoint',\n type: 'string',\n }),\n apiEndpoint: z.string().default('http://localhost:8080/rpc').register(globalRegistry, {\n default: 'http://localhost:8080/rpc',\n description: 'Endpoint of the API to use for instantiating an external Viewers',\n title: 'services.apiEndpoint',\n type: 'string',\n }),\n})\n\nexport type ServicesConfig = z.infer<typeof ServicesConfigZod>\n","import { isDefined, isUndefined } from '@xylabs/sdk-js'\nimport { globalRegistry } from 'zod'\nimport * as z from 'zod'\n\n/**\n * Checks if the provided MongoDB configuration contains all necessary fields\n * for establishing a connection.\n * @param config MongoDB configuration object\n * @returns True if the configuration contains all necessary fields for\n * establishing a connection\n */\nexport const hasMongoConfig = (config?: MongoConfig): config is Required<MongoConfig> => {\n if (isUndefined(config)) return false\n return (\n isDefined(config.connectionString)\n && isDefined(config.database)\n && isDefined(config.domain)\n && isDefined(config.password)\n && isDefined(config.username)\n )\n}\n\nexport const MongoConfigZod = z.object({\n // TODO: Create from other arguments\n connectionString: z.string().nonempty().optional().register(globalRegistry, {\n description: 'MongoDB connection string',\n title: 'storage.mongo.connectionString',\n type: 'string',\n }),\n database: z.string().nonempty().optional().register(globalRegistry, {\n description: 'MongoDB database name',\n title: 'storage.mongo.database',\n type: 'string',\n }),\n domain: z.string().nonempty().optional().register(globalRegistry, {\n description: 'MongoDB domain',\n title: 'storage.mongo.domain',\n type: 'string',\n }),\n password: z.string().nonempty().optional().register(globalRegistry, {\n description: 'MongoDB password',\n title: 'storage.mongo.password',\n type: 'string',\n }),\n username: z.string().nonempty().optional().register(globalRegistry, {\n description: 'MongoDB username',\n title: 'storage.mongo.username',\n type: 'string',\n }),\n})\n\nexport type MongoConfig = z.infer<typeof MongoConfigZod>\n","import { globalRegistry } from 'zod'\nimport * as z from 'zod'\n\nimport { MongoConfigZod } from './driver/index.ts'\n\nexport const StorageConfigZod = z.object({\n mongo: MongoConfigZod.optional().describe('Configuration for the MongoD storage driver'),\n root: z.string().optional().register(globalRegistry, {\n description: 'Root directory for local storage',\n title: 'storage.root',\n type: 'string',\n }),\n}).describe('Storage configuration options')\n\nexport type StorageConfig = z.infer<typeof StorageConfigZod>\n","import { globalRegistry } from 'zod'\nimport * as z from 'zod'\n\nexport const MetricsScrapeConfigZod = z.object({\n path: z.string().default('/metrics').register(globalRegistry, {\n default: '/metrics',\n description: 'Path for the metrics scrape endpoint',\n title: 'telemetry.metrics.scrape.path',\n type: 'string',\n }),\n port: z.coerce.number().default(9464).register(globalRegistry, {\n default: 9464,\n description: 'Port for the metrics scrape endpoint',\n title: 'telemetry.metrics.scrape.port',\n type: 'number',\n }),\n}).describe('Metrics scrape configuration')\n\nexport const MetricsConfigZod = z.object({ scrape: MetricsScrapeConfigZod }).describe('Metrics configuration options')\n\nexport const OpenTelemetryConfigZod = z.object({\n // OpenTelemetry options\n otlpEndpoint: z.url().optional().register(globalRegistry, {\n description: 'OTLP endpoint for exporting telemetry data',\n title: 'telemetry.otel.otlpEndpoint',\n type: 'string',\n }),\n})\n\nexport const TelemetryConfigZod = z.object({\n // Metrics configuration\n metrics: MetricsConfigZod.optional().describe('Metrics configuration'),\n // OpenTelemetry configuration\n otel: OpenTelemetryConfigZod.optional().describe('OpenTelemetry configuration'),\n}).describe('Telemetry configuration options')\n\nexport type TelemetryConfig = z.infer<typeof TelemetryConfigZod>\n","import { AddressZod, asAddress } from '@xylabs/sdk-js'\nimport { globalRegistry } from 'zod'\nimport * as z from 'zod'\n\nexport const ValidationConfigZod = z.object({\n allowedRewardRedeemers: z.preprocess((val) => {\n if (typeof val === 'string') {\n return val.split(',').map(s => asAddress(s.trim()))\n }\n return val\n }, z.array(AddressZod).optional().register(globalRegistry, {\n description: 'List of allowed reward redeemer addresses, if undefined anyone can participate',\n title: 'allowedRewardRedeemers',\n type: 'array',\n })),\n allowedRewardEscrowAccountSigners: z.preprocess((val) => {\n if (typeof val === 'string') {\n return val.split(',').map(s => asAddress(s.trim()))\n }\n return val\n }, z.array(AddressZod).optional().register(globalRegistry, {\n description: 'List of allowed reward escrow account signer addresses, if undefined anyone can participate',\n title: 'allowedRewardEscrowAccountSigners',\n type: 'array',\n })),\n})\n\nexport type ValidationConfig = z.infer<typeof ValidationConfigZod>\n","import * as z from 'zod'\n\nconst DescriptionSchema = z.string()\nconst TitleSchema = z.string()\n\nexport const JSONSchemaMetaSchema = z\n .object({\n id: z.string().optional(),\n title: TitleSchema.optional(),\n description: DescriptionSchema.optional(),\n deprecated: z.boolean().optional(),\n })\n .catchall(z.unknown()) // allow arbitrary extra keys\n\nexport const GlobalMetaSchema = JSONSchemaMetaSchema.extend({})\n\nconst ChoicesSchema = z\n .array(z.union([z.string(), z.number(), z.literal(true), z.undefined()]))\n .readonly()\n\nexport const UsageMetaSchema = GlobalMetaSchema.extend({\n choices: ChoicesSchema.optional(),\n default: z.unknown().optional(),\n description: DescriptionSchema,\n group: z.string().optional(),\n hidden: z.boolean().optional(),\n title: TitleSchema,\n type: z.union([\n z.literal('array'),\n z.literal('count'),\n z.literal('boolean'),\n z.literal('number'),\n z.literal('string'),\n ]),\n})\n\nexport type UsageMeta = z.infer<typeof UsageMetaSchema>\n\nexport function isUsageMeta(v: unknown): v is UsageMeta {\n return UsageMetaSchema.safeParse(v).success\n}\n","import { AbstractCreatable, assertEx } from '@xylabs/sdk-js'\n\nimport type { Provider, ProviderMoniker } from '../model/index.ts'\nimport type {\n CreatableProvider,\n CreatableProviderEventData, CreatableProviderFactory, CreatableProviderInstance, CreatableProviderParams,\n} from './CreatableProvider.ts'\nimport { ProviderFactory } from './ProviderFactory.ts'\n\nexport abstract class AbstractCreatableProvider<TParams extends CreatableProviderParams = CreatableProviderParams,\n TEventData extends CreatableProviderEventData = CreatableProviderEventData> extends AbstractCreatable<TParams, TEventData>\n implements Omit<CreatableProviderInstance, 'moniker'> {\n protected _contextCache: TParams['context'] | undefined\n\n protected get config() {\n return this.context.config!\n }\n\n protected get context() {\n return this.params.context!\n }\n\n protected get locator() {\n return this.context.locator!\n }\n\n static factory<TModule extends CreatableProviderInstance>(\n this: CreatableProvider<TModule>,\n params?: Partial<TModule['params']>,\n ): CreatableProviderFactory<TModule> {\n const factory = ProviderFactory.withParams<TModule>(this, params)\n return factory\n }\n\n static async getInstance<T extends CreatableProviderInstance>(\n this: CreatableProvider<T>,\n inParams: T['params'],\n ): Promise<T> {\n const instance = await this.create<T>(inParams)\n return instance\n }\n\n static override async paramsHandler<T extends CreatableProviderInstance>(\n params: Partial<T['params']> = {},\n ) {\n const context = assertEx(params.context, () => new Error('Context is required'))\n const config = assertEx(context.config, () => new Error('Context config is required'))\n const locator = assertEx(context.locator, () => new Error('Context locator is required'))\n return await super.paramsHandler<T>({\n ...params,\n statusReporter: params.statusReporter ?? context.statusReporter,\n context: {\n ...context, config, locator,\n },\n name: params.name ?? (this as unknown as CreatableProvider<T>).defaultMoniker,\n })\n }\n\n static async tryGetInstance<T extends CreatableProviderInstance>(\n this: CreatableProvider<T>,\n inParams: T['params'],\n ): Promise<T | undefined> {\n try {\n return await this.create<T>(inParams)\n } catch {\n return\n }\n }\n\n async locateAndCreate<TProvider extends Provider<ProviderMoniker>,\n TParams extends CreatableProviderInstance<TProvider>['params'] = CreatableProviderInstance<TProvider>['params']>(moniker: TProvider['moniker']) {\n return await this.locator?.getInstance<TProvider, TParams>(moniker)\n }\n}\n","import type { Labels, WithOptionalLabels } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\n\nimport type {\n CreatableProvider, CreatableProviderFactory, CreatableProviderInstance,\n ProviderFactoryScope,\n} from './CreatableProvider.ts'\n\ndeclare global {\n var xyoServiceSingletons: Record<string, unknown>\n}\n\nexport class ProviderFactory<TProvider extends CreatableProviderInstance> implements CreatableProviderFactory<TProvider> {\n creatableProvider: CreatableProvider<TProvider>\n\n defaultMoniker: CreatableProvider<TProvider>['monikers'][number]\n\n defaultParams?: Partial<TProvider['params']>\n\n labels?: Labels\n\n monikers: CreatableProvider<TProvider>['monikers']\n\n scope: ProviderFactoryScope\n\n constructor(\n creatableProvider: CreatableProvider<TProvider>,\n params?: Partial<TProvider['params']>,\n labels: Labels = {},\n scope: ProviderFactoryScope = 'context',\n ) {\n this.creatableProvider = creatableProvider\n this.defaultParams = params\n this.defaultMoniker = creatableProvider.defaultMoniker\n this.monikers = creatableProvider.monikers\n this.scope = scope\n assertEx(this.monikers.includes(this.defaultMoniker), () => 'defaultMoniker must be in monikers')\n this.labels = Object.assign({}, (creatableProvider as WithOptionalLabels).labels ?? {}, labels ?? {})\n }\n\n get resolvedMoniker() {\n const labels: Labels = this.labels ?? {}\n const labelString = Object.entries(labels).map(([key, value]) => `${key}=${value}`).join(',')\n return labelString.length === 0 ? `${this.defaultMoniker}` : `${this.defaultMoniker}|${labelString}`\n }\n\n static withParams<T extends CreatableProviderInstance>(\n creatableProvider: CreatableProvider<T>,\n params?: Partial<T['params']>,\n labels: Labels = {},\n ) {\n return new ProviderFactory<T>(creatableProvider, params, labels)\n }\n\n /** @deprecated use getInstance instead */\n async create(this: CreatableProviderFactory<TProvider>, params?: Partial<TProvider['params']>, start = true): Promise<TProvider> {\n return await this.getInstance(params as TProvider['params'], start)\n }\n\n factory<T extends CreatableProviderInstance>(\n this: CreatableProviderFactory<T>,\n params?: Partial<T['params']>,\n labels: Labels = {},\n ): CreatableProviderFactory<T> {\n return new ProviderFactory<T>(this.creatableProvider, params, labels)\n }\n\n async getInstance(this: CreatableProviderFactory<TProvider>, params: TProvider['params'], start = true): Promise<TProvider> {\n let scopeObject: Record<string, unknown> = {}\n switch (this.scope) {\n case 'global': {\n if (globalThis.xyoServiceSingletons === undefined) {\n globalThis.xyoServiceSingletons = {}\n }\n scopeObject = globalThis.xyoServiceSingletons\n break\n }\n case 'context': {\n const context = assertEx(\n params?.context,\n () => 'Context is required for context-scoped providers',\n )\n if (context.singletons === undefined) {\n context.singletons = {}\n }\n scopeObject = context.singletons\n break\n }\n default: {\n scopeObject = {}\n break\n }\n }\n const mergedParams: TProvider['params'] = {\n ...this.defaultParams,\n ...params,\n context: {\n ...this.defaultParams?.context,\n ...params?.context,\n config: {\n ...this.defaultParams?.context?.config,\n ...params?.context?.config,\n },\n },\n } as TProvider['params']\n const resultPromise = scopeObject[this.resolvedMoniker] as Promise<TProvider> ?? this.creatableProvider.create<TProvider>(mergedParams)\n scopeObject[this.resolvedMoniker] = resultPromise\n const result = await resultPromise\n if (start) {\n assertEx(await result.start(), () => 'Failed to start provider instance')\n }\n return result\n }\n\n async tryGetInstance(this: CreatableProviderFactory<TProvider>, params: TProvider['params'], start = true): Promise<TProvider | undefined> {\n try {\n return await this.getInstance(params, start)\n } catch {\n return\n }\n }\n}\n","import type { MeterProvider, TracerProvider } from '@opentelemetry/api'\nimport type { EventData } from '@xylabs/events'\nimport type {\n Creatable, CreatableInstance, CreatableParams,\n Labels, Logger, WithOptionalLabels,\n} from '@xylabs/sdk-js'\n\nimport type { Config } from '../config/index.ts'\nimport type { Provider, ProviderMoniker } from '../model/index.ts'\nimport type { RuntimeStatusMonitor } from '../status/index.ts'\nimport type { LabeledCreatableProviderFactory } from './LabeledCreatableProviderFactory.ts'\nimport type { ProviderFactoryLocatorInstance } from './ProviderFactoryLocatorInstance.ts'\n\nexport interface CreatableProviderContext {\n _id?: string\n config: Config\n locator: ProviderFactoryLocatorInstance\n logger?: Logger\n meterProvider?: MeterProvider\n singletons: Record<string, unknown>\n statusReporter?: RuntimeStatusMonitor\n traceProvider?: TracerProvider\n}\n\nexport interface CreatableProviderParams<TContext extends CreatableProviderContext = CreatableProviderContext> extends CreatableParams {\n context: TContext\n}\nexport interface CreatableProviderEventData extends EventData {}\n\nexport type CreatableProviderInstance<TProvider extends Provider<ProviderMoniker> = Provider<ProviderMoniker>,\n TParams extends CreatableProviderParams = CreatableProviderParams,\n TEventData extends CreatableProviderEventData = CreatableProviderEventData>\n = CreatableInstance<TParams, TEventData> & TProvider\n\nexport type ProviderFactoryScope = 'global' | 'context' | 'local'\n\nexport interface CreatableProviderFactory<T extends CreatableProviderInstance = CreatableProviderInstance>\n extends Omit<CreatableProvider<T>, 'create' | 'createHandler' | 'paramsHandler'> {\n creatableProvider: CreatableProvider<T>\n defaultParams?: Partial<T['params']>\n\n labels?: Labels\n resolvedMoniker: string\n scope: ProviderFactoryScope\n\n /** @deprecated use getInstance instead */\n create(\n this: CreatableProviderFactory<T>,\n params?: Partial<T['params'] & CreatableProviderParams>, start?: boolean): Promise<T>\n\n getInstance(\n this: CreatableProviderFactory<T>,\n params: T['params'] & CreatableProviderParams, start?: boolean): Promise<T>\n\n tryGetInstance(\n this: CreatableProviderFactory<T>,\n params: T['params'] & CreatableProviderParams, start?: boolean): Promise<T | undefined>\n\n}\n\nexport interface LabeledCreatableProvider<T extends CreatableProviderInstance = CreatableProviderInstance> extends CreatableProvider<T>, WithOptionalLabels {\n factory(params?: Partial<T['params'] & CreatableProviderParams>): LabeledCreatableProviderFactory<T>\n}\n\nexport interface CreatableProvider<T extends CreatableProviderInstance = CreatableProviderInstance> extends Creatable<T> {\n defaultMoniker: ProviderMoniker\n monikers: ProviderMoniker[]\n factory(params?: Partial<T['params'] & CreatableProviderParams>): CreatableProviderFactory<T>\n}\n\n/**\n * Class annotation to be used to decorate Providers which support\n * an asynchronous creation pattern\n * @returns The decorated Provider requiring it implement the members\n * of the CreatableProvider as statics properties/methods\n */\nexport function creatableProvider<TProvider extends CreatableProviderInstance = CreatableProviderInstance>() {\n return <U extends CreatableProvider<TProvider>>(constructor: U) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n constructor\n }\n}\n\n/**\n * Class annotation to be used to decorate Providers which support\n * an asynchronous creation pattern\n * @returns The decorated Provider requiring it implement the members\n * of the CreatableProvider as statics properties/methods\n */\nexport function labeledCreatableProvider<TProvider extends CreatableProviderInstance = CreatableProviderInstance>() {\n return <U extends LabeledCreatableProvider<TProvider>>(constructor: U) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n constructor\n }\n}\n","import type { Labels } from '@xylabs/sdk-js'\nimport { isTruthy } from '@xylabs/sdk-js'\n\nimport type { ProviderMoniker } from '../model/index.ts'\nimport type { CreatableProviderFactory, CreatableProviderInstance } from './CreatableProvider.ts'\nimport type { LabeledCreatableProviderFactory } from './LabeledCreatableProviderFactory.ts'\n\nexport interface CreatableProviderRegistry {\n [key: string]: (CreatableProviderFactory | LabeledCreatableProviderFactory)[] | undefined\n}\n\nconst buildProviderFactory = <TProvider extends CreatableProviderInstance>(\n provider: CreatableProviderFactory<TProvider>,\n labels?: Labels,\n): LabeledCreatableProviderFactory<TProvider> => {\n const factory = {\n monikers: provider.monikers,\n // Copy static methods\n // eslint-disable-next-line sonarjs/deprecation\n create: provider.create.bind(provider) as LabeledCreatableProviderFactory<TProvider>['create'],\n\n // Merge module & supplied labels\n labels: { ...(provider as LabeledCreatableProviderFactory).labels, ...labels },\n creatableProvider: provider.creatableProvider,\n resolvedMoniker: provider.resolvedMoniker,\n scope: provider.scope,\n getInstance: provider.getInstance.bind(provider) as LabeledCreatableProviderFactory<TProvider>['getInstance'],\n tryGetInstance: provider.tryGetInstance?.bind(provider) as LabeledCreatableProviderFactory<TProvider>['tryGetInstance'],\n defaultMoniker: provider.defaultMoniker,\n factory: provider.factory.bind(provider) as LabeledCreatableProviderFactory<TProvider>['factory'],\n } satisfies LabeledCreatableProviderFactory<TProvider>\n return factory\n}\n\nexport const registerCreatableProviderFactory = <TProvider extends CreatableProviderInstance>(\n registry: CreatableProviderRegistry,\n factory: CreatableProviderFactory<TProvider> | LabeledCreatableProviderFactory<TProvider>,\n labels?: Labels,\n /** register this as the primary factory for every schema it supports */\n primary: boolean | ProviderMoniker | ProviderMoniker[] = false,\n) => {\n const primaryMonikers\n = primary !== true && isTruthy(primary)\n ? Array.isArray(primary)\n ? primary\n : [primary]\n : []\n\n for (const primaryMoniker of primaryMonikers) {\n if (!factory.monikers.includes(primaryMoniker)) {\n console.warn(`Primary moniker ${primary} not found in factory monikers`)\n }\n }\n\n const isPrimaryForMoniker = (moniker: ProviderMoniker) => {\n switch (typeof primary) {\n case 'boolean': {\n return primary\n }\n case 'string': {\n return moniker === primary\n }\n case 'object': {\n if (Array.isArray(primary)) {\n return primary.includes(moniker)\n }\n }\n }\n throw new Error(`Invalid primary value: ${primary}`)\n }\n\n const factoryClone: LabeledCreatableProviderFactory<TProvider> = buildProviderFactory(factory, labels)\n\n // add this default moniker as the first entry\n registry[factoryClone.defaultMoniker] = [factoryClone, ...(registry[factoryClone.defaultMoniker] ?? [])]\n for (const moniker of factoryClone.monikers) {\n registry[moniker] = isPrimaryForMoniker(moniker) ? [factoryClone, ...(registry[moniker] ?? [])] : [...(registry[moniker] ?? []), factoryClone]\n }\n}\n\nexport const registerCreatableProviderFactories = (\n factories: (CreatableProviderFactory | LabeledCreatableProviderFactory)[],\n registry: CreatableProviderRegistry = {},\n primary = false,\n) => {\n for (const factory of factories) {\n registerCreatableProviderFactory(registry, factory, undefined, primary)\n }\n return registry\n}\n","import type { WithOptionalLabels } from '@xylabs/sdk-js'\n\nimport type { CreatableProviderFactory, CreatableProviderInstance } from './CreatableProvider.ts'\n\nexport type LabeledCreatableProviderFactory<T extends CreatableProviderInstance = CreatableProviderInstance> = CreatableProviderFactory<T> & WithOptionalLabels\n\nexport const hasLabels = (factory: CreatableProviderFactory | LabeledCreatableProviderFactory): factory is LabeledCreatableProviderFactory => {\n return (factory as LabeledCreatableProviderFactory).labels !== undefined\n}\n\n/**\n * Class annotation to be used to decorate Providers which support\n * an asynchronous labeled creation factory pattern\n * @returns The decorated Provider requiring it implement the members\n * of the CreatableProvider as statics properties/methods\n */\nexport function labeledCreatableProviderFactory<TProvider extends CreatableProviderInstance = CreatableProviderInstance>() {\n return <U extends LabeledCreatableProviderFactory<TProvider>>(constructor: U) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n constructor\n }\n}\n","import { hasAllLabels, type Labels } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\n\nimport type { Provider, ProviderMoniker } from '../model/index.ts'\nimport type {\n CreatableProviderContext, CreatableProviderFactory, CreatableProviderInstance,\n} from './CreatableProvider.ts'\nimport { type CreatableProviderRegistry, registerCreatableProviderFactory } from './CreatableProviderRegistry.ts'\nimport { hasLabels, type LabeledCreatableProviderFactory } from './LabeledCreatableProviderFactory.ts'\nimport type { ProviderFactoryLocatorInstance } from './ProviderFactoryLocatorInstance.ts'\n\n/**\n * A class which encapsulates the Service Locator Pattern for Provider Factories\n */\nexport class ProviderFactoryLocator implements ProviderFactoryLocatorInstance {\n protected readonly _context: CreatableProviderContext\n protected readonly _registry: CreatableProviderRegistry\n\n private _frozen = false\n\n constructor(context: Omit<CreatableProviderContext, 'locator'>, registry: CreatableProviderRegistry = {}) {\n this._registry = registry\n this._context = { ...context, locator: this }\n }\n\n get context() {\n return this._context\n }\n\n /**\n * The current registry for the module factory\n */\n get registry(): Readonly<CreatableProviderRegistry> {\n return this._registry\n }\n\n static empty(context: Omit<CreatableProviderContext, 'locator'>) {\n return new ProviderFactoryLocator(context, {})\n }\n\n static standard(context: Omit<CreatableProviderContext, 'locator'>) {\n return new ProviderFactoryLocator(context, {})\n }\n\n /** @deprecated use getInstance instead */\n async create<TProvider extends Provider<ProviderMoniker>>(\n moniker: TProvider['moniker'],\n params?: Partial<CreatableProviderInstance<TProvider>['params']>,\n labels?: Labels,\n ) {\n return await this.getInstance<TProvider>(moniker, params, labels)\n }\n\n freeze() {\n this._frozen = true\n }\n\n async getInstance<TProvider extends Provider<ProviderMoniker>>(\n moniker: TProvider['moniker'],\n params?: Partial<CreatableProviderInstance<TProvider>['params']>,\n labels?: Labels,\n ) {\n const resolvedParams = {\n ...params,\n context: {\n ...this.context,\n ...params?.context,\n } as CreatableProviderInstance<TProvider>['params']['context'],\n } as CreatableProviderInstance<TProvider>['params']\n const factory = this.locate<TProvider>(moniker, labels)\n const result = await factory.getInstance(resolvedParams)\n return result\n }\n\n /**\n * Locates a provider factory that matches the supplied moniker and labels\n * @param moniker The config moniker for the provider\n * @param labels The labels for the provider factory\n * @returns A provider factory that matches the supplied moniker and labels or throws if one is not found\n */\n locate<TProvider extends Provider<ProviderMoniker>>(moniker: TProvider['moniker'], labels?: Labels):\n CreatableProviderFactory<CreatableProviderInstance<TProvider>> | LabeledCreatableProviderFactory<CreatableProviderInstance<TProvider>> {\n return assertEx(\n this.tryLocate<TProvider>(moniker, labels),\n\n () => `No module factory for the supplied config moniker [${moniker}]${labels ? ` & labels [${JSON.stringify(labels)}]` : ''} registered`,\n )\n }\n\n merge(locator: ProviderFactoryLocatorInstance): ProviderFactoryLocatorInstance {\n const registry = { ...this.registry }\n for (const moniker in locator.registry) {\n if (registry[moniker]) {\n registry[moniker].push(...(locator.registry[moniker] ?? []))\n } else {\n registry[moniker] = locator.registry[moniker]\n }\n }\n return new ProviderFactoryLocator(this.context, registry)\n }\n\n /**\n * Registers a single module factory (with optional tags) with the locator\n * @param factory The factory to register\n * @param labels The labels for the module factory\n */\n register(factory: CreatableProviderFactory, labels?: Labels, primary: boolean | ProviderMoniker | ProviderMoniker[] = false): this {\n assertEx(!this._frozen, () => 'Cannot register a module factory after the locator has been frozen')\n registerCreatableProviderFactory(this._registry, factory, labels, primary)\n return this\n }\n\n /**\n * Registers multiple module factories with the locator\n * @param factories The factories to register\n */\n registerMany(factories: CreatableProviderFactory[]): this {\n for (const factory of factories) {\n this.register(factory)\n }\n return this\n }\n\n async tryGetInstance<TProvider extends Provider<ProviderMoniker>>(\n moniker: TProvider['moniker'],\n params?: Partial<CreatableProviderInstance<TProvider>['params']>,\n labels?: Labels,\n ) {\n try {\n return await this.getInstance<TProvider>(moniker, params, labels)\n } catch {\n return\n }\n }\n\n /**\n * Tries to locate a module factory that matches the supplied moniker and labels\n * @param moniker The config moniker for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied moniker and labels or undefined\n */\n tryLocate<TProvider extends Provider<ProviderMoniker>>(moniker: TProvider['moniker'], labels?: Labels) {\n const result = labels\n // Find the first factory that has labels and has all the labels provided\n ? (this._registry[moniker]?.filter(hasLabels).find(factory => hasAllLabels(factory?.labels, labels)) ?? this._registry[moniker]?.[0])\n // Otherwise, return the first factory\n : this._registry[moniker]?.[0]\n\n if (result) {\n result.defaultParams = {\n ...result?.defaultParams,\n context: {\n ...this.context,\n ...result?.defaultParams?.context,\n },\n }\n }\n\n return result as CreatableProviderFactory<CreatableProviderInstance<TProvider>>\n | LabeledCreatableProviderFactory<CreatableProviderInstance<TProvider>> | undefined\n }\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { isDefined } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport {\n type ChainStakeIntent, ChainStakeIntentSchema, type Intent,\n} from '@xyo-network/xl1-protocol'\n\nexport const createDeclarationIntent = (address: Address, intent: Intent, nbf: number, exp?: number): ChainStakeIntent => {\n const expiration = isDefined(exp) ? exp : nbf + 10_000\n const redeclarationIntent = new PayloadBuilder<ChainStakeIntent>({ schema: ChainStakeIntentSchema }).fields({\n from: address, intent, nbf, exp: expiration,\n }).build()\n return redeclarationIntent\n}\n","import { AsObjectFactory } from '@xylabs/sdk-js'\nimport { isPayloadOfZodType, type Payload } from '@xyo-network/payload-model'\nimport z from 'zod'\n\nimport {\n TypedDataDomainZod, TypedDataTypesZod, TypedDataValueZod,\n} from '../Types.ts'\n\nexport const EIP712DataPayloadFieldsZod = z.object({\n domain: TypedDataDomainZod,\n types: TypedDataTypesZod,\n values: TypedDataValueZod,\n})\nexport type EIP712DataPayloadFields = z.infer<typeof EIP712DataPayloadFieldsZod>\n\nexport const EIP712DataPayloadSchema = 'network.xyo.chains.ethereum.eip712.data' as const\nexport type EIP712DataPayloadSchema = typeof EIP712DataPayloadSchema\n\nexport type EIP712DataPayload = Payload<EIP712DataPayloadFields, EIP712DataPayloadSchema>\n\nexport const isEIP712DataPayload = isPayloadOfZodType<EIP712DataPayload>(\n EIP712DataPayloadFieldsZod,\n EIP712DataPayloadSchema,\n)\n\nexport const asEIP712DataPayload = AsObjectFactory.create(isEIP712DataPayload)\n","// import type { Signer } from 'ethers/providers'\nimport z from 'zod'\n\n/**\n * Typed Data Types\n * Re-exposing the types from ethers for convenience and to ensure\n * we can fix in one place if they change\n */\n\n// export type TypedDataDomain = Parameters<Signer['signTypedData']>[0]\n// export type TypedDataTypes = Parameters<Signer['signTypedData']>[1]\n// export type TypedDataValues = Parameters<Signer['signTypedData']>[2]\n\nexport const TypedDataDomainZod = z.object({\n name: z.string().nullable().optional(),\n version: z.string().nullable().optional(),\n chainId: z.union([z.string(), z.number(), z.bigint()]).nullable().optional(),\n verifyingContract: z.string().nullable().optional(),\n salt: z.union([z.string(), z.instanceof(Uint8Array)]).nullable().optional(),\n})\nexport type TypedDataDomain = z.infer<typeof TypedDataDomainZod>\n\nexport const TypedDataFieldZod = z.object({\n name: z.string(),\n type: z.string(),\n})\nexport type TypedDataField = z.infer<typeof TypedDataFieldZod>\n\nexport const TypedDataTypesZod = z.record(z.string(), z.array(TypedDataFieldZod))\nexport type TypedDataTypes = z.infer<typeof TypedDataTypesZod>\n\nexport const TypedDataValueZod = z.record(z.string(), z.any())\nexport type TypedDataValues = z.infer<typeof TypedDataValueZod>\n","import { AsObjectFactory, HashZod } from '@xylabs/sdk-js'\nimport { isPayloadOfZodType, type Payload } from '@xyo-network/payload-model'\nimport z from 'zod'\n\nexport const EIP712SignaturePayloadFieldsZod = z.object({\n address: z.string(),\n hash: HashZod,\n signature: z.string(),\n})\n\nexport type EIP712SignaturePayloadFields = z.infer<typeof EIP712SignaturePayloadFieldsZod>\n\nexport const EIP712SignaturePayloadSchema = 'network.xyo.chains.ethereum.eip712.signature' as const\nexport type EIP712SignaturePayloadSchema = typeof EIP712SignaturePayloadSchema\n\nexport type EIP712SignaturePayload = Payload<EIP712SignaturePayloadFields, EIP712SignaturePayloadSchema>\n\nexport const isEIP712SignaturePayload = isPayloadOfZodType<EIP712SignaturePayload>(\n EIP712SignaturePayloadFieldsZod,\n EIP712SignaturePayloadSchema,\n)\n\nexport const asEIP712SignaturePayload = AsObjectFactory.create(isEIP712SignaturePayload)\n","import { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Signer } from 'ethers/providers'\n\nimport {\n type EIP712DataPayload, type EIP712SignaturePayload, EIP712SignaturePayloadSchema,\n} from './Payloads/index.ts'\n\nexport const signEIP712Message = async (signer: Signer, data: EIP712DataPayload): Promise<EIP712SignaturePayload> => {\n const {\n domain, types, values,\n } = data\n const signature = await signer.signTypedData(domain, types, values)\n const hash = await PayloadBuilder.hash(data)\n const address = await signer.getAddress()\n return {\n address, hash, schema: EIP712SignaturePayloadSchema, signature,\n }\n}\n","import { asHash, isUndefined } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { verifyTypedData } from 'ethers/hash'\n\nimport type { EIP712DataPayload, EIP712SignaturePayload } from './Payloads/index.ts'\n\nexport const verifyEIP712Message = async (data: EIP712DataPayload, sig: EIP712SignaturePayload): Promise<boolean> => {\n const {\n address, signature, hash,\n } = sig\n const { schema, ...fields } = data\n const signedHash = asHash(hash)\n // If there is no valid hash in the signature, or it doesn't match the calculated hash, return false\n if (isUndefined(signedHash) || signedHash !== await PayloadBuilder.hash(data)) return false\n // Recover the address from the signature\n const recoveredAddress = verifyTypedData(fields.domain, fields.types, fields.values, signature)\n // Verify it matches the expected address\n return recoveredAddress.toLowerCase() === address.toLowerCase()\n}\n","import type { XL1BlockRangeKey, XL1RangeMultipliers } from '@xyo-network/xl1-protocol'\nimport { asAttoXL1 } from '@xyo-network/xl1-protocol'\n\nimport { XL1_NETWORK_STAKING_GENESIS_PERIOD_END_XL1_BLOCK } from './constants.ts'\n\nexport const XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_EARNED_REWARDS = asAttoXL1(1_343_884_111_859_145_740_576_652n)\nexport const XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_BONUS_REWARDS = asAttoXL1(100_000_000_000_000_000_000_000_000n)\nexport const XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_REWARDS\n = XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_EARNED_REWARDS + XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_BONUS_REWARDS\n\nexport const RewardMultipliers: XL1RangeMultipliers = {\n [`0|${XL1_NETWORK_STAKING_GENESIS_PERIOD_END_XL1_BLOCK}` as XL1BlockRangeKey]:\n [XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_BONUS_REWARDS, XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_EARNED_REWARDS],\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport type { Payload, Schema } from '@xyo-network/payload-model'\n\nimport type { MapType } from '../map/index.ts'\nimport type { Provider } from '../model/index.ts'\n\nexport type DataLakeData = Payload | ArrayBuffer\n\nexport const DataLakeViewerMoniker = 'DataLakeViewer' as const\nexport type DataLakeViewerMoniker = typeof DataLakeViewerMoniker\n\nexport interface DataLakeViewerMethods extends\n Pick<MapType<Hash, DataLakeData>, 'get' | 'getMany' | 'has'> {}\n\nexport interface DataLakeViewer extends DataLakeViewerMethods, Provider<DataLakeViewerMoniker> {\n allowedSchemas?: Schema[]\n disallowedSchemas?: Schema[]\n}\n\nexport const DataLakeRunnerMoniker = 'DataLakeRunner' as const\nexport type DataLakeRunnerMoniker = typeof DataLakeRunnerMoniker\n\nexport interface DataLakeRunnerMethods extends Pick<MapType<Hash, DataLakeData>, 'setMany' | 'set' | 'delete' | 'clear'>,\n DataLakeViewerMethods {}\n\nexport interface DataLakeRunner extends DataLakeRunnerMethods, Provider<DataLakeRunnerMoniker> {}\n","import type { Promisable } from '@xylabs/sdk-js'\n\nimport type { Provider } from '../../../model/index.ts'\nimport type { NetworkStakeStepRewardsViewer } from './Rewards/index.ts'\n\nexport interface NetworkStakeViewerMethods {\n /** @returns the active stake and the number of active validators [active, block] */\n active(blockNumber?: number): Promisable<[bigint, number]>\n}\n\nexport const NetworkStakeViewerMoniker = 'NetworkStakeViewer' as const\nexport type NetworkStakeViewerMoniker = typeof NetworkStakeViewerMoniker\n\nexport interface NetworkStakeViewer extends NetworkStakeViewerMethods, Provider<NetworkStakeViewerMoniker> {\n stepRewards?: NetworkStakeStepRewardsViewer\n}\n","import type { Provider } from '../../../../model/index.ts'\nimport type { NetworkStakeStepRewardsByPositionViewerOptions } from './Options.ts'\nimport type { NetworkStakeStepRewardsByIndexViewerMethodsTemplate } from './templates/index.ts'\n\n// Viewers are client objects that can nest other viewers and ViewerMethods objects consist only of methods that return data.\n\nexport interface NetworkStakeStepRewardsByPositionViewerMethods extends\n NetworkStakeStepRewardsByIndexViewerMethodsTemplate<NetworkStakeStepRewardsByPositionViewerOptions, number> {}\n\nexport const NetworkStakeStepRewardsByPositionViewerMoniker = 'NetworkStakeStepRewardsByPositionViewer' as const\nexport type NetworkStakeStepRewardsByPositionViewerMoniker = typeof NetworkStakeStepRewardsByPositionViewerMoniker\n\nexport interface NetworkStakeStepRewardsByPositionViewer extends NetworkStakeStepRewardsByPositionViewerMethods,\n Provider<NetworkStakeStepRewardsByPositionViewerMoniker> {}\n","import type { Address } from '@xylabs/sdk-js'\n\nimport type { Provider } from '../../../../model/index.ts'\nimport type { NetworkStakeStepRewardsByStakerViewerOptions } from './Options.ts'\nimport type { NetworkStakeStepRewardsByIndexViewerMethodsTemplate } from './templates/index.ts'\n\n// Viewers are client objects that can nest other viewers and ViewerMethods objects consist only of methods that return data.\n\nexport interface NetworkStakeStepRewardsByStakerViewerMethods\n extends NetworkStakeStepRewardsByIndexViewerMethodsTemplate<NetworkStakeStepRewardsByStakerViewerOptions, Address> {}\n\nexport const NetworkStakeStepRewardsByStakerViewerMoniker = 'NetworkStakeStepRewardsByStakerViewer' as const\nexport type NetworkStakeStepRewardsByStakerViewerMoniker = typeof NetworkStakeStepRewardsByStakerViewerMoniker\n\nexport interface NetworkStakeStepRewardsByStakerViewer extends NetworkStakeStepRewardsByStakerViewerMethods,\n Provider<NetworkStakeStepRewardsByStakerViewerMoniker> {}\n","import type { StepIdentityString } from '@xyo-network/xl1-protocol'\n\nimport type { Provider } from '../../../../model/index.ts'\nimport type { NetworkStakeStepRewardsByStepViewerOptions } from './Options.ts'\nimport type { NetworkStakeStepRewardsByIndexViewerMethodsTemplate } from './templates/index.ts'\n\n// Viewers are client objects that can nest other viewers and ViewerMethods objects consist only of methods that return data.\n\nexport interface NetworkStakeStepRewardsByStepViewerMethods extends\n NetworkStakeStepRewardsByIndexViewerMethodsTemplate<NetworkStakeStepRewardsByStepViewerOptions, StepIdentityString> {}\n\nexport const NetworkStakeStepRewardsByStepViewerMoniker = 'NetworkStakeStepRewardsByStepViewer' as const\nexport type NetworkStakeStepRewardsByStepViewerMoniker = typeof NetworkStakeStepRewardsByStepViewerMoniker\n\nexport interface NetworkStakeStepRewardsByStepViewer extends NetworkStakeStepRewardsByStepViewerMethods, Provider<NetworkStakeStepRewardsByStepViewerMoniker> {}\n","import type { AttoXL1 } from '@xyo-network/xl1-protocol'\n\nimport type { Provider } from '../../../../model/index.ts'\nimport type { NetworkStakeStepRewardsRangeOptions } from './Options.ts'\nimport type { NetworkStakeStepRewardsViewerMethodsTemplate } from './templates/index.ts'\n\n// Viewers are client objects that can nest other viewers and ViewerMethods objects consist only of methods that return data.\n\nexport interface NetworkStakeStepRewardsTotalViewerMethods extends NetworkStakeStepRewardsViewerMethodsTemplate<NetworkStakeStepRewardsRangeOptions, AttoXL1> {}\n\nexport const NetworkStakeStepRewardsTotalViewerMoniker = 'NetworkStakeStepRewardsTotalViewer' as const\nexport type NetworkStakeStepRewardsTotalViewerMoniker = typeof NetworkStakeStepRewardsTotalViewerMoniker\n\nexport interface NetworkStakeStepRewardsTotalViewer extends NetworkStakeStepRewardsTotalViewerMethods, Provider<NetworkStakeStepRewardsTotalViewerMoniker> {}\n","import type { Provider } from '../../../../model/index.ts'\nimport type { NetworkStakeStepRewardsByPositionViewer } from './ByPositionViewer.ts'\nimport type { NetworkStakeStepRewardsByStakerViewer } from './ByStakerViewer.ts'\nimport type { NetworkStakeStepRewardsByStepViewer } from './ByStepViewer.ts'\nimport type { NetworkStakeStepRewardsTotalViewer } from './TotalViewer.ts'\n\nexport interface NetworkStakeStepRewardsViewerMethods {}\n\nexport const NetworkStakeStepRewardsViewerMoniker = 'NetworkStakeStepRewardsViewer' as const\nexport type NetworkStakeStepRewardsViewerMoniker = typeof NetworkStakeStepRewardsViewerMoniker\n\nexport interface NetworkStakeStepRewardsViewer extends NetworkStakeStepRewardsViewerMethods, Provider<NetworkStakeStepRewardsViewerMoniker> {\n position?: NetworkStakeStepRewardsByPositionViewer\n staker?: NetworkStakeStepRewardsByStakerViewer\n step?: NetworkStakeStepRewardsByStepViewer\n total?: NetworkStakeStepRewardsTotalViewer\n}\n","import type { Address, Promisable } from '@xylabs/sdk-js'\nimport type { AttoXL1 } from '@xyo-network/xl1-protocol'\n\nimport type { ChainQualifiedConfig, Provider } from '../../model/index.ts'\nimport type {\n AccountBalanceHistoryItem,\n AccountBalanceViewer,\n BlockViewer,\n BlockViewerMethods,\n ForkViewerMethods,\n MempoolViewer,\n NetworkStakeStepRewardViewerMethods,\n StakeViewerMethods,\n StepViewer,\n TimeSyncViewer,\n TransactionViewerMethods,\n} from '../../viewers/index.ts'\nimport type { NetworkStakeViewer } from './NetworkStake/index.ts'\n\nexport interface XyoViewerMethods extends\n NetworkStakeStepRewardViewerMethods, BlockViewerMethods,\n TransactionViewerMethods, StakeViewerMethods, ForkViewerMethods {\n /** @deprecated Use .account.balance.accountBalance instead */\n accountBalance(address: Address, config?: ChainQualifiedConfig): Promisable<AttoXL1>\n /** @deprecated Use .account.balance.accountBalanceHistory instead */\n accountBalanceHistory(address: Address, config?: ChainQualifiedConfig): Promisable<AccountBalanceHistoryItem[]>\n}\n\nexport const XyoViewerMoniker = 'XyoViewer' as const\nexport type XyoViewerMoniker = typeof XyoViewerMoniker\n\nexport interface XyoViewer extends Omit<BlockViewer, 'moniker'>, XyoViewerMethods,\n Omit<StakeViewerMethods, 'moniker'>, Provider<XyoViewerMoniker> {\n account: {\n balance: AccountBalanceViewer\n }\n block: BlockViewer\n mempool: MempoolViewer\n networkStake: NetworkStakeViewer\n step: StepViewer\n time: TimeSyncViewer\n}\n","import type { Provider } from '../model/index.ts'\nimport type { DataLakeRunner, DataLakeViewer } from './DataLake.ts'\nimport type { NetworkStakeViewer, XyoViewer } from './viewer/index.ts'\nimport type { XyoNetwork } from './XyoNetwork.ts'\nimport type { XyoRunner } from './XyoRunner.ts'\n\nexport const XyoConnectionMoniker = 'XyoConnection' as const\nexport type XyoConnectionMoniker = typeof XyoConnectionMoniker\n\nexport interface XyoConnection extends Provider<XyoConnectionMoniker> {\n network?: XyoNetwork\n networkStake?: NetworkStakeViewer\n runner?: XyoRunner\n storage?: DataLakeRunner | DataLakeViewer | (DataLakeRunner & DataLakeViewer)\n viewer?: XyoViewer\n}\n","import type { Hash, Promisable } from '@xylabs/sdk-js'\nimport type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol'\n\nimport type { Provider } from '../model/index.ts'\nimport type { MempoolRunner } from '../runners/index.ts'\n\nexport interface XyoRunnerMethods {\n broadcastTransaction(transaction: SignedHydratedTransaction): Promisable<Hash>\n}\n\nexport const XyoRunnerMoniker = 'XyoRunner' as const\nexport type XyoRunnerMoniker = typeof XyoRunnerMoniker\n\nexport interface XyoRunner extends XyoRunnerMethods, Provider<XyoRunnerMoniker> {\n mempool: MempoolRunner\n}\n","import type { WithHashMeta } from '@xyo-network/payload-model'\nimport type {\n BlockBoundWitness, SignedBlockBoundWitnessWithHashMeta, SignedHydratedBlockWithHashMeta,\n} from '@xyo-network/xl1-protocol'\n\nimport type { Provider } from '../model/index.ts'\n\nexport interface BlockRunnerMethods {\n produceNextBlock(head: SignedBlockBoundWitnessWithHashMeta, force: true): Promise<SignedHydratedBlockWithHashMeta>\n produceNextBlock(head: SignedBlockBoundWitnessWithHashMeta, force?: false): Promise<SignedHydratedBlockWithHashMeta | undefined>\n}\n\nexport const BlockRunnerMoniker = 'BlockRunner' as const\nexport type BlockRunnerMoniker = typeof BlockRunnerMoniker\n\nexport interface BlockRunner extends BlockRunnerMethods, Provider<BlockRunnerMoniker> {\n next(head: WithHashMeta<BlockBoundWitness>): Promise<SignedHydratedBlockWithHashMeta | undefined>\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport type { SignedHydratedBlock, SignedHydratedTransaction } from '@xyo-network/xl1-protocol'\n\nimport type { Provider } from '../model/index.ts'\n\nexport interface MempoolRunnerMethods {\n submitBlocks(blocks: SignedHydratedBlock[]): Promise<Hash[]>\n submitTransactions(transactions: SignedHydratedTransaction[]): Promise<Hash[]>\n}\n\nexport const MempoolRunnerMoniker = 'MempoolRunner' as const\nexport type MempoolRunnerMoniker = typeof MempoolRunnerMoniker\n\nexport interface MempoolRunner extends MempoolRunnerMethods, Provider<MempoolRunnerMoniker> {}\n","import type { Hash, JsonValue } from '@xylabs/sdk-js'\nimport { AsObjectFactory } from '@xylabs/sdk-js'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport { isPayloadOfSchemaType, isStorageMeta } from '@xyo-network/payload-model'\n\nexport interface ChainIndexingServiceStateFields<T extends JsonValue = JsonValue> {\n /**\n * The hash of the last block that this service has indexing\n */\n endBlockHash: Hash\n /**\n * The hash of the block that the service started indexing. If undefined, the service is\n * assumed to have started indexing from the genesis block\n */\n startBlockHash?: Hash\n /**\n * The indexed state for the range\n */\n state: T\n}\nexport const ChainIndexingServiceStateSchema = 'network.xyo.chain.indexing.service.state' as const\nexport type ChainIndexingServiceStateSchema = typeof ChainIndexingServiceStateSchema\n\n/**\n * The result of a ChainIndexingServiceState\n */\nexport type ChainIndexingServiceState<T extends JsonValue = JsonValue> = Payload<ChainIndexingServiceStateFields<T>, ChainIndexingServiceStateSchema>\n\n/**\n * Identity functions for determining if an object is an ChainIndexingServiceState\n */\nexport const isChainIndexingServiceState = <T extends JsonValue = JsonValue>(payload?: unknown): payload is ChainIndexingServiceState<T> => {\n return isPayloadOfSchemaType<ChainIndexingServiceState<T>>(ChainIndexingServiceStateSchema)(payload)\n}\nexport const asChainIndexingServiceState = AsObjectFactory.create<ChainIndexingServiceState<JsonValue>>(isChainIndexingServiceState)\n\nexport const isChainIndexingServiceStateWithStorageMeta\n = <T extends JsonValue = JsonValue>(value: unknown): value is WithStorageMeta<ChainIndexingServiceState<T>> =>\n isChainIndexingServiceState<T>(value) && isStorageMeta(value)\n\nexport const asChainIndexingServiceStateWithStorageMeta\n = AsObjectFactory.create<WithStorageMeta<ChainIndexingServiceState>>(isChainIndexingServiceStateWithStorageMeta)\n","import {\n type Hex,\n hexToBigInt,\n toHex,\n} from '@xylabs/sdk-js'\nimport { isObject } from '@xylabs/sdk-js'\n\nexport interface NegativeBigInt {\n negative: Hex\n}\n\nexport interface PositiveBigInt {\n positive: Hex\n}\n\nexport type SignedBigInt = NegativeBigInt | PositiveBigInt\n\nexport const isNegativeBigInt = (value: unknown): value is NegativeBigInt => {\n return isObject(value) && 'negative' in value && typeof value.negative === 'string'\n}\n\nexport const isPositiveBigInt = (value: unknown): value is PositiveBigInt => {\n return isObject(value) && 'positive' in value && typeof value.positive === 'string'\n}\n\nexport const parseSignedBigInt = (value: SignedBigInt): bigint => {\n if (isNegativeBigInt(value)) {\n return -hexToBigInt(value.negative)\n } else if (isPositiveBigInt(value)) {\n return hexToBigInt(value.positive)\n } else {\n throw new Error('Invalid balance type')\n }\n}\n\nexport const toSignedBigInt = (value: bigint): SignedBigInt => {\n return value < 0n ? { negative: toHex(-value) } : { positive: toHex(value) }\n}\n\nexport const toPositiveBigInt = (value: unknown): PositiveBigInt => {\n if (isNegativeBigInt(value)) {\n return { positive: toHex(0n) }\n }\n if (isPositiveBigInt(value)) {\n return { positive: value.positive }\n }\n if (typeof value === 'bigint') {\n return { positive: toHex(value) }\n }\n throw new Error('Invalid value for positive big int')\n}\n","import type { Address, Hash } from '@xylabs/sdk-js'\nimport {\n asHash,\n assertEx, exists, isDefined, spanRootAsync,\n ZERO_ADDRESS,\n} from '@xylabs/sdk-js'\nimport type { WithHashMeta, WithStorageMeta } from '@xyo-network/payload-model'\nimport type {\n SignedBlockBoundWitnessWithHashMeta, Transfer, XL1BlockNumber, XL1BlockRange,\n} from '@xyo-network/xl1-protocol'\nimport {\n asRange, asXL1BlockNumber, asXL1BlockRange, AttoXL1,\n StepSizes,\n TransferSchema,\n} from '@xyo-network/xl1-protocol'\n\nimport { deepCalculateFramesFromRange } from '../../block/index.ts'\nimport type { CreatableProviderParams } from '../../CreatableProvider/index.ts'\nimport { AbstractCreatableProvider, creatableProvider } from '../../CreatableProvider/index.ts'\nimport {\n ChainQualification, type ChainQualified, isChainQualifiedHeadConfig, isChainQualifiedRangeConfig,\n} from '../../model/index.ts'\nimport type {\n BalanceStepSummaryContext,\n TransfersStepSummary,\n TransfersStepSummaryContext,\n} from '../../summary/index.ts'\nimport {\n balancesSummary,\n transfersStepSummaryFromRange,\n} from '../../summary/index.ts'\nimport {\n AccountBalanceConfig,\n type AccountBalanceHistoryItem, type AccountBalanceViewer, AccountBalanceViewerMoniker,\n type BlockViewer,\n BlockViewerMoniker,\n} from '../../viewers/index.ts'\n\nexport interface SimpleAccountBalanceViewerParams extends CreatableProviderParams {\n balanceSummaryContext: BalanceStepSummaryContext\n transfersSummaryContext: TransfersStepSummaryContext\n}\n\n@creatableProvider()\nexport class SimpleAccountBalanceViewer extends AbstractCreatableProvider<SimpleAccountBalanceViewerParams> implements AccountBalanceViewer {\n static readonly defaultMoniker = AccountBalanceViewerMoniker\n static readonly monikers = [AccountBalanceViewerMoniker]\n moniker = SimpleAccountBalanceViewer.defaultMoniker\n\n private _blockViewer?: BlockViewer\n\n get balanceSummaryContext() {\n return this.params.balanceSummaryContext!\n }\n\n get blockViewer() {\n return this._blockViewer!\n }\n\n get transfersSummaryContext() {\n return this.params.transfersSummaryContext!\n }\n\n static override async paramsHandler(params: Partial<SimpleAccountBalanceViewerParams> = {}) {\n assertEx(params.transfersSummaryContext, () => 'transfersSummaryContext is required')\n assertEx(params.balanceSummaryContext, () => 'balanceSummaryContext is required')\n\n return await super.paramsHandler({ ...params })\n }\n\n async accountBalance(address: Address, config?: AccountBalanceConfig) {\n const balances = await this.accountBalances([address], config)\n return balances[address] ?? AttoXL1(0n)\n }\n\n async accountBalanceHistories(addresses: Address[], config: AccountBalanceConfig = {}) {\n return (await this.qualifiedAccountBalanceHistories(addresses, config))[0]\n }\n\n async accountBalanceHistory(address: Address, config?: AccountBalanceConfig) {\n const range = isChainQualifiedRangeConfig(config) ? config.range : undefined\n const startingRange = asXL1BlockRange(range ?? [0, await this.blockViewer.currentBlockNumber()], true)\n const blockNumbers = await this.distillTransferHistory(address, startingRange)\n const blocks = (await Promise.all(blockNumbers.map(async bn => await this.blockViewer.blockByNumber(bn)))).filter(exists)\n const result: AccountBalanceHistoryItem[] = []\n for (const block of blocks) {\n const transferIndexes = block[0].payload_schemas.map((schema, index) => schema === TransferSchema ? index : undefined).filter(exists)\n const transfers = transferIndexes.map((index) => {\n const hash = block[0].payload_hashes[index]\n return assertEx(\n block[1].find(p => p._hash === hash) as WithStorageMeta<Transfer>,\n () => `Error: Could not find Transfer with hash ${hash} in block ${block[0]._hash}`,\n )\n }).filter(exists).filter(t => ((t.from === address) || (isDefined(t.transfers[address]))))\n if (transfers.length === 0) {\n continue\n }\n const pairs: [SignedBlockBoundWitnessWithHashMeta, WithHashMeta<Transfer>][] = (transfers.map((transfer) => {\n return [block[0], transfer]\n }))\n result.push(...pairs.map(([block, transfer]) => [block,\n null,\n transfer] satisfies AccountBalanceHistoryItem))\n }\n return result\n }\n\n async accountBalances(address: Address[], config?: AccountBalanceConfig) {\n const [result] = (await this.qualifiedAccountBalances(address, config ?? {}))\n return result\n }\n\n override async createHandler() {\n await super.createHandler()\n this._blockViewer = await this.locator.getInstance(BlockViewerMoniker)\n }\n\n async qualifiedAccountBalanceHistories(\n addresses: Address[],\n config: AccountBalanceConfig,\n ) {\n const head = isChainQualifiedHeadConfig(config) ? config.head : await this.blockViewer.currentBlockHash()\n const range = isChainQualifiedRangeConfig(config)\n ? config.range\n : asXL1BlockRange([0,\n assertEx(\n await this.blockViewer.blockByHash(head),\n () => `Error: Could not find block with hash ${head}`,\n )[0].block])\n const qualifiedEntries = await Promise.all(addresses.map(async address => ([\n address,\n await this.qualifiedAccountBalanceHistory(address, range),\n ]))) satisfies [Address, ChainQualified<AccountBalanceHistoryItem[]>][]\n\n const entries = qualifiedEntries.map(([address, [history]]) => {\n return [address, history]\n })\n const qualifiedRange = qualifiedEntries[0][1][1].range\n const qualifiedHeadHash = qualifiedEntries[0][1][1].head\n\n // check for drift\n for (const [_, [__, { range, head }]] of qualifiedEntries) {\n assertEx(\n range[0] === qualifiedRange[0] && range[1] === qualifiedRange[1],\n () => 'Inconsistent ranges in qualifiedAccountBalanceHistories',\n )\n assertEx(\n head === qualifiedHeadHash,\n () => 'Inconsistent head hashes in qualifiedAccountBalanceHistories',\n )\n }\n\n return [Object.fromEntries(entries), { range: qualifiedRange, head: qualifiedHeadHash }] satisfies\n [Record<Address, AccountBalanceHistoryItem[]>, ChainQualification]\n }\n\n async qualifiedAccountBalances(\n address: Address[],\n config: AccountBalanceConfig,\n ): Promise<ChainQualified<Record<Address, AttoXL1>>> {\n return await spanRootAsync('qualifiedAccountsBalances', async () => {\n const qualifiedSummary = await balancesSummary(\n { ...this.balanceSummaryContext },\n config,\n )\n const result: Record<Address, AttoXL1> = {}\n for (const addr of address) {\n const summaryBalance = qualifiedSummary[0][addr] ?? 0n\n result[addr] = AttoXL1(summaryBalance < 0n ? 0n : summaryBalance)\n }\n return [result, qualifiedSummary[1]]\n })\n }\n\n override async startHandler() {\n await super.startHandler()\n await Promise.all([\n this.accountBalance(ZERO_ADDRESS),\n this.accountBalanceHistory(ZERO_ADDRESS),\n ])\n }\n\n private async distillTransferHistory(address: Address, range: XL1BlockRange, max: number = 50): Promise<XL1BlockNumber[]> {\n if ((range[1] - range[0]) <= StepSizes[0] || max <= 1) {\n return Array.from({ length: range[1] - range[0] + 1 }, (_, i) => range[1] - i).slice(0, max).map(n => asXL1BlockNumber(n, true))\n }\n const frames = deepCalculateFramesFromRange(asXL1BlockRange(range, true))\n const transferSummaryPairs = await Promise.all(frames.map(\n async (frame) => {\n return [frame, await transfersStepSummaryFromRange(this.transfersSummaryContext, frame)]\n },\n )) as [XL1BlockRange, WithStorageMeta<TransfersStepSummary>][]\n\n const filteredTransferSummaryPairs = transferSummaryPairs.filter(([_, summary]) => Object.keys(summary.transfers).includes(address))\n\n // sort it latest to earliest\n const sortedTransferSummaryPairs = filteredTransferSummaryPairs.toSorted((a, b) => {\n return b[0][1] - a[0][1]\n })\n\n const resultBlockNumbers: Set<XL1BlockNumber> = new Set()\n for (const [frame] of sortedTransferSummaryPairs) {\n if ((frame[1] - frame[0] + 1) > StepSizes[0]) {\n const values = await this.distillTransferHistory(address, asXL1BlockRange([frame[0], frame[1] - 1], true), max - resultBlockNumbers.size)\n for (const value of values) {\n resultBlockNumbers.add(value)\n }\n resultBlockNumbers.add(frame[1])\n } else {\n for (let i = frame[0]; i <= frame[1]; i++) {\n resultBlockNumbers.add(i)\n }\n }\n if (resultBlockNumbers.size >= max) {\n break\n }\n }\n return [...resultBlockNumbers].toSorted((a, b) => b - a).slice(0, max)\n }\n\n private async qualifiedAccountBalanceHistory(\n address: Address,\n headOrRange?: Hash | XL1BlockRange,\n ): Promise<ChainQualified<AccountBalanceHistoryItem[]>> {\n const range = asRange(headOrRange)\n const headHash = asHash(headOrRange)\n const [head] = assertEx(isDefined(headHash)\n ? (await this.blockViewer.blockByHash(headHash))\n : (await this.blockViewer.currentBlock()), () => 'Could not resolve head block')\n const startingRange = asXL1BlockRange(range ?? [0, head.block], true)\n const blockNumbers = await this.distillTransferHistory(address, startingRange)\n const blocks = (await Promise.all(blockNumbers.map(async bn => await this.blockViewer.blockByNumber(bn)))).filter(exists)\n const result: AccountBalanceHistoryItem[] = []\n for (const block of blocks) {\n const transferIndexes = block[0].payload_schemas.map((schema, index) => schema === TransferSchema ? index : undefined).filter(exists)\n const transfers = transferIndexes.map((index) => {\n const hash = block[0].payload_hashes[index]\n return assertEx(\n block[1].find(p => p._hash === hash) as WithStorageMeta<Transfer>,\n () => `Error: Could not find Transfer with hash ${hash} in block ${block[0]._hash}`,\n )\n }).filter(exists).filter(t => ((t.from === address) || (isDefined(t.transfers[address]))))\n if (transfers.length === 0) {\n continue\n }\n const pairs: [SignedBlockBoundWitnessWithHashMeta, WithHashMeta<Transfer>][] = (transfers.map((transfer) => {\n return [block[0], transfer]\n }))\n result.push(...pairs.map(([block, transfer]) => [block,\n null,\n transfer] satisfies AccountBalanceHistoryItem))\n }\n return [result, { range: startingRange, head: head._hash }]\n }\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { AsObjectFactory } from '@xylabs/sdk-js'\nimport type { Schema, WithStorageMeta } from '@xyo-network/payload-model'\nimport { isPayloadOfSchemaType, isStorageMeta } from '@xyo-network/payload-model'\n\nimport type { SignedBigInt } from '../../SignedBigInt.ts'\nimport type { StepSummary } from './StepSummary.ts'\n\nexport const BalancesStepSummarySchema: Schema = 'network.xyo.step.summary.balances'\nexport type BalancesStepSummarySchema = typeof BalancesStepSummarySchema\n\nexport type BalancesStepSummary = StepSummary<{\n balances: Record<Address, SignedBigInt>\n}, BalancesStepSummarySchema>\n\n/**\n * Identity function for determining if an object is an BalancesStepSummary\n */\nexport const isBalancesStepSummary = isPayloadOfSchemaType<BalancesStepSummary>(BalancesStepSummarySchema)\nexport const asBalancesStepSummary = AsObjectFactory.create<BalancesStepSummary>(isBalancesStepSummary)\n\n/**\n * Identity function for determining if an object is an BalancesStepSummary with Storage Meta\n */\nexport const isBalancesStepSummaryWithStorageMeta = (value: unknown): value is WithStorageMeta<BalancesStepSummary> => {\n return isBalancesStepSummary(value) && isStorageMeta(value)\n}\nexport const asBalancesStepSummaryWithStorageMeta = AsObjectFactory.create<WithStorageMeta<BalancesStepSummary>>(isBalancesStepSummaryWithStorageMeta)\n","import { AsObjectFactory } from '@xylabs/sdk-js'\nimport type { Schema, WithStorageMeta } from '@xyo-network/payload-model'\nimport { isPayloadOfSchemaType, isStorageMeta } from '@xyo-network/payload-model'\n\nimport type { StepSummary } from './StepSummary.ts'\n\nexport const SchemasStepSummarySchema: Schema = 'network.xyo.step.summary.schemas'\nexport type SchemasStepSummarySchema = typeof SchemasStepSummarySchema\n\nexport type SchemasStepSummary = StepSummary<{\n schemas: Record<Schema, number>\n}, SchemasStepSummarySchema>\n\n/**\n * Identity function for determining if an object is an SchemasStepSummary\n */\nexport const isSchemasStepSummary = isPayloadOfSchemaType<SchemasStepSummary>(SchemasStepSummarySchema)\nexport const asSchemasStepSummary = AsObjectFactory.create<SchemasStepSummary>(isSchemasStepSummary)\n\n/**\n * Identity function for determining if an object is an SchemasStepSummary with Storage Meta\n */\nexport const isSchemasStepSummaryWithStorageMeta = (value: unknown): value is WithStorageMeta<SchemasStepSummary> => {\n return isSchemasStepSummary(value) && isStorageMeta(value)\n}\nexport const asSchemasStepSummaryWithStorageMeta = AsObjectFactory.create<WithStorageMeta<SchemasStepSummary>>(isSchemasStepSummaryWithStorageMeta)\n","import type { EmptyObject, Hash } from '@xylabs/sdk-js'\nimport type { Payload, Schema } from '@xyo-network/payload-model'\n\nexport const StepSummarySchema: Schema = 'network.xyo.step.summary'\nexport type StepSummarySchema = typeof StepSummarySchema\n\nexport interface StepSummaryFields {\n hash: Hash // the stepHash - the hash of the last block in the step frame\n stepSize: number // the stepSize in blocks\n}\n\nexport type StepSummary<TAdditionalFields extends EmptyObject | void = void,\n TSchema extends Schema | void = void> = Payload<TAdditionalFields extends void ? StepSummaryFields : TAdditionalFields & StepSummaryFields,\n TSchema extends void ? StepSummarySchema : TSchema>\n","import type { Address } from '@xylabs/sdk-js'\nimport { AsObjectFactory } from '@xylabs/sdk-js'\nimport type { Schema, WithStorageMeta } from '@xyo-network/payload-model'\nimport { isPayloadOfSchemaType, isStorageMeta } from '@xyo-network/payload-model'\n\nimport type { SignedBigInt } from '../../SignedBigInt.ts'\nimport type { StepSummary } from './StepSummary.ts'\n\nexport const TransfersStepSummarySchema: Schema = 'network.xyo.step.summary.transfer'\nexport type TransfersStepSummarySchema = typeof TransfersStepSummarySchema\n\nexport type TransfersStepSummary = StepSummary<{\n transfers: Record<Address, Record<Address, SignedBigInt>>\n}, TransfersStepSummarySchema>\n\n/**\n * Identity function for determining if an object is an TransfersStepSummary\n */\nexport const isTransfersStepSummary = isPayloadOfSchemaType<TransfersStepSummary>(TransfersStepSummarySchema)\nexport const asTransfersStepSummary = AsObjectFactory.create<TransfersStepSummary>(isTransfersStepSummary)\n\n/**\n * Identity function for determining if an object is an TransfersStepSummary with Storage Meta\n */\nexport const isTransfersStepSummaryWithStorageMeta = (value: unknown): value is WithStorageMeta<TransfersStepSummary> => {\n return isTransfersStepSummary(value) && isStorageMeta(value)\n}\nexport const asTransfersStepSummaryWithStorageMeta\n = AsObjectFactory.create<WithStorageMeta<TransfersStepSummary>>(isTransfersStepSummaryWithStorageMeta)\n","/* eslint-disable max-statements */\nimport { type Address } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport { isAnyPayload } from '@xyo-network/payload-model'\nimport type { XL1BlockRange } from '@xyo-network/xl1-protocol'\nimport { StepSizes } from '@xyo-network/xl1-protocol'\n\nimport {\n deepCalculateFramesFromRange, hashFromBlockNumber,\n hydrateBlock,\n} from '../../../block/index.ts'\nimport { netBalancesForPayloads } from '../../../payloads/index.ts'\nimport {\n parseSignedBigInt, type SignedBigInt, toSignedBigInt,\n} from '../../../SignedBigInt.ts'\nimport type { BalancesStepSummary, BalanceStepSummaryContext } from '../../model/index.ts'\nimport { BalancesStepSummarySchema } from '../../model/index.ts'\n\nexport async function balancesStepSummaryFromRange(\n context: BalanceStepSummaryContext,\n range: XL1BlockRange,\n): Promise<WithStorageMeta<BalancesStepSummary>> {\n // console.log(`balanceStepSummaryFromRange: head=${head}, range=${range[0]}-${range[1]}`)\n const frameHeadHash = await hashFromBlockNumber(context, range[1])\n const frameSize = range[1] - range[0] + 1\n const [headHash] = await context.head()\n\n let result: BalancesStepSummary | undefined = undefined\n\n if (frameSize === 1) {\n const hash = await hashFromBlockNumber(context, range[0])\n const [, payloads] = await hydrateBlock(context.store, hash)\n const balances: Record<Address, SignedBigInt> = {}\n for (const [address, balance] of Object.entries(netBalancesForPayloads(payloads))) {\n balances[address as Address] = toSignedBigInt(balance)\n }\n result = {\n schema: BalancesStepSummarySchema, hash: headHash, stepSize: -1, balances,\n }\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const step = (StepSizes as any).indexOf(frameSize)\n assertEx(step !== -1, () => `Invalid step size: ${frameSize}. Must be one of ${StepSizes.join(', ')}`)\n\n const summaryResult = await context.summaryMap.get(`${frameHeadHash}|${frameSize}`)\n if (isAnyPayload(summaryResult)) {\n result = summaryResult as WithStorageMeta<BalancesStepSummary>\n } else {\n // We do not have it, so lets build it\n await context.stepSemaphores[step].acquire()\n try {\n const subRanges = deepCalculateFramesFromRange(range, step - 1)\n const promises = subRanges.map(subRange => balancesStepSummaryFromRange(\n context,\n subRange,\n ))\n const subResults = await Promise.all(promises)\n\n // add them all up\n const bigIntBalances: Record<Address, bigint> = {}\n for (const subResult of subResults) {\n for (const [address, balance] of Object.entries(subResult.balances)) {\n bigIntBalances[address as Address] = (bigIntBalances[address as Address] ?? 0n) + parseSignedBigInt(balance)\n }\n }\n\n const balances: Record<Address, SignedBigInt> = {}\n for (const [address, balance] of Object.entries(bigIntBalances)) {\n balances[address as Address] = toSignedBigInt(balance)\n }\n\n result = {\n schema: BalancesStepSummarySchema, hash: frameHeadHash, stepSize: frameSize, balances,\n }\n\n await context.summaryMap.set(`${frameHeadHash}|${frameSize}`, result)\n } finally {\n context.stepSemaphores[step].release()\n }\n }\n }\n // console.log(`balanceStepSummaryFromRange-result: head=${head}, range=${range[0]}-${range[1]}: ${toSafeJsonString(result, 10)}`)\n const finalResult = await PayloadBuilder.addStorageMeta(result)\n return finalResult\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { asAddress, spanRootAsync } from '@xylabs/sdk-js'\nimport { asBlockBoundWitnessWithStorageMeta, asXL1BlockRange } from '@xyo-network/xl1-protocol'\n\nimport { deepCalculateFramesFromRange } from '../../../block/index.ts'\nimport {\n type ChainQualified, type ChainQualifiedConfig, isChainQualifiedHeadConfig,\n isChainQualifiedRangeConfig,\n} from '../../../model/index.ts'\nimport { parseSignedBigInt } from '../../../SignedBigInt.ts'\nimport type { BalanceStepSummaryContext } from '../../model/index.ts'\nimport { balancesStepSummaryFromRange } from './balancesStepSummaryFromRange.ts'\n\nexport async function balancesSummary(\n context: BalanceStepSummaryContext,\n config?: ChainQualifiedConfig,\n): Promise<ChainQualified<Record<Address, bigint>>> {\n return await spanRootAsync('balancesSummary', async () => {\n const [headHash] = isChainQualifiedHeadConfig(config) ? [config.head] : await context.head()\n const headResult = await context.store.chainMap.get(headHash)\n const headBoundWitness = asBlockBoundWitnessWithStorageMeta(headResult, () => `Head block not found for hash: ${headHash}`)\n const range = isChainQualifiedRangeConfig(config) ? config.range : asXL1BlockRange([0, headBoundWitness.block], true)\n const ranges = deepCalculateFramesFromRange(asXL1BlockRange(\n range,\n { name: 'balancesSummary' },\n ))\n const summaries = await Promise.all(ranges.map(range => balancesStepSummaryFromRange(context, range)))\n const balances: Record<Address, bigint> = {}\n for (let summary of summaries) {\n for (const [address, balance] of Object.entries(summary.balances)) {\n const validAddress = asAddress(address, () => `Invalid address: ${address}`)\n balances[validAddress] = (balances[validAddress] ?? 0n) + parseSignedBigInt(balance)\n }\n }\n return [balances, { range, head: headHash }]\n })\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport { isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n Schema, WithHashMeta, WithStorageMeta,\n} from '@xyo-network/payload-model'\nimport { isAnyPayload, isHashMeta } from '@xyo-network/payload-model'\nimport type { XL1BlockRange } from '@xyo-network/xl1-protocol'\nimport { StepSizes } from '@xyo-network/xl1-protocol'\n\nimport {\n deepCalculateFramesFromRange, hashFromBlockNumber,\n hydrateBlock,\n} from '../../../block/index.ts'\nimport {\n type SchemasStepSummary, type SchemasStepSummaryContext, SchemasStepSummarySchema,\n} from '../../model/index.ts'\n\nexport async function schemasStepSummaryFromRange(\n context: SchemasStepSummaryContext,\n range: XL1BlockRange,\n): Promise<WithHashMeta<SchemasStepSummary>> {\n // console.log(`balanceStepSummaryFromRange: head=${head}, range=${range[0]}-${range[1]}`)\n const frameHeadHash = await hashFromBlockNumber(context, range[1])\n const frameSize = range[1] - range[0] + 1\n const [headHash] = await context.head()\n\n let result: SchemasStepSummary | undefined = undefined\n\n if (frameSize === 1) {\n const hash = await hashFromBlockNumber(context, range[0])\n const [block, payloads] = await hydrateBlock(context.store, hash)\n const boundWitnesses = [block, ...payloads.filter(x => isBoundWitness(x) && isHashMeta(x))]\n const schemas: Record<Schema, number> = {}\n for (const bw of boundWitnesses) {\n schemas[bw.schema] = (schemas[bw.schema] ?? 0) + 1\n for (const schema of bw.payload_schemas) {\n schemas[schema] = (schemas[schema] ?? 0) + 1\n }\n }\n result = {\n schema: SchemasStepSummarySchema, hash: headHash, stepSize: -1, schemas,\n }\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const step = (StepSizes as any).indexOf(frameSize)\n assertEx(step !== -1, () => `Invalid step size: ${frameSize}. Must be one of ${StepSizes.join(', ')}`)\n\n const summaryResult = await context.summaryMap.get(`${frameHeadHash}|${frameSize}`)\n if (isAnyPayload(summaryResult)) {\n result = summaryResult as WithStorageMeta<SchemasStepSummary>\n } else {\n // We do not have it, so lets build it\n await context.stepSemaphores[step].acquire()\n try {\n const subRanges = deepCalculateFramesFromRange(range, step - 1)\n const promises = subRanges.map(subRange => schemasStepSummaryFromRange(\n context,\n subRange,\n ))\n const subResults = await Promise.all(promises)\n\n // add them all up\n const schemas: Record<Schema, number> = {}\n for (const subResult of subResults) {\n for (const [schema, count] of Object.entries(subResult.schemas)) {\n schemas[schema] = (schemas[schema] ?? 0) + count\n }\n }\n\n result = {\n schema: SchemasStepSummarySchema, hash: frameHeadHash, stepSize: frameSize, schemas: schemas,\n }\n\n await context.summaryMap.set(`${frameHeadHash}|${frameSize}`, result)\n } finally {\n context.stepSemaphores[step].release()\n }\n }\n }\n // console.log(`balanceStepSummaryFromRange-result: head=${head}, range=${range[0]}-${range[1]}: ${toSafeJsonString(result, 10)}`)\n return await PayloadBuilder.addHashMeta(result)\n}\n","import { spanRootAsync } from '@xylabs/sdk-js'\nimport type { Schema } from '@xyo-network/payload-model'\nimport { asBlockBoundWitnessWithStorageMeta, asXL1BlockRange } from '@xyo-network/xl1-protocol'\n\nimport { deepCalculateFramesFromRange } from '../../../block/index.ts'\nimport {\n type ChainQualified, type ChainQualifiedConfig, isChainQualifiedHeadConfig,\n isChainQualifiedRangeConfig,\n} from '../../../model/index.ts'\nimport type { SchemasStepSummaryContext } from '../../model/index.ts'\nimport { schemasStepSummaryFromRange } from './schemasStepSummaryFromRange.ts'\n\nexport async function schemasSummary(\n context: SchemasStepSummaryContext,\n config?: ChainQualifiedConfig,\n): Promise<ChainQualified<Record<Schema, number>>> {\n return await spanRootAsync('schemasSummary', async () => {\n const [headHash] = isChainQualifiedHeadConfig(config) ? [config.head] : await context.head()\n const headResult = await context.store.chainMap.get(headHash)\n const headBoundWitness = asBlockBoundWitnessWithStorageMeta(headResult, () => `Head block not found for hash: ${headHash}`)\n const range = isChainQualifiedRangeConfig(config) ? config.range : asXL1BlockRange([0, headBoundWitness.block], true)\n const ranges = deepCalculateFramesFromRange(asXL1BlockRange(\n range,\n { name: 'schemasSummary' },\n ))\n const summaries = await Promise.all(ranges.map(range => schemasStepSummaryFromRange(context, range)))\n const results: Record<Schema, number> = {}\n for (let summary of summaries) {\n for (const [schema, count] of Object.entries(summary.schemas)) {\n results[schema] = (results[schema] ?? 0) + count\n }\n }\n return [results, { range, head: headHash }]\n })\n}\n","/* eslint-disable max-statements */\nimport { type Address } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport { isAnyPayload } from '@xyo-network/payload-model'\nimport type { XL1BlockRange } from '@xyo-network/xl1-protocol'\nimport { StepSizes } from '@xyo-network/xl1-protocol'\n\nimport {\n deepCalculateFramesFromRange, hashFromBlockNumber, hydrateBlock,\n} from '../../../block/index.ts'\nimport { netTransfersForPayloads } from '../../../payloads/index.ts'\nimport {\n parseSignedBigInt, type SignedBigInt, toSignedBigInt,\n} from '../../../SignedBigInt.ts'\nimport {\n type TransfersStepSummary, type TransfersStepSummaryContext, TransfersStepSummarySchema,\n} from '../../model/index.ts'\nimport { transfersSummaryKey } from './transfersSummary.ts'\n\nexport async function transfersStepSummaryFromRange(\n context: TransfersStepSummaryContext,\n range: XL1BlockRange,\n): Promise<WithStorageMeta<TransfersStepSummary>> {\n // console.log(`transfersStepSummaryFromRange: head=${context.head}, range=${range[0]}-${range[1]}`)\n const frameHeadHash = await hashFromBlockNumber(context, range[1])\n const frameSize = range[1] - range[0] + 1\n const [headHash] = await context.head()\n\n let result: TransfersStepSummary | undefined = undefined\n\n if (frameSize === 1) {\n const hash = await hashFromBlockNumber(context, range[0])\n const [, payloads] = await hydrateBlock(context.store, hash)\n const transfers: Record<Address, Record<Address, SignedBigInt>> = {}\n for (const [from, toMap] of Object.entries(netTransfersForPayloads(payloads))) {\n transfers[from as Address] = transfers[from as Address] ?? {}\n for (const [to, amount] of Object.entries(toMap)) {\n transfers[from as Address][to as Address] = toSignedBigInt(amount)\n }\n }\n result = {\n schema: TransfersStepSummarySchema, hash: headHash, stepSize: -1, transfers,\n }\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const step = (StepSizes as any).indexOf(frameSize)\n assertEx(step !== -1, () => `Invalid step size: ${frameSize}. Must be one of ${StepSizes.join(', ')}`)\n\n const key = transfersSummaryKey(frameHeadHash, frameSize)\n\n const summaryResult = await context.summaryMap.get(key)\n if (isAnyPayload(summaryResult)) {\n result = summaryResult as WithStorageMeta<TransfersStepSummary>\n } else {\n await context.stepSemaphores[step].acquire()\n // We do not have it, so lets build it\n try {\n const subRanges = deepCalculateFramesFromRange(range, step - 1)\n const promises = subRanges.map(subRange => transfersStepSummaryFromRange(\n context,\n subRange,\n ))\n const subResults = await Promise.all(promises)\n\n // add them all up\n const bigIntBalances: Record<Address, Record<Address, bigint>> = {}\n for (const subResult of subResults) {\n for (const [from, toMap] of Object.entries(subResult.transfers)) {\n bigIntBalances[from as Address] = bigIntBalances[from as Address] ?? {}\n for (const [to, transfer] of Object.entries(toMap)) {\n bigIntBalances[from as Address][to as Address] = (bigIntBalances[from as Address][to as Address] ?? 0n) + parseSignedBigInt(transfer)\n }\n }\n }\n\n const transfers: Record<Address, Record<Address, SignedBigInt>> = {}\n for (const [from, toMap] of Object.entries(bigIntBalances)) {\n transfers[from as Address] = transfers[from as Address] ?? {}\n for (const [to, transfer] of Object.entries(toMap)) {\n transfers[from as Address][to as Address] = toSignedBigInt(transfer)\n }\n }\n\n result = {\n schema: TransfersStepSummarySchema, hash: frameHeadHash, stepSize: frameSize, transfers,\n }\n\n await context.summaryMap.set(key, result)\n } finally {\n context.stepSemaphores[step].release()\n }\n }\n }\n // console.log(`transfersStepSummaryFromRange-result: head=${context.head}, range=${range[0]}-${range[1]}: ${toSafeJsonString(result, 10)}`)\n const finalResult = await PayloadBuilder.addStorageMeta(result)\n return finalResult\n}\n","import type { Address, Hash } from '@xylabs/sdk-js'\nimport { asAddress, spanRootAsync } from '@xylabs/sdk-js'\nimport { asBlockBoundWitnessWithStorageMeta, asXL1BlockRange } from '@xyo-network/xl1-protocol'\n\nimport { deepCalculateFramesFromRange } from '../../../block/index.ts'\nimport type { ChainQualified, ChainQualifiedConfig } from '../../../model/index.ts'\nimport { isChainQualifiedHeadConfig, isChainQualifiedRangeConfig } from '../../../model/index.ts'\nimport { parseSignedBigInt } from '../../../SignedBigInt.ts'\nimport type { TransfersStepSummaryContext } from '../../index.ts'\nimport { transfersStepSummaryFromRange } from './transfersStepSummaryFromRange.ts'\n\n// the summary of amount of rewards claimed from the step reward pool by addresses\nexport async function transfersSummary(\n context: TransfersStepSummaryContext,\n config?: ChainQualifiedConfig,\n): Promise<ChainQualified<Record<Address, Record<Address, bigint>>>> {\n return await spanRootAsync('transferSummary', async () => {\n const [headHash] = isChainQualifiedHeadConfig(config) ? [config.head] : await context.head()\n const headResult = await context.store.chainMap.get(headHash)\n const headBoundWitness = asBlockBoundWitnessWithStorageMeta(headResult, () => `Head block not found for hash: ${headHash}`)\n const range = isChainQualifiedRangeConfig(config) ? config.range : asXL1BlockRange([0, headBoundWitness.block], true)\n const ranges = deepCalculateFramesFromRange(asXL1BlockRange(\n range,\n { name: 'transfersSummary' },\n ))\n const summaries = await Promise.all(ranges.map(range => transfersStepSummaryFromRange(context, range)))\n const transfers: Record<Address, Record<Address, bigint>> = {}\n for (let summary of summaries) {\n for (const [from, toMap] of Object.entries(summary.transfers)) {\n const validFrom = asAddress(from, () => `Invalid address: ${from}`)\n transfers[validFrom] = transfers[validFrom] ?? {}\n for (const [to, transfer] of Object.entries(toMap)) {\n const validTo = asAddress(to, () => `Invalid address: ${to}`)\n transfers[validFrom][validTo] = (transfers[validFrom][validTo] ?? 0n) + parseSignedBigInt(transfer)\n }\n }\n }\n return [transfers, { range, head: headHash }]\n })\n}\n\nexport function transfersSummaryKey(frameHeadHash: Hash, frameSize: number) {\n return `${frameHeadHash}|${frameSize}`\n}\n","import { type Address, type Promisable } from '@xylabs/sdk-js'\nimport { zodIsFactory } from '@xylabs/zod'\nimport { WithHashMetaZod } from '@xyo-network/payload-model'\nimport {\n type AttoXL1,\n TransferZod,\n} from '@xyo-network/xl1-protocol'\nimport { BlockBoundWitnessZod, TransactionBoundWitnessZod } from '@xyo-network/xl1-protocol'\nimport z from 'zod'\n\nimport {\n ChainQualificationZod,\n type ChainQualified,\n ChainQualifiedConfigZod,\n type Provider,\n} from '../model/index.ts'\n\nexport const AccountBalanceHistoryItemZod = z.tuple([\n WithHashMetaZod(BlockBoundWitnessZod),\n WithHashMetaZod(TransactionBoundWitnessZod).nullable(),\n WithHashMetaZod(TransferZod),\n])\n\nexport type AccountBalanceHistoryItem = z.infer<typeof AccountBalanceHistoryItemZod>\n\nexport const AccountBalanceQualificationZod = ChainQualificationZod\nexport type AccountBalanceQualification = z.infer<typeof AccountBalanceQualificationZod>\nexport const isAccountBalanceQualification = zodIsFactory(AccountBalanceQualificationZod)\n\nexport const AccountBalanceConfigZod = ChainQualifiedConfigZod\nexport type AccountBalanceConfig = z.infer<typeof AccountBalanceConfigZod>\nexport const isAccountBalanceCOnfig = zodIsFactory(AccountBalanceConfigZod)\n\nexport interface AccountBalanceViewerMethods {\n qualifiedAccountBalanceHistories(\n address: Address[],\n config: AccountBalanceConfig\n ): Promisable<ChainQualified<Record<Address, AccountBalanceHistoryItem[]>>>\n qualifiedAccountBalances(address: Address[], config: AccountBalanceConfig): Promisable<ChainQualified<Record<Address, AttoXL1>>>\n}\n\nexport interface AccountBalanceViewer extends AccountBalanceViewerMethods, Provider<AccountBalanceViewerMoniker> {\n accountBalance(address: Address, config?: AccountBalanceConfig): Promisable<AttoXL1>\n accountBalanceHistories(address: Address[], config?: AccountBalanceConfig): Promisable<Record<Address, AccountBalanceHistoryItem[]>>\n accountBalanceHistory(address: Address, config?: AccountBalanceConfig): Promisable<AccountBalanceHistoryItem[]>\n accountBalances(address: Address[], config?: AccountBalanceConfig): Promisable<Record<Address, AttoXL1>>\n}\n\nexport const AccountBalanceViewerMoniker = 'AccountBalanceViewer' as const\nexport type AccountBalanceViewerMoniker = typeof AccountBalanceViewerMoniker\n","import type { Hash, Promisable } from '@xylabs/sdk-js'\nimport type { Payload, WithHashMeta } from '@xyo-network/payload-model'\nimport type {\n ChainId, SignedHydratedBlockWithHashMeta, XL1BlockNumber,\n} from '@xyo-network/xl1-protocol'\n\nimport type { Provider } from '../model/index.ts'\n\nexport interface BlockViewerMethods {\n blocksByHash(hash: Hash, limit?: number): Promisable<SignedHydratedBlockWithHashMeta[]>\n blocksByNumber(block: XL1BlockNumber, limit?: number): Promisable<SignedHydratedBlockWithHashMeta[]>\n currentBlock(): Promisable<SignedHydratedBlockWithHashMeta>\n payloadsByHash(hashes: Hash[]): Promisable<WithHashMeta<Payload>[]>\n}\n\nexport const BlockViewerMoniker = 'BlockViewer' as const\nexport type BlockViewerMoniker = typeof BlockViewerMoniker\n\nexport interface BlockViewer extends BlockViewerMethods, Provider<BlockViewerMoniker> {\n blockByHash(hash: Hash): Promisable<SignedHydratedBlockWithHashMeta | null>\n blockByNumber(block: XL1BlockNumber): Promisable<SignedHydratedBlockWithHashMeta | null>\n chainId(): Promisable<ChainId>\n chainId(blockNumber: XL1BlockNumber): Promisable<ChainId>\n chainId(blockNumber: 'latest'): Promisable<ChainId>\n currentBlockHash(): Promisable<Hash>\n currentBlockNumber(): Promisable<XL1BlockNumber>\n payloadByHash(hash: Hash): Promisable<WithHashMeta<Payload> | null>\n}\n","import type { Promisable } from '@xylabs/sdk-js'\nimport type { AttoXL1, XL1BlockNumber } from '@xyo-network/xl1-protocol'\n\nimport type { Provider } from '../model/index.ts'\n\nexport interface BlockRewardViewerMethods {\n // The amount of xl1 to send to the producer from the block reward\n allowedRewardForBlock(block: XL1BlockNumber): Promisable<AttoXL1>\n}\n\nexport const BlockRewardViewerMoniker = 'BlockRewardViewer' as const\nexport type BlockRewardViewerMoniker = typeof BlockRewardViewerMoniker\n\nexport interface BlockRewardViewer extends BlockRewardViewerMethods, Provider<BlockRewardViewerMoniker> {}\n","import { type Promisable } from '@xylabs/sdk-js'\nimport { zodIsFactory } from '@xylabs/zod'\nimport type { HydratedBlock, SignedHydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol'\nimport z from 'zod'\n\nimport {\n ChainQualificationZod, ChainQualifiedHeadConfigZod, ChainQualifiedRangeConfigZod, type Provider,\n} from '../model/index.ts'\nimport type { HydratedBlockValidationError } from '../validation/index.ts'\n\nexport const BlockValidationQualificationZod = ChainQualificationZod\nexport type BlockValidationQualification = z.infer<typeof BlockValidationQualificationZod>\nexport const isBlockValidationQualification = zodIsFactory(BlockValidationQualificationZod)\n\nexport const BlockValidationConfigFieldsZod = z.object({\n value: z.boolean().optional(),\n state: z.boolean().optional(),\n})\n\nexport const BlockValidationConfigZod = z.union([\n BlockValidationConfigFieldsZod.extend(ChainQualifiedHeadConfigZod.shape),\n BlockValidationConfigFieldsZod.extend(ChainQualifiedRangeConfigZod.shape),\n BlockValidationConfigFieldsZod,\n z.object({}),\n])\n\nexport type BlockValidationConfig = z.infer<typeof BlockValidationConfigZod>\nexport const isBlockValidationConfig = zodIsFactory(BlockValidationConfigZod)\n\nexport interface BlockValidationViewerMethods {\n qualifiedValidateBlocks(\n blocks: HydratedBlock[],\n config?: BlockValidationConfig\n ): Promisable<[HydratedBlockValidationError[], BlockValidationQualification]>\n}\n\nexport const BlockValidationViewerMoniker = 'BlockValidationViewer' as const\nexport type BlockValidationViewerMoniker = typeof BlockValidationViewerMoniker\n\nexport interface BlockValidationViewer extends BlockValidationViewerMethods, Provider<BlockValidationViewerMoniker> {\n qualifiedValidateBlock(\n block: SignedHydratedBlockWithHashMeta,\n config?: BlockValidationConfig\n ): Promisable<[HydratedBlockValidationError[], BlockValidationQualification]>\n validateBlock(block: SignedHydratedBlockWithHashMeta, config?: BlockValidationConfig): Promisable<HydratedBlockValidationError[]>\n validateBlocks(blocks: SignedHydratedBlockWithHashMeta[], config?: BlockValidationConfig): Promisable<HydratedBlockValidationError[]>\n}\n","import type { Address } from '@xylabs/sdk-js'\n\nimport type { Provider } from '../model/index.ts'\n\nexport interface ChainContractViewerMethods {\n forkedAtBlockNumber(): Promise<bigint>\n forkedAtHash(): Promise<bigint>\n forkedChainId(): Promise<Address>\n minWithdrawalBlocks(): Promise<bigint>\n rewardsContract(): Promise<string>\n stakingTokenAddress(): Promise<string>\n}\n\nexport const ChainContractViewerMoniker = 'ChainContractViewer' as const\nexport type ChainContractViewerMoniker = typeof ChainContractViewerMoniker\n\nexport interface ChainContractViewer extends ChainContractViewerMethods, Provider<ChainContractViewerMoniker> {}\n","import type { Provider } from '../model/index.ts'\nimport type { ChainContractViewer } from './ChainContract.ts'\nimport type { StakeTotalsViewer } from './StakeTotals.ts'\n\nexport const ChainStakeViewerMoniker = 'ChainStakeViewer' as const\nexport type ChainStakeViewerMoniker = typeof ChainStakeViewerMoniker\n\nexport interface ChainStakeViewer extends Omit<ChainContractViewer, 'moniker'>, Omit<StakeTotalsViewer, 'moniker'>,\n Provider<ChainStakeViewerMoniker> {\n\n}\n","import { HashZod } from '@xylabs/sdk-js'\nimport type { SignedHydratedBlockWithHashMeta, SignedHydratedTransactionWithHashMeta } from '@xyo-network/xl1-protocol'\nimport { XL1BlockRangeZod } from '@xyo-network/xl1-protocol'\nimport z from 'zod'\n\nimport type { Provider } from '../model/index.ts'\n\nexport const PendingTransactionsOptionsZod = z.object({\n cursor: HashZod.optional(),\n limit: z.number().int().positive().optional(),\n window: XL1BlockRangeZod.optional(),\n})\n\nexport type PendingTransactionsOptions = z.infer<typeof PendingTransactionsOptionsZod>\n\nexport const PendingBlocksOptionsZod = z.object({\n cursor: HashZod.optional(),\n limit: z.number().int().positive().optional(),\n window: XL1BlockRangeZod.optional(),\n})\n\nexport type PendingBlocksOptions = z.infer<typeof PendingBlocksOptionsZod>\n\nexport interface MempoolViewerMethods {\n pendingBlocks(options?: PendingBlocksOptions): Promise<SignedHydratedBlockWithHashMeta[]>\n pendingTransactions(options?: PendingTransactionsOptions): Promise<SignedHydratedTransactionWithHashMeta[]>\n}\n\nexport const MempoolViewerMoniker = 'MempoolViewer' as const\nexport type MempoolViewerMoniker = typeof MempoolViewerMoniker\n\nexport interface MempoolViewer extends MempoolViewerMethods, Provider<MempoolViewerMoniker> {}\n","import type { Address, Promisable } from '@xylabs/sdk-js'\nimport type { StepIdentity, StepIdentityString } from '@xyo-network/xl1-protocol'\n\nimport type { Provider } from '../model/index.ts'\n\nexport interface NetworkStakeStepAddressRewardViewerMethods {\n // the step rewards for a specific network stakers for all of history\n networkStakeStepRewardAddressHistory(address: Address): Promisable<Record<Address, bigint>>\n\n // the step rewards for a specific network stakers for a given step and block\n networkStakeStepRewardAddressReward(context: StepIdentity, address: Address): Promisable<Record<Address, bigint>>\n\n // the shares for a specific network staker for a given step and block\n networkStakeStepRewardAddressShare(context: StepIdentity, address: Address): Promisable<[/* address shares */bigint, /* total shares */bigint]>\n\n // estimate the current reward weight for a given address at a given step\n networkStakeStepRewardWeightForAddress(context: StepIdentity, address: Address): Promisable<bigint>\n}\n\nexport interface NetworkStakeStepPoolRewardViewerMethods {\n\n // all the step rewards for all the network stakers for a given step and block\n networkStakeStepRewardPoolRewards(context: StepIdentity): Promisable<Record<Address, bigint>>\n\n // all the shares for all the network stakers for a given step and block\n networkStakeStepRewardPoolShares(context: StepIdentity): Promisable<Record<Address, bigint>>\n}\n\nexport interface NetworkStakeStepRewardPositionViewerMethods {\n // estimate the current weight for a given position at a given step\n networkStakeStepRewardPositionWeight(context: StepIdentity, position: number): Promisable<bigint>\n\n // estimate the potential loss for removing a given position at a given step\n networkStakeStepRewardPotentialPositionLoss(context: StepIdentity, position: number): Promisable<bigint>\n}\n\nexport interface NetworkStakeStepRewardViewerMethods extends\n NetworkStakeStepPoolRewardViewerMethods,\n NetworkStakeStepAddressRewardViewerMethods,\n NetworkStakeStepRewardPositionViewerMethods\n{\n networkStakeStepRewardClaimedByAddress(address: Address): Promisable<bigint>\n\n // the share & total rewards for a given position\n networkStakeStepRewardForPosition(position: number, range: [number, number]): Promisable<[bigint, bigint]>\n\n // estimate the total possible block rewards for a given step\n networkStakeStepRewardForStep(context: StepIdentity): Promisable<bigint>\n\n // the share & total rewards for a given step and block for a given position\n networkStakeStepRewardForStepForPosition(context: StepIdentity, position: number): Promisable<[bigint, bigint]>\n\n // the predictable random number for a given step and block\n networkStakeStepRewardRandomizer(context: StepIdentity): Promisable<bigint>\n\n // the total number of stakers for a given step and block\n networkStakeStepRewardStakerCount(context: StepIdentity): Promisable<number>\n\n networkStakeStepRewardUnclaimedByAddress(address: Address): Promisable<bigint>\n\n // the share & total rewards for a given position for each step in range\n networkStakeStepRewardsForPosition(position: number,\n range: [number, number]): Promisable<Record<StepIdentityString, [bigint, bigint]>>\n\n // the total rewards for a given range\n networkStakeStepRewardsForRange(range: [number, number]): Promisable<bigint>\n\n // the total rewards for a given range and step level\n networkStakeStepRewardsForStepLevel(stepLevel: number, range: [number, number]): Promisable<bigint>\n}\n\nexport const NetworkStakeStepRewardViewerMoniker = 'NetworkStakeStepRewardViewer' as const\nexport type NetworkStakeStepRewardViewerMoniker = typeof NetworkStakeStepRewardViewerMoniker\n\nexport interface NetworkStakeStepRewardViewer extends NetworkStakeStepRewardViewerMethods, Provider<NetworkStakeStepRewardViewerMoniker> {}\n","import type { Address, Promisable } from '@xylabs/sdk-js'\n\nimport type { Position, Provider } from '../model/index.ts'\nimport type { StakeEventsViewer } from './StakeEvents.ts'\n\nexport interface StakeViewerProperties {\n minWithdrawalBlocks: number\n rewardsContract: Address\n stakeEvents: StakeEventsViewer\n stakingTokenAddress: Address\n}\n\nexport interface StakeViewerMethods {\n stakeById(id: number): Promisable<Position>\n stakeByStaker(staker: Address, slot: number): Promisable<Position>\n stakesByStaked(staked: Address): Promisable<Position[]>\n stakesByStaker(staker: Address): Promisable<Position[]>\n}\n\nexport const StakeViewerMoniker = 'StakeViewer' as const\nexport type StakeViewerMoniker = typeof StakeViewerMoniker\n\nexport interface StakeViewer extends StakeViewerMethods, StakeViewerProperties, Provider<StakeViewerMoniker> {\n active(time?: number): Promisable<bigint>\n activeByAddressStaked(address: string, time?: number): Promisable<bigint>\n activeByStaker(address: string, time?: number): Promisable<bigint>\n pending(time?: number): Promisable<bigint>\n pendingByStaker(staker: string, time?: number): Promisable<bigint>\n withdrawn(time?: number): Promisable<bigint>\n withdrawnByStaker(staker: string, time?: number): Promisable<bigint>\n}\n\nexport const StakeRunnerMoniker = 'StakeRunner' as const\nexport type StakeRunnerMoniker = typeof StakeRunnerMoniker\n\nexport interface StakeRunner extends Provider<StakeRunnerMoniker> {\n addStake(staked: string, amount: bigint): Promise<boolean>\n removeStake(slot: bigint): Promise<boolean>\n withdrawStake(slot: bigint): Promise<boolean>\n}\n","import type {\n Address, JsonObject, Promisable,\n} from '@xylabs/sdk-js'\n\nimport type { Provider } from '../model/index.ts'\n\nexport const StakeEventNames = ['StakeAdded', 'StakeRemoved', 'StakeWithdrawn'] as const\nexport type StakeEventName = typeof StakeEventNames[number]\n\nexport interface ExternalEvent<TName extends string = string, TArgs extends JsonObject = {}> {\n args: TArgs\n name: TName\n time: number // usually block number\n}\n\nexport interface EventFilter<TName extends string = string> {\n name?: TName\n time?: [number, number]\n}\n\nexport interface StakeEventArgs {\n amount: bigint\n id: number\n staked: Address\n staker: Address\n}\n\nexport type StakeEventFilterArgs = Partial<Pick<StakeEventArgs, 'staker' | 'staked' | 'id'>>\n\nexport interface StakeEventFilter<TName extends StakeEventName = StakeEventName> extends EventFilter<TName> {\n args?: StakeEventFilterArgs\n}\n\nexport interface StakeEvent<TName extends StakeEventName = StakeEventName> extends ExternalEvent<TName> {\n args: StakeEventArgs\n}\n\nexport const StakeEventsViewerMoniker = 'StakeEventsViewer' as const\nexport type StakeEventsViewerMoniker = typeof StakeEventsViewerMoniker\n\nexport interface StakeEventsViewer extends Provider<StakeEventsViewerMoniker> {\n positionCount(range: [number, number | 'latest']): Promisable<number>\n stakeEvents<TName extends StakeEventName>(range: [number, number | 'latest'], filter?: StakeEventFilter<TName>): Promisable<StakeEvent<TName>[]>\n}\n","import type { Address, Promisable } from '@xylabs/sdk-js'\n\nimport type { Provider } from '../model/index.ts'\n\nexport interface StakeTotalsViewerMethods {\n active(): Promisable<bigint>\n activeByStaked(staked: Address): Promisable<bigint>\n activeByStaker(address: Address): Promisable<bigint>\n pending(): Promisable<bigint>\n pendingByStaker(staker: Address): Promisable<bigint>\n withdrawn(): Promisable<bigint>\n withdrawnByStaker(staker: Address): Promisable<bigint>\n}\n\nexport const StakeTotalsViewerMoniker = 'StakeTotalsViewer' as const\nexport type StakeTotalsViewerMoniker = typeof StakeTotalsViewerMoniker\n\nexport interface StakeTotalsViewer extends StakeTotalsViewerMethods, Provider<StakeTotalsViewerMoniker> {}\n","import type { Address, Promisable } from '@xylabs/sdk-js'\nimport type { StepIdentity } from '@xyo-network/xl1-protocol'\n\nimport type { Provider } from '../model/index.ts'\n\nexport interface StepStakeViewerMethods {\n // this is the prorated stake for all addresses in the step\n stepStake: (step: StepIdentity) => Promisable<Record<Address, bigint>>\n\n // this is the prorated stake for a specific address in the step\n stepStakeForAddress: (address: Address, step: StepIdentity) => Promisable<bigint>\n}\n\n/* Prorated stake is the amount of stake that is allocated to a specific step\n based on the total stake and the number of steps. This is used to ensure\n that the stake is distributed fairly among all steps.\n\n The simplest way to calculate it is to enumerate every XL1 block in the step add the current stake at that point to a counter.\n For example, if an Address had a stake of 100 for the entire time, then the prorated stake would be 100 * number of blocks in the step.\n*/\n\nexport const StepStakeViewerMoniker = 'StepStakeViewer' as const\nexport type StepStakeViewerMoniker = typeof StepStakeViewerMoniker\n\nexport interface StepStakeViewer extends StepStakeViewerMethods, Provider<StepStakeViewerMoniker> {}\n","import type { Address, Promisable } from '@xylabs/sdk-js'\nimport type { PositionId, StepIdentity } from '@xyo-network/xl1-protocol'\n\nimport type { Position, Provider } from '../model/index.ts'\nimport type { NetworkStakeStepRewardsViewer } from '../provider/index.ts'\n\nexport interface PagedPositionsOptions {\n cursor?: PositionId\n limit?: number\n}\n\nexport interface PagedStakersOptions {\n cursor?: Address\n limit?: number\n}\n\nexport interface StepStatistics {\n endTime: number\n startTime: number\n}\n\nexport interface StepViewerMethods {\n\n // the total number of positions for a given step\n positionCount(step: StepIdentity): Promisable<number>\n\n positions(step: StepIdentity, options?: PagedPositionsOptions): Promisable<Position[]>\n\n // the predictable random number for a given step\n randomizer(step: StepIdentity): Promisable<bigint>\n\n // total amount staked during a given step\n stake(step: StepIdentity): Promisable<bigint>\n\n // the total number of stakers for a given step\n stakerCount(step: StepIdentity): Promisable<number>\n\n stakers(step: StepIdentity, options?: PagedStakersOptions): Promisable<Address[]>\n\n // if no positionId is supplied, returns the total stake weight for the step\n weight(step: StepIdentity, positionId?: PositionId): Promisable<bigint>\n}\n\nexport const StepViewerMoniker = 'StepViewer' as const\nexport type StepViewerMoniker = typeof StepViewerMoniker\n\nexport interface StepViewer extends StepViewerMethods, Provider<StepViewerMoniker> {\n rewards?: NetworkStakeStepRewardsViewer\n}\n","import type { Promisable } from '@xylabs/sdk-js'\nimport type { TimeDomain, TimePayload } from '@xyo-network/xl1-protocol'\n\nimport type { Provider } from '../model/index.ts'\n\nexport interface TimeSyncViewerMethods {\n /** Convert time between different domains */\n convertTime(fromDomain: TimeDomain, toDomain: TimeDomain, from: number): Promisable<number>\n\n /** Get the current time for a given domain */\n currentTime(domain: TimeDomain): Promisable<[string, number]>\n\n /** Get the current time for a given domain */\n currentTimeAndHash(domain: TimeDomain): Promisable<[number, string | null]>\n\n /** Create a TimePayload with the current time from all configured domains */\n currentTimePayload(): Promisable<TimePayload>\n}\n\nexport const TimeSyncViewerMoniker = 'TimeSyncViewer' as const\nexport type TimeSyncViewerMoniker = typeof TimeSyncViewerMoniker\n\nexport interface TimeSyncViewer extends TimeSyncViewerMethods, Provider<TimeSyncViewerMoniker> {}\n","import { type Promisable } from '@xylabs/sdk-js'\nimport { zodIsFactory } from '@xylabs/zod'\nimport { type HydratedTransaction, type ValidationError } from '@xyo-network/xl1-protocol'\nimport type z from 'zod'\n\nimport {\n ChainQualificationZod, ChainQualifiedConfigZod, type Provider,\n} from '../model/index.ts'\n\nexport const TransactionValidationQualificationZod = ChainQualificationZod\nexport type TransactionValidationQualification = z.infer<typeof TransactionValidationQualificationZod>\nexport const isTransactionValidationQualification = zodIsFactory(TransactionValidationQualificationZod)\n\nexport const TransactionValidationConfigZod = ChainQualifiedConfigZod\nexport type TransactionValidationConfig = z.infer<typeof TransactionValidationConfigZod>\nexport const isTransactionValidationConfig = zodIsFactory(TransactionValidationConfigZod)\n\nexport interface TransactionValidationViewerMethods {\n qualifiedValidateTransactions(\n transactions: HydratedTransaction[],\n config?: TransactionValidationConfig\n ): Promisable<[ValidationError[][], TransactionValidationQualification]>\n}\n\nexport const TransactionValidationViewerMoniker = 'TransactionValidationViewer' as const\nexport type TransactionValidationViewerMoniker = typeof TransactionValidationViewerMoniker\n\nexport interface TransactionValidationViewer extends TransactionValidationViewerMethods, Provider<TransactionValidationViewerMoniker> {\n qualifiedValidateTransaction(\n transaction: HydratedTransaction,\n config?: TransactionValidationConfig\n ): Promisable<[ValidationError[], TransactionValidationQualification]>\n validateTransaction(transaction: HydratedTransaction[], config?: TransactionValidationConfig): Promisable<ValidationError[]>\n validateTransactions(transactions: HydratedTransaction[], config?: TransactionValidationConfig): Promisable<ValidationError[][]>\n}\n","import type { Address, Promisable } from '@xylabs/sdk-js'\nimport type { Signed } from '@xyo-network/boundwitness-model'\nimport type {\n AttoXL1,\n BlockBoundWitness, TransactionBoundWitness, Transfer,\n XL1BlockRange,\n} from '@xyo-network/xl1-protocol'\n\nimport type { Provider } from '../model/index.ts'\n\nexport type TransferBalanceHistoryItem = [\n Signed<BlockBoundWitness> /* block */,\n Signed<TransactionBoundWitness> | null,\n Transfer, /* the actual transfer payload */\n]\nexport type TransferPair = [Address, Address]\n\nexport interface TransferBalancesViewerMethods {\n transferBalances(address: Address[]): Promisable<Partial<Record<Address, Record<Address, AttoXL1>>>>\n transferBalancesHistories(address: Address[]): Promisable<Partial<Record<Address, Record<Address, TransferBalanceHistoryItem[]>>>>\n transferPairBalances(address: TransferPair[]): Promisable<Partial<Record<Address, Record<Address, AttoXL1>>>>\n transferPairBalancesHistories(address: TransferPair[]): Promisable<Partial<Record<Address, Record<Address, TransferBalanceHistoryItem[]>>>>\n}\n\nexport const TransferBalanceViewerMoniker = 'TransferBalanceViewer' as const\nexport type TransferBalanceViewerMoniker = typeof TransferBalanceViewerMoniker\n\nexport interface TransferBalanceViewer extends TransferBalancesViewerMethods, Provider<TransferBalanceViewerMoniker> {\n transferBalance(address: Address): Promisable<AttoXL1>\n transferBalanceHistory(address: Address, range?: XL1BlockRange): Promisable<TransferBalanceHistoryItem[]>\n transferPairBalance(address: TransferPair): Promisable<AttoXL1>\n transferPairBalanceHistory(address: TransferPair): Promisable<TransferBalanceHistoryItem[]>\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport {\n assertEx,\n exists,\n isDefined,\n isUndefined,\n spanRootAsync,\n} from '@xylabs/sdk-js'\nimport type { ReadArchivist } from '@xyo-network/archivist-model'\nimport type { Payload, WithHashMeta } from '@xyo-network/payload-model'\nimport {\n asSignedHydratedBlockWithHashMeta,\n asXL1BlockNumber,\n ChainId,\n type SignedHydratedBlockWithHashMeta,\n type XL1BlockNumber,\n} from '@xyo-network/xl1-protocol'\n\nimport { hydrateBlock } from '../../block/index.ts'\nimport type { CreatableProviderParams } from '../../CreatableProvider/index.ts'\nimport { AbstractCreatableProvider, creatableProvider } from '../../CreatableProvider/index.ts'\nimport { LruCacheMap } from '../../driver/index.ts'\nimport type {\n ChainContextRead,\n ChainStoreRead, PayloadMap,\n} from '../../model/index.ts'\nimport {\n findMostRecentBlock, hydratedBlockByNumber, readPayloadMapFromStore,\n} from '../../primitives/index.ts'\nimport { HydratedCache } from '../../utils/index.ts'\nimport { type BlockViewer, BlockViewerMoniker } from '../../viewers/index.ts'\n\nexport interface SimpleBlockViewerParams extends CreatableProviderParams {\n finalizedArchivist: ReadArchivist\n}\n\n@creatableProvider()\nexport class SimpleBlockViewer extends AbstractCreatableProvider<SimpleBlockViewerParams> implements BlockViewer {\n static readonly defaultMoniker = BlockViewerMoniker\n static readonly monikers = [BlockViewerMoniker]\n moniker = SimpleBlockViewer.defaultMoniker\n\n protected _store: ChainStoreRead | undefined\n\n private _payloadCache: PayloadMap<WithHashMeta<Payload>> | undefined\n private _signedHydratedBlockCache: HydratedCache<SignedHydratedBlockWithHashMeta> | undefined\n\n get finalizedArchivist(): ReadArchivist {\n return this.params.finalizedArchivist!\n }\n\n protected get hydratedBlockCache(): HydratedCache<SignedHydratedBlockWithHashMeta> {\n if (this._signedHydratedBlockCache) return this._signedHydratedBlockCache\n const chainMap = this.store.chainMap\n this._signedHydratedBlockCache = new HydratedCache<SignedHydratedBlockWithHashMeta>(chainMap, async (\n store: ChainStoreRead,\n hash: Hash,\n maxDepth?: number,\n minDepth?: number,\n ) => {\n const result = await hydrateBlock(store, hash, maxDepth, minDepth)\n return asSignedHydratedBlockWithHashMeta(result, true)\n }, 200)\n return this._signedHydratedBlockCache\n }\n\n protected get payloadCache(): PayloadMap<WithHashMeta<Payload>> {\n if (this._payloadCache) return this._payloadCache\n this._payloadCache = new LruCacheMap<Hash, WithHashMeta<Payload>>({ max: 10_000 })\n return this._payloadCache\n }\n\n protected get store() {\n return this._store!\n }\n\n static override async paramsHandler(params: Partial<SimpleBlockViewerParams>) {\n assertEx(params.finalizedArchivist, () => 'finalizedArchivist is required')\n\n return { ...await super.paramsHandler(params) }\n }\n\n async blockByHash(hash: Hash): Promise<SignedHydratedBlockWithHashMeta | null> {\n return await spanRootAsync('blockByHash', async () => {\n const cache = this.hydratedBlockCache\n return await cache.get(hash)\n }, this.tracer)\n }\n\n async blockByNumber(blockNumber: XL1BlockNumber): Promise<SignedHydratedBlockWithHashMeta | null> {\n return await spanRootAsync('blockByNumber', async () => {\n const head = await this.getCurrentHead()\n if (isUndefined(head)) {\n return null\n }\n return asSignedHydratedBlockWithHashMeta(await hydratedBlockByNumber({\n chainId: head.chain,\n head: () => {\n return [head._hash, head.block]\n },\n store: this.store,\n singletons: this.context.singletons,\n } satisfies ChainContextRead, blockNumber)) ?? null\n }, this.tracer)\n }\n\n async blocksByHash(hash: Hash, limit = 50): Promise<SignedHydratedBlockWithHashMeta[]> {\n return await spanRootAsync('blocksByHash', async () => {\n assertEx(limit > 0, () => 'limit must be greater than 0')\n assertEx(limit <= 100, () => 'limit must be less than 100')\n const blocks: SignedHydratedBlockWithHashMeta[] = []\n let current = await this.blockByHash(hash)\n while (current && blocks.length < limit) {\n blocks.push(current)\n const previousHash = current[0].previous\n if (previousHash === null) break\n current = await this.blockByHash(previousHash)\n }\n return blocks.map(b => asSignedHydratedBlockWithHashMeta(b, true))\n }, this.tracer)\n }\n\n async blocksByNumber(blockNumber: XL1BlockNumber, limit = 50): Promise<SignedHydratedBlockWithHashMeta[]> {\n return await spanRootAsync('blocksByHash', async () => {\n assertEx(limit > 0, () => 'limit must be greater than 0')\n assertEx(limit <= 100, () => 'limit must be less than 100')\n const blocks: SignedHydratedBlockWithHashMeta[] = []\n let current = await this.blockByNumber(blockNumber)\n while (current && blocks.length < limit) {\n blocks.push(current)\n if (current[0].block === 0) break\n const previousNumber = asXL1BlockNumber(current[0].block - 1, true)\n current = await this.blockByNumber(previousNumber)\n }\n return blocks.map(b => asSignedHydratedBlockWithHashMeta(b, true))\n }, this.tracer)\n }\n\n chainId(): Promise<ChainId>\n chainId(blockNumber: XL1BlockNumber): Promise<ChainId>\n chainId(blockNumber: 'latest'): Promise<ChainId>\n async chainId(blockNumber: XL1BlockNumber | 'latest' = 'latest'): Promise<ChainId> {\n return await spanRootAsync('chainId', async () => {\n const block = assertEx(\n blockNumber === 'latest' ? await this.currentBlock() : await this.blockByNumber(blockNumber),\n () => `Could not find block for block number ${blockNumber}`,\n )\n return block[0].chain\n })\n }\n\n override async createHandler() {\n await super.createHandler()\n this._store = { chainMap: readPayloadMapFromStore(this.params.finalizedArchivist) }\n }\n\n async currentBlock(): Promise<SignedHydratedBlockWithHashMeta> {\n return await spanRootAsync('currentBlock', async () => {\n const currentHead = assertEx(await this.getCurrentHead(), () => 'Could not find most recent block [currentBlock]')\n const cache = this.hydratedBlockCache\n const block = await cache.get(currentHead._hash)\n if (!block) {\n console.log(`Could not find current block with hash ${currentHead!._hash}`)\n }\n return assertEx(block, () => 'Could not find current block')\n }, this.tracer)\n }\n\n async currentBlockHash(): Promise<Hash> {\n return await spanRootAsync('currentBlockHash', async () => {\n const currentHead = assertEx(await this.getCurrentHead(), () => 'Could not find most recent block [currentBlockHash]')\n return currentHead._hash\n }, this.tracer)\n }\n\n async currentBlockNumber(): Promise<XL1BlockNumber> {\n return await spanRootAsync('currentBlockNumber', async () => {\n const currentHead = assertEx(await this.getCurrentHead(), () => 'Could not find most recent block [currentBlockNumber]')\n return asXL1BlockNumber(currentHead.block, { name: 'currentBlockNumber' })\n }, this.tracer)\n }\n\n async payloadByHash(hash: Hash): Promise<WithHashMeta<Payload> | null> {\n const cachedPayload = await this.payloadCache.get(hash)\n if (cachedPayload) {\n return cachedPayload\n } else {\n const [result] = await this.finalizedArchivist.get([hash])\n if (isDefined(result)) {\n await this.payloadCache.set(hash, result)\n }\n return result ?? null\n }\n }\n\n async payloadsByHash(hashes: Hash[]): Promise<WithHashMeta<Payload>[]> {\n let remainingHashes = [...hashes]\n const cachedPayloads = await this.payloadCache.getMany(remainingHashes)\n const cachedHashes = new Set(cachedPayloads.map(p => p._hash))\n remainingHashes = remainingHashes.filter(h => !cachedHashes.has(h))\n const remainingPayloads = remainingHashes.length > 0\n ? await this.finalizedArchivist.get(remainingHashes)\n : []\n return [...cachedPayloads, ...remainingPayloads.filter(exists)]\n }\n\n protected async getCurrentHead() {\n const chainArchivist = this.finalizedArchivist\n return await findMostRecentBlock(chainArchivist)\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport { LRUCache } from 'lru-cache'\n\nimport type { PayloadMapRead } from '../model/index.ts'\n\nexport type HydrateFunction<T> = (\n context: { chainMap: PayloadMapRead<WithStorageMeta<Payload>> },\n hash: Hash,\n) => Promise<T | undefined>\n\nexport class HydratedCache<T extends {}> {\n protected readonly cache: LRUCache<Hash, T>\n protected readonly chainMap: PayloadMapRead<WithStorageMeta<Payload>>\n protected readonly hydrateFunction: HydrateFunction<T>\n\n constructor(\n chainMap: PayloadMapRead<WithStorageMeta<Payload>>,\n hydrateFunction: HydrateFunction<T>,\n maxSize: number = 200,\n ) {\n this.chainMap = chainMap\n this.hydrateFunction = hydrateFunction\n this.cache = new LRUCache<Hash, T>({ max: maxSize })\n }\n\n async get(hash: Hash): Promise<T | null> {\n const existing = this.cache.get(hash)\n if (existing !== undefined) return existing\n const block = (await this.hydrateFunction({ chainMap: this.chainMap }, hash)) ?? null\n if (block !== null) this.cache.set(hash, block)\n return block\n }\n\n has(hash: Hash): boolean {\n return this.cache.has(hash)\n }\n}\n","import * as z from 'zod'\n\nexport const isZodError = (error: unknown): error is z.ZodError => {\n return error instanceof z.ZodError\n}\n\nexport const prettifyZodError = (error: z.ZodError): string => {\n return z.prettifyError(error)\n}\n","import { Promisable } from '@xylabs/sdk-js'\nimport { AttoXL1, XL1BlockNumber } from '@xyo-network/xl1-protocol'\n\nimport {\n AbstractCreatableProvider, creatableProvider, CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\nimport { rewardFromBlockNumber } from '../../primitives/index.ts'\nimport { BlockRewardViewer, BlockRewardViewerMoniker } from '../../viewers/index.ts'\n\nexport interface SimpleBlockRewardViewerParams extends CreatableProviderParams {\n creatorReward: AttoXL1\n initialReward: AttoXL1\n minRewardPerBlock: AttoXL1\n stepFactorDenominator: bigint\n stepFactorNumerator: bigint\n stepSize: XL1BlockNumber\n}\n\n@creatableProvider()\nexport class SimpleBlockRewardViewer extends AbstractCreatableProvider<SimpleBlockRewardViewerParams> implements BlockRewardViewer {\n static readonly defaultMoniker = BlockRewardViewerMoniker\n static readonly monikers = [BlockRewardViewerMoniker]\n moniker = SimpleBlockRewardViewer.defaultMoniker\n\n protected rewardFromBlockNumber = rewardFromBlockNumber(18)\n\n allowedRewardForBlock(block: XL1BlockNumber): Promisable<AttoXL1> {\n return this.rewardFromBlockNumber(\n block,\n this.params.initialReward,\n this.params.stepSize,\n this.params.stepFactorNumerator,\n this.params.stepFactorDenominator,\n this.params.minRewardPerBlock,\n this.params.creatorReward,\n )\n }\n}\n","import { exists } from '@xylabs/sdk-js'\nimport {\n asXL1BlockRange,\n ChainId,\n type SignedHydratedBlockWithHashMeta,\n} from '@xyo-network/xl1-protocol'\n\nimport type { CreatableProviderParams } from '../../CreatableProvider/index.ts'\nimport { AbstractCreatableProvider, creatableProvider } from '../../CreatableProvider/index.ts'\nimport { findUncles, getWindowedChain } from '../../primitives/index.ts'\nimport type {\n HydratedBlockStateValidationFunction, HydratedBlockValidationError, HydratedBlockValidationFunction,\n} from '../../validation/index.ts'\nimport type {\n AccountBalanceViewer,\n BlockValidationConfig,\n BlockValidationQualification,\n BlockValidationViewer,\n} from '../../viewers/index.ts'\nimport {\n AccountBalanceViewerMoniker,\n BlockValidationViewerMoniker, BlockViewer, BlockViewerMoniker,\n} from '../../viewers/index.ts'\n\nexport interface SimpleBlockValidationViewerParams extends CreatableProviderParams {\n maxUncleWindowSize: number\n state?: HydratedBlockStateValidationFunction\n value?: HydratedBlockValidationFunction\n}\n\n@creatableProvider()\nexport class SimpleBlockValidationViewer extends AbstractCreatableProvider<SimpleBlockValidationViewerParams> implements BlockValidationViewer {\n static readonly defaultMoniker = BlockValidationViewerMoniker\n static readonly monikers = [BlockValidationViewerMoniker]\n moniker = SimpleBlockValidationViewer.defaultMoniker\n\n private _accountBalanceViewer!: AccountBalanceViewer\n private _blockViewer!: BlockViewer\n private _uncleWindowedChainCache: SignedHydratedBlockWithHashMeta[] | null = null\n\n protected get blockViewer() {\n return this._blockViewer\n }\n\n protected get maxUncleWindowSize() {\n return this.params.maxUncleWindowSize\n }\n\n static override async paramsHandler(params: Partial<SimpleBlockValidationViewerParams>): Promise<SimpleBlockValidationViewerParams> {\n return {\n ...await super.paramsHandler(params),\n maxUncleWindowSize: params.maxUncleWindowSize ?? 100,\n } satisfies SimpleBlockValidationViewerParams\n }\n\n override async createHandler() {\n await super.createHandler()\n this._accountBalanceViewer = await this.locator.getInstance<AccountBalanceViewer>(AccountBalanceViewerMoniker)\n this._blockViewer = await this.locator.getInstance<BlockViewer>(BlockViewerMoniker)\n }\n\n async qualifiedValidateBlock(\n block: SignedHydratedBlockWithHashMeta,\n config?: BlockValidationConfig,\n ): Promise<[HydratedBlockValidationError[], BlockValidationQualification]> {\n return (await this.qualifiedValidateBlocks([block], config))\n }\n\n async qualifiedValidateBlocks(\n blocks: SignedHydratedBlockWithHashMeta[],\n config?: BlockValidationConfig,\n ): Promise<[HydratedBlockValidationError[], BlockValidationQualification]> {\n const { value, state } = config ?? {\n shape: true, links: true, state: true,\n }\n\n const [headBlock] = await this.blockViewer.currentBlock()\n const chainId = headBlock.chain\n\n const validateValue = value ? this.doValidateValue.bind(this) : undefined\n const validateState = state ? this.doValidateState.bind(this) : undefined\n\n return [(await Promise.all([\n validateValue?.(blocks, chainId), validateState?.(blocks, chainId),\n ].filter(exists))).flat(), { head: headBlock._hash, range: asXL1BlockRange([0, headBlock.block], true) }]\n }\n\n async validateBlock(block: SignedHydratedBlockWithHashMeta, config?: BlockValidationConfig): Promise<HydratedBlockValidationError[]> {\n return (await this.validateBlocks([block], config))\n }\n\n async validateBlocks(blocks: SignedHydratedBlockWithHashMeta[], config?: BlockValidationConfig): Promise<HydratedBlockValidationError[]> {\n return (await this.qualifiedValidateBlocks(blocks, config))[0]\n }\n\n private async doValidateState(blocks: SignedHydratedBlockWithHashMeta[], chainId: ChainId): Promise<HydratedBlockValidationError[]> {\n const windowedUncleChain = await this.updateWindowedChainCache()\n\n const uncles = findUncles(this.context, windowedUncleChain, blocks)\n\n if (uncles.length !== 1) {\n throw new Error(`No uncles or greater than one uncle found in block validation, which is not supported [${uncles.length}]`)\n }\n return (await Promise.all(uncles[0].map(async (block) => {\n return await this.params.state!(\n block,\n chainId,\n { accountBalance: this._accountBalanceViewer },\n )\n }))).flat()\n }\n\n private async doValidateValue(blocks: SignedHydratedBlockWithHashMeta[], chainId: ChainId): Promise<HydratedBlockValidationError[]> {\n return (await Promise.all(blocks.map(async (block) => {\n return await this.params.value!(\n block,\n chainId,\n )\n }))).flat()\n }\n\n private async updateWindowedChainCache() {\n this._uncleWindowedChainCache = await getWindowedChain(this.blockViewer, this.maxUncleWindowSize, this._uncleWindowedChainCache ?? [])\n return [...this._uncleWindowedChainCache]\n }\n}\n","import {\n type Address, asAddress, toAddress,\n} from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\n\nimport {\n AbstractCreatableProvider, creatableProvider, CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\nimport { PayloadMap, Position } from '../../model/index.ts'\nimport {\n StakeEventsViewer, StakeEventsViewerMoniker, StakeViewer, StakeViewerMoniker,\n} from '../../viewers/index.ts'\n\nexport interface SimpleChainStakeParams extends CreatableProviderParams {\n chainId?: Address\n chainMap: PayloadMap\n minWithdrawalBlocks?: number\n positions: Position[]\n}\n\n@creatableProvider()\nexport class SimpleStakeViewer extends AbstractCreatableProvider<SimpleChainStakeParams> implements StakeViewer {\n static readonly defaultMoniker = StakeViewerMoniker\n static readonly monikers = [StakeViewerMoniker]\n moniker = SimpleStakeViewer.defaultMoniker\n\n private _chainStakeEventsViewer: StakeEventsViewer | undefined\n\n get chainMap() {\n return this.params.chainMap\n }\n\n get minWithdrawalBlocks(): number {\n return this.params.minWithdrawalBlocks ?? 10\n }\n\n get rewardsContract(): Address {\n return toAddress(toAddress(1n))\n }\n\n get stakeEvents() {\n return assertEx(this._chainStakeEventsViewer, () => 'Stake events viewer not set')\n }\n\n get stakingTokenAddress(): Address {\n return toAddress('0x000000000000000000000000000011')\n }\n\n protected get positions() {\n return this.params.positions\n }\n\n active(): bigint {\n let active = 0n\n for (const position of this.positions) {\n if (position.removeBlock === 0) {\n active += position.amount\n }\n }\n return active\n }\n\n activeByAddressStaked(staked: Address): bigint {\n let active = 0n\n for (const position of this.positions) {\n if (position.removeBlock === 0 && asAddress(position.staked) === asAddress(staked)) {\n active += position.amount\n }\n }\n return active\n }\n\n activeByStaker(staker: Address): bigint {\n let active = 0n\n for (const position of this.positions) {\n if (position.removeBlock === 0 && asAddress(position.staker) === asAddress(staker)) {\n active += position.amount\n }\n }\n return active\n }\n\n override async createHandler() {\n await super.createHandler()\n this._chainStakeEventsViewer = assertEx(\n (await this.locateAndCreate<StakeEventsViewer>(StakeEventsViewerMoniker)),\n () => 'Failed to create StakeEventsViewer',\n )\n }\n\n pending(): bigint {\n let pending = 0n\n for (const position of this.positions) {\n if (position.removeBlock !== 0 && position.withdrawBlock === 0) {\n pending += position.amount\n }\n }\n return pending\n }\n\n pendingByStaker(staker: Address): bigint {\n let pending = 0n\n for (const position of this.positions) {\n if (position.removeBlock !== 0 && position.withdrawBlock === 0 && asAddress(position.staker) === asAddress(staker)) {\n pending += position.amount\n }\n }\n return pending\n }\n\n stakeById(id: number): Position {\n return assertEx(this.positions[id], () => new Error(`Stake with id ${id} not found`))\n }\n\n stakeByStaker(staker: Address, slot: number): Position {\n return this.positions.filter(s => asAddress(s.staker) === asAddress(staker))[slot]\n }\n\n stakesByStaked(staked: Address, range: [number, number | undefined] = [0, undefined]): Position[] {\n const endBlock = (range[1] ?? Number.MAX_SAFE_INTEGER)\n return this.positions.filter(s => asAddress(s.staked) === asAddress(staked) && s.addBlock <= endBlock && s.removeBlock <= endBlock)\n }\n\n stakesByStaker(staker: Address, range: [number, number | undefined] = [0, undefined]): Position[] {\n const endBlock = (range[1] ?? Number.MAX_SAFE_INTEGER)\n return this.positions.filter(s => asAddress(s.staker) === asAddress(staker) && s.addBlock <= endBlock && s.removeBlock <= endBlock)\n }\n\n withdrawn(): bigint {\n let withdrawn = 0n\n for (const position of this.positions) {\n if (position.withdrawBlock !== 0) {\n withdrawn += position.amount\n }\n }\n return withdrawn\n }\n\n withdrawnByStaker(staker: Address): bigint {\n let withdrawn = 0n\n for (const position of this.positions) {\n if (position.withdrawBlock !== 0 && asAddress(position.staker) === asAddress(staker)) {\n withdrawn += position.amount\n }\n }\n return withdrawn\n }\n}\n","import type {\n XyoClient, XyoGatewayRunner, XyoPermissions,\n} from '../../provider/index.ts'\n\nexport class SimpleXyoClient implements XyoClient {\n gateways: Readonly<Partial<Record<string, XyoGatewayRunner>>>\n permissions: XyoPermissions\n\n constructor(gateways: Readonly<Partial<Record<string, XyoGatewayRunner>>>, permissions: XyoPermissions) {\n this.gateways = gateways\n this.permissions = permissions\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { isAnyPayload, type Schema } from '@xyo-network/payload-model'\n\nimport { AbstractCreatableProvider, type CreatableProviderParams } from '../../CreatableProvider/index.ts'\nimport type { MapTypeRead } from '../../map/index.ts'\nimport { type DataLakeData } from '../../provider/index.ts'\n\nexport interface AbstractSimpleDataLakeParams<TMap extends\nMapTypeRead<Hash, DataLakeData> = MapTypeRead<Hash, DataLakeData>> extends\n CreatableProviderParams {\n\n allowedSchemas?: Schema[]\n disallowedSchemas?: Schema[]\n map: TMap\n}\n\nexport abstract class AbstractSimpleDataLake<TParams extends AbstractSimpleDataLakeParams = AbstractSimpleDataLakeParams> extends\n AbstractCreatableProvider<TParams> {\n get allowedSchemas(): Schema[] | undefined {\n return this.params.allowedSchemas\n }\n\n get disallowedSchemas(): Schema[] | undefined {\n return this.params.disallowedSchemas\n }\n\n protected get map(): TParams['map'] {\n return this.params.map\n }\n\n async get(hash: Hash): Promise<DataLakeData | undefined> {\n const result = await this.map.get(hash)\n return this.isAllowed(result) ? result : undefined\n }\n\n async getMany(hashes: Hash[]): Promise<DataLakeData[]> {\n const result = await this.map.getMany(hashes)\n return result.filter(data => this.isAllowed(data))\n }\n\n async has(hash: Hash): Promise<boolean> {\n const value = await this.get(hash)\n if (isAnyPayload(value)) {\n return this.isAllowed(value)\n }\n return value !== undefined\n }\n\n protected isAllowed(value: DataLakeData | undefined): boolean {\n if (isAnyPayload(value)) {\n return this.isAllowedSchema(value.schema)\n }\n return true\n }\n\n protected isAllowedSchema(schema: Schema): boolean {\n if (this.allowedSchemas && !this.allowedSchemas.includes(schema)) {\n return false\n }\n if (this.disallowedSchemas && this.disallowedSchemas.includes(schema)) {\n return false\n }\n return true\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\n\nimport { creatableProvider } from '../../CreatableProvider/index.ts'\nimport type { MapType } from '../../map/index.ts'\nimport {\n type DataLakeData,\n type DataLakeRunner,\n DataLakeRunnerMoniker,\n} from '../../provider/index.ts'\nimport { AbstractSimpleDataLake } from './AbstractSimpleDataLake.ts'\nimport { DataLakeViewerParams } from './SimpleDataLakeViewer.ts'\n\nexport interface DataLakeRunnerParams extends DataLakeViewerParams<MapType<Hash, DataLakeData>> {}\n\n@creatableProvider()\nexport class SimpleDataLakeRunner<TParams extends DataLakeRunnerParams> extends\n AbstractSimpleDataLake<TParams> implements DataLakeRunner {\n static readonly defaultMoniker = DataLakeRunnerMoniker\n static readonly monikers = [DataLakeRunnerMoniker]\n moniker = SimpleDataLakeRunner.defaultMoniker\n\n async clear(): Promise<void> {\n await this.map.clear()\n }\n\n async delete(hash: Hash): Promise<boolean> {\n return await this.map.delete(hash)\n }\n\n async set(hash: Hash, data: DataLakeData): Promise<void> {\n if (this.isAllowed(data)) {\n await this.map.set(hash, data)\n }\n }\n\n async setMany(entries: [Hash, DataLakeData][]): Promise<void> {\n const allowed = entries.filter(([_, data]) => this.isAllowed(data))\n return await this.map.setMany(allowed)\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\n\nimport { creatableProvider } from '../../CreatableProvider/index.ts'\nimport type { MapTypeRead } from '../../map/index.ts'\nimport {\n type DataLakeData,\n type DataLakeViewer,\n DataLakeViewerMoniker,\n} from '../../provider/index.ts'\nimport { AbstractSimpleDataLake, AbstractSimpleDataLakeParams } from './AbstractSimpleDataLake.ts'\n\nexport interface DataLakeViewerParams<TMap extends MapTypeRead<Hash, DataLakeData> = MapTypeRead<Hash, DataLakeData>> extends\n AbstractSimpleDataLakeParams<TMap> {\n}\n\n@creatableProvider()\nexport class SimpleDataLakeViewer<TParams extends DataLakeViewerParams = DataLakeViewerParams>\n extends AbstractSimpleDataLake<TParams> implements DataLakeViewer {\n static readonly defaultMoniker = DataLakeViewerMoniker\n static readonly monikers = [DataLakeViewerMoniker]\n moniker = SimpleDataLakeViewer.defaultMoniker\n}\n","import type { Promisable } from '@xylabs/sdk-js'\n\nimport type {\n XyoConnection, XyoGateway, XyoSigner,\n} from '../../provider/index.ts'\n\nexport class SimpleXyoGateway implements XyoGateway {\n private readonly _connection: XyoConnection\n private readonly _signer: XyoSigner\n\n constructor(signer: XyoSigner, connection: XyoConnection) {\n this._signer = signer\n this._connection = connection\n }\n\n get connectionInstance(): XyoConnection {\n return this._connection\n }\n\n get signerInstance(): XyoSigner {\n return this._signer\n }\n\n connection(): Promisable<XyoConnection> {\n return this._connection\n }\n\n signer(): Promisable<XyoSigner> {\n return this._signer\n }\n}\n","import type {\n Address, Hash, Hex, Promisable,\n} from '@xylabs/sdk-js'\nimport {\n assertEx, BigIntToJsonZod, isDefined,\n} from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload, WithHashMeta } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload,\n AttoXL1,\n SignedHydratedTransaction, SignedHydratedTransactionWithHashMeta,\n Transfer,\n UnsignedHydratedTransaction,\n} from '@xyo-network/xl1-protocol'\nimport {\n asXL1BlockNumber,\n TransferSchema,\n} from '@xyo-network/xl1-protocol'\n\nimport type {\n DataLakeRunner,\n TransactionOptions,\n XyoConnection, XyoGatewayRunner,\n XyoSigner,\n} from '../../provider/index.ts'\nimport type { ConfirmSubmittedTransactionOptions } from '../../transaction/index.ts'\nimport { buildUnsignedTransaction, confirmSubmittedTransaction } from '../../transaction/index.ts'\n\nexport class SimpleXyoGatewayRunner implements XyoGatewayRunner {\n private readonly _connection: XyoConnection\n private _dataLakes: (DataLakeRunner | null)[]\n private readonly _signer: XyoSigner\n\n constructor(connection: XyoConnection, signer: XyoSigner, dataLakes: DataLakeRunner[] = []) {\n this._connection = connection\n this._dataLakes = [...dataLakes]\n this._signer = signer\n }\n\n get connectionInstance(): XyoConnection {\n return this._connection\n }\n\n get dataLakes(): DataLakeRunner[] {\n throw new Error('Method [dataLakes] not implemented.')\n }\n\n get signerInstance(): XyoSigner {\n return this._signer\n }\n\n addDataLake(dataLake: DataLakeRunner): number {\n this._dataLakes.push(dataLake)\n return this._dataLakes.length - 1\n }\n\n async addPayloadsToChain(\n onChain: AllowedBlockPayload[],\n offChain: Payload[],\n options?: TransactionOptions,\n ): Promise<[Hash, SignedHydratedTransactionWithHashMeta]> {\n // Get chain providers\n const viewer = assertEx(this.connectionInstance.viewer, () => 'No viewer available on connection')\n\n // Resolve transaction options\n const {\n nbf, exp, chain, fees,\n } = options ?? {}\n const resolvedChainId = isDefined(chain) ? chain : await viewer.chainId()\n const resolvedNbf = asXL1BlockNumber(isDefined(nbf) ? nbf : await viewer.currentBlockNumber(), true)\n const resolvedExp = asXL1BlockNumber(isDefined(exp) ? exp : resolvedNbf + 10, true)\n\n // Build, sign, and broadcast the transaction\n // eslint-disable-next-line sonarjs/deprecation\n const tx = await buildUnsignedTransaction(resolvedChainId, onChain, offChain, resolvedNbf, resolvedExp, await (await this.signer()).address(), fees)\n return await this.addTransactionToChain(tx)\n }\n\n async addTransactionToChain(tx: UnsignedHydratedTransaction): Promise<[Hash, SignedHydratedTransactionWithHashMeta]> {\n const connection = this.connectionInstance\n\n const signer = this.signerInstance\n const runner = assertEx(connection.runner, () => 'No runner available on connection')\n const signedTx = await signer.signTransaction(tx)\n await this.addPayloadsToDataLakes(signedTx[1])\n return [await runner.broadcastTransaction(\n [signedTx[0], signedTx[1]],\n ), signedTx]\n }\n\n async confirmSubmittedTransaction(txHash: Hash, options?: ConfirmSubmittedTransactionOptions): Promise<SignedHydratedTransaction> {\n return await confirmSubmittedTransaction(\n assertEx(this.connectionInstance.viewer, () => 'Connection viewer is undefined'),\n txHash,\n options,\n )\n }\n\n /** @deprecated use connectionInstance instead */\n connection(): Promisable<XyoConnection> {\n return this.connectionInstance\n }\n\n removeDataLake(index: number): void {\n this._dataLakes[index] = null\n }\n\n async send(to: Address, amount: AttoXL1, options?: TransactionOptions): Promise<Hash> {\n return await this.sendMany({ [to]: amount }, options)\n }\n\n async sendMany(transfers: Record<Address, AttoXL1>, options?: TransactionOptions): Promise<Hash> {\n // eslint-disable-next-line sonarjs/deprecation\n const from = await (await this.signer()).address()\n const hexTransfers: Record<Address, Hex> = Object.fromEntries(\n Object.entries(transfers).map(([address, amount]) => ([\n address, BigIntToJsonZod.parse(amount),\n ])),\n )\n const transfer = new PayloadBuilder<Transfer>({ schema: TransferSchema }).fields({\n from,\n transfers: hexTransfers,\n epoch: Date.now(),\n }).build()\n const [hash] = await this.addPayloadsToChain([transfer], [], options)\n return hash\n }\n\n /** @deprecated use signerInstance instead */\n signer(): Promisable<XyoSigner> {\n return this.signerInstance\n }\n\n protected async addPayloadsToDataLakes(payloads: WithHashMeta<Payload>[]): Promise<void> {\n await Promise.all(this._dataLakes.map(async (dataLake) => {\n await Promise.all(payloads.map(async (payload) => {\n await dataLake?.set(payload._hash, payload)\n }))\n }))\n }\n}\n","import { type Hash } from '@xylabs/sdk-js'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { type SignedHydratedBlock, type SignedHydratedTransaction } from '@xyo-network/xl1-protocol'\n\nimport {\n AbstractCreatableProvider, creatableProvider, CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\nimport { hydratedBlockToPayloadBundle, hydratedTransactionToPayloadBundle } from '../../model/index.ts'\nimport { type MempoolRunner, MempoolRunnerMoniker } from '../../runners/index.ts'\n\nexport interface SimpleMempoolRunnerParams extends CreatableProviderParams {\n pendingBlocksArchivist: ArchivistInstance\n pendingTransactionsArchivist: ArchivistInstance\n}\n\n@creatableProvider()\nexport class SimpleMempoolRunner extends AbstractCreatableProvider<SimpleMempoolRunnerParams> implements MempoolRunner {\n static readonly defaultMoniker = MempoolRunnerMoniker\n static readonly monikers = [MempoolRunnerMoniker]\n moniker = SimpleMempoolRunner.defaultMoniker\n\n protected get pendingBlocksArchivist() {\n return this.params.pendingBlocksArchivist\n }\n\n protected get pendingTransactionsArchivist() {\n return this.params.pendingTransactionsArchivist\n }\n\n async submitBlocks(blocks: SignedHydratedBlock[]): Promise<Hash[]> {\n const bundles = await Promise.all(blocks.map(async ([bw, payloads]) => {\n return hydratedBlockToPayloadBundle([\n await PayloadBuilder.addHashMeta(bw),\n await PayloadBuilder.addHashMeta(payloads),\n ])\n }))\n const inserted = await this.pendingBlocksArchivist.insert(bundles)\n return inserted.map(p => p._hash)\n }\n\n async submitTransactions(transactions: SignedHydratedTransaction[]): Promise<Hash[]> {\n const bundles = await Promise.all(transactions.map(async ([tx, payloads]) => {\n return hydratedTransactionToPayloadBundle([\n await PayloadBuilder.addHashMeta(tx),\n await PayloadBuilder.addHashMeta(payloads),\n ])\n }))\n const inserted = await this.pendingTransactionsArchivist.insert(bundles)\n return inserted.map(p => p._hash)\n }\n}\n","import {\n creatable,\n exists, isDefined, isHash,\n} from '@xylabs/sdk-js'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport {\n isHashMeta, isPayloadBundle, type Sequence,\n} from '@xyo-network/payload-model'\nimport type { SignedHydratedBlockWithHashMeta, SignedHydratedTransactionWithHashMeta } from '@xyo-network/xl1-protocol'\n\nimport { AbstractCreatableProvider, CreatableProviderParams } from '../../CreatableProvider/index.ts'\nimport { bundledPayloadToHydratedBlock, bundledPayloadToHydratedTransaction } from '../../model/index.ts'\nimport {\n type MempoolViewer,\n MempoolViewerMoniker,\n type PendingTransactionsOptions,\n} from '../../viewers/index.ts'\n\nexport interface SimpleMempoolViewerParams extends CreatableProviderParams {\n pendingBlocksArchivist: ArchivistInstance\n pendingTransactionsArchivist: ArchivistInstance\n}\n\n@creatable()\nexport class SimpleMempoolViewer extends AbstractCreatableProvider<SimpleMempoolViewerParams> implements MempoolViewer {\n static readonly defaultMoniker = MempoolViewerMoniker\n static readonly monikers = [MempoolViewerMoniker]\n moniker = SimpleMempoolViewer.defaultMoniker\n\n protected get pendingBlocksArchivist() {\n return this.params.pendingBlocksArchivist\n }\n\n protected get pendingTransactionsArchivist() {\n return this.params.pendingTransactionsArchivist\n }\n\n async pendingBlocks({ cursor: providedCursor }: PendingTransactionsOptions = {}): Promise<SignedHydratedBlockWithHashMeta[]> {\n let cursor: Sequence | undefined = undefined\n if (isHash(providedCursor)) {\n const [p] = await this.pendingBlocksArchivist.get([providedCursor])\n if (isDefined(p)) {\n cursor = p._sequence\n }\n }\n const bundles = await this.pendingBlocksArchivist.next({\n order: 'asc', limit: 100, cursor,\n })\n const filteredBundles = bundles.filter(isPayloadBundle).filter(isHashMeta)\n return (await Promise.all(filteredBundles.map(async bundle => await bundledPayloadToHydratedBlock(bundle)))).filter(exists)\n }\n\n async pendingTransactions({ cursor: providedCursor }: PendingTransactionsOptions = {}): Promise<SignedHydratedTransactionWithHashMeta[]> {\n let cursor: Sequence | undefined = undefined\n if (isHash(providedCursor)) {\n const [p] = await this.pendingTransactionsArchivist.get([providedCursor])\n if (isDefined(p)) {\n cursor = p._sequence\n }\n }\n this.logger?.info(`Fetching pending transactions from cursor: ${cursor}`)\n const bundles = await this.pendingTransactionsArchivist.next({\n order: 'asc', limit: 100, cursor,\n })\n this.logger?.info(`Fetched pending transactions: ${bundles.length} bundles`)\n const filteredBundles = bundles.filter(isPayloadBundle).filter(isHashMeta)\n this.logger?.info(`Filtered pending transactions: ${JSON.stringify(bundles, null, 2)} filteredBundles`)\n const result = (await Promise.all(filteredBundles.map(async bundle => await bundledPayloadToHydratedTransaction(bundle)))).filter(exists)\n this.logger?.info(`Converted pending transactions: ${JSON.stringify(result, null, 2)} results`)\n return result\n }\n}\n","import { isUndefined } from '@xylabs/sdk-js'\nimport type {\n GatewayName,\n NetworkStatus,\n} from '@xyo-network/xl1-protocol'\nimport { isNetworkStatus } from '@xyo-network/xl1-protocol'\nimport axios from 'axios'\n\nimport type { XyoNetwork } from '../../provider/index.ts'\nimport {\n errorStatus, StatusNetworks, unknownStatus,\n} from './lib/index.ts'\n\nexport class SimpleXyoNetwork implements XyoNetwork {\n protected readonly _networkId: GatewayName\n\n constructor(networkId: GatewayName) {\n this._networkId = networkId\n }\n\n async status(): Promise<NetworkStatus> {\n const statusNetwork = StatusNetworks[this._networkId]\n if (isUndefined(statusNetwork)) {\n throw new Error(`Unknown status network ID: ${this._networkId}`)\n }\n\n return await this.makeRequest(statusNetwork.statusUrl)\n }\n\n private async makeRequest(url: string): Promise<NetworkStatus> {\n try {\n const response = await axios.get(url)\n if (isNetworkStatus(response.data)) {\n return response.data\n } else {\n if (response.status === 200) {\n console.error('Unknown network status response:', response.data)\n\n return unknownStatus\n }\n return errorStatus\n }\n } catch (error) {\n console.error('Error fetching network status:', error)\n return errorStatus\n }\n }\n}\n","import type { NetworkStatus } from '@xyo-network/xl1-protocol'\nimport { NetworkStatusSchema } from '@xyo-network/xl1-protocol'\n\nexport const unknownStatus: NetworkStatus = {\n description: 'Unknown Network Status',\n schema: NetworkStatusSchema,\n state: 'unknown',\n}\n\nexport const errorStatus: NetworkStatus = {\n description: 'Error Fetching Network Status',\n schema: NetworkStatusSchema,\n state: 'unknown',\n}\n","import type { GatewayName } from '@xyo-network/xl1-protocol'\n\nexport type StatusNetwork = {\n id: GatewayName\n statusUrl: string\n}\n\nexport const MainNetworkStats: StatusNetwork = {\n id: 'mainnet' as GatewayName,\n statusUrl: 'https://xyo.network/chain-network-status-mainnet.json',\n}\n\nexport const SequenceNetworkStats: StatusNetwork = {\n id: 'sequence' as GatewayName,\n statusUrl: 'https://beta.xyo.network/chain-network-status-sequence.json',\n}\n\nexport const LocalNetworkStats: StatusNetwork = {\n id: 'local' as GatewayName,\n statusUrl: 'http://localhost:3002/chain-network-status-local.json',\n}\n\nexport const StatusNetworks: Record<GatewayName, StatusNetwork> = {\n ['mainnet' as GatewayName]: MainNetworkStats,\n ['sequence' as GatewayName]: SequenceNetworkStats,\n ['local' as GatewayName]: LocalNetworkStats,\n}\n","import { assertEx } from '@xylabs/sdk-js'\n\nimport type {\n CaveatTypes,\n InvokerPermission, PermissionRequest, RequestedPermission, XyoPermissions,\n} from '../../provider/index.ts'\nimport type { Invoker, PermissionsStore } from './store/index.ts'\n\n/**\n * In-memory implementation of XyoPermissions for testing or ephemeral use cases.\n * Does not persist data beyond the lifetime of the instance.\n * Assumes all permission requests are granted and revocations always succeed.\n */\nexport class SimpleXyoPermissions implements XyoPermissions {\n invoker: Invoker\n private _store: PermissionsStore\n\n constructor(store: PermissionsStore) {\n this._store = store\n this.invoker = store.invoker\n }\n\n get store(): PermissionsStore {\n return assertEx(this._store, () => 'Store must be defined to get permissions')\n }\n\n async getPermissions(): Promise<InvokerPermission[]> {\n return await this.store.getPermissions()\n }\n\n // assumed the permissions are always granted\n async requestPermissions(permissions: PermissionRequest[]): Promise<RequestedPermission[]> {\n await Promise.resolve()\n // Flatten PermissionRequest[] into InvokerPermission[]\n const newPermissions: InvokerPermission[] = []\n const now = Date.now()\n for (const req of permissions) {\n for (const parentCapability in req) {\n newPermissions.push({\n invoker: this.invoker,\n parentCapability,\n caveats: Object.entries(req[parentCapability]).map(([type, value]) => ({ type: type as CaveatTypes, value })),\n date: now,\n })\n }\n }\n\n // Update or add permissions in the store\n const existingPermissions = await this.getPermissions()\n for (const perm of newPermissions) {\n const idx = existingPermissions.findIndex(\n p => p.invoker === perm.invoker && p.parentCapability === perm.parentCapability,\n )\n if (idx === -1) {\n existingPermissions.push(perm)\n } else {\n existingPermissions[idx] = perm\n }\n }\n await this.store.setPermissions(existingPermissions)\n\n // Return the granted permissions in RequestedPermission shape\n return newPermissions.map(({ parentCapability, date }) => ({ parentCapability, date }))\n }\n\n // Assumes the permissions are always revoked\n async revokePermissions(permissions: PermissionRequest): Promise<RequestedPermission[]> {\n const existingPermissions = await this.getPermissions()\n const revoked: RequestedPermission[] = []\n for (const parentCapability in permissions) {\n const idx = existingPermissions.findIndex(\n p => p.invoker === this.invoker && p.parentCapability === parentCapability,\n )\n if (idx !== -1) {\n const removed = existingPermissions.splice(idx, 1)[0]\n revoked.push({ parentCapability: removed.parentCapability, date: removed.date })\n }\n }\n await this.store.setPermissions(existingPermissions)\n return revoked\n }\n}\n","import { assertEx } from '@xylabs/sdk-js'\n\nimport type { InvokerPermission } from '../../../provider/index.ts'\nimport type { Invoker, PermissionsStore } from './PermissionsStore.ts'\n\n/**\n * In-memory implementation of XyoPermissions for testing or ephemeral use cases.\n * Does not persist data beyond the lifetime of the instance.\n * Assumes all permission requests are granted and revocations always succeed.\n */\nexport class MemoryPermissionsStore implements PermissionsStore {\n private _invoker: Invoker\n private permissions: InvokerPermission[] = []\n\n constructor(invoker: Invoker) {\n this._invoker = invoker\n }\n\n get invoker(): Invoker {\n return assertEx(this._invoker, () => 'Invoker must be defined to get permissions')\n }\n\n async getPermissions(): Promise<InvokerPermission[]> {\n await Promise.resolve()\n return this.permissions\n }\n\n async setPermissions(permissions: InvokerPermission[]): Promise<void> {\n await Promise.resolve()\n this.permissions = permissions\n }\n}\n","import {\n assertEx,\n type Hash,\n} from '@xylabs/sdk-js'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { SignedHydratedTransactionWithStorageMeta } from '@xyo-network/xl1-protocol'\n\nimport type { CreatableProviderParams } from '../../CreatableProvider/index.ts'\nimport { AbstractCreatableProvider } from '../../CreatableProvider/index.ts'\nimport { hydratedTransactionToPayloadBundle } from '../../model/index.ts'\nimport { type XyoRunner, XyoRunnerMoniker } from '../../provider/index.ts'\nimport { type MempoolRunner, MempoolRunnerMoniker } from '../../runners/index.ts'\n\nexport interface SimpleXyoRunnerParams extends CreatableProviderParams {\n pendingTransactionsArchivist: ArchivistInstance\n}\n\nexport class SimpleXyoRunner extends AbstractCreatableProvider<SimpleXyoRunnerParams> implements XyoRunner {\n static readonly defaultMoniker = XyoRunnerMoniker\n static readonly monikers = [XyoRunnerMoniker]\n moniker = SimpleXyoRunner.defaultMoniker\n\n private _mempoolRunner?: MempoolRunner\n\n get mempool() {\n return this._mempoolRunner!\n }\n\n static override async paramsHandler(params?: SimpleXyoRunnerParams) {\n return {\n ...await super.paramsHandler(params),\n pendingTransactionsArchivist: assertEx(\n params?.pendingTransactionsArchivist,\n () => 'A pendingTransactionsArchivist is required to create a SimpleXyoRunner',\n ),\n }\n }\n\n async broadcastTransaction(transaction: SignedHydratedTransactionWithStorageMeta): Promise<Hash> {\n const archivist = this.params.pendingTransactionsArchivist\n const bundle = hydratedTransactionToPayloadBundle(transaction)\n await archivist.insert([bundle])\n await this.mempool.submitTransactions([transaction])\n const hash = await PayloadBuilder.hash(transaction[0])\n this.logger?.info(`Broadcasted transaction with hash ${hash}`)\n return hash\n }\n\n override async createHandler() {\n await super.createHandler()\n this._mempoolRunner = await this.locator.getInstance<MempoolRunner>(MempoolRunnerMoniker)\n }\n}\n","import type { Address, Promisable } from '@xylabs/sdk-js'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { type Payload } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload, ChainId, SignedHydratedTransactionWithHashMeta,\n SignedTransactionBoundWitness, TransactionFeesBigInt,\n UnsignedTransactionBoundWitness,\n XL1BlockNumber,\n} from '@xyo-network/xl1-protocol'\nimport { SignedHydratedTransactionWithHashMetaZod } from '@xyo-network/xl1-protocol'\n\nimport type { XyoSigner } from '../../provider/index.ts'\nimport { buildTransaction, signTransaction } from '../../transaction/index.ts'\n\nexport class SimpleXyoSigner implements XyoSigner {\n protected readonly _account: AccountInstance\n\n constructor(account: AccountInstance) {\n this._account = account\n }\n\n address(): Promisable<Address> {\n return this._account.address\n }\n\n async createSignedTransaction(\n chain: ChainId,\n elevatedPayloads: AllowedBlockPayload[],\n additionalPayloads: Payload[],\n nbf: XL1BlockNumber,\n exp: XL1BlockNumber,\n fees: TransactionFeesBigInt,\n from?: Address,\n ): Promise<SignedTransactionBoundWitness> {\n const fromAddress = from ?? this._account.address\n const transaction = await buildTransaction(\n chain,\n elevatedPayloads,\n additionalPayloads,\n this._account,\n nbf,\n exp,\n fromAddress,\n fees,\n )\n return transaction[0]\n }\n\n async signTransaction(tx: [UnsignedTransactionBoundWitness, Payload[]]): Promise<SignedHydratedTransactionWithHashMeta> {\n const txBW = await signTransaction(tx[0], this._account)\n return SignedHydratedTransactionWithHashMetaZod.parse([await PayloadBuilder.addStorageMeta(txBW), await PayloadBuilder.addStorageMeta(tx[1])])\n }\n}\n","import { isDefined } from '@xylabs/sdk-js'\n\nimport {\n AbstractCreatableProvider, creatableProvider, CreatableProviderParams,\n} from '../../CreatableProvider/index.ts'\nimport { Position } from '../../model/index.ts'\nimport {\n StakeEvent, StakeEventFilter, StakeEventName, StakeEventsViewer,\n StakeEventsViewerMoniker,\n} from '../../viewers/index.ts'\n\nexport interface SimpleStakeEventsParams extends CreatableProviderParams {\n positions: Position[]\n}\n\n@creatableProvider()\nexport class SimpleStakeEventsViewer extends AbstractCreatableProvider<SimpleStakeEventsParams> implements StakeEventsViewer {\n static readonly defaultMoniker = StakeEventsViewerMoniker\n static readonly monikers = [StakeEventsViewerMoniker]\n moniker = SimpleStakeEventsViewer.defaultMoniker\n\n protected get positions() {\n return this.params.positions\n }\n\n positionCount(range: [number, number | 'latest']): number {\n return this.positionsFromRange(range).length\n }\n\n stakeEvents<TName extends StakeEventName>(range: [number, number | 'latest'], { name }: StakeEventFilter<TName> = {}): StakeEvent<TName>[] {\n const positions = this.positionsFromRange(range)\n const events = this.eventsFromPositions(positions)\n if (isDefined(name)) {\n return events.filter((event): event is StakeEvent<TName> => event.name === name)\n }\n return events as StakeEvent<TName>[]\n }\n\n protected override async startHandler(): Promise<void> {\n await super.startHandler()\n }\n\n private eventsFromPositions(positions: Position[]): StakeEvent<StakeEventName>[] {\n const events = positions.map((position) => {\n const events: StakeEvent<StakeEventName>[] = [{\n name: 'StakeAdded',\n time: position.addBlock,\n args: {\n staker: position.staker,\n staked: position.staked,\n amount: position.amount,\n id: position.id,\n },\n }]\n if (position.removeBlock !== 0) {\n events.push({\n name: 'StakeRemoved',\n time: position.removeBlock,\n args: {\n staker: position.staker,\n staked: position.staked,\n amount: position.amount,\n id: position.id,\n },\n })\n }\n if (position.withdrawBlock !== 0) {\n events.push({\n name: 'StakeWithdrawn',\n time: position.withdrawBlock,\n args: {\n staker: position.staker,\n staked: position.staked,\n amount: position.amount,\n id: position.id,\n },\n })\n }\n return events\n })\n return events.flat()\n }\n\n private positionsFromRange(range: [number, number | 'latest']): Position[] {\n const startBlock = range[0]\n const endBlock = range[1] === 'latest' ? Number.MAX_SAFE_INTEGER : range[1]\n const filteredPositions = this.positions?.filter((position) => {\n return position.addBlock <= endBlock && (position.removeBlock === 0 || position.removeBlock >= startBlock)\n }) ?? []\n return filteredPositions\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport {\n asHash, assertEx, isDefined,\n} from '@xylabs/sdk-js'\nimport type { TimeDomain, TimePayload } from '@xyo-network/xl1-protocol'\nimport {\n asTimePayload, asXL1BlockNumber, TimeSchema,\n} from '@xyo-network/xl1-protocol'\nimport type { Provider } from 'ethers'\n\nimport type { CreatableProviderParams } from '../../CreatableProvider/index.ts'\nimport { AbstractCreatableProvider } from '../../CreatableProvider/index.ts'\nimport {\n type BlockViewer, BlockViewerMoniker, type TimeSyncViewer, TimeSyncViewerMoniker,\n} from '../../viewers/index.ts'\n\nexport interface SimpleTimeSyncViewerParams extends CreatableProviderParams {\n ethProvider?: Provider\n}\n\nexport class SimpleTimeSyncViewer extends AbstractCreatableProvider<SimpleTimeSyncViewerParams> implements TimeSyncViewer {\n static readonly defaultMoniker = TimeSyncViewerMoniker\n static readonly monikers = [TimeSyncViewerMoniker]\n moniker = SimpleTimeSyncViewer.defaultMoniker\n\n private _blockViewer?: BlockViewer\n\n protected get blockViewer() {\n return this._blockViewer!\n }\n\n protected get ethProvider() {\n return this.params.ethProvider\n }\n\n async convertTime(fromDomain: TimeDomain, toDomain: TimeDomain, from: number): Promise<number> {\n switch (fromDomain) {\n case 'xl1': {\n const [block, payloads] = assertEx(await this.blockViewer.blockByNumber(asXL1BlockNumber(from, true)), () => 'Block not found')\n const timeSchemaIndex = block.payload_schemas.indexOf(TimeSchema)\n const hash = timeSchemaIndex === -1 ? undefined : block.payload_hashes[timeSchemaIndex]\n const timePayload = asTimePayload(isDefined(hash) ? payloads.find(p => p._hash === hash) : undefined)\n if (timePayload === undefined) return 0\n switch (toDomain) {\n case 'xl1': {\n return timePayload.xl1 ?? 0\n }\n case 'epoch': {\n return timePayload.epoch ?? 0\n }\n case 'ethereum': {\n return timePayload.ethereum ?? 0\n }\n default: {\n throw new Error(`Unsupported to toDomain: ${toDomain}`)\n }\n }\n }\n default: {\n throw new Error(`Unsupported from fromDomain: ${fromDomain}`)\n }\n }\n }\n\n override async createHandler() {\n await super.createHandler()\n this._blockViewer = await this.locator.getInstance<BlockViewer>(BlockViewerMoniker)\n }\n\n async currentTime(domain: TimeDomain): Promise<[string, number]> {\n switch (domain) {\n case 'xl1': {\n return ['xl1', (await this.blockViewer.currentBlock())?.[0].block ?? -1]\n }\n case 'epoch': {\n return ['epoch', Date.now()]\n }\n case 'ethereum': {\n return ['ethereum', (await this.ethProvider?.getBlockNumber()) ?? 0]\n }\n default: {\n throw new Error(`Unknown time domain: ${domain}`)\n }\n }\n }\n\n async currentTimeAndHash(domain: TimeDomain): Promise<[number, Hash | null]> {\n switch (domain) {\n case 'xl1': {\n const [head] = await this.blockViewer.currentBlock()\n return [head.block, head._hash]\n }\n case 'epoch': {\n return [Date.now(), null]\n }\n case 'ethereum': {\n const provider = assertEx(this.ethProvider, () => 'Ethereum provider not configured')\n const blockNumber = (await provider.getBlockNumber()) ?? 0\n const block = await provider.getBlock(blockNumber)\n const blockHash = asHash(assertEx(block?.hash, () => 'Block hash not found'), true)\n return [blockNumber, blockHash]\n }\n default: {\n throw new Error(`Unknown time domain: ${domain}`)\n }\n }\n }\n\n async currentTimePayload(): Promise<TimePayload> {\n const [xl1, xl1Hash] = await this.currentTimeAndHash('xl1')\n const timePayload: TimePayload = {\n schema: TimeSchema,\n // this is for the previous block\n xl1,\n // this is for the previous block\n xl1Hash: assertEx(xl1Hash, () => 'No xl1 hash available from time sync service'),\n epoch: Date.now(),\n }\n if (isDefined(this.ethProvider)) {\n const [ethereum, ethHashOrNull] = await this.currentTimeAndHash('ethereum')\n const ethereumHash = asHash(ethHashOrNull, () => 'No ethereum hash available from time sync service')\n timePayload.ethereum = ethereum\n timePayload.ethereumHash = ethereumHash\n }\n return timePayload\n }\n}\n","import type {\n CreatableName, CreatableStatus, CreatableStatusReporter, Logger,\n} from '@xylabs/sdk-js'\n\nexport class LoggerStatusReporter implements CreatableStatusReporter {\n protected logger: Logger\n\n protected statusMap: Record<CreatableName, CreatableStatus> = {}\n\n constructor(logger: Logger) {\n this.logger = logger\n }\n\n report(name: CreatableName, status: CreatableStatus, progress?: number | Error): void {\n this.statusMap[name] = status\n const starting = (Object.entries(this.statusMap).map(([, value]): number => value === 'starting' ? 1 : 0)).reduce((a, b) => a + b, 0)\n const started = (Object.entries(this.statusMap).map(([, value]): number => value === 'started' ? 1 : 0)).reduce((a, b) => a + b, 0)\n this.logger.info(`${started}/${starting + started} ${name} status: ${status}`, { progress })\n }\n}\n","import type { CreatableName, CreatableStatus } from '@xylabs/sdk-js'\n\nimport { LoggerStatusReporter } from './ServiceStatus.ts'\n\n/**\n * Enum-like record for statuses with priority allowing\n * for determination of the aggregated status.\n */\nconst statusPriority: Record<CreatableStatus, number> = {\n error: 0,\n stopped: 1,\n stopping: 2,\n creating: 3,\n created: 4,\n starting: 5,\n started: 6,\n}\n\n/**\n * A sentinel status that represents the initial state\n * before any statuses are reported.\n * It is used to ensure that the monitor has a valid status\n * even when no statuses have been reported yet and to\n * prevent the system from showing an \"error\" state\n * when no statuses are available.\n */\nconst SENTINEL_STATUS: CreatableStatus = 'starting'\n\n/**\n * Given an array of statuses, this function reduces them\n * to the minimum status based on the defined priority.\n * @param statuses An array of statuses to reduce.\n * @returns The minimum status based on priority.\n */\nconst reduceToMinimumStatus = (statuses: CreatableStatus[]): CreatableStatus => {\n let minStatus: CreatableStatus = SENTINEL_STATUS\n let minPriority = Infinity\n\n for (const status of statuses) {\n const priority = statusPriority[status]\n if (priority < minPriority) {\n minPriority = priority\n minStatus = status\n }\n }\n return minStatus\n}\n\nexport type GlobalTransitionHandler = {\n from?: CreatableStatus\n handler: (from: CreatableStatus, to: CreatableStatus) => void\n to?: CreatableStatus\n}\nexport type TransitionHandler = GlobalTransitionHandler & {\n name?: string\n}\n\nexport class RuntimeStatusMonitor extends LoggerStatusReporter {\n private globalTransitions: GlobalTransitionHandler[] = []\n private transitions: TransitionHandler[] = []\n\n getGlobalStatus(): CreatableStatus {\n // If no statuses have been reported, return the sentinel status\n if (Object.keys(this.statusMap).length === 0) return SENTINEL_STATUS\n return reduceToMinimumStatus(Object.values(this.statusMap))\n }\n\n getStatus(name: CreatableName): CreatableStatus | undefined {\n return this.statusMap[name]\n }\n\n onGlobalTransition(match: { from?: CreatableStatus; to?: CreatableStatus }, handler: (from: CreatableStatus, to: CreatableStatus) => void) {\n this.globalTransitions.push({ ...match, handler })\n }\n\n /**\n * Register a callback to be called on a specific transition.\n */\n onTransition(match: { from?: CreatableStatus; name: string; to?: CreatableStatus }, handler: (from: CreatableStatus, to: CreatableStatus) => void) {\n this.transitions.push({ ...match, handler })\n }\n\n override report(name: CreatableName, status: CreatableStatus, progress?: number | Error): void {\n // Capture the current status before updating\n const previous = this.statusMap[name]\n const previousGlobal = this.getGlobalStatus()\n\n // Update the status map with the new status\n super.report(name, status, progress)\n\n // If the status hasn't changed, do not run handlers\n if (previous === status) return\n this.runTransitions(this.transitions, previous, status, name)\n\n // If the global status hasn't changed, do not run handlers\n const globalStatus = this.getGlobalStatus()\n if (previousGlobal === globalStatus) return\n this.runTransitions(this.globalTransitions, previousGlobal, globalStatus)\n }\n\n private runTransitions(\n transitions: (TransitionHandler | GlobalTransitionHandler)[],\n prev: CreatableStatus,\n next: CreatableStatus,\n name?: string,\n ) {\n for (const {\n from, to, name: matchName, handler,\n } of transitions as TransitionHandler[]) {\n if ((matchName === undefined || matchName === name)\n && (from === undefined || from === prev)\n && (to === undefined || to === next)) {\n handler(prev, next)\n }\n }\n }\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { XL1BlockNumber } from '@xyo-network/xl1-protocol'\nimport { asTimePayload, TimeSchema } from '@xyo-network/xl1-protocol'\n\nimport { hashFromBlockNumber, hydrateBlock } from '../../block/index.ts'\nimport type { ChainContextRead } from '../../model/index.ts'\n\nexport async function xl1BlockNumberToEthBlockNumber(context: ChainContextRead, xl1BlockNumber: XL1BlockNumber): Promise<number> {\n const blockHash = await hashFromBlockNumber(context, xl1BlockNumber)\n const hydratedBlock = await hydrateBlock(context.store, blockHash)\n const timePayload = asTimePayload(hydratedBlock[1].find(p => p.schema === TimeSchema), { required: true })\n return assertEx(timePayload.ethereum, () => 'No ethereum timestamp found on block')\n}\n","import { HDWallet } from '@xyo-network/wallet'\n\nimport { DEFAULT_WALLET_PATH } from './paths.ts'\n\n/**\n * Initializes a wallet to the default XYO path from a mnemonic phrase\n * @param walletPhrase The mnemonic phrase for the wallet\n * @returns A wallet initialized to the default XYO path using the provided phrase\n */\nexport const generateXyoBaseWalletFromPhrase = (walletPhrase: string) => {\n const wallet = HDWallet.fromPhrase(walletPhrase, DEFAULT_WALLET_PATH)\n return wallet\n}\n","export const WALLET_COMPLIANCE = '44\\'' as const\n\nexport const COIN_TYPES = { Ethereum: '60\\'' } as const\n\nexport const ACCOUNT_TYPE = { GANACHE: '0\\'', XYO: '0\\'' } as const\n\nexport const CHANGE_ADDRESS = { META_MASK: '0', XYO: '0' } as const\n\nexport const ADDRESS_INDEX = { META_MASK: '0', XYO: '0' } as const\n\nexport const DEFAULT_WALLET_PATH = `m/${WALLET_COMPLIANCE}/${COIN_TYPES.Ethereum}/${ACCOUNT_TYPE.XYO}/${CHANGE_ADDRESS.XYO}`\n"],"mappings":"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","names":["allHashesPresent","hashes","payloads","payloadHashes","Set","map","p","_hash","every","hash","has","assertEx","isTransactionBoundWitness","blockPayloadsFromHydratedBlock","block","payload_hashes","map","hash","assertEx","find","p","_hash","filter","x","isTransactionBoundWitness","toHydratedBlock","flattenHydratedBlock","hydratedBlock","blk","blkPayloads","tryUnflattenHydratedBlock","flattened","at","payloads","slice","toHydratedBlock","unflattenHydratedBlock","flattenHydratedBlocks","hydratedBlocks","flatMap","blk","flattenHydratedBlock","assertEx","asBlockBoundWitnessWithStorageMeta","isTransactionBoundWitnessWithStorageMeta","hydrateBlock","chainMap","hash","maxDepth","minDepth","assertEx","bw","asBlockBoundWitnessWithStorageMeta","get","blkPayloads","getMany","payload_hashes","allHashesPresent","transactions","filter","isTransactionBoundWitnessWithStorageMeta","transactionsPayloadHashes","flatMap","tx","transactionsPayloads","allPayloadsHashes","Set","p","_hash","allPayloads","allPayloadsFiltered","has","isTransactionBoundWitnessWithStorageMeta","transactionsFromHydratedBlock","block","filter","isTransactionBoundWitnessWithStorageMeta","assertEx","isBlockBoundWitnessWithStorageMeta","isTransactionBoundWitnessWithStorageMeta","tryHydrateBlock","archivist","hash","maxDepth","assertEx","bw","get","find","isBlockBoundWitnessWithStorageMeta","undefined","blkPayloads","payload_hashes","transactions","filter","isTransactionBoundWitnessWithStorageMeta","transactionsPayloadHashes","flatMap","tx","transactionsPayloads","allPayloadsHashes","Set","p","_hash","allPayloads","allPayloadsFiltered","has","asHash","isDefined","toSafeJsonString","asSignedBlockBoundWitnessWithStorageMeta","SignedBlockBoundWitnessWithHashMetaZod","StepSizes","isDefined","isUndefined","LRUCache","LruCacheMap","lruCache","options","LRUCache","max","clear","delete","id","get","getMany","results","key","value","undefined","push","has","set","data","setMany","entries","isDefined","MemoryMap","map","Map","clear","delete","id","get","getMany","ids","results","data","isDefined","push","has","set","setMany","entries","key","value","asXL1BlockNumber","StepSizes","blockRangeSteps","range","steps","result","step","stepSize","StepSizes","startOfFirstStepCandidate","startOfFirstStep","asXL1BlockNumber","name","block","push","getWindowedChain","blockViewer","maxWindowSize","previousChain","newBlocks","currentBlock","console","log","_hash","head","block","unshift","previousBlockHash","previous","blockByHash","newChain","slice","length","assertEx","exists","toAddress","asTransfer","isTransfer","XYO_STEP_REWARD_ADDRESS","hexToBigInt","toAddress","mergeTransfers","transfers","result","transfer","from","to","value","Object","entries","typedTo","toAddress","hexToBigInt","toAddress","StepSizes","keccak256","completedStepRewardAddress","block","step","resolvedStepSize","StepSizes","length","addressKey","TextEncoder","encode","toAddress","keccak256","slice","prefix","toAddress","isDefined","keccak256","derivedReceiveAddress","address","scope","addressKey","TextEncoder","encode","isDefined","toAddress","keccak256","slice","prefix","asXL1BlockRange","StepSizes","stepBlockRange","block","step","stepSize","StepSizes","start","asXL1BlockRange","name","assertEx","StepSizes","stepTransferIndex","block","step","rewardTransferCount","rewardTransferIndex","i","StepSizes","length","stepSize","assertEx","assertEx","StepSizes","isSignedBlockBoundWitnessWithStorageMeta","DEFAULT_NEXT_OPTIONS","limit","findMostRecentBlock","chainArchivist","nextOptions","maxIterations","Number","POSITIVE_INFINITY","mostRecentBlock","cursor","batch","iterations","next","order","blocks","filter","isSignedBlockBoundWitnessWithStorageMeta","last","at","_sequence","length","assertEx","hydratedBlockByNumber","context","blockNumber","Error","Number","MAX_SAFE_INTEGER","cacheKey","withContextCacheResponse","block","assertEx","blockFromBlockNumber","hydrateBlock","store","_hash","stepRewardBlock","context","block","step","assertEx","StepSizes","hydratedBlockByNumber","chainStepRewardAddress","context","block","step","hydratedBlock","stepRewardBlock","transferIndex","transferCount","stepTransferIndex","blockBw","payloads","transfersFromPool","filter","isTransfer","map","p","asTransfer","exists","t","from","XYO_STEP_REWARD_ADDRESS","fromEntries","Object","entries","mergeTransfers","sortedTransferAmounts","toSorted","a","b","assertEx","length","_hash","toAddress","assertEx","isDefined","asAttoXL1","asXL1BlockRange","isTransfer","XYO_STEP_REWARD_ADDRESS","AsObjectFactory","isPayloadOfSchemaType","AddressPairSchema","isAddressPairPayload","asAddressPairPayload","create","asOptionalAddressPairPayload","createOptional","hexToBigInt","toAddress","span","isTransfer","netBalancesForPayloads","payloads","span","balances","payload","isTransfer","from","address","amount","Object","entries","transfers","toAddress","hexToBigInt","hexToBigInt","toAddress","span","isTransfer","netSchemasForPayloads","payloads","span","balances","payload","isTransfer","from","address","amount","Object","entries","transfers","toAddress","hexToBigInt","hexToBigInt","span","isTransfer","netTransfersForPayloads","payloads","span","transfers","payload","isTransfer","from","to","amount","Object","entries","hexToBigInt","stepInRange","step","range","stepRange","stepBlockRange","stepRewardTotal","context","block","multipliers","cacheKey","isDefined","withContextCacheResponse","blockBw","payloads","stepRewardBlock","assertEx","transferIndex","stepTransferIndex","stepTransfer","find","p","isTransfer","from","XYO_STEP_REWARD_ADDRESS","_hash","rewards","netTransfersForPayloads","sortedTransfers","Object","entries","toSorted","a","b","result","asAttoXL1","rangeKey","numerator","denominator","rangeParts","split","map","Number","asXL1BlockRange","name","asAttoXL1","asXL1BlockRange","XL1_NETWORK_STAKING_GENESIS_PERIOD_END_EPOCH","XL1_NETWORK_STAKING_GENESIS_PERIOD_END_XL1_BLOCK","stepsRewardTotalGenesisPeriod","context","multipliers","stepSizes","range","asXL1BlockRange","XL1_NETWORK_STAKING_GENESIS_PERIOD_END_XL1_BLOCK","name","stepsRewardTotalRange","steps","blockRangeSteps","stepsRewardTotal","totalRewards","step","stepTotal","stepRewardTotal","asAttoXL1","assertEx","isArray","asBlockNumber","asTimePayload","isTimePayload","functionName","externalBlockNumberFromXL1BlockNumber","context","blockViewer","xl1BlockNumber","externalTimeName","externalGenesisTime","timeBudgetMs","cacheKey","withContextCacheResponse","payloads","blockByNumber","assertEx","isArray","timePayload","asTimePayload","find","isTimePayload","asBlockNumber","name","externalBlockRangeFromXL1BlockRange","context","blockViewer","xl1BlockRange","externalTimeName","start","externalBlockNumberFromXL1BlockNumber","end","externalBlockRangeFromStep","context","blockViewer","stepIdentity","cacheKey","toStepIdentityString","withContextCacheResponse","xl1BlockRange","stepBlockRange","externalBlockRangeFromXL1BlockRange","timeBudgetMs","isDefined","mapToMapType","map","get","key","has","set","value","setMany","entries","delete","clear","getMany","keys","result","isDefined","push","Symbol","iterator","entry","isDefined","readPayloadMapFromStore","store","isReadArchivist","get","hash","getMany","hashes","has","isDefined","payloadMapFromStore","isReadWriteArchivist","clear","delete","id","set","_id","data","insert","setMany","entries","map","e","toFixedPoint","asAttoXL1","rewardFromBlockNumber","places","blockNumber","startingReward","asAttoXL1","toFixedPoint","blocksPerStep","stepFactorNumerator","stepFactorDenominator","minBlockReward","creatorReward","step","Math","floor","stepExp","BigInt","poweredNumerator","poweredDenominator","reward","isDefined","mergedAddRemoveStakeEventsByStaker","chainEvents","range","staked","staker","addedEvents","removedEvents","Promise","all","stakeEvents","name","args","result","toSorted","a","b","time","activeStakeAtTimeByAddress","chain","staked","time","staker","stakeEvents","mergedAddRemoveStakeEventsByStaker","toSorted","a","b","result","event","args","isDefined","name","amount","isUndefined","mergedAddRemoveStakeEventsByPosition","chainEvents","range","position","addedEvents","removedEvents","Promise","all","stakeEvents","name","args","id","result","toSorted","a","b","time","activeStakeAtTimeByPosition","chainStakeEvents","externalTime","position","stakeEvents","mergedAddRemoveStakeEventsByPosition","toSorted","a","b","time","result","event","isUndefined","Number","args","id","name","amount","toAddress","allStakersForRange","chain","externalRange","staked","mergedEvents","mergedAddRemoveStakeEventsByStaker","resultWithZeros","event","staker","toAddress","args","name","amount","nonZero","Object","entries","filter","map","address","result","allStakersForStep","context","blockViewer","stepContext","staked","xl1BlockRange","stepBlockRange","allStakersForRange","stake","stakeEvents","externalBlockRangeFromXL1BlockRange","isDefined","asBlockNumber","weightedStakeForRangeByPosition","context","blockViewer","externalRange","positionId","cacheKey","isDefined","withContextCacheResponse","weightedStakeSum","mergedEvents","mergedAddRemoveStakeEventsByPosition","stake","stakeEvents","toSorted","a","b","time","currentTime","currentStake","event","BigInt","name","args","amount","asBlockNumber","positionCount","pos","networkStakeStepRewardPositionWeight","context","blockViewer","stepContext","position","result","weightedStakeForRangeByPosition","externalBlockRangeFromStep","timeBudget","name","logger","func","budget","status","start","Date","now","timer","setInterval","duration","warn","Math","max","undefined","result","clearInterval","isAllowedBlockPayload","ELEVATE_OPCODE","elevatedPayloads","tx","payloads","opCodes","script","filter","operation","startsWith","opCode","code","hash","split","elevatedPayload","find","payload","_hash","isAllowedBlockPayload","push","length","Error","scoreUncle","finalizedWindowedChain","blocks","length","findBestUncle","finalizedWindowedChain","uncles","scores","map","uncle","scoreUncle","toSorted","a","b","assertEx","exists","isTransactionBoundWitness","blocksToChains","blocks","chains","map","Map","block","set","_hash","uncle","previous","get","undefined","unshift","length","push","toValidUncle","_context","finalizedWindowedChain","possibleUncle","finalizedWindowStartBlockNumber","at","finalizedHead","assertEx","prunedPossibleUncle","filter","b","allUncleTransactions","flatMap","isTransactionBoundWitness","allFinalizedTransactions","txPossiblyBeforeWindow","find","tx","nbf","txExistsInWindow","finalTx","findUncles","context","chain","exists","contextCache","context","name","create","caches","isUndefined","MemoryMap","withContextCacheResponse","key","func","max","timeBudgetMs","cache","LruCacheMap","cacheResult","get","isDefined","result","timeBudget","logger","set","HashZod","zodIsFactory","XL1BlockRangeZod","z","ChainQualificationZod","z","object","head","HashZod","range","XL1BlockRangeZod","isChainQualification","zodIsFactory","ChainQualifiedRangeConfigZod","isChainQualifiedRangeConfig","ChainQualifiedHeadConfigZod","isChainQualifiedHeadConfig","ChainQualifiedConfigZod","union","isChainQualifiedConfig","ExtendChainQualifiedConfigZod","zodType","extend","ChainQualifiedZod","tuple","PayloadBuilder","asSignedBlockBoundWitnessWithHashMeta","bundledPayloadToHydratedBlock","payload","withHashMeta","PayloadBuilder","addHashMeta","payloads","tx","asSignedBlockBoundWitnessWithHashMeta","find","p","_hash","root","filter","PayloadBuilder","asSignedTransactionBoundWitnessWithHashMeta","bundledPayloadToHydratedTransaction","payload","withHashMeta","PayloadBuilder","addHashMeta","payloads","tx","asSignedTransactionBoundWitnessWithHashMeta","find","p","_hash","root","filter","PayloadBuilder","PayloadBundleSchema","hydratedBlockToPayloadBundle","transaction","root","_hash","bundle","payloads","flattenHydratedBlock","flatMap","p","PayloadBuilder","omitStorageMeta","schema","PayloadBundleSchema","fields","build","PayloadBuilder","PayloadBundleSchema","Account","asXL1BlockNumber","isAllowedBlockPayload","toHex","PayloadBuilder","TransferSchema","createTransferPayload","from","transfers","context","PayloadBuilder","schema","TransferSchema","fields","epoch","Date","now","Object","fromEntries","entries","map","k","v","toHex","build","assertEx","toHex","BoundWitnessBuilder","PayloadBuilder","defaultTransactionFees","buildTransaction","chain","onChainPayloads","offChainPayloads","signer","nbf","exp","from","fees","defaultTransactionFees","undefined","Array","isArray","Error","txBoundWitnessFields","base","toHex","gasLimit","gasPrice","priority","elevatedHashes","PayloadBuilder","hashes","script","elevatedHash","push","fields","assertEx","at","address","length","tx","txPayloads","BoundWitnessBuilder","meta","$signatures","payloads","signers","build","addHashMeta","buildRandomTransaction","chain","payloads","account","nbf","asXL1BlockNumber","exp","privatePayloadSchemas","receiverAddress","elevatedPayloads","filter","isAllowedBlockPayload","additionalPayloads","payload","sender","Account","random","length","receiver","address","transferPayload","createTransferPayload","push","hydratedTransaction","buildTransaction","p","includes","schema","toHex","BoundWitnessBuilder","PayloadBuilder","defaultTransactionFees","buildUnsignedTransaction","chain","onChainPayloads","offChainPayloads","nbf","exp","from","fees","defaultTransactionFees","txBoundWitnessFields","base","toHex","gasLimit","gasPrice","priority","elevatedHashes","PayloadBuilder","hashes","script","elevatedHash","push","fields","length","tx","txPayloads","BoundWitnessBuilder","meta","$signatures","payloads","build","delay","isDefined","DEFAULT_CONFIRMATION_ATTEMPTS","DEFAULT_DELAY_BETWEEN_ATTEMPTS","confirmSubmittedTransaction","viewer","txHash","options","attempts","maxAttempts","delay","attemptDelay","logger","log","tx","transactionByHash","undefined","isDefined","error","Error","assertEx","hydrateTypedBoundWitness","tryHydrateTypedBoundWitness","asSignedHydratedTransaction","isAllowedBlockPayload","isSignedTransactionBoundWitnessWithStorageMeta","tryHydrateTransaction","chainMap","hash","tryHydrateTypedBoundWitness","get","hashes","getMany","next","Error","isSignedTransactionBoundWitnessWithStorageMeta","hydrateTransaction","hydrateTypedBoundWitness","flattenHydratedTransaction","hydratedTransaction","tx","txPayloads","tryUnflattenHydratedTransaction","flattened","at","slice","asSignedHydratedTransaction","unflattenHydratedTransaction","flattenHydratedTransactions","hydratedTransactions","flatMap","tryHydrateElevatedTransaction","undefined","transaction","payloads","opCodes","script","filter","operation","startsWith","elevatedPayloads","opCode","code","split","elevatedPayload","find","payload","_hash","isAllowedBlockPayload","push","length","hydrateElevatedTransaction","context","assertEx","PayloadBuilder","transactionBlockByteCount","transaction","payloads","cleanTransaction","PayloadBuilder","omitStorageMeta","transactionBytes","JSON","stringify","length","cleanPayloads","reduce","acc","payload","asHash","crackOperation","operation","parts","split","length","Error","slice","crackOperations","operations","map","op","transactionElevatedPayloadHashes","transaction","elevateOperations","crackOperations","script","filter","op","map","asHash","transactionElevatedPayloads","payloads","hashes","elevatedPayloads","payload","includes","_hash","AttoXL1","TransactionGasCosts","transactionBytesRequiredGas","transaction","payloads","transactionBlockBytes","transactionBlockByteCount","AttoXL1","TransactionGasCosts","characterStorage","BigInt","transactionRequiredGas","hydratedTransaction","elevatedPayloads","transactionElevatedPayloads","hashes","length","signatures","addresses","hashValidation","signatureValidation","payloadValidation","asHash","assertEx","filterAs","isAllowedBlockPayloadWithHashMeta","tryExtractElevatedHashesFromScript","strings","hashes","filter","str","startsWith","map","split","filterAs","h","asHash","extractElevatedHashesFromScript","filtered","assertEx","length","tryExtractElevatedHashes","tx","bw","payloads","script","p","includes","_hash","isAllowedBlockPayloadWithHashMeta","extractElevatedHashes","assertEx","hexFromArrayBuffer","toArrayBuffer","PayloadBuilder","signTransaction","tx","account","assertEx","from","address","unsignedTx","structuredClone","addresses","previous_hashes","previousHash","hash","PayloadBuilder","dataHash","hashBytes","toArrayBuffer","signature","sign","result","$signatures","hexFromArrayBuffer","assertEx","Base","PayloadBuilder","asXL1BlockNumber","defaultTransactionFees","isAllowedBlockPayload","minTransactionFees","XYO_ZERO_ADDRESS","TransactionBuilder","Base","_blockRange","_chain","_elevatedPayloads","_fees","_payloads","_signers","options","build","chain","assertEx","fees","blockRange","buildTransaction","asXL1BlockNumber","address","dryRun","XYO_ZERO_ADDRESS","defaultTransactionFees","elevatedPayload","payload","allowedPayload","isAllowedBlockPayload","undefined","allowPayloadExists","push","elevatedPayloads","payloads","estimatedMinimumFees","tx","requiredGas","transactionRequiredGas","base","minTransactionFees","gasLimit","gasPrice","priority","range","length","Error","removeElevatedPayload","hash","PayloadBuilder","existingHashes","hashes","existingPayloadIndex","indexOf","filter","_","index","removePayload","signer","signers","hydratedTransactionToPayloadBundle","transaction","root","_hash","bundle","payloads","flattenHydratedTransaction","flatMap","p","PayloadBuilder","omitStorageMeta","schema","PayloadBundleSchema","fields","build","assertEx","isString","asProviderMoniker","value","moniker","isString","undefined","assertEx","DefaultProviderMoniker","blockFromBlockNumber","context","blockNumber","cacheKey","withContextCacheResponse","headHash","head","result","store","chainMap","get","isDefined","Error","currentBlock","asSignedBlockBoundWitnessWithStorageMeta","JSON","stringify","block","jumpHash","previous","jumpBlockNumber","step","stepSize","StepSizes","entries","possibleJumpBlockNumber","asHash","step_hashes","at","newBlock","toSafeJsonString","SignedBlockBoundWitnessWithHashMetaZod","safeParse","error","asXL1BlockNumber","stepSize","calculateFramesFromRange","range","step","size","stepSize","start","Math","trunc","fitted","remaining","push","asXL1BlockNumber","min","i","name","StepSizes","deepCalculateFramesFromRange","range","startingStep","StepSizes","length","fitted","remaining","step","newRemaining","newFittedFrames","newRemainingFrames","calculateFramesFromRange","push","i","toSorted","a","b","hashFromBlockNumber","context","blockNumber","blockFromBlockNumber","_hash","isReadArchivist","value","get","undefined","next","isWriteArchivist","insert","isReadWriteArchivist","toStepIdentityString","block","step","AddressZod","HexZod","toAddress","toHex","AttoXL1ConvertFactor","XL1","globalRegistry","z","isValidationError","ValidationError","BlockValidationError","ValidationError","isBlockValidationError","error","isValidationError","name","HydratedBlockValidationError","isHydratedBlockValidationError","HydratedBlockStateValidationError","chainId","hash","value","message","cause","isHydratedBlockStateValidationError","isLocalhost","hostname","endsWith","getUrl","host","port","scheme","isLocalhost","TODO","z","MnemonicStringZod","string","transform","s","trim","replaceAll","refine","includes","split","length","message","describe","DEFAULT_FIXED_FEE","toHex","XL1","AttoXL1ConvertFactor","xl1","DEFAULT_HARDHAT_BRIDGE_CONTRACT","toAddress","DEFAULT_HARDHAT_CHAIN_ID","DEFAULT_HARDHAT_REMOTE_CHAIN_WALLET_PRIVATE_KEY","DEFAULT_HARDHAT_TOKEN_CONTRACT","DEFAULT_MAX_BRIDGE_AMOUNT","DEFAULT_MIN_BRIDGE_AMOUNT","BasisPointsZod","coerce","number","int","nonnegative","max","BridgeConfigZod","object","chainRpcApiUrl","string","default","register","globalRegistry","description","title","type","escrowAddress","AddressZod","optional","feesAddress","feeFixed","HexZod","feeRateBasisPoints","host","maxBridgeAmount","minBridgeAmount","mnemonic","MnemonicStringZod","port","positive","redisHost","redisPort","remoteBridgeContractAddress","remoteChainId","remoteTokenAddress","remoteChainWalletPrivateKey","xl1ChainId","xl1TokenAddress","BridgeSettingsZod","pick","required","z","globalRegistry","z","ApiConfigZod","object","host","string","default","register","globalRegistry","description","title","type","initRewardsCache","union","number","transform","v","mnemonic","MnemonicStringZod","optional","port","coerce","AddressZod","HexZod","globalRegistry","z","ChainConfigZod","object","id","optional","register","description","title","type","genesisRewardAddress","globalRegistry","z","EvmInfuraConfigZod","object","projectId","string","optional","register","description","title","type","projectSecret","EvmJsonRpcConfigZod","url","EvmConfigZod","chainId","infura","describe","jsonRpc","LogLevel","globalRegistry","z","LogLevels","Object","keys","LogConfigZod","object","logLevel","enum","default","register","choices","description","title","type","silent","boolean","globalRegistry","z","MempoolConfigZod","object","enabled","string","default","transform","val","ctx","normalized","toLowerCase","trim","includes","addIssue","code","expected","message","NEVER","register","globalRegistry","description","title","type","host","mnemonic","MnemonicStringZod","optional","port","coerce","number","AddressZod","asAddress","globalRegistry","z","ProducerConfigZod","object","allowlist","preprocess","val","split","map","s","asAddress","trim","array","AddressZod","optional","register","globalRegistry","description","title","type","disableIntentRedeclaration","boolean","healthCheckPort","coerce","number","heartbeatInterval","default","minStake","mnemonic","MnemonicStringZod","port","rewardAddress","string","globalRegistry","z","RewardRedemptionApiConfigZod","object","chainRpcApiUrl","string","default","register","globalRegistry","description","title","type","host","mnemonic","MnemonicStringZod","optional","port","coerce","number","globalRegistry","z","ServicesConfigZod","object","accountBalanceViewerEndpoint","string","default","register","description","title","type","apiEndpoint","isDefined","isUndefined","globalRegistry","z","hasMongoConfig","config","isUndefined","isDefined","connectionString","database","domain","password","username","MongoConfigZod","object","string","nonempty","optional","register","globalRegistry","description","title","type","globalRegistry","z","StorageConfigZod","object","mongo","MongoConfigZod","optional","describe","root","string","register","globalRegistry","description","title","type","globalRegistry","z","MetricsScrapeConfigZod","object","path","string","default","register","description","title","type","port","coerce","number","describe","MetricsConfigZod","scrape","OpenTelemetryConfigZod","otlpEndpoint","url","optional","TelemetryConfigZod","metrics","otel","AddressZod","asAddress","globalRegistry","z","ValidationConfigZod","object","allowedRewardRedeemers","preprocess","val","split","map","s","trim","array","optional","register","description","title","type","allowedRewardEscrowAccountSigners","Xl1CommonConfigSchema","object","LogConfigZod","shape","describe","ConfigZod","api","ApiConfigZod","default","parse","bridge","BridgeConfigZod","chain","ChainConfigZod","evm","EvmConfigZod","mempool","MempoolConfigZod","producer","ProducerConfigZod","rewardRedemptionApi","RewardRedemptionApiConfigZod","services","ServicesConfigZod","storage","StorageConfigZod","telemetry","TelemetryConfigZod","validation","ValidationConfigZod","getDefaultConfig","z","DescriptionSchema","string","TitleSchema","JSONSchemaMetaSchema","object","id","optional","title","description","deprecated","boolean","catchall","unknown","GlobalMetaSchema","extend","ChoicesSchema","array","union","number","literal","undefined","readonly","UsageMetaSchema","choices","default","group","hidden","type","isUsageMeta","v","safeParse","success","AbstractCreatable","assertEx","assertEx","ProviderFactory","creatableProvider","defaultMoniker","defaultParams","labels","monikers","scope","params","assertEx","includes","Object","assign","resolvedMoniker","labelString","entries","map","key","value","join","length","withParams","create","start","getInstance","factory","scopeObject","globalThis","xyoServiceSingletons","undefined","context","singletons","mergedParams","config","resultPromise","result","tryGetInstance","AbstractCreatableProvider","AbstractCreatable","_contextCache","config","context","params","locator","factory","ProviderFactory","withParams","getInstance","inParams","instance","create","paramsHandler","assertEx","Error","statusReporter","name","defaultMoniker","tryGetInstance","locateAndCreate","moniker","creatableProvider","constructor","labeledCreatableProvider","isTruthy","buildProviderFactory","provider","labels","factory","monikers","create","bind","creatableProvider","resolvedMoniker","scope","getInstance","tryGetInstance","defaultMoniker","registerCreatableProviderFactory","registry","primary","primaryMonikers","isTruthy","Array","isArray","primaryMoniker","includes","console","warn","isPrimaryForMoniker","moniker","Error","factoryClone","registerCreatableProviderFactories","factories","undefined","hasLabels","factory","labels","undefined","labeledCreatableProviderFactory","constructor","hasAllLabels","assertEx","ProviderFactoryLocator","_context","_registry","_frozen","context","registry","locator","empty","standard","create","moniker","params","labels","getInstance","freeze","resolvedParams","factory","locate","result","assertEx","tryLocate","JSON","stringify","merge","push","register","primary","registerCreatableProviderFactory","registerMany","factories","tryGetInstance","filter","hasLabels","find","hasAllLabels","defaultParams","isDefined","PayloadBuilder","ChainStakeIntentSchema","createDeclarationIntent","address","intent","nbf","exp","expiration","isDefined","redeclarationIntent","PayloadBuilder","schema","ChainStakeIntentSchema","fields","from","build","AsObjectFactory","isPayloadOfZodType","z","z","TypedDataDomainZod","object","name","string","nullable","optional","version","chainId","union","number","bigint","verifyingContract","salt","instanceof","Uint8Array","TypedDataFieldZod","type","TypedDataTypesZod","record","array","TypedDataValueZod","any","EIP712DataPayloadFieldsZod","z","object","domain","TypedDataDomainZod","types","TypedDataTypesZod","values","TypedDataValueZod","EIP712DataPayloadSchema","isEIP712DataPayload","isPayloadOfZodType","asEIP712DataPayload","AsObjectFactory","create","AsObjectFactory","HashZod","isPayloadOfZodType","z","EIP712SignaturePayloadFieldsZod","object","address","string","hash","signature","EIP712SignaturePayloadSchema","isEIP712SignaturePayload","asEIP712SignaturePayload","create","PayloadBuilder","signEIP712Message","signer","data","domain","types","values","signature","signTypedData","hash","PayloadBuilder","address","getAddress","schema","EIP712SignaturePayloadSchema","asHash","isUndefined","PayloadBuilder","verifyTypedData","verifyEIP712Message","data","sig","address","signature","hash","schema","fields","signedHash","asHash","isUndefined","PayloadBuilder","recoveredAddress","verifyTypedData","domain","types","values","toLowerCase","asAttoXL1","XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_EARNED_REWARDS","asAttoXL1","XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_BONUS_REWARDS","XL1_NETWORK_STAKING_GENESIS_PERIOD_TOTAL_REWARDS","RewardMultipliers","XL1_NETWORK_STAKING_GENESIS_PERIOD_END_XL1_BLOCK","DataLakeViewerMoniker","DataLakeRunnerMoniker","NetworkStakeViewerMoniker","NetworkStakeStepRewardsByPositionViewerMoniker","NetworkStakeStepRewardsByStakerViewerMoniker","NetworkStakeStepRewardsByStepViewerMoniker","NetworkStakeStepRewardsTotalViewerMoniker","NetworkStakeStepRewardsViewerMoniker","XyoViewerMoniker","XyoConnectionMoniker","XyoRunnerMoniker","BlockRunnerMoniker","MempoolRunnerMoniker","AsObjectFactory","isPayloadOfSchemaType","isStorageMeta","ChainIndexingServiceStateSchema","isChainIndexingServiceState","payload","isPayloadOfSchemaType","asChainIndexingServiceState","AsObjectFactory","create","isChainIndexingServiceStateWithStorageMeta","value","isStorageMeta","asChainIndexingServiceStateWithStorageMeta","hexToBigInt","toHex","isObject","isNegativeBigInt","value","isObject","negative","isPositiveBigInt","positive","parseSignedBigInt","hexToBigInt","Error","toSignedBigInt","toHex","toPositiveBigInt","asHash","assertEx","exists","isDefined","spanRootAsync","ZERO_ADDRESS","asRange","asXL1BlockNumber","asXL1BlockRange","AttoXL1","StepSizes","TransferSchema","AsObjectFactory","isPayloadOfSchemaType","isStorageMeta","BalancesStepSummarySchema","isBalancesStepSummary","isPayloadOfSchemaType","asBalancesStepSummary","AsObjectFactory","create","isBalancesStepSummaryWithStorageMeta","value","isStorageMeta","asBalancesStepSummaryWithStorageMeta","AsObjectFactory","isPayloadOfSchemaType","isStorageMeta","SchemasStepSummarySchema","isSchemasStepSummary","isPayloadOfSchemaType","asSchemasStepSummary","AsObjectFactory","create","isSchemasStepSummaryWithStorageMeta","value","isStorageMeta","asSchemasStepSummaryWithStorageMeta","StepSummarySchema","AsObjectFactory","isPayloadOfSchemaType","isStorageMeta","TransfersStepSummarySchema","isTransfersStepSummary","isPayloadOfSchemaType","asTransfersStepSummary","AsObjectFactory","create","isTransfersStepSummaryWithStorageMeta","value","isStorageMeta","asTransfersStepSummaryWithStorageMeta","assertEx","PayloadBuilder","isAnyPayload","StepSizes","balancesStepSummaryFromRange","context","range","frameHeadHash","hashFromBlockNumber","frameSize","headHash","head","result","undefined","hash","payloads","hydrateBlock","store","balances","address","balance","Object","entries","netBalancesForPayloads","toSignedBigInt","schema","BalancesStepSummarySchema","stepSize","step","StepSizes","indexOf","assertEx","join","summaryResult","summaryMap","get","isAnyPayload","stepSemaphores","acquire","subRanges","deepCalculateFramesFromRange","promises","map","subRange","subResults","Promise","all","bigIntBalances","subResult","parseSignedBigInt","set","release","finalResult","PayloadBuilder","addStorageMeta","asAddress","spanRootAsync","asBlockBoundWitnessWithStorageMeta","asXL1BlockRange","balancesSummary","context","config","spanRootAsync","headHash","isChainQualifiedHeadConfig","head","headResult","store","chainMap","get","headBoundWitness","asBlockBoundWitnessWithStorageMeta","range","isChainQualifiedRangeConfig","asXL1BlockRange","block","ranges","deepCalculateFramesFromRange","name","summaries","Promise","all","map","balancesStepSummaryFromRange","balances","summary","address","balance","Object","entries","validAddress","asAddress","parseSignedBigInt","assertEx","isBoundWitness","PayloadBuilder","isAnyPayload","isHashMeta","StepSizes","schemasStepSummaryFromRange","context","range","frameHeadHash","hashFromBlockNumber","frameSize","headHash","head","result","undefined","hash","block","payloads","hydrateBlock","store","boundWitnesses","filter","x","isBoundWitness","isHashMeta","schemas","bw","schema","payload_schemas","SchemasStepSummarySchema","stepSize","step","StepSizes","indexOf","assertEx","join","summaryResult","summaryMap","get","isAnyPayload","stepSemaphores","acquire","subRanges","deepCalculateFramesFromRange","promises","map","subRange","subResults","Promise","all","subResult","count","Object","entries","set","release","PayloadBuilder","addHashMeta","spanRootAsync","asBlockBoundWitnessWithStorageMeta","asXL1BlockRange","schemasSummary","context","config","spanRootAsync","headHash","isChainQualifiedHeadConfig","head","headResult","store","chainMap","get","headBoundWitness","asBlockBoundWitnessWithStorageMeta","range","isChainQualifiedRangeConfig","asXL1BlockRange","block","ranges","deepCalculateFramesFromRange","name","summaries","Promise","all","map","schemasStepSummaryFromRange","results","summary","schema","count","Object","entries","schemas","assertEx","PayloadBuilder","isAnyPayload","StepSizes","asAddress","spanRootAsync","asBlockBoundWitnessWithStorageMeta","asXL1BlockRange","transfersSummary","context","config","spanRootAsync","headHash","isChainQualifiedHeadConfig","head","headResult","store","chainMap","get","headBoundWitness","asBlockBoundWitnessWithStorageMeta","range","isChainQualifiedRangeConfig","asXL1BlockRange","block","ranges","deepCalculateFramesFromRange","name","summaries","Promise","all","map","transfersStepSummaryFromRange","transfers","summary","from","toMap","Object","entries","validFrom","asAddress","to","transfer","validTo","parseSignedBigInt","transfersSummaryKey","frameHeadHash","frameSize","transfersStepSummaryFromRange","context","range","frameHeadHash","hashFromBlockNumber","frameSize","headHash","head","result","undefined","hash","payloads","hydrateBlock","store","transfers","from","toMap","Object","entries","netTransfersForPayloads","to","amount","toSignedBigInt","schema","TransfersStepSummarySchema","stepSize","step","StepSizes","indexOf","assertEx","join","key","transfersSummaryKey","summaryResult","summaryMap","get","isAnyPayload","stepSemaphores","acquire","subRanges","deepCalculateFramesFromRange","promises","map","subRange","subResults","Promise","all","bigIntBalances","subResult","transfer","parseSignedBigInt","set","release","finalResult","PayloadBuilder","addStorageMeta","zodIsFactory","WithHashMetaZod","TransferZod","BlockBoundWitnessZod","TransactionBoundWitnessZod","z","AccountBalanceHistoryItemZod","z","tuple","WithHashMetaZod","BlockBoundWitnessZod","TransactionBoundWitnessZod","nullable","TransferZod","AccountBalanceQualificationZod","ChainQualificationZod","isAccountBalanceQualification","zodIsFactory","AccountBalanceConfigZod","ChainQualifiedConfigZod","isAccountBalanceCOnfig","AccountBalanceViewerMoniker","BlockViewerMoniker","BlockRewardViewerMoniker","zodIsFactory","z","BlockValidationQualificationZod","ChainQualificationZod","isBlockValidationQualification","zodIsFactory","BlockValidationConfigFieldsZod","z","object","value","boolean","optional","state","BlockValidationConfigZod","union","extend","ChainQualifiedHeadConfigZod","shape","ChainQualifiedRangeConfigZod","isBlockValidationConfig","BlockValidationViewerMoniker","ChainContractViewerMoniker","ChainStakeViewerMoniker","HashZod","XL1BlockRangeZod","z","PendingTransactionsOptionsZod","object","cursor","optional","limit","number","int","positive","window","PendingBlocksOptionsZod","MempoolViewerMoniker","NetworkStakeStepRewardViewerMoniker","StakeViewerMoniker","StakeRunnerMoniker","StakeEventNames","StakeEventsViewerMoniker","StakeTotalsViewerMoniker","StepStakeViewerMoniker","StepViewerMoniker","TimeSyncViewerMoniker","zodIsFactory","TransactionValidationQualificationZod","ChainQualificationZod","isTransactionValidationQualification","zodIsFactory","TransactionValidationConfigZod","ChainQualifiedConfigZod","isTransactionValidationConfig","TransactionValidationViewerMoniker","TransferBalanceViewerMoniker","SimpleAccountBalanceViewer","AbstractCreatableProvider","defaultMoniker","AccountBalanceViewerMoniker","monikers","moniker","_blockViewer","balanceSummaryContext","params","blockViewer","transfersSummaryContext","paramsHandler","assertEx","accountBalance","address","config","balances","accountBalances","AttoXL1","accountBalanceHistories","addresses","qualifiedAccountBalanceHistories","accountBalanceHistory","range","isChainQualifiedRangeConfig","undefined","startingRange","asXL1BlockRange","currentBlockNumber","blockNumbers","distillTransferHistory","blocks","Promise","all","map","bn","blockByNumber","filter","exists","result","block","transferIndexes","payload_schemas","schema","index","TransferSchema","transfers","hash","payload_hashes","find","p","_hash","t","from","isDefined","length","pairs","transfer","push","qualifiedAccountBalances","createHandler","locator","getInstance","BlockViewerMoniker","head","isChainQualifiedHeadConfig","currentBlockHash","blockByHash","qualifiedEntries","qualifiedAccountBalanceHistory","entries","history","qualifiedRange","qualifiedHeadHash","_","__","Object","fromEntries","spanRootAsync","qualifiedSummary","balancesSummary","addr","summaryBalance","startHandler","ZERO_ADDRESS","max","StepSizes","Array","i","slice","n","asXL1BlockNumber","frames","deepCalculateFramesFromRange","transferSummaryPairs","frame","transfersStepSummaryFromRange","filteredTransferSummaryPairs","summary","keys","includes","sortedTransferSummaryPairs","toSorted","a","b","resultBlockNumbers","Set","values","size","value","add","headOrRange","asRange","headHash","asHash","currentBlock","assertEx","exists","isDefined","isUndefined","spanRootAsync","asSignedHydratedBlockWithHashMeta","asXL1BlockNumber","LRUCache","HydratedCache","cache","chainMap","hydrateFunction","maxSize","LRUCache","max","get","hash","existing","undefined","block","set","has","z","isZodError","error","ZodError","prettifyZodError","prettifyError","SimpleBlockViewer","AbstractCreatableProvider","defaultMoniker","BlockViewerMoniker","monikers","moniker","_store","_payloadCache","_signedHydratedBlockCache","finalizedArchivist","params","hydratedBlockCache","chainMap","store","HydratedCache","hash","maxDepth","minDepth","result","hydrateBlock","asSignedHydratedBlockWithHashMeta","payloadCache","LruCacheMap","max","paramsHandler","assertEx","blockByHash","spanRootAsync","cache","get","tracer","blockByNumber","blockNumber","head","getCurrentHead","isUndefined","hydratedBlockByNumber","chainId","chain","_hash","block","singletons","context","blocksByHash","limit","blocks","current","length","push","previousHash","previous","map","b","blocksByNumber","previousNumber","asXL1BlockNumber","currentBlock","createHandler","readPayloadMapFromStore","currentHead","console","log","currentBlockHash","currentBlockNumber","name","payloadByHash","cachedPayload","isDefined","set","payloadsByHash","hashes","remainingHashes","cachedPayloads","getMany","cachedHashes","Set","p","filter","h","has","remainingPayloads","exists","chainArchivist","findMostRecentBlock","SimpleBlockRewardViewer","AbstractCreatableProvider","defaultMoniker","BlockRewardViewerMoniker","monikers","moniker","rewardFromBlockNumber","allowedRewardForBlock","block","params","initialReward","stepSize","stepFactorNumerator","stepFactorDenominator","minRewardPerBlock","creatorReward","exists","asXL1BlockRange","SimpleBlockValidationViewer","AbstractCreatableProvider","defaultMoniker","BlockValidationViewerMoniker","monikers","moniker","_accountBalanceViewer","_blockViewer","_uncleWindowedChainCache","blockViewer","maxUncleWindowSize","params","paramsHandler","createHandler","locator","getInstance","AccountBalanceViewerMoniker","BlockViewerMoniker","qualifiedValidateBlock","block","config","qualifiedValidateBlocks","blocks","value","state","shape","links","headBlock","currentBlock","chainId","chain","validateValue","doValidateValue","bind","undefined","validateState","doValidateState","Promise","all","filter","exists","flat","head","_hash","range","asXL1BlockRange","validateBlock","validateBlocks","windowedUncleChain","updateWindowedChainCache","uncles","findUncles","context","length","Error","map","accountBalance","getWindowedChain","asAddress","toAddress","assertEx","SimpleStakeViewer","AbstractCreatableProvider","defaultMoniker","StakeViewerMoniker","monikers","moniker","_chainStakeEventsViewer","chainMap","params","minWithdrawalBlocks","rewardsContract","toAddress","stakeEvents","assertEx","stakingTokenAddress","positions","active","position","removeBlock","amount","activeByAddressStaked","staked","asAddress","activeByStaker","staker","createHandler","locateAndCreate","StakeEventsViewerMoniker","pending","withdrawBlock","pendingByStaker","stakeById","id","Error","stakeByStaker","slot","filter","s","stakesByStaked","range","undefined","endBlock","Number","MAX_SAFE_INTEGER","addBlock","stakesByStaker","withdrawn","withdrawnByStaker","SimpleXyoClient","gateways","permissions","isAnyPayload","AbstractSimpleDataLake","AbstractCreatableProvider","allowedSchemas","params","disallowedSchemas","map","get","hash","result","isAllowed","undefined","getMany","hashes","filter","data","has","value","isAnyPayload","isAllowedSchema","schema","includes","SimpleDataLakeRunner","AbstractSimpleDataLake","defaultMoniker","DataLakeRunnerMoniker","monikers","moniker","clear","map","delete","hash","set","data","isAllowed","setMany","entries","allowed","filter","_","SimpleDataLakeViewer","AbstractSimpleDataLake","defaultMoniker","DataLakeViewerMoniker","monikers","moniker","SimpleXyoGateway","_connection","_signer","signer","connection","connectionInstance","signerInstance","assertEx","BigIntToJsonZod","isDefined","PayloadBuilder","asXL1BlockNumber","TransferSchema","SimpleXyoGatewayRunner","_connection","_dataLakes","_signer","connection","signer","dataLakes","connectionInstance","Error","signerInstance","addDataLake","dataLake","push","length","addPayloadsToChain","onChain","offChain","options","viewer","assertEx","nbf","exp","chain","fees","resolvedChainId","isDefined","chainId","resolvedNbf","asXL1BlockNumber","currentBlockNumber","resolvedExp","tx","buildUnsignedTransaction","address","addTransactionToChain","runner","signedTx","signTransaction","addPayloadsToDataLakes","broadcastTransaction","confirmSubmittedTransaction","txHash","removeDataLake","index","send","to","amount","sendMany","transfers","from","hexTransfers","Object","fromEntries","entries","map","BigIntToJsonZod","parse","transfer","PayloadBuilder","schema","TransferSchema","fields","epoch","Date","now","build","hash","payloads","Promise","all","payload","set","_hash","PayloadBuilder","SimpleMempoolRunner","AbstractCreatableProvider","defaultMoniker","MempoolRunnerMoniker","monikers","moniker","pendingBlocksArchivist","params","pendingTransactionsArchivist","submitBlocks","blocks","bundles","Promise","all","map","bw","payloads","hydratedBlockToPayloadBundle","PayloadBuilder","addHashMeta","inserted","insert","p","_hash","submitTransactions","transactions","tx","hydratedTransactionToPayloadBundle","creatable","exists","isDefined","isHash","isHashMeta","isPayloadBundle","SimpleMempoolViewer","AbstractCreatableProvider","defaultMoniker","MempoolViewerMoniker","monikers","moniker","pendingBlocksArchivist","params","pendingTransactionsArchivist","pendingBlocks","cursor","providedCursor","undefined","isHash","p","get","isDefined","_sequence","bundles","next","order","limit","filteredBundles","filter","isPayloadBundle","isHashMeta","Promise","all","map","bundle","bundledPayloadToHydratedBlock","exists","pendingTransactions","logger","info","length","JSON","stringify","result","bundledPayloadToHydratedTransaction","isUndefined","isNetworkStatus","axios","NetworkStatusSchema","unknownStatus","description","schema","state","errorStatus","MainNetworkStats","id","statusUrl","SequenceNetworkStats","LocalNetworkStats","StatusNetworks","SimpleXyoNetwork","_networkId","networkId","status","statusNetwork","StatusNetworks","isUndefined","Error","makeRequest","statusUrl","url","response","axios","get","isNetworkStatus","data","console","error","unknownStatus","errorStatus","assertEx","SimpleXyoPermissions","invoker","_store","store","assertEx","getPermissions","requestPermissions","permissions","Promise","resolve","newPermissions","now","Date","req","parentCapability","push","caveats","Object","entries","map","type","value","date","existingPermissions","perm","idx","findIndex","p","setPermissions","revokePermissions","revoked","removed","splice","assertEx","MemoryPermissionsStore","_invoker","permissions","invoker","assertEx","getPermissions","Promise","resolve","setPermissions","assertEx","PayloadBuilder","SimpleXyoRunner","AbstractCreatableProvider","defaultMoniker","XyoRunnerMoniker","monikers","moniker","_mempoolRunner","mempool","paramsHandler","params","pendingTransactionsArchivist","assertEx","broadcastTransaction","transaction","archivist","bundle","hydratedTransactionToPayloadBundle","insert","submitTransactions","hash","PayloadBuilder","logger","info","createHandler","locator","getInstance","MempoolRunnerMoniker","PayloadBuilder","SignedHydratedTransactionWithHashMetaZod","SimpleXyoSigner","_account","account","address","createSignedTransaction","chain","elevatedPayloads","additionalPayloads","nbf","exp","fees","from","fromAddress","transaction","buildTransaction","signTransaction","tx","txBW","SignedHydratedTransactionWithHashMetaZod","parse","PayloadBuilder","addStorageMeta","isDefined","SimpleStakeEventsViewer","AbstractCreatableProvider","defaultMoniker","StakeEventsViewerMoniker","monikers","moniker","positions","params","positionCount","range","positionsFromRange","length","stakeEvents","name","events","eventsFromPositions","isDefined","filter","event","startHandler","map","position","time","addBlock","args","staker","staked","amount","id","removeBlock","push","withdrawBlock","flat","startBlock","endBlock","Number","MAX_SAFE_INTEGER","filteredPositions","asHash","assertEx","isDefined","asTimePayload","asXL1BlockNumber","TimeSchema","SimpleTimeSyncViewer","AbstractCreatableProvider","defaultMoniker","TimeSyncViewerMoniker","monikers","moniker","_blockViewer","blockViewer","ethProvider","params","convertTime","fromDomain","toDomain","from","block","payloads","assertEx","blockByNumber","asXL1BlockNumber","timeSchemaIndex","payload_schemas","indexOf","TimeSchema","hash","undefined","payload_hashes","timePayload","asTimePayload","isDefined","find","p","_hash","xl1","epoch","ethereum","Error","createHandler","locator","getInstance","BlockViewerMoniker","currentTime","domain","currentBlock","Date","now","getBlockNumber","currentTimeAndHash","head","provider","blockNumber","getBlock","blockHash","asHash","currentTimePayload","xl1Hash","schema","ethHashOrNull","ethereumHash","LoggerStatusReporter","logger","statusMap","report","name","status","progress","starting","Object","entries","map","value","reduce","a","b","started","info","statusPriority","error","stopped","stopping","creating","created","starting","started","SENTINEL_STATUS","reduceToMinimumStatus","statuses","minStatus","minPriority","Infinity","status","priority","RuntimeStatusMonitor","LoggerStatusReporter","globalTransitions","transitions","getGlobalStatus","Object","keys","statusMap","length","values","getStatus","name","onGlobalTransition","match","handler","push","onTransition","report","progress","previous","previousGlobal","runTransitions","globalStatus","prev","next","from","to","matchName","undefined","assertEx","asTimePayload","TimeSchema","xl1BlockNumberToEthBlockNumber","context","xl1BlockNumber","blockHash","hashFromBlockNumber","hydratedBlock","hydrateBlock","store","timePayload","asTimePayload","find","p","schema","TimeSchema","required","assertEx","ethereum","HDWallet","WALLET_COMPLIANCE","COIN_TYPES","Ethereum","ACCOUNT_TYPE","GANACHE","XYO","CHANGE_ADDRESS","META_MASK","ADDRESS_INDEX","DEFAULT_WALLET_PATH","generateXyoBaseWalletFromPhrase","walletPhrase","wallet","HDWallet","fromPhrase","DEFAULT_WALLET_PATH"]}