forgex-cli 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 (275) hide show
  1. package/README.md +479 -0
  2. package/dist/bin/forgex.d.ts +12 -0
  3. package/dist/bin/forgex.d.ts.map +1 -0
  4. package/dist/bin/forgex.js +23 -0
  5. package/dist/bin/forgex.js.map +1 -0
  6. package/dist/src/adapters/codex-adapter.d.ts +238 -0
  7. package/dist/src/adapters/codex-adapter.d.ts.map +1 -0
  8. package/dist/src/adapters/codex-adapter.js +524 -0
  9. package/dist/src/adapters/codex-adapter.js.map +1 -0
  10. package/dist/src/adapters/connection.d.ts +20 -0
  11. package/dist/src/adapters/connection.d.ts.map +1 -0
  12. package/dist/src/adapters/connection.js +43 -0
  13. package/dist/src/adapters/connection.js.map +1 -0
  14. package/dist/src/adapters/ipfs.d.ts +17 -0
  15. package/dist/src/adapters/ipfs.d.ts.map +1 -0
  16. package/dist/src/adapters/ipfs.js +30 -0
  17. package/dist/src/adapters/ipfs.js.map +1 -0
  18. package/dist/src/adapters/jito-adapter.d.ts +194 -0
  19. package/dist/src/adapters/jito-adapter.d.ts.map +1 -0
  20. package/dist/src/adapters/jito-adapter.js +474 -0
  21. package/dist/src/adapters/jito-adapter.js.map +1 -0
  22. package/dist/src/adapters/rpc-adapter.d.ts +148 -0
  23. package/dist/src/adapters/rpc-adapter.d.ts.map +1 -0
  24. package/dist/src/adapters/rpc-adapter.js +410 -0
  25. package/dist/src/adapters/rpc-adapter.js.map +1 -0
  26. package/dist/src/adapters/sdk-adapter.d.ts +148 -0
  27. package/dist/src/adapters/sdk-adapter.d.ts.map +1 -0
  28. package/dist/src/adapters/sdk-adapter.js +554 -0
  29. package/dist/src/adapters/sdk-adapter.js.map +1 -0
  30. package/dist/src/commands/config/index.d.ts +8 -0
  31. package/dist/src/commands/config/index.d.ts.map +1 -0
  32. package/dist/src/commands/config/index.js +91 -0
  33. package/dist/src/commands/config/index.js.map +1 -0
  34. package/dist/src/commands/query/index.d.ts +10 -0
  35. package/dist/src/commands/query/index.d.ts.map +1 -0
  36. package/dist/src/commands/query/index.js +376 -0
  37. package/dist/src/commands/query/index.js.map +1 -0
  38. package/dist/src/commands/sniper/index.d.ts +16 -0
  39. package/dist/src/commands/sniper/index.d.ts.map +1 -0
  40. package/dist/src/commands/sniper/index.js +292 -0
  41. package/dist/src/commands/sniper/index.js.map +1 -0
  42. package/dist/src/commands/token/index.d.ts +16 -0
  43. package/dist/src/commands/token/index.d.ts.map +1 -0
  44. package/dist/src/commands/token/index.js +295 -0
  45. package/dist/src/commands/token/index.js.map +1 -0
  46. package/dist/src/commands/tools/index.d.ts +17 -0
  47. package/dist/src/commands/tools/index.d.ts.map +1 -0
  48. package/dist/src/commands/tools/index.js +626 -0
  49. package/dist/src/commands/tools/index.js.map +1 -0
  50. package/dist/src/commands/trade/index.d.ts +8 -0
  51. package/dist/src/commands/trade/index.d.ts.map +1 -0
  52. package/dist/src/commands/trade/index.js +531 -0
  53. package/dist/src/commands/trade/index.js.map +1 -0
  54. package/dist/src/commands/transfer/index.d.ts +16 -0
  55. package/dist/src/commands/transfer/index.d.ts.map +1 -0
  56. package/dist/src/commands/transfer/index.js +509 -0
  57. package/dist/src/commands/transfer/index.js.map +1 -0
  58. package/dist/src/commands/wallet/index.d.ts +10 -0
  59. package/dist/src/commands/wallet/index.d.ts.map +1 -0
  60. package/dist/src/commands/wallet/index.js +828 -0
  61. package/dist/src/commands/wallet/index.js.map +1 -0
  62. package/dist/src/config.d.ts +74 -0
  63. package/dist/src/config.d.ts.map +1 -0
  64. package/dist/src/config.js +190 -0
  65. package/dist/src/config.js.map +1 -0
  66. package/dist/src/const/IDL/index.d.ts +4 -0
  67. package/dist/src/const/IDL/index.d.ts.map +1 -0
  68. package/dist/src/const/IDL/index.js +2 -0
  69. package/dist/src/const/IDL/index.js.map +1 -0
  70. package/dist/src/const/IDL/meteora-DLMM.d.ts +10249 -0
  71. package/dist/src/const/IDL/meteora-DLMM.d.ts.map +1 -0
  72. package/dist/src/const/IDL/meteora-DLMM.js +4177 -0
  73. package/dist/src/const/IDL/meteora-DLMM.js.map +1 -0
  74. package/dist/src/const/IDL/pump-fun.d.ts +4811 -0
  75. package/dist/src/const/IDL/pump-fun.d.ts.map +1 -0
  76. package/dist/src/const/IDL/pump-fun.js +2954 -0
  77. package/dist/src/const/IDL/pump-fun.js.map +1 -0
  78. package/dist/src/const/IDL/pump-swap-IDL.d.ts +3119 -0
  79. package/dist/src/const/IDL/pump-swap-IDL.d.ts.map +1 -0
  80. package/dist/src/const/IDL/pump-swap-IDL.js +2095 -0
  81. package/dist/src/const/IDL/pump-swap-IDL.js.map +1 -0
  82. package/dist/src/const/IDL/raydium-launchlab-IDL.d.ts +4031 -0
  83. package/dist/src/const/IDL/raydium-launchlab-IDL.d.ts.map +1 -0
  84. package/dist/src/const/IDL/raydium-launchlab-IDL.js +2110 -0
  85. package/dist/src/const/IDL/raydium-launchlab-IDL.js.map +1 -0
  86. package/dist/src/const/index.d.ts +40 -0
  87. package/dist/src/const/index.d.ts.map +1 -0
  88. package/dist/src/const/index.js +57 -0
  89. package/dist/src/const/index.js.map +1 -0
  90. package/dist/src/data-source.d.ts +270 -0
  91. package/dist/src/data-source.d.ts.map +1 -0
  92. package/dist/src/data-source.js +628 -0
  93. package/dist/src/data-source.js.map +1 -0
  94. package/dist/src/data-store/index.d.ts +87 -0
  95. package/dist/src/data-store/index.d.ts.map +1 -0
  96. package/dist/src/data-store/index.js +561 -0
  97. package/dist/src/data-store/index.js.map +1 -0
  98. package/dist/src/data-store/types.d.ts +91 -0
  99. package/dist/src/data-store/types.d.ts.map +1 -0
  100. package/dist/src/data-store/types.js +8 -0
  101. package/dist/src/data-store/types.js.map +1 -0
  102. package/dist/src/index.d.ts +8 -0
  103. package/dist/src/index.d.ts.map +1 -0
  104. package/dist/src/index.js +36 -0
  105. package/dist/src/index.js.map +1 -0
  106. package/dist/src/output.d.ts +52 -0
  107. package/dist/src/output.d.ts.map +1 -0
  108. package/dist/src/output.js +218 -0
  109. package/dist/src/output.js.map +1 -0
  110. package/dist/src/shims/store.d.ts +58 -0
  111. package/dist/src/shims/store.d.ts.map +1 -0
  112. package/dist/src/shims/store.js +55 -0
  113. package/dist/src/shims/store.js.map +1 -0
  114. package/dist/src/sol-sdk/account/index.d.ts +13 -0
  115. package/dist/src/sol-sdk/account/index.d.ts.map +1 -0
  116. package/dist/src/sol-sdk/account/index.js +174 -0
  117. package/dist/src/sol-sdk/account/index.js.map +1 -0
  118. package/dist/src/sol-sdk/account/lookupTable.d.ts +24 -0
  119. package/dist/src/sol-sdk/account/lookupTable.d.ts.map +1 -0
  120. package/dist/src/sol-sdk/account/lookupTable.js +103 -0
  121. package/dist/src/sol-sdk/account/lookupTable.js.map +1 -0
  122. package/dist/src/sol-sdk/batch/create.d.ts +23 -0
  123. package/dist/src/sol-sdk/batch/create.d.ts.map +1 -0
  124. package/dist/src/sol-sdk/batch/create.js +580 -0
  125. package/dist/src/sol-sdk/batch/create.js.map +1 -0
  126. package/dist/src/sol-sdk/batch/external-sniper.d.ts +31 -0
  127. package/dist/src/sol-sdk/batch/external-sniper.d.ts.map +1 -0
  128. package/dist/src/sol-sdk/batch/external-sniper.js +163 -0
  129. package/dist/src/sol-sdk/batch/external-sniper.js.map +1 -0
  130. package/dist/src/sol-sdk/batch/index.d.ts +144 -0
  131. package/dist/src/sol-sdk/batch/index.d.ts.map +1 -0
  132. package/dist/src/sol-sdk/batch/index.js +1573 -0
  133. package/dist/src/sol-sdk/batch/index.js.map +1 -0
  134. package/dist/src/sol-sdk/calc.d.ts +277 -0
  135. package/dist/src/sol-sdk/calc.d.ts.map +1 -0
  136. package/dist/src/sol-sdk/calc.js +590 -0
  137. package/dist/src/sol-sdk/calc.js.map +1 -0
  138. package/dist/src/sol-sdk/index.d.ts +1 -0
  139. package/dist/src/sol-sdk/index.d.ts.map +1 -0
  140. package/dist/src/sol-sdk/index.js +1 -0
  141. package/dist/src/sol-sdk/index.js.map +1 -0
  142. package/dist/src/sol-sdk/jito/index.d.ts +50 -0
  143. package/dist/src/sol-sdk/jito/index.d.ts.map +1 -0
  144. package/dist/src/sol-sdk/jito/index.js +225 -0
  145. package/dist/src/sol-sdk/jito/index.js.map +1 -0
  146. package/dist/src/sol-sdk/launchlab/index.d.ts +32 -0
  147. package/dist/src/sol-sdk/launchlab/index.d.ts.map +1 -0
  148. package/dist/src/sol-sdk/launchlab/index.js +78 -0
  149. package/dist/src/sol-sdk/launchlab/index.js.map +1 -0
  150. package/dist/src/sol-sdk/launchlab/instructions/buy.d.ts +27 -0
  151. package/dist/src/sol-sdk/launchlab/instructions/buy.d.ts.map +1 -0
  152. package/dist/src/sol-sdk/launchlab/instructions/buy.js +124 -0
  153. package/dist/src/sol-sdk/launchlab/instructions/buy.js.map +1 -0
  154. package/dist/src/sol-sdk/launchlab/instructions/create.d.ts +27 -0
  155. package/dist/src/sol-sdk/launchlab/instructions/create.d.ts.map +1 -0
  156. package/dist/src/sol-sdk/launchlab/instructions/create.js +125 -0
  157. package/dist/src/sol-sdk/launchlab/instructions/create.js.map +1 -0
  158. package/dist/src/sol-sdk/launchlab/instructions/sell.d.ts +15 -0
  159. package/dist/src/sol-sdk/launchlab/instructions/sell.d.ts.map +1 -0
  160. package/dist/src/sol-sdk/launchlab/instructions/sell.js +65 -0
  161. package/dist/src/sol-sdk/launchlab/instructions/sell.js.map +1 -0
  162. package/dist/src/sol-sdk/meteora/index.d.ts +32 -0
  163. package/dist/src/sol-sdk/meteora/index.d.ts.map +1 -0
  164. package/dist/src/sol-sdk/meteora/index.js +72 -0
  165. package/dist/src/sol-sdk/meteora/index.js.map +1 -0
  166. package/dist/src/sol-sdk/meteora/instructions/buy.d.ts +46 -0
  167. package/dist/src/sol-sdk/meteora/instructions/buy.d.ts.map +1 -0
  168. package/dist/src/sol-sdk/meteora/instructions/buy.js +153 -0
  169. package/dist/src/sol-sdk/meteora/instructions/buy.js.map +1 -0
  170. package/dist/src/sol-sdk/meteora/instructions/sell.d.ts +24 -0
  171. package/dist/src/sol-sdk/meteora/instructions/sell.d.ts.map +1 -0
  172. package/dist/src/sol-sdk/meteora/instructions/sell.js +98 -0
  173. package/dist/src/sol-sdk/meteora/instructions/sell.js.map +1 -0
  174. package/dist/src/sol-sdk/pump/index.d.ts +22 -0
  175. package/dist/src/sol-sdk/pump/index.d.ts.map +1 -0
  176. package/dist/src/sol-sdk/pump/index.js +101 -0
  177. package/dist/src/sol-sdk/pump/index.js.map +1 -0
  178. package/dist/src/sol-sdk/pump/instructions/buy.d.ts +29 -0
  179. package/dist/src/sol-sdk/pump/instructions/buy.d.ts.map +1 -0
  180. package/dist/src/sol-sdk/pump/instructions/buy.js +131 -0
  181. package/dist/src/sol-sdk/pump/instructions/buy.js.map +1 -0
  182. package/dist/src/sol-sdk/pump/instructions/createAndBuy.d.ts +36 -0
  183. package/dist/src/sol-sdk/pump/instructions/createAndBuy.d.ts.map +1 -0
  184. package/dist/src/sol-sdk/pump/instructions/createAndBuy.js +77 -0
  185. package/dist/src/sol-sdk/pump/instructions/createAndBuy.js.map +1 -0
  186. package/dist/src/sol-sdk/pump/instructions/sell.d.ts +7 -0
  187. package/dist/src/sol-sdk/pump/instructions/sell.d.ts.map +1 -0
  188. package/dist/src/sol-sdk/pump/instructions/sell.js +38 -0
  189. package/dist/src/sol-sdk/pump/instructions/sell.js.map +1 -0
  190. package/dist/src/sol-sdk/pumpswap/index.d.ts +9 -0
  191. package/dist/src/sol-sdk/pumpswap/index.d.ts.map +1 -0
  192. package/dist/src/sol-sdk/pumpswap/index.js +27 -0
  193. package/dist/src/sol-sdk/pumpswap/index.js.map +1 -0
  194. package/dist/src/sol-sdk/pumpswap/instructions/buy.d.ts +61 -0
  195. package/dist/src/sol-sdk/pumpswap/instructions/buy.d.ts.map +1 -0
  196. package/dist/src/sol-sdk/pumpswap/instructions/buy.js +215 -0
  197. package/dist/src/sol-sdk/pumpswap/instructions/buy.js.map +1 -0
  198. package/dist/src/sol-sdk/pumpswap/instructions/migrate.d.ts +3 -0
  199. package/dist/src/sol-sdk/pumpswap/instructions/migrate.d.ts.map +1 -0
  200. package/dist/src/sol-sdk/pumpswap/instructions/migrate.js +33 -0
  201. package/dist/src/sol-sdk/pumpswap/instructions/migrate.js.map +1 -0
  202. package/dist/src/sol-sdk/pumpswap/instructions/sell.d.ts +20 -0
  203. package/dist/src/sol-sdk/pumpswap/instructions/sell.d.ts.map +1 -0
  204. package/dist/src/sol-sdk/pumpswap/instructions/sell.js +107 -0
  205. package/dist/src/sol-sdk/pumpswap/instructions/sell.js.map +1 -0
  206. package/dist/src/sol-sdk/pumpswap/rpc/index.d.ts +28 -0
  207. package/dist/src/sol-sdk/pumpswap/rpc/index.d.ts.map +1 -0
  208. package/dist/src/sol-sdk/pumpswap/rpc/index.js +63 -0
  209. package/dist/src/sol-sdk/pumpswap/rpc/index.js.map +1 -0
  210. package/dist/src/sol-sdk/raydium/index.d.ts +16 -0
  211. package/dist/src/sol-sdk/raydium/index.d.ts.map +1 -0
  212. package/dist/src/sol-sdk/raydium/index.js +47 -0
  213. package/dist/src/sol-sdk/raydium/index.js.map +1 -0
  214. package/dist/src/sol-sdk/raydium/instructions/buy.d.ts +29 -0
  215. package/dist/src/sol-sdk/raydium/instructions/buy.d.ts.map +1 -0
  216. package/dist/src/sol-sdk/raydium/instructions/buy.js +106 -0
  217. package/dist/src/sol-sdk/raydium/instructions/buy.js.map +1 -0
  218. package/dist/src/sol-sdk/raydium/instructions/cpmmBuy.d.ts +29 -0
  219. package/dist/src/sol-sdk/raydium/instructions/cpmmBuy.d.ts.map +1 -0
  220. package/dist/src/sol-sdk/raydium/instructions/cpmmBuy.js +80 -0
  221. package/dist/src/sol-sdk/raydium/instructions/cpmmBuy.js.map +1 -0
  222. package/dist/src/sol-sdk/raydium/instructions/cpmmSell.d.ts +17 -0
  223. package/dist/src/sol-sdk/raydium/instructions/cpmmSell.d.ts.map +1 -0
  224. package/dist/src/sol-sdk/raydium/instructions/cpmmSell.js +56 -0
  225. package/dist/src/sol-sdk/raydium/instructions/cpmmSell.js.map +1 -0
  226. package/dist/src/sol-sdk/raydium/instructions/sell.d.ts +8558 -0
  227. package/dist/src/sol-sdk/raydium/instructions/sell.d.ts.map +1 -0
  228. package/dist/src/sol-sdk/raydium/instructions/sell.js +70 -0
  229. package/dist/src/sol-sdk/raydium/instructions/sell.js.map +1 -0
  230. package/dist/src/sol-sdk/raydium/rpc/index.d.ts +39 -0
  231. package/dist/src/sol-sdk/raydium/rpc/index.d.ts.map +1 -0
  232. package/dist/src/sol-sdk/raydium/rpc/index.js +82 -0
  233. package/dist/src/sol-sdk/raydium/rpc/index.js.map +1 -0
  234. package/dist/src/sol-sdk/raydium/rpc/raydium.d.ts +5 -0
  235. package/dist/src/sol-sdk/raydium/rpc/raydium.d.ts.map +1 -0
  236. package/dist/src/sol-sdk/raydium/rpc/raydium.js +18 -0
  237. package/dist/src/sol-sdk/raydium/rpc/raydium.js.map +1 -0
  238. package/dist/src/sol-sdk/rpc/index.d.ts +33 -0
  239. package/dist/src/sol-sdk/rpc/index.d.ts.map +1 -0
  240. package/dist/src/sol-sdk/rpc/index.js +128 -0
  241. package/dist/src/sol-sdk/rpc/index.js.map +1 -0
  242. package/dist/src/sol-sdk/transfer/index.d.ts +24 -0
  243. package/dist/src/sol-sdk/transfer/index.d.ts.map +1 -0
  244. package/dist/src/sol-sdk/transfer/index.js +65 -0
  245. package/dist/src/sol-sdk/transfer/index.js.map +1 -0
  246. package/dist/src/sol-sdk/turnover/index.d.ts +84 -0
  247. package/dist/src/sol-sdk/turnover/index.d.ts.map +1 -0
  248. package/dist/src/sol-sdk/turnover/index.js +569 -0
  249. package/dist/src/sol-sdk/turnover/index.js.map +1 -0
  250. package/dist/src/tx-tracker/detail-adapter.d.ts +100 -0
  251. package/dist/src/tx-tracker/detail-adapter.d.ts.map +1 -0
  252. package/dist/src/tx-tracker/detail-adapter.js +215 -0
  253. package/dist/src/tx-tracker/detail-adapter.js.map +1 -0
  254. package/dist/src/tx-tracker/index.d.ts +142 -0
  255. package/dist/src/tx-tracker/index.d.ts.map +1 -0
  256. package/dist/src/tx-tracker/index.js +447 -0
  257. package/dist/src/tx-tracker/index.js.map +1 -0
  258. package/dist/src/types/index.d.ts +76 -0
  259. package/dist/src/types/index.d.ts.map +1 -0
  260. package/dist/src/types/index.js +69 -0
  261. package/dist/src/types/index.js.map +1 -0
  262. package/dist/src/types/websocket.d.ts +15 -0
  263. package/dist/src/types/websocket.d.ts.map +1 -0
  264. package/dist/src/types/websocket.js +18 -0
  265. package/dist/src/types/websocket.js.map +1 -0
  266. package/dist/src/utils/index.d.ts +13 -0
  267. package/dist/src/utils/index.d.ts.map +1 -0
  268. package/dist/src/utils/index.js +174 -0
  269. package/dist/src/utils/index.js.map +1 -0
  270. package/dist/src/wallet-store.d.ts +124 -0
  271. package/dist/src/wallet-store.d.ts.map +1 -0
  272. package/dist/src/wallet-store.js +524 -0
  273. package/dist/src/wallet-store.js.map +1 -0
  274. package/package.json +86 -0
  275. package/scripts/postinstall.js +88 -0
package/README.md ADDED
@@ -0,0 +1,479 @@
1
+ # ForgeX CLI
2
+
3
+ Solana 链上做市系统命令行工具。
4
+
5
+ ForgeX CLI 提供完整的 Solana 链上做市操作能力,包括多钱包组管理、批量交易、专业做市工具(换手/刷量/价格机器人)、代币创建与查询、批量转账等功能。支持多 DEX 协议和 Jito MEV 保护。
6
+
7
+ ## 功能特性
8
+
9
+ - **多钱包组管理** -- 创建/删除钱包组,批量生成钱包,靓号地址生成(自定义后缀/前缀),CSV/JSON 导入导出,AES 加密存储私钥
10
+ - **批量交易** -- 多钱包同时买入/卖出,支持百分比卖出、全部卖出、狙击买入
11
+ - **专业做市工具** -- 换手交易(Jito Bundle 零滑点)、刷量工具(5 种模式)、价格机器人(自动拉升/砸盘)
12
+ - **多 DEX 支持** -- Pump.fun、PumpSwap、Raydium V4/CPMM、LaunchLab
13
+ - **Jito MEV 保护** -- 交易捆绑发送,防止夹子攻击
14
+ - **代币创建** -- 支持 Pump.fun / LaunchLab 发币,IPFS 元数据上传,开盘狙击
15
+ - **链上查询** -- 余额、价格、K 线、交易记录、持仓监控
16
+ - **外盘抢筹** -- Pump 外盘抢筹、Bonk 外盘抢筹
17
+ - **批量转账** -- 收集(多对一)、分发(一对多)、多对多转账
18
+ - **交易追踪** -- 自动追踪交易结果,持久化持仓和盈亏数据
19
+ - **灵活输出** -- 支持 JSON / Table / Minimal 三种输出格式
20
+
21
+ ## 安装
22
+
23
+ ### 环境要求
24
+
25
+ - Node.js >= 22.14.0
26
+ - npm
27
+ - solana-keygen(仅靓号生成功能需要,可选)
28
+
29
+ ### 安装步骤
30
+
31
+ ```bash
32
+ cd cli
33
+ npm install
34
+ npm run build
35
+ ```
36
+
37
+ 安装完成后可通过以下方式运行:
38
+
39
+ ```bash
40
+ # 开发模式(tsx 直接运行 TypeScript)
41
+ npm run dev -- <command>
42
+
43
+ # 编译后运行
44
+ node dist/bin/forgex.js <command>
45
+
46
+ # 全局链接后
47
+ npm link
48
+ forgex <command>
49
+ ```
50
+
51
+ ## 快速上手
52
+
53
+ ### 1. 初始化配置
54
+
55
+ ```bash
56
+ # 创建默认配置文件 (~/.forgex/config.json)
57
+ forgex config init
58
+
59
+ # 设置 RPC 节点(推荐付费节点)
60
+ forgex config set rpcUrl https://your-rpc-url.com
61
+
62
+ # 设置 Codex API Key(代币信息和价格查询)
63
+ forgex config set codexApiKey your-codex-api-key
64
+
65
+ # 设置 API Token
66
+ forgex config set apiToken your-api-token
67
+
68
+ # 查看当前配置
69
+ forgex config list
70
+ ```
71
+
72
+ ### 2. 创建钱包组并生成钱包
73
+
74
+ ```bash
75
+ # 创建本地钱包组
76
+ forgex wallet create-group --name "做市组A"
77
+
78
+ # 生成 5 个新钱包(首次使用需设置加密密码)
79
+ forgex wallet generate --group 1 --count 5
80
+
81
+ # 查看钱包组详情
82
+ forgex wallet group-info --id 1
83
+
84
+ # 列出所有钱包组
85
+ forgex wallet list-groups --format table
86
+ ```
87
+
88
+ ### 3. 分发 SOL 到钱包
89
+
90
+ ```bash
91
+ # 从主钱包向钱包组每个钱包分发 0.1 SOL
92
+ forgex transfer out --from <主钱包地址> --to-group 1 --value 0.1
93
+
94
+ # 模拟分发(不实际执行,检查余额是否充足)
95
+ forgex transfer out --from <主钱包地址> --to-group 1 --value 0.1 --dry-run
96
+ ```
97
+
98
+ ### 4. 执行交易
99
+
100
+ ```bash
101
+ # 批量买入(每个钱包买入 0.01 SOL 的代币)
102
+ forgex trade buy --group 1 --token <代币CA> --amount 0.01
103
+
104
+ # 全部卖出
105
+ forgex trade sell --group 1 --token <代币CA> --amount all
106
+
107
+ # 卖出 50%
108
+ forgex trade sell --group 1 --token <代币CA> --amount 50%
109
+
110
+ # 狙击买入(指定每个钱包不同金额)
111
+ forgex trade sniper --group 1 --token <代币CA> --amounts 0.1,0.2,0.15
112
+ ```
113
+
114
+ ### 5. 使用做市工具
115
+
116
+ ```bash
117
+ # 刷量(1买1卖模式,执行 3 轮)
118
+ forgex tools volume --group 1 --token <代币CA> --mode 1b1s --amount 0.01 --rounds 3
119
+
120
+ # 换手交易(组A -> 组B)
121
+ forgex tools turnover --from-group 1 --to-group 2 --token <代币CA>
122
+
123
+ # 价格机器人(拉升到目标价格)
124
+ forgex tools robot-price --group 1 --token <代币CA> --direction up --target-price 0.001
125
+ ```
126
+
127
+ ### 6. 收集 SOL
128
+
129
+ ```bash
130
+ # 将钱包组所有钱包的 SOL 收集到一个地址
131
+ forgex transfer in --to <目标地址> --from-group 1 --amount all
132
+ ```
133
+
134
+ ## 命令参考
135
+
136
+ ### 全局选项
137
+
138
+ | 选项 | 说明 | 默认值 |
139
+ |------|------|--------|
140
+ | `--format <format>` | 输出格式: `json` \| `table` \| `minimal` | `json` |
141
+ | `--help` | 显示帮助信息 | - |
142
+ | `--version` | 显示版本号 | - |
143
+
144
+ 所有交易类命令均支持 `--dry-run`(模拟执行)、`--priority-fee`(优先费 SOL)、`--slippage`(滑点 bps)。
145
+
146
+ ---
147
+
148
+ ### config -- 配置管理
149
+
150
+ | 命令 | 说明 |
151
+ |------|------|
152
+ | `config init` | 初始化配置文件,支持 `--rpc-url`、`--api-token`、`--api-base-url`、`--network` |
153
+ | `config set <key> <value>` | 设置配置项,支持点号路径(如 `feeConfig.trade_fee`) |
154
+ | `config get [key]` | 查看配置项,不指定 key 显示全部(敏感信息脱敏) |
155
+ | `config list` | 列出所有配置(敏感信息脱敏) |
156
+
157
+ ---
158
+
159
+ ### wallet -- 钱包组管理
160
+
161
+ | 命令 | 主要参数 | 说明 |
162
+ |------|----------|------|
163
+ | `wallet create-group` | `--name` (必填), `--type local\|monitor` | 创建钱包组 |
164
+ | `wallet list-groups` | `--type` | 列出钱包组,可按类型过滤 |
165
+ | `wallet group-info` | `--id` (必填), `--show-keys` | 查看详情,`--show-keys` 显示私钥明文 |
166
+ | `wallet delete-group` | `--id` (必填), `--force` | 删除钱包组 |
167
+ | `wallet generate` | `--group` (必填), `--count` | 批量生成新钱包(上限 100 个/组) |
168
+ | `wallet add` | `--group` (必填), `--private-key` (必填) | 导入已有钱包 |
169
+ | `wallet remove` | `--group` (必填), `--address` (必填) | 从组中移除钱包 |
170
+ | `wallet import` | `--group` (必填), `--file` (必填) | 从 CSV 批量导入钱包 |
171
+ | `wallet export` | `--group` (必填), `--file` (必填) | 导出钱包组为 CSV |
172
+ | `wallet import-group` | `--file` (必填), `--password` | 从 JSON 导入钱包组 |
173
+ | `wallet export-group` | `--file` (必填), `--encrypt`, `--password` | 导出所有钱包组为 JSON |
174
+ | `wallet overview` | `--groups` (必填,逗号分隔), `--token` | 钱包组资产概览(总价值/盈亏/均价) |
175
+ | `wallet grind` | `--suffix` (必填), `--prefix`, `--count`, `--threads` | 生成靓号地址(自定义后缀/前缀),需要本地安装 solana-keygen |
176
+ | `wallet grind-list` | `--suffix` | 列出已生成的靓号地址,可按后缀过滤 |
177
+
178
+ **靓号生成 (grind) 说明:**
179
+ - 依赖本地 `solana-keygen` 工具,未安装时会提示安装方式
180
+ - 后缀/前缀仅支持 Base58 字符(不含 0, O, I, l)
181
+ - 生成的密钥文件保存在 `~/.forgex/vanity/` 目录
182
+ - 后缀越长,生成时间越久(4 字符秒级,5+ 字符可能数分钟)
183
+
184
+ ---
185
+
186
+ ### trade -- 交易操作
187
+
188
+ | 命令 | 主要参数 | 说明 |
189
+ |------|----------|------|
190
+ | `trade buy` | `--group`, `--token`, `--amount`(SOL) | 批量买入,`--slippage` 默认 300bps |
191
+ | `trade sell` | `--group`, `--token`, `--amount` | 批量卖出,amount 支持: 数量 / 百分比(`50%`) / `all` |
192
+ | `trade batch` | `--group`, `--token`, `--type`, `--mode` | 批量交易,type: `buy\|sell\|buyWithSell`,mode: `1b1s\|1b2s\|1b3s\|2b1s\|3b1s` |
193
+ | `trade sniper` | `--group`, `--token`, `--amounts` | 狙击买入,amounts 逗号分隔,数量须匹配钱包数 |
194
+
195
+ ---
196
+
197
+ ### tools -- 专业做市工具
198
+
199
+ | 命令 | 主要参数 | 说明 |
200
+ |------|----------|------|
201
+ | `tools turnover` | `--from-group`, `--to-group`, `--token` | 换手交易,使用 Jito Bundle 实现零滑点钱包间换手 |
202
+ | `tools volume` | `--group`, `--token`, `--mode`, `--amount` | 刷量工具,支持 5 种模式,零损失提升交易量 |
203
+ | `tools robot-price` | `--group`, `--token`, `--direction`, `--target-price` | 价格机器人,direction: `up`(拉升) / `down`(砸盘) |
204
+
205
+ **换手 (turnover) 额外参数:**
206
+ - `--amount`: 金额类型,固定数量 / 百分比(`50%`) / `all`(默认)
207
+ - `--daemon`: 后台持续执行
208
+ - `--rounds`: 轮数(0=无限)
209
+ - `--interval`: 间隔毫秒
210
+
211
+ **刷量 (volume) 额外参数:**
212
+ - `--mode`: `1b1s`(1买1卖) / `1b2s` / `1b3s` / `2b1s` / `3b1s`
213
+ - `--daemon`: 后台持续执行
214
+ - `--rounds`: 轮数(0=无限)
215
+ - `--interval`: 间隔毫秒
216
+
217
+ **价格机器人 (robot-price) 额外参数:**
218
+ - `--amount-type`: `fixed` / `random`
219
+ - `--amount-max`: random 模式最大金额
220
+ - `--max-cost`: 总消耗 SOL 上限
221
+ - 默认持续运行直到达到目标价格或成本上限,Ctrl+C 停止
222
+
223
+ ---
224
+
225
+ ### transfer -- 转账操作
226
+
227
+ | 命令 | 主要参数 | 说明 |
228
+ |------|----------|------|
229
+ | `transfer in` | `--to`, `--from-group` | 批量收集(多对一),`--amount all\|fixed\|reserve` |
230
+ | `transfer out` | `--from`, `--to-group`, `--value` | 批量分发(一对多),`--amount fixed\|random` |
231
+ | `transfer many-to-many` | `--from-group`, `--to-group` | 多对多转账,按索引配对,`--amount all\|fixed\|reserve\|random` |
232
+
233
+ ---
234
+
235
+ ### token -- 代币操作
236
+
237
+ | 命令 | 主要参数 | 说明 |
238
+ |------|----------|------|
239
+ | `token create` | `--dex`, `--name`, `--symbol`, `--image` | 创建代币,dex: `pump` / `launchlab` |
240
+ | `token info` | `--ca` | 查询代币信息(名称、符号、价格、交易对等) |
241
+ | `token pool` | `--ca` | 查询代币池子信息 |
242
+
243
+ **代币创建额外参数:**
244
+ - `--description`, `--twitter`, `--website`, `--telegram`: 元数据
245
+ - `--dev-wallet`: 开发者钱包组 ID,`--dev-buy`: 开发者买入金额
246
+ - `--snipers`: 狙击者钱包组 ID,`--sniper-amounts`: 狙击金额
247
+ - `--bundle-time`: `T0`(同区块) / `T1_T5`
248
+ - `--use-suffix`: 使用自定义后缀地址
249
+
250
+ ---
251
+
252
+ ### query -- 查询操作
253
+
254
+ | 命令 | 主要参数 | 说明 |
255
+ |------|----------|------|
256
+ | `query balance` | `--address`, `--token`(可选) | 查询余额,不填 token 查 SOL |
257
+ | `query price` | `--token` | 查询代币价格(SOL/USD) |
258
+ | `query kline` | `--token`, `--interval`, `--count` | K 线数据,interval: `1m\|5m\|15m\|1h\|4h\|1d` |
259
+ | `query transactions` | `--group`, `--token`(可选) | 查询交易记录,支持分页 `--page` `--page-size` |
260
+ | `query monitor` | `--group`, `--token`(可选) | 持仓监控(余额/均价/已实现&未实现盈亏) |
261
+
262
+ ---
263
+
264
+ ### sniper -- 外盘抢筹
265
+
266
+ | 命令 | 主要参数 | 说明 |
267
+ |------|----------|------|
268
+ | `sniper external` | `--launch-group`, `--sniper-group`, `--token`, `--amounts` | Pump.fun 外盘抢筹(Pump -> PumpSwap 迁移触发) |
269
+ | `sniper bonk` | `--sniper-group`, `--token`, `--amounts` | Bonk 外盘抢筹(Raydium CPMM) |
270
+
271
+ ## 配置
272
+
273
+ ### 配置文件位置
274
+
275
+ `~/.forgex/config.json`,通过 `forgex config init` 创建。
276
+
277
+ ### 配置项
278
+
279
+ | 配置项 | 说明 | 默认值 |
280
+ |--------|------|--------|
281
+ | `rpcUrl` | Solana RPC 节点 URL | `https://api.mainnet-beta.solana.com` |
282
+ | `apiToken` | API 认证 Token | `""` |
283
+ | `apiBaseUrl` | API 基础 URL | `https://forgex.online/api` |
284
+ | `codexApiKey` | Codex API Key(市场数据查询) | `""` |
285
+ | `network` | 网络: `mainnet` / `devnet` / `testnet` | `mainnet` |
286
+ | `defaultPriorityFee` | 默认优先费 (SOL) | `0.0001` |
287
+ | `defaultSlippage` | 默认滑点 (bps) | `300` |
288
+ | `outputFormat` | 默认输出格式 | `json` |
289
+ | `solPrice` | SOL 美元价格(估值用) | `130` |
290
+ | `feeConfig.*` | 手续费配置(嵌套对象) | 见源码 |
291
+
292
+ ### 环境变量
293
+
294
+ 以下环境变量会覆盖配置文件中的对应值(优先级最高):
295
+
296
+ | 环境变量 | 对应配置项 |
297
+ |----------|-----------|
298
+ | `FORGEX_API_TOKEN` | `apiToken` |
299
+ | `FORGEX_RPC_URL` | `rpcUrl` |
300
+ | `FORGEX_API_BASE_URL` | `apiBaseUrl` |
301
+ | `FORGEX_CODEX_API_KEY` | `codexApiKey` |
302
+ | `FORGEX_WALLET_PASSWORD` | 钱包加密密码(避免交互式输入,适合脚本自动化) |
303
+
304
+ ## 安全
305
+
306
+ ### 私钥加密
307
+
308
+ 所有钱包私钥使用 AES 加密存储。首次创建或导入钱包时,CLI 要求设置加密密码。之后每次涉及私钥的操作(交易、导出等)都需要验证密码。
309
+
310
+ 加密流程:
311
+ 1. 用户设置主密码
312
+ 2. 私钥通过 `CryptoJS.AES.encrypt(privateKey, password)` 加密后写入磁盘
313
+ 3. 使用时通过 `CryptoJS.AES.decrypt(encrypted, password)` 临时解密到内存
314
+ 4. 明文私钥仅在内存中使用,不持久化
315
+ 5. 旧版明文存储会自动检测并迁移到加密格式
316
+
317
+ ### 安全建议
318
+
319
+ - 使用强密码保护钱包
320
+ - 通过环境变量 `FORGEX_WALLET_PASSWORD` 设置密码适合脚本自动化场景
321
+ - 定期使用 `wallet export-group --encrypt --password <pwd>` 加密备份钱包数据
322
+ - 不要在公共环境或共享屏幕时使用 `wallet group-info --show-keys`
323
+ - 所有交易命令支持 `--dry-run` 预检,建议大额操作前先模拟验证
324
+ - 配置文件权限为 `600`(仅所有者可读写),目录权限为 `700`
325
+
326
+ ### 文件存储
327
+
328
+ ```
329
+ ~/.forgex/ # 700 权限
330
+ config.json # 600 权限,全局配置
331
+ wallets/ # 钱包加密数据
332
+ wallet-store.json # 钱包组和加密私钥
333
+ vanity/ # 靓号密钥文件 (solana-keygen grind 生成)
334
+ {address}.json # Solana keypair JSON
335
+ data/ # DataStore 本地数据
336
+ tokens/{CA}/ # 按代币组织
337
+ groups/{groupId}/ # 按钱包组组织
338
+ transactions.json # 交易记录
339
+ holdings.json # 持仓数据
340
+ balances.json # 余额快照
341
+ logs/ # 运行日志
342
+ ```
343
+
344
+ ## 架构
345
+
346
+ ```
347
+ CLI 命令层 (commands/)
348
+ |
349
+ v
350
+ DataSource (data-source.ts) ---- 统一数据源门面
351
+ |
352
+ +---> CodexAdapter 代币信息/价格/K线/池信息 (远程 API + 本地缓存)
353
+ +---> RpcAdapter 余额/账户信息/交易确认 (链上 RPC)
354
+ +---> JitoAdapter Bundle 发送/状态查询 (Jito Block Engine)
355
+ +---> DataStore 交易记录/持仓/缓存 (本地文件 ~/.forgex/data/)
356
+ |
357
+ v
358
+ TxTracker (tx-tracker/) ---- 交易追踪系统
359
+ +---> TxDetailAdapter 解析链上交易详情
360
+ +---> DataStore 持久化交易结果和持仓变化
361
+
362
+ SdkAdapter (adapters/sdk-adapter.ts) ---- 交易执行
363
+ +---> sol-sdk 前端交易 SDK 适配
364
+ ```
365
+
366
+ ### 核心模块说明
367
+
368
+ - **DataSource**: 命令层唯一的数据访问接口。路由请求到正确的适配器,支持缓存穿透(优先读本地,miss 或过期时从远程获取并写入本地)和容错降级(远程不可用时 fallback 到本地缓存)
369
+ - **DataStore**: 基于文件系统的本地数据存储,按 `tokens/{CA}/groups/{groupId}/` 组织数据
370
+ - **CodexAdapter**: 对接 Codex API 获取市场数据(代币信息、实时价格、K 线、交易对)
371
+ - **RpcAdapter**: 对接 Solana RPC 节点进行链上查询(SOL/Token 余额、账户信息、交易确认)
372
+ - **JitoAdapter**: 对接 Jito Block Engine 发送和查询 Bundle 交易
373
+ - **TxTracker**: 交易完成后自动追踪链上结果,解析交易详情,更新持仓和盈亏数据
374
+ - **SdkAdapter**: 封装前端 sol-sdk,提供买入/卖出/换手/刷量等交易构建和执行能力
375
+
376
+ ### 输出系统
377
+
378
+ 所有命令通过统一的 `output()` 函数输出数据,支持三种格式:
379
+
380
+ - **json** (默认): 结构化 JSON,适合程序解析和 Agent 集成
381
+ - **table**: cli-table3 表格,适合终端人工查看
382
+ - **minimal**: 简洁文本,仅输出关键信息
383
+
384
+ ```bash
385
+ forgex wallet list-groups --format json
386
+ forgex wallet list-groups --format table
387
+ forgex wallet list-groups --format minimal
388
+ ```
389
+
390
+ ## 开发
391
+
392
+ ### 开发环境
393
+
394
+ ```bash
395
+ # 安装依赖
396
+ npm install
397
+
398
+ # 开发模式运行
399
+ npm run dev -- config list
400
+ npm run dev -- wallet list-groups --format table
401
+
402
+ # 编译 TypeScript
403
+ npm run build
404
+
405
+ # 清除编译产物
406
+ npm run clean
407
+ ```
408
+
409
+ ### 测试
410
+
411
+ ```bash
412
+ # 运行全部测试
413
+ npm test
414
+
415
+ # 监听模式(文件变更自动重跑)
416
+ npm run test:watch
417
+ ```
418
+
419
+ 测试框架使用 vitest,测试文件位于 `tests/` 目录,超时时间 30 秒。
420
+
421
+ ### 项目结构
422
+
423
+ ```
424
+ cli/
425
+ bin/
426
+ forgex.ts CLI 入口(密码迁移检测 + 命令解析)
427
+ src/
428
+ index.ts 程序主入口,注册 8 个命令组
429
+ config.ts 配置管理(读写 ~/.forgex/config.json)
430
+ output.ts 输出格式化(json/table/minimal)
431
+ wallet-store.ts 钱包加密存储(AES 加密/解密/迁移)
432
+ data-source.ts 统一数据源门面
433
+ commands/
434
+ config/index.ts 配置管理命令 (init/set/get/list)
435
+ wallet/index.ts 钱包组管理命令 (14 个子命令)
436
+ trade/index.ts 交易命令 (buy/sell/batch/sniper)
437
+ tools/index.ts 做市工具命令 (turnover/volume/robot-price)
438
+ transfer/index.ts 转账命令 (in/out/many-to-many)
439
+ token/index.ts 代币操作命令 (create/info/pool)
440
+ query/index.ts 查询命令 (balance/price/kline/transactions/monitor)
441
+ sniper/index.ts 外盘抢筹命令 (external/bonk)
442
+ adapters/
443
+ sdk-adapter.ts 前端 sol-sdk 适配层
444
+ codex-adapter.ts Codex API 适配器
445
+ rpc-adapter.ts Solana RPC 适配器
446
+ jito-adapter.ts Jito Bundle 适配器
447
+ api.ts 服务端 API 适配器
448
+ data-store/
449
+ index.ts 本地文件存储实现
450
+ types.ts 数据类型定义
451
+ tx-tracker/
452
+ index.ts 交易追踪主逻辑
453
+ detail-adapter.ts 链上交易详情解析
454
+ tests/ 测试文件
455
+ vitest.config.ts vitest 测试配置
456
+ package.json 依赖和脚本
457
+ tsconfig.json TypeScript 配置
458
+ ```
459
+
460
+ ### 技术栈
461
+
462
+ | 类别 | 技术 |
463
+ |------|------|
464
+ | 语言 | TypeScript (ESM, type: module) |
465
+ | CLI 框架 | Commander.js 13 |
466
+ | 区块链 SDK | @solana/web3.js, @coral-xyz/anchor 0.31 |
467
+ | 加密 | crypto-js (AES) |
468
+ | 交互 | inquirer 12 |
469
+ | 表格 | cli-table3 |
470
+ | 进度条 | cli-progress |
471
+ | 加载动画 | ora |
472
+ | 颜色 | chalk 5 |
473
+ | 大数 | bignumber.js, bn.js |
474
+ | HTTP | axios |
475
+ | 测试 | vitest 4 |
476
+
477
+ ## License
478
+
479
+ MIT
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * ForgeX CLI 入口
4
+ *
5
+ * Solana 链上做市系统命令行工具
6
+ *
7
+ * 启动流程:
8
+ * 1. 检测钱包存储是否为旧格式(明文私钥),如果是则自动迁移到加密格式
9
+ * 2. 构建命令树并解析命令行参数
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=forgex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forgex.d.ts","sourceRoot":"","sources":["../../bin/forgex.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG"}
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * ForgeX CLI 入口
4
+ *
5
+ * Solana 链上做市系统命令行工具
6
+ *
7
+ * 启动流程:
8
+ * 1. 检测钱包存储是否为旧格式(明文私钥),如果是则自动迁移到加密格式
9
+ * 2. 构建命令树并解析命令行参数
10
+ */
11
+ import { createProgram } from '../src/index.js';
12
+ import { migrateToEncryptedStore } from '../src/wallet-store.js';
13
+ async function main() {
14
+ // 检测并迁移旧格式的钱包存储(明文私钥 → AES 加密)
15
+ await migrateToEncryptedStore();
16
+ const program = createProgram();
17
+ program.parse(process.argv);
18
+ }
19
+ main().catch((err) => {
20
+ console.error('启动失败:', err.message || err);
21
+ process.exit(1);
22
+ });
23
+ //# sourceMappingURL=forgex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forgex.js","sourceRoot":"","sources":["../../bin/forgex.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,KAAK,UAAU,IAAI;IACjB,+BAA+B;IAC/B,MAAM,uBAAuB,EAAE,CAAC;IAEhC,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC;IAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}