@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 @@
1
+ {"version":3,"file":"smoke-test.js","sourceRoot":"","sources":["../../src/0g-compute/smoke-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * BotDaemon — Core daemon logic for real-time trading bot.
3
+ *
4
+ * Foreground process (user runs in tmux/screen):
5
+ * - Connects to slop-backend WS via TokenStream
6
+ * - Evaluates triggers on token_update events
7
+ * - Executes trades via executor (NonceQueue serialization)
8
+ * - Graceful shutdown: SIGINT/SIGTERM + file-based fallback (Windows)
9
+ */
10
+ import { type Address, type Hex } from "viem";
11
+ import type { BotGuardrails } from "./types.js";
12
+ export declare class BotDaemon {
13
+ private readonly privateKey;
14
+ private readonly walletAddress;
15
+ private readonly guardrails;
16
+ private readonly stream;
17
+ private readonly nonceQueue;
18
+ private shuttingDown;
19
+ private shutdownWatcher;
20
+ private lastGlobalTxTimestamp;
21
+ private executingOrders;
22
+ private orderLastFiredAt;
23
+ constructor(privateKey: Hex, walletAddress: Address, guardrails?: Partial<BotGuardrails>);
24
+ start(): Promise<void>;
25
+ private onTokenSnapshot;
26
+ private onTokenUpdate;
27
+ private checkGuardrails;
28
+ private executeTrade;
29
+ private resolveSize;
30
+ private notify;
31
+ private checkAndWritePid;
32
+ stop(): Promise<void>;
33
+ }
34
+ //# sourceMappingURL=daemon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/bot/daemon.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,GAAG,EAA2B,MAAM,MAAM,CAAC;AA2BvE,OAAO,KAAK,EAEV,aAAa,EAMd,MAAM,YAAY,CAAC;AAIpB,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAM;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAU;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,eAAe,CAA+C;IACtE,OAAO,CAAC,qBAAqB,CAAK;IAElC,OAAO,CAAC,eAAe,CAAqB;IAE5C,OAAO,CAAC,gBAAgB,CAA6B;gBAGnD,UAAU,EAAE,GAAG,EACf,aAAa,EAAE,OAAO,EACtB,UAAU,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC;IAU/B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA+D5B,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,aAAa;IA0ErB,OAAO,CAAC,eAAe;YAiDT,YAAY;YAuEZ,WAAW;IAqCzB,OAAO,CAAC,MAAM;IAWd,OAAO,CAAC,gBAAgB;IA0BlB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAkC5B"}
@@ -0,0 +1,386 @@
1
+ /**
2
+ * BotDaemon — Core daemon logic for real-time trading bot.
3
+ *
4
+ * Foreground process (user runs in tmux/screen):
5
+ * - Connects to slop-backend WS via TokenStream
6
+ * - Evaluates triggers on token_update events
7
+ * - Executes trades via executor (NonceQueue serialization)
8
+ * - Graceful shutdown: SIGINT/SIGTERM + file-based fallback (Windows)
9
+ */
10
+ import { existsSync, readFileSync, writeFileSync, unlinkSync } from "node:fs";
11
+ import { parseUnits, formatUnits } from "viem";
12
+ import { TokenStream } from "./stream.js";
13
+ import { NonceQueue } from "./nonce-queue.js";
14
+ import { evaluateTrigger } from "./triggers.js";
15
+ import { loadOrders, getArmedOrdersForToken, markFilled, markFailed, setLastProcessedTxHash, } from "./orders.js";
16
+ import { executeBuy, executeSell, getTokenBalance, getOgBalance, } from "./executor.js";
17
+ import { logExecution, recordSpend, recordTx, getDailySpend, getHourlyTxCount } from "./state.js";
18
+ import { loadConfig } from "../config/store.js";
19
+ import { BOT_PID_FILE, BOT_SHUTDOWN_FILE, BOT_DIR } from "../config/paths.js";
20
+ import { EchoError, ErrorCodes } from "../errors.js";
21
+ import logger from "../utils/logger.js";
22
+ import { writeStdout } from "../utils/output.js";
23
+ import { postChatNotification } from "./notify.js";
24
+ import { postWebhookNotification } from "../openclaw/hooks-client.js";
25
+ import { DEFAULT_GUARDRAILS } from "./types.js";
26
+ import { mkdirSync } from "node:fs";
27
+ export class BotDaemon {
28
+ privateKey;
29
+ walletAddress;
30
+ guardrails;
31
+ stream;
32
+ nonceQueue = new NonceQueue();
33
+ shuttingDown = false;
34
+ shutdownWatcher = null;
35
+ lastGlobalTxTimestamp = 0;
36
+ // In-memory lock: orders currently executing (prevents double-fire)
37
+ executingOrders = new Set();
38
+ // Per-order cooldown tracking (order.id → last fired timestamp)
39
+ orderLastFiredAt = new Map();
40
+ constructor(privateKey, walletAddress, guardrails) {
41
+ this.privateKey = privateKey;
42
+ this.walletAddress = walletAddress;
43
+ this.guardrails = { ...DEFAULT_GUARDRAILS, ...guardrails };
44
+ const cfg = loadConfig();
45
+ this.stream = new TokenStream({ url: cfg.services.slopWsUrl });
46
+ }
47
+ async start() {
48
+ // 1. Check pidfile (stale detection)
49
+ this.checkAndWritePid();
50
+ // 2. Clean up stale shutdown file from previous crash
51
+ try {
52
+ if (existsSync(BOT_SHUTDOWN_FILE)) {
53
+ unlinkSync(BOT_SHUTDOWN_FILE);
54
+ logger.debug("[Daemon] Cleaned up stale shutdown file");
55
+ }
56
+ }
57
+ catch (err) {
58
+ logger.warn(`[Daemon] Could not remove stale shutdown file: ${err}`);
59
+ }
60
+ // 3. Load armed orders → group by token
61
+ const orders = loadOrders();
62
+ const armedOrders = orders.orders.filter((o) => o.state === "armed");
63
+ const tokenSet = new Set(armedOrders.map((o) => o.token.toLowerCase()));
64
+ logger.info(`[Daemon] Starting with ${armedOrders.length} armed orders across ${tokenSet.size} tokens`);
65
+ logger.info(`[Daemon] Wallet: ${this.walletAddress}`);
66
+ // 4. Wire up stream events
67
+ this.stream.on("snapshot", (payload) => this.onTokenSnapshot(payload));
68
+ this.stream.on("update", (payload) => this.onTokenUpdate(payload));
69
+ this.stream.on("connected", () => {
70
+ logger.info("[Daemon] WS connected");
71
+ });
72
+ this.stream.on("disconnected", (reason) => {
73
+ logger.warn(`[Daemon] WS disconnected: ${reason}`);
74
+ });
75
+ this.stream.on("error", (err) => {
76
+ logger.error(`[Daemon] WS error: ${err.message}`);
77
+ });
78
+ // 5. Connect and subscribe
79
+ this.stream.connect();
80
+ for (const token of tokenSet) {
81
+ this.stream.subscribe(token);
82
+ }
83
+ // 6. Register signal handlers
84
+ const onSignal = () => this.stop();
85
+ process.on("SIGINT", onSignal);
86
+ process.on("SIGTERM", onSignal);
87
+ // 7. Start shutdown-file watcher (Windows fallback)
88
+ this.shutdownWatcher = setInterval(() => {
89
+ if (existsSync(BOT_SHUTDOWN_FILE)) {
90
+ logger.info("[Daemon] Shutdown file detected, stopping...");
91
+ this.stop();
92
+ }
93
+ }, 1000);
94
+ // 8. Emit started notification
95
+ this.notify({
96
+ type: "BOT_STARTED",
97
+ timestamp: Date.now(),
98
+ });
99
+ logger.info("[Daemon] Bot daemon running (press Ctrl+C to stop)");
100
+ }
101
+ onTokenSnapshot(payload) {
102
+ const addr = payload.data.address?.toLowerCase();
103
+ if (!addr)
104
+ return;
105
+ // Seed: set lastProcessedTxHash for all armed orders on this token
106
+ // This prevents false triggers after daemon restart
107
+ const lastTrade = payload.data.last_trade;
108
+ if (!lastTrade?.tx_hash)
109
+ return;
110
+ const armedOrders = getArmedOrdersForToken(addr);
111
+ for (const order of armedOrders) {
112
+ if (!order.lastProcessedTxHash) {
113
+ setLastProcessedTxHash(order.id, lastTrade.tx_hash);
114
+ logger.debug(`[Daemon] Seeded order ${order.id.slice(0, 8)} with tx ${lastTrade.tx_hash.slice(0, 10)}..`);
115
+ }
116
+ }
117
+ }
118
+ onTokenUpdate(update) {
119
+ if (this.shuttingDown)
120
+ return;
121
+ const addr = update.address?.toLowerCase();
122
+ if (!addr)
123
+ return;
124
+ const armedOrders = getArmedOrdersForToken(addr);
125
+ if (armedOrders.length === 0)
126
+ return;
127
+ for (const order of armedOrders) {
128
+ // Skip if already executing
129
+ if (this.executingOrders.has(order.id))
130
+ continue;
131
+ const result = evaluateTrigger(order.trigger, update, order);
132
+ if (!result.fired)
133
+ continue;
134
+ // Per-order cooldown
135
+ const now = Date.now();
136
+ const lastFired = this.orderLastFiredAt.get(order.id) ?? 0;
137
+ if (now - lastFired < order.cooldownMs) {
138
+ logger.debug(`[Daemon] Per-order cooldown not elapsed for ${order.id.slice(0, 8)}`);
139
+ continue;
140
+ }
141
+ logger.info(`[Daemon] Trigger fired for order ${order.id.slice(0, 8)}: ${result.reason}`);
142
+ // Update lastProcessedTxHash immediately (anti-duplicate)
143
+ if (update.lastTrade?.tx_hash) {
144
+ setLastProcessedTxHash(order.id, update.lastTrade.tx_hash);
145
+ }
146
+ // Check guardrails
147
+ if (!this.checkGuardrails(order))
148
+ continue;
149
+ // Mark as executing (in-memory) + record per-order cooldown
150
+ this.executingOrders.add(order.id);
151
+ this.orderLastFiredAt.set(order.id, Date.now());
152
+ // Enqueue trade
153
+ this.nonceQueue.enqueue(async () => {
154
+ try {
155
+ await this.executeTrade(order, update);
156
+ }
157
+ catch (err) {
158
+ const reason = err instanceof Error ? err.message : String(err);
159
+ logger.error(`[Daemon] Trade failed for order ${order.id.slice(0, 8)}: ${reason}`);
160
+ markFailed(order.id, reason);
161
+ const event = {
162
+ orderId: order.id,
163
+ token: order.token,
164
+ side: order.side,
165
+ triggerType: order.trigger.type,
166
+ status: "failed",
167
+ failReason: reason,
168
+ timestamp: Date.now(),
169
+ };
170
+ logExecution(event);
171
+ this.notify({
172
+ type: "TRADE_FAILED",
173
+ orderId: order.id,
174
+ token: order.token,
175
+ side: order.side,
176
+ failReason: reason,
177
+ trigger: order.trigger,
178
+ timestamp: Date.now(),
179
+ });
180
+ }
181
+ finally {
182
+ this.executingOrders.delete(order.id);
183
+ }
184
+ });
185
+ }
186
+ }
187
+ checkGuardrails(order) {
188
+ // Global cooldown
189
+ const now = Date.now();
190
+ if (now - this.lastGlobalTxTimestamp < this.guardrails.cooldownMs) {
191
+ logger.debug(`[Daemon] Global cooldown not elapsed for order ${order.id.slice(0, 8)}`);
192
+ return false;
193
+ }
194
+ // Per-order cooldown (if order has its own cooldown)
195
+ // Already handled by lastProcessedTxHash + trigger logic for onNewBuy/Sell
196
+ // For price triggers, cooldown is global only
197
+ // Max tx per hour
198
+ const hourlyCount = getHourlyTxCount();
199
+ if (hourlyCount >= this.guardrails.maxTxPerHour) {
200
+ logger.warn(`[Daemon] Hourly tx limit reached (${hourlyCount}/${this.guardrails.maxTxPerHour})`);
201
+ this.notify({
202
+ type: "GUARDRAIL_EXCEEDED",
203
+ orderId: order.id,
204
+ failReason: `Hourly tx limit: ${hourlyCount}/${this.guardrails.maxTxPerHour}`,
205
+ timestamp: Date.now(),
206
+ });
207
+ return false;
208
+ }
209
+ // Max daily spend (buy only)
210
+ if (order.side === "buy" && Number.isFinite(this.guardrails.maxOgSpendPerDay)) {
211
+ const dailySpend = getDailySpend();
212
+ if (dailySpend >= this.guardrails.maxOgSpendPerDay) {
213
+ logger.warn(`[Daemon] Daily spend limit reached (${dailySpend}/${this.guardrails.maxOgSpendPerDay})`);
214
+ this.notify({
215
+ type: "GUARDRAIL_EXCEEDED",
216
+ orderId: order.id,
217
+ failReason: `Daily spend limit: ${dailySpend}/${this.guardrails.maxOgSpendPerDay}`,
218
+ timestamp: Date.now(),
219
+ });
220
+ return false;
221
+ }
222
+ }
223
+ // Slippage guardrail
224
+ if (order.slippageBps > this.guardrails.maxSlippageBps) {
225
+ logger.warn(`[Daemon] Order ${order.id.slice(0, 8)} slippage ${order.slippageBps}bps exceeds max ${this.guardrails.maxSlippageBps}bps`);
226
+ return false;
227
+ }
228
+ return true;
229
+ }
230
+ async executeTrade(order, update) {
231
+ const cfg = loadConfig();
232
+ // Resolve size
233
+ const amountWei = await this.resolveSize(order);
234
+ if (amountWei <= 0n) {
235
+ logger.warn(`[Daemon] Resolved amount is 0 for order ${order.id.slice(0, 8)}, skipping`);
236
+ return;
237
+ }
238
+ this.lastGlobalTxTimestamp = Date.now();
239
+ recordTx();
240
+ let result;
241
+ if (order.side === "buy") {
242
+ result = await executeBuy({
243
+ token: order.token,
244
+ amountOgWei: amountWei,
245
+ slippageBps: order.slippageBps,
246
+ privateKey: this.privateKey,
247
+ });
248
+ // Track daily spend
249
+ const ogSpent = parseFloat(formatUnits(amountWei, 18));
250
+ recordSpend(ogSpent);
251
+ }
252
+ else {
253
+ result = await executeSell({
254
+ token: order.token,
255
+ amountTokenWei: amountWei,
256
+ slippageBps: order.slippageBps,
257
+ privateKey: this.privateKey,
258
+ });
259
+ }
260
+ // Mark filled
261
+ markFilled(order.id, result.txHash);
262
+ // Log execution
263
+ const event = {
264
+ orderId: order.id,
265
+ token: order.token,
266
+ side: order.side,
267
+ triggerType: order.trigger.type,
268
+ txHash: result.txHash,
269
+ explorerUrl: result.explorerUrl,
270
+ amountOg: order.side === "buy" ? formatUnits(amountWei, 18) : undefined,
271
+ amountTokens: order.side === "sell" ? formatUnits(amountWei, 18) : undefined,
272
+ status: "filled",
273
+ timestamp: Date.now(),
274
+ };
275
+ logExecution(event);
276
+ // Notify
277
+ this.notify({
278
+ type: order.side === "buy" ? "BUY_FILLED" : "SELL_FILLED",
279
+ orderId: order.id,
280
+ token: order.token,
281
+ tokenSymbol: update.symbol,
282
+ side: order.side,
283
+ amountOg: order.side === "buy" ? formatUnits(amountWei, 18) : undefined,
284
+ amountTokens: order.side === "sell" ? formatUnits(amountWei, 18) : undefined,
285
+ txHash: result.txHash,
286
+ explorerUrl: result.explorerUrl,
287
+ trigger: order.trigger,
288
+ timestamp: Date.now(),
289
+ });
290
+ logger.info(`[Daemon] Order ${order.id.slice(0, 8)} filled: ${result.txHash}`);
291
+ }
292
+ async resolveSize(order) {
293
+ const size = order.size;
294
+ switch (size.mode) {
295
+ case "absolute":
296
+ return parseUnits(size.amountOg, 18);
297
+ case "absoluteTokens":
298
+ return parseUnits(size.amountTokens, 18);
299
+ case "all": {
300
+ // Sell all tokens
301
+ return getTokenBalance(order.token, this.walletAddress);
302
+ }
303
+ case "percent": {
304
+ if (order.side === "buy") {
305
+ const balance = await getOgBalance(this.walletAddress);
306
+ const raw = (balance * BigInt(Math.round(size.percent * 100))) / 10000n;
307
+ // Reserve gas for the transaction (0.01 0G)
308
+ const MIN_GAS_RESERVE = parseUnits("0.01", 18);
309
+ const adjusted = raw > MIN_GAS_RESERVE ? raw - MIN_GAS_RESERVE : 0n;
310
+ if (adjusted <= 0n) {
311
+ logger.warn(`[Daemon] Percent buy amount after gas reserve is 0, skipping`);
312
+ }
313
+ return adjusted;
314
+ }
315
+ else {
316
+ const balance = await getTokenBalance(order.token, this.walletAddress);
317
+ return (balance * BigInt(Math.round(size.percent * 100))) / 10000n;
318
+ }
319
+ }
320
+ default:
321
+ return 0n;
322
+ }
323
+ }
324
+ notify(notification) {
325
+ // Always write JSON to stdout
326
+ writeStdout(JSON.stringify(notification));
327
+ // Fire-and-forget chat notification (errors logged, never thrown)
328
+ postChatNotification(notification, this.privateKey, this.walletAddress).catch(() => { });
329
+ // Fire-and-forget OpenClaw webhook (disabled if ENV not set)
330
+ postWebhookNotification(notification).catch(() => { });
331
+ }
332
+ checkAndWritePid() {
333
+ if (!existsSync(BOT_DIR)) {
334
+ mkdirSync(BOT_DIR, { recursive: true });
335
+ }
336
+ if (existsSync(BOT_PID_FILE)) {
337
+ const existingPid = parseInt(readFileSync(BOT_PID_FILE, "utf-8").trim(), 10);
338
+ try {
339
+ process.kill(existingPid, 0); // Check if alive
340
+ throw new EchoError(ErrorCodes.BOT_ALREADY_RUNNING, `Bot daemon already running (PID ${existingPid})`, "Run: echo marketmaker stop");
341
+ }
342
+ catch (err) {
343
+ if (err instanceof EchoError)
344
+ throw err;
345
+ // Stale pidfile — remove it
346
+ logger.debug(`[Daemon] Removing stale pidfile (PID ${existingPid})`);
347
+ unlinkSync(BOT_PID_FILE);
348
+ }
349
+ }
350
+ writeFileSync(BOT_PID_FILE, String(process.pid), "utf-8");
351
+ logger.debug(`[Daemon] PID file written: ${process.pid}`);
352
+ }
353
+ async stop() {
354
+ if (this.shuttingDown)
355
+ return;
356
+ this.shuttingDown = true;
357
+ logger.info("[Daemon] Shutting down...");
358
+ this.notify({
359
+ type: "BOT_STOPPED",
360
+ timestamp: Date.now(),
361
+ });
362
+ // Stop shutdown watcher
363
+ if (this.shutdownWatcher) {
364
+ clearInterval(this.shutdownWatcher);
365
+ this.shutdownWatcher = null;
366
+ }
367
+ // Drain pending txs
368
+ await this.nonceQueue.drain(30000);
369
+ // Disconnect stream
370
+ this.stream.disconnect();
371
+ // Cleanup files
372
+ try {
373
+ if (existsSync(BOT_PID_FILE))
374
+ unlinkSync(BOT_PID_FILE);
375
+ }
376
+ catch { /* ignore */ }
377
+ try {
378
+ if (existsSync(BOT_SHUTDOWN_FILE))
379
+ unlinkSync(BOT_SHUTDOWN_FILE);
380
+ }
381
+ catch { /* ignore */ }
382
+ logger.info("[Daemon] Stopped");
383
+ process.exit(0);
384
+ }
385
+ }
386
+ //# sourceMappingURL=daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/bot/daemon.ts"],"names":[],"mappings":"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"}