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.
Files changed (34) hide show
  1. package/README.md +1 -6
  2. package/dist/src/adapters/connection.js +2 -2
  3. package/dist/src/adapters/rpc-adapter.js +2 -2
  4. package/dist/src/adapters/sdk-adapter.d.ts +17 -0
  5. package/dist/src/adapters/sdk-adapter.d.ts.map +1 -1
  6. package/dist/src/adapters/sdk-adapter.js +130 -13
  7. package/dist/src/adapters/sdk-adapter.js.map +1 -1
  8. package/dist/src/commands/sniper/index.d.ts +1 -15
  9. package/dist/src/commands/sniper/index.d.ts.map +1 -1
  10. package/dist/src/commands/sniper/index.js +2 -291
  11. package/dist/src/commands/sniper/index.js.map +1 -1
  12. package/dist/src/commands/tools/index.d.ts.map +1 -1
  13. package/dist/src/commands/tools/index.js +58 -94
  14. package/dist/src/commands/tools/index.js.map +1 -1
  15. package/dist/src/commands/trade/index.d.ts +2 -0
  16. package/dist/src/commands/trade/index.d.ts.map +1 -1
  17. package/dist/src/commands/trade/index.js +26 -215
  18. package/dist/src/commands/trade/index.js.map +1 -1
  19. package/dist/src/commands/transfer/index.d.ts.map +1 -1
  20. package/dist/src/commands/transfer/index.js +12 -41
  21. package/dist/src/commands/transfer/index.js.map +1 -1
  22. package/dist/src/index.d.ts.map +1 -1
  23. package/dist/src/index.js +8 -3
  24. package/dist/src/index.js.map +1 -1
  25. package/dist/src/sol-sdk/batch/create.js +1 -1
  26. package/dist/src/sol-sdk/batch/external-sniper.d.ts +1 -26
  27. package/dist/src/sol-sdk/batch/external-sniper.d.ts.map +1 -1
  28. package/dist/src/sol-sdk/batch/external-sniper.js +1 -156
  29. package/dist/src/sol-sdk/batch/external-sniper.js.map +1 -1
  30. package/dist/src/sol-sdk/pump/instructions/sell.d.ts.map +1 -1
  31. package/dist/src/sol-sdk/pump/instructions/sell.js +2 -1
  32. package/dist/src/sol-sdk/pump/instructions/sell.js.map +1 -1
  33. package/dist/src/sol-sdk/rpc/index.js +2 -2
  34. 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 之间的数字 (bps, 5000 = 50%)');
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
- wallets,
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 之间的数字 (bps, 5000 = 50%)');
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
- // Bug 2 fix: 在 fetchTradeContext 之前预验证 amount 格式
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 (amountInput === 'all' || amountInput.endsWith('%')) {
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 (amountInput === 'all') {
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
- wallets,
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 之间的数字 (bps, 5000 = 50%)');
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
- wallets,
362
- tradeType: options.type,
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 之间的数字 (bps, 5000 = 50%)');
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} 个金额无效: "${options.amounts.split(',')[i]}",必须是大于 0 的数字`);
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
- wallets,
480
- tradeType: 'sniperBuy',
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;AAoDpC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8d/D"}
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 result = await executeSOLTransfer({
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,