@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,28 @@
1
+ import type { ChainScanTx, ChainScanTokenTransfer, ChainScanNftTransfer, ChainScanBalanceMulti, ChainScanTxStatus, ChainScanTxReceipt, ChainScanContractSource, ChainScanContractCreation, ChainScanDecodedMethod, ChainScanDecodedRaw, ChainScanTokenHolderStat, ChainScanTokenTransferStat, ChainScanUniqueParticipantStat, ChainScanTopAddress, PaginationOpts, StatsPaginationOpts } from "./types.js";
2
+ export declare const chainscanClient: {
3
+ getBalance(address: string, tag?: string): Promise<string>;
4
+ getBalanceMulti(addresses: string[], tag?: string): Promise<ChainScanBalanceMulti[]>;
5
+ getTransactions(address: string, opts?: PaginationOpts): Promise<ChainScanTx[]>;
6
+ getTokenTransfers(address: string, opts?: PaginationOpts & {
7
+ contractaddress?: string;
8
+ }): Promise<ChainScanTokenTransfer[]>;
9
+ getNftTransfers(address: string, opts?: PaginationOpts & {
10
+ contractaddress?: string;
11
+ }): Promise<ChainScanNftTransfer[]>;
12
+ getTokenBalance(address: string, contractAddress: string): Promise<string>;
13
+ getTxStatus(txHash: string): Promise<ChainScanTxStatus>;
14
+ getTxReceiptStatus(txHash: string): Promise<ChainScanTxReceipt>;
15
+ getContractAbi(address: string): Promise<string>;
16
+ getContractSource(address: string): Promise<ChainScanContractSource[]>;
17
+ getContractCreation(addresses: string[]): Promise<ChainScanContractCreation[]>;
18
+ decodeByHashes(hashes: string[]): Promise<ChainScanDecodedMethod[]>;
19
+ decodeRaw(contracts: string[], inputs: string[]): Promise<ChainScanDecodedRaw[]>;
20
+ getTokenSupply(contractAddress: string): Promise<string>;
21
+ getTokenHolderStats(contract: string, opts?: StatsPaginationOpts): Promise<ChainScanTokenHolderStat[]>;
22
+ getTokenTransferStats(contract: string, opts?: StatsPaginationOpts): Promise<ChainScanTokenTransferStat[]>;
23
+ getTokenUniqueParticipants(contract: string, opts?: StatsPaginationOpts): Promise<ChainScanUniqueParticipantStat[]>;
24
+ getTopTokenSenders(spanType?: "24h" | "3d" | "7d"): Promise<ChainScanTopAddress[]>;
25
+ getTopTokenReceivers(spanType?: "24h" | "3d" | "7d"): Promise<ChainScanTopAddress[]>;
26
+ getTopTokenParticipants(spanType?: "24h" | "3d" | "7d"): Promise<ChainScanTopAddress[]>;
27
+ };
28
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/chainscan/client.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,WAAW,EACX,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EACxB,0BAA0B,EAC1B,8BAA8B,EAC9B,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAkLpB,eAAO,MAAM,eAAe;wBAGN,MAAM,QAAQ,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;+BAW/B,MAAM,EAAE,QAAQ,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;6BAW3D,MAAM,SAAS,cAAc,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;+BAepD,MAAM,SAAS,cAAc,GAAG;QAAE,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;6BAmBlG,MAAM,SAAS,cAAc,GAAG;QAAE,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;6BAmB9F,MAAM,mBAAmB,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;wBActD,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;+BAS5B,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;4BAWvC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;+BASrB,MAAM,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC;mCASvC,MAAM,EAAE,GAAG,OAAO,CAAC,yBAAyB,EAAE,CAAC;2BAWvD,MAAM,EAAE,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;yBAQ9C,MAAM,EAAE,UAAU,MAAM,EAAE,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;oCAmBhD,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;kCAWpB,MAAM,SAAS,mBAAmB,GAAG,OAAO,CAAC,wBAAwB,EAAE,CAAC;oCAetE,MAAM,SAAS,mBAAmB,GAAG,OAAO,CAAC,0BAA0B,EAAE,CAAC;yCAerE,MAAM,SAAS,mBAAmB,GAAG,OAAO,CAAC,8BAA8B,EAAE,CAAC;kCAetF,KAAK,GAAG,IAAI,GAAG,IAAI,GAAW,OAAO,CAAC,mBAAmB,EAAE,CAAC;oCAK1D,KAAK,GAAG,IAAI,GAAG,IAAI,GAAW,OAAO,CAAC,mBAAmB,EAAE,CAAC;uCAKzD,KAAK,GAAG,IAAI,GAAG,IAAI,GAAW,OAAO,CAAC,mBAAmB,EAAE,CAAC;CAIrG,CAAC"}
@@ -0,0 +1,361 @@
1
+ import { EchoError, ErrorCodes } from "../errors.js";
2
+ import { loadConfig } from "../config/store.js";
3
+ import logger from "../utils/logger.js";
4
+ import { TokenBucket, ConcurrencyLimiter } from "../utils/rateLimit.js";
5
+ import { CHAINSCAN_DEFAULTS } from "./constants.js";
6
+ import { validateAddress, validateTxHash, validateAddressBatch, validateHashBatch, validatePagination, validateStatsPagination, validateTag, } from "./validation.js";
7
+ // --- Instances ---
8
+ const bucket = new TokenBucket(CHAINSCAN_DEFAULTS.RATE_LIMIT_PER_SEC);
9
+ const limiter = new ConcurrencyLimiter(CHAINSCAN_DEFAULTS.MAX_CONCURRENT);
10
+ // --- Helpers ---
11
+ function getBaseUrl() {
12
+ return loadConfig().services.chainScanBaseUrl;
13
+ }
14
+ function getApiKey() {
15
+ return process.env.CHAINSCAN_API_KEY ?? "";
16
+ }
17
+ async function withRetry(fn, maxRetries = CHAINSCAN_DEFAULTS.MAX_RETRIES) {
18
+ let lastError;
19
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
20
+ try {
21
+ return await fn();
22
+ }
23
+ catch (err) {
24
+ lastError = err instanceof Error ? err : new Error(String(err));
25
+ const msg = lastError.message;
26
+ const isRetryable = msg.includes("429") || /HTTP [5]\d{2}/.test(msg);
27
+ if (!isRetryable || attempt === maxRetries)
28
+ throw lastError;
29
+ const backoff = Math.min(1000 * 2 ** attempt, 8000) + Math.random() * 500;
30
+ logger.warn(`[ChainScan] Retry ${attempt + 1}/${maxRetries} after ${Math.round(backoff)}ms: ${msg}`);
31
+ await new Promise(resolve => setTimeout(resolve, backoff));
32
+ }
33
+ }
34
+ throw lastError;
35
+ }
36
+ // --- Etherscan-style fetch: GET /api?module=...&action=... ---
37
+ async function fetchEtherscanApi(params) {
38
+ await bucket.acquire();
39
+ await limiter.acquire();
40
+ try {
41
+ return await withRetry(async () => {
42
+ const url = new URL(`${getBaseUrl()}${CHAINSCAN_DEFAULTS.API_PATH}`);
43
+ for (const [k, v] of Object.entries(params)) {
44
+ url.searchParams.set(k, v);
45
+ }
46
+ const apiKey = getApiKey();
47
+ if (apiKey)
48
+ url.searchParams.set("apikey", apiKey);
49
+ const controller = new AbortController();
50
+ const timer = setTimeout(() => controller.abort(), CHAINSCAN_DEFAULTS.TIMEOUT_MS);
51
+ try {
52
+ const res = await fetch(url.toString(), { signal: controller.signal });
53
+ if (!res.ok) {
54
+ if (res.status === 429) {
55
+ throw new EchoError(ErrorCodes.CHAINSCAN_RATE_LIMITED, `ChainScan HTTP 429`);
56
+ }
57
+ throw new EchoError(ErrorCodes.CHAINSCAN_API_ERROR, `ChainScan HTTP ${res.status}`);
58
+ }
59
+ const json = (await res.json());
60
+ if (json.status !== "1" && json.message !== "OK") {
61
+ if (json.message === "No transactions found" || json.result === null || json.message === "No records found") {
62
+ return [];
63
+ }
64
+ throw new EchoError(ErrorCodes.CHAINSCAN_API_ERROR, json.message || "ChainScan API error", "Check the request parameters");
65
+ }
66
+ return json.result;
67
+ }
68
+ catch (err) {
69
+ if (err instanceof EchoError)
70
+ throw err;
71
+ if (err instanceof Error && err.name === "AbortError") {
72
+ throw new EchoError(ErrorCodes.CHAINSCAN_TIMEOUT, `ChainScan request timed out after ${CHAINSCAN_DEFAULTS.TIMEOUT_MS}ms`, "Try again or check network connectivity");
73
+ }
74
+ throw new EchoError(ErrorCodes.CHAINSCAN_API_ERROR, err instanceof Error ? err.message : "ChainScan request failed");
75
+ }
76
+ finally {
77
+ clearTimeout(timer);
78
+ }
79
+ });
80
+ }
81
+ finally {
82
+ limiter.release();
83
+ }
84
+ }
85
+ // --- Custom endpoints fetch: GET /util/decode/..., /nft/..., /statistics/... ---
86
+ async function fetchCustomApi(path, params = {}) {
87
+ await bucket.acquire();
88
+ await limiter.acquire();
89
+ try {
90
+ return await withRetry(async () => {
91
+ const url = new URL(`${getBaseUrl()}${path}`);
92
+ for (const [k, v] of Object.entries(params)) {
93
+ url.searchParams.set(k, v);
94
+ }
95
+ const apiKey = getApiKey();
96
+ if (apiKey)
97
+ url.searchParams.set("apikey", apiKey);
98
+ const controller = new AbortController();
99
+ const timer = setTimeout(() => controller.abort(), CHAINSCAN_DEFAULTS.TIMEOUT_MS);
100
+ try {
101
+ const res = await fetch(url.toString(), { signal: controller.signal });
102
+ if (!res.ok) {
103
+ if (res.status === 429) {
104
+ throw new EchoError(ErrorCodes.CHAINSCAN_RATE_LIMITED, `ChainScan HTTP 429`);
105
+ }
106
+ throw new EchoError(ErrorCodes.CHAINSCAN_API_ERROR, `ChainScan HTTP ${res.status}`);
107
+ }
108
+ const json = await res.json();
109
+ // Defensively handle both response formats
110
+ // Etherscan-style: { status: "1", message: "OK", result: T }
111
+ if (typeof json.status === "string" && json.status === "1") {
112
+ return json.result;
113
+ }
114
+ // Custom-style: { status: 0, message: "success", result: T }
115
+ if (typeof json.status === "number" && json.status === 0) {
116
+ return json.result;
117
+ }
118
+ // NFT/data-style: { code: 0, message: "...", data: T }
119
+ if (typeof json.code === "number" && json.code === 0 && json.data !== undefined) {
120
+ return json.data;
121
+ }
122
+ // Fallback: if result is present, return it
123
+ if (json.result !== undefined && json.result !== null) {
124
+ return json.result;
125
+ }
126
+ // Array response (some endpoints return raw arrays)
127
+ if (Array.isArray(json)) {
128
+ return json;
129
+ }
130
+ throw new EchoError(ErrorCodes.CHAINSCAN_INVALID_RESPONSE, `Unexpected ChainScan response format`, `status=${String(json.status)}, message=${String(json.message)}`);
131
+ }
132
+ catch (err) {
133
+ if (err instanceof EchoError)
134
+ throw err;
135
+ if (err instanceof Error && err.name === "AbortError") {
136
+ throw new EchoError(ErrorCodes.CHAINSCAN_TIMEOUT, `ChainScan request timed out after ${CHAINSCAN_DEFAULTS.TIMEOUT_MS}ms`, "Try again or check network connectivity");
137
+ }
138
+ throw new EchoError(ErrorCodes.CHAINSCAN_API_ERROR, err instanceof Error ? err.message : "ChainScan request failed");
139
+ }
140
+ finally {
141
+ clearTimeout(timer);
142
+ }
143
+ });
144
+ }
145
+ finally {
146
+ limiter.release();
147
+ }
148
+ }
149
+ // --- Public API ---
150
+ export const chainscanClient = {
151
+ // === Account ===
152
+ getBalance(address, tag) {
153
+ const addr = validateAddress(address);
154
+ const validTag = validateTag(tag);
155
+ return fetchEtherscanApi({
156
+ module: "account",
157
+ action: "balance",
158
+ address: addr.toLowerCase(),
159
+ tag: validTag,
160
+ });
161
+ },
162
+ getBalanceMulti(addresses, tag) {
163
+ const validated = validateAddressBatch(addresses, CHAINSCAN_DEFAULTS.MAX_BATCH_BALANCE);
164
+ const validTag = validateTag(tag);
165
+ return fetchEtherscanApi({
166
+ module: "account",
167
+ action: "balancemulti",
168
+ address: validated.map(a => a.toLowerCase()).join(","),
169
+ tag: validTag,
170
+ });
171
+ },
172
+ getTransactions(address, opts) {
173
+ const addr = validateAddress(address);
174
+ const pag = validatePagination(opts);
175
+ return fetchEtherscanApi({
176
+ module: "account",
177
+ action: "txlist",
178
+ address: addr.toLowerCase(),
179
+ startblock: pag.startblock ?? "0",
180
+ endblock: pag.endblock ?? "99999999",
181
+ page: String(pag.page),
182
+ offset: String(pag.offset),
183
+ sort: pag.sort,
184
+ });
185
+ },
186
+ getTokenTransfers(address, opts) {
187
+ const addr = validateAddress(address);
188
+ const pag = validatePagination(opts);
189
+ const params = {
190
+ module: "account",
191
+ action: "tokentx",
192
+ address: addr.toLowerCase(),
193
+ startblock: pag.startblock ?? "0",
194
+ endblock: pag.endblock ?? "99999999",
195
+ page: String(pag.page),
196
+ offset: String(pag.offset),
197
+ sort: pag.sort,
198
+ };
199
+ if (opts?.contractaddress) {
200
+ params.contractaddress = validateAddress(opts.contractaddress, "contractaddress").toLowerCase();
201
+ }
202
+ return fetchEtherscanApi(params);
203
+ },
204
+ getNftTransfers(address, opts) {
205
+ const addr = validateAddress(address);
206
+ const pag = validatePagination(opts);
207
+ const params = {
208
+ module: "account",
209
+ action: "tokennfttx",
210
+ address: addr.toLowerCase(),
211
+ startblock: pag.startblock ?? "0",
212
+ endblock: pag.endblock ?? "99999999",
213
+ page: String(pag.page),
214
+ offset: String(pag.offset),
215
+ sort: pag.sort,
216
+ };
217
+ if (opts?.contractaddress) {
218
+ params.contractaddress = validateAddress(opts.contractaddress, "contractaddress").toLowerCase();
219
+ }
220
+ return fetchEtherscanApi(params);
221
+ },
222
+ getTokenBalance(address, contractAddress) {
223
+ const addr = validateAddress(address);
224
+ const contract = validateAddress(contractAddress, "contractAddress");
225
+ return fetchEtherscanApi({
226
+ module: "account",
227
+ action: "tokenbalance",
228
+ address: addr.toLowerCase(),
229
+ contractaddress: contract.toLowerCase(),
230
+ tag: "latest",
231
+ });
232
+ },
233
+ // === Transaction verification ===
234
+ getTxStatus(txHash) {
235
+ const hash = validateTxHash(txHash);
236
+ return fetchEtherscanApi({
237
+ module: "transaction",
238
+ action: "getstatus",
239
+ txhash: hash,
240
+ });
241
+ },
242
+ getTxReceiptStatus(txHash) {
243
+ const hash = validateTxHash(txHash);
244
+ return fetchEtherscanApi({
245
+ module: "transaction",
246
+ action: "gettxreceiptstatus",
247
+ txhash: hash,
248
+ });
249
+ },
250
+ // === Contract intel ===
251
+ getContractAbi(address) {
252
+ const addr = validateAddress(address);
253
+ return fetchEtherscanApi({
254
+ module: "contract",
255
+ action: "getabi",
256
+ address: addr.toLowerCase(),
257
+ });
258
+ },
259
+ getContractSource(address) {
260
+ const addr = validateAddress(address);
261
+ return fetchEtherscanApi({
262
+ module: "contract",
263
+ action: "getsourcecode",
264
+ address: addr.toLowerCase(),
265
+ });
266
+ },
267
+ getContractCreation(addresses) {
268
+ const validated = validateAddressBatch(addresses, CHAINSCAN_DEFAULTS.MAX_BATCH_ADDRESSES);
269
+ return fetchEtherscanApi({
270
+ module: "contract",
271
+ action: "getcontractcreation",
272
+ contractaddresses: validated.map(a => a.toLowerCase()).join(","),
273
+ });
274
+ },
275
+ // === Decode ===
276
+ decodeByHashes(hashes) {
277
+ const validated = validateHashBatch(hashes, CHAINSCAN_DEFAULTS.MAX_BATCH_DECODE);
278
+ return fetchCustomApi("/util/decode/method", { hashes: validated.join(",") });
279
+ },
280
+ decodeRaw(contracts, inputs) {
281
+ if (contracts.length !== inputs.length) {
282
+ throw new EchoError(ErrorCodes.INVALID_AMOUNT, `contracts (${contracts.length}) and inputs (${inputs.length}) must have same length`);
283
+ }
284
+ const validatedContracts = validateAddressBatch(contracts, CHAINSCAN_DEFAULTS.MAX_BATCH_DECODE);
285
+ return fetchCustomApi("/util/decode/method/raw", {
286
+ contracts: validatedContracts.map(a => a.toLowerCase()).join(","),
287
+ inputs: inputs.join(","),
288
+ });
289
+ },
290
+ // === Token supply ===
291
+ getTokenSupply(contractAddress) {
292
+ const addr = validateAddress(contractAddress, "contractAddress");
293
+ return fetchEtherscanApi({
294
+ module: "stats",
295
+ action: "tokensupply",
296
+ contractaddress: addr.toLowerCase(),
297
+ });
298
+ },
299
+ // === Meme coin intel (statistics endpoints) ===
300
+ async getTokenHolderStats(contract, opts) {
301
+ const addr = validateAddress(contract, "contract");
302
+ const pag = validateStatsPagination(opts);
303
+ const params = {
304
+ contract: addr.toLowerCase(),
305
+ skip: String(pag.skip),
306
+ limit: String(pag.limit),
307
+ sort: pag.sort.toUpperCase(),
308
+ };
309
+ if (pag.minTimestamp)
310
+ params.minTimestamp = pag.minTimestamp;
311
+ if (pag.maxTimestamp)
312
+ params.maxTimestamp = pag.maxTimestamp;
313
+ const res = await fetchCustomApi("/statistics/token/holder", params);
314
+ return res.list;
315
+ },
316
+ async getTokenTransferStats(contract, opts) {
317
+ const addr = validateAddress(contract, "contract");
318
+ const pag = validateStatsPagination(opts);
319
+ const params = {
320
+ contract: addr.toLowerCase(),
321
+ skip: String(pag.skip),
322
+ limit: String(pag.limit),
323
+ sort: pag.sort.toUpperCase(),
324
+ };
325
+ if (pag.minTimestamp)
326
+ params.minTimestamp = pag.minTimestamp;
327
+ if (pag.maxTimestamp)
328
+ params.maxTimestamp = pag.maxTimestamp;
329
+ const res = await fetchCustomApi("/statistics/token/transfer", params);
330
+ return res.list;
331
+ },
332
+ async getTokenUniqueParticipants(contract, opts) {
333
+ const addr = validateAddress(contract, "contract");
334
+ const pag = validateStatsPagination(opts);
335
+ const params = {
336
+ contract: addr.toLowerCase(),
337
+ skip: String(pag.skip),
338
+ limit: String(pag.limit),
339
+ sort: pag.sort.toUpperCase(),
340
+ };
341
+ if (pag.minTimestamp)
342
+ params.minTimestamp = pag.minTimestamp;
343
+ if (pag.maxTimestamp)
344
+ params.maxTimestamp = pag.maxTimestamp;
345
+ const res = await fetchCustomApi("/statistics/token/unique/participant", params);
346
+ return res.list;
347
+ },
348
+ async getTopTokenSenders(spanType = "24h") {
349
+ const res = await fetchCustomApi("/statistics/top/token/sender", { spanType });
350
+ return res.list;
351
+ },
352
+ async getTopTokenReceivers(spanType = "24h") {
353
+ const res = await fetchCustomApi("/statistics/top/token/receiver", { spanType });
354
+ return res.list;
355
+ },
356
+ async getTopTokenParticipants(spanType = "24h") {
357
+ const res = await fetchCustomApi("/statistics/top/token/participant", { spanType });
358
+ return res.list;
359
+ },
360
+ };
361
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/chainscan/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export declare const CHAINSCAN_DEFAULTS: {
2
+ readonly BASE_URL: "https://chainscan.0g.ai/open";
3
+ readonly API_PATH: "/api";
4
+ readonly TIMEOUT_MS: 10000;
5
+ readonly RATE_LIMIT_PER_SEC: 4;
6
+ readonly MAX_CONCURRENT: 3;
7
+ readonly MAX_RETRIES: 2;
8
+ readonly MAX_BATCH_DECODE: 10;
9
+ readonly MAX_BATCH_ADDRESSES: 5;
10
+ readonly MAX_BATCH_BALANCE: 20;
11
+ readonly MAX_PAGE_OFFSET: 100;
12
+ readonly MAX_SKIP: 10000;
13
+ readonly MAX_STATS_LIMIT: 2000;
14
+ };
15
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/chainscan/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;CAarB,CAAC"}
@@ -0,0 +1,15 @@
1
+ export const CHAINSCAN_DEFAULTS = {
2
+ BASE_URL: "https://chainscan.0g.ai/open",
3
+ API_PATH: "/api",
4
+ TIMEOUT_MS: 10_000,
5
+ RATE_LIMIT_PER_SEC: 4,
6
+ MAX_CONCURRENT: 3,
7
+ MAX_RETRIES: 2,
8
+ MAX_BATCH_DECODE: 10,
9
+ MAX_BATCH_ADDRESSES: 5,
10
+ MAX_BATCH_BALANCE: 20,
11
+ MAX_PAGE_OFFSET: 100,
12
+ MAX_SKIP: 10_000,
13
+ MAX_STATS_LIMIT: 2000,
14
+ };
15
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/chainscan/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,QAAQ,EAAE,8BAA8B;IACxC,QAAQ,EAAE,MAAM;IAChB,UAAU,EAAE,MAAM;IAClB,kBAAkB,EAAE,CAAC;IACrB,cAAc,EAAE,CAAC;IACjB,WAAW,EAAE,CAAC;IACd,gBAAgB,EAAE,EAAE;IACpB,mBAAmB,EAAE,CAAC;IACtB,iBAAiB,EAAE,EAAE;IACrB,eAAe,EAAE,GAAG;IACpB,QAAQ,EAAE,MAAM;IAChB,eAAe,EAAE,IAAI;CACb,CAAC"}
@@ -0,0 +1,148 @@
1
+ export interface EtherscanResponse<T> {
2
+ status: string;
3
+ message: string;
4
+ result: T;
5
+ }
6
+ export interface CustomResponse<T> {
7
+ status: number;
8
+ message: string;
9
+ result: T;
10
+ }
11
+ export interface ChainScanTx {
12
+ blockNumber: string;
13
+ timeStamp: string;
14
+ hash: string;
15
+ nonce: string;
16
+ blockHash: string;
17
+ transactionIndex: string;
18
+ from: string;
19
+ to: string;
20
+ value: string;
21
+ gas: string;
22
+ gasPrice: string;
23
+ isError: string;
24
+ txreceipt_status: string;
25
+ input: string;
26
+ contractAddress: string;
27
+ cumulativeGasUsed: string;
28
+ gasUsed: string;
29
+ confirmations: string;
30
+ }
31
+ export interface ChainScanTokenTransfer {
32
+ blockNumber: string;
33
+ timeStamp: string;
34
+ hash: string;
35
+ nonce: string;
36
+ blockHash: string;
37
+ from: string;
38
+ to: string;
39
+ contractAddress: string;
40
+ value: string;
41
+ tokenName: string;
42
+ tokenSymbol: string;
43
+ tokenDecimal: string;
44
+ transactionIndex: string;
45
+ gas: string;
46
+ gasPrice: string;
47
+ gasUsed: string;
48
+ cumulativeGasUsed: string;
49
+ confirmations: string;
50
+ }
51
+ export interface ChainScanNftTransfer {
52
+ blockNumber: string;
53
+ timeStamp: string;
54
+ hash: string;
55
+ nonce: string;
56
+ blockHash: string;
57
+ from: string;
58
+ to: string;
59
+ contractAddress: string;
60
+ tokenID: string;
61
+ tokenName: string;
62
+ tokenSymbol: string;
63
+ tokenDecimal: string;
64
+ transactionIndex: string;
65
+ gas: string;
66
+ gasPrice: string;
67
+ gasUsed: string;
68
+ cumulativeGasUsed: string;
69
+ confirmations: string;
70
+ }
71
+ export interface ChainScanBalanceMulti {
72
+ account: string;
73
+ balance: string;
74
+ }
75
+ export interface ChainScanTxStatus {
76
+ isError: string;
77
+ errDescription: string;
78
+ }
79
+ export interface ChainScanTxReceipt {
80
+ status: string;
81
+ }
82
+ export interface ChainScanContractSource {
83
+ SourceCode: string;
84
+ ABI: string;
85
+ ContractName: string;
86
+ CompilerVersion: string;
87
+ OptimizationUsed: string;
88
+ Runs: string;
89
+ ConstructorArguments: string;
90
+ EVMVersion: string;
91
+ Library: string;
92
+ LicenseType: string;
93
+ Proxy: string;
94
+ Implementation: string;
95
+ SwarmSource: string;
96
+ }
97
+ export interface ChainScanContractCreation {
98
+ contractAddress: string;
99
+ contractCreator: string;
100
+ txHash: string;
101
+ blockNumber: string;
102
+ timestamp: string;
103
+ }
104
+ export interface ChainScanDecodedMethod {
105
+ hash: string;
106
+ abi: string;
107
+ decodedData: string;
108
+ error: string;
109
+ }
110
+ export interface ChainScanDecodedRaw {
111
+ contract: string;
112
+ input: string;
113
+ abi: string;
114
+ decodedData: string;
115
+ error: string;
116
+ }
117
+ export interface ChainScanTokenHolderStat {
118
+ statTime: string;
119
+ holderCount: string;
120
+ }
121
+ export interface ChainScanTokenTransferStat {
122
+ transferCount: string;
123
+ userCount: string;
124
+ statTime: string;
125
+ }
126
+ export interface ChainScanUniqueParticipantStat {
127
+ statTime: string;
128
+ uniqueParticipant: string;
129
+ }
130
+ export interface ChainScanTopAddress {
131
+ address: string;
132
+ value: string;
133
+ }
134
+ export interface PaginationOpts {
135
+ page?: number;
136
+ offset?: number;
137
+ sort?: "asc" | "desc";
138
+ startblock?: number;
139
+ endblock?: number;
140
+ }
141
+ export interface StatsPaginationOpts {
142
+ skip?: number;
143
+ limit?: number;
144
+ sort?: "asc" | "desc";
145
+ minTimestamp?: number;
146
+ maxTimestamp?: number;
147
+ }
148
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/chainscan/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/chainscan/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ import { type Address } from "viem";
2
+ export declare function validateAddress(input: string, label?: string): Address;
3
+ export declare function validateTxHash(input: string): string;
4
+ export declare function validateAddressBatch(input: string[], maxSize: number): Address[];
5
+ export declare function validateHashBatch(input: string[], maxSize: number): string[];
6
+ export interface ValidatedPagination {
7
+ page: number;
8
+ offset: number;
9
+ sort: "asc" | "desc";
10
+ startblock?: string;
11
+ endblock?: string;
12
+ }
13
+ export declare function validatePagination(opts?: {
14
+ page?: number;
15
+ offset?: number;
16
+ sort?: string;
17
+ startblock?: number;
18
+ endblock?: number;
19
+ }): ValidatedPagination;
20
+ export interface ValidatedStatsPagination {
21
+ skip: number;
22
+ limit: number;
23
+ sort: "asc" | "desc";
24
+ minTimestamp?: string;
25
+ maxTimestamp?: string;
26
+ }
27
+ export declare function validateStatsPagination(opts?: {
28
+ skip?: number;
29
+ limit?: number;
30
+ sort?: string;
31
+ minTimestamp?: number;
32
+ maxTimestamp?: number;
33
+ }): ValidatedStatsPagination;
34
+ export declare function validateTag(tag?: string): string;
35
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/chainscan/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,OAAO,EAAE,MAAM,MAAM,CAAC;AAe3D,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAY,GAAG,OAAO,CAgBzE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAgBpD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,CAehF;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAe5E;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,kBAAkB,CAAC,IAAI,CAAC,EAAE;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,mBAAmB,CAiCtB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,uBAAuB,CAAC,IAAI,CAAC,EAAE;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,wBAAwB,CAiC3B;AAED,wBAAgB,WAAW,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAUhD"}