@echoclaw/echo-0g 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (371) hide show
  1. package/README.md +1175 -0
  2. package/dist/0g-compute/account.d.ts +36 -0
  3. package/dist/0g-compute/account.d.ts.map +1 -0
  4. package/dist/0g-compute/account.js +85 -0
  5. package/dist/0g-compute/account.js.map +1 -0
  6. package/dist/0g-compute/bridge.d.ts +16 -0
  7. package/dist/0g-compute/bridge.d.ts.map +1 -0
  8. package/dist/0g-compute/bridge.js +40 -0
  9. package/dist/0g-compute/bridge.js.map +1 -0
  10. package/dist/0g-compute/broker-factory.d.ts +19 -0
  11. package/dist/0g-compute/broker-factory.d.ts.map +1 -0
  12. package/dist/0g-compute/broker-factory.js +65 -0
  13. package/dist/0g-compute/broker-factory.js.map +1 -0
  14. package/dist/0g-compute/constants.d.ts +10 -0
  15. package/dist/0g-compute/constants.d.ts.map +1 -0
  16. package/dist/0g-compute/constants.js +12 -0
  17. package/dist/0g-compute/constants.js.map +1 -0
  18. package/dist/0g-compute/monitor.d.ts +43 -0
  19. package/dist/0g-compute/monitor.d.ts.map +1 -0
  20. package/dist/0g-compute/monitor.js +302 -0
  21. package/dist/0g-compute/monitor.js.map +1 -0
  22. package/dist/0g-compute/pricing.d.ts +43 -0
  23. package/dist/0g-compute/pricing.d.ts.map +1 -0
  24. package/dist/0g-compute/pricing.js +53 -0
  25. package/dist/0g-compute/pricing.js.map +1 -0
  26. package/dist/0g-compute/sdk-bridge.cjs +17 -0
  27. package/dist/0g-compute/sdk-bridge.cjs.map +1 -0
  28. package/dist/0g-compute/sdk-bridge.d.cts +9 -0
  29. package/dist/0g-compute/sdk-bridge.d.cts.map +1 -0
  30. package/dist/0g-compute/smoke-test.d.ts +11 -0
  31. package/dist/0g-compute/smoke-test.d.ts.map +1 -0
  32. package/dist/0g-compute/smoke-test.js +172 -0
  33. package/dist/0g-compute/smoke-test.js.map +1 -0
  34. package/dist/bot/daemon.d.ts +34 -0
  35. package/dist/bot/daemon.d.ts.map +1 -0
  36. package/dist/bot/daemon.js +386 -0
  37. package/dist/bot/daemon.js.map +1 -0
  38. package/dist/bot/executor.d.ts +14238 -0
  39. package/dist/bot/executor.d.ts.map +1 -0
  40. package/dist/bot/executor.js +183 -0
  41. package/dist/bot/executor.js.map +1 -0
  42. package/dist/bot/nonce-queue.d.ts +20 -0
  43. package/dist/bot/nonce-queue.d.ts.map +1 -0
  44. package/dist/bot/nonce-queue.js +41 -0
  45. package/dist/bot/nonce-queue.js.map +1 -0
  46. package/dist/bot/notify.d.ts +15 -0
  47. package/dist/bot/notify.d.ts.map +1 -0
  48. package/dist/bot/notify.js +98 -0
  49. package/dist/bot/notify.js.map +1 -0
  50. package/dist/bot/orders.d.ts +30 -0
  51. package/dist/bot/orders.d.ts.map +1 -0
  52. package/dist/bot/orders.js +172 -0
  53. package/dist/bot/orders.js.map +1 -0
  54. package/dist/bot/state.d.ts +14 -0
  55. package/dist/bot/state.d.ts.map +1 -0
  56. package/dist/bot/state.js +109 -0
  57. package/dist/bot/state.js.map +1 -0
  58. package/dist/bot/stream.d.ts +28 -0
  59. package/dist/bot/stream.d.ts.map +1 -0
  60. package/dist/bot/stream.js +96 -0
  61. package/dist/bot/stream.js.map +1 -0
  62. package/dist/bot/triggers.d.ts +17 -0
  63. package/dist/bot/triggers.d.ts.map +1 -0
  64. package/dist/bot/triggers.js +95 -0
  65. package/dist/bot/triggers.js.map +1 -0
  66. package/dist/bot/types.d.ts +199 -0
  67. package/dist/bot/types.d.ts.map +1 -0
  68. package/dist/bot/types.js +12 -0
  69. package/dist/bot/types.js.map +1 -0
  70. package/dist/chainscan/client.d.ts +28 -0
  71. package/dist/chainscan/client.d.ts.map +1 -0
  72. package/dist/chainscan/client.js +361 -0
  73. package/dist/chainscan/client.js.map +1 -0
  74. package/dist/chainscan/constants.d.ts +15 -0
  75. package/dist/chainscan/constants.d.ts.map +1 -0
  76. package/dist/chainscan/constants.js +15 -0
  77. package/dist/chainscan/constants.js.map +1 -0
  78. package/dist/chainscan/types.d.ts +148 -0
  79. package/dist/chainscan/types.d.ts.map +1 -0
  80. package/dist/chainscan/types.js +2 -0
  81. package/dist/chainscan/types.js.map +1 -0
  82. package/dist/chainscan/validation.d.ts +35 -0
  83. package/dist/chainscan/validation.d.ts.map +1 -0
  84. package/dist/chainscan/validation.js +97 -0
  85. package/dist/chainscan/validation.js.map +1 -0
  86. package/dist/cli.d.ts +7 -0
  87. package/dist/cli.d.ts.map +1 -0
  88. package/dist/cli.js +328 -0
  89. package/dist/cli.js.map +1 -0
  90. package/dist/commands/0g-compute.d.ts +21 -0
  91. package/dist/commands/0g-compute.d.ts.map +1 -0
  92. package/dist/commands/0g-compute.js +850 -0
  93. package/dist/commands/0g-compute.js.map +1 -0
  94. package/dist/commands/chainscan.d.ts +17 -0
  95. package/dist/commands/chainscan.d.ts.map +1 -0
  96. package/dist/commands/chainscan.js +605 -0
  97. package/dist/commands/chainscan.js.map +1 -0
  98. package/dist/commands/config.d.ts +3 -0
  99. package/dist/commands/config.d.ts.map +1 -0
  100. package/dist/commands/config.js +251 -0
  101. package/dist/commands/config.js.map +1 -0
  102. package/dist/commands/echobook.d.ts +17 -0
  103. package/dist/commands/echobook.d.ts.map +1 -0
  104. package/dist/commands/echobook.js +905 -0
  105. package/dist/commands/echobook.js.map +1 -0
  106. package/dist/commands/jaine-subgraph.d.ts +3 -0
  107. package/dist/commands/jaine-subgraph.d.ts.map +1 -0
  108. package/dist/commands/jaine-subgraph.js +565 -0
  109. package/dist/commands/jaine-subgraph.js.map +1 -0
  110. package/dist/commands/jaine.d.ts +3 -0
  111. package/dist/commands/jaine.d.ts.map +1 -0
  112. package/dist/commands/jaine.js +1415 -0
  113. package/dist/commands/jaine.js.map +1 -0
  114. package/dist/commands/marketmaker.d.ts +6 -0
  115. package/dist/commands/marketmaker.d.ts.map +1 -0
  116. package/dist/commands/marketmaker.js +451 -0
  117. package/dist/commands/marketmaker.js.map +1 -0
  118. package/dist/commands/send.d.ts +3 -0
  119. package/dist/commands/send.d.ts.map +1 -0
  120. package/dist/commands/send.js +229 -0
  121. package/dist/commands/send.js.map +1 -0
  122. package/dist/commands/setup.d.ts +3 -0
  123. package/dist/commands/setup.d.ts.map +1 -0
  124. package/dist/commands/setup.js +263 -0
  125. package/dist/commands/setup.js.map +1 -0
  126. package/dist/commands/slop-app.d.ts +9 -0
  127. package/dist/commands/slop-app.d.ts.map +1 -0
  128. package/dist/commands/slop-app.js +708 -0
  129. package/dist/commands/slop-app.js.map +1 -0
  130. package/dist/commands/slop-stream.d.ts +9 -0
  131. package/dist/commands/slop-stream.d.ts.map +1 -0
  132. package/dist/commands/slop-stream.js +99 -0
  133. package/dist/commands/slop-stream.js.map +1 -0
  134. package/dist/commands/slop.d.ts +3 -0
  135. package/dist/commands/slop.d.ts.map +1 -0
  136. package/dist/commands/slop.js +1053 -0
  137. package/dist/commands/slop.js.map +1 -0
  138. package/dist/commands/wallet.d.ts +13 -0
  139. package/dist/commands/wallet.d.ts.map +1 -0
  140. package/dist/commands/wallet.js +748 -0
  141. package/dist/commands/wallet.js.map +1 -0
  142. package/dist/config/paths.d.ts +13 -0
  143. package/dist/config/paths.d.ts.map +1 -0
  144. package/dist/config/paths.js +33 -0
  145. package/dist/config/paths.js.map +1 -0
  146. package/dist/config/store.d.ts +48 -0
  147. package/dist/config/store.d.ts.map +1 -0
  148. package/dist/config/store.js +113 -0
  149. package/dist/config/store.js.map +1 -0
  150. package/dist/constants/chain.d.ts +57 -0
  151. package/dist/constants/chain.d.ts.map +1 -0
  152. package/dist/constants/chain.js +51 -0
  153. package/dist/constants/chain.js.map +1 -0
  154. package/dist/echobook/api.d.ts +38 -0
  155. package/dist/echobook/api.d.ts.map +1 -0
  156. package/dist/echobook/api.js +86 -0
  157. package/dist/echobook/api.js.map +1 -0
  158. package/dist/echobook/auth.d.ts +31 -0
  159. package/dist/echobook/auth.d.ts.map +1 -0
  160. package/dist/echobook/auth.js +93 -0
  161. package/dist/echobook/auth.js.map +1 -0
  162. package/dist/echobook/comments.d.ts +26 -0
  163. package/dist/echobook/comments.d.ts.map +1 -0
  164. package/dist/echobook/comments.js +20 -0
  165. package/dist/echobook/comments.js.map +1 -0
  166. package/dist/echobook/follows.d.ts +19 -0
  167. package/dist/echobook/follows.d.ts.map +1 -0
  168. package/dist/echobook/follows.js +21 -0
  169. package/dist/echobook/follows.js.map +1 -0
  170. package/dist/echobook/jwtCache.d.ts +15 -0
  171. package/dist/echobook/jwtCache.d.ts.map +1 -0
  172. package/dist/echobook/jwtCache.js +63 -0
  173. package/dist/echobook/jwtCache.js.map +1 -0
  174. package/dist/echobook/notifications.d.ts +30 -0
  175. package/dist/echobook/notifications.d.ts.map +1 -0
  176. package/dist/echobook/notifications.js +26 -0
  177. package/dist/echobook/notifications.js.map +1 -0
  178. package/dist/echobook/points.d.ts +35 -0
  179. package/dist/echobook/points.d.ts.map +1 -0
  180. package/dist/echobook/points.js +20 -0
  181. package/dist/echobook/points.js.map +1 -0
  182. package/dist/echobook/posts.d.ts +46 -0
  183. package/dist/echobook/posts.d.ts.map +1 -0
  184. package/dist/echobook/posts.js +43 -0
  185. package/dist/echobook/posts.js.map +1 -0
  186. package/dist/echobook/profile.d.ts +29 -0
  187. package/dist/echobook/profile.d.ts.map +1 -0
  188. package/dist/echobook/profile.js +14 -0
  189. package/dist/echobook/profile.js.map +1 -0
  190. package/dist/echobook/submolts.d.ts +22 -0
  191. package/dist/echobook/submolts.d.ts.map +1 -0
  192. package/dist/echobook/submolts.js +24 -0
  193. package/dist/echobook/submolts.js.map +1 -0
  194. package/dist/echobook/tradeProof.d.ts +21 -0
  195. package/dist/echobook/tradeProof.d.ts.map +1 -0
  196. package/dist/echobook/tradeProof.js +14 -0
  197. package/dist/echobook/tradeProof.js.map +1 -0
  198. package/dist/echobook/votes.d.ts +17 -0
  199. package/dist/echobook/votes.d.ts.map +1 -0
  200. package/dist/echobook/votes.js +20 -0
  201. package/dist/echobook/votes.js.map +1 -0
  202. package/dist/errors.d.ts +125 -0
  203. package/dist/errors.d.ts.map +1 -0
  204. package/dist/errors.js +147 -0
  205. package/dist/errors.js.map +1 -0
  206. package/dist/intents/store.d.ts +22 -0
  207. package/dist/intents/store.d.ts.map +1 -0
  208. package/dist/intents/store.js +76 -0
  209. package/dist/intents/store.js.map +1 -0
  210. package/dist/intents/types.d.ts +21 -0
  211. package/dist/intents/types.d.ts.map +1 -0
  212. package/dist/intents/types.js +2 -0
  213. package/dist/intents/types.js.map +1 -0
  214. package/dist/jaine/abi/erc20.d.ts +90 -0
  215. package/dist/jaine/abi/erc20.d.ts.map +1 -0
  216. package/dist/jaine/abi/erc20.js +65 -0
  217. package/dist/jaine/abi/erc20.js.map +1 -0
  218. package/dist/jaine/abi/factory.d.ts +38 -0
  219. package/dist/jaine/abi/factory.d.ts.map +1 -0
  220. package/dist/jaine/abi/factory.js +26 -0
  221. package/dist/jaine/abi/factory.js.map +1 -0
  222. package/dist/jaine/abi/index.d.ts +11 -0
  223. package/dist/jaine/abi/index.d.ts.map +1 -0
  224. package/dist/jaine/abi/index.js +11 -0
  225. package/dist/jaine/abi/index.js.map +1 -0
  226. package/dist/jaine/abi/nftManager.d.ts +282 -0
  227. package/dist/jaine/abi/nftManager.d.ts.map +1 -0
  228. package/dist/jaine/abi/nftManager.js +182 -0
  229. package/dist/jaine/abi/nftManager.js.map +1 -0
  230. package/dist/jaine/abi/pool.d.ts +77 -0
  231. package/dist/jaine/abi/pool.d.ts.map +1 -0
  232. package/dist/jaine/abi/pool.js +56 -0
  233. package/dist/jaine/abi/pool.js.map +1 -0
  234. package/dist/jaine/abi/quoter.d.ts +84 -0
  235. package/dist/jaine/abi/quoter.d.ts.map +1 -0
  236. package/dist/jaine/abi/quoter.js +53 -0
  237. package/dist/jaine/abi/quoter.js.map +1 -0
  238. package/dist/jaine/abi/router.d.ts +135 -0
  239. package/dist/jaine/abi/router.d.ts.map +1 -0
  240. package/dist/jaine/abi/router.js +88 -0
  241. package/dist/jaine/abi/router.js.map +1 -0
  242. package/dist/jaine/abi/w0g.d.ts +41 -0
  243. package/dist/jaine/abi/w0g.d.ts.map +1 -0
  244. package/dist/jaine/abi/w0g.js +34 -0
  245. package/dist/jaine/abi/w0g.js.map +1 -0
  246. package/dist/jaine/allowance.d.ts +48 -0
  247. package/dist/jaine/allowance.d.ts.map +1 -0
  248. package/dist/jaine/allowance.js +192 -0
  249. package/dist/jaine/allowance.js.map +1 -0
  250. package/dist/jaine/coreTokens.d.ts +32 -0
  251. package/dist/jaine/coreTokens.d.ts.map +1 -0
  252. package/dist/jaine/coreTokens.js +91 -0
  253. package/dist/jaine/coreTokens.js.map +1 -0
  254. package/dist/jaine/pathEncoding.d.ts +39 -0
  255. package/dist/jaine/pathEncoding.d.ts.map +1 -0
  256. package/dist/jaine/pathEncoding.js +98 -0
  257. package/dist/jaine/pathEncoding.js.map +1 -0
  258. package/dist/jaine/paths.d.ts +11 -0
  259. package/dist/jaine/paths.d.ts.map +1 -0
  260. package/dist/jaine/paths.js +20 -0
  261. package/dist/jaine/paths.js.map +1 -0
  262. package/dist/jaine/poolCache.d.ts +47 -0
  263. package/dist/jaine/poolCache.d.ts.map +1 -0
  264. package/dist/jaine/poolCache.js +195 -0
  265. package/dist/jaine/poolCache.js.map +1 -0
  266. package/dist/jaine/routing.d.ts +41 -0
  267. package/dist/jaine/routing.d.ts.map +1 -0
  268. package/dist/jaine/routing.js +247 -0
  269. package/dist/jaine/routing.js.map +1 -0
  270. package/dist/jaine/subgraph/client.d.ts +26 -0
  271. package/dist/jaine/subgraph/client.d.ts.map +1 -0
  272. package/dist/jaine/subgraph/client.js +201 -0
  273. package/dist/jaine/subgraph/client.js.map +1 -0
  274. package/dist/jaine/subgraph/constants.d.ts +9 -0
  275. package/dist/jaine/subgraph/constants.d.ts.map +1 -0
  276. package/dist/jaine/subgraph/constants.js +9 -0
  277. package/dist/jaine/subgraph/constants.js.map +1 -0
  278. package/dist/jaine/subgraph/queries.d.ts +21 -0
  279. package/dist/jaine/subgraph/queries.d.ts.map +1 -0
  280. package/dist/jaine/subgraph/queries.js +304 -0
  281. package/dist/jaine/subgraph/queries.js.map +1 -0
  282. package/dist/jaine/subgraph/types.d.ts +209 -0
  283. package/dist/jaine/subgraph/types.d.ts.map +1 -0
  284. package/dist/jaine/subgraph/types.js +7 -0
  285. package/dist/jaine/subgraph/types.js.map +1 -0
  286. package/dist/jaine/userTokens.d.ts +27 -0
  287. package/dist/jaine/userTokens.d.ts.map +1 -0
  288. package/dist/jaine/userTokens.js +89 -0
  289. package/dist/jaine/userTokens.js.map +1 -0
  290. package/dist/openclaw/config.d.ts +43 -0
  291. package/dist/openclaw/config.d.ts.map +1 -0
  292. package/dist/openclaw/config.js +231 -0
  293. package/dist/openclaw/config.js.map +1 -0
  294. package/dist/openclaw/hooks-client.d.ts +24 -0
  295. package/dist/openclaw/hooks-client.d.ts.map +1 -0
  296. package/dist/openclaw/hooks-client.js +119 -0
  297. package/dist/openclaw/hooks-client.js.map +1 -0
  298. package/dist/slop/abi/factory.d.ts +128 -0
  299. package/dist/slop/abi/factory.d.ts.map +1 -0
  300. package/dist/slop/abi/factory.js +70 -0
  301. package/dist/slop/abi/factory.js.map +1 -0
  302. package/dist/slop/abi/feeCollector.d.ts +95 -0
  303. package/dist/slop/abi/feeCollector.d.ts.map +1 -0
  304. package/dist/slop/abi/feeCollector.js +71 -0
  305. package/dist/slop/abi/feeCollector.js.map +1 -0
  306. package/dist/slop/abi/index.d.ts +5 -0
  307. package/dist/slop/abi/index.d.ts.map +1 -0
  308. package/dist/slop/abi/index.js +5 -0
  309. package/dist/slop/abi/index.js.map +1 -0
  310. package/dist/slop/abi/registry.d.ts +135 -0
  311. package/dist/slop/abi/registry.d.ts.map +1 -0
  312. package/dist/slop/abi/registry.js +90 -0
  313. package/dist/slop/abi/registry.js.map +1 -0
  314. package/dist/slop/abi/token.d.ts +320 -0
  315. package/dist/slop/abi/token.d.ts.map +1 -0
  316. package/dist/slop/abi/token.js +251 -0
  317. package/dist/slop/abi/token.js.map +1 -0
  318. package/dist/slop/auth.d.ts +19 -0
  319. package/dist/slop/auth.d.ts.map +1 -0
  320. package/dist/slop/auth.js +92 -0
  321. package/dist/slop/auth.js.map +1 -0
  322. package/dist/slop/jwtCache.d.ts +27 -0
  323. package/dist/slop/jwtCache.d.ts.map +1 -0
  324. package/dist/slop/jwtCache.js +91 -0
  325. package/dist/slop/jwtCache.js.map +1 -0
  326. package/dist/slop/quote.d.ts +80 -0
  327. package/dist/slop/quote.d.ts.map +1 -0
  328. package/dist/slop/quote.js +174 -0
  329. package/dist/slop/quote.js.map +1 -0
  330. package/dist/utils/canonicalJson.d.ts +8 -0
  331. package/dist/utils/canonicalJson.d.ts.map +1 -0
  332. package/dist/utils/canonicalJson.js +20 -0
  333. package/dist/utils/canonicalJson.js.map +1 -0
  334. package/dist/utils/env.d.ts +11 -0
  335. package/dist/utils/env.d.ts.map +1 -0
  336. package/dist/utils/env.js +20 -0
  337. package/dist/utils/env.js.map +1 -0
  338. package/dist/utils/http.d.ts +19 -0
  339. package/dist/utils/http.d.ts.map +1 -0
  340. package/dist/utils/http.js +61 -0
  341. package/dist/utils/http.js.map +1 -0
  342. package/dist/utils/logger.d.ts +4 -0
  343. package/dist/utils/logger.d.ts.map +1 -0
  344. package/dist/utils/logger.js +21 -0
  345. package/dist/utils/logger.js.map +1 -0
  346. package/dist/utils/output.d.ts +29 -0
  347. package/dist/utils/output.d.ts.map +1 -0
  348. package/dist/utils/output.js +51 -0
  349. package/dist/utils/output.js.map +1 -0
  350. package/dist/utils/rateLimit.d.ts +22 -0
  351. package/dist/utils/rateLimit.d.ts.map +1 -0
  352. package/dist/utils/rateLimit.js +58 -0
  353. package/dist/utils/rateLimit.js.map +1 -0
  354. package/dist/utils/respond.d.ts +19 -0
  355. package/dist/utils/respond.d.ts.map +1 -0
  356. package/dist/utils/respond.js +25 -0
  357. package/dist/utils/respond.js.map +1 -0
  358. package/dist/utils/ui.d.ts +38 -0
  359. package/dist/utils/ui.d.ts.map +1 -0
  360. package/dist/utils/ui.js +126 -0
  361. package/dist/utils/ui.js.map +1 -0
  362. package/dist/wallet/client.d.ts +4 -0
  363. package/dist/wallet/client.d.ts.map +1 -0
  364. package/dist/wallet/client.js +53 -0
  365. package/dist/wallet/client.js.map +1 -0
  366. package/dist/wallet/keystore.d.ts +22 -0
  367. package/dist/wallet/keystore.d.ts.map +1 -0
  368. package/dist/wallet/keystore.js +111 -0
  369. package/dist/wallet/keystore.js.map +1 -0
  370. package/package.json +63 -0
  371. package/skills/echo/SKILL.md +1121 -0
@@ -0,0 +1,605 @@
1
+ /**
2
+ * ChainScan commands — Query on-chain data from the 0G ChainScan explorer.
3
+ *
4
+ * echo chainscan balance [address]
5
+ * echo chainscan balancemulti --addresses <list>
6
+ * echo chainscan token-balance <contractAddress> [address]
7
+ * echo chainscan token-supply <contractAddress>
8
+ * echo chainscan txs [address]
9
+ * echo chainscan transfers erc20|erc721 [address]
10
+ * echo chainscan tx status|receipt <hash>
11
+ * echo chainscan contract abi|source|creation
12
+ * echo chainscan decode hashes|raw
13
+ * echo chainscan stats holders|transfers|participants|top-wallets
14
+ */
15
+ import { Command } from "commander";
16
+ import { loadConfig } from "../config/store.js";
17
+ import { EchoError, ErrorCodes } from "../errors.js";
18
+ import { chainscanClient } from "../chainscan/client.js";
19
+ import { validateAddress } from "../chainscan/validation.js";
20
+ import { isHeadless, writeJsonSuccess } from "../utils/output.js";
21
+ import { respond } from "../utils/respond.js";
22
+ import { spinner, colors, formatAddress, printTable } from "../utils/ui.js";
23
+ // ============ HELPERS ============
24
+ function resolveAddress(input) {
25
+ if (input)
26
+ return validateAddress(input);
27
+ const cfg = loadConfig();
28
+ if (!cfg.wallet.address) {
29
+ throw new EchoError(ErrorCodes.WALLET_NOT_CONFIGURED, "No address provided and no wallet configured.", "Provide an address argument or run: echo wallet create --json");
30
+ }
31
+ return cfg.wallet.address;
32
+ }
33
+ function parseCommaSeparated(val) {
34
+ return val.split(",").map(s => s.trim()).filter(Boolean);
35
+ }
36
+ function parseIntOpt(val) {
37
+ const n = parseInt(val, 10);
38
+ if (isNaN(n))
39
+ throw new EchoError(ErrorCodes.INVALID_AMOUNT, `Invalid number: ${val}`);
40
+ return n;
41
+ }
42
+ function formatWei(wei) {
43
+ const n = BigInt(wei);
44
+ const whole = n / 10n ** 18n;
45
+ const frac = n % 10n ** 18n;
46
+ const fracStr = frac.toString().padStart(18, "0").slice(0, 6).replace(/0+$/, "");
47
+ return fracStr ? `${whole}.${fracStr}` : whole.toString();
48
+ }
49
+ function formatTimestamp(ts) {
50
+ const n = Number(ts);
51
+ if (!n)
52
+ return ts;
53
+ return new Date(n * 1000).toISOString().replace("T", " ").slice(0, 19);
54
+ }
55
+ // ============ COMMAND FACTORY ============
56
+ export function createChainScanCommand() {
57
+ const chainscan = new Command("chainscan")
58
+ .description("Query on-chain data from 0G ChainScan explorer")
59
+ .exitOverride();
60
+ // ============ BALANCE ============
61
+ chainscan
62
+ .command("balance")
63
+ .description("Get native 0G balance for an address")
64
+ .argument("[address]", "Wallet address (default: configured wallet)")
65
+ .option("--tag <tag>", "Block tag", "latest_state")
66
+ .action(async (address, opts) => {
67
+ const addr = resolveAddress(address);
68
+ const spin = spinner("Fetching balance...");
69
+ spin.start();
70
+ const balance = await chainscanClient.getBalance(addr, opts.tag);
71
+ spin.succeed("Balance fetched");
72
+ const formatted = formatWei(balance);
73
+ respond({
74
+ data: { address: addr, balance, balanceFormatted: `${formatted} 0G` },
75
+ ui: {
76
+ type: "success",
77
+ title: "Balance",
78
+ body: `${colors.address(formatAddress(addr))}\n${colors.value(formatted)} 0G`,
79
+ },
80
+ });
81
+ });
82
+ // ============ BALANCE MULTI ============
83
+ chainscan
84
+ .command("balancemulti")
85
+ .description("Get balances for multiple addresses")
86
+ .requiredOption("--addresses <list>", "Comma-separated addresses", parseCommaSeparated)
87
+ .option("--tag <tag>", "Block tag", "latest_state")
88
+ .action(async (opts) => {
89
+ const spin = spinner("Fetching balances...");
90
+ spin.start();
91
+ const balances = await chainscanClient.getBalanceMulti(opts.addresses, opts.tag);
92
+ spin.succeed("Balances fetched");
93
+ if (isHeadless()) {
94
+ writeJsonSuccess({ balances });
95
+ }
96
+ else {
97
+ printTable([{ header: "Address", width: 46 }, { header: "Balance (0G)", width: 22 }], balances.map(b => [b.account, formatWei(b.balance)]));
98
+ }
99
+ });
100
+ // ============ TOKEN BALANCE ============
101
+ chainscan
102
+ .command("token-balance")
103
+ .description("Get ERC-20 token balance")
104
+ .argument("<contractAddress>", "Token contract address")
105
+ .argument("[address]", "Wallet address (default: configured wallet)")
106
+ .action(async (contractAddress, address) => {
107
+ const addr = resolveAddress(address);
108
+ const spin = spinner("Fetching token balance...");
109
+ spin.start();
110
+ const balance = await chainscanClient.getTokenBalance(addr, contractAddress);
111
+ spin.succeed("Token balance fetched");
112
+ respond({
113
+ data: { address: addr, contractAddress, balance },
114
+ ui: {
115
+ type: "success",
116
+ title: "Token Balance",
117
+ body: `${colors.address(formatAddress(addr))}\nContract: ${colors.address(formatAddress(contractAddress))}\nBalance: ${colors.value(balance)}`,
118
+ },
119
+ });
120
+ });
121
+ // ============ TOKEN SUPPLY ============
122
+ chainscan
123
+ .command("token-supply")
124
+ .description("Get total supply of an ERC-20 token")
125
+ .argument("<contractAddress>", "Token contract address")
126
+ .action(async (contractAddress) => {
127
+ const spin = spinner("Fetching token supply...");
128
+ spin.start();
129
+ const supply = await chainscanClient.getTokenSupply(contractAddress);
130
+ spin.succeed("Token supply fetched");
131
+ respond({
132
+ data: { contractAddress, totalSupply: supply },
133
+ ui: {
134
+ type: "success",
135
+ title: "Token Supply",
136
+ body: `Contract: ${colors.address(formatAddress(contractAddress))}\nTotal Supply: ${colors.value(supply)}`,
137
+ },
138
+ });
139
+ });
140
+ // ============ TXS ============
141
+ chainscan
142
+ .command("txs")
143
+ .description("List transactions for an address")
144
+ .argument("[address]", "Wallet address (default: configured wallet)")
145
+ .option("--page <n>", "Page number", parseIntOpt)
146
+ .option("--offset <n>", "Results per page (max 100)", parseIntOpt)
147
+ .option("--sort <dir>", "Sort direction (asc|desc)")
148
+ .option("--startblock <n>", "Start block", parseIntOpt)
149
+ .option("--endblock <n>", "End block", parseIntOpt)
150
+ .action(async (address, opts) => {
151
+ const addr = resolveAddress(address);
152
+ const spin = spinner("Fetching transactions...");
153
+ spin.start();
154
+ const txs = await chainscanClient.getTransactions(addr, opts);
155
+ spin.succeed(`Found ${txs.length} transaction(s)`);
156
+ if (isHeadless()) {
157
+ writeJsonSuccess({ address: addr, count: txs.length, transactions: txs });
158
+ }
159
+ else {
160
+ if (!txs.length) {
161
+ respond({ data: {}, ui: { type: "info", title: "Transactions", body: "No transactions found" } });
162
+ return;
163
+ }
164
+ printTable([
165
+ { header: "Hash", width: 18 },
166
+ { header: "From", width: 16 },
167
+ { header: "To", width: 16 },
168
+ { header: "Value (0G)", width: 16 },
169
+ { header: "Time", width: 22 },
170
+ ], txs.map(tx => [
171
+ formatAddress(tx.hash, 6),
172
+ formatAddress(tx.from),
173
+ formatAddress(tx.to || "(create)"),
174
+ formatWei(tx.value),
175
+ formatTimestamp(tx.timeStamp),
176
+ ]));
177
+ }
178
+ });
179
+ // ============ TRANSFERS (subgroup) ============
180
+ const transfers = new Command("transfers")
181
+ .description("Token transfer queries")
182
+ .exitOverride();
183
+ transfers
184
+ .command("erc20")
185
+ .description("List ERC-20 token transfers")
186
+ .argument("[address]", "Wallet address (default: configured wallet)")
187
+ .option("--contract <addr>", "Filter by token contract address")
188
+ .option("--page <n>", "Page number", parseIntOpt)
189
+ .option("--offset <n>", "Results per page (max 100)", parseIntOpt)
190
+ .option("--sort <dir>", "Sort direction (asc|desc)")
191
+ .action(async (address, opts) => {
192
+ const addr = resolveAddress(address);
193
+ const spin = spinner("Fetching ERC-20 transfers...");
194
+ spin.start();
195
+ const txs = await chainscanClient.getTokenTransfers(addr, {
196
+ page: opts.page,
197
+ offset: opts.offset,
198
+ sort: opts.sort,
199
+ contractaddress: opts.contract,
200
+ });
201
+ spin.succeed(`Found ${txs.length} ERC-20 transfer(s)`);
202
+ if (isHeadless()) {
203
+ writeJsonSuccess({ address: addr, count: txs.length, transfers: txs });
204
+ }
205
+ else {
206
+ if (!txs.length) {
207
+ respond({ data: {}, ui: { type: "info", title: "ERC-20 Transfers", body: "No transfers found" } });
208
+ return;
209
+ }
210
+ printTable([
211
+ { header: "Token", width: 10 },
212
+ { header: "From", width: 16 },
213
+ { header: "To", width: 16 },
214
+ { header: "Value", width: 18 },
215
+ { header: "Time", width: 22 },
216
+ ], txs.map(tx => [
217
+ tx.tokenSymbol || formatAddress(tx.contractAddress),
218
+ formatAddress(tx.from),
219
+ formatAddress(tx.to),
220
+ tx.value,
221
+ formatTimestamp(tx.timeStamp),
222
+ ]));
223
+ }
224
+ });
225
+ transfers
226
+ .command("erc721")
227
+ .description("List ERC-721 (NFT) transfers")
228
+ .argument("[address]", "Wallet address (default: configured wallet)")
229
+ .option("--contract <addr>", "Filter by NFT contract address")
230
+ .option("--page <n>", "Page number", parseIntOpt)
231
+ .option("--offset <n>", "Results per page (max 100)", parseIntOpt)
232
+ .option("--sort <dir>", "Sort direction (asc|desc)")
233
+ .action(async (address, opts) => {
234
+ const addr = resolveAddress(address);
235
+ const spin = spinner("Fetching NFT transfers...");
236
+ spin.start();
237
+ const txs = await chainscanClient.getNftTransfers(addr, {
238
+ page: opts.page,
239
+ offset: opts.offset,
240
+ sort: opts.sort,
241
+ contractaddress: opts.contract,
242
+ });
243
+ spin.succeed(`Found ${txs.length} NFT transfer(s)`);
244
+ if (isHeadless()) {
245
+ writeJsonSuccess({ address: addr, count: txs.length, transfers: txs });
246
+ }
247
+ else {
248
+ if (!txs.length) {
249
+ respond({ data: {}, ui: { type: "info", title: "NFT Transfers", body: "No NFT transfers found" } });
250
+ return;
251
+ }
252
+ printTable([
253
+ { header: "Token", width: 10 },
254
+ { header: "ID", width: 8 },
255
+ { header: "From", width: 16 },
256
+ { header: "To", width: 16 },
257
+ { header: "Time", width: 22 },
258
+ ], txs.map(tx => [
259
+ tx.tokenSymbol || formatAddress(tx.contractAddress),
260
+ tx.tokenID,
261
+ formatAddress(tx.from),
262
+ formatAddress(tx.to),
263
+ formatTimestamp(tx.timeStamp),
264
+ ]));
265
+ }
266
+ });
267
+ chainscan.addCommand(transfers);
268
+ // ============ TX (subgroup) ============
269
+ const tx = new Command("tx")
270
+ .description("Transaction verification")
271
+ .exitOverride();
272
+ tx
273
+ .command("status")
274
+ .description("Check transaction execution status")
275
+ .argument("<txHash>", "Transaction hash")
276
+ .action(async (txHash) => {
277
+ const spin = spinner("Checking tx status...");
278
+ spin.start();
279
+ const status = await chainscanClient.getTxStatus(txHash);
280
+ spin.succeed("Status fetched");
281
+ const isError = status.isError === "1";
282
+ respond({
283
+ data: { txHash, ...status },
284
+ ui: {
285
+ type: isError ? "warn" : "success",
286
+ title: "Transaction Status",
287
+ body: isError
288
+ ? `${colors.error("Error")}: ${status.errDescription}`
289
+ : `${colors.success("Success")} — No execution error`,
290
+ },
291
+ });
292
+ });
293
+ tx
294
+ .command("receipt")
295
+ .description("Check transaction receipt status")
296
+ .argument("<txHash>", "Transaction hash")
297
+ .action(async (txHash) => {
298
+ const spin = spinner("Checking tx receipt...");
299
+ spin.start();
300
+ const receipt = await chainscanClient.getTxReceiptStatus(txHash);
301
+ spin.succeed("Receipt fetched");
302
+ const success = receipt.status === "1";
303
+ respond({
304
+ data: { txHash, ...receipt },
305
+ ui: {
306
+ type: success ? "success" : "warn",
307
+ title: "Transaction Receipt",
308
+ body: success
309
+ ? `${colors.success("Confirmed")} — Transaction succeeded`
310
+ : `${colors.error("Failed")} — Transaction reverted`,
311
+ },
312
+ });
313
+ });
314
+ chainscan.addCommand(tx);
315
+ // ============ CONTRACT (subgroup) ============
316
+ const contract = new Command("contract")
317
+ .description("Contract intelligence")
318
+ .exitOverride();
319
+ contract
320
+ .command("abi")
321
+ .description("Get contract ABI (if verified)")
322
+ .argument("<address>", "Contract address")
323
+ .action(async (address) => {
324
+ const spin = spinner("Fetching contract ABI...");
325
+ spin.start();
326
+ const abi = await chainscanClient.getContractAbi(address);
327
+ spin.succeed("ABI fetched");
328
+ respond({
329
+ data: { address, abi },
330
+ ui: {
331
+ type: "success",
332
+ title: "Contract ABI",
333
+ body: `${colors.address(formatAddress(address))}\nABI length: ${abi.length} chars`,
334
+ },
335
+ });
336
+ });
337
+ contract
338
+ .command("source")
339
+ .description("Get contract source code (if verified)")
340
+ .argument("<address>", "Contract address")
341
+ .action(async (address) => {
342
+ const spin = spinner("Fetching contract source...");
343
+ spin.start();
344
+ const sources = await chainscanClient.getContractSource(address);
345
+ spin.succeed("Source fetched");
346
+ if (isHeadless()) {
347
+ writeJsonSuccess({ address, contracts: sources });
348
+ }
349
+ else {
350
+ if (!sources.length || !sources[0].ContractName) {
351
+ respond({ data: {}, ui: { type: "info", title: "Contract Source", body: "Contract not verified" } });
352
+ return;
353
+ }
354
+ const s = sources[0];
355
+ respond({
356
+ data: {},
357
+ ui: {
358
+ type: "success",
359
+ title: "Contract Source",
360
+ body: [
361
+ `Name: ${colors.bold(s.ContractName)}`,
362
+ `Compiler: ${s.CompilerVersion}`,
363
+ `Optimization: ${s.OptimizationUsed === "1" ? `Yes (${s.Runs} runs)` : "No"}`,
364
+ `EVM: ${s.EVMVersion}`,
365
+ `License: ${s.LicenseType}`,
366
+ s.Proxy === "1" ? `Proxy → ${colors.address(s.Implementation)}` : null,
367
+ ].filter(Boolean).join("\n"),
368
+ },
369
+ });
370
+ }
371
+ });
372
+ contract
373
+ .command("creation")
374
+ .description("Get contract creation info")
375
+ .requiredOption("--addresses <list>", "Comma-separated contract addresses (max 5)", parseCommaSeparated)
376
+ .action(async (opts) => {
377
+ const spin = spinner("Fetching contract creation info...");
378
+ spin.start();
379
+ const results = await chainscanClient.getContractCreation(opts.addresses);
380
+ spin.succeed("Creation info fetched");
381
+ if (isHeadless()) {
382
+ writeJsonSuccess({ contracts: results });
383
+ }
384
+ else {
385
+ if (!results.length) {
386
+ respond({ data: {}, ui: { type: "info", title: "Contract Creation", body: "No results found" } });
387
+ return;
388
+ }
389
+ printTable([
390
+ { header: "Contract", width: 16 },
391
+ { header: "Creator", width: 16 },
392
+ { header: "Tx Hash", width: 18 },
393
+ { header: "Block", width: 10 },
394
+ ], results.map(c => [
395
+ formatAddress(c.contractAddress),
396
+ formatAddress(c.contractCreator),
397
+ formatAddress(c.txHash, 6),
398
+ c.blockNumber,
399
+ ]));
400
+ }
401
+ });
402
+ chainscan.addCommand(contract);
403
+ // ============ DECODE (subgroup) ============
404
+ const decode = new Command("decode")
405
+ .description("Decode transaction data")
406
+ .exitOverride();
407
+ decode
408
+ .command("hashes")
409
+ .description("Decode method signatures by tx hashes (max 10)")
410
+ .requiredOption("--hashes <list>", "Comma-separated tx hashes", parseCommaSeparated)
411
+ .action(async (opts) => {
412
+ const spin = spinner("Decoding method signatures...");
413
+ spin.start();
414
+ const results = await chainscanClient.decodeByHashes(opts.hashes);
415
+ spin.succeed("Decoded");
416
+ if (isHeadless()) {
417
+ writeJsonSuccess({ decoded: results });
418
+ }
419
+ else {
420
+ printTable([
421
+ { header: "Hash", width: 18 },
422
+ { header: "ABI", width: 30 },
423
+ { header: "Error", width: 20 },
424
+ ], results.map(d => [
425
+ formatAddress(d.hash, 6),
426
+ d.abi || "-",
427
+ d.error || "-",
428
+ ]));
429
+ }
430
+ });
431
+ decode
432
+ .command("raw")
433
+ .description("Decode raw input data against contracts (max 10)")
434
+ .requiredOption("--contracts <list>", "Comma-separated contract addresses", parseCommaSeparated)
435
+ .requiredOption("--inputs <list>", "Comma-separated input data (hex)", parseCommaSeparated)
436
+ .action(async (opts) => {
437
+ const spin = spinner("Decoding raw input...");
438
+ spin.start();
439
+ const results = await chainscanClient.decodeRaw(opts.contracts, opts.inputs);
440
+ spin.succeed("Decoded");
441
+ if (isHeadless()) {
442
+ writeJsonSuccess({ decoded: results });
443
+ }
444
+ else {
445
+ printTable([
446
+ { header: "Contract", width: 16 },
447
+ { header: "ABI", width: 30 },
448
+ { header: "Error", width: 20 },
449
+ ], results.map(d => [
450
+ formatAddress(d.contract),
451
+ d.abi || "-",
452
+ d.error || "-",
453
+ ]));
454
+ }
455
+ });
456
+ chainscan.addCommand(decode);
457
+ // ============ STATS (subgroup) — meme coin intel ============
458
+ const stats = new Command("stats")
459
+ .description("Token statistics (meme coin intel)")
460
+ .exitOverride();
461
+ stats
462
+ .command("holders")
463
+ .description("Token holder count over time")
464
+ .argument("<contractAddress>", "Token contract address")
465
+ .option("--limit <n>", "Max results (max 2000)", parseIntOpt)
466
+ .option("--skip <n>", "Skip results", parseIntOpt)
467
+ .option("--sort <dir>", "Sort direction (asc|desc)")
468
+ .option("--min-timestamp <n>", "Min timestamp (seconds)", parseIntOpt)
469
+ .option("--max-timestamp <n>", "Max timestamp (seconds)", parseIntOpt)
470
+ .action(async (contractAddress, opts) => {
471
+ const spin = spinner("Fetching holder stats...");
472
+ spin.start();
473
+ const data = await chainscanClient.getTokenHolderStats(contractAddress, {
474
+ limit: opts.limit,
475
+ skip: opts.skip,
476
+ sort: opts.sort,
477
+ minTimestamp: opts.minTimestamp,
478
+ maxTimestamp: opts.maxTimestamp,
479
+ });
480
+ spin.succeed(`Found ${data.length} data point(s)`);
481
+ if (isHeadless()) {
482
+ writeJsonSuccess({ contractAddress, count: data.length, holderStats: data });
483
+ }
484
+ else {
485
+ if (!data.length) {
486
+ respond({ data: {}, ui: { type: "info", title: "Holder Stats", body: "No data found" } });
487
+ return;
488
+ }
489
+ printTable([{ header: "Date", width: 22 }, { header: "Holders", width: 12 }], data.map(d => [formatTimestamp(d.statTime), d.holderCount]));
490
+ }
491
+ });
492
+ stats
493
+ .command("transfers")
494
+ .description("Token transfer count over time")
495
+ .argument("<contractAddress>", "Token contract address")
496
+ .option("--limit <n>", "Max results (max 2000)", parseIntOpt)
497
+ .option("--skip <n>", "Skip results", parseIntOpt)
498
+ .option("--sort <dir>", "Sort direction (asc|desc)")
499
+ .option("--min-timestamp <n>", "Min timestamp (seconds)", parseIntOpt)
500
+ .option("--max-timestamp <n>", "Max timestamp (seconds)", parseIntOpt)
501
+ .action(async (contractAddress, opts) => {
502
+ const spin = spinner("Fetching transfer stats...");
503
+ spin.start();
504
+ const data = await chainscanClient.getTokenTransferStats(contractAddress, {
505
+ limit: opts.limit,
506
+ skip: opts.skip,
507
+ sort: opts.sort,
508
+ minTimestamp: opts.minTimestamp,
509
+ maxTimestamp: opts.maxTimestamp,
510
+ });
511
+ spin.succeed(`Found ${data.length} data point(s)`);
512
+ if (isHeadless()) {
513
+ writeJsonSuccess({ contractAddress, count: data.length, transferStats: data });
514
+ }
515
+ else {
516
+ if (!data.length) {
517
+ respond({ data: {}, ui: { type: "info", title: "Transfer Stats", body: "No data found" } });
518
+ return;
519
+ }
520
+ printTable([
521
+ { header: "Date", width: 22 },
522
+ { header: "Transfers", width: 12 },
523
+ { header: "Users", width: 12 },
524
+ ], data.map(d => [formatTimestamp(d.statTime), d.transferCount, d.userCount]));
525
+ }
526
+ });
527
+ stats
528
+ .command("participants")
529
+ .description("Unique trading participants over time")
530
+ .argument("<contractAddress>", "Token contract address")
531
+ .option("--limit <n>", "Max results (max 2000)", parseIntOpt)
532
+ .option("--skip <n>", "Skip results", parseIntOpt)
533
+ .option("--sort <dir>", "Sort direction (asc|desc)")
534
+ .option("--min-timestamp <n>", "Min timestamp (seconds)", parseIntOpt)
535
+ .option("--max-timestamp <n>", "Max timestamp (seconds)", parseIntOpt)
536
+ .action(async (contractAddress, opts) => {
537
+ const spin = spinner("Fetching participant stats...");
538
+ spin.start();
539
+ const data = await chainscanClient.getTokenUniqueParticipants(contractAddress, {
540
+ limit: opts.limit,
541
+ skip: opts.skip,
542
+ sort: opts.sort,
543
+ minTimestamp: opts.minTimestamp,
544
+ maxTimestamp: opts.maxTimestamp,
545
+ });
546
+ spin.succeed(`Found ${data.length} data point(s)`);
547
+ if (isHeadless()) {
548
+ writeJsonSuccess({ contractAddress, count: data.length, participantStats: data });
549
+ }
550
+ else {
551
+ if (!data.length) {
552
+ respond({ data: {}, ui: { type: "info", title: "Participant Stats", body: "No data found" } });
553
+ return;
554
+ }
555
+ printTable([{ header: "Date", width: 22 }, { header: "Unique Participants", width: 20 }], data.map(d => [formatTimestamp(d.statTime), d.uniqueParticipant]));
556
+ }
557
+ });
558
+ stats
559
+ .command("top-wallets")
560
+ .description("Top token senders/receivers/participants")
561
+ .option("--type <type>", "Wallet type: senders, receivers, or participants", "participants")
562
+ .option("--span <span>", "Time span: 24h, 3d, or 7d", "24h")
563
+ .action(async (opts) => {
564
+ const validTypes = ["senders", "receivers", "participants"];
565
+ const validSpans = ["24h", "3d", "7d"];
566
+ if (!validTypes.includes(opts.type)) {
567
+ throw new EchoError(ErrorCodes.INVALID_AMOUNT, `Invalid type: ${opts.type}`, "Use: senders, receivers, or participants");
568
+ }
569
+ if (!validSpans.includes(opts.span)) {
570
+ throw new EchoError(ErrorCodes.INVALID_AMOUNT, `Invalid span: ${opts.span}`, "Use: 24h, 3d, or 7d");
571
+ }
572
+ const spanType = opts.span;
573
+ const spin = spinner(`Fetching top ${opts.type}...`);
574
+ spin.start();
575
+ let data;
576
+ switch (opts.type) {
577
+ case "senders":
578
+ data = await chainscanClient.getTopTokenSenders(spanType);
579
+ break;
580
+ case "receivers":
581
+ data = await chainscanClient.getTopTokenReceivers(spanType);
582
+ break;
583
+ default:
584
+ data = await chainscanClient.getTopTokenParticipants(spanType);
585
+ }
586
+ spin.succeed(`Found ${data.length} wallet(s)`);
587
+ if (isHeadless()) {
588
+ writeJsonSuccess({ type: opts.type, span: opts.span, count: data.length, wallets: data });
589
+ }
590
+ else {
591
+ if (!data.length) {
592
+ respond({ data: {}, ui: { type: "info", title: "Top Wallets", body: "No data found" } });
593
+ return;
594
+ }
595
+ printTable([
596
+ { header: "#", width: 5 },
597
+ { header: "Address", width: 46 },
598
+ { header: "Value", width: 18 },
599
+ ], data.map((d, i) => [String(i + 1), d.address, d.value]));
600
+ }
601
+ });
602
+ chainscan.addCommand(stats);
603
+ return chainscan;
604
+ }
605
+ //# sourceMappingURL=chainscan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chainscan.js","sourceRoot":"","sources":["../../src/commands/chainscan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function createConfigCommand(): Command;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBpC,wBAAgB,mBAAmB,IAAI,OAAO,CAuR7C"}