forgex-cli 1.0.54 → 1.0.55
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.
- package/README.md +1 -6
- package/dist/src/adapters/connection.js +2 -2
- package/dist/src/adapters/rpc-adapter.js +2 -2
- package/dist/src/adapters/sdk-adapter.d.ts +17 -0
- package/dist/src/adapters/sdk-adapter.d.ts.map +1 -1
- package/dist/src/adapters/sdk-adapter.js +130 -13
- package/dist/src/adapters/sdk-adapter.js.map +1 -1
- package/dist/src/commands/sniper/index.d.ts +1 -15
- package/dist/src/commands/sniper/index.d.ts.map +1 -1
- package/dist/src/commands/sniper/index.js +2 -291
- package/dist/src/commands/sniper/index.js.map +1 -1
- package/dist/src/commands/tools/index.d.ts.map +1 -1
- package/dist/src/commands/tools/index.js +58 -94
- package/dist/src/commands/tools/index.js.map +1 -1
- package/dist/src/commands/trade/index.d.ts +2 -0
- package/dist/src/commands/trade/index.d.ts.map +1 -1
- package/dist/src/commands/trade/index.js +26 -215
- package/dist/src/commands/trade/index.js.map +1 -1
- package/dist/src/commands/transfer/index.d.ts.map +1 -1
- package/dist/src/commands/transfer/index.js +12 -41
- package/dist/src/commands/transfer/index.js.map +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +8 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/sol-sdk/batch/create.js +1 -1
- package/dist/src/sol-sdk/batch/external-sniper.d.ts +1 -26
- package/dist/src/sol-sdk/batch/external-sniper.d.ts.map +1 -1
- package/dist/src/sol-sdk/batch/external-sniper.js +1 -156
- package/dist/src/sol-sdk/batch/external-sniper.js.map +1 -1
- package/dist/src/sol-sdk/pump/instructions/sell.d.ts.map +1 -1
- package/dist/src/sol-sdk/pump/instructions/sell.js +2 -1
- package/dist/src/sol-sdk/pump/instructions/sell.js.map +1 -1
- package/dist/src/sol-sdk/rpc/index.js +2 -2
- package/package.json +1 -1
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
* 交易命令组 - 真实交易执行
|
|
3
3
|
*
|
|
4
4
|
* forgex trade buy | sell | batch | sniper
|
|
5
|
+
*
|
|
6
|
+
* 优化: 交易发出后不等确认、不追踪详情,直接返回 txHash
|
|
5
7
|
*/
|
|
6
8
|
import { getGroup, ensurePasswordAndValidate } from '../../wallet-store.js';
|
|
7
9
|
import { loadConfig } from '../../config.js';
|
|
8
10
|
import { output, error, info, suppressConsole, restoreConsole, getOutputFormat } from '../../output.js';
|
|
9
11
|
import { fetchTradeContext, executeTrades, buildWalletList, getTokenBalance, } from '../../adapters/sdk-adapter.js';
|
|
10
|
-
import { getDataSource } from '../../data-source.js';
|
|
11
12
|
export function registerTradeCommands(program) {
|
|
12
13
|
const tradeCmd = program
|
|
13
14
|
.command('trade')
|
|
@@ -26,7 +27,6 @@ export function registerTradeCommands(program) {
|
|
|
26
27
|
.option('--dry-run', '仅模拟,不实际执行', false)
|
|
27
28
|
.action(async (options) => {
|
|
28
29
|
try {
|
|
29
|
-
// Bug 5 fix: 交易前验证密码
|
|
30
30
|
await ensurePasswordAndValidate();
|
|
31
31
|
const config = loadConfig();
|
|
32
32
|
const groupId = Number(options.group);
|
|
@@ -35,7 +35,6 @@ export function registerTradeCommands(program) {
|
|
|
35
35
|
const priorityFee = options.priorityFee
|
|
36
36
|
? Number(options.priorityFee)
|
|
37
37
|
: config.defaultPriorityFee;
|
|
38
|
-
// P1#4: 数值验证
|
|
39
38
|
if (isNaN(groupId)) {
|
|
40
39
|
error('--group 必须是有效数字');
|
|
41
40
|
process.exit(1);
|
|
@@ -45,7 +44,7 @@ export function registerTradeCommands(program) {
|
|
|
45
44
|
process.exit(1);
|
|
46
45
|
}
|
|
47
46
|
if (isNaN(slippageBps) || slippageBps <= 0 || slippageBps > 5000) {
|
|
48
|
-
error('--slippage 必须是 1-5000 之间的数字
|
|
47
|
+
error('--slippage 必须是 1-5000 之间的数字');
|
|
49
48
|
process.exit(1);
|
|
50
49
|
}
|
|
51
50
|
if (isNaN(priorityFee) || priorityFee < 0) {
|
|
@@ -61,65 +60,23 @@ export function registerTradeCommands(program) {
|
|
|
61
60
|
error('钱包组中没有钱包');
|
|
62
61
|
process.exit(1);
|
|
63
62
|
}
|
|
64
|
-
// P0#1: 将 CLI 的 bps 值转换为 SDK 期望的百分比值
|
|
65
|
-
// CLI: 300 bps -> SDK 需要 30 (百分比) -> SDK 内部 /100 得 0.30
|
|
66
63
|
const slippage = slippageBps / 10;
|
|
67
64
|
info(`获取代币 ${options.token} 的交易上下文...`);
|
|
68
65
|
const context = await fetchTradeContext(options.token);
|
|
69
66
|
info(`DEX: ${context.exchangeName}, 价格: ${context.priceInSol} SOL`);
|
|
70
67
|
const wallets = buildWalletList(group);
|
|
71
|
-
const amountSOL = options.amount;
|
|
72
|
-
// Bug 6 fix: JSON 模式下抑制 SDK 的 console.log
|
|
73
68
|
if (getOutputFormat() === 'json')
|
|
74
69
|
suppressConsole();
|
|
75
70
|
info(`提交买入交易: ${wallets.length} 个钱包, 每个 ${options.amount} SOL...`);
|
|
76
71
|
const result = await executeTrades({
|
|
77
|
-
context,
|
|
78
|
-
|
|
79
|
-
tradeType: 'buy',
|
|
80
|
-
amountPerWallet: amountSOL,
|
|
81
|
-
slippage,
|
|
82
|
-
priorityFee,
|
|
72
|
+
context, wallets, tradeType: 'buy',
|
|
73
|
+
amountPerWallet: options.amount, slippage, priorityFee,
|
|
83
74
|
simulate: options.dryRun,
|
|
84
75
|
});
|
|
85
76
|
restoreConsole();
|
|
86
|
-
// 3.0h: 交易追踪 -- 成功后通过 DataSource -> TxTracker 自动记录
|
|
87
|
-
if (result.success && !options.dryRun) {
|
|
88
|
-
try {
|
|
89
|
-
const ds = getDataSource();
|
|
90
|
-
const trackingContext = {
|
|
91
|
-
ca: options.token,
|
|
92
|
-
groupId,
|
|
93
|
-
txType: 'buy',
|
|
94
|
-
wallets: wallets.map(w => w.address),
|
|
95
|
-
expectedAmountSol: amount,
|
|
96
|
-
};
|
|
97
|
-
if (result.bundleId) {
|
|
98
|
-
info('追踪 Bundle 交易结果...');
|
|
99
|
-
const trackResults = await ds.trackBundle(result.bundleId, result.txHashes || [], trackingContext, { onProgress: (status, tx) => info(`追踪: ${status} - ${tx.substring(0, 16)}...`) });
|
|
100
|
-
result.tracking = trackResults;
|
|
101
|
-
}
|
|
102
|
-
else if (result.txHashes && result.txHashes.length > 0) {
|
|
103
|
-
info('追踪交易结果...');
|
|
104
|
-
const entries = result.txHashes.map((txHash, i) => ({
|
|
105
|
-
txHash,
|
|
106
|
-
context: {
|
|
107
|
-
...trackingContext,
|
|
108
|
-
wallets: [wallets[i]?.address || wallets[0].address],
|
|
109
|
-
},
|
|
110
|
-
}));
|
|
111
|
-
const trackResults = await ds.trackBatch(entries);
|
|
112
|
-
result.tracking = trackResults;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
catch (trackErr) {
|
|
116
|
-
info(`交易追踪失败(不影响交易结果): ${trackErr.message}`);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
77
|
output(result);
|
|
120
|
-
if (!result.success && !options.dryRun)
|
|
78
|
+
if (!result.success && !options.dryRun)
|
|
121
79
|
process.exit(1);
|
|
122
|
-
}
|
|
123
80
|
}
|
|
124
81
|
catch (e) {
|
|
125
82
|
restoreConsole();
|
|
@@ -141,7 +98,6 @@ export function registerTradeCommands(program) {
|
|
|
141
98
|
.option('--dry-run', '仅模拟,不实际执行', false)
|
|
142
99
|
.action(async (options) => {
|
|
143
100
|
try {
|
|
144
|
-
// Bug 5 fix: 交易前验证密码
|
|
145
101
|
await ensurePasswordAndValidate();
|
|
146
102
|
const config = loadConfig();
|
|
147
103
|
const groupId = Number(options.group);
|
|
@@ -149,13 +105,12 @@ export function registerTradeCommands(program) {
|
|
|
149
105
|
const priorityFee = options.priorityFee
|
|
150
106
|
? Number(options.priorityFee)
|
|
151
107
|
: config.defaultPriorityFee;
|
|
152
|
-
// P1#4: 数值验证
|
|
153
108
|
if (isNaN(groupId)) {
|
|
154
109
|
error('--group 必须是有效数字');
|
|
155
110
|
process.exit(1);
|
|
156
111
|
}
|
|
157
112
|
if (isNaN(slippageBps) || slippageBps <= 0 || slippageBps > 5000) {
|
|
158
|
-
error('--slippage 必须是 1-5000 之间的数字
|
|
113
|
+
error('--slippage 必须是 1-5000 之间的数字');
|
|
159
114
|
process.exit(1);
|
|
160
115
|
}
|
|
161
116
|
if (isNaN(priorityFee) || priorityFee < 0) {
|
|
@@ -171,10 +126,8 @@ export function registerTradeCommands(program) {
|
|
|
171
126
|
error('钱包组中没有钱包');
|
|
172
127
|
process.exit(1);
|
|
173
128
|
}
|
|
174
|
-
// P0#1: 将 CLI 的 bps 值转换为 SDK 期望的百分比值
|
|
175
129
|
const slippage = slippageBps / 10;
|
|
176
|
-
//
|
|
177
|
-
// 确保无效输入(如 150%、0%、-50%)不会因网络错误而掩盖真实问题
|
|
130
|
+
// 预验证 amount 格式
|
|
178
131
|
const amountRaw = options.amount;
|
|
179
132
|
if (amountRaw.endsWith('%')) {
|
|
180
133
|
const pctVal = Number(amountRaw.replace('%', ''));
|
|
@@ -194,91 +147,38 @@ export function registerTradeCommands(program) {
|
|
|
194
147
|
const context = await fetchTradeContext(options.token);
|
|
195
148
|
info(`DEX: ${context.exchangeName}, 价格: ${context.priceInSol} SOL`);
|
|
196
149
|
const wallets = buildWalletList(group);
|
|
197
|
-
// 处理百分比和 "all" 卖出
|
|
198
|
-
// SDK sell 模式中 amount 代表代币数量(UI 单位,SDK 内部乘以 10**decimals)
|
|
199
|
-
// 需要查询每个钱包的代币余额来计算实际卖出数量
|
|
200
|
-
const amountInput = options.amount;
|
|
201
150
|
let amountPerWallet;
|
|
202
|
-
if (
|
|
203
|
-
// 查询每个钱包的代币余额
|
|
151
|
+
if (amountRaw === 'all' || amountRaw.endsWith('%')) {
|
|
204
152
|
info('查询各钱包代币余额...');
|
|
205
153
|
const balances = await Promise.all(wallets.map(w => getTokenBalance(w.address, options.token)));
|
|
206
|
-
if (
|
|
207
|
-
// 全部卖出:传每个钱包的实际余额
|
|
154
|
+
if (amountRaw === 'all') {
|
|
208
155
|
amountPerWallet = balances.map(bal => String(bal));
|
|
209
156
|
}
|
|
210
157
|
else {
|
|
211
|
-
|
|
212
|
-
const pct = Number(amountInput.replace('%', '')) / 100;
|
|
213
|
-
// P0#2: pct 已除以 100 变为小数,上限应为 1 而非 100
|
|
214
|
-
if (isNaN(pct) || pct <= 0 || pct > 1) {
|
|
215
|
-
error(`无效的百分比: ${amountInput},有效范围 1%-100%`);
|
|
216
|
-
process.exit(1);
|
|
217
|
-
}
|
|
158
|
+
const pct = Number(amountRaw.replace('%', '')) / 100;
|
|
218
159
|
amountPerWallet = balances.map(bal => String(bal * pct));
|
|
219
160
|
}
|
|
220
|
-
// 检查是否有钱包有余额
|
|
221
161
|
const hasBalance = balances.some(b => b > 0);
|
|
222
162
|
if (!hasBalance) {
|
|
223
163
|
error('所有钱包的代币余额为 0,无法卖出');
|
|
224
164
|
process.exit(1);
|
|
225
165
|
}
|
|
226
|
-
info(`各钱包卖出数量: ${amountPerWallet.map((a, i) => `钱包${i + 1}: ${a}`).join(', ')}`);
|
|
227
166
|
}
|
|
228
167
|
else {
|
|
229
|
-
|
|
230
|
-
amountPerWallet = amountInput;
|
|
168
|
+
amountPerWallet = amountRaw;
|
|
231
169
|
}
|
|
232
|
-
// Bug 6 fix: JSON 模式下抑制 SDK 的 console.log
|
|
233
170
|
if (getOutputFormat() === 'json')
|
|
234
171
|
suppressConsole();
|
|
235
172
|
info(`提交卖出交易: ${wallets.length} 个钱包...`);
|
|
236
173
|
const result = await executeTrades({
|
|
237
|
-
context,
|
|
238
|
-
|
|
239
|
-
tradeType: 'sell',
|
|
240
|
-
amountPerWallet,
|
|
241
|
-
slippage,
|
|
242
|
-
priorityFee,
|
|
174
|
+
context, wallets, tradeType: 'sell',
|
|
175
|
+
amountPerWallet, slippage, priorityFee,
|
|
243
176
|
simulate: options.dryRun,
|
|
244
177
|
});
|
|
245
178
|
restoreConsole();
|
|
246
|
-
// 3.0h: 交易追踪 -- 成功后通过 DataSource -> TxTracker 自动记录
|
|
247
|
-
if (result.success && !options.dryRun) {
|
|
248
|
-
try {
|
|
249
|
-
const ds = getDataSource();
|
|
250
|
-
const trackingContext = {
|
|
251
|
-
ca: options.token,
|
|
252
|
-
groupId,
|
|
253
|
-
txType: 'sell',
|
|
254
|
-
wallets: wallets.map(w => w.address),
|
|
255
|
-
};
|
|
256
|
-
if (result.bundleId) {
|
|
257
|
-
info('追踪 Bundle 交易结果...');
|
|
258
|
-
const trackResults = await ds.trackBundle(result.bundleId, result.txHashes || [], trackingContext, { onProgress: (status, tx) => info(`追踪: ${status} - ${tx.substring(0, 16)}...`) });
|
|
259
|
-
result.tracking = trackResults;
|
|
260
|
-
}
|
|
261
|
-
else if (result.txHashes && result.txHashes.length > 0) {
|
|
262
|
-
info('追踪交易结果...');
|
|
263
|
-
const entries = result.txHashes.map((txHash, i) => ({
|
|
264
|
-
txHash,
|
|
265
|
-
context: {
|
|
266
|
-
...trackingContext,
|
|
267
|
-
wallets: [wallets[i]?.address || wallets[0].address],
|
|
268
|
-
},
|
|
269
|
-
}));
|
|
270
|
-
const trackResults = await ds.trackBatch(entries);
|
|
271
|
-
result.tracking = trackResults;
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
catch (trackErr) {
|
|
275
|
-
info(`交易追踪失败(不影响交易结果): ${trackErr.message}`);
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
179
|
output(result);
|
|
279
|
-
if (!result.success && !options.dryRun)
|
|
180
|
+
if (!result.success && !options.dryRun)
|
|
280
181
|
process.exit(1);
|
|
281
|
-
}
|
|
282
182
|
}
|
|
283
183
|
catch (e) {
|
|
284
184
|
restoreConsole();
|
|
@@ -302,7 +202,6 @@ export function registerTradeCommands(program) {
|
|
|
302
202
|
.option('--dry-run', '仅模拟,不实际执行', false)
|
|
303
203
|
.action(async (options) => {
|
|
304
204
|
try {
|
|
305
|
-
// Bug 5 fix: 交易前验证密码
|
|
306
205
|
await ensurePasswordAndValidate();
|
|
307
206
|
const config = loadConfig();
|
|
308
207
|
const groupId = Number(options.group);
|
|
@@ -311,7 +210,6 @@ export function registerTradeCommands(program) {
|
|
|
311
210
|
const priorityFee = options.priorityFee
|
|
312
211
|
? Number(options.priorityFee)
|
|
313
212
|
: config.defaultPriorityFee;
|
|
314
|
-
// P1#4: 数值验证
|
|
315
213
|
if (isNaN(groupId)) {
|
|
316
214
|
error('--group 必须是有效数字');
|
|
317
215
|
process.exit(1);
|
|
@@ -321,20 +219,18 @@ export function registerTradeCommands(program) {
|
|
|
321
219
|
process.exit(1);
|
|
322
220
|
}
|
|
323
221
|
if (isNaN(slippageBps) || slippageBps <= 0 || slippageBps > 5000) {
|
|
324
|
-
error('--slippage 必须是 1-5000 之间的数字
|
|
222
|
+
error('--slippage 必须是 1-5000 之间的数字');
|
|
325
223
|
process.exit(1);
|
|
326
224
|
}
|
|
327
225
|
if (isNaN(priorityFee) || priorityFee < 0) {
|
|
328
226
|
error('--priority-fee 必须是非负数字');
|
|
329
227
|
process.exit(1);
|
|
330
228
|
}
|
|
331
|
-
// P1#5: --type 校验
|
|
332
229
|
const validTypes = ['buy', 'sell', 'buyWithSell'];
|
|
333
230
|
if (!validTypes.includes(options.type)) {
|
|
334
231
|
error(`--type 无效: "${options.type}",必须是 buy | sell | buyWithSell`);
|
|
335
232
|
process.exit(1);
|
|
336
233
|
}
|
|
337
|
-
// P1#6: --mode 校验
|
|
338
234
|
const validModes = ['1b1s', '1b2s', '1b3s', '2b1s', '3b1s'];
|
|
339
235
|
if (!validModes.includes(options.mode)) {
|
|
340
236
|
error(`--mode 无效: "${options.mode}",必须是 1b1s | 1b2s | 1b3s | 2b1s | 3b1s`);
|
|
@@ -345,65 +241,23 @@ export function registerTradeCommands(program) {
|
|
|
345
241
|
error(`钱包组 ${groupId} 不存在`);
|
|
346
242
|
process.exit(1);
|
|
347
243
|
}
|
|
348
|
-
// P0#1: 将 CLI 的 bps 值转换为 SDK 期望的百分比值
|
|
349
244
|
const slippage = slippageBps / 10;
|
|
350
245
|
info(`获取代币 ${options.token} 的交易上下文...`);
|
|
351
246
|
const context = await fetchTradeContext(options.token);
|
|
352
247
|
info(`DEX: ${context.exchangeName}, 价格: ${context.priceInSol} SOL`);
|
|
353
248
|
const wallets = buildWalletList(group);
|
|
354
|
-
const amountSOL = options.amount;
|
|
355
|
-
// Bug 6 fix: JSON 模式下抑制 SDK 的 console.log
|
|
356
249
|
if (getOutputFormat() === 'json')
|
|
357
250
|
suppressConsole();
|
|
358
251
|
info(`提交批量交易: 模式 ${options.mode}, 类型 ${options.type}, ${wallets.length} 钱包...`);
|
|
359
252
|
const result = await executeTrades({
|
|
360
|
-
context,
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
amountPerWallet: amountSOL,
|
|
364
|
-
slippage,
|
|
365
|
-
priorityFee,
|
|
366
|
-
volumeType: options.mode,
|
|
367
|
-
simulate: options.dryRun,
|
|
253
|
+
context, wallets, tradeType: options.type,
|
|
254
|
+
amountPerWallet: options.amount, slippage, priorityFee,
|
|
255
|
+
volumeType: options.mode, simulate: options.dryRun,
|
|
368
256
|
});
|
|
369
257
|
restoreConsole();
|
|
370
|
-
// 3.0h: 交易追踪 -- 成功后通过 DataSource -> TxTracker 自动记录
|
|
371
|
-
if (result.success && !options.dryRun) {
|
|
372
|
-
try {
|
|
373
|
-
const ds = getDataSource();
|
|
374
|
-
const trackingContext = {
|
|
375
|
-
ca: options.token,
|
|
376
|
-
groupId,
|
|
377
|
-
txType: 'buy', // batch 模式主要以 buy 为基准记录
|
|
378
|
-
wallets: wallets.map(w => w.address),
|
|
379
|
-
expectedAmountSol: amount,
|
|
380
|
-
};
|
|
381
|
-
if (result.bundleId) {
|
|
382
|
-
info('追踪 Bundle 交易结果...');
|
|
383
|
-
const trackResults = await ds.trackBundle(result.bundleId, result.txHashes || [], trackingContext, { onProgress: (status, tx) => info(`追踪: ${status} - ${tx.substring(0, 16)}...`) });
|
|
384
|
-
result.tracking = trackResults;
|
|
385
|
-
}
|
|
386
|
-
else if (result.txHashes && result.txHashes.length > 0) {
|
|
387
|
-
info('追踪交易结果...');
|
|
388
|
-
const entries = result.txHashes.map((txHash, i) => ({
|
|
389
|
-
txHash,
|
|
390
|
-
context: {
|
|
391
|
-
...trackingContext,
|
|
392
|
-
wallets: [wallets[i]?.address || wallets[0].address],
|
|
393
|
-
},
|
|
394
|
-
}));
|
|
395
|
-
const trackResults = await ds.trackBatch(entries);
|
|
396
|
-
result.tracking = trackResults;
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
catch (trackErr) {
|
|
400
|
-
info(`交易追踪失败(不影响交易结果): ${trackErr.message}`);
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
258
|
output(result);
|
|
404
|
-
if (!result.success && !options.dryRun)
|
|
259
|
+
if (!result.success && !options.dryRun)
|
|
405
260
|
process.exit(1);
|
|
406
|
-
}
|
|
407
261
|
}
|
|
408
262
|
catch (e) {
|
|
409
263
|
restoreConsole();
|
|
@@ -425,7 +279,6 @@ export function registerTradeCommands(program) {
|
|
|
425
279
|
.option('--dry-run', '仅模拟,不实际执行', false)
|
|
426
280
|
.action(async (options) => {
|
|
427
281
|
try {
|
|
428
|
-
// Bug 5 fix: 交易前验证密码
|
|
429
282
|
await ensurePasswordAndValidate();
|
|
430
283
|
const config = loadConfig();
|
|
431
284
|
const groupId = Number(options.group);
|
|
@@ -433,13 +286,12 @@ export function registerTradeCommands(program) {
|
|
|
433
286
|
const priorityFee = options.priorityFee
|
|
434
287
|
? Number(options.priorityFee)
|
|
435
288
|
: config.defaultPriorityFee;
|
|
436
|
-
// P1#4: 数值验证
|
|
437
289
|
if (isNaN(groupId)) {
|
|
438
290
|
error('--group 必须是有效数字');
|
|
439
291
|
process.exit(1);
|
|
440
292
|
}
|
|
441
293
|
if (isNaN(slippageBps) || slippageBps <= 0 || slippageBps > 5000) {
|
|
442
|
-
error('--slippage 必须是 1-5000 之间的数字
|
|
294
|
+
error('--slippage 必须是 1-5000 之间的数字');
|
|
443
295
|
process.exit(1);
|
|
444
296
|
}
|
|
445
297
|
if (isNaN(priorityFee) || priorityFee < 0) {
|
|
@@ -452,10 +304,9 @@ export function registerTradeCommands(program) {
|
|
|
452
304
|
process.exit(1);
|
|
453
305
|
}
|
|
454
306
|
const amounts = options.amounts.split(',').map(Number);
|
|
455
|
-
// P1#7: 验证 --amounts 中的每个金额
|
|
456
307
|
for (let i = 0; i < amounts.length; i++) {
|
|
457
308
|
if (isNaN(amounts[i]) || amounts[i] <= 0) {
|
|
458
|
-
error(`--amounts 中第 ${i + 1}
|
|
309
|
+
error(`--amounts 中第 ${i + 1} 个金额无效`);
|
|
459
310
|
process.exit(1);
|
|
460
311
|
}
|
|
461
312
|
}
|
|
@@ -463,63 +314,23 @@ export function registerTradeCommands(program) {
|
|
|
463
314
|
error(`金额数量 (${amounts.length}) 与钱包数量 (${group.wallets.length}) 不匹配`);
|
|
464
315
|
process.exit(1);
|
|
465
316
|
}
|
|
466
|
-
// P0#1: 将 CLI 的 bps 值转换为 SDK 期望的百分比值
|
|
467
317
|
const slippage = slippageBps / 10;
|
|
468
318
|
info(`获取代币 ${options.token} 的交易上下文...`);
|
|
469
319
|
const context = await fetchTradeContext(options.token);
|
|
470
320
|
info(`DEX: ${context.exchangeName}, 价格: ${context.priceInSol} SOL`);
|
|
471
321
|
const wallets = buildWalletList(group);
|
|
472
|
-
const amountStrings = amounts.map(a => String(a));
|
|
473
|
-
// Bug 6 fix: JSON 模式下抑制 SDK 的 console.log
|
|
474
322
|
if (getOutputFormat() === 'json')
|
|
475
323
|
suppressConsole();
|
|
476
324
|
info(`提交狙击交易: ${wallets.length} 个钱包...`);
|
|
477
325
|
const result = await executeTrades({
|
|
478
|
-
context,
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
amountPerWallet: amountStrings,
|
|
482
|
-
slippage,
|
|
483
|
-
priorityFee,
|
|
484
|
-
simulate: options.dryRun,
|
|
326
|
+
context, wallets, tradeType: 'sniperBuy',
|
|
327
|
+
amountPerWallet: amounts.map(a => String(a)),
|
|
328
|
+
slippage, priorityFee, simulate: options.dryRun,
|
|
485
329
|
});
|
|
486
330
|
restoreConsole();
|
|
487
|
-
// 3.0h: 交易追踪 -- 狙击使用 Jito Bundle,通过 trackBundle 追踪
|
|
488
|
-
if (result.success && !options.dryRun) {
|
|
489
|
-
try {
|
|
490
|
-
const ds = getDataSource();
|
|
491
|
-
const trackingContext = {
|
|
492
|
-
ca: options.token,
|
|
493
|
-
groupId,
|
|
494
|
-
txType: 'buy',
|
|
495
|
-
wallets: wallets.map(w => w.address),
|
|
496
|
-
};
|
|
497
|
-
if (result.bundleId) {
|
|
498
|
-
info('追踪 Bundle 交易结果...');
|
|
499
|
-
const trackResults = await ds.trackBundle(result.bundleId, result.txHashes || [], trackingContext, { onProgress: (status, tx) => info(`追踪: ${status} - ${tx.substring(0, 16)}...`) });
|
|
500
|
-
result.tracking = trackResults;
|
|
501
|
-
}
|
|
502
|
-
else if (result.txHashes && result.txHashes.length > 0) {
|
|
503
|
-
info('追踪交易结果...');
|
|
504
|
-
const entries = result.txHashes.map((txHash, i) => ({
|
|
505
|
-
txHash,
|
|
506
|
-
context: {
|
|
507
|
-
...trackingContext,
|
|
508
|
-
wallets: [wallets[i]?.address || wallets[0].address],
|
|
509
|
-
},
|
|
510
|
-
}));
|
|
511
|
-
const trackResults = await ds.trackBatch(entries);
|
|
512
|
-
result.tracking = trackResults;
|
|
513
|
-
}
|
|
514
|
-
}
|
|
515
|
-
catch (trackErr) {
|
|
516
|
-
info(`交易追踪失败(不影响交易结果): ${trackErr.message}`);
|
|
517
|
-
}
|
|
518
|
-
}
|
|
519
331
|
output(result);
|
|
520
|
-
if (!result.success && !options.dryRun)
|
|
332
|
+
if (!result.success && !options.dryRun)
|
|
521
333
|
process.exit(1);
|
|
522
|
-
}
|
|
523
334
|
}
|
|
524
335
|
catch (e) {
|
|
525
336
|
restoreConsole();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/trade/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/trade/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/transfer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/transfer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6d/D"}
|
|
@@ -14,39 +14,8 @@
|
|
|
14
14
|
import { getGroup, getAllGroups, getDecryptedPrivateKey, ensurePasswordAndValidate } from '../../wallet-store.js';
|
|
15
15
|
import { loadConfig } from '../../config.js';
|
|
16
16
|
import { output, error, info, suppressConsole, restoreConsole, getOutputFormat } from '../../output.js';
|
|
17
|
-
import { executeSOLTransfer, executeBatchSOLTransfer, executeCollectSOL, buildWalletList, sleep, } from '../../adapters/sdk-adapter.js';
|
|
17
|
+
import { executeSOLTransfer, executeSOLTransferMultiHop, executeBatchSOLTransfer, executeCollectSOL, buildWalletList, sleep, } from '../../adapters/sdk-adapter.js';
|
|
18
18
|
import { getDataSource } from '../../data-source.js';
|
|
19
|
-
// ============================================================
|
|
20
|
-
// TxTracker 集成辅助函数
|
|
21
|
-
// ============================================================
|
|
22
|
-
/**
|
|
23
|
-
* 追踪转账交易结果并写入 DataStore。
|
|
24
|
-
*/
|
|
25
|
-
async function trackTransferResults(results, tokenCA, groupId, txType) {
|
|
26
|
-
const successResults = results.filter(r => r.success && r.txHash);
|
|
27
|
-
if (successResults.length === 0)
|
|
28
|
-
return;
|
|
29
|
-
try {
|
|
30
|
-
const ds = getDataSource();
|
|
31
|
-
const entries = successResults.map(r => ({
|
|
32
|
-
txHash: r.txHash,
|
|
33
|
-
context: {
|
|
34
|
-
ca: tokenCA,
|
|
35
|
-
groupId,
|
|
36
|
-
txType,
|
|
37
|
-
wallets: [r.from],
|
|
38
|
-
expectedAmountSol: r.token === 'SOL' ? r.amount : undefined,
|
|
39
|
-
},
|
|
40
|
-
}));
|
|
41
|
-
info(`追踪 ${entries.length} 笔转账交易...`);
|
|
42
|
-
await ds.trackBatch(entries, {
|
|
43
|
-
onProgress: (status, tx) => info(`追踪: ${status} - ${tx.substring(0, 16)}...`),
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
catch (trackErr) {
|
|
47
|
-
info(`转账追踪失败(不影响交易结果): ${trackErr.message}`);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
19
|
export function registerTransferCommands(program) {
|
|
51
20
|
const transferCmd = program
|
|
52
21
|
.command('transfer')
|
|
@@ -144,8 +113,6 @@ export function registerTransferCommands(program) {
|
|
|
144
113
|
priorityFee,
|
|
145
114
|
});
|
|
146
115
|
restoreConsole();
|
|
147
|
-
// TxTracker 集成: 追踪收集交易
|
|
148
|
-
await trackTransferResults(results, 'SOL', groupId, 'transfer_in');
|
|
149
116
|
const successCount = results.filter(r => r.success).length;
|
|
150
117
|
output({
|
|
151
118
|
success: successCount > 0,
|
|
@@ -185,6 +152,8 @@ export function registerTransferCommands(program) {
|
|
|
185
152
|
.option('--max <n>', '最大值(random 模式)')
|
|
186
153
|
.option('--priority-fee <sol>', '优先费 (SOL)')
|
|
187
154
|
.option('--batch-size <n>', '每批处理数量', '20')
|
|
155
|
+
.option('--multi-hop', '启用多跳转账(通过6个临时中转钱包,仅支持SOL)', false)
|
|
156
|
+
.option('--hop-count <n>', '中转钱包数量(默认6)', '6')
|
|
188
157
|
.option('--dry-run', '仅模拟,不实际执行', false)
|
|
189
158
|
.action(async (options) => {
|
|
190
159
|
try {
|
|
@@ -286,16 +255,16 @@ export function registerTransferCommands(program) {
|
|
|
286
255
|
error(`余额不足: 需要约 ${totalNeeded.toFixed(4)} SOL, 当前 ${balance.toFixed(4)} SOL`);
|
|
287
256
|
process.exit(1);
|
|
288
257
|
}
|
|
289
|
-
info(`执行 SOL 分发: ${options.from} -> ${targets.length} 个钱包, 每个约 ${options.value} SOL`);
|
|
258
|
+
info(`执行 SOL 分发: ${options.from} -> ${targets.length} 个钱包, 每个约 ${options.value} SOL${options.multiHop ? ' (多跳模式)' : ''}`);
|
|
290
259
|
const results = await executeBatchSOLTransfer({
|
|
291
260
|
fromPrivateKey: fromPrivateKey,
|
|
292
261
|
targets,
|
|
293
262
|
priorityFee,
|
|
294
263
|
batchSize,
|
|
264
|
+
multiHop: Boolean(options.multiHop),
|
|
265
|
+
hopCount: Number(options.hopCount || 6),
|
|
295
266
|
});
|
|
296
267
|
restoreConsole();
|
|
297
|
-
// TxTracker 集成: 追踪分发交易
|
|
298
|
-
await trackTransferResults(results, 'SOL', fromGroupId || toGroupId, 'transfer_out');
|
|
299
268
|
const successCount = results.filter(r => r.success).length;
|
|
300
269
|
output({
|
|
301
270
|
success: successCount > 0,
|
|
@@ -333,6 +302,8 @@ export function registerTransferCommands(program) {
|
|
|
333
302
|
.option('--max <n>', '最大值(random 模式)')
|
|
334
303
|
.option('--interval <ms>', '转账间隔 (毫秒)', '500')
|
|
335
304
|
.option('--priority-fee <sol>', '优先费 (SOL)')
|
|
305
|
+
.option('--multi-hop', '启用多跳转账(通过6个临时中转钱包,仅支持SOL)', false)
|
|
306
|
+
.option('--hop-count <n>', '中转钱包数量(默认6)', '6')
|
|
336
307
|
.option('--dry-run', '仅模拟,不实际执行', false)
|
|
337
308
|
.action(async (options) => {
|
|
338
309
|
try {
|
|
@@ -432,7 +403,7 @@ export function registerTransferCommands(program) {
|
|
|
432
403
|
suppressConsole();
|
|
433
404
|
if (options.token === 'SOL') {
|
|
434
405
|
const results = [];
|
|
435
|
-
info(`执行多对多 SOL 转账: ${pairCount}
|
|
406
|
+
info(`执行多对多 SOL 转账: ${pairCount} 组配对${options.multiHop ? ' (多跳模式)' : ''}`);
|
|
436
407
|
for (let i = 0; i < pairCount; i++) {
|
|
437
408
|
const fromWallet = fromGroup.wallets[i];
|
|
438
409
|
const toWallet = toGroup.wallets[i];
|
|
@@ -468,11 +439,13 @@ export function registerTransferCommands(program) {
|
|
|
468
439
|
});
|
|
469
440
|
continue;
|
|
470
441
|
}
|
|
471
|
-
const
|
|
442
|
+
const transferFn = options.multiHop ? executeSOLTransferMultiHop : executeSOLTransfer;
|
|
443
|
+
const result = await transferFn({
|
|
472
444
|
fromPrivateKey: getDecryptedPrivateKey(fromWallet),
|
|
473
445
|
toAddress: toWallet.walletAddress,
|
|
474
446
|
amountSOL,
|
|
475
447
|
priorityFee,
|
|
448
|
+
...(options.multiHop ? { hopCount: Number(options.hopCount || 6) } : {}),
|
|
476
449
|
});
|
|
477
450
|
results.push(result);
|
|
478
451
|
if (i < pairCount - 1) {
|
|
@@ -480,8 +453,6 @@ export function registerTransferCommands(program) {
|
|
|
480
453
|
}
|
|
481
454
|
}
|
|
482
455
|
restoreConsole();
|
|
483
|
-
// TxTracker 集成: 追踪多对多转账
|
|
484
|
-
await trackTransferResults(results, 'SOL', fromGroupId, 'transfer_out');
|
|
485
456
|
const successCount = results.filter((r) => r.success).length;
|
|
486
457
|
output({
|
|
487
458
|
success: successCount > 0,
|