pump-trader 1.0.0 → 1.0.1

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 (4) hide show
  1. package/README.md +24 -2
  2. package/index.js +83 -4
  3. package/index.ts +83 -4
  4. package/package.json +1 -1
package/README.md CHANGED
@@ -162,9 +162,31 @@ console.log(completed); // 是否完成内盘
162
162
 
163
163
  ### 查询余额
164
164
 
165
+ #### 查询单个代币余额
166
+
167
+ ```javascript
168
+ // 查询指定代币的余额
169
+ const balance = await trader.tokenBalance(tokenAddr);
170
+ console.log(balance); // 返回数字,例如:123.45
171
+ ```
172
+
173
+ #### 查询所有代币余额
174
+
175
+ ```javascript
176
+ // 查询账户所有的代币(余额 > 0)
177
+ const allTokens = await trader.tokenBalance();
178
+
179
+ // 返回数组:[{ mint, amount, decimals, uiAmount }, ...]
180
+ allTokens.forEach((token) => {
181
+ console.log(`${token.mint}: ${token.uiAmount}`);
182
+ });
183
+ ```
184
+
185
+ #### 使用专用方法
186
+
165
187
  ```javascript
166
- // 代币余额
167
- const tokenBalance = await trader.tokenBalance(tokenAddr);
188
+ // 直接调用方法查询所有代币
189
+ const allBalances = await trader.getAllTokenBalances();
168
190
 
169
191
  // SOL 余额
170
192
  const solBalance = await trader.solBalance();
package/index.js CHANGED
@@ -371,14 +371,93 @@ export class PumpTrader {
371
371
 
372
372
  /* ---------- 余额查询 ---------- */
373
373
 
374
- async tokenBalance(tokenAddr) {
375
- const mint = new PublicKey(tokenAddr);
374
+ /**
375
+ * 查询代币余额
376
+ * @param {string} tokenAddr - 代币地址(可选),如果不传则返回所有代币
377
+ * @returns {Promise<number|Array>} 如果传入地址则返回该代币的余额数字,否则返回所有代币的详细信息
378
+ */
379
+ async tokenBalance(tokenAddr = null) {
380
+ if (tokenAddr) {
381
+ // 查询单个代币
382
+ const mint = new PublicKey(tokenAddr);
383
+ const tokenAccounts = await this.connection.getParsedTokenAccountsByOwner(
384
+ this.wallet.publicKey,
385
+ { mint }
386
+ );
387
+ return tokenAccounts.value[0]?.account.data.parsed.info.tokenAmount.uiAmount || 0;
388
+ } else {
389
+ // 查询所有代币
390
+ return this.getAllTokenBalances();
391
+ }
392
+ }
393
+
394
+ /**
395
+ * 获取账户所有代币余额(仅显示余额 > 0 的)
396
+ * @returns {Promise<Array>} 代币信息数组,包含mint地址、余额等信息
397
+ */
398
+ async getAllTokenBalances() {
376
399
  const tokenAccounts = await this.connection.getParsedTokenAccountsByOwner(
377
400
  this.wallet.publicKey,
378
- { mint }
401
+ { programId: TOKEN_PROGRAM_ID }
379
402
  );
380
403
 
381
- return tokenAccounts.value[0]?.account.data.parsed.info.tokenAmount.uiAmount || 0;
404
+ const balances = tokenAccounts.value
405
+ .map((account) => {
406
+ const parsed = account.account.data.parsed;
407
+ if (parsed.type !== 'account') return null;
408
+
409
+ const tokenAmount = parsed.info.tokenAmount;
410
+ if (Number(tokenAmount.amount) === 0) return null;
411
+
412
+ return {
413
+ mint: parsed.info.mint,
414
+ amount: BigInt(tokenAmount.amount),
415
+ decimals: tokenAmount.decimals,
416
+ uiAmount: tokenAmount.uiAmount || 0
417
+ };
418
+ })
419
+ .filter((item) => item !== null);
420
+
421
+ // 同时查询 TOKEN_2022_PROGRAM_ID
422
+ const token2022Accounts = await this.connection.getParsedTokenAccountsByOwner(
423
+ this.wallet.publicKey,
424
+ { programId: TOKEN_2022_PROGRAM_ID }
425
+ );
426
+
427
+ const token2022Balances = token2022Accounts.value
428
+ .map((account) => {
429
+ const parsed = account.account.data.parsed;
430
+ if (parsed.type !== 'account') return null;
431
+
432
+ const tokenAmount = parsed.info.tokenAmount;
433
+ if (Number(tokenAmount.amount) === 0) return null;
434
+
435
+ return {
436
+ mint: parsed.info.mint,
437
+ amount: BigInt(tokenAmount.amount),
438
+ decimals: tokenAmount.decimals,
439
+ uiAmount: tokenAmount.uiAmount || 0
440
+ };
441
+ })
442
+ .filter((item) => item !== null);
443
+
444
+ // 合并并去重
445
+ const allBalances = [...balances, ...token2022Balances];
446
+ const seen = new Set();
447
+ const uniqueBalances = allBalances
448
+ .filter((b) => {
449
+ if (seen.has(b.mint)) return false;
450
+ seen.add(b.mint);
451
+ return true;
452
+ })
453
+ .map((b) => ({
454
+ mint: b.mint,
455
+ amount: Number(b.amount),
456
+ decimals: b.decimals,
457
+ uiAmount: b.uiAmount
458
+ }));
459
+
460
+ return uniqueBalances;
382
461
  }
383
462
 
384
463
  async solBalance() {
package/index.ts CHANGED
@@ -469,14 +469,93 @@ export class PumpTrader {
469
469
 
470
470
  /* ---------- 余额查询 ---------- */
471
471
 
472
- async tokenBalance(tokenAddr: string): Promise<number> {
473
- const mint = new PublicKey(tokenAddr);
472
+ /**
473
+ * 查询代币余额
474
+ * @param tokenAddr - 代币地址(可选),如果不传则返回所有代币
475
+ * @returns 如果传入地址则返回该代币的余额数字,否则返回所有代币的详细信息
476
+ */
477
+ async tokenBalance(tokenAddr?: string): Promise<number | Array<{ mint: string; amount: number; decimals: number; uiAmount: number }>> {
478
+ if (tokenAddr) {
479
+ // 查询单个代币
480
+ const mint = new PublicKey(tokenAddr);
481
+ const tokenAccounts = await this.connection.getParsedTokenAccountsByOwner(
482
+ this.wallet.publicKey,
483
+ { mint }
484
+ );
485
+ return tokenAccounts.value[0]?.account.data.parsed.info.tokenAmount.uiAmount || 0;
486
+ } else {
487
+ // 查询所有代币
488
+ return this.getAllTokenBalances();
489
+ }
490
+ }
491
+
492
+ /**
493
+ * 获取账户所有代币余额(仅显示余额 > 0 的)
494
+ * @returns 代币信息数组,包含mint地址、余额等信息
495
+ */
496
+ async getAllTokenBalances(): Promise<Array<{ mint: string; amount: number; decimals: number; uiAmount: number }>> {
474
497
  const tokenAccounts = await this.connection.getParsedTokenAccountsByOwner(
475
498
  this.wallet.publicKey,
476
- { mint }
499
+ { programId: TOKEN_PROGRAM_ID }
477
500
  );
478
501
 
479
- return tokenAccounts.value[0]?.account.data.parsed.info.tokenAmount.uiAmount || 0;
502
+ const balances = tokenAccounts.value
503
+ .map((account) => {
504
+ const parsed = account.account.data.parsed;
505
+ if (parsed.type !== 'account') return null;
506
+
507
+ const tokenAmount = parsed.info.tokenAmount;
508
+ if (Number(tokenAmount.amount) === 0) return null; // 跳过余额为0的
509
+
510
+ return {
511
+ mint: parsed.info.mint,
512
+ amount: BigInt(tokenAmount.amount),
513
+ decimals: tokenAmount.decimals,
514
+ uiAmount: tokenAmount.uiAmount || 0
515
+ };
516
+ })
517
+ .filter((item) => item !== null) as Array<{ mint: string; amount: bigint; decimals: number; uiAmount: number }>;
518
+
519
+ // 同时查询 TOKEN_2022_PROGRAM_ID
520
+ const token2022Accounts = await this.connection.getParsedTokenAccountsByOwner(
521
+ this.wallet.publicKey,
522
+ { programId: TOKEN_2022_PROGRAM_ID }
523
+ );
524
+
525
+ const token2022Balances = token2022Accounts.value
526
+ .map((account) => {
527
+ const parsed = account.account.data.parsed;
528
+ if (parsed.type !== 'account') return null;
529
+
530
+ const tokenAmount = parsed.info.tokenAmount;
531
+ if (Number(tokenAmount.amount) === 0) return null; // 跳过余额为0的
532
+
533
+ return {
534
+ mint: parsed.info.mint,
535
+ amount: BigInt(tokenAmount.amount),
536
+ decimals: tokenAmount.decimals,
537
+ uiAmount: tokenAmount.uiAmount || 0
538
+ };
539
+ })
540
+ .filter((item) => item !== null) as Array<{ mint: string; amount: bigint; decimals: number; uiAmount: number }>;
541
+
542
+ // 合并并去重
543
+ const allBalances = [...balances, ...token2022Balances];
544
+ const seen = new Set<string>();
545
+ const uniqueBalances = allBalances
546
+ .filter((b) => {
547
+ if (seen.has(b.mint)) return false;
548
+ seen.add(b.mint);
549
+ return true;
550
+ })
551
+ .map((b) => ({
552
+ mint: b.mint,
553
+ amount: Number(b.amount),
554
+ decimals: b.decimals,
555
+ uiAmount: b.uiAmount
556
+ }));
557
+
558
+ return uniqueBalances;
480
559
  }
481
560
 
482
561
  async solBalance(): Promise<number> {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pump-trader",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "PumpFun 交易库 - 自动判断 Token Program 和内盘/外盘",
5
5
  "type": "module",
6
6
  "main": "./index.js",