@xyo-network/xl1-cli-lib 1.7.4

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 (296) hide show
  1. package/LICENSE +165 -0
  2. package/README.md +46 -0
  3. package/dist/node/commands/api/index.d.ts +2 -0
  4. package/dist/node/commands/api/index.d.ts.map +1 -0
  5. package/dist/node/commands/api/runApi.d.ts +9 -0
  6. package/dist/node/commands/api/runApi.d.ts.map +1 -0
  7. package/dist/node/commands/index.d.ts +4 -0
  8. package/dist/node/commands/index.d.ts.map +1 -0
  9. package/dist/node/commands/producer/index.d.ts +2 -0
  10. package/dist/node/commands/producer/index.d.ts.map +1 -0
  11. package/dist/node/commands/producer/runProducer.d.ts +11 -0
  12. package/dist/node/commands/producer/runProducer.d.ts.map +1 -0
  13. package/dist/node/commands/validator/index.d.ts +2 -0
  14. package/dist/node/commands/validator/index.d.ts.map +1 -0
  15. package/dist/node/commands/validator/runValidator.d.ts +11 -0
  16. package/dist/node/commands/validator/runValidator.d.ts.map +1 -0
  17. package/dist/node/images.d.ts +2 -0
  18. package/dist/node/images.d.ts.map +1 -0
  19. package/dist/node/index.d.ts +4 -0
  20. package/dist/node/index.d.ts.map +1 -0
  21. package/dist/node/index.mjs +1712 -0
  22. package/dist/node/index.mjs.map +1 -0
  23. package/dist/node/initConfig.d.ts +3 -0
  24. package/dist/node/initConfig.d.ts.map +1 -0
  25. package/dist/node/initLogger.d.ts +4 -0
  26. package/dist/node/initLogger.d.ts.map +1 -0
  27. package/dist/node/optionsFromZodSchema.d.ts +4 -0
  28. package/dist/node/optionsFromZodSchema.d.ts.map +1 -0
  29. package/dist/node/orchestration/ChainInitializableParams.d.ts +11 -0
  30. package/dist/node/orchestration/ChainInitializableParams.d.ts.map +1 -0
  31. package/dist/node/orchestration/actor/implementation/BalanceActor.d.ts +18 -0
  32. package/dist/node/orchestration/actor/implementation/BalanceActor.d.ts.map +1 -0
  33. package/dist/node/orchestration/actor/implementation/ChainHeadUpdateActor.d.ts +19 -0
  34. package/dist/node/orchestration/actor/implementation/ChainHeadUpdateActor.d.ts.map +1 -0
  35. package/dist/node/orchestration/actor/implementation/ProducerActor.d.ts +28 -0
  36. package/dist/node/orchestration/actor/implementation/ProducerActor.d.ts.map +1 -0
  37. package/dist/node/orchestration/actor/implementation/ValidatorActor.d.ts +26 -0
  38. package/dist/node/orchestration/actor/implementation/ValidatorActor.d.ts.map +1 -0
  39. package/dist/node/orchestration/actor/implementation/index.d.ts +5 -0
  40. package/dist/node/orchestration/actor/implementation/index.d.ts.map +1 -0
  41. package/dist/node/orchestration/actor/index.d.ts +3 -0
  42. package/dist/node/orchestration/actor/index.d.ts.map +1 -0
  43. package/dist/node/orchestration/actor/model/Actor.d.ts +39 -0
  44. package/dist/node/orchestration/actor/model/Actor.d.ts.map +1 -0
  45. package/dist/node/orchestration/actor/model/Orchestrator.d.ts +27 -0
  46. package/dist/node/orchestration/actor/model/Orchestrator.d.ts.map +1 -0
  47. package/dist/node/orchestration/actor/model/index.d.ts +3 -0
  48. package/dist/node/orchestration/actor/model/index.d.ts.map +1 -0
  49. package/dist/node/orchestration/archivists/ChainFinalized/archivist.d.ts +4 -0
  50. package/dist/node/orchestration/archivists/ChainFinalized/archivist.d.ts.map +1 -0
  51. package/dist/node/orchestration/archivists/ChainFinalized/index.d.ts +2 -0
  52. package/dist/node/orchestration/archivists/ChainFinalized/index.d.ts.map +1 -0
  53. package/dist/node/orchestration/archivists/ChainFinalized/local.d.ts +7 -0
  54. package/dist/node/orchestration/archivists/ChainFinalized/local.d.ts.map +1 -0
  55. package/dist/node/orchestration/archivists/ChainFinalized/remote.d.ts +7 -0
  56. package/dist/node/orchestration/archivists/ChainFinalized/remote.d.ts.map +1 -0
  57. package/dist/node/orchestration/archivists/ChainSubmissions/archivist.d.ts +7 -0
  58. package/dist/node/orchestration/archivists/ChainSubmissions/archivist.d.ts.map +1 -0
  59. package/dist/node/orchestration/archivists/ChainSubmissions/index.d.ts +2 -0
  60. package/dist/node/orchestration/archivists/ChainSubmissions/index.d.ts.map +1 -0
  61. package/dist/node/orchestration/archivists/ChainSubmissions/remote.d.ts +7 -0
  62. package/dist/node/orchestration/archivists/ChainSubmissions/remote.d.ts.map +1 -0
  63. package/dist/node/orchestration/archivists/PendingTransactions/archivist.d.ts +6 -0
  64. package/dist/node/orchestration/archivists/PendingTransactions/archivist.d.ts.map +1 -0
  65. package/dist/node/orchestration/archivists/PendingTransactions/index.d.ts +2 -0
  66. package/dist/node/orchestration/archivists/PendingTransactions/index.d.ts.map +1 -0
  67. package/dist/node/orchestration/archivists/PendingTransactions/local.d.ts +7 -0
  68. package/dist/node/orchestration/archivists/PendingTransactions/local.d.ts.map +1 -0
  69. package/dist/node/orchestration/archivists/PendingTransactions/remote.d.ts +7 -0
  70. package/dist/node/orchestration/archivists/PendingTransactions/remote.d.ts.map +1 -0
  71. package/dist/node/orchestration/archivists/RejectedTransactions/archivist.d.ts +4 -0
  72. package/dist/node/orchestration/archivists/RejectedTransactions/archivist.d.ts.map +1 -0
  73. package/dist/node/orchestration/archivists/RejectedTransactions/index.d.ts +2 -0
  74. package/dist/node/orchestration/archivists/RejectedTransactions/index.d.ts.map +1 -0
  75. package/dist/node/orchestration/archivists/RejectedTransactions/local.d.ts +4 -0
  76. package/dist/node/orchestration/archivists/RejectedTransactions/local.d.ts.map +1 -0
  77. package/dist/node/orchestration/archivists/StakeIntentState/archivist.d.ts +5 -0
  78. package/dist/node/orchestration/archivists/StakeIntentState/archivist.d.ts.map +1 -0
  79. package/dist/node/orchestration/archivists/StakeIntentState/index.d.ts +2 -0
  80. package/dist/node/orchestration/archivists/StakeIntentState/index.d.ts.map +1 -0
  81. package/dist/node/orchestration/archivists/StakeIntentState/local.d.ts +7 -0
  82. package/dist/node/orchestration/archivists/StakeIntentState/local.d.ts.map +1 -0
  83. package/dist/node/orchestration/archivists/index.d.ts +6 -0
  84. package/dist/node/orchestration/archivists/index.d.ts.map +1 -0
  85. package/dist/node/orchestration/archivists/lib/index.d.ts +2 -0
  86. package/dist/node/orchestration/archivists/lib/index.d.ts.map +1 -0
  87. package/dist/node/orchestration/archivists/lib/localPersistentArchivist.d.ts +20 -0
  88. package/dist/node/orchestration/archivists/lib/localPersistentArchivist.d.ts.map +1 -0
  89. package/dist/node/orchestration/health/index.d.ts +2 -0
  90. package/dist/node/orchestration/health/index.d.ts.map +1 -0
  91. package/dist/node/orchestration/health/initHealthEndpoints.d.ts +11 -0
  92. package/dist/node/orchestration/health/initHealthEndpoints.d.ts.map +1 -0
  93. package/dist/node/orchestration/host/implementation/DefaultHost.d.ts +12 -0
  94. package/dist/node/orchestration/host/implementation/DefaultHost.d.ts.map +1 -0
  95. package/dist/node/orchestration/host/implementation/DefaultServiceCollection.d.ts +24 -0
  96. package/dist/node/orchestration/host/implementation/DefaultServiceCollection.d.ts.map +1 -0
  97. package/dist/node/orchestration/host/implementation/DefaultServiceProvider.d.ts +7 -0
  98. package/dist/node/orchestration/host/implementation/DefaultServiceProvider.d.ts.map +1 -0
  99. package/dist/node/orchestration/host/implementation/index.d.ts +3 -0
  100. package/dist/node/orchestration/host/implementation/index.d.ts.map +1 -0
  101. package/dist/node/orchestration/host/index.d.ts +3 -0
  102. package/dist/node/orchestration/host/index.d.ts.map +1 -0
  103. package/dist/node/orchestration/host/model/Host.d.ts +19 -0
  104. package/dist/node/orchestration/host/model/Host.d.ts.map +1 -0
  105. package/dist/node/orchestration/host/model/ServiceCollection.d.ts +20 -0
  106. package/dist/node/orchestration/host/model/ServiceCollection.d.ts.map +1 -0
  107. package/dist/node/orchestration/host/model/ServiceProvider.d.ts +4 -0
  108. package/dist/node/orchestration/host/model/ServiceProvider.d.ts.map +1 -0
  109. package/dist/node/orchestration/host/model/index.d.ts +4 -0
  110. package/dist/node/orchestration/host/model/index.d.ts.map +1 -0
  111. package/dist/node/orchestration/index.d.ts +6 -0
  112. package/dist/node/orchestration/index.d.ts.map +1 -0
  113. package/dist/node/orchestration/initServices.d.ts +9 -0
  114. package/dist/node/orchestration/initServices.d.ts.map +1 -0
  115. package/dist/node/orchestration/map/BalanceSummary/index.d.ts +2 -0
  116. package/dist/node/orchestration/map/BalanceSummary/index.d.ts.map +1 -0
  117. package/dist/node/orchestration/map/BalanceSummary/initBalanceSummaryMap.d.ts +7 -0
  118. package/dist/node/orchestration/map/BalanceSummary/initBalanceSummaryMap.d.ts.map +1 -0
  119. package/dist/node/orchestration/map/BalanceSummary/local.d.ts +7 -0
  120. package/dist/node/orchestration/map/BalanceSummary/local.d.ts.map +1 -0
  121. package/dist/node/orchestration/map/driver/index.d.ts +2 -0
  122. package/dist/node/orchestration/map/driver/index.d.ts.map +1 -0
  123. package/dist/node/orchestration/map/driver/lmdb/Params.d.ts +7 -0
  124. package/dist/node/orchestration/map/driver/lmdb/Params.d.ts.map +1 -0
  125. package/dist/node/orchestration/map/driver/lmdb/SynchronousLmdbMap.d.ts +32 -0
  126. package/dist/node/orchestration/map/driver/lmdb/SynchronousLmdbMap.d.ts.map +1 -0
  127. package/dist/node/orchestration/map/driver/lmdb/index.d.ts +2 -0
  128. package/dist/node/orchestration/map/driver/lmdb/index.d.ts.map +1 -0
  129. package/dist/node/orchestration/map/driver/lmdb/spec/SynchronousLmdbMap.spec.d.ts +2 -0
  130. package/dist/node/orchestration/map/driver/lmdb/spec/SynchronousLmdbMap.spec.d.ts.map +1 -0
  131. package/dist/node/orchestration/map/index.d.ts +3 -0
  132. package/dist/node/orchestration/map/index.d.ts.map +1 -0
  133. package/dist/node/orchestration/map/localPersistentMap.d.ts +13 -0
  134. package/dist/node/orchestration/map/localPersistentMap.d.ts.map +1 -0
  135. package/dist/node/orchestration/repository/index.d.ts +2 -0
  136. package/dist/node/orchestration/repository/index.d.ts.map +1 -0
  137. package/dist/node/orchestration/repository/lib/index.d.ts +2 -0
  138. package/dist/node/orchestration/repository/lib/index.d.ts.map +1 -0
  139. package/dist/node/orchestration/repository/lib/repositoryFromArchivist.d.ts +6 -0
  140. package/dist/node/orchestration/repository/lib/repositoryFromArchivist.d.ts.map +1 -0
  141. package/dist/node/orchestration/services/implementation/account.d.ts +7 -0
  142. package/dist/node/orchestration/services/implementation/account.d.ts.map +1 -0
  143. package/dist/node/orchestration/services/implementation/balance.d.ts +4 -0
  144. package/dist/node/orchestration/services/implementation/balance.d.ts.map +1 -0
  145. package/dist/node/orchestration/services/implementation/chain/evm.d.ts +7 -0
  146. package/dist/node/orchestration/services/implementation/chain/evm.d.ts.map +1 -0
  147. package/dist/node/orchestration/services/implementation/chain/index.d.ts +4 -0
  148. package/dist/node/orchestration/services/implementation/chain/index.d.ts.map +1 -0
  149. package/dist/node/orchestration/services/implementation/evm/index.d.ts +2 -0
  150. package/dist/node/orchestration/services/implementation/evm/index.d.ts.map +1 -0
  151. package/dist/node/orchestration/services/implementation/evm/initChainId.d.ts +4 -0
  152. package/dist/node/orchestration/services/implementation/evm/initChainId.d.ts.map +1 -0
  153. package/dist/node/orchestration/services/implementation/evm/initEvmProvider.d.ts +11 -0
  154. package/dist/node/orchestration/services/implementation/evm/initEvmProvider.d.ts.map +1 -0
  155. package/dist/node/orchestration/services/implementation/evm/initInfuraProvider.d.ts +6 -0
  156. package/dist/node/orchestration/services/implementation/evm/initInfuraProvider.d.ts.map +1 -0
  157. package/dist/node/orchestration/services/implementation/evm/initJsonRpcProvider.d.ts +6 -0
  158. package/dist/node/orchestration/services/implementation/evm/initJsonRpcProvider.d.ts.map +1 -0
  159. package/dist/node/orchestration/services/implementation/head.d.ts +10 -0
  160. package/dist/node/orchestration/services/implementation/head.d.ts.map +1 -0
  161. package/dist/node/orchestration/services/implementation/index.d.ts +11 -0
  162. package/dist/node/orchestration/services/implementation/index.d.ts.map +1 -0
  163. package/dist/node/orchestration/services/implementation/iterator.d.ts +6 -0
  164. package/dist/node/orchestration/services/implementation/iterator.d.ts.map +1 -0
  165. package/dist/node/orchestration/services/implementation/pendingTransactions.d.ts +4 -0
  166. package/dist/node/orchestration/services/implementation/pendingTransactions.d.ts.map +1 -0
  167. package/dist/node/orchestration/services/implementation/producer.d.ts +4 -0
  168. package/dist/node/orchestration/services/implementation/producer.d.ts.map +1 -0
  169. package/dist/node/orchestration/services/implementation/reward.d.ts +4 -0
  170. package/dist/node/orchestration/services/implementation/reward.d.ts.map +1 -0
  171. package/dist/node/orchestration/services/implementation/validator.d.ts +4 -0
  172. package/dist/node/orchestration/services/implementation/validator.d.ts.map +1 -0
  173. package/dist/node/orchestration/services/index.d.ts +2 -0
  174. package/dist/node/orchestration/services/index.d.ts.map +1 -0
  175. package/dist/node/orchestration/status/RuntimeStatusMonitor.d.ts +31 -0
  176. package/dist/node/orchestration/status/RuntimeStatusMonitor.d.ts.map +1 -0
  177. package/dist/node/orchestration/status/ServiceStatus.d.ts +9 -0
  178. package/dist/node/orchestration/status/ServiceStatus.d.ts.map +1 -0
  179. package/dist/node/orchestration/status/index.d.ts +3 -0
  180. package/dist/node/orchestration/status/index.d.ts.map +1 -0
  181. package/dist/node/orchestration/store/StoreKind.d.ts +2 -0
  182. package/dist/node/orchestration/store/StoreKind.d.ts.map +1 -0
  183. package/dist/node/orchestration/store/getStoreDirectory.d.ts +10 -0
  184. package/dist/node/orchestration/store/getStoreDirectory.d.ts.map +1 -0
  185. package/dist/node/orchestration/store/index.d.ts +3 -0
  186. package/dist/node/orchestration/store/index.d.ts.map +1 -0
  187. package/dist/node/runCLI.d.ts +2 -0
  188. package/dist/node/runCLI.d.ts.map +1 -0
  189. package/dist/node/spec/BootstrapChain.spec.d.ts +2 -0
  190. package/dist/node/spec/BootstrapChain.spec.d.ts.map +1 -0
  191. package/dist/node/start.d.ts +2 -0
  192. package/dist/node/start.d.ts.map +1 -0
  193. package/dist/node/waitForHostPort.d.ts +2 -0
  194. package/dist/node/waitForHostPort.d.ts.map +1 -0
  195. package/dist/node/xl1.d.ts +2 -0
  196. package/dist/node/xl1.d.ts.map +1 -0
  197. package/dist/node/xl1.mjs +1610 -0
  198. package/dist/node/xl1.mjs.map +1 -0
  199. package/package.json +96 -0
  200. package/src/commands/api/index.ts +1 -0
  201. package/src/commands/api/runApi.ts +12 -0
  202. package/src/commands/index.ts +3 -0
  203. package/src/commands/producer/index.ts +1 -0
  204. package/src/commands/producer/runProducer.ts +38 -0
  205. package/src/commands/validator/index.ts +1 -0
  206. package/src/commands/validator/runValidator.ts +38 -0
  207. package/src/images.ts +19 -0
  208. package/src/index.ts +3 -0
  209. package/src/initConfig.ts +6 -0
  210. package/src/initLogger.ts +23 -0
  211. package/src/optionsFromZodSchema.ts +69 -0
  212. package/src/orchestration/ChainInitializableParams.ts +12 -0
  213. package/src/orchestration/actor/implementation/BalanceActor.ts +50 -0
  214. package/src/orchestration/actor/implementation/ChainHeadUpdateActor.ts +65 -0
  215. package/src/orchestration/actor/implementation/ProducerActor.ts +244 -0
  216. package/src/orchestration/actor/implementation/ValidatorActor.ts +113 -0
  217. package/src/orchestration/actor/implementation/index.ts +4 -0
  218. package/src/orchestration/actor/index.ts +2 -0
  219. package/src/orchestration/actor/model/Actor.ts +114 -0
  220. package/src/orchestration/actor/model/Orchestrator.ts +71 -0
  221. package/src/orchestration/actor/model/index.ts +2 -0
  222. package/src/orchestration/archivists/ChainFinalized/archivist.ts +29 -0
  223. package/src/orchestration/archivists/ChainFinalized/index.ts +1 -0
  224. package/src/orchestration/archivists/ChainFinalized/local.ts +18 -0
  225. package/src/orchestration/archivists/ChainFinalized/remote.ts +20 -0
  226. package/src/orchestration/archivists/ChainSubmissions/archivist.ts +20 -0
  227. package/src/orchestration/archivists/ChainSubmissions/index.ts +1 -0
  228. package/src/orchestration/archivists/ChainSubmissions/remote.ts +20 -0
  229. package/src/orchestration/archivists/PendingTransactions/archivist.ts +29 -0
  230. package/src/orchestration/archivists/PendingTransactions/index.ts +1 -0
  231. package/src/orchestration/archivists/PendingTransactions/local.ts +21 -0
  232. package/src/orchestration/archivists/PendingTransactions/remote.ts +20 -0
  233. package/src/orchestration/archivists/RejectedTransactions/archivist.ts +18 -0
  234. package/src/orchestration/archivists/RejectedTransactions/index.ts +1 -0
  235. package/src/orchestration/archivists/RejectedTransactions/local.ts +20 -0
  236. package/src/orchestration/archivists/StakeIntentState/archivist.ts +21 -0
  237. package/src/orchestration/archivists/StakeIntentState/index.ts +1 -0
  238. package/src/orchestration/archivists/StakeIntentState/local.ts +19 -0
  239. package/src/orchestration/archivists/index.ts +5 -0
  240. package/src/orchestration/archivists/lib/index.ts +1 -0
  241. package/src/orchestration/archivists/lib/localPersistentArchivist.ts +57 -0
  242. package/src/orchestration/health/index.ts +1 -0
  243. package/src/orchestration/health/initHealthEndpoints.ts +72 -0
  244. package/src/orchestration/host/implementation/DefaultHost.ts +25 -0
  245. package/src/orchestration/host/implementation/DefaultServiceCollection.ts +60 -0
  246. package/src/orchestration/host/implementation/DefaultServiceProvider.ts +12 -0
  247. package/src/orchestration/host/implementation/index.ts +2 -0
  248. package/src/orchestration/host/index.ts +2 -0
  249. package/src/orchestration/host/model/Host.ts +21 -0
  250. package/src/orchestration/host/model/ServiceCollection.ts +22 -0
  251. package/src/orchestration/host/model/ServiceProvider.ts +3 -0
  252. package/src/orchestration/host/model/index.ts +3 -0
  253. package/src/orchestration/index.ts +5 -0
  254. package/src/orchestration/initServices.ts +240 -0
  255. package/src/orchestration/map/BalanceSummary/index.ts +1 -0
  256. package/src/orchestration/map/BalanceSummary/initBalanceSummaryMap.ts +22 -0
  257. package/src/orchestration/map/BalanceSummary/local.ts +21 -0
  258. package/src/orchestration/map/driver/index.ts +1 -0
  259. package/src/orchestration/map/driver/lmdb/Params.ts +7 -0
  260. package/src/orchestration/map/driver/lmdb/SynchronousLmdbMap.ts +66 -0
  261. package/src/orchestration/map/driver/lmdb/index.ts +1 -0
  262. package/src/orchestration/map/driver/lmdb/spec/SynchronousLmdbMap.spec.ts +97 -0
  263. package/src/orchestration/map/index.ts +2 -0
  264. package/src/orchestration/map/localPersistentMap.ts +52 -0
  265. package/src/orchestration/repository/index.ts +1 -0
  266. package/src/orchestration/repository/lib/index.ts +1 -0
  267. package/src/orchestration/repository/lib/repositoryFromArchivist.ts +27 -0
  268. package/src/orchestration/services/implementation/account.ts +24 -0
  269. package/src/orchestration/services/implementation/balance.ts +13 -0
  270. package/src/orchestration/services/implementation/chain/evm.ts +38 -0
  271. package/src/orchestration/services/implementation/chain/index.ts +22 -0
  272. package/src/orchestration/services/implementation/evm/index.ts +1 -0
  273. package/src/orchestration/services/implementation/evm/initChainId.ts +20 -0
  274. package/src/orchestration/services/implementation/evm/initEvmProvider.ts +23 -0
  275. package/src/orchestration/services/implementation/evm/initInfuraProvider.ts +27 -0
  276. package/src/orchestration/services/implementation/evm/initJsonRpcProvider.ts +21 -0
  277. package/src/orchestration/services/implementation/head.ts +44 -0
  278. package/src/orchestration/services/implementation/index.ts +10 -0
  279. package/src/orchestration/services/implementation/iterator.ts +36 -0
  280. package/src/orchestration/services/implementation/pendingTransactions.ts +14 -0
  281. package/src/orchestration/services/implementation/producer.ts +13 -0
  282. package/src/orchestration/services/implementation/reward.ts +41 -0
  283. package/src/orchestration/services/implementation/validator.ts +14 -0
  284. package/src/orchestration/services/index.ts +1 -0
  285. package/src/orchestration/status/RuntimeStatusMonitor.ts +117 -0
  286. package/src/orchestration/status/ServiceStatus.ts +21 -0
  287. package/src/orchestration/status/index.ts +2 -0
  288. package/src/orchestration/store/StoreKind.ts +1 -0
  289. package/src/orchestration/store/getStoreDirectory.ts +14 -0
  290. package/src/orchestration/store/index.ts +2 -0
  291. package/src/runCLI.ts +111 -0
  292. package/src/spec/BootstrapChain.spec.ts +133 -0
  293. package/src/spec/MultiProducer.ChainOutput.json +864 -0
  294. package/src/start.ts +8 -0
  295. package/src/waitForHostPort.ts +26 -0
  296. package/src/xl1.ts +8 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../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/actor/implementation/ValidatorActor.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/initInfuraProvider.ts","../../src/orchestration/services/implementation/evm/initChainId.ts","../../src/orchestration/services/implementation/evm/initJsonRpcProvider.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/services/implementation/validator.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/images.ts","../../src/initLogger.ts","../../src/optionsFromZodSchema.ts","../../src/waitForHostPort.ts","../../src/start.ts"],"sourcesContent":["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 { ChainServiceCollectionV2, Config } 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 & { config: Config }>\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 { Base, type BaseParams } from '@xylabs/base'\nimport { forget } from '@xylabs/forget'\nimport { IdLogger } from '@xylabs/logger'\nimport type { Promisable } from '@xylabs/promise'\nimport { span, spanAsync } from '@xylabs/telemetry'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\n\nexport interface IActor {\n start(): Promise<void>\n stop(): Promise<void>\n}\n\nexport type ActorParams = BaseParams<{\n config: Config\n traceProvider?: TracerProvider\n}>\n\nexport class Actor<TParams extends ActorParams = ActorParams> extends Base<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(Base.defaultLogger ?? 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","import type { Logger } from '@xylabs/logger'\n\nimport type { IActor } from './Actor.ts'\n\nexport interface IOrchestrator {\n start(): Promise<void>\n stop(): Promise<void>\n}\n\nexport class Orchestrator implements IOrchestrator {\n protected actors: IActor[] = []\n protected keepAliveHandle: NodeJS.Timeout | null = null\n protected readonly logger?: Logger\n protected running = false\n\n constructor(logger?: Logger) {\n this.logger = logger\n }\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 this.logger?.warn('[Orchestrator] Already started.')\n return\n }\n\n this.logger?.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 this.logger?.log('[Orchestrator] Already stopped.')\n return\n }\n\n this.logger?.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 this.logger?.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 type { Promisable } from '@xylabs/promise'\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 { ChainServiceCollectionV2, Config } from '@xyo-network/xl1-protocol-sdk'\n\nimport { Actor } from '../model/index.ts'\n\nexport type ChainHeadUpdateActorParams = BaseParams<Pick<ChainServiceCollectionV2, 'chainIterator' | 'chainArchivist'> & { config: Config }>\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 create(params: ChainHeadUpdateActorParams): Promisable<ChainHeadUpdateActor> {\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 type { Promisable } from '@xylabs/promise'\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 { ChainStakeIntent, HydratedBlock } from '@xyo-network/xl1-protocol'\nimport type { ChainServiceCollectionV2, Config } 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 config: Config\n }>\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(params.producer.address, '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 create(params: ProducerActorParams): Promisable<ProducerActor> {\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 (this.params.config.producer.disableIntentRedeclaration) 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 ${this.params.config.chain.id}`\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 // Use StakeIntentService to get the required minimum stake\n const requiredMinimumStake = this.stakeIntentService.getRequiredMinimumStakeForIntent('producer')\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 { assertEx } from '@xylabs/assert'\nimport type { BaseParams } from '@xylabs/base'\nimport type { Hash } from '@xylabs/hex'\nimport { toHex } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport { isDefined, isUndefined } from '@xylabs/typeof'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { BlockBoundWitness } from '@xyo-network/xl1-protocol'\nimport type { ChainServiceCollectionV2, Config } from '@xyo-network/xl1-protocol-sdk'\n\nimport { Actor } from '../model/index.ts'\n\nexport type ValidatorActorParams = BaseParams<\n Pick<ChainServiceCollectionV2,\n 'account'\n | 'balanceService'\n | 'chainIterator'\n | 'chainStakeViewer'\n | 'chainSubmissionsArchivistWrite'\n | 'pendingBundledTransactionsArchivistWrite'\n | 'stakeIntentService'\n > & {\n config: Config\n }>\n\nexport class ValidatorActor extends Actor<ValidatorActorParams> {\n protected _lastValidatedBlock: BlockBoundWitness | undefined\n protected _lastValidatedBlockHash: Hash | undefined\n\n protected constructor(params: ValidatorActorParams) {\n super('Validator', 'Validator', 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 stakeIntentService() {\n return assertEx(this.params.stakeIntentService, () => 'stakeIntentService not set')\n }\n\n // protected get validator() {\n // return assertEx(this.params.validator, () => 'validator not set')\n // }\n\n static create(params: ValidatorActorParams): Promisable<ValidatorActor> {\n return new ValidatorActor(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 block = await this.chainIterator.head()\n if (isUndefined(block)) return\n // Check if we've already validated this head\n const hash = await PayloadBuilder.hash(block)\n // If our last validated block was this head, skip validation\n if (isDefined(this._lastValidatedBlock) && this._lastValidatedBlockHash === hash) {\n this.logger?.log('Block already validated:', `0x${toHex(block.block)}`)\n } else {\n this.logger?.log('Validating block:', `0x${toHex(block.block)}`)\n const valid = await this.validateBlock(block)\n if (valid) {\n this.logger?.log('Validated block:', `0x${toHex(block.block)}`)\n } else {\n this.logger?.log('Invalid block:', `0x${toHex(block.block)}`)\n await this.slashInvalidBlock(block)\n }\n }\n })\n }, 100, 500)\n }\n\n protected async slashInvalidBlock(_block: BlockBoundWitness): Promise<boolean> {\n // TODO: Handle slashing logic\n const slashed = await Promise.resolve(true)\n return slashed\n }\n\n protected async validateBlock(block: BlockBoundWitness): Promise<boolean> {\n // TODO: Validate using validation logic\n const valid = await Promise.resolve(true)\n // Store the last validated block and its hash\n this._lastValidatedBlock = block\n this._lastValidatedBlockHash = await PayloadBuilder.hash(block)\n\n // Return the validation result\n return valid\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 type { Logger } from '@xylabs/logger'\nimport { isDefined } from '@xylabs/typeof'\nimport type { Initializable } from '@xyo-network/xl1-protocol'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\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, statusMonitor: RuntimeStatusMonitor, logger: Logger) => {\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 logger.log(`Health server running on http://localhost:${port}`)\n logger.log(' - /healthz')\n logger.log(' - /livez')\n logger.log(' - /readyz')\n })\n return server\n}\n\nexport const initHealthEndpoints: Initializable<{ config: Config; logger: Logger; statusReporter: RuntimeStatusMonitor }, Server | undefined> = (params) => {\n const {\n config, logger, statusReporter,\n } = params\n const { healthCheckPort } = config.producer\n return isDefined(healthCheckPort) ? createHealthServer(healthCheckPort, statusReporter, logger) : undefined\n}\n","import { assertEx } from '@xylabs/assert'\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 { BaseBlockProducerServiceParams, XyoValidatorParams } 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, Config } from '@xyo-network/xl1-protocol-sdk'\n\nimport {\n initChainFinalizedArchivist, initChainSubmissionsArchivist, initPendingBundledTransactionsArchivist, initRejectedTransactionsArchivist,\n initStakeIntentStateArchivist,\n} from './archivists/index.ts'\nimport type { ChainInitializableParams } from './ChainInitializableParams.ts'\nimport { initHealthEndpoints } from './health/index.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\ninterface InitServicesContext {\n config: Config\n logger: Logger\n}\n\nexport const initServices = async (context: InitServicesContext): Promise<ChainServiceCollectionV2> => {\n const { config, logger } = context\n const statusReporter = new RuntimeStatusMonitor(logger)\n statusReporter.onGlobalTransition({ to: 'started' }, () => {\n logger.log('All services started.')\n })\n statusReporter.onGlobalTransition({ to: 'error' }, () => {\n logger.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({ ...context, statusReporter }))\n\n const [\n { traceProvider, meterProvider },\n account,\n ] = await Promise.all([\n startupSpanAsync('initTelemetry', () => initTelemetry(telemetryConfig)),\n startupSpanAsync('initAccount', () => initAccount(context)),\n ])\n\n const initParams: ChainInitializableParams = {\n config, logger, meterProvider, statusReporter, traceProvider,\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(initParams),\n ),\n startupSpanAsync(\n 'PendingBundledTransactionsArchivist',\n () => initPendingBundledTransactionsArchivist(initParams),\n ),\n startupSpanAsync(\n 'RejectedTransactionsArchivist',\n () => initRejectedTransactionsArchivist(initParams),\n ),\n startupSpanAsync(\n 'ChainSubmissionsArchivist',\n () => initChainSubmissionsArchivist(initParams),\n ),\n startupSpanAsync(\n 'StakeIntentStateArchivist',\n () => initStakeIntentStateArchivist(initParams),\n ),\n startupSpanAsync(\n 'ChainService',\n () => initChainService({\n ...initParams, account, name: 'ChainService',\n }),\n ),\n startupSpanAsync(\n 'BalanceSummaryMap',\n () => initBalanceSummaryMap(initParams),\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 ...initParams, 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 pendingBundledTransactionsArchivist,\n rejectedTransactionsArchivist,\n ...initParams,\n })),\n startupSpanAsync(\n 'RewardService',\n () => initBlockRewardService({\n name: 'RewardService',\n account,\n chainService,\n ...initParams,\n }),\n ),\n startupSpanAsync(\n 'ChainIterator',\n () => initChainIterator({\n name: 'ChainIterator',\n chainArchivist,\n head,\n ...initParams,\n }),\n ),\n startupSpanAsync(\n 'BalanceService',\n () => initBalanceService({\n name: 'BalanceService',\n chainArchivist,\n summaryRepository: balanceSummaryRepositoryFromMap(balanceSummaryMap),\n ...initParams,\n }),\n ),\n ])\n\n const stakeIntentService = await startupSpanAsync(\n 'StakeIntentService',\n () => initStakeIntentService({\n name: 'StakeIntentService',\n chainArchivist,\n chainIterator,\n chainStakeViewer,\n stakeIntentStateArchivist,\n ...initParams,\n }),\n )\n\n const electionService = await startupSpanAsync(\n 'ElectionService',\n () => initElectionService({\n name: 'ElectionService',\n chainIterator,\n chainStakeViewer,\n stakeIntentService,\n ...initParams,\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 validateHydratedBlockState,\n ...initParams,\n }\n const rewardAddress = isDefined(config.producer.rewardAddress)\n ? assertEx(asAddress(config.producer.rewardAddress), () => '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 ...initParams,\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 logger?.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 { 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 type { ChainInitializableParams } from '../../ChainInitializableParams.ts'\nimport { initLocalChainFinalizedArchivist } from './local.ts'\nimport { initRemoteChainFinalizedArchivist } from './remote.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport async function initChainFinalizedArchivist({\n config, logger, traceProvider,\n}: ChainInitializableParams) {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const [remote, local] = await Promise.all([\n startupSpanAsync('ChainFinalizedArchivist:initRemote', () => initRemoteChainFinalizedArchivist({ config, logger })),\n startupSpanAsync('ChainFinalizedArchivist:initLocal', () => initLocalChainFinalizedArchivist({ config, logger })),\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 type { Config } from '@xyo-network/xl1-protocol-sdk'\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<{ config: Config }, ArchivistInstance> = async ({ config }): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const { root } = config.storage\n singleton = await getLocalPersistentArchivist('chain', 'finalized', root)\n return singleton\n })\n}\n","import { rm } from 'node:fs/promises'\nimport Path from 'node:path'\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\nconst DEFAULT_STORAGE_ROOT = Path.join(process.cwd(), '.store')\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 storageRoot The root directory for storage (default is '.store' in the current working directory)\n * @param kind The kind of the archivist\n * @returns an archivist instance\n */\nexport const getLocalPersistentArchivist = (dbName: string, storeName: string, storageRoot?: string, kind: StoreKind = 'lmdb'): Promise<ArchivistInstance> => {\n switch (kind) {\n case 'lmdb': {\n const root = storageRoot ?? DEFAULT_STORAGE_ROOT\n return LmdbArchivist.create({\n account: 'random',\n config: {\n clearStoreOnStart: false,\n dbName,\n location: getStoreDirectory(dbName, root, 'lmdb'),\n schema: LmdbArchivistConfigSchema,\n storeName,\n },\n })\n }\n }\n}\n\n/**\n * Deletes a local persistent archivist\n * @param dbName The name of the database\n * @param storageRoot The root directory for storage (default is '.store' in the current working directory)\n * @param kind The kind of the archivist\n * @returns A promise that resolves when the archivist is deleted\n */\nexport const deleteLocalPersistentArchivist = async (dbName: string, storageRoot?: 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 const root = storageRoot ?? DEFAULT_STORAGE_ROOT\n location = getStoreDirectory(dbName, root, '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\n/**\n * Creates a convention-based directory path for an archivist store\n * @param name The name of the archivist\n * @param storageRoot The root directory for storage\n * @param kind The kind of the archivist (optional)\n * @returns The directory path for the archivist store\n */\nexport const getStoreDirectory = (name: string, storageRoot: string, kind?: StoreKind): string => {\n return (kind === undefined) ? Path.join(storageRoot, name) : Path.join(storageRoot, 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 { type Config, getUrl } from '@xyo-network/xl1-protocol-sdk'\nimport { Mutex } from 'async-mutex'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initRemoteChainFinalizedArchivist: Initializable<{ config: Config }, ArchivistInstance> = async ({ config }): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const { host, port } = config.api\n const nodeUrl = getUrl(host, port)\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 type { Config } from '@xyo-network/xl1-protocol-sdk'\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<{ config: Config }, ArchivistInstance> = async (params): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const remote = await startupSpanAsync('ChainSubmissionsArchivist:initRemote', () => initRemoteChainSubmissionsArchivist(params))\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 { type Config, getUrl } from '@xyo-network/xl1-protocol-sdk'\nimport { Mutex } from 'async-mutex'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initRemoteChainSubmissionsArchivist: Initializable<{ config: Config }, ArchivistInstance> = async ({ config }): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const { host, port } = config.api\n const nodeUrl = getUrl(host, port)\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 { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { initArchivistSync } from '@xyo-network/chain-orchestration'\nimport { startupSpanAsync } from '@xyo-network/chain-utils'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\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 const initPendingBundledTransactionsArchivist = async (params: { config: Config }): Promise<[local: ArchivistInstance, remote: ArchivistInstance]> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const remote = await startupSpanAsync('PendingBundledTransactionsArchivist:initRemote', () => initRemotePendingTransactionsArchivist(params))\n const local = await startupSpanAsync('PendingBundledTransactionsArchivist:initLocal', () => initLocalPendingTransactionsArchivist(params))\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 type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport { Mutex } from 'async-mutex'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initLocalPendingTransactionsArchivist: Initializable<{ config: Config }, 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 { type Config, getUrl } from '@xyo-network/xl1-protocol-sdk'\nimport { Mutex } from 'async-mutex'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initRemotePendingTransactionsArchivist: Initializable<{ config: Config }, ArchivistInstance> = async ({ config }): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const { host, port } = config.api\n const nodeUrl = getUrl(host, port)\n const bridge = await initBridge(nodeUrl)\n singleton = await initBridgedArchivistModule({ bridge, moduleName: 'XYOChain:Pending:PendingTransactions' })\n return assertEx(singleton, () => 'Error: RemotePendingBundledTransactionsArchivist is undefined')\n })\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { startupSpanAsync } from '@xyo-network/chain-utils'\nimport type { InitializableParams } from '@xyo-network/xl1-protocol'\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(params: InitializableParams) {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const local = await startupSpanAsync('RejectedTransactionsArchivist:initLocal', () => initLocalRejectedTransactionsArchivist(params))\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<{}, 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 type { ChainInitializableParams } from '../../ChainInitializableParams.ts'\nimport { initLocalStakeIntentStateArchivist } from './local.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initStakeIntentStateArchivist: Initializable<ChainInitializableParams, ArchivistInstance>\n = async (params: ChainInitializableParams): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const local = await startupSpanAsync('StakeIntentStateArchivist:initLocal', () => initLocalStakeIntentStateArchivist(params))\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 type { Config } from '@xyo-network/xl1-protocol-sdk'\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<{ config: Config }, ArchivistInstance> = async ({ config }): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const { root } = config.storage\n singleton = await getLocalPersistentArchivist('stakeIntent', 'state', root)\n return assertEx(singleton, () => new Error('Failed to initialize stake intent state archivist'))\n })\n}\n","import 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 type { ChainInitializableParams } from '../../ChainInitializableParams.ts'\nimport { initLocalBalanceSummaryMap } from './local.ts'\n\nconst mutex = new Mutex()\nlet singleton: MapType<Hash, WithStorageMeta<BalancesStepSummary>> | undefined\n\nexport async function initBalanceSummaryMap(params: ChainInitializableParams): 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(params))\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 type { ChainInitializableParams } from '../../ChainInitializableParams.ts'\nimport { getLocalPersistentMap } from '../localPersistentMap.ts'\n\nconst mutex = new Mutex()\nlet singleton: MapType<Hash, WithStorageMeta<BalancesStepSummary>> | undefined\n\nexport const initLocalBalanceSummaryMap = async (params: ChainInitializableParams): Promise<MapType<Hash, WithStorageMeta<BalancesStepSummary>>> => {\n return await mutex.runExclusive(async () => {\n if (isDefined(singleton)) return singleton\n const { root } = params.config.storage\n singleton = await getLocalPersistentMap<Hash, WithStorageMeta<BalancesStepSummary>>('balance', 'summary', root)\n return singleton\n })\n}\n","import { rm } from 'node:fs/promises'\nimport Path from 'node:path'\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\nconst DEFAULT_STORAGE_ROOT = Path.join(process.cwd(), '.store')\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 storageRoot The root directory for storage (default is '.store' in the current working directory)\n * @param kind The kind of the map\n * @returns a map\n */\nexport const getLocalPersistentMap = async <TId, TData>(\n dbName: string,\n storeName: string,\n storageRoot?: string,\n kind: StoreKind = 'lmdb'): Promise<MapType<TId, TData>> => {\n switch (kind) {\n case 'lmdb': {\n const root = storageRoot ?? DEFAULT_STORAGE_ROOT\n const location = getStoreDirectory(dbName, root, '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 (\n dbName: string,\n storageRoot?: string,\n kind: StoreKind = 'lmdb',\n): Promise<void> => {\n await Promise.resolve()\n let location = ''\n switch (kind) {\n case 'lmdb': {\n const root = storageRoot ?? DEFAULT_STORAGE_ROOT\n location = getStoreDirectory(dbName, root, 'lmdb')\n break\n }\n }\n await rm(location, { recursive: true, force: true })\n}\n","import { AbstractCreatable, creatable } from '@xylabs/creatable'\nimport { SynchronousMap } from '@xyo-network/chain-protocol'\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 AbstractCreatable<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, InitializableParams } from '@xyo-network/xl1-protocol'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\n\nlet accountServiceSingleton: Promisable<WalletInstance> | undefined\n\nexport const initAccount: Initializable<InitializableParams<{ config: Config }>, WalletInstance> = async ({ config, logger }): Promise<WalletInstance> => {\n if (accountServiceSingleton) return accountServiceSingleton\n let walletPhrase = config.producer.mnemonic\n if (isUndefined(walletPhrase)) {\n logger?.log('No wallet mnemonic specified!')\n const randomMnemonic = HDWallet.generateMnemonic()\n logger?.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, config }) => init({\n config, name: 'ChainService', account,\n})\n\nconst init: Initializable<BaseAccountableServiceParams, ChainService> = (params): Promisable<ChainService> => {\n if (chainStakeServiceSingleton) return chainStakeServiceSingleton\n const { config } = params\n chainStakeServiceSingleton = canUseEvmContractChainService(config)\n ? initEvmContractChainService({ ...params, name: 'ChainStakeService' })\n : MemoryChainService.create({ ...params, name: 'ChainStakeService' })\n // Create service\n return chainStakeServiceSingleton\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Address } from '@xylabs/hex'\nimport { asAddress, ZERO_ADDRESS } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport { isDefined } from '@xylabs/typeof'\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 { Config } from '@xyo-network/xl1-protocol-sdk'\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 = (config: Config) => {\n const { id } = config.chain\n return isDefined(id) && id !== ZERO_ADDRESS && canUseEvmProvider({ config })\n}\n\nexport const initEvmContractChainService: Initializable<BaseAccountableServiceParams, EvmChainService> = async ({\n account, config, traceProvider, meterProvider, logger,\n}) => {\n if (chainStakeServiceSingleton) return chainStakeServiceSingleton\n // Parse config\n const emvStakingContractAddress = assertEx(config.chain.id, () => 'Error: config.chain.id is required')\n // Configure ContractRunner\n const id: Address = assertEx(asAddress(emvStakingContractAddress), () => 'Error: config.chain.id is not a valid address')\n const provider = assertEx(await initEvmProvider({ config }))\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 { Logger } from '@xylabs/logger'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport type { JsonRpcProvider } from 'ethers/providers'\n\nimport { canUseInfuraProvider, initInfuraProvider } from './initInfuraProvider.ts'\nimport { canUseJsonRpcProvider, initJsonRpcProvider } from './initJsonRpcProvider.ts'\n\nlet provider: Promise<JsonRpcProvider> | undefined\n\nexport const initEvmProvider = async ({ config }: { config: Config; logger?: Logger }) => {\n if (provider) return provider\n if (canUseInfuraProvider(config)) {\n provider = initInfuraProvider(config)\n } else if (canUseJsonRpcProvider(config)) {\n provider = initJsonRpcProvider(config)\n }\n return assertEx(await provider, () => 'Error: No provider available')\n}\n\nexport const canUseEvmProvider = ({ config }: { config: Config }) => {\n return canUseInfuraProvider(config) || canUseJsonRpcProvider(config)\n}\n","import { assertEx } from '@xylabs/assert'\nimport { isDefined } from '@xylabs/typeof'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport { InfuraProvider } from 'ethers/providers'\n\nimport { canUseChainId, getChainId } from './initChainId.ts'\n\nlet instance: Promise<InfuraProvider> | undefined\n\nexport const initInfuraProvider = (config: Config) => {\n if (instance) return instance\n const providerConfig = getInfuraProviderConfig(config)\n instance = Promise.resolve(new InfuraProvider(...providerConfig))\n return instance\n}\n\nexport const canUseInfuraProvider = (config: Config): boolean => {\n return canUseChainId(config)\n && isDefined(config.evm?.infura?.projectId)\n && isDefined(config.evm?.infura?.projectSecret)\n}\n\nexport const getInfuraProviderConfig = (config: Config) => {\n const projectId = assertEx(config.evm?.infura?.projectId, () => 'Missing config.evm.infura.projectId')\n const projectSecret = assertEx(config.evm?.infura?.projectSecret, () => 'Missing config.evm.infura.projectSecret')\n return [getChainId(config), projectId, projectSecret] as const\n}\n","import { assertEx } from '@xylabs/assert'\nimport { hexFrom, isHex } from '@xylabs/hex'\nimport { isDefined } from '@xylabs/typeof'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\n\nexport const canUseChainId = (config: Config): boolean => {\n return isDefined(config.evm.chainId)\n}\n\nexport const getChainId = (config: Config) => {\n const chainId = assertEx(config.evm.chainId, () => 'Missing config.evm.chainId')\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 { isDefined } from '@xylabs/typeof'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport { JsonRpcProvider } from 'ethers/providers'\n\nimport { canUseChainId, getChainId } from './initChainId.ts'\n\nexport const initJsonRpcProvider = (config: Config) => {\n const providerConfig = getJsonRpcProviderConfig(config)\n return Promise.resolve(new JsonRpcProvider(...providerConfig))\n}\n\nexport const canUseJsonRpcProvider = (config: Config) => {\n return canUseChainId(config)\n && isDefined(config.evm.jsonRpc?.url)\n}\n\nexport const getJsonRpcProviderConfig = (config: Config) => {\n const jsonRpcUrl = assertEx(config.evm.jsonRpc?.url, () => 'Missing config.evm.jsonRpc.url')\n return [jsonRpcUrl, getChainId(config)] 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'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\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 const { config } = params\n rewardServiceSingleton = canUseEvmBlockRewardService({ config })\n ? initEvmBlockRewardService(params as EvmBlockRewardServiceParams)\n : 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 = (params: { config: Config }) => canUseEvmProvider({ config: params.config })\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(params))\n const evmBlockRewardServiceParams: EvmBlockRewardServiceParams = {\n ...params, provider, account,\n }\n rewardServiceSingleton = EvmBlockRewardService.create(evmBlockRewardServiceParams)\n return rewardServiceSingleton\n}\n","import type { Promisable } from '@xylabs/promise'\nimport type { BaseBlockProducerServiceParams } from '@xyo-network/chain-services'\nimport type { BlockProducerService, Initializable } from '@xyo-network/xl1-protocol'\n\nimport { initBlockProducer } from './producer.ts'\n\nlet serviceSingleton: Promisable<BlockProducerService> | undefined\n\nexport const initValidator: Initializable<BaseBlockProducerServiceParams, BlockProducerService>\n= (params: BaseBlockProducerServiceParams): Promisable<BlockProducerService> => {\n if (serviceSingleton) return serviceSingleton\n serviceSingleton = initBlockProducer(params)\n return serviceSingleton\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 type { Logger } from '@xylabs/logger'\nimport { isDefined } from '@xylabs/typeof'\nimport { type Config, ConfigSchema } from '@xyo-network/xl1-protocol-sdk'\nimport type { Argv } from 'yargs'\nimport yargs from 'yargs'\nimport { hideBin } from 'yargs/helpers'\nimport { ZodError } from 'zod'\n\nimport { runApi, runProducer } from './commands/index.ts'\nimport { XL1LogoColorizedAscii } from './images.ts'\nimport { initLogger } from './initLogger.ts'\nimport { optionsFromZodSchema } from './optionsFromZodSchema.ts'\nimport { Orchestrator } from './orchestration/index.ts'\nimport { waitForHostPort } from './waitForHostPort.ts'\n\n/** Version string injected by Rollup at build time. */\ndeclare const __VERSION__: string\n\ninterface RunCliContext {\n logger: Logger\n orchestrator: Orchestrator\n}\n\n/**\n * The configuration that will be used throughout the CLI.\n * This is materialized after parsing the command-line arguments,\n * environment variables, and defaults.\n */\nlet config: Config\n\nconst version = isDefined(__VERSION__) ? __VERSION__ : 'unknown'\n\nconst getContextFromConfig = (config: Config): RunCliContext => {\n const logger = initLogger(config)\n const orchestrator = new Orchestrator(logger)\n // Handle cancellation (Ctrl+C)\n process.on('SIGINT', () => {\n void (async () => {\n try {\n logger.log('\\nSIGINT received. Attempting graceful shutdown...')\n await orchestrator?.stop()\n logger.log('Orchestrator stopped, exiting now.')\n process.exit(0)\n } catch (err) {\n logger.error('Error stopping orchestrator:', err)\n process.exit(1)\n }\n })()\n })\n return { logger, orchestrator }\n}\n\n// Main entry point\nexport async function runCLI() {\n // Parse command-line arguments using Yargs\n const y = yargs(hideBin(process.argv)) as Argv<Config>\n const argv = y\n .usage(`\n🚀 XL1 Node CLI (${version})\n${XL1LogoColorizedAscii}\nRun various components of the XL1 ecosystem.\n\nUsage:\n$0 <command> [options]`)\n .parserConfiguration({ 'dot-notation': true }) // foo.bar → { foo: { bar } }\n .env('XL1')\n .scriptName('xl1')\n .config()\n .version(version)\n .middleware((argv) => {\n try {\n // Parse and validate the config\n config = ConfigSchema.parse(argv)\n } catch (err) {\n if (err instanceof ZodError) {\n for (const issue of err.errors) {\n console.error(`${issue.path.join('.')} → ${issue.message}`)\n }\n }\n throw new Error('Invalid configuration')\n }\n })\n .options(optionsFromZodSchema(ConfigSchema.shape))\n // .commandDir('./command/commands', opts) // Not yet supported for ESM\n .wrap(y.terminalWidth())\n .command('api', 'Run a XL1 API Node', (yargs) => {\n return yargs\n .command('$0', 'Run a XL1 API Node', () => {}, () => {\n const context = getContextFromConfig(config)\n runApi({ ...context, config })\n })\n })\n .command('producer', 'Run a XL1 Producer Node', (yargs) => {\n return yargs\n .command('$0', 'Run a XL1 Producer Node', () => {}, async () => {\n const context = getContextFromConfig(config)\n await runProducer({ ...context, config })\n })\n })\n .command('$0', 'Run a full XL1 Node', () => {}, async () => {\n const context = getContextFromConfig(config)\n runApi({ ...context, config })\n await waitForHostPort('localhost', config.api.port)\n await runProducer({ ...context, config })\n })\n .help()\n .alias('help', 'h')\n .argv\n\n await argv\n}\n","import type { Logger } from '@xylabs/logger'\nimport { getServer } from '@xyo-network/chain-api'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\n\ninterface RunApiContext {\n config: Config\n logger?: Logger\n}\n\nexport function runApi(context: RunApiContext) {\n void getServer(context)\n}\n","import type { Logger } from '@xylabs/logger'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\n\nimport type { Orchestrator } from '../../orchestration/index.ts'\nimport {\n BalanceActor, ChainHeadUpdateActor, initServices, ProducerActor,\n} from '../../orchestration/index.ts'\n\ninterface RunProducerContext {\n config: Config\n logger: Logger\n orchestrator: Orchestrator\n}\n\nexport const runProducer = async (context: RunProducerContext) => {\n const {\n config, logger, orchestrator,\n } = context\n\n // Initialize services\n logger?.log('Services: Initializing...')\n const services = await initServices(context)\n logger?.log('Services: Initialized')\n\n // Create actors\n const params = { ...services, config }\n const chainHeadUpdate = await ChainHeadUpdateActor.create(params)\n const balances = await BalanceActor.create(params)\n const producer = await ProducerActor.create(params)\n const actors = [chainHeadUpdate, balances, 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","/* eslint-disable @stylistic/max-len */\nexport const XL1LogoColorizedAscii = `\u001b[38;2;128;128;128m                    \u001b[0m\u001b[38;2;118;111;144m_\u001b[0m\n\u001b[38;2;128;128;128m                   \u001b[0m\u001b[38;2;72;32;223m╠\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\n\u001b[38;2;128;128;128m                   ╠╠\u001b[0m\u001b[38;2;103;85;170m_\u001b[0m\n\u001b[38;2;128;128;128m        \u001b[0m\u001b[38;2;79;121;152m╦\u001b[0m\u001b[38;2;82;121;151m╦\u001b[0m\u001b[38;2;112;125;136m_       \u001b[0m\u001b[38;2;88;59;196m[\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;73;34;221m▒       \u001b[0m\u001b[38;2;121;121;127m_\u001b[0m\u001b[38;2;100;101;128m╔\u001b[0m\u001b[38;2;93;94;127m╦\u001b[0m\n\u001b[38;2;128;128;128m        \u001b[0m\u001b[38;2;82;121;151m²\u001b[0m\u001b[38;2;44;116;170m╠\u001b[0m\u001b[38;2;44;116;171m▒\u001b[0m\u001b[38;2;51;117;167mD\u001b[0m\u001b[38;2;80;121;152m╦\u001b[0m\u001b[38;2;111;125;136m_    \u001b[0m\u001b[38;2;67;23;232m╠\u001b[0m\u001b[38;2;66;21;234m╠╠╠    \u001b[0m\u001b[38;2;120;121;128m_\u001b[0m\u001b[38;2;100;101;127m╔\u001b[0m\u001b[38;2;79;81;127mR\u001b[0m\u001b[38;2;71;73;128m▒\u001b[0m\u001b[38;2;71;73;128m▒\u001b[0m\u001b[38;2;88;90;127m╙\u001b[0m\n\u001b[38;2;128;128;128m          \u001b[0m\u001b[38;2;55;117;165m╚\u001b[0m\u001b[38;2;44;116;171m▒\u001b[0m\u001b[38;2;44;116;171m▒▒\u001b[0m\u001b[38;2;50;116;167mD\u001b[0m\u001b[38;2;80;121;152m╦ \u001b[0m\u001b[38;2;106;90;165mj\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;66;21;234m╠╠╠\u001b[0m\u001b[38;2;89;61;194mH \u001b[0m\u001b[38;2;99;100;127m╔\u001b[0m\u001b[38;2;79;80;127mD\u001b[0m\u001b[38;2;71;73;128m▒\u001b[0m\u001b[38;2;71;73;128m▒▒╠\u001b[0m\n\u001b[38;2;128;128;128m           \u001b[0m\u001b[38;2;83;121;150m²\u001b[0m\u001b[38;2;44;116;170m▒\u001b[0m\u001b[38;2;44;116;171m▒▒▒ \u001b[0m\u001b[38;2;76;38;217m╠\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;66;21;234m╠╠╠╠ \u001b[0m\u001b[38;2;74;76;128m╠\u001b[0m\u001b[38;2;71;73;128m▒▒▒\u001b[0m\u001b[38;2;89;90;128m╙\u001b[0m\n\u001b[38;2;128;128;128m             \u001b[0m\u001b[38;2;90;118;148m\\`\u001b[0m\u001b[38;2;89;107;153m_\u001b[0m\u001b[38;2;93;97;154m,\u001b[0m\u001b[38;2;105;89;166m╓\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;66;21;234m╠╠╠╠╠\u001b[0m\u001b[38;2;95;72;183m╓\u001b[0m\u001b[38;2;106;96;152m_\u001b[0m\u001b[38;2;100;94;143m\\`\u001b[0m\u001b[38;2;101;100;133m\\`\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;122;118;137m_\u001b[0m\u001b[38;2;113;102;153m,\u001b[0m\u001b[38;2;108;94;161m╓\u001b[0m\u001b[38;2;104;86;169m╓\u001b[0m\u001b[38;2;98;77;178m╔\u001b[0m\u001b[38;2;93;67;188m╗\u001b[0m\u001b[38;2;88;59;196mφ\u001b[0m\u001b[38;2;83;51;204m@\u001b[0m\u001b[38;2;78;42;213mD\u001b[0m\u001b[38;2;72;32;223m▒\u001b[0m\u001b[38;2;68;24;231m╠\u001b[0m\u001b[38;2;66;21;234m╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠\u001b[0m\u001b[38;2;71;30;225m▒\u001b[0m\u001b[38;2;77;40;215m▒\u001b[0m\u001b[38;2;82;49;206mK\u001b[0m\u001b[38;2;87;57;198mφ\u001b[0m\u001b[38;2;91;65;190m╗\u001b[0m\u001b[38;2;97;75;180m╦\u001b[0m\u001b[38;2;103;84;171m╖\u001b[0m\u001b[38;2;107;92;163m²\u001b[0m\u001b[38;2;112;101;154m_\u001b[0m\u001b[38;2;119;112;143m_\u001b[0m\n\u001b[38;2;128;128;128m \u001b[0m\u001b[38;2;106;91;164m\\`\u001b[0m\u001b[38;2;94;70;185m^\u001b[0m\u001b[38;2;89;62;193m╙\u001b[0m\u001b[38;2;85;54;201m╙\u001b[0m\u001b[38;2;80;45;210m╚\u001b[0m\u001b[38;2;74;35;220m╝\u001b[0m\u001b[38;2;69;26;229m╠\u001b[0m\u001b[38;2;66;22;233m╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠\u001b[0m\u001b[38;2;73;33;222m╝\u001b[0m\u001b[38;2;79;43;212m╩\u001b[0m\u001b[38;2;84;52;203m╜\u001b[0m\u001b[38;2;88;60;195m╙\u001b[0m\u001b[38;2;93;68;187m^\u001b[0m\u001b[38;2;100;80;175m\\`\u001b[0m\n\u001b[38;2;128;128;128m             \u001b[0m\u001b[38;2;113;84;152m\\`\u001b[0m\u001b[38;2;103;79;169m'\u001b[0m\u001b[38;2;95;72;183m\"\u001b[0m\u001b[38;2;87;57;198m╙\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;66;21;234m╠╠╠╠╠\u001b[0m\u001b[38;2;80;46;209m╜\u001b[0m\u001b[38;2;94;70;185m^\u001b[0m\u001b[38;2;102;77;175m^\u001b[0m\u001b[38;2;112;81;162m\\`\u001b[0m\u001b[38;2;115;92;155m\\`\u001b[0m\n\u001b[38;2;128;128;128m           \u001b[0m\u001b[38;2;145;116;107m,\u001b[0m\u001b[38;2;199;82;45m╠\u001b[0m\u001b[38;2;207;77;35m▒\u001b[0m\u001b[38;2;207;77;35m▒╠ \u001b[0m\u001b[38;2;70;28;227m╠\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;66;21;234m╠╠╠╠ \u001b[0m\u001b[38;2;189;49;97må\u001b[0m\u001b[38;2;203;32;90m╠\u001b[0m\u001b[38;2;203;32;90m╠╠\u001b[0m\u001b[38;2;155;92;114m,\u001b[0m\n\u001b[38;2;128;128;128m          \u001b[0m\u001b[38;2;175;98;73m╔\u001b[0m\u001b[38;2;207;77;35m▒\u001b[0m\u001b[38;2;207;77;35m▒▒▒\u001b[0m\u001b[38;2;197;83;47m╩ \u001b[0m\u001b[38;2;98;76;179m[\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;66;21;234m╠╠╠\u001b[0m\u001b[38;2;81;48;207mH \u001b[0m\u001b[38;2;188;51;98m╚\u001b[0m\u001b[38;2;203;32;90m╠\u001b[0m\u001b[38;2;203;32;90m╠╠╠\u001b[0m\u001b[38;2;183;57;100mH\u001b[0m\n\u001b[38;2;128;128;128m        \u001b[0m\u001b[38;2;146;116;106m,\u001b[0m\u001b[38;2;199;82;44m╠\u001b[0m\u001b[38;2;207;77;35m▒\u001b[0m\u001b[38;2;207;77;35m▒\u001b[0m\u001b[38;2;196;84;48m╩\u001b[0m\u001b[38;2;168;102;81m^    \u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;66;21;234m╠╠╠    \u001b[0m\u001b[38;2;160;87;111m'\u001b[0m\u001b[38;2;187;52;98m╚\u001b[0m\u001b[38;2;203;32;90m╠\u001b[0m\u001b[38;2;203;32;90m╠╠\u001b[0m\u001b[38;2;156;91;113m,\u001b[0m\n\u001b[38;2;128;128;128m        \u001b[0m\u001b[38;2;198;83;46m╩\u001b[0m\u001b[38;2;194;85;50m╩\u001b[0m\u001b[38;2;167;102;82m^       \u001b[0m\u001b[38;2;81;46;209m╚\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;66;21;234m╠╠       \u001b[0m\u001b[38;2;159;88;112m'\u001b[0m\u001b[38;2;186;53;98m╚\u001b[0m\u001b[38;2;197;40;93m╩\u001b[0m\n\u001b[38;2;128;128;128m                  \u001b[0m\u001b[38;2;110;97;158m'\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\u001b[38;2;94;69;186mH\u001b[0m\n\u001b[38;2;128;128;128m                   \u001b[0m\u001b[38;2;68;25;230m╠\u001b[0m\u001b[38;2;66;21;234m╠\u001b[0m\n\u001b[38;2;128;128;128m                   \u001b[0m\u001b[38;2;108;93;162m²\u001b[0m\u001b[38;2;99;79;176m^\u001b[0m`\n","import { Base } from '@xylabs/base'\nimport type { Logger, LogLevelValue } from '@xylabs/logger'\nimport {\n ConsoleLogger, LogLevel, SilentLogger,\n} from '@xylabs/logger'\nimport { isDefined } from '@xylabs/typeof'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\n\nexport const initLogger = (config: Config): Logger => {\n let logger: Logger\n if (config.silent) {\n logger = new SilentLogger()\n } else {\n let level: LogLevelValue | undefined\n if (isDefined(config.logLevel)) {\n const parsed = LogLevel[config.logLevel.toLowerCase() as keyof typeof LogLevel]\n if (isDefined(parsed)) level = parsed\n }\n logger = new ConsoleLogger(level)\n }\n Base.defaultLogger = logger\n return logger\n}\n","import type { Options } from 'yargs'\nimport type { ZodTypeAny } from 'zod'\nimport {\n ZodBoolean, ZodDefault, ZodEnum, ZodNumber, ZodObject, ZodOptional,\n} from 'zod'\n\nconst collectOptions = (\n zodType: ZodTypeAny,\n path: string[] = [],\n out: Record<string, Options> = {},\n): Record<string, Options> => {\n // Handle objects by descending into their shape\n if (zodType instanceof ZodObject) {\n const shape = (zodType as ZodObject<{}>).shape\n for (const [k, v] of Object.entries(shape)) {\n collectOptions(v as ZodTypeAny, [...path, k], out)\n }\n return out\n }\n\n // Handle defaults and optionals by descending into the inner type\n // TODO: Less brittle\n const def = zodType._def\n if (def?.innerType instanceof ZodObject) {\n const shape = def.innerType.shape\n for (const [k, v] of Object.entries(shape)) {\n collectOptions(v as ZodTypeAny, [...path, k], out)\n }\n return out\n }\n\n // Construct the Yargs Options\n const options: Options = {}\n\n // Assign the description\n options.describe = def.description\n\n // Assign the default value\n options.default = typeof def.defaultValue === 'function'\n ? def.defaultValue()\n : def.defaultValue\n\n // Assign the type\n let type: 'string' | 'number' | 'boolean' = 'string'\n const typeName = def.typeName === ZodDefault.name || def.typeName === ZodOptional.name\n ? def.innerType._def.typeName\n : def.typeName\n if (typeName === ZodBoolean.name) type = 'boolean'\n if (typeName === ZodNumber.name || def.coerce) type = 'number'\n if (typeName === ZodEnum.name) {\n options.choices = Object.values(def.innerType.enum)\n }\n options.type = type\n\n // Build argument path e.g. \"db.host\" or \"producer.port\"\n const key = path.join('.')\n out[key] = options\n return out\n}\n\nexport const optionsFromZodSchema = (\n schema: Record<string, ZodTypeAny>,\n): Record<string, Options> => {\n const opts: Record<string, Options> = {}\n for (const [rootKey, zodType] of Object.entries(schema)) {\n collectOptions(zodType, [rootKey], opts)\n }\n return opts\n}\n","import net from 'node:net'\n\nexport const waitForHostPort = (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","import { config } from 'dotenv'\n\nimport { runCLI } from './runCLI.ts'\n\nexport const start = async () => {\n config({ quiet: true })\n await runCLI()\n}\n"],"mappings":"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","names":["assertEx","PayloadBuilder","Mutex","Base","forget","IdLogger","span","spanAsync","Actor","Base","_timers","Map","_active","_displayName","_id","id","displayName","params","logger","IdLogger","defaultLogger","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","logger","running","registerActor","actor","start","push","Promise","resolve","warn","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","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","producer","address","account","assertEx","balanceService","chainIterator","chainStakeViewer","chainSubmissionsArchivistWrite","pendingBundledTransactionsArchivistWrite","stakeIntentService","create","start","registerTimer","spanAsync","head","headHash","PayloadBuilder","hash","previous","logger","log","toHex","block","nextBlock","next","displayBlockNumber","insert","flattenHydratedBlock","config","disableIntentRedeclaration","isUndefined","currentBlock","blocksUntilExpiration","calculateBlocksUntilProducerDeclarationExpiration","BaseBlockProducerService","RedeclarationWindow","undefined","exp","validateCurrentBalance","error","validateCurrentStake","chain","id","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","getRequiredMinimumStakeForIntent","currentStake","activeByAddressStaked","assertEx","toHex","isDefined","isUndefined","PayloadBuilder","ValidatorActor","Actor","_lastValidatedBlock","_lastValidatedBlockHash","params","account","assertEx","balanceService","chainIterator","chainStakeViewer","chainSubmissionsArchivistWrite","pendingBundledTransactionsArchivistWrite","stakeIntentService","create","start","registerTimer","spanAsync","block","head","isUndefined","hash","PayloadBuilder","isDefined","logger","log","toHex","valid","validateBlock","slashInvalidBlock","_block","slashed","Promise","resolve","http","isDefined","sendStatus","res","status","errorCode","statusCode","writeHead","end","JSON","stringify","notFound","createHealthServer","port","statusMonitor","logger","server","http","createServer","req","url","getGlobalStatus","listen","log","initHealthEndpoints","params","config","statusReporter","healthCheckPort","producer","isDefined","undefined","assertEx","asAddress","isDefined","balanceSummaryRepositoryFromMap","initTelemetry","startupSpanAsync","validateHydratedBlockState","initArchivistSync","startupSpanAsync","Mutex","Mutex","rm","Path","LmdbArchivist","LmdbArchivistConfigSchema","Path","getStoreDirectory","name","storageRoot","kind","undefined","Path","join","DEFAULT_STORAGE_ROOT","Path","join","process","cwd","getLocalPersistentArchivist","dbName","storeName","storageRoot","kind","root","LmdbArchivist","create","account","config","clearStoreOnStart","location","getStoreDirectory","schema","LmdbArchivistConfigSchema","mutex","Mutex","singleton","initLocalChainFinalizedArchivist","config","runExclusive","root","storage","getLocalPersistentArchivist","assertEx","initBridge","initBridgedArchivistModule","getUrl","Mutex","mutex","Mutex","singleton","initRemoteChainFinalizedArchivist","config","runExclusive","host","port","api","nodeUrl","getUrl","bridge","initBridge","initBridgedArchivistModule","moduleName","assertEx","mutex","Mutex","singleton","initChainFinalizedArchivist","config","logger","traceProvider","runExclusive","remote","local","Promise","all","startupSpanAsync","initRemoteChainFinalizedArchivist","initLocalChainFinalizedArchivist","initArchivistSync","Number","MAX_SAFE_INTEGER","assertEx","startupSpanAsync","Mutex","assertEx","initBridge","initBridgedArchivistModule","getUrl","Mutex","mutex","Mutex","singleton","initRemoteChainSubmissionsArchivist","config","runExclusive","host","port","api","nodeUrl","getUrl","bridge","initBridge","initBridgedArchivistModule","moduleName","assertEx","Error","mutex","Mutex","singleton","initChainSubmissionsArchivist","params","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","getUrl","Mutex","mutex","Mutex","singleton","initRemotePendingTransactionsArchivist","config","runExclusive","host","port","api","nodeUrl","getUrl","bridge","initBridge","initBridgedArchivistModule","moduleName","assertEx","mutex","Mutex","singleton","initPendingBundledTransactionsArchivist","params","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","params","runExclusive","local","startupSpanAsync","initLocalRejectedTransactionsArchivist","assertEx","startupSpanAsync","Mutex","assertEx","Mutex","mutex","Mutex","singleton","initLocalStakeIntentStateArchivist","config","runExclusive","root","storage","getLocalPersistentArchivist","assertEx","Error","mutex","Mutex","singleton","initStakeIntentStateArchivist","params","runExclusive","local","startupSpanAsync","initLocalStakeIntentStateArchivist","assertEx","isDefined","startupSpanAsync","Mutex","isDefined","Mutex","rm","Path","AbstractCreatable","creatable","open","SynchronousLmdbMap","AbstractCreatable","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","DEFAULT_STORAGE_ROOT","Path","join","process","cwd","getLocalPersistentMap","dbName","storeName","storageRoot","kind","root","location","getStoreDirectory","store","SynchronousLmdbMap","create","mutex","Mutex","singleton","initLocalBalanceSummaryMap","params","runExclusive","isDefined","root","config","storage","getLocalPersistentMap","mutex","Mutex","singleton","initBalanceSummaryMap","params","runExclusive","isDefined","local","startupSpanAsync","initLocalBalanceSummaryMap","isUndefined","ADDRESS_INDEX","generateXyoBaseWalletFromPhrase","HDWallet","accountServiceSingleton","initAccount","config","logger","walletPhrase","producer","mnemonic","isUndefined","log","randomMnemonic","HDWallet","generateMnemonic","wallet","generateXyoBaseWalletFromPhrase","account","derivePath","ADDRESS_INDEX","XYO","BaseAccountBalanceService","balanceServiceSingleton","initBalanceService","params","BaseAccountBalanceService","create","MemoryChainService","assertEx","asAddress","ZERO_ADDRESS","isDefined","EvmChainService","Wallet","assertEx","assertEx","isDefined","InfuraProvider","assertEx","hexFrom","isHex","isDefined","canUseChainId","config","isDefined","evm","chainId","getChainId","assertEx","isHex","prefix","hex","hexFrom","parsed","Number","parseInt","instance","initInfuraProvider","config","providerConfig","getInfuraProviderConfig","Promise","resolve","InfuraProvider","canUseInfuraProvider","canUseChainId","isDefined","evm","infura","projectId","projectSecret","assertEx","getChainId","assertEx","isDefined","JsonRpcProvider","initJsonRpcProvider","config","providerConfig","getJsonRpcProviderConfig","Promise","resolve","JsonRpcProvider","canUseJsonRpcProvider","canUseChainId","isDefined","evm","jsonRpc","url","jsonRpcUrl","assertEx","getChainId","provider","initEvmProvider","config","canUseInfuraProvider","initInfuraProvider","canUseJsonRpcProvider","initJsonRpcProvider","assertEx","canUseEvmProvider","chainStakeServiceSingleton","canUseEvmContractChainService","config","id","chain","isDefined","ZERO_ADDRESS","canUseEvmProvider","initEvmContractChainService","account","traceProvider","meterProvider","logger","emvStakingContractAddress","assertEx","asAddress","provider","initEvmProvider","privateKey","private","hex","runner","Wallet","EvmChainService","create","chainStakeServiceSingleton","initChainService","account","config","init","name","params","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","config","canUseEvmBlockRewardService","initEvmBlockRewardService","initXyoBlockRewardService","MemoryBlockRewardService","create","canUseEvmProvider","account","paramsAccount","assertEx","provider","initEvmProvider","evmBlockRewardServiceParams","EvmBlockRewardService","serviceSingleton","initValidator","params","initBlockProducer","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","context","config","logger","statusReporter","RuntimeStatusMonitor","onGlobalTransition","to","log","error","process","exit","startupSpanAsync","initHealthEndpoints","traceProvider","meterProvider","account","Promise","all","initTelemetry","initAccount","initParams","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","producer","assertEx","asAddress","address","producerParams","initBlockProducer","result","startableServices","Object","values","filter","map","service","isDefined","ConfigSchema","yargs","hideBin","ZodError","getServer","runApi","context","getServer","runProducer","context","config","logger","orchestrator","log","services","initServices","params","chainHeadUpdate","ChainHeadUpdateActor","create","balances","BalanceActor","producer","ProducerActor","actors","actor","registerActor","start","XL1LogoColorizedAscii","Base","ConsoleLogger","LogLevel","SilentLogger","isDefined","initLogger","config","logger","silent","SilentLogger","level","isDefined","logLevel","parsed","LogLevel","toLowerCase","ConsoleLogger","Base","defaultLogger","ZodBoolean","ZodDefault","ZodEnum","ZodNumber","ZodObject","ZodOptional","collectOptions","zodType","path","out","ZodObject","shape","k","v","Object","entries","def","_def","innerType","options","describe","description","default","defaultValue","type","typeName","ZodDefault","name","ZodOptional","ZodBoolean","ZodNumber","coerce","ZodEnum","choices","values","enum","key","join","optionsFromZodSchema","schema","opts","rootKey","net","waitForHostPort","host","port","Promise","resolve","tryConnect","socket","net","Socket","setTimeout","once","destroy","connect","end","config","version","isDefined","__VERSION__","getContextFromConfig","logger","initLogger","orchestrator","Orchestrator","process","on","log","stop","exit","err","error","runCLI","y","yargs","hideBin","argv","usage","XL1LogoColorizedAscii","parserConfiguration","env","scriptName","middleware","ConfigSchema","parse","ZodError","issue","errors","console","path","join","message","Error","options","optionsFromZodSchema","shape","wrap","terminalWidth","command","context","runApi","runProducer","waitForHostPort","api","port","help","alias","config","start","config","quiet","runCLI"]}
@@ -0,0 +1,3 @@
1
+ import { type Config as Config } from '@xyo-network/xl1-protocol-sdk';
2
+ export declare const initConfig: () => Config;
3
+ //# sourceMappingURL=initConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initConfig.d.ts","sourceRoot":"","sources":["../../src/initConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,IAAI,MAAM,EAAgB,MAAM,+BAA+B,CAAA;AAEnF,eAAO,MAAM,UAAU,QAAO,MAG7B,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { Logger } from '@xylabs/logger';
2
+ import type { Config } from '@xyo-network/xl1-protocol-sdk';
3
+ export declare const initLogger: (config: Config) => Logger;
4
+ //# sourceMappingURL=initLogger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initLogger.d.ts","sourceRoot":"","sources":["../../src/initLogger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,gBAAgB,CAAA;AAK3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAE3D,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,KAAG,MAc3C,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { Options } from 'yargs';
2
+ import type { ZodTypeAny } from 'zod';
3
+ export declare const optionsFromZodSchema: (schema: Record<string, ZodTypeAny>) => Record<string, Options>;
4
+ //# sourceMappingURL=optionsFromZodSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optionsFromZodSchema.d.ts","sourceRoot":"","sources":["../../src/optionsFromZodSchema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AACpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AA2DrC,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,KACjC,MAAM,CAAC,MAAM,EAAE,OAAO,CAMxB,CAAA"}
@@ -0,0 +1,11 @@
1
+ import type { MeterProvider, TracerProvider } from '@opentelemetry/api';
2
+ import type { InitializableParams } from '@xyo-network/xl1-protocol';
3
+ import type { Config } from '@xyo-network/xl1-protocol-sdk';
4
+ import type { RuntimeStatusMonitor } from './status/index.ts';
5
+ export type ChainInitializableParams = InitializableParams<{
6
+ config: Config;
7
+ meterProvider: MeterProvider;
8
+ statusReporter: RuntimeStatusMonitor;
9
+ traceProvider: TracerProvider;
10
+ }>;
11
+ //# sourceMappingURL=ChainInitializableParams.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChainInitializableParams.d.ts","sourceRoot":"","sources":["../../../src/orchestration/ChainInitializableParams.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAE3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAE7D,MAAM,MAAM,wBAAwB,GAAG,mBAAmB,CAAC;IACzD,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,aAAa,CAAA;IAC5B,cAAc,EAAE,oBAAoB,CAAA;IACpC,aAAa,EAAE,cAAc,CAAA;CAC9B,CAAC,CAAA"}
@@ -0,0 +1,18 @@
1
+ import type { BaseParams } from '@xylabs/base';
2
+ import type { Promisable } from '@xylabs/promise';
3
+ import type { ChainServiceCollectionV2, Config } from '@xyo-network/xl1-protocol-sdk';
4
+ import { Mutex } from 'async-mutex';
5
+ import { Actor } from '../model/index.ts';
6
+ export type BalanceActorParams = BaseParams<Pick<ChainServiceCollectionV2, 'balanceService' | 'chainIterator'> & {
7
+ config: Config;
8
+ }>;
9
+ export declare class BalanceActor extends Actor<BalanceActorParams> {
10
+ protected _updateMutex: Mutex;
11
+ protected constructor(params: BalanceActorParams);
12
+ protected get balanceService(): import("@xyo-network/xl1-protocol").AccountBalanceServiceV2;
13
+ protected get chainIterator(): import("@xyo-network/xl1-protocol").EventingChainBlockNumberIterator;
14
+ static create(params: BalanceActorParams): Promisable<BalanceActor>;
15
+ start(): Promise<void>;
16
+ protected updateBalance(): Promise<void>;
17
+ }
18
+ //# 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,wBAAwB,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AACrF,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;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAEvB,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,19 @@
1
+ import type { BaseParams } from '@xylabs/base';
2
+ import type { Promisable } from '@xylabs/promise';
3
+ import type { Payload } from '@xyo-network/payload-model';
4
+ import type { ChainServiceCollectionV2, Config } from '@xyo-network/xl1-protocol-sdk';
5
+ import { Actor } from '../model/index.ts';
6
+ export type ChainHeadUpdateActorParams = BaseParams<Pick<ChainServiceCollectionV2, 'chainIterator' | 'chainArchivist'> & {
7
+ config: Config;
8
+ }>;
9
+ export declare class ChainHeadUpdateActor extends Actor<ChainHeadUpdateActorParams> {
10
+ protected constructor(params: ChainHeadUpdateActorParams);
11
+ 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>;
12
+ protected get chainIterator(): import("@xyo-network/xl1-protocol").EventingChainBlockNumberIterator;
13
+ static create(params: ChainHeadUpdateActorParams): Promisable<ChainHeadUpdateActor>;
14
+ start(): Promise<void>;
15
+ private checkInsertedForNewHead;
16
+ private pollForNewHead;
17
+ private updateHeadIfNewer;
18
+ }
19
+ //# 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;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGzD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAErF,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEzC,MAAM,MAAM,0BAA0B,GAAG,UAAU,CAAC,IAAI,CAAC,wBAAwB,EAAE,eAAe,GAAG,gBAAgB,CAAC,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAE5I,qBAAa,oBAAqB,SAAQ,KAAK,CAAC,0BAA0B,CAAC;IACzE,SAAS,aAAa,MAAM,EAAE,0BAA0B;IAIxD,SAAS,KAAK,uBAAuB,4SAEpC;IAED,SAAS,KAAK,aAAa,yEAE1B;IAED,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,0BAA0B,GAAG,UAAU,CAAC,oBAAoB,CAAC;IAIpE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAUvB,uBAAuB;YAKvB,cAAc;YAKd,iBAAiB;CAYhC"}
@@ -0,0 +1,28 @@
1
+ import type { BaseParams } from '@xylabs/base';
2
+ import type { Promisable } from '@xylabs/promise';
3
+ import type { ChainStakeIntent, HydratedBlock } from '@xyo-network/xl1-protocol';
4
+ import type { ChainServiceCollectionV2, Config } from '@xyo-network/xl1-protocol-sdk';
5
+ import { Actor } from '../model/index.ts';
6
+ export type ProducerActorParams = BaseParams<Pick<ChainServiceCollectionV2, 'account' | 'balanceService' | 'chainIterator' | 'chainStakeViewer' | 'chainSubmissionsArchivistWrite' | 'pendingBundledTransactionsArchivistWrite' | 'producer' | 'stakeIntentService'> & {
7
+ config: Config;
8
+ }>;
9
+ export declare class ProducerActor extends Actor<ProducerActorParams> {
10
+ protected _lastProducedBlock: HydratedBlock | undefined;
11
+ protected _lastRedeclarationIntent: ChainStakeIntent | undefined;
12
+ protected constructor(params: ProducerActorParams);
13
+ protected get account(): import("@xyo-network/wallet-model").WalletInstance;
14
+ protected get balanceService(): import("@xyo-network/xl1-protocol").AccountBalanceServiceV2;
15
+ protected get chainIterator(): import("@xyo-network/xl1-protocol").EventingChainBlockNumberIterator;
16
+ protected get chainStakeViewer(): import("@xyo-network/xl1-protocol").ChainStakeViewer;
17
+ 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>>;
18
+ 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>;
19
+ protected get producer(): import("@xyo-network/xl1-protocol").BlockProducerService;
20
+ protected get stakeIntentService(): import("@xyo-network/xl1-protocol").StakeIntentService;
21
+ static create(params: ProducerActorParams): Promisable<ProducerActor>;
22
+ start(): Promise<void>;
23
+ protected calculateBlocksUntilProducerDeclarationExpiration(currentBlock: number): Promise<number>;
24
+ protected submitRedeclarationIntent(currentBlock: number, redeclarationIntent: ChainStakeIntent): Promise<void>;
25
+ protected validateCurrentBalance(): Promise<boolean>;
26
+ protected validateCurrentStake(): Promise<boolean>;
27
+ }
28
+ //# 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;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAOjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAChF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAKrF,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,GAAG;IACF,MAAM,EAAE,MAAM,CAAA;CACf,CAAC,CAAA;AAKJ,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;IAED,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,GAAG,UAAU,CAAC,aAAa,CAAC;IAItD,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;CAWzD"}
@@ -0,0 +1,26 @@
1
+ import type { BaseParams } from '@xylabs/base';
2
+ import type { Hash } from '@xylabs/hex';
3
+ import type { Promisable } from '@xylabs/promise';
4
+ import type { BlockBoundWitness } from '@xyo-network/xl1-protocol';
5
+ import type { ChainServiceCollectionV2, Config } from '@xyo-network/xl1-protocol-sdk';
6
+ import { Actor } from '../model/index.ts';
7
+ export type ValidatorActorParams = BaseParams<Pick<ChainServiceCollectionV2, 'account' | 'balanceService' | 'chainIterator' | 'chainStakeViewer' | 'chainSubmissionsArchivistWrite' | 'pendingBundledTransactionsArchivistWrite' | 'stakeIntentService'> & {
8
+ config: Config;
9
+ }>;
10
+ export declare class ValidatorActor extends Actor<ValidatorActorParams> {
11
+ protected _lastValidatedBlock: BlockBoundWitness | undefined;
12
+ protected _lastValidatedBlockHash: Hash | undefined;
13
+ protected constructor(params: ValidatorActorParams);
14
+ protected get account(): import("@xyo-network/wallet-model").WalletInstance;
15
+ protected get balanceService(): import("@xyo-network/xl1-protocol").AccountBalanceServiceV2;
16
+ protected get chainIterator(): import("@xyo-network/xl1-protocol").EventingChainBlockNumberIterator;
17
+ protected get chainStakeViewer(): import("@xyo-network/xl1-protocol").ChainStakeViewer;
18
+ 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>>;
19
+ 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>;
20
+ protected get stakeIntentService(): import("@xyo-network/xl1-protocol").StakeIntentService;
21
+ static create(params: ValidatorActorParams): Promisable<ValidatorActor>;
22
+ start(): Promise<void>;
23
+ protected slashInvalidBlock(_block: BlockBoundWitness): Promise<boolean>;
24
+ protected validateBlock(block: BlockBoundWitness): Promise<boolean>;
25
+ }
26
+ //# sourceMappingURL=ValidatorActor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValidatorActor.d.ts","sourceRoot":"","sources":["../../../../../src/orchestration/actor/implementation/ValidatorActor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAEvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAGjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAErF,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEzC,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAC3C,IAAI,CAAC,wBAAwB,EAC7B,SAAS,GACP,gBAAgB,GAChB,eAAe,GACf,kBAAkB,GAClB,gCAAgC,GAChC,0CAA0C,GAC1C,oBAAoB,CACrB,GAAG;IACF,MAAM,EAAE,MAAM,CAAA;CACf,CAAC,CAAA;AAEJ,qBAAa,cAAe,SAAQ,KAAK,CAAC,oBAAoB,CAAC;IAC7D,SAAS,CAAC,mBAAmB,EAAE,iBAAiB,GAAG,SAAS,CAAA;IAC5D,SAAS,CAAC,uBAAuB,EAAE,IAAI,GAAG,SAAS,CAAA;IAEnD,SAAS,aAAa,MAAM,EAAE,oBAAoB;IAIlD,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,kBAAkB,2DAE/B;IAMD,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,UAAU,CAAC,cAAc,CAAC;IAIxD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;cA2BrB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;cAM9D,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;CAU1E"}
@@ -0,0 +1,5 @@
1
+ export * from './BalanceActor.ts';
2
+ export * from './ChainHeadUpdateActor.ts';
3
+ export * from './ProducerActor.ts';
4
+ export * from './ValidatorActor.ts';
5
+ //# 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;AAClC,cAAc,qBAAqB,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"}