@xyo-network/xl1-cli 1.6.2

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 (281) hide show
  1. package/LICENSE +165 -0
  2. package/README.md +23 -0
  3. package/build/commands/api/index.d.ts +2 -0
  4. package/build/commands/api/index.d.ts.map +1 -0
  5. package/build/commands/api/runApi.d.ts +2 -0
  6. package/build/commands/api/runApi.d.ts.map +1 -0
  7. package/build/commands/index.d.ts +4 -0
  8. package/build/commands/index.d.ts.map +1 -0
  9. package/build/commands/producer/createDeclaration.d.ts +2 -0
  10. package/build/commands/producer/createDeclaration.d.ts.map +1 -0
  11. package/build/commands/producer/index.d.ts +3 -0
  12. package/build/commands/producer/index.d.ts.map +1 -0
  13. package/build/commands/producer/runProducer.d.ts +3 -0
  14. package/build/commands/producer/runProducer.d.ts.map +1 -0
  15. package/build/commands/validator/index.d.ts +2 -0
  16. package/build/commands/validator/index.d.ts.map +1 -0
  17. package/build/commands/validator/runValidator.d.ts +3 -0
  18. package/build/commands/validator/runValidator.d.ts.map +1 -0
  19. package/build/index.d.ts +4 -0
  20. package/build/index.d.ts.map +1 -0
  21. package/build/initEnv.d.ts +2 -0
  22. package/build/initEnv.d.ts.map +1 -0
  23. package/build/node/index.mjs +1502 -0
  24. package/build/node/index.mjs.map +1 -0
  25. package/build/node/xl1.mjs +1474 -0
  26. package/build/node/xl1.mjs.map +1 -0
  27. package/build/orchestration/actor/implementation/BalanceActor.d.ts +17 -0
  28. package/build/orchestration/actor/implementation/BalanceActor.d.ts.map +1 -0
  29. package/build/orchestration/actor/implementation/ChainHeadUpdateActor.d.ts +16 -0
  30. package/build/orchestration/actor/implementation/ChainHeadUpdateActor.d.ts.map +1 -0
  31. package/build/orchestration/actor/implementation/ProducerActor.d.ts +25 -0
  32. package/build/orchestration/actor/implementation/ProducerActor.d.ts.map +1 -0
  33. package/build/orchestration/actor/implementation/index.d.ts +4 -0
  34. package/build/orchestration/actor/implementation/index.d.ts.map +1 -0
  35. package/build/orchestration/actor/index.d.ts +3 -0
  36. package/build/orchestration/actor/index.d.ts.map +1 -0
  37. package/build/orchestration/actor/model/Actor.d.ts +38 -0
  38. package/build/orchestration/actor/model/Actor.d.ts.map +1 -0
  39. package/build/orchestration/actor/model/Orchestrator.d.ts +24 -0
  40. package/build/orchestration/actor/model/Orchestrator.d.ts.map +1 -0
  41. package/build/orchestration/actor/model/index.d.ts +3 -0
  42. package/build/orchestration/actor/model/index.d.ts.map +1 -0
  43. package/build/orchestration/archivists/ChainFinalized/archivist.d.ts +4 -0
  44. package/build/orchestration/archivists/ChainFinalized/archivist.d.ts.map +1 -0
  45. package/build/orchestration/archivists/ChainFinalized/index.d.ts +2 -0
  46. package/build/orchestration/archivists/ChainFinalized/index.d.ts.map +1 -0
  47. package/build/orchestration/archivists/ChainFinalized/local.d.ts +4 -0
  48. package/build/orchestration/archivists/ChainFinalized/local.d.ts.map +1 -0
  49. package/build/orchestration/archivists/ChainFinalized/remote.d.ts +4 -0
  50. package/build/orchestration/archivists/ChainFinalized/remote.d.ts.map +1 -0
  51. package/build/orchestration/archivists/ChainSubmissions/archivist.d.ts +4 -0
  52. package/build/orchestration/archivists/ChainSubmissions/archivist.d.ts.map +1 -0
  53. package/build/orchestration/archivists/ChainSubmissions/index.d.ts +2 -0
  54. package/build/orchestration/archivists/ChainSubmissions/index.d.ts.map +1 -0
  55. package/build/orchestration/archivists/ChainSubmissions/remote.d.ts +4 -0
  56. package/build/orchestration/archivists/ChainSubmissions/remote.d.ts.map +1 -0
  57. package/build/orchestration/archivists/PendingTransactions/archivist.d.ts +4 -0
  58. package/build/orchestration/archivists/PendingTransactions/archivist.d.ts.map +1 -0
  59. package/build/orchestration/archivists/PendingTransactions/index.d.ts +2 -0
  60. package/build/orchestration/archivists/PendingTransactions/index.d.ts.map +1 -0
  61. package/build/orchestration/archivists/PendingTransactions/local.d.ts +4 -0
  62. package/build/orchestration/archivists/PendingTransactions/local.d.ts.map +1 -0
  63. package/build/orchestration/archivists/PendingTransactions/remote.d.ts +4 -0
  64. package/build/orchestration/archivists/PendingTransactions/remote.d.ts.map +1 -0
  65. package/build/orchestration/archivists/RejectedTransactions/archivist.d.ts +4 -0
  66. package/build/orchestration/archivists/RejectedTransactions/archivist.d.ts.map +1 -0
  67. package/build/orchestration/archivists/RejectedTransactions/index.d.ts +2 -0
  68. package/build/orchestration/archivists/RejectedTransactions/index.d.ts.map +1 -0
  69. package/build/orchestration/archivists/RejectedTransactions/local.d.ts +4 -0
  70. package/build/orchestration/archivists/RejectedTransactions/local.d.ts.map +1 -0
  71. package/build/orchestration/archivists/StakeIntentState/archivist.d.ts +4 -0
  72. package/build/orchestration/archivists/StakeIntentState/archivist.d.ts.map +1 -0
  73. package/build/orchestration/archivists/StakeIntentState/index.d.ts +2 -0
  74. package/build/orchestration/archivists/StakeIntentState/index.d.ts.map +1 -0
  75. package/build/orchestration/archivists/StakeIntentState/local.d.ts +4 -0
  76. package/build/orchestration/archivists/StakeIntentState/local.d.ts.map +1 -0
  77. package/build/orchestration/archivists/index.d.ts +6 -0
  78. package/build/orchestration/archivists/index.d.ts.map +1 -0
  79. package/build/orchestration/archivists/lib/index.d.ts +2 -0
  80. package/build/orchestration/archivists/lib/index.d.ts.map +1 -0
  81. package/build/orchestration/archivists/lib/localPersistentArchivist.d.ts +12 -0
  82. package/build/orchestration/archivists/lib/localPersistentArchivist.d.ts.map +1 -0
  83. package/build/orchestration/health/index.d.ts +2 -0
  84. package/build/orchestration/health/index.d.ts.map +1 -0
  85. package/build/orchestration/health/initHealthEndpoints.d.ts +7 -0
  86. package/build/orchestration/health/initHealthEndpoints.d.ts.map +1 -0
  87. package/build/orchestration/host/implementation/DefaultHost.d.ts +12 -0
  88. package/build/orchestration/host/implementation/DefaultHost.d.ts.map +1 -0
  89. package/build/orchestration/host/implementation/DefaultServiceCollection.d.ts +24 -0
  90. package/build/orchestration/host/implementation/DefaultServiceCollection.d.ts.map +1 -0
  91. package/build/orchestration/host/implementation/DefaultServiceProvider.d.ts +7 -0
  92. package/build/orchestration/host/implementation/DefaultServiceProvider.d.ts.map +1 -0
  93. package/build/orchestration/host/implementation/index.d.ts +3 -0
  94. package/build/orchestration/host/implementation/index.d.ts.map +1 -0
  95. package/build/orchestration/host/index.d.ts +3 -0
  96. package/build/orchestration/host/index.d.ts.map +1 -0
  97. package/build/orchestration/host/model/Host.d.ts +19 -0
  98. package/build/orchestration/host/model/Host.d.ts.map +1 -0
  99. package/build/orchestration/host/model/ServiceCollection.d.ts +20 -0
  100. package/build/orchestration/host/model/ServiceCollection.d.ts.map +1 -0
  101. package/build/orchestration/host/model/ServiceProvider.d.ts +4 -0
  102. package/build/orchestration/host/model/ServiceProvider.d.ts.map +1 -0
  103. package/build/orchestration/host/model/index.d.ts +4 -0
  104. package/build/orchestration/host/model/index.d.ts.map +1 -0
  105. package/build/orchestration/index.d.ts +6 -0
  106. package/build/orchestration/index.d.ts.map +1 -0
  107. package/build/orchestration/initServices.d.ts +4 -0
  108. package/build/orchestration/initServices.d.ts.map +1 -0
  109. package/build/orchestration/map/BalanceSummary/index.d.ts +2 -0
  110. package/build/orchestration/map/BalanceSummary/index.d.ts.map +1 -0
  111. package/build/orchestration/map/BalanceSummary/initBalanceSummaryMap.d.ts +7 -0
  112. package/build/orchestration/map/BalanceSummary/initBalanceSummaryMap.d.ts.map +1 -0
  113. package/build/orchestration/map/BalanceSummary/local.d.ts +6 -0
  114. package/build/orchestration/map/BalanceSummary/local.d.ts.map +1 -0
  115. package/build/orchestration/map/driver/index.d.ts +2 -0
  116. package/build/orchestration/map/driver/index.d.ts.map +1 -0
  117. package/build/orchestration/map/driver/lmdb/Params.d.ts +7 -0
  118. package/build/orchestration/map/driver/lmdb/Params.d.ts.map +1 -0
  119. package/build/orchestration/map/driver/lmdb/SynchronousLmdbMap.d.ts +32 -0
  120. package/build/orchestration/map/driver/lmdb/SynchronousLmdbMap.d.ts.map +1 -0
  121. package/build/orchestration/map/driver/lmdb/index.d.ts +2 -0
  122. package/build/orchestration/map/driver/lmdb/index.d.ts.map +1 -0
  123. package/build/orchestration/map/index.d.ts +3 -0
  124. package/build/orchestration/map/index.d.ts.map +1 -0
  125. package/build/orchestration/map/localPersistentMap.d.ts +12 -0
  126. package/build/orchestration/map/localPersistentMap.d.ts.map +1 -0
  127. package/build/orchestration/repository/index.d.ts +2 -0
  128. package/build/orchestration/repository/index.d.ts.map +1 -0
  129. package/build/orchestration/repository/lib/index.d.ts +2 -0
  130. package/build/orchestration/repository/lib/index.d.ts.map +1 -0
  131. package/build/orchestration/repository/lib/repositoryFromArchivist.d.ts +6 -0
  132. package/build/orchestration/repository/lib/repositoryFromArchivist.d.ts.map +1 -0
  133. package/build/orchestration/services/implementation/account.d.ts +4 -0
  134. package/build/orchestration/services/implementation/account.d.ts.map +1 -0
  135. package/build/orchestration/services/implementation/balance.d.ts +4 -0
  136. package/build/orchestration/services/implementation/balance.d.ts.map +1 -0
  137. package/build/orchestration/services/implementation/chain/evm.d.ts +6 -0
  138. package/build/orchestration/services/implementation/chain/evm.d.ts.map +1 -0
  139. package/build/orchestration/services/implementation/chain/index.d.ts +4 -0
  140. package/build/orchestration/services/implementation/chain/index.d.ts.map +1 -0
  141. package/build/orchestration/services/implementation/evm/index.d.ts +2 -0
  142. package/build/orchestration/services/implementation/evm/index.d.ts.map +1 -0
  143. package/build/orchestration/services/implementation/evm/initChainId.d.ts +3 -0
  144. package/build/orchestration/services/implementation/evm/initChainId.d.ts.map +1 -0
  145. package/build/orchestration/services/implementation/evm/initEvmProvider.d.ts +4 -0
  146. package/build/orchestration/services/implementation/evm/initEvmProvider.d.ts.map +1 -0
  147. package/build/orchestration/services/implementation/evm/initGanacheProvider.d.ts +5 -0
  148. package/build/orchestration/services/implementation/evm/initGanacheProvider.d.ts.map +1 -0
  149. package/build/orchestration/services/implementation/evm/initInfuraProvider.d.ts +5 -0
  150. package/build/orchestration/services/implementation/evm/initInfuraProvider.d.ts.map +1 -0
  151. package/build/orchestration/services/implementation/head.d.ts +10 -0
  152. package/build/orchestration/services/implementation/head.d.ts.map +1 -0
  153. package/build/orchestration/services/implementation/index.d.ts +11 -0
  154. package/build/orchestration/services/implementation/index.d.ts.map +1 -0
  155. package/build/orchestration/services/implementation/iterator.d.ts +6 -0
  156. package/build/orchestration/services/implementation/iterator.d.ts.map +1 -0
  157. package/build/orchestration/services/implementation/pendingTransactions.d.ts +4 -0
  158. package/build/orchestration/services/implementation/pendingTransactions.d.ts.map +1 -0
  159. package/build/orchestration/services/implementation/producer.d.ts +4 -0
  160. package/build/orchestration/services/implementation/producer.d.ts.map +1 -0
  161. package/build/orchestration/services/implementation/reward.d.ts +4 -0
  162. package/build/orchestration/services/implementation/reward.d.ts.map +1 -0
  163. package/build/orchestration/services/implementation/validator.d.ts +4 -0
  164. package/build/orchestration/services/implementation/validator.d.ts.map +1 -0
  165. package/build/orchestration/services/index.d.ts +2 -0
  166. package/build/orchestration/services/index.d.ts.map +1 -0
  167. package/build/orchestration/status/RuntimeStatusMonitor.d.ts +31 -0
  168. package/build/orchestration/status/RuntimeStatusMonitor.d.ts.map +1 -0
  169. package/build/orchestration/status/ServiceStatus.d.ts +9 -0
  170. package/build/orchestration/status/ServiceStatus.d.ts.map +1 -0
  171. package/build/orchestration/status/index.d.ts +3 -0
  172. package/build/orchestration/status/index.d.ts.map +1 -0
  173. package/build/orchestration/store/StoreKind.d.ts +2 -0
  174. package/build/orchestration/store/StoreKind.d.ts.map +1 -0
  175. package/build/orchestration/store/getStoreDirectory.d.ts +9 -0
  176. package/build/orchestration/store/getStoreDirectory.d.ts.map +1 -0
  177. package/build/orchestration/store/index.d.ts +3 -0
  178. package/build/orchestration/store/index.d.ts.map +1 -0
  179. package/build/runCLI.d.ts +3 -0
  180. package/build/runCLI.d.ts.map +1 -0
  181. package/build/start.d.ts +2 -0
  182. package/build/start.d.ts.map +1 -0
  183. package/build/xl1.d.ts +2 -0
  184. package/build/xl1.d.ts.map +1 -0
  185. package/dist/cli-min.mjs +400 -0
  186. package/nodemon.json +9 -0
  187. package/package.json +97 -0
  188. package/rollup.config.mjs +73 -0
  189. package/scripts/xl1.mjs +3 -0
  190. package/src/commands/api/index.ts +1 -0
  191. package/src/commands/api/runApi.ts +7 -0
  192. package/src/commands/index.ts +3 -0
  193. package/src/commands/producer/createDeclaration.ts +17 -0
  194. package/src/commands/producer/index.ts +2 -0
  195. package/src/commands/producer/runProducer.ts +25 -0
  196. package/src/commands/validator/index.ts +1 -0
  197. package/src/commands/validator/runValidator.ts +13 -0
  198. package/src/index.ts +3 -0
  199. package/src/initEnv.ts +8 -0
  200. package/src/orchestration/actor/implementation/BalanceActor.ts +51 -0
  201. package/src/orchestration/actor/implementation/ChainHeadUpdateActor.ts +65 -0
  202. package/src/orchestration/actor/implementation/ProducerActor.ts +250 -0
  203. package/src/orchestration/actor/implementation/index.ts +3 -0
  204. package/src/orchestration/actor/index.ts +2 -0
  205. package/src/orchestration/actor/model/Actor.ts +113 -0
  206. package/src/orchestration/actor/model/Orchestrator.ts +65 -0
  207. package/src/orchestration/actor/model/index.ts +2 -0
  208. package/src/orchestration/archivists/ChainFinalized/archivist.ts +27 -0
  209. package/src/orchestration/archivists/ChainFinalized/index.ts +1 -0
  210. package/src/orchestration/archivists/ChainFinalized/local.ts +16 -0
  211. package/src/orchestration/archivists/ChainFinalized/remote.ts +18 -0
  212. package/src/orchestration/archivists/ChainSubmissions/archivist.ts +19 -0
  213. package/src/orchestration/archivists/ChainSubmissions/index.ts +1 -0
  214. package/src/orchestration/archivists/ChainSubmissions/remote.ts +18 -0
  215. package/src/orchestration/archivists/PendingTransactions/archivist.ts +29 -0
  216. package/src/orchestration/archivists/PendingTransactions/index.ts +1 -0
  217. package/src/orchestration/archivists/PendingTransactions/local.ts +20 -0
  218. package/src/orchestration/archivists/PendingTransactions/remote.ts +18 -0
  219. package/src/orchestration/archivists/RejectedTransactions/archivist.ts +18 -0
  220. package/src/orchestration/archivists/RejectedTransactions/index.ts +1 -0
  221. package/src/orchestration/archivists/RejectedTransactions/local.ts +20 -0
  222. package/src/orchestration/archivists/StakeIntentState/archivist.ts +19 -0
  223. package/src/orchestration/archivists/StakeIntentState/index.ts +1 -0
  224. package/src/orchestration/archivists/StakeIntentState/local.ts +19 -0
  225. package/src/orchestration/archivists/index.ts +5 -0
  226. package/src/orchestration/archivists/lib/index.ts +1 -0
  227. package/src/orchestration/archivists/lib/localPersistentArchivist.ts +44 -0
  228. package/src/orchestration/health/index.ts +1 -0
  229. package/src/orchestration/health/initHealthEndpoints.ts +70 -0
  230. package/src/orchestration/host/implementation/DefaultHost.ts +25 -0
  231. package/src/orchestration/host/implementation/DefaultServiceCollection.ts +60 -0
  232. package/src/orchestration/host/implementation/DefaultServiceProvider.ts +12 -0
  233. package/src/orchestration/host/implementation/index.ts +2 -0
  234. package/src/orchestration/host/index.ts +2 -0
  235. package/src/orchestration/host/model/Host.ts +21 -0
  236. package/src/orchestration/host/model/ServiceCollection.ts +22 -0
  237. package/src/orchestration/host/model/ServiceProvider.ts +3 -0
  238. package/src/orchestration/host/model/index.ts +3 -0
  239. package/src/orchestration/index.ts +5 -0
  240. package/src/orchestration/initServices.ts +237 -0
  241. package/src/orchestration/map/BalanceSummary/index.ts +1 -0
  242. package/src/orchestration/map/BalanceSummary/initBalanceSummaryMap.ts +22 -0
  243. package/src/orchestration/map/BalanceSummary/local.ts +19 -0
  244. package/src/orchestration/map/driver/index.ts +1 -0
  245. package/src/orchestration/map/driver/lmdb/Params.ts +7 -0
  246. package/src/orchestration/map/driver/lmdb/SynchronousLmdbMap.ts +67 -0
  247. package/src/orchestration/map/driver/lmdb/index.ts +1 -0
  248. package/src/orchestration/map/index.ts +2 -0
  249. package/src/orchestration/map/localPersistentMap.ts +39 -0
  250. package/src/orchestration/repository/index.ts +1 -0
  251. package/src/orchestration/repository/lib/index.ts +1 -0
  252. package/src/orchestration/repository/lib/repositoryFromArchivist.ts +27 -0
  253. package/src/orchestration/services/implementation/account.ts +23 -0
  254. package/src/orchestration/services/implementation/balance.ts +13 -0
  255. package/src/orchestration/services/implementation/chain/evm.ts +35 -0
  256. package/src/orchestration/services/implementation/chain/index.ts +27 -0
  257. package/src/orchestration/services/implementation/evm/index.ts +1 -0
  258. package/src/orchestration/services/implementation/evm/initChainId.ts +18 -0
  259. package/src/orchestration/services/implementation/evm/initEvmProvider.ts +21 -0
  260. package/src/orchestration/services/implementation/evm/initGanacheProvider.ts +19 -0
  261. package/src/orchestration/services/implementation/evm/initInfuraProvider.ts +25 -0
  262. package/src/orchestration/services/implementation/head.ts +44 -0
  263. package/src/orchestration/services/implementation/index.ts +10 -0
  264. package/src/orchestration/services/implementation/iterator.ts +36 -0
  265. package/src/orchestration/services/implementation/pendingTransactions.ts +14 -0
  266. package/src/orchestration/services/implementation/producer.ts +13 -0
  267. package/src/orchestration/services/implementation/reward.ts +37 -0
  268. package/src/orchestration/services/implementation/validator.ts +14 -0
  269. package/src/orchestration/services/index.ts +1 -0
  270. package/src/orchestration/status/RuntimeStatusMonitor.ts +117 -0
  271. package/src/orchestration/status/ServiceStatus.ts +21 -0
  272. package/src/orchestration/status/index.ts +2 -0
  273. package/src/orchestration/store/StoreKind.ts +1 -0
  274. package/src/orchestration/store/getStoreDirectory.ts +15 -0
  275. package/src/orchestration/store/index.ts +2 -0
  276. package/src/runCLI.ts +96 -0
  277. package/src/spec/MultiProducer.ChainOutput.json +864 -0
  278. package/src/start.ts +26 -0
  279. package/src/xl1.ts +6 -0
  280. package/vitest.config.ts +11 -0
  281. package/xy.config.ts +11 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/initEnv.ts","../../src/orchestration/actor/implementation/BalanceActor.ts","../../src/orchestration/actor/model/Actor.ts","../../src/orchestration/actor/model/Orchestrator.ts","../../src/orchestration/actor/implementation/ChainHeadUpdateActor.ts","../../src/orchestration/actor/implementation/ProducerActor.ts","../../src/orchestration/health/initHealthEndpoints.ts","../../src/orchestration/initServices.ts","../../src/orchestration/archivists/ChainFinalized/archivist.ts","../../src/orchestration/archivists/ChainFinalized/local.ts","../../src/orchestration/archivists/lib/localPersistentArchivist.ts","../../src/orchestration/store/getStoreDirectory.ts","../../src/orchestration/archivists/ChainFinalized/remote.ts","../../src/orchestration/archivists/ChainSubmissions/archivist.ts","../../src/orchestration/archivists/ChainSubmissions/remote.ts","../../src/orchestration/archivists/PendingTransactions/archivist.ts","../../src/orchestration/archivists/PendingTransactions/local.ts","../../src/orchestration/archivists/PendingTransactions/remote.ts","../../src/orchestration/archivists/RejectedTransactions/archivist.ts","../../src/orchestration/archivists/RejectedTransactions/local.ts","../../src/orchestration/archivists/StakeIntentState/archivist.ts","../../src/orchestration/archivists/StakeIntentState/local.ts","../../src/orchestration/map/BalanceSummary/initBalanceSummaryMap.ts","../../src/orchestration/map/BalanceSummary/local.ts","../../src/orchestration/map/localPersistentMap.ts","../../src/orchestration/map/driver/lmdb/SynchronousLmdbMap.ts","../../src/orchestration/services/implementation/account.ts","../../src/orchestration/services/implementation/balance.ts","../../src/orchestration/services/implementation/chain/index.ts","../../src/orchestration/services/implementation/chain/evm.ts","../../src/orchestration/services/implementation/evm/initEvmProvider.ts","../../src/orchestration/services/implementation/evm/initGanacheProvider.ts","../../src/orchestration/services/implementation/evm/initChainId.ts","../../src/orchestration/services/implementation/evm/initInfuraProvider.ts","../../src/orchestration/services/implementation/head.ts","../../src/orchestration/services/implementation/iterator.ts","../../src/orchestration/services/implementation/pendingTransactions.ts","../../src/orchestration/services/implementation/producer.ts","../../src/orchestration/services/implementation/reward.ts","../../src/orchestration/status/ServiceStatus.ts","../../src/orchestration/status/RuntimeStatusMonitor.ts","../../src/runCLI.ts","../../src/commands/api/runApi.ts","../../src/commands/producer/runProducer.ts","../../src/commands/validator/runValidator.ts","../../src/start.ts","../../src/xl1.ts"],"sourcesContent":["import dotenv from 'dotenv'\n\nexport const initEnv = () => {\n dotenv.config()\n if (process.env.ENV_FILE !== undefined) {\n dotenv.config({ path: process.env.ENV_FILE, override: true })\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { BaseParams } from '@xylabs/base'\nimport type { Promisable } from '@xylabs/promise'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { OpenTelemetryProviders } from '@xyo-network/xl1-protocol'\nimport type { ChainServiceCollectionV2 } from '@xyo-network/xl1-protocol-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport { Actor } from '../model/index.ts'\n\nexport type BalanceActorParams = BaseParams<\n Pick<ChainServiceCollectionV2, 'balanceService' | 'chainIterator'>\n & OpenTelemetryProviders>\n\nexport class BalanceActor extends Actor<BalanceActorParams> {\n protected _updateMutex = new Mutex()\n\n protected constructor(params: BalanceActorParams) {\n super('BalanceActor', 'Balance', params)\n }\n\n protected get balanceService() {\n return assertEx(this.params.balanceService, () => 'balanceService not set')\n }\n\n protected get chainIterator() {\n return assertEx(this.params.chainIterator, () => 'chainIterator not set')\n }\n\n static create(params: BalanceActorParams): Promisable<BalanceActor> {\n return new BalanceActor(params)\n }\n\n override async start(): Promise<void> {\n await super.start()\n this.chainIterator.on('headUpdate', async () => {\n await this.updateBalance()\n })\n this.registerTimer('BalanceTimer', async () => {\n await this.updateBalance()\n }, 1000, 1000)\n }\n\n protected async updateBalance(): Promise<void> {\n if (this._updateMutex.isLocked()) return\n await this._updateMutex.runExclusive(async () => {\n const head = await PayloadBuilder.hash(await this.chainIterator.head())\n await this.balanceService.balances(head, [])\n })\n }\n}\n","import type { TracerProvider } from '@opentelemetry/api'\nimport type { BaseParams } from '@xylabs/base'\nimport { BaseEmitter } from '@xylabs/events'\nimport { forget } from '@xylabs/forget'\nimport { IdLogger } from '@xylabs/logger'\nimport type { Promisable } from '@xylabs/promise'\nimport { span, spanAsync } from '@xylabs/telemetry'\n\nexport interface IActor {\n start(): Promise<void>\n stop(): Promise<void>\n}\n\nexport type ActorParams = BaseParams<{\n traceProvider?: TracerProvider\n}>\n\nexport class Actor<TParams extends ActorParams = ActorParams> extends BaseEmitter<TParams> implements IActor {\n protected readonly _timers: Map<string, ReturnType<typeof setTimeout>> = new Map()\n private _active = false\n private readonly _displayName: string\n private readonly _id: string\n\n constructor(id: string, displayName: string = 'Actor', params: TParams) {\n const logger = params.logger ?? new IdLogger(console, () => `[${displayName} (${id})] `)\n super({ ...params, logger })\n this._displayName = displayName\n this._id = id\n }\n\n get displayName() {\n return this._displayName\n }\n\n get id() {\n return this._id\n }\n\n get name() {\n return this.constructor.name\n }\n\n protected get logPrefix() {\n return `[${this.displayName} (${this.id})] `\n }\n\n /**\n * The timer runs until the actor is deactivated (or you manually stop it).\n */\n registerTimer(timerName: string, callback: () => Promisable<void>, dueTimeMs: number, periodMs: number) {\n if (!this._active) {\n this.logger?.warn(\n `Cannot register timer '${timerName}' because actor is not active.`,\n )\n return\n }\n\n // Function to handle recursive scheduling\n const schedulePeriodicRun = async () => {\n // Stop if actor is deactivated or timer is removed\n if (!this._active || !this._timers.has(timerName)) return\n try {\n // Run the callback\n await callback()\n } catch (error) {\n // Catch and log any errors\n this.logger?.error(`Error in timer '${this.name}:${timerName}': ${error}`)\n } finally {\n // Always schedule subsequent executions based on the desired period\n this._timers.set(timerName, setTimeout(() => forget(schedulePeriodicRun(), { name: `schedulePeriodicRun:${this.name}:${timerName}` }), periodMs))\n }\n }\n\n // Schedule the 1st execution after the desired initial delay\n this._timers.set(timerName, setTimeout(() => forget(schedulePeriodicRun(), { name: `schedulePeriodicRun(initial):${this.name}:${timerName}` }), dueTimeMs))\n\n this.logger?.log(\n `Timer '${this.name}:${timerName}' registered: first call after ${dueTimeMs}ms, recurring every ${periodMs}ms.`,\n )\n }\n\n span<T>(name: string, fn: () => T): T {\n return span(`${this.name}:${name}`, fn, this.tracer)\n }\n\n async spanAsync<T>(name: string, fn: () => Promise<T>): Promise<T> {\n return await spanAsync(`${this.name}:${name}`, fn, this.tracer)\n }\n\n /**\n * Called by the Orchestrator when the actor is activated.\n */\n async start() {\n await Promise.resolve()\n this._active = true\n this.logger?.log('Started.')\n }\n\n /**\n * Called by the Orchestrator when the actor is deactivated.\n * Stop all running timers.\n */\n async stop() {\n await Promise.resolve()\n this._active = false\n this.logger?.log('Stopping all timers...')\n for (const [, timerRef] of this._timers.entries()) {\n clearTimeout(timerRef)\n }\n this._timers.clear()\n this.logger?.log('Stopped.')\n }\n}\n","export interface IOrchestrator {\n start(): Promise<void>\n stop(): Promise<void>\n}\n\nimport type { IActor } from './Actor.ts'\n\n// TODO: Inject logger\nexport class Orchestrator implements IOrchestrator {\n private actors: IActor[] = []\n private keepAliveHandle: NodeJS.Timeout | null = null\n private running = false\n\n /**\n * Registers an actor.\n * (We won't activate the actor until `start()` is called.)\n */\n async registerActor(actor: IActor) {\n if (this.running) {\n // If the orchestrator is already running, activate the actor immediately\n await actor.start()\n }\n this.actors.push(actor)\n }\n\n /**\n * Starts the orchestrator: activates all actors.\n */\n async start() {\n await Promise.resolve()\n if (this.running) {\n console.log('[Orchestrator] Already started.')\n return\n }\n\n console.log('[Orchestrator] Starting...')\n this.running = true\n for (const actor of this.actors) {\n await actor.start()\n }\n // This interval will fire every 24.8 days (2^31 - 1 ms), effectively never finishing\n this.keepAliveHandle = setInterval(() => {\n // No-op\n }, 2_147_483_647)\n }\n\n /**\n * Stops the orchestrator: deactivates all actors.\n */\n async stop() {\n await Promise.resolve()\n if (!this.running) {\n console.log('[Orchestrator] Already stopped.')\n return\n }\n\n console.log('[Orchestrator] Stopping...')\n for (const actor of this.actors) {\n await actor.stop()\n }\n this.running = false\n if (this.keepAliveHandle) clearInterval(this.keepAliveHandle)\n console.log('[Orchestrator] Stopped...')\n }\n}\n","import { filterAs } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport type { BaseParams } from '@xylabs/base'\nimport { toHex } from '@xylabs/hex'\nimport { findMostRecentBlock, sortBlocks } from '@xyo-network/chain-protocol'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type { BlockBoundWitness } from '@xyo-network/xl1-protocol'\nimport { asBlockBoundWitness } from '@xyo-network/xl1-protocol'\nimport type { ChainServiceCollection } from '@xyo-network/xl1-protocol-sdk'\n\nimport { Actor } from '../model/index.ts'\n\nexport type ChainHeadUpdateActorParams = BaseParams<Pick<ChainServiceCollection, 'chainIterator' | 'chainArchivist'>>\n\nexport class ChainHeadUpdateActor extends Actor<ChainHeadUpdateActorParams> {\n protected constructor(params: ChainHeadUpdateActorParams) {\n super('ChainHeadUpdate', 'ChainHeadUpdate', params)\n }\n\n protected get chainFinalizedArchivist() {\n return assertEx(this.params.chainArchivist, () => 'ChainArchivist not set')\n }\n\n protected get chainIterator() {\n return assertEx(this.params.chainIterator, () => 'chainIterator not set')\n }\n\n static async create(params: ChainHeadUpdateActorParams): Promise<ChainHeadUpdateActor> {\n await Promise.resolve()\n return new ChainHeadUpdateActor(params)\n }\n\n override async start(): Promise<void> {\n await super.start()\n // Register event handler on all insert event to check for new head\n this.chainFinalizedArchivist.on('inserted', async (data: { payloads: Payload[] }) => {\n await this.checkInsertedForNewHead(data)\n })\n // Poll in case we missed an event\n this.registerTimer('ChainHeadUpdateTimer', async () => await this.pollForNewHead(), 0, 250)\n }\n\n private async checkInsertedForNewHead(data: { payloads: Payload[] }) {\n const candidateBlock = sortBlocks(filterAs(data.payloads, asBlockBoundWitness)).at(-1)\n await this.updateHeadIfNewer(candidateBlock)\n }\n\n private async pollForNewHead() {\n const candidateBlock = await findMostRecentBlock(this.chainFinalizedArchivist)\n await this.updateHeadIfNewer(candidateBlock)\n }\n\n private async updateHeadIfNewer(candidateBlock?: BlockBoundWitness) {\n if (!candidateBlock) return\n const currentHead = await this.chainIterator.head()\n const candidateBlockNumber = candidateBlock.block\n const candidateBlockNumberDisplay = `0x${toHex(candidateBlockNumber)}`\n const currentBlockNumber = currentHead?.block ?? -1\n if (candidateBlockNumber > currentBlockNumber) {\n this.logger?.log('Found more recent head:', candidateBlockNumberDisplay)\n await this.chainIterator.updateHead(candidateBlock)\n this.logger?.log('Updated head:', candidateBlockNumberDisplay)\n }\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { BaseParams } from '@xylabs/base'\nimport { toHex } from '@xylabs/hex'\nimport { isDefined, isUndefined } from '@xylabs/typeof'\nimport { createDeclarationIntent } from '@xyo-network/chain-protocol'\nimport { BaseBlockProducerService } from '@xyo-network/chain-services'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { PayloadBundle } from '@xyo-network/payload-model'\nimport { PayloadBundleSchema } from '@xyo-network/payload-model'\nimport type {\n ChainStakeIntent,\n HydratedBlock, OpenTelemetryProviders,\n} from '@xyo-network/xl1-protocol'\nimport type { ChainServiceCollectionV2 } from '@xyo-network/xl1-protocol-sdk'\nimport {\n buildTransaction, flattenHydratedBlock, flattenHydratedTransaction,\n} from '@xyo-network/xl1-protocol-sdk'\n\nimport { Actor } from '../model/index.ts'\n\nexport type ProducerActorParams = BaseParams<\n Pick<ChainServiceCollectionV2,\n 'account'\n | 'balanceService'\n | 'chainIterator'\n | 'chainStakeViewer'\n | 'chainSubmissionsArchivistWrite'\n | 'pendingBundledTransactionsArchivistWrite'\n | 'producer'\n | 'stakeIntentService'\n >\n & OpenTelemetryProviders>\n\nconst SHOULD_REGISTER_REDECLARATION_INTENT_TIMER = true\nconst TEN_MINUTES = 10 * 60 * 1000 // 10 minutes in milliseconds\n\nexport class ProducerActor extends Actor<ProducerActorParams> {\n protected _lastProducedBlock: HydratedBlock | undefined\n protected _lastRedeclarationIntent: ChainStakeIntent | undefined\n\n protected constructor(params: ProducerActorParams) {\n super(assertEx(params.producer?.address, () => 'Missing producer in params'), 'Producer', params)\n }\n\n protected get account() {\n return assertEx(this.params.account, () => 'account not set')\n }\n\n protected get balanceService() {\n return assertEx(this.params.balanceService, () => 'balanceService not set')\n }\n\n protected get chainIterator() {\n return assertEx(this.params.chainIterator, () => 'chainIterator not set')\n }\n\n protected get chainStakeViewer() {\n return assertEx(this.params.chainStakeViewer, () => 'chainStakeViewer not set')\n }\n\n protected get chainSubmissionsArchivistWrite() {\n return assertEx(this.params.chainSubmissionsArchivistWrite, () => 'chainSubmissionsArchivistWrite not set')\n }\n\n protected get pendingBundledTransactionsArchivistWrite() {\n return assertEx(this.params.pendingBundledTransactionsArchivistWrite, () => 'pendingBundledTransactionsArchivistWrite not set')\n }\n\n protected get producer() {\n return assertEx(this.params.producer, () => 'producer not set')\n }\n\n protected get stakeIntentService() {\n return assertEx(this.params.stakeIntentService, () => 'stakeIntentService not set')\n }\n\n static async create(params: ProducerActorParams): Promise<ProducerActor> {\n await Promise.resolve()\n return new ProducerActor(params)\n }\n\n override async start(): Promise<void> {\n await super.start()\n // Register a timer to check if we should produce a block\n this.registerTimer('BlockProductionTimer', async () => {\n await this.spanAsync('produceBlock', async () => {\n // Get the updated head\n const head = await this.chainIterator.head()\n // Check if we've already produced the next block for this head\n const headHash = await PayloadBuilder.hash(head)\n // If our last produced block was the next block for the current head, we do not\n // need to produce another. This prevents duplicate blocks from being produced\n if (this._lastProducedBlock && this._lastProducedBlock[0].previous === headHash) {\n this.logger?.log('Block already produced:', `0x${toHex(this._lastProducedBlock[0].block)}`)\n } else {\n // Produce the next block\n const nextBlock = await this.producer.next(head)\n // If it was produced\n if (nextBlock) {\n const displayBlockNumber = `0x${toHex(nextBlock[0].block)}`\n this.logger?.log('Produced block:', displayBlockNumber)\n // Insert the block into the chain\n await this.chainSubmissionsArchivistWrite.insert(flattenHydratedBlock(nextBlock))\n this.logger?.log('Published block:', displayBlockNumber)\n // Record that we have produced a block so we do not produce it again\n this._lastProducedBlock = nextBlock\n }\n }\n })\n }, 100, 500)\n\n if (SHOULD_REGISTER_REDECLARATION_INTENT_TIMER) {\n // Register a timer to check if we should redeclare the producer\n this.registerTimer('ProducerRedeclarationTimer', async () => {\n await this.spanAsync('producerRedeclarationTimer', async () => {\n // Decide if we should redeclare intent\n if (!BaseBlockProducerService.RedeclareIntent) return\n\n // Get the current block\n const head = await this.chainIterator.head()\n if (isUndefined(head)) return\n const currentBlock = head.block\n\n // Calculate the time until the producer's declaration expires\n const blocksUntilExpiration = await this.calculateBlocksUntilProducerDeclarationExpiration(currentBlock)\n\n // Allow the producer time to redeclare itself via block production\n // (for free) before submitting a redeclaration intent transaction.\n if (blocksUntilExpiration > BaseBlockProducerService.RedeclarationWindow * 0.1) {\n // Clear any previous redeclaration intent\n this._lastRedeclarationIntent = undefined\n // No need to redeclare yet\n return\n }\n\n // If we already have a valid redeclaration intent, do not create another\n // unless it has expired.\n if (this._lastRedeclarationIntent) {\n // Check if the last redeclaration intent is still valid\n if (this._lastRedeclarationIntent.exp > currentBlock) return\n // If it has expired, clear the last redeclaration intent\n this._lastRedeclarationIntent = undefined\n }\n\n // Check if we have a valid balance before declaring intent\n if (!await this.validateCurrentBalance()) {\n this.logger?.error(\n `Add balance to address ${this.account.address} for the producer to declare it's intent.`,\n )\n return\n }\n\n // Check if we have a valid stake before declaring intent\n if (!(await this.validateCurrentStake())) {\n this.logger?.error(\n `Add stake to contract address ${process.env.XYO_EVM_STAKING_CONTRACT_ADDRESS}`\n + ' for the producer to declare it\\'s intent.',\n )\n return\n }\n\n // Create a redeclaration intent\n this.logger?.log('Creating redeclaration intent for producer:', this.account.address)\n const redeclarationIntent = createDeclarationIntent(\n this.account.address,\n 'producer',\n currentBlock,\n currentBlock + BaseBlockProducerService.RedeclarationDuration,\n )\n\n // Submit the redeclaration intent\n await this.submitRedeclarationIntent(currentBlock, redeclarationIntent)\n\n // On successful submission, save the redeclaration intent\n this._lastRedeclarationIntent = redeclarationIntent\n })\n }, 10_000, TEN_MINUTES)\n }\n }\n\n protected async calculateBlocksUntilProducerDeclarationExpiration(currentBlock: number): Promise<number> {\n // Decide if we need to redeclare intent\n const ranges = await this.stakeIntentService.getDeclaredCandidateRanges(this.account.address, 'producer')\n // TODO: This doesn't handle the case where the producer had declared a range for the future\n // but we're in a range that's not the future\n // Sort in ascending order based on ending range to get range with highest ending block\n const lastRange = ranges.toSorted((a, b) => a[1] > b[1] ? 1 : -1).at(-1)\n\n // Use the most recent range's end block as the current declaration end OR\n const [, currentDeclarationEnd] = lastRange\n // If we have no ranges, we need to declare intent, so use the current block\n || [undefined, currentBlock]\n\n // Calculate the time until the producer's declaration expires\n const timeToProducerExpiration = currentDeclarationEnd - currentBlock\n return timeToProducerExpiration\n }\n\n protected async submitRedeclarationIntent(currentBlock: number, redeclarationIntent: ChainStakeIntent): Promise<void> {\n this.logger?.log('Submitting redeclaration intent for producer:', this.account.address)\n // Create a transaction to submit the redeclaration intent\n const tx = await buildTransaction(\n this.chainIterator.chainId,\n [redeclarationIntent],\n [],\n this.account,\n currentBlock,\n currentBlock + 1000,\n )\n const payloads = flattenHydratedTransaction(tx)\n const root = tx[0]._hash\n const payloadBundle = new PayloadBuilder<PayloadBundle>({ schema: PayloadBundleSchema }).fields({ payloads, root }).build()\n\n // Submit the redeclaration intent\n await this.pendingBundledTransactionsArchivistWrite.insert([payloadBundle])\n\n this.logger?.log('Submitted redeclaration intent for producer:', this.account.address)\n }\n\n protected async validateCurrentBalance(): Promise<boolean> {\n // Check if we have a valid balance before declaring intent\n const head = this._lastProducedBlock?.[0]._hash\n if (isDefined(head)) {\n const balances = await this.balanceService.balances(head, [this.account.address])\n const currentBalance = balances[this.account.address] ?? 0n\n if (currentBalance <= 0n) {\n this.logger?.error(`Producer ${this.account.address} has no balance.`)\n return false\n }\n return true\n }\n return true\n }\n\n protected async validateCurrentStake(): Promise<boolean> {\n // TODO: Use StakeIntentService to get the required minimum stake for\n // the intent once services is published\n // const requiredMinimumStake = this.stakeIntentService.getRequiredMinimumStakeForIntent('producer')\n const requiredMinimumStake = isDefined(process.env.XYO_PRODUCER_MIN_STAKE)\n ? BigInt(process.env.XYO_PRODUCER_MIN_STAKE)\n : 1n\n // Check if we have a valid stake before declaring intent\n const currentStake = await this.chainStakeViewer.activeByAddressStaked(this.account.address)\n if (currentStake < requiredMinimumStake) {\n this.logger?.error(`Producer ${this.account.address} has insufficient stake.`)\n return false\n }\n return true\n }\n}\n","import type {\n IncomingMessage, Server, ServerResponse,\n} from 'node:http'\nimport http from 'node:http'\n\nimport type { CreatableStatus } from '@xylabs/creatable'\nimport { isDefined, isEmptyString } from '@xylabs/typeof'\nimport type { Initializable } from '@xyo-network/xl1-protocol'\n\nimport type { RuntimeStatusMonitor } from '../status/index.ts'\n\nconst sendStatus = (res: ServerResponse, status: CreatableStatus, errorCode: number) => {\n const statusCode = status === 'started' ? 200 : errorCode\n res.writeHead(statusCode, { 'Content-Type': 'application/json' })\n res.end(JSON.stringify({ status }))\n}\n\nconst notFound = (res: ServerResponse) => {\n res.writeHead(404, { 'Content-Type': 'application/json' })\n res.end(JSON.stringify({ status: 'not found' }))\n}\n\n/**\n * Starts an HTTP server with Kubernetes health endpoints:\n * - /healthz\n * - /livez\n * - /readyz\n * @param port The port to listen on (default: 8080)\n */\nconst createHealthServer = (port: number = 8080, statusMonitor: RuntimeStatusMonitor) => {\n const server = http.createServer((req: IncomingMessage, res: ServerResponse) => {\n const url = req.url ?? ''\n\n const status = statusMonitor.getGlobalStatus()\n\n switch (url) {\n case '/healthz': {\n sendStatus(res, status, 500)\n break\n }\n case '/livez': {\n sendStatus(res, status, 503)\n break\n }\n case '/readyz': {\n sendStatus(res, status, 503)\n break\n }\n default: {\n notFound(res)\n }\n }\n })\n\n server.listen(port, () => {\n console.log(`Health server running on http://localhost:${port}`)\n console.log(' - /healthz')\n console.log(' - /livez')\n console.log(' - /readyz')\n })\n return server\n}\n\nexport const initHealthEndpoints: Initializable<{ statusReporter: RuntimeStatusMonitor }, Server | undefined> = (params) => {\n const healthCheckEnvVarPort = process.env.XYO_PRODUCER_HEALTH_CHECK_PORT\n if (isDefined(healthCheckEnvVarPort) && !isEmptyString(healthCheckEnvVarPort)) {\n const healthCheckPort = Number.parseInt(healthCheckEnvVarPort, 10)\n return createHealthServer(healthCheckPort, params.statusReporter)\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Base } from '@xylabs/base'\nimport { asAddress } from '@xylabs/hex'\nimport type { Logger } from '@xylabs/logger'\nimport { isDefined } from '@xylabs/typeof'\nimport { balanceSummaryRepositoryFromMap } from '@xyo-network/chain-modules'\nimport type {\n BaseBlockProducerServiceParams, BaseService, XyoValidatorParams,\n} from '@xyo-network/chain-services'\nimport { initTelemetry } from '@xyo-network/chain-telemetry'\nimport { startupSpanAsync } from '@xyo-network/chain-utils'\nimport { validateHydratedBlockState } from '@xyo-network/chain-validation'\nimport type { ChainServiceCollectionV2 } from '@xyo-network/xl1-protocol-sdk'\n\nimport {\n initChainFinalizedArchivist, initChainSubmissionsArchivist, initPendingBundledTransactionsArchivist, initRejectedTransactionsArchivist,\n initStakeIntentStateArchivist,\n} from './archivists/index.ts'\nimport { initHealthEndpoints } from './health/initHealthEndpoints.ts'\nimport { initBalanceSummaryMap } from './map/index.ts'\nimport {\n initAccount, initBalanceService, initBlockProducer, initBlockRewardService, initChainIterator, initChainService, initElectionService, initHead,\n initPendingTransactions, initStakeIntentService,\n} from './services/index.ts'\nimport { RuntimeStatusMonitor } from './status/index.ts'\n\nconst telemetryConfig = {\n attributes: {\n serviceName: 'xl1-producer',\n serviceVersion: '1.0.0',\n },\n metricsConfig: {\n endpoint: '/metrics',\n port: 9464,\n },\n}\n\ninterface Startable {\n start: () => Promise<void>\n}\n\nconst isStartable = (value: unknown): value is Startable => {\n return isDefined((value as Startable).start) && typeof (value as Startable).start === 'function'\n}\n\nexport const initServices = async (logger?: Logger): Promise<ChainServiceCollectionV2> => {\n Base.defaultLogger = logger ?? console\n\n const statusReporter = new RuntimeStatusMonitor(logger ?? console)\n statusReporter.onGlobalTransition({ to: 'started' }, () => {\n Base.defaultLogger?.log('All services started.')\n })\n statusReporter.onGlobalTransition({ to: 'error' }, () => {\n Base.defaultLogger?.error('Producer encountered an unhandled error!')\n // eslint-disable-next-line unicorn/no-process-exit\n process.exit(1)\n })\n\n await startupSpanAsync('initHealthEndpoints', () => initHealthEndpoints({ statusReporter }))\n\n const [\n { traceProvider, meterProvider },\n account,\n ] = await Promise.all([\n startupSpanAsync('initTelemetry', () => initTelemetry(telemetryConfig)),\n startupSpanAsync('initAccount', () => initAccount()),\n ])\n\n // Archivists\n const [\n chainArchivist,\n [pendingBundledTransactionsArchivist, pendingBundledTransactionsArchivistWrite],\n rejectedTransactionsArchivist,\n chainSubmissionsArchivistWrite,\n stakeIntentStateArchivist,\n chainService,\n balanceSummaryMap,\n ] = await Promise.all([\n startupSpanAsync(\n 'ChainFinalizedArchivist',\n () => initChainFinalizedArchivist(traceProvider),\n ),\n startupSpanAsync(\n 'PendingBundledTransactionsArchivist',\n () => initPendingBundledTransactionsArchivist(traceProvider),\n ),\n startupSpanAsync(\n 'RejectedTransactionsArchivist',\n () => initRejectedTransactionsArchivist(traceProvider),\n ),\n startupSpanAsync(\n 'ChainSubmissionsArchivist',\n () => initChainSubmissionsArchivist(),\n ),\n startupSpanAsync(\n 'StakeIntentStateArchivist',\n () => initStakeIntentStateArchivist(),\n ),\n startupSpanAsync(\n 'ChainService',\n () => initChainService({ account, name: 'ChainService' }),\n ),\n startupSpanAsync(\n 'BalanceSummaryMap',\n () => initBalanceSummaryMap(traceProvider),\n ),\n ])\n\n const chainId = chainService.chainId\n const chainContractViewer = chainService\n const chainStakeViewer = chainService\n const chainStaker = chainService\n const head = await startupSpanAsync('initHead', () => initHead({\n account, chainArchivist, chainSubmissionsArchivistWrite,\n }))\n const [\n pendingTransactionsService,\n rewardService,\n chainIterator,\n balanceService,\n ] = await Promise.all([\n startupSpanAsync('PendingTransactions', () => initPendingTransactions({\n name: 'PendingTransactionsService',\n chainArchivist,\n chainId,\n meterProvider,\n pendingBundledTransactionsArchivist,\n rejectedTransactionsArchivist,\n traceProvider,\n statusReporter,\n })),\n startupSpanAsync(\n 'RewardService',\n () => initBlockRewardService({\n name: 'RewardService',\n account,\n chainService,\n traceProvider,\n statusReporter,\n }),\n ),\n startupSpanAsync(\n 'ChainIterator',\n () => initChainIterator({\n name: 'ChainIterator',\n traceProvider,\n chainArchivist,\n head,\n statusReporter,\n }),\n ),\n startupSpanAsync(\n 'BalanceService',\n () => initBalanceService({\n name: 'BalanceService',\n chainArchivist,\n summaryRepository: balanceSummaryRepositoryFromMap(balanceSummaryMap),\n }),\n ),\n ])\n\n const stakeIntentService = await startupSpanAsync(\n 'StakeIntentService',\n () => initStakeIntentService({\n name: 'StakeIntentService',\n chainArchivist,\n chainIterator,\n chainStakeViewer,\n logger: console,\n stakeIntentStateArchivist,\n traceProvider,\n statusReporter,\n }),\n )\n\n const electionService = await startupSpanAsync(\n 'ElectionService',\n () => initElectionService({\n name: 'ElectionService',\n traceProvider,\n chainIterator,\n chainStakeViewer,\n stakeIntentService,\n statusReporter,\n }),\n )\n\n const validatorParams: XyoValidatorParams = {\n name: 'Validator',\n account,\n chainId,\n pendingBundledTransactionsArchivist,\n chainArchivist,\n electionService,\n rewardService,\n stakeIntentService,\n traceProvider,\n validateHydratedBlockState,\n }\n const rewardAddress = isDefined(process.env.XYO_BLOCK_REWARD_ADDRESS)\n ? assertEx(asAddress(process.env.XYO_BLOCK_REWARD_ADDRESS), () => 'Invalid block reward address provided')\n : account.address\n const producerParams: BaseBlockProducerServiceParams = {\n ...validatorParams,\n name: 'Producer',\n balanceService,\n chainArchivist,\n pendingBundledTransactionsArchivist,\n pendingTransactionsService,\n rejectedTransactionsArchivist,\n rewardAddress,\n }\n const producer = await startupSpanAsync('Producer', () => initBlockProducer(producerParams))\n // TODO: Add to base service collection\n const result: ChainServiceCollectionV2 = {\n account,\n balanceService,\n chainArchivist,\n chainContractViewer,\n chainIterator,\n chainStaker,\n chainStakeViewer,\n chainSubmissionsArchivistWrite,\n electionService,\n pendingBundledTransactionsArchivistWrite,\n pendingTransactionsService,\n producer,\n rewardService,\n stakeIntentService,\n }\n\n Base.defaultLogger?.log('All services created. Starting...')\n const startableServices = [balanceSummaryMap, ...Object.values(result)].filter(isStartable)\n // Start all services that have a start method\n await Promise.all(startableServices.map(service => service.start()))\n return result\n}\n","import type { TracerProvider } from '@opentelemetry/api'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { initArchivistSync } from '@xyo-network/chain-orchestration'\nimport { startupSpanAsync } from '@xyo-network/chain-utils'\nimport { Mutex } from 'async-mutex'\n\nimport { initLocalChainFinalizedArchivist } from './local.ts'\nimport { initRemoteChainFinalizedArchivist } from './remote.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport async function initChainFinalizedArchivist(traceProvider: TracerProvider) {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const [remote, local] = await Promise.all([\n startupSpanAsync('ChainFinalizedArchivist:initRemote', () => initRemoteChainFinalizedArchivist()),\n startupSpanAsync('ChainFinalizedArchivist:initLocal', () => initLocalChainFinalizedArchivist()),\n ])\n await startupSpanAsync(\n 'ChainFinalizedArchivist:initArchivistSync',\n () => initArchivistSync('ChainFinalizedArchivist', remote, local, 200, Number.MAX_SAFE_INTEGER, traceProvider),\n )\n singleton = local\n return singleton\n })\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { Initializable } from '@xyo-network/xl1-protocol'\nimport { Mutex } from 'async-mutex'\n\nimport { getLocalPersistentArchivist } from '../lib/index.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initLocalChainFinalizedArchivist: Initializable<void, ArchivistInstance> = async (): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n singleton = await getLocalPersistentArchivist('chain', 'finalized')\n return singleton\n })\n}\n","import { rm } from 'node:fs/promises'\n\nimport { LmdbArchivist, LmdbArchivistConfigSchema } from '@xyo-network/archivist-lmdb'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\n\nimport type { StoreKind } from '../../store/index.ts'\nimport { getStoreDirectory } from '../../store/index.ts'\n\n/**\n * Returns a local persistent archivist\n * @param dbName The name of the database\n * @param storeName The name of the store\n * @param kind The kind of the archivist\n * @returns an archivist instance\n */\nexport const getLocalPersistentArchivist = (dbName: string, storeName: string, kind: StoreKind = 'lmdb'): Promise<ArchivistInstance> => {\n switch (kind) {\n case 'lmdb': {\n return LmdbArchivist.create({\n account: 'random',\n config: {\n clearStoreOnStart: false,\n dbName,\n location: getStoreDirectory(dbName, 'lmdb'),\n schema: LmdbArchivistConfigSchema,\n storeName,\n },\n })\n }\n }\n}\n\nexport const deleteLocalPersistentArchivist = async (dbName: string, _storeName: string, kind: StoreKind = 'lmdb'): Promise<void> => {\n await Promise.resolve()\n console.warn(`Deleting local persistent archivist for ${dbName} of kind ${kind}.`)\n let location = ''\n switch (kind) {\n case 'lmdb': {\n location = getStoreDirectory(dbName, 'lmdb')\n break\n }\n }\n await rm(location, { recursive: true, force: true })\n}\n","import Path from 'node:path'\n\nimport type { StoreKind } from './StoreKind.ts'\n\nconst STORAGE_ROOT = process.env.STORAGE_ROOT ?? Path.join(process.cwd(), '.store')\n\n/**\n * Creates a convention-based directory path for an archivist store\n * @param name The name of the archivist\n * @param kind The kind of the archivist (optional)\n * @returns The directory path for the archivist store\n */\nexport const getStoreDirectory = (name: string, kind?: StoreKind): string => {\n return (kind === undefined) ? Path.join(STORAGE_ROOT, name) : Path.join(STORAGE_ROOT, kind, name)\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { initBridge, initBridgedArchivistModule } from '@xyo-network/chain-orchestration'\nimport type { Initializable } from '@xyo-network/xl1-protocol'\nimport { Mutex } from 'async-mutex'\n\nconst nodeUrl = process.env.XYO_CHAIN_ARCHIVIST_NODE_URL ?? 'http://localhost:8080'\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initRemoteChainFinalizedArchivist: Initializable<void, ArchivistInstance> = async (): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const bridge = await initBridge(nodeUrl)\n singleton = await initBridgedArchivistModule({ bridge, moduleName: 'XYOChain:Chain:Finalized' })\n return assertEx(singleton, () => 'Error: RemoteChainFinalizedArchivist failed to initialize')\n })\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { startupSpanAsync } from '@xyo-network/chain-utils'\nimport type { Initializable } from '@xyo-network/xl1-protocol'\nimport { Mutex } from 'async-mutex'\n\nimport { initRemoteChainSubmissionsArchivist } from './remote.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initChainSubmissionsArchivist: Initializable<void, ArchivistInstance> = async (): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const remote = await startupSpanAsync('ChainSubmissionsArchivist:initRemote', () => initRemoteChainSubmissionsArchivist())\n singleton = remote\n return assertEx(singleton, () => new Error('Failed to initialize ChainSubmissionsArchivist'))\n })\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { initBridge, initBridgedArchivistModule } from '@xyo-network/chain-orchestration'\nimport type { Initializable } from '@xyo-network/xl1-protocol'\nimport { Mutex } from 'async-mutex'\n\nconst nodeUrl = process.env.XYO_CHAIN_ARCHIVIST_NODE_URL ?? 'http://localhost:8080'\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initRemoteChainSubmissionsArchivist: Initializable<void, ArchivistInstance> = async (): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const bridge = await initBridge(nodeUrl)\n singleton = await initBridgedArchivistModule({ bridge, moduleName: 'XYOChain:Chain:Submissions' })\n return assertEx(singleton, () => new Error('Failed to initialize RemoteChainSubmissionsArchivist'))\n })\n}\n","import type { TracerProvider } from '@opentelemetry/api'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { initArchivistSync } from '@xyo-network/chain-orchestration'\nimport { startupSpanAsync } from '@xyo-network/chain-utils'\nimport { Mutex } from 'async-mutex'\n\nimport { initLocalPendingTransactionsArchivist } from './local.ts'\nimport { initRemotePendingTransactionsArchivist } from './remote.ts'\n\nconst mutex = new Mutex()\nlet singleton: [local: ArchivistInstance, remote: ArchivistInstance] | undefined\n\nexport async function initPendingBundledTransactionsArchivist(_: TracerProvider): Promise<[local: ArchivistInstance, remote: ArchivistInstance]> {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const remote = await startupSpanAsync('PendingBundledTransactionsArchivist:initRemote', () => initRemotePendingTransactionsArchivist())\n const local = await startupSpanAsync('PendingBundledTransactionsArchivist:initLocal', () => initLocalPendingTransactionsArchivist())\n // Grab the most recent payload from the remote archivist\n const start = await remote.next({ limit: 1, order: 'desc' })\n // Write it locally so we have a starting point for syncing\n await local.insert(start)\n await startupSpanAsync(\n 'PendingBundledTransactionsArchivist:initArchivistSync',\n () => initArchivistSync('PendingBundledTransactionsArchivist', remote, local),\n )\n singleton = [local, remote]\n return singleton\n })\n}\n","import { MemoryArchivist, MemoryArchivistConfigSchema } from '@xyo-network/archivist-memory'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { Initializable } from '@xyo-network/xl1-protocol'\nimport { Mutex } from 'async-mutex'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initLocalPendingTransactionsArchivist: Initializable<void, ArchivistInstance> = async (): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n singleton = await MemoryArchivist.create({\n account: 'random',\n config: {\n schema: MemoryArchivistConfigSchema, max: 1000, name: 'localPendingTransactions',\n },\n })\n return singleton\n })\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { initBridge, initBridgedArchivistModule } from '@xyo-network/chain-orchestration'\nimport type { Initializable } from '@xyo-network/xl1-protocol'\nimport { Mutex } from 'async-mutex'\n\nconst bridgeUrl = process.env.XYO_PENDING_ARCHIVIST_NODE_URL ?? 'http://localhost:8080'\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initRemotePendingTransactionsArchivist: Initializable<void, ArchivistInstance> = async (): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const bridge = await initBridge(bridgeUrl)\n singleton = await initBridgedArchivistModule({ bridge, moduleName: 'XYOChain:Pending:PendingTransactions' })\n return assertEx(singleton, () => 'Error: RemotePendingBundledTransactionsArchivist is undefined')\n })\n}\n","import type { TracerProvider } from '@opentelemetry/api'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { startupSpanAsync } from '@xyo-network/chain-utils'\nimport { Mutex } from 'async-mutex'\n\nimport { initLocalRejectedTransactionsArchivist } from './local.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport async function initRejectedTransactionsArchivist(_traceProvider: TracerProvider) {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const local = await startupSpanAsync('RejectedTransactionsArchivist:initLocal', () => initLocalRejectedTransactionsArchivist())\n singleton = local\n return singleton\n })\n}\n","import { MemoryArchivist, MemoryArchivistConfigSchema } from '@xyo-network/archivist-memory'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { Initializable } from '@xyo-network/xl1-protocol'\nimport { Mutex } from 'async-mutex'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initLocalRejectedTransactionsArchivist: Initializable<void, ArchivistInstance> = async (): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n singleton = await MemoryArchivist.create({\n account: 'random',\n config: {\n schema: MemoryArchivistConfigSchema, max: 1000, name: 'localRejectedTransactions',\n },\n })\n return singleton\n })\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { startupSpanAsync } from '@xyo-network/chain-utils'\nimport type { Initializable } from '@xyo-network/xl1-protocol'\nimport { Mutex } from 'async-mutex'\n\nimport { initLocalStakeIntentStateArchivist } from './local.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initStakeIntentStateArchivist: Initializable<void, ArchivistInstance> = async (): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const local = await startupSpanAsync('StakeIntentStateArchivist:initLocal', () => initLocalStakeIntentStateArchivist())\n singleton = local\n return assertEx(singleton, () => 'Error: StakeIntentStateArchivist is undefined')\n })\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { Initializable } from '@xyo-network/xl1-protocol'\nimport { Mutex } from 'async-mutex'\n\nimport { getLocalPersistentArchivist } from '../lib/index.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initLocalStakeIntentStateArchivist: Initializable<void, ArchivistInstance> = async (): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n console.log('[InitServices:LocalStakeIntentStateArchivist:Initializing]')\n singleton = await getLocalPersistentArchivist('stakeIntent', 'state')\n console.log('[InitServices:LocalStakeIntentStateArchivist:Initialized]')\n return assertEx(singleton, () => new Error('Failed to initialize stake intent state archivist'))\n })\n}\n","import type { TracerProvider } from '@opentelemetry/api'\nimport type { Hash } from '@xylabs/hex'\nimport { isDefined } from '@xylabs/typeof'\nimport type { MapType } from '@xyo-network/chain-protocol'\nimport { startupSpanAsync } from '@xyo-network/chain-utils'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { BalancesStepSummary } from '@xyo-network/xl1-protocol-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport { initLocalBalanceSummaryMap } from './local.ts'\n\nconst mutex = new Mutex()\nlet singleton: MapType<Hash, WithStorageMeta<BalancesStepSummary>> | undefined\n\nexport async function initBalanceSummaryMap(_traceProvider: TracerProvider): Promise<MapType<Hash, WithStorageMeta<BalancesStepSummary>>> {\n return await mutex.runExclusive(async () => {\n if (isDefined(singleton)) return singleton\n const local = await startupSpanAsync('BalanceSummaryMap:initLocal', () => initLocalBalanceSummaryMap())\n singleton = local\n return singleton\n })\n}\n","import type { Hash } from '@xylabs/hex'\nimport { isDefined } from '@xylabs/typeof'\nimport type { MapType } from '@xyo-network/chain-protocol'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { BalancesStepSummary } from '@xyo-network/xl1-protocol-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport { getLocalPersistentMap } from '../localPersistentMap.ts'\n\nconst mutex = new Mutex()\nlet singleton: MapType<Hash, WithStorageMeta<BalancesStepSummary>> | undefined\n\nexport const initLocalBalanceSummaryMap = async (): Promise<MapType<Hash, WithStorageMeta<BalancesStepSummary>>> => {\n return await mutex.runExclusive(async () => {\n if (isDefined(singleton)) return singleton\n singleton = await getLocalPersistentMap<Hash, WithStorageMeta<BalancesStepSummary>>('balance', 'summary')\n return singleton\n })\n}\n","import { rm } from 'node:fs/promises'\n\nimport type { MapType } from '@xyo-network/chain-protocol'\n\nimport type { StoreKind } from '../store/index.ts'\nimport { getStoreDirectory } from '../store/index.ts'\nimport { SynchronousLmdbMap } from './driver/index.ts'\n\n/**\n * Returns a local persistent map\n * @param dbName The name of the database\n * @param storeName The name of the store\n * @param kind The kind of the map\n * @returns a map\n */\nexport const getLocalPersistentMap = async <TId, TData>(dbName: string, storeName: string, kind: StoreKind = 'lmdb'): Promise<MapType<TId, TData>> => {\n switch (kind) {\n case 'lmdb': {\n const location = getStoreDirectory(dbName, 'lmdb')\n const store = await SynchronousLmdbMap.create({\n location, dbName, storeName,\n })\n return store as unknown as MapType<TId, TData>\n }\n }\n}\n\nexport const deleteLocalPersistentMap = async (dbName: string, _storeName: string, kind: StoreKind = 'lmdb'): Promise<void> => {\n await Promise.resolve()\n console.warn(`Deleting local persistent map for ${dbName} of kind ${kind}.`)\n let location = ''\n switch (kind) {\n case 'lmdb': {\n location = getStoreDirectory(dbName, 'lmdb')\n break\n }\n }\n await rm(location, { recursive: true, force: true })\n}\n","import { creatable } from '@xylabs/creatable'\nimport { SynchronousMap } from '@xyo-network/chain-protocol'\nimport { BaseService } from '@xyo-network/chain-services'\nimport {\n Database, Key, open, RootDatabase,\n} from 'lmdb'\n\nimport { LmdbMapParams } from './Params.ts'\n\n// TODO: Abstract creatable instead of service?\n/**\n * A synchronous LMDB-backed Map implementation.\n * This class provides a synchronous interface to an LMDB database, allowing for key-value storage.\n * It allows for multi-tenancy within a single LMDB environment by using a root database (located\n * at this.folderPath) and a specific DB within the environment (specified by this.params.storeName).\n * @template K - The type of keys in the map.\n * @template V - The type of values in the map.\n */\n@creatable()\nexport class SynchronousLmdbMap<K extends Key, V> extends BaseService<LmdbMapParams> implements SynchronousMap<K, V> {\n protected db!: Database<V, K>\n protected rootDatabase!: RootDatabase\n\n /**\n * The path to the LMDB folder where the database is stored.\n * This is constructed from the location and dbName parameters\n * allowing for multiple DBs within the root (by specifying a\n * different storeName).\n * @returns The folder path for the LMDB database.\n */\n get folderPath() {\n return `${this.params.location}/${this.params.dbName}`\n }\n\n all(): V[] {\n return [...this.db.getRange({})].map(entry => entry.value)\n }\n\n clear(): void {\n this.db.clearSync()\n }\n\n delete(id: K): boolean {\n return this.db.removeSync(id)\n }\n\n get(id: K): V | undefined {\n return this.db.get(id)\n }\n\n has(id: K): boolean {\n return this.db.doesExist(id)\n }\n\n set(id: K, data: V): this {\n this.db.putSync(id, data)\n return this\n }\n\n override async startHandler(): Promise<void> {\n await super.startHandler()\n // Initialize the DB Environment (opens the default LMDB database)\n this.rootDatabase = open({ path: this.folderPath })\n // Open the desired DB (using the store name)\n this.db = this.rootDatabase.openDB<V, K>({ name: this.params.storeName })\n }\n}\n","import type { Promisable } from '@xylabs/promise'\nimport { isUndefined } from '@xylabs/typeof'\nimport { ADDRESS_INDEX, generateXyoBaseWalletFromPhrase } from '@xyo-network/chain-protocol'\nimport { HDWallet } from '@xyo-network/wallet'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type { Initializable } from '@xyo-network/xl1-protocol'\n\nlet accountServiceSingleton: Promisable<WalletInstance> | undefined\n\nexport const initAccount: Initializable<void, WalletInstance> = async (): Promise<WalletInstance> => {\n if (accountServiceSingleton) return accountServiceSingleton\n let walletPhrase = process.env.XYO_WALLET_MNEMONIC\n if (isUndefined(walletPhrase)) {\n console.log('No wallet mnemonic specified!')\n const randomMnemonic = HDWallet.generateMnemonic()\n console.log(`Using randomly generated mnemonic: ${randomMnemonic}`)\n walletPhrase = randomMnemonic\n }\n const wallet = await generateXyoBaseWalletFromPhrase(walletPhrase)\n const account = await wallet.derivePath(ADDRESS_INDEX.XYO)\n accountServiceSingleton = account\n return accountServiceSingleton\n}\n","import type { Promisable } from '@xylabs/promise'\nimport type { BaseAccountBalanceServiceParams } from '@xyo-network/chain-services'\nimport { BaseAccountBalanceService } from '@xyo-network/chain-services'\nimport type { AccountBalanceServiceV2, Initializable } from '@xyo-network/xl1-protocol'\n\nlet balanceServiceSingleton: Promisable<AccountBalanceServiceV2> | undefined\n\nexport const initBalanceService: Initializable<BaseAccountBalanceServiceParams, AccountBalanceServiceV2>\n= async (params): Promise<AccountBalanceServiceV2> => {\n if (balanceServiceSingleton) return balanceServiceSingleton\n balanceServiceSingleton = await BaseAccountBalanceService.create(params)\n return balanceServiceSingleton\n}\n","import type { Promisable } from '@xylabs/promise'\nimport type { BaseAccountableServiceParams } from '@xyo-network/chain-services'\nimport { MemoryChainService } from '@xyo-network/chain-services'\nimport type { ChainService, Initializable } from '@xyo-network/xl1-protocol'\n\nimport { canUseEvmContractChainService, initEvmContractChainService } from './evm.ts'\n\nlet chainStakeServiceSingleton: Promisable<ChainService> | undefined\n\nexport const initChainService: Initializable<BaseAccountableServiceParams, ChainService> = ({ account }) => init({ name: 'ChainService', account })\n\nconst init: Initializable<BaseAccountableServiceParams, ChainService> = ({\n account, traceProvider, meterProvider, logger,\n}): Promisable<ChainService> => {\n if (chainStakeServiceSingleton) return chainStakeServiceSingleton\n chainStakeServiceSingleton = canUseEvmContractChainService()\n ? initEvmContractChainService({\n name: 'ChainStakeService',\n account,\n traceProvider,\n meterProvider,\n logger,\n })\n : MemoryChainService.create({})\n // Create service\n return chainStakeServiceSingleton\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Address } from '@xylabs/hex'\nimport { asAddress } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport type { BaseAccountableServiceParams } from '@xyo-network/chain-services'\nimport { EvmChainService } from '@xyo-network/chain-services'\nimport type { Initializable } from '@xyo-network/xl1-protocol'\nimport type { ContractRunner } from 'ethers'\nimport { Wallet } from 'ethers/wallet'\n\nimport { canUseEvmProvider, initEvmProvider } from '../evm/index.ts'\n\nlet chainStakeServiceSingleton: Promisable<EvmChainService> | undefined\n\nexport const canUseEvmContractChainService = () => {\n return process.env.XYO_EVM_STAKING_CONTRACT_ADDRESS !== undefined && canUseEvmProvider()\n}\n\nexport const initEvmContractChainService: Initializable<BaseAccountableServiceParams, EvmChainService> = async ({\n account, traceProvider, meterProvider, logger,\n}) => {\n if (chainStakeServiceSingleton) return chainStakeServiceSingleton\n // Parse ENV\n const emvStakingContractAddress = assertEx(process.env.XYO_EVM_STAKING_CONTRACT_ADDRESS, () => 'Error: XYO_EVM_STAKING_CONTRACT_ADDRESS is required')\n // Configure wallet\n const id: Address = assertEx(asAddress(emvStakingContractAddress), () => 'Error: XYO_EVM_STAKING_CONTRACT_ADDRESS is invalid')\n const provider = assertEx(await initEvmProvider())\n const privateKey = assertEx(account.private?.hex, () => 'Error: Account does not have a private key')\n const runner: ContractRunner = new Wallet(privateKey, provider)\n // Create service\n chainStakeServiceSingleton = EvmChainService.create({\n id, runner, traceProvider, meterProvider, logger,\n })\n return await chainStakeServiceSingleton\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { JsonRpcProvider } from 'ethers/providers'\n\nimport { canUseJsonRpcProvider, initJsonRpcProvider } from './initGanacheProvider.ts'\nimport { canUseInfuraProvider, initInfuraProvider } from './initInfuraProvider.ts'\n\nlet provider: Promise<JsonRpcProvider> | undefined\n\nexport const initEvmProvider = async () => {\n if (provider) return provider\n if (canUseInfuraProvider()) {\n provider = initInfuraProvider()\n } else if (canUseJsonRpcProvider()) {\n provider = initJsonRpcProvider()\n }\n return assertEx(await provider, () => 'Error: No provider available')\n}\n\nexport const canUseEvmProvider = () => {\n return canUseInfuraProvider() || canUseJsonRpcProvider()\n}\n","import { assertEx } from '@xylabs/assert'\nimport { JsonRpcProvider } from 'ethers/providers'\n\nimport { canUseChainId, getChainId } from './initChainId.ts'\n\nexport const initJsonRpcProvider = () => {\n const config = getJsonRpcProviderConfig()\n return Promise.resolve(new JsonRpcProvider(...config))\n}\n\nexport const canUseJsonRpcProvider = () => {\n return canUseChainId()\n && process.env.XYO_JSON_RPC_URL !== undefined\n}\n\nexport const getJsonRpcProviderConfig = () => {\n const jsonRpcUrl = assertEx(process.env.XYO_JSON_RPC_URL, () => 'Missing XYO_JSON_RPC_URL ENV VAR')\n return [jsonRpcUrl, getChainId()] as const\n}\n","import { assertEx } from '@xylabs/assert'\nimport { hexFrom, isHex } from '@xylabs/hex'\n\nexport const canUseChainId = (): boolean => {\n return process.env.XYO_JSON_RPC_NETWORK !== undefined\n}\n\nexport const getChainId = () => {\n const chainId = assertEx(process.env.XYO_JSON_RPC_NETWORK, () => 'Missing XYO_JSON_RPC_NETWORK ENV VAR')\n if (isHex(chainId, { prefix: true })) {\n const hex = hexFrom(chainId)\n const parsed = Number.parseInt(hex, 16)\n return parsed\n } else {\n const parsed = Number.parseInt(chainId, 10)\n return parsed\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { InfuraProvider } from 'ethers/providers'\n\nimport { canUseChainId, getChainId } from './initChainId.ts'\n\nlet instance: Promise<InfuraProvider> | undefined\n\nexport const initInfuraProvider = () => {\n if (instance) return instance\n const config = getInfuraProviderConfig()\n instance = Promise.resolve(new InfuraProvider(...config))\n return instance\n}\n\nexport const canUseInfuraProvider = (): boolean => {\n return canUseChainId()\n && process.env.INFURA_PROJECT_ID != undefined\n && process.env.INFURA_PROJECT_SECRET != undefined\n}\n\nexport const getInfuraProviderConfig = () => {\n const projectId = assertEx(process.env.INFURA_PROJECT_ID, () => 'Missing INFURA_PROJECT_ID ENV VAR')\n const projectSecret = assertEx(process.env.INFURA_PROJECT_SECRET, () => 'Missing INFURA_PROJECT_SECRET ENV VAR')\n return [getChainId(), projectId, projectSecret] as const\n}\n","import { delay } from '@xylabs/delay'\nimport { ZERO_ADDRESS } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { createGenesisBlock, findMostRecentBlock } from '@xyo-network/chain-protocol'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type { BlockBoundWitness, Initializable } from '@xyo-network/xl1-protocol'\nimport { flattenHydratedBlock } from '@xyo-network/xl1-protocol-sdk'\n\nlet headSingleton: Promisable<WithStorageMeta<BlockBoundWitness>> | undefined\n\nconst createBootstrapHead = async (\n chainSubmissionsArchivistWrite: ArchivistInstance,\n chainArchivist: ArchivistInstance,\n account: WalletInstance,\n): Promise<WithStorageMeta<BlockBoundWitness>> => {\n const block = await createGenesisBlock(account, ZERO_ADDRESS, 10_000_000n, account.address)\n const [bw] = block\n await chainSubmissionsArchivistWrite.insert(flattenHydratedBlock(block))\n // Wait for block to show up in finalized archivist\n while (true) {\n const result = await chainArchivist.get([bw._hash])\n if (result.length > 0) break\n await delay(1000) // Wait 1 second before retrying\n }\n return bw\n}\n\nexport const initHead: Initializable<{\n account: WalletInstance\n chainArchivist: ArchivistInstance\n chainSubmissionsArchivistWrite: ArchivistInstance\n}, WithStorageMeta<BlockBoundWitness>>\n = async (params): Promise<WithStorageMeta<BlockBoundWitness>> => {\n const {\n account, chainArchivist, chainSubmissionsArchivistWrite,\n } = params\n if (headSingleton) return headSingleton\n let head = await findMostRecentBlock(chainArchivist)\n if (!head) head = await createBootstrapHead(chainSubmissionsArchivistWrite, chainArchivist, account)\n headSingleton = head\n return headSingleton\n }\n","import type {\n BaseElectionServicesParams,\n XyoChainIteratorParams,\n XyoStakeIntentServiceParams,\n} from '@xyo-network/chain-services'\nimport {\n BaseElectionService, ChainBlockNumberIterationService,\n XyoStakeIntentService,\n} from '@xyo-network/chain-services'\nimport type {\n ElectionService, EventingChainBlockNumberIterator, Initializable, StakeIntentService,\n} from '@xyo-network/xl1-protocol'\n\nlet chainIteratorServiceSingleton: Promise<EventingChainBlockNumberIterator> | undefined\nlet stakeIntentServiceSingleton: Promise<StakeIntentService> | undefined\nlet electionServiceSingleton: Promise<ElectionService> | undefined\n\nexport const initChainIterator: Initializable<XyoChainIteratorParams, EventingChainBlockNumberIterator> = (params) => {\n if (chainIteratorServiceSingleton) return chainIteratorServiceSingleton\n chainIteratorServiceSingleton = ChainBlockNumberIterationService.create(params)\n return chainIteratorServiceSingleton\n}\n\nexport const initStakeIntentService: Initializable<XyoStakeIntentServiceParams, StakeIntentService>\n= (params) => {\n if (stakeIntentServiceSingleton) return stakeIntentServiceSingleton\n stakeIntentServiceSingleton = XyoStakeIntentService.create(params)\n return stakeIntentServiceSingleton\n}\n\nexport const initElectionService: Initializable<BaseElectionServicesParams, ElectionService>\n= (params) => {\n if (electionServiceSingleton) return electionServiceSingleton\n electionServiceSingleton = BaseElectionService.create(params)\n return electionServiceSingleton\n}\n","import type { Promisable } from '@xylabs/promise'\nimport type { BasePendingTransactionsServiceParams } from '@xyo-network/chain-services'\nimport { BasePendingTransactionsService } from '@xyo-network/chain-services'\nimport type { Initializable, PendingTransactionsService } from '@xyo-network/xl1-protocol'\n\nlet serviceSingleton: Promisable<PendingTransactionsService> | undefined\n\nexport const initPendingTransactions: Initializable<BasePendingTransactionsServiceParams, PendingTransactionsService> = async (\n params: BasePendingTransactionsServiceParams,\n): Promise<PendingTransactionsService> => {\n if (serviceSingleton) return serviceSingleton\n serviceSingleton = await BasePendingTransactionsService.create(params)\n return serviceSingleton\n}\n","import type { Promisable } from '@xylabs/promise'\nimport type { BaseBlockProducerServiceParams } from '@xyo-network/chain-services'\nimport { BaseBlockProducerService } from '@xyo-network/chain-services'\nimport type { BlockProducerService, Initializable } from '@xyo-network/xl1-protocol'\n\nlet serviceSingleton: Promisable<BlockProducerService> | undefined\n\nexport const initBlockProducer: Initializable<BaseBlockProducerServiceParams, BlockProducerService>\n= async (params: BaseBlockProducerServiceParams): Promise<BlockProducerService> => {\n if (serviceSingleton) return serviceSingleton\n serviceSingleton = await BaseBlockProducerService.create(params)\n return serviceSingleton\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { BaseBlockRewardServiceParams, EvmBlockRewardServiceParams } from '@xyo-network/chain-services'\nimport { EvmBlockRewardService, MemoryBlockRewardService } from '@xyo-network/chain-services'\nimport type { BlockRewardService, Initializable } from '@xyo-network/xl1-protocol'\n\nimport { canUseEvmProvider, initEvmProvider } from './evm/index.ts'\n\nlet rewardServiceSingleton: Promise<BlockRewardService> | undefined\n\nexport const initBlockRewardService: Initializable<\n BaseBlockRewardServiceParams | EvmBlockRewardServiceParams,\n BlockRewardService\n> = (params): Promise<BlockRewardService> => {\n if (rewardServiceSingleton) return rewardServiceSingleton\n rewardServiceSingleton = canUseEvmBlockRewardService() ? initEvmBlockRewardService(params as EvmBlockRewardServiceParams) : initXyoBlockRewardService(params)\n return rewardServiceSingleton\n}\n\nconst initXyoBlockRewardService = (params: BaseBlockRewardServiceParams): Promise<BlockRewardService> => {\n if (rewardServiceSingleton) return rewardServiceSingleton\n rewardServiceSingleton = MemoryBlockRewardService.create(params)\n return rewardServiceSingleton\n}\n\nconst canUseEvmBlockRewardService = () => canUseEvmProvider()\n\nconst initEvmBlockRewardService = async (params: EvmBlockRewardServiceParams): Promise<BlockRewardService> => {\n if (rewardServiceSingleton) return rewardServiceSingleton\n const { account: paramsAccount } = params\n const account = assertEx(paramsAccount, () => 'Error: Account is required')\n const provider = assertEx(await initEvmProvider())\n const evmBlockRewardServiceParams: EvmBlockRewardServiceParams = {\n ...params, provider, account,\n }\n rewardServiceSingleton = EvmBlockRewardService.create(evmBlockRewardServiceParams)\n return rewardServiceSingleton\n}\n","import type {\n CreatableName, CreatableStatus, CreatableStatusReporter,\n} from '@xylabs/creatable'\nimport type { Logger } from '@xylabs/logger'\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: string, 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 { CreatableStatus } from '@xylabs/creatable'\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: string): 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: string, 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 net from 'node:net'\n\nimport yargs from 'yargs'\nimport { hideBin } from 'yargs/helpers'\n\nimport {\n runApi, runProducer, runValidator,\n} from './commands/index.ts'\nimport type { Orchestrator } from './orchestration/index.ts'\n\nfunction waitForPort(host: string, port: number): Promise<void> {\n return new Promise((resolve) => {\n const tryConnect = () => {\n const socket = new net.Socket()\n\n socket\n .setTimeout(1000)\n .once('error', () => {\n socket.destroy()\n setTimeout(tryConnect, 500) // retry after 500ms\n })\n .once('timeout', () => {\n socket.destroy()\n setTimeout(tryConnect, 500)\n })\n .connect(port, host, () => {\n socket.end()\n resolve()\n })\n }\n\n tryConnect()\n })\n}\n\n// Main entry point\nexport async function runCLI(orchestrator: Orchestrator) {\n async function validateTransaction() {\n console.log('Validating transaction...')\n await Promise.resolve()\n }\n\n async function submitTransaction() {\n console.log('Submitting transaction...')\n await Promise.resolve()\n }\n\n async function checkBalance() {\n console.log('Checking account balance...')\n await Promise.resolve()\n }\n\n // Parse command-line arguments using Yargs\n const argv = yargs(hideBin(process.argv))\n // .commandDir('./command/commands', opts) // Not yet supported for ESM\n // .wrap((yargs as Argv).terminalWidth())\n .command('validator', 'Run the XL1 validator', (yargs) => {\n return yargs\n // Default command is to run\n .command('$0', 'Run as a XL1 validator node', () => {}, () => runValidator(orchestrator))\n })\n .command('producer', 'Run the XL1 producer', (yargs) => {\n return yargs\n .command('$0', 'Run as a XL1 producer node', () => {}, () => runProducer(orchestrator))\n })\n .command('client', 'Client-related operations', (yargs) => {\n return yargs\n .command('transaction', 'Transaction-related operations', (yargs) => {\n return yargs\n .command('validate', 'Validate a transaction', () => {}, validateTransaction)\n .command('submit', 'Submit a transaction', () => {}, submitTransaction)\n })\n })\n .command('api', 'Run as a api node', (yargs) => {\n return yargs\n .command('$0', 'Run as a api node', () => {}, () => runApi())\n .command('run', 'Run as a api node', () => {}, () => runApi())\n })\n .command('$0', 'Run a full XL1 deployment', (yargs) => {\n return yargs\n .command('$0', 'Start the API and a producer', () => {}, async () => {\n runApi()\n await waitForPort('localhost', 8080)\n await runProducer(orchestrator)\n })\n })\n .command('account', 'Account-related operations', (yargs) => {\n return yargs.command('balance', 'Check account balance', () => {}, checkBalance)\n })\n .help()\n .alias('help', 'h')\n .env('XL1')\n .argv\n\n await argv\n}\n","import { getServer } from '@xyo-network/chain-api'\nimport { config } from 'dotenv'\n\nexport function runApi() {\n config()\n void getServer()\n}\n","import type { Orchestrator } from '../../orchestration/index.ts'\nimport {\n BalanceActor, ChainHeadUpdateActor, initServices, ProducerActor,\n} from '../../orchestration/index.ts'\n\nexport const runProducer = async (orchestrator: Orchestrator) => {\n // Initialize services\n console.log('Services: Initializing...')\n const services = await initServices()\n console.log('Services: Initialized')\n\n // Create actors\n const chainHeadUpdate = await ChainHeadUpdateActor.create(services)\n const producer = await ProducerActor.create(services)\n const balances = await BalanceActor.create(services)\n const actors = [chainHeadUpdate, producer, balances]\n // const actors = [chainHeadUpdate, producer]\n\n for (const actor of actors) {\n // Register the actor with the orchestrator\n await orchestrator.registerActor(actor)\n }\n // Start the orchestrator => automatically activates the actor\n await orchestrator.start()\n}\n","import type { Orchestrator } from '../../orchestration/index.ts'\nimport { Actor } from '../../orchestration/index.ts'\n\nexport const runValidator = async (orchestrator: Orchestrator) => {\n // Create a single actor\n const myActor = new Actor('Validator', 'Validator', {})\n\n // Register the actor with the orchestrator\n await orchestrator.registerActor(myActor)\n\n // Start the orchestrator => automatically activates the actor\n await orchestrator.start()\n}\n","import { initEnv } from './initEnv.ts'\nimport { Orchestrator } from './orchestration/index.ts'\nimport { runCLI } from './runCLI.ts'\n\nexport const start = async () => {\n initEnv()\n const orchestrator = new Orchestrator()\n\n // Handle cancellation (Ctrl+C)\n process.on('SIGINT', () => {\n void (async () => {\n try {\n console.log('\\nSIGINT received. Attempting graceful shutdown...')\n await orchestrator?.stop()\n console.log('Orchestrator stopped, exiting now.')\n process.exit(0)\n } catch (err) {\n console.error('Error stopping orchestrator:', err)\n process.exit(1)\n }\n })()\n })\n\n // Execute the CLI logic\n await runCLI(orchestrator)\n}\n","import { start } from './start.ts'\nstart().catch((err) => {\n console.error('An error occurred during startup:', err)\n // eslint-disable-next-line unicorn/no-process-exit\n process.exit(1)\n})\n"],"mappings":"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","names":["dotenv","initEnv","dotenv","config","process","env","ENV_FILE","undefined","path","override","assertEx","PayloadBuilder","Mutex","BaseEmitter","forget","IdLogger","span","spanAsync","Actor","BaseEmitter","_timers","Map","_active","_displayName","_id","id","displayName","params","logger","IdLogger","console","name","logPrefix","registerTimer","timerName","callback","dueTimeMs","periodMs","warn","schedulePeriodicRun","has","error","set","setTimeout","forget","log","span","fn","tracer","spanAsync","start","Promise","resolve","stop","timerRef","entries","clearTimeout","clear","Orchestrator","actors","keepAliveHandle","running","registerActor","actor","start","push","Promise","resolve","console","log","setInterval","stop","clearInterval","BalanceActor","Actor","_updateMutex","Mutex","params","balanceService","assertEx","chainIterator","create","start","on","updateBalance","registerTimer","isLocked","runExclusive","head","PayloadBuilder","hash","balances","filterAs","assertEx","toHex","findMostRecentBlock","sortBlocks","asBlockBoundWitness","ChainHeadUpdateActor","Actor","params","chainFinalizedArchivist","assertEx","chainArchivist","chainIterator","create","Promise","resolve","start","on","data","checkInsertedForNewHead","registerTimer","pollForNewHead","candidateBlock","sortBlocks","filterAs","payloads","asBlockBoundWitness","at","updateHeadIfNewer","findMostRecentBlock","currentHead","head","candidateBlockNumber","block","candidateBlockNumberDisplay","toHex","currentBlockNumber","logger","log","updateHead","assertEx","toHex","isDefined","isUndefined","createDeclarationIntent","BaseBlockProducerService","PayloadBuilder","PayloadBundleSchema","buildTransaction","flattenHydratedBlock","flattenHydratedTransaction","SHOULD_REGISTER_REDECLARATION_INTENT_TIMER","TEN_MINUTES","ProducerActor","Actor","_lastProducedBlock","_lastRedeclarationIntent","params","assertEx","producer","address","account","balanceService","chainIterator","chainStakeViewer","chainSubmissionsArchivistWrite","pendingBundledTransactionsArchivistWrite","stakeIntentService","create","Promise","resolve","start","registerTimer","spanAsync","head","headHash","PayloadBuilder","hash","previous","logger","log","toHex","block","nextBlock","next","displayBlockNumber","insert","flattenHydratedBlock","BaseBlockProducerService","RedeclareIntent","isUndefined","currentBlock","blocksUntilExpiration","calculateBlocksUntilProducerDeclarationExpiration","RedeclarationWindow","undefined","exp","validateCurrentBalance","error","validateCurrentStake","process","env","XYO_EVM_STAKING_CONTRACT_ADDRESS","redeclarationIntent","createDeclarationIntent","RedeclarationDuration","submitRedeclarationIntent","ranges","getDeclaredCandidateRanges","lastRange","toSorted","a","b","at","currentDeclarationEnd","timeToProducerExpiration","tx","buildTransaction","chainId","payloads","flattenHydratedTransaction","root","_hash","payloadBundle","schema","PayloadBundleSchema","fields","build","isDefined","balances","currentBalance","requiredMinimumStake","XYO_PRODUCER_MIN_STAKE","BigInt","currentStake","activeByAddressStaked","http","isDefined","isEmptyString","sendStatus","res","status","errorCode","statusCode","writeHead","end","JSON","stringify","notFound","createHealthServer","port","statusMonitor","server","http","createServer","req","url","getGlobalStatus","listen","console","log","initHealthEndpoints","params","healthCheckEnvVarPort","process","env","XYO_PRODUCER_HEALTH_CHECK_PORT","isDefined","isEmptyString","healthCheckPort","Number","parseInt","statusReporter","assertEx","Base","asAddress","isDefined","balanceSummaryRepositoryFromMap","initTelemetry","startupSpanAsync","validateHydratedBlockState","initArchivistSync","startupSpanAsync","Mutex","Mutex","rm","LmdbArchivist","LmdbArchivistConfigSchema","Path","STORAGE_ROOT","process","env","Path","join","cwd","getStoreDirectory","name","kind","undefined","getLocalPersistentArchivist","dbName","storeName","kind","LmdbArchivist","create","account","config","clearStoreOnStart","location","getStoreDirectory","schema","LmdbArchivistConfigSchema","mutex","Mutex","singleton","initLocalChainFinalizedArchivist","runExclusive","getLocalPersistentArchivist","assertEx","initBridge","initBridgedArchivistModule","Mutex","nodeUrl","process","env","XYO_CHAIN_ARCHIVIST_NODE_URL","mutex","Mutex","singleton","initRemoteChainFinalizedArchivist","runExclusive","bridge","initBridge","initBridgedArchivistModule","moduleName","assertEx","mutex","Mutex","singleton","initChainFinalizedArchivist","traceProvider","runExclusive","remote","local","Promise","all","startupSpanAsync","initRemoteChainFinalizedArchivist","initLocalChainFinalizedArchivist","initArchivistSync","Number","MAX_SAFE_INTEGER","assertEx","startupSpanAsync","Mutex","assertEx","initBridge","initBridgedArchivistModule","Mutex","nodeUrl","process","env","XYO_CHAIN_ARCHIVIST_NODE_URL","mutex","Mutex","singleton","initRemoteChainSubmissionsArchivist","runExclusive","bridge","initBridge","initBridgedArchivistModule","moduleName","assertEx","Error","mutex","Mutex","singleton","initChainSubmissionsArchivist","runExclusive","remote","startupSpanAsync","initRemoteChainSubmissionsArchivist","assertEx","Error","initArchivistSync","startupSpanAsync","Mutex","MemoryArchivist","MemoryArchivistConfigSchema","Mutex","mutex","Mutex","singleton","initLocalPendingTransactionsArchivist","runExclusive","MemoryArchivist","create","account","config","schema","MemoryArchivistConfigSchema","max","name","assertEx","initBridge","initBridgedArchivistModule","Mutex","bridgeUrl","process","env","XYO_PENDING_ARCHIVIST_NODE_URL","mutex","Mutex","singleton","initRemotePendingTransactionsArchivist","runExclusive","bridge","initBridge","initBridgedArchivistModule","moduleName","assertEx","mutex","Mutex","singleton","initPendingBundledTransactionsArchivist","_","runExclusive","remote","startupSpanAsync","initRemotePendingTransactionsArchivist","local","initLocalPendingTransactionsArchivist","start","next","limit","order","insert","initArchivistSync","startupSpanAsync","Mutex","MemoryArchivist","MemoryArchivistConfigSchema","Mutex","mutex","Mutex","singleton","initLocalRejectedTransactionsArchivist","runExclusive","MemoryArchivist","create","account","config","schema","MemoryArchivistConfigSchema","max","name","mutex","Mutex","singleton","initRejectedTransactionsArchivist","_traceProvider","runExclusive","local","startupSpanAsync","initLocalRejectedTransactionsArchivist","assertEx","startupSpanAsync","Mutex","assertEx","Mutex","mutex","Mutex","singleton","initLocalStakeIntentStateArchivist","runExclusive","console","log","getLocalPersistentArchivist","assertEx","Error","mutex","Mutex","singleton","initStakeIntentStateArchivist","runExclusive","local","startupSpanAsync","initLocalStakeIntentStateArchivist","assertEx","isDefined","startupSpanAsync","Mutex","isDefined","Mutex","rm","creatable","BaseService","open","SynchronousLmdbMap","BaseService","db","rootDatabase","folderPath","params","location","dbName","all","getRange","map","entry","value","clear","clearSync","delete","id","removeSync","get","has","doesExist","set","data","putSync","startHandler","open","path","openDB","name","storeName","getLocalPersistentMap","dbName","storeName","kind","location","getStoreDirectory","store","SynchronousLmdbMap","create","mutex","Mutex","singleton","initLocalBalanceSummaryMap","runExclusive","isDefined","getLocalPersistentMap","mutex","Mutex","singleton","initBalanceSummaryMap","_traceProvider","runExclusive","isDefined","local","startupSpanAsync","initLocalBalanceSummaryMap","isUndefined","ADDRESS_INDEX","generateXyoBaseWalletFromPhrase","HDWallet","accountServiceSingleton","initAccount","walletPhrase","process","env","XYO_WALLET_MNEMONIC","isUndefined","console","log","randomMnemonic","HDWallet","generateMnemonic","wallet","generateXyoBaseWalletFromPhrase","account","derivePath","ADDRESS_INDEX","XYO","BaseAccountBalanceService","balanceServiceSingleton","initBalanceService","params","BaseAccountBalanceService","create","MemoryChainService","assertEx","asAddress","EvmChainService","Wallet","assertEx","assertEx","JsonRpcProvider","assertEx","hexFrom","isHex","canUseChainId","process","env","XYO_JSON_RPC_NETWORK","undefined","getChainId","chainId","assertEx","isHex","prefix","hex","hexFrom","parsed","Number","parseInt","initJsonRpcProvider","config","getJsonRpcProviderConfig","Promise","resolve","JsonRpcProvider","canUseJsonRpcProvider","canUseChainId","process","env","XYO_JSON_RPC_URL","undefined","jsonRpcUrl","assertEx","getChainId","assertEx","InfuraProvider","instance","initInfuraProvider","config","getInfuraProviderConfig","Promise","resolve","InfuraProvider","canUseInfuraProvider","canUseChainId","process","env","INFURA_PROJECT_ID","undefined","INFURA_PROJECT_SECRET","projectId","assertEx","projectSecret","getChainId","provider","initEvmProvider","canUseInfuraProvider","initInfuraProvider","canUseJsonRpcProvider","initJsonRpcProvider","assertEx","canUseEvmProvider","chainStakeServiceSingleton","canUseEvmContractChainService","process","env","XYO_EVM_STAKING_CONTRACT_ADDRESS","undefined","canUseEvmProvider","initEvmContractChainService","account","traceProvider","meterProvider","logger","emvStakingContractAddress","assertEx","id","asAddress","provider","initEvmProvider","privateKey","private","hex","runner","Wallet","EvmChainService","create","chainStakeServiceSingleton","initChainService","account","init","name","traceProvider","meterProvider","logger","canUseEvmContractChainService","initEvmContractChainService","MemoryChainService","create","delay","ZERO_ADDRESS","createGenesisBlock","findMostRecentBlock","flattenHydratedBlock","headSingleton","createBootstrapHead","chainSubmissionsArchivistWrite","chainArchivist","account","block","createGenesisBlock","ZERO_ADDRESS","address","bw","insert","flattenHydratedBlock","result","get","_hash","length","delay","initHead","params","head","findMostRecentBlock","BaseElectionService","ChainBlockNumberIterationService","XyoStakeIntentService","chainIteratorServiceSingleton","stakeIntentServiceSingleton","electionServiceSingleton","initChainIterator","params","ChainBlockNumberIterationService","create","initStakeIntentService","XyoStakeIntentService","initElectionService","BaseElectionService","BasePendingTransactionsService","serviceSingleton","initPendingTransactions","params","BasePendingTransactionsService","create","BaseBlockProducerService","serviceSingleton","initBlockProducer","params","BaseBlockProducerService","create","assertEx","EvmBlockRewardService","MemoryBlockRewardService","rewardServiceSingleton","initBlockRewardService","params","canUseEvmBlockRewardService","initEvmBlockRewardService","initXyoBlockRewardService","MemoryBlockRewardService","create","canUseEvmProvider","account","paramsAccount","assertEx","provider","initEvmProvider","evmBlockRewardServiceParams","EvmBlockRewardService","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","telemetryConfig","attributes","serviceName","serviceVersion","metricsConfig","endpoint","port","isStartable","value","isDefined","start","initServices","logger","Base","defaultLogger","console","statusReporter","RuntimeStatusMonitor","onGlobalTransition","to","log","error","process","exit","startupSpanAsync","initHealthEndpoints","traceProvider","meterProvider","account","Promise","all","initTelemetry","initAccount","chainArchivist","pendingBundledTransactionsArchivist","pendingBundledTransactionsArchivistWrite","rejectedTransactionsArchivist","chainSubmissionsArchivistWrite","stakeIntentStateArchivist","chainService","balanceSummaryMap","initChainFinalizedArchivist","initPendingBundledTransactionsArchivist","initRejectedTransactionsArchivist","initChainSubmissionsArchivist","initStakeIntentStateArchivist","initChainService","name","initBalanceSummaryMap","chainId","chainContractViewer","chainStakeViewer","chainStaker","head","initHead","pendingTransactionsService","rewardService","chainIterator","balanceService","initPendingTransactions","initBlockRewardService","initChainIterator","initBalanceService","summaryRepository","balanceSummaryRepositoryFromMap","stakeIntentService","initStakeIntentService","electionService","initElectionService","validatorParams","validateHydratedBlockState","rewardAddress","env","XYO_BLOCK_REWARD_ADDRESS","assertEx","asAddress","address","producerParams","producer","initBlockProducer","result","startableServices","Object","values","filter","map","service","net","yargs","hideBin","getServer","config","runApi","config","getServer","runProducer","orchestrator","console","log","services","initServices","chainHeadUpdate","ChainHeadUpdateActor","create","producer","ProducerActor","balances","BalanceActor","actors","actor","registerActor","start","runValidator","orchestrator","myActor","Actor","registerActor","start","waitForPort","host","port","Promise","resolve","tryConnect","socket","net","Socket","setTimeout","once","destroy","connect","end","runCLI","orchestrator","validateTransaction","console","log","submitTransaction","checkBalance","argv","yargs","hideBin","process","command","runValidator","runProducer","runApi","help","alias","env","start","initEnv","orchestrator","Orchestrator","process","on","console","log","stop","exit","err","error","runCLI","start","catch","err","console","error","process","exit"]}
@@ -0,0 +1,17 @@
1
+ import type { BaseParams } from '@xylabs/base';
2
+ import type { Promisable } from '@xylabs/promise';
3
+ import type { OpenTelemetryProviders } from '@xyo-network/xl1-protocol';
4
+ import type { ChainServiceCollectionV2 } from '@xyo-network/xl1-protocol-sdk';
5
+ import { Mutex } from 'async-mutex';
6
+ import { Actor } from '../model/index.ts';
7
+ export type BalanceActorParams = BaseParams<Pick<ChainServiceCollectionV2, 'balanceService' | 'chainIterator'> & OpenTelemetryProviders>;
8
+ export declare class BalanceActor extends Actor<BalanceActorParams> {
9
+ protected _updateMutex: Mutex;
10
+ protected constructor(params: BalanceActorParams);
11
+ protected get balanceService(): import("@xyo-network/xl1-protocol").AccountBalanceServiceV2;
12
+ protected get chainIterator(): import("@xyo-network/xl1-protocol").EventingChainBlockNumberIterator;
13
+ static create(params: BalanceActorParams): Promisable<BalanceActor>;
14
+ start(): Promise<void>;
15
+ protected updateBalance(): Promise<void>;
16
+ }
17
+ //# sourceMappingURL=BalanceActor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BalanceActor.d.ts","sourceRoot":"","sources":["../../../../src/orchestration/actor/implementation/BalanceActor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAA;AACvE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AAC7E,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAEnC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEzC,MAAM,MAAM,kBAAkB,GAAG,UAAU,CACzC,IAAI,CAAC,wBAAwB,EAAE,gBAAgB,GAAG,eAAe,CAAC,GAChE,sBAAsB,CAAC,CAAA;AAE3B,qBAAa,YAAa,SAAQ,KAAK,CAAC,kBAAkB,CAAC;IACzD,SAAS,CAAC,YAAY,QAAc;IAEpC,SAAS,aAAa,MAAM,EAAE,kBAAkB;IAIhD,SAAS,KAAK,cAAc,gEAE3B;IAED,SAAS,KAAK,aAAa,yEAE1B;IAED,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,GAAG,UAAU,CAAC,YAAY,CAAC;IAIpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;cAUrB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;CAO/C"}
@@ -0,0 +1,16 @@
1
+ import type { BaseParams } from '@xylabs/base';
2
+ import type { Payload } from '@xyo-network/payload-model';
3
+ import type { ChainServiceCollection } from '@xyo-network/xl1-protocol-sdk';
4
+ import { Actor } from '../model/index.ts';
5
+ export type ChainHeadUpdateActorParams = BaseParams<Pick<ChainServiceCollection, 'chainIterator' | 'chainArchivist'>>;
6
+ export declare class ChainHeadUpdateActor extends Actor<ChainHeadUpdateActorParams> {
7
+ protected constructor(params: ChainHeadUpdateActorParams);
8
+ protected get chainFinalizedArchivist(): import("@xyo-network/archivist-model").ArchivistInstance<import("@xyo-network/archivist-model").ArchivistParams<import("@xyo-network/module-model").AnyConfigSchema<import("@xyo-network/archivist-model").ArchivistConfig>>, import("@xyo-network/archivist-model").ArchivistModuleEventData, Payload>;
9
+ protected get chainIterator(): import("@xyo-network/xl1-protocol").EventingChainBlockNumberIterator;
10
+ static create(params: ChainHeadUpdateActorParams): Promise<ChainHeadUpdateActor>;
11
+ start(): Promise<void>;
12
+ private checkInsertedForNewHead;
13
+ private pollForNewHead;
14
+ private updateHeadIfNewer;
15
+ }
16
+ //# sourceMappingURL=ChainHeadUpdateActor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChainHeadUpdateActor.d.ts","sourceRoot":"","sources":["../../../../src/orchestration/actor/implementation/ChainHeadUpdateActor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAG9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AAE3E,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEzC,MAAM,MAAM,0BAA0B,GAAG,UAAU,CAAC,IAAI,CAAC,sBAAsB,EAAE,eAAe,GAAG,gBAAgB,CAAC,CAAC,CAAA;AAErH,qBAAa,oBAAqB,SAAQ,KAAK,CAAC,0BAA0B,CAAC;IACzE,SAAS,aAAa,MAAM,EAAE,0BAA0B;IAIxD,SAAS,KAAK,uBAAuB,4SAEpC;IAED,SAAS,KAAK,aAAa,yEAE1B;WAEY,MAAM,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAKvE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAUvB,uBAAuB;YAKvB,cAAc;YAKd,iBAAiB;CAYhC"}
@@ -0,0 +1,25 @@
1
+ import type { BaseParams } from '@xylabs/base';
2
+ import type { ChainStakeIntent, HydratedBlock, OpenTelemetryProviders } from '@xyo-network/xl1-protocol';
3
+ import type { ChainServiceCollectionV2 } from '@xyo-network/xl1-protocol-sdk';
4
+ import { Actor } from '../model/index.ts';
5
+ export type ProducerActorParams = BaseParams<Pick<ChainServiceCollectionV2, 'account' | 'balanceService' | 'chainIterator' | 'chainStakeViewer' | 'chainSubmissionsArchivistWrite' | 'pendingBundledTransactionsArchivistWrite' | 'producer' | 'stakeIntentService'> & OpenTelemetryProviders>;
6
+ export declare class ProducerActor extends Actor<ProducerActorParams> {
7
+ protected _lastProducedBlock: HydratedBlock | undefined;
8
+ protected _lastRedeclarationIntent: ChainStakeIntent | undefined;
9
+ protected constructor(params: ProducerActorParams);
10
+ protected get account(): import("@xyo-network/wallet-model").WalletInstance;
11
+ protected get balanceService(): import("@xyo-network/xl1-protocol").AccountBalanceServiceV2;
12
+ protected get chainIterator(): import("@xyo-network/xl1-protocol").EventingChainBlockNumberIterator;
13
+ protected get chainStakeViewer(): import("@xyo-network/xl1-protocol").ChainStakeViewer;
14
+ protected get chainSubmissionsArchivistWrite(): import("@xyo-network/archivist-model").WriteArchivist<import("@xyo-network/payload-model").Payload, import("@xyo-network/payload-model").Payload, import("@xyo-network/payload-model").Payload, Lowercase<string>>;
15
+ protected get pendingBundledTransactionsArchivistWrite(): import("@xyo-network/archivist-model").ArchivistInstance<import("@xyo-network/archivist-model").ArchivistParams<import("@xyo-network/module-model").AnyConfigSchema<import("@xyo-network/archivist-model").ArchivistConfig>>, import("@xyo-network/archivist-model").ArchivistModuleEventData, import("@xyo-network/payload-model").Payload>;
16
+ protected get producer(): import("@xyo-network/xl1-protocol").BlockProducerService;
17
+ protected get stakeIntentService(): import("@xyo-network/xl1-protocol").StakeIntentService;
18
+ static create(params: ProducerActorParams): Promise<ProducerActor>;
19
+ start(): Promise<void>;
20
+ protected calculateBlocksUntilProducerDeclarationExpiration(currentBlock: number): Promise<number>;
21
+ protected submitRedeclarationIntent(currentBlock: number, redeclarationIntent: ChainStakeIntent): Promise<void>;
22
+ protected validateCurrentBalance(): Promise<boolean>;
23
+ protected validateCurrentStake(): Promise<boolean>;
24
+ }
25
+ //# sourceMappingURL=ProducerActor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProducerActor.d.ts","sourceRoot":"","sources":["../../../../src/orchestration/actor/implementation/ProducerActor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAQ9C,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EAAE,sBAAsB,EACtC,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AAK7E,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEzC,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAC1C,IAAI,CAAC,wBAAwB,EAC7B,SAAS,GACP,gBAAgB,GAChB,eAAe,GACf,kBAAkB,GAClB,gCAAgC,GAChC,0CAA0C,GAC1C,UAAU,GACV,oBAAoB,CACrB,GACC,sBAAsB,CAAC,CAAA;AAK3B,qBAAa,aAAc,SAAQ,KAAK,CAAC,mBAAmB,CAAC;IAC3D,SAAS,CAAC,kBAAkB,EAAE,aAAa,GAAG,SAAS,CAAA;IACvD,SAAS,CAAC,wBAAwB,EAAE,gBAAgB,GAAG,SAAS,CAAA;IAEhE,SAAS,aAAa,MAAM,EAAE,mBAAmB;IAIjD,SAAS,KAAK,OAAO,uDAEpB;IAED,SAAS,KAAK,cAAc,gEAE3B;IAED,SAAS,KAAK,aAAa,yEAE1B;IAED,SAAS,KAAK,gBAAgB,yDAE7B;IAED,SAAS,KAAK,8BAA8B,uNAE3C;IAED,SAAS,KAAK,wCAAwC,iVAErD;IAED,SAAS,KAAK,QAAQ,6DAErB;IAED,SAAS,KAAK,kBAAkB,2DAE/B;WAEY,MAAM,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;IAKzD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;cAmGrB,iDAAiD,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;cAkBxF,yBAAyB,CAAC,YAAY,EAAE,MAAM,EAAE,mBAAmB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;cAqBrG,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC;cAe1C,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC;CAezD"}
@@ -0,0 +1,4 @@
1
+ export * from './BalanceActor.ts';
2
+ export * from './ChainHeadUpdateActor.ts';
3
+ export * from './ProducerActor.ts';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/orchestration/actor/implementation/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,2BAA2B,CAAA;AACzC,cAAc,oBAAoB,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from './implementation/index.ts';
2
+ export * from './model/index.ts';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/orchestration/actor/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAA;AACzC,cAAc,kBAAkB,CAAA"}
@@ -0,0 +1,38 @@
1
+ import type { TracerProvider } from '@opentelemetry/api';
2
+ import type { BaseParams } from '@xylabs/base';
3
+ import { BaseEmitter } from '@xylabs/events';
4
+ import type { Promisable } from '@xylabs/promise';
5
+ export interface IActor {
6
+ start(): Promise<void>;
7
+ stop(): Promise<void>;
8
+ }
9
+ export type ActorParams = BaseParams<{
10
+ traceProvider?: TracerProvider;
11
+ }>;
12
+ export declare class Actor<TParams extends ActorParams = ActorParams> extends BaseEmitter<TParams> implements IActor {
13
+ protected readonly _timers: Map<string, ReturnType<typeof setTimeout>>;
14
+ private _active;
15
+ private readonly _displayName;
16
+ private readonly _id;
17
+ constructor(id: string, displayName: string | undefined, params: TParams);
18
+ get displayName(): string;
19
+ get id(): string;
20
+ get name(): string;
21
+ protected get logPrefix(): string;
22
+ /**
23
+ * The timer runs until the actor is deactivated (or you manually stop it).
24
+ */
25
+ registerTimer(timerName: string, callback: () => Promisable<void>, dueTimeMs: number, periodMs: number): void;
26
+ span<T>(name: string, fn: () => T): T;
27
+ spanAsync<T>(name: string, fn: () => Promise<T>): Promise<T>;
28
+ /**
29
+ * Called by the Orchestrator when the actor is activated.
30
+ */
31
+ start(): Promise<void>;
32
+ /**
33
+ * Called by the Orchestrator when the actor is deactivated.
34
+ * Stop all running timers.
35
+ */
36
+ stop(): Promise<void>;
37
+ }
38
+ //# sourceMappingURL=Actor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Actor.d.ts","sourceRoot":"","sources":["../../../../src/orchestration/actor/model/Actor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAG5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAGjD,MAAM,WAAW,MAAM;IACrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACtB;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC;IACnC,aAAa,CAAC,EAAE,cAAc,CAAA;CAC/B,CAAC,CAAA;AAEF,qBAAa,KAAK,CAAC,OAAO,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,WAAW,CAAC,OAAO,CAAE,YAAW,MAAM;IAC1G,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,CAAY;IAClF,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IACrC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;gBAEhB,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,YAAU,EAAE,MAAM,EAAE,OAAO;IAOtE,IAAI,WAAW,WAEd;IAED,IAAI,EAAE,WAEL;IAED,IAAI,IAAI,WAEP;IAED,SAAS,KAAK,SAAS,WAEtB;IAED;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAgCtG,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IAI/B,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIlE;;OAEG;IACG,KAAK;IAMX;;;OAGG;IACG,IAAI;CAUX"}
@@ -0,0 +1,24 @@
1
+ export interface IOrchestrator {
2
+ start(): Promise<void>;
3
+ stop(): Promise<void>;
4
+ }
5
+ import type { IActor } from './Actor.ts';
6
+ export declare class Orchestrator implements IOrchestrator {
7
+ private actors;
8
+ private keepAliveHandle;
9
+ private running;
10
+ /**
11
+ * Registers an actor.
12
+ * (We won't activate the actor until `start()` is called.)
13
+ */
14
+ registerActor(actor: IActor): Promise<void>;
15
+ /**
16
+ * Starts the orchestrator: activates all actors.
17
+ */
18
+ start(): Promise<void>;
19
+ /**
20
+ * Stops the orchestrator: deactivates all actors.
21
+ */
22
+ stop(): Promise<void>;
23
+ }
24
+ //# sourceMappingURL=Orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Orchestrator.d.ts","sourceRoot":"","sources":["../../../../src/orchestration/actor/model/Orchestrator.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACtB;AAED,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAGxC,qBAAa,YAAa,YAAW,aAAa;IAChD,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,eAAe,CAA8B;IACrD,OAAO,CAAC,OAAO,CAAQ;IAEvB;;;OAGG;IACG,aAAa,CAAC,KAAK,EAAE,MAAM;IAQjC;;OAEG;IACG,KAAK;IAkBX;;OAEG;IACG,IAAI;CAeX"}
@@ -0,0 +1,3 @@
1
+ export * from './Actor.ts';
2
+ export * from './Orchestrator.ts';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/orchestration/actor/model/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,mBAAmB,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { TracerProvider } from '@opentelemetry/api';
2
+ import type { ArchivistInstance } from '@xyo-network/archivist-model';
3
+ export declare function initChainFinalizedArchivist(traceProvider: TracerProvider): Promise<ArchivistInstance<import("@xyo-network/archivist-model").ArchivistParams<import("@xyo-network/module-model").AnyConfigSchema<import("@xyo-network/archivist-model").ArchivistConfig>>, import("@xyo-network/archivist-model").ArchivistModuleEventData, import("@xyo-network/payload-model").Payload>>;
4
+ //# sourceMappingURL=archivist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archivist.d.ts","sourceRoot":"","sources":["../../../../src/orchestration/archivists/ChainFinalized/archivist.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAWrE,wBAAsB,2BAA2B,CAAC,aAAa,EAAE,cAAc,kTAc9E"}
@@ -0,0 +1,2 @@
1
+ export * from './archivist.ts';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/orchestration/archivists/ChainFinalized/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { ArchivistInstance } from '@xyo-network/archivist-model';
2
+ import type { Initializable } from '@xyo-network/xl1-protocol';
3
+ export declare const initLocalChainFinalizedArchivist: Initializable<void, ArchivistInstance>;
4
+ //# sourceMappingURL=local.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../../src/orchestration/archivists/ChainFinalized/local.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAQ9D,eAAO,MAAM,gCAAgC,EAAE,aAAa,CAAC,IAAI,EAAE,iBAAiB,CAMnF,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { ArchivistInstance } from '@xyo-network/archivist-model';
2
+ import type { Initializable } from '@xyo-network/xl1-protocol';
3
+ export declare const initRemoteChainFinalizedArchivist: Initializable<void, ArchivistInstance>;
4
+ //# sourceMappingURL=remote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../../../../src/orchestration/archivists/ChainFinalized/remote.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAErE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAO9D,eAAO,MAAM,iCAAiC,EAAE,aAAa,CAAC,IAAI,EAAE,iBAAiB,CAOpF,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { ArchivistInstance } from '@xyo-network/archivist-model';
2
+ import type { Initializable } from '@xyo-network/xl1-protocol';
3
+ export declare const initChainSubmissionsArchivist: Initializable<void, ArchivistInstance>;
4
+ //# sourceMappingURL=archivist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archivist.d.ts","sourceRoot":"","sources":["../../../../src/orchestration/archivists/ChainSubmissions/archivist.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAErE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAQ9D,eAAO,MAAM,6BAA6B,EAAE,aAAa,CAAC,IAAI,EAAE,iBAAiB,CAOhF,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './archivist.ts';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/orchestration/archivists/ChainSubmissions/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { ArchivistInstance } from '@xyo-network/archivist-model';
2
+ import type { Initializable } from '@xyo-network/xl1-protocol';
3
+ export declare const initRemoteChainSubmissionsArchivist: Initializable<void, ArchivistInstance>;
4
+ //# sourceMappingURL=remote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../../../../src/orchestration/archivists/ChainSubmissions/remote.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAErE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAO9D,eAAO,MAAM,mCAAmC,EAAE,aAAa,CAAC,IAAI,EAAE,iBAAiB,CAOtF,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { TracerProvider } from '@opentelemetry/api';
2
+ import type { ArchivistInstance } from '@xyo-network/archivist-model';
3
+ export declare function initPendingBundledTransactionsArchivist(_: TracerProvider): Promise<[local: ArchivistInstance, remote: ArchivistInstance]>;
4
+ //# sourceMappingURL=archivist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archivist.d.ts","sourceRoot":"","sources":["../../../../src/orchestration/archivists/PendingTransactions/archivist.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAWrE,wBAAsB,uCAAuC,CAAC,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAgB/I"}
@@ -0,0 +1,2 @@
1
+ export * from './archivist.ts';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/orchestration/archivists/PendingTransactions/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA"}